Serve ES modules to require() as synchronously evaluable functions
require() of an ES module has to evaluate it on the guest's own thread without the browser's module linker, which only runs asynchronously. The loadEsmSync syscall hands the runtime what it needs for one module in one round trip: the source as a function, its export plan, its import bindings, and every request already resolved with the import conditions, as Node resolves inside a required graph. The function form comes from es-module-lexer alone. Import and export-from statements, export keywords and export lists are blanked, and import.meta, import() and `export default` are replaced, all at the same width, so every line and column after the first is the source's own and stack frames point at the guest's code. Import bindings become closure variables the runtime assigns, which V8 resolves statically; the sketch measured a `with` scope at 37x to 100x slower in hot code. Results are cached by stat version like the served module bytes, and a TypeScript module or dependency waits for the strip engine as loadModule does. kernel.js grows by 3,946 bytes min (1,213 brotli). tests/function-form.spec.ts checks positions over every fixture module and @emnapi/core 2.0.0-beta.2, read from the tarball cache, whose exact export plan it asserts.