diff options
author | Kitson Kelly <me@kitsonkelly.com> | 2021-06-22 07:17:35 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-22 07:17:35 +1000 |
commit | cda15f2a98b10330422d1c8352d163d703ee6a49 (patch) | |
tree | a221c21283d1d19675cf77a66929f5c2b2936861 | |
parent | 2d2b5625e04a466362c9a4afb05e2f559c4fb4b0 (diff) |
feat: Deno namespace configurable and unfrozen (#11062)
Closes #11033
-rw-r--r-- | cli/tests/unit/globals_test.ts | 50 | ||||
-rw-r--r-- | runtime/js/06_util.js | 4 | ||||
-rw-r--r-- | runtime/js/99_main.js | 7 |
3 files changed, 16 insertions, 45 deletions
diff --git a/cli/tests/unit/globals_test.ts b/cli/tests/unit/globals_test.ts index 7603457b9..08ae23765 100644 --- a/cli/tests/unit/globals_test.ts +++ b/cli/tests/unit/globals_test.ts @@ -62,8 +62,8 @@ unitTest(function DenoNamespaceEqualsWindowDeno(): void { assert(Deno === window.Deno); }); -unitTest(function DenoNamespaceIsFrozen(): void { - assert(Object.isFrozen(Deno)); +unitTest(function DenoNamespaceIsNotFrozen(): void { + assert(!Object.isFrozen(Deno)); }); unitTest(function webAssemblyExists(): void { @@ -77,46 +77,14 @@ declare global { } } -unitTest(function DenoNamespaceImmutable(): void { - const denoCopy = window.Deno; - try { - // deno-lint-ignore no-explicit-any - (Deno as any) = 1; - } catch { - // pass - } - assert(denoCopy === Deno); - try { - // deno-lint-ignore no-explicit-any - (window as any).Deno = 1; - } catch { - // pass - } - assert(denoCopy === Deno); - try { - // deno-lint-ignore no-explicit-any - delete (window as any).Deno; - } catch { - // pass - } - assert(denoCopy === Deno); - - const { readFile } = Deno; - try { - // deno-lint-ignore no-explicit-any - (Deno as any).readFile = 1; - } catch { - // pass - } - assert(readFile === Deno.readFile); - try { - // deno-lint-ignore no-explicit-any - delete (window as any).Deno.readFile; - } catch { - // pass - } - assert(readFile === Deno.readFile); +unitTest(function DenoNamespaceConfigurable() { + const desc = Object.getOwnPropertyDescriptor(globalThis, "Deno"); + assert(desc); + assert(desc.configurable); + assert(!desc.writable); +}); +unitTest(function DenoCoreNamespaceIsImmutable(): void { const { print } = Deno.core; try { Deno.core.print = 1; diff --git a/runtime/js/06_util.js b/runtime/js/06_util.js index 9df9ac88a..3809cc9d0 100644 --- a/runtime/js/06_util.js +++ b/runtime/js/06_util.js @@ -117,6 +117,7 @@ return { value, writable: true, + enumerable: false, configurable: true, }; } @@ -125,6 +126,8 @@ return { value, enumerable: true, + writable: false, + configurable: true, }; } @@ -132,6 +135,7 @@ return { get: getter, enumerable: true, + configurable: true, }; } diff --git a/runtime/js/99_main.js b/runtime/js/99_main.js index 09a2ebb55..91a4dcefd 100644 --- a/runtime/js/99_main.js +++ b/runtime/js/99_main.js @@ -492,10 +492,9 @@ delete Object.prototype.__proto__; Object.assign(finalDenoNs, denoNsUnstable); } - // Setup `Deno` global - we're actually overriding already - // existing global `Deno` with `Deno` namespace from "./deno.ts". - util.immutableDefine(globalThis, "Deno", finalDenoNs); - Object.freeze(globalThis.Deno); + // Setup `Deno` global - we're actually overriding already existing global + // `Deno` with `Deno` namespace from "./deno.ts". + Object.defineProperty(globalThis, "Deno", util.readOnly(finalDenoNs)); Object.freeze(globalThis.Deno.core); Object.freeze(globalThis.Deno.core.sharedQueue); signals.setSignals(); |