0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-04 01:44:26 -05:00

fix(web): implement DOMException#code (#9015)

Co-authored-by: Luca Casonato <lucacasonato@yahoo.com>
This commit is contained in:
Yacine Hmito 2021-01-09 07:27:46 +01:00 committed by GitHub
parent f3ead9c6a7
commit 9637209765
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 56 additions and 18 deletions

View file

@ -6,4 +6,13 @@ unitTest(function testDomError() {
assert(de); assert(de);
assertEquals(de.message, "foo"); assertEquals(de.message, "foo");
assertEquals(de.name, "bar"); 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);
}); });

View file

@ -170,14 +170,7 @@
] ]
}, },
"measure-l3", "measure-l3",
{ "structured-serialize-detail",
"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."
]
},
"user_timing_exists" "user_timing_exists"
] ]
} }

View file

@ -1,15 +1,50 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
// eslint-disable-next-line @typescript-eslint/no-unused-vars ((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 { class DOMException extends Error {
#name = ""; #name = "";
#code = 0;
constructor(message = "", name = "Error") { constructor(message = "", name = "Error") {
super(message); super(message);
this.#name = name; this.#name = name;
this.#code = nameToCodeMapping[name] ?? 0;
} }
get name() { get name() {
return this.#name; return this.#name;
} }
get code() {
return this.#code;
} }
}
window.DOMException = DOMException;
})(this);

View file

@ -9,6 +9,7 @@ declare class DOMException extends Error {
constructor(message?: string, name?: string); constructor(message?: string, name?: string);
readonly name: string; readonly name: string;
readonly message: string; readonly message: string;
readonly code: number;
} }
interface EventInit { interface EventInit {