mirror of
https://github.com/denoland/deno.git
synced 2025-08-30 23:38:03 +00:00
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.
This commit is contained in:
parent
d78db7c091
commit
cd53ab5427
16 changed files with 385 additions and 395 deletions
72
ext/node/polyfills/00_globals.js
Normal file
72
ext/node/polyfills/00_globals.js
Normal file
|
@ -0,0 +1,72 @@
|
|||
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
|
||||
|
||||
// deno-lint-ignore-file
|
||||
|
||||
const primordials = globalThis.__bootstrap.primordials;
|
||||
const {
|
||||
ArrayPrototypeFilter,
|
||||
Proxy,
|
||||
ReflectDefineProperty,
|
||||
ReflectDeleteProperty,
|
||||
ReflectGet,
|
||||
ReflectGetOwnPropertyDescriptor,
|
||||
ReflectHas,
|
||||
ReflectOwnKeys,
|
||||
ReflectSet,
|
||||
Set,
|
||||
SetPrototypeHas,
|
||||
} = primordials;
|
||||
|
||||
const nodeGlobals = {};
|
||||
const nodeGlobalThis = new Proxy(globalThis, {
|
||||
get(target, prop) {
|
||||
if (ReflectHas(nodeGlobals, prop)) {
|
||||
return ReflectGet(nodeGlobals, prop);
|
||||
} else {
|
||||
return ReflectGet(target, prop);
|
||||
}
|
||||
},
|
||||
set(target, prop, value) {
|
||||
if (ReflectHas(nodeGlobals, prop)) {
|
||||
return ReflectSet(nodeGlobals, prop, value);
|
||||
} else {
|
||||
return ReflectSet(target, prop, value);
|
||||
}
|
||||
},
|
||||
has(target, prop) {
|
||||
return ReflectHas(nodeGlobals, prop) || ReflectHas(target, prop);
|
||||
},
|
||||
deleteProperty(target, prop) {
|
||||
const nodeDeleted = ReflectDeleteProperty(nodeGlobals, prop);
|
||||
const targetDeleted = ReflectDeleteProperty(target, prop);
|
||||
return nodeDeleted || targetDeleted;
|
||||
},
|
||||
ownKeys(target) {
|
||||
const targetKeys = ReflectOwnKeys(target);
|
||||
const nodeGlobalsKeys = ReflectOwnKeys(nodeGlobals);
|
||||
const nodeGlobalsKeySet = new Set(nodeGlobalsKeys);
|
||||
return [
|
||||
...ArrayPrototypeFilter(
|
||||
targetKeys,
|
||||
(k) => !SetPrototypeHas(nodeGlobalsKeySet, k),
|
||||
),
|
||||
...nodeGlobalsKeys,
|
||||
];
|
||||
},
|
||||
defineProperty(target, prop, desc) {
|
||||
if (ReflectHas(nodeGlobals, prop)) {
|
||||
return ReflectDefineProperty(nodeGlobals, prop, desc);
|
||||
} else {
|
||||
return ReflectDefineProperty(target, prop, desc);
|
||||
}
|
||||
},
|
||||
getOwnPropertyDescriptor(target, prop) {
|
||||
if (ReflectHas(nodeGlobals, prop)) {
|
||||
return ReflectGetOwnPropertyDescriptor(nodeGlobals, prop);
|
||||
} else {
|
||||
return ReflectGetOwnPropertyDescriptor(target, prop);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export { nodeGlobals, nodeGlobalThis };
|
Loading…
Add table
Add a link
Reference in a new issue