summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2024-02-06 14:57:25 +0100
committerGitHub <noreply@github.com>2024-02-06 14:57:25 +0100
commit7c111da5f698b20db4db9e7fc02463f401c081db (patch)
tree799db706f7b54fe697009f360a5465505cbab884
parente568cb8bf85161ea850ca2ae3b11247a0d5dcabd (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.rs1
-rw-r--r--cli/tests/unit/symbol_test.ts11
-rw-r--r--ext/web/00_infra.js3
-rw-r--r--runtime/js/99_main.js20
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;