summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/tests/unit/dom_exception_test.ts9
-rw-r--r--cli/tests/wpt.jsonc9
-rw-r--r--op_crates/web/00_dom_exception.js55
-rw-r--r--op_crates/web/lib.deno_web.d.ts1
4 files changed, 56 insertions, 18 deletions
diff --git a/cli/tests/unit/dom_exception_test.ts b/cli/tests/unit/dom_exception_test.ts
index a93cbfebe..4c9e96de6 100644
--- a/cli/tests/unit/dom_exception_test.ts
+++ b/cli/tests/unit/dom_exception_test.ts
@@ -6,4 +6,13 @@ unitTest(function testDomError() {
assert(de);
assertEquals(de.message, "foo");
assertEquals(de.name, "bar");
+ assertEquals(de.code, 0);
+});
+
+unitTest(function testKnownDomException() {
+ const de = new DOMException("foo", "SyntaxError");
+ assert(de);
+ assertEquals(de.message, "foo");
+ assertEquals(de.name, "SyntaxError");
+ assertEquals(de.code, 12);
});
diff --git a/cli/tests/wpt.jsonc b/cli/tests/wpt.jsonc
index 3099d3b48..d43aa9ce6 100644
--- a/cli/tests/wpt.jsonc
+++ b/cli/tests/wpt.jsonc
@@ -170,14 +170,7 @@
]
},
"measure-l3",
- {
- "name": "structured-serialize-detail",
- "expectFail": [
- // TODO(lucacasonato): re-enable when we use real structured clone.
- "Mark: Throw an exception when the detail property cannot be structured-serialized.",
- "Measure: Throw an exception when the detail property cannot be structured-serialized."
- ]
- },
+ "structured-serialize-detail",
"user_timing_exists"
]
}
diff --git a/op_crates/web/00_dom_exception.js b/op_crates/web/00_dom_exception.js
index 6d72779b0..5fb130452 100644
--- a/op_crates/web/00_dom_exception.js
+++ b/op_crates/web/00_dom_exception.js
@@ -1,15 +1,50 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
-// eslint-disable-next-line @typescript-eslint/no-unused-vars
-class DOMException extends Error {
- #name = "";
+((window) => {
+ const nameToCodeMapping = Object.create(
+ null,
+ {
+ IndexSizeError: { value: 1 },
+ HierarchyRequestError: { value: 3 },
+ WrongDocumentError: { value: 4 },
+ InvalidCharacterError: { value: 5 },
+ NoModificationAllowedError: { value: 7 },
+ NotFoundError: { value: 8 },
+ NotSupportedError: { value: 9 },
+ InvalidStateError: { value: 11 },
+ SyntaxError: { value: 12 },
+ InvalidModificationError: { value: 13 },
+ NamespaceError: { value: 14 },
+ InvalidAccessError: { value: 15 },
+ TypeMismatchError: { value: 17 },
+ SecurityError: { value: 18 },
+ NetworkError: { value: 19 },
+ AbortError: { value: 20 },
+ URLMismatchError: { value: 21 },
+ QuotaExceededError: { value: 22 },
+ TimeoutError: { value: 23 },
+ InvalidNodeTypeError: { value: 24 },
+ DataCloneError: { value: 25 },
+ },
+ );
+ class DOMException extends Error {
+ #name = "";
+ #code = 0;
- constructor(message = "", name = "Error") {
- super(message);
- this.#name = name;
- }
+ constructor(message = "", name = "Error") {
+ super(message);
+ this.#name = name;
+ this.#code = nameToCodeMapping[name] ?? 0;
+ }
+
+ get name() {
+ return this.#name;
+ }
- get name() {
- return this.#name;
+ get code() {
+ return this.#code;
+ }
}
-}
+
+ window.DOMException = DOMException;
+})(this);
diff --git a/op_crates/web/lib.deno_web.d.ts b/op_crates/web/lib.deno_web.d.ts
index 491a0ee84..f6c2e240f 100644
--- a/op_crates/web/lib.deno_web.d.ts
+++ b/op_crates/web/lib.deno_web.d.ts
@@ -9,6 +9,7 @@ declare class DOMException extends Error {
constructor(message?: string, name?: string);
readonly name: string;
readonly message: string;
+ readonly code: number;
}
interface EventInit {