summaryrefslogtreecommitdiff
path: root/ext/node/01_node.js
diff options
context:
space:
mode:
authorKamil Ogórek <kamil.ogorek@gmail.com>2023-02-09 01:11:12 +0100
committerGitHub <noreply@github.com>2023-02-08 19:11:12 -0500
commitef9b66950f4557003bc7d4246da838545466a518 (patch)
tree8ee23827a7659d98480a369b4e1d3bf990d63b01 /ext/node/01_node.js
parent286e5d0be9bb11a69d55f0eedd4a6678b0d48e7d (diff)
fix: use static Reflect methods in nodeGlobalThis proxy (#17696)
Co-authored-by: David Sherret <dsherret@gmail.com>
Diffstat (limited to 'ext/node/01_node.js')
-rw-r--r--ext/node/01_node.js60
1 files changed, 28 insertions, 32 deletions
diff --git a/ext/node/01_node.js b/ext/node/01_node.js
index de27c5180..bbae66083 100644
--- a/ext/node/01_node.js
+++ b/ext/node/01_node.js
@@ -12,8 +12,12 @@ const {
ObjectDefineProperty,
Proxy,
ReflectDefineProperty,
+ ReflectDeleteProperty,
+ ReflectGet,
ReflectGetOwnPropertyDescriptor,
+ ReflectHas,
ReflectOwnKeys,
+ ReflectSet,
Set,
SetPrototypeHas,
} = primordials;
@@ -27,62 +31,54 @@ function assert(cond) {
let initialized = false;
const nodeGlobals = {};
const nodeGlobalThis = new Proxy(globalThis, {
- get(_target, prop, _receiver) {
- if (prop in nodeGlobals) {
- return nodeGlobals[prop];
+ get(target, prop) {
+ if (ReflectHas(nodeGlobals, prop)) {
+ return ReflectGet(nodeGlobals, prop);
} else {
- return globalThis[prop];
+ return ReflectGet(target, prop);
}
},
- set(_target, prop, value) {
- if (prop in nodeGlobals) {
- nodeGlobals[prop] = value;
+ set(target, prop, value) {
+ if (ReflectHas(nodeGlobals, prop)) {
+ return ReflectSet(nodeGlobals, prop, value);
} else {
- globalThis[prop] = value;
+ return ReflectSet(target, 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;
+ has(target, prop) {
+ return ReflectHas(nodeGlobals, prop) || ReflectHas(target, prop);
},
- ownKeys(_target) {
- const globalThisKeys = ReflectOwnKeys(globalThis);
+ 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(
- globalThisKeys,
+ targetKeys,
(k) => !SetPrototypeHas(nodeGlobalsKeySet, k),
),
...nodeGlobalsKeys,
];
},
- defineProperty(_target, prop, desc) {
- if (prop in nodeGlobals) {
+ defineProperty(target, prop, desc) {
+ if (ReflectHas(nodeGlobals, prop)) {
return ReflectDefineProperty(nodeGlobals, prop, desc);
} else {
- return ReflectDefineProperty(globalThis, prop, desc);
+ return ReflectDefineProperty(target, prop, desc);
}
},
- getOwnPropertyDescriptor(_target, prop) {
- if (prop in nodeGlobals) {
+ getOwnPropertyDescriptor(target, prop) {
+ if (ReflectHas(nodeGlobals, prop)) {
return ReflectGetOwnPropertyDescriptor(nodeGlobals, prop);
} else {
- return ReflectGetOwnPropertyDescriptor(globalThis, prop);
+ return ReflectGetOwnPropertyDescriptor(target, prop);
}
},
- has(_target, prop) {
- return prop in nodeGlobals || prop in globalThis;
- },
});
const nativeModuleExports = ObjectCreate(null);