mirror of
https://github.com/denoland/deno.git
synced 2025-09-28 21:24:48 +00:00
fix: webidl utils and align Event
to spec (#9470)
This commit is contained in:
parent
d2d7dc8d67
commit
af460fc464
11 changed files with 1117 additions and 192 deletions
147
op_crates/web/01_dom_exception.js
Normal file
147
op_crates/web/01_dom_exception.js
Normal file
|
@ -0,0 +1,147 @@
|
|||
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
|
||||
|
||||
// @ts-check
|
||||
/// <reference path="../../core/lib.deno_core.d.ts" />
|
||||
/// <reference path="../web/internal.d.ts" />
|
||||
/// <reference path="../web/lib.deno_web.d.ts" />
|
||||
|
||||
"use strict";
|
||||
|
||||
((window) => {
|
||||
const webidl = window.__bootstrap.webidl;
|
||||
|
||||
const { defineProperty } = Object;
|
||||
// Defined in WebIDL 4.3.
|
||||
// https://heycam.github.io/webidl/#idl-DOMException
|
||||
const INDEX_SIZE_ERR = 1;
|
||||
const DOMSTRING_SIZE_ERR = 2;
|
||||
const HIERARCHY_REQUEST_ERR = 3;
|
||||
const WRONG_DOCUMENT_ERR = 4;
|
||||
const INVALID_CHARACTER_ERR = 5;
|
||||
const NO_DATA_ALLOWED_ERR = 6;
|
||||
const NO_MODIFICATION_ALLOWED_ERR = 7;
|
||||
const NOT_FOUND_ERR = 8;
|
||||
const NOT_SUPPORTED_ERR = 9;
|
||||
const INUSE_ATTRIBUTE_ERR = 10;
|
||||
const INVALID_STATE_ERR = 11;
|
||||
const SYNTAX_ERR = 12;
|
||||
const INVALID_MODIFICATION_ERR = 13;
|
||||
const NAMESPACE_ERR = 14;
|
||||
const INVALID_ACCESS_ERR = 15;
|
||||
const VALIDATION_ERR = 16;
|
||||
const TYPE_MISMATCH_ERR = 17;
|
||||
const SECURITY_ERR = 18;
|
||||
const NETWORK_ERR = 19;
|
||||
const ABORT_ERR = 20;
|
||||
const URL_MISMATCH_ERR = 21;
|
||||
const QUOTA_EXCEEDED_ERR = 22;
|
||||
const TIMEOUT_ERR = 23;
|
||||
const INVALID_NODE_TYPE_ERR = 24;
|
||||
const DATA_CLONE_ERR = 25;
|
||||
|
||||
// Defined in WebIDL 2.8.1.
|
||||
// https://heycam.github.io/webidl/#dfn-error-names-table
|
||||
/** @type {Record<string, number>} */
|
||||
const nameToCodeMapping = {
|
||||
IndexSizeError: INDEX_SIZE_ERR,
|
||||
HierarchyRequestError: HIERARCHY_REQUEST_ERR,
|
||||
WrongDocumentError: WRONG_DOCUMENT_ERR,
|
||||
InvalidCharacterError: INVALID_CHARACTER_ERR,
|
||||
NoModificationAllowedError: NO_MODIFICATION_ALLOWED_ERR,
|
||||
NotFoundError: NOT_FOUND_ERR,
|
||||
NotSupportedError: NOT_SUPPORTED_ERR,
|
||||
InUseAttributeError: INUSE_ATTRIBUTE_ERR,
|
||||
InvalidStateError: INVALID_STATE_ERR,
|
||||
SyntaxError: SYNTAX_ERR,
|
||||
InvalidModificationError: INVALID_MODIFICATION_ERR,
|
||||
NamespaceError: NAMESPACE_ERR,
|
||||
InvalidAccessError: INVALID_ACCESS_ERR,
|
||||
TypeMismatchError: TYPE_MISMATCH_ERR,
|
||||
SecurityError: SECURITY_ERR,
|
||||
NetworkError: NETWORK_ERR,
|
||||
AbortError: ABORT_ERR,
|
||||
URLMismatchError: URL_MISMATCH_ERR,
|
||||
QuotaExceededError: QUOTA_EXCEEDED_ERR,
|
||||
TimeoutError: TIMEOUT_ERR,
|
||||
InvalidNodeTypeError: INVALID_NODE_TYPE_ERR,
|
||||
DataCloneError: DATA_CLONE_ERR,
|
||||
};
|
||||
|
||||
// Defined in WebIDL 4.3.
|
||||
// https://heycam.github.io/webidl/#idl-DOMException
|
||||
class DOMException extends Error {
|
||||
#message = "";
|
||||
#name = "";
|
||||
#code = 0;
|
||||
|
||||
constructor(message = "", name = "Error") {
|
||||
super();
|
||||
this.#message = webidl.converters.DOMString(message, {
|
||||
prefix: "Failed to construct 'DOMException'",
|
||||
context: "Argument 1",
|
||||
});
|
||||
this.#name = webidl.converters.DOMString(name, {
|
||||
prefix: "Failed to construct 'DOMException'",
|
||||
context: "Argument 2",
|
||||
});
|
||||
this.#code = nameToCodeMapping[this.#name] ?? 0;
|
||||
}
|
||||
|
||||
get message() {
|
||||
return this.#message;
|
||||
}
|
||||
|
||||
get name() {
|
||||
return this.#name;
|
||||
}
|
||||
|
||||
get code() {
|
||||
return this.#code;
|
||||
}
|
||||
|
||||
get [Symbol.toStringTag]() {
|
||||
return "DOMException";
|
||||
}
|
||||
}
|
||||
|
||||
defineProperty(DOMException.prototype, "message", { enumerable: true });
|
||||
defineProperty(DOMException.prototype, "name", { enumerable: true });
|
||||
defineProperty(DOMException.prototype, "code", { enumerable: true });
|
||||
|
||||
for (
|
||||
const [key, value] of Object.entries({
|
||||
INDEX_SIZE_ERR,
|
||||
DOMSTRING_SIZE_ERR,
|
||||
HIERARCHY_REQUEST_ERR,
|
||||
WRONG_DOCUMENT_ERR,
|
||||
INVALID_CHARACTER_ERR,
|
||||
NO_DATA_ALLOWED_ERR,
|
||||
NO_MODIFICATION_ALLOWED_ERR,
|
||||
NOT_FOUND_ERR,
|
||||
NOT_SUPPORTED_ERR,
|
||||
INUSE_ATTRIBUTE_ERR,
|
||||
INVALID_STATE_ERR,
|
||||
SYNTAX_ERR,
|
||||
INVALID_MODIFICATION_ERR,
|
||||
NAMESPACE_ERR,
|
||||
INVALID_ACCESS_ERR,
|
||||
VALIDATION_ERR,
|
||||
TYPE_MISMATCH_ERR,
|
||||
SECURITY_ERR,
|
||||
NETWORK_ERR,
|
||||
ABORT_ERR,
|
||||
URL_MISMATCH_ERR,
|
||||
QUOTA_EXCEEDED_ERR,
|
||||
TIMEOUT_ERR,
|
||||
INVALID_NODE_TYPE_ERR,
|
||||
DATA_CLONE_ERR,
|
||||
})
|
||||
) {
|
||||
const desc = { value, enumerable: true };
|
||||
defineProperty(DOMException, key, desc);
|
||||
defineProperty(DOMException.prototype, key, desc);
|
||||
}
|
||||
|
||||
window.DOMException = DOMException;
|
||||
defineProperty(window, "DOMException", { enumerable: false });
|
||||
})(this);
|
Loading…
Add table
Add a link
Reference in a new issue