diff options
author | Leo Kettmeir <crowlkats@toaxl.com> | 2023-02-07 20:22:46 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-07 20:22:46 +0100 |
commit | b4aa1530970f7b9cc4e6f2f27e077852c4e178d3 (patch) | |
tree | 3d008912affe8550692183bd2697a386db5e3c79 /ext/node/01_node.js | |
parent | 65500f36e870b4ada3996b06aa287e30177d21a3 (diff) |
refactor: Use ES modules for internal runtime code (#17648)
This PR refactors all internal js files (except core) to be written as
ES modules.
`__bootstrap`has been mostly replaced with static imports in form in
`internal:[path to file from repo root]`.
To specify if files are ESM, an `esm` method has been added to
`Extension`, similar to the `js` method.
A new ModuleLoader called `InternalModuleLoader` has been added to
enable the loading of internal specifiers, which is used in all
situations except when a snapshot is only loaded, and not a new one is
created from it.
---------
Co-authored-by: Bartek IwaĆczuk <biwanczuk@gmail.com>
Diffstat (limited to 'ext/node/01_node.js')
-rw-r--r-- | ext/node/01_node.js | 229 |
1 files changed, 112 insertions, 117 deletions
diff --git a/ext/node/01_node.js b/ext/node/01_node.js index 4ed5b3eda..de27c5180 100644 --- a/ext/node/01_node.js +++ b/ext/node/01_node.js @@ -2,127 +2,122 @@ // deno-lint-ignore-file -"use strict"; +const internals = globalThis.__bootstrap.internals; +const primordials = globalThis.__bootstrap.primordials; +const { + ArrayPrototypePush, + ArrayPrototypeFilter, + ObjectEntries, + ObjectCreate, + ObjectDefineProperty, + Proxy, + ReflectDefineProperty, + ReflectGetOwnPropertyDescriptor, + ReflectOwnKeys, + Set, + SetPrototypeHas, +} = primordials; -((window) => { - const { - ArrayPrototypePush, - ArrayPrototypeFilter, - ObjectEntries, - ObjectCreate, - ObjectDefineProperty, - Proxy, - ReflectDefineProperty, - ReflectGetOwnPropertyDescriptor, - ReflectOwnKeys, - Set, - SetPrototypeHas, - } = window.__bootstrap.primordials; - - function assert(cond) { - if (!cond) { - throw Error("assert"); - } +function assert(cond) { + if (!cond) { + throw Error("assert"); } +} - let initialized = false; - const nodeGlobals = {}; - const nodeGlobalThis = new Proxy(globalThis, { - get(_target, prop, _receiver) { - if (prop in nodeGlobals) { - return nodeGlobals[prop]; - } else { - return globalThis[prop]; - } - }, - set(_target, prop, value) { - if (prop in nodeGlobals) { - nodeGlobals[prop] = value; - } else { - globalThis[prop] = value; - } - return true; - }, - deleteProperty(_target, prop) { - let success = false; - if (prop in nodeGlobals) { - delete nodeGlobals[prop]; - success = true; - } - if (prop in globalThis) { - delete globalThis[prop]; - success = true; - } - return success; - }, - ownKeys(_target) { - const globalThisKeys = ReflectOwnKeys(globalThis); - const nodeGlobalsKeys = ReflectOwnKeys(nodeGlobals); - const nodeGlobalsKeySet = new Set(nodeGlobalsKeys); - return [ - ...ArrayPrototypeFilter( - globalThisKeys, - (k) => !SetPrototypeHas(nodeGlobalsKeySet, k), - ), - ...nodeGlobalsKeys, - ]; - }, - defineProperty(_target, prop, desc) { - if (prop in nodeGlobals) { - return ReflectDefineProperty(nodeGlobals, prop, desc); - } else { - return ReflectDefineProperty(globalThis, prop, desc); - } - }, - getOwnPropertyDescriptor(_target, prop) { - if (prop in nodeGlobals) { - return ReflectGetOwnPropertyDescriptor(nodeGlobals, prop); - } else { - return ReflectGetOwnPropertyDescriptor(globalThis, prop); - } - }, - has(_target, prop) { - return prop in nodeGlobals || prop in globalThis; - }, - }); - - const nativeModuleExports = ObjectCreate(null); - const builtinModules = []; - - function initialize(nodeModules, nodeGlobalThisName) { - assert(!initialized); - initialized = true; - for (const [name, exports] of ObjectEntries(nodeModules)) { - nativeModuleExports[name] = exports; - ArrayPrototypePush(builtinModules, name); +let initialized = false; +const nodeGlobals = {}; +const nodeGlobalThis = new Proxy(globalThis, { + get(_target, prop, _receiver) { + if (prop in nodeGlobals) { + return nodeGlobals[prop]; + } else { + return globalThis[prop]; + } + }, + set(_target, prop, value) { + if (prop in nodeGlobals) { + nodeGlobals[prop] = value; + } else { + globalThis[prop] = value; + } + return true; + }, + deleteProperty(_target, prop) { + let success = false; + if (prop in nodeGlobals) { + delete nodeGlobals[prop]; + success = true; } - 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; + if (prop in globalThis) { + delete globalThis[prop]; + success = true; + } + return success; + }, + ownKeys(_target) { + const globalThisKeys = ReflectOwnKeys(globalThis); + const nodeGlobalsKeys = ReflectOwnKeys(nodeGlobals); + const nodeGlobalsKeySet = new Set(nodeGlobalsKeys); + return [ + ...ArrayPrototypeFilter( + globalThisKeys, + (k) => !SetPrototypeHas(nodeGlobalsKeySet, k), + ), + ...nodeGlobalsKeys, + ]; + }, + defineProperty(_target, prop, desc) { + if (prop in nodeGlobals) { + return ReflectDefineProperty(nodeGlobals, prop, desc); + } else { + return ReflectDefineProperty(globalThis, prop, desc); + } + }, + getOwnPropertyDescriptor(_target, prop) { + if (prop in nodeGlobals) { + return ReflectGetOwnPropertyDescriptor(nodeGlobals, prop); + } else { + return ReflectGetOwnPropertyDescriptor(globalThis, prop); + } + }, + has(_target, prop) { + return prop in nodeGlobals || prop in globalThis; + }, +}); - // 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, - }); +const nativeModuleExports = ObjectCreate(null); +const builtinModules = []; + +function initialize(nodeModules, nodeGlobalThisName) { + assert(!initialized); + initialized = true; + for (const [name, exports] of ObjectEntries(nodeModules)) { + nativeModuleExports[name] = exports; + ArrayPrototypePush(builtinModules, name); } + 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, + }); +} - window.__bootstrap.internals = { - ...window.__bootstrap.internals ?? {}, - node: { - globalThis: nodeGlobalThis, - initialize, - nativeModuleExports, - builtinModules, - }, - }; -})(globalThis); +internals.node = { + globalThis: nodeGlobalThis, + initialize, + nativeModuleExports, + builtinModules, +}; |