diff options
-rw-r--r-- | cli/tests/integration/js_unit_tests.rs | 1 | ||||
-rw-r--r-- | cli/tests/unit/symbol_test.ts | 11 | ||||
-rw-r--r-- | ext/web/00_infra.js | 3 | ||||
-rw-r--r-- | runtime/js/99_main.js | 20 |
4 files changed, 34 insertions, 1 deletions
diff --git a/cli/tests/integration/js_unit_tests.rs b/cli/tests/integration/js_unit_tests.rs index 00e26cc91..cb843ee4e 100644 --- a/cli/tests/integration/js_unit_tests.rs +++ b/cli/tests/integration/js_unit_tests.rs @@ -84,6 +84,7 @@ util::unit_test_factory!( stdio_test, streams_test, structured_clone_test, + symbol_test, symlink_test, sync_test, test_util, diff --git a/cli/tests/unit/symbol_test.ts b/cli/tests/unit/symbol_test.ts new file mode 100644 index 000000000..54db7f5ba --- /dev/null +++ b/cli/tests/unit/symbol_test.ts @@ -0,0 +1,11 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. +import { assert } from "./test_util.ts"; + +// Test that `Symbol.metadata` is defined. This file can be removed when V8 +// supports `Symbol.metadata` natively. + +Deno.test( + function symbolMetadataIsDefined() { + assert(typeof Symbol.metadata === "symbol"); + }, +); diff --git a/ext/web/00_infra.js b/ext/web/00_infra.js index 1a2c34ecc..e42f2cc93 100644 --- a/ext/web/00_infra.js +++ b/ext/web/00_infra.js @@ -463,6 +463,9 @@ export const SymbolDispose = Symbol.dispose ?? Symbol("Symbol.dispose"); // deno-lint-ignore prefer-primordials export const SymbolAsyncDispose = Symbol.asyncDispose ?? Symbol("Symbol.asyncDispose"); +// deno-lint-ignore prefer-primordials +export const SymbolMetadata = Symbol.metadata ?? + Symbol("Symbol.metadata"); export { ASCII_ALPHA, diff --git a/runtime/js/99_main.js b/runtime/js/99_main.js index c1ded6b24..112cea122 100644 --- a/runtime/js/99_main.js +++ b/runtime/js/99_main.js @@ -89,9 +89,21 @@ import { import { workerRuntimeGlobalProperties, } from "ext:runtime/98_global_scope_worker.js"; -import { SymbolAsyncDispose, SymbolDispose } from "ext:deno_web/00_infra.js"; +import { + SymbolAsyncDispose, + SymbolDispose, + SymbolMetadata, +} from "ext:deno_web/00_infra.js"; // deno-lint-ignore prefer-primordials if (Symbol.dispose) throw "V8 supports Symbol.dispose now, no need to shim it!"; +// deno-lint-ignore prefer-primordials +if (Symbol.asyncDispose) { + throw "V8 supports Symbol.asyncDispose now, no need to shim it!"; +} +// deno-lint-ignore prefer-primordials +if (Symbol.metadata) { + throw "V8 supports Symbol.metadata now, no need to shim it!"; +} ObjectDefineProperties(Symbol, { dispose: { value: SymbolDispose, @@ -105,6 +117,12 @@ ObjectDefineProperties(Symbol, { writable: false, configurable: false, }, + metadata: { + value: SymbolMetadata, + enumerable: false, + writable: false, + configurable: false, + }, }); let windowIsClosing = false; |