mirror of
https://github.com/denoland/deno.git
synced 2024-12-23 07:44:48 -05:00
cd53ab5427
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.
72 lines
1.9 KiB
JavaScript
72 lines
1.9 KiB
JavaScript
// 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 };
|