diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2024-02-06 14:57:25 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-06 14:57:25 +0100 |
commit | 7c111da5f698b20db4db9e7fc02463f401c081db (patch) | |
tree | 799db706f7b54fe697009f360a5465505cbab884 | |
parent | e568cb8bf85161ea850ca2ae3b11247a0d5dcabd (diff) |
fix: Support Symbol.metadata (#22282)
This commit adds support for "Symbol.metadata" which was
omitted when adding support for the Decorators Proposal.
Closes https://github.com/denoland/deno/issues/22111
-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; |