123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- 'use strict';
- var conventions = require('./conventions');
- function extendError(constructor, writableName) {
- constructor.prototype = Object.create(Error.prototype, {
- constructor: { value: constructor },
- name: { value: constructor.name, enumerable: true, writable: writableName },
- });
- }
- var DOMExceptionName = conventions.freeze({
- /**
- * the default value as defined by the spec
- */
- Error: 'Error',
- /**
- * @deprecated
- * Use RangeError instead.
- */
- IndexSizeError: 'IndexSizeError',
- /**
- * @deprecated
- * Just to match the related static code, not part of the spec.
- */
- DomstringSizeError: 'DomstringSizeError',
- HierarchyRequestError: 'HierarchyRequestError',
- WrongDocumentError: 'WrongDocumentError',
- InvalidCharacterError: 'InvalidCharacterError',
- /**
- * @deprecated
- * Just to match the related static code, not part of the spec.
- */
- NoDataAllowedError: 'NoDataAllowedError',
- NoModificationAllowedError: 'NoModificationAllowedError',
- NotFoundError: 'NotFoundError',
- NotSupportedError: 'NotSupportedError',
- InUseAttributeError: 'InUseAttributeError',
- InvalidStateError: 'InvalidStateError',
- SyntaxError: 'SyntaxError',
- InvalidModificationError: 'InvalidModificationError',
- NamespaceError: 'NamespaceError',
- /**
- * @deprecated
- * Use TypeError for invalid arguments,
- * "NotSupportedError" DOMException for unsupported operations,
- * and "NotAllowedError" DOMException for denied requests instead.
- */
- InvalidAccessError: 'InvalidAccessError',
- /**
- * @deprecated
- * Just to match the related static code, not part of the spec.
- */
- ValidationError: 'ValidationError',
- /**
- * @deprecated
- * Use TypeError instead.
- */
- TypeMismatchError: 'TypeMismatchError',
- SecurityError: 'SecurityError',
- NetworkError: 'NetworkError',
- AbortError: 'AbortError',
- /**
- * @deprecated
- * Just to match the related static code, not part of the spec.
- */
- URLMismatchError: 'URLMismatchError',
- QuotaExceededError: 'QuotaExceededError',
- TimeoutError: 'TimeoutError',
- InvalidNodeTypeError: 'InvalidNodeTypeError',
- DataCloneError: 'DataCloneError',
- EncodingError: 'EncodingError',
- NotReadableError: 'NotReadableError',
- UnknownError: 'UnknownError',
- ConstraintError: 'ConstraintError',
- DataError: 'DataError',
- TransactionInactiveError: 'TransactionInactiveError',
- ReadOnlyError: 'ReadOnlyError',
- VersionError: 'VersionError',
- OperationError: 'OperationError',
- NotAllowedError: 'NotAllowedError',
- OptOutError: 'OptOutError',
- });
- var DOMExceptionNames = Object.keys(DOMExceptionName);
- function isValidDomExceptionCode(value) {
- return typeof value === 'number' && value >= 1 && value <= 25;
- }
- function endsWithError(value) {
- return typeof value === 'string' && value.substring(value.length - DOMExceptionName.Error.length) === DOMExceptionName.Error;
- }
- /**
- * DOM operations only raise exceptions in "exceptional" circumstances, i.e., when an operation
- * is impossible to perform (either for logical reasons, because data is lost, or because the
- * implementation has become unstable). In general, DOM methods return specific error values in
- * ordinary processing situations, such as out-of-bound errors when using NodeList.
- *
- * Implementations should raise other exceptions under other circumstances. For example,
- * implementations should raise an implementation-dependent exception if a null argument is
- * passed when null was not expected.
- *
- * This implementation supports the following usages:
- * 1. according to the living standard (both arguments are optional):
- * ```
- * new DOMException("message (can be empty)", DOMExceptionNames.HierarchyRequestError)
- * ```
- * 2. according to previous xmldom implementation (only the first argument is required):
- * ```
- * new DOMException(DOMException.HIERARCHY_REQUEST_ERR, "optional message")
- * ```
- * both result in the proper name being set.
- *
- * @class DOMException
- * @param {number | string} messageOrCode
- * The reason why an operation is not acceptable.
- * If it is a number, it is used to determine the `name`, see
- * {@link https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF ExceptionCode}
- * @param {string | keyof typeof DOMExceptionName | Error} [nameOrMessage]
- * The `name` to use for the error.
- * If `messageOrCode` is a number, this arguments is used as the `message` instead.
- * @augments Error
- * @see https://webidl.spec.whatwg.org/#idl-DOMException
- * @see https://webidl.spec.whatwg.org/#dfn-error-names-table
- * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-17189187
- * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html
- * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html
- */
- function DOMException(messageOrCode, nameOrMessage) {
- // support old way of passing arguments: first argument is a valid number
- if (isValidDomExceptionCode(messageOrCode)) {
- this.name = DOMExceptionNames[messageOrCode];
- this.message = nameOrMessage || '';
- } else {
- this.message = messageOrCode;
- this.name = endsWithError(nameOrMessage) ? nameOrMessage : DOMExceptionName.Error;
- }
- if (Error.captureStackTrace) Error.captureStackTrace(this, DOMException);
- }
- extendError(DOMException, true);
- Object.defineProperties(DOMException.prototype, {
- code: {
- enumerable: true,
- get: function () {
- var code = DOMExceptionNames.indexOf(this.name);
- if (isValidDomExceptionCode(code)) return code;
- return 0;
- },
- },
- });
- var ExceptionCode = {
- INDEX_SIZE_ERR: 1,
- DOMSTRING_SIZE_ERR: 2,
- HIERARCHY_REQUEST_ERR: 3,
- WRONG_DOCUMENT_ERR: 4,
- INVALID_CHARACTER_ERR: 5,
- NO_DATA_ALLOWED_ERR: 6,
- NO_MODIFICATION_ALLOWED_ERR: 7,
- NOT_FOUND_ERR: 8,
- NOT_SUPPORTED_ERR: 9,
- INUSE_ATTRIBUTE_ERR: 10,
- INVALID_STATE_ERR: 11,
- SYNTAX_ERR: 12,
- INVALID_MODIFICATION_ERR: 13,
- NAMESPACE_ERR: 14,
- INVALID_ACCESS_ERR: 15,
- VALIDATION_ERR: 16,
- TYPE_MISMATCH_ERR: 17,
- SECURITY_ERR: 18,
- NETWORK_ERR: 19,
- ABORT_ERR: 20,
- URL_MISMATCH_ERR: 21,
- QUOTA_EXCEEDED_ERR: 22,
- TIMEOUT_ERR: 23,
- INVALID_NODE_TYPE_ERR: 24,
- DATA_CLONE_ERR: 25,
- };
- var entries = Object.entries(ExceptionCode);
- for (var i = 0; i < entries.length; i++) {
- var key = entries[i][0];
- DOMException[key] = entries[i][1];
- }
- /**
- * Creates an error that will not be caught by XMLReader aka the SAX parser.
- *
- * @class
- * @param {string} message
- * @param {any} [locator]
- */
- function ParseError(message, locator) {
- this.message = message;
- this.locator = locator;
- if (Error.captureStackTrace) Error.captureStackTrace(this, ParseError);
- }
- extendError(ParseError);
- exports.DOMException = DOMException;
- exports.DOMExceptionName = DOMExceptionName;
- exports.ExceptionCode = ExceptionCode;
- exports.ParseError = ParseError;
|