summaryrefslogtreecommitdiff
path: root/ext/node/polyfills/02_init.js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/node/polyfills/02_init.js')
-rw-r--r--ext/node/polyfills/02_init.js62
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,
+};