diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2023-03-20 14:05:13 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-20 14:05:13 -0400 |
commit | cd53ab5427811bddbed1c30d3733e1df87bb23f9 (patch) | |
tree | 0e2ea8e1b45f2d1d4acd20b666ae1d52d40940c6 /ext/node/polyfills/02_init.js | |
parent | d78db7c0910aded010c2faee9a8c0f128f513985 (diff) |
refactor(ext/node): untangle dependencies between js files (#18284)
Moving some code around in `ext/node` is it's a bit better well defined
and makes it possible for others to embed it.
I expect to see no difference in startup perf with this change.
Diffstat (limited to 'ext/node/polyfills/02_init.js')
-rw-r--r-- | ext/node/polyfills/02_init.js | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/ext/node/polyfills/02_init.js b/ext/node/polyfills/02_init.js new file mode 100644 index 000000000..d419c3bca --- /dev/null +++ b/ext/node/polyfills/02_init.js @@ -0,0 +1,62 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. + +// deno-lint-ignore-file + +const internals = globalThis.__bootstrap.internals; +const requireImpl = internals.requireImpl; +const primordials = globalThis.__bootstrap.primordials; +const { ObjectDefineProperty } = primordials; +import { nodeGlobals, nodeGlobalThis } from "ext:deno_node/00_globals.js"; +import "ext:deno_node/01_require.js"; + +let initialized = false; + +function initialize( + nodeGlobalThisName, + usesLocalNodeModulesDir, + argv0, +) { + if (initialized) { + throw Error("Node runtime already initialized"); + } + initialized = true; + if (usesLocalNodeModulesDir) { + requireImpl.setUsesLocalNodeModulesDir(); + } + const nativeModuleExports = requireImpl.nativeModuleExports; + nodeGlobals.Buffer = nativeModuleExports["buffer"].Buffer; + nodeGlobals.clearImmediate = nativeModuleExports["timers"].clearImmediate; + nodeGlobals.clearInterval = nativeModuleExports["timers"].clearInterval; + nodeGlobals.clearTimeout = nativeModuleExports["timers"].clearTimeout; + nodeGlobals.console = nativeModuleExports["console"]; + nodeGlobals.global = nodeGlobalThis; + nodeGlobals.process = nativeModuleExports["process"]; + nodeGlobals.setImmediate = nativeModuleExports["timers"].setImmediate; + nodeGlobals.setInterval = nativeModuleExports["timers"].setInterval; + nodeGlobals.setTimeout = nativeModuleExports["timers"].setTimeout; + + // add a hidden global for the esm code to use in order to reliably + // get node's globalThis + ObjectDefineProperty(globalThis, nodeGlobalThisName, { + enumerable: false, + writable: false, + value: nodeGlobalThis, + }); + // FIXME(bartlomieju): not nice to depend on `Deno` namespace here + // but it's the only way to get `args` and `version` and this point. + internals.__bootstrapNodeProcess(argv0, Deno.args, Deno.version); + // `Deno[Deno.internal].requireImpl` will be unreachable after this line. + delete internals.requireImpl; +} + +function loadCjsModule(moduleName, isMain, inspectBrk) { + if (inspectBrk) { + requireImpl.setInspectBrk(); + } + requireImpl.Module._load(moduleName, null, { main: isMain }); +} + +internals.node = { + initialize, + loadCjsModule, +}; |