summaryrefslogtreecommitdiff
path: root/ext/node/polyfills/00_globals.js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/node/polyfills/00_globals.js')
-rw-r--r--ext/node/polyfills/00_globals.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/ext/node/polyfills/00_globals.js b/ext/node/polyfills/00_globals.js
new file mode 100644
index 000000000..9952d86aa
--- /dev/null
+++ b/ext/node/polyfills/00_globals.js
@@ -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 };