html-validate 8.22.0 → 8.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/browser.js +1 -1
- package/dist/cjs/core.js +34 -9
- package/dist/cjs/core.js.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/tsdoc-metadata.json +1 -1
- package/dist/es/browser.js +1 -1
- package/dist/es/cli.js +1 -1
- package/dist/es/core.js +34 -9
- package/dist/es/core.js.map +1 -1
- package/dist/es/index.js +1 -1
- package/dist/tsdoc-metadata.json +1 -1
- package/dist/types/browser.d.ts +7 -1
- package/dist/types/index.d.ts +7 -1
- package/package.json +15 -14
package/dist/cjs/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sources":["../../node_modules/deepmerge/dist/cjs.js","../../src/error/wrapped-error.ts","../../src/error/ensure-error.ts","../../src/error/nested-error.ts","../../src/error/user-error.ts","../../src/error/inherit-error.ts","../../src/error/schema-validation-error.ts","../../src/utils/compute-hash.ts","../../src/schema/keywords/regexp.ts","../../src/schema/keywords/function.ts","../../src/meta/element.ts","../../src/meta/migrate.ts","../../src/meta/evaluator/is-descendant.ts","../../src/meta/evaluator/has-attribute.ts","../../src/meta/evaluator/match-attribute.ts","../../src/meta/table.ts","../../src/dom/dynamic-value.ts","../../src/dom/attribute.ts","../../src/dom/css/parse-css-declaration.ts","../../src/context/location.ts","../../src/context/state.ts","../../src/context/context.ts","../../src/context/normalize-source.ts","../../src/dom/nodetype.ts","../../src/dom/domnode.ts","../../src/dom/domtokenlist.ts","../../src/dom/combinator.ts","../../src/dom/pseudoclass/first-child.ts","../../src/dom/pseudoclass/last-child.ts","../../src/dom/pseudoclass/nth-child.ts","../../src/dom/pseudoclass/scope.ts","../../src/dom/pseudoclass/index.ts","../../src/dom/split-selector-elements.ts","../../src/dom/selector.ts","../../src/dom/text.ts","../../src/dom/htmlelement.ts","../../src/utils/dump-tree.ts","../../src/utils/interpolate.ts","../../src/utils/is-thenable.ts","../../src/config/severity.ts","../../src/rules/helper/aria-naming.ts","../../src/rules/helper/is-keyword-ignored.ts","../../src/rules/helper/a11y.ts","../../src/rules/helper/text.ts","../../src/rules/helper/has-alt-text.ts","../../src/rules/helper/has-aria-label.ts","../../src/rules/helper/partition.ts","../../src/rule.ts","../../src/rules/allowed-links.ts","../../src/rules/area-alt.ts","../../src/rules/aria-hidden-body.ts","../../src/rules/aria-label-misuse.ts","../../src/config/error.ts","../../src/rules/helper/case-style.ts","../../src/rules/attr-case.ts","../../src/lexer/token.ts","../../src/lexer/lexer.ts","../../src/rules/attr-delimiter.ts","../../src/rules/attr-pattern.ts","../../src/rules/attr-quotes.ts","../../src/rules/attr-spacing.ts","../../src/rules/attribute-allowed-values.ts","../../src/rules/attribute-boolean-style.ts","../../src/rules/attribute-empty-style.ts","../../src/rules/attribute-misuse.ts","../../src/pattern.ts","../../src/rules/base-pattern-rule.ts","../../src/rules/class-pattern.ts","../../src/rules/close-attr.ts","../../src/rules/close-order.ts","../../src/rules/deprecated.ts","../../src/rules/deprecated-rule.ts","../../src/rules/doctype-html.ts","../../src/rules/doctype-style.ts","../../src/rules/element-case.ts","../../src/rules/element-name.ts","../../src/rules/element-permitted-content.ts","../../src/rules/element-permitted-occurrences.ts","../../src/rules/element-permitted-order.ts","../../src/rules/element-permitted-parent.ts","../../src/rules/element-required-ancestor.ts","../../src/rules/element-required-attributes.ts","../../src/rules/element-required-content.ts","../../src/rules/empty-heading.ts","../../src/rules/empty-title.ts","../../src/rules/form-dup-name.ts","../../src/rules/heading-level.ts","../../src/rules/helper/is-focusable.ts","../../src/rules/hidden-focusable.ts","../../src/rules/id-pattern.ts","../../src/rules/input-attributes.ts","../../src/rules/helper/has-accessible-name.ts","../../src/rules/input-missing-label.ts","../../src/rules/long-title.ts","../../src/rules/meta-refresh.ts","../../src/rules/map-dup-name.ts","../../src/rules/map-id-name.ts","../../src/rules/missing-doctype.ts","../../src/rules/multiple-labeled-controls.ts","../../src/rules/name-pattern.ts","../../src/rules/no-abstract-role.ts","../../src/rules/no-autoplay.ts","../../src/rules/no-conditional-comment.ts","../../src/rules/no-deprecated-attr.ts","../../src/rules/no-dup-attr.ts","../../src/rules/no-dup-class.ts","../../src/rules/no-dup-id.ts","../../src/rules/no-implicit-button-type.ts","../../src/rules/no-implicit-input-type.ts","../../src/rules/no-implicit-close.ts","../../src/rules/no-inline-style.ts","../../src/rules/no-missing-references.ts","../../src/rules/no-multiple-main.ts","../../src/rules/no-raw-characters.ts","../../src/rules/no-redundant-aria-label.ts","../../src/rules/no-redundant-for.ts","../../src/rules/no-redundant-role.ts","../../src/rules/no-self-closing.ts","../../src/rules/no-style-tag.ts","../../src/rules/no-trailing-whitespace.ts","../../src/rules/no-unknown-elements.ts","../../src/rules/no-unused-disable.ts","../../src/rules/no-utf8-bom.ts","../../src/rules/prefer-button.ts","../../src/rules/prefer-native-element.ts","../../src/rules/prefer-tbody.ts","../../src/rules/require-csp-nonce.ts","../../src/rules/require-sri.ts","../../src/rules/script-element.ts","../../src/rules/script-type.ts","../../src/rules/svg-focusable.ts","../../src/rules/tel-non-breaking.ts","../../src/rules/text-content.ts","../../src/rules/unique-landmark.ts","../../src/rules/unrecognized-char-ref.ts","../../src/rules/valid-autocomplete.ts","../../src/rules/valid-id.ts","../../src/rules/void-content.ts","../../src/rules/void-style.ts","../../src/rules/wcag/h30.ts","../../src/rules/wcag/h32.ts","../../src/rules/wcag/h36.ts","../../src/rules/wcag/h37.ts","../../src/rules/wcag/h63.ts","../../src/rules/wcag/h67.ts","../../src/rules/wcag/h71.ts","../../src/rules/wcag/index.ts","../../src/rules/index.ts","../../src/utils/rule-exists.ts","../../src/utils/walk.ts","../../src/dom/domtree.ts","../../src/meta/validator.ts","../../src/transform/index.ts","../../src/config/default.ts","../../src/config/presets/a11y.ts","../../src/config/presets/document.ts","../../src/config/presets/prettier.ts","../../src/config/presets/recommended.ts","../../src/config/presets/standard.ts","../../src/config/presets/index.ts","../../src/config/resolved-config.ts","../../src/config/resolver/resolve-helpers.ts","../../src/config/resolver/static/static-resolver.ts","../../src/config/config.ts","../../src/config/config-loader.ts","../../src/config/define-config.ts","../../src/event/eventhandler.ts","../../src/parser/conditional-comment.ts","../../src/parser/parser-error.ts","../../src/parser/parser.ts","../../src/reporter.ts","../../src/engine/rule-blocker.ts","../../src/engine/engine.ts","../../src/config/loaders/static.ts","../../src/htmlvalidate.ts","../../src/generated/package.ts","../../src/plugin/define-plugin.ts","../../node_modules/ignore/index.js","../../src/formatters/checkstyle.ts","../../src/formatters/codeframe.ts","../../src/formatters/json.ts","../../src/formatters/stylish.ts","../../src/formatters/text.ts","../../src/formatters/index.ts","../../src/utils/compatibility-check.ts"],"sourcesContent":["'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","function stringify<T>(value: T): string {\n\tif (typeof value === \"string\") {\n\t\treturn String(value);\n\t} else {\n\t\treturn JSON.stringify(value);\n\t}\n}\n\n/**\n * Represents an `Error` created from arbitrary values.\n *\n * @public\n */\nexport class WrappedError<T> extends Error {\n\tpublic constructor(message: T) {\n\t\tsuper(stringify(message));\n\t}\n}\n","import { WrappedError } from \"./wrapped-error\";\n\n/**\n * Ensures the value is an Error.\n *\n * If the passed value is not an `Error` instance a [[WrappedError]] is\n * constructed with the stringified value.\n *\n * @internal\n */\nexport function ensureError<T>(value: T): Error {\n\tif (value instanceof Error) {\n\t\treturn value;\n\t} else {\n\t\treturn new WrappedError(value);\n\t}\n}\n","/**\n * @public\n */\nexport class NestedError extends Error {\n\tpublic constructor(message: string, nested?: Error) {\n\t\tsuper(message);\n\t\tError.captureStackTrace(this, NestedError);\n\t\tthis.name = NestedError.name;\n\n\t\tif (nested?.stack) {\n\t\t\tthis.stack ??= \"\";\n\t\t\tthis.stack += `\\nCaused by: ${nested.stack}`;\n\t\t}\n\t}\n}\n","import { NestedError } from \"./nested-error\";\n\n/**\n * @public\n */\nexport class UserError extends NestedError {\n\tpublic constructor(message: string, nested?: Error) {\n\t\tsuper(message, nested);\n\t\tError.captureStackTrace(this, UserError);\n\t\tthis.name = UserError.name;\n\t}\n\n\t/**\n\t * @public\n\t */\n\t/* istanbul ignore next: default implementation */\n\tpublic prettyFormat(): string | undefined {\n\t\treturn undefined;\n\t}\n}\n","import { UserError } from \"./user-error\";\n\n/**\n * @internal\n */\nexport class InheritError extends UserError {\n\tprivate tagName: string;\n\tprivate inherit: string;\n\tpublic filename: string | null;\n\n\tpublic constructor({ tagName, inherit }: { tagName: string; inherit: string }) {\n\t\tconst message = `Element <${tagName}> cannot inherit from <${inherit}>: no such element`;\n\t\tsuper(message);\n\t\tError.captureStackTrace(this, InheritError);\n\t\tthis.name = InheritError.name;\n\t\tthis.tagName = tagName;\n\t\tthis.inherit = inherit;\n\t\tthis.filename = null;\n\t}\n\n\tpublic prettyFormat(): string {\n\t\tconst { message, tagName, inherit } = this;\n\t\tconst source: string[] = this.filename\n\t\t\t? [\"\", \"This error occurred when loading element metadata from:\", `\"${this.filename}\"`, \"\"]\n\t\t\t: [\"\"];\n\t\treturn [\n\t\t\tmessage,\n\t\t\t...source,\n\t\t\t\"This usually occurs when the elements are defined in the wrong order, try one of the following:\",\n\t\t\t\"\",\n\t\t\t` - Ensure the spelling of \"${inherit}\" is correct.`,\n\t\t\t` - Ensure the file containing \"${inherit}\" is loaded before the file containing \"${tagName}\".`,\n\t\t\t` - Move the definition of \"${inherit}\" above the definition for \"${tagName}\".`,\n\t\t].join(\"\\n\");\n\t}\n}\n","import betterAjvErrors from \"@sidvind/better-ajv-errors\";\nimport { type ErrorObject, type SchemaObject } from \"ajv\";\nimport { UserError } from \"./user-error\";\n\nfunction getSummary(schema: any, obj: any, errors: ErrorObject[]): string {\n\tconst output = betterAjvErrors(schema, obj, errors, {\n\t\tformat: \"js\",\n\t});\n\t// istanbul ignore next: for safety only\n\treturn output.length > 0 ? output[0].error : \"unknown validation error\";\n}\n\n/**\n * @public\n */\nexport class SchemaValidationError extends UserError {\n\t/** Configuration filename the error originates from */\n\tpublic readonly filename: string | null;\n\t/** Configuration object the error originates from */\n\tpublic readonly obj: unknown;\n\t/** JSON schema used when validating the configuration */\n\tpublic readonly schema: SchemaObject;\n\t/** List of schema validation errors */\n\tpublic readonly errors: ErrorObject[];\n\n\tpublic constructor(\n\t\tfilename: string | null,\n\t\tmessage: string,\n\t\tobj: unknown,\n\t\tschema: SchemaObject,\n\t\terrors: ErrorObject[],\n\t) {\n\t\tconst summary = getSummary(schema, obj, errors);\n\t\tsuper(`${message}: ${summary}`);\n\n\t\tthis.filename = filename;\n\t\tthis.obj = obj;\n\t\tthis.schema = schema;\n\t\tthis.errors = errors;\n\t}\n}\n","/**\n * Computes hash for given string.\n *\n * @internal\n */\nfunction cyrb53(str: string): number {\n\tconst a = 2654435761;\n\tconst b = 1597334677;\n\tconst c = 2246822507;\n\tconst d = 3266489909;\n\tconst e = 4294967296;\n\tconst f = 2097151;\n\tconst seed = 0;\n\tlet h1 = 0xdeadbeef ^ seed;\n\tlet h2 = 0x41c6ce57 ^ seed;\n\tfor (let i = 0, ch; i < str.length; i++) {\n\t\tch = str.charCodeAt(i);\n\t\th1 = Math.imul(h1 ^ ch, a);\n\t\th2 = Math.imul(h2 ^ ch, b);\n\t}\n\th1 = Math.imul(h1 ^ (h1 >>> 16), c) ^ Math.imul(h2 ^ (h2 >>> 13), d);\n\th2 = Math.imul(h2 ^ (h2 >>> 16), c) ^ Math.imul(h1 ^ (h1 >>> 13), d);\n\treturn e * (f & h2) + (h1 >>> 0);\n}\n\nexport const computeHash = cyrb53;\n","import { type KeywordDefinition } from \"ajv\";\nimport { type DataValidateFunction, type DataValidationCxt } from \"ajv/dist/types\";\n\n/**\n * AJV keyword \"regexp\" to validate the type to be a regular expression.\n * Injects errors with the \"type\" keyword to give the same output.\n */\n/* istanbul ignore next: manual testing */\nconst ajvRegexpValidate: DataValidateFunction = function (\n\tdata: unknown,\n\tdataCxt?: DataValidationCxt,\n): boolean {\n\tconst valid = data instanceof RegExp;\n\tif (!valid) {\n\t\tajvRegexpValidate.errors = [\n\t\t\t{\n\t\t\t\tinstancePath: dataCxt?.instancePath,\n\t\t\t\tschemaPath: undefined,\n\t\t\t\tkeyword: \"type\",\n\t\t\t\tmessage: \"should be a regular expression\",\n\t\t\t\tparams: {\n\t\t\t\t\tkeyword: \"type\",\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\t}\n\treturn valid;\n};\n\nexport const ajvRegexpKeyword: KeywordDefinition = {\n\tkeyword: \"regexp\",\n\tschema: false,\n\terrors: true,\n\tvalidate: ajvRegexpValidate,\n};\n","import { type KeywordDefinition } from \"ajv\";\nimport { type DataValidateFunction, type DataValidationCxt } from \"ajv/dist/types\";\n\n/**\n * AJV keyword \"function\" to validate the type to be a function. Injects errors\n * with the \"type\" keyword to give the same output.\n */\nconst ajvFunctionValidate: DataValidateFunction = function (\n\tdata: unknown,\n\tdataCxt?: DataValidationCxt,\n): boolean {\n\tconst valid = typeof data === \"function\";\n\tif (!valid) {\n\t\tajvFunctionValidate.errors = [\n\t\t\t{\n\t\t\t\tinstancePath: /* istanbul ignore next */ dataCxt?.instancePath,\n\t\t\t\tschemaPath: undefined,\n\t\t\t\tkeyword: \"type\",\n\t\t\t\tmessage: \"should be a function\",\n\t\t\t\tparams: {\n\t\t\t\t\tkeyword: \"type\",\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\t}\n\treturn valid;\n};\n\nexport const ajvFunctionKeyword: KeywordDefinition = {\n\tkeyword: \"function\",\n\tschema: false,\n\terrors: true,\n\tvalidate: ajvFunctionValidate,\n};\n","import { type DynamicValue } from \"../dom\";\nimport { type HtmlElementLike } from \"./html-element-like\";\nimport { type MetaAria, type MetaImplicitRoleCallback, type NormalizedMetaAria } from \"./meta-aria\";\n\n/**\n * @public\n */\nexport interface PermittedGroup {\n\texclude?: string | string[];\n}\n\n/**\n * @public\n */\nexport type CategoryOrTag = string;\n\n/**\n * @public\n * @deprecated Use callback variant instead.\n */\nexport type PropertyExpression = string | [string, any];\n\n/**\n * @public\n */\nexport type PermittedEntry = CategoryOrTag | PermittedGroup | Array<CategoryOrTag | PermittedGroup>;\n\n/**\n * @public\n */\nexport type Permitted = PermittedEntry[];\n\n/**\n * @public\n */\nexport type PermittedOrder = string[];\n\n/**\n * @public\n */\nexport type RequiredAncestors = string[];\n\n/**\n * @public\n */\nexport type RequiredContent = string[];\n\n/**\n * @public\n */\nexport enum TextContent {\n\t/* forbid node to have text content, inter-element whitespace is ignored */\n\tNONE = \"none\",\n\n\t/* node can have text but not required too */\n\tDEFAULT = \"default\",\n\n\t/* node requires text-nodes to be present (direct or by descendant) */\n\tREQUIRED = \"required\",\n\n\t/* node requires accessible text (hidden text is ignored, tries to get text from accessibility tree) */\n\tACCESSIBLE = \"accessible\",\n}\n\n/**\n * Callback for content category properties of `MetaData`. It takes a node and\n * returns whenever the element belongs to the content group or not.\n *\n * @public\n * @since 8.13.0\n * @param node - The node to determine if it belongs in the content category.\n * @returns `true` if the node belongs to the category.\n */\nexport type MetaCategoryCallback = (node: HtmlElementLike) => boolean;\n\n/**\n * Callback for the `focusable` property of `MetaData`. It takes a node and\n * returns whenever the element is focusable or not.\n *\n * @public\n * @since 8.9.0\n * @param node - The node to determine if it is focusable.\n * @returns `true` if the node is focusable.\n */\nexport type MetaFocusableCallback = (node: HtmlElementLike) => boolean;\n\n/**\n * Callback for the `allowed` property of `MetaAttribute`. It takes a node and\n * should return `null` if there is no errors and a string with an error\n * description if there is an error.\n *\n * @public\n * @param node - The node the attribute belongs to.\n * @param attr - The current attribute value being validated.\n */\nexport type MetaAttributeAllowedCallback = (\n\tnode: HtmlElementLike,\n\tattr: string | DynamicValue | null | undefined,\n) => string | null | undefined;\n\n/**\n * @public\n */\nexport interface MetaAttribute {\n\t/**\n\t * If set it should be a function evaluating to an error message or `null` if\n\t * the attribute is allowed.\n\t */\n\tallowed?: MetaAttributeAllowedCallback;\n\n\t/**\n\t * If true this attribute can only take boolean values: `my-attr`, `my-attr=\"`\n\t * or `my-attr=\"my-attr\"`.\n\t */\n\tboolean?: boolean;\n\n\t/**\n\t * If set this attribute is considered deprecated, set to `true` or a string\n\t * with more descriptive message.\n\t */\n\tdeprecated?: boolean | string;\n\n\t/**\n\t * If set it is an exhaustive list of all possible values (as `string` or\n\t * `RegExp`) this attribute can have (each token if list is set)\n\t */\n\tenum?: Array<string | RegExp>;\n\n\t/**\n\t * If `true` this attribute contains space-separated tokens and each token must\n\t * be valid by itself.\n\t */\n\tlist?: boolean;\n\n\t/**\n\t * If `true` this attribute can omit the value.\n\t */\n\tomit?: boolean;\n\n\t/**\n\t * If set this attribute is required to be present on the element.\n\t */\n\trequired?: boolean;\n}\n\n/**\n * Internal flags used during configuration loading.\n *\n * @internal\n */\nexport interface InternalAttributeFlags {\n\t/* set to true if attribute is marked for deletion */\n\tdelete?: true;\n}\n\n/**\n * @public\n */\nexport type PermittedAttribute = Record<string, MetaAttribute | Array<string | RegExp> | null>;\n\n/**\n * @public\n */\nexport interface DeprecatedElement {\n\tmessage?: string;\n\tdocumentation?: string;\n\tsource?: string;\n}\n\n/**\n * @public\n */\nexport interface FormAssociated {\n\t/** This element can be disabled using the `disabled` attribute */\n\tdisablable: boolean;\n\n\t/** Listed elements have a name attribute and is listed in the form and fieldset elements property. */\n\tlisted: boolean;\n}\n\n/**\n * @public\n */\nexport interface MetaData {\n\t/* special keyword to extend metadata from another entry */\n\tinherit?: string;\n\n\t/* content categories */\n\tmetadata?: boolean | PropertyExpression | MetaCategoryCallback;\n\tflow?: boolean | PropertyExpression | MetaCategoryCallback;\n\tsectioning?: boolean | PropertyExpression | MetaCategoryCallback;\n\theading?: boolean | PropertyExpression | MetaCategoryCallback;\n\tphrasing?: boolean | PropertyExpression | MetaCategoryCallback;\n\tembedded?: boolean | PropertyExpression | MetaCategoryCallback;\n\tinteractive?: boolean | PropertyExpression | MetaCategoryCallback;\n\n\t/* element properties */\n\tdeprecated?: boolean | string | DeprecatedElement;\n\tforeign?: boolean;\n\tvoid?: boolean;\n\ttransparent?: boolean | string[];\n\timplicitClosed?: string[];\n\tscriptSupporting?: boolean;\n\t/** Mark element as able to receive focus (without explicit `tabindex`) */\n\tfocusable?: boolean | MetaFocusableCallback;\n\tform?: boolean;\n\t/** Mark element as a form-associated element */\n\tformAssociated?: Partial<FormAssociated>;\n\tlabelable?: boolean | PropertyExpression;\n\n\t/** @deprecated use {@link MetaAria.implicitRole} instead */\n\timplicitRole?: MetaImplicitRoleCallback;\n\n\t/** WAI-ARIA attributes */\n\taria?: MetaAria;\n\n\t/* attribute */\n\tdeprecatedAttributes?: string[];\n\trequiredAttributes?: string[];\n\tattributes?: PermittedAttribute;\n\n\t/* permitted data */\n\tpermittedContent?: Permitted;\n\tpermittedDescendants?: Permitted;\n\tpermittedOrder?: PermittedOrder;\n\tpermittedParent?: Permitted;\n\trequiredAncestors?: RequiredAncestors;\n\trequiredContent?: RequiredContent;\n\ttextContent?: TextContent | `${TextContent}`;\n}\n\n/**\n * Properties listed here can be used to reverse search elements with the given\n * property enabled. See [[MetaTable.getTagsWithProperty]].\n *\n * @public\n */\nexport type MetaLookupableProperty =\n\t| \"metadata\"\n\t| \"flow\"\n\t| \"sectioning\"\n\t| \"heading\"\n\t| \"phrasing\"\n\t| \"embedded\"\n\t| \"interactive\"\n\t| \"deprecated\"\n\t| \"foreign\"\n\t| \"void\"\n\t| \"transparent\"\n\t| \"scriptSupporting\"\n\t| \"focusable\"\n\t| \"form\"\n\t| \"formAssociated\"\n\t| \"labelable\";\n\n/**\n * Properties listed here can be copied (loaded) onto another element using\n * [[HtmlElement.loadMeta]].\n *\n * @public\n */\nexport const MetaCopyableProperty: Array<keyof MetaElement> = [\n\t\"metadata\",\n\t\"flow\",\n\t\"sectioning\",\n\t\"heading\",\n\t\"phrasing\",\n\t\"embedded\",\n\t\"interactive\",\n\t\"transparent\",\n\t\"focusable\",\n\t\"form\",\n\t\"formAssociated\",\n\t\"labelable\",\n\t\"attributes\",\n\t\"aria\",\n\t\"permittedContent\",\n\t\"permittedDescendants\",\n\t\"permittedOrder\",\n\t\"permittedParent\",\n\t\"requiredAncestors\",\n\t\"requiredContent\",\n];\n\n/**\n * @public\n */\nexport interface MetaElement extends Omit<MetaData, \"deprecatedAttributes\" | \"requiredAttributes\"> {\n\t/* filled internally for reverse lookup */\n\ttagName: string;\n\n\tfocusable: boolean | MetaFocusableCallback;\n\tformAssociated?: FormAssociated;\n\n\t/** @deprecated Use {@link MetaAria.implicitRole} instead */\n\timplicitRole: MetaImplicitRoleCallback;\n\n\t/** WAI-ARIA attributes */\n\taria: NormalizedMetaAria;\n\n\tattributes: Record<string, MetaAttribute>;\n\ttextContent?: TextContent;\n}\n\n/**\n * @public\n */\nexport type MetaDataTable = Record<string, MetaData>;\n\n/**\n * @internal\n */\nexport type ElementTable = Record<string, MetaElement>;\n\n/**\n * @internal\n */\nexport function setMetaProperty<T extends keyof MetaElement>(\n\tdst: MetaElement,\n\tkey: T,\n\tvalue: MetaElement[T],\n): void {\n\tdst[key] = value;\n}\n","import {\n\ttype FormAssociated,\n\ttype InternalAttributeFlags,\n\ttype MetaAttribute,\n\ttype MetaData,\n\ttype MetaElement,\n\ttype TextContent,\n} from \"./element\";\nimport { type HtmlElementLike } from \"./html-element-like\";\nimport { type MetaAria } from \"./meta-aria\";\n\nfunction isSet(value?: unknown): boolean {\n\treturn typeof value !== \"undefined\";\n}\n\nfunction flag(value?: boolean): true | undefined {\n\treturn value ? true : undefined;\n}\n\nfunction stripUndefined(\n\tsrc: MetaAttribute & InternalAttributeFlags,\n): MetaAttribute & InternalAttributeFlags {\n\tconst entries = Object.entries(src).filter(([, value]) => isSet(value));\n\treturn Object.fromEntries(entries);\n}\n\nfunction migrateSingleAttribute(\n\tsrc: MetaData,\n\tkey: string,\n): MetaAttribute & InternalAttributeFlags {\n\tconst result: MetaAttribute & InternalAttributeFlags = {};\n\n\tresult.deprecated = flag(src.deprecatedAttributes?.includes(key));\n\tresult.required = flag(src.requiredAttributes?.includes(key));\n\tresult.omit = undefined;\n\n\tconst attr = src.attributes ? src.attributes[key] : undefined;\n\tif (typeof attr === \"undefined\") {\n\t\treturn stripUndefined(result);\n\t}\n\n\t/* when the attribute is set to null we use a special property \"delete\" to\n\t * flag it, if it is still set during merge (inheritance, overwriting, etc) the attribute will be removed */\n\tif (attr === null) {\n\t\tresult.delete = true;\n\t\treturn stripUndefined(result);\n\t}\n\n\tif (Array.isArray(attr)) {\n\t\tif (attr.length === 0) {\n\t\t\tresult.boolean = true;\n\t\t} else {\n\t\t\tresult.enum = attr.filter((it) => it !== \"\");\n\t\t\tif (attr.includes(\"\")) {\n\t\t\t\tresult.omit = true;\n\t\t\t}\n\t\t}\n\t\treturn stripUndefined(result);\n\t} else {\n\t\treturn stripUndefined({ ...result, ...attr });\n\t}\n}\n\nfunction migrateAttributes(src: MetaData): Record<string, MetaAttribute & InternalAttributeFlags> {\n\tconst keys = [\n\t\t...Object.keys(src.attributes ?? {}),\n\t\t...(src.requiredAttributes ?? []),\n\t\t...(src.deprecatedAttributes ?? []),\n\t].sort();\n\n\tconst entries: Array<[string, MetaAttribute & InternalAttributeFlags]> = keys.map((key) => {\n\t\treturn [key, migrateSingleAttribute(src, key)];\n\t});\n\n\treturn Object.fromEntries(entries);\n}\n\nfunction normalizeAriaImplicitRole(\n\tvalue: MetaAria[\"implicitRole\"],\n): (node: HtmlElementLike) => string | null {\n\tif (!value) {\n\t\treturn () => null;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn () => value;\n\t}\n\treturn value;\n}\n\nfunction normalizeAriaNaming(\n\tvalue: MetaAria[\"naming\"],\n): (node: HtmlElementLike) => \"prohibited\" | \"allowed\" {\n\tif (!value) {\n\t\t/* default value is also stored in {@link ariaNaming} */\n\t\treturn () => \"allowed\";\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn () => value;\n\t}\n\treturn value;\n}\n\nexport function migrateElement(src: MetaData): Omit<MetaElement, \"tagName\"> {\n\tconst implicitRole = normalizeAriaImplicitRole(src.implicitRole ?? src.aria?.implicitRole);\n\tconst result = {\n\t\t...src,\n\t\t...{\n\t\t\tformAssociated: undefined as FormAssociated | undefined,\n\t\t},\n\t\tattributes: migrateAttributes(src),\n\t\ttextContent: src.textContent as TextContent | undefined,\n\t\tfocusable: src.focusable ?? false,\n\t\timplicitRole,\n\t\taria: {\n\t\t\timplicitRole,\n\t\t\tnaming: normalizeAriaNaming(src.aria?.naming),\n\t\t},\n\t};\n\n\t/* removed properties */\n\tdelete result.deprecatedAttributes;\n\tdelete result.requiredAttributes;\n\n\t/* strip out undefined */\n\tif (!result.textContent) {\n\t\tdelete result.textContent;\n\t}\n\n\tif (src.formAssociated) {\n\t\tresult.formAssociated = {\n\t\t\tdisablable: Boolean(src.formAssociated.disablable),\n\t\t\tlisted: Boolean(src.formAssociated.listed),\n\t\t};\n\t} else {\n\t\tdelete result.formAssociated;\n\t}\n\n\treturn result;\n}\n","import { type HtmlElement } from \"../../dom\";\n\n/**\n * Returns true if given element is a descendant of given tagname.\n *\n * @internal\n */\nexport function isDescendant(node: HtmlElement, tagName: string): boolean {\n\tlet cur: HtmlElement | null = node.parent;\n\twhile (cur && !cur.isRootElement()) {\n\t\tif (cur.is(tagName)) {\n\t\t\treturn true;\n\t\t}\n\t\tcur = cur.parent;\n\t}\n\treturn false;\n}\n","import { type HtmlElement } from \"../../dom\";\n\n/**\n * Returns true if given element has given attribute (no matter the value, null,\n * dynamic, etc).\n */\nexport function hasAttribute(node: HtmlElement, attr: string): boolean {\n\treturn node.hasAttribute(attr);\n}\n","import { type HtmlElement } from \"../../dom\";\n\n/**\n * Matches attribute against value.\n */\nexport function matchAttribute(\n\tnode: HtmlElement,\n\tkey: string,\n\top: \"!=\" | \"=\",\n\tvalue: string,\n): boolean {\n\tconst nodeValue = (node.getAttributeValue(key) ?? \"\").toLowerCase();\n\tswitch (op) {\n\t\tcase \"!=\":\n\t\t\treturn nodeValue !== value;\n\t\tcase \"=\":\n\t\t\treturn nodeValue === value;\n\t}\n}\n","import Ajv, { type ValidateFunction, type SchemaObject } from \"ajv\";\nimport ajvSchemaDraft from \"ajv/lib/refs/json-schema-draft-06.json\";\nimport deepmerge from \"deepmerge\";\nimport { type HtmlElement } from \"../dom\";\nimport { ensureError, SchemaValidationError, UserError, InheritError } from \"../error\";\nimport { type SchemaValidationPatch } from \"../plugin\";\nimport { computeHash } from \"../utils/compute-hash\";\nimport schema from \"../schema/elements.json\";\nimport { ajvFunctionKeyword, ajvRegexpKeyword } from \"../schema/keywords\";\nimport {\n\ttype InternalAttributeFlags,\n\ttype MetaAttribute,\n\ttype MetaDataTable,\n\ttype MetaElement,\n\ttype MetaLookupableProperty,\n\t/* eslint-disable-next-line import/no-deprecated -- while deprecated it is still supported until a later major with breaking changes */\n\ttype PropertyExpression,\n\tsetMetaProperty,\n} from \"./element\";\nimport { migrateElement } from \"./migrate\";\nimport { hasAttribute, isDescendant, matchAttribute } from \"./evaluator\";\n\nconst dynamicKeys = [\n\t\"metadata\",\n\t\"flow\",\n\t\"sectioning\",\n\t\"heading\",\n\t\"phrasing\",\n\t\"embedded\",\n\t\"interactive\",\n\t\"labelable\",\n] satisfies Array<keyof MetaElement>;\n\ntype PropertyEvaluator = (node: HtmlElement, options: string | [string, string, string]) => boolean;\n\nconst functionTable: Record<string, PropertyEvaluator | undefined> = {\n\tisDescendant: isDescendantFacade,\n\thasAttribute: hasAttributeFacade,\n\tmatchAttribute: matchAttributeFacade,\n};\n\nconst schemaCache = new Map<number, ValidateFunction<MetaDataTable>>();\n\nfunction clone<T>(src: T): T {\n\treturn JSON.parse(JSON.stringify(src)) as T;\n}\n\nfunction overwriteMerge<T>(a: T[], b: T[]): T[] {\n\treturn b;\n}\n\n/**\n * @public\n */\nexport class MetaTable {\n\tprivate readonly elements: Record<string, MetaElement | undefined>;\n\n\tprivate schema: SchemaObject;\n\n\t/**\n\t * @internal\n\t */\n\tpublic constructor() {\n\t\tthis.elements = {};\n\t\tthis.schema = clone(schema);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic init(): void {\n\t\tthis.resolveGlobal();\n\t}\n\n\t/**\n\t * Extend validation schema.\n\t *\n\t * @public\n\t */\n\tpublic extendValidationSchema(patch: SchemaValidationPatch): void {\n\t\tif (patch.properties) {\n\t\t\tthis.schema = deepmerge(this.schema, {\n\t\t\t\tpatternProperties: {\n\t\t\t\t\t\"^[^$].*$\": {\n\t\t\t\t\t\tproperties: patch.properties,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t\tif (patch.definitions) {\n\t\t\tthis.schema = deepmerge(this.schema, {\n\t\t\t\tdefinitions: patch.definitions,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Load metadata table from object.\n\t *\n\t * @public\n\t * @param obj - Object with metadata to load\n\t * @param filename - Optional filename used when presenting validation error\n\t */\n\tpublic loadFromObject(obj: unknown, filename: string | null = null): void {\n\t\ttry {\n\t\t\tconst validate = this.getSchemaValidator();\n\t\t\tif (!validate(obj)) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\tfilename,\n\t\t\t\t\t`Element metadata is not valid`,\n\t\t\t\t\tobj,\n\t\t\t\t\tthis.schema,\n\t\t\t\t\t/* istanbul ignore next: AJV sets .errors when validate returns false */\n\t\t\t\t\tvalidate.errors ?? [],\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\t\tif (key === \"$schema\") continue;\n\t\t\t\tthis.addEntry(key, migrateElement(value));\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (err instanceof InheritError) {\n\t\t\t\terr.filename = filename;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tif (err instanceof SchemaValidationError) {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tif (!filename) {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tthrow new UserError(`Failed to load element metadata from \"${filename}\"`, ensureError(err));\n\t\t}\n\t}\n\n\t/**\n\t * Get [[MetaElement]] for the given tag. If no specific metadata is present\n\t * the global metadata is returned or null if no global is present.\n\t *\n\t * @public\n\t * @returns A shallow copy of metadata.\n\t */\n\tpublic getMetaFor(tagName: string): MetaElement | null {\n\t\tconst meta = this.elements[tagName.toLowerCase()] ?? this.elements[\"*\"];\n\t\tif (meta) {\n\t\t\treturn { ...meta };\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t * Find all tags which has enabled given property.\n\t *\n\t * @public\n\t */\n\tpublic getTagsWithProperty(propName: MetaLookupableProperty): string[] {\n\t\treturn this.entries.filter(([, entry]) => entry[propName]).map(([tagName]) => tagName);\n\t}\n\n\t/**\n\t * Find tag matching tagName or inheriting from it.\n\t *\n\t * @public\n\t */\n\tpublic getTagsDerivedFrom(tagName: string): string[] {\n\t\treturn this.entries\n\t\t\t.filter(([key, entry]) => key === tagName || entry.inherit === tagName)\n\t\t\t.map(([tagName]) => tagName);\n\t}\n\n\tprivate addEntry(tagName: string, entry: Omit<MetaElement, \"tagName\">): void {\n\t\tlet parent = this.elements[tagName];\n\n\t\t/* handle inheritance */\n\t\tif (entry.inherit) {\n\t\t\tconst name = entry.inherit;\n\t\t\tparent = this.elements[name];\n\t\t\tif (!parent) {\n\t\t\t\tthrow new InheritError({\n\t\t\t\t\ttagName,\n\t\t\t\t\tinherit: name,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t/* merge all sources together */\n\t\tconst expanded = this.mergeElement(parent ?? {}, { ...entry, tagName });\n\t\texpandRegex(expanded);\n\n\t\tthis.elements[tagName] = expanded;\n\t}\n\n\t/**\n\t * Construct a new AJV schema validator.\n\t */\n\tprivate getSchemaValidator(): ValidateFunction<MetaDataTable> {\n\t\tconst hash = computeHash(JSON.stringify(this.schema));\n\t\tconst cached = schemaCache.get(hash);\n\t\tif (cached) {\n\t\t\treturn cached;\n\t\t} else {\n\t\t\tconst ajv = new Ajv({ strict: true, strictTuples: true, strictTypes: true });\n\t\t\tajv.addMetaSchema(ajvSchemaDraft);\n\t\t\tajv.addKeyword(ajvFunctionKeyword);\n\t\t\tajv.addKeyword(ajvRegexpKeyword);\n\t\t\tajv.addKeyword({ keyword: \"copyable\" });\n\t\t\tconst validate = ajv.compile<MetaDataTable>(this.schema);\n\t\t\tschemaCache.set(hash, validate);\n\t\t\treturn validate;\n\t\t}\n\t}\n\n\t/**\n\t * @public\n\t */\n\tpublic getJSONSchema(): SchemaObject {\n\t\treturn this.schema;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate get entries(): Array<[string, MetaElement]> {\n\t\treturn Object.entries(this.elements) as Array<[string, MetaElement]>;\n\t}\n\n\t/**\n\t * Finds the global element definition and merges each known element with the\n\t * global, e.g. to assign global attributes.\n\t */\n\tprivate resolveGlobal(): void {\n\t\t/* skip if there is no global elements */\n\t\tif (!this.elements[\"*\"]) return;\n\n\t\t/* fetch and remove the global element, it should not be resolvable by\n\t\t * itself */\n\t\tconst global: Partial<MetaElement> = this.elements[\"*\"];\n\t\tdelete this.elements[\"*\"];\n\n\t\t/* hack: unset default properties which global should not override */\n\t\tdelete global.tagName;\n\t\tdelete global.void;\n\n\t\t/* merge elements */\n\t\tfor (const [tagName, entry] of this.entries) {\n\t\t\tthis.elements[tagName] = this.mergeElement(global, entry);\n\t\t}\n\t}\n\n\tprivate mergeElement(a: Partial<MetaElement>, b: MetaElement): MetaElement {\n\t\tconst merged = deepmerge(a, b, { arrayMerge: overwriteMerge });\n\n\t\t/* special handling when removing attributes by setting them to null\n\t\t * resulting in the deletion flag being set */\n\t\tconst filteredAttrs = Object.entries(\n\t\t\tmerged.attributes as Record<string, MetaAttribute & InternalAttributeFlags>,\n\t\t).filter(([, attr]) => {\n\t\t\tconst val = !attr.delete;\n\t\t\tdelete attr.delete;\n\t\t\treturn val;\n\t\t});\n\t\tmerged.attributes = Object.fromEntries(filteredAttrs);\n\n\t\treturn merged;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic resolve(node: HtmlElement): void {\n\t\tif (node.meta) {\n\t\t\texpandProperties(node, node.meta);\n\t\t}\n\t}\n}\n\nfunction expandProperties(node: HtmlElement, entry: MetaElement): void {\n\tfor (const key of dynamicKeys) {\n\t\tconst property = entry[key];\n\t\tif (!property) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof property === \"function\") {\n\t\t\tsetMetaProperty(entry, key, property(node._adapter));\n\t\t} else if (typeof property !== \"boolean\") {\n\t\t\tsetMetaProperty(entry, key, evaluateProperty(node, property));\n\t\t}\n\t}\n\tif (typeof entry.focusable === \"function\") {\n\t\tsetMetaProperty(entry, \"focusable\", entry.focusable(node._adapter));\n\t}\n}\n\n/**\n * Given a string it returns either the string as-is or if the string is wrapped\n * in /../ it creates and returns a regex instead.\n */\nfunction expandRegexValue(value: string | RegExp): string | RegExp {\n\tif (value instanceof RegExp) {\n\t\treturn value;\n\t}\n\t/* match anything starting and ending with `/`, optionally with `/i` at the end. */\n\tconst match = value.match(/^\\/(.*(?=\\/))\\/(i?)$/);\n\tif (match) {\n\t\tconst [, expr, flags] = match;\n\t\t/* eslint-disable security/detect-non-literal-regexp -- expected to be regexp */\n\t\tif (expr.startsWith(\"^\") || expr.endsWith(\"$\")) {\n\t\t\treturn new RegExp(expr, flags);\n\t\t} else {\n\t\t\treturn new RegExp(`^${expr}$`, flags);\n\t\t}\n\t\t/* eslint-enable security/detect-non-literal-regexp */\n\t} else {\n\t\treturn value;\n\t}\n}\n\n/**\n * Expand all regular expressions in strings (\"/../\"). This mutates the object.\n */\nfunction expandRegex(entry: MetaElement): void {\n\tfor (const [name, values] of Object.entries(entry.attributes)) {\n\t\tif (values.enum) {\n\t\t\tentry.attributes[name].enum = values.enum.map(expandRegexValue);\n\t\t}\n\t}\n}\n\n/* eslint-disable-next-line import/no-deprecated -- while deprecated it is still supported until a later major with breaking changes */\nfunction evaluateProperty(node: HtmlElement, expr: PropertyExpression): boolean {\n\tconst [func, options] = parseExpression(expr);\n\treturn func(node, options);\n}\n\nfunction parseExpression(\n\t/* eslint-disable-next-line import/no-deprecated -- while deprecated it is still supported until a later major with breaking changes */\n\texpr: PropertyExpression,\n): [PropertyEvaluator, string | [string, string, string]] {\n\tif (typeof expr === \"string\") {\n\t\treturn parseExpression([expr, {}]);\n\t} else {\n\t\t/* eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- old style expressions should be replaced with typesafe functions */\n\t\tconst [funcName, options] = expr;\n\t\tconst func = functionTable[funcName];\n\t\tif (!func) {\n\t\t\tthrow new Error(`Failed to find function \"${funcName}\" when evaluating property expression`);\n\t\t}\n\t\treturn [func, options as string | [string, string, string]];\n\t}\n}\n\nfunction isDescendantFacade(node: HtmlElement, tagName: any): boolean {\n\tif (typeof tagName !== \"string\") {\n\t\tthrow new Error(\n\t\t\t`Property expression \"isDescendant\" must take string argument when evaluating metadata for <${node.tagName}>`,\n\t\t);\n\t}\n\treturn isDescendant(node, tagName);\n}\n\nfunction hasAttributeFacade(node: HtmlElement, attr: any): boolean {\n\tif (typeof attr !== \"string\") {\n\t\tthrow new Error(\n\t\t\t`Property expression \"hasAttribute\" must take string argument when evaluating metadata for <${node.tagName}>`,\n\t\t);\n\t}\n\treturn hasAttribute(node, attr);\n}\n\nfunction matchAttributeFacade(node: HtmlElement, match: string | string[]): boolean {\n\tif (!Array.isArray(match) || match.length !== 3) {\n\t\tthrow new Error(\n\t\t\t`Property expression \"matchAttribute\" must take [key, op, value] array as argument when evaluating metadata for <${node.tagName}>`,\n\t\t);\n\t}\n\tconst [key, op, value] = match.map((x) => x.toLowerCase());\n\tswitch (op) {\n\t\tcase \"!=\":\n\t\tcase \"=\":\n\t\t\treturn matchAttribute(node, key, op, value);\n\t\tdefault:\n\t\t\tthrow new Error(\n\t\t\t\t`Property expression \"matchAttribute\" has invalid operator \"${op}\" when evaluating metadata for <${node.tagName}>`,\n\t\t\t);\n\t}\n}\n","/**\n * @public\n */\nexport class DynamicValue {\n\tpublic readonly expr: string;\n\n\tpublic constructor(expr: string) {\n\t\tthis.expr = expr;\n\t}\n\n\tpublic toString(): string {\n\t\treturn this.expr;\n\t}\n}\n","import { type Location } from \"../context\";\nimport { DynamicValue } from \"./dynamic-value\";\n\ninterface StaticAttribute {\n\treadonly value: string | null;\n}\n\ninterface DynamicAttribute {\n\treadonly value: DynamicValue;\n}\n\n/**\n * Type guard for [[Attribute]] testing if the value is static (missing value is\n * considered static as it is a fixed known value).\n *\n * @public\n */\nexport function isStaticAttribute(attr: Attribute | null): attr is Attribute & StaticAttribute {\n\treturn Boolean(attr?.isStatic);\n}\n\n/**\n * Type guard for [[Attribute]] testing if the value is dynamic.\n *\n * @public\n */\nexport function isDynamicAttribute(attr: Attribute | null): attr is Attribute & DynamicAttribute {\n\treturn Boolean(attr?.isDynamic);\n}\n\n/**\n * DOM Attribute.\n *\n * Represents a HTML attribute. Can contain either a fixed static value or a\n * placeholder for dynamic values (e.g. interpolated).\n *\n * @public\n */\nexport class Attribute {\n\t/** Attribute name */\n\tpublic readonly key: string;\n\tpublic readonly value: string | DynamicValue | null;\n\tpublic readonly keyLocation: Location;\n\tpublic readonly valueLocation: Location | null;\n\tpublic readonly originalAttribute?: string;\n\n\t/**\n\t * @param key - Attribute name.\n\t * @param value - Attribute value. Set to `null` for boolean attributes.\n\t * @param keyLocation - Source location of attribute name.\n\t * @param valueLocation - Source location of attribute value.\n\t * @param originalAttribute - If this attribute was dynamically added via a\n\t * transformation (e.g. vuejs `:id` generating the `id` attribute) this\n\t * parameter should be set to the attribute name of the source attribute (`:id`).\n\t */\n\tpublic constructor(\n\t\tkey: string,\n\t\tvalue: string | DynamicValue | null,\n\t\tkeyLocation: Location,\n\t\tvalueLocation: Location | null,\n\t\toriginalAttribute?: string,\n\t) {\n\t\tthis.key = key;\n\t\tthis.value = value;\n\t\tthis.keyLocation = keyLocation;\n\t\tthis.valueLocation = valueLocation;\n\t\tthis.originalAttribute = originalAttribute;\n\n\t\t/* force undefined to null */\n\t\tif (typeof this.value === \"undefined\") {\n\t\t\tthis.value = null;\n\t\t}\n\t}\n\n\t/**\n\t * Flag set to true if the attribute value is static.\n\t */\n\tpublic get isStatic(): boolean {\n\t\treturn !this.isDynamic;\n\t}\n\n\t/**\n\t * Flag set to true if the attribute value is dynamic.\n\t */\n\tpublic get isDynamic(): boolean {\n\t\treturn this.value instanceof DynamicValue;\n\t}\n\n\t/**\n\t * Test attribute value.\n\t *\n\t * @param pattern - Pattern to match value against. Can be a RegExp, literal\n\t * string or an array of strings (returns true if any value matches the\n\t * array).\n\t * @param dynamicMatches - If true `DynamicValue` will always match, if false\n\t * it never matches.\n\t * @returns `true` if attribute value matches pattern.\n\t */\n\tpublic valueMatches(\n\t\tpattern: RegExp | string | string[],\n\t\tdynamicMatches: boolean = true,\n\t): boolean {\n\t\tif (this.value === null) {\n\t\t\treturn false;\n\t\t}\n\n\t\t/* dynamic values matches everything */\n\t\tif (this.value instanceof DynamicValue) {\n\t\t\treturn dynamicMatches;\n\t\t}\n\n\t\t/* test against an array of keywords */\n\t\tif (Array.isArray(pattern)) {\n\t\t\treturn pattern.includes(this.value);\n\t\t}\n\n\t\t/* test value against pattern */\n\t\tif (pattern instanceof RegExp) {\n\t\t\treturn this.value.match(pattern) !== null;\n\t\t} else {\n\t\t\treturn this.value === pattern;\n\t\t}\n\t}\n}\n","import { DynamicValue } from \"../dynamic-value\";\nimport { type CSSStyleDeclaration } from \"./css-style-declaration\";\n\ntype PropertyValuePair = [property: string, value: string];\n\nfunction getCSSDeclarations(value: string): PropertyValuePair[] {\n\treturn value\n\t\t.trim()\n\t\t.split(\";\")\n\t\t.filter(Boolean)\n\t\t.map((it): PropertyValuePair => {\n\t\t\tconst [property, value] = it.split(\":\", 2);\n\t\t\treturn [property.trim(), value ? value.trim() : \"\"];\n\t\t});\n}\n\n/**\n * @internal\n */\nexport function parseCssDeclaration(value?: string | DynamicValue | null): CSSStyleDeclaration {\n\tif (!value || value instanceof DynamicValue) {\n\t\treturn {};\n\t}\n\tconst pairs = getCSSDeclarations(value);\n\treturn Object.fromEntries(pairs);\n}\n","/**\n * @public\n */\nexport interface Location {\n\t/**\n\t * The filemane this location refers to.\n\t */\n\treadonly filename: string;\n\n\t/**\n\t * The string offset (number of characters into the string) this location\n\t * refers to.\n\t */\n\treadonly offset: number;\n\n\t/**\n\t * The line number in the file.\n\t */\n\treadonly line: number;\n\n\t/**\n\t * The column number in the file. Tabs counts as 1 (not expanded).\n\t */\n\treadonly column: number;\n\n\t/**\n\t * The number of characters this location refers to. This includes any\n\t * whitespace characters such as newlines.\n\t */\n\treadonly size: number;\n}\n\ninterface LocationRW {\n\tfilename: string;\n\toffset: number;\n\tline: number;\n\tcolumn: number;\n\tsize: number;\n}\n\nfunction sliceSize(size: number, begin: number, end?: number): number {\n\tif (typeof size !== \"number\") {\n\t\treturn size;\n\t}\n\tif (typeof end !== \"number\") {\n\t\treturn size - begin;\n\t}\n\tif (end < 0) {\n\t\tend = size + end;\n\t}\n\treturn Math.min(size, end - begin);\n}\n\n/**\n * Calculate a new location by offsetting this location.\n *\n * If the references text with newlines the wrap parameter must be set to\n * properly calculate line and column information. If not given the text is\n * assumed to contain no newlines.\n *\n * @public\n * @param location - Source location\n * @param begin - Start location. Default is 0.\n * @param end - End location. Default is size of location. Negative values are\n * counted from end, e.g. `-2` means `size - 2`.\n * @param wrap - If given, line/column is wrapped for each newline occuring\n * before location end.\n */\nexport function sliceLocation(\n\tlocation: Location,\n\tbegin: number,\n\tend?: number,\n\twrap?: string,\n): Location;\n\n/**\n * @public\n */\nexport function sliceLocation(\n\tlocation: Location | null | undefined,\n\tbegin: number,\n\tend?: number,\n\twrap?: string,\n): Location | null;\n\nexport function sliceLocation(\n\tlocation: Location | null | undefined,\n\tbegin: number,\n\tend?: number,\n\twrap?: string,\n): Location | null {\n\tif (!location) return null;\n\tconst size = sliceSize(location.size, begin, end);\n\tconst sliced: LocationRW = {\n\t\tfilename: location.filename,\n\t\toffset: location.offset + begin,\n\t\tline: location.line,\n\t\tcolumn: location.column + begin,\n\t\tsize,\n\t};\n\n\t/* if text content is provided try to find all newlines and modify line/column accordingly */\n\tif (wrap) {\n\t\tlet index = -1;\n\t\tconst col = sliced.column;\n\t\tdo {\n\t\t\tindex = wrap.indexOf(\"\\n\", index + 1);\n\t\t\tif (index >= 0 && index < begin) {\n\t\t\t\tsliced.column = col - (index + 1);\n\t\t\t\tsliced.line++;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} while (true); // eslint-disable-line no-constant-condition, @typescript-eslint/no-unnecessary-condition -- it will break out\n\t}\n\n\treturn sliced;\n}\n","export enum State {\n\tINITIAL = 1,\n\tDOCTYPE,\n\tTEXT,\n\tTAG,\n\tATTR,\n\tCDATA,\n\tSCRIPT,\n\tSTYLE,\n}\n","import { type Location } from \"./location\";\nimport { type Source } from \"./source\";\nimport { State } from \"./state\";\n\nexport enum ContentModel {\n\tTEXT = 1,\n\tSCRIPT,\n\tSTYLE,\n}\n\n/**\n * @internal\n */\nexport class Context {\n\tpublic contentModel: ContentModel;\n\tpublic state: State;\n\tpublic string: string;\n\tprivate filename: string;\n\tprivate offset: number;\n\tprivate line: number;\n\tprivate column: number;\n\n\tpublic constructor(source: Source) {\n\t\tthis.state = State.INITIAL;\n\t\tthis.string = source.data;\n\t\tthis.filename = source.filename;\n\t\tthis.offset = source.offset;\n\t\tthis.line = source.line;\n\t\tthis.column = source.column;\n\t\tthis.contentModel = ContentModel.TEXT;\n\t}\n\n\tpublic getTruncatedLine(n: number = 13): string {\n\t\treturn JSON.stringify(this.string.length > n ? `${this.string.slice(0, 10)}...` : this.string);\n\t}\n\n\tpublic consume(n: number | string[], state: State): void {\n\t\t/* if \"n\" is an regex match the first value is the full matched\n\t\t * string so consume that many characters. */\n\t\tif (typeof n !== \"number\") {\n\t\t\tn = n[0].length; /* regex match */\n\t\t}\n\n\t\t/* poor mans line counter :( */\n\t\tlet consumed = this.string.slice(0, n);\n\t\tlet offset;\n\t\twhile ((offset = consumed.indexOf(\"\\n\")) >= 0) {\n\t\t\tthis.line++;\n\t\t\tthis.column = 1;\n\t\t\tconsumed = consumed.substr(offset + 1);\n\t\t}\n\t\tthis.column += consumed.length;\n\t\tthis.offset += n;\n\n\t\t/* remove N chars */\n\t\tthis.string = this.string.substr(n);\n\n\t\t/* change state */\n\t\tthis.state = state;\n\t}\n\n\tpublic getLocation(size: number): Location {\n\t\treturn {\n\t\t\tfilename: this.filename,\n\t\t\toffset: this.offset,\n\t\t\tline: this.line,\n\t\t\tcolumn: this.column,\n\t\t\tsize,\n\t\t};\n\t}\n}\n\nexport default Context;\n","import { type Source } from \"./source\";\n\n/**\n * Ensures all fields are set to something sane. This wont normally be needed\n * but with non-typescript usage (or if one is lying to typescript `as Source`)\n * some fields might be missing after all.\n *\n * This function is only to be called at API boundaries and not internally\n * inside the codebase.\n *\n * @internal\n */\nexport function normalizeSource(source: Partial<Source> & Pick<Source, \"data\">): Source {\n\treturn {\n\t\tfilename: \"\",\n\t\toffset: 0,\n\t\tline: 1,\n\t\tcolumn: 1,\n\t\t...source,\n\t};\n}\n","/**\n * @public\n */\nexport enum NodeType {\n\tELEMENT_NODE = 1,\n\tTEXT_NODE = 3,\n\tDOCUMENT_NODE = 9,\n}\n","import { type Location } from \"../context\";\nimport { type RuleBlocker } from \"../engine\";\nimport { NodeType } from \"./nodetype\";\nimport { type DOMNodeCache } from \"./cache\";\n\n/**\n * @public\n */\nexport type DOMInternalID = number;\n\nconst DOCUMENT_NODE_NAME = \"#document\";\nconst TEXT_CONTENT = Symbol(\"textContent\");\n\ndeclare module \"./cache\" {\n\texport interface DOMNodeCache {\n\t\t[TEXT_CONTENT]: string;\n\t}\n}\n\nlet counter = 0;\n\n/* istanbul ignore next: only for testing */\nexport function reset(): void {\n\tcounter = 0;\n}\n\n/**\n * @public\n */\nexport class DOMNode {\n\tpublic readonly nodeName: string;\n\tpublic readonly nodeType: NodeType;\n\tpublic readonly childNodes: DOMNode[];\n\n\tpublic readonly location: Location;\n\n\t/**\n\t * @internal\n\t */\n\tpublic readonly unique: DOMInternalID;\n\n\tprivate cache: null | Map<string | number | symbol, any>;\n\n\t/**\n\t * Set of disabled rules for this node.\n\t *\n\t * Rules disabled by using directives are added here.\n\t */\n\tprivate disabledRules: Set<string>;\n\n\t/**\n\t * Set of blocked rules for this node.\n\t *\n\t * Rules blocked by using directives are added here.\n\t */\n\tprivate blockedRules: Map<string, RuleBlocker[]>;\n\n\t/**\n\t * Create a new DOMNode.\n\t *\n\t * @internal\n\t * @param nodeType - What node type to create.\n\t * @param nodeName - What node name to use. For `HtmlElement` this corresponds\n\t * to the tagName but other node types have specific predefined values.\n\t * @param location - Source code location of this node.\n\t */\n\tpublic constructor(nodeType: NodeType, nodeName: string | undefined, location: Location) {\n\t\tthis.nodeType = nodeType;\n\t\tthis.nodeName = nodeName ?? DOCUMENT_NODE_NAME;\n\t\tthis.location = location;\n\t\tthis.disabledRules = new Set();\n\t\tthis.blockedRules = new Map();\n\t\tthis.childNodes = [];\n\t\tthis.unique = counter++;\n\t\tthis.cache = null;\n\t}\n\n\t/**\n\t * Enable cache for this node.\n\t *\n\t * Should not be called before the node and all children are fully constructed.\n\t *\n\t * @internal\n\t */\n\tpublic cacheEnable(): void {\n\t\tthis.cache = new Map();\n\t}\n\n\t/**\n\t * Fetch cached value from this DOM node.\n\t *\n\t * Cache is not enabled until `cacheEnable()` is called by [[Parser]] (when\n\t * the element is fully constructed).\n\t *\n\t * @returns value or `undefined` if the value doesn't exist.\n\t */\n\tpublic cacheGet<K extends keyof DOMNodeCache>(key: K): DOMNodeCache[K] | undefined;\n\tpublic cacheGet(key: string | number | symbol): any | undefined;\n\tpublic cacheGet(key: string | number | symbol): any | undefined {\n\t\tif (this.cache) {\n\t\t\treturn this.cache.get(key);\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Store a value in cache.\n\t *\n\t * @returns the value itself is returned.\n\t */\n\tpublic cacheSet<K extends keyof DOMNodeCache>(key: K, value: DOMNodeCache[K]): DOMNodeCache[K];\n\tpublic cacheSet<T>(key: string | number | symbol, value: T): T;\n\tpublic cacheSet<T>(key: string | number | symbol, value: T): T {\n\t\tif (this.cache) {\n\t\t\tthis.cache.set(key, value);\n\t\t}\n\t\treturn value;\n\t}\n\n\t/**\n\t * Remove a value by key from cache.\n\t *\n\t * @returns `true` if the entry existed and has been removed.\n\t */\n\tpublic cacheRemove<K extends keyof DOMNodeCache>(key: K): boolean;\n\tpublic cacheRemove(key: string | number | symbol): boolean;\n\tpublic cacheRemove(key: string | number | symbol): boolean {\n\t\tif (this.cache) {\n\t\t\treturn this.cache.delete(key);\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t/**\n\t * Check if key exists in cache.\n\t */\n\tpublic cacheExists<K extends keyof DOMNodeCache>(key: K): boolean;\n\tpublic cacheExists(key: string | number | symbol): boolean;\n\tpublic cacheExists(key: string | number | symbol): boolean {\n\t\treturn Boolean(this.cache?.has(key));\n\t}\n\n\t/**\n\t * Get the text (recursive) from all child nodes.\n\t */\n\tpublic get textContent(): string {\n\t\tconst cached = this.cacheGet(TEXT_CONTENT);\n\t\tif (cached) {\n\t\t\treturn cached;\n\t\t}\n\n\t\tconst text = this.childNodes.map((node) => node.textContent).join(\"\");\n\t\tthis.cacheSet(TEXT_CONTENT, text);\n\t\treturn text;\n\t}\n\n\tpublic append(node: DOMNode): void {\n\t\tthis.childNodes.push(node);\n\t}\n\n\tpublic isRootElement(): boolean {\n\t\treturn this.nodeType === NodeType.DOCUMENT_NODE;\n\t}\n\n\t/**\n\t * Tests if two nodes are the same (references the same object).\n\t *\n\t * @since v4.11.0\n\t */\n\tpublic isSameNode(otherNode: DOMNode): boolean {\n\t\treturn this.unique === otherNode.unique;\n\t}\n\n\t/**\n\t * Returns a DOMNode representing the first direct child node or `null` if the\n\t * node has no children.\n\t */\n\tpublic get firstChild(): DOMNode {\n\t\treturn this.childNodes[0] || null;\n\t}\n\n\t/**\n\t * Returns a DOMNode representing the last direct child node or `null` if the\n\t * node has no children.\n\t */\n\tpublic get lastChild(): DOMNode {\n\t\treturn this.childNodes[this.childNodes.length - 1] || null;\n\t}\n\n\t/**\n\t * Block a rule for this node.\n\t *\n\t * @internal\n\t */\n\tpublic blockRule(ruleId: string, blocker: RuleBlocker): void {\n\t\tconst current = this.blockedRules.get(ruleId);\n\t\tif (current) {\n\t\t\tcurrent.push(blocker);\n\t\t} else {\n\t\t\tthis.blockedRules.set(ruleId, [blocker]);\n\t\t}\n\t}\n\n\t/**\n\t * Blocks multiple rules.\n\t *\n\t * @internal\n\t */\n\tpublic blockRules(rules: string[] | Set<string>, blocker: RuleBlocker): void {\n\t\tfor (const rule of rules) {\n\t\t\tthis.blockRule(rule, blocker);\n\t\t}\n\t}\n\n\t/**\n\t * Disable a rule for this node.\n\t *\n\t * @internal\n\t */\n\tpublic disableRule(ruleId: string): void {\n\t\tthis.disabledRules.add(ruleId);\n\t}\n\n\t/**\n\t * Disables multiple rules.\n\t *\n\t * @internal\n\t */\n\tpublic disableRules(rules: string[] | Set<string>): void {\n\t\tfor (const rule of rules) {\n\t\t\tthis.disableRule(rule);\n\t\t}\n\t}\n\n\t/**\n\t * Enable a previously disabled rule for this node.\n\t */\n\tpublic enableRule(ruleId: string): void {\n\t\tthis.disabledRules.delete(ruleId);\n\t}\n\n\t/**\n\t * Enables multiple rules.\n\t */\n\tpublic enableRules(rules: string[]): void {\n\t\tfor (const rule of rules) {\n\t\t\tthis.enableRule(rule);\n\t\t}\n\t}\n\n\t/**\n\t * Test if a rule is enabled for this node.\n\t *\n\t * @internal\n\t */\n\tpublic ruleEnabled(ruleId: string): boolean {\n\t\treturn !this.disabledRules.has(ruleId);\n\t}\n\n\t/**\n\t * Test if a rule is blocked for this node.\n\t *\n\t * @internal\n\t */\n\tpublic ruleBlockers(ruleId: string): RuleBlocker[] {\n\t\treturn this.blockedRules.get(ruleId) ?? [];\n\t}\n\n\tpublic generateSelector(): string | null {\n\t\treturn null;\n\t}\n}\n","import { type Location, sliceLocation } from \"../context\";\nimport { DynamicValue } from \"./dynamic-value\";\n\ninterface Result {\n\ttokens: string[];\n\tlocations: Location[] | null;\n}\n\nfunction parse(text: string, baseLocation: Location | null): Result {\n\tconst tokens: string[] = [];\n\tconst locations: Location[] | null = baseLocation ? [] : null;\n\tfor (let begin = 0; begin < text.length; ) {\n\t\tlet end = text.indexOf(\" \", begin);\n\n\t\t/* if the last space was found move the position to the last character\n\t\t * in the string */\n\t\tif (end === -1) {\n\t\t\tend = text.length;\n\t\t}\n\n\t\t/* handle multiple spaces */\n\t\tconst size = end - begin;\n\t\tif (size === 0) {\n\t\t\tbegin++;\n\t\t\tcontinue;\n\t\t}\n\n\t\t/* extract token */\n\t\tconst token = text.substring(begin, end);\n\t\ttokens.push(token);\n\n\t\t/* extract location */\n\t\tif (locations && baseLocation) {\n\t\t\tconst location = sliceLocation(baseLocation, begin, end);\n\t\t\tlocations.push(location);\n\t\t}\n\n\t\t/* advance position to the character after the current end position */\n\t\tbegin += size + 1;\n\t}\n\treturn { tokens, locations };\n}\n\n/**\n * @public\n */\nexport class DOMTokenList extends Array<string> {\n\tpublic readonly value: string;\n\tprivate readonly locations: Location[] | null;\n\n\tpublic constructor(value: string | DynamicValue | null, location: Location | null) {\n\t\tif (value && typeof value === \"string\") {\n\t\t\t/* replace all whitespace with a single space for easier parsing */\n\t\t\tconst normalized = value.replace(/[\\t\\r\\n]/g, \" \");\n\t\t\tconst { tokens, locations } = parse(normalized, location);\n\t\t\tsuper(...tokens);\n\t\t\tthis.locations = locations;\n\t\t} else {\n\t\t\tsuper(0);\n\t\t\tthis.locations = null;\n\t\t}\n\n\t\tif (value instanceof DynamicValue) {\n\t\t\tthis.value = value.expr;\n\t\t} else {\n\t\t\tthis.value = value ?? \"\";\n\t\t}\n\t}\n\n\tpublic item(n: number): string | undefined {\n\t\treturn this[n];\n\t}\n\n\tpublic location(n: number): Location | undefined {\n\t\tif (this.locations) {\n\t\t\treturn this.locations[n];\n\t\t} else {\n\t\t\tthrow new Error(\"Trying to access DOMTokenList location when base location isn't set\");\n\t\t}\n\t}\n\n\tpublic contains(token: string): boolean {\n\t\treturn this.includes(token);\n\t}\n\n\tpublic *iterator(): Generator<{ index: number; item: string; location: Location }> {\n\t\tfor (let index = 0; index < this.length; index++) {\n\t\t\t/* eslint-disable @typescript-eslint/no-non-null-assertion -- as we loop over length this should always be set */\n\t\t\tconst item = this.item(index)!;\n\t\t\tconst location = this.location(index)!;\n\t\t\t/* eslint-enable @typescript-eslint/no-non-null-assertion */\n\t\t\tyield { index, item, location };\n\t\t}\n\t}\n}\n","export enum Combinator {\n\tDESCENDANT = 1,\n\tCHILD,\n\tADJACENT_SIBLING,\n\tGENERAL_SIBLING,\n\n\t/* special cases */\n\tSCOPE,\n}\n\nexport function parseCombinator(\n\tcombinator: string | undefined | null,\n\tpattern: string,\n): Combinator {\n\t/* special case, when pattern is :scope [[Selector]] will handle this\n\t * \"combinator\" to match itself instead of descendants */\n\tif (pattern === \":scope\") {\n\t\treturn Combinator.SCOPE;\n\t}\n\n\tswitch (combinator) {\n\t\tcase undefined:\n\t\tcase null:\n\t\tcase \"\":\n\t\t\treturn Combinator.DESCENDANT;\n\t\tcase \">\":\n\t\t\treturn Combinator.CHILD;\n\t\tcase \"+\":\n\t\t\treturn Combinator.ADJACENT_SIBLING;\n\t\tcase \"~\":\n\t\t\treturn Combinator.GENERAL_SIBLING;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown combinator \"${combinator}\"`);\n\t}\n}\n","import { type HtmlElement } from \"../htmlelement\";\n\nexport function firstChild(node: HtmlElement): boolean {\n\treturn node.previousSibling === null;\n}\n","import { type HtmlElement } from \"../htmlelement\";\n\nexport function lastChild(node: HtmlElement): boolean {\n\treturn node.nextSibling === null;\n}\n","import { type HtmlElement } from \"../htmlelement\";\nimport { type DOMInternalID } from \"../domnode\";\n\nconst cache: Record<DOMInternalID, number> = {};\n\nfunction getNthChild(node: HtmlElement): number {\n\tif (!node.parent) {\n\t\treturn -1;\n\t}\n\n\tif (!cache[node.unique]) {\n\t\tconst parent = node.parent;\n\t\tconst index = parent.childElements.findIndex((cur) => {\n\t\t\treturn cur.unique === node.unique;\n\t\t});\n\t\tcache[node.unique] = index + 1; /* nthChild starts at 1 */\n\t}\n\n\treturn cache[node.unique];\n}\n\nexport function nthChild(node: HtmlElement, args?: string): boolean {\n\tif (!args) {\n\t\tthrow new Error(\"Missing argument to nth-child\");\n\t}\n\tconst n = parseInt(args.trim(), 10);\n\tconst cur = getNthChild(node);\n\treturn cur === n;\n}\n","import { type HtmlElement } from \"../htmlelement\";\nimport { type SelectorContext } from \"../selector-context\";\n\nexport function scope(this: SelectorContext, node: HtmlElement): boolean {\n\treturn node.isSameNode(this.scope);\n}\n","import { type HtmlElement } from \"../htmlelement\";\nimport { type SelectorContext } from \"../selector-context\";\nimport { firstChild } from \"./first-child\";\nimport { lastChild } from \"./last-child\";\nimport { nthChild } from \"./nth-child\";\nimport { scope } from \"./scope\";\n\ntype PseudoClassFunction = (this: SelectorContext, node: HtmlElement, args?: string) => boolean;\ntype PseudoClassTable = Record<string, PseudoClassFunction | undefined>;\n\nconst table: PseudoClassTable = {\n\t\"first-child\": firstChild,\n\t\"last-child\": lastChild,\n\t\"nth-child\": nthChild,\n\tscope,\n};\n\nexport function factory(\n\tname: string,\n\tcontext: SelectorContext,\n): OmitThisParameter<PseudoClassFunction> {\n\tconst fn = table[name];\n\tif (fn) {\n\t\treturn fn.bind(context);\n\t} else {\n\t\tthrow new Error(`Pseudo-class \"${name}\" is not implemented`);\n\t}\n}\n","const enum State {\n\tINITIAL,\n\tESCAPED,\n\tWHITESPACE,\n}\n\nconst escapedCodepoints = [\"\\u0039\", \"\\u0061\", \"\\u0064\"];\n\n/**\n * @internal\n */\nexport function* splitSelectorElements(selector: string): Generator<string, void> {\n\tlet begin = 0;\n\tlet end = 0;\n\n\tfunction initialState(ch: string, p: number): State {\n\t\tif (ch === \"\\\\\") {\n\t\t\treturn State.ESCAPED;\n\t\t}\n\t\tif (ch === \" \") {\n\t\t\tend = p;\n\t\t\treturn State.WHITESPACE;\n\t\t}\n\t\treturn State.INITIAL;\n\t}\n\n\tfunction escapedState(ch: string): State {\n\t\tif (escapedCodepoints.includes(ch)) {\n\t\t\treturn State.ESCAPED;\n\t\t}\n\t\treturn State.INITIAL;\n\t}\n\n\tfunction* whitespaceState(ch: string, p: number): Generator<string, State> {\n\t\tif (ch === \" \") {\n\t\t\treturn State.WHITESPACE;\n\t\t}\n\t\tyield selector.slice(begin, end);\n\t\tbegin = p;\n\t\tend = p;\n\t\treturn State.INITIAL;\n\t}\n\n\tlet state = State.INITIAL;\n\tfor (let p = 0; p < selector.length; p++) {\n\t\tconst ch = selector[p];\n\t\tswitch (state) {\n\t\t\tcase State.INITIAL:\n\t\t\t\tstate = initialState(ch, p);\n\t\t\t\tbreak;\n\n\t\t\tcase State.ESCAPED:\n\t\t\t\tstate = escapedState(ch);\n\t\t\t\tbreak;\n\n\t\t\tcase State.WHITESPACE:\n\t\t\t\tstate = yield* whitespaceState(ch, p);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (begin !== selector.length) {\n\t\tyield selector.slice(begin);\n\t}\n}\n","import { type Attribute } from \"./attribute\";\nimport { Combinator, parseCombinator } from \"./combinator\";\nimport { type DynamicValue } from \"./dynamic-value\";\nimport { type HtmlElement } from \"./htmlelement\";\nimport { factory as pseudoClassFunction } from \"./pseudoclass\";\nimport { type SelectorContext } from \"./selector-context\";\nimport { splitSelectorElements } from \"./split-selector-elements\";\n\n/**\n * Homage to PHP: unescapes slashes.\n *\n * E.g. \"foo\\:bar\" becomes \"foo:bar\"\n */\nfunction stripslashes(value: string): string {\n\treturn value.replace(/\\\\(.)/g, \"$1\");\n}\n\n/**\n * Unescape codepoints.\n *\n * https://drafts.csswg.org/cssom/#escape-a-character-as-code-point\n */\nfunction unescapeCodepoint(value: string): string {\n\tconst replacement = {\n\t\t\"\\\\\\u0039 \": \"\\t\",\n\t\t\"\\\\\\u0061 \": \"\\n\",\n\t\t\"\\\\\\u0064 \": \"\\r\",\n\t};\n\treturn value.replace(\n\t\t/(\\\\[\\u0039\\u0061\\u0064] )/g,\n\t\t(_, codepoint: \"\\\\\\u0039 \" | \"\\\\\\u0061 \" | \"\\\\\\u0064 \") => replacement[codepoint],\n\t);\n}\n\n/**\n * @internal\n */\nexport function escapeSelectorComponent(text: string | DynamicValue): string {\n\t/* some characters requires extra care: https://drafts.csswg.org/cssom/#escape-a-character-as-code-point */\n\tconst codepoints: Record<string, string> = {\n\t\t\"\\t\": \"\\\\\\u0039 \",\n\t\t\"\\n\": \"\\\\\\u0061 \",\n\t\t\"\\r\": \"\\\\\\u0064 \",\n\t};\n\treturn text.toString().replace(/([\\t\\n\\r]|[^a-z0-9_-])/gi, (_, ch: string) => {\n\t\tif (codepoints[ch]) {\n\t\t\treturn codepoints[ch];\n\t\t} else {\n\t\t\treturn `\\\\${ch}`;\n\t\t}\n\t});\n}\n\n/**\n * @internal\n */\nexport function generateIdSelector(id: string): string {\n\tconst escaped = escapeSelectorComponent(id);\n\treturn escaped.match(/^\\d/) ? `[id=\"${escaped}\"]` : `#${escaped}`;\n}\n\n/**\n * Returns true if the character is a delimiter for different kinds of selectors:\n *\n * - `.` - begins a class selector\n * - `#` - begins an id selector\n * - `[` - begins an attribute selector\n * - `:` - begins a pseudo class or element selector\n */\nfunction isDelimiter(ch: string): boolean {\n\treturn /[.#[:]/.test(ch);\n}\n\n/**\n * Returns true if the character is a quotation mark.\n */\nfunction isQuotationMark(ch: string): ch is '\"' | \"'\" {\n\treturn /['\"]/.test(ch);\n}\n\nfunction isPseudoElement(ch: string, buffer: string): boolean {\n\treturn ch === \":\" && buffer === \":\";\n}\n\n/**\n * @internal\n */\nexport function* splitPattern(pattern: string): Generator<string> {\n\tif (pattern === \"\") {\n\t\treturn;\n\t}\n\n\tconst end = pattern.length;\n\n\tlet begin = 0;\n\tlet cur = 1;\n\tlet quoted: false | '\"' | \"'\" = false;\n\n\twhile (cur < end) {\n\t\tconst ch = pattern[cur];\n\t\tconst buffer = pattern.slice(begin, cur);\n\n\t\t/* escaped character, ignore whatever is next */\n\t\tif (ch === \"\\\\\") {\n\t\t\tcur += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\t/* if inside quoted string we only look for the end quotation mark */\n\t\tif (quoted) {\n\t\t\tif (ch === quoted) {\n\t\t\t\tquoted = false;\n\t\t\t}\n\t\t\tcur += 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\t/* if the character is a quotation mark we store the character and the above\n\t\t * condition will look for a similar end quotation mark */\n\t\tif (isQuotationMark(ch)) {\n\t\t\tquoted = ch;\n\t\t\tcur += 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\t/* special case when using :: pseudo element selector */\n\t\tif (isPseudoElement(ch, buffer)) {\n\t\t\tcur += 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\t/* if the character is a delimiter we yield the string and reset the\n\t\t * position */\n\t\tif (isDelimiter(ch)) {\n\t\t\tbegin = cur;\n\t\t\tyield buffer;\n\t\t}\n\n\t\tcur += 1;\n\t}\n\n\t/* yield the rest of the string */\n\tconst tail = pattern.slice(begin, cur);\n\tyield tail;\n}\n\nabstract class Matcher {\n\t/**\n\t * Returns `true` if given node matches.\n\t */\n\tpublic abstract match(node: HtmlElement, context: SelectorContext): boolean;\n}\n\nclass ClassMatcher extends Matcher {\n\tprivate readonly classname: string;\n\n\tpublic constructor(classname: string) {\n\t\tsuper();\n\t\tthis.classname = classname;\n\t}\n\n\tpublic match(node: HtmlElement): boolean {\n\t\treturn node.classList.contains(this.classname);\n\t}\n}\n\nclass IdMatcher extends Matcher {\n\tprivate readonly id: string;\n\n\tpublic constructor(id: string) {\n\t\tsuper();\n\t\tthis.id = stripslashes(id);\n\t}\n\n\tpublic match(node: HtmlElement): boolean {\n\t\treturn node.id === this.id;\n\t}\n}\n\nclass AttrMatcher extends Matcher {\n\tprivate readonly key: string;\n\tprivate readonly op: string;\n\tprivate readonly value: string;\n\n\tpublic constructor(attr: string) {\n\t\tsuper();\n\t\tconst [, key, op, value] = attr.match(/^(.+?)(?:([~^$*|]?=)\"([^\"]+?)\")?$/)!; // eslint-disable-line @typescript-eslint/no-non-null-assertion -- will always match\n\t\tthis.key = key;\n\t\tthis.op = op;\n\t\tthis.value = value;\n\t}\n\n\tpublic match(node: HtmlElement): boolean {\n\t\tconst attr = node.getAttribute(this.key, true);\n\t\treturn attr.some((cur: Attribute) => {\n\t\t\tswitch (this.op) {\n\t\t\t\tcase undefined:\n\t\t\t\t\treturn true; /* attribute exists */\n\t\t\t\tcase \"=\":\n\t\t\t\t\treturn cur.value === this.value;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Attribute selector operator ${this.op} is not implemented yet`);\n\t\t\t}\n\t\t});\n\t}\n}\n\nclass PseudoClassMatcher extends Matcher {\n\tprivate readonly name: string;\n\tprivate readonly args: string;\n\n\tpublic constructor(pseudoclass: string, context: string) {\n\t\tsuper();\n\t\tconst match = pseudoclass.match(/^([^(]+)(?:\\((.*)\\))?$/);\n\t\tif (!match) {\n\t\t\tthrow new Error(`Missing pseudo-class after colon in selector pattern \"${context}\"`);\n\t\t}\n\t\tconst [, name, args] = match;\n\t\tthis.name = name;\n\t\tthis.args = args;\n\t}\n\n\tpublic match(node: HtmlElement, context: SelectorContext): boolean {\n\t\tconst fn = pseudoClassFunction(this.name, context);\n\t\treturn fn(node, this.args);\n\t}\n}\n\nexport class Pattern {\n\tpublic readonly combinator: Combinator;\n\tpublic readonly tagName: string;\n\tprivate readonly selector: string;\n\tprivate readonly pattern: Matcher[];\n\n\tpublic constructor(pattern: string) {\n\t\tconst match = pattern.match(/^([~+\\->]?)((?:[*]|[^.#[:]+)?)([^]*)$/);\n\t\t/* istanbul ignore next: should not happen but throw proper error if it still happens */\n\t\tif (!match) {\n\t\t\tthrow new Error(`Failed to create selector pattern from \"${pattern}\"`);\n\t\t}\n\t\tmatch.shift(); /* remove full matched string */\n\t\tthis.selector = pattern;\n\t\tthis.combinator = parseCombinator(match.shift(), pattern);\n\t\tthis.tagName = match.shift() || \"*\"; // eslint-disable-line @typescript-eslint/prefer-nullish-coalescing -- empty string */\n\t\tthis.pattern = Array.from(splitPattern(match[0]), (it) => this.createMatcher(it));\n\t}\n\n\tpublic match(node: HtmlElement, context: SelectorContext): boolean {\n\t\treturn node.is(this.tagName) && this.pattern.every((cur: Matcher) => cur.match(node, context));\n\t}\n\n\tprivate createMatcher(pattern: string): Matcher {\n\t\tswitch (pattern[0]) {\n\t\t\tcase \".\":\n\t\t\t\treturn new ClassMatcher(pattern.slice(1));\n\t\t\tcase \"#\":\n\t\t\t\treturn new IdMatcher(pattern.slice(1));\n\t\t\tcase \"[\":\n\t\t\t\treturn new AttrMatcher(pattern.slice(1, -1));\n\t\t\tcase \":\":\n\t\t\t\treturn new PseudoClassMatcher(pattern.slice(1), this.selector);\n\t\t\tdefault:\n\t\t\t\t/* istanbul ignore next: fallback solution, the switch cases should cover\n\t\t\t\t * everything and there is no known way to trigger this fallback */\n\t\t\t\tthrow new Error(`Failed to create matcher for \"${pattern}\"`);\n\t\t}\n\t}\n}\n\n/**\n * DOM Selector.\n */\nexport class Selector {\n\tprivate readonly pattern: Pattern[];\n\n\tpublic constructor(selector: string) {\n\t\tthis.pattern = Selector.parse(selector);\n\t}\n\n\t/**\n\t * Match this selector against a HtmlElement.\n\t *\n\t * @param root - Element to match against.\n\t * @returns Iterator with matched elements.\n\t */\n\tpublic *match(root: HtmlElement): IterableIterator<HtmlElement> {\n\t\tconst context: SelectorContext = { scope: root };\n\t\tyield* this.matchInternal(root, 0, context);\n\t}\n\n\tprivate *matchInternal(\n\t\troot: HtmlElement,\n\t\tlevel: number,\n\t\tcontext: SelectorContext,\n\t): IterableIterator<HtmlElement> {\n\t\tif (level >= this.pattern.length) {\n\t\t\tyield root;\n\t\t\treturn;\n\t\t}\n\n\t\tconst pattern = this.pattern[level];\n\t\tconst matches = Selector.findCandidates(root, pattern);\n\n\t\tfor (const node of matches) {\n\t\t\tif (!pattern.match(node, context)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tyield* this.matchInternal(node, level + 1, context);\n\t\t}\n\t}\n\n\tprivate static parse(selector: string): Pattern[] {\n\t\t/* strip whitespace before combinators, \"ul > li\" becomes \"ul >li\", for\n\t\t * easier parsing */\n\t\tselector = selector.replace(/([+~>]) /g, \"$1\");\n\n\t\t/* split string on whitespace (excluding escaped `\\ `) */\n\t\treturn Array.from(splitSelectorElements(selector), (element) => {\n\t\t\treturn new Pattern(unescapeCodepoint(element));\n\t\t});\n\t}\n\n\tprivate static findCandidates(root: HtmlElement, pattern: Pattern): HtmlElement[] {\n\t\tswitch (pattern.combinator) {\n\t\t\tcase Combinator.DESCENDANT:\n\t\t\t\treturn root.getElementsByTagName(pattern.tagName);\n\t\t\tcase Combinator.CHILD:\n\t\t\t\treturn root.childElements.filter((node) => node.is(pattern.tagName));\n\t\t\tcase Combinator.ADJACENT_SIBLING:\n\t\t\t\treturn Selector.findAdjacentSibling(root);\n\t\t\tcase Combinator.GENERAL_SIBLING:\n\t\t\t\treturn Selector.findGeneralSibling(root);\n\t\t\tcase Combinator.SCOPE:\n\t\t\t\treturn [root];\n\t\t}\n\t\t/* istanbul ignore next: fallback solution, the switch cases should cover\n\t\t * everything and there is no known way to trigger this fallback */\n\t\treturn [];\n\t}\n\n\tprivate static findAdjacentSibling(node: HtmlElement): HtmlElement[] {\n\t\tlet adjacent = false;\n\t\treturn node.siblings.filter((cur) => {\n\t\t\tif (adjacent) {\n\t\t\t\tadjacent = false;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (cur === node) {\n\t\t\t\tadjacent = true;\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t}\n\n\tprivate static findGeneralSibling(node: HtmlElement): HtmlElement[] {\n\t\tlet after = false;\n\t\treturn node.siblings.filter((cur) => {\n\t\t\tif (after) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (cur === node) {\n\t\t\t\tafter = true;\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t}\n}\n","import { type Location } from \"../context\";\nimport { DOMNode } from \"./domnode\";\nimport { DynamicValue } from \"./dynamic-value\";\nimport { NodeType } from \"./nodetype\";\n\nconst TEXT_NODE_NAME = \"#text\";\n\n/**\n * Returns true if the node is a text node.\n *\n * @public\n */\nexport function isTextNode(node: DOMNode | null | undefined): node is TextNode {\n\treturn Boolean(node && node.nodeType === NodeType.TEXT_NODE);\n}\n\n/**\n * Represents a text in the HTML document.\n *\n * Text nodes are appended as children of `HtmlElement` and cannot have childen\n * of its own.\n *\n * @public\n */\nexport class TextNode extends DOMNode {\n\tprivate readonly text: string | DynamicValue;\n\n\t/**\n\t * @param text - Text to add. When a `DynamicValue` is used the expression is\n\t * used as \"text\".\n\t * @param location - Source code location of this node.\n\t */\n\tpublic constructor(text: string | DynamicValue, location: Location) {\n\t\tsuper(NodeType.TEXT_NODE, TEXT_NODE_NAME, location);\n\t\tthis.text = text;\n\t}\n\n\t/**\n\t * Get the text from node.\n\t */\n\tpublic get textContent(): string {\n\t\treturn this.text.toString();\n\t}\n\n\t/**\n\t * Flag set to true if the attribute value is static.\n\t */\n\tpublic get isStatic(): boolean {\n\t\treturn !this.isDynamic;\n\t}\n\n\t/**\n\t * Flag set to true if the attribute value is dynamic.\n\t */\n\tpublic get isDynamic(): boolean {\n\t\treturn this.text instanceof DynamicValue;\n\t}\n}\n","import { type Location, sliceLocation } from \"../context\";\nimport { type TagCloseToken, type TagOpenToken } from \"../lexer\";\nimport { type MetaElement, MetaCopyableProperty, setMetaProperty } from \"../meta/element\";\nimport { type HtmlElementLike } from \"../meta/html-element-like\";\nimport { type MetaTable } from \"../meta/table\";\nimport { Attribute } from \"./attribute\";\nimport { type CSSStyleDeclaration, parseCssDeclaration } from \"./css\";\nimport { DOMNode } from \"./domnode\";\nimport { DOMTokenList } from \"./domtokenlist\";\nimport { DynamicValue } from \"./dynamic-value\";\nimport { NodeType } from \"./nodetype\";\nimport { generateIdSelector, Selector } from \"./selector\";\nimport { TextNode } from \"./text\";\n\nconst ROLE = Symbol(\"role\");\nconst TABINDEX = Symbol(\"tabindex\");\n\ndeclare module \"./cache\" {\n\texport interface DOMNodeCache {\n\t\t[ROLE]: string;\n\t\t[TABINDEX]: number | null;\n\t}\n}\n\ninterface HtmlElementDetails {\n\tnodeType: typeof NodeType.ELEMENT_NODE;\n\ttagName: string;\n\tparent: HtmlElement | null;\n\tclosed: NodeClosed;\n\tmeta: MetaElement | null;\n\tlocation: Location;\n}\n\ninterface HtmlElementRootDetails {\n\tnodeType: typeof NodeType.DOCUMENT_NODE;\n\tlocation: Location;\n}\n\n/**\n * @public\n */\nexport enum NodeClosed {\n\tOpen = 0, // element wasn't closed\n\tEndTag = 1, // element closed with end tag <p>...</p>\n\tVoidOmitted = 2, // void element with omitted end tag <input>\n\tVoidSelfClosed = 3, // self-closed void element <input/>\n\tImplicitClosed = 4, // element with optional end tag <li>foo<li>bar\n}\n\n/**\n * Returns true if the node is an element node.\n *\n * @public\n */\nexport function isElementNode(node: DOMNode | null | undefined): node is HtmlElement {\n\treturn Boolean(node && node.nodeType === NodeType.ELEMENT_NODE);\n}\n\nfunction isInvalidTagName(tagName: string | undefined): tagName is \"\" | \"*\" {\n\treturn Boolean(tagName === \"\" || tagName === \"*\");\n}\n\nfunction createAdapter(node: HtmlElement): HtmlElementLike {\n\treturn {\n\t\tclosest(selectors) {\n\t\t\treturn node.closest(selectors)?._adapter;\n\t\t},\n\t\tgetAttribute(name) {\n\t\t\treturn node.getAttribute(name)?.value;\n\t\t},\n\t\thasAttribute(name) {\n\t\t\treturn node.hasAttribute(name);\n\t\t},\n\t};\n}\n\n/**\n * @public\n */\nexport class HtmlElement extends DOMNode {\n\tpublic readonly tagName: string;\n\tpublic readonly parent: HtmlElement | null;\n\tpublic readonly voidElement: boolean;\n\tpublic readonly depth: number;\n\tpublic closed: NodeClosed;\n\tprotected readonly attr: Record<string, Attribute[]>;\n\tprivate metaElement: MetaElement | null;\n\tprivate annotation: string | null;\n\n\t/** @internal */\n\tpublic readonly _adapter: HtmlElementLike;\n\n\tprivate constructor(details: HtmlElementDetails | HtmlElementRootDetails);\n\tprivate constructor(details: {\n\t\tnodeType: NodeType;\n\t\ttagName?: string;\n\t\tparent?: HtmlElement | null;\n\t\tclosed?: NodeClosed;\n\t\tmeta?: MetaElement | null;\n\t\tlocation: Location;\n\t}) {\n\t\tconst {\n\t\t\tnodeType,\n\t\t\ttagName,\n\t\t\tparent = null,\n\t\t\tclosed = NodeClosed.EndTag,\n\t\t\tmeta = null,\n\t\t\tlocation,\n\t\t} = details;\n\t\tsuper(nodeType, tagName, location);\n\n\t\tif (isInvalidTagName(tagName)) {\n\t\t\tthrow new Error(`The tag name provided (\"${tagName}\") is not a valid name`);\n\t\t}\n\n\t\tthis.tagName = tagName ?? \"#document\";\n\t\tthis.parent = parent ?? null;\n\t\tthis.attr = {};\n\t\tthis.metaElement = meta ?? null;\n\t\tthis.closed = closed;\n\t\tthis.voidElement = meta ? Boolean(meta.void) : false;\n\t\tthis.depth = 0;\n\t\tthis.annotation = null;\n\t\tthis._adapter = createAdapter(this);\n\n\t\tif (parent) {\n\t\t\tparent.childNodes.push(this);\n\n\t\t\t/* calculate depth in domtree */\n\t\t\tlet cur: HtmlElement = parent;\n\t\t\twhile (cur.parent) {\n\t\t\t\tthis.depth++;\n\t\t\t\tcur = cur.parent;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Manually create a new element. This is primary useful for test-cases. While\n\t * the API is public it is not meant for general consumption and is not\n\t * guaranteed to be stable across versions.\n\t *\n\t * Use at your own risk. Prefer to use [[Parser]] to parse a string of markup\n\t * instead.\n\t *\n\t * @public\n\t * @since 8.22.0\n\t * @param tagName - Element tagname.\n\t * @param location - Element location.\n\t * @param details - Additional element details.\n\t */\n\tpublic static createElement(\n\t\ttagName: string,\n\t\tlocation: Location,\n\t\tdetails: { closed?: NodeClosed; meta?: MetaElement | null; parent?: HtmlElement } = {},\n\t): HtmlElement {\n\t\tconst { closed = NodeClosed.EndTag, meta = null, parent = null } = details;\n\t\treturn new HtmlElement({\n\t\t\tnodeType: NodeType.ELEMENT_NODE,\n\t\t\ttagName,\n\t\t\tparent,\n\t\t\tclosed,\n\t\t\tmeta,\n\t\t\tlocation,\n\t\t});\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic static rootNode(location: Location): HtmlElement {\n\t\tconst root = new HtmlElement({\n\t\t\tnodeType: NodeType.DOCUMENT_NODE,\n\t\t\tlocation,\n\t\t});\n\t\troot.setAnnotation(\"#document\");\n\t\treturn root;\n\t}\n\n\t/**\n\t * @internal\n\t *\n\t * @param namespace - If given it is appended to the tagName.\n\t */\n\tpublic static fromTokens(\n\t\tstartToken: TagOpenToken,\n\t\tendToken: TagCloseToken,\n\t\tparent: HtmlElement | null,\n\t\tmetaTable: MetaTable | null,\n\t\tnamespace: string = \"\",\n\t): HtmlElement {\n\t\tconst name = startToken.data[2];\n\t\tconst tagName = namespace ? `${namespace}:${name}` : name;\n\t\tif (!name) {\n\t\t\tthrow new Error(\"tagName cannot be empty\");\n\t\t}\n\n\t\tconst meta = metaTable ? metaTable.getMetaFor(tagName) : null;\n\t\tconst open = startToken.data[1] !== \"/\";\n\t\tconst closed = isClosed(endToken, meta);\n\n\t\t/* location contains position of '<' so strip it out */\n\t\tconst location = sliceLocation(startToken.location, 1);\n\n\t\treturn new HtmlElement({\n\t\t\tnodeType: NodeType.ELEMENT_NODE,\n\t\t\ttagName,\n\t\t\tparent: open ? parent : null,\n\t\t\tclosed,\n\t\t\tmeta,\n\t\t\tlocation,\n\t\t});\n\t}\n\n\t/**\n\t * Returns annotated name if set or defaults to `<tagName>`.\n\t *\n\t * E.g. `my-annotation` or `<div>`.\n\t */\n\tpublic get annotatedName(): string {\n\t\tif (this.annotation) {\n\t\t\treturn this.annotation;\n\t\t} else {\n\t\t\treturn `<${this.tagName}>`;\n\t\t}\n\t}\n\n\t/**\n\t * Get list of IDs referenced by `aria-labelledby`.\n\t *\n\t * If the attribute is unset or empty this getter returns null.\n\t * If the attribute is dynamic the original {@link DynamicValue} is returned.\n\t *\n\t * @public\n\t */\n\tpublic get ariaLabelledby(): string[] | DynamicValue | null {\n\t\tconst attr = this.getAttribute(\"aria-labelledby\");\n\t\tif (!attr?.value) {\n\t\t\treturn null;\n\t\t}\n\t\tif (attr.value instanceof DynamicValue) {\n\t\t\treturn attr.value;\n\t\t}\n\t\tconst list = new DOMTokenList(attr.value, attr.valueLocation);\n\t\treturn list.length ? Array.from(list) : null;\n\t}\n\n\t/**\n\t * Similar to childNodes but only elements.\n\t */\n\tpublic get childElements(): HtmlElement[] {\n\t\treturn this.childNodes.filter(isElementNode);\n\t}\n\n\t/**\n\t * Find the first ancestor matching a selector.\n\t *\n\t * Implementation of DOM specification of Element.closest(selectors).\n\t */\n\tpublic closest(selectors: string): HtmlElement | null {\n\t\t/* eslint-disable-next-line @typescript-eslint/no-this-alias -- false positive*/\n\t\tlet node: HtmlElement | null = this;\n\t\twhile (node) {\n\t\t\tif (node.matches(selectors)) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\tnode = node.parent;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * Generate a DOM selector for this element. The returned selector will be\n\t * unique inside the current document.\n\t */\n\tpublic generateSelector(): string | null {\n\t\t/* root element cannot have a selector as it isn't a proper element */\n\t\tif (this.isRootElement()) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst parts = [];\n\n\t\tlet root: HtmlElement;\n\t\t/* eslint-disable-next-line @typescript-eslint/no-this-alias -- false positive */\n\t\tfor (root = this; root.parent; root = root.parent) {\n\t\t\t/* .. */\n\t\t}\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-this-alias -- false positive\n\t\tfor (let cur: HtmlElement = this; cur.parent; cur = cur.parent) {\n\t\t\t/* if a unique id is present, use it and short-circuit */\n\t\t\tif (cur.id) {\n\t\t\t\tconst selector = generateIdSelector(cur.id);\n\t\t\t\tconst matches = root.querySelectorAll(selector);\n\t\t\t\tif (matches.length === 1) {\n\t\t\t\t\tparts.push(selector);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst parent = cur.parent;\n\t\t\tconst child = parent.childElements;\n\t\t\tconst index = child.findIndex((it) => it.unique === cur.unique);\n\t\t\tconst numOfType = child.filter((it) => it.is(cur.tagName)).length;\n\t\t\tconst solo = numOfType === 1;\n\n\t\t\t/* if this is the only tagName in this level of siblings nth-child isn't needed */\n\t\t\tif (solo) {\n\t\t\t\tparts.push(cur.tagName.toLowerCase());\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t/* this will generate the worst kind of selector but at least it will be accurate (optimizations welcome) */\n\t\t\tparts.push(`${cur.tagName.toLowerCase()}:nth-child(${String(index + 1)})`);\n\t\t}\n\t\treturn parts.reverse().join(\" > \");\n\t}\n\n\t/**\n\t * Tests if this element has given tagname.\n\t *\n\t * If passing \"*\" this test will pass if any tagname is set.\n\t */\n\tpublic is(tagName: string): boolean {\n\t\treturn tagName === \"*\" || this.tagName.toLowerCase() === tagName.toLowerCase();\n\t}\n\n\t/**\n\t * Load new element metadata onto this element.\n\t *\n\t * Do note that semantics such as `void` cannot be changed (as the element has\n\t * already been created). In addition the element will still \"be\" the same\n\t * element, i.e. even if loading meta for a `<p>` tag upon a `<div>` tag it\n\t * will still be a `<div>` as far as the rest of the validator is concerned.\n\t *\n\t * In fact only certain properties will be copied onto the element:\n\t *\n\t * - content categories (flow, phrasing, etc)\n\t * - required attributes\n\t * - attribute allowed values\n\t * - permitted/required elements\n\t *\n\t * Properties *not* loaded:\n\t *\n\t * - inherit\n\t * - deprecated\n\t * - foreign\n\t * - void\n\t * - implicitClosed\n\t * - scriptSupporting\n\t * - deprecatedAttributes\n\t *\n\t * Changes to element metadata will only be visible after `element:ready` (and\n\t * the subsequent `dom:ready` event).\n\t */\n\tpublic loadMeta(meta: MetaElement): void {\n\t\tif (!this.metaElement) {\n\t\t\tthis.metaElement = {} as MetaElement;\n\t\t}\n\t\tfor (const key of MetaCopyableProperty) {\n\t\t\tconst value = meta[key];\n\t\t\tif (typeof value !== \"undefined\") {\n\t\t\t\tsetMetaProperty(this.metaElement, key, value);\n\t\t\t} else {\n\t\t\t\t/* eslint-disable-next-line @typescript-eslint/no-dynamic-delete -- technical debt */\n\t\t\t\tdelete this.metaElement[key];\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Match this element against given selectors. Returns true if any selector\n\t * matches.\n\t *\n\t * Implementation of DOM specification of Element.matches(selectors).\n\t */\n\tpublic matches(selector: string): boolean {\n\t\t/* find root element */\n\t\t/* eslint-disable-next-line @typescript-eslint/no-this-alias -- false positive */\n\t\tlet root: HtmlElement = this;\n\t\twhile (root.parent) {\n\t\t\troot = root.parent;\n\t\t}\n\n\t\t/* a bit slow implementation as it finds all candidates for the selector and\n\t\t * then tests if any of them are the current element. A better\n\t\t * implementation would be to walk the selector right-to-left and test\n\t\t * ancestors. */\n\t\tfor (const match of root.querySelectorAll(selector)) {\n\t\t\tif (match.unique === this.unique) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tpublic get meta(): MetaElement | null {\n\t\treturn this.metaElement;\n\t}\n\n\t/**\n\t * Get current role for this element (explicit with `role` attribute or mapped\n\t * with implicit role).\n\t *\n\t * @since 8.9.1\n\t */\n\tpublic get role(): string | DynamicValue | null {\n\t\tconst cached = this.cacheGet(ROLE);\n\t\tif (cached !== undefined) {\n\t\t\treturn cached;\n\t\t}\n\n\t\tconst role = this.getAttribute(\"role\");\n\t\tif (role) {\n\t\t\treturn this.cacheSet(ROLE, role.value);\n\t\t}\n\n\t\tif (this.metaElement) {\n\t\t\tconst { aria } = this.metaElement;\n\t\t\tconst implicitRole = aria.implicitRole(this._adapter);\n\t\t\treturn this.cacheSet(ROLE, implicitRole);\n\t\t}\n\n\t\treturn this.cacheSet(ROLE, null);\n\t}\n\n\t/**\n\t * Set annotation for this element.\n\t */\n\tpublic setAnnotation(text: string): void {\n\t\tthis.annotation = text;\n\t}\n\n\t/**\n\t * Set attribute. Stores all attributes set even with the same name.\n\t *\n\t * @param key - Attribute name\n\t * @param value - Attribute value. Use `null` if no value is present.\n\t * @param keyLocation - Location of the attribute name.\n\t * @param valueLocation - Location of the attribute value (excluding quotation)\n\t * @param originalAttribute - If attribute is an alias for another attribute\n\t * (dynamic attributes) set this to the original attribute name.\n\t */\n\tpublic setAttribute(\n\t\tkey: string,\n\t\tvalue: string | DynamicValue | null,\n\t\tkeyLocation: Location,\n\t\tvalueLocation: Location | null,\n\t\toriginalAttribute?: string,\n\t): void {\n\t\tkey = key.toLowerCase();\n\n\t\tconst attr = new Attribute(key, value, keyLocation, valueLocation, originalAttribute);\n\t\tconst list = this.attr[key] as Attribute[] | undefined;\n\t\tif (list) {\n\t\t\tlist.push(attr);\n\t\t} else {\n\t\t\tthis.attr[key] = [attr];\n\t\t}\n\t}\n\n\t/**\n\t * Get parsed tabindex for this element.\n\t *\n\t * - If `tabindex` attribute is not present `null` is returned.\n\t * - If attribute value is omitted or the empty string `null` is returned.\n\t * - If attribute value cannot be parsed `null` is returned.\n\t * - If attribute value is dynamic `0` is returned.\n\t * - Otherwise the parsed value is returned.\n\t *\n\t * This property does *NOT* take into account if the element have a default\n\t * `tabindex` (such as `<input>` have). Instead use the `focusable` metadata\n\t * property to determine this.\n\t *\n\t * @public\n\t * @since 8.16.0\n\t */\n\tpublic get tabIndex(): number | null {\n\t\tconst cached = this.cacheGet(TABINDEX);\n\t\tif (cached !== undefined) {\n\t\t\treturn cached;\n\t\t}\n\n\t\tconst tabindex = this.getAttribute(\"tabindex\");\n\t\tif (!tabindex) {\n\t\t\treturn this.cacheSet(TABINDEX, null);\n\t\t}\n\n\t\tif (tabindex.value === null) {\n\t\t\treturn this.cacheSet(TABINDEX, null);\n\t\t}\n\n\t\tif (tabindex.value instanceof DynamicValue) {\n\t\t\treturn this.cacheSet(TABINDEX, 0);\n\t\t}\n\n\t\tconst parsed = parseInt(tabindex.value, 10);\n\t\tif (isNaN(parsed)) {\n\t\t\treturn this.cacheSet(TABINDEX, null);\n\t\t}\n\n\t\treturn this.cacheSet(TABINDEX, parsed);\n\t}\n\n\t/**\n\t * Get a list of all attributes on this node.\n\t */\n\tpublic get attributes(): Attribute[] {\n\t\treturn Object.values(this.attr).reduce((result, cur) => {\n\t\t\treturn result.concat(cur);\n\t\t}, []);\n\t}\n\n\tpublic hasAttribute(key: string): boolean {\n\t\tkey = key.toLowerCase();\n\t\treturn key in this.attr;\n\t}\n\n\t/**\n\t * Get attribute.\n\t *\n\t * By default only the first attribute is returned but if the code needs to\n\t * handle duplicate attributes the `all` parameter can be set to get all\n\t * attributes with given key.\n\t *\n\t * This usually only happens when code contains duplicate attributes (which\n\t * `no-dup-attr` will complain about) or when a static attribute is combined\n\t * with a dynamic, consider:\n\t *\n\t * <p class=\"foo\" dynamic-class=\"bar\">\n\t *\n\t * @param key - Attribute name\n\t * @param all - Return single or all attributes.\n\t */\n\tpublic getAttribute(key: string): Attribute | null;\n\tpublic getAttribute(key: string, all: true): Attribute[];\n\tpublic getAttribute(key: string, all: boolean = false): Attribute | Attribute[] | null {\n\t\tkey = key.toLowerCase();\n\t\tif (key in this.attr) {\n\t\t\tconst matches = this.attr[key];\n\t\t\treturn all ? matches : matches[0];\n\t\t} else {\n\t\t\treturn all ? [] : null;\n\t\t}\n\t}\n\n\t/**\n\t * Get attribute value.\n\t *\n\t * Returns the attribute value if present.\n\t *\n\t * - Missing attributes return `null`.\n\t * - Boolean attributes return `null`.\n\t * - `DynamicValue` returns attribute expression.\n\t *\n\t * @param key - Attribute name\n\t * @returns Attribute value or null.\n\t */\n\tpublic getAttributeValue(key: string): string | null {\n\t\tconst attr = this.getAttribute(key);\n\t\tif (attr) {\n\t\t\treturn attr.value !== null ? attr.value.toString() : null;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t * Add text as a child node to this element.\n\t *\n\t * @param text - Text to add.\n\t * @param location - Source code location of this text.\n\t */\n\tpublic appendText(text: string | DynamicValue, location: Location): void {\n\t\tthis.childNodes.push(new TextNode(text, location));\n\t}\n\n\t/**\n\t * Return a list of all known classes on the element. Dynamic values are\n\t * ignored.\n\t */\n\tpublic get classList(): DOMTokenList {\n\t\tif (!this.hasAttribute(\"class\")) {\n\t\t\treturn new DOMTokenList(null, null);\n\t\t}\n\t\tconst classes = this.getAttribute(\"class\", true)\n\t\t\t.filter((attr) => attr.isStatic)\n\t\t\t.map((attr) => attr.value)\n\t\t\t.join(\" \");\n\t\treturn new DOMTokenList(classes, null);\n\t}\n\n\t/**\n\t * Get element ID if present.\n\t */\n\tpublic get id(): string | null {\n\t\treturn this.getAttributeValue(\"id\");\n\t}\n\n\tpublic get style(): CSSStyleDeclaration {\n\t\tconst attr = this.getAttribute(\"style\");\n\t\treturn parseCssDeclaration(attr?.value);\n\t}\n\n\t/**\n\t * Returns the first child element or null if there are no child elements.\n\t */\n\tpublic get firstElementChild(): HtmlElement | null {\n\t\tconst children = this.childElements;\n\t\treturn children.length > 0 ? children[0] : null;\n\t}\n\n\t/**\n\t * Returns the last child element or null if there are no child elements.\n\t */\n\tpublic get lastElementChild(): HtmlElement | null {\n\t\tconst children = this.childElements;\n\t\treturn children.length > 0 ? children[children.length - 1] : null;\n\t}\n\n\tpublic get siblings(): HtmlElement[] {\n\t\treturn this.parent ? this.parent.childElements : [this];\n\t}\n\n\tpublic get previousSibling(): HtmlElement | null {\n\t\tconst i = this.siblings.findIndex((node) => node.unique === this.unique);\n\t\treturn i >= 1 ? this.siblings[i - 1] : null;\n\t}\n\n\tpublic get nextSibling(): HtmlElement | null {\n\t\tconst i = this.siblings.findIndex((node) => node.unique === this.unique);\n\t\treturn i <= this.siblings.length - 2 ? this.siblings[i + 1] : null;\n\t}\n\n\tpublic getElementsByTagName(tagName: string): HtmlElement[] {\n\t\treturn this.childElements.reduce<HtmlElement[]>((matches, node) => {\n\t\t\treturn matches.concat(node.is(tagName) ? [node] : [], node.getElementsByTagName(tagName));\n\t\t}, []);\n\t}\n\n\tpublic querySelector(selector: string): HtmlElement | null {\n\t\tconst it = this.querySelectorImpl(selector);\n\t\tconst next = it.next();\n\t\tif (next.done) {\n\t\t\treturn null;\n\t\t} else {\n\t\t\treturn next.value;\n\t\t}\n\t}\n\n\tpublic querySelectorAll(selector: string): HtmlElement[] {\n\t\tconst it = this.querySelectorImpl(selector);\n\t\tconst unique = new Set(it);\n\t\treturn Array.from(unique.values());\n\t}\n\n\tprivate *querySelectorImpl(selectorList: string): IterableIterator<HtmlElement> {\n\t\tif (!selectorList) {\n\t\t\treturn;\n\t\t}\n\t\tfor (const selector of selectorList.split(/,\\s*/)) {\n\t\t\tconst pattern = new Selector(selector);\n\t\t\tyield* pattern.match(this);\n\t\t}\n\t}\n\n\t/**\n\t * Evaluates callbackk on all descendants, returning true if any are true.\n\t *\n\t * @internal\n\t */\n\tpublic someChildren(callback: (node: HtmlElement) => boolean): boolean {\n\t\treturn this.childElements.some(visit);\n\n\t\tfunction visit(node: HtmlElement): boolean {\n\t\t\tif (callback(node)) {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn node.childElements.some(visit);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Evaluates callbackk on all descendants, returning true if all are true.\n\t *\n\t * @internal\n\t */\n\tpublic everyChildren(callback: (node: HtmlElement) => boolean): boolean {\n\t\treturn this.childElements.every(visit);\n\n\t\tfunction visit(node: HtmlElement): boolean {\n\t\t\tif (!callback(node)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn node.childElements.every(visit);\n\t\t}\n\t}\n\n\t/**\n\t * Visit all nodes from this node and down. Breadth first.\n\t *\n\t * The first node for which the callback evaluates to true is returned.\n\t *\n\t * @internal\n\t */\n\tpublic find(callback: (node: HtmlElement) => boolean): HtmlElement | null {\n\t\tfunction visit(node: HtmlElement): HtmlElement | null {\n\t\t\tif (callback(node)) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\tfor (const child of node.childElements) {\n\t\t\t\tconst match = child.find(callback);\n\t\t\t\tif (match) {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\treturn visit(this);\n\t}\n}\n\nfunction isClosed(endToken: TagCloseToken, meta: MetaElement | null): NodeClosed {\n\tlet closed = NodeClosed.Open;\n\n\tif (meta?.void) {\n\t\tclosed = NodeClosed.VoidOmitted;\n\t}\n\n\tif (endToken.data[0] === \"/>\") {\n\t\tclosed = NodeClosed.VoidSelfClosed;\n\t}\n\n\treturn closed;\n}\n","import { type HtmlElement } from \"../dom\";\n\n/**\n * Output DOM tree as string\n *\n * Mostly useful for debugging.\n *\n * @internal\n */\nexport function dumpTree(root: HtmlElement): string[] {\n\tconst lines: string[] = [];\n\n\tfunction decoration(node: HtmlElement): string {\n\t\tlet output = \"\";\n\t\tif (node.id) {\n\t\t\toutput += `#${node.id}`;\n\t\t}\n\t\tif (node.hasAttribute(\"class\")) {\n\t\t\toutput += `.${node.classList.join(\".\")}`;\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction writeNode(node: HtmlElement, level: number, sibling: number): void {\n\t\tif (node.parent) {\n\t\t\tconst indent = \" \".repeat(level - 1);\n\t\t\tconst l = node.childElements.length > 0 ? \"┬\" : \"─\";\n\t\t\tconst b = sibling < node.parent.childElements.length - 1 ? \"├\" : \"└\";\n\t\t\tlines.push(`${indent}${b}─${l} ${node.tagName}${decoration(node)}`);\n\t\t} else {\n\t\t\tlines.push(\"(root)\");\n\t\t}\n\n\t\tnode.childElements.forEach((child, index) => {\n\t\t\twriteNode(child, level + 1, index);\n\t\t});\n\t}\n\n\twriteNode(root, 0, 0);\n\treturn lines;\n}\n","function escape(value: string): string {\n\treturn JSON.stringify(value);\n}\n\nfunction format(value: unknown, quote: boolean = false): string {\n\tif (value === null) {\n\t\treturn \"null\";\n\t}\n\n\tif (typeof value === \"number\") {\n\t\treturn value.toString();\n\t}\n\n\tif (typeof value === \"string\") {\n\t\treturn quote ? escape(value) : value;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tconst content = value.map((it) => format(it, true)).join(\", \");\n\t\treturn `[ ${content} ]`;\n\t}\n\n\tif (typeof value === \"object\") {\n\t\tconst content = Object.entries(value)\n\t\t\t.map(([key, nested]) => `${key}: ${format(nested, true)}`)\n\t\t\t.join(\", \");\n\t\treturn `{ ${content} }`;\n\t}\n\n\treturn String(value);\n}\n\n/**\n * Replaces placeholder `{{ ... }}` with values from given object.\n *\n * @internal\n */\nexport function interpolate(text: string, data: Record<string, unknown>): string {\n\treturn text.replace(/{{\\s*([^\\s{}]+)\\s*}}/g, (match, key): string => {\n\t\treturn typeof data[key] !== \"undefined\" ? format(data[key]) : match;\n\t});\n}\n","/**\n * Test if value is a Promise (thenable).\n *\n * @internal\n */\nexport function isThenable<T>(value: T | Promise<T>): value is Promise<T> {\n\treturn value && typeof value === \"object\" && \"then\" in value && typeof value.then === \"function\";\n}\n","/**\n * @public\n */\nexport enum Severity {\n\tDISABLED = 0,\n\tWARN = 1,\n\tERROR = 2,\n}\n\n/**\n * @internal\n */\nexport function parseSeverity(value: string | number): Severity {\n\tswitch (value) {\n\t\tcase 0:\n\t\tcase \"off\":\n\t\t\treturn Severity.DISABLED;\n\t\tcase 1:\n\t\tcase \"warn\":\n\t\t\treturn Severity.WARN;\n\t\tcase 2:\n\t\tcase \"error\":\n\t\t\treturn Severity.ERROR;\n\t\tdefault:\n\t\t\tthrow new Error(`Invalid severity \"${String(value)}\"`);\n\t}\n}\n","import { type HtmlElement, DynamicValue } from \"../../dom\";\nimport { type MetaElement } from \"../../meta\";\n\nconst cacheKey = Symbol(\"aria-naming\");\n\ndeclare module \"../../dom/cache\" {\n\texport interface DOMNodeCache {\n\t\t[cacheKey]: \"allowed\" | \"prohibited\";\n\t}\n}\n\n/* default value is also stored in [[normalizeAriaNaming]] */\nconst defaultValue = \"allowed\";\n\n/* WAI ARIA 5.2.8.6 Roles which cannot be named (Name prohibited) */\nconst prohibitedRoles = [\n\t\"caption\",\n\t\"code\",\n\t\"deletion\",\n\t\"emphasis\",\n\t\"generic\",\n\t\"insertion\",\n\t\"paragraph\",\n\t\"presentation\",\n\t\"strong\",\n\t\"subscript\",\n\t\"superscript\",\n];\n\nfunction byRole(role: string): \"allowed\" | \"prohibited\" {\n\treturn prohibitedRoles.includes(role) ? \"prohibited\" : \"allowed\";\n}\n\nfunction byMeta(element: HtmlElement, meta: MetaElement): \"allowed\" | \"prohibited\" {\n\treturn meta.aria.naming(element._adapter);\n}\n\n/**\n * Returns the normalized metadata property `aria.naming`.\n *\n * - Returns `allowed` if this element allows naming.\n * - Returns `prohibited` if this element does not allow naming.\n * - If the element doesn't have metadata `allowed` is returned.\n *\n * If the element contains an explicit `role` the role is used to determine\n * whenever the element allows naming or not. Otherwise it uses metadata to\n * determine.\n *\n * @public\n * @param element - Element to get `aria.naming` from.\n */\nexport function ariaNaming(element: HtmlElement): \"allowed\" | \"prohibited\" {\n\tconst cached = element.cacheGet(cacheKey);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\t/* if the element contains an explicit role we use that to determine if naming\n\t * is allowed or not */\n\tconst role = element.getAttribute(\"role\")?.value;\n\tif (role) {\n\t\tif (role instanceof DynamicValue) {\n\t\t\treturn element.cacheSet(cacheKey, defaultValue);\n\t\t} else {\n\t\t\treturn element.cacheSet(cacheKey, byRole(role));\n\t\t}\n\t}\n\n\tconst meta = element.meta;\n\tif (!meta) {\n\t\treturn element.cacheSet(cacheKey, defaultValue);\n\t}\n\n\treturn element.cacheSet(cacheKey, byMeta(element, meta));\n}\n","/**\n * @public\n */\nexport interface IncludeExcludeOptions {\n\tinclude: string[] | null;\n\texclude: string[] | null;\n}\n\nconst patternCache = new Map<string, RegExp>();\n\nfunction compileStringPattern(pattern: string): RegExp {\n\tconst regexp = pattern.replace(/[*]+/g, \".+\");\n\t/* eslint-disable-next-line security/detect-non-literal-regexp -- technical debt, should do input sanitation and precompilation */\n\treturn new RegExp(`^${regexp}$`);\n}\n\nfunction compileRegExpPattern(pattern: string): RegExp {\n\t/* eslint-disable-next-line security/detect-non-literal-regexp -- technical debt, should do input sanitation and precompilation */\n\treturn new RegExp(`^${pattern}$`);\n}\n\nfunction compilePattern(pattern: string): RegExp {\n\tconst cached = patternCache.get(pattern);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\tconst match = pattern.match(/^\\/(.*)\\/$/);\n\tconst regexp = match ? compileRegExpPattern(match[1]) : compileStringPattern(pattern);\n\tpatternCache.set(pattern, regexp);\n\treturn regexp;\n}\n\n/**\n * @internal\n */\nexport function keywordPatternMatcher(list: string[], keyword: string): boolean {\n\tfor (const pattern of list) {\n\t\tconst regexp = compilePattern(pattern);\n\t\tif (regexp.test(keyword)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * @internal\n */\nexport function isKeywordIgnored<T extends IncludeExcludeOptions>(\n\toptions: T,\n\tkeyword: string,\n\tmatcher: (list: string[], it: string) => boolean = (list, it) => list.includes(it),\n): boolean {\n\tconst { include, exclude } = options;\n\n\t/* ignore keyword if not present in \"include\" */\n\tif (include && !matcher(include, keyword)) {\n\t\treturn true;\n\t}\n\n\t/* ignore keyword if present in \"excludes\" */\n\tif (exclude && matcher(exclude, keyword)) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n","import { type HtmlElement, parseCssDeclaration } from \"../../dom\";\n\nexport interface IsHiddenResult {\n\tbyParent: boolean;\n\tbySelf: boolean;\n}\n\n/**\n * Result of {@link isInert}.\n *\n * @internal\n */\nexport interface IsInertResult {\n\t/** `true` if one or more parents are inert */\n\tbyParent: boolean;\n\t/** `true` if the element itself is inert */\n\tbySelf: boolean;\n}\n\ndeclare module \"../../dom/cache\" {\n\texport interface DOMNodeCache {\n\t\t[ARIA_HIDDEN_CACHE]: IsHiddenResult;\n\t\t[HTML_HIDDEN_CACHE]: IsHiddenResult;\n\t\t[INERT_CACHE]: IsInertResult;\n\t\t[ROLE_PRESENTATION_CACHE]: boolean;\n\t\t[STYLE_HIDDEN_CACHE]: boolean;\n\t}\n}\n\nconst ARIA_HIDDEN_CACHE = Symbol(isAriaHidden.name);\nconst HTML_HIDDEN_CACHE = Symbol(isHTMLHidden.name);\nconst INERT_CACHE = Symbol(isInert.name);\nconst ROLE_PRESENTATION_CACHE = Symbol(isPresentation.name);\nconst STYLE_HIDDEN_CACHE = Symbol(isStyleHidden.name);\n\n/**\n * Tests if this element is present in the accessibility tree.\n *\n * In practice it tests whenever the element or its parents has\n * `role=\"presentation\"` or `aria-hidden=\"false\"`. Dynamic values counts as\n * visible since the element might be in the visibility tree sometimes.\n */\nexport function inAccessibilityTree(node: HtmlElement): boolean {\n\tif (isAriaHidden(node)) {\n\t\treturn false;\n\t}\n\tif (isPresentation(node)) {\n\t\treturn false;\n\t}\n\tif (isHTMLHidden(node)) {\n\t\treturn false;\n\t}\n\tif (isInert(node)) {\n\t\treturn false;\n\t}\n\tif (isStyleHidden(node)) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction isAriaHiddenImpl(node: HtmlElement): IsHiddenResult {\n\tconst getAriaHiddenAttr = (node: HtmlElement): boolean => {\n\t\tconst ariaHidden = node.getAttribute(\"aria-hidden\");\n\t\treturn Boolean(ariaHidden && ariaHidden.value === \"true\");\n\t};\n\treturn {\n\t\tbyParent: node.parent ? isAriaHidden(node.parent) : false,\n\t\tbySelf: getAriaHiddenAttr(node),\n\t};\n}\n\n/**\n * Tests if this element or an ancestor have `aria-hidden=\"true\"`.\n *\n * Dynamic values yields `false` since the element will conditionally be in the\n * accessibility tree and must fulfill it's conditions.\n *\n * @internal\n */\nexport function isAriaHidden(node: HtmlElement): boolean;\nexport function isAriaHidden(node: HtmlElement, details: true): IsHiddenResult;\nexport function isAriaHidden(node: HtmlElement, details?: true): boolean | IsHiddenResult {\n\tconst cached = node.cacheGet(ARIA_HIDDEN_CACHE);\n\tif (cached) {\n\t\treturn details ? cached : cached.byParent || cached.bySelf;\n\t}\n\tconst result = node.cacheSet(ARIA_HIDDEN_CACHE, isAriaHiddenImpl(node));\n\treturn details ? result : result.byParent || result.bySelf;\n}\n\nfunction isHTMLHiddenImpl(node: HtmlElement): IsHiddenResult {\n\tconst getHiddenAttr = (node: HtmlElement): boolean => {\n\t\tconst hidden = node.getAttribute(\"hidden\");\n\t\treturn Boolean(hidden?.isStatic);\n\t};\n\treturn {\n\t\tbyParent: node.parent ? isHTMLHidden(node.parent) : false,\n\t\tbySelf: getHiddenAttr(node),\n\t};\n}\n\n/**\n * Tests if this element or an ancestor have `hidden` attribute.\n *\n * Dynamic values yields `false` since the element will conditionally be in the\n * DOM tree and must fulfill it's conditions.\n *\n * @internal\n */\nexport function isHTMLHidden(node: HtmlElement): boolean;\nexport function isHTMLHidden(node: HtmlElement, details: true): IsHiddenResult;\nexport function isHTMLHidden(node: HtmlElement, details?: true): boolean | IsHiddenResult {\n\tconst cached = node.cacheGet(HTML_HIDDEN_CACHE);\n\tif (cached) {\n\t\treturn details ? cached : cached.byParent || cached.bySelf;\n\t}\n\tconst result = node.cacheSet(HTML_HIDDEN_CACHE, isHTMLHiddenImpl(node));\n\treturn details ? result : result.byParent || result.bySelf;\n}\n\nfunction isInertImpl(node: HtmlElement): IsHiddenResult {\n\tconst getInertAttr = (node: HtmlElement): boolean => {\n\t\tconst inert = node.getAttribute(\"inert\");\n\t\treturn Boolean(inert?.isStatic);\n\t};\n\treturn {\n\t\tbyParent: node.parent ? isInert(node.parent) : false,\n\t\tbySelf: getInertAttr(node),\n\t};\n}\n\n/**\n * Tests if this element or an ancestor have `inert` attribute.\n *\n * Dynamic values yields `false` since the element will conditionally be in the\n * DOM tree and must fulfill it's conditions.\n *\n * @internal\n */\nexport function isInert(node: HtmlElement): boolean;\nexport function isInert(node: HtmlElement, details: true): IsInertResult;\nexport function isInert(node: HtmlElement, details?: true): boolean | IsInertResult {\n\tconst cached = node.cacheGet(INERT_CACHE);\n\tif (cached) {\n\t\treturn details ? cached : cached.byParent || cached.bySelf;\n\t}\n\tconst result = node.cacheSet(INERT_CACHE, isInertImpl(node));\n\treturn details ? result : result.byParent || result.bySelf;\n}\n\nfunction isStyleHiddenImpl(node: HtmlElement): boolean {\n\tconst getStyleAttr = (node: HtmlElement): boolean => {\n\t\tconst style = node.getAttribute(\"style\");\n\t\tconst { display, visibility } = parseCssDeclaration(style?.value);\n\t\treturn display === \"none\" || visibility === \"hidden\";\n\t};\n\tconst byParent = node.parent ? isStyleHidden(node.parent) : false;\n\tconst bySelf = getStyleAttr(node);\n\treturn byParent || bySelf;\n}\n\n/**\n * Tests if this element or an ancestor have `hidden` attribute.\n *\n * Dynamic values yields `false` since the element will conditionally be in the\n * DOM tree and must fulfill it's conditions.\n *\n * @internal\n */\nexport function isStyleHidden(node: HtmlElement): boolean {\n\tconst cached = node.cacheGet(STYLE_HIDDEN_CACHE);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\treturn node.cacheSet(STYLE_HIDDEN_CACHE, isStyleHiddenImpl(node));\n}\n\n/**\n * Tests if this element has `role=\"presentation\"` or `role=\"none\"`.\n *\n * Dynamic values yields `false` just as if the attribute wasn't present.\n */\nexport function isPresentation(node: HtmlElement): boolean {\n\tif (node.cacheExists(ROLE_PRESENTATION_CACHE)) {\n\t\treturn Boolean(node.cacheGet(ROLE_PRESENTATION_CACHE));\n\t}\n\n\t/* interactive elements ignores `role=\"presentation\"` */\n\tconst meta = node.meta;\n\tif (meta?.interactive) {\n\t\treturn node.cacheSet(ROLE_PRESENTATION_CACHE, false);\n\t}\n\n\t/* focusable elements ignores `role=\"presentation\"` */\n\tconst tabindex = node.getAttribute(\"tabindex\");\n\tif (tabindex) {\n\t\treturn node.cacheSet(ROLE_PRESENTATION_CACHE, false);\n\t}\n\n\tconst role = node.getAttribute(\"role\");\n\tif (role && (role.value === \"presentation\" || role.value === \"none\")) {\n\t\treturn node.cacheSet(ROLE_PRESENTATION_CACHE, true);\n\t} else {\n\t\treturn node.cacheSet(ROLE_PRESENTATION_CACHE, false);\n\t}\n}\n","import { type HtmlElement, type TextNode, isElementNode, isTextNode } from \"../../dom\";\nimport { isAriaHidden, isHTMLHidden } from \"./a11y\";\n\nconst cachePrefix = classifyNodeText.name;\nconst HTML_CACHE_KEY = Symbol(`${cachePrefix}|html`);\nconst A11Y_CACHE_KEY = Symbol(`${cachePrefix}|a11y`);\nconst IGNORE_HIDDEN_ROOT_HTML_CACHE_KEY = Symbol(`${cachePrefix}|html|ignore-hidden-root`);\nconst IGNORE_HIDDEN_ROOT_A11Y_CACHE_KEY = Symbol(`${cachePrefix}|a11y|ignore-hidden-root`);\n\ntype CACHE_KEY =\n\t| typeof HTML_CACHE_KEY\n\t| typeof A11Y_CACHE_KEY\n\t| typeof IGNORE_HIDDEN_ROOT_HTML_CACHE_KEY\n\t| typeof IGNORE_HIDDEN_ROOT_A11Y_CACHE_KEY;\n\n/**\n * @public\n */\nexport enum TextClassification {\n\tEMPTY_TEXT,\n\tDYNAMIC_TEXT,\n\tSTATIC_TEXT,\n}\n\n/**\n * @public\n */\nexport interface TextClassificationOptions {\n\t/** If `true` only accessible text is considered (default false) */\n\taccessible?: boolean;\n\n\t/** If `true` the `hidden` and `aria-hidden` attribute is ignored on the root\n\t * (and parents) elements (default false) */\n\tignoreHiddenRoot?: boolean;\n}\n\ndeclare module \"../../dom/cache\" {\n\texport interface DOMNodeCache {\n\t\t[HTML_CACHE_KEY]: TextClassification;\n\t\t[A11Y_CACHE_KEY]: TextClassification;\n\t\t[IGNORE_HIDDEN_ROOT_HTML_CACHE_KEY]: TextClassification;\n\t\t[IGNORE_HIDDEN_ROOT_A11Y_CACHE_KEY]: TextClassification;\n\t}\n}\n\n/**\n * @internal\n */\nexport function getCachekey(options: TextClassificationOptions): CACHE_KEY {\n\tconst { accessible = false, ignoreHiddenRoot = false } = options;\n\tif (accessible && ignoreHiddenRoot) {\n\t\treturn IGNORE_HIDDEN_ROOT_A11Y_CACHE_KEY;\n\t} else if (ignoreHiddenRoot) {\n\t\treturn IGNORE_HIDDEN_ROOT_HTML_CACHE_KEY;\n\t} else if (accessible) {\n\t\treturn A11Y_CACHE_KEY;\n\t} else {\n\t\treturn HTML_CACHE_KEY;\n\t}\n}\n\n/* While I cannot find a reference about this in the standard the <select>\n * element kinda acts as if there is no text content, most particularly it\n * doesn't receive and accessible name. The `.textContent` property does\n * however include the <option> childrens text. But for the sake of the\n * validator it is probably best if the classification acts as if there is no\n * text as I think that is what is expected of the return values. Might have\n * to revisit this at some point or if someone could clarify what section of\n * the standard deals with this. */\nfunction isSpecialEmpty(node: HtmlElement): boolean {\n\treturn node.is(\"select\") || node.is(\"textarea\");\n}\n\n/**\n * Checks text content of an element.\n *\n * Any text is considered including text from descendant elements. Whitespace is\n * ignored.\n *\n * If any text is dynamic `TextClassification.DYNAMIC_TEXT` is returned.\n *\n * @public\n */\nexport function classifyNodeText(\n\tnode: HtmlElement,\n\toptions: TextClassificationOptions = {},\n): TextClassification {\n\tconst { accessible = false, ignoreHiddenRoot = false } = options;\n\tconst cacheKey = getCachekey(options);\n\n\tif (node.cacheExists(cacheKey)) {\n\t\treturn node.cacheGet(cacheKey)!; // eslint-disable-line @typescript-eslint/no-non-null-assertion -- has/get combo\n\t}\n\n\tif (!ignoreHiddenRoot && isHTMLHidden(node)) {\n\t\treturn node.cacheSet(cacheKey, TextClassification.EMPTY_TEXT);\n\t}\n\n\tif (!ignoreHiddenRoot && accessible && isAriaHidden(node)) {\n\t\treturn node.cacheSet(cacheKey, TextClassification.EMPTY_TEXT);\n\t}\n\n\tif (isSpecialEmpty(node)) {\n\t\treturn node.cacheSet(cacheKey, TextClassification.EMPTY_TEXT);\n\t}\n\n\tconst text = findTextNodes(node, {\n\t\t...options,\n\t\tignoreHiddenRoot: false,\n\t});\n\n\t/* if any text is dynamic classify as dynamic */\n\tif (text.some((cur) => cur.isDynamic)) {\n\t\treturn node.cacheSet(cacheKey, TextClassification.DYNAMIC_TEXT);\n\t}\n\n\t/* if any text has non-whitespace character classify as static */\n\tif (text.some((cur) => cur.textContent.match(/\\S/) !== null)) {\n\t\treturn node.cacheSet(cacheKey, TextClassification.STATIC_TEXT);\n\t}\n\n\t/* default to empty */\n\treturn node.cacheSet(cacheKey, TextClassification.EMPTY_TEXT);\n}\n\nfunction findTextNodes(node: HtmlElement, options: TextClassificationOptions): TextNode[] {\n\tconst { accessible = false } = options;\n\tlet text: TextNode[] = [];\n\tfor (const child of node.childNodes) {\n\t\tif (isTextNode(child)) {\n\t\t\ttext.push(child);\n\t\t} else if (isElementNode(child)) {\n\t\t\tif (isHTMLHidden(child, true).bySelf) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (accessible && isAriaHidden(child, true).bySelf) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttext = text.concat(findTextNodes(child, options));\n\t\t}\n\t}\n\treturn text;\n}\n","import { type HtmlElement } from \"../../dom\";\n\nexport function hasAltText(image: HtmlElement): boolean {\n\tconst alt = image.getAttribute(\"alt\");\n\n\t/* missing attribute */\n\tif (!alt) {\n\t\treturn false;\n\t}\n\n\t/* (incorrectly) set as boolean value */\n\tif (alt.value === null) {\n\t\treturn false;\n\t}\n\n\treturn alt.isDynamic || alt.value.toString() !== \"\";\n}\n","import { type HtmlElement } from \"../../dom\";\n\nexport function hasAriaLabel(node: HtmlElement): boolean {\n\tconst label = node.getAttribute(\"aria-label\");\n\n\t/* missing attribute */\n\tif (!label) {\n\t\treturn false;\n\t}\n\n\t/* (incorrectly) set as boolean value */\n\tif (label.value === null) {\n\t\treturn false;\n\t}\n\n\treturn label.isDynamic || label.value.toString() !== \"\";\n}\n","/**\n * Partition an array to two new lists based on the result of a\n * predicate. Similar to `Array.filter` but returns both matching and\n * non-matching in the same call.\n *\n * Elements matching the predicate is placed in the first array and elements not\n * matching is placed in the second.\n *\n * @public\n * @param values - The array of values to partition.\n * @param predicate - A predicate function taking a single element and returning\n * a boolean.\n * @returns - Two arrays where the first contains all elements where the\n * predicate matched and second contains the rest of the elements.\n */\nexport function partition<T>(\n\tvalues: T[],\n\tpredicate: (value: T, index: number, values: T[]) => boolean,\n): [matching: T[], nonmatching: T[]] {\n\tconst initial: [T[], T[]] = [[], []];\n\treturn values.reduce((accumulator, value, index) => {\n\t\tconst match = predicate(value, index, values);\n\t\taccumulator[match ? 0 : 1].push(value);\n\t\treturn accumulator;\n\t}, initial);\n}\n","import Ajv, { type ErrorObject, type SchemaObject, type ValidateFunction } from \"ajv\";\nimport ajvSchemaDraft from \"ajv/lib/refs/json-schema-draft-06.json\";\nimport { type ConfigData } from \"./config/config-data\";\nimport { Severity } from \"./config/severity\";\nimport { type Location } from \"./context\";\nimport { type DOMNode } from \"./dom\";\nimport { type RuleBlocker } from \"./engine/rule-blocker\";\nimport { type Event, type ListenEventMap } from \"./event\";\nimport { type Parser } from \"./parser\";\nimport { type Reporter } from \"./reporter\";\nimport { type MetaTable, type MetaLookupableProperty, type MetaElement } from \"./meta\";\nimport { SchemaValidationError } from \"./error\";\nimport { interpolate } from \"./utils/interpolate\";\nimport { type IncludeExcludeOptions, isKeywordIgnored } from \"./rules/helper\";\nimport { getRuleUrl } from \"./utils/get-rule-url.mjs\";\n\nexport { type SchemaObject } from \"ajv\";\n\nconst remapEvents: Record<string, string> = {\n\t\"tag:open\": \"tag:start\",\n\t\"tag:close\": \"tag:end\",\n};\n\nconst ajv = new Ajv({ strict: true, strictTuples: true, strictTypes: true });\najv.addMetaSchema(ajvSchemaDraft);\n\n/**\n * @public\n */\nexport interface ErrorDescriptor<ContextType> {\n\tnode: DOMNode | null;\n\tmessage: string;\n\tlocation?: Location | null | undefined;\n\tcontext?: ContextType;\n}\n\n/**\n * @public\n */\nexport interface RuleDocumentation {\n\tdescription: string;\n\turl?: string;\n}\n\n/**\n * @public\n */\nexport interface RuleConstructor<T, U> {\n\tnew (options?: any): Rule<T, U>;\n\tschema(): SchemaObject | null | undefined;\n}\n\n/**\n * Get (cached) schema validator for rule options.\n *\n * @param ruleId - Rule ID used as key for schema lookups.\n * @param properties - Uncompiled schema.\n */\nfunction getSchemaValidator(ruleId: string, properties: SchemaObject): ValidateFunction {\n\tconst $id = `rule/${ruleId}`;\n\n\tconst cached = ajv.getSchema($id);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\tconst schema = {\n\t\t$id,\n\t\ttype: \"object\",\n\t\tadditionalProperties: false,\n\t\tproperties,\n\t};\n\n\treturn ajv.compile(schema);\n}\n\nfunction isErrorDescriptor<T>(\n\tvalue:\n\t\t| [ErrorDescriptor<T>]\n\t\t| [DOMNode | null, string, (Location | null | undefined)?]\n\t\t| [DOMNode | null, string, Location | null | undefined, T],\n): value is [ErrorDescriptor<T>] {\n\treturn Boolean(value[0] && (value[0] as unknown as Record<string, unknown>).message);\n}\n\nfunction unpackErrorDescriptor<T>(\n\tvalue:\n\t\t| [ErrorDescriptor<T>]\n\t\t| [DOMNode | null, string, (Location | null | undefined)?]\n\t\t| [DOMNode | null, string, Location | null | undefined, T],\n): ErrorDescriptor<T> {\n\tif (isErrorDescriptor(value)) {\n\t\treturn value[0];\n\t} else {\n\t\tconst [node, message, location, context] = value;\n\t\treturn { node, message, location, context };\n\t}\n}\n\n/**\n * @public\n */\nexport abstract class Rule<ContextType = void, OptionsType = void> {\n\tprivate reporter: Reporter;\n\tprivate parser: Parser;\n\tprivate meta: MetaTable;\n\tprivate enabled: boolean; // rule enabled/disabled, irregardless of severity\n\tprivate blockers: RuleBlocker[];\n\tprivate severity: Severity; // rule severity\n\tprivate event: Event;\n\n\t/**\n\t * Rule name. Defaults to filename without extension but can be overwritten by\n\t * subclasses.\n\t */\n\tpublic name: string;\n\n\t/**\n\t * Rule options.\n\t */\n\tpublic readonly options: OptionsType;\n\n\tpublic constructor(options: OptionsType) {\n\t\t/* faux initialization, properly initialized by init(). This is to keep TS happy without adding null-checks everywhere */\n\t\tthis.reporter = null as unknown as Reporter;\n\t\tthis.parser = null as unknown as Parser;\n\t\tthis.meta = null as unknown as MetaTable;\n\t\tthis.event = null as unknown as Event;\n\n\t\tthis.options = options;\n\t\tthis.enabled = true;\n\t\tthis.blockers = [];\n\t\tthis.severity = Severity.DISABLED;\n\t\tthis.name = \"\";\n\t}\n\n\tpublic getSeverity(): Severity {\n\t\treturn this.severity;\n\t}\n\n\tpublic setServerity(severity: Severity): void {\n\t\tthis.severity = severity;\n\t}\n\n\t/**\n\t * Block this rule from generating errors. Pass in an id generated by\n\t * `createBlocker`. Can be unblocked by {@link Rule.unblock}.\n\t *\n\t * A blocked rule is similar to disabling it but it will still receive parser\n\t * events. A list of all blockers is passed to the `rule:error` event.\n\t *\n\t * @internal\n\t */\n\tpublic block(id: RuleBlocker): void {\n\t\tthis.blockers.push(id);\n\t}\n\n\t/**\n\t * Unblock a rule previously blocked by {@link Rule.block}.\n\t *\n\t * @internal\n\t */\n\tpublic unblock(id: RuleBlocker): void {\n\t\tthis.blockers = this.blockers.filter((it) => it !== id);\n\t}\n\n\tpublic setEnabled(enabled: boolean): void {\n\t\tthis.enabled = enabled;\n\t}\n\n\t/**\n\t * Returns `true` if rule is deprecated.\n\t *\n\t * Overridden by subclasses.\n\t */\n\tpublic get deprecated(): boolean {\n\t\treturn false;\n\t}\n\n\t/**\n\t * Test if rule is enabled.\n\t *\n\t * To be considered enabled the enabled flag must be true and the severity at\n\t * least warning.\n\t *\n\t * @internal\n\t */\n\tpublic isEnabled(node?: DOMNode | null): boolean {\n\t\treturn this.enabled && this.severity >= Severity.WARN && (!node || node.ruleEnabled(this.name));\n\t}\n\n\t/**\n\t * Test if rule is enabled.\n\t *\n\t * To be considered enabled the enabled flag must be true and the severity at\n\t * least warning.\n\t *\n\t * @internal\n\t */\n\tpublic isBlocked(node?: DOMNode | null): boolean {\n\t\tif (this.blockers.length > 0) {\n\t\t\treturn true;\n\t\t}\n\t\tif (node && node.ruleBlockers(this.name).length > 0) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Get a list of all blockers currently active this rule.\n\t *\n\t * @internal\n\t */\n\tpublic getBlockers(node?: DOMNode | null): RuleBlocker[] {\n\t\treturn [...this.blockers, ...(node ? node.ruleBlockers(this.name) : [])];\n\t}\n\n\t/**\n\t * Check if keyword is being ignored by the current rule configuration.\n\t *\n\t * This method requires the [[RuleOption]] type to include two properties:\n\t *\n\t * - include: string[] | null\n\t * - exclude: string[] | null\n\t *\n\t * This methods checks if the given keyword is included by \"include\" but not\n\t * excluded by \"exclude\". If any property is unset it is skipped by the\n\t * condition. Usually the user would use either one but not both but there is\n\t * no limitation to use both but the keyword must satisfy both conditions. If\n\t * either condition fails `true` is returned.\n\t *\n\t * For instance, given `{ include: [\"foo\"] }` the keyword `\"foo\"` would match\n\t * but not `\"bar\"`.\n\t *\n\t * Similarly, given `{ exclude: [\"foo\"] }` the keyword `\"bar\"` would match but\n\t * not `\"foo\"`.\n\t *\n\t * @param keyword - Keyword to match against `include` and `exclude` options.\n\t * @param matcher - Optional function to compare items with.\n\t * @returns `true` if keyword is not present in `include` or is present in\n\t * `exclude`.\n\t */\n\tpublic isKeywordIgnored<T extends IncludeExcludeOptions>(\n\t\tthis: { options: T },\n\t\tkeyword: string,\n\t\tmatcher: (list: string[], it: string) => boolean = (list, it) => list.includes(it),\n\t): boolean {\n\t\treturn isKeywordIgnored(this.options, keyword, matcher);\n\t}\n\n\t/**\n\t * Get [[MetaElement]] for the given tag. If no specific metadata is present\n\t * the global metadata is returned or null if no global is present.\n\t *\n\t * @public\n\t * @returns A shallow copy of metadata.\n\t */\n\tpublic getMetaFor(tagName: string): MetaElement | null {\n\t\treturn this.meta.getMetaFor(tagName);\n\t}\n\n\t/**\n\t * Find all tags which has enabled given property.\n\t */\n\tpublic getTagsWithProperty(propName: MetaLookupableProperty): string[] {\n\t\treturn this.meta.getTagsWithProperty(propName);\n\t}\n\n\t/**\n\t * Find tag matching tagName or inheriting from it.\n\t */\n\tpublic getTagsDerivedFrom(tagName: string): string[] {\n\t\treturn this.meta.getTagsDerivedFrom(tagName);\n\t}\n\n\t/**\n\t * JSON schema for rule options.\n\t *\n\t * Rules should override this to return an object with JSON schema to validate\n\t * rule options. If `null` or `undefined` is returned no validation is\n\t * performed.\n\t */\n\tpublic static schema(): SchemaObject | null | undefined {\n\t\treturn null;\n\t}\n\n\t/**\n\t * Report a new error.\n\t *\n\t * Rule must be enabled both globally and on the specific node for this to\n\t * have any effect.\n\t */\n\tpublic report(error: ErrorDescriptor<ContextType>): void;\n\tpublic report(\n\t\tnode: DOMNode | null,\n\t\tmessage: string,\n\t\tlocation?: Location | null | undefined,\n\t): void;\n\tpublic report(\n\t\tnode: DOMNode | null,\n\t\tmessage: string,\n\t\tlocation: Location | null | undefined,\n\t\tcontext: ContextType,\n\t): void;\n\tpublic report(\n\t\t...args:\n\t\t\t| [ErrorDescriptor<ContextType>]\n\t\t\t| [DOMNode | null, string]\n\t\t\t| [DOMNode | null, string, (Location | null | undefined)?]\n\t\t\t| [DOMNode | null, string, Location | null | undefined, ContextType]\n\t): void {\n\t\tconst { node, message, location, context } = unpackErrorDescriptor(args);\n\t\tconst enabled = this.isEnabled(node);\n\t\tconst blocked = this.isBlocked(node);\n\t\tconst where = this.findLocation({ node, location, event: this.event });\n\t\tthis.parser.trigger(\"rule:error\", {\n\t\t\tlocation: where,\n\t\t\truleId: this.name,\n\t\t\tenabled,\n\t\t\tblockers: this.getBlockers(node),\n\t\t});\n\t\tif (enabled && !blocked) {\n\t\t\tconst interpolated = interpolate(message, context ?? {});\n\t\t\tthis.reporter.add(this, interpolated, this.severity, node, where, context);\n\t\t}\n\t}\n\n\tprivate findLocation(src: {\n\t\tnode: DOMNode | null;\n\t\tlocation?: Location | null;\n\t\tevent: Event | null;\n\t}): Location {\n\t\tif (src.location) {\n\t\t\treturn src.location;\n\t\t}\n\t\tif (src.event?.location) {\n\t\t\treturn src.event.location;\n\t\t}\n\t\tif (src.node?.location) {\n\t\t\treturn src.node.location;\n\t\t}\n\t\treturn {} as Location;\n\t}\n\n\t/**\n\t * Listen for events.\n\t *\n\t * Adding listeners can be done even if the rule is disabled but for the\n\t * events to be delivered the rule must be enabled.\n\t *\n\t * If the optional filter callback is used it must be a function taking an\n\t * event of the same type as the listener. The filter is called before the\n\t * listener and if the filter returns false the event is discarded.\n\t *\n\t * @param event - Event name\n\t * @param filter - Optional filter function. Callback is only called if filter functions return true.\n\t * @param callback - Callback to handle event.\n\t * @returns A function to unregister the listener\n\t */\n\tpublic on<K extends keyof ListenEventMap>(\n\t\tevent: K,\n\t\tcallback: (event: ListenEventMap[K]) => void,\n\t): () => void;\n\tpublic on<K extends keyof ListenEventMap>(\n\t\tevent: K,\n\t\tfilter: (event: ListenEventMap[K]) => boolean,\n\t\tcallback: (event: ListenEventMap[K]) => void,\n\t): () => void;\n\tpublic on(\n\t\tevent: string,\n\t\t...args: [(event: Event) => void] | [(event: Event) => boolean, (event: Event) => void]\n\t): () => void {\n\t\t/* handle deprecated aliases */\n\t\tconst remap = remapEvents[event];\n\t\tif (remap) {\n\t\t\tevent = remap;\n\t\t}\n\n\t\tconst callback = args.pop() as (event: Event) => void;\n\t\tconst filter = (args.pop() as ((event: Event) => boolean) | undefined) ?? (() => true);\n\n\t\treturn this.parser.on(event, (_event: string, data: Event) => {\n\t\t\tif (this.isEnabled() && filter(data)) {\n\t\t\t\tthis.event = data;\n\t\t\t\tcallback(data);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Called by [[Engine]] when initializing the rule.\n\t *\n\t * Do not override this, use the `setup` callback instead.\n\t *\n\t * @internal\n\t */\n\tpublic init(parser: Parser, reporter: Reporter, severity: number, meta: MetaTable): void {\n\t\tthis.parser = parser;\n\t\tthis.reporter = reporter;\n\t\tthis.severity = severity;\n\t\tthis.meta = meta;\n\t}\n\n\t/**\n\t * Validate rule options against schema. Throws error if object does not validate.\n\t *\n\t * For rules without schema this function does nothing.\n\t *\n\t * @throws {@link SchemaValidationError}\n\t * Thrown when provided options does not validate against rule schema.\n\t *\n\t * @param cls - Rule class (constructor)\n\t * @param ruleId - Rule identifier\n\t * @param jsonPath - JSON path from which [[options]] can be found in [[config]]\n\t * @param options - User configured options to be validated\n\t * @param filename - Filename from which options originated\n\t * @param config - Configuration from which options originated\n\t *\n\t * @internal\n\t */\n\tpublic static validateOptions(\n\t\tcls: RuleConstructor<unknown, unknown> | undefined,\n\t\truleId: string,\n\t\tjsonPath: string,\n\t\toptions: unknown,\n\t\tfilename: string | null,\n\t\tconfig: ConfigData,\n\t): void {\n\t\tif (!cls) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst schema = cls.schema();\n\t\tif (!schema) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isValid = getSchemaValidator(ruleId, schema);\n\t\tif (!isValid(options)) {\n\t\t\t/* istanbul ignore next: it is always set when validation fails */\n\t\t\tconst errors = isValid.errors ?? [];\n\t\t\tconst mapped = errors.map((error: ErrorObject) => {\n\t\t\t\terror.instancePath = `${jsonPath}${error.instancePath}`;\n\t\t\t\treturn error;\n\t\t\t});\n\t\t\tthrow new SchemaValidationError(filename, `Rule configuration error`, config, schema, mapped);\n\t\t}\n\t}\n\n\t/**\n\t * Rule setup callback.\n\t *\n\t * Override this to provide rule setup code.\n\t */\n\tpublic abstract setup(): void;\n\n\t/**\n\t * Rule documentation callback.\n\t *\n\t * Called when requesting additional documentation for a rule. Some rules\n\t * provide additional context to provide context-aware suggestions.\n\t *\n\t * @public\n\t * @virtual\n\t * @param context - Error context given by a reported error.\n\t * @returns Rule documentation and url with additional details or `null` if no\n\t * additional documentation is available.\n\t */\n\t/* eslint-disable-next-line @typescript-eslint/no-unused-vars -- technical debt, prototype should be moved to interface */\n\tpublic documentation(context: ContextType): RuleDocumentation | null {\n\t\treturn null;\n\t}\n}\n\n/**\n * @internal\n */\nexport function ruleDocumentationUrl(filename: string): string {\n\treturn getRuleUrl(filename);\n}\n","import { DynamicValue } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport const enum Style {\n\tEXTERNAL = \"external\",\n\tRELATIVE_BASE = \"relative-base\",\n\tRELATIVE_PATH = \"relative-path\",\n\tABSOLUTE = \"absolute\",\n\tANCHOR = \"anchor\",\n}\n\n/**\n * @internal\n */\nexport interface AllowList<T> {\n\tinclude: T[] | null;\n\texclude: T[] | null;\n}\n\ninterface RuleOptions {\n\tallowExternal: boolean | AllowList<string>;\n\tallowRelative: boolean | AllowList<string>;\n\tallowAbsolute: boolean | AllowList<string>;\n\tallowBase: boolean;\n}\n\nconst defaults: RuleOptions = {\n\tallowExternal: true,\n\tallowRelative: true,\n\tallowAbsolute: true,\n\tallowBase: true,\n};\n\nconst mapping: Record<string, string> = {\n\ta: \"href\",\n\timg: \"src\",\n\tlink: \"href\",\n\tscript: \"src\",\n};\n\nconst description: Record<Style, string | null> = {\n\t[Style.EXTERNAL]: \"External links are not allowed by current configuration.\",\n\t[Style.RELATIVE_BASE]: \"Links relative to <base> are not allowed by current configuration.\",\n\t[Style.RELATIVE_PATH]: \"Relative links are not allowed by current configuration.\",\n\t[Style.ABSOLUTE]: \"Absolute links are not allowed by current configuration.\",\n\t[Style.ANCHOR]: null,\n};\n\nfunction parseAllow(value: boolean | AllowList<string>): boolean | AllowList<RegExp> {\n\tif (typeof value === \"boolean\") {\n\t\treturn value;\n\t}\n\treturn {\n\t\t/* eslint-disable security/detect-non-literal-regexp -- expected to be regexp */\n\t\tinclude: value.include ? value.include.map((it) => new RegExp(it)) : null,\n\t\texclude: value.exclude ? value.exclude.map((it) => new RegExp(it)) : null,\n\t\t/* eslint-enable security/detect-non-literal-regexp */\n\t};\n}\n\n/**\n * @internal\n */\nexport function matchList(value: string, list: AllowList<RegExp>): boolean {\n\tif (list.include && !list.include.some((it) => it.test(value))) {\n\t\treturn false;\n\t}\n\tif (list.exclude?.some((it) => it.test(value))) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nexport default class AllowedLinks extends Rule<Style, RuleOptions> {\n\tprotected allowExternal: boolean | AllowList<RegExp>;\n\tprotected allowRelative: boolean | AllowList<RegExp>;\n\tprotected allowAbsolute: boolean | AllowList<RegExp>;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.allowExternal = parseAllow(this.options.allowExternal);\n\t\tthis.allowRelative = parseAllow(this.options.allowRelative);\n\t\tthis.allowAbsolute = parseAllow(this.options.allowAbsolute);\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\tconst booleanOrObject = {\n\t\t\tanyOf: [\n\t\t\t\t{ type: \"boolean\" },\n\t\t\t\t{\n\t\t\t\t\ttype: \"object\",\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tinclude: {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\titems: { type: \"string\" },\n\t\t\t\t\t\t},\n\t\t\t\t\t\texclude: {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\titems: { type: \"string\" },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t\treturn {\n\t\t\tallowExternal: { ...booleanOrObject },\n\t\t\tallowRelative: { ...booleanOrObject },\n\t\t\tallowAbsolute: { ...booleanOrObject },\n\t\t\tallowBase: { type: \"boolean\" },\n\t\t};\n\t}\n\n\tpublic documentation(context: Style): RuleDocumentation {\n\t\tconst message =\n\t\t\tdescription[context] ?? \"This link type is not allowed by current configuration\";\n\t\treturn {\n\t\t\tdescription: message,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tif (!event.value || !this.isRelevant(event)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst link = event.value.toString();\n\t\t\tconst style = this.getStyle(link);\n\n\t\t\tswitch (style) {\n\t\t\t\tcase Style.ANCHOR:\n\t\t\t\t\t/* anchor links are always allowed by this rule */\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase Style.ABSOLUTE:\n\t\t\t\t\tthis.handleAbsolute(link, event, style);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase Style.EXTERNAL:\n\t\t\t\t\tthis.handleExternal(link, event, style);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase Style.RELATIVE_BASE:\n\t\t\t\t\tthis.handleRelativeBase(link, event, style);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase Style.RELATIVE_PATH:\n\t\t\t\t\tthis.handleRelativePath(link, event, style);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected isRelevant(event: AttributeEvent): boolean {\n\t\tconst { target, key, value } = event;\n\n\t\t/* don't check links with dynamic values */\n\t\tif (value instanceof DynamicValue) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst attr = mapping[target.tagName];\n\t\treturn Boolean(attr && attr === key);\n\t}\n\n\tprotected getStyle(value: string): Style {\n\t\t/* http://example.net or //example.net */\n\t\tif (value.match(/^([a-z]+:)?\\/\\//g)) {\n\t\t\treturn Style.EXTERNAL;\n\t\t}\n\t\tswitch (value[0]) {\n\t\t\t/* /foo/bar */\n\t\t\tcase \"/\":\n\t\t\t\treturn Style.ABSOLUTE;\n\t\t\t/* ../foo/bar */\n\t\t\tcase \".\":\n\t\t\t\treturn Style.RELATIVE_PATH;\n\t\t\t/* #foo */\n\t\t\tcase \"#\":\n\t\t\t\treturn Style.ANCHOR;\n\t\t\t/* foo/bar */\n\t\t\tdefault:\n\t\t\t\treturn Style.RELATIVE_BASE;\n\t\t}\n\t}\n\n\tprotected handleAbsolute(target: string, event: AttributeEvent, style: Style): void {\n\t\tconst { allowAbsolute } = this;\n\t\tif (allowAbsolute === true) {\n\t\t\treturn;\n\t\t} else if (allowAbsolute === false) {\n\t\t\tthis.report(\n\t\t\t\tevent.target,\n\t\t\t\t\"Link destination must not be absolute url\",\n\t\t\t\tevent.valueLocation,\n\t\t\t\tstyle,\n\t\t\t);\n\t\t} else if (!matchList(target, allowAbsolute)) {\n\t\t\tthis.report(\n\t\t\t\tevent.target,\n\t\t\t\t\"Absolute link to this destination is not allowed by current configuration\",\n\t\t\t\tevent.valueLocation,\n\t\t\t\tstyle,\n\t\t\t);\n\t\t}\n\t}\n\n\tprotected handleExternal(target: string, event: AttributeEvent, style: Style): void {\n\t\tconst { allowExternal } = this;\n\t\tif (allowExternal === true) {\n\t\t\treturn;\n\t\t} else if (allowExternal === false) {\n\t\t\tthis.report(\n\t\t\t\tevent.target,\n\t\t\t\t\"Link destination must not be external url\",\n\t\t\t\tevent.valueLocation,\n\t\t\t\tstyle,\n\t\t\t);\n\t\t} else if (!matchList(target, allowExternal)) {\n\t\t\tthis.report(\n\t\t\t\tevent.target,\n\t\t\t\t\"External link to this destination is not allowed by current configuration\",\n\t\t\t\tevent.valueLocation,\n\t\t\t\tstyle,\n\t\t\t);\n\t\t}\n\t}\n\n\tprotected handleRelativePath(target: string, event: AttributeEvent, style: Style): boolean {\n\t\tconst { allowRelative } = this;\n\t\tif (allowRelative === true) {\n\t\t\treturn false;\n\t\t} else if (allowRelative === false) {\n\t\t\tthis.report(\n\t\t\t\tevent.target,\n\t\t\t\t\"Link destination must not be relative url\",\n\t\t\t\tevent.valueLocation,\n\t\t\t\tstyle,\n\t\t\t);\n\t\t\treturn true;\n\t\t} else if (!matchList(target, allowRelative)) {\n\t\t\tthis.report(\n\t\t\t\tevent.target,\n\t\t\t\t\"Relative link to this destination is not allowed by current configuration\",\n\t\t\t\tevent.valueLocation,\n\t\t\t\tstyle,\n\t\t\t);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate handleRelativeBase(target: string, event: AttributeEvent, style: Style): void {\n\t\tconst { allowBase } = this.options;\n\t\tif (this.handleRelativePath(target, event, style)) {\n\t\t\treturn;\n\t\t} else if (!allowBase) {\n\t\t\tthis.report(\n\t\t\t\tevent.target,\n\t\t\t\t\"Relative links must be relative to current folder\",\n\t\t\t\tevent.valueLocation,\n\t\t\t\tstyle,\n\t\t\t);\n\t\t}\n\t}\n}\n","import { isDynamicAttribute, type HtmlElement } from \"../dom\";\nimport { type ElementReadyEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport enum RuleContext {\n\tMISSING_ALT = \"missing-alt\",\n\tMISSING_HREF = \"missing-href\",\n}\n\ninterface RuleOptions {\n\taccessible: boolean;\n}\n\nconst defaults: RuleOptions = {\n\taccessible: true,\n};\n\nfunction findByTarget(target: string | null, siblings: HtmlElement[]): HtmlElement[] {\n\treturn siblings.filter((it) => it.getAttributeValue(\"href\") === target);\n}\n\nfunction getAltText(node: HtmlElement): string | null {\n\treturn node.getAttributeValue(\"alt\");\n}\n\nfunction getDescription(context: RuleContext): string[] {\n\tswitch (context) {\n\t\tcase RuleContext.MISSING_ALT:\n\t\t\treturn [\n\t\t\t\t\"The `alt` attribute must be set (and not empty) when the `href` attribute is present on an `<area>` element.\",\n\t\t\t\t\"\",\n\t\t\t\t\"The attribute is used to provide an alternative text description for the area of the image map.\",\n\t\t\t\t\"The text should describe the purpose of area and the resource referenced by the `href` attribute.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Either add the `alt` attribute or remove the `href` attribute.\",\n\t\t\t];\n\t\tcase RuleContext.MISSING_HREF:\n\t\t\treturn [\n\t\t\t\t\"The `alt` attribute must not be set when the `href` attribute is missing on an `<area>` element.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Either add the `href` attribute or remove the `alt` attribute.\",\n\t\t\t];\n\t}\n}\n\nexport default class AreaAlt extends Rule<RuleContext, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\taccessible: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: getDescription(context).join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"element:ready\", this.isRelevant, (event: ElementReadyEvent) => {\n\t\t\tconst { target } = event;\n\t\t\tconst siblings = target.querySelectorAll(\"area\");\n\n\t\t\tfor (const child of siblings) {\n\t\t\t\tthis.validateArea(child, siblings);\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected validateArea(area: HtmlElement, siblings: HtmlElement[]): void {\n\t\tconst { accessible } = this.options;\n\t\tconst href = area.getAttribute(\"href\");\n\t\tconst alt = area.getAttribute(\"alt\");\n\t\tif (href) {\n\t\t\tif (isDynamicAttribute(alt)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst target = area.getAttributeValue(\"href\");\n\t\t\tconst altTexts = accessible\n\t\t\t\t? [getAltText(area)]\n\t\t\t\t: findByTarget(target, siblings).map(getAltText);\n\t\t\tif (!altTexts.some(Boolean)) {\n\t\t\t\tthis.report({\n\t\t\t\t\tnode: area,\n\t\t\t\t\tmessage: `\"alt\" attribute must be set and non-empty when the \"href\" attribute is present`,\n\t\t\t\t\tlocation: alt ? alt.keyLocation : href.keyLocation,\n\t\t\t\t\tcontext: RuleContext.MISSING_ALT,\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (alt) {\n\t\t\tthis.report({\n\t\t\t\tnode: area,\n\t\t\t\tmessage: `\"alt\" attribute cannot be used unless the \"href\" attribute is present`,\n\t\t\t\tlocation: alt.keyLocation,\n\t\t\t\tcontext: RuleContext.MISSING_HREF,\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected isRelevant(this: void, event: ElementReadyEvent): boolean {\n\t\tconst { target } = event;\n\t\treturn target.is(\"map\");\n\t}\n}\n","import { type TagReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class AriaHiddenBody extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"`aria-hidden` must not be used on the `<body>` element as it makes the page inaccessible to assistive technology such as screenreaders\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:ready\", this.isRelevant, (event: TagReadyEvent) => {\n\t\t\tconst { target } = event;\n\n\t\t\tconst attr = target.getAttribute(\"aria-hidden\");\n\t\t\tif (!attr?.valueMatches(\"true\", true)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.report(target, \"aria-hidden must not be used on <body>\", attr.keyLocation);\n\t\t});\n\t}\n\n\tprotected isRelevant(this: void, event: TagReadyEvent): boolean {\n\t\treturn event.target.is(\"body\");\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type MetaAttribute, type MetaElement } from \"../meta\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { ariaNaming } from \"./helper\";\n\nexport interface RuleOptions {\n\tallowAnyNamable: boolean;\n}\n\nconst defaults: RuleOptions = {\n\tallowAnyNamable: false,\n};\n\nconst whitelisted = [\n\t\"main\",\n\t\"nav\",\n\t\"table\",\n\t\"td\",\n\t\"th\",\n\t\"aside\",\n\t\"header\",\n\t\"footer\",\n\t\"section\",\n\t\"article\",\n\t\"form\",\n\t\"img\",\n\t\"area\",\n\t\"fieldset\",\n\t\"summary\",\n\t\"figure\",\n];\n\nfunction isValidUsage(target: HtmlElement, meta: MetaElement): boolean {\n\t/* elements with explicit aria-label attribute are valid */\n\tconst explicit = meta.attributes[\"aria-label\"] as MetaAttribute | undefined;\n\tif (explicit) {\n\t\treturn true;\n\t}\n\n\t/* landmark and other whitelisted elements are valid */\n\tif (whitelisted.includes(target.tagName)) {\n\t\treturn true;\n\t}\n\n\t/* elements with role are valid, @todo check if the role is widget or landmark */\n\tif (target.hasAttribute(\"role\")) {\n\t\treturn true;\n\t}\n\n\t/* elements with tabindex (implicit interactive) are valid */\n\tif (target.hasAttribute(\"tabindex\")) {\n\t\treturn true;\n\t}\n\n\t/* interactive and labelable elements are valid */\n\tif (Boolean(meta.interactive) || Boolean(meta.labelable)) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport default class AriaLabelMisuse extends Rule<void, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\tconst valid = [\n\t\t\t\"Interactive elements\",\n\t\t\t\"Labelable elements\",\n\t\t\t\"Landmark elements\",\n\t\t\t\"Elements with roles inheriting from widget\",\n\t\t\t\"`<area>`\",\n\t\t\t\"`<form>` and `<fieldset>`\",\n\t\t\t\"`<iframe>`\",\n\t\t\t\"`<img>` and `<figure>`\",\n\t\t\t\"`<summary>`\",\n\t\t\t\"`<table>`, `<td>` and `<th>`\",\n\t\t];\n\t\tconst lines = valid.map((it) => `- ${it}\\n`).join(\"\");\n\t\treturn {\n\t\t\tdescription: `\\`aria-label\\` can only be used on:\\n\\n${lines}`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tfor (const target of document.querySelectorAll(\"[aria-label]\")) {\n\t\t\t\tthis.validateElement(target);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate validateElement(target: HtmlElement): void {\n\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- the\n\t\t * earier [aria-label] selector ensures this is always present */\n\t\tconst attr = target.getAttribute(\"aria-label\")!;\n\t\tif (!attr.value || attr.valueMatches(\"\", false)) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* ignore elements without meta */\n\t\tconst meta = target.meta;\n\t\tif (!meta) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* ignore elements which is valid usage */\n\t\tif (isValidUsage(target, meta)) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* ignore elements where naming is allowed (but not recommended) if `allowAnyNamable` is enabled */\n\t\tif (this.options.allowAnyNamable && ariaNaming(target) === \"allowed\") {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.report(target, `\"aria-label\" cannot be used on this element`, attr.keyLocation);\n\t}\n}\n","import { UserError } from \"../error\";\n\n/**\n * @public\n */\nexport class ConfigError extends UserError {\n\tpublic constructor(message: string, nested?: Error) {\n\t\tsuper(message, nested);\n\t\tError.captureStackTrace(this, ConfigError);\n\t\tthis.name = ConfigError.name;\n\t}\n}\n","import { ConfigError } from \"../../config/error\";\n\nexport type CaseStyleName = \"lowercase\" | \"uppercase\" | \"pascalcase\" | \"camelcase\";\n\ninterface Style {\n\tpattern: RegExp;\n\tname: string;\n}\n\n/**\n * Represents casing for a name, e.g. lowercase, uppercase, etc.\n */\nexport class CaseStyle {\n\tprivate styles: Style[];\n\n\t/**\n\t * @param style - Name of a valid case style.\n\t */\n\tpublic constructor(style: CaseStyleName | CaseStyleName[], ruleId: string) {\n\t\tif (!Array.isArray(style)) {\n\t\t\tstyle = [style];\n\t\t}\n\t\tif (style.length === 0) {\n\t\t\tthrow new ConfigError(`Missing style for ${ruleId} rule`);\n\t\t}\n\t\tthis.styles = this.parseStyle(style, ruleId);\n\t}\n\n\t/**\n\t * Test if a text matches this case style.\n\t */\n\tpublic match(text: string): boolean {\n\t\treturn this.styles.some((style) => text.match(style.pattern));\n\t}\n\n\tpublic get name(): string {\n\t\tconst names = this.styles.map((style) => style.name);\n\t\tswitch (this.styles.length) {\n\t\t\tcase 1:\n\t\t\t\treturn names[0];\n\t\t\tcase 2:\n\t\t\t\treturn names.join(\" or \");\n\t\t\tdefault: {\n\t\t\t\tconst last = names.slice(-1);\n\t\t\t\tconst rest = names.slice(0, -1);\n\t\t\t\treturn `${rest.join(\", \")} or ${last[0]}`;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate parseStyle(style: CaseStyleName[], ruleId: string): Style[] {\n\t\treturn style.map((cur: string): Style => {\n\t\t\tswitch (cur.toLowerCase()) {\n\t\t\t\tcase \"lowercase\":\n\t\t\t\t\treturn { pattern: /^[a-z]*$/, name: \"lowercase\" };\n\t\t\t\tcase \"uppercase\":\n\t\t\t\t\treturn { pattern: /^[A-Z]*$/, name: \"uppercase\" };\n\t\t\t\tcase \"pascalcase\":\n\t\t\t\t\treturn { pattern: /^[A-Z][A-Za-z]*$/, name: \"PascalCase\" };\n\t\t\t\tcase \"camelcase\":\n\t\t\t\t\treturn { pattern: /^[a-z][A-Za-z]*$/, name: \"camelCase\" };\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new ConfigError(`Invalid style \"${cur}\" for ${ruleId} rule`);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type SchemaObject, type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { type CaseStyleName, CaseStyle } from \"./helper/case-style\";\n\ninterface RuleOptions {\n\tstyle: CaseStyleName | CaseStyleName[];\n\tignoreForeign: boolean;\n}\n\nconst defaults: RuleOptions = {\n\tstyle: \"lowercase\",\n\tignoreForeign: true,\n};\n\nexport default class AttrCase extends Rule<void, RuleOptions> {\n\tprivate style: CaseStyle;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.style = new CaseStyle(this.options.style, \"attr-case\");\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\tconst styleEnum = [\"lowercase\", \"uppercase\", \"pascalcase\", \"camelcase\"];\n\t\treturn {\n\t\t\tignoreForeign: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t\tstyle: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\tenum: styleEnum,\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\tenum: styleEnum,\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\tconst { style } = this.options;\n\t\treturn {\n\t\t\tdescription: Array.isArray(style)\n\t\t\t\t? [`Attribute name must be in one of:`, \"\", ...style.map((it) => `- ${it}`)].join(\"\\n\")\n\t\t\t\t: `Attribute name must be in ${style}.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tif (this.isIgnored(event.target)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore case for dynamic attributes, the original attributes will be\n\t\t\t * checked instead (this prevents duplicated errors for the same source\n\t\t\t * attribute) */\n\t\t\tif (event.originalAttribute) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst letters = event.key.replace(/[^a-z]+/gi, \"\");\n\t\t\tif (this.style.match(letters)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.report({\n\t\t\t\tnode: event.target,\n\t\t\t\tmessage: `Attribute \"${event.key}\" should be ${this.style.name}`,\n\t\t\t\tlocation: event.keyLocation,\n\t\t\t});\n\t\t});\n\t}\n\n\tprotected isIgnored(node: HtmlElement): boolean {\n\t\tif (this.options.ignoreForeign) {\n\t\t\treturn Boolean(node.meta?.foreign);\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n}\n","import { type Location } from \"../context\";\n\n/**\n * @internal\n */\nexport enum TokenType {\n\tUNICODE_BOM = 1,\n\tWHITESPACE,\n\tDOCTYPE_OPEN,\n\tDOCTYPE_VALUE,\n\tDOCTYPE_CLOSE,\n\tTAG_OPEN,\n\tTAG_CLOSE,\n\tATTR_NAME,\n\tATTR_VALUE,\n\tTEXT,\n\tTEMPLATING,\n\tSCRIPT,\n\tSTYLE,\n\tCOMMENT,\n\tCONDITIONAL,\n\tDIRECTIVE,\n\tEOF,\n}\n\n/**\n * @internal\n */\nexport interface BaseToken {\n\ttype: TokenType;\n\tlocation: Location;\n}\n\n/**\n * @internal\n */\nexport interface UnicodeBOMToken extends BaseToken {\n\ttype: TokenType.UNICODE_BOM;\n\tdata: [bom: string];\n}\n\n/**\n * @internal\n */\nexport interface WhitespaceToken extends BaseToken {\n\ttype: TokenType.WHITESPACE;\n\tdata: [text: string];\n}\n\n/**\n * @internal\n */\nexport interface DoctypeOpenToken extends BaseToken {\n\ttype: TokenType.DOCTYPE_OPEN;\n\tdata: [text: string, tag: string];\n}\n\n/**\n * @internal\n */\nexport interface DoctypeValueToken extends BaseToken {\n\ttype: TokenType.DOCTYPE_VALUE;\n\tdata: [text: string];\n}\n\n/**\n * @internal\n */\nexport interface DoctypeCloseToken extends BaseToken {\n\ttype: TokenType.DOCTYPE_CLOSE;\n\tdata: [text: \">\"];\n}\n\n/**\n * @internal\n */\nexport interface TagOpenToken extends BaseToken {\n\ttype: TokenType.TAG_OPEN;\n\tdata: [text: string, close: \"/\" | \"\", tag: string];\n}\n\n/**\n * @internal\n */\nexport interface TagCloseToken extends BaseToken {\n\ttype: TokenType.TAG_CLOSE;\n\tdata: [text: \">\" | \"/>\"];\n}\n\n/**\n * @internal\n */\nexport interface AttrNameToken extends BaseToken {\n\ttype: TokenType.ATTR_NAME;\n\tdata: [text: string, name: string];\n}\n\n/**\n * @internal\n */\nexport interface AttrValueToken extends BaseToken {\n\ttype: TokenType.ATTR_VALUE;\n\tdata: [text: string, delimiter: string, value: string, quote?: '\"' | \"'\"];\n}\n\n/**\n * @internal\n */\nexport interface TextToken extends BaseToken {\n\ttype: TokenType.TEXT;\n\tdata: [text: string];\n}\n\n/**\n * @internal\n */\nexport interface TemplatingToken extends BaseToken {\n\ttype: TokenType.TEMPLATING;\n\tdata: [text: string];\n}\n\n/**\n * @internal\n */\nexport interface ScriptToken extends BaseToken {\n\ttype: TokenType.SCRIPT;\n\tdata: [text: string];\n}\n\n/**\n * @internal\n */\nexport interface StyleToken extends BaseToken {\n\ttype: TokenType.STYLE;\n\tdata: [text: string];\n}\n\n/**\n * @internal\n */\nexport interface CommentToken extends BaseToken {\n\ttype: TokenType.COMMENT;\n\tdata: [text: string, comment: string];\n}\n\n/**\n * @internal\n */\nexport interface ConditionalToken extends BaseToken {\n\ttype: TokenType.CONDITIONAL;\n\tdata: [text: string, condition: string];\n}\n\n/**\n * @internal\n */\nexport interface DirectiveToken extends BaseToken {\n\ttype: TokenType.DIRECTIVE;\n\tdata: [text: string, begin: \"[\", action: string, delimiter: string, rest: string, end: \"]\" | \"\"];\n}\n\n/**\n * @internal\n */\nexport interface EOFToken extends BaseToken {\n\ttype: TokenType.EOF;\n\tdata: [];\n}\n\n/**\n * @internal\n */\nexport type Token =\n\t| UnicodeBOMToken\n\t| WhitespaceToken\n\t| DoctypeOpenToken\n\t| DoctypeValueToken\n\t| DoctypeCloseToken\n\t| TagOpenToken\n\t| TagCloseToken\n\t| AttrNameToken\n\t| AttrValueToken\n\t| TextToken\n\t| TemplatingToken\n\t| ScriptToken\n\t| StyleToken\n\t| CommentToken\n\t| ConditionalToken\n\t| DirectiveToken\n\t| EOFToken;\n","import { type Location, type Source, ContentModel, Context, State } from \"../context\";\nimport { type TagCloseToken, type Token, TokenType } from \"./token\";\n\ntype NextStateCallback = (token: Token | null) => State;\ntype LexerTest = [RegExp | false, State | NextStateCallback, TokenType | false];\n\n/**\n * @internal\n */\nexport type TokenStream = IterableIterator<Token>;\n\n/* eslint-disable no-useless-escape -- false positives */\nconst MATCH_UNICODE_BOM = /^\\uFEFF/;\nconst MATCH_WHITESPACE = /^(?:\\r\\n|\\r|\\n|[ \\t]+(?:\\r\\n|\\r|\\n)?)/;\nconst MATCH_DOCTYPE_OPEN = /^<!(DOCTYPE)\\s/i;\nconst MATCH_DOCTYPE_VALUE = /^[^>]+/;\nconst MATCH_DOCTYPE_CLOSE = /^>/;\nconst MATCH_XML_TAG = /^<\\?xml.*?\\?>\\s+/;\nconst MATCH_TAG_OPEN = /^<(\\/?)([a-zA-Z0-9\\-:]+)/; // https://www.w3.org/TR/html/syntax.html#start-tags\nconst MATCH_TAG_CLOSE = /^\\/?>/;\nconst MATCH_TEXT = /^[^]*?(?=(?:[ \\t]*(?:\\r\\n|\\r|\\n)|<[^ ]|$))/;\nconst MATCH_TEMPLATING = /^(?:<%.*?%>|<\\?.*?\\?>|<\\$.*?\\$>)/s;\nconst MATCH_TAG_LOOKAHEAD = /^[^]*?(?=<|$)/;\nconst MATCH_ATTR_START = /^([^\\t\\r\\n\\f \\/><\"'=]+)/; // https://www.w3.org/TR/html/syntax.html#elements-attributes\nconst MATCH_ATTR_SINGLE = /^(\\s*=\\s*)'([^']*?)(')/;\nconst MATCH_ATTR_DOUBLE = /^(\\s*=\\s*)\"([^\"]*?)(\")/;\nconst MATCH_ATTR_UNQUOTED = /^(\\s*=\\s*)([^\\t\\r\\n\\f \"'<>][^\\t\\r\\n\\f <>]*)/;\nconst MATCH_CDATA_BEGIN = /^<!\\[CDATA\\[/;\nconst MATCH_CDATA_END = /^[^]*?]]>/;\nconst MATCH_SCRIPT_DATA = /^[^]*?(?=<\\/script)/;\nconst MATCH_SCRIPT_END = /^<(\\/)(script)/;\nconst MATCH_STYLE_DATA = /^[^]*?(?=<\\/style)/;\nconst MATCH_STYLE_END = /^<(\\/)(style)/;\nconst MATCH_DIRECTIVE = /^(<!--\\s*\\[html-validate-)([a-z0-9-]+)(\\s*)(.*?)(]?\\s*-->)/;\nconst MATCH_COMMENT = /^<!--([^]*?)-->/;\nconst MATCH_CONDITIONAL = /^<!\\[([^\\]]*?)\\]>/;\n/* eslint-enable no-useless-escape */\n\nexport class InvalidTokenError extends Error {\n\tpublic location: Location;\n\n\tpublic constructor(location: Location, message: string) {\n\t\tsuper(message);\n\t\tthis.location = location;\n\t}\n}\n\nexport class Lexer {\n\t/* eslint-disable-next-line complexity -- there isn't really a good way to refactor this while keeping readability */\n\tpublic *tokenize(source: Source): TokenStream {\n\t\tconst context = new Context(source);\n\n\t\t/* for sanity check */\n\t\tlet previousState: State = context.state;\n\t\tlet previousLength: number = context.string.length;\n\n\t\twhile (context.string.length > 0) {\n\t\t\tswitch (context.state) {\n\t\t\t\tcase State.INITIAL:\n\t\t\t\t\tyield* this.tokenizeInitial(context);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase State.DOCTYPE:\n\t\t\t\t\tyield* this.tokenizeDoctype(context);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase State.TAG:\n\t\t\t\t\tyield* this.tokenizeTag(context);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase State.ATTR:\n\t\t\t\t\tyield* this.tokenizeAttr(context);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase State.TEXT:\n\t\t\t\t\tyield* this.tokenizeText(context);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase State.CDATA:\n\t\t\t\t\tyield* this.tokenizeCDATA(context);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase State.SCRIPT:\n\t\t\t\t\tyield* this.tokenizeScript(context);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase State.STYLE:\n\t\t\t\t\tyield* this.tokenizeStyle(context);\n\t\t\t\t\tbreak;\n\n\t\t\t\t/* istanbul ignore next: sanity check: should not happen unless adding new states */\n\t\t\t\tdefault:\n\t\t\t\t\tthis.unhandled(context);\n\t\t\t}\n\n\t\t\t/* sanity check: state or string must change, if both are intact\n\t\t\t * we are stuck in an endless loop. */\n\t\t\t/* istanbul ignore next: no easy way to test this as it is a condition which should never happen */\n\t\t\tif (context.state === previousState && context.string.length === previousLength) {\n\t\t\t\tthis.errorStuck(context);\n\t\t\t}\n\n\t\t\tpreviousState = context.state;\n\t\t\tpreviousLength = context.string.length;\n\t\t}\n\n\t\tyield this.token(context, TokenType.EOF, []);\n\t}\n\n\tprivate token(context: Context, type: TokenType, data: string[]): Token {\n\t\tconst size = data.length > 0 ? data[0].length : 0;\n\t\tconst location = context.getLocation(size);\n\t\treturn {\n\t\t\ttype,\n\t\t\tlocation,\n\t\t\tdata: Array.from(data),\n\t\t} as Token;\n\t}\n\n\t/* istanbul ignore next: used to provide a better error when an unhandled state happens */\n\tprivate unhandled(context: Context): void {\n\t\tconst truncated = JSON.stringify(\n\t\t\tcontext.string.length > 13 ? `${context.string.slice(0, 15)}...` : context.string,\n\t\t);\n\t\tconst state = State[context.state];\n\t\tconst message = `failed to tokenize ${truncated}, unhandled state ${state}.`;\n\t\tthrow new InvalidTokenError(context.getLocation(1), message);\n\t}\n\n\t/* istanbul ignore next: used to provide a better error when lexer is detected to be stuck, no known way to reproduce */\n\tprivate errorStuck(context: Context): void {\n\t\tconst state = State[context.state];\n\t\tconst message = `failed to tokenize ${context.getTruncatedLine()}, state ${state} failed to consume data or change state.`;\n\t\tthrow new InvalidTokenError(context.getLocation(1), message);\n\t}\n\n\tprivate evalNextState(\n\t\tnextState: State | ((token: Token | null) => State),\n\t\ttoken: Token | null,\n\t): State {\n\t\tif (typeof nextState === \"function\") {\n\t\t\treturn nextState(token);\n\t\t} else {\n\t\t\treturn nextState;\n\t\t}\n\t}\n\n\tprivate *match(context: Context, tests: LexerTest[], error: string): Iterable<Token> {\n\t\tconst n = tests.length;\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst [regex, nextState, tokenType] = tests[i];\n\n\t\t\tconst match: string[] | null = regex ? context.string.match(regex) : [\"\"];\n\t\t\tif (match) {\n\t\t\t\tlet token: Token | null = null;\n\t\t\t\tif (tokenType !== false) {\n\t\t\t\t\ttoken = this.token(context, tokenType, match);\n\t\t\t\t\tyield token;\n\t\t\t\t}\n\t\t\t\tconst state = this.evalNextState(nextState, token);\n\t\t\t\tcontext.consume(match, state);\n\t\t\t\tthis.enter(context, state, match);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst message = `failed to tokenize ${context.getTruncatedLine()}, ${error}.`;\n\t\tthrow new InvalidTokenError(context.getLocation(1), message);\n\t}\n\n\t/**\n\t * Called when entering a new state.\n\t */\n\tprivate enter(context: Context, state: State, data: string[] | null): void {\n\t\t/* script/style tags require a different content model */\n\t\tif (state === State.TAG && data?.[0].startsWith(\"<\")) {\n\t\t\tif (data[0] === \"<script\") {\n\t\t\t\tcontext.contentModel = ContentModel.SCRIPT;\n\t\t\t} else if (data[0] === \"<style\") {\n\t\t\t\tcontext.contentModel = ContentModel.STYLE;\n\t\t\t} else {\n\t\t\t\tcontext.contentModel = ContentModel.TEXT;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate *tokenizeInitial(context: Context): Iterable<Token> {\n\t\tyield* this.match(\n\t\t\tcontext,\n\t\t\t[\n\t\t\t\t[MATCH_UNICODE_BOM, State.INITIAL, TokenType.UNICODE_BOM],\n\t\t\t\t[MATCH_XML_TAG, State.INITIAL, false],\n\t\t\t\t[MATCH_DOCTYPE_OPEN, State.DOCTYPE, TokenType.DOCTYPE_OPEN],\n\t\t\t\t[MATCH_WHITESPACE, State.INITIAL, TokenType.WHITESPACE],\n\t\t\t\t[MATCH_DIRECTIVE, State.INITIAL, TokenType.DIRECTIVE],\n\t\t\t\t[MATCH_CONDITIONAL, State.INITIAL, TokenType.CONDITIONAL],\n\t\t\t\t[MATCH_COMMENT, State.INITIAL, TokenType.COMMENT],\n\t\t\t\t[false, State.TEXT, false],\n\t\t\t],\n\t\t\t\"expected doctype\",\n\t\t);\n\t}\n\n\tprivate *tokenizeDoctype(context: Context): Iterable<Token> {\n\t\tyield* this.match(\n\t\t\tcontext,\n\t\t\t[\n\t\t\t\t[MATCH_WHITESPACE, State.DOCTYPE, TokenType.WHITESPACE],\n\t\t\t\t[MATCH_DOCTYPE_VALUE, State.DOCTYPE, TokenType.DOCTYPE_VALUE],\n\t\t\t\t[MATCH_DOCTYPE_CLOSE, State.TEXT, TokenType.DOCTYPE_CLOSE],\n\t\t\t],\n\t\t\t\"expected doctype name\",\n\t\t);\n\t}\n\n\tprivate *tokenizeTag(context: Context): Iterable<Token> {\n\t\tfunction nextState(token: Token | null): State {\n\t\t\tconst tagCloseToken = token as TagCloseToken | null;\n\t\t\tswitch (context.contentModel) {\n\t\t\t\tcase ContentModel.TEXT:\n\t\t\t\t\treturn State.TEXT;\n\t\t\t\tcase ContentModel.SCRIPT:\n\t\t\t\t\tif (tagCloseToken && !tagCloseToken.data[0].startsWith(\"/\")) {\n\t\t\t\t\t\treturn State.SCRIPT;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn State.TEXT; /* <script/> (not legal but handle it anyway so the lexer doesn't choke on it) */\n\t\t\t\t\t}\n\t\t\t\tcase ContentModel.STYLE:\n\t\t\t\t\tif (tagCloseToken && !tagCloseToken.data[0].startsWith(\"/\")) {\n\t\t\t\t\t\treturn State.STYLE;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn State.TEXT; /* <style/> */\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tyield* this.match(\n\t\t\tcontext,\n\t\t\t[\n\t\t\t\t[MATCH_TAG_CLOSE, nextState, TokenType.TAG_CLOSE],\n\t\t\t\t[MATCH_ATTR_START, State.ATTR, TokenType.ATTR_NAME],\n\t\t\t\t[MATCH_WHITESPACE, State.TAG, TokenType.WHITESPACE],\n\t\t\t],\n\t\t\t'expected attribute, \">\" or \"/>\"',\n\t\t);\n\t}\n\n\tprivate *tokenizeAttr(context: Context): Iterable<Token> {\n\t\tyield* this.match(\n\t\t\tcontext,\n\t\t\t[\n\t\t\t\t[MATCH_ATTR_SINGLE, State.TAG, TokenType.ATTR_VALUE],\n\t\t\t\t[MATCH_ATTR_DOUBLE, State.TAG, TokenType.ATTR_VALUE],\n\t\t\t\t[MATCH_ATTR_UNQUOTED, State.TAG, TokenType.ATTR_VALUE],\n\t\t\t\t[false, State.TAG, false],\n\t\t\t],\n\t\t\t'expected attribute, \">\" or \"/>\"',\n\t\t);\n\t}\n\n\tprivate *tokenizeText(context: Context): Iterable<Token> {\n\t\tyield* this.match(\n\t\t\tcontext,\n\t\t\t[\n\t\t\t\t[MATCH_WHITESPACE, State.TEXT, TokenType.WHITESPACE],\n\t\t\t\t[MATCH_CDATA_BEGIN, State.CDATA, false],\n\t\t\t\t[MATCH_DIRECTIVE, State.TEXT, TokenType.DIRECTIVE],\n\t\t\t\t[MATCH_CONDITIONAL, State.TEXT, TokenType.CONDITIONAL],\n\t\t\t\t[MATCH_COMMENT, State.TEXT, TokenType.COMMENT],\n\t\t\t\t[MATCH_TEMPLATING, State.TEXT, TokenType.TEMPLATING],\n\t\t\t\t[MATCH_TAG_OPEN, State.TAG, TokenType.TAG_OPEN],\n\t\t\t\t[MATCH_TEXT, State.TEXT, TokenType.TEXT],\n\t\t\t\t[MATCH_TAG_LOOKAHEAD, State.TEXT, TokenType.TEXT],\n\t\t\t],\n\t\t\t'expected text or \"<\"',\n\t\t);\n\t}\n\n\tprivate *tokenizeCDATA(context: Context): Iterable<Token> {\n\t\tyield* this.match(context, [[MATCH_CDATA_END, State.TEXT, false]], \"expected ]]>\");\n\t}\n\n\tprivate *tokenizeScript(context: Context): Iterable<Token> {\n\t\tyield* this.match(\n\t\t\tcontext,\n\t\t\t[\n\t\t\t\t[MATCH_SCRIPT_END, State.TAG, TokenType.TAG_OPEN],\n\t\t\t\t[MATCH_SCRIPT_DATA, State.SCRIPT, TokenType.SCRIPT],\n\t\t\t],\n\t\t\t\"expected </script>\",\n\t\t);\n\t}\n\n\tprivate *tokenizeStyle(context: Context): Iterable<Token> {\n\t\tyield* this.match(\n\t\t\tcontext,\n\t\t\t[\n\t\t\t\t[MATCH_STYLE_END, State.TAG, TokenType.TAG_OPEN],\n\t\t\t\t[MATCH_STYLE_DATA, State.STYLE, TokenType.STYLE],\n\t\t\t],\n\t\t\t\"expected </style>\",\n\t\t);\n\t}\n}\n","import { sliceLocation } from \"../context\";\nimport { type TokenEvent } from \"../event\";\nimport { TokenType } from \"../lexer\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nconst whitespace = /(\\s+)/;\n\nexport default class AttrDelimiter extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `Attribute value must not be separated by whitespace.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"token\", (event: TokenEvent) => {\n\t\t\tconst { token } = event;\n\t\t\tif (token.type !== TokenType.ATTR_VALUE) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst delimiter = token.data[1];\n\t\t\tconst match = whitespace.exec(delimiter);\n\t\t\tif (match) {\n\t\t\t\tconst location = sliceLocation(event.location, 0, delimiter.length);\n\t\t\t\tthis.report(null, \"Attribute value must not be delimited by whitespace\", location);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleOptions {\n\tpattern: string | string[];\n\tignoreForeign: boolean;\n}\n\ninterface RuleContext {\n\tattr: string;\n\tpattern: string | string[];\n}\n\nexport const DEFAULT_PATTERN = \"[a-z0-9-:]+\";\n\nconst defaults: RuleOptions = {\n\tpattern: DEFAULT_PATTERN,\n\tignoreForeign: true,\n};\n\nfunction generateRegexp(pattern: string | string[]): RegExp {\n\tif (Array.isArray(pattern)) {\n\t\t/* eslint-disable-next-line security/detect-non-literal-regexp -- expected to be regexp */\n\t\treturn new RegExp(`^(${pattern.join(\"|\")})$`, \"i\");\n\t} else {\n\t\t/* eslint-disable-next-line security/detect-non-literal-regexp -- expected to be regexp */\n\t\treturn new RegExp(`^${pattern}$`, \"i\");\n\t}\n}\n\nfunction generateMessage(name: string, pattern: string | string[]): string {\n\tif (Array.isArray(pattern)) {\n\t\tconst patterns = pattern.map((it) => `/${it}/`).join(\", \");\n\t\treturn `Attribute \"${name}\" should match one of [${patterns}]`;\n\t} else {\n\t\treturn `Attribute \"${name}\" should match /${pattern}/`;\n\t}\n}\n\nfunction generateDescription(name: string, pattern: string | string[]): string {\n\tif (Array.isArray(pattern)) {\n\t\treturn [\n\t\t\t`Attribute \"${name}\" should match one of the configured regular expressions:`,\n\t\t\t\"\",\n\t\t\t...pattern.map((it) => `- \\`/${it}/\\``),\n\t\t].join(\"\\n\");\n\t} else {\n\t\treturn `Attribute \"${name}\" should match the regular expression \\`/${pattern}/\\``;\n\t}\n}\n\nexport default class AttrPattern extends Rule<RuleContext, RuleOptions> {\n\tprivate pattern: RegExp;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.pattern = generateRegexp(this.options.pattern);\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tpattern: {\n\t\t\t\toneOf: [{ type: \"array\", items: { type: \"string\" }, minItems: 1 }, { type: \"string\" }],\n\t\t\t},\n\t\t\tignoreForeign: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: generateDescription(context.attr, context.pattern),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tif (this.isIgnored(event.target)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore case for dynamic attributes, the original attributes will be\n\t\t\t * checked instead (this prevents duplicated errors for the same source\n\t\t\t * attribute) */\n\t\t\tif (event.originalAttribute) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.pattern.test(event.key)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst message = generateMessage(event.key, this.options.pattern);\n\t\t\tconst context: RuleContext = {\n\t\t\t\tattr: event.key,\n\t\t\t\tpattern: this.options.pattern,\n\t\t\t};\n\t\t\tthis.report(event.target, message, event.keyLocation, context);\n\t\t});\n\t}\n\n\tprotected isIgnored(node: HtmlElement): boolean {\n\t\tif (this.options.ignoreForeign) {\n\t\t\treturn Boolean(node.meta?.foreign);\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n}\n","import { ConfigError } from \"../config/error\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ntype QuoteMark = '\"' | \"'\";\nenum QuoteStyle {\n\tSINGLE_QUOTE = \"'\",\n\tDOUBLE_QUOTE = '\"',\n\tAUTO_QUOTE = \"auto\",\n\tANY_QUOTE = \"any\",\n}\n\nexport interface RuleStyleContext {\n\terror: \"style\";\n\tattr: string;\n\texpected: string;\n\tactual: string;\n}\n\nexport interface RuleUnquotedContext {\n\terror: \"unquoted\";\n\tattr: string;\n}\n\ntype RuleContext = RuleStyleContext | RuleUnquotedContext;\n\ninterface RuleOptions {\n\tstyle: \"auto\" | \"single\" | \"double\" | \"any\";\n\tunquoted: boolean;\n}\n\nconst defaults: RuleOptions = {\n\tstyle: \"auto\",\n\tunquoted: false,\n};\n\nfunction describeError(context: RuleContext): string {\n\tswitch (context.error) {\n\t\tcase \"style\":\n\t\t\treturn `Attribute \\`${context.attr}\\` must use \\`${context.expected}\\` instead of \\`${context.actual}\\`.`;\n\t\tcase \"unquoted\":\n\t\t\treturn `Attribute \\`${context.attr}\\` must not be unquoted.`;\n\t}\n}\n\nfunction describeStyle(style: QuoteStyle, unquoted: boolean): string {\n\tconst description: string[] = [];\n\tswitch (style) {\n\t\tcase QuoteStyle.AUTO_QUOTE:\n\t\t\tdescription.push(\n\t\t\t\t\"- quoted with double quotes `\\\"` unless the value contains double quotes in which case single quotes `'` should be used instead\",\n\t\t\t);\n\t\t\tbreak;\n\t\tcase QuoteStyle.ANY_QUOTE:\n\t\t\tdescription.push(\"- quoted with single quotes `'`\");\n\t\t\tdescription.push('- quoted with double quotes `\"`');\n\t\t\tbreak;\n\t\tcase QuoteStyle.SINGLE_QUOTE:\n\t\tcase QuoteStyle.DOUBLE_QUOTE: {\n\t\t\tconst name = style === QuoteStyle.SINGLE_QUOTE ? \"single\" : \"double\";\n\t\t\tdescription.push(`- quoted with ${name} quotes \\`${style}\\``);\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (unquoted) {\n\t\tdescription.push(\"- unquoted (if applicable)\");\n\t}\n\treturn `${description.join(\" or\\n\")}\\n`;\n}\n\nexport default class AttrQuotes extends Rule<RuleContext, RuleOptions> {\n\tprivate style: QuoteStyle;\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tstyle: {\n\t\t\t\tenum: [\"auto\", \"double\", \"single\", \"any\"],\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t\tunquoted: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\tconst { style } = this;\n\t\tconst { unquoted } = this.options;\n\t\tconst description = [\n\t\t\tdescribeError(context),\n\t\t\t\"\",\n\t\t\t\"Under the current configuration attributes must be:\",\n\t\t\t\"\",\n\t\t\tdescribeStyle(style, unquoted),\n\t\t];\n\t\treturn {\n\t\t\tdescription: description.join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.style = parseStyle(this.options.style);\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\t/* ignore attributes with no value */\n\t\t\tif (event.value === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!event.quote) {\n\t\t\t\tif (!this.options.unquoted) {\n\t\t\t\t\tconst message = `Attribute \"${event.key}\" using unquoted value`;\n\t\t\t\t\tconst context: RuleUnquotedContext = {\n\t\t\t\t\t\terror: \"unquoted\",\n\t\t\t\t\t\tattr: event.key,\n\t\t\t\t\t};\n\t\t\t\t\tthis.report(event.target, message, null, context);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* if the style is set to any we skip the rest of the rule as the only\n\t\t\t * thing that matters is if the \"unquoted\" options triggers an error or\n\t\t\t * not */\n\t\t\tif (this.style === QuoteStyle.ANY_QUOTE) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst expected = this.resolveQuotemark(event.value.toString(), this.style);\n\n\t\t\tif (event.quote !== expected) {\n\t\t\t\tconst message = `Attribute \"${event.key}\" used ${event.quote} instead of expected ${expected}`;\n\t\t\t\tconst context: RuleStyleContext = {\n\t\t\t\t\terror: \"style\",\n\t\t\t\t\tattr: event.key,\n\t\t\t\t\tactual: event.quote,\n\t\t\t\t\texpected,\n\t\t\t\t};\n\t\t\t\tthis.report(event.target, message, null, context);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate resolveQuotemark(\n\t\tvalue: string,\n\t\tstyle: Exclude<QuoteStyle, QuoteStyle.ANY_QUOTE>,\n\t): QuoteMark {\n\t\tif (style === QuoteStyle.AUTO_QUOTE) {\n\t\t\treturn value.includes('\"') ? \"'\" : '\"';\n\t\t} else {\n\t\t\treturn style;\n\t\t}\n\t}\n}\n\nfunction parseStyle(style: string): QuoteStyle {\n\tswitch (style.toLowerCase()) {\n\t\tcase \"auto\":\n\t\t\treturn QuoteStyle.AUTO_QUOTE;\n\t\tcase \"double\":\n\t\t\treturn QuoteStyle.DOUBLE_QUOTE;\n\t\tcase \"single\":\n\t\t\treturn QuoteStyle.SINGLE_QUOTE;\n\t\tcase \"any\":\n\t\t\treturn QuoteStyle.ANY_QUOTE;\n\t\t/* istanbul ignore next: covered by schema validation */\n\t\tdefault:\n\t\t\tthrow new ConfigError(`Invalid style \"${style}\" for \"attr-quotes\" rule`);\n\t}\n}\n","import { type TokenEvent } from \"../event\";\nimport { TokenType } from \"../lexer\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class AttrSpacing extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `No space between attributes. At least one whitespace character (commonly space) must be used to separate attributes.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tlet previousToken: TokenType;\n\t\tthis.on(\"token\", (event: TokenEvent) => {\n\t\t\tif (event.type === TokenType.ATTR_NAME && previousToken !== TokenType.WHITESPACE) {\n\t\t\t\tthis.report(null, \"No space between attributes\", event.location);\n\t\t\t}\n\t\t\tpreviousToken = event.type;\n\t\t});\n\t}\n}\n","import { type Location } from \"../context\";\nimport { type HtmlElement, type Attribute } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type MetaAttribute, Validator } from \"../meta\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { walk } from \"../utils\";\n\ninterface Context {\n\telement: string;\n\tattribute: string;\n\tvalue: string;\n\tallowed: Pick<MetaAttribute, \"enum\" | \"boolean\">;\n}\n\nfunction pick(attr: MetaAttribute): Pick<MetaAttribute, \"enum\" | \"boolean\"> {\n\tconst result: Pick<MetaAttribute, \"enum\" | \"boolean\"> = {};\n\tif (typeof attr.enum !== \"undefined\") {\n\t\tresult.enum = attr.enum;\n\t}\n\tif (typeof attr.boolean !== \"undefined\") {\n\t\tresult.boolean = attr.boolean;\n\t}\n\treturn result;\n}\n\nexport default class AttributeAllowedValues extends Rule<Context> {\n\tpublic documentation(context?: Context): RuleDocumentation {\n\t\tconst docs: RuleDocumentation = {\n\t\t\tdescription: \"Attribute has invalid value.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t\tif (!context) {\n\t\t\treturn docs;\n\t\t}\n\n\t\tconst { allowed, attribute, element, value } = context;\n\t\tif (allowed.enum) {\n\t\t\tconst allowedList = allowed.enum.map((value: string | RegExp) => {\n\t\t\t\tif (typeof value === \"string\") {\n\t\t\t\t\treturn `- \\`\"${value}\"\\``;\n\t\t\t\t} else {\n\t\t\t\t\treturn `- \\`${value.toString()}\\``;\n\t\t\t\t}\n\t\t\t});\n\t\t\tdocs.description = [\n\t\t\t\t`The \\`<${element}>\\` element does not allow the attribute \\`${attribute}\\` to have the value \\`\"${value}\"\\`.`,\n\t\t\t\t\"\",\n\t\t\t\t\"It must match one of the following:\",\n\t\t\t\t\"\",\n\t\t\t\t...allowedList,\n\t\t\t].join(\"\\n\");\n\t\t} else if (allowed.boolean) {\n\t\t\tdocs.description = `The \\`<${context.element}>\\` attribute \\`${context.attribute}\\` must be a boolean attribute, e.g. \\`<${context.element} ${context.attribute}>\\``;\n\t\t}\n\n\t\treturn docs;\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\tconst meta = node.meta;\n\n\t\t\t\t/* ignore rule if element has no meta or meta does not specify attribute\n\t\t\t\t * allowed values */\n\t\t\t\tif (!meta?.attributes) return;\n\n\t\t\t\tfor (const attr of node.attributes) {\n\t\t\t\t\tif (Validator.validateAttribute(attr, meta.attributes)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst value = attr.value ? attr.value.toString() : \"\";\n\t\t\t\t\tconst context: Context = {\n\t\t\t\t\t\telement: node.tagName,\n\t\t\t\t\t\tattribute: attr.key,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tallowed: pick(meta.attributes[attr.key]),\n\t\t\t\t\t};\n\t\t\t\t\tconst message = this.getMessage(attr);\n\t\t\t\t\tconst location = this.getLocation(attr);\n\t\t\t\t\tthis.report(node, message, location, context);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate getMessage(attr: Attribute): string {\n\t\tconst { key, value } = attr;\n\t\tif (value !== null) {\n\t\t\treturn `Attribute \"${key}\" has invalid value \"${value.toString()}\"`;\n\t\t} else {\n\t\t\treturn `Attribute \"${key}\" is missing value`;\n\t\t}\n\t}\n\n\tprivate getLocation(attr: Attribute): Location {\n\t\treturn attr.valueLocation ?? attr.keyLocation;\n\t}\n}\n","import { type Attribute, type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type MetaAttribute } from \"../meta/element\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { walk } from \"../utils\";\n\ninterface RuleOptions {\n\tstyle: \"omit\" | \"empty\" | \"name\";\n}\n\nconst defaults: RuleOptions = {\n\tstyle: \"omit\",\n};\n\ntype checkFunction = (attr: Attribute) => boolean;\n\nexport default class AttributeBooleanStyle extends Rule<void, RuleOptions> {\n\tprivate hasInvalidStyle: checkFunction;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.hasInvalidStyle = parseStyle(this.options.style);\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tstyle: {\n\t\t\t\tenum: [\"empty\", \"name\", \"omit\"],\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"Require a specific style when writing boolean attributes.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\tconst meta = node.meta;\n\n\t\t\t\t/* ignore rule if element has no meta or meta does not specify attribute\n\t\t\t\t * allowed values */\n\t\t\t\tif (!meta?.attributes) return;\n\n\t\t\t\t/* check all boolean attributes */\n\t\t\t\tfor (const attr of node.attributes) {\n\t\t\t\t\tif (!this.isBoolean(attr, meta.attributes)) continue;\n\n\t\t\t\t\t/* ignore attribute if it is aliased by a dynamic value,\n\t\t\t\t\t * e.g. ng-required or v-bind:required, since it will probably have a\n\t\t\t\t\t * value despite the target attribute is a boolean. The framework is\n\t\t\t\t\t * assumed to handle it properly */\n\t\t\t\t\tif (attr.originalAttribute) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.hasInvalidStyle(attr)) {\n\t\t\t\t\t\tthis.report(node, reportMessage(attr, this.options.style), attr.keyLocation);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tpublic isBoolean(attr: Attribute, rules: Record<string, MetaAttribute>): boolean {\n\t\tconst meta = rules[attr.key] as MetaAttribute | undefined;\n\t\treturn Boolean(meta?.boolean);\n\t}\n}\n\nfunction parseStyle(style: string): checkFunction {\n\tswitch (style.toLowerCase()) {\n\t\tcase \"omit\":\n\t\t\treturn (attr: Attribute) => attr.value !== null;\n\t\tcase \"empty\":\n\t\t\treturn (attr: Attribute) => attr.value !== \"\";\n\t\tcase \"name\":\n\t\t\treturn (attr: Attribute) => attr.value !== attr.key;\n\t\t/* istanbul ignore next: covered by schema validation */\n\t\tdefault:\n\t\t\tthrow new Error(`Invalid style \"${style}\" for \"attribute-boolean-style\" rule`);\n\t}\n}\n\nfunction reportMessage(attr: Attribute, style: string): string {\n\tconst key = attr.key;\n\tswitch (style.toLowerCase()) {\n\t\tcase \"omit\":\n\t\t\treturn `Attribute \"${key}\" should omit value`;\n\t\tcase \"empty\":\n\t\t\treturn `Attribute \"${key}\" value should be empty string`;\n\t\tcase \"name\":\n\t\t\treturn `Attribute \"${key}\" should be set to ${key}=\"${key}\"`;\n\t}\n\t/* istanbul ignore next: the above switch should cover all cases */\n\treturn \"\";\n}\n","import { type Attribute, type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type MetaAttribute } from \"../meta/element\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { walk } from \"../utils\";\n\ninterface RuleOptions {\n\tstyle: \"omit\" | \"empty\";\n}\n\nconst defaults: RuleOptions = {\n\tstyle: \"omit\",\n};\n\ntype checkFunction = (attr: Attribute) => boolean;\n\nexport default class AttributeEmptyStyle extends Rule<void, RuleOptions> {\n\tprivate hasInvalidStyle: checkFunction;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.hasInvalidStyle = parseStyle(this.options.style);\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tstyle: {\n\t\t\t\tenum: [\"empty\", \"omit\"],\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"Require a specific style for attributes with empty values.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\tconst meta = node.meta;\n\n\t\t\t\t/* ignore rule if element has no meta or meta does not specify attribute\n\t\t\t\t * allowed values */\n\t\t\t\tif (!meta?.attributes) return;\n\n\t\t\t\t/* check all boolean attributes */\n\t\t\t\tfor (const attr of node.attributes) {\n\t\t\t\t\t/* only handle attributes which allows empty values */\n\t\t\t\t\tif (!allowsEmpty(attr, meta.attributes)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* skip attribute if the attribute is set to non-empty value\n\t\t\t\t\t * (attribute-allowed-values deals with non-empty values)*/\n\t\t\t\t\tif (!isEmptyValue(attr)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* skip attribute if the style is valid */\n\t\t\t\t\tif (!this.hasInvalidStyle(attr)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* report error */\n\t\t\t\t\tthis.report(node, reportMessage(attr, this.options.style), attr.keyLocation);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n}\n\nfunction allowsEmpty(attr: Attribute, rules: Record<string, MetaAttribute>): boolean {\n\tconst meta = rules[attr.key] as MetaAttribute | undefined;\n\treturn Boolean(meta?.omit);\n}\n\nfunction isEmptyValue(attr: Attribute): boolean {\n\t/* dynamic values are ignored, assumed to contain a value */\n\tif (attr.isDynamic) {\n\t\treturn false;\n\t}\n\n\treturn attr.value === null || attr.value === \"\";\n}\n\nfunction parseStyle(style: string): checkFunction {\n\tswitch (style.toLowerCase()) {\n\t\tcase \"omit\":\n\t\t\treturn (attr: Attribute) => attr.value !== null;\n\t\tcase \"empty\":\n\t\t\treturn (attr: Attribute) => attr.value !== \"\";\n\t\t/* istanbul ignore next: covered by schema validation */\n\t\tdefault:\n\t\t\tthrow new Error(`Invalid style \"${style}\" for \"attribute-empty-style\" rule`);\n\t}\n}\n\nfunction reportMessage(attr: Attribute, style: string): string {\n\tconst key = attr.key;\n\tswitch (style.toLowerCase()) {\n\t\tcase \"omit\":\n\t\t\treturn `Attribute \"${key}\" should omit value`;\n\t\tcase \"empty\":\n\t\t\treturn `Attribute \"${key}\" value should be empty string`;\n\t}\n\t/* istanbul ignore next: the above switch should cover all cases */\n\treturn \"\";\n}\n","import { type Attribute, type HtmlElement } from \"../dom\";\nimport { type ElementReadyEvent } from \"../event\";\nimport { type MetaAttribute } from \"../meta\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport interface RuleContext {\n\ttagName: string;\n\tattr: string;\n\tdetails: string;\n}\n\nfunction ruleDescription(context: RuleContext): string {\n\tconst { tagName, attr, details } = context;\n\treturn `The \\`${attr}\\` attribute cannot be used on \\`${tagName}\\` in this context: ${details}`;\n}\n\nexport default class AttributeMisuse extends Rule<RuleContext> {\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: ruleDescription(context),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"element:ready\", (event: ElementReadyEvent) => {\n\t\t\tconst { target } = event;\n\t\t\tconst { meta } = target;\n\t\t\tif (!meta) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (const attr of target.attributes) {\n\t\t\t\tconst key = attr.key.toLowerCase();\n\t\t\t\tthis.validateAttr(target, attr, meta.attributes[key]);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate validateAttr(node: HtmlElement, attr: Attribute, meta: MetaAttribute | undefined): void {\n\t\tif (!meta?.allowed) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst details = meta.allowed(node._adapter, attr.value);\n\t\tif (details) {\n\t\t\tthis.report({\n\t\t\t\tnode,\n\t\t\t\tmessage: `\"{{ attr }}\" attribute cannot be used on {{ tagName }} in this context: {{ details }}`,\n\t\t\t\tlocation: attr.keyLocation,\n\t\t\t\tcontext: {\n\t\t\t\t\ttagName: node.annotatedName,\n\t\t\t\t\tattr: attr.key,\n\t\t\t\t\tdetails,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n}\n","export type PatternName = \"kebabcase\" | \"camelcase\" | \"underscore\" | string;\n\n/**\n * @internal\n */\nexport interface ParsedPattern {\n\tregexp: RegExp;\n\tdescription: string;\n}\n\n/**\n * @internal\n */\nexport function parsePattern(pattern: PatternName): ParsedPattern {\n\tswitch (pattern) {\n\t\tcase \"kebabcase\":\n\t\t\treturn { regexp: /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/, description: pattern };\n\n\t\tcase \"camelcase\":\n\t\t\treturn { regexp: /^[a-z][a-zA-Z0-9]*$/, description: pattern };\n\n\t\tcase \"snakecase\":\n\t\tcase \"underscore\":\n\t\t\treturn { regexp: /^[a-z][a-z0-9]*(?:_[a-z0-9]+)*$/, description: pattern };\n\n\t\tcase \"bem\": {\n\t\t\tconst block = \"[a-z][a-z0-9]*(?:-[a-z0-9]+)*\";\n\t\t\tconst element = \"(?:__[a-z0-9]+(?:-[a-z0-9]+)*)?\";\n\t\t\tconst modifier = \"(?:--[a-z0-9]+(?:-[a-z0-9]+)*){0,2}\";\n\t\t\treturn {\n\t\t\t\tregexp: new RegExp(`^${block}${element}${modifier}$`),\n\t\t\t\tdescription: pattern,\n\t\t\t};\n\t\t}\n\n\t\tdefault: {\n\t\t\t/* eslint-disable-next-line security/detect-non-literal-regexp -- expected to be regexp */\n\t\t\tconst regexp = new RegExp(pattern);\n\t\t\treturn { regexp, description: regexp.toString() };\n\t\t}\n\t}\n}\n","import { type Location } from \"../context\";\nimport { type HtmlElement } from \"../dom\";\nimport { type ParsedPattern, type PatternName, parsePattern } from \"../pattern\";\nimport { type SchemaObject, Rule } from \"../rule\";\nimport { naturalJoin } from \"../utils/natural-join\";\n\n/**\n * @internal\n */\nexport interface BasePatternRuleContext {\n\tvalue: string;\n}\n\n/**\n * @internal\n */\nexport interface BasePatternRuleOptions {\n\tpattern: PatternName | PatternName[];\n}\n\nfunction toArray<T>(value: T | T[]): T[] {\n\treturn Array.isArray(value) ? value : [value];\n}\n\n/**\n * Base rule for any rule testing strings against patterns.\n *\n * @internal\n */\nexport abstract class BasePatternRule extends Rule<BasePatternRuleContext, BasePatternRuleOptions> {\n\t/** Attribute being tested */\n\tprotected attr: string;\n\n\t/** Parsed configured patterns */\n\tprotected patterns: ParsedPattern[];\n\n\t/**\n\t * @param attr - Attribute holding the value.\n\t * @param options - Rule options with defaults expanded.\n\t */\n\tpublic constructor(attr: string, options: BasePatternRuleOptions) {\n\t\tsuper(options);\n\t\tconst { pattern } = this.options;\n\t\tthis.attr = attr;\n\t\tthis.patterns = toArray(pattern).map((it) => parsePattern(it));\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tpattern: {\n\t\t\t\toneOf: [{ type: \"array\", items: { type: \"string\" }, minItems: 1 }, { type: \"string\" }],\n\t\t\t},\n\t\t};\n\t}\n\n\tprotected description(context: BasePatternRuleContext): string {\n\t\tconst { attr, patterns } = this;\n\t\tconst { value } = context;\n\t\tconst lead =\n\t\t\tpatterns.length === 1\n\t\t\t\t? `The \\`${attr}\\` attribute value \\`\"${value}\"\\` does not match the configured pattern.`\n\t\t\t\t: `The \\`${attr}\\` attribute value \\`\"${value}\"\\` does not match either of the configured patterns.`;\n\t\treturn [\n\t\t\tlead,\n\t\t\t\"For consistency within the codebase the `${attr}` is required to match one or more of the following patterns:\",\n\t\t\t\"\",\n\t\t\t...patterns.map((it) => `- \\`${it.description}\\``),\n\t\t].join(\"\\n\");\n\t}\n\n\tprotected validateValue(node: HtmlElement, value: string, location: Location | null): void {\n\t\tconst { attr, patterns } = this;\n\t\tconst matches = patterns.some((it) => it.regexp.test(value));\n\t\tif (matches) {\n\t\t\treturn;\n\t\t}\n\t\tconst allowed = naturalJoin(patterns.map((it) => `\"${it.description}\"`));\n\t\tconst message =\n\t\t\tpatterns.length === 1\n\t\t\t\t? `${attr} \"${value}\" does not match the configured pattern ${allowed}`\n\t\t\t\t: `${attr} \"${value}\" does not match either of the configured patterns: ${allowed}`;\n\t\tthis.report({\n\t\t\tnode,\n\t\t\tmessage,\n\t\t\tlocation,\n\t\t\tcontext: {\n\t\t\t\tvalue,\n\t\t\t},\n\t\t});\n\t}\n}\n","import { DOMTokenList } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, ruleDocumentationUrl } from \"../rule\";\nimport {\n\ttype BasePatternRuleContext,\n\ttype BasePatternRuleOptions,\n\tBasePatternRule,\n} from \"./base-pattern-rule\";\n\nconst defaults: BasePatternRuleOptions = {\n\tpattern: \"kebabcase\",\n};\n\nexport default class ClassPattern extends BasePatternRule {\n\tpublic constructor(options: Partial<BasePatternRuleOptions>) {\n\t\tsuper(\"class\", { ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn BasePatternRule.schema();\n\t}\n\n\tpublic documentation(context: BasePatternRuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: this.description(context),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tconst { target, key, value, valueLocation } = event;\n\n\t\t\tif (key.toLowerCase() !== \"class\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst classes = new DOMTokenList(value, valueLocation);\n\t\t\tfor (const { item, location } of classes.iterator()) {\n\t\t\t\tthis.validateValue(target, item, location);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type TagEndEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class CloseAttr extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"HTML disallows end tags to have attributes.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\t/* handle unclosed tags */\n\t\t\tif (!event.target) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore self-closed and void */\n\t\t\tif (event.previous === event.target) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst node = event.target;\n\t\t\tif (Object.keys(node.attributes).length > 0) {\n\t\t\t\tconst first = node.attributes[0];\n\t\t\t\tthis.report(null, \"Close tags cannot have attributes\", first.keyLocation);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type Location } from \"../context\";\nimport { NodeClosed } from \"../dom\";\nimport { type TagEndEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class CloseOrder extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"HTML requires elements to be closed in the same order as they were opened.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\tconst current = event.target; // The current element being closed\n\t\t\tconst active = event.previous; // The current active element (that is, the current element on the stack)\n\n\t\t\t/* handle unclosed tags */\n\t\t\tif (!current) {\n\t\t\t\tthis.report(\n\t\t\t\t\tnull,\n\t\t\t\t\t`Missing close-tag, expected '</${active.tagName}>' but document ended before it was found.`,\n\t\t\t\t\tevent.location,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* void elements are always closed in correct order but if the markup contains\n\t\t\t * an end-tag for it it should be ignored here since the void element is\n\t\t\t * implicitly closed in the right order, so the current active element is the\n\t\t\t * parent. */\n\t\t\tif (current.voidElement) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* if the active element is implicitly closed when the parent is closed\n\t\t\t * (such as a <li> by </ul>) no error should be reported. */\n\t\t\tif (active.closed === NodeClosed.ImplicitClosed) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* handle unopened tags */\n\t\t\tif (active.isRootElement()) {\n\t\t\t\tconst location: Location = {\n\t\t\t\t\tfilename: current.location.filename,\n\t\t\t\t\tline: current.location.line,\n\t\t\t\t\tcolumn: current.location.column,\n\t\t\t\t\toffset: current.location.offset,\n\t\t\t\t\tsize: current.tagName.length + 1,\n\t\t\t\t};\n\t\t\t\tthis.report(null, \"Unexpected close-tag, expected opening tag.\", location);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* check for matching tagnames */\n\t\t\tif (current.tagName !== active.tagName) {\n\t\t\t\tthis.report(\n\t\t\t\t\tnull,\n\t\t\t\t\t`Mismatched close-tag, expected '</${active.tagName}>' but found '</${current.tagName}>'.`,\n\t\t\t\t\tcurrent.location,\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type Location, sliceLocation } from \"../context\";\nimport { type HtmlElement } from \"../dom\";\nimport { type TagStartEvent } from \"../event\";\nimport { type DeprecatedElement } from \"../meta/element\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleContext extends DeprecatedElement {\n\ttagName: string;\n}\n\ninterface RuleOptions {\n\tinclude: string[] | null;\n\texclude: string[] | null;\n}\n\nconst defaults: RuleOptions = {\n\tinclude: null,\n\texclude: null,\n};\n\nexport default class Deprecated extends Rule<RuleContext, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\texclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tinclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\tconst text: string[] = [];\n\t\tif (context.source) {\n\t\t\tconst source = prettySource(context.source);\n\t\t\tconst message = `The \\`<$tagname>\\` element is deprecated ${source} and should not be used in new code.`;\n\t\t\ttext.push(message);\n\t\t} else {\n\t\t\tconst message = `The \\`<$tagname>\\` element is deprecated and should not be used in new code.`;\n\t\t\ttext.push(message);\n\t\t}\n\t\tif (context.documentation) {\n\t\t\ttext.push(context.documentation);\n\t\t}\n\t\tconst doc: RuleDocumentation = {\n\t\t\tdescription: text.map((cur) => cur.replace(/\\$tagname/g, context.tagName)).join(\"\\n\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t\treturn doc;\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:start\", (event: TagStartEvent) => {\n\t\t\tconst node = event.target;\n\n\t\t\t/* cannot validate if meta isn't known */\n\t\t\tif (node.meta === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore if element is not deprecated */\n\t\t\tconst deprecated = node.meta.deprecated;\n\t\t\tif (!deprecated) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore if element is ignored by used configuration */\n\t\t\tif (this.isKeywordIgnored(node.tagName)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst location = sliceLocation(event.location, 1);\n\n\t\t\tif (typeof deprecated === \"string\") {\n\t\t\t\tthis.reportString(deprecated, node, location);\n\t\t\t} else if (typeof deprecated === \"boolean\") {\n\t\t\t\tthis.reportBoolean(node, location);\n\t\t\t} else {\n\t\t\t\tthis.reportObject(deprecated, node, location);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate reportString(deprecated: string, node: HtmlElement, location: Location): void {\n\t\tconst context: RuleContext = { tagName: node.tagName };\n\t\tconst message = `<${node.tagName}> is deprecated: ${deprecated}`;\n\t\tthis.report(node, message, location, context);\n\t}\n\n\tprivate reportBoolean(node: HtmlElement, location: Location): void {\n\t\tconst context: RuleContext = { tagName: node.tagName };\n\t\tconst message = `<${node.tagName}> is deprecated`;\n\t\tthis.report(node, message, location, context);\n\t}\n\n\tprivate reportObject(deprecated: DeprecatedElement, node: HtmlElement, location: Location): void {\n\t\tconst context: RuleContext = { ...deprecated, tagName: node.tagName };\n\t\tconst notice = deprecated.message ? `: ${deprecated.message}` : \"\";\n\t\tconst message = `<${node.tagName}> is deprecated${notice}`;\n\t\tthis.report(node, message, location, context);\n\t}\n}\n\nfunction prettySource(source: string): string {\n\tconst match = source.match(/html(\\d)(\\d)?/);\n\tif (match) {\n\t\tconst [, ...parts] = match;\n\t\tconst version = parts.filter(Boolean).join(\".\");\n\t\treturn `in HTML ${version}`;\n\t}\n\n\tswitch (source) {\n\t\tcase \"whatwg\":\n\t\t\treturn \"in HTML Living Standard\";\n\t\tcase \"non-standard\":\n\t\t\treturn \"and non-standard\";\n\t\tdefault:\n\t\t\treturn `by ${source}`;\n\t}\n}\n","import { Severity } from \"../config/severity\";\nimport { type ConfigReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class DeprecatedRule extends Rule<string> {\n\tpublic documentation(context: string): RuleDocumentation {\n\t\tconst preamble = context ? `The rule \"${context}\"` : \"This rule\";\n\t\treturn {\n\t\t\tdescription: `${preamble} is deprecated and should not be used any longer, consult documentation for further information.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"config:ready\", (event: ConfigReadyEvent) => {\n\t\t\tfor (const rule of this.getDeprecatedRules(event)) {\n\t\t\t\tif (rule.getSeverity() > Severity.DISABLED) {\n\t\t\t\t\tthis.report(null, `Usage of deprecated rule \"${rule.name}\"`, null, rule.name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate getDeprecatedRules(event: ConfigReadyEvent): Array<Rule<unknown, unknown>> {\n\t\tconst rules = Object.values(event.rules);\n\t\treturn rules.filter((rule) => rule.deprecated);\n\t}\n}\n","import { type DoctypeEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class NoStyleTag extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t'HTML5 documents should use the \"html\" doctype (short `form`, not legacy string):',\n\t\t\t\t\"\",\n\t\t\t\t\"```html\",\n\t\t\t\t\"<!DOCTYPE html>\",\n\t\t\t\t\"```\",\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"doctype\", (event: DoctypeEvent) => {\n\t\t\tconst doctype = event.value.toLowerCase();\n\t\t\tif (doctype !== \"html\") {\n\t\t\t\tthis.report(null, 'doctype should be \"html\"', event.valueLocation);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type DoctypeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleContext {\n\tstyle: \"uppercase\" | \"lowercase\";\n}\n\ninterface RuleOptions {\n\tstyle: \"uppercase\" | \"lowercase\";\n}\n\nconst defaults: RuleOptions = {\n\tstyle: \"uppercase\",\n};\n\nexport default class DoctypeStyle extends Rule<RuleContext, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tstyle: {\n\t\t\t\tenum: [\"lowercase\", \"uppercase\"],\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `While DOCTYPE is case-insensitive in the standard the current configuration requires it to be ${context.style}`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"doctype\", (event: DoctypeEvent) => {\n\t\t\tif (this.options.style === \"uppercase\" && event.tag !== \"DOCTYPE\") {\n\t\t\t\tthis.report(null, \"DOCTYPE should be uppercase\", event.location, this.options);\n\t\t\t}\n\t\t\tif (this.options.style === \"lowercase\" && event.tag !== \"doctype\") {\n\t\t\t\tthis.report(null, \"DOCTYPE should be lowercase\", event.location, this.options);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type Location, sliceLocation } from \"../context\";\nimport { type HtmlElement } from \"../dom\";\nimport { type TagEndEvent, type TagStartEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { type CaseStyleName, CaseStyle } from \"./helper/case-style\";\n\ninterface RuleOptions {\n\tstyle: CaseStyleName | CaseStyleName[];\n}\n\nconst defaults: RuleOptions = {\n\tstyle: \"lowercase\",\n};\n\nexport default class ElementCase extends Rule<void, RuleOptions> {\n\tprivate style: CaseStyle;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.style = new CaseStyle(this.options.style, \"element-case\");\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\tconst styleEnum = [\"lowercase\", \"uppercase\", \"pascalcase\", \"camelcase\"];\n\t\treturn {\n\t\t\tstyle: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\tenum: styleEnum,\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\tenum: styleEnum,\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\tconst { style } = this.options;\n\t\treturn {\n\t\t\tdescription: Array.isArray(style)\n\t\t\t\t? [`Element tagname must be in one of:`, \"\", ...style.map((it) => `- ${it}`)].join(\"\\n\")\n\t\t\t\t: `Element tagname must be in ${style}.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:start\", (event: TagStartEvent) => {\n\t\t\tconst { target, location } = event;\n\t\t\tthis.validateCase(target, location);\n\t\t});\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\tconst { target, previous } = event;\n\t\t\tthis.validateMatchingCase(previous, target);\n\t\t});\n\t}\n\n\tprivate validateCase(target: HtmlElement, targetLocation: Location): void {\n\t\tconst letters = target.tagName.replace(/[^a-z]+/gi, \"\");\n\t\tif (!this.style.match(letters)) {\n\t\t\tconst location = sliceLocation(targetLocation, 1);\n\t\t\tthis.report(target, `Element \"${target.tagName}\" should be ${this.style.name}`, location);\n\t\t}\n\t}\n\n\tprivate validateMatchingCase(start: HtmlElement | null, end: HtmlElement | null): void {\n\t\t/* handle when elements have have missing start or end tag */\n\t\tif (!start || !end || !start.tagName || !end.tagName) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* only check case if the names are a lowercase match to each other or it\n\t\t * will yield false positives when elements are closed in wrong order or\n\t\t * otherwise mismatched */\n\t\tif (start.tagName.toLowerCase() !== end.tagName.toLowerCase()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (start.tagName !== end.tagName) {\n\t\t\tthis.report(start, \"Start and end tag must not differ in casing\", end.location);\n\t\t}\n\t}\n}\n","import { sliceLocation } from \"../context\";\nimport { type TagStartEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface Context {\n\ttagName: string;\n\tpattern: string;\n\tblacklist: string[];\n}\n\ninterface RuleOptions {\n\tpattern: string;\n\twhitelist: string[];\n\tblacklist: string[];\n}\n\nconst defaults: RuleOptions = {\n\tpattern: \"^[a-z][a-z0-9\\\\-._]*-[a-z0-9\\\\-._]*$\",\n\twhitelist: [],\n\tblacklist: [],\n};\n\nexport default class ElementName extends Rule<Context, RuleOptions> {\n\tprivate pattern: RegExp;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\n\t\t/* eslint-disable-next-line security/detect-non-literal-regexp -- expected to be a regexp */\n\t\tthis.pattern = new RegExp(this.options.pattern);\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tblacklist: {\n\t\t\t\titems: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t\ttype: \"array\",\n\t\t\t},\n\t\t\tpattern: {\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t\twhitelist: {\n\t\t\t\titems: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t\ttype: \"array\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: Context): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: this.documentationMessages(context).join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tprivate documentationMessages(context: Context): string[] {\n\t\tif (context.blacklist.includes(context.tagName)) {\n\t\t\treturn [\n\t\t\t\t`<${context.tagName}> is blacklisted by the project configuration.`,\n\t\t\t\t\"\",\n\t\t\t\t\"The following names are blacklisted:\",\n\t\t\t\t...context.blacklist.map((cur) => `- ${cur}`),\n\t\t\t];\n\t\t}\n\n\t\tif (context.pattern !== defaults.pattern) {\n\t\t\treturn [\n\t\t\t\t`<${context.tagName}> is not a valid element name. This project is configured to only allow names matching the following regular expression:`,\n\t\t\t\t\"\",\n\t\t\t\t`- \\`${context.pattern}\\``,\n\t\t\t];\n\t\t}\n\n\t\treturn [\n\t\t\t`<${context.tagName}> is not a valid element name. If this is a custom element HTML requires the name to follow these rules:`,\n\t\t\t\"\",\n\t\t\t\"- The name must begin with `a-z`\",\n\t\t\t\"- The name must include a hyphen `-`\",\n\t\t\t\"- It may include alphanumerical characters `a-z0-9` or hyphens `-`, dots `.` or underscores `_`.\",\n\t\t];\n\t}\n\n\tpublic setup(): void {\n\t\tconst xmlns = /^(.+):.+$/;\n\t\tthis.on(\"tag:start\", (event: TagStartEvent) => {\n\t\t\tconst target = event.target;\n\t\t\tconst tagName = target.tagName;\n\t\t\tconst location = sliceLocation(event.location, 1);\n\t\t\tconst context: Context = {\n\t\t\t\ttagName,\n\t\t\t\tpattern: this.options.pattern,\n\t\t\t\tblacklist: this.options.blacklist,\n\t\t\t};\n\n\t\t\t/* check if element is blacklisted */\n\t\t\tif (this.options.blacklist.includes(tagName)) {\n\t\t\t\tthis.report(target, `<${tagName}> element is blacklisted`, location, context);\n\t\t\t}\n\n\t\t\t/* assume that an element with meta has valid name as it is a builtin\n\t\t\t * element */\n\t\t\tif (target.meta) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore elements in xml namespaces, they should be validated against a\n\t\t\t * DTD instead */\n\t\t\tif (tagName.match(xmlns)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* check if element is whitelisted */\n\t\t\tif (this.options.whitelist.includes(tagName)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!tagName.match(this.pattern)) {\n\t\t\t\tthis.report(target, `<${tagName}> is not a valid element name`, location, context);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { Validator } from \"../meta\";\nimport { type Permitted } from \"../meta/element\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { walk } from \"../utils\";\n\nexport enum ErrorKind {\n\tCONTENT = \"content\",\n\tDESCENDANT = \"descendant\",\n}\n\nexport interface ContentContext {\n\tkind: ErrorKind.CONTENT;\n\tparent: string;\n\tchild: string;\n}\n\nexport interface DescendantContext {\n\tkind: ErrorKind.DESCENDANT;\n\tancestor: string;\n\tchild: string;\n}\n\ntype RuleContext = ContentContext | DescendantContext;\n\nfunction getTransparentChildren(node: HtmlElement, transparent: boolean | string[]): HtmlElement[] {\n\tif (typeof transparent === \"boolean\") {\n\t\treturn node.childElements;\n\t} else {\n\t\t/* only return children which matches one of the given content categories */\n\t\treturn node.childElements.filter((it) => {\n\t\t\treturn transparent.some((category) => {\n\t\t\t\treturn Validator.validatePermittedCategory(it, category, false);\n\t\t\t});\n\t\t});\n\t}\n}\n\nfunction getRuleDescription(context: RuleContext): string[] {\n\tswitch (context.kind) {\n\t\tcase ErrorKind.CONTENT:\n\t\t\treturn [\n\t\t\t\t`The \\`${context.child}\\` element is not permitted as content under the parent \\`${context.parent}\\` element.`,\n\t\t\t];\n\t\tcase ErrorKind.DESCENDANT:\n\t\t\treturn [\n\t\t\t\t`The \\`${context.child}\\` element is not permitted as a descendant of the \\`${context.ancestor}\\` element.`,\n\t\t\t];\n\t}\n}\n\nexport default class ElementPermittedContent extends Rule<RuleContext> {\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: getRuleDescription(context).join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\tconst parent = node.parent;\n\n\t\t\t\t/* istanbul ignore next: satisfy typescript but will visitDepthFirst()\n\t\t\t\t * will not yield nodes without a parent */\n\t\t\t\tif (!parent) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t/* Run each validation step, stop as soon as any errors are\n\t\t\t\t * reported. This is to prevent multiple similar errors on the same\n\t\t\t\t * element, such as \"<dd> is not permitted content under <span>\" and\n\t\t\t\t * \"<dd> has no permitted ancestors\". */\n\t\t\t\t[\n\t\t\t\t\t() => this.validatePermittedContent(node, parent),\n\t\t\t\t\t() => this.validatePermittedDescendant(node, parent),\n\t\t\t\t].some((fn) => fn());\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate validatePermittedContent(cur: HtmlElement, parent: HtmlElement): boolean {\n\t\t/* if parent doesn't have metadata (unknown element) skip checking permitted\n\t\t * content */\n\t\tif (!parent.meta) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst rules = parent.meta.permittedContent ?? null;\n\t\treturn this.validatePermittedContentImpl(cur, parent, rules);\n\t}\n\n\tprivate validatePermittedContentImpl(\n\t\tcur: HtmlElement,\n\t\tparent: HtmlElement,\n\t\trules: Permitted | null,\n\t): boolean {\n\t\tif (!Validator.validatePermitted(cur, rules)) {\n\t\t\tconst child = `<${cur.tagName}>`;\n\t\t\tconst message = `${child} element is not permitted as content under ${parent.annotatedName}`;\n\t\t\tconst context: ContentContext = {\n\t\t\t\tkind: ErrorKind.CONTENT,\n\t\t\t\tparent: parent.annotatedName,\n\t\t\t\tchild,\n\t\t\t};\n\t\t\tthis.report(cur, message, null, context);\n\t\t\treturn true;\n\t\t}\n\n\t\t/* for transparent elements all/listed children must be validated against\n\t\t * the (this elements) parent, i.e. if this node was removed from the DOM it\n\t\t * should still be valid. */\n\t\tif (cur.meta?.transparent) {\n\t\t\tconst children = getTransparentChildren(cur, cur.meta.transparent);\n\t\t\treturn children\n\t\t\t\t.map((child: HtmlElement) => {\n\t\t\t\t\treturn this.validatePermittedContentImpl(child, parent, rules);\n\t\t\t\t})\n\t\t\t\t.some(Boolean);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate validatePermittedDescendant(node: HtmlElement, parent: HtmlElement | null): boolean {\n\t\tfor (\n\t\t\tlet cur = parent;\n\t\t\tcur && !cur.isRootElement();\n\t\t\tcur = /* istanbul ignore next */ cur?.parent ?? null\n\t\t) {\n\t\t\tconst meta = cur.meta;\n\n\t\t\t/* ignore checking parent without meta */\n\t\t\tif (!meta) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst rules = meta.permittedDescendants;\n\t\t\tif (!rules) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (Validator.validatePermitted(node, rules)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst child = `<${node.tagName}>`;\n\t\t\tconst ancestor = cur.annotatedName;\n\t\t\tconst message = `${child} element is not permitted as a descendant of ${ancestor}`;\n\t\t\tconst context: DescendantContext = {\n\t\t\t\tkind: ErrorKind.DESCENDANT,\n\t\t\t\tancestor,\n\t\t\t\tchild,\n\t\t\t};\n\t\t\tthis.report(node, message, null, context);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { Validator } from \"../meta\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { walk } from \"../utils\";\n\nexport default class ElementPermittedOccurrences extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"Some elements may only be used a fixed amount of times in given context.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\tif (!node.meta) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst rules = node.meta.permittedContent;\n\t\t\t\tif (!rules) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tValidator.validateOccurrences(\n\t\t\t\t\tnode.childElements,\n\t\t\t\t\trules,\n\t\t\t\t\t(child: HtmlElement, category: string) => {\n\t\t\t\t\t\tthis.report(\n\t\t\t\t\t\t\tchild,\n\t\t\t\t\t\t\t`Element <${category}> can only appear once under ${node.annotatedName}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { Validator } from \"../meta\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { walk } from \"../utils\";\n\nexport default class ElementPermittedOrder extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"Some elements has a specific order the children must use.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\tif (!node.meta) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst rules = node.meta.permittedOrder;\n\t\t\t\tif (!rules) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tValidator.validateOrder(\n\t\t\t\t\tnode.childElements,\n\t\t\t\t\trules,\n\t\t\t\t\t(child: HtmlElement, prev: HtmlElement) => {\n\t\t\t\t\t\tthis.report(\n\t\t\t\t\t\t\tchild,\n\t\t\t\t\t\t\t`Element <${child.tagName}> must be used before <${prev.tagName}> in this context`,\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type CategoryOrTag, Validator } from \"../meta\";\nimport { type Permitted, type PermittedEntry } from \"../meta/element\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { naturalJoin } from \"../utils/natural-join\";\nimport { walk } from \"../utils\";\n\nexport interface RuleContext {\n\tparent: string;\n\tchild: string;\n\trules: Permitted;\n}\n\nfunction isCategoryOrTag(value: PermittedEntry): value is CategoryOrTag {\n\treturn typeof value === \"string\";\n}\n\nfunction isCategory(value: CategoryOrTag): boolean {\n\treturn value.startsWith(\"@\");\n}\n\nfunction formatCategoryOrTag(value: CategoryOrTag): string {\n\treturn isCategory(value) ? value.slice(1) : `<${value}>`;\n}\n\nfunction isFormattable(rules: Permitted): rules is CategoryOrTag[] {\n\treturn rules.length > 0 && rules.every(isCategoryOrTag);\n}\n\nfunction getRuleDescription(context: RuleContext): string[] {\n\tconst { child, parent, rules } = context;\n\tconst preamble = `The \\`${child}\\` element cannot have a \\`${parent}\\` element as parent.`;\n\tif (isFormattable(rules)) {\n\t\tconst allowed = rules.filter(isCategoryOrTag).map((it) => {\n\t\t\tif (isCategory(it)) {\n\t\t\t\treturn `- any ${it.slice(1)} element`;\n\t\t\t} else {\n\t\t\t\treturn `- \\`<${it}>\\``;\n\t\t\t}\n\t\t});\n\t\treturn [preamble, \"\", \"Allowed parents one of:\", \"\", ...allowed];\n\t} else {\n\t\treturn [preamble];\n\t}\n}\n\nfunction formatMessage(node: HtmlElement, parent: HtmlElement, rules: Permitted): string {\n\tconst nodeName = node.annotatedName;\n\tconst parentName = parent.annotatedName;\n\tif (!isFormattable(rules)) {\n\t\treturn `${nodeName} element cannot have ${parentName} element as parent`;\n\t}\n\tconst allowed = naturalJoin(rules.filter(isCategoryOrTag).map(formatCategoryOrTag));\n\treturn `${nodeName} element requires a ${allowed} element as parent`;\n}\n\nexport default class ElementPermittedParent extends Rule<RuleContext> {\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: getRuleDescription(context).join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\tconst parent = node.parent;\n\n\t\t\t\t/* istanbul ignore next: satisfy typescript but will visitDepthFirst()\n\t\t\t\t * will not yield nodes without a parent */\n\t\t\t\tif (!parent) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t/* don't validate root element as the <html> and <body> tag is optional\n\t\t\t\t * so anything could be directly under the root element. */\n\t\t\t\tif (parent.isRootElement()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t/* when the parent element is the same as the current element we ignore\n\t\t\t\t * this rule and let `element-permitted-content` handle it as it will\n\t\t\t\t * create a lot of duplicate errors otherwise */\n\t\t\t\tif (parent.tagName === node.tagName) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t/* if parent doesn't have metadata (unknown element) skip checking permitted\n\t\t\t\t * content */\n\t\t\t\tconst rules = node.meta?.permittedParent;\n\t\t\t\tif (!rules) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (Validator.validatePermitted(parent, rules)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst message = formatMessage(node, parent, rules);\n\t\t\t\tconst context: RuleContext = {\n\t\t\t\t\tparent: parent.annotatedName,\n\t\t\t\t\tchild: node.annotatedName,\n\t\t\t\t\trules,\n\t\t\t\t};\n\t\t\t\tthis.report(node, message, null, context);\n\t\t\t});\n\t\t});\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { Validator } from \"../meta\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { naturalJoin } from \"../utils/natural-join\";\nimport { walk } from \"../utils\";\n\nexport interface RuleContext {\n\tancestor: string[];\n\tchild: string;\n}\n\nfunction isTagnameOnly(value: string): boolean {\n\treturn Boolean(value.match(/^[a-zA-Z0-9-]+$/));\n}\n\nfunction getRuleDescription(context: RuleContext): string[] {\n\tconst escaped = context.ancestor.map((it) => `\\`${it}\\``);\n\treturn [`The \\`${context.child}\\` element requires a ${naturalJoin(escaped)} ancestor.`];\n}\n\nexport default class ElementRequiredAncestor extends Rule<RuleContext> {\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: getRuleDescription(context).join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\tconst parent = node.parent;\n\n\t\t\t\t/* istanbul ignore next: satisfy typescript but will visitDepthFirst()\n\t\t\t\t * will not yield nodes without a parent */\n\t\t\t\tif (!parent) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.validateRequiredAncestors(node);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate validateRequiredAncestors(node: HtmlElement): void {\n\t\tif (!node.meta) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst rules = node.meta.requiredAncestors;\n\t\tif (!rules) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (Validator.validateAncestors(node, rules)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst ancestor = rules.map((it) => (isTagnameOnly(it) ? `<${it}>` : `\"${it}\"`));\n\t\tconst child = `<${node.tagName}>`;\n\t\tconst message = `<${node.tagName}> element requires a ${naturalJoin(ancestor)} ancestor`;\n\t\tconst context: RuleContext = {\n\t\t\tancestor,\n\t\t\tchild,\n\t\t};\n\t\tthis.report(node, message, null, context);\n\t}\n}\n","import { type TagEndEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface Context {\n\telement: string;\n\tattribute: string;\n}\n\nexport default class ElementRequiredAttributes extends Rule<Context> {\n\tpublic documentation(context?: Context): RuleDocumentation {\n\t\tconst docs: RuleDocumentation = {\n\t\t\tdescription: \"Element is missing a required attribute\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\n\t\tif (context) {\n\t\t\tdocs.description = `The <${context.element}> element is required to have a \"${context.attribute}\" attribute.`;\n\t\t}\n\n\t\treturn docs;\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\tconst node = event.previous;\n\t\t\tconst meta = node.meta;\n\n\t\t\t/* handle missing metadata and missing attributes */\n\t\t\tif (!meta?.attributes) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (const [key, attr] of Object.entries(meta.attributes)) {\n\t\t\t\tif (!attr.required) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (node.hasAttribute(key)) continue;\n\n\t\t\t\tconst context: Context = {\n\t\t\t\t\telement: node.tagName,\n\t\t\t\t\tattribute: key,\n\t\t\t\t};\n\n\t\t\t\tthis.report(\n\t\t\t\t\tnode,\n\t\t\t\t\t`${node.annotatedName} is missing required \"${key}\" attribute`,\n\t\t\t\t\tnode.location,\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type CategoryOrTag, Validator } from \"../meta\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { walk } from \"../utils\";\n\ninterface Context {\n\telement: string;\n\tmissing: string;\n}\n\nfunction isCategory(value: CategoryOrTag): boolean {\n\treturn value.startsWith(\"@\");\n}\n\nexport default class ElementRequiredContent extends Rule<Context> {\n\tpublic documentation(context: Context): RuleDocumentation {\n\t\tconst { element, missing } = context;\n\t\treturn {\n\t\t\tdescription: `The \\`${element}\\` element requires a \\`${missing}\\` to be present as content.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\t/* if element doesn't have metadata (unknown element) skip checking\n\t\t\t\t * required content */\n\t\t\t\tif (!node.meta) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst rules = node.meta.requiredContent;\n\t\t\t\tif (!rules) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (const missing of Validator.validateRequiredContent(node, rules)) {\n\t\t\t\t\tconst context: Context = {\n\t\t\t\t\t\telement: node.annotatedName,\n\t\t\t\t\t\tmissing: `<${missing}>`,\n\t\t\t\t\t};\n\t\t\t\t\tconst tag = isCategory(missing) ? `${missing.slice(1)} element` : `<${missing}>`;\n\t\t\t\t\tconst message = `${node.annotatedName} element must have ${tag} as content`;\n\t\t\t\t\tthis.report(node, message, null, context);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { hasAltText } from \"./helper\";\nimport { classifyNodeText, TextClassification } from \"./helper/text\";\n\nconst selector = [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"].join(\",\");\n\nfunction hasImgAltText(node: HtmlElement): boolean {\n\tif (node.is(\"img\")) {\n\t\treturn hasAltText(node);\n\t} else if (node.is(\"svg\")) {\n\t\treturn node.textContent.trim() !== \"\";\n\t}\n\n\t/* istanbul ignore next -- querySelector(..) is only going to return the two\n\t * above tags but this serves as a sane default if above assumption changes */\n\treturn false;\n}\n\nexport default class EmptyHeading extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `Assistive technology such as screen readers require textual content in headings. Whitespace only is considered empty.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", ({ document }) => {\n\t\t\tconst headings = document.querySelectorAll(selector);\n\t\t\tfor (const heading of headings) {\n\t\t\t\tthis.validateHeading(heading);\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected validateHeading(heading: HtmlElement): void {\n\t\tconst images = heading.querySelectorAll(\"img, svg\");\n\t\tfor (const child of images) {\n\t\t\tif (hasImgAltText(child)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tswitch (classifyNodeText(heading, { ignoreHiddenRoot: true })) {\n\t\t\tcase TextClassification.DYNAMIC_TEXT:\n\t\t\tcase TextClassification.STATIC_TEXT:\n\t\t\t\t/* have some text content, consider ok */\n\t\t\t\tbreak;\n\t\t\tcase TextClassification.EMPTY_TEXT:\n\t\t\t\t/* no content or whitespace only */\n\t\t\t\tthis.report(heading, `<${heading.tagName}> cannot be empty, must have text content`);\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n","import { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { classifyNodeText, TextClassification } from \"./helper/text\";\n\nexport default class EmptyTitle extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t\"The `<title>` element cannot be empty, it must have textual content.\",\n\t\t\t\t\"\",\n\t\t\t\t\"It is used to describe the document and is shown in the browser tab and titlebar.\",\n\t\t\t\t\"WCAG and SEO requires a descriptive title and preferably unique within the site.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Whitespace is ignored.\",\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event) => {\n\t\t\tconst node = event.previous;\n\t\t\tif (node.tagName !== \"title\") return;\n\n\t\t\tswitch (classifyNodeText(node)) {\n\t\t\t\tcase TextClassification.DYNAMIC_TEXT:\n\t\t\t\tcase TextClassification.STATIC_TEXT:\n\t\t\t\t\t/* have some text content, consider ok */\n\t\t\t\t\tbreak;\n\t\t\t\tcase TextClassification.EMPTY_TEXT:\n\t\t\t\t\t/* no content or whitespace only */\n\t\t\t\t\t{\n\t\t\t\t\t\tconst message = `<${node.tagName}> cannot be empty, must have text content`;\n\t\t\t\t\t\tthis.report(node, message, node.location);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type Attribute, type DynamicValue, type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { partition } from \"./helper\";\n\ninterface ControlDetails {\n\t/** `true` if control has name ending with `[]` */\n\tarray: boolean;\n\n\t/** `true` if control is `type=\"hidden\"` and hasn't been used as a default value yet */\n\tpotentialHiddenDefault: boolean;\n}\n\nexport interface RuleContext {\n\tname: string;\n\tkind: \"duplicate\" | \"mix\";\n}\n\ninterface RuleOptions {\n\tallowArrayBrackets: boolean;\n\tallowCheckboxDefault: boolean;\n\tshared: Array<\"radio\" | \"checkbox\" | \"submit\" | \"button\" | \"reset\">;\n}\n\nconst defaults: RuleOptions = {\n\tallowArrayBrackets: true,\n\tallowCheckboxDefault: true,\n\tshared: [\"radio\", \"button\", \"reset\", \"submit\"],\n};\n\nconst UNIQUE_CACHE_KEY = Symbol(\"form-elements-unique\");\nconst SHARED_CACHE_KEY = Symbol(\"form-elements-shared\");\n\ndeclare module \"../dom/cache\" {\n\texport interface DOMNodeCache {\n\t\t[UNIQUE_CACHE_KEY]: Map<string, ControlDetails>;\n\t\t[SHARED_CACHE_KEY]: Map<string, string>;\n\t}\n}\n\nfunction haveName(name: string | DynamicValue | null | undefined): name is string {\n\treturn typeof name === \"string\" && name !== \"\";\n}\n\nfunction allowSharedName(node: HtmlElement, shared: string[]): boolean {\n\tconst type = node.getAttribute(\"type\");\n\treturn Boolean(type?.valueMatches(shared, false));\n}\n\nfunction isInputHidden(element: HtmlElement): boolean {\n\treturn element.is(\"input\") && element.getAttributeValue(\"type\") === \"hidden\";\n}\n\nfunction isInputCheckbox(element: HtmlElement): boolean {\n\treturn element.is(\"input\") && element.getAttributeValue(\"type\") === \"checkbox\";\n}\n\nfunction isCheckboxWithDefault(\n\tcontrol: HtmlElement,\n\tprevious: ControlDetails,\n\toptions: RuleOptions,\n): boolean {\n\tconst { allowCheckboxDefault } = options;\n\tif (!allowCheckboxDefault) {\n\t\treturn false;\n\t}\n\tif (!previous.potentialHiddenDefault) {\n\t\treturn false;\n\t}\n\tif (!isInputCheckbox(control)) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction getDocumentation(context: RuleContext): string {\n\tconst trailer = \"Each form control must have a unique name.\";\n\tconst { name } = context;\n\tswitch (context.kind) {\n\t\tcase \"duplicate\":\n\t\t\treturn [`Duplicate form control name \"${name}\"`, trailer].join(\"\\n\");\n\t\tcase \"mix\":\n\t\t\treturn [\n\t\t\t\t`Form control name cannot mix regular name \"{{ name }}\" with array brackets \"{{ name }}[]\"`,\n\t\t\t\ttrailer,\n\t\t\t].join(\"\\n\");\n\t}\n}\n\nexport default class FormDupName extends Rule<RuleContext, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tallowArrayBrackets: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t\tallowCheckboxDefault: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t\tshared: {\n\t\t\t\ttype: \"array\",\n\t\t\t\titems: {\n\t\t\t\t\tenum: [\"radio\", \"checkbox\", \"submit\", \"button\", \"reset\"],\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: getDocumentation(context),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tconst selector = this.getSelector();\n\t\tconst { shared } = this.options;\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tconst controls = document.querySelectorAll(selector);\n\t\t\tconst [sharedControls, uniqueControls] = partition(controls, (it) => {\n\t\t\t\treturn allowSharedName(it, shared);\n\t\t\t});\n\n\t\t\t/* validate all form controls which require unique elements first so each\n\t\t\t * form has a populated list of unique names */\n\t\t\tfor (const control of uniqueControls) {\n\t\t\t\tconst attr = control.getAttribute(\"name\");\n\t\t\t\tconst name = attr?.value;\n\t\t\t\tif (!attr || !haveName(name)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst group = control.closest(\"form, template\") ?? document.root;\n\t\t\t\tthis.validateUniqueName(control, group, attr, name);\n\t\t\t}\n\n\t\t\t/* validate all form controls which allows shared names to ensure there is\n\t\t\t * no collision with other form controls */\n\t\t\tfor (const control of sharedControls) {\n\t\t\t\tconst attr = control.getAttribute(\"name\");\n\t\t\t\tconst name = attr?.value;\n\t\t\t\tif (!attr || !haveName(name)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst group = control.closest(\"form, template\") ?? document.root;\n\t\t\t\tthis.validateSharedName(control, group, attr, name);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate validateUniqueName(\n\t\tcontrol: HtmlElement,\n\t\tgroup: HtmlElement,\n\t\tattr: Attribute,\n\t\tname: string,\n\t): void {\n\t\tconst elements = this.getUniqueElements(group);\n\t\tconst { allowArrayBrackets } = this.options;\n\n\t\tif (allowArrayBrackets) {\n\t\t\tconst isarray = name.endsWith(\"[]\");\n\t\t\tconst basename = isarray ? name.slice(0, -2) : name;\n\t\t\tconst details = elements.get(basename);\n\n\t\t\t/* if a previous occurrence is found and one of the two is an array it is an error */\n\t\t\tif (details && details.array !== isarray) {\n\t\t\t\tconst context: RuleContext = {\n\t\t\t\t\tname: basename,\n\t\t\t\t\tkind: \"mix\",\n\t\t\t\t};\n\t\t\t\tthis.report({\n\t\t\t\t\tnode: control,\n\t\t\t\t\tlocation: attr.valueLocation,\n\t\t\t\t\tmessage: 'Cannot mix \"{{ name }}[]\" and \"{{ name }}\"',\n\t\t\t\t\tcontext,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* if this is an new array name store it for future tests */\n\t\t\tif (!details && isarray) {\n\t\t\t\telements.set(basename, {\n\t\t\t\t\tarray: true,\n\t\t\t\t\tpotentialHiddenDefault: false,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t/* if this is an array and the previous test passed (no mixing array and\n\t\t\t * non-array) no further testing needs to be done on this element. */\n\t\t\tif (isarray) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst previous = elements.get(name);\n\t\tif (previous) {\n\t\t\tif (isCheckboxWithDefault(control, previous, this.options)) {\n\t\t\t\tprevious.potentialHiddenDefault = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst context: RuleContext = {\n\t\t\t\tname,\n\t\t\t\tkind: \"duplicate\",\n\t\t\t};\n\t\t\tthis.report({\n\t\t\t\tnode: control,\n\t\t\t\tlocation: attr.valueLocation,\n\t\t\t\tmessage: 'Duplicate form control name \"{{ name }}\"',\n\t\t\t\tcontext,\n\t\t\t});\n\t\t} else {\n\t\t\telements.set(name, {\n\t\t\t\tarray: false,\n\t\t\t\tpotentialHiddenDefault: isInputHidden(control),\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate validateSharedName(\n\t\tcontrol: HtmlElement,\n\t\tgroup: HtmlElement,\n\t\tattr: Attribute,\n\t\tname: string,\n\t): void {\n\t\tconst uniqueElements = this.getUniqueElements(group);\n\t\tconst sharedElements = this.getSharedElements(group);\n\t\t/* istanbul ignore next: type will always be set or shared name wouldn't be allowed */\n\t\tconst type = control.getAttributeValue(\"type\") ?? \"\";\n\t\tif (\n\t\t\tuniqueElements.has(name) ||\n\t\t\t(sharedElements.has(name) && sharedElements.get(name) !== type)\n\t\t) {\n\t\t\tconst context: RuleContext = {\n\t\t\t\tname,\n\t\t\t\tkind: \"duplicate\",\n\t\t\t};\n\t\t\tthis.report({\n\t\t\t\tnode: control,\n\t\t\t\tlocation: attr.valueLocation,\n\t\t\t\tmessage: 'Duplicate form control name \"{{ name }}\"',\n\t\t\t\tcontext,\n\t\t\t});\n\t\t}\n\t\tsharedElements.set(name, type);\n\t}\n\n\tprivate getSelector(): string {\n\t\tconst tags = this.getTagsWithProperty(\"formAssociated\").filter((it) => {\n\t\t\treturn this.isListedElement(it);\n\t\t});\n\t\treturn tags.join(\", \");\n\t}\n\n\tprivate isListedElement(tagName: string): boolean {\n\t\tconst meta = this.getMetaFor(tagName);\n\t\t/* istanbul ignore next: the earlier check for getTagsWithProperty ensures\n\t\t * these will actually be set so this is just an untestable fallback */\n\t\tif (!meta?.formAssociated) {\n\t\t\treturn false;\n\t\t}\n\t\treturn meta.formAssociated.listed;\n\t}\n\n\tprivate getUniqueElements(group: HtmlElement): Map<string, ControlDetails> {\n\t\tconst existing = group.cacheGet(UNIQUE_CACHE_KEY);\n\t\tif (existing) {\n\t\t\treturn existing;\n\t\t} else {\n\t\t\tconst elements = new Map<string, ControlDetails>();\n\t\t\tgroup.cacheSet(UNIQUE_CACHE_KEY, elements);\n\t\t\treturn elements;\n\t\t}\n\t}\n\n\tprivate getSharedElements(group: HtmlElement): Map<string, string> {\n\t\tconst existing = group.cacheGet(SHARED_CACHE_KEY);\n\t\tif (existing) {\n\t\t\treturn existing;\n\t\t} else {\n\t\t\tconst elements = new Map<string, string>();\n\t\t\tgroup.cacheSet(SHARED_CACHE_KEY, elements);\n\t\t\treturn elements;\n\t\t}\n\t}\n}\n","import { type Location, sliceLocation } from \"../context\";\nimport { type HtmlElement, Pattern } from \"../dom\";\nimport { type DOMInternalID } from \"../dom/domnode\";\nimport { type SelectorContext } from \"../dom/selector-context\";\nimport { type TagEndEvent, type TagReadyEvent, type TagStartEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleOptions {\n\tallowMultipleH1: boolean;\n\tminInitialRank: \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"any\" | false;\n\tsectioningRoots: string[];\n}\n\ninterface SectioningRoot {\n\tnode: DOMInternalID | null;\n\tcurrent: number;\n\th1Count: number;\n}\n\nconst defaults: RuleOptions = {\n\tallowMultipleH1: false,\n\tminInitialRank: \"h1\",\n\tsectioningRoots: [\"dialog\", '[role=\"dialog\"]', '[role=\"alertdialog\"]'],\n};\n\nfunction isRelevant(event: TagStartEvent): boolean {\n\tconst node = event.target;\n\treturn Boolean(node.meta?.heading);\n}\n\nfunction extractLevel(node: HtmlElement): number | null {\n\tconst match = node.tagName.match(/^[hH](\\d)$/);\n\tif (match) {\n\t\treturn parseInt(match[1], 10);\n\t} else {\n\t\treturn null;\n\t}\n}\n\nfunction parseMaxInitial(value: string | false): number {\n\tif (value === false || value === \"any\") {\n\t\treturn 6;\n\t}\n\tconst match = value.match(/^h(\\d)$/);\n\t/* istanbul ignore next: should never happen, schema validation should catch invalid values */\n\tif (!match) {\n\t\treturn 1;\n\t}\n\treturn parseInt(match[1], 10);\n}\n\nexport default class HeadingLevel extends Rule<void, RuleOptions> {\n\tprivate minInitialRank: number;\n\tprivate sectionRoots: Pattern[];\n\tprivate stack: SectioningRoot[] = [];\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.minInitialRank = parseMaxInitial(this.options.minInitialRank);\n\t\tthis.sectionRoots = this.options.sectioningRoots.map((it) => new Pattern(it));\n\n\t\t/* add a global sectioning root used by default */\n\t\tthis.stack.push({\n\t\t\tnode: null,\n\t\t\tcurrent: 0,\n\t\t\th1Count: 0,\n\t\t});\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tallowMultipleH1: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t\tminInitialRank: {\n\t\t\t\tenum: [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"any\", false],\n\t\t\t},\n\t\t\tsectioningRoots: {\n\t\t\t\titems: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t\ttype: \"array\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\tconst text: string[] = [];\n\t\tconst modality = this.minInitialRank > 1 ? \"should\" : \"must\";\n\t\ttext.push(`Headings ${modality} start at <h1> and can only increase one level at a time.`);\n\t\ttext.push(\"The headings should form a table of contents and make sense on its own.\");\n\t\tif (!this.options.allowMultipleH1) {\n\t\t\ttext.push(\"\");\n\t\t\ttext.push(\n\t\t\t\t\"Under the current configuration only a single <h1> can be present at a time in the document.\",\n\t\t\t);\n\t\t}\n\t\treturn {\n\t\t\tdescription: text.join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:start\", isRelevant, (event: TagStartEvent) => {\n\t\t\tthis.onTagStart(event);\n\t\t});\n\t\tthis.on(\"tag:ready\", (event: TagReadyEvent) => {\n\t\t\tthis.onTagReady(event);\n\t\t});\n\t\tthis.on(\"tag:close\", (event: TagEndEvent) => {\n\t\t\tthis.onTagClose(event);\n\t\t});\n\t}\n\n\tprivate onTagStart(event: TagStartEvent): void {\n\t\t/* extract heading level from tagName (e.g \"h1\" -> 1)*/\n\t\tconst level = extractLevel(event.target);\n\t\tif (!level) return;\n\n\t\t/* fetch the current sectioning root */\n\t\tconst root = this.getCurrentRoot();\n\n\t\t/* do not allow multiple h1 */\n\t\tif (!this.options.allowMultipleH1 && level === 1) {\n\t\t\tif (root.h1Count >= 1) {\n\t\t\t\tconst location = sliceLocation(event.location, 1);\n\t\t\t\tthis.report(event.target, `Multiple <h1> are not allowed`, location);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\troot.h1Count++;\n\t\t}\n\n\t\t/* allow same level or decreasing to any level (e.g. from h4 to h2) */\n\t\tif (level <= root.current) {\n\t\t\troot.current = level;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.checkLevelIncrementation(root, event, level);\n\n\t\troot.current = level;\n\t}\n\n\t/**\n\t * Validate heading level was only incremented by one.\n\t */\n\tprivate checkLevelIncrementation(\n\t\troot: SectioningRoot,\n\t\tevent: TagStartEvent,\n\t\tlevel: number,\n\t): void {\n\t\tconst expected = root.current + 1;\n\n\t\t/* check if the new level is the expected one (headings with higher ranks\n\t\t * are skipped already) */\n\t\tif (level === expected) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* if this is the initial heading of the document it is compared to the\n\t\t * minimal allowed (default h1) */\n\t\tconst isInitial = this.stack.length === 1 && expected === 1;\n\t\tif (isInitial && level <= this.minInitialRank) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* if we reach this far the heading level is not accepted */\n\t\tconst location = sliceLocation(event.location, 1);\n\t\tif (root.current > 0) {\n\t\t\tconst expectedTag = `<h${String(expected)}>`;\n\t\t\tconst actualTag = `<h${String(level)}>`;\n\t\t\tconst msg = `Heading level can only increase by one, expected ${expectedTag} but got ${actualTag}`;\n\t\t\tthis.report(event.target, msg, location);\n\t\t} else {\n\t\t\tthis.checkInitialLevel(event, location, level, expected);\n\t\t}\n\t}\n\n\tprivate checkInitialLevel(\n\t\tevent: TagStartEvent,\n\t\tlocation: Location,\n\t\tlevel: number,\n\t\texpected: number,\n\t): void {\n\t\tconst expectedTag = `<h${String(expected)}>`;\n\t\tconst actualTag = `<h${String(level)}>`;\n\t\tif (this.stack.length === 1) {\n\t\t\tconst msg =\n\t\t\t\tthis.minInitialRank > 1\n\t\t\t\t\t? `Initial heading level must be <h${String(this.minInitialRank)}> or higher rank but got ${actualTag}`\n\t\t\t\t\t: `Initial heading level must be ${expectedTag} but got ${actualTag}`;\n\t\t\tthis.report(event.target, msg, location);\n\t\t} else {\n\t\t\tconst prevRoot = this.getPrevRoot();\n\t\t\tconst prevRootExpected = prevRoot.current + 1;\n\n\t\t\tif (level > prevRootExpected) {\n\t\t\t\tif (expected === prevRootExpected) {\n\t\t\t\t\tconst msg = `Initial heading level for sectioning root must be ${expectedTag} but got ${actualTag}`;\n\t\t\t\t\tthis.report(event.target, msg, location);\n\t\t\t\t} else {\n\t\t\t\t\tconst msg = `Initial heading level for sectioning root must be between ${expectedTag} and <h${String(prevRootExpected)}> but got ${actualTag}`;\n\t\t\t\t\tthis.report(event.target, msg, location);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Check if the current element is a sectioning root and push a new root entry\n\t * on the stack if it is.\n\t */\n\tprivate onTagReady(event: TagReadyEvent): void {\n\t\tconst { target } = event;\n\t\tif (this.isSectioningRoot(target)) {\n\t\t\tthis.stack.push({\n\t\t\t\tnode: target.unique,\n\t\t\t\tcurrent: 0,\n\t\t\t\th1Count: 0,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Check if the current element being closed is the element which opened the\n\t * current sectioning root, in which case the entry is popped from the stack.\n\t */\n\tprivate onTagClose(event: TagEndEvent): void {\n\t\tconst { previous: target } = event;\n\t\tconst root = this.getCurrentRoot();\n\t\tif (target.unique !== root.node) {\n\t\t\treturn;\n\t\t}\n\t\tthis.stack.pop();\n\t}\n\n\tprivate getPrevRoot(): SectioningRoot {\n\t\treturn this.stack[this.stack.length - 2];\n\t}\n\n\tprivate getCurrentRoot(): SectioningRoot {\n\t\treturn this.stack[this.stack.length - 1];\n\t}\n\n\tprivate isSectioningRoot(node: HtmlElement): boolean {\n\t\tconst context: SelectorContext = {\n\t\t\tscope: node,\n\t\t};\n\t\treturn this.sectionRoots.some((it) => it.match(node, context));\n\t}\n}\n","import { type HtmlElement } from \"../../dom\";\nimport { type MetaElement } from \"../../meta\";\nimport { isHTMLHidden, isInert, isStyleHidden } from \"./a11y\";\n\ndeclare module \"../../dom/cache\" {\n\texport interface DOMNodeCache {\n\t\t[FOCUSABLE_CACHE]: boolean;\n\t}\n}\n\nconst FOCUSABLE_CACHE = Symbol(isFocusable.name);\n\nfunction isDisabled(element: HtmlElement, meta: MetaElement): boolean {\n\tif (!meta.formAssociated?.disablable) {\n\t\treturn false;\n\t}\n\n\tconst disabled = element.matches(\"[disabled]\");\n\tif (disabled) {\n\t\treturn true;\n\t}\n\n\tconst fieldset = element.closest(\"fieldset[disabled]\");\n\tif (fieldset) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction isFocusableImpl(element: HtmlElement): boolean {\n\t/* if the element is hidden it is not focusable */\n\tif (isHTMLHidden(element) || isInert(element) || isStyleHidden(element)) {\n\t\treturn false;\n\t}\n\n\tconst { tabIndex, meta } = element;\n\n\t/* if tabindex is present (no matter the value) it takes precedence over\n\tmetadata as it can be used to disable otherwise focusable elements */\n\tif (tabIndex !== null) {\n\t\treturn tabIndex >= 0;\n\t}\n\n\tif (!meta) {\n\t\treturn false;\n\t}\n\n\tif (isDisabled(element, meta)) {\n\t\treturn false;\n\t}\n\n\t/* normally when this is called focusable has already been computed to a\n\t * concrete boolean (see [[Meta.resolve]]), if `isFocusable` is called before\n\t * the element is fully constructed and resolved we cannot know if the element\n\t * is actually focusable or not so consider anything that might ever be\n\t * focusable as focusable. */\n\treturn Boolean(meta.focusable);\n}\n\n/**\n * Tests if an element is focusable.\n *\n * @internal\n */\nexport function isFocusable(element: HtmlElement): boolean {\n\tconst cached = element.cacheGet(FOCUSABLE_CACHE);\n\t/* istanbul ignore next: no need to test cache */\n\tif (cached) {\n\t\treturn cached;\n\t}\n\treturn element.cacheSet(FOCUSABLE_CACHE, isFocusableImpl(element));\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { isAriaHidden } from \"./helper/a11y\";\nimport { isFocusable } from \"./helper/is-focusable\";\n\nexport type RuleContext = \"parent\" | \"self\";\n\nexport default class HiddenFocusable extends Rule<RuleContext> {\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\tconst byParent =\n\t\t\tcontext === \"parent\"\n\t\t\t\t? \" In this case it is being hidden by an ancestor with `aria-hidden.`\"\n\t\t\t\t: \"\";\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t`\\`aria-hidden\\` cannot be used on focusable elements.${byParent}`,\n\t\t\t\t\"\",\n\t\t\t\t\"When focusable elements are hidden with `aria-hidden` they are still reachable using conventional means such as a mouse or keyboard but won't be exposed to assistive technology (AT).\",\n\t\t\t\t\"This is often confusing for users of AT such as screenreaders.\",\n\t\t\t\t\"\",\n\t\t\t\t\"To fix this either:\",\n\t\t\t\t\" - Remove `aria-hidden`.\",\n\t\t\t\t\" - Remove the element from the DOM instead.\",\n\t\t\t\t' - Use `tabindex=\"-1\"` to remove the element from tab order.',\n\t\t\t\t\" - Use `hidden`, `inert` or similar means to hide or disable the element.\",\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tconst focusable = this.getTagsWithProperty(\"focusable\");\n\t\tconst selector = [\"[tabindex]\", ...focusable].join(\",\");\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tfor (const element of document.querySelectorAll(selector)) {\n\t\t\t\tif (isFocusable(element) && isAriaHidden(element)) {\n\t\t\t\t\tthis.reportElement(element);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate reportElement(element: HtmlElement): void {\n\t\tconst attribute = element.getAttribute(\"aria-hidden\");\n\t\tconst message = attribute\n\t\t\t? `aria-hidden cannot be used on focusable elements`\n\t\t\t: `aria-hidden cannot be used on focusable elements (hidden by ancestor element)`;\n\t\tconst location = attribute ? attribute.keyLocation : element.location;\n\t\tconst context = attribute ? \"self\" : \"parent\";\n\t\tthis.report({\n\t\t\tnode: element,\n\t\t\tmessage,\n\t\t\tlocation,\n\t\t\tcontext,\n\t\t});\n\t}\n}\n","import { DynamicValue } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, ruleDocumentationUrl } from \"../rule\";\nimport {\n\ttype BasePatternRuleContext,\n\ttype BasePatternRuleOptions,\n\tBasePatternRule,\n} from \"./base-pattern-rule\";\n\nconst defaults: BasePatternRuleOptions = {\n\tpattern: \"kebabcase\",\n};\n\nexport default class IdPattern extends BasePatternRule {\n\tpublic constructor(options: Partial<BasePatternRuleOptions>) {\n\t\tsuper(\"id\", { ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn BasePatternRule.schema();\n\t}\n\n\tpublic documentation(context: BasePatternRuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: this.description(context),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tconst { target, key, value, valueLocation } = event;\n\n\t\t\tif (key.toLowerCase() !== \"id\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* consider dynamic value as always matching the pattern */\n\t\t\tif (value instanceof DynamicValue) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* omitted value is always valid */\n\t\t\tif (value === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.validateValue(target, value, valueLocation);\n\t\t});\n\t}\n}\n","/* eslint-disable sonarjs/no-duplicate-string -- wont be easier to read or manage with constants */\n\nimport { type TagReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleContext {\n\tattribute: string;\n\ttype: string;\n}\n\nconst restricted = new Map<string, string[]>([\n\t[\"accept\", [\"file\"]],\n\t[\"alt\", [\"image\"]],\n\t[\"capture\", [\"file\"]],\n\t[\"checked\", [\"checkbox\", \"radio\"]],\n\t[\"dirname\", [\"text\", \"search\"]],\n\t[\"height\", [\"image\"]],\n\t[\n\t\t\"list\",\n\t\t[\n\t\t\t\"text\",\n\t\t\t\"search\",\n\t\t\t\"url\",\n\t\t\t\"tel\",\n\t\t\t\"email\",\n\t\t\t\"date\",\n\t\t\t\"month\",\n\t\t\t\"week\",\n\t\t\t\"time\",\n\t\t\t\"datetime-local\",\n\t\t\t\"number\",\n\t\t\t\"range\",\n\t\t\t\"color\",\n\t\t],\n\t],\n\t[\"max\", [\"date\", \"month\", \"week\", \"time\", \"datetime-local\", \"number\", \"range\"]],\n\t[\"maxlength\", [\"text\", \"search\", \"url\", \"tel\", \"email\", \"password\"]],\n\t[\"min\", [\"date\", \"month\", \"week\", \"time\", \"datetime-local\", \"number\", \"range\"]],\n\t[\"minlength\", [\"text\", \"search\", \"url\", \"tel\", \"email\", \"password\"]],\n\t[\"multiple\", [\"email\", \"file\"]],\n\t[\"pattern\", [\"text\", \"search\", \"url\", \"tel\", \"email\", \"password\"]],\n\t[\"placeholder\", [\"text\", \"search\", \"url\", \"tel\", \"email\", \"password\", \"number\"]],\n\t[\n\t\t\"readonly\",\n\t\t[\n\t\t\t\"text\",\n\t\t\t\"search\",\n\t\t\t\"url\",\n\t\t\t\"tel\",\n\t\t\t\"email\",\n\t\t\t\"password\",\n\t\t\t\"date\",\n\t\t\t\"month\",\n\t\t\t\"week\",\n\t\t\t\"time\",\n\t\t\t\"datetime-local\",\n\t\t\t\"number\",\n\t\t],\n\t],\n\t[\n\t\t\"required\",\n\t\t[\n\t\t\t\"text\",\n\t\t\t\"search\",\n\t\t\t\"url\",\n\t\t\t\"tel\",\n\t\t\t\"email\",\n\t\t\t\"password\",\n\t\t\t\"date\",\n\t\t\t\"month\",\n\t\t\t\"week\",\n\t\t\t\"time\",\n\t\t\t\"datetime-local\",\n\t\t\t\"number\",\n\t\t\t\"checkbox\",\n\t\t\t\"radio\",\n\t\t\t\"file\",\n\t\t],\n\t],\n\t[\"size\", [\"text\", \"search\", \"url\", \"tel\", \"email\", \"password\"]],\n\t[\"src\", [\"image\"]],\n\t[\"step\", [\"date\", \"month\", \"week\", \"time\", \"datetime-local\", \"number\", \"range\"]],\n\t[\"width\", [\"image\"]],\n]);\n\nfunction isInput(event: TagReadyEvent): boolean {\n\tconst { target } = event;\n\treturn target.is(\"input\");\n}\n\nexport default class InputAttributes extends Rule<RuleContext> {\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\tconst { attribute, type } = context;\n\t\tconst summary = `Attribute \\`${attribute}\\` is not allowed on \\`<input type=\"${type}\">\\`\\n`;\n\t\tconst details = `\\`${attribute}\\` can only be used when \\`type\\` is:`;\n\t\tconst list = restricted.get(attribute)?.map((it) => `- \\`${it}\\``) ?? [];\n\t\treturn {\n\t\t\tdescription: [summary, details, ...list].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:ready\", isInput, (event: TagReadyEvent) => {\n\t\t\tconst { target } = event;\n\n\t\t\tconst type = target.getAttribute(\"type\");\n\t\t\tif (!type || type.isDynamic || !type.value) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst typeValue = type.value.toString();\n\n\t\t\tfor (const attr of target.attributes) {\n\t\t\t\tconst validTypes = restricted.get(attr.key);\n\t\t\t\tif (!validTypes) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (validTypes.includes(typeValue)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst context: RuleContext = {\n\t\t\t\t\tattribute: attr.key,\n\t\t\t\t\ttype: typeValue,\n\t\t\t\t};\n\t\t\t\tconst message = `Attribute \"${attr.key}\" is not allowed on <input type=\"${typeValue}\">`;\n\t\t\t\tthis.report(target, message, attr.keyLocation, context);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type DOMTree, type HtmlElement, DynamicValue, generateIdSelector } from \"../../dom\";\nimport { inAccessibilityTree } from \"./a11y\";\nimport { hasAltText } from \"./has-alt-text\";\nimport { classifyNodeText, TextClassification } from \"./text\";\n\ndeclare module \"../../dom/cache\" {\n\texport interface DOMNodeCache {\n\t\t[HAS_ACCESSIBLE_TEXT_CACHE]: boolean;\n\t}\n}\n\ninterface Context {\n\tdocument: DOMTree | HtmlElement;\n\treference: HtmlElement | null;\n}\n\nconst HAS_ACCESSIBLE_TEXT_CACHE = Symbol(hasAccessibleName.name);\n\nfunction isHidden(node: HtmlElement, context: Context): boolean {\n\tconst { reference } = context;\n\tif (reference?.isSameNode(node)) {\n\t\treturn false;\n\t} else {\n\t\treturn !inAccessibilityTree(node);\n\t}\n}\n\nfunction hasImgAltText(node: HtmlElement, context: Context): boolean {\n\tif (node.is(\"img\")) {\n\t\treturn hasAltText(node);\n\t} else if (node.is(\"svg\")) {\n\t\treturn node.textContent.trim() !== \"\";\n\t} else {\n\t\tfor (const img of node.querySelectorAll(\"img, svg\")) {\n\t\t\tconst hasName = hasAccessibleNameImpl(img, context);\n\t\t\tif (hasName) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n}\n\nfunction hasLabel(node: HtmlElement): boolean {\n\tconst value = node.getAttributeValue(\"aria-label\") ?? \"\";\n\treturn Boolean(value.trim());\n}\n\nfunction isLabelledby(node: HtmlElement, context: Context): boolean {\n\tconst { document, reference } = context;\n\n\t/* if we already have resolved one level of reference we don't resolve another\n\t * level (as per accname step 2B) */\n\tif (reference) {\n\t\treturn false;\n\t}\n\n\tconst ariaLabelledby = node.ariaLabelledby;\n\n\t/* consider dynamic aria-labelledby as having a name as we cannot resolve it\n\t * so no way to prove correctness */\n\tif (ariaLabelledby instanceof DynamicValue) {\n\t\treturn true;\n\t}\n\n\t/* ignore elements without aria-labelledby */\n\tif (ariaLabelledby === null) {\n\t\treturn false;\n\t}\n\n\treturn ariaLabelledby.some((id) => {\n\t\tconst selector = generateIdSelector(id);\n\t\treturn document.querySelectorAll(selector).some((child) => {\n\t\t\treturn hasAccessibleNameImpl(child, {\n\t\t\t\tdocument,\n\t\t\t\treference: child,\n\t\t\t});\n\t\t});\n\t});\n}\n\n/**\n * This algorithm is based on [\"Accessible Name and Description Computation\n * 1.2\"][accname] with some exceptions:\n *\n * It doesn't compute the actual name but only the presence of one, e.g. if a\n * non-empty flat string is present the algorithm terminates with a positive\n * result.\n *\n * It takes some optimization shortcuts such as starting with step F as it\n * would be more common usage and as there is no actual name being computed\n * the order wont matter.\n *\n * [accname]: https://w3c.github.io/accname\n */\nfunction hasAccessibleNameImpl(current: HtmlElement, context: Context): boolean {\n\tconst { reference } = context;\n\n\t/* if this element is hidden (see function for exceptions) it does not have an accessible name */\n\tif (isHidden(current, context)) {\n\t\treturn false;\n\t}\n\n\t/* special case: when this element is directly referenced by aria-labelledby\n\t * we ignore `hidden` */\n\tconst ignoreHiddenRoot = Boolean(reference?.isSameNode(current));\n\n\tconst text = classifyNodeText(current, { accessible: true, ignoreHiddenRoot });\n\tif (text !== TextClassification.EMPTY_TEXT) {\n\t\treturn true;\n\t}\n\n\tif (hasImgAltText(current, context)) {\n\t\treturn true;\n\t}\n\n\tif (hasLabel(current)) {\n\t\treturn true;\n\t}\n\n\tif (isLabelledby(current, context)) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\n/**\n * Returns `true` if the element has an accessible name.\n *\n * It does not yet consider if the elements role prohibits naming, e.g. a `<p>`\n * element will still show up as having an accessible name.\n *\n * @public\n * @param document - Document element.\n * @param current - The element to get accessible name for\n * @returns `true` if the element has an accessible name.\n */\nexport function hasAccessibleName(document: DOMTree | HtmlElement, current: HtmlElement): boolean {\n\t/* istanbul ignore next: we're not testing cache */\n\tif (current.cacheExists(HAS_ACCESSIBLE_TEXT_CACHE)) {\n\t\treturn Boolean(current.cacheGet(HAS_ACCESSIBLE_TEXT_CACHE));\n\t}\n\n\tconst result = hasAccessibleNameImpl(current, {\n\t\tdocument,\n\t\treference: null,\n\t});\n\treturn current.cacheSet(HAS_ACCESSIBLE_TEXT_CACHE, result);\n}\n","import { type DOMTree, type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { inAccessibilityTree } from \"./helper/a11y\";\nimport { hasAccessibleName } from \"./helper/has-accessible-name\";\n\nfunction isIgnored(node: HtmlElement): boolean {\n\tif (node.is(\"input\")) {\n\t\tconst type = node.getAttributeValue(\"type\")?.toLowerCase();\n\t\tconst ignored = [\"hidden\", \"submit\", \"reset\", \"button\"];\n\t\treturn Boolean(type && ignored.includes(type));\n\t}\n\treturn false;\n}\n\nexport default class InputMissingLabel extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t\"Each form element must have an a label or accessible name.\",\n\t\t\t\t'Typically this is implemented using a `<label for=\"..\">` element describing the purpose of the form element.',\n\t\t\t\t\"\",\n\t\t\t\t\"This can be resolved in one of the following ways:\",\n\t\t\t\t\"\",\n\t\t\t\t' - Use an associated `<label for=\"..\">` element.',\n\t\t\t\t\" - Use a nested `<label>` as parent element.\",\n\t\t\t\t\" - Use `aria-label` or `aria-labelledby` attributes.\",\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst root = event.document;\n\t\t\tfor (const elem of root.querySelectorAll(\"input, textarea, select\")) {\n\t\t\t\tthis.validateInput(root, elem);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate validateInput(root: DOMTree, elem: HtmlElement): void {\n\t\tif (!inAccessibilityTree(elem)) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* hidden, submit, reset or button should not have label */\n\t\tif (isIgnored(elem)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (hasAccessibleName(root, elem)) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet label: HtmlElement[] = [];\n\n\t\t/* try to find label by id */\n\t\tif ((label = findLabelById(root, elem.id)).length > 0) {\n\t\t\tthis.validateLabel(root, elem, label);\n\t\t\treturn;\n\t\t}\n\n\t\t/* try to find parent label (input nested in label) */\n\t\tif ((label = findLabelByParent(elem)).length > 0) {\n\t\t\tthis.validateLabel(root, elem, label);\n\t\t\treturn;\n\t\t}\n\n\t\tif (elem.hasAttribute(\"aria-label\")) {\n\t\t\tthis.report(elem, `<${elem.tagName}> element has aria-label but label has no text`);\n\t\t} else if (elem.hasAttribute(\"aria-labelledby\")) {\n\t\t\tthis.report(\n\t\t\t\telem,\n\t\t\t\t`<${elem.tagName}> element has aria-labelledby but referenced element has no text`,\n\t\t\t);\n\t\t} else {\n\t\t\tthis.report(elem, `<${elem.tagName}> element does not have a <label>`);\n\t\t}\n\t}\n\n\t/**\n\t * Reports error if none of the labels are accessible.\n\t */\n\tprivate validateLabel(root: DOMTree, elem: HtmlElement, labels: HtmlElement[]): void {\n\t\tconst visible = labels.filter(inAccessibilityTree);\n\t\tif (visible.length === 0) {\n\t\t\tthis.report(elem, `<${elem.tagName}> element has <label> but <label> element is hidden`);\n\t\t\treturn;\n\t\t}\n\t\tif (!labels.some((label) => hasAccessibleName(root, label))) {\n\t\t\tthis.report(elem, `<${elem.tagName}> element has <label> but <label> has no text`);\n\t\t}\n\t}\n}\n\nfunction findLabelById(root: DOMTree, id: string | null): HtmlElement[] {\n\tif (!id) return [];\n\treturn root.querySelectorAll(`label[for=\"${id}\"]`);\n}\n\nfunction findLabelByParent(el: HtmlElement): HtmlElement[] {\n\tlet cur = el.parent;\n\twhile (cur) {\n\t\tif (cur.is(\"label\")) {\n\t\t\treturn [cur];\n\t\t}\n\t\tcur = cur.parent;\n\t}\n\treturn [];\n}\n","import { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleOptions {\n\tmaxlength: number;\n}\n\nconst defaults: RuleOptions = {\n\tmaxlength: 70,\n};\n\nexport default class LongTitle extends Rule<void, RuleOptions> {\n\tprivate maxlength: number;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.maxlength = this.options.maxlength;\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tmaxlength: {\n\t\t\t\ttype: \"number\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `Search engines truncates titles with long text, possibly down-ranking the page in the process.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event) => {\n\t\t\tconst node = event.previous;\n\t\t\tif (node.tagName !== \"title\") return;\n\n\t\t\tconst text = node.textContent;\n\t\t\tif (text.length > this.maxlength) {\n\t\t\t\tthis.report(node, `title text cannot be longer than ${String(this.maxlength)} characters`);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type Location } from \"../context\";\nimport { type HtmlElement } from \"../dom\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleOptions {\n\tallowLongDelay: boolean;\n}\n\nconst defaults: RuleOptions = {\n\tallowLongDelay: false,\n};\n\nexport default class MetaRefresh extends Rule<void, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `Meta refresh directive must use the \\`0;url=...\\` format. Non-zero values for time interval is disallowed as people with assistive technology might be unable to read and understand the page content before automatically reloading. For the same reason skipping the url is disallowed as it would put the browser in an infinite loop reloading the same page over and over again.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"element:ready\", ({ target }) => {\n\t\t\t/* only handle <meta> */\n\t\t\tif (!target.is(\"meta\")) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* only handle refresh */\n\t\t\tconst httpEquiv = target.getAttributeValue(\"http-equiv\");\n\t\t\tif (httpEquiv !== \"refresh\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ensure content attribute is set */\n\t\t\tconst content = target.getAttribute(\"content\");\n\t\t\tif (!content?.value || content.isDynamic) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ensure content attribute is valid */\n\t\t\tconst location = content.valueLocation;\n\t\t\tconst value = parseContent(content.value.toString());\n\t\t\tif (!value) {\n\t\t\t\tthis.report(target, \"Malformed meta refresh directive\", location);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { delay, url } = value;\n\t\t\tthis.validateDelay(target, location, delay, url);\n\t\t});\n\t}\n\n\tprivate validateDelay(\n\t\ttarget: HtmlElement,\n\t\tlocation: Location | null,\n\t\tdelay: number,\n\t\turl: string,\n\t): void {\n\t\tconst { allowLongDelay } = this.options;\n\n\t\t/* delay over 20h is allowed only if option is enabled */\n\t\tif (allowLongDelay && delay > 72000) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* if refresh is instant a url must be provided or it will be an infinite refresh loop */\n\t\tif (!url && delay === 0) {\n\t\t\tthis.report(target, \"Don't use instant meta refresh to reload the page\", location);\n\t\t\treturn;\n\t\t}\n\n\t\t/* ensure delay is exactly 0 seconds */\n\t\tif (delay !== 0) {\n\t\t\tconst message = allowLongDelay\n\t\t\t\t? \"Meta refresh must be instant (0 second delay) or greater than 20 hours (72000 second delay)\"\n\t\t\t\t: \"Meta refresh must be instant (0 second delay)\";\n\t\t\tthis.report(target, message, location);\n\t\t}\n\t}\n}\n\nfunction parseContent(text: string): { delay: number; url: string } | null {\n\tconst match = text.match(/^(\\d+)(?:\\s*;\\s*url=(.*))?/i);\n\tif (match) {\n\t\treturn {\n\t\t\tdelay: parseInt(match[1], 10),\n\t\t\turl: match[2],\n\t\t};\n\t} else {\n\t\treturn null;\n\t}\n}\n","import { type Attribute, DynamicValue } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nfunction getName(attr: Attribute): string | null {\n\tconst name = attr.value;\n\tif (!name || name instanceof DynamicValue) {\n\t\treturn null;\n\t}\n\n\treturn name;\n}\n\nexport default class MapDupName extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"`<map>` must have a unique name, it cannot be the same name as another `<map>` element\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tconst maps = document.querySelectorAll(\"map[name]\");\n\n\t\t\tconst names = new Set<string>();\n\n\t\t\tfor (const map of maps) {\n\t\t\t\tconst attr = map.getAttribute(\"name\");\n\t\t\t\t/* istanbul ignore next -- should not happen as querySelector matches\n\t\t\t\t * only the elements with the name attribute */\n\t\t\t\tif (!attr) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst name = getName(attr);\n\t\t\t\tif (!name) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (names.has(name)) {\n\t\t\t\t\tthis.report({\n\t\t\t\t\t\tnode: map,\n\t\t\t\t\t\tmessage: `<map> name must be unique`,\n\t\t\t\t\t\tlocation: attr.keyLocation,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tnames.add(name);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { DynamicValue, type Attribute } from \"../dom\";\nimport { type TagReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nfunction isRelevant(event: TagReadyEvent): boolean {\n\treturn event.target.is(\"map\");\n}\n\nfunction hasStaticValue(\n\tattr: Attribute | null,\n): attr is Attribute & { readonly value: string | null } {\n\treturn Boolean(attr && !(attr.value instanceof DynamicValue));\n}\n\nexport default class MapIdName extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"When the `id` attribute is present on a `<map>` element it must be equal to the `name` attribute.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:ready\", isRelevant, (event: TagReadyEvent) => {\n\t\t\tconst { target } = event;\n\t\t\tconst id = target.getAttribute(\"id\");\n\t\t\tconst name = target.getAttribute(\"name\");\n\n\t\t\t// /* ignore missing attributes or dynamic value */\n\t\t\tif (!hasStaticValue(id) || !hasStaticValue(name)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore when id and name is the same */\n\t\t\tif (id.value === name.value) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.report({\n\t\t\t\tnode: event.target,\n\t\t\t\tmessage: `\"id\" and \"name\" attribute must be the same on <map> elements`,\n\t\t\t\tlocation: id.valueLocation ?? name.valueLocation,\n\t\t\t});\n\t\t});\n\t}\n}\n","import { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class MissingDoctype extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"Requires that the document contains a doctype.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst dom = event.document;\n\t\t\tif (!dom.doctype) {\n\t\t\t\tthis.report(dom.root, \"Document is missing doctype\");\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { type HtmlElement } from \"../dom\";\n\nexport default class MultipleLabeledControls extends Rule {\n\tprivate labelable: string = \"\";\n\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `A \\`<label>\\` element can only be associated with one control at a time.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.labelable = this.getTagsWithProperty(\"labelable\").join(\",\");\n\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tconst labels = document.querySelectorAll(\"label\");\n\t\t\tfor (const label of labels) {\n\t\t\t\t/* no error if it references 0 or 1 controls */\n\t\t\t\tconst numControls = this.getNumLabledControls(label);\n\t\t\t\tif (numControls <= 1) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis.report(label, \"<label> is associated with multiple controls\", label.location);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate getNumLabledControls(src: HtmlElement): number {\n\t\t/* get all controls wrapped by label element */\n\t\tconst controls = src\n\t\t\t.querySelectorAll(this.labelable)\n\t\t\t.filter((node) => node.meta?.labelable)\n\t\t\t.map((node) => node.id);\n\n\t\t/* only count wrapped controls if the \"for\" attribute is missing or static,\n\t\t * for dynamic \"for\" attributes it is better to run in document mode later */\n\t\tconst attr = src.getAttribute(\"for\");\n\t\tif (!attr || attr.isDynamic || !attr.value) {\n\t\t\treturn controls.length;\n\t\t}\n\n\t\t/* if \"for\" attribute references a wrapped element it should not be counted\n\t\t * multiple times */\n\t\tconst redundant = controls.includes(attr.value.toString());\n\t\tif (redundant) {\n\t\t\treturn controls.length;\n\t\t}\n\n\t\t/* has \"for\" attribute pointing to element outside wrapped controls */\n\t\treturn controls.length + 1;\n\t}\n}\n","import { DynamicValue } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, ruleDocumentationUrl } from \"../rule\";\nimport {\n\ttype BasePatternRuleContext,\n\ttype BasePatternRuleOptions,\n\tBasePatternRule,\n} from \"./base-pattern-rule\";\n\nconst defaults: BasePatternRuleOptions = {\n\tpattern: \"camelcase\",\n};\n\nexport default class NamePattern extends BasePatternRule {\n\tpublic constructor(options: Partial<BasePatternRuleOptions>) {\n\t\tsuper(\"name\", { ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn BasePatternRule.schema();\n\t}\n\n\tpublic documentation(context: BasePatternRuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: this.description(context),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tconst { target, key, value, valueLocation } = event;\n\t\t\tconst { meta } = target;\n\n\t\t\t/* only handle form controls */\n\t\t\tif (!meta?.formAssociated?.listed) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* only handle name attribute */\n\t\t\tif (key.toLowerCase() !== \"name\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* consider dynamic value as always matching the pattern */\n\t\t\tif (value instanceof DynamicValue) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* omitted value is always valid */\n\t\t\tif (value === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst name = value.endsWith(\"[]\") ? value.slice(0, -2) : value;\n\t\t\tthis.validateValue(target, name, valueLocation);\n\t\t});\n\t}\n}\n","import { DOMTokenList, DynamicValue } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleContext {\n\trole: string;\n}\n\nconst abstractRoles = [\n\t\"command\",\n\t\"composite\",\n\t\"input\",\n\t\"landmark\",\n\t\"range\",\n\t\"roletype\",\n\t\"section\",\n\t\"sectionhead\",\n\t\"select\",\n\t\"structure\",\n\t\"widget\",\n\t\"window\",\n];\n\nfunction isRelevant(event: AttributeEvent): boolean {\n\treturn event.key === \"role\";\n}\n\nexport default class NoAbstractRole extends Rule<RuleContext> {\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t`Role \\`\"${context.role}\"\\` is abstract and must not be used.`,\n\t\t\t\t\"\",\n\t\t\t\t\"WAI-ARIA defines a list of [abstract roles](https://www.w3.org/TR/wai-aria-1.2/#abstract_roles) which cannot be used by authors:\",\n\t\t\t\t\"\",\n\t\t\t\t...abstractRoles.map((it) => `- \\`\"${it}\"\\``),\n\t\t\t\t\"\",\n\t\t\t\t`Use one of the defined subclass roles for \\`\"${context.role}\"\\` instead.`,\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", isRelevant, (event: AttributeEvent) => {\n\t\t\tconst roles = event.value;\n\n\t\t\t/* ignore missing value and dynamic values */\n\t\t\tif (!roles || roles instanceof DynamicValue) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst tokens = new DOMTokenList(roles, event.valueLocation);\n\t\t\tfor (const { item: role, location } of tokens.iterator()) {\n\t\t\t\t/* ignore roles which are not abstract */\n\t\t\t\tif (!abstractRoles.includes(role)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis.report({\n\t\t\t\t\tnode: event.target,\n\t\t\t\t\tmessage: `Role \"{{ role }}\" is abstract and must not be used`,\n\t\t\t\t\tlocation,\n\t\t\t\t\tcontext: {\n\t\t\t\t\t\trole,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n","import { DynamicValue } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleContext {\n\ttagName: string;\n}\n\ninterface RuleOptions {\n\tinclude: string[] | null;\n\texclude: string[] | null;\n}\n\nconst defaults: RuleOptions = {\n\tinclude: null,\n\texclude: null,\n};\n\nexport default class NoAutoplay extends Rule<RuleContext, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t`The autoplay attribute is not allowed on <${context.tagName}>.`,\n\t\t\t\t\"Autoplaying content can be disruptive for users and has accessibilty concerns.\",\n\t\t\t\t\"Prefer to let the user control playback.\",\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\texclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tinclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\t/* only handle autoplay attribute */\n\t\t\tif (event.key.toLowerCase() !== \"autoplay\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore dynamic values */\n\t\t\tif (event.value && event.value instanceof DynamicValue) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore tagnames configured to be ignored */\n\t\t\tconst tagName = event.target.tagName;\n\t\t\tif (this.isKeywordIgnored(tagName)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* report error */\n\t\t\tconst context: RuleContext = { tagName };\n\t\t\tconst location = event.location;\n\t\t\tthis.report(\n\t\t\t\tevent.target,\n\t\t\t\t`The autoplay attribute is not allowed on <${tagName}>`,\n\t\t\t\tlocation,\n\t\t\t\tcontext,\n\t\t\t);\n\t\t});\n\t}\n}\n","import { type ConditionalEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class NoConditionalComment extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"Microsoft Internet Explorer previously supported using special HTML comments (conditional comments) for targeting specific versions of IE but since IE 10 it is deprecated and not supported in standards mode.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"conditional\", (event: ConditionalEvent) => {\n\t\t\tthis.report(event.parent, \"Use of conditional comments are deprecated\", event.location);\n\t\t});\n\t}\n}\n","import { type AttributeEvent } from \"../event\";\nimport { type MetaAttribute } from \"../meta\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class NoDeprecatedAttr extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"HTML5 deprecated many old attributes.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tconst node = event.target;\n\t\t\tconst meta = node.meta;\n\t\t\tconst attr = event.key.toLowerCase();\n\n\t\t\t/* cannot validate if meta isn't known */\n\t\t\tif (meta === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst metaAttribute = meta.attributes[attr] as MetaAttribute | undefined;\n\t\t\tif (!metaAttribute) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst deprecated = metaAttribute.deprecated;\n\t\t\tif (deprecated) {\n\t\t\t\tthis.report(\n\t\t\t\t\tnode,\n\t\t\t\t\t`Attribute \"${event.key}\" is deprecated on <${node.tagName}> element`,\n\t\t\t\t\tevent.keyLocation,\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class NoDupAttr extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"HTML disallows two or more attributes with the same (case-insensitive) name.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tlet attr: Record<string, boolean> = {};\n\n\t\tthis.on(\"tag:start\", () => {\n\t\t\t/* reset any time a new tag is opened */\n\t\t\tattr = {};\n\t\t});\n\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\t/* ignore dynamic attributes aliasing another, e.g class and ng-class */\n\t\t\tif (event.originalAttribute) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst name = event.key.toLowerCase();\n\t\t\tif (name in attr) {\n\t\t\t\tthis.report(event.target, `Attribute \"${name}\" duplicated`, event.keyLocation);\n\t\t\t}\n\t\t\tattr[event.key] = true;\n\t\t});\n\t}\n}\n","import { DOMTokenList } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class NoDupClass extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"Prevents unnecessary duplication of class names.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tif (event.key.toLowerCase() !== \"class\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst classes = new DOMTokenList(event.value, event.valueLocation);\n\t\t\tconst unique = new Set<string>();\n\t\t\tclasses.forEach((cur: string, index: number) => {\n\t\t\t\tif (unique.has(cur)) {\n\t\t\t\t\tconst location = classes.location(index);\n\t\t\t\t\tthis.report(event.target, `Class \"${cur}\" duplicated`, location);\n\t\t\t\t}\n\t\t\t\tunique.add(cur);\n\t\t\t});\n\t\t});\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nconst CACHE_KEY = Symbol(\"no-dup-id\");\n\ndeclare module \"../dom/cache\" {\n\texport interface DOMNodeCache {\n\t\t[CACHE_KEY]: Set<string>;\n\t}\n}\n\nexport default class NoDupID extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"The ID of an element must be unique.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tconst elements = document.querySelectorAll(\"[id]\");\n\t\t\tconst relevant = elements.filter(isRelevant);\n\t\t\tfor (const el of relevant) {\n\t\t\t\tconst attr = el.getAttribute(\"id\");\n\n\t\t\t\t/* istanbul ignore next: this has already been tested in isRelevant once but for type-safety it is checked again */\n\t\t\t\tif (!attr?.value) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst id = attr.value.toString();\n\n\t\t\t\tconst existing = getExisting(el, document.root);\n\n\t\t\t\tif (existing.has(id)) {\n\t\t\t\t\tthis.report(el, `Duplicate ID \"${id}\"`, attr.valueLocation);\n\t\t\t\t}\n\n\t\t\t\texisting.add(id);\n\t\t\t}\n\t\t});\n\t}\n}\n\nfunction getExisting(element: HtmlElement, root: HtmlElement): Set<string> {\n\tconst group = element.closest(\"template\") ?? root;\n\tconst existing = group.cacheGet(CACHE_KEY);\n\tif (existing) {\n\t\treturn existing;\n\t} else {\n\t\tconst existing = new Set<string>();\n\t\treturn group.cacheSet(CACHE_KEY, existing);\n\t}\n}\n\nfunction isRelevant(element: HtmlElement): boolean {\n\tconst attr = element.getAttribute(\"id\");\n\n\t/* istanbul ignore next: can not really happen as querySelector will only return elements with id present */\n\tif (!attr) {\n\t\treturn false;\n\t}\n\n\t/* id without value is not relevant, e.g. <p id></p> */\n\tif (!attr.value) {\n\t\treturn false;\n\t}\n\n\t/* dynamic id (interpolated or otherwise currently unknown value) is not relevant */\n\tif (attr.isDynamic) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n","import { type ElementReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nfunction isRelevant(event: ElementReadyEvent): boolean {\n\treturn event.target.is(\"button\");\n}\n\nexport default class NoImplicitButtonType extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t\"`<button>` is missing recommended `type` attribute\",\n\t\t\t\t\"\",\n\t\t\t\t\"When the `type` attribute is omitted it defaults to `submit`.\",\n\t\t\t\t\"Submit buttons are triggered when a keyboard user presses <kbd>Enter</kbd>.\",\n\t\t\t\t\"\",\n\t\t\t\t\"As this may or may not be inteded this rule enforces that the `type` attribute be explicitly set to one of the valid types:\",\n\t\t\t\t\"\",\n\t\t\t\t\"- `button` - a generic button.\",\n\t\t\t\t\"- `submit` - a submit button.\",\n\t\t\t\t\"- `reset`- a button to reset form fields.\",\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"element:ready\", isRelevant, (event) => {\n\t\t\tconst { target } = event;\n\t\t\tconst attr = target.getAttribute(\"type\");\n\t\t\tif (!attr) {\n\t\t\t\tthis.report({\n\t\t\t\t\tnode: event.target,\n\t\t\t\t\tmessage: `<button> is missing recommended \"type\" attribute`,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type ElementReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nfunction isRelevant(event: ElementReadyEvent): boolean {\n\treturn event.target.is(\"input\");\n}\n\nexport default class NoImplicitInputType extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: [\"`<input>` is missing recommended `type` attribute\"].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"element:ready\", isRelevant, (event) => {\n\t\t\tconst { target } = event;\n\t\t\tconst attr = target.getAttribute(\"type\");\n\t\t\tif (!attr) {\n\t\t\t\tthis.report({\n\t\t\t\t\tnode: event.target,\n\t\t\t\t\tmessage: `<input> is missing recommended \"type\" attribute`,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n","import { NodeClosed } from \"../dom\";\nimport { type TagEndEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class NoImplicitClose extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `Some elements in HTML has optional end tags. When an optional tag is omitted a browser must handle it as if the end tag was present.\n\nOmitted end tags can be ambigious for humans to read and many editors have trouble formatting the markup.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\tconst closed = event.previous;\n\t\t\tconst by = event.target;\n\n\t\t\t/* not set when unclosed elements are being closed by tree, this rule does\n\t\t\t * not consider such events (handled by close-order instead) */\n\t\t\tif (!by) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (closed.closed !== NodeClosed.ImplicitClosed) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst closedByParent =\n\t\t\t\tclosed.parent && closed.parent.tagName === by.tagName; /* <ul><li></ul> */\n\t\t\tconst sameTag = closed.tagName === by.tagName; /* <p>foo<p>bar */\n\n\t\t\tif (closedByParent) {\n\t\t\t\tthis.report(\n\t\t\t\t\tclosed,\n\t\t\t\t\t`Element <${closed.tagName}> is implicitly closed by parent </${by.tagName}>`,\n\t\t\t\t\tclosed.location,\n\t\t\t\t);\n\t\t\t} else if (sameTag) {\n\t\t\t\tthis.report(\n\t\t\t\t\tclosed,\n\t\t\t\t\t`Element <${closed.tagName}> is implicitly closed by sibling`,\n\t\t\t\t\tclosed.location,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.report(\n\t\t\t\t\tclosed,\n\t\t\t\t\t`Element <${closed.tagName}> is implicitly closed by adjacent <${by.tagName}>`,\n\t\t\t\t\tclosed.location,\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type DynamicValue, parseCssDeclaration } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport interface RuleOptions {\n\tinclude: string[] | null;\n\texclude: string[] | null;\n\tallowedProperties: string[];\n}\n\nconst defaults: RuleOptions = {\n\tinclude: null,\n\texclude: null,\n\tallowedProperties: [\"display\"],\n};\n\nexport default class NoInlineStyle extends Rule<void, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\texclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tinclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tallowedProperties: {\n\t\t\t\titems: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t\ttype: \"array\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\tconst text = [\n\t\t\t\"Inline style is not allowed.\\n\",\n\t\t\t\"Inline style is a sign of unstructured CSS. Use class or ID with a separate stylesheet.\\n\",\n\t\t];\n\t\tif (this.options.allowedProperties.length > 0) {\n\t\t\ttext.push(\"Under the current configuration the following CSS properties are allowed:\\n\");\n\t\t\ttext.push(this.options.allowedProperties.map((it) => `- \\`${it}\\``).join(\"\\n\"));\n\t\t}\n\t\treturn {\n\t\t\tdescription: text.join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\n\t\t\t\"attr\",\n\t\t\t(event: AttributeEvent) => this.isRelevant(event),\n\t\t\t(event: AttributeEvent) => {\n\t\t\t\tconst { value } = event;\n\n\t\t\t\tif (this.allPropertiesAllowed(value)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.report(event.target, \"Inline style is not allowed\");\n\t\t\t},\n\t\t);\n\t}\n\n\tprivate isRelevant(event: AttributeEvent): boolean {\n\t\tif (event.key !== \"style\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst { include, exclude } = this.options;\n\t\tconst key = event.originalAttribute ?? event.key;\n\n\t\t/* ignore attributes not present in \"include\" */\n\t\tif (include && !include.includes(key)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t/* ignore attributes present in \"exclude\" */\n\t\tif (exclude?.includes(key)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tprivate allPropertiesAllowed(value: string | DynamicValue | null): boolean {\n\t\tconst allowProperties = this.options.allowedProperties;\n\n\t\t/* quick path: no properties are allowed, no need to check each one individually */\n\t\tif (allowProperties.length === 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst declarations = Object.keys(parseCssDeclaration(value));\n\t\treturn (\n\t\t\tdeclarations.length > 0 &&\n\t\t\tdeclarations.every((it) => {\n\t\t\t\treturn allowProperties.includes(it);\n\t\t\t})\n\t\t);\n\t}\n}\n","import { type Attribute, type DOMTree, type HtmlElement, DOMTokenList, DynamicValue } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface Context {\n\tkey: string;\n\tvalue: string;\n}\n\ninterface AriaAttribute {\n\tproperty: string;\n\tisList: boolean;\n}\n\nconst ARIA: AriaAttribute[] = [\n\t{ property: \"aria-activedescendant\", isList: false },\n\t{ property: \"aria-controls\", isList: true },\n\t{ property: \"aria-describedby\", isList: true },\n\t{ property: \"aria-details\", isList: false },\n\t{ property: \"aria-errormessage\", isList: false },\n\t{ property: \"aria-flowto\", isList: true },\n\t{ property: \"aria-labelledby\", isList: true },\n\t{ property: \"aria-owns\", isList: true },\n];\n\nfunction idMissing(document: DOMTree, id: string): boolean {\n\tconst nodes = document.querySelectorAll(`[id=\"${id}\"]`);\n\treturn nodes.length === 0;\n}\n\nexport default class NoMissingReferences extends Rule<Context> {\n\tpublic documentation(context: Context): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `The element ID \"${context.value}\" referenced by the ${context.key} attribute must point to an existing element.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst document = event.document;\n\n\t\t\t/* verify <label for=\"..\"> */\n\t\t\tfor (const node of document.querySelectorAll(\"label[for]\")) {\n\t\t\t\tconst attr = node.getAttribute(\"for\");\n\t\t\t\tthis.validateReference(document, node, attr, false);\n\t\t\t}\n\n\t\t\t/* verify <input list=\"..\"> */\n\t\t\tfor (const node of document.querySelectorAll(\"input[list]\")) {\n\t\t\t\tconst attr = node.getAttribute(\"list\");\n\t\t\t\tthis.validateReference(document, node, attr, false);\n\t\t\t}\n\n\t\t\t/* verify WAI-ARIA properties */\n\t\t\tfor (const { property, isList } of ARIA) {\n\t\t\t\tfor (const node of document.querySelectorAll(`[${property}]`)) {\n\t\t\t\t\tconst attr = node.getAttribute(property);\n\t\t\t\t\tthis.validateReference(document, node, attr, isList);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected validateReference(\n\t\tdocument: DOMTree,\n\t\tnode: HtmlElement,\n\t\tattr: Attribute | null,\n\t\tisList: boolean,\n\t): void {\n\t\t/* sanity check: querySelector should never return elements without the attribute */\n\t\t/* istanbul ignore next */\n\t\tif (!attr) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* skip dynamic and empty values */\n\t\tconst value = attr.value;\n\t\tif (value instanceof DynamicValue || value === null || value === \"\") {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isList) {\n\t\t\tthis.validateList(document, node, attr, value);\n\t\t} else {\n\t\t\tthis.validateSingle(document, node, attr, value);\n\t\t}\n\t}\n\n\tprotected validateSingle(\n\t\tdocument: DOMTree,\n\t\tnode: HtmlElement,\n\t\tattr: Attribute,\n\t\tid: string,\n\t): void {\n\t\tif (idMissing(document, id)) {\n\t\t\tconst context: Context = { key: attr.key, value: id };\n\t\t\tthis.report(node, `Element references missing id \"${id}\"`, attr.valueLocation, context);\n\t\t}\n\t}\n\n\tprotected validateList(\n\t\tdocument: DOMTree,\n\t\tnode: HtmlElement,\n\t\tattr: Attribute,\n\t\tvalues: string,\n\t): void {\n\t\tconst parsed = new DOMTokenList(values, attr.valueLocation);\n\t\tfor (const entry of parsed.iterator()) {\n\t\t\tconst id = entry.item;\n\t\t\tif (idMissing(document, id)) {\n\t\t\t\tconst context: Context = { key: attr.key, value: id };\n\t\t\t\tthis.report(node, `Element references missing id \"${id}\"`, entry.location, context);\n\t\t\t}\n\t\t}\n\t}\n}\n","import { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class NoMultipleMain extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t\"Only a single visible `<main>` element can be present at in a document at a time.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Multiple `<main>` can be present in the DOM as long the others are hidden using the HTML5 `hidden` attribute.\",\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tconst main = document.querySelectorAll(\"main\").filter((cur) => !cur.hasAttribute(\"hidden\"));\n\t\t\tmain.shift(); /* ignore the first occurrence */\n\n\t\t\t/* report all other occurrences */\n\t\t\tfor (const elem of main) {\n\t\t\t\tthis.report(elem, \"Multiple <main> elements present in document\");\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type Location, sliceLocation } from \"../context\";\nimport { type DOMNode, NodeType } from \"../dom\";\nimport { type AttributeEvent, type ElementReadyEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleOptions {\n\trelaxed: boolean;\n}\n\nconst defaults: RuleOptions = {\n\trelaxed: false,\n};\n\ntype RawCharacters = '\"' | \"&\" | \"'\" | \"<\" | \"=\" | \">\" | \"`\";\n\nconst textRegexp = /([<>]|&(?![a-zA-Z0-9#]+;))/g;\nconst unquotedAttrRegexp = /([<>\"'=`]|&(?![a-zA-Z0-9#]+;))/g;\nconst matchTemplate = /^(<%.*?%>|<\\?.*?\\?>|<\\$.*?\\$>)$/s;\n\nconst replacementTable: Record<RawCharacters, string> = {\n\t'\"': \""\",\n\t\"&\": \"&\",\n\t\"'\": \"'\",\n\t\"<\": \"<\",\n\t\"=\": \"=\",\n\t\">\": \">\",\n\t\"`\": \"`\",\n};\n\nexport default class NoRawCharacters extends Rule<void, RuleOptions> {\n\tprivate relaxed: boolean;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.relaxed = this.options.relaxed;\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\trelaxed: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `Some characters such as \\`<\\`, \\`>\\` and \\`&\\` hold special meaning in HTML and must be escaped using a character reference (html entity).`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"element:ready\", (event: ElementReadyEvent) => {\n\t\t\tconst node = event.target;\n\n\t\t\t/* only iterate over direct descendants */\n\t\t\tfor (const child of node.childNodes) {\n\t\t\t\tif (child.nodeType !== NodeType.TEXT_NODE) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/* workaround for templating <% ... %> etc */\n\t\t\t\tif (child.textContent.match(matchTemplate)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis.findRawChars(node, child.textContent, child.location, textRegexp);\n\t\t\t}\n\t\t});\n\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\t/* boolean attributes has no value so nothing to validate */\n\t\t\tif (!event.value) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* quoted attribute values can contain most symbols except the quotemark\n\t\t\t * itself but unescaped quotemarks would cause a parsing error */\n\t\t\tif (event.quote) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.findRawChars(\n\t\t\t\tevent.target,\n\t\t\t\tevent.value.toString(),\n\t\t\t\tevent.valueLocation!, // eslint-disable-line @typescript-eslint/no-non-null-assertion -- technical debt, valueLocation is always set if a value is provided\n\t\t\t\tunquotedAttrRegexp,\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * Find raw special characters and report as errors.\n\t *\n\t * @param text - The full text to find unescaped raw characters in.\n\t * @param location - Location of text.\n\t * @param regexp - Regexp pattern to match using.\n\t */\n\tprivate findRawChars(node: DOMNode, text: string, location: Location, regexp: RegExp): void {\n\t\tlet match;\n\t\tdo {\n\t\t\tmatch = regexp.exec(text);\n\t\t\tif (match) {\n\t\t\t\tconst char = match[0] as RawCharacters;\n\t\t\t\t/* In relaxed mode & only needs to be encoded if it is ambiguous,\n\t\t\t\t * however this rule will only match either non-ambiguous ampersands or\n\t\t\t\t * ampersands part of a character reference. Whenever it is a valid\n\t\t\t\t * character reference or not not checked by this rule */\n\t\t\t\tif (this.relaxed && char === \"&\") {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/* determine replacement character and location */\n\t\t\t\tconst replacement = replacementTable[char];\n\t\t\t\tconst charLocation = sliceLocation(location, match.index, match.index + 1);\n\n\t\t\t\t/* report as error */\n\t\t\t\tthis.report(node, `Raw \"${char}\" must be encoded as \"${replacement}\"`, charLocation);\n\t\t\t}\n\t\t} while (match);\n\t}\n}\n","import { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nconst selectors = [\"input[aria-label]\", \"textarea[aria-label]\", \"select[aria-label]\"];\n\nexport default class NoRedundantAriaLabel extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"`aria-label` is redundant when an associated `<label>` element containing the same text exists.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tconst elements = document.querySelectorAll(selectors.join(\",\"));\n\t\t\tfor (const element of elements) {\n\t\t\t\tconst ariaLabel = element.getAttribute(\"aria-label\");\n\t\t\t\tconst id = element.id;\n\t\t\t\tif (!id) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst label = document.querySelector(`label[for=\"${id}\"]`);\n\t\t\t\tif (!ariaLabel || !label || label.textContent.trim() !== ariaLabel.value) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst message = \"aria-label is redundant when label containing same text exists\";\n\t\t\t\tthis.report({\n\t\t\t\t\tmessage,\n\t\t\t\t\tnode: element,\n\t\t\t\t\tlocation: ariaLabel.keyLocation,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n","import { escapeSelectorComponent } from \"../dom\";\nimport { type ElementReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class NoRedundantFor extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `When the \\`<label>\\` element wraps the labelable control the \\`for\\` attribute is redundant and better left out.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"element:ready\", (event: ElementReadyEvent) => {\n\t\t\tconst { target } = event;\n\n\t\t\t/* only handle <label> */\n\t\t\tif (target.tagName !== \"label\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore label without for or dynamic value */\n\t\t\tconst attr = target.getAttribute(\"for\");\n\t\t\tif (!attr || attr.isDynamic) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore omitted/empty values */\n\t\t\tconst id = attr.value;\n\t\t\tif (!id) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* try to find labeled control */\n\t\t\tconst escaped = escapeSelectorComponent(id);\n\t\t\tconst control = target.querySelector(`[id=\"${escaped}\"]`);\n\t\t\tif (!control) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.report(target, 'Redundant \"for\" attribute', attr.keyLocation);\n\t\t});\n\t}\n}\n","import { DynamicValue } from \"../dom\";\nimport { type TagReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport interface RuleContext {\n\ttagName: string;\n\trole: string;\n}\n\nexport default class NoRedundantRole extends Rule<RuleContext> {\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\tconst { role, tagName } = context;\n\t\treturn {\n\t\t\tdescription: `Using the \\`${role}\\` role is redundant as it is already implied by the \\`<${tagName}>\\` element.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:ready\", (event: TagReadyEvent) => {\n\t\t\tconst { target } = event;\n\t\t\tconst role = target.getAttribute(\"role\");\n\n\t\t\t/* ignore missing and dynamic values */\n\t\t\tif (!role?.value || role.value instanceof DynamicValue) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore elements without metadata */\n\t\t\tconst { meta } = target;\n\t\t\tif (!meta) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore elements without implicit role */\n\t\t\tconst implicitRole = meta.aria.implicitRole(target._adapter);\n\t\t\tif (!implicitRole) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore elements with non-redundant roles */\n\t\t\tif (role.value !== implicitRole) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* report error */\n\t\t\tconst context: RuleContext = {\n\t\t\t\ttagName: target.tagName,\n\t\t\t\trole: role.value,\n\t\t\t};\n\t\t\tthis.report(\n\t\t\t\tevent.target,\n\t\t\t\t`Redundant role \"${role.value}\" on <${target.tagName}>`,\n\t\t\t\trole.valueLocation,\n\t\t\t\tcontext,\n\t\t\t);\n\t\t});\n\t}\n}\n","import { type HtmlElement, NodeClosed } from \"../dom\";\nimport { type TagEndEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleOptions {\n\tignoreForeign: boolean;\n\tignoreXML: boolean;\n}\n\nconst xmlns = /^(.+):.+$/;\nconst defaults: RuleOptions = {\n\tignoreForeign: true,\n\tignoreXML: true,\n};\n\nexport default class NoSelfClosing extends Rule<string, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tignoreForeign: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t\tignoreXML: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(tagName: string): RuleDocumentation {\n\t\ttagName = tagName || \"element\";\n\t\treturn {\n\t\t\tdescription: `Self-closing elements are disallowed. Use regular end tag <${tagName}></${tagName}> instead of self-closing <${tagName}/>.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\tconst active = event.previous; // The current active element (that is, the current element on the stack)\n\n\t\t\tif (!isRelevant(active, this.options)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.validateElement(active);\n\t\t});\n\t}\n\n\tprivate validateElement(node: HtmlElement): void {\n\t\tif (node.closed !== NodeClosed.VoidSelfClosed) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.report(node, `<${node.tagName}> must not be self-closed`, null, node.tagName);\n\t}\n}\n\nfunction isRelevant(node: HtmlElement, options: RuleOptions): boolean {\n\t/* tags in XML namespaces are relevant only if ignoreXml is false, in which\n\t * case assume all xml elements must not be self-closed */\n\tif (node.tagName.match(xmlns)) {\n\t\treturn !options.ignoreXML;\n\t}\n\n\t/* nodes with missing metadata is assumed relevant */\n\tif (!node.meta) {\n\t\treturn true;\n\t}\n\n\tif (node.meta.void) {\n\t\treturn false;\n\t}\n\n\t/* foreign elements are relevant only if ignoreForeign is false, in which case\n\t * assume all foreign must not be self-closed */\n\tif (node.meta.foreign) {\n\t\treturn !options.ignoreForeign;\n\t}\n\n\treturn true;\n}\n","import { type TagStartEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class NoStyleTag extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"Prefer to use external stylesheets with the `<link>` tag instead of inlining the styling.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:start\", (event: TagStartEvent) => {\n\t\t\tconst node = event.target;\n\t\t\tif (node.tagName === \"style\") {\n\t\t\t\tthis.report(node, \"Use external stylesheet with <link> instead of <style> tag\");\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type WhitespaceEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class NoTrailingWhitespace extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"Lines with trailing whitespace cause unnessecary diff when using version control and usually serve no special purpose in HTML.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"whitespace\", (event: WhitespaceEvent) => {\n\t\t\tif (event.text.match(/^[ \\t]+\\r?\\n$/)) {\n\t\t\t\tthis.report(null, \"Trailing whitespace\", event.location);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type TagStartEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { type IncludeExcludeOptions, keywordPatternMatcher } from \"./helper\";\n\ntype RuleOptions = IncludeExcludeOptions;\n\nconst defaults: RuleOptions = {\n\tinclude: null,\n\texclude: null,\n};\n\nexport default class NoUnknownElements extends Rule<string, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\texclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tinclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: string): RuleDocumentation {\n\t\tconst element = context ? ` <${context}>` : \"\";\n\t\treturn {\n\t\t\tdescription: `An unknown element${element} was used. If this is a Custom Element you need to supply element metadata for it.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:start\", (event: TagStartEvent) => {\n\t\t\tconst node = event.target;\n\t\t\tif (node.meta) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.isKeywordIgnored(node.tagName, keywordPatternMatcher)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.report(node, `Unknown element <${node.tagName}>`, null, node.tagName);\n\t\t});\n\t}\n}\n","import { type Location } from \"../context\";\nimport { DOMTokenList } from \"../dom\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport interface RuleContext {\n\truleId: string;\n}\n\nexport default class NoUnusedDisable extends Rule<RuleContext> {\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `\\`${context.ruleId}\\` rule is disabled but no error was reported.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\t/* this is a special rule, the `Engine` class directly emits errors on this\n\t\t * rule, it exists only to be able to configure whenever the rule is enabled\n\t\t * or not and to get the regular documentation and contextual help. */\n\t}\n\n\tpublic reportUnused(unused: Set<string>, options: string, location: Location): void {\n\t\tconst tokens = new DOMTokenList(options.replace(/,/g, \" \"), location);\n\t\tfor (const ruleId of unused) {\n\t\t\tconst index = tokens.indexOf(ruleId);\n\t\t\t/* istanbul ignore next: the token should be present or it wouldn't be\n\t\t\t * reported as unused, this is just a sanity check and fallback */\n\t\t\tconst tokenLocation = index >= 0 ? tokens.location(index) : location;\n\t\t\tthis.report({\n\t\t\t\tnode: null,\n\t\t\t\tmessage: '\"{{ ruleId }}\" rule is disabled but no error was reported',\n\t\t\t\tlocation: tokenLocation,\n\t\t\t\tcontext: {\n\t\t\t\t\truleId,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n}\n","import { type TokenEvent } from \"../event\";\nimport { TokenType } from \"../lexer\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class NoUtf8Bom extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `This file is saved with the UTF-8 byte order mark (BOM) present. It is neither required or recommended to use.\\n\\nInstead the document should be served with the \\`Content-Type: application/javascript; charset=utf-8\\` header.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tconst unregister = this.on(\"token\", (event: TokenEvent) => {\n\t\t\tif (event.type === TokenType.UNICODE_BOM) {\n\t\t\t\tthis.report(null, \"File should be saved without UTF-8 BOM\", event.location);\n\t\t\t}\n\n\t\t\t/* since the BOM must be the very first thing the rule can now be disabled for the rest of the run */\n\t\t\tthis.setEnabled(false);\n\t\t\tunregister();\n\t\t});\n\t}\n}\n","import { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { DynamicValue } from \"../dom\";\n\ninterface RuleContext {\n\ttype: string;\n}\n\ninterface RuleOptions {\n\tinclude: string[] | null;\n\texclude: string[] | null;\n}\n\nexport const types = [\"button\", \"submit\", \"reset\", \"image\"];\nconst replacement: Record<string, string> = {\n\tbutton: '<button type=\"button\">',\n\tsubmit: '<button type=\"submit\">',\n\treset: '<button type=\"reset\">',\n\timage: '<button type=\"button\">',\n};\n\nconst defaults: RuleOptions = {\n\tinclude: null,\n\texclude: null,\n};\n\nexport default class PreferButton extends Rule<RuleContext, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\texclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tinclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\tconst src = `<input type=\"${context.type}\">`;\n\t\tconst dst = replacement[context.type] || `<button>`;\n\t\treturn {\n\t\t\tdescription: `Prefer to use \\`${dst}\\` instead of \\`\"${src}\\`.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tconst node = event.target;\n\n\t\t\t/* only handle input elements */\n\t\t\tif (node.tagName.toLowerCase() !== \"input\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* only handle type attribute */\n\t\t\tif (event.key.toLowerCase() !== \"type\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* sanity check: handle missing, boolean and dynamic attributes */\n\t\t\tif (!event.value || event.value instanceof DynamicValue) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore types configured to be ignored */\n\t\t\tconst type = event.value.toLowerCase();\n\t\t\tif (this.isKeywordIgnored(type)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* only values matching known type triggers error */\n\t\t\tif (!types.includes(type)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst context: RuleContext = { type };\n\t\t\tconst message = `Prefer to use <button> instead of <input type=\"${type}\"> when adding buttons`;\n\t\t\tthis.report(node, message, event.valueLocation, context);\n\t\t});\n\t}\n}\n","import { type Location } from \"../context\";\nimport { DynamicValue } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleContext {\n\trole: string;\n\treplacement: string;\n}\n\ninterface RuleOptions {\n\tmapping: Record<string, string>;\n\tinclude: string[] | null;\n\texclude: string[] | null;\n}\n\nconst defaults: RuleOptions = {\n\tmapping: {\n\t\tarticle: \"article\",\n\t\tbanner: \"header\",\n\t\tbutton: \"button\",\n\t\tcell: \"td\",\n\t\tcheckbox: \"input\",\n\t\tcomplementary: \"aside\",\n\t\tcontentinfo: \"footer\",\n\t\tfigure: \"figure\",\n\t\tform: \"form\",\n\t\theading: \"hN\",\n\t\tinput: \"input\",\n\t\tlink: \"a\",\n\t\tlist: \"ul\",\n\t\tlistbox: \"select\",\n\t\tlistitem: \"li\",\n\t\tmain: \"main\",\n\t\tnavigation: \"nav\",\n\t\tprogressbar: \"progress\",\n\t\tradio: \"input\",\n\t\tregion: \"section\",\n\t\ttable: \"table\",\n\t\ttextbox: \"textarea\",\n\t},\n\tinclude: null,\n\texclude: null,\n};\n\nexport default class PreferNativeElement extends Rule<RuleContext, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\texclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tinclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tmapping: {\n\t\t\t\ttype: \"object\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `Instead of using the WAI-ARIA role \"${context.role}\" prefer to use the native <${context.replacement}> element.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tconst { mapping } = this.options;\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\t/* ignore non-role attributes */\n\t\t\tif (event.key.toLowerCase() !== \"role\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore missing and dynamic values */\n\t\t\tif (!event.value || event.value instanceof DynamicValue) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore roles configured to be ignored */\n\t\t\tconst role = event.value.toLowerCase();\n\t\t\tif (this.isIgnored(role)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* dont report when the element is already of the right type but has a\n\t\t\t * redundant role, such as <main role=\"main\"> */\n\t\t\tconst replacement = mapping[role];\n\t\t\tif (event.target.is(replacement)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* report error */\n\t\t\tconst context: RuleContext = { role, replacement };\n\t\t\tconst location = this.getLocation(event);\n\t\t\tthis.report(\n\t\t\t\tevent.target,\n\t\t\t\t`Prefer to use the native <${replacement}> element`,\n\t\t\t\tlocation,\n\t\t\t\tcontext,\n\t\t\t);\n\t\t});\n\t}\n\n\tprivate isIgnored(role: string): boolean {\n\t\tconst { mapping } = this.options;\n\n\t\t/* ignore roles not mapped to native elements */\n\t\tconst replacement = mapping[role];\n\t\tif (!replacement) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn this.isKeywordIgnored(role);\n\t}\n\n\tprivate getLocation(event: AttributeEvent): Location | null {\n\t\tconst begin = event.location;\n\t\tconst end = event.valueLocation!; // eslint-disable-line @typescript-eslint/no-non-null-assertion -- technical debt, valueLocation will always be set when a value is provided\n\t\tconst quote = event.quote ? 1 : 0;\n\t\tconst size = end.offset + end.size - begin.offset + quote;\n\t\treturn {\n\t\t\tfilename: begin.filename,\n\t\t\tline: begin.line,\n\t\t\tcolumn: begin.column,\n\t\t\toffset: begin.offset,\n\t\t\tsize,\n\t\t};\n\t}\n}\n","import { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class PreferTbody extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `While \\`<tbody>\\` is optional is relays semantic information about its contents. Where applicable it should also be combined with \\`<thead>\\` and \\`<tfoot>\\`.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\tfor (const table of doc.querySelectorAll(\"table\")) {\n\t\t\t\tif (table.querySelector(\"> tbody\")) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst tr = table.querySelectorAll(\"> tr\");\n\t\t\t\tif (tr.length >= 1) {\n\t\t\t\t\tthis.report(tr[0], \"Prefer to wrap <tr> elements in <tbody>\");\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type TagEndEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleOptions {\n\ttags: string[];\n}\n\nconst defaults: RuleOptions = {\n\ttags: [\"script\", \"style\"],\n};\n\nexport default class RequireCSPNonce extends Rule<void, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\ttags: {\n\t\t\t\ttype: \"array\",\n\t\t\t\titems: {\n\t\t\t\t\tenum: [\"script\", \"style\"],\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t\"Required Content-Security-Policy (CSP) nonce is missing or empty.\",\n\t\t\t\t\"\",\n\t\t\t\t\"This is set by the `nonce` attribute and must match the `Content-Security-Policy` header.\",\n\t\t\t\t\"For instance, if the header contains `script-src 'nonce-r4nd0m'` the `nonce` attribute must be set to `nonce=\\\"r4nd0m\\\">`\",\n\t\t\t\t\"\",\n\t\t\t\t\"The nonce should be unique per each request and set to a cryptography secure random token.\",\n\t\t\t\t\"It is used to prevent cross site scripting (XSS) by preventing malicious actors from injecting scripts onto the page.\",\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\tconst { tags } = this.options;\n\t\t\tconst node = event.previous;\n\n\t\t\t/* ignore other tags */\n\t\t\tif (!tags.includes(node.tagName)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore if nonce is set to non-empty value (or dynamic) */\n\t\t\tconst nonce = node.getAttribute(\"nonce\")?.value;\n\t\t\tif (nonce && nonce !== \"\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore <script src> */\n\t\t\tif (node.is(\"script\") && node.hasAttribute(\"src\")) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst message = `required CSP nonce is missing`;\n\t\t\tthis.report(node, message, node.location);\n\t\t});\n\t}\n}\n","import { type Attribute, type HtmlElement } from \"../dom\";\nimport { type TagEndEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ntype Target = \"all\" | \"crossorigin\";\n\ninterface RuleOptions {\n\ttarget: Target;\n\tinclude: string[] | null;\n\texclude: string[] | null;\n}\n\nconst defaults: RuleOptions = {\n\ttarget: \"all\",\n\tinclude: null,\n\texclude: null,\n};\n\nconst crossorigin = new RegExp(\"^(\\\\w+://|//)\"); /* e.g. https:// or // */\nconst supportSri: Record<string, string> = {\n\tlink: \"href\",\n\tscript: \"src\",\n};\n\nexport default class RequireSri extends Rule<void, RuleOptions> {\n\tprivate target: Target;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.target = this.options.target;\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\ttarget: {\n\t\t\t\tenum: [\"all\", \"crossorigin\"],\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t\tinclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\texclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `Subresource Integrity (SRI) \\`integrity\\` attribute is required to prevent tampering or manipulation from Content Delivery Networks (CDN), rouge proxies, malicious entities, etc.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\t/* only handle thats supporting and requires sri */\n\t\t\tconst node = event.previous;\n\t\t\tif (!(this.supportSri(node) && this.needSri(node))) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* check if sri attribute is present */\n\t\t\tif (node.hasAttribute(\"integrity\")) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.report(\n\t\t\t\tnode,\n\t\t\t\t`SRI \"integrity\" attribute is required on <${node.tagName}> element`,\n\t\t\t\tnode.location,\n\t\t\t);\n\t\t});\n\t}\n\n\tprivate supportSri(node: HtmlElement): boolean {\n\t\treturn Object.keys(supportSri).includes(node.tagName);\n\t}\n\n\tprivate needSri(node: HtmlElement): boolean {\n\t\tconst attr = this.elementSourceAttr(node);\n\t\tif (!attr) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (attr.value === null || attr.value === \"\" || attr.isDynamic) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst url = attr.value.toString();\n\t\tif (this.target === \"all\" || crossorigin.test(url)) {\n\t\t\treturn !this.isIgnored(url);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate elementSourceAttr(node: HtmlElement): Attribute | null {\n\t\tconst key = supportSri[node.tagName];\n\t\treturn node.getAttribute(key);\n\t}\n\n\tprivate isIgnored(url: string): boolean {\n\t\treturn this.isKeywordIgnored(url, (list, it) => {\n\t\t\treturn list.some((pattern) => it.includes(pattern));\n\t\t});\n\t}\n}\n","import { NodeClosed } from \"../dom\";\nimport { type TagEndEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class ScriptElement extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"The end tag for `<script>` is a hard requirement and must never be omitted even when using the `src` attribute.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\tconst node = event.target; // The current element being closed.\n\n\t\t\tif (!node || node.tagName !== \"script\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (node.closed !== NodeClosed.EndTag) {\n\t\t\t\tthis.report(node, `End tag for <${node.tagName}> must not be omitted`);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type TagEndEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nconst javascript = [\n\t\"\",\n\t\"application/ecmascript\",\n\t\"application/javascript\",\n\t\"text/ecmascript\",\n\t\"text/javascript\",\n];\n\nexport default class ScriptType extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"While valid the HTML5 standard encourages authors to omit the type element for JavaScript resources.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\tconst node = event.previous;\n\n\t\t\tif (node.tagName !== \"script\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst attr = node.getAttribute(\"type\");\n\t\t\tif (!attr || attr.isDynamic) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst value = attr.value ? attr.value.toString() : \"\";\n\t\t\tif (!this.isJavascript(value)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.report(\n\t\t\t\tnode,\n\t\t\t\t'\"type\" attribute is unnecessary for javascript resources',\n\t\t\t\tattr.keyLocation,\n\t\t\t);\n\t\t});\n\t}\n\n\tprivate isJavascript(mime: string): boolean {\n\t\t/* remove mime parameters, e.g. \";charset=utf-8\" */\n\t\tconst type = mime.replace(/;.*/, \"\");\n\t\treturn javascript.includes(type);\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type ElementReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class SvgFocusable extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `Inline SVG elements in IE are focusable by default which may cause issues with tab-ordering. The \\`focusable\\` attribute should explicitly be set to avoid unintended behaviour.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"element:ready\", (event: ElementReadyEvent) => {\n\t\t\tif (event.target.is(\"svg\")) {\n\t\t\t\tthis.validate(event.target);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate validate(svg: HtmlElement): void {\n\t\tif (svg.hasAttribute(\"focusable\")) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.report(svg, `<${svg.tagName}> is missing required \"focusable\" attribute`);\n\t}\n}\n","import { sliceLocation } from \"../context\";\nimport { type HtmlElement, type TextNode, isElementNode, isTextNode } from \"../dom\";\nimport { type ElementReadyEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface Character {\n\tpattern: string;\n\treplacement: string;\n\tdescription: string;\n}\n\nexport interface RuleContext {\n\tpattern: string;\n\treplacement: string;\n\tdescription: string;\n}\n\ninterface RuleOptions {\n\tcharacters: Character[];\n\tignoreClasses: string[];\n\tignoreStyle: boolean;\n}\n\nconst defaults: RuleOptions = {\n\tcharacters: [\n\t\t{ pattern: \" \", replacement: \" \", description: \"non-breaking space\" },\n\t\t{ pattern: \"-\", replacement: \"‑\", description: \"non-breaking hyphen\" },\n\t],\n\tignoreClasses: [],\n\tignoreStyle: true,\n};\n\nexport function constructRegex(characters: Character[]): RegExp {\n\tconst disallowed = characters\n\t\t.map((it) => {\n\t\t\treturn it.pattern;\n\t\t})\n\t\t.join(\"|\");\n\tconst pattern = `(${disallowed})`;\n\t/* eslint-disable-next-line security/detect-non-literal-regexp -- technical debt, should do more input sanitation */\n\treturn new RegExp(pattern, \"g\");\n}\n\nfunction getText(node: TextNode): [offset: number, text: string] {\n\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- this will always match something, it cannot be null */\n\tconst match = node.textContent.match(/^(\\s*)(.*)$/)!;\n\tconst [, leading, text] = match;\n\treturn [leading.length, text.trimEnd()];\n}\n\n/**\n * Node 12 does not support String.matchAll, this simulates it's behavior.\n */\nfunction matchAll(text: string, regexp: RegExp): RegExpExecArray[] {\n\t/* eslint-disable-next-line security/detect-non-literal-regexp -- makes copy of existing one only */\n\tconst copy = new RegExp(regexp);\n\tconst matches: RegExpExecArray[] = [];\n\tlet match: RegExpExecArray | null;\n\twhile ((match = copy.exec(text))) {\n\t\tmatches.push(match);\n\t}\n\treturn matches;\n}\n\nexport default class TelNonBreaking extends Rule<RuleContext, RuleOptions> {\n\tprivate regex: RegExp;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.regex = constructRegex(this.options.characters);\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tcharacters: {\n\t\t\t\ttype: \"array\",\n\t\t\t\titems: {\n\t\t\t\t\ttype: \"object\",\n\t\t\t\t\tadditionalProperties: false,\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tpattern: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\treplacement: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdescription: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tignoreClasses: {\n\t\t\t\ttype: \"array\",\n\t\t\t\titems: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tignoreStyle: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\tconst { characters } = this.options;\n\t\tconst replacements = characters.map((it) => {\n\t\t\treturn ` - \\`${it.pattern}\\` - replace with \\`${it.replacement}\\` (${it.description}).`;\n\t\t});\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t`The \\`${context.pattern}\\` character should be replaced with \\`${context.replacement}\\` character (${context.description}) when used in a telephone number.`,\n\t\t\t\t\"\",\n\t\t\t\t\"Unless non-breaking characters is used there could be a line break inserted at that character.\",\n\t\t\t\t\"Line breaks make is harder to read and understand the telephone number.\",\n\t\t\t\t\"\",\n\t\t\t\t\"The following characters should be avoided:\",\n\t\t\t\t\"\",\n\t\t\t\t...replacements,\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"element:ready\", this.isRelevant, (event: ElementReadyEvent) => {\n\t\t\tconst { target } = event;\n\n\t\t\tif (this.isIgnored(target)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.walk(target, target);\n\t\t});\n\t}\n\n\tprivate isRelevant(this: void, event: ElementReadyEvent): boolean {\n\t\tconst { target } = event;\n\n\t\t/* should only deal with anchors */\n\t\tif (!target.is(\"a\")) {\n\t\t\treturn false;\n\t\t}\n\n\t\t/* ignore if anchor does not have tel href */\n\t\tconst attr = target.getAttribute(\"href\");\n\t\tif (!attr?.valueMatches(/^tel:/, false)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tprivate isIgnoredClass(node: HtmlElement): boolean {\n\t\tconst { ignoreClasses } = this.options;\n\t\tconst { classList } = node;\n\t\treturn ignoreClasses.some((it) => classList.contains(it));\n\t}\n\n\tprivate isIgnoredStyle(node: HtmlElement): boolean {\n\t\tconst { ignoreStyle } = this.options;\n\t\tconst { style } = node;\n\t\tif (!ignoreStyle) {\n\t\t\treturn false;\n\t\t}\n\t\tif (style[\"white-space\"] === \"nowrap\" || style[\"white-space\"] === \"pre\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate isIgnored(node: HtmlElement): boolean {\n\t\treturn this.isIgnoredClass(node) || this.isIgnoredStyle(node);\n\t}\n\n\tprivate walk(anchor: HtmlElement, node: HtmlElement): void {\n\t\tfor (const child of node.childNodes) {\n\t\t\tif (isTextNode(child)) {\n\t\t\t\tthis.detectDisallowed(anchor, child);\n\t\t\t} else if (isElementNode(child)) {\n\t\t\t\tthis.walk(anchor, child);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate detectDisallowed(anchor: HtmlElement, node: TextNode): void {\n\t\tconst [offset, text] = getText(node);\n\t\tconst matches = matchAll(text, this.regex);\n\t\tfor (const match of matches) {\n\t\t\tconst detected = match[0];\n\t\t\tconst entry = this.options.characters.find((it) => it.pattern === detected);\n\t\t\t/* istanbul ignore next: should never happen and cannot be tested, just a sanity check */\n\t\t\tif (!entry) {\n\t\t\t\tthrow new Error(`Failed to find entry for \"${detected}\" when searching text \"${text}\"`);\n\t\t\t}\n\t\t\tconst message = `\"${detected}\" should be replaced with \"${entry.replacement}\" (${entry.description}) in telephone number`;\n\t\t\tconst begin = offset + match.index;\n\t\t\tconst end = begin + detected.length;\n\t\t\tconst location = sliceLocation(node.location, begin, end);\n\t\t\tconst context: RuleContext = entry;\n\t\t\tthis.report(anchor, message, location, context);\n\t\t}\n\t}\n}\n","import { type DOMNode, type HtmlElement, isTextNode } from \"../dom\";\nimport { type ElementReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { type MetaElement, TextContent as TextContentEnum } from \"../meta\";\nimport { classifyNodeText } from \"./helper\";\nimport { TextClassification } from \"./helper/text\";\nimport { inAccessibilityTree } from \"./helper/a11y\";\n\ninterface RuleContext {\n\ttagName: string;\n\ttextContent?: TextContentEnum;\n}\n\n/**\n * Check if attribute is present and non-empty or dynamic.\n */\nfunction hasNonEmptyAttribute(node: HtmlElement, key: string): boolean {\n\tconst attr = node.getAttribute(key);\n\treturn Boolean(attr?.valueMatches(/.+/, true));\n}\n\n/**\n * Check if element has default text.\n *\n * Only <input type=\"submit\"> and <input type=\"reset\"> at the moment.\n */\nfunction hasDefaultText(node: HtmlElement): boolean {\n\t/* only input element have default text */\n\tif (!node.is(\"input\")) {\n\t\treturn false;\n\t}\n\n\t/* default text is not available if value attribute is present */\n\tif (node.hasAttribute(\"value\")) {\n\t\treturn false;\n\t}\n\n\t/* default text is only present when type is submit or reset */\n\tconst type = node.getAttribute(\"type\");\n\treturn Boolean(type?.valueMatches(/submit|reset/, false));\n}\n\nfunction isNonEmptyText(node: DOMNode): boolean {\n\tif (isTextNode(node)) {\n\t\treturn node.isDynamic || node.textContent.trim() !== \"\";\n\t} else {\n\t\treturn false;\n\t}\n}\n\n/**\n * Walk nodes (depth-first, preorder) searching for accessible text. Children\n * hidden from accessibility tree are ignored.\n *\n * For each node the current conditions satisfies as accessible text:\n *\n * - Non-empty or dynamic `aria-label`\n * - Non-empty or dynamic `aria-labelledby` (reference not validated, use [[no-missing-references]]\n * - Image with non-empty or dynamic `alt` text\n * - Elements with default text\n */\nfunction haveAccessibleText(node: HtmlElement): boolean {\n\tif (!inAccessibilityTree(node)) {\n\t\treturn false;\n\t}\n\n\t/* check direct descendants for non-empty or dynamic text */\n\tconst haveText = node.childNodes.some((child) => isNonEmptyText(child));\n\tif (haveText) {\n\t\treturn true;\n\t}\n\n\tif (hasNonEmptyAttribute(node, \"aria-label\")) {\n\t\treturn true;\n\t}\n\n\tif (hasNonEmptyAttribute(node, \"aria-labelledby\")) {\n\t\treturn true;\n\t}\n\n\tif (node.is(\"img\") && hasNonEmptyAttribute(node, \"alt\")) {\n\t\treturn true;\n\t}\n\n\tif (hasDefaultText(node)) {\n\t\treturn true;\n\t}\n\n\treturn node.childElements.some((child: HtmlElement) => {\n\t\treturn haveAccessibleText(child);\n\t});\n}\n\nexport default class TextContent extends Rule<RuleContext> {\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\tconst doc: RuleDocumentation = {\n\t\t\tdescription: `The textual content for this element is not valid.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t\tswitch (context.textContent) {\n\t\t\tcase TextContentEnum.NONE:\n\t\t\t\tdoc.description = `The \\`<${context.tagName}>\\` element must not have textual content.`;\n\t\t\t\tbreak;\n\t\t\tcase TextContentEnum.REQUIRED:\n\t\t\t\tdoc.description = `The \\`<${context.tagName}>\\` element must have textual content.`;\n\t\t\t\tbreak;\n\t\t\tcase TextContentEnum.ACCESSIBLE:\n\t\t\t\tdoc.description = `The \\`<${context.tagName}>\\` element must have accessible text.`;\n\t\t\t\tbreak;\n\t\t}\n\t\treturn doc;\n\t}\n\n\tprivate static filter(this: void, event: ElementReadyEvent): boolean {\n\t\tconst { target } = event;\n\n\t\t/* skip elements without metadata */\n\t\tif (!target.meta) {\n\t\t\treturn false;\n\t\t}\n\n\t\t/* skip elements without explicit and default textContent */\n\t\tconst { textContent } = target.meta;\n\t\tif (!textContent || textContent === TextContentEnum.DEFAULT) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"element:ready\", TextContent.filter, (event: ElementReadyEvent) => {\n\t\t\tconst target = event.target as HtmlElement & { meta: MetaElement };\n\t\t\tconst { textContent } = target.meta;\n\t\t\tswitch (textContent) {\n\t\t\t\tcase TextContentEnum.NONE:\n\t\t\t\t\tthis.validateNone(target);\n\t\t\t\t\tbreak;\n\t\t\t\tcase TextContentEnum.REQUIRED:\n\t\t\t\t\tthis.validateRequired(target);\n\t\t\t\t\tbreak;\n\t\t\t\tcase TextContentEnum.ACCESSIBLE:\n\t\t\t\t\tthis.validateAccessible(target);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Validate element has empty text (inter-element whitespace is not considered text)\n\t */\n\tprivate validateNone(node: HtmlElement & { meta: MetaElement }): void {\n\t\tif (classifyNodeText(node) === TextClassification.EMPTY_TEXT) {\n\t\t\treturn;\n\t\t}\n\t\tthis.reportError(node, node.meta, `${node.annotatedName} must not have text content`);\n\t}\n\n\t/**\n\t * Validate element has any text (inter-element whitespace is not considered text)\n\t */\n\tprivate validateRequired(node: HtmlElement & { meta: MetaElement }): void {\n\t\tif (classifyNodeText(node) !== TextClassification.EMPTY_TEXT) {\n\t\t\treturn;\n\t\t}\n\t\tthis.reportError(node, node.meta, `${node.annotatedName} must have text content`);\n\t}\n\n\t/**\n\t * Validate element has accessible text (either regular text or text only\n\t * exposed in accessibility tree via aria-label or similar)\n\t */\n\tprivate validateAccessible(node: HtmlElement & { meta: MetaElement }): void {\n\t\t/* skip this element if the element isn't present in accessibility tree */\n\t\tif (!inAccessibilityTree(node)) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* if the element or a child has aria-label, alt or default text, etc the\n\t\t * element has accessible text */\n\t\tif (haveAccessibleText(node)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.reportError(node, node.meta, `${node.annotatedName} must have accessible text`);\n\t}\n\n\tprivate reportError(node: HtmlElement, meta: MetaElement, message: string): void {\n\t\tthis.report(node, message, null, {\n\t\t\ttagName: node.tagName,\n\t\t\ttextContent: meta.textContent,\n\t\t});\n\t}\n}\n","import { type Location } from \"../context\";\nimport { type DOMTree, type HtmlElement, DynamicValue } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nconst roles = [\"complementary\", \"contentinfo\", \"form\", \"banner\", \"main\", \"navigation\", \"region\"];\n\nconst selectors = [\n\t\"aside\",\n\t\"footer\",\n\t\"form\",\n\t\"header\",\n\t\"main\",\n\t\"nav\",\n\t\"section\",\n\t...roles.map((it) => `[role=\"${it}\"]`),\n\t/* <search> does not (yet?) require a unique name */\n];\n\nfunction getTextFromReference(\n\tdocument: DOMTree,\n\tid: string | DynamicValue | null,\n): string | DynamicValue | null {\n\tif (!id || id instanceof DynamicValue) {\n\t\treturn id;\n\t}\n\n\tconst selector = `#${id}`;\n\tconst ref = document.querySelector(selector);\n\tif (ref) {\n\t\treturn ref.textContent;\n\t} else {\n\t\t/* If the referenced element cannot be found (maybe outside the fragment\n\t\t * being tested) we use the selector as text, i.e. if two landmarks\n\t\t * reference the same selector they would still be flagged as\n\t\t * non-unique. */\n\t\treturn selector;\n\t}\n}\n\n/* until Array.groupBy(..) can be used (Node 21) */\nfunction groupBy<T, K extends string | number | symbol>(\n\tvalues: T[],\n\tcallback: (value: T) => K,\n): Record<K, T[]> {\n\tconst result = {} as Record<K, T[]>;\n\tfor (const value of values) {\n\t\tconst key = callback(value);\n\t\tif (key in result) {\n\t\t\tresult[key].push(value);\n\t\t} else {\n\t\t\tresult[key] = [value];\n\t\t}\n\t}\n\treturn result;\n}\n\nfunction getTextEntryFromElement(\n\tdocument: DOMTree,\n\tnode: HtmlElement,\n): {\n\tnode: HtmlElement;\n\ttext: string | DynamicValue | null;\n\tlocation: Location;\n} {\n\tconst ariaLabel = node.getAttribute(\"aria-label\");\n\tif (ariaLabel) {\n\t\treturn {\n\t\t\tnode,\n\t\t\ttext: ariaLabel.value,\n\t\t\tlocation: ariaLabel.keyLocation,\n\t\t};\n\t}\n\n\tconst ariaLabelledby = node.getAttribute(\"aria-labelledby\");\n\tif (ariaLabelledby) {\n\t\tconst text = getTextFromReference(document, ariaLabelledby.value);\n\t\treturn {\n\t\t\tnode,\n\t\t\ttext,\n\t\t\tlocation: ariaLabelledby.keyLocation,\n\t\t};\n\t}\n\n\treturn {\n\t\tnode,\n\t\ttext: null,\n\t\tlocation: node.location,\n\t};\n}\n\nfunction isExcluded(entry: { node: HtmlElement; text: string | DynamicValue | null }): boolean {\n\tconst { node, text } = entry;\n\tif (text === null) {\n\t\treturn !(node.is(\"form\") || node.is(\"section\"));\n\t}\n\treturn true;\n}\n\nexport default class UniqueLandmark extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t\"When the same type of landmark is present more than once in the same document each must be uniquely identifiable with a non-empty and unique name.\",\n\t\t\t\t\"For instance, if the document has two `<nav>` elements each of them need an accessible name to be distinguished from each other.\",\n\t\t\t\t\"\",\n\t\t\t\t\"The following elements / roles are considered landmarks:\",\n\t\t\t\t\"\",\n\t\t\t\t' - `aside` or `[role=\"complementary\"]`',\n\t\t\t\t' - `footer` or `[role=\"contentinfo\"]`',\n\t\t\t\t' - `form` or `[role=\"form\"]`',\n\t\t\t\t' - `header` or `[role=\"banner\"]`',\n\t\t\t\t' - `main` or `[role=\"main\"]`',\n\t\t\t\t' - `nav` or `[role=\"navigation\"]`',\n\t\t\t\t' - `section` or `[role=\"region\"]`',\n\t\t\t\t\"\",\n\t\t\t\t\"To fix this either:\",\n\t\t\t\t\"\",\n\t\t\t\t\" - Add `aria-label`.\",\n\t\t\t\t\" - Add `aria-labelledby`.\",\n\t\t\t\t\" - Remove one of the landmarks.\",\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tconst elements = document\n\t\t\t\t.querySelectorAll(selectors.join(\",\"))\n\t\t\t\t.filter((it) => typeof it.role === \"string\" && roles.includes(it.role));\n\t\t\tconst grouped = groupBy(elements, (it) => it.role as string);\n\t\t\tfor (const nodes of Object.values(grouped)) {\n\t\t\t\t/* if the landmark isn't present or at most a single occurrence it is\n\t\t\t\t * considered unique */\n\t\t\t\tif (nodes.length <= 1) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst entries = nodes.map((it) => getTextEntryFromElement(document, it));\n\n\t\t\t\t/* edge case: unnamed forms are not considered landmarks */\n\t\t\t\tconst filteredEntries = entries.filter(isExcluded);\n\n\t\t\t\tfor (const entry of filteredEntries) {\n\t\t\t\t\tif (entry.text instanceof DynamicValue) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst dup = entries.filter((it) => it.text === entry.text).length > 1;\n\t\t\t\t\tif (!entry.text || dup) {\n\t\t\t\t\t\tconst message = `Landmarks must have a non-empty and unique accessible name (aria-label or aria-labelledby)`;\n\t\t\t\t\t\tconst location = entry.location;\n\t\t\t\t\t\tthis.report({\n\t\t\t\t\t\t\tnode: entry.node,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\tlocation,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type Location, sliceLocation } from \"../context\";\nimport { type HtmlElement, NodeType } from \"../dom\";\nimport { type AttributeEvent, type ElementReadyEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\nimport entities from \"../elements/entities.json\";\n\nexport interface RuleContext {\n\tentity: string;\n\tterminated: boolean;\n}\n\ninterface RuleOptions {\n\tignoreCase: boolean;\n\trequireSemicolon: boolean;\n}\n\ninterface EntityMatch {\n\t/** original regex match object */\n\tmatch: RegExpMatchArray;\n\t/** normalized character reference */\n\tentity: string;\n\t/** raw/original character reference (that is, exactly as the user entered it) */\n\traw: string;\n\t/** `true` if the character reference was terminated with a `;` */\n\tterminated: boolean;\n}\n\nconst defaults: RuleOptions = {\n\tignoreCase: false,\n\trequireSemicolon: true,\n};\n\nconst regexp = /&(?:[a-z0-9]+|#x?[0-9a-f]+)(;|[^a-z0-9]|$)/gi;\nconst lowercaseEntities = entities.map((it) => it.toLowerCase());\n\nfunction isNumerical(entity: string): boolean {\n\treturn entity.startsWith(\"&#\");\n}\n\nfunction getLocation(\n\tlocation: Location | null,\n\tentity: string,\n\tmatch: RegExpMatchArray,\n): Location | null {\n\t/* istanbul ignore next: never happens in practive */\n\tconst index = match.index ?? 0;\n\treturn sliceLocation(location, index, index + entity.length);\n}\n\nfunction getDescription(context: RuleContext, options: RuleOptions): string {\n\tconst url = \"https://html.spec.whatwg.org/multipage/named-characters.html\";\n\tlet message: string;\n\tif (context.terminated) {\n\t\tmessage = `Unrecognized character reference \\`${context.entity}\\`.`;\n\t} else {\n\t\tmessage = `Character reference \\`${context.entity}\\` must be terminated by a semicolon.`;\n\t}\n\n\treturn [\n\t\tmessage,\n\t\t`HTML5 defines a set of [valid character references](${url}) but this is not a valid one.`,\n\t\t\"\",\n\t\t\"Ensure that:\",\n\t\t\"\",\n\t\t\"1. The character is one of the listed names.\",\n\t\t...(options.ignoreCase ? [] : [\"1. The case is correct (names are case sensitive).\"]),\n\t\t...(options.requireSemicolon ? [\"1. The name is terminated with a `;`.\"] : []),\n\t].join(\"\\n\");\n}\n\nexport default class UnknownCharReference extends Rule<RuleContext, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tignoreCase: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t\trequireSemicolon: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: getDescription(context, this.options),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"element:ready\", (event: ElementReadyEvent) => {\n\t\t\tconst node = event.target;\n\n\t\t\t/* only iterate over direct descendants */\n\t\t\tfor (const child of node.childNodes) {\n\t\t\t\tif (child.nodeType !== NodeType.TEXT_NODE) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthis.findCharacterReferences(node, child.textContent, child.location, {\n\t\t\t\t\tisAttribute: false,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\t/* boolean attributes has no value so nothing to validate */\n\t\t\tif (!event.value) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.findCharacterReferences(event.target, event.value.toString(), event.valueLocation, {\n\t\t\t\tisAttribute: true,\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate get entities(): string[] {\n\t\tif (this.options.ignoreCase) {\n\t\t\treturn lowercaseEntities;\n\t\t} else {\n\t\t\treturn entities;\n\t\t}\n\t}\n\n\tprivate findCharacterReferences(\n\t\tnode: HtmlElement,\n\t\ttext: string,\n\t\tlocation: Location | null,\n\t\t{ isAttribute }: { isAttribute: boolean },\n\t): void {\n\t\tconst isQuerystring = isAttribute && text.includes(\"?\");\n\t\tfor (const match of this.getMatches(text)) {\n\t\t\tthis.validateCharacterReference(node, location, match, { isQuerystring });\n\t\t}\n\t}\n\n\tprivate validateCharacterReference(\n\t\tnode: HtmlElement,\n\t\tlocation: Location | null,\n\t\tfoobar: EntityMatch,\n\t\t{ isQuerystring }: { isQuerystring: boolean },\n\t): void {\n\t\tconst { requireSemicolon } = this.options;\n\t\tconst { match, entity, raw, terminated } = foobar;\n\n\t\t/* assume numeric entities are valid for now */\n\t\tif (isNumerical(entity)) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* special case: when attributes use query parameters we skip checking\n\t\t * unterminated attributes */\n\t\tif (isQuerystring && !terminated) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst found = this.entities.includes(entity);\n\n\t\t/* ignore if this is a known character reference name */\n\t\tif (found && (terminated || !requireSemicolon)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (found && !terminated) {\n\t\t\tconst entityLocation = getLocation(location, entity, match);\n\t\t\tconst message = `Character reference \"{{ entity }}\" must be terminated by a semicolon`;\n\t\t\tconst context: RuleContext = {\n\t\t\t\tentity: raw,\n\t\t\t\tterminated: false,\n\t\t\t};\n\t\t\tthis.report(node, message, entityLocation, context);\n\t\t\treturn;\n\t\t}\n\n\t\tconst entityLocation = getLocation(location, entity, match);\n\t\tconst message = `Unrecognized character reference \"{{ entity }}\"`;\n\t\tconst context: RuleContext = {\n\t\t\tentity: raw,\n\t\t\tterminated: true,\n\t\t};\n\t\tthis.report(node, message, entityLocation, context);\n\t}\n\n\tprivate *getMatches(text: string): IterableIterator<EntityMatch> {\n\t\tlet match: RegExpMatchArray | null;\n\t\tdo {\n\t\t\tmatch = regexp.exec(text);\n\t\t\tif (match) {\n\t\t\t\tconst terminator = match[1]; // === \";\" ? match[1] : \"\";\n\t\t\t\tconst terminated = terminator === \";\";\n\t\t\t\tconst needSlice = terminator !== \";\" && terminator.length > 0;\n\t\t\t\tconst entity = needSlice ? match[0].slice(0, -1) : match[0];\n\t\t\t\tif (this.options.ignoreCase) {\n\t\t\t\t\tyield { match, entity: entity.toLowerCase(), raw: entity, terminated };\n\t\t\t\t} else {\n\t\t\t\t\tyield { match, entity, raw: entity, terminated };\n\t\t\t\t}\n\t\t\t}\n\t\t} while (match);\n\t}\n}\n","import { type Location } from \"../context\";\nimport { type HtmlElement, DOMTokenList, DynamicValue } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport const enum MessageID {\n\tInvalidAttribute,\n\tInvalidValue,\n\tInvalidOrder,\n\tInvalidToken,\n\tInvalidCombination,\n\tMissingField,\n}\n\ninterface RuleContextInvalidAttribute {\n\tmsg: MessageID.InvalidAttribute;\n\twhat: string;\n}\n\ninterface RuleContextInvalidValue {\n\tmsg: MessageID.InvalidValue;\n\ttype: string;\n\tvalue: string;\n\twhat: string;\n}\n\ninterface RuleContextInvalidOrder {\n\tmsg: MessageID.InvalidOrder;\n\tfirst: string;\n\tsecond: string;\n}\n\ninterface RuleContextInvalidToken {\n\tmsg: MessageID.InvalidToken;\n\ttoken: string;\n}\n\ninterface RuleContextInvalidCombine {\n\tmsg: MessageID.InvalidCombination;\n\tfirst: string;\n\tsecond: string;\n}\n\ninterface RuleContextMissingField {\n\tmsg: MessageID.MissingField;\n}\n\nexport type RuleContext =\n\t| RuleContextInvalidAttribute\n\t| RuleContextInvalidValue\n\t| RuleContextInvalidOrder\n\t| RuleContextInvalidToken\n\t| RuleContextInvalidCombine\n\t| RuleContextMissingField;\n\ntype ControlGroup =\n\t| \"text\"\n\t| \"username\"\n\t| \"password\"\n\t| \"multiline\"\n\t| \"month\"\n\t| \"numeric\"\n\t| \"date\"\n\t| \"url\"\n\t| \"tel\";\n\ntype TokenType = \"section\" | \"hint\" | \"contact\" | \"field1\" | \"field2\" | \"webauthn\";\n\nconst expectedOrder: TokenType[] = [\"section\", \"hint\", \"contact\", \"field1\", \"field2\", \"webauthn\"];\n\n/* Field names which does not allow the optional contact token */\nconst fieldNames1 = [\n\t\"name\",\n\t\"honorific-prefix\",\n\t\"given-name\",\n\t\"additional-name\",\n\t\"family-name\",\n\t\"honorific-suffix\",\n\t\"nickname\",\n\t\"username\",\n\t\"new-password\",\n\t\"current-password\",\n\t\"one-time-code\",\n\t\"organization-title\",\n\t\"organization\",\n\t\"street-address\",\n\t\"address-line1\",\n\t\"address-line2\",\n\t\"address-line3\",\n\t\"address-level4\",\n\t\"address-level3\",\n\t\"address-level2\",\n\t\"address-level1\",\n\t\"country\",\n\t\"country-name\",\n\t\"postal-code\",\n\t\"cc-name\",\n\t\"cc-given-name\",\n\t\"cc-additional-name\",\n\t\"cc-family-name\",\n\t\"cc-number\",\n\t\"cc-exp\",\n\t\"cc-exp-month\",\n\t\"cc-exp-year\",\n\t\"cc-csc\",\n\t\"cc-type\",\n\t\"transaction-currency\",\n\t\"transaction-amount\",\n\t\"language\",\n\t\"bday\",\n\t\"bday-day\",\n\t\"bday-month\",\n\t\"bday-year\",\n\t\"sex\",\n\t\"url\",\n\t\"photo\",\n];\n\n/* Field names which allows for the optional contact token */\nconst fieldNames2 = [\n\t\"tel\",\n\t\"tel-country-code\",\n\t\"tel-national\",\n\t\"tel-area-code\",\n\t\"tel-local\",\n\t\"tel-local-prefix\",\n\t\"tel-local-suffix\",\n\t\"tel-extension\",\n\t\"email\",\n\t\"impp\",\n];\n\n/* Mapping between field names and which control group it requires */\nconst fieldNameGroup: Record<string, ControlGroup> = {\n\tname: \"text\",\n\t\"honorific-prefix\": \"text\",\n\t\"given-name\": \"text\",\n\t\"additional-name\": \"text\",\n\t\"family-name\": \"text\",\n\t\"honorific-suffix\": \"text\",\n\tnickname: \"text\",\n\tusername: \"username\",\n\t\"new-password\": \"password\",\n\t\"current-password\": \"password\",\n\t\"one-time-code\": \"password\",\n\t\"organization-title\": \"text\",\n\torganization: \"text\",\n\t\"street-address\": \"multiline\",\n\t\"address-line1\": \"text\",\n\t\"address-line2\": \"text\",\n\t\"address-line3\": \"text\",\n\t\"address-level4\": \"text\",\n\t\"address-level3\": \"text\",\n\t\"address-level2\": \"text\",\n\t\"address-level1\": \"text\",\n\tcountry: \"text\",\n\t\"country-name\": \"text\",\n\t\"postal-code\": \"text\",\n\t\"cc-name\": \"text\",\n\t\"cc-given-name\": \"text\",\n\t\"cc-additional-name\": \"text\",\n\t\"cc-family-name\": \"text\",\n\t\"cc-number\": \"text\",\n\t\"cc-exp\": \"month\",\n\t\"cc-exp-month\": \"numeric\",\n\t\"cc-exp-year\": \"numeric\",\n\t\"cc-csc\": \"text\",\n\t\"cc-type\": \"text\",\n\t\"transaction-currency\": \"text\",\n\t\"transaction-amount\": \"numeric\",\n\tlanguage: \"text\",\n\tbday: \"date\",\n\t\"bday-day\": \"numeric\",\n\t\"bday-month\": \"numeric\",\n\t\"bday-year\": \"numeric\",\n\tsex: \"text\",\n\turl: \"url\",\n\tphoto: \"url\",\n\ttel: \"tel\",\n\t\"tel-country-code\": \"text\",\n\t\"tel-national\": \"text\",\n\t\"tel-area-code\": \"text\",\n\t\"tel-local\": \"text\",\n\t\"tel-local-prefix\": \"text\",\n\t\"tel-local-suffix\": \"text\",\n\t\"tel-extension\": \"text\",\n\temail: \"username\",\n\timpp: \"url\",\n};\n\nconst disallowedInputTypes = [\"checkbox\", \"radio\", \"file\", \"submit\", \"image\", \"reset\", \"button\"];\n\nfunction matchSection(token: string): boolean {\n\treturn token.startsWith(\"section-\");\n}\n\nfunction matchHint(token: string): boolean {\n\treturn token === \"shipping\" || token === \"billing\";\n}\n\nfunction matchFieldNames1(token: string): boolean {\n\treturn fieldNames1.includes(token);\n}\n\nfunction matchContact(token: string): boolean {\n\tconst haystack = [\"home\", \"work\", \"mobile\", \"fax\", \"pager\"];\n\treturn haystack.includes(token);\n}\n\nfunction matchFieldNames2(token: string): boolean {\n\treturn fieldNames2.includes(token);\n}\n\nfunction matchWebauthn(token: string): boolean {\n\treturn token === \"webauthn\";\n}\n\nfunction matchToken(token: string): TokenType | null {\n\tif (matchSection(token)) {\n\t\treturn \"section\";\n\t}\n\tif (matchHint(token)) {\n\t\treturn \"hint\";\n\t}\n\tif (matchFieldNames1(token)) {\n\t\treturn \"field1\";\n\t}\n\tif (matchFieldNames2(token)) {\n\t\treturn \"field2\";\n\t}\n\tif (matchContact(token)) {\n\t\treturn \"contact\";\n\t}\n\tif (matchWebauthn(token)) {\n\t\treturn \"webauthn\";\n\t}\n\treturn null;\n}\n\nfunction getControlGroups(type: string): ControlGroup[] {\n\tconst allGroups: ControlGroup[] = [\n\t\t\"text\",\n\t\t\"multiline\",\n\t\t\"password\",\n\t\t\"url\",\n\t\t\"username\",\n\t\t\"tel\",\n\t\t\"numeric\",\n\t\t\"month\",\n\t\t\"date\",\n\t];\n\tconst mapping: Record<string, ControlGroup[] | undefined> = {\n\t\thidden: allGroups,\n\t\ttext: allGroups.filter((it) => it !== \"multiline\"),\n\t\tsearch: allGroups.filter((it) => it !== \"multiline\"),\n\t\tpassword: [\"password\"],\n\t\turl: [\"url\"],\n\t\temail: [\"username\"],\n\t\ttel: [\"tel\"],\n\t\tnumber: [\"numeric\"],\n\t\tmonth: [\"month\"],\n\t\tdate: [\"date\"],\n\t};\n\n\treturn mapping[type] ?? [];\n}\n\nfunction isDisallowedType(node: HtmlElement, type: string): boolean {\n\tif (!node.is(\"input\")) {\n\t\treturn false;\n\t}\n\treturn disallowedInputTypes.includes(type);\n}\n\nfunction getTerminalMessage(context: RuleContext): string {\n\tswitch (context.msg) {\n\t\tcase MessageID.InvalidAttribute:\n\t\t\treturn \"autocomplete attribute cannot be used on {{ what }}\";\n\t\tcase MessageID.InvalidValue:\n\t\t\treturn '\"{{ value }}\" cannot be used on {{ what }}';\n\t\tcase MessageID.InvalidOrder:\n\t\t\treturn '\"{{ second }}\" must appear before \"{{ first }}\"';\n\t\tcase MessageID.InvalidToken:\n\t\t\treturn '\"{{ token }}\" is not a valid autocomplete token or field name';\n\t\tcase MessageID.InvalidCombination:\n\t\t\treturn '\"{{ second }}\" cannot be combined with \"{{ first }}\"';\n\t\tcase MessageID.MissingField:\n\t\t\treturn \"autocomplete attribute is missing field name\";\n\t}\n}\n\nfunction getMarkdownMessage(context: RuleContext): string {\n\tswitch (context.msg) {\n\t\tcase MessageID.InvalidAttribute:\n\t\t\treturn [\n\t\t\t\t`\\`autocomplete\\` attribute cannot be used on \\`${context.what}\\``,\n\t\t\t\t\"\",\n\t\t\t\t\"The following input types cannot use the `autocomplete` attribute:\",\n\t\t\t\t\"\",\n\t\t\t\t...disallowedInputTypes.map((it) => `- \\`${it}\\``),\n\t\t\t].join(\"\\n\");\n\n\t\tcase MessageID.InvalidValue: {\n\t\t\tconst message = `\\`\"${context.value}\"\\` cannot be used on \\`${context.what}\\``;\n\t\t\tif (context.type === \"form\") {\n\t\t\t\treturn [\n\t\t\t\t\tmessage,\n\t\t\t\t\t\"\",\n\t\t\t\t\t'The `<form>` element can only use the values `\"on\"` and `\"off\"`.',\n\t\t\t\t].join(\"\\n\");\n\t\t\t}\n\t\t\tif (context.type === \"hidden\") {\n\t\t\t\treturn [\n\t\t\t\t\tmessage,\n\t\t\t\t\t\"\",\n\t\t\t\t\t'`<input type=\"hidden\">` cannot use the values `\"on\"` and `\"off\"`.',\n\t\t\t\t].join(\"\\n\");\n\t\t\t}\n\t\t\tconst controlGroups = getControlGroups(context.type);\n\t\t\tconst currentGroup = fieldNameGroup[context.value];\n\t\t\treturn [\n\t\t\t\tmessage,\n\t\t\t\t\"\",\n\t\t\t\t`\\`${context.what}\\` allows autocomplete fields from the following group${controlGroups.length > 1 ? \"s\" : \"\"}:`,\n\t\t\t\t\"\",\n\t\t\t\t...controlGroups.map((it) => `- ${it}`),\n\t\t\t\t\"\",\n\t\t\t\t`The field \\`\"${context.value}\"\\` belongs to the group /${currentGroup}/ which cannot be used with this input type.`,\n\t\t\t].join(\"\\n\");\n\t\t}\n\n\t\tcase MessageID.InvalidOrder:\n\t\t\treturn [\n\t\t\t\t`\\`\"${context.second}\"\\` must appear before \\`\"${context.first}\"\\``,\n\t\t\t\t\"\",\n\t\t\t\t\"The autocomplete tokens must appear in the following order:\",\n\t\t\t\t\"\",\n\t\t\t\t\"- Optional section name (`section-` prefix).\",\n\t\t\t\t\"- Optional `shipping` or `billing` token.\",\n\t\t\t\t\"- Optional `home`, `work`, `mobile`, `fax` or `pager` token (for fields supporting it).\",\n\t\t\t\t\"- Field name\",\n\t\t\t\t\"- Optional `webauthn` token.\",\n\t\t\t].join(\"\\n\");\n\n\t\tcase MessageID.InvalidToken:\n\t\t\treturn `\\`\"${context.token}\"\\` is not a valid autocomplete token or field name`;\n\n\t\tcase MessageID.InvalidCombination:\n\t\t\treturn `\\`\"${context.second}\"\\` cannot be combined with \\`\"${context.first}\"\\``;\n\n\t\tcase MessageID.MissingField:\n\t\t\treturn \"Autocomplete attribute is missing field name\";\n\t}\n}\n\nexport default class ValidAutocomplete extends Rule<RuleContext> {\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: getMarkdownMessage(context),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tconst elements = document.querySelectorAll(\"[autocomplete]\");\n\t\t\tfor (const element of elements) {\n\t\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- selector guarantees the attribute is present */\n\t\t\t\tconst autocomplete = element.getAttribute(\"autocomplete\")!;\n\t\t\t\tif (autocomplete.value === null || autocomplete.value instanceof DynamicValue) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- location must be present as the value is */\n\t\t\t\tconst location = autocomplete.valueLocation!;\n\t\t\t\tconst value = autocomplete.value.toLowerCase();\n\t\t\t\tconst tokens = new DOMTokenList(value, location);\n\t\t\t\tif (tokens.length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthis.validate(element, value, tokens, autocomplete.keyLocation, location);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate validate(\n\t\tnode: HtmlElement,\n\t\tvalue: string,\n\t\ttokens: DOMTokenList,\n\t\tkeyLocation: Location,\n\t\tvalueLocation: Location,\n\t): void {\n\t\tswitch (node.tagName) {\n\t\t\tcase \"form\":\n\t\t\t\tthis.validateFormAutocomplete(node, value, valueLocation);\n\t\t\t\tbreak;\n\t\t\tcase \"input\":\n\t\t\tcase \"textarea\":\n\t\t\tcase \"select\":\n\t\t\t\tthis.validateControlAutocomplete(node, tokens, keyLocation);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate validateControlAutocomplete(\n\t\tnode: HtmlElement,\n\t\ttokens: DOMTokenList,\n\t\tkeyLocation: Location,\n\t): void {\n\t\tconst type = node.getAttributeValue(\"type\") ?? \"text\";\n\t\tconst mantle = type !== \"hidden\" ? \"expectation\" : \"anchor\";\n\n\t\tif (isDisallowedType(node, type)) {\n\t\t\tconst context: RuleContext = {\n\t\t\t\tmsg: MessageID.InvalidAttribute,\n\t\t\t\twhat: `<input type=\"${type}\">`,\n\t\t\t};\n\t\t\tthis.report({\n\t\t\t\tnode,\n\t\t\t\tmessage: getTerminalMessage(context),\n\t\t\t\tlocation: keyLocation,\n\t\t\t\tcontext,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tif (tokens.includes(\"on\") || tokens.includes(\"off\")) {\n\t\t\tthis.validateOnOff(node, mantle, tokens);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.validateTokens(node, tokens, keyLocation);\n\t}\n\n\tprivate validateFormAutocomplete(node: HtmlElement, value: string, location: Location): void {\n\t\tconst trimmed = value.trim();\n\t\tif ([\"on\", \"off\"].includes(trimmed)) {\n\t\t\treturn;\n\t\t}\n\t\tconst context: RuleContext = {\n\t\t\tmsg: MessageID.InvalidValue,\n\t\t\ttype: \"form\",\n\t\t\tvalue: trimmed,\n\t\t\twhat: \"<form>\",\n\t\t};\n\t\tthis.report({\n\t\t\tnode,\n\t\t\tmessage: getTerminalMessage(context),\n\t\t\tlocation,\n\t\t\tcontext,\n\t\t});\n\t}\n\n\tprivate validateOnOff(\n\t\tnode: HtmlElement,\n\t\tmantle: \"expectation\" | \"anchor\",\n\t\ttokens: DOMTokenList,\n\t): void {\n\t\tconst index = tokens.findIndex((it) => it === \"on\" || it === \"off\");\n\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- it must be present of it wouldn't be found */\n\t\tconst value = tokens.item(index)!;\n\t\tconst location = tokens.location(index);\n\t\tif (tokens.length > 1) {\n\t\t\tconst context: RuleContext = {\n\t\t\t\tmsg: MessageID.InvalidCombination,\n\t\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- it must be present of it wouldn't be found */\n\t\t\t\tfirst: tokens.item(index > 0 ? 0 : 1)!,\n\t\t\t\tsecond: value,\n\t\t\t};\n\t\t\tthis.report({\n\t\t\t\tnode,\n\t\t\t\tmessage: getTerminalMessage(context),\n\t\t\t\tlocation,\n\t\t\t\tcontext,\n\t\t\t});\n\t\t}\n\t\tswitch (mantle) {\n\t\t\tcase \"expectation\":\n\t\t\t\treturn;\n\t\t\tcase \"anchor\": {\n\t\t\t\tconst context: RuleContext = {\n\t\t\t\t\tmsg: MessageID.InvalidValue,\n\t\t\t\t\ttype: \"hidden\",\n\t\t\t\t\tvalue,\n\t\t\t\t\twhat: `<input type=\"hidden\">`,\n\t\t\t\t};\n\t\t\t\tthis.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tmessage: getTerminalMessage(context),\n\t\t\t\t\tlocation: tokens.location(0),\n\t\t\t\t\tcontext,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate validateTokens(node: HtmlElement, tokens: DOMTokenList, keyLocation: Location): void {\n\t\tconst order: TokenType[] = [];\n\n\t\tfor (const { item, location } of tokens.iterator()) {\n\t\t\tconst tokenType = matchToken(item);\n\t\t\tif (tokenType) {\n\t\t\t\torder.push(tokenType);\n\t\t\t} else {\n\t\t\t\tconst context: RuleContext = {\n\t\t\t\t\tmsg: MessageID.InvalidToken,\n\t\t\t\t\ttoken: item,\n\t\t\t\t};\n\t\t\t\tthis.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tmessage: getTerminalMessage(context),\n\t\t\t\t\tlocation,\n\t\t\t\t\tcontext,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst fieldTokens = order.map((it) => it === \"field1\" || it === \"field2\");\n\n\t\tthis.validateFieldPresence(node, tokens, fieldTokens, keyLocation);\n\t\tthis.validateContact(node, tokens, order);\n\t\tthis.validateOrder(node, tokens, order);\n\t\tthis.validateControlGroup(node, tokens, fieldTokens);\n\t}\n\n\t/**\n\t * Ensure that exactly one field name is present from the two field lists.\n\t */\n\tprivate validateFieldPresence(\n\t\tnode: HtmlElement,\n\t\ttokens: DOMTokenList,\n\t\tfieldTokens: boolean[],\n\t\tkeyLocation: Location,\n\t): void {\n\t\tconst numFields = fieldTokens.filter(Boolean).length;\n\t\tif (numFields === 0) {\n\t\t\tconst context: RuleContext = {\n\t\t\t\tmsg: MessageID.MissingField,\n\t\t\t};\n\t\t\tthis.report({\n\t\t\t\tnode,\n\t\t\t\tmessage: getTerminalMessage(context),\n\t\t\t\tlocation: keyLocation,\n\t\t\t\tcontext,\n\t\t\t});\n\t\t} else if (numFields > 1) {\n\t\t\tconst a = fieldTokens.indexOf(true);\n\t\t\tconst b = fieldTokens.lastIndexOf(true);\n\t\t\tconst context: RuleContext = {\n\t\t\t\tmsg: MessageID.InvalidCombination,\n\t\t\t\t/* eslint-disable @typescript-eslint/no-non-null-assertion -- it must be present of it wouldn't be found */\n\t\t\t\tfirst: tokens.item(a)!,\n\t\t\t\tsecond: tokens.item(b)!,\n\t\t\t\t/* eslint-enable @typescript-eslint/no-non-null-assertion */\n\t\t\t};\n\t\t\tthis.report({\n\t\t\t\tnode,\n\t\t\t\tmessage: getTerminalMessage(context),\n\t\t\t\tlocation: tokens.location(b),\n\t\t\t\tcontext,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Ensure contact token is only used with field names from the second list.\n\t */\n\tprivate validateContact(node: HtmlElement, tokens: DOMTokenList, order: TokenType[]): void {\n\t\tif (order.includes(\"contact\") && order.includes(\"field1\")) {\n\t\t\tconst a = order.indexOf(\"field1\");\n\t\t\tconst b = order.indexOf(\"contact\");\n\t\t\tconst context: RuleContext = {\n\t\t\t\tmsg: MessageID.InvalidCombination,\n\t\t\t\t/* eslint-disable @typescript-eslint/no-non-null-assertion -- it must be present of it wouldn't be found */\n\t\t\t\tfirst: tokens.item(a)!,\n\t\t\t\tsecond: tokens.item(b)!,\n\t\t\t\t/* eslint-enable @typescript-eslint/no-non-null-assertion */\n\t\t\t};\n\t\t\tthis.report({\n\t\t\t\tnode,\n\t\t\t\tmessage: getTerminalMessage(context),\n\t\t\t\tlocation: tokens.location(b),\n\t\t\t\tcontext,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate validateOrder(node: HtmlElement, tokens: DOMTokenList, order: TokenType[]): void {\n\t\tconst indicies = order.map((it) => expectedOrder.indexOf(it));\n\t\tfor (let i = 0; i < indicies.length - 1; i++) {\n\t\t\tif (indicies[0] > indicies[i + 1]) {\n\t\t\t\tconst context: RuleContext = {\n\t\t\t\t\tmsg: MessageID.InvalidOrder,\n\t\t\t\t\t/* eslint-disable @typescript-eslint/no-non-null-assertion -- it must be present of it wouldn't be found */\n\t\t\t\t\tfirst: tokens.item(i)!,\n\t\t\t\t\tsecond: tokens.item(i + 1)!,\n\t\t\t\t\t/* eslint-enable @typescript-eslint/no-non-null-assertion */\n\t\t\t\t};\n\t\t\t\tthis.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tmessage: getTerminalMessage(context),\n\t\t\t\t\tlocation: tokens.location(i + 1),\n\t\t\t\t\tcontext,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate validateControlGroup(\n\t\tnode: HtmlElement,\n\t\ttokens: DOMTokenList,\n\t\tfieldTokens: boolean[],\n\t): void {\n\t\tconst numFields = fieldTokens.filter(Boolean).length;\n\t\tif (numFields === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* only <input> has restrictions on what field names can be used */\n\t\tif (!node.is(\"input\")) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* if type attribute is dynamic we assume anything goes */\n\t\tconst attr = node.getAttribute(\"type\");\n\t\tconst type = attr?.value ?? \"text\";\n\t\tif (type instanceof DynamicValue) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst controlGroups = getControlGroups(type);\n\t\tconst fieldIndex = fieldTokens.indexOf(true);\n\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- it must be present of it wouldn't be found */\n\t\tconst fieldToken = tokens.item(fieldIndex)!;\n\t\tconst fieldGroup = fieldNameGroup[fieldToken];\n\t\tif (!controlGroups.includes(fieldGroup)) {\n\t\t\tconst context: RuleContext = {\n\t\t\t\tmsg: MessageID.InvalidValue,\n\t\t\t\ttype,\n\t\t\t\tvalue: fieldToken,\n\t\t\t\twhat: `<input type=\"${type}\">`,\n\t\t\t};\n\t\t\tthis.report({\n\t\t\t\tnode,\n\t\t\t\tmessage: getTerminalMessage(context),\n\t\t\t\tlocation: tokens.location(fieldIndex),\n\t\t\t\tcontext,\n\t\t\t});\n\t\t}\n\t}\n}\n","import { DynamicValue } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleOptions {\n\trelaxed: boolean;\n}\n\nexport enum RuleContext {\n\tEMPTY = 1,\n\tWHITESPACE,\n\tLEADING_CHARACTER,\n\tDISALLOWED_CHARACTER,\n}\n\nconst defaults: RuleOptions = {\n\trelaxed: false,\n};\n\nexport default class ValidID extends Rule<RuleContext, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\trelaxed: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\tconst { relaxed } = this.options;\n\t\tconst message = this.messages[context]\n\t\t\t.replace(\"id\", \"ID\")\n\t\t\t.replace(/^(.)/, (m) => m.toUpperCase());\n\t\tconst relaxedDescription = relaxed\n\t\t\t? []\n\t\t\t: [\n\t\t\t\t\t\" - ID must begin with a letter\",\n\t\t\t\t\t\" - ID must only contain letters, digits, `-` and `_`\",\n\t\t\t\t];\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t`${message}.`,\n\t\t\t\t\"\",\n\t\t\t\t\"Under the current configuration the following rules are applied:\",\n\t\t\t\t\"\",\n\t\t\t\t\" - ID must not be empty\",\n\t\t\t\t\" - ID must not contain any whitespace characters\",\n\t\t\t\t...relaxedDescription,\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", this.isRelevant, (event: AttributeEvent) => {\n\t\t\tconst { value } = event;\n\n\t\t\tif (value === null || value instanceof DynamicValue) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (value === \"\") {\n\t\t\t\tconst context = RuleContext.EMPTY;\n\t\t\t\tthis.report(event.target, this.messages[context], event.location, context);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (value.match(/\\s/)) {\n\t\t\t\tconst context = RuleContext.WHITESPACE;\n\t\t\t\tthis.report(event.target, this.messages[context], event.valueLocation, context);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { relaxed } = this.options;\n\t\t\tif (relaxed) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (value.match(/^[^\\p{L}]/u)) {\n\t\t\t\tconst context = RuleContext.LEADING_CHARACTER;\n\t\t\t\tthis.report(event.target, this.messages[context], event.valueLocation, context);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (value.match(/[^\\p{L}\\p{N}_-]/u)) {\n\t\t\t\tconst context = RuleContext.DISALLOWED_CHARACTER;\n\t\t\t\tthis.report(event.target, this.messages[context], event.valueLocation, context);\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected get messages(): Record<RuleContext, string> {\n\t\treturn {\n\t\t\t[RuleContext.EMPTY]: \"element id must not be empty\",\n\t\t\t[RuleContext.WHITESPACE]: \"element id must not contain whitespace\",\n\t\t\t[RuleContext.LEADING_CHARACTER]: \"element id must begin with a letter\",\n\t\t\t[RuleContext.DISALLOWED_CHARACTER]:\n\t\t\t\t\"element id must only contain letters, digits, dash and underscore characters\",\n\t\t};\n\t}\n\n\tprotected isRelevant(this: void, event: AttributeEvent): boolean {\n\t\treturn event.key === \"id\";\n\t}\n}\n","import { NodeClosed } from \"../dom\";\nimport { type TagEndEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class VoidContent extends Rule<string> {\n\tpublic documentation(tagName: string): RuleDocumentation {\n\t\tconst doc: RuleDocumentation = {\n\t\t\tdescription:\n\t\t\t\t\"HTML void elements cannot have any content and must not have content or end tag.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t\tif (tagName) {\n\t\t\tdoc.description = `<${tagName}> is a void element and must not have content or end tag.`;\n\t\t}\n\t\treturn doc;\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\tconst node = event.target; // The current element being closed.\n\n\t\t\tif (!node) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!node.voidElement) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (node.closed === NodeClosed.EndTag) {\n\t\t\t\tthis.report(\n\t\t\t\t\tnull,\n\t\t\t\t\t`End tag for <${node.tagName}> must be omitted`,\n\t\t\t\t\tnode.location,\n\t\t\t\t\tnode.tagName,\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type HtmlElement, NodeClosed } from \"../dom\";\nimport { type TagEndEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\n/**\n * @internal\n */\nexport enum Style {\n\tAlwaysOmit = 1,\n\tAlwaysSelfclose = 2,\n}\n\n/**\n * @internal\n */\nexport interface RuleContext {\n\tstyle: Style;\n\ttagName: string;\n}\n\ninterface RuleOptions {\n\tstyle: \"omit\" | \"selfclose\" | \"selfclosing\";\n}\n\nconst defaults: RuleOptions = {\n\tstyle: \"omit\",\n};\n\nexport default class VoidStyle extends Rule<RuleContext, RuleOptions> {\n\tprivate style: Style;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.style = parseStyle(this.options.style);\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tstyle: {\n\t\t\t\tenum: [\"omit\", \"selfclose\", \"selfclosing\"],\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\tconst [desc, end] = styleDescription(context.style);\n\t\treturn {\n\t\t\tdescription: `The current configuration requires void elements to ${desc}, use <${context.tagName}${end}> instead.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\tconst active = event.previous; // The current active element (that is, the current element on the stack)\n\n\t\t\tif (active.meta) {\n\t\t\t\tthis.validateActive(active);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate validateActive(node: HtmlElement): void {\n\t\t/* ignore non-void elements, they must be closed with regular end tag */\n\t\tif (!node.voidElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.shouldBeOmitted(node)) {\n\t\t\tthis.reportError(\n\t\t\t\tnode,\n\t\t\t\t`Expected omitted end tag <${node.tagName}> instead of self-closing element <${node.tagName}/>`,\n\t\t\t);\n\t\t}\n\n\t\tif (this.shouldBeSelfClosed(node)) {\n\t\t\tthis.reportError(\n\t\t\t\tnode,\n\t\t\t\t`Expected self-closing element <${node.tagName}/> instead of omitted end-tag <${node.tagName}>`,\n\t\t\t);\n\t\t}\n\t}\n\n\tpublic reportError(node: HtmlElement, message: string): void {\n\t\tconst context: RuleContext = {\n\t\t\tstyle: this.style,\n\t\t\ttagName: node.tagName,\n\t\t};\n\t\tsuper.report(node, message, null, context);\n\t}\n\n\tprivate shouldBeOmitted(node: HtmlElement): boolean {\n\t\treturn this.style === Style.AlwaysOmit && node.closed === NodeClosed.VoidSelfClosed;\n\t}\n\n\tprivate shouldBeSelfClosed(node: HtmlElement): boolean {\n\t\treturn this.style === Style.AlwaysSelfclose && node.closed === NodeClosed.VoidOmitted;\n\t}\n}\n\nfunction parseStyle(name: string): Style {\n\tswitch (name) {\n\t\tcase \"omit\":\n\t\t\treturn Style.AlwaysOmit;\n\t\tcase \"selfclose\":\n\t\tcase \"selfclosing\":\n\t\t\treturn Style.AlwaysSelfclose;\n\t\t/* istanbul ignore next: covered by schema validation */\n\t\tdefault:\n\t\t\tthrow new Error(`Invalid style \"${name}\" for \"void-style\" rule`);\n\t}\n}\n\nfunction styleDescription(style: Style): [string, string] {\n\tswitch (style) {\n\t\tcase Style.AlwaysOmit:\n\t\t\treturn [\"omit end tag\", \"\"];\n\t\tcase Style.AlwaysSelfclose:\n\t\t\treturn [\"be self-closed\", \"/\"];\n\t\t// istanbul ignore next: will only happen if new styles are added, otherwise this isn't reached\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown style`);\n\t}\n}\n","import { type DOMReadyEvent } from \"../../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../../rule\";\nimport { hasAltText, hasAriaLabel } from \"../helper\";\nimport { inAccessibilityTree } from \"../helper/a11y\";\nimport { classifyNodeText, TextClassification } from \"../helper/text\";\n\nexport default class H30 extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"WCAG 2.1 requires each `<a href>` anchor link to have a text describing the purpose of the link using either plain text or an `<img>` with the `alt` attribute set.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst links = event.document.getElementsByTagName(\"a\");\n\t\t\tfor (const link of links) {\n\t\t\t\t/* ignore links missing the href attribute */\n\t\t\t\tif (!link.hasAttribute(\"href\")) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/* ignore links with aria-hidden=\"true\" */\n\t\t\t\tif (!inAccessibilityTree(link)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/* check if text content is present (or dynamic) */\n\t\t\t\tconst textClassification = classifyNodeText(link, { ignoreHiddenRoot: true });\n\t\t\t\tif (textClassification !== TextClassification.EMPTY_TEXT) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/* check if image with alt-text is present */\n\t\t\t\tconst images = link.querySelectorAll(\"img\");\n\t\t\t\tif (images.some((image) => hasAltText(image))) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/* check if aria-label is present on either the <a> element or a descendant */\n\t\t\t\tconst labels = link.querySelectorAll(\"[aria-label]\");\n\t\t\t\tif (hasAriaLabel(link) || labels.some((cur) => hasAriaLabel(cur))) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis.report(link, \"Anchor link must have a text describing its purpose\");\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type DOMTree, type HtmlElement } from \"../../dom\";\nimport { type DOMReadyEvent } from \"../../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../../rule\";\n\nexport default class H32 extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"WCAG 2.1 requires each `<form>` element to have at least one submit button.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\t/* query all tags with form property, normally this is only the <form> tag\n\t\t * but with custom element metadata other tags might be considered form\n\t\t * (usually a component wrapping a <form> element) */\n\t\tconst formTags = this.getTagsWithProperty(\"form\");\n\t\tconst formSelector = formTags.join(\",\");\n\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tconst forms = document.querySelectorAll(formSelector);\n\n\t\t\tfor (const form of forms) {\n\t\t\t\t/* find nested submit buttons */\n\t\t\t\tif (hasNestedSubmit(form)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/* find explicitly associated submit buttons */\n\t\t\t\tif (hasAssociatedSubmit(document, form)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis.report(form, `<${form.tagName}> element must have a submit button`);\n\t\t\t}\n\t\t});\n\t}\n}\n\nfunction isSubmit(node: HtmlElement): boolean {\n\tconst type = node.getAttribute(\"type\");\n\treturn Boolean(!type || type.valueMatches(/submit|image/));\n}\n\nfunction isAssociated(id: string, node: HtmlElement): boolean {\n\tconst form = node.getAttribute(\"form\");\n\treturn Boolean(form?.valueMatches(id, true));\n}\n\nfunction hasNestedSubmit(form: HtmlElement): boolean {\n\tconst matches = form\n\t\t.querySelectorAll(\"button,input\")\n\t\t.filter(isSubmit)\n\t\t.filter((node) => !node.hasAttribute(\"form\"));\n\treturn matches.length > 0;\n}\n\nfunction hasAssociatedSubmit(document: DOMTree, form: HtmlElement): boolean {\n\tconst { id } = form;\n\tif (!id) {\n\t\treturn false;\n\t}\n\tconst matches = document\n\t\t.querySelectorAll(\"button[form],input[form]\")\n\t\t.filter(isSubmit)\n\t\t.filter((node) => isAssociated(id, node));\n\treturn matches.length > 0;\n}\n","import { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../../rule\";\nimport { hasAltText } from \"../helper\";\nimport { inAccessibilityTree } from \"../helper/a11y\";\n\nexport default class H36 extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t\"WCAG 2.1 requires all images used as submit buttons to have a non-empty textual description using the `alt` attribute.\",\n\t\t\t\t'The alt text cannot be empty (`alt=\"\"`).',\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event) => {\n\t\t\t/* only handle input elements */\n\t\t\tconst node = event.previous;\n\t\t\tif (node.tagName !== \"input\") return;\n\n\t\t\t/* only handle images with type=\"image\" */\n\t\t\tif (node.getAttributeValue(\"type\") !== \"image\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!inAccessibilityTree(node)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!hasAltText(node)) {\n\t\t\t\tconst message = \"image used as submit button must have non-empty alt text\";\n\t\t\t\tconst alt = node.getAttribute(\"alt\");\n\t\t\t\tthis.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tmessage,\n\t\t\t\t\tlocation: alt ? alt.keyLocation : node.location,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type HtmlElement } from \"../../dom\";\nimport { type DOMReadyEvent } from \"../../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../../rule\";\nimport { inAccessibilityTree } from \"../helper/a11y\";\n\ninterface RuleOptions {\n\tallowEmpty: boolean;\n\talias: string | string[];\n}\n\nconst defaults: RuleOptions = {\n\tallowEmpty: true,\n\talias: [],\n};\n\nexport default class H37 extends Rule<void, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\n\t\t/* ensure alias is array */\n\t\tif (!Array.isArray(this.options.alias)) {\n\t\t\tthis.options.alias = [this.options.alias];\n\t\t}\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\talias: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tallowEmpty: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"Both HTML5 and WCAG 2.0 requires images to have a alternative text for each image.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tconst nodes = document.querySelectorAll(\"img\");\n\t\t\tfor (const node of nodes) {\n\t\t\t\tthis.validateNode(node);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate validateNode(node: HtmlElement): void {\n\t\t/* ignore images with aria-hidden=\"true\" or role=\"presentation\" */\n\t\tif (!inAccessibilityTree(node)) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* validate plain alt-attribute */\n\t\tif (\n\t\t\tBoolean(node.getAttributeValue(\"alt\")) ||\n\t\t\tBoolean(node.hasAttribute(\"alt\") && this.options.allowEmpty)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* validate if any non-empty alias is present */\n\t\tfor (const attr of this.options.alias) {\n\t\t\tif (node.getAttribute(attr)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst tag = node.annotatedName;\n\t\tif (node.hasAttribute(\"alt\")) {\n\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- we just verified presence with hasAttribute */\n\t\t\tconst attr = node.getAttribute(\"alt\")!;\n\t\t\t/* istanbul ignore next */\n\t\t\tthis.report(node, `${tag} cannot have empty \"alt\" attribute`, attr.keyLocation);\n\t\t} else {\n\t\t\tthis.report(node, `${tag} is missing required \"alt\" attribute`, node.location);\n\t\t}\n\t}\n}\n","import { type TagReadyEvent } from \"../../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../../rule\";\nimport html5 from \"../../elements/html5\";\nimport { type MetaAttribute } from \"../../meta\";\nimport { naturalJoin } from \"../../utils/natural-join\";\nimport { DynamicValue } from \"../../dom\";\n\n/* istanbul ignore next: this will always be present for the <th>\n * attribute (or the tests would fail) */\nconst { enum: validScopes } = html5.th.attributes?.scope as MetaAttribute & { enum: string[] };\n\nconst joinedScopes = naturalJoin(validScopes);\n\nexport default class H63 extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"H63: Using the scope attribute to associate header cells and data cells in data tables\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:ready\", (event: TagReadyEvent) => {\n\t\t\tconst node = event.target;\n\n\t\t\t/* only validate th */\n\t\t\tif (node.tagName !== \"th\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst scope = node.getAttribute(\"scope\");\n\t\t\tconst value = scope?.value;\n\n\t\t\t/* ignore dynamic scope */\n\t\t\tif (value instanceof DynamicValue) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore elements with valid scope values */\n\t\t\tif (value && validScopes.includes(value)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst message = `<th> element must have a valid scope attribute: ${joinedScopes}`;\n\t\t\tconst location = scope?.valueLocation ?? scope?.keyLocation ?? node.location;\n\t\t\tthis.report(node, message, location);\n\t\t});\n\t}\n}\n","import { type TagEndEvent } from \"../../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../../rule\";\n\nexport default class H67 extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"A decorative image cannot have a title attribute. Either remove `title` or add a descriptive `alt` text.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\tconst node = event.target;\n\n\t\t\t/* only validate images */\n\t\t\tif (!node || node.tagName !== \"img\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore images without title */\n\t\t\tconst title = node.getAttribute(\"title\");\n\t\t\tif (!title || title.value === \"\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore elements with non-empty alt-text */\n\t\t\tconst alt = node.getAttributeValue(\"alt\");\n\t\t\tif (alt && alt !== \"\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.report(node, \"<img> with empty alt text cannot have title attribute\", title.keyLocation);\n\t\t});\n\t}\n}\n","import { type DOMReadyEvent } from \"../../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../../rule\";\nimport { type HtmlElement } from \"../../dom\";\n\nexport default class H71 extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"H71: Providing a description for groups of form controls using fieldset and legend elements\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tconst fieldsets = document.querySelectorAll(this.selector);\n\t\t\tfor (const fieldset of fieldsets) {\n\t\t\t\tthis.validate(fieldset);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate validate(fieldset: HtmlElement): void {\n\t\tconst legend = fieldset.querySelectorAll(\"> legend\");\n\t\tif (legend.length === 0) {\n\t\t\tthis.reportNode(fieldset);\n\t\t}\n\t}\n\n\tprivate reportNode(node: HtmlElement): void {\n\t\tsuper.report(node, `${node.annotatedName} must have a <legend> as the first child`);\n\t}\n\n\tprivate get selector(): string {\n\t\treturn this.getTagsDerivedFrom(\"fieldset\").join(\",\");\n\t}\n}\n","import { type RuleConstructor } from \"../../rule\";\n\nimport H30 from \"./h30\";\nimport H32 from \"./h32\";\nimport H36 from \"./h36\";\nimport H37 from \"./h37\";\nimport H63 from \"./h63\";\nimport H67 from \"./h67\";\nimport H71 from \"./h71\";\n\nconst bundledRules: Record<string, RuleConstructor<any, any>> = {\n\t\"wcag/h30\": H30,\n\t\"wcag/h32\": H32,\n\t\"wcag/h36\": H36,\n\t\"wcag/h37\": H37,\n\t\"wcag/h63\": H63,\n\t\"wcag/h67\": H67,\n\t\"wcag/h71\": H71,\n};\n\nexport default bundledRules;\n","import { type RuleConstructor } from \"../rule\";\nimport AllowedLinks from \"./allowed-links\";\nimport AreaAlt from \"./area-alt\";\nimport AriaHiddenBody from \"./aria-hidden-body\";\nimport AriaLabelMisuse from \"./aria-label-misuse\";\nimport AttrCase from \"./attr-case\";\nimport AttrDelimiter from \"./attr-delimiter\";\nimport AttrPattern from \"./attr-pattern\";\nimport AttrQuotes from \"./attr-quotes\";\nimport AttrSpacing from \"./attr-spacing\";\nimport AttributeAllowedValues from \"./attribute-allowed-values\";\nimport AttributeBooleanStyle from \"./attribute-boolean-style\";\nimport AttributeEmptyStyle from \"./attribute-empty-style\";\nimport AttributeMisuse from \"./attribute-misuse\";\nimport ClassPattern from \"./class-pattern\";\nimport CloseAttr from \"./close-attr\";\nimport CloseOrder from \"./close-order\";\nimport Deprecated from \"./deprecated\";\nimport DeprecatedRule from \"./deprecated-rule\";\nimport DoctypeHtml from \"./doctype-html\";\nimport DoctypeStyle from \"./doctype-style\";\nimport ElementCase from \"./element-case\";\nimport ElementName from \"./element-name\";\nimport ElementPermittedContent from \"./element-permitted-content\";\nimport ElementPermittedOccurrences from \"./element-permitted-occurrences\";\nimport ElementPermittedOrder from \"./element-permitted-order\";\nimport ElementPermittedParent from \"./element-permitted-parent\";\nimport ElementRequiredAncestor from \"./element-required-ancestor\";\nimport ElementRequiredAttributes from \"./element-required-attributes\";\nimport ElementRequiredContent from \"./element-required-content\";\nimport EmptyHeading from \"./empty-heading\";\nimport EmptyTitle from \"./empty-title\";\nimport FormDupName from \"./form-dup-name\";\nimport HeadingLevel from \"./heading-level\";\nimport HiddenFocusable from \"./hidden-focusable\";\nimport IdPattern from \"./id-pattern\";\nimport InputAttributes from \"./input-attributes\";\nimport InputMissingLabel from \"./input-missing-label\";\nimport LongTitle from \"./long-title\";\nimport MetaRefresh from \"./meta-refresh\";\nimport MapDupName from \"./map-dup-name\";\nimport MapIdName from \"./map-id-name\";\nimport MissingDoctype from \"./missing-doctype\";\nimport MultipleLabeledControls from \"./multiple-labeled-controls\";\nimport NamePattern from \"./name-pattern\";\nimport NoAbstractRole from \"./no-abstract-role\";\nimport NoAutoplay from \"./no-autoplay\";\nimport NoConditionalComment from \"./no-conditional-comment\";\nimport NoDeprecatedAttr from \"./no-deprecated-attr\";\nimport NoDupAttr from \"./no-dup-attr\";\nimport NoDupClass from \"./no-dup-class\";\nimport NoDupId from \"./no-dup-id\";\nimport NoImplicitButtonType from \"./no-implicit-button-type\";\nimport NoImplicitInputType from \"./no-implicit-input-type\";\nimport NoImplicitClose from \"./no-implicit-close\";\nimport NoInlineStyle from \"./no-inline-style\";\nimport NoMissingReferences from \"./no-missing-references\";\nimport NoMultipleMain from \"./no-multiple-main\";\nimport NoRawCharacters from \"./no-raw-characters\";\nimport NoRedundantAriaLabel from \"./no-redundant-aria-label\";\nimport NoRedundantFor from \"./no-redundant-for\";\nimport NoRedundantRole from \"./no-redundant-role\";\nimport NoSelfClosing from \"./no-self-closing\";\nimport NoStyleTag from \"./no-style-tag\";\nimport NoTrailingWhitespace from \"./no-trailing-whitespace\";\nimport NoUnknownElements from \"./no-unknown-elements\";\nimport NoUnusedDisable from \"./no-unused-disable\";\nimport NoUtf8Bom from \"./no-utf8-bom\";\nimport PreferButton from \"./prefer-button\";\nimport PreferNativeElement from \"./prefer-native-element\";\nimport PreferTbody from \"./prefer-tbody\";\nimport RequireCSPNonce from \"./require-csp-nonce\";\nimport RequireSri from \"./require-sri\";\nimport ScriptElement from \"./script-element\";\nimport ScriptType from \"./script-type\";\nimport SvgFocusable from \"./svg-focusable\";\nimport TelNonBreaking from \"./tel-non-breaking\";\nimport TextContent from \"./text-content\";\nimport UniqueLandmark from \"./unique-landmark\";\nimport UnrecognizedCharRef from \"./unrecognized-char-ref\";\nimport ValidAutocomplete from \"./valid-autocomplete\";\nimport ValidID from \"./valid-id\";\nimport VoidContent from \"./void-content\";\nimport VoidStyle from \"./void-style\";\nimport WCAG from \"./wcag\";\n\nconst bundledRules: Record<string, RuleConstructor<any, any>> = {\n\t\"allowed-links\": AllowedLinks,\n\t\"area-alt\": AreaAlt,\n\t\"aria-hidden-body\": AriaHiddenBody,\n\t\"aria-label-misuse\": AriaLabelMisuse,\n\t\"attr-case\": AttrCase,\n\t\"attr-delimiter\": AttrDelimiter,\n\t\"attr-pattern\": AttrPattern,\n\t\"attr-quotes\": AttrQuotes,\n\t\"attr-spacing\": AttrSpacing,\n\t\"attribute-allowed-values\": AttributeAllowedValues,\n\t\"attribute-boolean-style\": AttributeBooleanStyle,\n\t\"attribute-empty-style\": AttributeEmptyStyle,\n\t\"attribute-misuse\": AttributeMisuse,\n\t\"class-pattern\": ClassPattern,\n\t\"close-attr\": CloseAttr,\n\t\"close-order\": CloseOrder,\n\tdeprecated: Deprecated,\n\t\"deprecated-rule\": DeprecatedRule,\n\t\"doctype-html\": DoctypeHtml,\n\t\"doctype-style\": DoctypeStyle,\n\t\"element-case\": ElementCase,\n\t\"element-name\": ElementName,\n\t\"element-permitted-content\": ElementPermittedContent,\n\t\"element-permitted-occurrences\": ElementPermittedOccurrences,\n\t\"element-permitted-order\": ElementPermittedOrder,\n\t\"element-permitted-parent\": ElementPermittedParent,\n\t\"element-required-ancestor\": ElementRequiredAncestor,\n\t\"element-required-attributes\": ElementRequiredAttributes,\n\t\"element-required-content\": ElementRequiredContent,\n\t\"empty-heading\": EmptyHeading,\n\t\"empty-title\": EmptyTitle,\n\t\"form-dup-name\": FormDupName,\n\t\"heading-level\": HeadingLevel,\n\t\"hidden-focusable\": HiddenFocusable,\n\t\"id-pattern\": IdPattern,\n\t\"input-attributes\": InputAttributes,\n\t\"input-missing-label\": InputMissingLabel,\n\t\"long-title\": LongTitle,\n\t\"map-dup-name\": MapDupName,\n\t\"map-id-name\": MapIdName,\n\t\"meta-refresh\": MetaRefresh,\n\t\"missing-doctype\": MissingDoctype,\n\t\"multiple-labeled-controls\": MultipleLabeledControls,\n\t\"name-pattern\": NamePattern,\n\t\"no-abstract-role\": NoAbstractRole,\n\t\"no-autoplay\": NoAutoplay,\n\t\"no-conditional-comment\": NoConditionalComment,\n\t\"no-deprecated-attr\": NoDeprecatedAttr,\n\t\"no-dup-attr\": NoDupAttr,\n\t\"no-dup-class\": NoDupClass,\n\t\"no-dup-id\": NoDupId,\n\t\"no-implicit-button-type\": NoImplicitButtonType,\n\t\"no-implicit-input-type\": NoImplicitInputType,\n\t\"no-implicit-close\": NoImplicitClose,\n\t\"no-inline-style\": NoInlineStyle,\n\t\"no-missing-references\": NoMissingReferences,\n\t\"no-multiple-main\": NoMultipleMain,\n\t\"no-raw-characters\": NoRawCharacters,\n\t\"no-redundant-aria-label\": NoRedundantAriaLabel,\n\t\"no-redundant-for\": NoRedundantFor,\n\t\"no-redundant-role\": NoRedundantRole,\n\t\"no-self-closing\": NoSelfClosing,\n\t\"no-style-tag\": NoStyleTag,\n\t\"no-trailing-whitespace\": NoTrailingWhitespace,\n\t\"no-unknown-elements\": NoUnknownElements,\n\t\"no-unused-disable\": NoUnusedDisable,\n\t\"no-utf8-bom\": NoUtf8Bom,\n\t\"prefer-button\": PreferButton,\n\t\"prefer-native-element\": PreferNativeElement,\n\t\"prefer-tbody\": PreferTbody,\n\t\"require-csp-nonce\": RequireCSPNonce,\n\t\"require-sri\": RequireSri,\n\t\"script-element\": ScriptElement,\n\t\"script-type\": ScriptType,\n\t\"svg-focusable\": SvgFocusable,\n\t\"tel-non-breaking\": TelNonBreaking,\n\t\"text-content\": TextContent,\n\t\"unique-landmark\": UniqueLandmark,\n\t\"unrecognized-char-ref\": UnrecognizedCharRef,\n\t\"valid-autocomplete\": ValidAutocomplete,\n\t\"valid-id\": ValidID,\n\t\"void-content\": VoidContent,\n\t\"void-style\": VoidStyle,\n\t...WCAG,\n};\n\nexport default bundledRules;\n","import rules from \"../rules\";\n\nconst ruleIds = new Set<string>(Object.keys(rules));\n\n/**\n * Returns true if given ruleId is an existing builtin rule. It does not handle\n * rules loaded via plugins.\n *\n * Can be used to create forward/backward compatibility by checking if a rule\n * exists to enable/disable it.\n *\n * @public\n * @param ruleId - Rule id to check\n * @returns `true` if rule exists\n */\nexport function ruleExists(ruleId: string): boolean {\n\treturn ruleIds.has(ruleId);\n}\n","import { type HtmlElement, DOMTree } from \"../dom\";\n\n/**\n * @public\n * @since 8.21.0\n */\nexport interface Walk {\n\t/**\n\t * Visits all nodes in the tree starting at node or document in a depth-first\n\t * (in-order) manner, i.e. any children will be visited before its parent.\n\t *\n\t * @public\n\t * @since 8.21.0\n\t * @param root - Element or document to visit nodes from.\n\t * @param callback - Callback executed for each node.\n\t */\n\tdepthFirst(this: void, root: HtmlElement | DOMTree, callback: (node: HtmlElement) => void): void;\n}\n\nfunction depthFirst(\n\tthis: void,\n\troot: HtmlElement | DOMTree,\n\tcallback: (node: HtmlElement) => void,\n): void {\n\tif (root instanceof DOMTree) {\n\t\tif (root.readyState !== \"complete\") {\n\t\t\tthrow new Error(`Cannot call walk.depthFirst(..) before document is ready`);\n\t\t}\n\t\troot = root.root;\n\t}\n\n\tfunction visit(node: HtmlElement): void {\n\t\tnode.childElements.forEach(visit);\n\t\tif (!node.isRootElement()) {\n\t\t\tcallback(node);\n\t\t}\n\t}\n\n\tvisit(root);\n}\n\n/**\n * Helper functions to walk the DOM tree.\n *\n * @public\n * @since 8.21.0\n */\nexport const walk: Walk = {\n\tdepthFirst,\n};\n","import { type Location } from \"../context\";\nimport { type MetaTable } from \"../meta\";\nimport { walk } from \"../utils\";\nimport { HtmlElement } from \"./htmlelement\";\n\n/**\n * @public\n */\nexport class DOMTree {\n\tpublic readonly root: HtmlElement;\n\tprivate active: HtmlElement;\n\tprivate _readyState: \"loading\" | \"complete\";\n\tpublic doctype: string | null;\n\n\t/**\n\t * @internal\n\t */\n\tpublic constructor(location: Location) {\n\t\tthis.root = HtmlElement.rootNode(location);\n\t\tthis.active = this.root;\n\t\tthis.doctype = null;\n\t\tthis._readyState = \"loading\";\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic pushActive(node: HtmlElement): void {\n\t\tthis.active = node;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic popActive(): void {\n\t\tif (this.active.isRootElement()) {\n\t\t\t/* root element should never be popped, continue as if nothing happened */\n\t\t\treturn;\n\t\t}\n\t\tthis.active = this.active.parent ?? this.root;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic getActive(): HtmlElement {\n\t\treturn this.active;\n\t}\n\n\t/**\n\t * Describes the loading state of the document.\n\t *\n\t * When `\"loading\"` it is still not safe to use functions such as\n\t * `querySelector` or presence of attributes, child nodes, etc.\n\t */\n\tpublic get readyState(): \"loading\" | \"complete\" {\n\t\treturn this._readyState;\n\t}\n\n\t/**\n\t * Resolve dynamic meta expressions.\n\t *\n\t * @internal\n\t */\n\tpublic resolveMeta(table: MetaTable): void {\n\t\tthis._readyState = \"complete\";\n\t\twalk.depthFirst(this, (node: HtmlElement) => {\n\t\t\ttable.resolve(node);\n\t\t});\n\t}\n\n\tpublic getElementsByTagName(tagName: string): HtmlElement[] {\n\t\treturn this.root.getElementsByTagName(tagName);\n\t}\n\n\t/**\n\t * @deprecated use utility function `walk.depthFirst(..)` instead (since 8.21.0).\n\t */\n\tpublic visitDepthFirst(callback: (node: HtmlElement) => void): void {\n\t\twalk.depthFirst(this, callback);\n\t}\n\n\t/**\n\t * @deprecated use `querySelector(..)` instead (since 8.21.0)\n\t */\n\tpublic find(callback: (node: HtmlElement) => boolean): HtmlElement | null {\n\t\treturn this.root.find(callback);\n\t}\n\n\tpublic querySelector(selector: string): HtmlElement | null {\n\t\treturn this.root.querySelector(selector);\n\t}\n\n\tpublic querySelectorAll(selector: string): HtmlElement[] {\n\t\treturn this.root.querySelectorAll(selector);\n\t}\n}\n","import { type Attribute, type HtmlElement, DynamicValue, DOMTokenList } from \"../dom\";\nimport {\n\ttype MetaAttribute,\n\ttype Permitted,\n\ttype PermittedEntry,\n\ttype PermittedGroup,\n\ttype PermittedOrder,\n\ttype RequiredAncestors,\n\ttype RequiredContent,\n\ttype CategoryOrTag,\n} from \"./element\";\n\nconst allowedKeys = [\"exclude\"];\n\n/**\n * Helper class to validate elements against metadata rules.\n *\n * @public\n */\n/* eslint-disable-next-line @typescript-eslint/no-extraneous-class -- technical debt, should probably be plain functions maybe in an object */\nexport class Validator {\n\t/**\n\t * Test if element is used in a proper context.\n\t *\n\t * @param node - Element to test.\n\t * @param rules - List of rules.\n\t * @returns `true` if element passes all tests.\n\t */\n\tpublic static validatePermitted(node: HtmlElement, rules: Permitted | null): boolean {\n\t\tif (!rules) {\n\t\t\treturn true;\n\t\t}\n\t\treturn rules.some((rule) => {\n\t\t\treturn Validator.validatePermittedRule(node, rule);\n\t\t});\n\t}\n\n\t/**\n\t * Test if an element is used the correct amount of times.\n\t *\n\t * For instance, a `<table>` element can only contain a single `<tbody>`\n\t * child. If multiple `<tbody>` exists this test will fail both nodes.\n\t * Note that this is called on the parent but will fail the children violating\n\t * the rule.\n\t *\n\t * @param children - Array of children to validate.\n\t * @param rules - List of rules of the parent element.\n\t * @returns `true` if the parent element of the children passes the test.\n\t */\n\tpublic static validateOccurrences(\n\t\tchildren: HtmlElement[],\n\t\trules: Permitted | null,\n\t\tcb: (node: HtmlElement, category: string) => void,\n\t): boolean {\n\t\tif (!rules) {\n\t\t\treturn true;\n\t\t}\n\t\tlet valid: boolean = true;\n\t\tfor (const rule of rules) {\n\t\t\t/** @todo handle complex rules and not just plain arrays (but as of now\n\t\t\t * there is no use-case for it) */\n\t\t\t// istanbul ignore next\n\t\t\tif (typeof rule !== \"string\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Check if the rule has a quantifier\n\t\t\tconst [, category, quantifier] = rule.match(/^(@?.*?)([?*]?)$/)!; // eslint-disable-line @typescript-eslint/no-non-null-assertion -- will always match\n\t\t\tconst limit = category && quantifier && parseQuantifier(quantifier);\n\n\t\t\tif (limit) {\n\t\t\t\tconst siblings = children.filter((cur) =>\n\t\t\t\t\tValidator.validatePermittedCategory(cur, rule, true),\n\t\t\t\t);\n\t\t\t\tif (siblings.length > limit) {\n\t\t\t\t\t// fail only the children above the limit (currently limit can only be 1)\n\t\t\t\t\tfor (const child of siblings.slice(limit)) {\n\t\t\t\t\t\tcb(child, category);\n\t\t\t\t\t}\n\t\t\t\t\tvalid = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn valid;\n\t}\n\n\t/**\n\t * Validate elements order.\n\t *\n\t * Given a parent element with children and metadata containing permitted\n\t * order it will validate each children and ensure each one exists in the\n\t * specified order.\n\t *\n\t * For instance, for a `<table>` element the `<caption>` element must come\n\t * before a `<thead>` which must come before `<tbody>`.\n\t *\n\t * @param children - Array of children to validate.\n\t */\n\tpublic static validateOrder(\n\t\tchildren: HtmlElement[],\n\t\trules: PermittedOrder | null,\n\t\tcb: (node: HtmlElement, prev: HtmlElement) => void,\n\t): boolean {\n\t\tif (!rules) {\n\t\t\treturn true;\n\t\t}\n\t\tlet i = 0;\n\t\tlet prev: HtmlElement | null = null;\n\t\tfor (const node of children) {\n\t\t\tconst old = i;\n\t\t\twhile (rules[i] && !Validator.validatePermittedCategory(node, rules[i], true)) {\n\t\t\t\ti++;\n\t\t\t}\n\n\t\t\tif (i >= rules.length) {\n\t\t\t\t/* Second check is if the order is specified for this element at all. It\n\t\t\t\t * will be unspecified in two cases:\n\t\t\t\t * - disallowed elements\n\t\t\t\t * - elements where the order doesn't matter\n\t\t\t\t * In both of these cases no error should be reported. */\n\t\t\t\tconst orderSpecified = rules.find((cur: string) =>\n\t\t\t\t\tValidator.validatePermittedCategory(node, cur, true),\n\t\t\t\t);\n\t\t\t\tif (orderSpecified) {\n\t\t\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- technical debt, should never happen */\n\t\t\t\t\tcb(node, prev!);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t/* if this element has unspecified order the index is restored so new\n\t\t\t\t * elements of the same type can be specified again */\n\t\t\t\ti = old;\n\t\t\t}\n\t\t\tprev = node;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Validate element ancestors.\n\t *\n\t * Check if an element has the required set of elements. At least one of the\n\t * selectors must match.\n\t */\n\tpublic static validateAncestors(node: HtmlElement, rules: RequiredAncestors | null): boolean {\n\t\tif (!rules || rules.length === 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn rules.some((rule) => node.closest(rule));\n\t}\n\n\t/**\n\t * Validate element required content.\n\t *\n\t * Check if an element has the required set of elements. At least one of the\n\t * selectors must match.\n\t *\n\t * Returns `[]` when valid or a list of required but missing tagnames or\n\t * categories.\n\t */\n\tpublic static validateRequiredContent(\n\t\tnode: HtmlElement,\n\t\trules: RequiredContent | null,\n\t): CategoryOrTag[] {\n\t\tif (!rules || rules.length === 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn rules.filter((tagName) => {\n\t\t\tconst haveMatchingChild = node.childElements.some((child) =>\n\t\t\t\tValidator.validatePermittedCategory(child, tagName, false),\n\t\t\t);\n\t\t\treturn !haveMatchingChild;\n\t\t});\n\t}\n\n\t/**\n\t * Test if an attribute has an allowed value and/or format.\n\t *\n\t * @param attr - Attribute to test.\n\t * @param rules - Element attribute metadta.\n\t * @returns `true` if attribute passes all tests.\n\t */\n\tpublic static validateAttribute(\n\t\tattr: Attribute,\n\t\trules: Record<string, MetaAttribute | undefined>,\n\t): boolean {\n\t\tconst rule = rules[attr.key];\n\t\tif (!rule) {\n\t\t\treturn true;\n\t\t}\n\n\t\t/* consider dynamic values as valid as there is no way to properly test them\n\t\t * while using transformed sources, i.e. it must be tested when running in a\n\t\t * browser instead */\n\t\tconst value = attr.value;\n\t\tif (value instanceof DynamicValue) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst empty = value === null || value === \"\";\n\n\t\t/* if boolean is set the value can be either null, empty string or the\n\t\t * attribute key (attribute-boolean-style regulates style) */\n\t\tif (rule.boolean) {\n\t\t\treturn empty || value === attr.key;\n\t\t}\n\n\t\t/* if omit is set the value can be either null or empty string\n\t\t * (attribute-empty style regulates style) */\n\t\tif (rule.omit && empty) {\n\t\t\treturn true;\n\t\t}\n\n\t\t/* validate each token when using list, all tokens must be valid */\n\t\tif (rule.list) {\n\t\t\tconst tokens = new DOMTokenList(value, attr.valueLocation);\n\t\t\treturn tokens.every((token) => {\n\t\t\t\treturn this.validateAttributeValue(token, rule);\n\t\t\t});\n\t\t}\n\n\t\treturn this.validateAttributeValue(value, rule);\n\t}\n\n\tprivate static validateAttributeValue(value: string | null, rule: MetaAttribute): boolean {\n\t\t/* skip attribute if it not have enumerated list */\n\t\tif (!rule.enum) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (value === null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst caseInsensitiveValue = value.toLowerCase();\n\n\t\treturn rule.enum.some((entry: string | RegExp) => {\n\t\t\tif (entry instanceof RegExp) {\n\t\t\t\t/* regular expressions are matched case-sensitive */\n\t\t\t\treturn !!value.match(entry);\n\t\t\t} else {\n\t\t\t\t/* strings matched case-insensitive */\n\t\t\t\treturn caseInsensitiveValue === entry;\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate static validatePermittedRule(\n\t\tnode: HtmlElement,\n\t\trule: PermittedEntry,\n\t\tisExclude: boolean = false,\n\t): boolean {\n\t\tif (typeof rule === \"string\") {\n\t\t\treturn Validator.validatePermittedCategory(node, rule, !isExclude);\n\t\t} else if (Array.isArray(rule)) {\n\t\t\treturn rule.every((inner: PermittedEntry) => {\n\t\t\t\treturn Validator.validatePermittedRule(node, inner, isExclude);\n\t\t\t});\n\t\t} else {\n\t\t\tvalidateKeys(rule);\n\t\t\tif (rule.exclude) {\n\t\t\t\tif (Array.isArray(rule.exclude)) {\n\t\t\t\t\treturn !rule.exclude.some((inner: PermittedEntry) => {\n\t\t\t\t\t\treturn Validator.validatePermittedRule(node, inner, true);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn !Validator.validatePermittedRule(node, rule.exclude, true);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Validate node against a content category.\n\t *\n\t * When matching parent nodes against permitted parents use the superset\n\t * parameter to also match for `@flow`. E.g. if a node expects a `@phrasing`\n\t * parent it should also allow `@flow` parent since `@phrasing` is a subset of\n\t * `@flow`.\n\t *\n\t * @param node - The node to test against\n\t * @param category - Name of category with `@` prefix or tag name.\n\t * @param defaultMatch - The default return value when node categories is not known.\n\t */\n\t/* eslint-disable-next-line complexity -- rule does not like switch */\n\tpublic static validatePermittedCategory(\n\t\tnode: HtmlElement,\n\t\tcategory: string,\n\t\tdefaultMatch: boolean,\n\t): boolean {\n\t\tconst [, rawCategory] = category.match(/^(@?.*?)([?*]?)$/)!; // eslint-disable-line @typescript-eslint/no-non-null-assertion -- will always match\n\n\t\t/* match tagName when an explicit name is given */\n\t\tif (!rawCategory.startsWith(\"@\")) {\n\t\t\treturn node.tagName === rawCategory;\n\t\t}\n\n\t\t/* if the meta entry is missing assume any content model would match */\n\t\tif (!node.meta) {\n\t\t\treturn defaultMatch;\n\t\t}\n\n\t\tswitch (rawCategory) {\n\t\t\tcase \"@meta\":\n\t\t\t\treturn node.meta.metadata as boolean;\n\t\t\tcase \"@flow\":\n\t\t\t\treturn node.meta.flow as boolean;\n\t\t\tcase \"@sectioning\":\n\t\t\t\treturn node.meta.sectioning as boolean;\n\t\t\tcase \"@heading\":\n\t\t\t\treturn node.meta.heading as boolean;\n\t\t\tcase \"@phrasing\":\n\t\t\t\treturn node.meta.phrasing as boolean;\n\t\t\tcase \"@embedded\":\n\t\t\t\treturn node.meta.embedded as boolean;\n\t\t\tcase \"@interactive\":\n\t\t\t\treturn node.meta.interactive as boolean;\n\t\t\tcase \"@script\":\n\t\t\t\treturn Boolean(node.meta.scriptSupporting);\n\t\t\tcase \"@form\":\n\t\t\t\treturn Boolean(node.meta.form);\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid content category \"${category}\"`);\n\t\t}\n\t}\n}\n\nfunction validateKeys(rule: PermittedGroup): void {\n\tfor (const key of Object.keys(rule)) {\n\t\tif (!allowedKeys.includes(key)) {\n\t\t\tconst str = JSON.stringify(rule);\n\t\t\tthrow new Error(`Permitted rule \"${str}\" contains unknown property \"${key}\"`);\n\t\t}\n\t}\n}\n\nfunction parseQuantifier(quantifier: string): number | null {\n\tswitch (quantifier) {\n\t\tcase \"?\":\n\t\t\treturn 1;\n\t\tcase \"*\":\n\t\t\treturn null;\n\t\t// istanbul ignore next\n\t\tdefault:\n\t\t\tthrow new Error(`Invalid quantifier \"${quantifier}\" used`);\n\t}\n}\n","export { type TransformContext } from \"./context\";\nexport { type Transformer } from \"./transformer\";\n\n/**\n * @internal\n */\nexport const TRANSFORMER_API: { readonly VERSION: number } = {\n\tVERSION: 1,\n};\n","export default {};\n","import { type ConfigData } from \"../config-data\";\n\nconst config: ConfigData = {\n\trules: {\n\t\t\"area-alt\": [\"error\", { accessible: true }],\n\t\t\"aria-hidden-body\": \"error\",\n\t\t\"aria-label-misuse\": [\"error\", { allowAnyNamable: false }],\n\t\t\"deprecated-rule\": \"warn\",\n\t\t\"empty-heading\": \"error\",\n\t\t\"empty-title\": \"error\",\n\t\t\"hidden-focusable\": \"error\",\n\t\t\"meta-refresh\": \"error\",\n\t\t\"multiple-labeled-controls\": \"error\",\n\t\t\"no-abstract-role\": \"error\",\n\t\t\"no-autoplay\": [\"error\", { include: [\"audio\", \"video\"] }],\n\t\t\"no-dup-id\": \"error\",\n\t\t\"no-implicit-button-type\": \"error\",\n\t\t\"no-redundant-aria-label\": \"error\",\n\t\t\"no-redundant-for\": \"error\",\n\t\t\"no-redundant-role\": \"error\",\n\t\t\"prefer-native-element\": \"error\",\n\t\t\"svg-focusable\": \"off\",\n\t\t\"text-content\": \"error\",\n\t\t\"unique-landmark\": \"error\",\n\t\t\"valid-autocomplete\": \"error\",\n\t\t\"wcag/h30\": \"error\",\n\t\t\"wcag/h32\": \"error\",\n\t\t\"wcag/h36\": \"error\",\n\t\t\"wcag/h37\": \"error\",\n\t\t\"wcag/h63\": \"error\",\n\t\t\"wcag/h67\": \"error\",\n\t\t\"wcag/h71\": \"error\",\n\t},\n};\n\nexport default config;\n","import { type ConfigData } from \"../config-data\";\n\nconst config: ConfigData = {\n\trules: {\n\t\t\"input-missing-label\": \"error\",\n\t\t\"heading-level\": \"error\",\n\t\t\"missing-doctype\": \"error\",\n\t\t\"no-missing-references\": \"error\",\n\t\t\"require-sri\": \"error\",\n\t},\n};\n\nexport default config;\n","import { type ConfigData } from \"../config-data\";\n\nconst config: ConfigData = {\n\trules: {\n\t\t\"attr-quotes\": \"off\",\n\t\t\"doctype-style\": \"off\",\n\t\t\"void-style\": \"off\",\n\t},\n};\n\nexport default config;\n","import { type ConfigData } from \"../config-data\";\n\nconst config: ConfigData = {\n\trules: {\n\t\t\"area-alt\": [\"error\", { accessible: true }],\n\t\t\"aria-hidden-body\": \"error\",\n\t\t\"aria-label-misuse\": [\"error\", { allowAnyNamable: false }],\n\t\t\"attr-case\": \"error\",\n\t\t\"attr-delimiter\": \"error\",\n\t\t\"attr-quotes\": \"error\",\n\t\t\"attr-spacing\": \"error\",\n\t\t\"attribute-allowed-values\": \"error\",\n\t\t\"attribute-boolean-style\": \"error\",\n\t\t\"attribute-empty-style\": \"error\",\n\t\t\"attribute-misuse\": \"error\",\n\t\t\"close-attr\": \"error\",\n\t\t\"close-order\": \"error\",\n\t\tdeprecated: \"error\",\n\t\t\"deprecated-rule\": \"warn\",\n\t\t\"doctype-html\": \"error\",\n\t\t\"doctype-style\": \"error\",\n\t\t\"element-case\": \"error\",\n\t\t\"element-name\": \"error\",\n\t\t\"element-permitted-content\": \"error\",\n\t\t\"element-permitted-occurrences\": \"error\",\n\t\t\"element-permitted-order\": \"error\",\n\t\t\"element-permitted-parent\": \"error\",\n\t\t\"element-required-ancestor\": \"error\",\n\t\t\"element-required-attributes\": \"error\",\n\t\t\"element-required-content\": \"error\",\n\t\t\"empty-heading\": \"error\",\n\t\t\"empty-title\": \"error\",\n\t\t\"form-dup-name\": \"error\",\n\t\t\"hidden-focusable\": \"error\",\n\t\t\"input-attributes\": \"error\",\n\t\t\"long-title\": \"error\",\n\t\t\"map-dup-name\": \"error\",\n\t\t\"map-id-name\": \"error\",\n\t\t\"meta-refresh\": \"error\",\n\t\t\"multiple-labeled-controls\": \"error\",\n\t\t\"no-abstract-role\": \"error\",\n\t\t\"no-autoplay\": [\"error\", { include: [\"audio\", \"video\"] }],\n\t\t\"no-conditional-comment\": \"error\",\n\t\t\"no-deprecated-attr\": \"error\",\n\t\t\"no-dup-attr\": \"error\",\n\t\t\"no-dup-class\": \"error\",\n\t\t\"no-dup-id\": \"error\",\n\t\t\"no-implicit-button-type\": \"error\",\n\t\t\"no-implicit-input-type\": \"error\",\n\t\t\"no-implicit-close\": \"error\",\n\t\t\"no-inline-style\": \"error\",\n\t\t\"no-multiple-main\": \"error\",\n\t\t\"no-raw-characters\": \"error\",\n\t\t\"no-redundant-aria-label\": \"error\",\n\t\t\"no-redundant-for\": \"error\",\n\t\t\"no-redundant-role\": \"error\",\n\t\t\"no-self-closing\": \"error\",\n\t\t\"no-trailing-whitespace\": \"error\",\n\t\t\"no-utf8-bom\": \"error\",\n\t\t\"no-unused-disable\": \"error\",\n\t\t\"prefer-button\": \"error\",\n\t\t\"prefer-native-element\": \"error\",\n\t\t\"prefer-tbody\": \"error\",\n\t\t\"script-element\": \"error\",\n\t\t\"script-type\": \"error\",\n\t\t\"svg-focusable\": \"off\",\n\t\t\"tel-non-breaking\": \"error\",\n\t\t\"text-content\": \"error\",\n\t\t\"unique-landmark\": \"error\",\n\t\t\"unrecognized-char-ref\": \"error\",\n\t\t\"valid-autocomplete\": \"error\",\n\t\t\"valid-id\": [\"error\", { relaxed: false }],\n\t\tvoid: \"off\",\n\t\t\"void-content\": \"error\",\n\t\t\"void-style\": \"error\",\n\t\t\"wcag/h30\": \"error\",\n\t\t\"wcag/h32\": \"error\",\n\t\t\"wcag/h36\": \"error\",\n\t\t\"wcag/h37\": \"error\",\n\t\t\"wcag/h63\": \"error\",\n\t\t\"wcag/h67\": \"error\",\n\t\t\"wcag/h71\": \"error\",\n\t},\n};\n\nexport default config;\n","import { type ConfigData } from \"../config-data\";\n\nconst config: ConfigData = {\n\trules: {\n\t\t\"area-alt\": [\"error\", { accessible: false }],\n\t\t\"aria-label-misuse\": [\"error\", { allowAnyNamable: true }],\n\t\t\"attr-spacing\": \"error\",\n\t\t\"attribute-allowed-values\": \"error\",\n\t\t\"attribute-misuse\": \"error\",\n\t\t\"close-attr\": \"error\",\n\t\t\"close-order\": \"error\",\n\t\tdeprecated: \"error\",\n\t\t\"deprecated-rule\": \"warn\",\n\t\t\"doctype-html\": \"error\",\n\t\t\"element-name\": \"error\",\n\t\t\"element-permitted-content\": \"error\",\n\t\t\"element-permitted-occurrences\": \"error\",\n\t\t\"element-permitted-order\": \"error\",\n\t\t\"element-permitted-parent\": \"error\",\n\t\t\"element-required-ancestor\": \"error\",\n\t\t\"element-required-attributes\": \"error\",\n\t\t\"element-required-content\": \"error\",\n\t\t\"map-dup-name\": \"error\",\n\t\t\"map-id-name\": \"error\",\n\t\t\"multiple-labeled-controls\": \"error\",\n\t\t\"no-abstract-role\": \"error\",\n\t\t\"no-deprecated-attr\": \"error\",\n\t\t\"no-dup-attr\": \"error\",\n\t\t\"no-dup-id\": \"error\",\n\t\t\"no-multiple-main\": \"error\",\n\t\t\"no-raw-characters\": [\"error\", { relaxed: true }],\n\t\t\"no-unused-disable\": \"error\",\n\t\t\"script-element\": \"error\",\n\t\t\"unrecognized-char-ref\": \"error\",\n\t\t\"valid-autocomplete\": \"error\",\n\t\t\"valid-id\": [\"error\", { relaxed: true }],\n\t\t\"void-content\": \"error\",\n\t},\n};\n\nexport default config;\n","import { type ConfigData } from \"../config-data\";\nimport a11y from \"./a11y\";\nimport document from \"./document\";\nimport prettier from \"./prettier\";\nimport recommended from \"./recommended\";\nimport standard from \"./standard\";\n\n/**\n * @internal\n */\nconst presets: Record<string, ConfigData> = {\n\t\"html-validate:a11y\": a11y,\n\n\t\"html-validate:document\": document,\n\t\"html-validate:prettier\": prettier,\n\t\"html-validate:recommended\": recommended,\n\t\"html-validate:standard\": standard,\n\n\t/* @deprecated aliases */\n\t\"htmlvalidate:recommended\": recommended,\n\t\"htmlvalidate:document\": document,\n\t\"html-validate:a17y\": a11y,\n};\n\nexport default presets;\n","import fs from \"fs\";\nimport { type Source } from \"../context\";\nimport { ensureError, NestedError } from \"../error\";\nimport { type MetaTable } from \"../meta\";\nimport { type Plugin } from \"../plugin\";\nimport { type TransformContext, type Transformer } from \"../transform\";\nimport { type ConfigData, type RuleOptions } from \"./config-data\";\nimport { type Severity } from \"./severity\";\n\n/**\n * @public\n */\nexport interface TransformerEntry {\n\tpattern: RegExp;\n\tname: string;\n\tfn: Transformer;\n}\n\n/**\n * @public\n */\nexport interface ResolvedConfigData {\n\tmetaTable: MetaTable;\n\tplugins: Plugin[];\n\trules: Map<string, [Severity, RuleOptions]>;\n\ttransformers: TransformerEntry[];\n}\n\n/**\n * A resolved configuration is a normalized configuration with all extends,\n * plugins etc resolved.\n *\n * @public\n */\nexport class ResolvedConfig {\n\tprivate metaTable: MetaTable;\n\tprivate plugins: Plugin[];\n\tprivate rules: Map<string, [Severity, RuleOptions]>;\n\tprivate transformers: TransformerEntry[];\n\n\t/** The original data this resolved configuration was created from */\n\tprivate original: ConfigData;\n\n\t/**\n\t * @internal\n\t */\n\tpublic constructor(\n\t\t{ metaTable, plugins, rules, transformers }: ResolvedConfigData,\n\t\toriginal: ConfigData,\n\t) {\n\t\tthis.metaTable = metaTable;\n\t\tthis.plugins = plugins;\n\t\tthis.rules = rules;\n\t\tthis.transformers = transformers;\n\t\tthis.original = original;\n\t}\n\n\t/**\n\t * Returns the (merged) configuration data used to create this resolved\n\t * configuration.\n\t */\n\tpublic getConfigData(): ConfigData {\n\t\treturn this.original;\n\t}\n\n\tpublic getMetaTable(): MetaTable {\n\t\treturn this.metaTable;\n\t}\n\n\tpublic getPlugins(): Plugin[] {\n\t\treturn this.plugins;\n\t}\n\n\tpublic getRules(): Map<string, [Severity, RuleOptions]> {\n\t\treturn this.rules;\n\t}\n\n\t/**\n\t * Transform a source.\n\t *\n\t * When transforming zero or more new sources will be generated.\n\t *\n\t * @param source - Current source to transform.\n\t * @param filename - If set it is the filename used to match\n\t * transformer. Default is to use filename from source.\n\t * @returns A list of transformed sources ready for validation.\n\t */\n\tpublic transformSource(source: Source, filename?: string): Source[] {\n\t\tconst transformer = this.findTransformer(filename ?? source.filename);\n\t\tconst context: TransformContext = {\n\t\t\thasChain: (filename: string): boolean => {\n\t\t\t\treturn !!this.findTransformer(filename);\n\t\t\t},\n\t\t\tchain: (source: Source, filename: string) => {\n\t\t\t\treturn this.transformSource(source, filename);\n\t\t\t},\n\t\t};\n\t\tif (transformer) {\n\t\t\ttry {\n\t\t\t\treturn Array.from(transformer.fn.call(context, source), (cur: Source) => {\n\t\t\t\t\t/* keep track of which transformers that has been run on this source\n\t\t\t\t\t * by appending this entry to the transformedBy array */\n\t\t\t\t\tcur.transformedBy ??= [];\n\t\t\t\t\tcur.transformedBy.push(transformer.name);\n\t\t\t\t\treturn cur;\n\t\t\t\t});\n\t\t\t} catch (err: unknown) {\n\t\t\t\t/* istanbul ignore next: only used as a fallback */\n\t\t\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\t\t\tthrow new NestedError(\n\t\t\t\t\t`When transforming \"${source.filename}\": ${message}`,\n\t\t\t\t\tensureError(err),\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\treturn [source];\n\t\t}\n\t}\n\n\t/**\n\t * Wrapper around [[transformSource]] which reads a file before passing it\n\t * as-is to transformSource.\n\t *\n\t * @param filename - Filename to transform (according to configured\n\t * transformations)\n\t * @returns A list of transformed sources ready for validation.\n\t */\n\tpublic transformFilename(filename: string): Source[] {\n\t\tconst stdin = 0;\n\t\tconst src = filename !== \"/dev/stdin\" ? filename : stdin;\n\t\tconst data = fs.readFileSync(src, { encoding: \"utf8\" });\n\t\tconst source: Source = {\n\t\t\tdata,\n\t\t\tfilename,\n\t\t\tline: 1,\n\t\t\tcolumn: 1,\n\t\t\toffset: 0,\n\t\t\toriginalData: data,\n\t\t};\n\t\treturn this.transformSource(source);\n\t}\n\n\t/**\n\t * Returns true if a transformer matches given filename.\n\t */\n\tpublic canTransform(filename: string): boolean {\n\t\tconst entry = this.findTransformer(filename);\n\t\treturn !!entry;\n\t}\n\n\tprivate findTransformer(filename: string): TransformerEntry | null {\n\t\tconst match = this.transformers.find((entry: TransformerEntry) => entry.pattern.test(filename));\n\t\treturn match ?? null;\n\t}\n}\n","import { UserError } from \"../../error\";\nimport { type MetaDataTable } from \"../../meta\";\nimport { type Plugin } from \"../../plugin\";\nimport { type Transformer } from \"../../transform\";\nimport { type ConfigData } from \"../config-data\";\nimport { type Resolver, type ResolverOptions } from \"./resolver\";\n\ntype BoundResolver<K extends keyof Resolver> = Resolver & Required<Pick<Resolver, K>>;\n\nfunction haveResolver<K extends keyof Resolver>(\n\tkey: K,\n\tvalue: Resolver,\n): value is BoundResolver<K> {\n\treturn key in value;\n}\n\nfunction haveConfigResolver(value: Resolver): value is BoundResolver<\"resolveConfig\"> {\n\treturn haveResolver(\"resolveConfig\", value);\n}\n\nfunction haveElementsResolver(value: Resolver): value is BoundResolver<\"resolveElements\"> {\n\treturn haveResolver(\"resolveElements\", value);\n}\n\nfunction havePluginResolver(value: Resolver): value is BoundResolver<\"resolvePlugin\"> {\n\treturn haveResolver(\"resolvePlugin\", value);\n}\n\nfunction haveTransformerResolver(value: Resolver): value is BoundResolver<\"resolveTransformer\"> {\n\treturn haveResolver(\"resolveTransformer\", value);\n}\n\n/**\n * @internal\n */\nexport function resolveConfig(\n\tresolvers: Resolver[],\n\tid: string,\n\toptions: ResolverOptions,\n): ConfigData {\n\tfor (const resolver of resolvers.filter(haveConfigResolver)) {\n\t\tconst config = resolver.resolveConfig(id, options);\n\t\tif (config) {\n\t\t\treturn config;\n\t\t}\n\t}\n\tthrow new UserError(`Failed to load configuration from \"${id}\"`);\n}\n\n/**\n * @internal\n */\nexport function resolveElements(\n\tresolvers: Resolver[],\n\tid: string,\n\toptions: ResolverOptions,\n): MetaDataTable {\n\tfor (const resolver of resolvers.filter(haveElementsResolver)) {\n\t\tconst elements = resolver.resolveElements(id, options);\n\t\tif (elements) {\n\t\t\treturn elements;\n\t\t}\n\t}\n\tthrow new UserError(`Failed to load elements from \"${id}\"`);\n}\n\n/**\n * @internal\n */\nexport function resolvePlugin(resolvers: Resolver[], id: string, options: ResolverOptions): Plugin {\n\tfor (const resolver of resolvers.filter(havePluginResolver)) {\n\t\tconst plugin = resolver.resolvePlugin(id, options);\n\t\tif (plugin) {\n\t\t\treturn plugin;\n\t\t}\n\t}\n\tthrow new UserError(`Failed to load plugin from \"${id}\"`);\n}\n\n/**\n * @internal\n */\nexport function resolveTransformer(\n\tresolvers: Resolver[],\n\tid: string,\n\toptions: ResolverOptions,\n): Transformer {\n\tfor (const resolver of resolvers.filter(haveTransformerResolver)) {\n\t\tconst transformer = resolver.resolveTransformer(id, options);\n\t\tif (transformer) {\n\t\t\treturn transformer;\n\t\t}\n\t}\n\tthrow new UserError(`Failed to load transformer from \"${id}\"`);\n}\n","import { type MetaDataTable } from \"../../../meta\";\nimport { type Plugin } from \"../../../plugin\";\nimport { type Transformer } from \"../../../transform\";\nimport { type ConfigData } from \"../../config-data\";\nimport { type Resolver } from \"../resolver\";\n\n/**\n * Entries for the static resolver.\n *\n * @public\n * @since 8.0.0\n */\nexport interface StaticResolverMap {\n\telements?: Record<string, MetaDataTable>;\n\tconfigs?: Record<string, ConfigData>;\n\tplugins?: Record<string, Plugin>;\n\ttransformers?: Record<string, Transformer>;\n}\n\n/**\n * Static resolver.\n *\n * @public\n * @since 8.0.0\n */\nexport interface StaticResolver extends Required<Resolver> {\n\taddElements(id: string, elements: MetaDataTable): void;\n\taddConfig(id: string, config: ConfigData): void;\n\taddPlugin(id: string, plugin: Plugin): void;\n\taddTransformer(id: string, transformer: Transformer): void;\n}\n\n/**\n * Create a new resolver for static content, i.e. plugins or transformers known\n * at compile time.\n *\n * @public\n * @since 8.0.0\n */\nexport function staticResolver(map: StaticResolverMap = {}): StaticResolver {\n\tconst { elements = {}, configs = {}, plugins = {}, transformers = {} } = map;\n\treturn {\n\t\tname: \"static-qresolver\",\n\t\taddElements(id: string, value: MetaDataTable): void {\n\t\t\telements[id] = value;\n\t\t},\n\t\taddConfig(id: string, value: ConfigData): void {\n\t\t\tconfigs[id] = value;\n\t\t},\n\t\taddPlugin(id: string, value: Plugin): void {\n\t\t\tplugins[id] = value;\n\t\t},\n\t\taddTransformer(id: string, value: Transformer): void {\n\t\t\ttransformers[id] = value;\n\t\t},\n\t\tresolveElements(id: string): MetaDataTable | null {\n\t\t\treturn elements[id] ?? null;\n\t\t},\n\t\tresolveConfig(id: string): ConfigData | null {\n\t\t\treturn configs[id] ?? null;\n\t\t},\n\t\tresolvePlugin(id: string): Plugin | null {\n\t\t\treturn plugins[id] ?? null;\n\t\t},\n\t\tresolveTransformer(id: string): Transformer | null {\n\t\t\treturn transformers[id] ?? null;\n\t\t},\n\t};\n}\n","import Ajv from \"ajv\";\nimport ajvSchemaDraft from \"ajv/lib/refs/json-schema-draft-06.json\";\nimport deepmerge from \"deepmerge\";\nimport { bundledElements } from \"../elements\";\nimport { ensureError, SchemaValidationError } from \"../error\";\nimport { MetaTable } from \"../meta\";\nimport { type MetaDataTable, type MetaElement, MetaCopyableProperty } from \"../meta/element\";\nimport { type Plugin } from \"../plugin\";\nimport schema from \"../schema/config.json\";\nimport { type Transformer, TRANSFORMER_API } from \"../transform\";\nimport bundledRules from \"../rules\";\nimport { Rule } from \"../rule\";\nimport {\n\ttype ConfigData,\n\ttype RuleConfig,\n\ttype RuleOptions,\n\ttype TransformMap,\n} from \"./config-data\";\nimport defaultConfig from \"./default\";\nimport { ConfigError } from \"./error\";\nimport { type Severity, parseSeverity } from \"./severity\";\nimport Presets from \"./presets\";\nimport { type ResolvedConfigData, type TransformerEntry, ResolvedConfig } from \"./resolved-config\";\nimport {\n\ttype Resolver,\n\tresolvePlugin,\n\tresolveTransformer,\n\tresolveConfig,\n\tresolveElements,\n} from \"./resolver\";\n\n/**\n * Internal interface for a loaded plugin.\n *\n * @internal\n */\nexport interface LoadedPlugin extends Plugin {\n\tname: string;\n\toriginalName: string;\n}\n\nconst ajv = new Ajv({ strict: true, strictTuples: true, strictTypes: true });\najv.addMetaSchema(ajvSchemaDraft);\n\nconst validator = ajv.compile(schema);\n\nfunction overwriteMerge<T>(a: T[], b: T[]): T[] {\n\treturn b;\n}\n\nfunction mergeInternal(base: ConfigData, rhs: ConfigData): ConfigData {\n\tconst dst = deepmerge(base, { ...rhs, rules: {} });\n\n\t/* rules need some special care, should overwrite arrays instead of\n\t * concaternation, i.e. [\"error\", {...options}] should not be merged by\n\t * appending to old value */\n\tif (rhs.rules) {\n\t\tdst.rules = deepmerge(dst.rules, rhs.rules, { arrayMerge: overwriteMerge });\n\t}\n\n\t/* root property is merged with boolean \"or\" since it should always be truthy\n\t * if any config has it set. */\n\tconst root = Boolean(base.root) || Boolean(rhs.root);\n\tif (root) {\n\t\tdst.root = root;\n\t}\n\n\treturn dst;\n}\n\nfunction toArray<T>(value: T | T[]): T[] {\n\tif (Array.isArray(value)) {\n\t\treturn value;\n\t} else {\n\t\treturn [value];\n\t}\n}\n\n/**\n * Configuration holder.\n *\n * Each file being validated will have a unique instance of this class.\n *\n * @public\n */\nexport class Config {\n\tprivate config: ConfigData;\n\tprivate configurations: Map<string, ConfigData>;\n\tprivate initialized: boolean;\n\n\tprivate resolvers: Resolver[];\n\tprivate metaTable: MetaTable | null;\n\tprivate plugins: LoadedPlugin[];\n\tprivate transformers: TransformerEntry[] = [];\n\n\t/**\n\t * Create a new blank configuration. See also `Config.defaultConfig()`.\n\t */\n\tpublic static empty(): Config {\n\t\treturn Config.create([], {\n\t\t\textends: [],\n\t\t\trules: {},\n\t\t\tplugins: [],\n\t\t\ttransform: {},\n\t\t});\n\t}\n\n\t/**\n\t * Create configuration from object.\n\t */\n\tpublic static fromObject(\n\t\tresolvers: Resolver | Resolver[],\n\t\toptions: ConfigData,\n\t\tfilename: string | null = null,\n\t): Config {\n\t\tConfig.validate(options, filename);\n\t\treturn Config.create(resolvers, options);\n\t}\n\n\t/**\n\t * Read configuration from filename.\n\t *\n\t * Note: this reads configuration data from a file. If you intent to load\n\t * configuration for a file to validate use `ConfigLoader.fromTarget()`.\n\t *\n\t * @internal\n\t * @param filename - The file to read from\n\t */\n\tpublic static fromFile(resolvers: Resolver | Resolver[], filename: string): Config {\n\t\tconst configData = resolveConfig(toArray(resolvers), filename, { cache: false });\n\t\treturn Config.fromObject(resolvers, configData, filename);\n\t}\n\n\t/**\n\t * Validate configuration data.\n\t *\n\t * Throws SchemaValidationError if invalid.\n\t *\n\t * @internal\n\t */\n\tpublic static validate(configData: ConfigData, filename: string | null = null): void {\n\t\tconst valid = validator(configData);\n\t\tif (!valid) {\n\t\t\tthrow new SchemaValidationError(\n\t\t\t\tfilename,\n\t\t\t\t`Invalid configuration`,\n\t\t\t\tconfigData,\n\t\t\t\tschema,\n\t\t\t\t/* istanbul ignore next: will be set when a validation error has occurred */\n\t\t\t\tvalidator.errors ?? [],\n\t\t\t);\n\t\t}\n\n\t\tif (configData.rules) {\n\t\t\tconst normalizedRules = Config.getRulesObject(configData.rules);\n\t\t\tfor (const [ruleId, [, ruleOptions]] of normalizedRules.entries()) {\n\t\t\t\tconst cls = bundledRules[ruleId];\n\t\t\t\tconst path = `/rules/${ruleId}/1`;\n\t\t\t\tRule.validateOptions(cls, ruleId, path, ruleOptions, filename, configData);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Load a default configuration object.\n\t */\n\tpublic static defaultConfig(): Config {\n\t\treturn Config.create([], defaultConfig);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate static create(resolvers: Resolver | Resolver[], options: ConfigData): Config {\n\t\tconst instance = new Config(resolvers, options);\n\n\t\t/* load plugins */\n\t\tinstance.plugins = instance.loadPlugins(instance.config.plugins ?? []);\n\t\tinstance.configurations = instance.loadConfigurations(instance.plugins);\n\t\tinstance.extendMeta(instance.plugins);\n\n\t\t/* process extended configs */\n\t\tinstance.config = instance.extendConfig(instance.config.extends ?? []);\n\n\t\t/* reset extends as we already processed them, this prevents the next config\n\t\t * from reapplying config from extended config as well as duplicate entries\n\t\t * when merging arrays */\n\t\tinstance.config.extends = [];\n\n\t\t/* rules explicitly set by passed options should have precedence over any\n\t\t * extended rules, not the other way around. */\n\t\tif (options.rules) {\n\t\t\tinstance.config = mergeInternal(instance.config, { rules: options.rules });\n\t\t}\n\n\t\treturn instance;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate constructor(resolvers: Resolver | Resolver[], options: ConfigData) {\n\t\tconst initial: ConfigData = {\n\t\t\textends: [],\n\t\t\tplugins: [],\n\t\t\trules: {},\n\t\t\ttransform: {},\n\t\t};\n\t\tthis.config = mergeInternal(initial, options);\n\t\tthis.configurations = new Map();\n\t\tthis.initialized = false;\n\t\tthis.resolvers = toArray(resolvers);\n\t\tthis.metaTable = null;\n\t\tthis.plugins = [];\n\t}\n\n\t/**\n\t * Initialize plugins, transforms etc.\n\t *\n\t * Must be called before trying to use config. Can safely be called multiple\n\t * times.\n\t *\n\t * @public\n\t */\n\tpublic init(): void {\n\t\tif (this.initialized) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* precompile transform patterns */\n\t\tthis.transformers = this.precompileTransformers(this.config.transform ?? {});\n\n\t\tthis.initialized = true;\n\t}\n\n\t/**\n\t * Returns true if this configuration is marked as \"root\".\n\t */\n\tpublic isRootFound(): boolean {\n\t\treturn Boolean(this.config.root);\n\t}\n\n\t/**\n\t * Returns a new configuration as a merge of the two. Entries from the passed\n\t * object takes priority over this object.\n\t *\n\t * @public\n\t * @param rhs - Configuration to merge with this one.\n\t */\n\tpublic merge(resolvers: Resolver[], rhs: Config): Config {\n\t\treturn Config.create(resolvers, mergeInternal(this.config, rhs.config));\n\t}\n\n\tprivate extendConfig(entries: string[]): ConfigData {\n\t\tif (entries.length === 0) {\n\t\t\treturn this.config;\n\t\t}\n\n\t\tlet base: ConfigData = {};\n\t\tfor (const entry of entries) {\n\t\t\tlet extended: ConfigData;\n\t\t\tif (this.configurations.has(entry)) {\n\t\t\t\textended = this.configurations.get(entry)!; // eslint-disable-line @typescript-eslint/no-non-null-assertion -- map has/get combo\n\t\t\t} else {\n\t\t\t\textended = Config.fromFile(this.resolvers, entry).config;\n\t\t\t}\n\t\t\tbase = mergeInternal(base, extended);\n\t\t}\n\t\treturn mergeInternal(base, this.config);\n\t}\n\n\t/**\n\t * Get element metadata.\n\t *\n\t * @internal\n\t */\n\tpublic getMetaTable(): MetaTable {\n\t\t/* use cached table if it exists */\n\t\tif (this.metaTable) {\n\t\t\treturn this.metaTable;\n\t\t}\n\n\t\tconst metaTable = new MetaTable();\n\t\tconst source = this.config.elements ?? [\"html5\"];\n\n\t\t/* extend validation schema from plugins */\n\t\tfor (const plugin of this.getPlugins()) {\n\t\t\tif (plugin.elementSchema) {\n\t\t\t\tmetaTable.extendValidationSchema(plugin.elementSchema);\n\t\t\t}\n\t\t}\n\n\t\t/* load from all entries */\n\t\tfor (const entry of source) {\n\t\t\t/* load meta directly from entry */\n\t\t\tif (typeof entry !== \"string\") {\n\t\t\t\tmetaTable.loadFromObject(entry as MetaDataTable);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t/* try searching builtin metadata */\n\t\t\tconst bundled = bundledElements[entry] as MetaDataTable | undefined;\n\t\t\tif (bundled) {\n\t\t\t\tmetaTable.loadFromObject(bundled);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t/* load with resolver */\n\t\t\ttry {\n\t\t\t\tconst data = resolveElements(this.resolvers, entry, { cache: false });\n\t\t\t\tmetaTable.loadFromObject(data, entry);\n\t\t\t} catch (err: unknown) {\n\t\t\t\t/* istanbul ignore next: only used as a fallback */\n\t\t\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\t\t\tthrow new ConfigError(\n\t\t\t\t\t`Failed to load elements from \"${entry}\": ${message}`,\n\t\t\t\t\tensureError(err),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tmetaTable.init();\n\t\treturn (this.metaTable = metaTable);\n\t}\n\n\t/**\n\t * Get a copy of internal configuration data.\n\t *\n\t * @internal primary purpose is unittests\n\t */\n\t/* istanbul ignore next: used for testing only */\n\tpublic get(): ConfigData {\n\t\treturn { ...this.config };\n\t}\n\n\t/**\n\t * Get all configured rules, their severity and options.\n\t *\n\t * @internal\n\t */\n\tpublic getRules(): Map<string, [Severity, RuleOptions]> {\n\t\t/* istanbul ignore next: only used as a fallback */\n\t\treturn Config.getRulesObject(this.config.rules ?? {});\n\t}\n\n\tprivate static getRulesObject(src: RuleConfig): Map<string, [Severity, RuleOptions]> {\n\t\tconst rules = new Map<string, [Severity, RuleOptions]>();\n\t\tfor (const [ruleId, data] of Object.entries(src)) {\n\t\t\tlet options = data;\n\t\t\tif (!Array.isArray(options)) {\n\t\t\t\toptions = [options, {}];\n\t\t\t} else if (options.length === 1) {\n\t\t\t\toptions = [options[0], {}];\n\t\t\t}\n\t\t\tconst severity = parseSeverity(options[0]);\n\t\t\trules.set(ruleId, [severity, options[1]]);\n\t\t}\n\t\treturn rules;\n\t}\n\n\t/**\n\t * Get all configured plugins.\n\t *\n\t * @internal\n\t */\n\tpublic getPlugins(): Plugin[] {\n\t\treturn this.plugins;\n\t}\n\n\tprivate loadPlugins(plugins: Array<string | Plugin>): LoadedPlugin[] {\n\t\treturn plugins.map((moduleName: string | Plugin, index: number) => {\n\t\t\tif (typeof moduleName !== \"string\") {\n\t\t\t\tconst plugin = moduleName as LoadedPlugin;\n\t\t\t\tplugin.name = plugin.name || `:unnamedPlugin@${String(index + 1)}`;\n\t\t\t\tplugin.originalName = `:unnamedPlugin@${String(index + 1)}`;\n\t\t\t\treturn plugin;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst plugin = resolvePlugin(this.resolvers, moduleName, { cache: true }) as LoadedPlugin;\n\t\t\t\tplugin.name = plugin.name || moduleName;\n\t\t\t\tplugin.originalName = moduleName;\n\t\t\t\treturn plugin;\n\t\t\t} catch (err: unknown) {\n\t\t\t\t/* istanbul ignore next: only used as a fallback */\n\t\t\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\t\t\tthrow new ConfigError(\n\t\t\t\t\t`Failed to load plugin \"${moduleName}\": ${message}`,\n\t\t\t\t\tensureError(err),\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate loadConfigurations(plugins: LoadedPlugin[]): Map<string, ConfigData> {\n\t\tconst configs = new Map<string, ConfigData>();\n\n\t\t/* builtin presets */\n\t\tfor (const [name, config] of Object.entries(Presets)) {\n\t\t\tConfig.validate(config, name);\n\t\t\tconfigs.set(name, config);\n\t\t}\n\n\t\t/* presets from plugins */\n\t\tfor (const plugin of plugins) {\n\t\t\tfor (const [name, config] of Object.entries(plugin.configs ?? {})) {\n\t\t\t\tif (!config) continue;\n\n\t\t\t\tConfig.validate(config, name);\n\n\t\t\t\t/* add configuration with name provided by plugin */\n\t\t\t\tconfigs.set(`${plugin.name}:${name}`, config);\n\n\t\t\t\t/* add configuration with name provided by user (in config file) */\n\t\t\t\tif (plugin.name !== plugin.originalName) {\n\t\t\t\t\tconfigs.set(`${plugin.originalName}:${name}`, config);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn configs;\n\t}\n\n\tprivate extendMeta(plugins: LoadedPlugin[]): void {\n\t\tfor (const plugin of plugins) {\n\t\t\tif (!plugin.elementSchema) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst { properties } = plugin.elementSchema;\n\t\t\tif (!properties) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tfor (const [raw, schema] of Object.entries(properties)) {\n\t\t\t\t/* at compile time this is a fixed list but the point of this method is\n\t\t\t\t * to augment the runtime with additional keys so it is a bit of lying\n\t\t\t\t * to typescript */\n\t\t\t\tconst key = raw as keyof MetaElement;\n\t\t\t\tif ((schema as any).copyable && !MetaCopyableProperty.includes(key)) {\n\t\t\t\t\tMetaCopyableProperty.push(key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Resolve all configuration and return a [[ResolvedConfig]] instance.\n\t *\n\t * A resolved configuration will merge all extended configs and load all\n\t * plugins and transformers, and normalize the rest of the configuration.\n\t *\n\t * @public\n\t */\n\tpublic resolve(): ResolvedConfig {\n\t\treturn new ResolvedConfig(this.resolveData(), this.get());\n\t}\n\n\t/**\n\t * Same as [[resolve]] but returns the raw configuration data instead of\n\t * [[ResolvedConfig]] instance. Mainly used for testing.\n\t *\n\t * @internal\n\t */\n\tpublic resolveData(): ResolvedConfigData {\n\t\treturn {\n\t\t\tmetaTable: this.getMetaTable(),\n\t\t\tplugins: this.getPlugins(),\n\t\t\trules: this.getRules(),\n\t\t\ttransformers: this.transformers,\n\t\t};\n\t}\n\n\tprivate precompileTransformers(transform: TransformMap): TransformerEntry[] {\n\t\treturn Object.entries(transform).map(([pattern, name]) => {\n\t\t\ttry {\n\t\t\t\tconst fn = this.getTransformFunction(name);\n\n\t\t\t\t/* istanbul ignore next */\n\t\t\t\tconst version = fn.api ?? 0;\n\n\t\t\t\t/* check if transformer version is supported */\n\t\t\t\tif (version !== TRANSFORMER_API.VERSION) {\n\t\t\t\t\tthrow new ConfigError(\n\t\t\t\t\t\t`Transformer uses API version ${String(version)} but only version ${String(TRANSFORMER_API.VERSION)} is supported`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\t// eslint-disable-next-line security/detect-non-literal-regexp -- expected to be a regexp\n\t\t\t\t\tpattern: new RegExp(pattern),\n\n\t\t\t\t\tname,\n\t\t\t\t\tfn,\n\t\t\t\t};\n\t\t\t} catch (err: unknown) {\n\t\t\t\tif (err instanceof ConfigError) {\n\t\t\t\t\tthrow new ConfigError(`Failed to load transformer \"${name}\": ${err.message}`, err);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new ConfigError(`Failed to load transformer \"${name}\"`, ensureError(err));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Get transformation function requested by configuration.\n\t *\n\t * Searches:\n\t *\n\t * - Named transformers from plugins.\n\t * - Unnamed transformer from plugin.\n\t * - Standalone modules (local or node_modules)\n\t *\n\t * @param name - Key from configuration\n\t */\n\tprivate getTransformFunction(name: string): Transformer {\n\t\t/* try to match a named transformer from plugin */\n\t\tconst match = name.match(/(.*):(.*)/);\n\t\tif (match) {\n\t\t\tconst [, pluginName, key] = match;\n\t\t\treturn this.getNamedTransformerFromPlugin(name, pluginName, key);\n\t\t}\n\n\t\t/* try to match an unnamed transformer from plugin */\n\t\tconst plugin = this.plugins.find((cur) => cur.name === name);\n\t\tif (plugin) {\n\t\t\treturn this.getUnnamedTransformerFromPlugin(name, plugin);\n\t\t}\n\n\t\t/* assume transformer refers to a regular module */\n\t\treturn this.getTransformerFromModule(name);\n\t}\n\n\t/**\n\t * @param name - Original name from configuration\n\t * @param pluginName - Name of plugin\n\t * @param key - Name of transform (from plugin)\n\t */\n\tprivate getNamedTransformerFromPlugin(\n\t\tname: string,\n\t\tpluginName: string,\n\t\tkey: string,\n\t): Transformer {\n\t\tconst plugin = this.plugins.find((cur) => cur.name === pluginName);\n\t\tif (!plugin) {\n\t\t\tthrow new ConfigError(`No plugin named \"${pluginName}\" has been loaded`);\n\t\t}\n\n\t\tif (!plugin.transformer) {\n\t\t\tthrow new ConfigError(`Plugin does not expose any transformer`);\n\t\t}\n\n\t\tif (typeof plugin.transformer === \"function\") {\n\t\t\tthrow new ConfigError(\n\t\t\t\t`Transformer \"${name}\" refers to named transformer but plugin exposes only unnamed, use \"${pluginName}\" instead.`,\n\t\t\t);\n\t\t}\n\n\t\tconst transformer = plugin.transformer[key];\n\t\tif (!transformer) {\n\t\t\tthrow new ConfigError(`Plugin \"${pluginName}\" does not expose a transformer named \"${key}\".`);\n\t\t}\n\n\t\treturn transformer;\n\t}\n\n\t/**\n\t * @param name - Original name from configuration\n\t * @param plugin - Plugin instance\n\t */\n\tprivate getUnnamedTransformerFromPlugin(name: string, plugin: Plugin): Transformer {\n\t\tif (!plugin.transformer) {\n\t\t\tthrow new ConfigError(`Plugin does not expose any transformer`);\n\t\t}\n\n\t\tif (typeof plugin.transformer !== \"function\") {\n\t\t\tif (plugin.transformer.default) {\n\t\t\t\treturn plugin.transformer.default;\n\t\t\t}\n\t\t\tthrow new ConfigError(\n\t\t\t\t`Transformer \"${name}\" refers to unnamed transformer but plugin exposes only named.`,\n\t\t\t);\n\t\t}\n\n\t\treturn plugin.transformer;\n\t}\n\n\tprivate getTransformerFromModule(name: string): Transformer {\n\t\treturn resolveTransformer(this.resolvers, name, { cache: true });\n\t}\n}\n","import { Config } from \"./config\";\nimport { type ConfigData } from \"./config-data\";\nimport { type ResolvedConfig } from \"./resolved-config\";\nimport { type Resolver } from \"./resolver\";\n\n/**\n * Configuration loader interface.\n *\n * A configuration loader takes a handle (typically a filename) and returns a\n * configuration for it.\n *\n * @public\n */\nexport abstract class ConfigLoader {\n\tprotected readonly resolvers: Resolver[];\n\tprotected globalConfig: Config;\n\n\tpublic constructor(resolvers: Resolver[], config?: ConfigData) {\n\t\tconst defaults = Config.empty();\n\t\tthis.resolvers = resolvers;\n\t\tthis.globalConfig = defaults.merge(\n\t\t\tthis.resolvers,\n\t\t\tconfig ? this.loadFromObject(config) : this.defaultConfig(),\n\t\t);\n\t}\n\n\t/**\n\t * Get configuration for given handle.\n\t *\n\t * Handle is typically a filename but it is up to the loader to interpret the\n\t * handle as something useful.\n\t *\n\t * If [[configOverride]] is set it is merged with the final result.\n\t *\n\t * @param handle - Unique handle to get configuration for.\n\t * @param configOverride - Optional configuration to merge final results with.\n\t */\n\tpublic abstract getConfigFor(handle: string, configOverride?: ConfigData): ResolvedConfig;\n\n\t/**\n\t * Flush configuration cache.\n\t *\n\t * Flushes all cached entries unless a specific handle is given.\n\t *\n\t * @param handle - If given only the cache for given handle will be flushed.\n\t */\n\tpublic abstract flushCache(handle?: string): void;\n\n\t/**\n\t * @internal For testing only\n\t */\n\tpublic _getGlobalConfig(): ConfigData {\n\t\treturn this.globalConfig.get();\n\t}\n\n\t/**\n\t * Default configuration used when no explicit configuration is passed to constructor.\n\t */\n\tprotected abstract defaultConfig(): Config;\n\n\tprotected empty(): Config {\n\t\treturn Config.empty();\n\t}\n\n\tprotected loadFromObject(options: ConfigData, filename?: string | null): Config {\n\t\treturn Config.fromObject(this.resolvers, options, filename);\n\t}\n\n\tprotected loadFromFile(filename: string): Config {\n\t\treturn Config.fromFile(this.resolvers, filename);\n\t}\n}\n","import { type ConfigData } from \"./config-data\";\n\n/**\n * Helper function to assist IDE with completion and type-checking.\n *\n * @public\n * @since\n */\nexport function defineConfig(config: ConfigData): ConfigData {\n\treturn config;\n}\n","/**\n * @public\n */\nexport type EventCallback = (event: string, data: any) => void;\n\n/**\n * @public\n */\nexport class EventHandler {\n\tprivate listeners: Record<string, EventCallback[] | undefined>;\n\n\tpublic constructor() {\n\t\tthis.listeners = {};\n\t}\n\n\t/**\n\t * Add an event listener.\n\t *\n\t * @param event - Event names (comma separated) or '*' for any event.\n\t * @param callback - Called any time even triggers.\n\t * @returns Unregistration function.\n\t */\n\tpublic on(event: string, callback: EventCallback): () => void {\n\t\tconst { listeners } = this;\n\t\tconst names = event.split(\",\").map((it) => it.trim());\n\t\tfor (const name of names) {\n\t\t\tconst list = listeners[name] ?? [];\n\t\t\tlisteners[name] = list;\n\t\t\tlist.push(callback);\n\t\t}\n\t\treturn () => {\n\t\t\tfor (const name of names) {\n\t\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion --\n\t\t\t\t * this is never unset here as we must have associated the name with an\n\t\t\t\t * array earlier or we wouldn't have ended up here */\n\t\t\t\tconst list = listeners[name]!;\n\t\t\t\tthis.listeners[name] = list.filter((fn) => fn !== callback);\n\t\t\t}\n\t\t};\n\t}\n\n\t/**\n\t * Add a onetime event listener. The listener will automatically be removed\n\t * after being triggered once.\n\t *\n\t * @param event - Event names (comma separated) or '*' for any event.\n\t * @param callback - Called any time even triggers.\n\t * @returns Unregistration function.\n\t */\n\tpublic once(event: string, callback: EventCallback): () => void {\n\t\tconst deregister = this.on(event, (event, data) => {\n\t\t\tcallback(event, data);\n\t\t\tderegister();\n\t\t});\n\t\treturn deregister;\n\t}\n\n\t/**\n\t * Trigger event causing all listeners to be called.\n\t *\n\t * @param event - Event name.\n\t * @param data - Event data.\n\t */\n\tpublic trigger(event: string, data: any): void {\n\t\tfor (const listener of this.getCallbacks(event)) {\n\t\t\tlistener.call(null, event, data);\n\t\t}\n\t}\n\n\tprivate getCallbacks(event: string): EventCallback[] {\n\t\tconst { listeners } = this;\n\t\tconst callbacks = listeners[event] ?? [];\n\t\tconst global = listeners[\"*\"] ?? [];\n\t\treturn [...callbacks, ...global];\n\t}\n}\n\nexport default EventHandler;\n","import { type Location, sliceLocation } from \"../context\";\n\nexport interface ConditionalComment {\n\texpression: string;\n\tlocation: Location;\n}\n\nconst regexp = /<!(?:--)?\\[(.*?)\\](?:--)?>/g;\n\nexport function* parseConditionalComment(\n\tcomment: string,\n\tcommentLocation: Location,\n): IterableIterator<ConditionalComment> {\n\tlet match: RegExpExecArray | null;\n\n\twhile ((match = regexp.exec(comment)) !== null) {\n\t\tconst expression = match[1];\n\t\tconst begin = match.index;\n\t\tconst end = begin + match[0].length;\n\t\tconst location = sliceLocation(commentLocation, begin, end, comment);\n\t\tyield {\n\t\t\texpression,\n\t\t\tlocation,\n\t\t};\n\t}\n}\n","import { type Location } from \"../context\";\n\nexport class ParserError extends Error {\n\tpublic location: Location;\n\n\tpublic constructor(location: Location, message: string) {\n\t\tsuper(message);\n\t\tthis.location = location;\n\t}\n}\n","import { type ResolvedConfig } from \"../config\";\nimport { type Location, type Source, sliceLocation } from \"../context\";\nimport { type ProcessAttributeCallback, type ProcessElementContext } from \"../context/source\";\nimport { DOMTree, HtmlElement, NodeClosed } from \"../dom\";\nimport {\n\ttype AttributeEvent,\n\ttype Event,\n\ttype EventCallback,\n\ttype ListenEventMap,\n\ttype TagEndEvent,\n\ttype TriggerEventMap,\n\tEventHandler,\n} from \"../event\";\nimport {\n\ttype Token,\n\ttype TokenStream,\n\ttype DirectiveToken,\n\ttype TagOpenToken,\n\ttype TagCloseToken,\n\ttype CommentToken,\n\ttype AttrNameToken,\n\ttype AttrValueToken,\n\ttype ConditionalToken,\n\ttype DoctypeOpenToken,\n\ttype DoctypeValueToken,\n\tLexer,\n\tTokenType,\n} from \"../lexer\";\nimport { type MetaTable, type MetaElement } from \"../meta\";\nimport { type AttributeData } from \"./attribute-data\";\nimport { parseConditionalComment } from \"./conditional-comment\";\nimport { ParserError } from \"./parser-error\";\n\nfunction isAttrValueToken(token?: Token): token is AttrValueToken {\n\treturn Boolean(token && token.type === TokenType.ATTR_VALUE);\n}\n\nfunction svgShouldRetainTag(foreignTagName: string, tagName: string): boolean {\n\treturn foreignTagName === \"svg\" && [\"title\", \"desc\"].includes(tagName);\n}\n\nfunction isValidDirective(\n\taction: string,\n): action is \"enable\" | \"disable\" | \"disable-block\" | \"disable-next\" {\n\tconst validActions = [\"enable\", \"disable\", \"disable-block\", \"disable-next\"];\n\treturn validActions.includes(action);\n}\n\n/**\n * Parse HTML document into a DOM tree.\n *\n * @public\n */\nexport class Parser {\n\tprivate readonly event: EventHandler;\n\tprivate readonly metaTable: MetaTable;\n\tprivate currentNamespace: string = \"\";\n\tprivate dom: DOMTree;\n\n\t/**\n\t * Create a new parser instance.\n\t *\n\t * @public\n\t * @param config - Configuration\n\t */\n\tpublic constructor(config: ResolvedConfig) {\n\t\tthis.event = new EventHandler();\n\t\tthis.dom = null as unknown as DOMTree;\n\t\tthis.metaTable = config.getMetaTable();\n\t}\n\n\t/**\n\t * Parse HTML markup.\n\t *\n\t * @public\n\t * @param source - HTML markup.\n\t * @returns DOM tree representing the HTML markup.\n\t */\n\tpublic parseHtml(source: string | Source): HtmlElement {\n\t\tif (typeof source === \"string\") {\n\t\t\tsource = {\n\t\t\t\tdata: source,\n\t\t\t\tfilename: \"inline\",\n\t\t\t\tline: 1,\n\t\t\t\tcolumn: 1,\n\t\t\t\toffset: 0,\n\t\t\t};\n\t\t}\n\n\t\t/* trigger starting event */\n\t\tthis.trigger(\"parse:begin\", {\n\t\t\tlocation: null,\n\t\t});\n\n\t\t/* reset DOM in case there are multiple calls in the same session */\n\t\tthis.dom = new DOMTree({\n\t\t\tfilename: source.filename,\n\t\t\toffset: source.offset,\n\t\t\tline: source.line,\n\t\t\tcolumn: source.column,\n\t\t\tsize: 0,\n\t\t});\n\n\t\t/* trigger any rules waiting for DOM load event */\n\t\tthis.trigger(\"dom:load\", {\n\t\t\tsource,\n\t\t\tlocation: null,\n\t\t});\n\n\t\tconst lexer = new Lexer();\n\t\tconst tokenStream = lexer.tokenize(source);\n\n\t\t/* consume all tokens from the stream */\n\t\tlet it = this.next(tokenStream);\n\t\twhile (!it.done) {\n\t\t\tconst token = it.value;\n\t\t\tthis.consume(source, token, tokenStream);\n\t\t\tit = this.next(tokenStream);\n\t\t}\n\n\t\t/* resolve any dynamic meta element properties */\n\t\tthis.dom.resolveMeta(this.metaTable);\n\n\t\t/* enable cache on root element, all children already have cached enabled */\n\t\tthis.dom.root.cacheEnable();\n\n\t\t/* trigger any rules waiting for DOM ready */\n\t\tthis.trigger(\"dom:ready\", {\n\t\t\tdocument: this.dom,\n\t\t\tsource,\n\n\t\t\t/* disable location for this event so rules can use implicit node location\n\t\t\t * instead */\n\t\t\tlocation: null,\n\t\t});\n\n\t\t/* trigger ending event */\n\t\tthis.trigger(\"parse:end\", {\n\t\t\tlocation: null,\n\t\t});\n\n\t\treturn this.dom.root;\n\t}\n\n\t/**\n\t * Detect optional end tag.\n\t *\n\t * Some tags have optional end tags (e.g. <ul><li>foo<li>bar</ul> is\n\t * valid). The parser handles this by checking if the element on top of the\n\t * stack when is allowed to omit.\n\t */\n\tprivate closeOptional(token: TagOpenToken): boolean {\n\t\t/* if the element doesn't have metadata it cannot have optional end\n\t\t * tags. Period. */\n\t\tconst active = this.dom.getActive();\n\t\tif (!active.meta?.implicitClosed) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst tagName = token.data[2];\n\t\tconst open = !token.data[1];\n\t\tconst meta = active.meta.implicitClosed;\n\n\t\tif (open) {\n\t\t\t/* a new element is opened, check if the new element should close the\n\t\t\t * previous */\n\t\t\treturn meta.includes(tagName);\n\t\t} else {\n\t\t\t/* if we are explicitly closing the active element, ignore implicit */\n\t\t\tif (active.is(tagName)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t/* the parent element is closed, check if the active element would be\n\t\t\t * implicitly closed when parent is. */\n\t\t\treturn Boolean(active.parent && active.parent.is(tagName) && meta.includes(active.tagName));\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\t/* eslint-disable-next-line complexity -- there isn't really a good other way to structure this method (that is still readable) */\n\tprivate consume(source: Source, token: Token, tokenStream: TokenStream): void {\n\t\tswitch (token.type) {\n\t\t\tcase TokenType.UNICODE_BOM:\n\t\t\t\t/* ignore */\n\t\t\t\tbreak;\n\n\t\t\tcase TokenType.TAG_OPEN:\n\t\t\t\tthis.consumeTag(source, token, tokenStream);\n\t\t\t\tbreak;\n\n\t\t\tcase TokenType.WHITESPACE:\n\t\t\t\tthis.trigger(\"whitespace\", {\n\t\t\t\t\ttext: token.data[0],\n\t\t\t\t\tlocation: token.location,\n\t\t\t\t});\n\t\t\t\tthis.appendText(token.data[0], token.location);\n\t\t\t\tbreak;\n\n\t\t\tcase TokenType.DIRECTIVE:\n\t\t\t\tthis.consumeDirective(token);\n\t\t\t\tbreak;\n\n\t\t\tcase TokenType.CONDITIONAL:\n\t\t\t\tthis.consumeConditional(token);\n\t\t\t\tbreak;\n\n\t\t\tcase TokenType.COMMENT:\n\t\t\t\tthis.consumeComment(token);\n\t\t\t\tbreak;\n\n\t\t\tcase TokenType.DOCTYPE_OPEN:\n\t\t\t\tthis.consumeDoctype(token, tokenStream);\n\t\t\t\tbreak;\n\n\t\t\tcase TokenType.TEXT:\n\t\t\tcase TokenType.TEMPLATING:\n\t\t\t\tthis.appendText(token.data[0], token.location);\n\t\t\t\tbreak;\n\n\t\t\tcase TokenType.EOF:\n\t\t\t\tthis.closeTree(source, token.location);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\t/* eslint-disable-next-line complexity -- technical debt, chould be refactored a bit */\n\tprotected consumeTag(source: Source, startToken: TagOpenToken, tokenStream: TokenStream): void {\n\t\tconst tokens = Array.from(\n\t\t\tthis.consumeUntil(tokenStream, TokenType.TAG_CLOSE, startToken.location),\n\t\t);\n\t\tconst endToken = tokens.slice(-1)[0] as TagCloseToken;\n\t\tconst closeOptional = this.closeOptional(startToken);\n\t\tconst parent = closeOptional ? this.dom.getActive().parent : this.dom.getActive();\n\t\tconst node = HtmlElement.fromTokens(\n\t\t\tstartToken,\n\t\t\tendToken,\n\t\t\tparent,\n\t\t\tthis.metaTable,\n\t\t\tthis.currentNamespace,\n\t\t);\n\t\tconst isStartTag = !startToken.data[1];\n\t\tconst isClosing = !isStartTag || node.closed !== NodeClosed.Open;\n\t\tconst isForeign = node.meta?.foreign;\n\n\t\t/* if the previous tag to be implicitly closed by the current tag we close\n\t\t * it and pop it from the stack before continuing processing this tag */\n\t\tif (closeOptional) {\n\t\t\tconst active = this.dom.getActive();\n\t\t\tactive.closed = NodeClosed.ImplicitClosed;\n\t\t\tthis.closeElement(source, node, active, startToken.location);\n\t\t\tthis.dom.popActive();\n\t\t}\n\n\t\tif (isStartTag) {\n\t\t\tthis.dom.pushActive(node);\n\t\t\tthis.trigger(\"tag:start\", {\n\t\t\t\ttarget: node,\n\t\t\t\tlocation: startToken.location,\n\t\t\t});\n\t\t}\n\n\t\tfor (let i = 0; i < tokens.length; i++) {\n\t\t\tconst token = tokens[i];\n\t\t\tswitch (token.type) {\n\t\t\t\tcase TokenType.WHITESPACE:\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.ATTR_NAME:\n\t\t\t\t\tthis.consumeAttribute(source, node, token, tokens[i + 1]);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t/* emit tag:ready unless this is a end tag */\n\t\tif (isStartTag) {\n\t\t\tthis.trigger(\"tag:ready\", {\n\t\t\t\ttarget: node,\n\t\t\t\tlocation: endToken.location,\n\t\t\t});\n\t\t}\n\n\t\tif (isClosing) {\n\t\t\tconst active = this.dom.getActive();\n\n\t\t\t/* if this is not an open tag it is a close tag and thus we force it to be\n\t\t\t * one, in case it is detected as void */\n\t\t\tif (!isStartTag) {\n\t\t\t\tnode.closed = NodeClosed.EndTag;\n\t\t\t}\n\n\t\t\tthis.closeElement(source, node, active, endToken.location);\n\n\t\t\t/* if this element is closed with an end tag but is would it will not be\n\t\t\t * closed again (it is already closed automatically since it is\n\t\t\t * void). Closing again will have side-effects as it will close the parent\n\t\t\t * and cause a mess later. */\n\t\t\tconst voidClosed = !isStartTag && node.voidElement;\n\t\t\tif (!voidClosed) {\n\t\t\t\tthis.dom.popActive();\n\t\t\t}\n\t\t} else if (isForeign) {\n\t\t\t/* consume the body of the foreign element so it won't be part of the\n\t\t\t * document (only the root foreign element is). */\n\t\t\tthis.discardForeignBody(source, node.tagName, tokenStream, startToken.location);\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate closeElement(\n\t\tsource: Source,\n\t\tnode: HtmlElement | null,\n\t\tactive: HtmlElement,\n\t\tlocation: Location,\n\t): void {\n\t\t/* call processElement hook */\n\t\tthis.processElement(active, source);\n\n\t\t/* trigger event for the closing of the element (the </> tag)*/\n\t\tconst event: TagEndEvent = {\n\t\t\ttarget: node,\n\t\t\tprevious: active,\n\t\t\tlocation,\n\t\t};\n\t\tthis.trigger(\"tag:end\", event);\n\n\t\t/* trigger event for for an element being fully constructed. Special care\n\t\t * for void elements explicit closed <input></input> */\n\t\tif (!active.isRootElement()) {\n\t\t\tthis.trigger(\"element:ready\", {\n\t\t\t\ttarget: active,\n\t\t\t\tlocation: active.location,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate processElement(node: HtmlElement, source: Source): void {\n\t\t/* enable cache on node now that it is fully constructed */\n\t\tnode.cacheEnable();\n\n\t\tif (source.hooks?.processElement) {\n\t\t\tconst processElement = source.hooks.processElement;\n\t\t\tconst metaTable = this.metaTable;\n\t\t\tconst context: ProcessElementContext = {\n\t\t\t\tgetMetaFor(this: void, tagName: string): MetaElement | null {\n\t\t\t\t\treturn metaTable.getMetaFor(tagName);\n\t\t\t\t},\n\t\t\t};\n\t\t\tprocessElement.call(context, node);\n\t\t}\n\t}\n\n\t/**\n\t * Discard tokens until the end tag for the foreign element is found.\n\t *\n\t * @internal\n\t */\n\tprivate discardForeignBody(\n\t\tsource: Source,\n\t\tforeignTagName: string,\n\t\ttokenStream: TokenStream,\n\t\terrorLocation: Location,\n\t): void {\n\t\t/* consume elements until the end tag for this foreign element is found */\n\t\tlet nested = 1;\n\t\tlet startToken: TagOpenToken | undefined;\n\t\tlet endToken: TagCloseToken | undefined;\n\t\tdo {\n\t\t\t/* search for tags */\n\t\t\tconst tokens = Array.from(this.consumeUntil(tokenStream, TokenType.TAG_OPEN, errorLocation));\n\t\t\tconst [last] = tokens.slice(-1) as [TagOpenToken];\n\t\t\tconst [, tagClosed, tagName] = last.data;\n\n\t\t\t/* special case: svg <title> and <desc> should be intact as it affects accessibility */\n\t\t\tif (!tagClosed && svgShouldRetainTag(foreignTagName, tagName)) {\n\t\t\t\tconst oldNamespace = this.currentNamespace;\n\t\t\t\tthis.currentNamespace = \"svg\";\n\t\t\t\tthis.consumeTag(source, last, tokenStream);\n\t\t\t\tthis.consumeUntilMatchingTag(source, tokenStream, tagName);\n\t\t\t\tthis.currentNamespace = oldNamespace;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t/* keep going unless the new tag matches the foreign root element */\n\t\t\tif (tagName !== foreignTagName) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t/* locate end token and determine if this is a self-closed tag */\n\t\t\tconst endTokens = Array.from(\n\t\t\t\tthis.consumeUntil(tokenStream, TokenType.TAG_CLOSE, last.location),\n\t\t\t);\n\t\t\tendToken = endTokens.slice(-1)[0] as TagCloseToken;\n\t\t\tconst selfClosed = endToken.data[0] === \"/>\";\n\n\t\t\t/* since foreign element may be nested keep a count for the number of\n\t\t\t * opened/closed elements */\n\t\t\tif (tagClosed) {\n\t\t\t\tstartToken = last;\n\t\t\t\tnested--;\n\t\t\t} else if (!selfClosed) {\n\t\t\t\tnested++;\n\t\t\t}\n\t\t} while (nested > 0);\n\n\t\t/* istanbul ignore next: this should never happen because `consumeUntil`\n\t\t * would have thrown errors however typescript does not know that */\n\t\tif (!startToken || !endToken) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst active = this.dom.getActive();\n\t\tconst node = HtmlElement.fromTokens(startToken, endToken, active, this.metaTable);\n\n\t\tthis.closeElement(source, node, active, endToken.location);\n\t\tthis.dom.popActive();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate consumeAttribute(\n\t\tsource: Source,\n\t\tnode: HtmlElement,\n\t\ttoken: AttrNameToken,\n\t\tnext?: Token,\n\t): void {\n\t\tconst { meta } = node;\n\t\tconst keyLocation = this.getAttributeKeyLocation(token);\n\t\tconst valueLocation = this.getAttributeValueLocation(next);\n\t\tconst location = this.getAttributeLocation(token, next);\n\t\tconst haveValue = isAttrValueToken(next);\n\t\tconst attrData: AttributeData = {\n\t\t\tkey: token.data[1],\n\t\t\tvalue: null,\n\t\t\tquote: null,\n\t\t};\n\n\t\tif (haveValue) {\n\t\t\tconst [, , value, quote] = next.data;\n\t\t\tattrData.value = value;\n\t\t\tattrData.quote = quote ?? null;\n\t\t}\n\n\t\t/* get callback to process attributes, default is to just return attribute\n\t\t * data right away but a transformer may override it to allow aliasing\n\t\t * attributes, e.g ng-attr-foo or v-bind:foo */\n\t\tlet processAttribute: ProcessAttributeCallback = (\n\t\t\tattr: AttributeData,\n\t\t): Iterable<AttributeData> => [attr];\n\t\tif (source.hooks?.processAttribute) {\n\t\t\tprocessAttribute = source.hooks.processAttribute;\n\t\t}\n\n\t\t/* handle deprecated callbacks */\n\t\tlet iterator: Iterable<AttributeData>;\n\t\tconst legacy = processAttribute.call({}, attrData);\n\t\tif (typeof (legacy as any)[Symbol.iterator] !== \"function\") {\n\t\t\t/* AttributeData */\n\t\t\titerator = [attrData];\n\t\t} else {\n\t\t\t/* Iterable<AttributeData> */\n\t\t\titerator = legacy;\n\t\t}\n\n\t\t/* process attribute(s) */\n\t\tfor (const attr of iterator) {\n\t\t\tconst event: AttributeEvent = {\n\t\t\t\ttarget: node,\n\t\t\t\tkey: attr.key,\n\t\t\t\tvalue: attr.value,\n\t\t\t\tquote: attr.quote,\n\t\t\t\toriginalAttribute: attr.originalAttribute,\n\t\t\t\tlocation,\n\t\t\t\tkeyLocation,\n\t\t\t\tvalueLocation,\n\t\t\t\tmeta: meta?.attributes[attr.key] ?? null,\n\t\t\t};\n\t\t\tthis.trigger(\"attr\", event);\n\t\t\tnode.setAttribute(attr.key, attr.value, keyLocation, valueLocation, attr.originalAttribute);\n\t\t}\n\t}\n\n\t/**\n\t * Takes attribute key token an returns location.\n\t */\n\tprivate getAttributeKeyLocation(token: AttrNameToken): Location {\n\t\treturn token.location;\n\t}\n\n\t/**\n\t * Take attribute value token and return a new location referring to only the\n\t * value.\n\t *\n\t * foo=\"bar\" foo='bar' foo=bar foo foo=\"\"\n\t * ^^^ ^^^ ^^^ (null) (null)\n\t */\n\tprivate getAttributeValueLocation(token?: Token): Location | null {\n\t\tif (!token || token.type !== TokenType.ATTR_VALUE || token.data[2] === \"\") {\n\t\t\treturn null;\n\t\t}\n\t\tconst quote = token.data[3];\n\t\tif (quote) {\n\t\t\treturn sliceLocation(token.location, 2, -1);\n\t\t} else {\n\t\t\treturn sliceLocation(token.location, 1);\n\t\t}\n\t}\n\n\t/**\n\t * Take attribute key and value token an returns a new location referring to\n\t * an aggregate location covering key, quotes if present and value.\n\t */\n\tprivate getAttributeLocation(key: AttrNameToken, value?: Token): Location {\n\t\tconst begin = key.location;\n\t\tconst end = value && value.type === TokenType.ATTR_VALUE ? value.location : undefined;\n\t\treturn {\n\t\t\tfilename: begin.filename,\n\t\t\tline: begin.line,\n\t\t\tcolumn: begin.column,\n\t\t\tsize: begin.size + (end?.size ?? 0),\n\t\t\toffset: begin.offset,\n\t\t};\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprotected consumeDirective(token: DirectiveToken): void {\n\t\tconst [text, preamble, action, separator1, directive, postamble] = token.data;\n\t\tif (!postamble.startsWith(\"]\")) {\n\t\t\tthrow new ParserError(token.location, `Missing end bracket \"]\" on directive \"${text}\"`);\n\t\t}\n\t\tconst match = directive.match(/^(.*?)(?:(\\s*(?:--|:)\\s*)(.*))?$/);\n\n\t\t/* istanbul ignore next: should not be possible, would be emitted as comment token */\n\t\tif (!match) {\n\t\t\tthrow new Error(`Failed to parse directive \"${text}\"`);\n\t\t}\n\n\t\tif (!isValidDirective(action)) {\n\t\t\tthrow new ParserError(token.location, `Unknown directive \"${action}\"`);\n\t\t}\n\n\t\tconst [, data, separator2, comment] = match;\n\t\tconst prefix = \"html-validate-\";\n\n\t\t/* <!-- [html-validate-action options -- comment] -->\n\t\t * ^ ^ ^--------------- comment offset\n\t\t * | \\-------------------------- options offset\n\t\t * \\--------------------------------- action offset\n\t\t */\n\t\tconst actionOffset = preamble.length;\n\t\tconst optionsOffset = actionOffset + action.length + separator1.length;\n\t\tconst commentOffset = optionsOffset + data.length + (separator2 || \"\").length;\n\n\t\tconst location = sliceLocation(\n\t\t\ttoken.location,\n\t\t\tpreamble.length - prefix.length - 1,\n\t\t\t-postamble.length + 1,\n\t\t);\n\t\tconst actionLocation = sliceLocation(\n\t\t\ttoken.location,\n\t\t\tactionOffset,\n\t\t\tactionOffset + action.length,\n\t\t);\n\t\tconst optionsLocation = data\n\t\t\t? sliceLocation(token.location, optionsOffset, optionsOffset + data.length)\n\t\t\t: undefined;\n\t\tconst commentLocation = comment\n\t\t\t? sliceLocation(token.location, commentOffset, commentOffset + comment.length)\n\t\t\t: undefined;\n\n\t\tthis.trigger(\"directive\", {\n\t\t\taction,\n\t\t\tdata,\n\t\t\tcomment: comment || \"\",\n\t\t\tlocation,\n\t\t\tactionLocation,\n\t\t\toptionsLocation,\n\t\t\tcommentLocation,\n\t\t});\n\t}\n\n\t/**\n\t * Consumes conditional comment in tag form.\n\t *\n\t * See also the related [[consumeCommend]] method.\n\t *\n\t * @internal\n\t */\n\tprivate consumeConditional(token: ConditionalToken): void {\n\t\tconst element = this.dom.getActive();\n\t\tthis.trigger(\"conditional\", {\n\t\t\tcondition: token.data[1],\n\t\t\tlocation: token.location,\n\t\t\tparent: element,\n\t\t});\n\t}\n\n\t/**\n\t * Consumes comment token.\n\t *\n\t * Tries to find IE conditional comments and emits conditional token if\n\t * found. See also the related [[consumeConditional]] method.\n\t *\n\t * @internal\n\t */\n\tprivate consumeComment(token: CommentToken): void {\n\t\tconst comment = token.data[0];\n\t\tconst element = this.dom.getActive();\n\t\tfor (const conditional of parseConditionalComment(comment, token.location)) {\n\t\t\tthis.trigger(\"conditional\", {\n\t\t\t\tcondition: conditional.expression,\n\t\t\t\tlocation: conditional.location,\n\t\t\t\tparent: element,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Consumes doctype tokens. Emits doctype event.\n\t *\n\t * @internal\n\t */\n\tprivate consumeDoctype(startToken: DoctypeOpenToken, tokenStream: TokenStream): void {\n\t\tconst tokens = Array.from(\n\t\t\tthis.consumeUntil(tokenStream, TokenType.DOCTYPE_CLOSE, startToken.location),\n\t\t);\n\t\t/* first token is the doctype, second is the closing \">\" */\n\t\tconst doctype: DoctypeValueToken = tokens[0] as DoctypeValueToken;\n\t\tconst value = doctype.data[0];\n\t\tthis.dom.doctype = value;\n\t\tthis.trigger(\"doctype\", {\n\t\t\ttag: startToken.data[1],\n\t\t\tvalue,\n\t\t\tvalueLocation: tokens[0].location,\n\t\t\tlocation: startToken.location,\n\t\t});\n\t}\n\n\t/**\n\t * Return a list of tokens found until the expected token was found.\n\t *\n\t * @internal\n\t * @param errorLocation - What location to use if an error occurs\n\t */\n\tprotected *consumeUntil(\n\t\ttokenStream: TokenStream,\n\t\tsearch: TokenType,\n\t\terrorLocation: Location,\n\t): IterableIterator<Token> {\n\t\tlet it = this.next(tokenStream);\n\t\twhile (!it.done) {\n\t\t\tconst token = it.value;\n\t\t\tyield token;\n\t\t\tif (token.type === search) return;\n\t\t\tit = this.next(tokenStream);\n\t\t}\n\t\tthrow new ParserError(\n\t\t\terrorLocation,\n\t\t\t`stream ended before ${TokenType[search]} token was found`,\n\t\t);\n\t}\n\n\t/**\n\t * Consumes tokens until a matching close-tag is found. Tags are appended to\n\t * the document.\n\t *\n\t * @internal\n\t */\n\tprivate consumeUntilMatchingTag(\n\t\tsource: Source,\n\t\ttokenStream: TokenStream,\n\t\tsearchTag: string,\n\t): void {\n\t\tlet numOpen = 1;\n\t\tlet it = this.next(tokenStream);\n\t\twhile (!it.done) {\n\t\t\tconst token = it.value;\n\t\t\tthis.consume(source, token, tokenStream);\n\t\t\tif (token.type === TokenType.TAG_OPEN) {\n\t\t\t\tconst [, close, tagName] = token.data;\n\t\t\t\tif (tagName === searchTag) {\n\t\t\t\t\tif (close) {\n\t\t\t\t\t\tnumOpen--;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnumOpen++;\n\t\t\t\t\t}\n\t\t\t\t\tif (numOpen === 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tit = this.next(tokenStream);\n\t\t}\n\t}\n\n\tprivate next(tokenStream: TokenStream): IteratorResult<Token> {\n\t\tconst it = tokenStream.next();\n\t\tif (!it.done) {\n\t\t\tconst token = it.value;\n\t\t\tthis.trigger(\"token\", {\n\t\t\t\tlocation: token.location,\n\t\t\t\ttype: token.type,\n\t\t\t\tdata: Array.from(token.data),\n\t\t\t\ttoken,\n\t\t\t});\n\t\t}\n\t\treturn it;\n\t}\n\n\t/**\n\t * Listen on events.\n\t *\n\t * @public\n\t * @param event - Event name.\n\t * @param listener - Event callback.\n\t * @returns A function to unregister the listener.\n\t */\n\tpublic on<K extends keyof ListenEventMap>(\n\t\tevent: K,\n\t\tlistener: (event: string, data: ListenEventMap[K]) => void,\n\t): () => void;\n\tpublic on(event: string, listener: EventCallback): () => void;\n\tpublic on(event: string, listener: EventCallback): () => void {\n\t\treturn this.event.on(event, listener);\n\t}\n\n\t/**\n\t * Listen on single event. The listener is automatically unregistered once the\n\t * event has been received.\n\t *\n\t * @public\n\t * @param event - Event name.\n\t * @param listener - Event callback.\n\t * @returns A function to unregister the listener.\n\t */\n\tpublic once<K extends keyof ListenEventMap>(\n\t\tevent: K,\n\t\tlistener: (event: string, data: ListenEventMap[K]) => void,\n\t): () => void;\n\tpublic once(event: string, listener: EventCallback): () => void;\n\tpublic once(event: string, listener: EventCallback): () => void {\n\t\treturn this.event.once(event, listener);\n\t}\n\n\t/**\n\t * Defer execution. Will call function sometime later.\n\t *\n\t * @internal\n\t * @param cb - Callback to execute later.\n\t */\n\tpublic defer(cb: () => void): void {\n\t\tthis.event.once(\"*\", cb);\n\t}\n\n\t/**\n\t * Trigger event.\n\t *\n\t * @internal\n\t * @param event - Event name\n\t * @param data - Event data\n\t */\n\tpublic trigger<K extends keyof TriggerEventMap>(event: K, data: TriggerEventMap[K]): void;\n\tpublic trigger(event: string, data: Event): void {\n\t\tif (typeof data.location === \"undefined\") {\n\t\t\tthrow new Error(\"Triggered event must contain location\");\n\t\t}\n\t\tthis.event.trigger(event, data);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic getEventHandler(): EventHandler {\n\t\treturn this.event;\n\t}\n\n\t/**\n\t * Appends a text node to the current element on the stack.\n\t */\n\tprivate appendText(text: string, location: Location): void {\n\t\tthis.dom.getActive().appendText(text, location);\n\t}\n\n\t/**\n\t * Trigger close events for any still open elements.\n\t */\n\tprivate closeTree(source: Source, location: Location): void {\n\t\tlet active;\n\t\t/* eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- the condition is not unnecessary, it performs an assignment */\n\t\twhile ((active = this.dom.getActive()) && !active.isRootElement()) {\n\t\t\tthis.closeElement(source, null, active, location);\n\t\t\tthis.dom.popActive();\n\t\t}\n\t}\n}\n","import { Severity } from \"./config\";\nimport { type Location, type Source } from \"./context\";\nimport { type Rule } from \"./rule\";\nimport { type DOMNode } from \"./dom\";\nimport { type Message } from \"./message\";\nimport { isThenable } from \"./utils\";\n\n/**\n * @public\n */\nexport interface DeferredMessage extends Omit<Message, \"selector\"> {\n\tselector: () => string | null;\n}\n\nfunction freeze(src: DeferredMessage): Message {\n\treturn {\n\t\t...src,\n\t\tselector: src.selector(),\n\t};\n}\n\nfunction isThenableArray<T>(value: T[] | Array<Promise<T>>): value is Array<Promise<T>> {\n\tif (value.length === 0) {\n\t\treturn false;\n\t}\n\treturn isThenable(value[0]);\n}\n\n/**\n * @public\n */\nexport interface Result {\n\tmessages: Message[];\n\tfilePath: string;\n\terrorCount: number;\n\twarningCount: number;\n\tsource: string | null;\n}\n\n/**\n * Report object returned by [[HtmlValidate]].\n *\n * @public\n */\nexport interface Report {\n\t/** `true` if validation was successful */\n\tvalid: boolean;\n\n\t/** Detailed results per validated source */\n\tresults: Result[];\n\n\t/** Total number of errors across all sources */\n\terrorCount: number;\n\n\t/** Total warnings of errors across all sources */\n\twarningCount: number;\n}\n\n/**\n * @public\n */\nexport class Reporter {\n\tprotected result: Record<string, DeferredMessage[]>;\n\n\tpublic constructor() {\n\t\tthis.result = {};\n\t}\n\n\t/**\n\t * Merge two or more reports into a single one.\n\t *\n\t * @param reports- Reports to merge.\n\t * @returns A merged report.\n\t */\n\tpublic static merge(reports: Report[]): Report;\n\n\t/**\n\t * Merge two or more reports into a single one.\n\t *\n\t * @param reports- Reports to merge.\n\t * @returns A promise resolved with the merged report.\n\t */\n\tpublic static merge(reports: Promise<Report[]> | Array<Promise<Report>>): Promise<Report>;\n\n\tpublic static merge(\n\t\treports: Report[] | Promise<Report[]> | Array<Promise<Report>>,\n\t): Report | Promise<Report> {\n\t\tif (isThenable(reports)) {\n\t\t\treturn reports.then((reports) => this.merge(reports));\n\t\t}\n\t\tif (isThenableArray(reports)) {\n\t\t\treturn Promise.all(reports).then((reports) => this.merge(reports));\n\t\t}\n\t\tconst valid = reports.every((report) => report.valid);\n\t\tconst merged: Record<string, Result> = {};\n\t\treports.forEach((report: Report) => {\n\t\t\treport.results.forEach((result: Result) => {\n\t\t\t\tconst key = result.filePath;\n\t\t\t\tif (key in merged) {\n\t\t\t\t\tmerged[key].messages = [...merged[key].messages, ...result.messages];\n\t\t\t\t} else {\n\t\t\t\t\tmerged[key] = { ...result };\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tconst results: Result[] = Object.values(merged).map((result: Result) => {\n\t\t\t/* recalculate error- and warning-count */\n\t\t\tresult.errorCount = countErrors(result.messages);\n\t\t\tresult.warningCount = countWarnings(result.messages);\n\t\t\treturn result;\n\t\t});\n\t\treturn {\n\t\t\tvalid,\n\t\t\tresults,\n\t\t\terrorCount: sumErrors(results),\n\t\t\twarningCount: sumWarnings(results),\n\t\t};\n\t}\n\n\tpublic add<ContextType, OptionsType>(\n\t\trule: Rule<ContextType, OptionsType>,\n\t\tmessage: string,\n\t\tseverity: number,\n\t\tnode: DOMNode | null,\n\t\tlocation: Location,\n\t\tcontext: ContextType,\n\t): void {\n\t\tif (!(location.filename in this.result)) {\n\t\t\tthis.result[location.filename] = [];\n\t\t}\n\t\tconst ruleUrl = rule.documentation(context)?.url;\n\t\tconst entry: DeferredMessage = {\n\t\t\truleId: rule.name,\n\t\t\tseverity,\n\t\t\tmessage,\n\t\t\toffset: location.offset,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column,\n\t\t\tsize: location.size || 0,\n\t\t\tselector() {\n\t\t\t\treturn node ? node.generateSelector() : null;\n\t\t\t},\n\t\t};\n\t\tif (ruleUrl) {\n\t\t\tentry.ruleUrl = ruleUrl;\n\t\t}\n\t\tif (context) {\n\t\t\tentry.context = context;\n\t\t}\n\t\tthis.result[location.filename].push(entry);\n\t}\n\n\tpublic addManual(filename: string, message: DeferredMessage): void {\n\t\tif (!(filename in this.result)) {\n\t\t\tthis.result[filename] = [];\n\t\t}\n\t\tthis.result[filename].push(message);\n\t}\n\n\tpublic save(sources?: Source[]): Report {\n\t\tconst report: Report = {\n\t\t\tvalid: this.isValid(),\n\t\t\tresults: Object.keys(this.result).map((filePath) => {\n\t\t\t\tconst messages = Array.from(this.result[filePath], freeze).sort(messageSort);\n\t\t\t\tconst source = (sources ?? []).find((source: Source) => filePath === source.filename);\n\t\t\t\treturn {\n\t\t\t\t\tfilePath,\n\t\t\t\t\tmessages,\n\t\t\t\t\terrorCount: countErrors(messages),\n\t\t\t\t\twarningCount: countWarnings(messages),\n\t\t\t\t\tsource: source ? (source.originalData ?? source.data) : null,\n\t\t\t\t};\n\t\t\t}),\n\t\t\terrorCount: 0,\n\t\t\twarningCount: 0,\n\t\t};\n\t\treport.errorCount = sumErrors(report.results);\n\t\treport.warningCount = sumWarnings(report.results);\n\t\treturn report;\n\t}\n\n\tprotected isValid(): boolean {\n\t\tconst numErrors = Object.values(this.result).reduce((sum, messages) => {\n\t\t\treturn sum + countErrors(messages);\n\t\t}, 0);\n\t\treturn numErrors === 0;\n\t}\n}\n\nfunction countErrors(messages: Array<Message | DeferredMessage>): number {\n\treturn messages.filter((m) => m.severity === Number(Severity.ERROR)).length;\n}\n\nfunction countWarnings(messages: Array<Message | DeferredMessage>): number {\n\treturn messages.filter((m) => m.severity === Number(Severity.WARN)).length;\n}\n\nfunction sumErrors(results: Result[]): number {\n\treturn results.reduce((sum: number, result: Result) => {\n\t\treturn sum + result.errorCount;\n\t}, 0);\n}\n\nfunction sumWarnings(results: Result[]): number {\n\treturn results.reduce((sum: number, result: Result) => {\n\t\treturn sum + result.warningCount;\n\t}, 0);\n}\n\nfunction messageSort(a: Message, b: Message): number {\n\tif (a.line < b.line) {\n\t\treturn -1;\n\t}\n\n\tif (a.line > b.line) {\n\t\treturn 1;\n\t}\n\n\tif (a.column < b.column) {\n\t\treturn -1;\n\t}\n\n\tif (a.column > b.column) {\n\t\treturn 1;\n\t}\n\n\treturn 0;\n}\n\nexport default Reporter;\n","/**\n * @internal\n */\nexport type RuleBlocker = number & { __type: \"rule-blocker\" };\n\nlet blockerCounter = 1;\n\n/**\n * Creates a new rule blocker for using when blocking rules from generating\n * errors.\n *\n * @internal\n */\nexport function createBlocker(): RuleBlocker {\n\tconst id = blockerCounter++;\n\treturn id as RuleBlocker;\n}\n","import { type ResolvedConfig, type RuleOptions, Severity } from \"../config\";\nimport { type Location, type Source } from \"../context\";\nimport { type DOMInternalID } from \"../dom/domnode\";\nimport {\n\ttype ConfigReadyEvent,\n\ttype DirectiveEvent,\n\ttype RuleErrorEvent,\n\ttype SourceReadyEvent,\n\ttype TagEndEvent,\n\ttype TagStartEvent,\n} from \"../event\";\nimport { InvalidTokenError, Lexer, TokenType } from \"../lexer\";\nimport { type Message } from \"../message\";\nimport { type Parser, ParserError } from \"../parser\";\nimport { type Report, Reporter } from \"../reporter\";\nimport { type RuleConstructor, type RuleDocumentation, Rule } from \"../rule\";\nimport type NoUnusedDisable from \"../rules/no-unused-disable\";\nimport bundledRules from \"../rules\";\nimport { dumpTree } from \"../utils\";\nimport { createBlocker } from \"./rule-blocker\";\n\n/**\n * @internal\n */\nexport interface EventDump {\n\tevent: string;\n\tdata: any;\n}\n\n/**\n * @internal\n */\nexport interface TokenDump {\n\ttoken: string;\n\tdata: string;\n\tlocation: string;\n}\n\ninterface DirectiveContext {\n\treadonly rules: Record<string, Rule<unknown, unknown> | undefined>;\n\treportUnused(rules: Set<string>, unused: Set<string>, options: string, location: Location): void;\n}\n\n/**\n * @internal\n */\nexport class Engine<T extends Parser = Parser> {\n\tprivate report: Reporter;\n\tprivate config: ResolvedConfig;\n\tprivate ParserClass: new (config: ResolvedConfig) => T;\n\tprivate availableRules: Record<string, RuleConstructor<unknown, unknown> | undefined>;\n\n\tpublic constructor(config: ResolvedConfig, ParserClass: new (config: ResolvedConfig) => T) {\n\t\tthis.report = new Reporter();\n\t\tthis.config = config;\n\t\tthis.ParserClass = ParserClass;\n\n\t\t/* initialize plugins and rules */\n\t\tconst result = this.initPlugins(this.config);\n\t\tthis.availableRules = {\n\t\t\t...bundledRules,\n\t\t\t...result.availableRules,\n\t\t};\n\t}\n\n\t/**\n\t * Lint sources and return report\n\t *\n\t * @param sources - Sources to lint.\n\t * @returns Report output.\n\t */\n\tpublic lint(sources: Source[]): Report {\n\t\tfor (const source of sources) {\n\t\t\t/* create parser for source */\n\t\t\tconst parser = this.instantiateParser();\n\n\t\t\t/* setup plugins and rules */\n\t\t\tconst { rules } = this.setupPlugins(source, this.config, parser);\n\t\t\tconst noUnusedDisable = rules[\"no-unused-disable\"] as NoUnusedDisable;\n\t\t\tconst directiveContext: DirectiveContext = {\n\t\t\t\trules,\n\t\t\t\treportUnused(\n\t\t\t\t\trules: Set<string>,\n\t\t\t\t\tunused: Set<string>,\n\t\t\t\t\toptions: string,\n\t\t\t\t\tlocation: Location,\n\t\t\t\t): void {\n\t\t\t\t\tif (!rules.has(noUnusedDisable.name)) {\n\t\t\t\t\t\tnoUnusedDisable.reportUnused(unused, options, location);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\n\t\t\t/* create a faux location at the start of the stream for the next events */\n\t\t\tconst location: Location = {\n\t\t\t\tfilename: source.filename,\n\t\t\t\tline: 1,\n\t\t\t\tcolumn: 1,\n\t\t\t\toffset: 0,\n\t\t\t\tsize: 1,\n\t\t\t};\n\n\t\t\t/* trigger configuration ready event */\n\t\t\tconst configEvent: ConfigReadyEvent = {\n\t\t\t\tlocation,\n\t\t\t\tconfig: this.config,\n\t\t\t\trules,\n\t\t\t};\n\t\t\tparser.trigger(\"config:ready\", configEvent);\n\n\t\t\t/* trigger source ready event */\n\t\t\tconst { hooks: _, ...sourceData } = source;\n\t\t\tconst sourceEvent: SourceReadyEvent = {\n\t\t\t\tlocation,\n\t\t\t\tsource: sourceData,\n\t\t\t};\n\t\t\tparser.trigger(\"source:ready\", sourceEvent);\n\n\t\t\t/* setup directive handling */\n\t\t\tparser.on(\"directive\", (_: string, event: DirectiveEvent) => {\n\t\t\t\tthis.processDirective(event, parser, directiveContext);\n\t\t\t});\n\n\t\t\t/* parse token stream */\n\t\t\ttry {\n\t\t\t\tparser.parseHtml(source);\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof InvalidTokenError || e instanceof ParserError) {\n\t\t\t\t\tthis.reportError(\"parser-error\", e.message, e.location);\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/* generate results from report */\n\t\treturn this.report.save(sources);\n\t}\n\n\t/**\n\t * Returns a list of all events generated while parsing the source.\n\t *\n\t * For verbosity, token events are ignored (use [[dumpTokens]] to inspect\n\t * token stream).\n\t */\n\tpublic dumpEvents(source: Source[]): EventDump[] {\n\t\tconst parser = this.instantiateParser();\n\t\tconst lines: EventDump[] = [];\n\t\tparser.on(\"*\", (event, data) => {\n\t\t\t/* ignore token events as it becomes to verbose */\n\t\t\tif (event === \"token\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlines.push({ event, data });\n\t\t});\n\t\tsource.forEach((src) => parser.parseHtml(src));\n\t\treturn lines;\n\t}\n\n\tpublic dumpTokens(source: Source[]): TokenDump[] {\n\t\tconst lexer = new Lexer();\n\t\tconst lines: TokenDump[] = [];\n\t\tfor (const src of source) {\n\t\t\tfor (const token of lexer.tokenize(src)) {\n\t\t\t\tconst data = token.data[0] ?? \"\";\n\t\t\t\tconst filename = token.location.filename;\n\t\t\t\tconst line = String(token.location.line);\n\t\t\t\tconst column = String(token.location.column);\n\t\t\t\tlines.push({\n\t\t\t\t\ttoken: TokenType[token.type],\n\t\t\t\t\tdata,\n\t\t\t\t\tlocation: `${filename}:${line}:${column}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn lines;\n\t}\n\n\tpublic dumpTree(source: Source[]): string[] {\n\t\t/* @todo handle dumping each tree */\n\t\tconst parser = this.instantiateParser();\n\t\tconst root = parser.parseHtml(source[0]);\n\t\treturn dumpTree(root);\n\t}\n\n\t/**\n\t * Get rule documentation.\n\t */\n\tpublic getRuleDocumentation({\n\t\truleId,\n\t\tcontext,\n\t}: Pick<Message, \"ruleId\" | \"context\">): RuleDocumentation | null {\n\t\tconst rules = this.config.getRules();\n\t\tconst ruleData = rules.get(ruleId);\n\t\tif (ruleData) {\n\t\t\tconst [, options] = ruleData;\n\t\t\tconst rule = this.instantiateRule(ruleId, options);\n\t\t\treturn rule.documentation(context);\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t * Create a new parser instance with the current configuration.\n\t *\n\t * @internal\n\t */\n\tpublic instantiateParser(): Parser {\n\t\treturn new this.ParserClass(this.config);\n\t}\n\n\tprivate processDirective(event: DirectiveEvent, parser: Parser, context: DirectiveContext): void {\n\t\tconst rules = event.data\n\t\t\t.split(\",\")\n\t\t\t.map((name) => name.trim())\n\t\t\t.map((name) => context.rules[name])\n\t\t\t.filter((rule): rule is Rule<unknown, unknown> => {\n\t\t\t\t/* filter out missing rules */\n\t\t\t\treturn Boolean(rule);\n\t\t\t});\n\t\t/* istanbul ignore next: option must be present or there would be no rules to disable */\n\t\tconst location = event.optionsLocation ?? event.location;\n\t\tswitch (event.action) {\n\t\t\tcase \"enable\":\n\t\t\t\tthis.processEnableDirective(rules, parser);\n\t\t\t\tbreak;\n\t\t\tcase \"disable\":\n\t\t\t\tthis.processDisableDirective(rules, parser);\n\t\t\t\tbreak;\n\t\t\tcase \"disable-block\":\n\t\t\t\tthis.processDisableBlockDirective(context, rules, parser, event.data, location);\n\t\t\t\tbreak;\n\t\t\tcase \"disable-next\":\n\t\t\t\tthis.processDisableNextDirective(context, rules, parser, event.data, location);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate processEnableDirective(rules: Array<Rule<unknown, unknown>>, parser: Parser): void {\n\t\tfor (const rule of rules) {\n\t\t\trule.setEnabled(true);\n\t\t\tif (rule.getSeverity() === Severity.DISABLED) {\n\t\t\t\trule.setServerity(Severity.ERROR);\n\t\t\t}\n\t\t}\n\n\t\t/* enable rules on node */\n\t\tparser.on(\"tag:start\", (_event: string, data: TagStartEvent) => {\n\t\t\tdata.target.enableRules(rules.map((rule) => rule.name));\n\t\t});\n\t}\n\n\tprivate processDisableDirective(rules: Array<Rule<unknown, unknown>>, parser: Parser): void {\n\t\tfor (const rule of rules) {\n\t\t\trule.setEnabled(false);\n\t\t}\n\n\t\t/* disable rules on node */\n\t\tparser.on(\"tag:start\", (_event: string, data: TagStartEvent) => {\n\t\t\tdata.target.disableRules(rules.map((rule) => rule.name));\n\t\t});\n\t}\n\n\tprivate processDisableBlockDirective(\n\t\tcontext: DirectiveContext,\n\t\trules: Array<Rule<unknown, unknown>>,\n\t\tparser: Parser,\n\t\toptions: string,\n\t\tlocation: Location,\n\t): void {\n\t\tconst ruleIds = new Set(rules.map((it) => it.name));\n\t\tconst unused = new Set(ruleIds);\n\t\tconst blocker = createBlocker();\n\t\tlet directiveBlock: DOMInternalID | null = null;\n\n\t\tfor (const rule of rules) {\n\t\t\trule.block(blocker);\n\t\t}\n\n\t\tconst unregisterOpen = parser.on(\"tag:start\", (_event: string, data: TagStartEvent) => {\n\t\t\t/* wait for a tag to open and find the current block by using its parent */\n\t\t\tif (directiveBlock === null) {\n\t\t\t\t/* istanbul ignore next: there will always be a parent (root element if\n\t\t\t\t * nothing else) but typescript doesn't know that */\n\t\t\t\tdirectiveBlock = data.target.parent?.unique ?? null;\n\t\t\t}\n\n\t\t\t/* disable rules directly on the node so it will be recorded for later,\n\t\t\t * more specifically when using the domtree to trigger errors */\n\t\t\tdata.target.blockRules(ruleIds, blocker);\n\t\t});\n\n\t\tconst unregisterClose = parser.on(\"tag:end\", (_event: string, data: TagEndEvent) => {\n\t\t\t/* if the directive is the last thing in a block no id would be set */\n\t\t\tconst lastNode = directiveBlock === null;\n\n\t\t\t/* test if the block is being closed by checking the parent of the block\n\t\t\t * element is being closed */\n\t\t\tconst parentClosed = directiveBlock === data.previous.unique;\n\n\t\t\t/* remove listeners and restore state */\n\t\t\tif (lastNode || parentClosed) {\n\t\t\t\tunregisterClose();\n\t\t\t\tunregisterOpen();\n\t\t\t\tfor (const rule of rules) {\n\t\t\t\t\trule.unblock(blocker);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tparser.on(\"rule:error\", (_event: string, data: RuleErrorEvent) => {\n\t\t\tif (data.blockers.includes(blocker)) {\n\t\t\t\tunused.delete(data.ruleId);\n\t\t\t}\n\t\t});\n\n\t\tparser.on(\"parse:end\", () => {\n\t\t\tcontext.reportUnused(ruleIds, unused, options, location);\n\t\t});\n\t}\n\n\tprivate processDisableNextDirective(\n\t\tcontext: DirectiveContext,\n\t\trules: Array<Rule<unknown, unknown>>,\n\t\tparser: Parser,\n\t\toptions: string,\n\t\tlocation: Location,\n\t): void {\n\t\tconst ruleIds = new Set(rules.map((it) => it.name));\n\t\tconst unused = new Set(ruleIds);\n\t\tconst blocker = createBlocker();\n\n\t\tfor (const rule of rules) {\n\t\t\trule.block(blocker);\n\t\t}\n\n\t\t/* block rules directly on the node so it will be recorded for later,\n\t\t * more specifically when using the domtree to trigger errors */\n\t\tconst unregister = parser.on(\"tag:start\", (_event: string, data: TagStartEvent) => {\n\t\t\tdata.target.blockRules(ruleIds, blocker);\n\t\t});\n\n\t\tparser.on(\"rule:error\", (_event: string, data: RuleErrorEvent) => {\n\t\t\tif (data.blockers.includes(blocker)) {\n\t\t\t\tunused.delete(data.ruleId);\n\t\t\t}\n\t\t});\n\n\t\tparser.on(\"parse:end\", () => {\n\t\t\tcontext.reportUnused(ruleIds, unused, options, location);\n\t\t});\n\n\t\t/* disable directive after next event occurs */\n\t\tparser.once(\"tag:ready, tag:end, attr\", () => {\n\t\t\tunregister();\n\t\t\tparser.defer(() => {\n\t\t\t\tfor (const rule of rules) {\n\t\t\t\t\trule.unblock(blocker);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t/*\n\t * Initialize all plugins. This should only be done once for all sessions.\n\t */\n\tprivate initPlugins(config: ResolvedConfig): {\n\t\tavailableRules: Record<string, RuleConstructor<any, any>>;\n\t} {\n\t\tfor (const plugin of config.getPlugins()) {\n\t\t\tif (plugin.init) {\n\t\t\t\tplugin.init();\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tavailableRules: this.initRules(config),\n\t\t};\n\t}\n\n\t/**\n\t * Initializes all rules from plugins and returns an object with a mapping\n\t * between rule name and its constructor.\n\t */\n\tprivate initRules(config: ResolvedConfig): Record<string, RuleConstructor<any, any>> {\n\t\tconst availableRules: Record<string, RuleConstructor<any, any>> = {};\n\t\tfor (const plugin of config.getPlugins()) {\n\t\t\tfor (const [name, rule] of Object.entries(plugin.rules ?? {})) {\n\t\t\t\tif (!rule) continue;\n\t\t\t\tavailableRules[name] = rule;\n\t\t\t}\n\t\t}\n\t\treturn availableRules;\n\t}\n\n\t/**\n\t * Setup all plugins for this session.\n\t */\n\tprivate setupPlugins(\n\t\tsource: Source,\n\t\tconfig: ResolvedConfig,\n\t\tparser: Parser,\n\t): {\n\t\trules: Record<string, Rule<unknown, unknown>>;\n\t} {\n\t\tconst eventHandler = parser.getEventHandler();\n\t\tfor (const plugin of config.getPlugins()) {\n\t\t\tif (plugin.setup) {\n\t\t\t\tplugin.setup(source, eventHandler);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\trules: this.setupRules(config, parser),\n\t\t};\n\t}\n\n\t/**\n\t * Load and setup all rules for current configuration.\n\t */\n\tprivate setupRules(\n\t\tconfig: ResolvedConfig,\n\t\tparser: Parser,\n\t): Record<string, Rule<unknown, unknown>> {\n\t\tconst rules: Record<string, Rule<unknown, unknown>> = {};\n\t\tfor (const [ruleId, [severity, options]] of config.getRules().entries()) {\n\t\t\trules[ruleId] = this.loadRule(ruleId, config, severity, options, parser, this.report);\n\t\t}\n\t\treturn rules;\n\t}\n\n\t/**\n\t * Load and setup a rule using current config.\n\t */\n\tprotected loadRule(\n\t\truleId: string,\n\t\tconfig: ResolvedConfig,\n\t\tseverity: Severity,\n\t\toptions: RuleOptions,\n\t\tparser: Parser,\n\t\treport: Reporter,\n\t): Rule<unknown, unknown> {\n\t\tconst meta = config.getMetaTable();\n\t\tconst rule = this.instantiateRule(ruleId, options);\n\t\trule.name = ruleId;\n\t\trule.init(parser, report, severity, meta);\n\n\t\t/* call setup callback if present */\n\t\t/* eslint-disable-next-line @typescript-eslint/no-unnecessary-condition --\n\t\t * unnecessary from a typescript perspective but if the plugin is not\n\t\t * implemented in TS the user might not have implemented the callback even\n\t\t * if the declaration requires it */\n\t\tif (rule.setup) {\n\t\t\trule.setup();\n\t\t}\n\n\t\treturn rule;\n\t}\n\n\tprotected instantiateRule(name: string, options: RuleOptions): Rule<unknown, unknown> {\n\t\tif (this.availableRules[name]) {\n\t\t\tconst RuleConstructor = this.availableRules[name];\n\t\t\treturn new RuleConstructor(options);\n\t\t} else {\n\t\t\treturn this.missingRule(name);\n\t\t}\n\t}\n\n\tprotected missingRule(name: string): Rule {\n\t\treturn new (class MissingRule extends Rule {\n\t\t\tpublic setup(): void {\n\t\t\t\tthis.on(\"dom:load\", () => {\n\t\t\t\t\tthis.report(null, `Definition for rule '${name}' was not found`);\n\t\t\t\t});\n\t\t\t}\n\t\t})();\n\t}\n\n\tprivate reportError(ruleId: string, message: string, location: Location): void {\n\t\tthis.report.addManual(location.filename, {\n\t\t\truleId,\n\t\t\tseverity: Severity.ERROR,\n\t\t\tmessage,\n\t\t\toffset: location.offset,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column,\n\t\t\tsize: location.size,\n\t\t\tselector: () => null,\n\t\t});\n\t}\n}\n","import { Config } from \"../config\";\nimport { type ConfigData } from \"../config-data\";\nimport { ConfigLoader } from \"../config-loader\";\nimport { type ResolvedConfig } from \"../resolved-config\";\nimport { type Resolver } from \"../resolver\";\n\nconst defaultResolvers: Resolver[] = [];\n\ntype ConstructorParametersDefault = [ConfigData?];\ntype ConstructorParametersResolver = [Resolver[], ConfigData?];\ntype ConstructorParameters = ConstructorParametersDefault | ConstructorParametersResolver;\n\nfunction hasResolver(value: ConstructorParameters): value is ConstructorParametersResolver {\n\treturn Array.isArray(value[0]);\n}\n\n/**\n * The static configuration loader does not do any per-handle lookup. Only the\n * global or per-call configuration is used.\n *\n * In practice this means no configuration is fetched by traversing the\n * filesystem.\n *\n * @public\n */\nexport class StaticConfigLoader extends ConfigLoader {\n\t/**\n\t * Create a static configuration loader with default resolvers.\n\t *\n\t * @param config - Global configuration\n\t * @param configFactory - Optional configuration factory\n\t */\n\tpublic constructor(config?: ConfigData);\n\n\t/**\n\t * Create a static configuration loader with custom resolvers.\n\t *\n\t * @param resolvers - Resolvers to use\n\t * @param config - Global configuration\n\t * @param configFactory - Optional configuration factory\n\t */\n\tpublic constructor(resolvers: Resolver[], config?: ConfigData);\n\n\tpublic constructor(...args: ConstructorParameters) {\n\t\tif (hasResolver(args)) {\n\t\t\tconst [resolvers, config] = args;\n\t\t\tsuper(resolvers, config);\n\t\t} else {\n\t\t\tconst [config] = args;\n\t\t\tsuper(defaultResolvers, config);\n\t\t}\n\t}\n\n\t/**\n\t * Set a new configuration for this loader.\n\t *\n\t * @public\n\t * @since 8.20.0\n\t * @param config - New configuration to use.\n\t */\n\t/* istanbul ignore next -- not testing setters/getters */\n\tpublic setConfig(config: ConfigData): void {\n\t\tconst defaults = Config.empty();\n\t\tthis.globalConfig = defaults.merge(this.resolvers, this.loadFromObject(config));\n\t}\n\n\tpublic override getConfigFor(_handle: string, configOverride?: ConfigData): ResolvedConfig {\n\t\tconst override = this.loadFromObject(configOverride ?? {});\n\t\tif (override.isRootFound()) {\n\t\t\toverride.init();\n\t\t\treturn override.resolve();\n\t\t}\n\n\t\tconst merged = this.globalConfig.merge(this.resolvers, override);\n\t\tmerged.init();\n\t\treturn merged.resolve();\n\t}\n\n\tpublic override flushCache(): void {\n\t\t/* do nothing */\n\t}\n\n\tprotected defaultConfig(): Config {\n\t\treturn this.loadFromObject({\n\t\t\textends: [\"html-validate:recommended\"],\n\t\t\telements: [\"html5\"],\n\t\t});\n\t}\n}\n","import { type SchemaObject } from \"ajv\";\nimport { type ConfigData, type ResolvedConfig, ConfigLoader } from \"./config\";\nimport { normalizeSource, type Source } from \"./context\";\nimport { type SourceHooks } from \"./context/source\";\nimport { type EventDump, type TokenDump, Engine } from \"./engine\";\nimport { type Message } from \"./message\";\nimport { Parser } from \"./parser\";\nimport { type Report, Reporter } from \"./reporter\";\nimport { type RuleDocumentation } from \"./rule\";\nimport configurationSchema from \"./schema/config.json\";\nimport { StaticConfigLoader } from \"./config/loaders/static\";\n\nfunction isSourceHooks(value: any): value is SourceHooks {\n\tif (!value || typeof value === \"string\") {\n\t\treturn false;\n\t}\n\treturn Boolean(value.processAttribute || value.processElement);\n}\n\nfunction isConfigData(value: any): value is ConfigData {\n\tif (!value || typeof value === \"string\") {\n\t\treturn false;\n\t}\n\treturn !(value.processAttribute || value.processElement);\n}\n\n/**\n * Primary API for using HTML-validate.\n *\n * Provides high-level abstractions for common operations.\n *\n * @public\n */\nexport class HtmlValidate {\n\tprotected configLoader: ConfigLoader;\n\n\t/**\n\t * Create a new validator.\n\t *\n\t * @public\n\t * @param configLoader - Use a custom configuration loader.\n\t * @param config - If set it provides the global default configuration. By\n\t * default `Config.defaultConfig()` is used.\n\t */\n\tpublic constructor(config?: ConfigData);\n\tpublic constructor(configLoader: ConfigLoader);\n\tpublic constructor(arg?: ConfigLoader | ConfigData) {\n\t\tconst [loader, config] = arg instanceof ConfigLoader ? [arg, undefined] : [undefined, arg];\n\t\tthis.configLoader = loader ?? new StaticConfigLoader(config);\n\t}\n\n\t/**\n\t * Parse and validate HTML from string.\n\t *\n\t * @public\n\t * @param str - Text to parse.\n\t * @param filename - If set configuration is loaded for given filename.\n\t * @param hooks - Optional hooks (see [[Source]]) for definition.\n\t * @returns Report output.\n\t */\n\t/* eslint-disable @typescript-eslint/unified-signatures -- for easier readability */\n\tpublic validateString(str: string): Promise<Report>;\n\tpublic validateString(str: string, filename: string): Promise<Report>;\n\tpublic validateString(str: string, hooks: SourceHooks): Promise<Report>;\n\tpublic validateString(str: string, options: ConfigData): Promise<Report>;\n\tpublic validateString(str: string, filename: string, hooks: SourceHooks): Promise<Report>;\n\tpublic validateString(str: string, filename: string, options: ConfigData): Promise<Report>;\n\tpublic validateString(\n\t\tstr: string,\n\t\tfilename: string,\n\t\toptions: ConfigData,\n\t\thooks: SourceHooks,\n\t): Promise<Report>;\n\t/* eslint-enable @typescript-eslint/unified-signatures */\n\tpublic validateString(\n\t\tstr: string,\n\t\targ1?: string | SourceHooks | ConfigData,\n\t\targ2?: SourceHooks | ConfigData,\n\t\targ3?: SourceHooks,\n\t): Promise<Report> {\n\t\tconst filename = typeof arg1 === \"string\" ? arg1 : \"inline\";\n\t\tconst options = isConfigData(arg1) ? arg1 : isConfigData(arg2) ? arg2 : undefined;\n\t\tconst hooks = isSourceHooks(arg1) ? arg1 : isSourceHooks(arg2) ? arg2 : arg3;\n\t\tconst source = {\n\t\t\tdata: str,\n\t\t\tfilename,\n\t\t\tline: 1,\n\t\t\tcolumn: 1,\n\t\t\toffset: 0,\n\t\t\thooks,\n\t\t};\n\t\treturn this.validateSource(source, options);\n\t}\n\n\t/**\n\t * Parse and validate HTML from string.\n\t *\n\t * @public\n\t * @param str - Text to parse.\n\t * @param filename - If set configuration is loaded for given filename.\n\t * @param hooks - Optional hooks (see [[Source]]) for definition.\n\t * @returns Report output.\n\t */\n\t/* eslint-disable @typescript-eslint/unified-signatures -- for easier readability */\n\tpublic validateStringSync(str: string): Report;\n\tpublic validateStringSync(str: string, filename: string): Report;\n\tpublic validateStringSync(str: string, hooks: SourceHooks): Report;\n\tpublic validateStringSync(str: string, options: ConfigData): Report;\n\tpublic validateStringSync(str: string, filename: string, hooks: SourceHooks): Report;\n\tpublic validateStringSync(str: string, filename: string, options: ConfigData): Report;\n\tpublic validateStringSync(\n\t\tstr: string,\n\t\tfilename: string,\n\t\toptions: ConfigData,\n\t\thooks: SourceHooks,\n\t): Report;\n\t/* eslint-enable @typescript-eslint/unified-signatures */\n\tpublic validateStringSync(\n\t\tstr: string,\n\t\targ1?: string | SourceHooks | ConfigData,\n\t\targ2?: SourceHooks | ConfigData,\n\t\targ3?: SourceHooks,\n\t): Report {\n\t\tconst filename = typeof arg1 === \"string\" ? arg1 : \"inline\";\n\t\tconst options = isConfigData(arg1) ? arg1 : isConfigData(arg2) ? arg2 : undefined;\n\t\tconst hooks = isSourceHooks(arg1) ? arg1 : isSourceHooks(arg2) ? arg2 : arg3;\n\t\tconst source = {\n\t\t\tdata: str,\n\t\t\tfilename,\n\t\t\tline: 1,\n\t\t\tcolumn: 1,\n\t\t\toffset: 0,\n\t\t\thooks,\n\t\t};\n\t\treturn this.validateSourceSync(source, options);\n\t}\n\n\t/**\n\t * Parse and validate HTML from [[Source]].\n\t *\n\t * @public\n\t * @param input - Source to parse.\n\t * @returns Report output.\n\t */\n\tpublic async validateSource(input: Source, configOverride?: ConfigData): Promise<Report> {\n\t\tconst source = normalizeSource(input);\n\t\tconst config = await this.getConfigFor(source.filename, configOverride);\n\t\tconst transformedSource = config.transformSource(source);\n\t\tconst engine = new Engine(config, Parser);\n\t\treturn engine.lint(transformedSource);\n\t}\n\n\t/**\n\t * Parse and validate HTML from [[Source]].\n\t *\n\t * @public\n\t * @param input - Source to parse.\n\t * @returns Report output.\n\t */\n\tpublic validateSourceSync(input: Source, configOverride?: ConfigData): Report {\n\t\tconst source = normalizeSource(input);\n\t\tconst config = this.getConfigForSync(source.filename, configOverride);\n\t\tconst transformedSource = config.transformSource(source);\n\t\tconst engine = new Engine(config, Parser);\n\t\treturn engine.lint(transformedSource);\n\t}\n\n\t/**\n\t * Parse and validate HTML from file.\n\t *\n\t * @public\n\t * @param filename - Filename to read and parse.\n\t * @returns Report output.\n\t */\n\tpublic async validateFile(filename: string): Promise<Report> {\n\t\tconst config = await this.getConfigFor(filename);\n\t\tconst source = config.transformFilename(filename);\n\t\tconst engine = new Engine(config, Parser);\n\t\treturn Promise.resolve(engine.lint(source));\n\t}\n\n\t/**\n\t * Parse and validate HTML from file.\n\t *\n\t * @public\n\t * @param filename - Filename to read and parse.\n\t * @returns Report output.\n\t */\n\tpublic validateFileSync(filename: string): Report {\n\t\tconst config = this.getConfigForSync(filename);\n\t\tconst source = config.transformFilename(filename);\n\t\tconst engine = new Engine(config, Parser);\n\t\treturn engine.lint(source);\n\t}\n\n\t/**\n\t * Parse and validate HTML from multiple files. Result is merged together to a\n\t * single report.\n\t *\n\t * @param filenames - Filenames to read and parse.\n\t * @returns Report output.\n\t */\n\tpublic async validateMultipleFiles(filenames: string[]): Promise<Report> {\n\t\tconst report = Reporter.merge(filenames.map((filename) => this.validateFileSync(filename)));\n\t\treturn Promise.resolve(report);\n\t}\n\n\t/**\n\t * Parse and validate HTML from multiple files. Result is merged together to a\n\t * single report.\n\t *\n\t * @param filenames - Filenames to read and parse.\n\t * @returns Report output.\n\t */\n\tpublic validateMultipleFilesSync(filenames: string[]): Report {\n\t\treturn Reporter.merge(filenames.map((filename) => this.validateFileSync(filename)));\n\t}\n\n\t/**\n\t * Returns true if the given filename can be validated.\n\t *\n\t * A file is considered to be validatable if the extension is `.html` or if a\n\t * transformer matches the filename.\n\t *\n\t * This is mostly useful for tooling to determine whenever to validate the\n\t * file or not. CLI tools will run on all the given files anyway.\n\t */\n\tpublic async canValidate(filename: string): Promise<boolean> {\n\t\t/* .html is always supported */\n\t\tif (filename.toLowerCase().endsWith(\".html\")) {\n\t\t\treturn true;\n\t\t}\n\n\t\t/* test if there is a matching transformer */\n\t\tconst config = await this.getConfigFor(filename);\n\t\treturn config.canTransform(filename);\n\t}\n\n\t/**\n\t * Returns true if the given filename can be validated.\n\t *\n\t * A file is considered to be validatable if the extension is `.html` or if a\n\t * transformer matches the filename.\n\t *\n\t * This is mostly useful for tooling to determine whenever to validate the\n\t * file or not. CLI tools will run on all the given files anyway.\n\t */\n\tpublic canValidateSync(filename: string): boolean {\n\t\t/* .html is always supported */\n\t\tif (filename.toLowerCase().endsWith(\".html\")) {\n\t\t\treturn true;\n\t\t}\n\n\t\t/* test if there is a matching transformer */\n\t\tconst config = this.getConfigForSync(filename);\n\t\treturn config.canTransform(filename);\n\t}\n\n\t/**\n\t * Tokenize filename and output all tokens.\n\t *\n\t * Using CLI this is enabled with `--dump-tokens`. Mostly useful for\n\t * debugging.\n\t *\n\t * @internal\n\t * @param filename - Filename to tokenize.\n\t */\n\tpublic dumpTokens(filename: string): TokenDump[] {\n\t\tconst config = this.getConfigForSync(filename);\n\t\tconst source = config.transformFilename(filename);\n\t\tconst engine = new Engine(config, Parser);\n\t\treturn engine.dumpTokens(source);\n\t}\n\n\t/**\n\t * Parse filename and output all events.\n\t *\n\t * Using CLI this is enabled with `--dump-events`. Mostly useful for\n\t * debugging.\n\t *\n\t * @internal\n\t * @param filename - Filename to dump events from.\n\t */\n\tpublic dumpEvents(filename: string): EventDump[] {\n\t\tconst config = this.getConfigForSync(filename);\n\t\tconst source = config.transformFilename(filename);\n\t\tconst engine = new Engine(config, Parser);\n\t\treturn engine.dumpEvents(source);\n\t}\n\n\t/**\n\t * Parse filename and output DOM tree.\n\t *\n\t * Using CLI this is enabled with `--dump-tree`. Mostly useful for\n\t * debugging.\n\t *\n\t * @internal\n\t * @param filename - Filename to dump DOM tree from.\n\t */\n\tpublic dumpTree(filename: string): string[] {\n\t\tconst config = this.getConfigForSync(filename);\n\t\tconst source = config.transformFilename(filename);\n\t\tconst engine = new Engine(config, Parser);\n\t\treturn engine.dumpTree(source);\n\t}\n\n\t/**\n\t * Transform filename and output source data.\n\t *\n\t * Using CLI this is enabled with `--dump-source`. Mostly useful for\n\t * debugging.\n\t *\n\t * @internal\n\t * @param filename - Filename to dump source from.\n\t */\n\tpublic dumpSource(filename: string): string[] {\n\t\tconst config = this.getConfigForSync(filename);\n\t\tconst sources = config.transformFilename(filename);\n\t\treturn sources.reduce<string[]>((result: string[], source: Source) => {\n\t\t\tconst line = String(source.line);\n\t\t\tconst column = String(source.column);\n\t\t\tconst offset = String(source.offset);\n\t\t\tresult.push(`Source ${source.filename}@${line}:${column} (offset: ${offset})`);\n\t\t\tif (source.transformedBy) {\n\t\t\t\tresult.push(\"Transformed by:\");\n\t\t\t\tresult = result.concat(source.transformedBy.reverse().map((name) => ` - ${name}`));\n\t\t\t}\n\t\t\tif (source.hooks && Object.keys(source.hooks).length > 0) {\n\t\t\t\tresult.push(\"Hooks\");\n\t\t\t\tfor (const [key, present] of Object.entries(source.hooks)) {\n\t\t\t\t\tif (present) {\n\t\t\t\t\t\tresult.push(` - ${key}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tresult.push(\"---\");\n\t\t\tresult = result.concat(source.data.split(\"\\n\"));\n\t\t\tresult.push(\"---\");\n\t\t\treturn result;\n\t\t}, []);\n\t}\n\n\t/**\n\t * Get effective configuration schema.\n\t */\n\tpublic getConfigurationSchema(): SchemaObject {\n\t\treturn configurationSchema;\n\t}\n\n\t/**\n\t * Get effective metadata element schema.\n\t *\n\t * If a filename is given the configured plugins can extend the\n\t * schema. Filename must not be an existing file or a filetype normally\n\t * handled by html-validate but the path will be used when resolving\n\t * configuration. As a rule-of-thumb, set it to the elements json file.\n\t */\n\tpublic async getElementsSchema(filename?: string): Promise<SchemaObject> {\n\t\tconst config = await this.getConfigFor(filename ?? \"inline\");\n\t\tconst metaTable = config.getMetaTable();\n\t\treturn metaTable.getJSONSchema();\n\t}\n\n\t/**\n\t * Get effective metadata element schema.\n\t *\n\t * If a filename is given the configured plugins can extend the\n\t * schema. Filename must not be an existing file or a filetype normally\n\t * handled by html-validate but the path will be used when resolving\n\t * configuration. As a rule-of-thumb, set it to the elements json file.\n\t */\n\tpublic getElementsSchemaSync(filename?: string): SchemaObject {\n\t\tconst config = this.getConfigForSync(filename ?? \"inline\");\n\t\tconst metaTable = config.getMetaTable();\n\t\treturn metaTable.getJSONSchema();\n\t}\n\n\t/**\n\t * Get contextual documentation for the given rule. Configuration will be\n\t * resolved for given filename.\n\t *\n\t * @example\n\t *\n\t * ```js\n\t * const report = await htmlvalidate.validateFile(\"my-file.html\");\n\t * for (const result of report.results){\n\t * for (const message of result.messages){\n\t * const documentation = await htmlvalidate.getContextualDocumentation(message, result.filePath);\n\t * // do something with documentation\n\t * }\n\t * }\n\t * ```\n\t *\n\t * @public\n\t * @since 8.0.0\n\t * @param message - Message reported during validation\n\t * @param filename - Filename used to resolve configuration.\n\t * @returns Contextual documentation or `null` if the rule does not exist.\n\t */\n\tpublic getContextualDocumentation(\n\t\tmessage: Pick<Message, \"ruleId\" | \"context\">,\n\t\tfilename?: string,\n\t): Promise<RuleDocumentation | null>;\n\n\t/**\n\t * Get contextual documentation for the given rule using provided\n\t * configuration.\n\t *\n\t * @example\n\t *\n\t * ```js\n\t * const report = await htmlvalidate.validateFile(\"my-file.html\");\n\t * for (const result of report.results){\n\t * for (const message of result.messages){\n\t * const documentation = await htmlvalidate.getRuleDocumentation(message, result.filePath);\n\t * // do something with documentation\n\t * }\n\t * }\n\t * ```\n\t *\n\t * @public\n\t * @since 8.0.0\n\t * @param message - Message reported during validation\n\t * @param config - Configuration to use.\n\t * @returns Contextual documentation or `null` if the rule does not exist.\n\t */\n\tpublic getContextualDocumentation(\n\t\tmessage: Pick<Message, \"ruleId\" | \"context\">,\n\t\tconfig: ResolvedConfig | Promise<ResolvedConfig>,\n\t): Promise<RuleDocumentation | null>;\n\n\tpublic async getContextualDocumentation(\n\t\tmessage: Pick<Message, \"ruleId\" | \"context\">,\n\t\tfilenameOrConfig: ResolvedConfig | Promise<ResolvedConfig> | string = \"inline\",\n\t): Promise<RuleDocumentation | null> {\n\t\tconst config =\n\t\t\ttypeof filenameOrConfig === \"string\"\n\t\t\t\t? await this.getConfigFor(filenameOrConfig)\n\t\t\t\t: await filenameOrConfig;\n\t\tconst engine = new Engine(config, Parser);\n\t\treturn engine.getRuleDocumentation(message);\n\t}\n\n\t/**\n\t * Get contextual documentation for the given rule. Configuration will be\n\t * resolved for given filename.\n\t *\n\t * @example\n\t *\n\t * ```js\n\t * const report = htmlvalidate.validateFileSync(\"my-file.html\");\n\t * for (const result of report.results){\n\t * for (const message of result.messages){\n\t * const documentation = htmlvalidate.getRuleDocumentationSync(message, result.filePath);\n\t * // do something with documentation\n\t * }\n\t * }\n\t * ```\n\t *\n\t * @public\n\t * @since 8.0.0\n\t * @param message - Message reported during validation\n\t * @param filename - Filename used to resolve configuration.\n\t * @returns Contextual documentation or `null` if the rule does not exist.\n\t */\n\tpublic getContextualDocumentationSync(\n\t\tmessage: Pick<Message, \"ruleId\" | \"context\">,\n\t\tfilename?: string,\n\t): RuleDocumentation | null;\n\n\t/**\n\t * Get contextual documentation for the given rule using provided\n\t * configuration.\n\t *\n\t * @example\n\t *\n\t * ```js\n\t * const report = htmlvalidate.validateFileSync(\"my-file.html\");\n\t * for (const result of report.results){\n\t * for (const message of result.messages){\n\t * const documentation = htmlvalidate.getRuleDocumentationSync(message, result.filePath);\n\t * // do something with documentation\n\t * }\n\t * }\n\t * ```\n\t *\n\t * @public\n\t * @since 8.0.0\n\t * @param message - Message reported during validation\n\t * @param config - Configuration to use.\n\t * @returns Contextual documentation or `null` if the rule does not exist.\n\t */\n\tpublic getContextualDocumentationSync(\n\t\tmessage: Pick<Message, \"ruleId\" | \"context\">,\n\t\tconfig: ResolvedConfig,\n\t): RuleDocumentation | null;\n\n\tpublic getContextualDocumentationSync(\n\t\tmessage: Pick<Message, \"ruleId\" | \"context\">,\n\t\tfilenameOrConfig: ResolvedConfig | string = \"inline\",\n\t): RuleDocumentation | null {\n\t\tconst config =\n\t\t\ttypeof filenameOrConfig === \"string\"\n\t\t\t\t? this.getConfigForSync(filenameOrConfig)\n\t\t\t\t: filenameOrConfig;\n\t\tconst engine = new Engine(config, Parser);\n\t\treturn engine.getRuleDocumentation(message);\n\t}\n\n\t/**\n\t * Get contextual documentation for the given rule.\n\t *\n\t * Typical usage:\n\t *\n\t * ```js\n\t * const report = await htmlvalidate.validateFile(\"my-file.html\");\n\t * for (const result of report.results){\n\t * const config = await htmlvalidate.getConfigFor(result.filePath);\n\t * for (const message of result.messages){\n\t * const documentation = await htmlvalidate.getRuleDocumentation(message.ruleId, config, message.context);\n\t * // do something with documentation\n\t * }\n\t * }\n\t * ```\n\t *\n\t * @public\n\t * @deprecated Deprecated since 8.0.0, use [[getContextualDocumentation]] instead.\n\t * @param ruleId - Rule to get documentation for.\n\t * @param config - If set it provides more accurate description by using the\n\t * correct configuration for the file.\n\t * @param context - If set to `Message.context` some rules can provide\n\t * contextual details and suggestions.\n\t */\n\tpublic async getRuleDocumentation(\n\t\truleId: string,\n\t\tconfig: ResolvedConfig | Promise<ResolvedConfig> | null = null,\n\t\tcontext: unknown | null = null,\n\t): Promise<RuleDocumentation | null> {\n\t\tconst c = config ?? this.getConfigFor(\"inline\");\n\t\tconst engine = new Engine(await c, Parser);\n\t\treturn engine.getRuleDocumentation({ ruleId, context });\n\t}\n\n\t/**\n\t * Get contextual documentation for the given rule.\n\t *\n\t * Typical usage:\n\t *\n\t * ```js\n\t * const report = htmlvalidate.validateFileSync(\"my-file.html\");\n\t * for (const result of report.results){\n\t * const config = htmlvalidate.getConfigForSync(result.filePath);\n\t * for (const message of result.messages){\n\t * const documentation = htmlvalidate.getRuleDocumentationSync(message.ruleId, config, message.context);\n\t * // do something with documentation\n\t * }\n\t * }\n\t * ```\n\t *\n\t * @public\n\t * @deprecated Deprecated since 8.0.0, use [[getContextualDocumentationSync]] instead.\n\t * @param ruleId - Rule to get documentation for.\n\t * @param config - If set it provides more accurate description by using the\n\t * correct configuration for the file.\n\t * @param context - If set to `Message.context` some rules can provide\n\t * contextual details and suggestions.\n\t */\n\tpublic getRuleDocumentationSync(\n\t\truleId: string,\n\t\tconfig: ResolvedConfig | null = null,\n\t\tcontext: unknown | null = null,\n\t): RuleDocumentation | null {\n\t\tconst c = config ?? this.getConfigForSync(\"inline\");\n\t\tconst engine = new Engine(c, Parser);\n\t\treturn engine.getRuleDocumentation({ ruleId, context });\n\t}\n\n\t/**\n\t * Create a parser configured for given filename.\n\t *\n\t * @internal\n\t * @param source - Source to use.\n\t */\n\tpublic async getParserFor(source: Source): Promise<Parser> {\n\t\tconst config = await this.getConfigFor(source.filename);\n\t\treturn new Parser(config);\n\t}\n\n\t/**\n\t * Get configuration for given filename.\n\t *\n\t * See [[FileSystemConfigLoader]] for details.\n\t *\n\t * @public\n\t * @param filename - Filename to get configuration for.\n\t * @param configOverride - Configuration to apply last.\n\t */\n\tpublic getConfigFor(filename: string, configOverride?: ConfigData): Promise<ResolvedConfig> {\n\t\tconst config = this.configLoader.getConfigFor(filename, configOverride);\n\t\treturn Promise.resolve(config);\n\t}\n\n\t/**\n\t * Get configuration for given filename.\n\t *\n\t * See [[FileSystemConfigLoader]] for details.\n\t *\n\t * @public\n\t * @param filename - Filename to get configuration for.\n\t * @param configOverride - Configuration to apply last.\n\t */\n\tpublic getConfigForSync(filename: string, configOverride?: ConfigData): ResolvedConfig {\n\t\treturn this.configLoader.getConfigFor(filename, configOverride);\n\t}\n\n\t/**\n\t * Get current configuration loader.\n\t *\n\t * @public\n\t * @since %version%\n\t * @returns Current configuration loader.\n\t */\n\t/* istanbul ignore next -- not testing setters/getters */\n\tpublic getConfigLoader(): ConfigLoader {\n\t\treturn this.configLoader;\n\t}\n\n\t/**\n\t * Set configuration loader.\n\t *\n\t * @public\n\t * @since %version%\n\t * @param loader - New configuration loader to use.\n\t */\n\t/* istanbul ignore next -- not testing setters/getters */\n\tpublic setConfigLoader(loader: ConfigLoader): void {\n\t\tthis.configLoader = loader;\n\t}\n\n\t/**\n\t * Flush configuration cache. Clears full cache unless a filename is given.\n\t *\n\t * See [[FileSystemConfigLoader]] for details.\n\t *\n\t * @public\n\t * @param filename - If set, only flush cache for given filename.\n\t */\n\tpublic flushConfigCache(filename?: string): void {\n\t\tthis.configLoader.flushCache(filename);\n\t}\n}\n","/* generated file, changes will be overwritten */\n/** @public */\nexport const name: string = \"html-validate\";\n/** @public */\nexport const version: string = \"8.22.0\";\n/** @public */\nexport const homepage: string = \"https://html-validate.org\";\n/** @public */\nexport const bugs: string = \"https://gitlab.com/html-validate/html-validate/issues/new\";\n","import { type Plugin } from \"./plugin\";\n\n/**\n * Helper function to assist IDE with completion and type-checking.\n *\n * @public\n */\nexport function definePlugin(plugin: Plugin): Plugin {\n\treturn plugin;\n}\n","// A simple implementation of make-array\nfunction makeArray (subject) {\n return Array.isArray(subject)\n ? subject\n : [subject]\n}\n\nconst EMPTY = ''\nconst SPACE = ' '\nconst ESCAPE = '\\\\'\nconst REGEX_TEST_BLANK_LINE = /^\\s+$/\nconst REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\\\]|^)\\\\$/\nconst REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\\\!/\nconst REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\\\#/\nconst REGEX_SPLITALL_CRLF = /\\r?\\n/g\n// /foo,\n// ./foo,\n// ../foo,\n// .\n// ..\nconst REGEX_TEST_INVALID_PATH = /^\\.*\\/|^\\.+$/\n\nconst SLASH = '/'\n\n// Do not use ternary expression here, since \"istanbul ignore next\" is buggy\nlet TMP_KEY_IGNORE = 'node-ignore'\n/* istanbul ignore else */\nif (typeof Symbol !== 'undefined') {\n TMP_KEY_IGNORE = Symbol.for('node-ignore')\n}\nconst KEY_IGNORE = TMP_KEY_IGNORE\n\nconst define = (object, key, value) =>\n Object.defineProperty(object, key, {value})\n\nconst REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g\n\nconst RETURN_FALSE = () => false\n\n// Sanitize the range of a regular expression\n// The cases are complicated, see test cases for details\nconst sanitizeRange = range => range.replace(\n REGEX_REGEXP_RANGE,\n (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0)\n ? match\n // Invalid range (out of order) which is ok for gitignore rules but\n // fatal for JavaScript regular expression, so eliminate it.\n : EMPTY\n)\n\n// See fixtures #59\nconst cleanRangeBackSlash = slashes => {\n const {length} = slashes\n return slashes.slice(0, length - length % 2)\n}\n\n// > If the pattern ends with a slash,\n// > it is removed for the purpose of the following description,\n// > but it would only find a match with a directory.\n// > In other words, foo/ will match a directory foo and paths underneath it,\n// > but will not match a regular file or a symbolic link foo\n// > (this is consistent with the way how pathspec works in general in Git).\n// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`'\n// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call\n// you could use option `mark: true` with `glob`\n\n// '`foo/`' should not continue with the '`..`'\nconst REPLACERS = [\n\n [\n // remove BOM\n // TODO:\n // Other similar zero-width characters?\n /^\\uFEFF/,\n () => EMPTY\n ],\n\n // > Trailing spaces are ignored unless they are quoted with backslash (\"\\\")\n [\n // (a\\ ) -> (a )\n // (a ) -> (a)\n // (a ) -> (a)\n // (a \\ ) -> (a )\n /((?:\\\\\\\\)*?)(\\\\?\\s+)$/,\n (_, m1, m2) => m1 + (\n m2.indexOf('\\\\') === 0\n ? SPACE\n : EMPTY\n )\n ],\n\n // replace (\\ ) with ' '\n // (\\ ) -> ' '\n // (\\\\ ) -> '\\\\ '\n // (\\\\\\ ) -> '\\\\ '\n [\n /(\\\\+?)\\s/g,\n (_, m1) => {\n const {length} = m1\n return m1.slice(0, length - length % 2) + SPACE\n }\n ],\n\n // Escape metacharacters\n // which is written down by users but means special for regular expressions.\n\n // > There are 12 characters with special meanings:\n // > - the backslash \\,\n // > - the caret ^,\n // > - the dollar sign $,\n // > - the period or dot .,\n // > - the vertical bar or pipe symbol |,\n // > - the question mark ?,\n // > - the asterisk or star *,\n // > - the plus sign +,\n // > - the opening parenthesis (,\n // > - the closing parenthesis ),\n // > - and the opening square bracket [,\n // > - the opening curly brace {,\n // > These special characters are often called \"metacharacters\".\n [\n /[\\\\$.|*+(){^]/g,\n match => `\\\\${match}`\n ],\n\n [\n // > a question mark (?) matches a single character\n /(?!\\\\)\\?/g,\n () => '[^/]'\n ],\n\n // leading slash\n [\n\n // > A leading slash matches the beginning of the pathname.\n // > For example, \"/*.c\" matches \"cat-file.c\" but not \"mozilla-sha1/sha1.c\".\n // A leading slash matches the beginning of the pathname\n /^\\//,\n () => '^'\n ],\n\n // replace special metacharacter slash after the leading slash\n [\n /\\//g,\n () => '\\\\/'\n ],\n\n [\n // > A leading \"**\" followed by a slash means match in all directories.\n // > For example, \"**/foo\" matches file or directory \"foo\" anywhere,\n // > the same as pattern \"foo\".\n // > \"**/foo/bar\" matches file or directory \"bar\" anywhere that is directly\n // > under directory \"foo\".\n // Notice that the '*'s have been replaced as '\\\\*'\n /^\\^*\\\\\\*\\\\\\*\\\\\\//,\n\n // '**/foo' <-> 'foo'\n () => '^(?:.*\\\\/)?'\n ],\n\n // starting\n [\n // there will be no leading '/'\n // (which has been replaced by section \"leading slash\")\n // If starts with '**', adding a '^' to the regular expression also works\n /^(?=[^^])/,\n function startingReplacer () {\n // If has a slash `/` at the beginning or middle\n return !/\\/(?!$)/.test(this)\n // > Prior to 2.22.1\n // > If the pattern does not contain a slash /,\n // > Git treats it as a shell glob pattern\n // Actually, if there is only a trailing slash,\n // git also treats it as a shell glob pattern\n\n // After 2.22.1 (compatible but clearer)\n // > If there is a separator at the beginning or middle (or both)\n // > of the pattern, then the pattern is relative to the directory\n // > level of the particular .gitignore file itself.\n // > Otherwise the pattern may also match at any level below\n // > the .gitignore level.\n ? '(?:^|\\\\/)'\n\n // > Otherwise, Git treats the pattern as a shell glob suitable for\n // > consumption by fnmatch(3)\n : '^'\n }\n ],\n\n // two globstars\n [\n // Use lookahead assertions so that we could match more than one `'/**'`\n /\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,\n\n // Zero, one or several directories\n // should not use '*', or it will be replaced by the next replacer\n\n // Check if it is not the last `'/**'`\n (_, index, str) => index + 6 < str.length\n\n // case: /**/\n // > A slash followed by two consecutive asterisks then a slash matches\n // > zero or more directories.\n // > For example, \"a/**/b\" matches \"a/b\", \"a/x/b\", \"a/x/y/b\" and so on.\n // '/**/'\n ? '(?:\\\\/[^\\\\/]+)*'\n\n // case: /**\n // > A trailing `\"/**\"` matches everything inside.\n\n // #21: everything inside but it should not include the current folder\n : '\\\\/.+'\n ],\n\n // normal intermediate wildcards\n [\n // Never replace escaped '*'\n // ignore rule '\\*' will match the path '*'\n\n // 'abc.*/' -> go\n // 'abc.*' -> skip this rule,\n // coz trailing single wildcard will be handed by [trailing wildcard]\n /(^|[^\\\\]+)(\\\\\\*)+(?=.+)/g,\n\n // '*.js' matches '.js'\n // '*.js' doesn't match 'abc'\n (_, p1, p2) => {\n // 1.\n // > An asterisk \"*\" matches anything except a slash.\n // 2.\n // > Other consecutive asterisks are considered regular asterisks\n // > and will match according to the previous rules.\n const unescaped = p2.replace(/\\\\\\*/g, '[^\\\\/]*')\n return p1 + unescaped\n }\n ],\n\n [\n // unescape, revert step 3 except for back slash\n // For example, if a user escape a '\\\\*',\n // after step 3, the result will be '\\\\\\\\\\\\*'\n /\\\\\\\\\\\\(?=[$.|*+(){^])/g,\n () => ESCAPE\n ],\n\n [\n // '\\\\\\\\' -> '\\\\'\n /\\\\\\\\/g,\n () => ESCAPE\n ],\n\n [\n // > The range notation, e.g. [a-zA-Z],\n // > can be used to match one of the characters in a range.\n\n // `\\` is escaped by step 3\n /(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g,\n (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE\n // '\\\\[bar]' -> '\\\\\\\\[bar\\\\]'\n ? `\\\\[${range}${cleanRangeBackSlash(endEscape)}${close}`\n : close === ']'\n ? endEscape.length % 2 === 0\n // A normal case, and it is a range notation\n // '[bar]'\n // '[bar\\\\\\\\]'\n ? `[${sanitizeRange(range)}${endEscape}]`\n // Invalid range notaton\n // '[bar\\\\]' -> '[bar\\\\\\\\]'\n : '[]'\n : '[]'\n ],\n\n // ending\n [\n // 'js' will not match 'js.'\n // 'ab' will not match 'abc'\n /(?:[^*])$/,\n\n // WTF!\n // https://git-scm.com/docs/gitignore\n // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1)\n // which re-fixes #24, #38\n\n // > If there is a separator at the end of the pattern then the pattern\n // > will only match directories, otherwise the pattern can match both\n // > files and directories.\n\n // 'js*' will not match 'a.js'\n // 'js/' will not match 'a.js'\n // 'js' will match 'a.js' and 'a.js/'\n match => /\\/$/.test(match)\n // foo/ will not match 'foo'\n ? `${match}$`\n // foo matches 'foo' and 'foo/'\n : `${match}(?=$|\\\\/$)`\n ],\n\n // trailing wildcard\n [\n /(\\^|\\\\\\/)?\\\\\\*$/,\n (_, p1) => {\n const prefix = p1\n // '\\^':\n // '/*' does not match EMPTY\n // '/*' does not match everything\n\n // '\\\\\\/':\n // 'abc/*' does not match 'abc/'\n ? `${p1}[^/]+`\n\n // 'a*' matches 'a'\n // 'a*' matches 'aa'\n : '[^/]*'\n\n return `${prefix}(?=$|\\\\/$)`\n }\n ],\n]\n\n// A simple cache, because an ignore rule only has only one certain meaning\nconst regexCache = Object.create(null)\n\n// @param {pattern}\nconst makeRegex = (pattern, ignoreCase) => {\n let source = regexCache[pattern]\n\n if (!source) {\n source = REPLACERS.reduce(\n (prev, [matcher, replacer]) =>\n prev.replace(matcher, replacer.bind(pattern)),\n pattern\n )\n regexCache[pattern] = source\n }\n\n return ignoreCase\n ? new RegExp(source, 'i')\n : new RegExp(source)\n}\n\nconst isString = subject => typeof subject === 'string'\n\n// > A blank line matches no files, so it can serve as a separator for readability.\nconst checkPattern = pattern => pattern\n && isString(pattern)\n && !REGEX_TEST_BLANK_LINE.test(pattern)\n && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern)\n\n // > A line starting with # serves as a comment.\n && pattern.indexOf('#') !== 0\n\nconst splitPattern = pattern => pattern.split(REGEX_SPLITALL_CRLF)\n\nclass IgnoreRule {\n constructor (\n origin,\n pattern,\n negative,\n regex\n ) {\n this.origin = origin\n this.pattern = pattern\n this.negative = negative\n this.regex = regex\n }\n}\n\nconst createRule = (pattern, ignoreCase) => {\n const origin = pattern\n let negative = false\n\n // > An optional prefix \"!\" which negates the pattern;\n if (pattern.indexOf('!') === 0) {\n negative = true\n pattern = pattern.substr(1)\n }\n\n pattern = pattern\n // > Put a backslash (\"\\\") in front of the first \"!\" for patterns that\n // > begin with a literal \"!\", for example, `\"\\!important!.txt\"`.\n .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!')\n // > Put a backslash (\"\\\") in front of the first hash for patterns that\n // > begin with a hash.\n .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#')\n\n const regex = makeRegex(pattern, ignoreCase)\n\n return new IgnoreRule(\n origin,\n pattern,\n negative,\n regex\n )\n}\n\nconst throwError = (message, Ctor) => {\n throw new Ctor(message)\n}\n\nconst checkPath = (path, originalPath, doThrow) => {\n if (!isString(path)) {\n return doThrow(\n `path must be a string, but got \\`${originalPath}\\``,\n TypeError\n )\n }\n\n // We don't know if we should ignore EMPTY, so throw\n if (!path) {\n return doThrow(`path must not be empty`, TypeError)\n }\n\n // Check if it is a relative path\n if (checkPath.isNotRelative(path)) {\n const r = '`path.relative()`d'\n return doThrow(\n `path should be a ${r} string, but got \"${originalPath}\"`,\n RangeError\n )\n }\n\n return true\n}\n\nconst isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path)\n\ncheckPath.isNotRelative = isNotRelative\ncheckPath.convert = p => p\n\nclass Ignore {\n constructor ({\n ignorecase = true,\n ignoreCase = ignorecase,\n allowRelativePaths = false\n } = {}) {\n define(this, KEY_IGNORE, true)\n\n this._rules = []\n this._ignoreCase = ignoreCase\n this._allowRelativePaths = allowRelativePaths\n this._initCache()\n }\n\n _initCache () {\n this._ignoreCache = Object.create(null)\n this._testCache = Object.create(null)\n }\n\n _addPattern (pattern) {\n // #32\n if (pattern && pattern[KEY_IGNORE]) {\n this._rules = this._rules.concat(pattern._rules)\n this._added = true\n return\n }\n\n if (checkPattern(pattern)) {\n const rule = createRule(pattern, this._ignoreCase)\n this._added = true\n this._rules.push(rule)\n }\n }\n\n // @param {Array<string> | string | Ignore} pattern\n add (pattern) {\n this._added = false\n\n makeArray(\n isString(pattern)\n ? splitPattern(pattern)\n : pattern\n ).forEach(this._addPattern, this)\n\n // Some rules have just added to the ignore,\n // making the behavior changed.\n if (this._added) {\n this._initCache()\n }\n\n return this\n }\n\n // legacy\n addPattern (pattern) {\n return this.add(pattern)\n }\n\n // | ignored : unignored\n // negative | 0:0 | 0:1 | 1:0 | 1:1\n // -------- | ------- | ------- | ------- | --------\n // 0 | TEST | TEST | SKIP | X\n // 1 | TESTIF | SKIP | TEST | X\n\n // - SKIP: always skip\n // - TEST: always test\n // - TESTIF: only test if checkUnignored\n // - X: that never happen\n\n // @param {boolean} whether should check if the path is unignored,\n // setting `checkUnignored` to `false` could reduce additional\n // path matching.\n\n // @returns {TestResult} true if a file is ignored\n _testOne (path, checkUnignored) {\n let ignored = false\n let unignored = false\n\n this._rules.forEach(rule => {\n const {negative} = rule\n if (\n unignored === negative && ignored !== unignored\n || negative && !ignored && !unignored && !checkUnignored\n ) {\n return\n }\n\n const matched = rule.regex.test(path)\n\n if (matched) {\n ignored = !negative\n unignored = negative\n }\n })\n\n return {\n ignored,\n unignored\n }\n }\n\n // @returns {TestResult}\n _test (originalPath, cache, checkUnignored, slices) {\n const path = originalPath\n // Supports nullable path\n && checkPath.convert(originalPath)\n\n checkPath(\n path,\n originalPath,\n this._allowRelativePaths\n ? RETURN_FALSE\n : throwError\n )\n\n return this._t(path, cache, checkUnignored, slices)\n }\n\n _t (path, cache, checkUnignored, slices) {\n if (path in cache) {\n return cache[path]\n }\n\n if (!slices) {\n // path/to/a.js\n // ['path', 'to', 'a.js']\n slices = path.split(SLASH)\n }\n\n slices.pop()\n\n // If the path has no parent directory, just test it\n if (!slices.length) {\n return cache[path] = this._testOne(path, checkUnignored)\n }\n\n const parent = this._t(\n slices.join(SLASH) + SLASH,\n cache,\n checkUnignored,\n slices\n )\n\n // If the path contains a parent directory, check the parent first\n return cache[path] = parent.ignored\n // > It is not possible to re-include a file if a parent directory of\n // > that file is excluded.\n ? parent\n : this._testOne(path, checkUnignored)\n }\n\n ignores (path) {\n return this._test(path, this._ignoreCache, false).ignored\n }\n\n createFilter () {\n return path => !this.ignores(path)\n }\n\n filter (paths) {\n return makeArray(paths).filter(this.createFilter())\n }\n\n // @returns {TestResult}\n test (path) {\n return this._test(path, this._testCache, true)\n }\n}\n\nconst factory = options => new Ignore(options)\n\nconst isPathValid = path =>\n checkPath(path && checkPath.convert(path), path, RETURN_FALSE)\n\nfactory.isPathValid = isPathValid\n\n// Fixes typescript\nfactory.default = factory\n\nmodule.exports = factory\n\n// Windows\n// --------------------------------------------------------------\n/* istanbul ignore if */\nif (\n // Detect `process` so that it can run in browsers.\n typeof process !== 'undefined'\n && (\n process.env && process.env.IGNORE_TEST_WIN32\n || process.platform === 'win32'\n )\n) {\n /* eslint no-control-regex: \"off\" */\n const makePosix = str => /^\\\\\\\\\\?\\\\/.test(str)\n || /[\"<>|\\u0000-\\u001F]+/u.test(str)\n ? str\n : str.replace(/\\\\/g, '/')\n\n checkPath.convert = makePosix\n\n // 'C:\\\\foo' <- 'C:\\\\foo' has been converted to 'C:/'\n // 'd:\\\\foo'\n const REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\\//i\n checkPath.isNotRelative = path =>\n REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path)\n || isNotRelative(path)\n}\n","import { type Message } from \"../message\";\nimport { type Result } from \"../reporter\";\nimport { type Formatter } from \"./formatter\";\n\nconst entities: Record<string, string> = {\n\t\">\": \">\",\n\t\"<\": \"<\",\n\t\"'\": \"'\",\n\t'\"': \""\",\n\t\"&\": \"&\",\n};\n\nfunction xmlescape(src: string | number): string {\n\treturn src.toString().replace(/[><'\"&]/g, (match: string) => {\n\t\treturn entities[match];\n\t});\n}\n\nfunction getMessageType(message: Message): \"error\" | \"warning\" {\n\tswitch (message.severity) {\n\t\tcase 2:\n\t\t\treturn \"error\";\n\t\tcase 1:\n\t\t\treturn \"warning\";\n\t\tdefault:\n\t\t\treturn \"error\";\n\t}\n}\n\nfunction checkstyleFormatter(results: Result[]): string {\n\tlet output = \"\";\n\n\toutput += `<?xml version=\"1.0\" encoding=\"utf-8\"?>\\n`;\n\toutput += `<checkstyle version=\"4.3\">\\n`;\n\n\tresults.forEach((result) => {\n\t\tconst messages = result.messages;\n\n\t\toutput += ` <file name=\"${xmlescape(result.filePath)}\">\\n`;\n\n\t\tmessages.forEach((message) => {\n\t\t\tconst ruleId = xmlescape(`htmlvalidate.rules.${message.ruleId}`);\n\t\t\toutput += \" \";\n\t\t\toutput += [\n\t\t\t\t`<error line=\"${xmlescape(message.line)}\"`,\n\t\t\t\t`column=\"${xmlescape(message.column)}\"`,\n\t\t\t\t`severity=\"${xmlescape(getMessageType(message))}\"`,\n\t\t\t\t`message=\"${xmlescape(message.message)} (${message.ruleId})\"`,\n\t\t\t\t`source=\"${ruleId}\" />`,\n\t\t\t].join(\" \");\n\t\t\toutput += \"\\n\";\n\t\t});\n\n\t\toutput += \" </file>\\n\";\n\t});\n\n\toutput += \"</checkstyle>\\n\";\n\n\treturn output;\n}\n\nconst formatter: Formatter = checkstyleFormatter;\nexport default formatter;\n","import kleur from \"kleur\";\nimport { type Message } from \"../message\";\nimport { type Result } from \"../reporter\";\n\ninterface Location {\n\tline: number;\n\tcolumn: number;\n}\n\ninterface NodeLocation {\n\tend?: Location;\n\tstart: Location;\n}\n\nexport interface CodeframeOptions {\n\tshowLink: boolean;\n\tshowSummary: boolean;\n\tshowSelector: boolean;\n}\n\nconst defaults: CodeframeOptions = {\n\tshowLink: true,\n\tshowSummary: true,\n\tshowSelector: false,\n};\n\n/**\n * RegExp to test for newlines in terminal.\n */\n\nconst NEWLINE = /\\r\\n|[\\n\\r\\u2028\\u2029]/;\n\n/**\n * Extract what lines should be marked and highlighted.\n */\n\ntype MarkerLines = Record<number, true | [number, number] | undefined>;\n\nfunction getMarkerLines(\n\tloc: NodeLocation,\n\tsource: string[],\n): {\n\tstart: number;\n\tend: number;\n\tmarkerLines: MarkerLines;\n} {\n\tconst startLoc: Location = {\n\t\t...loc.start,\n\t};\n\tconst endLoc: Location = {\n\t\t...startLoc,\n\t\t...loc.end,\n\t};\n\tconst linesAbove = 2;\n\tconst linesBelow = 3;\n\tconst startLine = startLoc.line;\n\tconst startColumn = startLoc.column;\n\tconst endLine = endLoc.line;\n\tconst endColumn = endLoc.column;\n\n\tconst start = Math.max(startLine - (linesAbove + 1), 0);\n\tconst end = Math.min(source.length, endLine + linesBelow);\n\tconst lineDiff = endLine - startLine;\n\tconst markerLines: MarkerLines = {};\n\n\tif (lineDiff) {\n\t\tfor (let i = 0; i <= lineDiff; i++) {\n\t\t\tconst lineNumber = i + startLine;\n\n\t\t\tif (!startColumn) {\n\t\t\t\tmarkerLines[lineNumber] = true;\n\t\t\t} else if (i === 0) {\n\t\t\t\tconst sourceLength = source[lineNumber - 1].length;\n\n\t\t\t\tmarkerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1];\n\t\t\t} else if (i === lineDiff) {\n\t\t\t\tmarkerLines[lineNumber] = [0, endColumn];\n\t\t\t} else {\n\t\t\t\tconst sourceLength = source[lineNumber - i].length;\n\n\t\t\t\tmarkerLines[lineNumber] = [0, sourceLength];\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (startColumn === endColumn) {\n\t\t\tif (startColumn) {\n\t\t\t\tmarkerLines[startLine] = [startColumn, 0];\n\t\t\t} else {\n\t\t\t\tmarkerLines[startLine] = true;\n\t\t\t}\n\t\t} else {\n\t\t\tmarkerLines[startLine] = [startColumn, endColumn - startColumn];\n\t\t}\n\t}\n\n\treturn { start, end, markerLines };\n}\n\nexport function codeFrameColumns(rawLines: string, loc: NodeLocation): string {\n\tconst lines = rawLines.split(NEWLINE);\n\tconst { start, end, markerLines } = getMarkerLines(loc, lines);\n\tconst numberMaxWidth = String(end).length;\n\n\treturn rawLines\n\t\t.split(NEWLINE, end)\n\t\t.slice(start, end)\n\t\t.map((line, index) => {\n\t\t\tconst number = start + 1 + index;\n\t\t\tconst paddedNumber = ` ${String(number)}`.slice(-numberMaxWidth);\n\t\t\tconst gutter = ` ${paddedNumber} |`;\n\t\t\tconst hasMarker = markerLines[number];\n\t\t\tif (hasMarker) {\n\t\t\t\tlet markerLine = \"\";\n\t\t\t\tif (Array.isArray(hasMarker)) {\n\t\t\t\t\tconst markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\\t]/g, \" \");\n\t\t\t\t\tconst numberOfMarkers = hasMarker[1] || 1;\n\n\t\t\t\t\tmarkerLine = [\n\t\t\t\t\t\t\"\\n \",\n\t\t\t\t\t\tgutter.replace(/\\d/g, \" \"),\n\t\t\t\t\t\t\" \",\n\t\t\t\t\t\tmarkerSpacing,\n\t\t\t\t\t\t\"^\".repeat(numberOfMarkers),\n\t\t\t\t\t].join(\"\");\n\t\t\t\t}\n\t\t\t\treturn [\">\", gutter, line.length > 0 ? ` ${line}` : \"\", markerLine].join(\"\");\n\t\t\t} else {\n\t\t\t\treturn [\" \", gutter, line.length > 0 ? ` ${line}` : \"\"].join(\"\");\n\t\t\t}\n\t\t})\n\t\t.join(\"\\n\");\n}\n\n/**\n * Codeframe formatter based on ESLint codeframe.\n */\n\n/**\n * Given a word and a count, append an s if count is not one.\n * @param word - A word in its singular form.\n * @param count - A number controlling whether word should be pluralized.\n * @returns The original word with an s on the end if count is not one.\n */\nfunction pluralize(word: string, count: number): string {\n\treturn count === 1 ? word : `${word}s`;\n}\n\n/**\n * Gets a formatted relative file path from an absolute path and a line/column in the file.\n * @param filePath - The absolute file path to format.\n * @param line - The line from the file to use for formatting.\n * @param column -The column from the file to use for formatting.\n * @returns The formatted file path.\n */\nfunction formatFilePath(filePath: string, line: number, column: number): string {\n\t/* istanbul ignore next: safety check from original implementation */\n\tif (line && column) {\n\t\tfilePath += `:${String(line)}:${String(column)}`;\n\t}\n\n\treturn kleur.green(filePath);\n}\n\nfunction getStartLocation(message: Message): Location {\n\treturn {\n\t\tline: message.line,\n\t\tcolumn: message.column,\n\t};\n}\n\nfunction getEndLocation(message: Message, source: string): Location {\n\tlet line = message.line;\n\tlet column = message.column;\n\tfor (let i = 0; i < message.size; i++) {\n\t\tif (source.charAt(message.offset + i) === \"\\n\") {\n\t\t\tline++;\n\t\t\tcolumn = 0;\n\t\t} else {\n\t\t\tcolumn++;\n\t\t}\n\t}\n\treturn { line, column };\n}\n\n/**\n * Gets the formatted output for a given message.\n * @param message - The object that represents this message.\n * @param parentResult - The result object that this message belongs to.\n * @returns The formatted output.\n */\nfunction formatMessage(message: Message, parentResult: Result, options: CodeframeOptions): string {\n\tconst type = message.severity === 2 ? kleur.red(\"error\") : kleur.yellow(\"warning\");\n\tconst msg = kleur.bold(message.message.replace(/([^ ])\\.$/, \"$1\"));\n\tconst ruleId = kleur.dim(`(${message.ruleId})`);\n\tconst filePath = formatFilePath(parentResult.filePath, message.line, message.column);\n\tconst sourceCode = parentResult.source;\n\n\t/* istanbul ignore next: safety check from original implementation */\n\tconst firstLine = [\n\t\t`${type}:`,\n\t\tmsg,\n\t\truleId ? ruleId : \"\",\n\t\tsourceCode ? `at ${filePath}:` : `at ${filePath}`,\n\t]\n\t\t.filter(String)\n\t\t.join(\" \");\n\n\tconst result = [firstLine];\n\n\t/* istanbul ignore next: safety check from original implementation */\n\tif (sourceCode) {\n\t\tconst output = codeFrameColumns(sourceCode, {\n\t\t\tstart: getStartLocation(message),\n\t\t\tend: getEndLocation(message, sourceCode),\n\t\t});\n\t\tresult.push(output);\n\t}\n\n\tif (options.showSelector) {\n\t\tresult.push(`${kleur.bold(\"Selector:\")} ${message.selector ?? \"-\"}`);\n\t}\n\n\tif (options.showLink && message.ruleUrl) {\n\t\tresult.push(`${kleur.bold(\"Details:\")} ${message.ruleUrl}`);\n\t}\n\n\treturn result.join(\"\\n\");\n}\n\n/**\n * Gets the formatted output summary for a given number of errors and warnings.\n * @param errors - The number of errors.\n * @param warnings - The number of warnings.\n * @returns The formatted output summary.\n */\nfunction formatSummary(errors: number, warnings: number): string {\n\tconst summaryColor = errors > 0 ? \"red\" : \"yellow\";\n\tconst summary = [];\n\n\tif (errors > 0) {\n\t\tsummary.push(`${String(errors)} ${pluralize(\"error\", errors)}`);\n\t}\n\n\tif (warnings > 0) {\n\t\tsummary.push(`${String(warnings)} ${pluralize(\"warning\", warnings)}`);\n\t}\n\n\treturn kleur[summaryColor]().bold(`${summary.join(\" and \")} found.`);\n}\n\nexport function codeframe(results: Result[], options?: Partial<CodeframeOptions>): string {\n\tconst merged: CodeframeOptions = { ...defaults, ...options };\n\n\tlet errors = 0;\n\tlet warnings = 0;\n\n\tconst resultsWithMessages = results.filter((result) => result.messages.length > 0);\n\n\tlet output = resultsWithMessages\n\t\t.reduce<string[]>((resultsOutput, result) => {\n\t\t\tconst messages = result.messages.map((message) => {\n\t\t\t\treturn `${formatMessage(message, result, merged)}\\n\\n`;\n\t\t\t});\n\n\t\t\terrors += result.errorCount;\n\t\t\twarnings += result.warningCount;\n\n\t\t\treturn resultsOutput.concat(messages);\n\t\t}, [])\n\t\t.join(\"\\n\");\n\n\tif (merged.showSummary) {\n\t\toutput += \"\\n\";\n\t\toutput += formatSummary(errors, warnings);\n\t\toutput += \"\\n\";\n\t}\n\n\treturn errors + warnings > 0 ? output : \"\";\n}\n","import { type Result } from \"../reporter\";\nimport { type Formatter } from \"./formatter\";\n\nfunction jsonFormatter(results: Result[]): string {\n\treturn JSON.stringify(results);\n}\n\nconst formatter: Formatter = jsonFormatter;\nexport default formatter;\n","import { stylish as stylishImpl } from \"@html-validate/stylish\";\nimport kleur from \"kleur\";\nimport { type Result } from \"../reporter\";\nimport { type Formatter } from \"./formatter\";\n\nfunction linkSummary(results: Result[]): string {\n\tconst urls = results.reduce<string[]>((result, it): string[] => {\n\t\tconst urls: string[] = it.messages\n\t\t\t.map((error) => error.ruleUrl)\n\t\t\t.filter((error): error is string => Boolean(error));\n\t\treturn [...result, ...urls];\n\t}, []);\n\n\tconst unique = Array.from(new Set(urls));\n\tif (unique.length === 0) {\n\t\treturn \"\";\n\t}\n\n\tconst lines = unique.map((url) => ` ${url}\\n`);\n\treturn `\\n${kleur.bold(\"More information\")}:\\n${lines.join(\"\")}\\n`;\n}\n\nfunction stylish(results: Result[]): string {\n\tconst errors = stylishImpl(\n\t\tresults.map((it) => ({\n\t\t\t...it,\n\t\t\tfixableErrorCount: 0,\n\t\t\tfixableWarningCount: 0,\n\t\t})),\n\t);\n\tconst links = linkSummary(results);\n\treturn `${errors}${links}`;\n}\n\nconst formatter: Formatter = stylish;\nexport default formatter;\n","import { type Result } from \"../reporter\";\nimport { type Formatter } from \"./formatter\";\n\nfunction textFormatter(results: Result[]): string {\n\tlet output = \"\";\n\tlet total = 0;\n\n\tresults.forEach((result) => {\n\t\tconst messages = result.messages;\n\n\t\tif (messages.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\ttotal += messages.length;\n\n\t\toutput += messages\n\t\t\t.map((message) => {\n\t\t\t\tlet messageType;\n\n\t\t\t\tif (message.severity === 2) {\n\t\t\t\t\tmessageType = \"error\";\n\t\t\t\t} else {\n\t\t\t\t\tmessageType = \"warning\";\n\t\t\t\t}\n\n\t\t\t\tconst line = String(message.line);\n\t\t\t\tconst column = String(message.column);\n\t\t\t\tconst location = `${result.filePath}:${line}:${column}`;\n\t\t\t\treturn `${location}: ${messageType} [${message.ruleId}] ${message.message}\\n`;\n\t\t\t})\n\t\t\t.join(\"\");\n\t});\n\n\treturn total > 0 ? output : \"\";\n}\n\nconst formatter: Formatter = textFormatter;\nexport default formatter;\n","import checkstyle from \"./checkstyle\";\nimport { codeframe } from \"./codeframe\";\nimport json from \"./json\";\nimport stylish from \"./stylish\";\nimport text from \"./text\";\nimport { type Formatter } from \"./formatter\";\n\nexport { type Formatter } from \"./formatter\";\n\n/**\n * @public\n */\nexport interface AvailableFormatters {\n\tcheckstyle: Formatter;\n\tcodeframe: Formatter;\n\tjson: Formatter;\n\tstylish: Formatter;\n\ttext: Formatter;\n}\n\nconst availableFormatters: AvailableFormatters & Record<string, Formatter> = {\n\tcheckstyle,\n\tcodeframe,\n\tjson,\n\tstylish,\n\ttext,\n};\n\n/**\n * Get formatter function by name.\n *\n * @public\n * @param name - Name of formatter.\n * @returns Formatter function or null if it doesn't exist.\n */\nexport function getFormatter(name: keyof AvailableFormatters): Formatter;\n\n/**\n * @public\n */\nexport function getFormatter(name: string): Formatter | null;\n\nexport function getFormatter(name: string): Formatter | null {\n\treturn availableFormatters[name] ?? null;\n}\n","import semver from \"semver\";\n\n/**\n * Options for {@link compatibilityCheck}.\n *\n * @public\n */\nexport interface CompatibilityOptions {\n\t/** If `true` nothing no output will be generated on console. Default: `false` */\n\tsilent: boolean;\n\n\t/**\n\t * @internal\n\t * Use this version number instead of running version. Default: running version.\n\t */\n\tversion: string;\n\n\t/** Use custom logging callback. Default: `console.error` */\n\tlogger(this: void, message: string): void;\n}\n\n/**\n * @internal\n */\nexport function compatibilityCheckImpl(\n\tname: string,\n\tdeclared: string,\n\toptions: CompatibilityOptions,\n): boolean {\n\tconst { silent, version: current, logger } = options;\n\tconst valid = semver.satisfies(current, declared);\n\tif (valid || silent) {\n\t\treturn valid;\n\t}\n\n\tconst text = [\n\t\t\"-----------------------------------------------------------------------------------------------------\",\n\t\t`${name} requires html-validate version \"${declared}\" but current installed version is ${current}`,\n\t\t\"This is not a supported configuration. Please install a supported version before reporting bugs.\",\n\t\t\"-----------------------------------------------------------------------------------------------------\",\n\t].join(\"\\n\");\n\n\tlogger(text);\n\n\treturn false;\n}\n"],"names":["betterAjvErrors","TextContent","overwriteMerge","deepmerge","tagName","Ajv","value","State","ContentModel","NodeType","Combinator","factory","splitPattern","pseudoClassFunction","NodeClosed","Severity","node","TextClassification","ajv","defaults","getDescription","TokenType","parseStyle","reportMessage","toArray","naturalJoin","getRuleDescription","isCategory","formatMessage","hasImgAltText","isRelevant","existing","selectors","TextContentEnum","regexp","entities","entityLocation","message","context","html5","bundledRules","DoctypeHtml","NoDupId","UnrecognizedCharRef","WCAG","rules","config","a11y","document","prettier","recommended","standard","filename","source","fs","schema","bundledElements","event","reports","location","_","formatter","kleur","urls","stylishImpl","checkstyle","json","stylish","text","semver"],"mappings":"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","x_google_ignoreList":[0,177]}
|
|
1
|
+
{"version":3,"file":"core.js","sources":["../../node_modules/deepmerge/dist/cjs.js","../../src/error/wrapped-error.ts","../../src/error/ensure-error.ts","../../src/error/nested-error.ts","../../src/error/user-error.ts","../../src/error/inherit-error.ts","../../src/error/schema-validation-error.ts","../../src/utils/compute-hash.ts","../../src/schema/keywords/regexp.ts","../../src/schema/keywords/function.ts","../../src/meta/element.ts","../../src/meta/migrate.ts","../../src/meta/evaluator/is-descendant.ts","../../src/meta/evaluator/has-attribute.ts","../../src/meta/evaluator/match-attribute.ts","../../src/meta/table.ts","../../src/dom/dynamic-value.ts","../../src/dom/attribute.ts","../../src/dom/css/parse-css-declaration.ts","../../src/context/location.ts","../../src/context/state.ts","../../src/context/context.ts","../../src/context/normalize-source.ts","../../src/dom/nodetype.ts","../../src/dom/domnode.ts","../../src/dom/domtokenlist.ts","../../src/dom/combinator.ts","../../src/dom/pseudoclass/first-child.ts","../../src/dom/pseudoclass/last-child.ts","../../src/dom/pseudoclass/nth-child.ts","../../src/dom/pseudoclass/scope.ts","../../src/dom/pseudoclass/index.ts","../../src/dom/split-selector-elements.ts","../../src/dom/selector.ts","../../src/dom/text.ts","../../src/dom/htmlelement.ts","../../src/utils/dump-tree.ts","../../src/utils/interpolate.ts","../../src/utils/is-thenable.ts","../../src/config/severity.ts","../../src/rules/helper/aria-naming.ts","../../src/rules/helper/is-keyword-ignored.ts","../../src/rules/helper/a11y.ts","../../src/rules/helper/text.ts","../../src/rules/helper/has-alt-text.ts","../../src/rules/helper/has-aria-label.ts","../../src/rules/helper/partition.ts","../../src/rule.ts","../../src/rules/allowed-links.ts","../../src/rules/area-alt.ts","../../src/rules/aria-hidden-body.ts","../../src/rules/aria-label-misuse.ts","../../src/config/error.ts","../../src/rules/helper/case-style.ts","../../src/rules/attr-case.ts","../../src/lexer/token.ts","../../src/lexer/lexer.ts","../../src/rules/attr-delimiter.ts","../../src/rules/attr-pattern.ts","../../src/rules/attr-quotes.ts","../../src/rules/attr-spacing.ts","../../src/rules/attribute-allowed-values.ts","../../src/rules/attribute-boolean-style.ts","../../src/rules/attribute-empty-style.ts","../../src/rules/attribute-misuse.ts","../../src/pattern.ts","../../src/rules/base-pattern-rule.ts","../../src/rules/class-pattern.ts","../../src/rules/close-attr.ts","../../src/rules/close-order.ts","../../src/rules/deprecated.ts","../../src/rules/deprecated-rule.ts","../../src/rules/doctype-html.ts","../../src/rules/doctype-style.ts","../../src/rules/element-case.ts","../../src/rules/element-name.ts","../../src/rules/element-permitted-content.ts","../../src/rules/element-permitted-occurrences.ts","../../src/rules/element-permitted-order.ts","../../src/rules/element-permitted-parent.ts","../../src/rules/element-required-ancestor.ts","../../src/rules/element-required-attributes.ts","../../src/rules/element-required-content.ts","../../src/rules/empty-heading.ts","../../src/rules/empty-title.ts","../../src/rules/form-dup-name.ts","../../src/rules/heading-level.ts","../../src/rules/helper/is-focusable.ts","../../src/rules/hidden-focusable.ts","../../src/rules/id-pattern.ts","../../src/rules/input-attributes.ts","../../src/rules/helper/has-accessible-name.ts","../../src/rules/input-missing-label.ts","../../src/rules/long-title.ts","../../src/rules/meta-refresh.ts","../../src/rules/map-dup-name.ts","../../src/rules/map-id-name.ts","../../src/rules/missing-doctype.ts","../../src/rules/multiple-labeled-controls.ts","../../src/rules/name-pattern.ts","../../src/rules/no-abstract-role.ts","../../src/rules/no-autoplay.ts","../../src/rules/no-conditional-comment.ts","../../src/rules/no-deprecated-attr.ts","../../src/rules/no-dup-attr.ts","../../src/rules/no-dup-class.ts","../../src/rules/no-dup-id.ts","../../src/rules/no-implicit-button-type.ts","../../src/rules/no-implicit-input-type.ts","../../src/rules/no-implicit-close.ts","../../src/rules/no-inline-style.ts","../../src/rules/no-missing-references.ts","../../src/rules/no-multiple-main.ts","../../src/rules/no-raw-characters.ts","../../src/rules/no-redundant-aria-label.ts","../../src/rules/no-redundant-for.ts","../../src/rules/no-redundant-role.ts","../../src/rules/no-self-closing.ts","../../src/rules/no-style-tag.ts","../../src/rules/no-trailing-whitespace.ts","../../src/rules/no-unknown-elements.ts","../../src/rules/no-unused-disable.ts","../../src/rules/no-utf8-bom.ts","../../src/rules/prefer-button.ts","../../src/rules/prefer-native-element.ts","../../src/rules/prefer-tbody.ts","../../src/rules/require-csp-nonce.ts","../../src/rules/require-sri.ts","../../src/rules/script-element.ts","../../src/rules/script-type.ts","../../src/rules/svg-focusable.ts","../../src/rules/tel-non-breaking.ts","../../src/rules/text-content.ts","../../src/rules/unique-landmark.ts","../../src/rules/unrecognized-char-ref.ts","../../src/rules/valid-autocomplete.ts","../../src/rules/valid-id.ts","../../src/rules/void-content.ts","../../src/rules/void-style.ts","../../src/rules/wcag/h30.ts","../../src/rules/wcag/h32.ts","../../src/rules/wcag/h36.ts","../../src/rules/wcag/h37.ts","../../src/rules/wcag/h63.ts","../../src/rules/wcag/h67.ts","../../src/rules/wcag/h71.ts","../../src/rules/wcag/index.ts","../../src/rules/index.ts","../../src/utils/rule-exists.ts","../../src/utils/walk.ts","../../src/dom/domtree.ts","../../src/meta/validator.ts","../../src/transform/index.ts","../../src/config/default.ts","../../src/config/presets/a11y.ts","../../src/config/presets/browser.ts","../../src/config/presets/document.ts","../../src/config/presets/prettier.ts","../../src/config/presets/recommended.ts","../../src/config/presets/standard.ts","../../src/config/presets/index.ts","../../src/config/resolved-config.ts","../../src/config/resolver/resolve-helpers.ts","../../src/config/resolver/static/static-resolver.ts","../../src/config/config.ts","../../src/config/config-loader.ts","../../src/config/define-config.ts","../../src/event/eventhandler.ts","../../src/parser/conditional-comment.ts","../../src/parser/parser-error.ts","../../src/parser/parser.ts","../../src/reporter.ts","../../src/engine/rule-blocker.ts","../../src/engine/engine.ts","../../src/config/loaders/static.ts","../../src/htmlvalidate.ts","../../src/generated/package.ts","../../src/plugin/define-plugin.ts","../../node_modules/ignore/index.js","../../src/formatters/checkstyle.ts","../../src/formatters/codeframe.ts","../../src/formatters/json.ts","../../src/formatters/stylish.ts","../../src/formatters/text.ts","../../src/formatters/index.ts","../../src/utils/compatibility-check.ts"],"sourcesContent":["'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","function stringify<T>(value: T): string {\n\tif (typeof value === \"string\") {\n\t\treturn String(value);\n\t} else {\n\t\treturn JSON.stringify(value);\n\t}\n}\n\n/**\n * Represents an `Error` created from arbitrary values.\n *\n * @public\n */\nexport class WrappedError<T> extends Error {\n\tpublic constructor(message: T) {\n\t\tsuper(stringify(message));\n\t}\n}\n","import { WrappedError } from \"./wrapped-error\";\n\n/**\n * Ensures the value is an Error.\n *\n * If the passed value is not an `Error` instance a [[WrappedError]] is\n * constructed with the stringified value.\n *\n * @internal\n */\nexport function ensureError<T>(value: T): Error {\n\tif (value instanceof Error) {\n\t\treturn value;\n\t} else {\n\t\treturn new WrappedError(value);\n\t}\n}\n","/**\n * @public\n */\nexport class NestedError extends Error {\n\tpublic constructor(message: string, nested?: Error) {\n\t\tsuper(message);\n\t\tError.captureStackTrace(this, NestedError);\n\t\tthis.name = NestedError.name;\n\n\t\tif (nested?.stack) {\n\t\t\tthis.stack ??= \"\";\n\t\t\tthis.stack += `\\nCaused by: ${nested.stack}`;\n\t\t}\n\t}\n}\n","import { NestedError } from \"./nested-error\";\n\n/**\n * @public\n */\nexport class UserError extends NestedError {\n\tpublic constructor(message: string, nested?: Error) {\n\t\tsuper(message, nested);\n\t\tError.captureStackTrace(this, UserError);\n\t\tthis.name = UserError.name;\n\t}\n\n\t/**\n\t * @public\n\t */\n\t/* istanbul ignore next: default implementation */\n\tpublic prettyFormat(): string | undefined {\n\t\treturn undefined;\n\t}\n}\n","import { UserError } from \"./user-error\";\n\n/**\n * @internal\n */\nexport class InheritError extends UserError {\n\tprivate tagName: string;\n\tprivate inherit: string;\n\tpublic filename: string | null;\n\n\tpublic constructor({ tagName, inherit }: { tagName: string; inherit: string }) {\n\t\tconst message = `Element <${tagName}> cannot inherit from <${inherit}>: no such element`;\n\t\tsuper(message);\n\t\tError.captureStackTrace(this, InheritError);\n\t\tthis.name = InheritError.name;\n\t\tthis.tagName = tagName;\n\t\tthis.inherit = inherit;\n\t\tthis.filename = null;\n\t}\n\n\tpublic prettyFormat(): string {\n\t\tconst { message, tagName, inherit } = this;\n\t\tconst source: string[] = this.filename\n\t\t\t? [\"\", \"This error occurred when loading element metadata from:\", `\"${this.filename}\"`, \"\"]\n\t\t\t: [\"\"];\n\t\treturn [\n\t\t\tmessage,\n\t\t\t...source,\n\t\t\t\"This usually occurs when the elements are defined in the wrong order, try one of the following:\",\n\t\t\t\"\",\n\t\t\t` - Ensure the spelling of \"${inherit}\" is correct.`,\n\t\t\t` - Ensure the file containing \"${inherit}\" is loaded before the file containing \"${tagName}\".`,\n\t\t\t` - Move the definition of \"${inherit}\" above the definition for \"${tagName}\".`,\n\t\t].join(\"\\n\");\n\t}\n}\n","import betterAjvErrors from \"@sidvind/better-ajv-errors\";\nimport { type ErrorObject, type SchemaObject } from \"ajv\";\nimport { UserError } from \"./user-error\";\n\nfunction getSummary(schema: any, obj: any, errors: ErrorObject[]): string {\n\tconst output = betterAjvErrors(schema, obj, errors, {\n\t\tformat: \"js\",\n\t});\n\t// istanbul ignore next: for safety only\n\treturn output.length > 0 ? output[0].error : \"unknown validation error\";\n}\n\n/**\n * @public\n */\nexport class SchemaValidationError extends UserError {\n\t/** Configuration filename the error originates from */\n\tpublic readonly filename: string | null;\n\t/** Configuration object the error originates from */\n\tpublic readonly obj: unknown;\n\t/** JSON schema used when validating the configuration */\n\tpublic readonly schema: SchemaObject;\n\t/** List of schema validation errors */\n\tpublic readonly errors: ErrorObject[];\n\n\tpublic constructor(\n\t\tfilename: string | null,\n\t\tmessage: string,\n\t\tobj: unknown,\n\t\tschema: SchemaObject,\n\t\terrors: ErrorObject[],\n\t) {\n\t\tconst summary = getSummary(schema, obj, errors);\n\t\tsuper(`${message}: ${summary}`);\n\n\t\tthis.filename = filename;\n\t\tthis.obj = obj;\n\t\tthis.schema = schema;\n\t\tthis.errors = errors;\n\t}\n}\n","/**\n * Computes hash for given string.\n *\n * @internal\n */\nfunction cyrb53(str: string): number {\n\tconst a = 2654435761;\n\tconst b = 1597334677;\n\tconst c = 2246822507;\n\tconst d = 3266489909;\n\tconst e = 4294967296;\n\tconst f = 2097151;\n\tconst seed = 0;\n\tlet h1 = 0xdeadbeef ^ seed;\n\tlet h2 = 0x41c6ce57 ^ seed;\n\tfor (let i = 0, ch; i < str.length; i++) {\n\t\tch = str.charCodeAt(i);\n\t\th1 = Math.imul(h1 ^ ch, a);\n\t\th2 = Math.imul(h2 ^ ch, b);\n\t}\n\th1 = Math.imul(h1 ^ (h1 >>> 16), c) ^ Math.imul(h2 ^ (h2 >>> 13), d);\n\th2 = Math.imul(h2 ^ (h2 >>> 16), c) ^ Math.imul(h1 ^ (h1 >>> 13), d);\n\treturn e * (f & h2) + (h1 >>> 0);\n}\n\nexport const computeHash = cyrb53;\n","import { type KeywordDefinition } from \"ajv\";\nimport { type DataValidateFunction, type DataValidationCxt } from \"ajv/dist/types\";\n\n/**\n * AJV keyword \"regexp\" to validate the type to be a regular expression.\n * Injects errors with the \"type\" keyword to give the same output.\n */\n/* istanbul ignore next: manual testing */\nconst ajvRegexpValidate: DataValidateFunction = function (\n\tdata: unknown,\n\tdataCxt?: DataValidationCxt,\n): boolean {\n\tconst valid = data instanceof RegExp;\n\tif (!valid) {\n\t\tajvRegexpValidate.errors = [\n\t\t\t{\n\t\t\t\tinstancePath: dataCxt?.instancePath,\n\t\t\t\tschemaPath: undefined,\n\t\t\t\tkeyword: \"type\",\n\t\t\t\tmessage: \"should be a regular expression\",\n\t\t\t\tparams: {\n\t\t\t\t\tkeyword: \"type\",\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\t}\n\treturn valid;\n};\n\nexport const ajvRegexpKeyword: KeywordDefinition = {\n\tkeyword: \"regexp\",\n\tschema: false,\n\terrors: true,\n\tvalidate: ajvRegexpValidate,\n};\n","import { type KeywordDefinition } from \"ajv\";\nimport { type DataValidateFunction, type DataValidationCxt } from \"ajv/dist/types\";\n\n/**\n * AJV keyword \"function\" to validate the type to be a function. Injects errors\n * with the \"type\" keyword to give the same output.\n */\nconst ajvFunctionValidate: DataValidateFunction = function (\n\tdata: unknown,\n\tdataCxt?: DataValidationCxt,\n): boolean {\n\tconst valid = typeof data === \"function\";\n\tif (!valid) {\n\t\tajvFunctionValidate.errors = [\n\t\t\t{\n\t\t\t\tinstancePath: /* istanbul ignore next */ dataCxt?.instancePath,\n\t\t\t\tschemaPath: undefined,\n\t\t\t\tkeyword: \"type\",\n\t\t\t\tmessage: \"should be a function\",\n\t\t\t\tparams: {\n\t\t\t\t\tkeyword: \"type\",\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\t}\n\treturn valid;\n};\n\nexport const ajvFunctionKeyword: KeywordDefinition = {\n\tkeyword: \"function\",\n\tschema: false,\n\terrors: true,\n\tvalidate: ajvFunctionValidate,\n};\n","import { type DynamicValue } from \"../dom\";\nimport { type HtmlElementLike } from \"./html-element-like\";\nimport { type MetaAria, type MetaImplicitRoleCallback, type NormalizedMetaAria } from \"./meta-aria\";\n\n/**\n * @public\n */\nexport interface PermittedGroup {\n\texclude?: string | string[];\n}\n\n/**\n * @public\n */\nexport type CategoryOrTag = string;\n\n/**\n * @public\n * @deprecated Use callback variant instead.\n */\nexport type PropertyExpression = string | [string, any];\n\n/**\n * @public\n */\nexport type PermittedEntry = CategoryOrTag | PermittedGroup | Array<CategoryOrTag | PermittedGroup>;\n\n/**\n * @public\n */\nexport type Permitted = PermittedEntry[];\n\n/**\n * @public\n */\nexport type PermittedOrder = string[];\n\n/**\n * @public\n */\nexport type RequiredAncestors = string[];\n\n/**\n * @public\n */\nexport type RequiredContent = string[];\n\n/**\n * @public\n */\nexport enum TextContent {\n\t/* forbid node to have text content, inter-element whitespace is ignored */\n\tNONE = \"none\",\n\n\t/* node can have text but not required too */\n\tDEFAULT = \"default\",\n\n\t/* node requires text-nodes to be present (direct or by descendant) */\n\tREQUIRED = \"required\",\n\n\t/* node requires accessible text (hidden text is ignored, tries to get text from accessibility tree) */\n\tACCESSIBLE = \"accessible\",\n}\n\n/**\n * Callback for content category properties of `MetaData`. It takes a node and\n * returns whenever the element belongs to the content group or not.\n *\n * @public\n * @since 8.13.0\n * @param node - The node to determine if it belongs in the content category.\n * @returns `true` if the node belongs to the category.\n */\nexport type MetaCategoryCallback = (node: HtmlElementLike) => boolean;\n\n/**\n * Callback for the `focusable` property of `MetaData`. It takes a node and\n * returns whenever the element is focusable or not.\n *\n * @public\n * @since 8.9.0\n * @param node - The node to determine if it is focusable.\n * @returns `true` if the node is focusable.\n */\nexport type MetaFocusableCallback = (node: HtmlElementLike) => boolean;\n\n/**\n * Callback for the `allowed` property of `MetaAttribute`. It takes a node and\n * should return `null` if there is no errors and a string with an error\n * description if there is an error.\n *\n * @public\n * @param node - The node the attribute belongs to.\n * @param attr - The current attribute value being validated.\n */\nexport type MetaAttributeAllowedCallback = (\n\tnode: HtmlElementLike,\n\tattr: string | DynamicValue | null | undefined,\n) => string | null | undefined;\n\n/**\n * @public\n */\nexport interface MetaAttribute {\n\t/**\n\t * If set it should be a function evaluating to an error message or `null` if\n\t * the attribute is allowed.\n\t */\n\tallowed?: MetaAttributeAllowedCallback;\n\n\t/**\n\t * If true this attribute can only take boolean values: `my-attr`, `my-attr=\"`\n\t * or `my-attr=\"my-attr\"`.\n\t */\n\tboolean?: boolean;\n\n\t/**\n\t * If set this attribute is considered deprecated, set to `true` or a string\n\t * with more descriptive message.\n\t */\n\tdeprecated?: boolean | string;\n\n\t/**\n\t * If set it is an exhaustive list of all possible values (as `string` or\n\t * `RegExp`) this attribute can have (each token if list is set)\n\t */\n\tenum?: Array<string | RegExp>;\n\n\t/**\n\t * If `true` this attribute contains space-separated tokens and each token must\n\t * be valid by itself.\n\t */\n\tlist?: boolean;\n\n\t/**\n\t * If `true` this attribute can omit the value.\n\t */\n\tomit?: boolean;\n\n\t/**\n\t * If set this attribute is required to be present on the element.\n\t */\n\trequired?: boolean;\n}\n\n/**\n * Internal flags used during configuration loading.\n *\n * @internal\n */\nexport interface InternalAttributeFlags {\n\t/* set to true if attribute is marked for deletion */\n\tdelete?: true;\n}\n\n/**\n * @public\n */\nexport type PermittedAttribute = Record<string, MetaAttribute | Array<string | RegExp> | null>;\n\n/**\n * @public\n */\nexport interface DeprecatedElement {\n\tmessage?: string;\n\tdocumentation?: string;\n\tsource?: string;\n}\n\n/**\n * @public\n */\nexport interface FormAssociated {\n\t/** This element can be disabled using the `disabled` attribute */\n\tdisablable: boolean;\n\n\t/** Listed elements have a name attribute and is listed in the form and fieldset elements property. */\n\tlisted: boolean;\n}\n\n/**\n * @public\n */\nexport interface MetaData {\n\t/* special keyword to extend metadata from another entry */\n\tinherit?: string;\n\n\t/* content categories */\n\tmetadata?: boolean | PropertyExpression | MetaCategoryCallback;\n\tflow?: boolean | PropertyExpression | MetaCategoryCallback;\n\tsectioning?: boolean | PropertyExpression | MetaCategoryCallback;\n\theading?: boolean | PropertyExpression | MetaCategoryCallback;\n\tphrasing?: boolean | PropertyExpression | MetaCategoryCallback;\n\tembedded?: boolean | PropertyExpression | MetaCategoryCallback;\n\tinteractive?: boolean | PropertyExpression | MetaCategoryCallback;\n\n\t/* element properties */\n\tdeprecated?: boolean | string | DeprecatedElement;\n\tforeign?: boolean;\n\tvoid?: boolean;\n\ttransparent?: boolean | string[];\n\timplicitClosed?: string[];\n\tscriptSupporting?: boolean;\n\t/** Mark element as able to receive focus (without explicit `tabindex`) */\n\tfocusable?: boolean | MetaFocusableCallback;\n\tform?: boolean;\n\t/** Mark element as a form-associated element */\n\tformAssociated?: Partial<FormAssociated>;\n\tlabelable?: boolean | PropertyExpression;\n\n\t/** @deprecated use {@link MetaAria.implicitRole} instead */\n\timplicitRole?: MetaImplicitRoleCallback;\n\n\t/** WAI-ARIA attributes */\n\taria?: MetaAria;\n\n\t/* attribute */\n\tdeprecatedAttributes?: string[];\n\trequiredAttributes?: string[];\n\tattributes?: PermittedAttribute;\n\n\t/* permitted data */\n\tpermittedContent?: Permitted;\n\tpermittedDescendants?: Permitted;\n\tpermittedOrder?: PermittedOrder;\n\tpermittedParent?: Permitted;\n\trequiredAncestors?: RequiredAncestors;\n\trequiredContent?: RequiredContent;\n\ttextContent?: TextContent | `${TextContent}`;\n}\n\n/**\n * Properties listed here can be used to reverse search elements with the given\n * property enabled. See [[MetaTable.getTagsWithProperty]].\n *\n * @public\n */\nexport type MetaLookupableProperty =\n\t| \"metadata\"\n\t| \"flow\"\n\t| \"sectioning\"\n\t| \"heading\"\n\t| \"phrasing\"\n\t| \"embedded\"\n\t| \"interactive\"\n\t| \"deprecated\"\n\t| \"foreign\"\n\t| \"void\"\n\t| \"transparent\"\n\t| \"scriptSupporting\"\n\t| \"focusable\"\n\t| \"form\"\n\t| \"formAssociated\"\n\t| \"labelable\";\n\n/**\n * Properties listed here can be copied (loaded) onto another element using\n * [[HtmlElement.loadMeta]].\n *\n * @public\n */\nexport const MetaCopyableProperty: Array<keyof MetaElement> = [\n\t\"metadata\",\n\t\"flow\",\n\t\"sectioning\",\n\t\"heading\",\n\t\"phrasing\",\n\t\"embedded\",\n\t\"interactive\",\n\t\"transparent\",\n\t\"focusable\",\n\t\"form\",\n\t\"formAssociated\",\n\t\"labelable\",\n\t\"attributes\",\n\t\"aria\",\n\t\"permittedContent\",\n\t\"permittedDescendants\",\n\t\"permittedOrder\",\n\t\"permittedParent\",\n\t\"requiredAncestors\",\n\t\"requiredContent\",\n];\n\n/**\n * @public\n */\nexport interface MetaElement extends Omit<MetaData, \"deprecatedAttributes\" | \"requiredAttributes\"> {\n\t/* filled internally for reverse lookup */\n\ttagName: string;\n\n\tfocusable: boolean | MetaFocusableCallback;\n\tformAssociated?: FormAssociated;\n\n\t/** @deprecated Use {@link MetaAria.implicitRole} instead */\n\timplicitRole: MetaImplicitRoleCallback;\n\n\t/** WAI-ARIA attributes */\n\taria: NormalizedMetaAria;\n\n\tattributes: Record<string, MetaAttribute>;\n\ttextContent?: TextContent;\n}\n\n/**\n * @public\n */\nexport type MetaDataTable = Record<string, MetaData>;\n\n/**\n * @internal\n */\nexport type ElementTable = Record<string, MetaElement>;\n\n/**\n * @internal\n */\nexport function setMetaProperty<T extends keyof MetaElement>(\n\tdst: MetaElement,\n\tkey: T,\n\tvalue: MetaElement[T],\n): void {\n\tdst[key] = value;\n}\n","import {\n\ttype FormAssociated,\n\ttype InternalAttributeFlags,\n\ttype MetaAttribute,\n\ttype MetaData,\n\ttype MetaElement,\n\ttype TextContent,\n} from \"./element\";\nimport { type HtmlElementLike } from \"./html-element-like\";\nimport { type MetaAria } from \"./meta-aria\";\n\nfunction isSet(value?: unknown): boolean {\n\treturn typeof value !== \"undefined\";\n}\n\nfunction flag(value?: boolean): true | undefined {\n\treturn value ? true : undefined;\n}\n\nfunction stripUndefined(\n\tsrc: MetaAttribute & InternalAttributeFlags,\n): MetaAttribute & InternalAttributeFlags {\n\tconst entries = Object.entries(src).filter(([, value]) => isSet(value));\n\treturn Object.fromEntries(entries);\n}\n\nfunction migrateSingleAttribute(\n\tsrc: MetaData,\n\tkey: string,\n): MetaAttribute & InternalAttributeFlags {\n\tconst result: MetaAttribute & InternalAttributeFlags = {};\n\n\tresult.deprecated = flag(src.deprecatedAttributes?.includes(key));\n\tresult.required = flag(src.requiredAttributes?.includes(key));\n\tresult.omit = undefined;\n\n\tconst attr = src.attributes ? src.attributes[key] : undefined;\n\tif (typeof attr === \"undefined\") {\n\t\treturn stripUndefined(result);\n\t}\n\n\t/* when the attribute is set to null we use a special property \"delete\" to\n\t * flag it, if it is still set during merge (inheritance, overwriting, etc) the attribute will be removed */\n\tif (attr === null) {\n\t\tresult.delete = true;\n\t\treturn stripUndefined(result);\n\t}\n\n\tif (Array.isArray(attr)) {\n\t\tif (attr.length === 0) {\n\t\t\tresult.boolean = true;\n\t\t} else {\n\t\t\tresult.enum = attr.filter((it) => it !== \"\");\n\t\t\tif (attr.includes(\"\")) {\n\t\t\t\tresult.omit = true;\n\t\t\t}\n\t\t}\n\t\treturn stripUndefined(result);\n\t} else {\n\t\treturn stripUndefined({ ...result, ...attr });\n\t}\n}\n\nfunction migrateAttributes(src: MetaData): Record<string, MetaAttribute & InternalAttributeFlags> {\n\tconst keys = [\n\t\t...Object.keys(src.attributes ?? {}),\n\t\t...(src.requiredAttributes ?? []),\n\t\t...(src.deprecatedAttributes ?? []),\n\t].sort();\n\n\tconst entries: Array<[string, MetaAttribute & InternalAttributeFlags]> = keys.map((key) => {\n\t\treturn [key, migrateSingleAttribute(src, key)];\n\t});\n\n\treturn Object.fromEntries(entries);\n}\n\nfunction normalizeAriaImplicitRole(\n\tvalue: MetaAria[\"implicitRole\"],\n): (node: HtmlElementLike) => string | null {\n\tif (!value) {\n\t\treturn () => null;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn () => value;\n\t}\n\treturn value;\n}\n\nfunction normalizeAriaNaming(\n\tvalue: MetaAria[\"naming\"],\n): (node: HtmlElementLike) => \"prohibited\" | \"allowed\" {\n\tif (!value) {\n\t\t/* default value is also stored in {@link ariaNaming} */\n\t\treturn () => \"allowed\";\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn () => value;\n\t}\n\treturn value;\n}\n\nexport function migrateElement(src: MetaData): Omit<MetaElement, \"tagName\"> {\n\tconst implicitRole = normalizeAriaImplicitRole(src.implicitRole ?? src.aria?.implicitRole);\n\tconst result = {\n\t\t...src,\n\t\t...{\n\t\t\tformAssociated: undefined as FormAssociated | undefined,\n\t\t},\n\t\tattributes: migrateAttributes(src),\n\t\ttextContent: src.textContent as TextContent | undefined,\n\t\tfocusable: src.focusable ?? false,\n\t\timplicitRole,\n\t\taria: {\n\t\t\timplicitRole,\n\t\t\tnaming: normalizeAriaNaming(src.aria?.naming),\n\t\t},\n\t};\n\n\t/* removed properties */\n\tdelete result.deprecatedAttributes;\n\tdelete result.requiredAttributes;\n\n\t/* strip out undefined */\n\tif (!result.textContent) {\n\t\tdelete result.textContent;\n\t}\n\n\tif (src.formAssociated) {\n\t\tresult.formAssociated = {\n\t\t\tdisablable: Boolean(src.formAssociated.disablable),\n\t\t\tlisted: Boolean(src.formAssociated.listed),\n\t\t};\n\t} else {\n\t\tdelete result.formAssociated;\n\t}\n\n\treturn result;\n}\n","import { type HtmlElement } from \"../../dom\";\n\n/**\n * Returns true if given element is a descendant of given tagname.\n *\n * @internal\n */\nexport function isDescendant(node: HtmlElement, tagName: string): boolean {\n\tlet cur: HtmlElement | null = node.parent;\n\twhile (cur && !cur.isRootElement()) {\n\t\tif (cur.is(tagName)) {\n\t\t\treturn true;\n\t\t}\n\t\tcur = cur.parent;\n\t}\n\treturn false;\n}\n","import { type HtmlElement } from \"../../dom\";\n\n/**\n * Returns true if given element has given attribute (no matter the value, null,\n * dynamic, etc).\n */\nexport function hasAttribute(node: HtmlElement, attr: string): boolean {\n\treturn node.hasAttribute(attr);\n}\n","import { type HtmlElement } from \"../../dom\";\n\n/**\n * Matches attribute against value.\n */\nexport function matchAttribute(\n\tnode: HtmlElement,\n\tkey: string,\n\top: \"!=\" | \"=\",\n\tvalue: string,\n): boolean {\n\tconst nodeValue = (node.getAttributeValue(key) ?? \"\").toLowerCase();\n\tswitch (op) {\n\t\tcase \"!=\":\n\t\t\treturn nodeValue !== value;\n\t\tcase \"=\":\n\t\t\treturn nodeValue === value;\n\t}\n}\n","import Ajv, { type ValidateFunction, type SchemaObject } from \"ajv\";\nimport ajvSchemaDraft from \"ajv/lib/refs/json-schema-draft-06.json\";\nimport deepmerge from \"deepmerge\";\nimport { type HtmlElement } from \"../dom\";\nimport { ensureError, SchemaValidationError, UserError, InheritError } from \"../error\";\nimport { type SchemaValidationPatch } from \"../plugin\";\nimport { computeHash } from \"../utils/compute-hash\";\nimport schema from \"../schema/elements.json\";\nimport { ajvFunctionKeyword, ajvRegexpKeyword } from \"../schema/keywords\";\nimport {\n\ttype InternalAttributeFlags,\n\ttype MetaAttribute,\n\ttype MetaDataTable,\n\ttype MetaElement,\n\ttype MetaLookupableProperty,\n\t/* eslint-disable-next-line import/no-deprecated -- while deprecated it is still supported until a later major with breaking changes */\n\ttype PropertyExpression,\n\tsetMetaProperty,\n} from \"./element\";\nimport { migrateElement } from \"./migrate\";\nimport { hasAttribute, isDescendant, matchAttribute } from \"./evaluator\";\n\nconst dynamicKeys = [\n\t\"metadata\",\n\t\"flow\",\n\t\"sectioning\",\n\t\"heading\",\n\t\"phrasing\",\n\t\"embedded\",\n\t\"interactive\",\n\t\"labelable\",\n] satisfies Array<keyof MetaElement>;\n\ntype PropertyEvaluator = (node: HtmlElement, options: string | [string, string, string]) => boolean;\n\nconst functionTable: Record<string, PropertyEvaluator | undefined> = {\n\tisDescendant: isDescendantFacade,\n\thasAttribute: hasAttributeFacade,\n\tmatchAttribute: matchAttributeFacade,\n};\n\nconst schemaCache = new Map<number, ValidateFunction<MetaDataTable>>();\n\nfunction clone<T>(src: T): T {\n\treturn JSON.parse(JSON.stringify(src)) as T;\n}\n\nfunction overwriteMerge<T>(a: T[], b: T[]): T[] {\n\treturn b;\n}\n\n/**\n * @public\n */\nexport class MetaTable {\n\tprivate readonly elements: Record<string, MetaElement | undefined>;\n\n\tprivate schema: SchemaObject;\n\n\t/**\n\t * @internal\n\t */\n\tpublic constructor() {\n\t\tthis.elements = {};\n\t\tthis.schema = clone(schema);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic init(): void {\n\t\tthis.resolveGlobal();\n\t}\n\n\t/**\n\t * Extend validation schema.\n\t *\n\t * @public\n\t */\n\tpublic extendValidationSchema(patch: SchemaValidationPatch): void {\n\t\tif (patch.properties) {\n\t\t\tthis.schema = deepmerge(this.schema, {\n\t\t\t\tpatternProperties: {\n\t\t\t\t\t\"^[^$].*$\": {\n\t\t\t\t\t\tproperties: patch.properties,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t\tif (patch.definitions) {\n\t\t\tthis.schema = deepmerge(this.schema, {\n\t\t\t\tdefinitions: patch.definitions,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Load metadata table from object.\n\t *\n\t * @public\n\t * @param obj - Object with metadata to load\n\t * @param filename - Optional filename used when presenting validation error\n\t */\n\tpublic loadFromObject(obj: unknown, filename: string | null = null): void {\n\t\ttry {\n\t\t\tconst validate = this.getSchemaValidator();\n\t\t\tif (!validate(obj)) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\tfilename,\n\t\t\t\t\t`Element metadata is not valid`,\n\t\t\t\t\tobj,\n\t\t\t\t\tthis.schema,\n\t\t\t\t\t/* istanbul ignore next: AJV sets .errors when validate returns false */\n\t\t\t\t\tvalidate.errors ?? [],\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\t\tif (key === \"$schema\") continue;\n\t\t\t\tthis.addEntry(key, migrateElement(value));\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (err instanceof InheritError) {\n\t\t\t\terr.filename = filename;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tif (err instanceof SchemaValidationError) {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tif (!filename) {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tthrow new UserError(`Failed to load element metadata from \"${filename}\"`, ensureError(err));\n\t\t}\n\t}\n\n\t/**\n\t * Get [[MetaElement]] for the given tag. If no specific metadata is present\n\t * the global metadata is returned or null if no global is present.\n\t *\n\t * @public\n\t * @returns A shallow copy of metadata.\n\t */\n\tpublic getMetaFor(tagName: string): MetaElement | null {\n\t\tconst meta = this.elements[tagName.toLowerCase()] ?? this.elements[\"*\"];\n\t\tif (meta) {\n\t\t\treturn { ...meta };\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t * Find all tags which has enabled given property.\n\t *\n\t * @public\n\t */\n\tpublic getTagsWithProperty(propName: MetaLookupableProperty): string[] {\n\t\treturn this.entries.filter(([, entry]) => entry[propName]).map(([tagName]) => tagName);\n\t}\n\n\t/**\n\t * Find tag matching tagName or inheriting from it.\n\t *\n\t * @public\n\t */\n\tpublic getTagsDerivedFrom(tagName: string): string[] {\n\t\treturn this.entries\n\t\t\t.filter(([key, entry]) => key === tagName || entry.inherit === tagName)\n\t\t\t.map(([tagName]) => tagName);\n\t}\n\n\tprivate addEntry(tagName: string, entry: Omit<MetaElement, \"tagName\">): void {\n\t\tlet parent = this.elements[tagName];\n\n\t\t/* handle inheritance */\n\t\tif (entry.inherit) {\n\t\t\tconst name = entry.inherit;\n\t\t\tparent = this.elements[name];\n\t\t\tif (!parent) {\n\t\t\t\tthrow new InheritError({\n\t\t\t\t\ttagName,\n\t\t\t\t\tinherit: name,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t/* merge all sources together */\n\t\tconst expanded = this.mergeElement(parent ?? {}, { ...entry, tagName });\n\t\texpandRegex(expanded);\n\n\t\tthis.elements[tagName] = expanded;\n\t}\n\n\t/**\n\t * Construct a new AJV schema validator.\n\t */\n\tprivate getSchemaValidator(): ValidateFunction<MetaDataTable> {\n\t\tconst hash = computeHash(JSON.stringify(this.schema));\n\t\tconst cached = schemaCache.get(hash);\n\t\tif (cached) {\n\t\t\treturn cached;\n\t\t} else {\n\t\t\tconst ajv = new Ajv({ strict: true, strictTuples: true, strictTypes: true });\n\t\t\tajv.addMetaSchema(ajvSchemaDraft);\n\t\t\tajv.addKeyword(ajvFunctionKeyword);\n\t\t\tajv.addKeyword(ajvRegexpKeyword);\n\t\t\tajv.addKeyword({ keyword: \"copyable\" });\n\t\t\tconst validate = ajv.compile<MetaDataTable>(this.schema);\n\t\t\tschemaCache.set(hash, validate);\n\t\t\treturn validate;\n\t\t}\n\t}\n\n\t/**\n\t * @public\n\t */\n\tpublic getJSONSchema(): SchemaObject {\n\t\treturn this.schema;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate get entries(): Array<[string, MetaElement]> {\n\t\treturn Object.entries(this.elements) as Array<[string, MetaElement]>;\n\t}\n\n\t/**\n\t * Finds the global element definition and merges each known element with the\n\t * global, e.g. to assign global attributes.\n\t */\n\tprivate resolveGlobal(): void {\n\t\t/* skip if there is no global elements */\n\t\tif (!this.elements[\"*\"]) return;\n\n\t\t/* fetch and remove the global element, it should not be resolvable by\n\t\t * itself */\n\t\tconst global: Partial<MetaElement> = this.elements[\"*\"];\n\t\tdelete this.elements[\"*\"];\n\n\t\t/* hack: unset default properties which global should not override */\n\t\tdelete global.tagName;\n\t\tdelete global.void;\n\n\t\t/* merge elements */\n\t\tfor (const [tagName, entry] of this.entries) {\n\t\t\tthis.elements[tagName] = this.mergeElement(global, entry);\n\t\t}\n\t}\n\n\tprivate mergeElement(a: Partial<MetaElement>, b: MetaElement): MetaElement {\n\t\tconst merged = deepmerge(a, b, { arrayMerge: overwriteMerge });\n\n\t\t/* special handling when removing attributes by setting them to null\n\t\t * resulting in the deletion flag being set */\n\t\tconst filteredAttrs = Object.entries(\n\t\t\tmerged.attributes as Record<string, MetaAttribute & InternalAttributeFlags>,\n\t\t).filter(([, attr]) => {\n\t\t\tconst val = !attr.delete;\n\t\t\tdelete attr.delete;\n\t\t\treturn val;\n\t\t});\n\t\tmerged.attributes = Object.fromEntries(filteredAttrs);\n\n\t\treturn merged;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic resolve(node: HtmlElement): void {\n\t\tif (node.meta) {\n\t\t\texpandProperties(node, node.meta);\n\t\t}\n\t}\n}\n\nfunction expandProperties(node: HtmlElement, entry: MetaElement): void {\n\tfor (const key of dynamicKeys) {\n\t\tconst property = entry[key];\n\t\tif (!property) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof property === \"function\") {\n\t\t\tsetMetaProperty(entry, key, property(node._adapter));\n\t\t} else if (typeof property !== \"boolean\") {\n\t\t\tsetMetaProperty(entry, key, evaluateProperty(node, property));\n\t\t}\n\t}\n\tif (typeof entry.focusable === \"function\") {\n\t\tsetMetaProperty(entry, \"focusable\", entry.focusable(node._adapter));\n\t}\n}\n\n/**\n * Given a string it returns either the string as-is or if the string is wrapped\n * in /../ it creates and returns a regex instead.\n */\nfunction expandRegexValue(value: string | RegExp): string | RegExp {\n\tif (value instanceof RegExp) {\n\t\treturn value;\n\t}\n\t/* match anything starting and ending with `/`, optionally with `/i` at the end. */\n\tconst match = value.match(/^\\/(.*(?=\\/))\\/(i?)$/);\n\tif (match) {\n\t\tconst [, expr, flags] = match;\n\t\t/* eslint-disable security/detect-non-literal-regexp -- expected to be regexp */\n\t\tif (expr.startsWith(\"^\") || expr.endsWith(\"$\")) {\n\t\t\treturn new RegExp(expr, flags);\n\t\t} else {\n\t\t\treturn new RegExp(`^${expr}$`, flags);\n\t\t}\n\t\t/* eslint-enable security/detect-non-literal-regexp */\n\t} else {\n\t\treturn value;\n\t}\n}\n\n/**\n * Expand all regular expressions in strings (\"/../\"). This mutates the object.\n */\nfunction expandRegex(entry: MetaElement): void {\n\tfor (const [name, values] of Object.entries(entry.attributes)) {\n\t\tif (values.enum) {\n\t\t\tentry.attributes[name].enum = values.enum.map(expandRegexValue);\n\t\t}\n\t}\n}\n\n/* eslint-disable-next-line import/no-deprecated -- while deprecated it is still supported until a later major with breaking changes */\nfunction evaluateProperty(node: HtmlElement, expr: PropertyExpression): boolean {\n\tconst [func, options] = parseExpression(expr);\n\treturn func(node, options);\n}\n\nfunction parseExpression(\n\t/* eslint-disable-next-line import/no-deprecated -- while deprecated it is still supported until a later major with breaking changes */\n\texpr: PropertyExpression,\n): [PropertyEvaluator, string | [string, string, string]] {\n\tif (typeof expr === \"string\") {\n\t\treturn parseExpression([expr, {}]);\n\t} else {\n\t\t/* eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- old style expressions should be replaced with typesafe functions */\n\t\tconst [funcName, options] = expr;\n\t\tconst func = functionTable[funcName];\n\t\tif (!func) {\n\t\t\tthrow new Error(`Failed to find function \"${funcName}\" when evaluating property expression`);\n\t\t}\n\t\treturn [func, options as string | [string, string, string]];\n\t}\n}\n\nfunction isDescendantFacade(node: HtmlElement, tagName: any): boolean {\n\tif (typeof tagName !== \"string\") {\n\t\tthrow new Error(\n\t\t\t`Property expression \"isDescendant\" must take string argument when evaluating metadata for <${node.tagName}>`,\n\t\t);\n\t}\n\treturn isDescendant(node, tagName);\n}\n\nfunction hasAttributeFacade(node: HtmlElement, attr: any): boolean {\n\tif (typeof attr !== \"string\") {\n\t\tthrow new Error(\n\t\t\t`Property expression \"hasAttribute\" must take string argument when evaluating metadata for <${node.tagName}>`,\n\t\t);\n\t}\n\treturn hasAttribute(node, attr);\n}\n\nfunction matchAttributeFacade(node: HtmlElement, match: string | string[]): boolean {\n\tif (!Array.isArray(match) || match.length !== 3) {\n\t\tthrow new Error(\n\t\t\t`Property expression \"matchAttribute\" must take [key, op, value] array as argument when evaluating metadata for <${node.tagName}>`,\n\t\t);\n\t}\n\tconst [key, op, value] = match.map((x) => x.toLowerCase());\n\tswitch (op) {\n\t\tcase \"!=\":\n\t\tcase \"=\":\n\t\t\treturn matchAttribute(node, key, op, value);\n\t\tdefault:\n\t\t\tthrow new Error(\n\t\t\t\t`Property expression \"matchAttribute\" has invalid operator \"${op}\" when evaluating metadata for <${node.tagName}>`,\n\t\t\t);\n\t}\n}\n","/**\n * @public\n */\nexport class DynamicValue {\n\tpublic readonly expr: string;\n\n\tpublic constructor(expr: string) {\n\t\tthis.expr = expr;\n\t}\n\n\tpublic toString(): string {\n\t\treturn this.expr;\n\t}\n}\n","import { type Location } from \"../context\";\nimport { DynamicValue } from \"./dynamic-value\";\n\ninterface StaticAttribute {\n\treadonly value: string | null;\n}\n\ninterface DynamicAttribute {\n\treadonly value: DynamicValue;\n}\n\n/**\n * Type guard for [[Attribute]] testing if the value is static (missing value is\n * considered static as it is a fixed known value).\n *\n * @public\n */\nexport function isStaticAttribute(attr: Attribute | null): attr is Attribute & StaticAttribute {\n\treturn Boolean(attr?.isStatic);\n}\n\n/**\n * Type guard for [[Attribute]] testing if the value is dynamic.\n *\n * @public\n */\nexport function isDynamicAttribute(attr: Attribute | null): attr is Attribute & DynamicAttribute {\n\treturn Boolean(attr?.isDynamic);\n}\n\n/**\n * DOM Attribute.\n *\n * Represents a HTML attribute. Can contain either a fixed static value or a\n * placeholder for dynamic values (e.g. interpolated).\n *\n * @public\n */\nexport class Attribute {\n\t/** Attribute name */\n\tpublic readonly key: string;\n\tpublic readonly value: string | DynamicValue | null;\n\tpublic readonly keyLocation: Location;\n\tpublic readonly valueLocation: Location | null;\n\tpublic readonly originalAttribute?: string;\n\n\t/**\n\t * @param key - Attribute name.\n\t * @param value - Attribute value. Set to `null` for boolean attributes.\n\t * @param keyLocation - Source location of attribute name.\n\t * @param valueLocation - Source location of attribute value.\n\t * @param originalAttribute - If this attribute was dynamically added via a\n\t * transformation (e.g. vuejs `:id` generating the `id` attribute) this\n\t * parameter should be set to the attribute name of the source attribute (`:id`).\n\t */\n\tpublic constructor(\n\t\tkey: string,\n\t\tvalue: string | DynamicValue | null,\n\t\tkeyLocation: Location,\n\t\tvalueLocation: Location | null,\n\t\toriginalAttribute?: string,\n\t) {\n\t\tthis.key = key;\n\t\tthis.value = value;\n\t\tthis.keyLocation = keyLocation;\n\t\tthis.valueLocation = valueLocation;\n\t\tthis.originalAttribute = originalAttribute;\n\n\t\t/* force undefined to null */\n\t\tif (typeof this.value === \"undefined\") {\n\t\t\tthis.value = null;\n\t\t}\n\t}\n\n\t/**\n\t * Flag set to true if the attribute value is static.\n\t */\n\tpublic get isStatic(): boolean {\n\t\treturn !this.isDynamic;\n\t}\n\n\t/**\n\t * Flag set to true if the attribute value is dynamic.\n\t */\n\tpublic get isDynamic(): boolean {\n\t\treturn this.value instanceof DynamicValue;\n\t}\n\n\t/**\n\t * Test attribute value.\n\t *\n\t * @param pattern - Pattern to match value against. Can be a RegExp, literal\n\t * string or an array of strings (returns true if any value matches the\n\t * array).\n\t * @param dynamicMatches - If true `DynamicValue` will always match, if false\n\t * it never matches.\n\t * @returns `true` if attribute value matches pattern.\n\t */\n\tpublic valueMatches(\n\t\tpattern: RegExp | string | string[],\n\t\tdynamicMatches: boolean = true,\n\t): boolean {\n\t\tif (this.value === null) {\n\t\t\treturn false;\n\t\t}\n\n\t\t/* dynamic values matches everything */\n\t\tif (this.value instanceof DynamicValue) {\n\t\t\treturn dynamicMatches;\n\t\t}\n\n\t\t/* test against an array of keywords */\n\t\tif (Array.isArray(pattern)) {\n\t\t\treturn pattern.includes(this.value);\n\t\t}\n\n\t\t/* test value against pattern */\n\t\tif (pattern instanceof RegExp) {\n\t\t\treturn this.value.match(pattern) !== null;\n\t\t} else {\n\t\t\treturn this.value === pattern;\n\t\t}\n\t}\n}\n","import { DynamicValue } from \"../dynamic-value\";\nimport { type CSSStyleDeclaration } from \"./css-style-declaration\";\n\ntype PropertyValuePair = [property: string, value: string];\n\nfunction getCSSDeclarations(value: string): PropertyValuePair[] {\n\treturn value\n\t\t.trim()\n\t\t.split(\";\")\n\t\t.filter(Boolean)\n\t\t.map((it): PropertyValuePair => {\n\t\t\tconst [property, value] = it.split(\":\", 2);\n\t\t\treturn [property.trim(), value ? value.trim() : \"\"];\n\t\t});\n}\n\n/**\n * @internal\n */\nexport function parseCssDeclaration(value?: string | DynamicValue | null): CSSStyleDeclaration {\n\tif (!value || value instanceof DynamicValue) {\n\t\treturn {};\n\t}\n\tconst pairs = getCSSDeclarations(value);\n\treturn Object.fromEntries(pairs);\n}\n","/**\n * @public\n */\nexport interface Location {\n\t/**\n\t * The filemane this location refers to.\n\t */\n\treadonly filename: string;\n\n\t/**\n\t * The string offset (number of characters into the string) this location\n\t * refers to.\n\t */\n\treadonly offset: number;\n\n\t/**\n\t * The line number in the file.\n\t */\n\treadonly line: number;\n\n\t/**\n\t * The column number in the file. Tabs counts as 1 (not expanded).\n\t */\n\treadonly column: number;\n\n\t/**\n\t * The number of characters this location refers to. This includes any\n\t * whitespace characters such as newlines.\n\t */\n\treadonly size: number;\n}\n\ninterface LocationRW {\n\tfilename: string;\n\toffset: number;\n\tline: number;\n\tcolumn: number;\n\tsize: number;\n}\n\nfunction sliceSize(size: number, begin: number, end?: number): number {\n\tif (typeof size !== \"number\") {\n\t\treturn size;\n\t}\n\tif (typeof end !== \"number\") {\n\t\treturn size - begin;\n\t}\n\tif (end < 0) {\n\t\tend = size + end;\n\t}\n\treturn Math.min(size, end - begin);\n}\n\n/**\n * Calculate a new location by offsetting this location.\n *\n * If the references text with newlines the wrap parameter must be set to\n * properly calculate line and column information. If not given the text is\n * assumed to contain no newlines.\n *\n * @public\n * @param location - Source location\n * @param begin - Start location. Default is 0.\n * @param end - End location. Default is size of location. Negative values are\n * counted from end, e.g. `-2` means `size - 2`.\n * @param wrap - If given, line/column is wrapped for each newline occuring\n * before location end.\n */\nexport function sliceLocation(\n\tlocation: Location,\n\tbegin: number,\n\tend?: number,\n\twrap?: string,\n): Location;\n\n/**\n * @public\n */\nexport function sliceLocation(\n\tlocation: Location | null | undefined,\n\tbegin: number,\n\tend?: number,\n\twrap?: string,\n): Location | null;\n\nexport function sliceLocation(\n\tlocation: Location | null | undefined,\n\tbegin: number,\n\tend?: number,\n\twrap?: string,\n): Location | null {\n\tif (!location) return null;\n\tconst size = sliceSize(location.size, begin, end);\n\tconst sliced: LocationRW = {\n\t\tfilename: location.filename,\n\t\toffset: location.offset + begin,\n\t\tline: location.line,\n\t\tcolumn: location.column + begin,\n\t\tsize,\n\t};\n\n\t/* if text content is provided try to find all newlines and modify line/column accordingly */\n\tif (wrap) {\n\t\tlet index = -1;\n\t\tconst col = sliced.column;\n\t\tdo {\n\t\t\tindex = wrap.indexOf(\"\\n\", index + 1);\n\t\t\tif (index >= 0 && index < begin) {\n\t\t\t\tsliced.column = col - (index + 1);\n\t\t\t\tsliced.line++;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} while (true); // eslint-disable-line no-constant-condition, @typescript-eslint/no-unnecessary-condition -- it will break out\n\t}\n\n\treturn sliced;\n}\n","export enum State {\n\tINITIAL = 1,\n\tDOCTYPE,\n\tTEXT,\n\tTAG,\n\tATTR,\n\tCDATA,\n\tSCRIPT,\n\tSTYLE,\n}\n","import { type Location } from \"./location\";\nimport { type Source } from \"./source\";\nimport { State } from \"./state\";\n\nexport enum ContentModel {\n\tTEXT = 1,\n\tSCRIPT,\n\tSTYLE,\n}\n\n/**\n * @internal\n */\nexport class Context {\n\tpublic contentModel: ContentModel;\n\tpublic state: State;\n\tpublic string: string;\n\tprivate filename: string;\n\tprivate offset: number;\n\tprivate line: number;\n\tprivate column: number;\n\n\tpublic constructor(source: Source) {\n\t\tthis.state = State.INITIAL;\n\t\tthis.string = source.data;\n\t\tthis.filename = source.filename;\n\t\tthis.offset = source.offset;\n\t\tthis.line = source.line;\n\t\tthis.column = source.column;\n\t\tthis.contentModel = ContentModel.TEXT;\n\t}\n\n\tpublic getTruncatedLine(n: number = 13): string {\n\t\treturn JSON.stringify(this.string.length > n ? `${this.string.slice(0, 10)}...` : this.string);\n\t}\n\n\tpublic consume(n: number | string[], state: State): void {\n\t\t/* if \"n\" is an regex match the first value is the full matched\n\t\t * string so consume that many characters. */\n\t\tif (typeof n !== \"number\") {\n\t\t\tn = n[0].length; /* regex match */\n\t\t}\n\n\t\t/* poor mans line counter :( */\n\t\tlet consumed = this.string.slice(0, n);\n\t\tlet offset;\n\t\twhile ((offset = consumed.indexOf(\"\\n\")) >= 0) {\n\t\t\tthis.line++;\n\t\t\tthis.column = 1;\n\t\t\tconsumed = consumed.substr(offset + 1);\n\t\t}\n\t\tthis.column += consumed.length;\n\t\tthis.offset += n;\n\n\t\t/* remove N chars */\n\t\tthis.string = this.string.substr(n);\n\n\t\t/* change state */\n\t\tthis.state = state;\n\t}\n\n\tpublic getLocation(size: number): Location {\n\t\treturn {\n\t\t\tfilename: this.filename,\n\t\t\toffset: this.offset,\n\t\t\tline: this.line,\n\t\t\tcolumn: this.column,\n\t\t\tsize,\n\t\t};\n\t}\n}\n\nexport default Context;\n","import { type Source } from \"./source\";\n\n/**\n * Ensures all fields are set to something sane. This wont normally be needed\n * but with non-typescript usage (or if one is lying to typescript `as Source`)\n * some fields might be missing after all.\n *\n * This function is only to be called at API boundaries and not internally\n * inside the codebase.\n *\n * @internal\n */\nexport function normalizeSource(source: Partial<Source> & Pick<Source, \"data\">): Source {\n\treturn {\n\t\tfilename: \"\",\n\t\toffset: 0,\n\t\tline: 1,\n\t\tcolumn: 1,\n\t\t...source,\n\t};\n}\n","/**\n * @public\n */\nexport enum NodeType {\n\tELEMENT_NODE = 1,\n\tTEXT_NODE = 3,\n\tDOCUMENT_NODE = 9,\n}\n","import { type Location } from \"../context\";\nimport { type RuleBlocker } from \"../engine\";\nimport { NodeType } from \"./nodetype\";\nimport { type DOMNodeCache } from \"./cache\";\n\n/**\n * @public\n */\nexport type DOMInternalID = number;\n\nconst DOCUMENT_NODE_NAME = \"#document\";\nconst TEXT_CONTENT = Symbol(\"textContent\");\n\ndeclare module \"./cache\" {\n\texport interface DOMNodeCache {\n\t\t[TEXT_CONTENT]: string;\n\t}\n}\n\nlet counter = 0;\n\n/* istanbul ignore next: only for testing */\nexport function reset(): void {\n\tcounter = 0;\n}\n\n/**\n * @public\n */\nexport class DOMNode {\n\tpublic readonly nodeName: string;\n\tpublic readonly nodeType: NodeType;\n\tpublic readonly childNodes: DOMNode[];\n\n\tpublic readonly location: Location;\n\n\t/**\n\t * @internal\n\t */\n\tpublic readonly unique: DOMInternalID;\n\n\tprivate cache: null | Map<string | number | symbol, any>;\n\n\t/**\n\t * Set of disabled rules for this node.\n\t *\n\t * Rules disabled by using directives are added here.\n\t */\n\tprivate disabledRules: Set<string>;\n\n\t/**\n\t * Set of blocked rules for this node.\n\t *\n\t * Rules blocked by using directives are added here.\n\t */\n\tprivate blockedRules: Map<string, RuleBlocker[]>;\n\n\t/**\n\t * Create a new DOMNode.\n\t *\n\t * @internal\n\t * @param nodeType - What node type to create.\n\t * @param nodeName - What node name to use. For `HtmlElement` this corresponds\n\t * to the tagName but other node types have specific predefined values.\n\t * @param location - Source code location of this node.\n\t */\n\tpublic constructor(nodeType: NodeType, nodeName: string | undefined, location: Location) {\n\t\tthis.nodeType = nodeType;\n\t\tthis.nodeName = nodeName ?? DOCUMENT_NODE_NAME;\n\t\tthis.location = location;\n\t\tthis.disabledRules = new Set();\n\t\tthis.blockedRules = new Map();\n\t\tthis.childNodes = [];\n\t\tthis.unique = counter++;\n\t\tthis.cache = null;\n\t}\n\n\t/**\n\t * Enable cache for this node.\n\t *\n\t * Should not be called before the node and all children are fully constructed.\n\t *\n\t * @internal\n\t */\n\tpublic cacheEnable(): void {\n\t\tthis.cache = new Map();\n\t}\n\n\t/**\n\t * Fetch cached value from this DOM node.\n\t *\n\t * Cache is not enabled until `cacheEnable()` is called by [[Parser]] (when\n\t * the element is fully constructed).\n\t *\n\t * @returns value or `undefined` if the value doesn't exist.\n\t */\n\tpublic cacheGet<K extends keyof DOMNodeCache>(key: K): DOMNodeCache[K] | undefined;\n\tpublic cacheGet(key: string | number | symbol): any | undefined;\n\tpublic cacheGet(key: string | number | symbol): any | undefined {\n\t\tif (this.cache) {\n\t\t\treturn this.cache.get(key);\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Store a value in cache.\n\t *\n\t * @returns the value itself is returned.\n\t */\n\tpublic cacheSet<K extends keyof DOMNodeCache>(key: K, value: DOMNodeCache[K]): DOMNodeCache[K];\n\tpublic cacheSet<T>(key: string | number | symbol, value: T): T;\n\tpublic cacheSet<T>(key: string | number | symbol, value: T): T {\n\t\tif (this.cache) {\n\t\t\tthis.cache.set(key, value);\n\t\t}\n\t\treturn value;\n\t}\n\n\t/**\n\t * Remove a value by key from cache.\n\t *\n\t * @returns `true` if the entry existed and has been removed.\n\t */\n\tpublic cacheRemove<K extends keyof DOMNodeCache>(key: K): boolean;\n\tpublic cacheRemove(key: string | number | symbol): boolean;\n\tpublic cacheRemove(key: string | number | symbol): boolean {\n\t\tif (this.cache) {\n\t\t\treturn this.cache.delete(key);\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t/**\n\t * Check if key exists in cache.\n\t */\n\tpublic cacheExists<K extends keyof DOMNodeCache>(key: K): boolean;\n\tpublic cacheExists(key: string | number | symbol): boolean;\n\tpublic cacheExists(key: string | number | symbol): boolean {\n\t\treturn Boolean(this.cache?.has(key));\n\t}\n\n\t/**\n\t * Get the text (recursive) from all child nodes.\n\t */\n\tpublic get textContent(): string {\n\t\tconst cached = this.cacheGet(TEXT_CONTENT);\n\t\tif (cached) {\n\t\t\treturn cached;\n\t\t}\n\n\t\tconst text = this.childNodes.map((node) => node.textContent).join(\"\");\n\t\tthis.cacheSet(TEXT_CONTENT, text);\n\t\treturn text;\n\t}\n\n\tpublic append(node: DOMNode): void {\n\t\tthis.childNodes.push(node);\n\t}\n\n\tpublic isRootElement(): boolean {\n\t\treturn this.nodeType === NodeType.DOCUMENT_NODE;\n\t}\n\n\t/**\n\t * Tests if two nodes are the same (references the same object).\n\t *\n\t * @since v4.11.0\n\t */\n\tpublic isSameNode(otherNode: DOMNode): boolean {\n\t\treturn this.unique === otherNode.unique;\n\t}\n\n\t/**\n\t * Returns a DOMNode representing the first direct child node or `null` if the\n\t * node has no children.\n\t */\n\tpublic get firstChild(): DOMNode {\n\t\treturn this.childNodes[0] || null;\n\t}\n\n\t/**\n\t * Returns a DOMNode representing the last direct child node or `null` if the\n\t * node has no children.\n\t */\n\tpublic get lastChild(): DOMNode {\n\t\treturn this.childNodes[this.childNodes.length - 1] || null;\n\t}\n\n\t/**\n\t * Block a rule for this node.\n\t *\n\t * @internal\n\t */\n\tpublic blockRule(ruleId: string, blocker: RuleBlocker): void {\n\t\tconst current = this.blockedRules.get(ruleId);\n\t\tif (current) {\n\t\t\tcurrent.push(blocker);\n\t\t} else {\n\t\t\tthis.blockedRules.set(ruleId, [blocker]);\n\t\t}\n\t}\n\n\t/**\n\t * Blocks multiple rules.\n\t *\n\t * @internal\n\t */\n\tpublic blockRules(rules: string[] | Set<string>, blocker: RuleBlocker): void {\n\t\tfor (const rule of rules) {\n\t\t\tthis.blockRule(rule, blocker);\n\t\t}\n\t}\n\n\t/**\n\t * Disable a rule for this node.\n\t *\n\t * @internal\n\t */\n\tpublic disableRule(ruleId: string): void {\n\t\tthis.disabledRules.add(ruleId);\n\t}\n\n\t/**\n\t * Disables multiple rules.\n\t *\n\t * @internal\n\t */\n\tpublic disableRules(rules: string[] | Set<string>): void {\n\t\tfor (const rule of rules) {\n\t\t\tthis.disableRule(rule);\n\t\t}\n\t}\n\n\t/**\n\t * Enable a previously disabled rule for this node.\n\t */\n\tpublic enableRule(ruleId: string): void {\n\t\tthis.disabledRules.delete(ruleId);\n\t}\n\n\t/**\n\t * Enables multiple rules.\n\t */\n\tpublic enableRules(rules: string[]): void {\n\t\tfor (const rule of rules) {\n\t\t\tthis.enableRule(rule);\n\t\t}\n\t}\n\n\t/**\n\t * Test if a rule is enabled for this node.\n\t *\n\t * @internal\n\t */\n\tpublic ruleEnabled(ruleId: string): boolean {\n\t\treturn !this.disabledRules.has(ruleId);\n\t}\n\n\t/**\n\t * Test if a rule is blocked for this node.\n\t *\n\t * @internal\n\t */\n\tpublic ruleBlockers(ruleId: string): RuleBlocker[] {\n\t\treturn this.blockedRules.get(ruleId) ?? [];\n\t}\n\n\tpublic generateSelector(): string | null {\n\t\treturn null;\n\t}\n}\n","import { type Location, sliceLocation } from \"../context\";\nimport { DynamicValue } from \"./dynamic-value\";\n\ninterface Result {\n\ttokens: string[];\n\tlocations: Location[] | null;\n}\n\nfunction parse(text: string, baseLocation: Location | null): Result {\n\tconst tokens: string[] = [];\n\tconst locations: Location[] | null = baseLocation ? [] : null;\n\tfor (let begin = 0; begin < text.length; ) {\n\t\tlet end = text.indexOf(\" \", begin);\n\n\t\t/* if the last space was found move the position to the last character\n\t\t * in the string */\n\t\tif (end === -1) {\n\t\t\tend = text.length;\n\t\t}\n\n\t\t/* handle multiple spaces */\n\t\tconst size = end - begin;\n\t\tif (size === 0) {\n\t\t\tbegin++;\n\t\t\tcontinue;\n\t\t}\n\n\t\t/* extract token */\n\t\tconst token = text.substring(begin, end);\n\t\ttokens.push(token);\n\n\t\t/* extract location */\n\t\tif (locations && baseLocation) {\n\t\t\tconst location = sliceLocation(baseLocation, begin, end);\n\t\t\tlocations.push(location);\n\t\t}\n\n\t\t/* advance position to the character after the current end position */\n\t\tbegin += size + 1;\n\t}\n\treturn { tokens, locations };\n}\n\n/**\n * @public\n */\nexport class DOMTokenList extends Array<string> {\n\tpublic readonly value: string;\n\tprivate readonly locations: Location[] | null;\n\n\tpublic constructor(value: string | DynamicValue | null, location: Location | null) {\n\t\tif (value && typeof value === \"string\") {\n\t\t\t/* replace all whitespace with a single space for easier parsing */\n\t\t\tconst normalized = value.replace(/[\\t\\r\\n]/g, \" \");\n\t\t\tconst { tokens, locations } = parse(normalized, location);\n\t\t\tsuper(...tokens);\n\t\t\tthis.locations = locations;\n\t\t} else {\n\t\t\tsuper(0);\n\t\t\tthis.locations = null;\n\t\t}\n\n\t\tif (value instanceof DynamicValue) {\n\t\t\tthis.value = value.expr;\n\t\t} else {\n\t\t\tthis.value = value ?? \"\";\n\t\t}\n\t}\n\n\tpublic item(n: number): string | undefined {\n\t\treturn this[n];\n\t}\n\n\tpublic location(n: number): Location | undefined {\n\t\tif (this.locations) {\n\t\t\treturn this.locations[n];\n\t\t} else {\n\t\t\tthrow new Error(\"Trying to access DOMTokenList location when base location isn't set\");\n\t\t}\n\t}\n\n\tpublic contains(token: string): boolean {\n\t\treturn this.includes(token);\n\t}\n\n\tpublic *iterator(): Generator<{ index: number; item: string; location: Location }> {\n\t\tfor (let index = 0; index < this.length; index++) {\n\t\t\t/* eslint-disable @typescript-eslint/no-non-null-assertion -- as we loop over length this should always be set */\n\t\t\tconst item = this.item(index)!;\n\t\t\tconst location = this.location(index)!;\n\t\t\t/* eslint-enable @typescript-eslint/no-non-null-assertion */\n\t\t\tyield { index, item, location };\n\t\t}\n\t}\n}\n","export enum Combinator {\n\tDESCENDANT = 1,\n\tCHILD,\n\tADJACENT_SIBLING,\n\tGENERAL_SIBLING,\n\n\t/* special cases */\n\tSCOPE,\n}\n\nexport function parseCombinator(\n\tcombinator: string | undefined | null,\n\tpattern: string,\n): Combinator {\n\t/* special case, when pattern is :scope [[Selector]] will handle this\n\t * \"combinator\" to match itself instead of descendants */\n\tif (pattern === \":scope\") {\n\t\treturn Combinator.SCOPE;\n\t}\n\n\tswitch (combinator) {\n\t\tcase undefined:\n\t\tcase null:\n\t\tcase \"\":\n\t\t\treturn Combinator.DESCENDANT;\n\t\tcase \">\":\n\t\t\treturn Combinator.CHILD;\n\t\tcase \"+\":\n\t\t\treturn Combinator.ADJACENT_SIBLING;\n\t\tcase \"~\":\n\t\t\treturn Combinator.GENERAL_SIBLING;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown combinator \"${combinator}\"`);\n\t}\n}\n","import { type HtmlElement } from \"../htmlelement\";\n\nexport function firstChild(node: HtmlElement): boolean {\n\treturn node.previousSibling === null;\n}\n","import { type HtmlElement } from \"../htmlelement\";\n\nexport function lastChild(node: HtmlElement): boolean {\n\treturn node.nextSibling === null;\n}\n","import { type HtmlElement } from \"../htmlelement\";\nimport { type DOMInternalID } from \"../domnode\";\n\nconst cache: Record<DOMInternalID, number> = {};\n\nfunction getNthChild(node: HtmlElement): number {\n\tif (!node.parent) {\n\t\treturn -1;\n\t}\n\n\tif (!cache[node.unique]) {\n\t\tconst parent = node.parent;\n\t\tconst index = parent.childElements.findIndex((cur) => {\n\t\t\treturn cur.unique === node.unique;\n\t\t});\n\t\tcache[node.unique] = index + 1; /* nthChild starts at 1 */\n\t}\n\n\treturn cache[node.unique];\n}\n\nexport function nthChild(node: HtmlElement, args?: string): boolean {\n\tif (!args) {\n\t\tthrow new Error(\"Missing argument to nth-child\");\n\t}\n\tconst n = parseInt(args.trim(), 10);\n\tconst cur = getNthChild(node);\n\treturn cur === n;\n}\n","import { type HtmlElement } from \"../htmlelement\";\nimport { type SelectorContext } from \"../selector-context\";\n\nexport function scope(this: SelectorContext, node: HtmlElement): boolean {\n\treturn node.isSameNode(this.scope);\n}\n","import { type HtmlElement } from \"../htmlelement\";\nimport { type SelectorContext } from \"../selector-context\";\nimport { firstChild } from \"./first-child\";\nimport { lastChild } from \"./last-child\";\nimport { nthChild } from \"./nth-child\";\nimport { scope } from \"./scope\";\n\ntype PseudoClassFunction = (this: SelectorContext, node: HtmlElement, args?: string) => boolean;\ntype PseudoClassTable = Record<string, PseudoClassFunction | undefined>;\n\nconst table: PseudoClassTable = {\n\t\"first-child\": firstChild,\n\t\"last-child\": lastChild,\n\t\"nth-child\": nthChild,\n\tscope,\n};\n\nexport function factory(\n\tname: string,\n\tcontext: SelectorContext,\n): OmitThisParameter<PseudoClassFunction> {\n\tconst fn = table[name];\n\tif (fn) {\n\t\treturn fn.bind(context);\n\t} else {\n\t\tthrow new Error(`Pseudo-class \"${name}\" is not implemented`);\n\t}\n}\n","const enum State {\n\tINITIAL,\n\tESCAPED,\n\tWHITESPACE,\n}\n\nconst escapedCodepoints = [\"\\u0039\", \"\\u0061\", \"\\u0064\"];\n\n/**\n * @internal\n */\nexport function* splitSelectorElements(selector: string): Generator<string, void> {\n\tlet begin = 0;\n\tlet end = 0;\n\n\tfunction initialState(ch: string, p: number): State {\n\t\tif (ch === \"\\\\\") {\n\t\t\treturn State.ESCAPED;\n\t\t}\n\t\tif (ch === \" \") {\n\t\t\tend = p;\n\t\t\treturn State.WHITESPACE;\n\t\t}\n\t\treturn State.INITIAL;\n\t}\n\n\tfunction escapedState(ch: string): State {\n\t\tif (escapedCodepoints.includes(ch)) {\n\t\t\treturn State.ESCAPED;\n\t\t}\n\t\treturn State.INITIAL;\n\t}\n\n\tfunction* whitespaceState(ch: string, p: number): Generator<string, State> {\n\t\tif (ch === \" \") {\n\t\t\treturn State.WHITESPACE;\n\t\t}\n\t\tyield selector.slice(begin, end);\n\t\tbegin = p;\n\t\tend = p;\n\t\treturn State.INITIAL;\n\t}\n\n\tlet state = State.INITIAL;\n\tfor (let p = 0; p < selector.length; p++) {\n\t\tconst ch = selector[p];\n\t\tswitch (state) {\n\t\t\tcase State.INITIAL:\n\t\t\t\tstate = initialState(ch, p);\n\t\t\t\tbreak;\n\n\t\t\tcase State.ESCAPED:\n\t\t\t\tstate = escapedState(ch);\n\t\t\t\tbreak;\n\n\t\t\tcase State.WHITESPACE:\n\t\t\t\tstate = yield* whitespaceState(ch, p);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (begin !== selector.length) {\n\t\tyield selector.slice(begin);\n\t}\n}\n","import { type Attribute } from \"./attribute\";\nimport { Combinator, parseCombinator } from \"./combinator\";\nimport { type DynamicValue } from \"./dynamic-value\";\nimport { type HtmlElement } from \"./htmlelement\";\nimport { factory as pseudoClassFunction } from \"./pseudoclass\";\nimport { type SelectorContext } from \"./selector-context\";\nimport { splitSelectorElements } from \"./split-selector-elements\";\n\n/**\n * Homage to PHP: unescapes slashes.\n *\n * E.g. \"foo\\:bar\" becomes \"foo:bar\"\n */\nfunction stripslashes(value: string): string {\n\treturn value.replace(/\\\\(.)/g, \"$1\");\n}\n\n/**\n * Unescape codepoints.\n *\n * https://drafts.csswg.org/cssom/#escape-a-character-as-code-point\n */\nfunction unescapeCodepoint(value: string): string {\n\tconst replacement = {\n\t\t\"\\\\\\u0039 \": \"\\t\",\n\t\t\"\\\\\\u0061 \": \"\\n\",\n\t\t\"\\\\\\u0064 \": \"\\r\",\n\t};\n\treturn value.replace(\n\t\t/(\\\\[\\u0039\\u0061\\u0064] )/g,\n\t\t(_, codepoint: \"\\\\\\u0039 \" | \"\\\\\\u0061 \" | \"\\\\\\u0064 \") => replacement[codepoint],\n\t);\n}\n\n/**\n * @internal\n */\nexport function escapeSelectorComponent(text: string | DynamicValue): string {\n\t/* some characters requires extra care: https://drafts.csswg.org/cssom/#escape-a-character-as-code-point */\n\tconst codepoints: Record<string, string> = {\n\t\t\"\\t\": \"\\\\\\u0039 \",\n\t\t\"\\n\": \"\\\\\\u0061 \",\n\t\t\"\\r\": \"\\\\\\u0064 \",\n\t};\n\treturn text.toString().replace(/([\\t\\n\\r]|[^a-z0-9_-])/gi, (_, ch: string) => {\n\t\tif (codepoints[ch]) {\n\t\t\treturn codepoints[ch];\n\t\t} else {\n\t\t\treturn `\\\\${ch}`;\n\t\t}\n\t});\n}\n\n/**\n * @internal\n */\nexport function generateIdSelector(id: string): string {\n\tconst escaped = escapeSelectorComponent(id);\n\treturn escaped.match(/^\\d/) ? `[id=\"${escaped}\"]` : `#${escaped}`;\n}\n\n/**\n * Returns true if the character is a delimiter for different kinds of selectors:\n *\n * - `.` - begins a class selector\n * - `#` - begins an id selector\n * - `[` - begins an attribute selector\n * - `:` - begins a pseudo class or element selector\n */\nfunction isDelimiter(ch: string): boolean {\n\treturn /[.#[:]/.test(ch);\n}\n\n/**\n * Returns true if the character is a quotation mark.\n */\nfunction isQuotationMark(ch: string): ch is '\"' | \"'\" {\n\treturn /['\"]/.test(ch);\n}\n\nfunction isPseudoElement(ch: string, buffer: string): boolean {\n\treturn ch === \":\" && buffer === \":\";\n}\n\n/**\n * @internal\n */\nexport function* splitPattern(pattern: string): Generator<string> {\n\tif (pattern === \"\") {\n\t\treturn;\n\t}\n\n\tconst end = pattern.length;\n\n\tlet begin = 0;\n\tlet cur = 1;\n\tlet quoted: false | '\"' | \"'\" = false;\n\n\twhile (cur < end) {\n\t\tconst ch = pattern[cur];\n\t\tconst buffer = pattern.slice(begin, cur);\n\n\t\t/* escaped character, ignore whatever is next */\n\t\tif (ch === \"\\\\\") {\n\t\t\tcur += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\t/* if inside quoted string we only look for the end quotation mark */\n\t\tif (quoted) {\n\t\t\tif (ch === quoted) {\n\t\t\t\tquoted = false;\n\t\t\t}\n\t\t\tcur += 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\t/* if the character is a quotation mark we store the character and the above\n\t\t * condition will look for a similar end quotation mark */\n\t\tif (isQuotationMark(ch)) {\n\t\t\tquoted = ch;\n\t\t\tcur += 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\t/* special case when using :: pseudo element selector */\n\t\tif (isPseudoElement(ch, buffer)) {\n\t\t\tcur += 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\t/* if the character is a delimiter we yield the string and reset the\n\t\t * position */\n\t\tif (isDelimiter(ch)) {\n\t\t\tbegin = cur;\n\t\t\tyield buffer;\n\t\t}\n\n\t\tcur += 1;\n\t}\n\n\t/* yield the rest of the string */\n\tconst tail = pattern.slice(begin, cur);\n\tyield tail;\n}\n\nabstract class Matcher {\n\t/**\n\t * Returns `true` if given node matches.\n\t */\n\tpublic abstract match(node: HtmlElement, context: SelectorContext): boolean;\n}\n\nclass ClassMatcher extends Matcher {\n\tprivate readonly classname: string;\n\n\tpublic constructor(classname: string) {\n\t\tsuper();\n\t\tthis.classname = classname;\n\t}\n\n\tpublic match(node: HtmlElement): boolean {\n\t\treturn node.classList.contains(this.classname);\n\t}\n}\n\nclass IdMatcher extends Matcher {\n\tprivate readonly id: string;\n\n\tpublic constructor(id: string) {\n\t\tsuper();\n\t\tthis.id = stripslashes(id);\n\t}\n\n\tpublic match(node: HtmlElement): boolean {\n\t\treturn node.id === this.id;\n\t}\n}\n\nclass AttrMatcher extends Matcher {\n\tprivate readonly key: string;\n\tprivate readonly op: string;\n\tprivate readonly value: string;\n\n\tpublic constructor(attr: string) {\n\t\tsuper();\n\t\tconst [, key, op, value] = attr.match(/^(.+?)(?:([~^$*|]?=)\"([^\"]+?)\")?$/)!; // eslint-disable-line @typescript-eslint/no-non-null-assertion -- will always match\n\t\tthis.key = key;\n\t\tthis.op = op;\n\t\tthis.value = value;\n\t}\n\n\tpublic match(node: HtmlElement): boolean {\n\t\tconst attr = node.getAttribute(this.key, true);\n\t\treturn attr.some((cur: Attribute) => {\n\t\t\tswitch (this.op) {\n\t\t\t\tcase undefined:\n\t\t\t\t\treturn true; /* attribute exists */\n\t\t\t\tcase \"=\":\n\t\t\t\t\treturn cur.value === this.value;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Attribute selector operator ${this.op} is not implemented yet`);\n\t\t\t}\n\t\t});\n\t}\n}\n\nclass PseudoClassMatcher extends Matcher {\n\tprivate readonly name: string;\n\tprivate readonly args: string;\n\n\tpublic constructor(pseudoclass: string, context: string) {\n\t\tsuper();\n\t\tconst match = pseudoclass.match(/^([^(]+)(?:\\((.*)\\))?$/);\n\t\tif (!match) {\n\t\t\tthrow new Error(`Missing pseudo-class after colon in selector pattern \"${context}\"`);\n\t\t}\n\t\tconst [, name, args] = match;\n\t\tthis.name = name;\n\t\tthis.args = args;\n\t}\n\n\tpublic match(node: HtmlElement, context: SelectorContext): boolean {\n\t\tconst fn = pseudoClassFunction(this.name, context);\n\t\treturn fn(node, this.args);\n\t}\n}\n\nexport class Pattern {\n\tpublic readonly combinator: Combinator;\n\tpublic readonly tagName: string;\n\tprivate readonly selector: string;\n\tprivate readonly pattern: Matcher[];\n\n\tpublic constructor(pattern: string) {\n\t\tconst match = pattern.match(/^([~+\\->]?)((?:[*]|[^.#[:]+)?)([^]*)$/);\n\t\t/* istanbul ignore next: should not happen but throw proper error if it still happens */\n\t\tif (!match) {\n\t\t\tthrow new Error(`Failed to create selector pattern from \"${pattern}\"`);\n\t\t}\n\t\tmatch.shift(); /* remove full matched string */\n\t\tthis.selector = pattern;\n\t\tthis.combinator = parseCombinator(match.shift(), pattern);\n\t\tthis.tagName = match.shift() || \"*\"; // eslint-disable-line @typescript-eslint/prefer-nullish-coalescing -- empty string */\n\t\tthis.pattern = Array.from(splitPattern(match[0]), (it) => this.createMatcher(it));\n\t}\n\n\tpublic match(node: HtmlElement, context: SelectorContext): boolean {\n\t\treturn node.is(this.tagName) && this.pattern.every((cur: Matcher) => cur.match(node, context));\n\t}\n\n\tprivate createMatcher(pattern: string): Matcher {\n\t\tswitch (pattern[0]) {\n\t\t\tcase \".\":\n\t\t\t\treturn new ClassMatcher(pattern.slice(1));\n\t\t\tcase \"#\":\n\t\t\t\treturn new IdMatcher(pattern.slice(1));\n\t\t\tcase \"[\":\n\t\t\t\treturn new AttrMatcher(pattern.slice(1, -1));\n\t\t\tcase \":\":\n\t\t\t\treturn new PseudoClassMatcher(pattern.slice(1), this.selector);\n\t\t\tdefault:\n\t\t\t\t/* istanbul ignore next: fallback solution, the switch cases should cover\n\t\t\t\t * everything and there is no known way to trigger this fallback */\n\t\t\t\tthrow new Error(`Failed to create matcher for \"${pattern}\"`);\n\t\t}\n\t}\n}\n\n/**\n * DOM Selector.\n */\nexport class Selector {\n\tprivate readonly pattern: Pattern[];\n\n\tpublic constructor(selector: string) {\n\t\tthis.pattern = Selector.parse(selector);\n\t}\n\n\t/**\n\t * Match this selector against a HtmlElement.\n\t *\n\t * @param root - Element to match against.\n\t * @returns Iterator with matched elements.\n\t */\n\tpublic *match(root: HtmlElement): IterableIterator<HtmlElement> {\n\t\tconst context: SelectorContext = { scope: root };\n\t\tyield* this.matchInternal(root, 0, context);\n\t}\n\n\tprivate *matchInternal(\n\t\troot: HtmlElement,\n\t\tlevel: number,\n\t\tcontext: SelectorContext,\n\t): IterableIterator<HtmlElement> {\n\t\tif (level >= this.pattern.length) {\n\t\t\tyield root;\n\t\t\treturn;\n\t\t}\n\n\t\tconst pattern = this.pattern[level];\n\t\tconst matches = Selector.findCandidates(root, pattern);\n\n\t\tfor (const node of matches) {\n\t\t\tif (!pattern.match(node, context)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tyield* this.matchInternal(node, level + 1, context);\n\t\t}\n\t}\n\n\tprivate static parse(selector: string): Pattern[] {\n\t\t/* strip whitespace before combinators, \"ul > li\" becomes \"ul >li\", for\n\t\t * easier parsing */\n\t\tselector = selector.replace(/([+~>]) /g, \"$1\");\n\n\t\t/* split string on whitespace (excluding escaped `\\ `) */\n\t\treturn Array.from(splitSelectorElements(selector), (element) => {\n\t\t\treturn new Pattern(unescapeCodepoint(element));\n\t\t});\n\t}\n\n\tprivate static findCandidates(root: HtmlElement, pattern: Pattern): HtmlElement[] {\n\t\tswitch (pattern.combinator) {\n\t\t\tcase Combinator.DESCENDANT:\n\t\t\t\treturn root.getElementsByTagName(pattern.tagName);\n\t\t\tcase Combinator.CHILD:\n\t\t\t\treturn root.childElements.filter((node) => node.is(pattern.tagName));\n\t\t\tcase Combinator.ADJACENT_SIBLING:\n\t\t\t\treturn Selector.findAdjacentSibling(root);\n\t\t\tcase Combinator.GENERAL_SIBLING:\n\t\t\t\treturn Selector.findGeneralSibling(root);\n\t\t\tcase Combinator.SCOPE:\n\t\t\t\treturn [root];\n\t\t}\n\t\t/* istanbul ignore next: fallback solution, the switch cases should cover\n\t\t * everything and there is no known way to trigger this fallback */\n\t\treturn [];\n\t}\n\n\tprivate static findAdjacentSibling(node: HtmlElement): HtmlElement[] {\n\t\tlet adjacent = false;\n\t\treturn node.siblings.filter((cur) => {\n\t\t\tif (adjacent) {\n\t\t\t\tadjacent = false;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (cur === node) {\n\t\t\t\tadjacent = true;\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t}\n\n\tprivate static findGeneralSibling(node: HtmlElement): HtmlElement[] {\n\t\tlet after = false;\n\t\treturn node.siblings.filter((cur) => {\n\t\t\tif (after) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (cur === node) {\n\t\t\t\tafter = true;\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t}\n}\n","import { type Location } from \"../context\";\nimport { DOMNode } from \"./domnode\";\nimport { DynamicValue } from \"./dynamic-value\";\nimport { NodeType } from \"./nodetype\";\n\nconst TEXT_NODE_NAME = \"#text\";\n\n/**\n * Returns true if the node is a text node.\n *\n * @public\n */\nexport function isTextNode(node: DOMNode | null | undefined): node is TextNode {\n\treturn Boolean(node && node.nodeType === NodeType.TEXT_NODE);\n}\n\n/**\n * Represents a text in the HTML document.\n *\n * Text nodes are appended as children of `HtmlElement` and cannot have childen\n * of its own.\n *\n * @public\n */\nexport class TextNode extends DOMNode {\n\tprivate readonly text: string | DynamicValue;\n\n\t/**\n\t * @param text - Text to add. When a `DynamicValue` is used the expression is\n\t * used as \"text\".\n\t * @param location - Source code location of this node.\n\t */\n\tpublic constructor(text: string | DynamicValue, location: Location) {\n\t\tsuper(NodeType.TEXT_NODE, TEXT_NODE_NAME, location);\n\t\tthis.text = text;\n\t}\n\n\t/**\n\t * Get the text from node.\n\t */\n\tpublic get textContent(): string {\n\t\treturn this.text.toString();\n\t}\n\n\t/**\n\t * Flag set to true if the attribute value is static.\n\t */\n\tpublic get isStatic(): boolean {\n\t\treturn !this.isDynamic;\n\t}\n\n\t/**\n\t * Flag set to true if the attribute value is dynamic.\n\t */\n\tpublic get isDynamic(): boolean {\n\t\treturn this.text instanceof DynamicValue;\n\t}\n}\n","import { type Location, sliceLocation } from \"../context\";\nimport { type TagCloseToken, type TagOpenToken } from \"../lexer\";\nimport { type MetaElement, MetaCopyableProperty, setMetaProperty } from \"../meta/element\";\nimport { type HtmlElementLike } from \"../meta/html-element-like\";\nimport { type MetaTable } from \"../meta/table\";\nimport { Attribute } from \"./attribute\";\nimport { type CSSStyleDeclaration, parseCssDeclaration } from \"./css\";\nimport { DOMNode } from \"./domnode\";\nimport { DOMTokenList } from \"./domtokenlist\";\nimport { DynamicValue } from \"./dynamic-value\";\nimport { NodeType } from \"./nodetype\";\nimport { generateIdSelector, Selector } from \"./selector\";\nimport { TextNode } from \"./text\";\n\nconst ROLE = Symbol(\"role\");\nconst TABINDEX = Symbol(\"tabindex\");\n\ndeclare module \"./cache\" {\n\texport interface DOMNodeCache {\n\t\t[ROLE]: string;\n\t\t[TABINDEX]: number | null;\n\t}\n}\n\ninterface HtmlElementDetails {\n\tnodeType: typeof NodeType.ELEMENT_NODE;\n\ttagName: string;\n\tparent: HtmlElement | null;\n\tclosed: NodeClosed;\n\tmeta: MetaElement | null;\n\tlocation: Location;\n}\n\ninterface HtmlElementRootDetails {\n\tnodeType: typeof NodeType.DOCUMENT_NODE;\n\tlocation: Location;\n}\n\n/**\n * @public\n */\nexport enum NodeClosed {\n\tOpen = 0, // element wasn't closed\n\tEndTag = 1, // element closed with end tag <p>...</p>\n\tVoidOmitted = 2, // void element with omitted end tag <input>\n\tVoidSelfClosed = 3, // self-closed void element <input/>\n\tImplicitClosed = 4, // element with optional end tag <li>foo<li>bar\n}\n\n/**\n * Returns true if the node is an element node.\n *\n * @public\n */\nexport function isElementNode(node: DOMNode | null | undefined): node is HtmlElement {\n\treturn Boolean(node && node.nodeType === NodeType.ELEMENT_NODE);\n}\n\nfunction isInvalidTagName(tagName: string | undefined): tagName is \"\" | \"*\" {\n\treturn Boolean(tagName === \"\" || tagName === \"*\");\n}\n\nfunction createAdapter(node: HtmlElement): HtmlElementLike {\n\treturn {\n\t\tclosest(selectors) {\n\t\t\treturn node.closest(selectors)?._adapter;\n\t\t},\n\t\tgetAttribute(name) {\n\t\t\treturn node.getAttribute(name)?.value;\n\t\t},\n\t\thasAttribute(name) {\n\t\t\treturn node.hasAttribute(name);\n\t\t},\n\t};\n}\n\n/**\n * @public\n */\nexport class HtmlElement extends DOMNode {\n\tpublic readonly tagName: string;\n\tpublic readonly parent: HtmlElement | null;\n\tpublic readonly voidElement: boolean;\n\tpublic readonly depth: number;\n\tpublic closed: NodeClosed;\n\tprotected readonly attr: Record<string, Attribute[]>;\n\tprivate metaElement: MetaElement | null;\n\tprivate annotation: string | null;\n\n\t/** @internal */\n\tpublic readonly _adapter: HtmlElementLike;\n\n\tprivate constructor(details: HtmlElementDetails | HtmlElementRootDetails);\n\tprivate constructor(details: {\n\t\tnodeType: NodeType;\n\t\ttagName?: string;\n\t\tparent?: HtmlElement | null;\n\t\tclosed?: NodeClosed;\n\t\tmeta?: MetaElement | null;\n\t\tlocation: Location;\n\t}) {\n\t\tconst {\n\t\t\tnodeType,\n\t\t\ttagName,\n\t\t\tparent = null,\n\t\t\tclosed = NodeClosed.EndTag,\n\t\t\tmeta = null,\n\t\t\tlocation,\n\t\t} = details;\n\t\tsuper(nodeType, tagName, location);\n\n\t\tif (isInvalidTagName(tagName)) {\n\t\t\tthrow new Error(`The tag name provided (\"${tagName}\") is not a valid name`);\n\t\t}\n\n\t\tthis.tagName = tagName ?? \"#document\";\n\t\tthis.parent = parent ?? null;\n\t\tthis.attr = {};\n\t\tthis.metaElement = meta ?? null;\n\t\tthis.closed = closed;\n\t\tthis.voidElement = meta ? Boolean(meta.void) : false;\n\t\tthis.depth = 0;\n\t\tthis.annotation = null;\n\t\tthis._adapter = createAdapter(this);\n\n\t\tif (parent) {\n\t\t\tparent.childNodes.push(this);\n\n\t\t\t/* calculate depth in domtree */\n\t\t\tlet cur: HtmlElement = parent;\n\t\t\twhile (cur.parent) {\n\t\t\t\tthis.depth++;\n\t\t\t\tcur = cur.parent;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Manually create a new element. This is primary useful for test-cases. While\n\t * the API is public it is not meant for general consumption and is not\n\t * guaranteed to be stable across versions.\n\t *\n\t * Use at your own risk. Prefer to use [[Parser]] to parse a string of markup\n\t * instead.\n\t *\n\t * @public\n\t * @since 8.22.0\n\t * @param tagName - Element tagname.\n\t * @param location - Element location.\n\t * @param details - Additional element details.\n\t */\n\tpublic static createElement(\n\t\ttagName: string,\n\t\tlocation: Location,\n\t\tdetails: { closed?: NodeClosed; meta?: MetaElement | null; parent?: HtmlElement } = {},\n\t): HtmlElement {\n\t\tconst { closed = NodeClosed.EndTag, meta = null, parent = null } = details;\n\t\treturn new HtmlElement({\n\t\t\tnodeType: NodeType.ELEMENT_NODE,\n\t\t\ttagName,\n\t\t\tparent,\n\t\t\tclosed,\n\t\t\tmeta,\n\t\t\tlocation,\n\t\t});\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic static rootNode(location: Location): HtmlElement {\n\t\tconst root = new HtmlElement({\n\t\t\tnodeType: NodeType.DOCUMENT_NODE,\n\t\t\tlocation,\n\t\t});\n\t\troot.setAnnotation(\"#document\");\n\t\treturn root;\n\t}\n\n\t/**\n\t * @internal\n\t *\n\t * @param namespace - If given it is appended to the tagName.\n\t */\n\tpublic static fromTokens(\n\t\tstartToken: TagOpenToken,\n\t\tendToken: TagCloseToken,\n\t\tparent: HtmlElement | null,\n\t\tmetaTable: MetaTable | null,\n\t\tnamespace: string = \"\",\n\t): HtmlElement {\n\t\tconst name = startToken.data[2];\n\t\tconst tagName = namespace ? `${namespace}:${name}` : name;\n\t\tif (!name) {\n\t\t\tthrow new Error(\"tagName cannot be empty\");\n\t\t}\n\n\t\tconst meta = metaTable ? metaTable.getMetaFor(tagName) : null;\n\t\tconst open = startToken.data[1] !== \"/\";\n\t\tconst closed = isClosed(endToken, meta);\n\n\t\t/* location contains position of '<' so strip it out */\n\t\tconst location = sliceLocation(startToken.location, 1);\n\n\t\treturn new HtmlElement({\n\t\t\tnodeType: NodeType.ELEMENT_NODE,\n\t\t\ttagName,\n\t\t\tparent: open ? parent : null,\n\t\t\tclosed,\n\t\t\tmeta,\n\t\t\tlocation,\n\t\t});\n\t}\n\n\t/**\n\t * Returns annotated name if set or defaults to `<tagName>`.\n\t *\n\t * E.g. `my-annotation` or `<div>`.\n\t */\n\tpublic get annotatedName(): string {\n\t\tif (this.annotation) {\n\t\t\treturn this.annotation;\n\t\t} else {\n\t\t\treturn `<${this.tagName}>`;\n\t\t}\n\t}\n\n\t/**\n\t * Get list of IDs referenced by `aria-labelledby`.\n\t *\n\t * If the attribute is unset or empty this getter returns null.\n\t * If the attribute is dynamic the original {@link DynamicValue} is returned.\n\t *\n\t * @public\n\t */\n\tpublic get ariaLabelledby(): string[] | DynamicValue | null {\n\t\tconst attr = this.getAttribute(\"aria-labelledby\");\n\t\tif (!attr?.value) {\n\t\t\treturn null;\n\t\t}\n\t\tif (attr.value instanceof DynamicValue) {\n\t\t\treturn attr.value;\n\t\t}\n\t\tconst list = new DOMTokenList(attr.value, attr.valueLocation);\n\t\treturn list.length ? Array.from(list) : null;\n\t}\n\n\t/**\n\t * Similar to childNodes but only elements.\n\t */\n\tpublic get childElements(): HtmlElement[] {\n\t\treturn this.childNodes.filter(isElementNode);\n\t}\n\n\t/**\n\t * Find the first ancestor matching a selector.\n\t *\n\t * Implementation of DOM specification of Element.closest(selectors).\n\t */\n\tpublic closest(selectors: string): HtmlElement | null {\n\t\t/* eslint-disable-next-line @typescript-eslint/no-this-alias -- false positive*/\n\t\tlet node: HtmlElement | null = this;\n\t\twhile (node) {\n\t\t\tif (node.matches(selectors)) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\tnode = node.parent;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * Generate a DOM selector for this element. The returned selector will be\n\t * unique inside the current document.\n\t */\n\tpublic generateSelector(): string | null {\n\t\t/* root element cannot have a selector as it isn't a proper element */\n\t\tif (this.isRootElement()) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst parts = [];\n\n\t\tlet root: HtmlElement;\n\t\t/* eslint-disable-next-line @typescript-eslint/no-this-alias -- false positive */\n\t\tfor (root = this; root.parent; root = root.parent) {\n\t\t\t/* .. */\n\t\t}\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-this-alias -- false positive\n\t\tfor (let cur: HtmlElement = this; cur.parent; cur = cur.parent) {\n\t\t\t/* if a unique id is present, use it and short-circuit */\n\t\t\tif (cur.id) {\n\t\t\t\tconst selector = generateIdSelector(cur.id);\n\t\t\t\tconst matches = root.querySelectorAll(selector);\n\t\t\t\tif (matches.length === 1) {\n\t\t\t\t\tparts.push(selector);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst parent = cur.parent;\n\t\t\tconst child = parent.childElements;\n\t\t\tconst index = child.findIndex((it) => it.unique === cur.unique);\n\t\t\tconst numOfType = child.filter((it) => it.is(cur.tagName)).length;\n\t\t\tconst solo = numOfType === 1;\n\n\t\t\t/* if this is the only tagName in this level of siblings nth-child isn't needed */\n\t\t\tif (solo) {\n\t\t\t\tparts.push(cur.tagName.toLowerCase());\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t/* this will generate the worst kind of selector but at least it will be accurate (optimizations welcome) */\n\t\t\tparts.push(`${cur.tagName.toLowerCase()}:nth-child(${String(index + 1)})`);\n\t\t}\n\t\treturn parts.reverse().join(\" > \");\n\t}\n\n\t/**\n\t * Tests if this element has given tagname.\n\t *\n\t * If passing \"*\" this test will pass if any tagname is set.\n\t */\n\tpublic is(tagName: string): boolean {\n\t\treturn tagName === \"*\" || this.tagName.toLowerCase() === tagName.toLowerCase();\n\t}\n\n\t/**\n\t * Load new element metadata onto this element.\n\t *\n\t * Do note that semantics such as `void` cannot be changed (as the element has\n\t * already been created). In addition the element will still \"be\" the same\n\t * element, i.e. even if loading meta for a `<p>` tag upon a `<div>` tag it\n\t * will still be a `<div>` as far as the rest of the validator is concerned.\n\t *\n\t * In fact only certain properties will be copied onto the element:\n\t *\n\t * - content categories (flow, phrasing, etc)\n\t * - required attributes\n\t * - attribute allowed values\n\t * - permitted/required elements\n\t *\n\t * Properties *not* loaded:\n\t *\n\t * - inherit\n\t * - deprecated\n\t * - foreign\n\t * - void\n\t * - implicitClosed\n\t * - scriptSupporting\n\t * - deprecatedAttributes\n\t *\n\t * Changes to element metadata will only be visible after `element:ready` (and\n\t * the subsequent `dom:ready` event).\n\t */\n\tpublic loadMeta(meta: MetaElement): void {\n\t\tif (!this.metaElement) {\n\t\t\tthis.metaElement = {} as MetaElement;\n\t\t}\n\t\tfor (const key of MetaCopyableProperty) {\n\t\t\tconst value = meta[key];\n\t\t\tif (typeof value !== \"undefined\") {\n\t\t\t\tsetMetaProperty(this.metaElement, key, value);\n\t\t\t} else {\n\t\t\t\t/* eslint-disable-next-line @typescript-eslint/no-dynamic-delete -- technical debt */\n\t\t\t\tdelete this.metaElement[key];\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Match this element against given selectors. Returns true if any selector\n\t * matches.\n\t *\n\t * Implementation of DOM specification of Element.matches(selectors).\n\t */\n\tpublic matches(selector: string): boolean {\n\t\t/* find root element */\n\t\t/* eslint-disable-next-line @typescript-eslint/no-this-alias -- false positive */\n\t\tlet root: HtmlElement = this;\n\t\twhile (root.parent) {\n\t\t\troot = root.parent;\n\t\t}\n\n\t\t/* a bit slow implementation as it finds all candidates for the selector and\n\t\t * then tests if any of them are the current element. A better\n\t\t * implementation would be to walk the selector right-to-left and test\n\t\t * ancestors. */\n\t\tfor (const match of root.querySelectorAll(selector)) {\n\t\t\tif (match.unique === this.unique) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tpublic get meta(): MetaElement | null {\n\t\treturn this.metaElement;\n\t}\n\n\t/**\n\t * Get current role for this element (explicit with `role` attribute or mapped\n\t * with implicit role).\n\t *\n\t * @since 8.9.1\n\t */\n\tpublic get role(): string | DynamicValue | null {\n\t\tconst cached = this.cacheGet(ROLE);\n\t\tif (cached !== undefined) {\n\t\t\treturn cached;\n\t\t}\n\n\t\tconst role = this.getAttribute(\"role\");\n\t\tif (role) {\n\t\t\treturn this.cacheSet(ROLE, role.value);\n\t\t}\n\n\t\tif (this.metaElement) {\n\t\t\tconst { aria } = this.metaElement;\n\t\t\tconst implicitRole = aria.implicitRole(this._adapter);\n\t\t\treturn this.cacheSet(ROLE, implicitRole);\n\t\t}\n\n\t\treturn this.cacheSet(ROLE, null);\n\t}\n\n\t/**\n\t * Set annotation for this element.\n\t */\n\tpublic setAnnotation(text: string): void {\n\t\tthis.annotation = text;\n\t}\n\n\t/**\n\t * Set attribute. Stores all attributes set even with the same name.\n\t *\n\t * @param key - Attribute name\n\t * @param value - Attribute value. Use `null` if no value is present.\n\t * @param keyLocation - Location of the attribute name.\n\t * @param valueLocation - Location of the attribute value (excluding quotation)\n\t * @param originalAttribute - If attribute is an alias for another attribute\n\t * (dynamic attributes) set this to the original attribute name.\n\t */\n\tpublic setAttribute(\n\t\tkey: string,\n\t\tvalue: string | DynamicValue | null,\n\t\tkeyLocation: Location,\n\t\tvalueLocation: Location | null,\n\t\toriginalAttribute?: string,\n\t): void {\n\t\tkey = key.toLowerCase();\n\n\t\tconst attr = new Attribute(key, value, keyLocation, valueLocation, originalAttribute);\n\t\tconst list = this.attr[key] as Attribute[] | undefined;\n\t\tif (list) {\n\t\t\tlist.push(attr);\n\t\t} else {\n\t\t\tthis.attr[key] = [attr];\n\t\t}\n\t}\n\n\t/**\n\t * Get parsed tabindex for this element.\n\t *\n\t * - If `tabindex` attribute is not present `null` is returned.\n\t * - If attribute value is omitted or the empty string `null` is returned.\n\t * - If attribute value cannot be parsed `null` is returned.\n\t * - If attribute value is dynamic `0` is returned.\n\t * - Otherwise the parsed value is returned.\n\t *\n\t * This property does *NOT* take into account if the element have a default\n\t * `tabindex` (such as `<input>` have). Instead use the `focusable` metadata\n\t * property to determine this.\n\t *\n\t * @public\n\t * @since 8.16.0\n\t */\n\tpublic get tabIndex(): number | null {\n\t\tconst cached = this.cacheGet(TABINDEX);\n\t\tif (cached !== undefined) {\n\t\t\treturn cached;\n\t\t}\n\n\t\tconst tabindex = this.getAttribute(\"tabindex\");\n\t\tif (!tabindex) {\n\t\t\treturn this.cacheSet(TABINDEX, null);\n\t\t}\n\n\t\tif (tabindex.value === null) {\n\t\t\treturn this.cacheSet(TABINDEX, null);\n\t\t}\n\n\t\tif (tabindex.value instanceof DynamicValue) {\n\t\t\treturn this.cacheSet(TABINDEX, 0);\n\t\t}\n\n\t\tconst parsed = parseInt(tabindex.value, 10);\n\t\tif (isNaN(parsed)) {\n\t\t\treturn this.cacheSet(TABINDEX, null);\n\t\t}\n\n\t\treturn this.cacheSet(TABINDEX, parsed);\n\t}\n\n\t/**\n\t * Get a list of all attributes on this node.\n\t */\n\tpublic get attributes(): Attribute[] {\n\t\treturn Object.values(this.attr).reduce((result, cur) => {\n\t\t\treturn result.concat(cur);\n\t\t}, []);\n\t}\n\n\tpublic hasAttribute(key: string): boolean {\n\t\tkey = key.toLowerCase();\n\t\treturn key in this.attr;\n\t}\n\n\t/**\n\t * Get attribute.\n\t *\n\t * By default only the first attribute is returned but if the code needs to\n\t * handle duplicate attributes the `all` parameter can be set to get all\n\t * attributes with given key.\n\t *\n\t * This usually only happens when code contains duplicate attributes (which\n\t * `no-dup-attr` will complain about) or when a static attribute is combined\n\t * with a dynamic, consider:\n\t *\n\t * <p class=\"foo\" dynamic-class=\"bar\">\n\t *\n\t * @param key - Attribute name\n\t * @param all - Return single or all attributes.\n\t */\n\tpublic getAttribute(key: string): Attribute | null;\n\tpublic getAttribute(key: string, all: true): Attribute[];\n\tpublic getAttribute(key: string, all: boolean = false): Attribute | Attribute[] | null {\n\t\tkey = key.toLowerCase();\n\t\tif (key in this.attr) {\n\t\t\tconst matches = this.attr[key];\n\t\t\treturn all ? matches : matches[0];\n\t\t} else {\n\t\t\treturn all ? [] : null;\n\t\t}\n\t}\n\n\t/**\n\t * Get attribute value.\n\t *\n\t * Returns the attribute value if present.\n\t *\n\t * - Missing attributes return `null`.\n\t * - Boolean attributes return `null`.\n\t * - `DynamicValue` returns attribute expression.\n\t *\n\t * @param key - Attribute name\n\t * @returns Attribute value or null.\n\t */\n\tpublic getAttributeValue(key: string): string | null {\n\t\tconst attr = this.getAttribute(key);\n\t\tif (attr) {\n\t\t\treturn attr.value !== null ? attr.value.toString() : null;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t * Add text as a child node to this element.\n\t *\n\t * @param text - Text to add.\n\t * @param location - Source code location of this text.\n\t */\n\tpublic appendText(text: string | DynamicValue, location: Location): void {\n\t\tthis.childNodes.push(new TextNode(text, location));\n\t}\n\n\t/**\n\t * Return a list of all known classes on the element. Dynamic values are\n\t * ignored.\n\t */\n\tpublic get classList(): DOMTokenList {\n\t\tif (!this.hasAttribute(\"class\")) {\n\t\t\treturn new DOMTokenList(null, null);\n\t\t}\n\t\tconst classes = this.getAttribute(\"class\", true)\n\t\t\t.filter((attr) => attr.isStatic)\n\t\t\t.map((attr) => attr.value)\n\t\t\t.join(\" \");\n\t\treturn new DOMTokenList(classes, null);\n\t}\n\n\t/**\n\t * Get element ID if present.\n\t */\n\tpublic get id(): string | null {\n\t\treturn this.getAttributeValue(\"id\");\n\t}\n\n\tpublic get style(): CSSStyleDeclaration {\n\t\tconst attr = this.getAttribute(\"style\");\n\t\treturn parseCssDeclaration(attr?.value);\n\t}\n\n\t/**\n\t * Returns the first child element or null if there are no child elements.\n\t */\n\tpublic get firstElementChild(): HtmlElement | null {\n\t\tconst children = this.childElements;\n\t\treturn children.length > 0 ? children[0] : null;\n\t}\n\n\t/**\n\t * Returns the last child element or null if there are no child elements.\n\t */\n\tpublic get lastElementChild(): HtmlElement | null {\n\t\tconst children = this.childElements;\n\t\treturn children.length > 0 ? children[children.length - 1] : null;\n\t}\n\n\tpublic get siblings(): HtmlElement[] {\n\t\treturn this.parent ? this.parent.childElements : [this];\n\t}\n\n\tpublic get previousSibling(): HtmlElement | null {\n\t\tconst i = this.siblings.findIndex((node) => node.unique === this.unique);\n\t\treturn i >= 1 ? this.siblings[i - 1] : null;\n\t}\n\n\tpublic get nextSibling(): HtmlElement | null {\n\t\tconst i = this.siblings.findIndex((node) => node.unique === this.unique);\n\t\treturn i <= this.siblings.length - 2 ? this.siblings[i + 1] : null;\n\t}\n\n\tpublic getElementsByTagName(tagName: string): HtmlElement[] {\n\t\treturn this.childElements.reduce<HtmlElement[]>((matches, node) => {\n\t\t\treturn matches.concat(node.is(tagName) ? [node] : [], node.getElementsByTagName(tagName));\n\t\t}, []);\n\t}\n\n\tpublic querySelector(selector: string): HtmlElement | null {\n\t\tconst it = this.querySelectorImpl(selector);\n\t\tconst next = it.next();\n\t\tif (next.done) {\n\t\t\treturn null;\n\t\t} else {\n\t\t\treturn next.value;\n\t\t}\n\t}\n\n\tpublic querySelectorAll(selector: string): HtmlElement[] {\n\t\tconst it = this.querySelectorImpl(selector);\n\t\tconst unique = new Set(it);\n\t\treturn Array.from(unique.values());\n\t}\n\n\tprivate *querySelectorImpl(selectorList: string): IterableIterator<HtmlElement> {\n\t\tif (!selectorList) {\n\t\t\treturn;\n\t\t}\n\t\tfor (const selector of selectorList.split(/,\\s*/)) {\n\t\t\tconst pattern = new Selector(selector);\n\t\t\tyield* pattern.match(this);\n\t\t}\n\t}\n\n\t/**\n\t * Evaluates callbackk on all descendants, returning true if any are true.\n\t *\n\t * @internal\n\t */\n\tpublic someChildren(callback: (node: HtmlElement) => boolean): boolean {\n\t\treturn this.childElements.some(visit);\n\n\t\tfunction visit(node: HtmlElement): boolean {\n\t\t\tif (callback(node)) {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn node.childElements.some(visit);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Evaluates callbackk on all descendants, returning true if all are true.\n\t *\n\t * @internal\n\t */\n\tpublic everyChildren(callback: (node: HtmlElement) => boolean): boolean {\n\t\treturn this.childElements.every(visit);\n\n\t\tfunction visit(node: HtmlElement): boolean {\n\t\t\tif (!callback(node)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn node.childElements.every(visit);\n\t\t}\n\t}\n\n\t/**\n\t * Visit all nodes from this node and down. Breadth first.\n\t *\n\t * The first node for which the callback evaluates to true is returned.\n\t *\n\t * @internal\n\t */\n\tpublic find(callback: (node: HtmlElement) => boolean): HtmlElement | null {\n\t\tfunction visit(node: HtmlElement): HtmlElement | null {\n\t\t\tif (callback(node)) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\tfor (const child of node.childElements) {\n\t\t\t\tconst match = child.find(callback);\n\t\t\t\tif (match) {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\treturn visit(this);\n\t}\n}\n\nfunction isClosed(endToken: TagCloseToken, meta: MetaElement | null): NodeClosed {\n\tlet closed = NodeClosed.Open;\n\n\tif (meta?.void) {\n\t\tclosed = NodeClosed.VoidOmitted;\n\t}\n\n\tif (endToken.data[0] === \"/>\") {\n\t\tclosed = NodeClosed.VoidSelfClosed;\n\t}\n\n\treturn closed;\n}\n","import { type HtmlElement } from \"../dom\";\n\n/**\n * Output DOM tree as string\n *\n * Mostly useful for debugging.\n *\n * @internal\n */\nexport function dumpTree(root: HtmlElement): string[] {\n\tconst lines: string[] = [];\n\n\tfunction decoration(node: HtmlElement): string {\n\t\tlet output = \"\";\n\t\tif (node.id) {\n\t\t\toutput += `#${node.id}`;\n\t\t}\n\t\tif (node.hasAttribute(\"class\")) {\n\t\t\toutput += `.${node.classList.join(\".\")}`;\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction writeNode(node: HtmlElement, level: number, sibling: number): void {\n\t\tif (node.parent) {\n\t\t\tconst indent = \" \".repeat(level - 1);\n\t\t\tconst l = node.childElements.length > 0 ? \"┬\" : \"─\";\n\t\t\tconst b = sibling < node.parent.childElements.length - 1 ? \"├\" : \"└\";\n\t\t\tlines.push(`${indent}${b}─${l} ${node.tagName}${decoration(node)}`);\n\t\t} else {\n\t\t\tlines.push(\"(root)\");\n\t\t}\n\n\t\tnode.childElements.forEach((child, index) => {\n\t\t\twriteNode(child, level + 1, index);\n\t\t});\n\t}\n\n\twriteNode(root, 0, 0);\n\treturn lines;\n}\n","function escape(value: string): string {\n\treturn JSON.stringify(value);\n}\n\nfunction format(value: unknown, quote: boolean = false): string {\n\tif (value === null) {\n\t\treturn \"null\";\n\t}\n\n\tif (typeof value === \"number\") {\n\t\treturn value.toString();\n\t}\n\n\tif (typeof value === \"string\") {\n\t\treturn quote ? escape(value) : value;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tconst content = value.map((it) => format(it, true)).join(\", \");\n\t\treturn `[ ${content} ]`;\n\t}\n\n\tif (typeof value === \"object\") {\n\t\tconst content = Object.entries(value)\n\t\t\t.map(([key, nested]) => `${key}: ${format(nested, true)}`)\n\t\t\t.join(\", \");\n\t\treturn `{ ${content} }`;\n\t}\n\n\treturn String(value);\n}\n\n/**\n * Replaces placeholder `{{ ... }}` with values from given object.\n *\n * @internal\n */\nexport function interpolate(text: string, data: Record<string, unknown>): string {\n\treturn text.replace(/{{\\s*([^\\s{}]+)\\s*}}/g, (match, key): string => {\n\t\treturn typeof data[key] !== \"undefined\" ? format(data[key]) : match;\n\t});\n}\n","/**\n * Test if value is a Promise (thenable).\n *\n * @internal\n */\nexport function isThenable<T>(value: T | Promise<T>): value is Promise<T> {\n\treturn value && typeof value === \"object\" && \"then\" in value && typeof value.then === \"function\";\n}\n","/**\n * @public\n */\nexport enum Severity {\n\tDISABLED = 0,\n\tWARN = 1,\n\tERROR = 2,\n}\n\n/**\n * @internal\n */\nexport function parseSeverity(value: string | number): Severity {\n\tswitch (value) {\n\t\tcase 0:\n\t\tcase \"off\":\n\t\t\treturn Severity.DISABLED;\n\t\tcase 1:\n\t\tcase \"warn\":\n\t\t\treturn Severity.WARN;\n\t\tcase 2:\n\t\tcase \"error\":\n\t\t\treturn Severity.ERROR;\n\t\tdefault:\n\t\t\tthrow new Error(`Invalid severity \"${String(value)}\"`);\n\t}\n}\n","import { type HtmlElement, DynamicValue } from \"../../dom\";\nimport { type MetaElement } from \"../../meta\";\n\nconst cacheKey = Symbol(\"aria-naming\");\n\ndeclare module \"../../dom/cache\" {\n\texport interface DOMNodeCache {\n\t\t[cacheKey]: \"allowed\" | \"prohibited\";\n\t}\n}\n\n/* default value is also stored in [[normalizeAriaNaming]] */\nconst defaultValue = \"allowed\";\n\n/* WAI ARIA 5.2.8.6 Roles which cannot be named (Name prohibited) */\nconst prohibitedRoles = [\n\t\"caption\",\n\t\"code\",\n\t\"deletion\",\n\t\"emphasis\",\n\t\"generic\",\n\t\"insertion\",\n\t\"paragraph\",\n\t\"presentation\",\n\t\"strong\",\n\t\"subscript\",\n\t\"superscript\",\n];\n\nfunction byRole(role: string): \"allowed\" | \"prohibited\" {\n\treturn prohibitedRoles.includes(role) ? \"prohibited\" : \"allowed\";\n}\n\nfunction byMeta(element: HtmlElement, meta: MetaElement): \"allowed\" | \"prohibited\" {\n\treturn meta.aria.naming(element._adapter);\n}\n\n/**\n * Returns the normalized metadata property `aria.naming`.\n *\n * - Returns `allowed` if this element allows naming.\n * - Returns `prohibited` if this element does not allow naming.\n * - If the element doesn't have metadata `allowed` is returned.\n *\n * If the element contains an explicit `role` the role is used to determine\n * whenever the element allows naming or not. Otherwise it uses metadata to\n * determine.\n *\n * @public\n * @param element - Element to get `aria.naming` from.\n */\nexport function ariaNaming(element: HtmlElement): \"allowed\" | \"prohibited\" {\n\tconst cached = element.cacheGet(cacheKey);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\t/* if the element contains an explicit role we use that to determine if naming\n\t * is allowed or not */\n\tconst role = element.getAttribute(\"role\")?.value;\n\tif (role) {\n\t\tif (role instanceof DynamicValue) {\n\t\t\treturn element.cacheSet(cacheKey, defaultValue);\n\t\t} else {\n\t\t\treturn element.cacheSet(cacheKey, byRole(role));\n\t\t}\n\t}\n\n\tconst meta = element.meta;\n\tif (!meta) {\n\t\treturn element.cacheSet(cacheKey, defaultValue);\n\t}\n\n\treturn element.cacheSet(cacheKey, byMeta(element, meta));\n}\n","/**\n * @public\n */\nexport interface IncludeExcludeOptions {\n\tinclude: string[] | null;\n\texclude: string[] | null;\n}\n\nconst patternCache = new Map<string, RegExp>();\n\nfunction compileStringPattern(pattern: string): RegExp {\n\tconst regexp = pattern.replace(/[*]+/g, \".+\");\n\t/* eslint-disable-next-line security/detect-non-literal-regexp -- technical debt, should do input sanitation and precompilation */\n\treturn new RegExp(`^${regexp}$`);\n}\n\nfunction compileRegExpPattern(pattern: string): RegExp {\n\t/* eslint-disable-next-line security/detect-non-literal-regexp -- technical debt, should do input sanitation and precompilation */\n\treturn new RegExp(`^${pattern}$`);\n}\n\nfunction compilePattern(pattern: string): RegExp {\n\tconst cached = patternCache.get(pattern);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\tconst match = pattern.match(/^\\/(.*)\\/$/);\n\tconst regexp = match ? compileRegExpPattern(match[1]) : compileStringPattern(pattern);\n\tpatternCache.set(pattern, regexp);\n\treturn regexp;\n}\n\n/**\n * @internal\n */\nexport function keywordPatternMatcher(list: string[], keyword: string): boolean {\n\tfor (const pattern of list) {\n\t\tconst regexp = compilePattern(pattern);\n\t\tif (regexp.test(keyword)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * @internal\n */\nexport function isKeywordIgnored<T extends IncludeExcludeOptions>(\n\toptions: T,\n\tkeyword: string,\n\tmatcher: (list: string[], it: string) => boolean = (list, it) => list.includes(it),\n): boolean {\n\tconst { include, exclude } = options;\n\n\t/* ignore keyword if not present in \"include\" */\n\tif (include && !matcher(include, keyword)) {\n\t\treturn true;\n\t}\n\n\t/* ignore keyword if present in \"excludes\" */\n\tif (exclude && matcher(exclude, keyword)) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n","import { type HtmlElement, parseCssDeclaration } from \"../../dom\";\n\nexport interface IsHiddenResult {\n\tbyParent: boolean;\n\tbySelf: boolean;\n}\n\n/**\n * Result of {@link isInert}.\n *\n * @internal\n */\nexport interface IsInertResult {\n\t/** `true` if one or more parents are inert */\n\tbyParent: boolean;\n\t/** `true` if the element itself is inert */\n\tbySelf: boolean;\n}\n\ndeclare module \"../../dom/cache\" {\n\texport interface DOMNodeCache {\n\t\t[ARIA_HIDDEN_CACHE]: IsHiddenResult;\n\t\t[HTML_HIDDEN_CACHE]: IsHiddenResult;\n\t\t[INERT_CACHE]: IsInertResult;\n\t\t[ROLE_PRESENTATION_CACHE]: boolean;\n\t\t[STYLE_HIDDEN_CACHE]: boolean;\n\t}\n}\n\nconst ARIA_HIDDEN_CACHE = Symbol(isAriaHidden.name);\nconst HTML_HIDDEN_CACHE = Symbol(isHTMLHidden.name);\nconst INERT_CACHE = Symbol(isInert.name);\nconst ROLE_PRESENTATION_CACHE = Symbol(isPresentation.name);\nconst STYLE_HIDDEN_CACHE = Symbol(isStyleHidden.name);\n\n/**\n * Tests if this element is present in the accessibility tree.\n *\n * In practice it tests whenever the element or its parents has\n * `role=\"presentation\"` or `aria-hidden=\"false\"`. Dynamic values counts as\n * visible since the element might be in the visibility tree sometimes.\n */\nexport function inAccessibilityTree(node: HtmlElement): boolean {\n\tif (isAriaHidden(node)) {\n\t\treturn false;\n\t}\n\tif (isPresentation(node)) {\n\t\treturn false;\n\t}\n\tif (isHTMLHidden(node)) {\n\t\treturn false;\n\t}\n\tif (isInert(node)) {\n\t\treturn false;\n\t}\n\tif (isStyleHidden(node)) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction isAriaHiddenImpl(node: HtmlElement): IsHiddenResult {\n\tconst getAriaHiddenAttr = (node: HtmlElement): boolean => {\n\t\tconst ariaHidden = node.getAttribute(\"aria-hidden\");\n\t\treturn Boolean(ariaHidden && ariaHidden.value === \"true\");\n\t};\n\treturn {\n\t\tbyParent: node.parent ? isAriaHidden(node.parent) : false,\n\t\tbySelf: getAriaHiddenAttr(node),\n\t};\n}\n\n/**\n * Tests if this element or an ancestor have `aria-hidden=\"true\"`.\n *\n * Dynamic values yields `false` since the element will conditionally be in the\n * accessibility tree and must fulfill it's conditions.\n *\n * @internal\n */\nexport function isAriaHidden(node: HtmlElement): boolean;\nexport function isAriaHidden(node: HtmlElement, details: true): IsHiddenResult;\nexport function isAriaHidden(node: HtmlElement, details?: true): boolean | IsHiddenResult {\n\tconst cached = node.cacheGet(ARIA_HIDDEN_CACHE);\n\tif (cached) {\n\t\treturn details ? cached : cached.byParent || cached.bySelf;\n\t}\n\tconst result = node.cacheSet(ARIA_HIDDEN_CACHE, isAriaHiddenImpl(node));\n\treturn details ? result : result.byParent || result.bySelf;\n}\n\nfunction isHTMLHiddenImpl(node: HtmlElement): IsHiddenResult {\n\tconst getHiddenAttr = (node: HtmlElement): boolean => {\n\t\tconst hidden = node.getAttribute(\"hidden\");\n\t\treturn Boolean(hidden?.isStatic);\n\t};\n\treturn {\n\t\tbyParent: node.parent ? isHTMLHidden(node.parent) : false,\n\t\tbySelf: getHiddenAttr(node),\n\t};\n}\n\n/**\n * Tests if this element or an ancestor have `hidden` attribute.\n *\n * Dynamic values yields `false` since the element will conditionally be in the\n * DOM tree and must fulfill it's conditions.\n *\n * @internal\n */\nexport function isHTMLHidden(node: HtmlElement): boolean;\nexport function isHTMLHidden(node: HtmlElement, details: true): IsHiddenResult;\nexport function isHTMLHidden(node: HtmlElement, details?: true): boolean | IsHiddenResult {\n\tconst cached = node.cacheGet(HTML_HIDDEN_CACHE);\n\tif (cached) {\n\t\treturn details ? cached : cached.byParent || cached.bySelf;\n\t}\n\tconst result = node.cacheSet(HTML_HIDDEN_CACHE, isHTMLHiddenImpl(node));\n\treturn details ? result : result.byParent || result.bySelf;\n}\n\nfunction isInertImpl(node: HtmlElement): IsHiddenResult {\n\tconst getInertAttr = (node: HtmlElement): boolean => {\n\t\tconst inert = node.getAttribute(\"inert\");\n\t\treturn Boolean(inert?.isStatic);\n\t};\n\treturn {\n\t\tbyParent: node.parent ? isInert(node.parent) : false,\n\t\tbySelf: getInertAttr(node),\n\t};\n}\n\n/**\n * Tests if this element or an ancestor have `inert` attribute.\n *\n * Dynamic values yields `false` since the element will conditionally be in the\n * DOM tree and must fulfill it's conditions.\n *\n * @internal\n */\nexport function isInert(node: HtmlElement): boolean;\nexport function isInert(node: HtmlElement, details: true): IsInertResult;\nexport function isInert(node: HtmlElement, details?: true): boolean | IsInertResult {\n\tconst cached = node.cacheGet(INERT_CACHE);\n\tif (cached) {\n\t\treturn details ? cached : cached.byParent || cached.bySelf;\n\t}\n\tconst result = node.cacheSet(INERT_CACHE, isInertImpl(node));\n\treturn details ? result : result.byParent || result.bySelf;\n}\n\nfunction isStyleHiddenImpl(node: HtmlElement): boolean {\n\tconst getStyleAttr = (node: HtmlElement): boolean => {\n\t\tconst style = node.getAttribute(\"style\");\n\t\tconst { display, visibility } = parseCssDeclaration(style?.value);\n\t\treturn display === \"none\" || visibility === \"hidden\";\n\t};\n\tconst byParent = node.parent ? isStyleHidden(node.parent) : false;\n\tconst bySelf = getStyleAttr(node);\n\treturn byParent || bySelf;\n}\n\n/**\n * Tests if this element or an ancestor have `hidden` attribute.\n *\n * Dynamic values yields `false` since the element will conditionally be in the\n * DOM tree and must fulfill it's conditions.\n *\n * @internal\n */\nexport function isStyleHidden(node: HtmlElement): boolean {\n\tconst cached = node.cacheGet(STYLE_HIDDEN_CACHE);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\treturn node.cacheSet(STYLE_HIDDEN_CACHE, isStyleHiddenImpl(node));\n}\n\n/**\n * Tests if this element has `role=\"presentation\"` or `role=\"none\"`.\n *\n * Dynamic values yields `false` just as if the attribute wasn't present.\n */\nexport function isPresentation(node: HtmlElement): boolean {\n\tif (node.cacheExists(ROLE_PRESENTATION_CACHE)) {\n\t\treturn Boolean(node.cacheGet(ROLE_PRESENTATION_CACHE));\n\t}\n\n\t/* interactive elements ignores `role=\"presentation\"` */\n\tconst meta = node.meta;\n\tif (meta?.interactive) {\n\t\treturn node.cacheSet(ROLE_PRESENTATION_CACHE, false);\n\t}\n\n\t/* focusable elements ignores `role=\"presentation\"` */\n\tconst tabindex = node.getAttribute(\"tabindex\");\n\tif (tabindex) {\n\t\treturn node.cacheSet(ROLE_PRESENTATION_CACHE, false);\n\t}\n\n\tconst role = node.getAttribute(\"role\");\n\tif (role && (role.value === \"presentation\" || role.value === \"none\")) {\n\t\treturn node.cacheSet(ROLE_PRESENTATION_CACHE, true);\n\t} else {\n\t\treturn node.cacheSet(ROLE_PRESENTATION_CACHE, false);\n\t}\n}\n","import { type HtmlElement, type TextNode, isElementNode, isTextNode } from \"../../dom\";\nimport { isAriaHidden, isHTMLHidden } from \"./a11y\";\n\nconst cachePrefix = classifyNodeText.name;\nconst HTML_CACHE_KEY = Symbol(`${cachePrefix}|html`);\nconst A11Y_CACHE_KEY = Symbol(`${cachePrefix}|a11y`);\nconst IGNORE_HIDDEN_ROOT_HTML_CACHE_KEY = Symbol(`${cachePrefix}|html|ignore-hidden-root`);\nconst IGNORE_HIDDEN_ROOT_A11Y_CACHE_KEY = Symbol(`${cachePrefix}|a11y|ignore-hidden-root`);\n\ntype CACHE_KEY =\n\t| typeof HTML_CACHE_KEY\n\t| typeof A11Y_CACHE_KEY\n\t| typeof IGNORE_HIDDEN_ROOT_HTML_CACHE_KEY\n\t| typeof IGNORE_HIDDEN_ROOT_A11Y_CACHE_KEY;\n\n/**\n * @public\n */\nexport enum TextClassification {\n\tEMPTY_TEXT,\n\tDYNAMIC_TEXT,\n\tSTATIC_TEXT,\n}\n\n/**\n * @public\n */\nexport interface TextClassificationOptions {\n\t/** If `true` only accessible text is considered (default false) */\n\taccessible?: boolean;\n\n\t/** If `true` the `hidden` and `aria-hidden` attribute is ignored on the root\n\t * (and parents) elements (default false) */\n\tignoreHiddenRoot?: boolean;\n}\n\ndeclare module \"../../dom/cache\" {\n\texport interface DOMNodeCache {\n\t\t[HTML_CACHE_KEY]: TextClassification;\n\t\t[A11Y_CACHE_KEY]: TextClassification;\n\t\t[IGNORE_HIDDEN_ROOT_HTML_CACHE_KEY]: TextClassification;\n\t\t[IGNORE_HIDDEN_ROOT_A11Y_CACHE_KEY]: TextClassification;\n\t}\n}\n\n/**\n * @internal\n */\nexport function getCachekey(options: TextClassificationOptions): CACHE_KEY {\n\tconst { accessible = false, ignoreHiddenRoot = false } = options;\n\tif (accessible && ignoreHiddenRoot) {\n\t\treturn IGNORE_HIDDEN_ROOT_A11Y_CACHE_KEY;\n\t} else if (ignoreHiddenRoot) {\n\t\treturn IGNORE_HIDDEN_ROOT_HTML_CACHE_KEY;\n\t} else if (accessible) {\n\t\treturn A11Y_CACHE_KEY;\n\t} else {\n\t\treturn HTML_CACHE_KEY;\n\t}\n}\n\n/* While I cannot find a reference about this in the standard the <select>\n * element kinda acts as if there is no text content, most particularly it\n * doesn't receive and accessible name. The `.textContent` property does\n * however include the <option> childrens text. But for the sake of the\n * validator it is probably best if the classification acts as if there is no\n * text as I think that is what is expected of the return values. Might have\n * to revisit this at some point or if someone could clarify what section of\n * the standard deals with this. */\nfunction isSpecialEmpty(node: HtmlElement): boolean {\n\treturn node.is(\"select\") || node.is(\"textarea\");\n}\n\n/**\n * Checks text content of an element.\n *\n * Any text is considered including text from descendant elements. Whitespace is\n * ignored.\n *\n * If any text is dynamic `TextClassification.DYNAMIC_TEXT` is returned.\n *\n * @public\n */\nexport function classifyNodeText(\n\tnode: HtmlElement,\n\toptions: TextClassificationOptions = {},\n): TextClassification {\n\tconst { accessible = false, ignoreHiddenRoot = false } = options;\n\tconst cacheKey = getCachekey(options);\n\n\tif (node.cacheExists(cacheKey)) {\n\t\treturn node.cacheGet(cacheKey)!; // eslint-disable-line @typescript-eslint/no-non-null-assertion -- has/get combo\n\t}\n\n\tif (!ignoreHiddenRoot && isHTMLHidden(node)) {\n\t\treturn node.cacheSet(cacheKey, TextClassification.EMPTY_TEXT);\n\t}\n\n\tif (!ignoreHiddenRoot && accessible && isAriaHidden(node)) {\n\t\treturn node.cacheSet(cacheKey, TextClassification.EMPTY_TEXT);\n\t}\n\n\tif (isSpecialEmpty(node)) {\n\t\treturn node.cacheSet(cacheKey, TextClassification.EMPTY_TEXT);\n\t}\n\n\tconst text = findTextNodes(node, {\n\t\t...options,\n\t\tignoreHiddenRoot: false,\n\t});\n\n\t/* if any text is dynamic classify as dynamic */\n\tif (text.some((cur) => cur.isDynamic)) {\n\t\treturn node.cacheSet(cacheKey, TextClassification.DYNAMIC_TEXT);\n\t}\n\n\t/* if any text has non-whitespace character classify as static */\n\tif (text.some((cur) => cur.textContent.match(/\\S/) !== null)) {\n\t\treturn node.cacheSet(cacheKey, TextClassification.STATIC_TEXT);\n\t}\n\n\t/* default to empty */\n\treturn node.cacheSet(cacheKey, TextClassification.EMPTY_TEXT);\n}\n\nfunction findTextNodes(node: HtmlElement, options: TextClassificationOptions): TextNode[] {\n\tconst { accessible = false } = options;\n\tlet text: TextNode[] = [];\n\tfor (const child of node.childNodes) {\n\t\tif (isTextNode(child)) {\n\t\t\ttext.push(child);\n\t\t} else if (isElementNode(child)) {\n\t\t\tif (isHTMLHidden(child, true).bySelf) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (accessible && isAriaHidden(child, true).bySelf) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttext = text.concat(findTextNodes(child, options));\n\t\t}\n\t}\n\treturn text;\n}\n","import { type HtmlElement } from \"../../dom\";\n\nexport function hasAltText(image: HtmlElement): boolean {\n\tconst alt = image.getAttribute(\"alt\");\n\n\t/* missing attribute */\n\tif (!alt) {\n\t\treturn false;\n\t}\n\n\t/* (incorrectly) set as boolean value */\n\tif (alt.value === null) {\n\t\treturn false;\n\t}\n\n\treturn alt.isDynamic || alt.value.toString() !== \"\";\n}\n","import { type HtmlElement } from \"../../dom\";\n\nexport function hasAriaLabel(node: HtmlElement): boolean {\n\tconst label = node.getAttribute(\"aria-label\");\n\n\t/* missing attribute */\n\tif (!label) {\n\t\treturn false;\n\t}\n\n\t/* (incorrectly) set as boolean value */\n\tif (label.value === null) {\n\t\treturn false;\n\t}\n\n\treturn label.isDynamic || label.value.toString() !== \"\";\n}\n","/**\n * Partition an array to two new lists based on the result of a\n * predicate. Similar to `Array.filter` but returns both matching and\n * non-matching in the same call.\n *\n * Elements matching the predicate is placed in the first array and elements not\n * matching is placed in the second.\n *\n * @public\n * @param values - The array of values to partition.\n * @param predicate - A predicate function taking a single element and returning\n * a boolean.\n * @returns - Two arrays where the first contains all elements where the\n * predicate matched and second contains the rest of the elements.\n */\nexport function partition<T>(\n\tvalues: T[],\n\tpredicate: (value: T, index: number, values: T[]) => boolean,\n): [matching: T[], nonmatching: T[]] {\n\tconst initial: [T[], T[]] = [[], []];\n\treturn values.reduce((accumulator, value, index) => {\n\t\tconst match = predicate(value, index, values);\n\t\taccumulator[match ? 0 : 1].push(value);\n\t\treturn accumulator;\n\t}, initial);\n}\n","import Ajv, { type ErrorObject, type SchemaObject, type ValidateFunction } from \"ajv\";\nimport ajvSchemaDraft from \"ajv/lib/refs/json-schema-draft-06.json\";\nimport { type ConfigData } from \"./config/config-data\";\nimport { Severity } from \"./config/severity\";\nimport { type Location } from \"./context\";\nimport { type DOMNode } from \"./dom\";\nimport { type RuleBlocker } from \"./engine/rule-blocker\";\nimport { type Event, type ListenEventMap } from \"./event\";\nimport { type Parser } from \"./parser\";\nimport { type Reporter } from \"./reporter\";\nimport { type MetaTable, type MetaLookupableProperty, type MetaElement } from \"./meta\";\nimport { SchemaValidationError } from \"./error\";\nimport { interpolate } from \"./utils/interpolate\";\nimport { type IncludeExcludeOptions, isKeywordIgnored } from \"./rules/helper\";\nimport { getRuleUrl } from \"./utils/get-rule-url.mjs\";\n\nexport { type SchemaObject } from \"ajv\";\n\nconst remapEvents: Record<string, string> = {\n\t\"tag:open\": \"tag:start\",\n\t\"tag:close\": \"tag:end\",\n};\n\nconst ajv = new Ajv({ strict: true, strictTuples: true, strictTypes: true });\najv.addMetaSchema(ajvSchemaDraft);\n\n/**\n * @public\n */\nexport interface ErrorDescriptor<ContextType> {\n\tnode: DOMNode | null;\n\tmessage: string;\n\tlocation?: Location | null | undefined;\n\tcontext?: ContextType;\n}\n\n/**\n * @public\n */\nexport interface RuleDocumentation {\n\tdescription: string;\n\turl?: string;\n}\n\n/**\n * @public\n */\nexport interface RuleConstructor<T, U> {\n\tnew (options?: any): Rule<T, U>;\n\tschema(): SchemaObject | null | undefined;\n}\n\n/**\n * Get (cached) schema validator for rule options.\n *\n * @param ruleId - Rule ID used as key for schema lookups.\n * @param properties - Uncompiled schema.\n */\nfunction getSchemaValidator(ruleId: string, properties: SchemaObject): ValidateFunction {\n\tconst $id = `rule/${ruleId}`;\n\n\tconst cached = ajv.getSchema($id);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\tconst schema = {\n\t\t$id,\n\t\ttype: \"object\",\n\t\tadditionalProperties: false,\n\t\tproperties,\n\t};\n\n\treturn ajv.compile(schema);\n}\n\nfunction isErrorDescriptor<T>(\n\tvalue:\n\t\t| [ErrorDescriptor<T>]\n\t\t| [DOMNode | null, string, (Location | null | undefined)?]\n\t\t| [DOMNode | null, string, Location | null | undefined, T],\n): value is [ErrorDescriptor<T>] {\n\treturn Boolean(value[0] && (value[0] as unknown as Record<string, unknown>).message);\n}\n\nfunction unpackErrorDescriptor<T>(\n\tvalue:\n\t\t| [ErrorDescriptor<T>]\n\t\t| [DOMNode | null, string, (Location | null | undefined)?]\n\t\t| [DOMNode | null, string, Location | null | undefined, T],\n): ErrorDescriptor<T> {\n\tif (isErrorDescriptor(value)) {\n\t\treturn value[0];\n\t} else {\n\t\tconst [node, message, location, context] = value;\n\t\treturn { node, message, location, context };\n\t}\n}\n\n/**\n * @public\n */\nexport abstract class Rule<ContextType = void, OptionsType = void> {\n\tprivate reporter: Reporter;\n\tprivate parser: Parser;\n\tprivate meta: MetaTable;\n\tprivate enabled: boolean; // rule enabled/disabled, irregardless of severity\n\tprivate blockers: RuleBlocker[];\n\tprivate severity: Severity; // rule severity\n\tprivate event: Event;\n\n\t/**\n\t * Rule name. Defaults to filename without extension but can be overwritten by\n\t * subclasses.\n\t */\n\tpublic name: string;\n\n\t/**\n\t * Rule options.\n\t */\n\tpublic readonly options: OptionsType;\n\n\tpublic constructor(options: OptionsType) {\n\t\t/* faux initialization, properly initialized by init(). This is to keep TS happy without adding null-checks everywhere */\n\t\tthis.reporter = null as unknown as Reporter;\n\t\tthis.parser = null as unknown as Parser;\n\t\tthis.meta = null as unknown as MetaTable;\n\t\tthis.event = null as unknown as Event;\n\n\t\tthis.options = options;\n\t\tthis.enabled = true;\n\t\tthis.blockers = [];\n\t\tthis.severity = Severity.DISABLED;\n\t\tthis.name = \"\";\n\t}\n\n\tpublic getSeverity(): Severity {\n\t\treturn this.severity;\n\t}\n\n\tpublic setServerity(severity: Severity): void {\n\t\tthis.severity = severity;\n\t}\n\n\t/**\n\t * Block this rule from generating errors. Pass in an id generated by\n\t * `createBlocker`. Can be unblocked by {@link Rule.unblock}.\n\t *\n\t * A blocked rule is similar to disabling it but it will still receive parser\n\t * events. A list of all blockers is passed to the `rule:error` event.\n\t *\n\t * @internal\n\t */\n\tpublic block(id: RuleBlocker): void {\n\t\tthis.blockers.push(id);\n\t}\n\n\t/**\n\t * Unblock a rule previously blocked by {@link Rule.block}.\n\t *\n\t * @internal\n\t */\n\tpublic unblock(id: RuleBlocker): void {\n\t\tthis.blockers = this.blockers.filter((it) => it !== id);\n\t}\n\n\tpublic setEnabled(enabled: boolean): void {\n\t\tthis.enabled = enabled;\n\t}\n\n\t/**\n\t * Returns `true` if rule is deprecated.\n\t *\n\t * Overridden by subclasses.\n\t */\n\tpublic get deprecated(): boolean {\n\t\treturn false;\n\t}\n\n\t/**\n\t * Test if rule is enabled.\n\t *\n\t * To be considered enabled the enabled flag must be true and the severity at\n\t * least warning.\n\t *\n\t * @internal\n\t */\n\tpublic isEnabled(node?: DOMNode | null): boolean {\n\t\treturn this.enabled && this.severity >= Severity.WARN && (!node || node.ruleEnabled(this.name));\n\t}\n\n\t/**\n\t * Test if rule is enabled.\n\t *\n\t * To be considered enabled the enabled flag must be true and the severity at\n\t * least warning.\n\t *\n\t * @internal\n\t */\n\tpublic isBlocked(node?: DOMNode | null): boolean {\n\t\tif (this.blockers.length > 0) {\n\t\t\treturn true;\n\t\t}\n\t\tif (node && node.ruleBlockers(this.name).length > 0) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Get a list of all blockers currently active this rule.\n\t *\n\t * @internal\n\t */\n\tpublic getBlockers(node?: DOMNode | null): RuleBlocker[] {\n\t\treturn [...this.blockers, ...(node ? node.ruleBlockers(this.name) : [])];\n\t}\n\n\t/**\n\t * Check if keyword is being ignored by the current rule configuration.\n\t *\n\t * This method requires the [[RuleOption]] type to include two properties:\n\t *\n\t * - include: string[] | null\n\t * - exclude: string[] | null\n\t *\n\t * This methods checks if the given keyword is included by \"include\" but not\n\t * excluded by \"exclude\". If any property is unset it is skipped by the\n\t * condition. Usually the user would use either one but not both but there is\n\t * no limitation to use both but the keyword must satisfy both conditions. If\n\t * either condition fails `true` is returned.\n\t *\n\t * For instance, given `{ include: [\"foo\"] }` the keyword `\"foo\"` would match\n\t * but not `\"bar\"`.\n\t *\n\t * Similarly, given `{ exclude: [\"foo\"] }` the keyword `\"bar\"` would match but\n\t * not `\"foo\"`.\n\t *\n\t * @param keyword - Keyword to match against `include` and `exclude` options.\n\t * @param matcher - Optional function to compare items with.\n\t * @returns `true` if keyword is not present in `include` or is present in\n\t * `exclude`.\n\t */\n\tpublic isKeywordIgnored<T extends IncludeExcludeOptions>(\n\t\tthis: { options: T },\n\t\tkeyword: string,\n\t\tmatcher: (list: string[], it: string) => boolean = (list, it) => list.includes(it),\n\t): boolean {\n\t\treturn isKeywordIgnored(this.options, keyword, matcher);\n\t}\n\n\t/**\n\t * Get [[MetaElement]] for the given tag. If no specific metadata is present\n\t * the global metadata is returned or null if no global is present.\n\t *\n\t * @public\n\t * @returns A shallow copy of metadata.\n\t */\n\tpublic getMetaFor(tagName: string): MetaElement | null {\n\t\treturn this.meta.getMetaFor(tagName);\n\t}\n\n\t/**\n\t * Find all tags which has enabled given property.\n\t */\n\tpublic getTagsWithProperty(propName: MetaLookupableProperty): string[] {\n\t\treturn this.meta.getTagsWithProperty(propName);\n\t}\n\n\t/**\n\t * Find tag matching tagName or inheriting from it.\n\t */\n\tpublic getTagsDerivedFrom(tagName: string): string[] {\n\t\treturn this.meta.getTagsDerivedFrom(tagName);\n\t}\n\n\t/**\n\t * JSON schema for rule options.\n\t *\n\t * Rules should override this to return an object with JSON schema to validate\n\t * rule options. If `null` or `undefined` is returned no validation is\n\t * performed.\n\t */\n\tpublic static schema(): SchemaObject | null | undefined {\n\t\treturn null;\n\t}\n\n\t/**\n\t * Report a new error.\n\t *\n\t * Rule must be enabled both globally and on the specific node for this to\n\t * have any effect.\n\t */\n\tpublic report(error: ErrorDescriptor<ContextType>): void;\n\tpublic report(\n\t\tnode: DOMNode | null,\n\t\tmessage: string,\n\t\tlocation?: Location | null | undefined,\n\t): void;\n\tpublic report(\n\t\tnode: DOMNode | null,\n\t\tmessage: string,\n\t\tlocation: Location | null | undefined,\n\t\tcontext: ContextType,\n\t): void;\n\tpublic report(\n\t\t...args:\n\t\t\t| [ErrorDescriptor<ContextType>]\n\t\t\t| [DOMNode | null, string]\n\t\t\t| [DOMNode | null, string, (Location | null | undefined)?]\n\t\t\t| [DOMNode | null, string, Location | null | undefined, ContextType]\n\t): void {\n\t\tconst { node, message, location, context } = unpackErrorDescriptor(args);\n\t\tconst enabled = this.isEnabled(node);\n\t\tconst blocked = this.isBlocked(node);\n\t\tconst where = this.findLocation({ node, location, event: this.event });\n\t\tthis.parser.trigger(\"rule:error\", {\n\t\t\tlocation: where,\n\t\t\truleId: this.name,\n\t\t\tenabled,\n\t\t\tblockers: this.getBlockers(node),\n\t\t});\n\t\tif (enabled && !blocked) {\n\t\t\tconst interpolated = interpolate(message, context ?? {});\n\t\t\tthis.reporter.add(this, interpolated, this.severity, node, where, context);\n\t\t}\n\t}\n\n\tprivate findLocation(src: {\n\t\tnode: DOMNode | null;\n\t\tlocation?: Location | null;\n\t\tevent: Event | null;\n\t}): Location {\n\t\tif (src.location) {\n\t\t\treturn src.location;\n\t\t}\n\t\tif (src.event?.location) {\n\t\t\treturn src.event.location;\n\t\t}\n\t\tif (src.node?.location) {\n\t\t\treturn src.node.location;\n\t\t}\n\t\treturn {} as Location;\n\t}\n\n\t/**\n\t * Listen for events.\n\t *\n\t * Adding listeners can be done even if the rule is disabled but for the\n\t * events to be delivered the rule must be enabled.\n\t *\n\t * If the optional filter callback is used it must be a function taking an\n\t * event of the same type as the listener. The filter is called before the\n\t * listener and if the filter returns false the event is discarded.\n\t *\n\t * @param event - Event name\n\t * @param filter - Optional filter function. Callback is only called if filter functions return true.\n\t * @param callback - Callback to handle event.\n\t * @returns A function to unregister the listener\n\t */\n\tpublic on<K extends keyof ListenEventMap>(\n\t\tevent: K,\n\t\tcallback: (event: ListenEventMap[K]) => void,\n\t): () => void;\n\tpublic on<K extends keyof ListenEventMap>(\n\t\tevent: K,\n\t\tfilter: (event: ListenEventMap[K]) => boolean,\n\t\tcallback: (event: ListenEventMap[K]) => void,\n\t): () => void;\n\tpublic on(\n\t\tevent: string,\n\t\t...args: [(event: Event) => void] | [(event: Event) => boolean, (event: Event) => void]\n\t): () => void {\n\t\t/* handle deprecated aliases */\n\t\tconst remap = remapEvents[event];\n\t\tif (remap) {\n\t\t\tevent = remap;\n\t\t}\n\n\t\tconst callback = args.pop() as (event: Event) => void;\n\t\tconst filter = (args.pop() as ((event: Event) => boolean) | undefined) ?? (() => true);\n\n\t\treturn this.parser.on(event, (_event: string, data: Event) => {\n\t\t\tif (this.isEnabled() && filter(data)) {\n\t\t\t\tthis.event = data;\n\t\t\t\tcallback(data);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Called by [[Engine]] when initializing the rule.\n\t *\n\t * Do not override this, use the `setup` callback instead.\n\t *\n\t * @internal\n\t */\n\tpublic init(parser: Parser, reporter: Reporter, severity: number, meta: MetaTable): void {\n\t\tthis.parser = parser;\n\t\tthis.reporter = reporter;\n\t\tthis.severity = severity;\n\t\tthis.meta = meta;\n\t}\n\n\t/**\n\t * Validate rule options against schema. Throws error if object does not validate.\n\t *\n\t * For rules without schema this function does nothing.\n\t *\n\t * @throws {@link SchemaValidationError}\n\t * Thrown when provided options does not validate against rule schema.\n\t *\n\t * @param cls - Rule class (constructor)\n\t * @param ruleId - Rule identifier\n\t * @param jsonPath - JSON path from which [[options]] can be found in [[config]]\n\t * @param options - User configured options to be validated\n\t * @param filename - Filename from which options originated\n\t * @param config - Configuration from which options originated\n\t *\n\t * @internal\n\t */\n\tpublic static validateOptions(\n\t\tcls: RuleConstructor<unknown, unknown> | undefined,\n\t\truleId: string,\n\t\tjsonPath: string,\n\t\toptions: unknown,\n\t\tfilename: string | null,\n\t\tconfig: ConfigData,\n\t): void {\n\t\tif (!cls) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst schema = cls.schema();\n\t\tif (!schema) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isValid = getSchemaValidator(ruleId, schema);\n\t\tif (!isValid(options)) {\n\t\t\t/* istanbul ignore next: it is always set when validation fails */\n\t\t\tconst errors = isValid.errors ?? [];\n\t\t\tconst mapped = errors.map((error: ErrorObject) => {\n\t\t\t\terror.instancePath = `${jsonPath}${error.instancePath}`;\n\t\t\t\treturn error;\n\t\t\t});\n\t\t\tthrow new SchemaValidationError(filename, `Rule configuration error`, config, schema, mapped);\n\t\t}\n\t}\n\n\t/**\n\t * Rule setup callback.\n\t *\n\t * Override this to provide rule setup code.\n\t */\n\tpublic abstract setup(): void;\n\n\t/**\n\t * Rule documentation callback.\n\t *\n\t * Called when requesting additional documentation for a rule. Some rules\n\t * provide additional context to provide context-aware suggestions.\n\t *\n\t * @public\n\t * @virtual\n\t * @param context - Error context given by a reported error.\n\t * @returns Rule documentation and url with additional details or `null` if no\n\t * additional documentation is available.\n\t */\n\t/* eslint-disable-next-line @typescript-eslint/no-unused-vars -- technical debt, prototype should be moved to interface */\n\tpublic documentation(context: ContextType): RuleDocumentation | null {\n\t\treturn null;\n\t}\n}\n\n/**\n * @internal\n */\nexport function ruleDocumentationUrl(filename: string): string {\n\treturn getRuleUrl(filename);\n}\n","import { DynamicValue } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport const enum Style {\n\tEXTERNAL = \"external\",\n\tRELATIVE_BASE = \"relative-base\",\n\tRELATIVE_PATH = \"relative-path\",\n\tABSOLUTE = \"absolute\",\n\tANCHOR = \"anchor\",\n}\n\n/**\n * @internal\n */\nexport interface AllowList<T> {\n\tinclude: T[] | null;\n\texclude: T[] | null;\n}\n\ninterface RuleOptions {\n\tallowExternal: boolean | AllowList<string>;\n\tallowRelative: boolean | AllowList<string>;\n\tallowAbsolute: boolean | AllowList<string>;\n\tallowBase: boolean;\n}\n\nconst defaults: RuleOptions = {\n\tallowExternal: true,\n\tallowRelative: true,\n\tallowAbsolute: true,\n\tallowBase: true,\n};\n\nconst mapping: Record<string, string> = {\n\ta: \"href\",\n\timg: \"src\",\n\tlink: \"href\",\n\tscript: \"src\",\n};\n\nconst description: Record<Style, string | null> = {\n\t[Style.EXTERNAL]: \"External links are not allowed by current configuration.\",\n\t[Style.RELATIVE_BASE]: \"Links relative to <base> are not allowed by current configuration.\",\n\t[Style.RELATIVE_PATH]: \"Relative links are not allowed by current configuration.\",\n\t[Style.ABSOLUTE]: \"Absolute links are not allowed by current configuration.\",\n\t[Style.ANCHOR]: null,\n};\n\nfunction parseAllow(value: boolean | AllowList<string>): boolean | AllowList<RegExp> {\n\tif (typeof value === \"boolean\") {\n\t\treturn value;\n\t}\n\treturn {\n\t\t/* eslint-disable security/detect-non-literal-regexp -- expected to be regexp */\n\t\tinclude: value.include ? value.include.map((it) => new RegExp(it)) : null,\n\t\texclude: value.exclude ? value.exclude.map((it) => new RegExp(it)) : null,\n\t\t/* eslint-enable security/detect-non-literal-regexp */\n\t};\n}\n\n/**\n * @internal\n */\nexport function matchList(value: string, list: AllowList<RegExp>): boolean {\n\tif (list.include && !list.include.some((it) => it.test(value))) {\n\t\treturn false;\n\t}\n\tif (list.exclude?.some((it) => it.test(value))) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nexport default class AllowedLinks extends Rule<Style, RuleOptions> {\n\tprotected allowExternal: boolean | AllowList<RegExp>;\n\tprotected allowRelative: boolean | AllowList<RegExp>;\n\tprotected allowAbsolute: boolean | AllowList<RegExp>;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.allowExternal = parseAllow(this.options.allowExternal);\n\t\tthis.allowRelative = parseAllow(this.options.allowRelative);\n\t\tthis.allowAbsolute = parseAllow(this.options.allowAbsolute);\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\tconst booleanOrObject = {\n\t\t\tanyOf: [\n\t\t\t\t{ type: \"boolean\" },\n\t\t\t\t{\n\t\t\t\t\ttype: \"object\",\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tinclude: {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\titems: { type: \"string\" },\n\t\t\t\t\t\t},\n\t\t\t\t\t\texclude: {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\titems: { type: \"string\" },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t\treturn {\n\t\t\tallowExternal: { ...booleanOrObject },\n\t\t\tallowRelative: { ...booleanOrObject },\n\t\t\tallowAbsolute: { ...booleanOrObject },\n\t\t\tallowBase: { type: \"boolean\" },\n\t\t};\n\t}\n\n\tpublic documentation(context: Style): RuleDocumentation {\n\t\tconst message =\n\t\t\tdescription[context] ?? \"This link type is not allowed by current configuration\";\n\t\treturn {\n\t\t\tdescription: message,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tif (!event.value || !this.isRelevant(event)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst link = event.value.toString();\n\t\t\tconst style = this.getStyle(link);\n\n\t\t\tswitch (style) {\n\t\t\t\tcase Style.ANCHOR:\n\t\t\t\t\t/* anchor links are always allowed by this rule */\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase Style.ABSOLUTE:\n\t\t\t\t\tthis.handleAbsolute(link, event, style);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase Style.EXTERNAL:\n\t\t\t\t\tthis.handleExternal(link, event, style);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase Style.RELATIVE_BASE:\n\t\t\t\t\tthis.handleRelativeBase(link, event, style);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase Style.RELATIVE_PATH:\n\t\t\t\t\tthis.handleRelativePath(link, event, style);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected isRelevant(event: AttributeEvent): boolean {\n\t\tconst { target, key, value } = event;\n\n\t\t/* don't check links with dynamic values */\n\t\tif (value instanceof DynamicValue) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst attr = mapping[target.tagName];\n\t\treturn Boolean(attr && attr === key);\n\t}\n\n\tprotected getStyle(value: string): Style {\n\t\t/* http://example.net or //example.net */\n\t\tif (value.match(/^([a-z]+:)?\\/\\//g)) {\n\t\t\treturn Style.EXTERNAL;\n\t\t}\n\t\tswitch (value[0]) {\n\t\t\t/* /foo/bar */\n\t\t\tcase \"/\":\n\t\t\t\treturn Style.ABSOLUTE;\n\t\t\t/* ../foo/bar */\n\t\t\tcase \".\":\n\t\t\t\treturn Style.RELATIVE_PATH;\n\t\t\t/* #foo */\n\t\t\tcase \"#\":\n\t\t\t\treturn Style.ANCHOR;\n\t\t\t/* foo/bar */\n\t\t\tdefault:\n\t\t\t\treturn Style.RELATIVE_BASE;\n\t\t}\n\t}\n\n\tprotected handleAbsolute(target: string, event: AttributeEvent, style: Style): void {\n\t\tconst { allowAbsolute } = this;\n\t\tif (allowAbsolute === true) {\n\t\t\treturn;\n\t\t} else if (allowAbsolute === false) {\n\t\t\tthis.report(\n\t\t\t\tevent.target,\n\t\t\t\t\"Link destination must not be absolute url\",\n\t\t\t\tevent.valueLocation,\n\t\t\t\tstyle,\n\t\t\t);\n\t\t} else if (!matchList(target, allowAbsolute)) {\n\t\t\tthis.report(\n\t\t\t\tevent.target,\n\t\t\t\t\"Absolute link to this destination is not allowed by current configuration\",\n\t\t\t\tevent.valueLocation,\n\t\t\t\tstyle,\n\t\t\t);\n\t\t}\n\t}\n\n\tprotected handleExternal(target: string, event: AttributeEvent, style: Style): void {\n\t\tconst { allowExternal } = this;\n\t\tif (allowExternal === true) {\n\t\t\treturn;\n\t\t} else if (allowExternal === false) {\n\t\t\tthis.report(\n\t\t\t\tevent.target,\n\t\t\t\t\"Link destination must not be external url\",\n\t\t\t\tevent.valueLocation,\n\t\t\t\tstyle,\n\t\t\t);\n\t\t} else if (!matchList(target, allowExternal)) {\n\t\t\tthis.report(\n\t\t\t\tevent.target,\n\t\t\t\t\"External link to this destination is not allowed by current configuration\",\n\t\t\t\tevent.valueLocation,\n\t\t\t\tstyle,\n\t\t\t);\n\t\t}\n\t}\n\n\tprotected handleRelativePath(target: string, event: AttributeEvent, style: Style): boolean {\n\t\tconst { allowRelative } = this;\n\t\tif (allowRelative === true) {\n\t\t\treturn false;\n\t\t} else if (allowRelative === false) {\n\t\t\tthis.report(\n\t\t\t\tevent.target,\n\t\t\t\t\"Link destination must not be relative url\",\n\t\t\t\tevent.valueLocation,\n\t\t\t\tstyle,\n\t\t\t);\n\t\t\treturn true;\n\t\t} else if (!matchList(target, allowRelative)) {\n\t\t\tthis.report(\n\t\t\t\tevent.target,\n\t\t\t\t\"Relative link to this destination is not allowed by current configuration\",\n\t\t\t\tevent.valueLocation,\n\t\t\t\tstyle,\n\t\t\t);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate handleRelativeBase(target: string, event: AttributeEvent, style: Style): void {\n\t\tconst { allowBase } = this.options;\n\t\tif (this.handleRelativePath(target, event, style)) {\n\t\t\treturn;\n\t\t} else if (!allowBase) {\n\t\t\tthis.report(\n\t\t\t\tevent.target,\n\t\t\t\t\"Relative links must be relative to current folder\",\n\t\t\t\tevent.valueLocation,\n\t\t\t\tstyle,\n\t\t\t);\n\t\t}\n\t}\n}\n","import { isDynamicAttribute, type HtmlElement } from \"../dom\";\nimport { type ElementReadyEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport enum RuleContext {\n\tMISSING_ALT = \"missing-alt\",\n\tMISSING_HREF = \"missing-href\",\n}\n\ninterface RuleOptions {\n\taccessible: boolean;\n}\n\nconst defaults: RuleOptions = {\n\taccessible: true,\n};\n\nfunction findByTarget(target: string | null, siblings: HtmlElement[]): HtmlElement[] {\n\treturn siblings.filter((it) => it.getAttributeValue(\"href\") === target);\n}\n\nfunction getAltText(node: HtmlElement): string | null {\n\treturn node.getAttributeValue(\"alt\");\n}\n\nfunction getDescription(context: RuleContext): string[] {\n\tswitch (context) {\n\t\tcase RuleContext.MISSING_ALT:\n\t\t\treturn [\n\t\t\t\t\"The `alt` attribute must be set (and not empty) when the `href` attribute is present on an `<area>` element.\",\n\t\t\t\t\"\",\n\t\t\t\t\"The attribute is used to provide an alternative text description for the area of the image map.\",\n\t\t\t\t\"The text should describe the purpose of area and the resource referenced by the `href` attribute.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Either add the `alt` attribute or remove the `href` attribute.\",\n\t\t\t];\n\t\tcase RuleContext.MISSING_HREF:\n\t\t\treturn [\n\t\t\t\t\"The `alt` attribute must not be set when the `href` attribute is missing on an `<area>` element.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Either add the `href` attribute or remove the `alt` attribute.\",\n\t\t\t];\n\t}\n}\n\nexport default class AreaAlt extends Rule<RuleContext, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\taccessible: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: getDescription(context).join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"element:ready\", this.isRelevant, (event: ElementReadyEvent) => {\n\t\t\tconst { target } = event;\n\t\t\tconst siblings = target.querySelectorAll(\"area\");\n\n\t\t\tfor (const child of siblings) {\n\t\t\t\tthis.validateArea(child, siblings);\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected validateArea(area: HtmlElement, siblings: HtmlElement[]): void {\n\t\tconst { accessible } = this.options;\n\t\tconst href = area.getAttribute(\"href\");\n\t\tconst alt = area.getAttribute(\"alt\");\n\t\tif (href) {\n\t\t\tif (isDynamicAttribute(alt)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst target = area.getAttributeValue(\"href\");\n\t\t\tconst altTexts = accessible\n\t\t\t\t? [getAltText(area)]\n\t\t\t\t: findByTarget(target, siblings).map(getAltText);\n\t\t\tif (!altTexts.some(Boolean)) {\n\t\t\t\tthis.report({\n\t\t\t\t\tnode: area,\n\t\t\t\t\tmessage: `\"alt\" attribute must be set and non-empty when the \"href\" attribute is present`,\n\t\t\t\t\tlocation: alt ? alt.keyLocation : href.keyLocation,\n\t\t\t\t\tcontext: RuleContext.MISSING_ALT,\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (alt) {\n\t\t\tthis.report({\n\t\t\t\tnode: area,\n\t\t\t\tmessage: `\"alt\" attribute cannot be used unless the \"href\" attribute is present`,\n\t\t\t\tlocation: alt.keyLocation,\n\t\t\t\tcontext: RuleContext.MISSING_HREF,\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected isRelevant(this: void, event: ElementReadyEvent): boolean {\n\t\tconst { target } = event;\n\t\treturn target.is(\"map\");\n\t}\n}\n","import { type TagReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class AriaHiddenBody extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"`aria-hidden` must not be used on the `<body>` element as it makes the page inaccessible to assistive technology such as screenreaders\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:ready\", this.isRelevant, (event: TagReadyEvent) => {\n\t\t\tconst { target } = event;\n\n\t\t\tconst attr = target.getAttribute(\"aria-hidden\");\n\t\t\tif (!attr?.valueMatches(\"true\", true)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.report(target, \"aria-hidden must not be used on <body>\", attr.keyLocation);\n\t\t});\n\t}\n\n\tprotected isRelevant(this: void, event: TagReadyEvent): boolean {\n\t\treturn event.target.is(\"body\");\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type MetaAttribute, type MetaElement } from \"../meta\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { ariaNaming } from \"./helper\";\n\nexport interface RuleOptions {\n\tallowAnyNamable: boolean;\n}\n\nconst defaults: RuleOptions = {\n\tallowAnyNamable: false,\n};\n\nconst whitelisted = [\n\t\"main\",\n\t\"nav\",\n\t\"table\",\n\t\"td\",\n\t\"th\",\n\t\"aside\",\n\t\"header\",\n\t\"footer\",\n\t\"section\",\n\t\"article\",\n\t\"form\",\n\t\"img\",\n\t\"area\",\n\t\"fieldset\",\n\t\"summary\",\n\t\"figure\",\n];\n\nfunction isValidUsage(target: HtmlElement, meta: MetaElement): boolean {\n\t/* elements with explicit aria-label attribute are valid */\n\tconst explicit = meta.attributes[\"aria-label\"] as MetaAttribute | undefined;\n\tif (explicit) {\n\t\treturn true;\n\t}\n\n\t/* landmark and other whitelisted elements are valid */\n\tif (whitelisted.includes(target.tagName)) {\n\t\treturn true;\n\t}\n\n\t/* elements with role are valid, @todo check if the role is widget or landmark */\n\tif (target.hasAttribute(\"role\")) {\n\t\treturn true;\n\t}\n\n\t/* elements with tabindex (implicit interactive) are valid */\n\tif (target.hasAttribute(\"tabindex\")) {\n\t\treturn true;\n\t}\n\n\t/* interactive and labelable elements are valid */\n\tif (Boolean(meta.interactive) || Boolean(meta.labelable)) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport default class AriaLabelMisuse extends Rule<void, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\tconst valid = [\n\t\t\t\"Interactive elements\",\n\t\t\t\"Labelable elements\",\n\t\t\t\"Landmark elements\",\n\t\t\t\"Elements with roles inheriting from widget\",\n\t\t\t\"`<area>`\",\n\t\t\t\"`<form>` and `<fieldset>`\",\n\t\t\t\"`<iframe>`\",\n\t\t\t\"`<img>` and `<figure>`\",\n\t\t\t\"`<summary>`\",\n\t\t\t\"`<table>`, `<td>` and `<th>`\",\n\t\t];\n\t\tconst lines = valid.map((it) => `- ${it}\\n`).join(\"\");\n\t\treturn {\n\t\t\tdescription: `\\`aria-label\\` can only be used on:\\n\\n${lines}`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tfor (const target of document.querySelectorAll(\"[aria-label]\")) {\n\t\t\t\tthis.validateElement(target);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate validateElement(target: HtmlElement): void {\n\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- the\n\t\t * earier [aria-label] selector ensures this is always present */\n\t\tconst attr = target.getAttribute(\"aria-label\")!;\n\t\tif (!attr.value || attr.valueMatches(\"\", false)) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* ignore elements without meta */\n\t\tconst meta = target.meta;\n\t\tif (!meta) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* ignore elements which is valid usage */\n\t\tif (isValidUsage(target, meta)) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* ignore elements where naming is allowed (but not recommended) if `allowAnyNamable` is enabled */\n\t\tif (this.options.allowAnyNamable && ariaNaming(target) === \"allowed\") {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.report(target, `\"aria-label\" cannot be used on this element`, attr.keyLocation);\n\t}\n}\n","import { UserError } from \"../error\";\n\n/**\n * @public\n */\nexport class ConfigError extends UserError {\n\tpublic constructor(message: string, nested?: Error) {\n\t\tsuper(message, nested);\n\t\tError.captureStackTrace(this, ConfigError);\n\t\tthis.name = ConfigError.name;\n\t}\n}\n","import { ConfigError } from \"../../config/error\";\n\nexport type CaseStyleName = \"lowercase\" | \"uppercase\" | \"pascalcase\" | \"camelcase\";\n\ninterface Style {\n\tpattern: RegExp;\n\tname: string;\n}\n\n/**\n * Represents casing for a name, e.g. lowercase, uppercase, etc.\n */\nexport class CaseStyle {\n\tprivate styles: Style[];\n\n\t/**\n\t * @param style - Name of a valid case style.\n\t */\n\tpublic constructor(style: CaseStyleName | CaseStyleName[], ruleId: string) {\n\t\tif (!Array.isArray(style)) {\n\t\t\tstyle = [style];\n\t\t}\n\t\tif (style.length === 0) {\n\t\t\tthrow new ConfigError(`Missing style for ${ruleId} rule`);\n\t\t}\n\t\tthis.styles = this.parseStyle(style, ruleId);\n\t}\n\n\t/**\n\t * Test if a text matches this case style.\n\t */\n\tpublic match(text: string): boolean {\n\t\treturn this.styles.some((style) => text.match(style.pattern));\n\t}\n\n\tpublic get name(): string {\n\t\tconst names = this.styles.map((style) => style.name);\n\t\tswitch (this.styles.length) {\n\t\t\tcase 1:\n\t\t\t\treturn names[0];\n\t\t\tcase 2:\n\t\t\t\treturn names.join(\" or \");\n\t\t\tdefault: {\n\t\t\t\tconst last = names.slice(-1);\n\t\t\t\tconst rest = names.slice(0, -1);\n\t\t\t\treturn `${rest.join(\", \")} or ${last[0]}`;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate parseStyle(style: CaseStyleName[], ruleId: string): Style[] {\n\t\treturn style.map((cur: string): Style => {\n\t\t\tswitch (cur.toLowerCase()) {\n\t\t\t\tcase \"lowercase\":\n\t\t\t\t\treturn { pattern: /^[a-z]*$/, name: \"lowercase\" };\n\t\t\t\tcase \"uppercase\":\n\t\t\t\t\treturn { pattern: /^[A-Z]*$/, name: \"uppercase\" };\n\t\t\t\tcase \"pascalcase\":\n\t\t\t\t\treturn { pattern: /^[A-Z][A-Za-z]*$/, name: \"PascalCase\" };\n\t\t\t\tcase \"camelcase\":\n\t\t\t\t\treturn { pattern: /^[a-z][A-Za-z]*$/, name: \"camelCase\" };\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new ConfigError(`Invalid style \"${cur}\" for ${ruleId} rule`);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type SchemaObject, type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { type CaseStyleName, CaseStyle } from \"./helper/case-style\";\n\ninterface RuleOptions {\n\tstyle: CaseStyleName | CaseStyleName[];\n\tignoreForeign: boolean;\n}\n\nconst defaults: RuleOptions = {\n\tstyle: \"lowercase\",\n\tignoreForeign: true,\n};\n\nexport default class AttrCase extends Rule<void, RuleOptions> {\n\tprivate style: CaseStyle;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.style = new CaseStyle(this.options.style, \"attr-case\");\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\tconst styleEnum = [\"lowercase\", \"uppercase\", \"pascalcase\", \"camelcase\"];\n\t\treturn {\n\t\t\tignoreForeign: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t\tstyle: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\tenum: styleEnum,\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\tenum: styleEnum,\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\tconst { style } = this.options;\n\t\treturn {\n\t\t\tdescription: Array.isArray(style)\n\t\t\t\t? [`Attribute name must be in one of:`, \"\", ...style.map((it) => `- ${it}`)].join(\"\\n\")\n\t\t\t\t: `Attribute name must be in ${style}.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tif (this.isIgnored(event.target)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore case for dynamic attributes, the original attributes will be\n\t\t\t * checked instead (this prevents duplicated errors for the same source\n\t\t\t * attribute) */\n\t\t\tif (event.originalAttribute) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst letters = event.key.replace(/[^a-z]+/gi, \"\");\n\t\t\tif (this.style.match(letters)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.report({\n\t\t\t\tnode: event.target,\n\t\t\t\tmessage: `Attribute \"${event.key}\" should be ${this.style.name}`,\n\t\t\t\tlocation: event.keyLocation,\n\t\t\t});\n\t\t});\n\t}\n\n\tprotected isIgnored(node: HtmlElement): boolean {\n\t\tif (this.options.ignoreForeign) {\n\t\t\treturn Boolean(node.meta?.foreign);\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n}\n","import { type Location } from \"../context\";\n\n/**\n * @internal\n */\nexport enum TokenType {\n\tUNICODE_BOM = 1,\n\tWHITESPACE,\n\tDOCTYPE_OPEN,\n\tDOCTYPE_VALUE,\n\tDOCTYPE_CLOSE,\n\tTAG_OPEN,\n\tTAG_CLOSE,\n\tATTR_NAME,\n\tATTR_VALUE,\n\tTEXT,\n\tTEMPLATING,\n\tSCRIPT,\n\tSTYLE,\n\tCOMMENT,\n\tCONDITIONAL,\n\tDIRECTIVE,\n\tEOF,\n}\n\n/**\n * @internal\n */\nexport interface BaseToken {\n\ttype: TokenType;\n\tlocation: Location;\n}\n\n/**\n * @internal\n */\nexport interface UnicodeBOMToken extends BaseToken {\n\ttype: TokenType.UNICODE_BOM;\n\tdata: [bom: string];\n}\n\n/**\n * @internal\n */\nexport interface WhitespaceToken extends BaseToken {\n\ttype: TokenType.WHITESPACE;\n\tdata: [text: string];\n}\n\n/**\n * @internal\n */\nexport interface DoctypeOpenToken extends BaseToken {\n\ttype: TokenType.DOCTYPE_OPEN;\n\tdata: [text: string, tag: string];\n}\n\n/**\n * @internal\n */\nexport interface DoctypeValueToken extends BaseToken {\n\ttype: TokenType.DOCTYPE_VALUE;\n\tdata: [text: string];\n}\n\n/**\n * @internal\n */\nexport interface DoctypeCloseToken extends BaseToken {\n\ttype: TokenType.DOCTYPE_CLOSE;\n\tdata: [text: \">\"];\n}\n\n/**\n * @internal\n */\nexport interface TagOpenToken extends BaseToken {\n\ttype: TokenType.TAG_OPEN;\n\tdata: [text: string, close: \"/\" | \"\", tag: string];\n}\n\n/**\n * @internal\n */\nexport interface TagCloseToken extends BaseToken {\n\ttype: TokenType.TAG_CLOSE;\n\tdata: [text: \">\" | \"/>\"];\n}\n\n/**\n * @internal\n */\nexport interface AttrNameToken extends BaseToken {\n\ttype: TokenType.ATTR_NAME;\n\tdata: [text: string, name: string];\n}\n\n/**\n * @internal\n */\nexport interface AttrValueToken extends BaseToken {\n\ttype: TokenType.ATTR_VALUE;\n\tdata: [text: string, delimiter: string, value: string, quote?: '\"' | \"'\"];\n}\n\n/**\n * @internal\n */\nexport interface TextToken extends BaseToken {\n\ttype: TokenType.TEXT;\n\tdata: [text: string];\n}\n\n/**\n * @internal\n */\nexport interface TemplatingToken extends BaseToken {\n\ttype: TokenType.TEMPLATING;\n\tdata: [text: string];\n}\n\n/**\n * @internal\n */\nexport interface ScriptToken extends BaseToken {\n\ttype: TokenType.SCRIPT;\n\tdata: [text: string];\n}\n\n/**\n * @internal\n */\nexport interface StyleToken extends BaseToken {\n\ttype: TokenType.STYLE;\n\tdata: [text: string];\n}\n\n/**\n * @internal\n */\nexport interface CommentToken extends BaseToken {\n\ttype: TokenType.COMMENT;\n\tdata: [text: string, comment: string];\n}\n\n/**\n * @internal\n */\nexport interface ConditionalToken extends BaseToken {\n\ttype: TokenType.CONDITIONAL;\n\tdata: [text: string, condition: string];\n}\n\n/**\n * @internal\n */\nexport interface DirectiveToken extends BaseToken {\n\ttype: TokenType.DIRECTIVE;\n\tdata: [text: string, begin: \"[\", action: string, delimiter: string, rest: string, end: \"]\" | \"\"];\n}\n\n/**\n * @internal\n */\nexport interface EOFToken extends BaseToken {\n\ttype: TokenType.EOF;\n\tdata: [];\n}\n\n/**\n * @internal\n */\nexport type Token =\n\t| UnicodeBOMToken\n\t| WhitespaceToken\n\t| DoctypeOpenToken\n\t| DoctypeValueToken\n\t| DoctypeCloseToken\n\t| TagOpenToken\n\t| TagCloseToken\n\t| AttrNameToken\n\t| AttrValueToken\n\t| TextToken\n\t| TemplatingToken\n\t| ScriptToken\n\t| StyleToken\n\t| CommentToken\n\t| ConditionalToken\n\t| DirectiveToken\n\t| EOFToken;\n","import { type Location, type Source, ContentModel, Context, State } from \"../context\";\nimport { type TagCloseToken, type Token, TokenType } from \"./token\";\n\ntype NextStateCallback = (token: Token | null) => State;\ntype LexerTest = [RegExp | false, State | NextStateCallback, TokenType | false];\n\n/**\n * @internal\n */\nexport type TokenStream = IterableIterator<Token>;\n\n/* eslint-disable no-useless-escape -- false positives */\nconst MATCH_UNICODE_BOM = /^\\uFEFF/;\nconst MATCH_WHITESPACE = /^(?:\\r\\n|\\r|\\n|[ \\t]+(?:\\r\\n|\\r|\\n)?)/;\nconst MATCH_DOCTYPE_OPEN = /^<!(DOCTYPE)\\s/i;\nconst MATCH_DOCTYPE_VALUE = /^[^>]+/;\nconst MATCH_DOCTYPE_CLOSE = /^>/;\nconst MATCH_XML_TAG = /^<\\?xml.*?\\?>\\s+/;\nconst MATCH_TAG_OPEN = /^<(\\/?)([a-zA-Z0-9\\-:]+)/; // https://www.w3.org/TR/html/syntax.html#start-tags\nconst MATCH_TAG_CLOSE = /^\\/?>/;\nconst MATCH_TEXT = /^[^]*?(?=(?:[ \\t]*(?:\\r\\n|\\r|\\n)|<[^ ]|$))/;\nconst MATCH_TEMPLATING = /^(?:<%.*?%>|<\\?.*?\\?>|<\\$.*?\\$>)/s;\nconst MATCH_TAG_LOOKAHEAD = /^[^]*?(?=<|$)/;\nconst MATCH_ATTR_START = /^([^\\t\\r\\n\\f \\/><\"'=]+)/; // https://www.w3.org/TR/html/syntax.html#elements-attributes\nconst MATCH_ATTR_SINGLE = /^(\\s*=\\s*)'([^']*?)(')/;\nconst MATCH_ATTR_DOUBLE = /^(\\s*=\\s*)\"([^\"]*?)(\")/;\nconst MATCH_ATTR_UNQUOTED = /^(\\s*=\\s*)([^\\t\\r\\n\\f \"'<>][^\\t\\r\\n\\f <>]*)/;\nconst MATCH_CDATA_BEGIN = /^<!\\[CDATA\\[/;\nconst MATCH_CDATA_END = /^[^]*?]]>/;\nconst MATCH_SCRIPT_DATA = /^[^]*?(?=<\\/script)/;\nconst MATCH_SCRIPT_END = /^<(\\/)(script)/;\nconst MATCH_STYLE_DATA = /^[^]*?(?=<\\/style)/;\nconst MATCH_STYLE_END = /^<(\\/)(style)/;\nconst MATCH_DIRECTIVE = /^(<!--\\s*\\[html-validate-)([a-z0-9-]+)(\\s*)(.*?)(]?\\s*-->)/;\nconst MATCH_COMMENT = /^<!--([^]*?)-->/;\nconst MATCH_CONDITIONAL = /^<!\\[([^\\]]*?)\\]>/;\n/* eslint-enable no-useless-escape */\n\nexport class InvalidTokenError extends Error {\n\tpublic location: Location;\n\n\tpublic constructor(location: Location, message: string) {\n\t\tsuper(message);\n\t\tthis.location = location;\n\t}\n}\n\nexport class Lexer {\n\t/* eslint-disable-next-line complexity -- there isn't really a good way to refactor this while keeping readability */\n\tpublic *tokenize(source: Source): TokenStream {\n\t\tconst context = new Context(source);\n\n\t\t/* for sanity check */\n\t\tlet previousState: State = context.state;\n\t\tlet previousLength: number = context.string.length;\n\n\t\twhile (context.string.length > 0) {\n\t\t\tswitch (context.state) {\n\t\t\t\tcase State.INITIAL:\n\t\t\t\t\tyield* this.tokenizeInitial(context);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase State.DOCTYPE:\n\t\t\t\t\tyield* this.tokenizeDoctype(context);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase State.TAG:\n\t\t\t\t\tyield* this.tokenizeTag(context);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase State.ATTR:\n\t\t\t\t\tyield* this.tokenizeAttr(context);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase State.TEXT:\n\t\t\t\t\tyield* this.tokenizeText(context);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase State.CDATA:\n\t\t\t\t\tyield* this.tokenizeCDATA(context);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase State.SCRIPT:\n\t\t\t\t\tyield* this.tokenizeScript(context);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase State.STYLE:\n\t\t\t\t\tyield* this.tokenizeStyle(context);\n\t\t\t\t\tbreak;\n\n\t\t\t\t/* istanbul ignore next: sanity check: should not happen unless adding new states */\n\t\t\t\tdefault:\n\t\t\t\t\tthis.unhandled(context);\n\t\t\t}\n\n\t\t\t/* sanity check: state or string must change, if both are intact\n\t\t\t * we are stuck in an endless loop. */\n\t\t\t/* istanbul ignore next: no easy way to test this as it is a condition which should never happen */\n\t\t\tif (context.state === previousState && context.string.length === previousLength) {\n\t\t\t\tthis.errorStuck(context);\n\t\t\t}\n\n\t\t\tpreviousState = context.state;\n\t\t\tpreviousLength = context.string.length;\n\t\t}\n\n\t\tyield this.token(context, TokenType.EOF, []);\n\t}\n\n\tprivate token(context: Context, type: TokenType, data: string[]): Token {\n\t\tconst size = data.length > 0 ? data[0].length : 0;\n\t\tconst location = context.getLocation(size);\n\t\treturn {\n\t\t\ttype,\n\t\t\tlocation,\n\t\t\tdata: Array.from(data),\n\t\t} as Token;\n\t}\n\n\t/* istanbul ignore next: used to provide a better error when an unhandled state happens */\n\tprivate unhandled(context: Context): void {\n\t\tconst truncated = JSON.stringify(\n\t\t\tcontext.string.length > 13 ? `${context.string.slice(0, 15)}...` : context.string,\n\t\t);\n\t\tconst state = State[context.state];\n\t\tconst message = `failed to tokenize ${truncated}, unhandled state ${state}.`;\n\t\tthrow new InvalidTokenError(context.getLocation(1), message);\n\t}\n\n\t/* istanbul ignore next: used to provide a better error when lexer is detected to be stuck, no known way to reproduce */\n\tprivate errorStuck(context: Context): void {\n\t\tconst state = State[context.state];\n\t\tconst message = `failed to tokenize ${context.getTruncatedLine()}, state ${state} failed to consume data or change state.`;\n\t\tthrow new InvalidTokenError(context.getLocation(1), message);\n\t}\n\n\tprivate evalNextState(\n\t\tnextState: State | ((token: Token | null) => State),\n\t\ttoken: Token | null,\n\t): State {\n\t\tif (typeof nextState === \"function\") {\n\t\t\treturn nextState(token);\n\t\t} else {\n\t\t\treturn nextState;\n\t\t}\n\t}\n\n\tprivate *match(context: Context, tests: LexerTest[], error: string): Iterable<Token> {\n\t\tconst n = tests.length;\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst [regex, nextState, tokenType] = tests[i];\n\n\t\t\tconst match: string[] | null = regex ? context.string.match(regex) : [\"\"];\n\t\t\tif (match) {\n\t\t\t\tlet token: Token | null = null;\n\t\t\t\tif (tokenType !== false) {\n\t\t\t\t\ttoken = this.token(context, tokenType, match);\n\t\t\t\t\tyield token;\n\t\t\t\t}\n\t\t\t\tconst state = this.evalNextState(nextState, token);\n\t\t\t\tcontext.consume(match, state);\n\t\t\t\tthis.enter(context, state, match);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst message = `failed to tokenize ${context.getTruncatedLine()}, ${error}.`;\n\t\tthrow new InvalidTokenError(context.getLocation(1), message);\n\t}\n\n\t/**\n\t * Called when entering a new state.\n\t */\n\tprivate enter(context: Context, state: State, data: string[] | null): void {\n\t\t/* script/style tags require a different content model */\n\t\tif (state === State.TAG && data?.[0].startsWith(\"<\")) {\n\t\t\tif (data[0] === \"<script\") {\n\t\t\t\tcontext.contentModel = ContentModel.SCRIPT;\n\t\t\t} else if (data[0] === \"<style\") {\n\t\t\t\tcontext.contentModel = ContentModel.STYLE;\n\t\t\t} else {\n\t\t\t\tcontext.contentModel = ContentModel.TEXT;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate *tokenizeInitial(context: Context): Iterable<Token> {\n\t\tyield* this.match(\n\t\t\tcontext,\n\t\t\t[\n\t\t\t\t[MATCH_UNICODE_BOM, State.INITIAL, TokenType.UNICODE_BOM],\n\t\t\t\t[MATCH_XML_TAG, State.INITIAL, false],\n\t\t\t\t[MATCH_DOCTYPE_OPEN, State.DOCTYPE, TokenType.DOCTYPE_OPEN],\n\t\t\t\t[MATCH_WHITESPACE, State.INITIAL, TokenType.WHITESPACE],\n\t\t\t\t[MATCH_DIRECTIVE, State.INITIAL, TokenType.DIRECTIVE],\n\t\t\t\t[MATCH_CONDITIONAL, State.INITIAL, TokenType.CONDITIONAL],\n\t\t\t\t[MATCH_COMMENT, State.INITIAL, TokenType.COMMENT],\n\t\t\t\t[false, State.TEXT, false],\n\t\t\t],\n\t\t\t\"expected doctype\",\n\t\t);\n\t}\n\n\tprivate *tokenizeDoctype(context: Context): Iterable<Token> {\n\t\tyield* this.match(\n\t\t\tcontext,\n\t\t\t[\n\t\t\t\t[MATCH_WHITESPACE, State.DOCTYPE, TokenType.WHITESPACE],\n\t\t\t\t[MATCH_DOCTYPE_VALUE, State.DOCTYPE, TokenType.DOCTYPE_VALUE],\n\t\t\t\t[MATCH_DOCTYPE_CLOSE, State.TEXT, TokenType.DOCTYPE_CLOSE],\n\t\t\t],\n\t\t\t\"expected doctype name\",\n\t\t);\n\t}\n\n\tprivate *tokenizeTag(context: Context): Iterable<Token> {\n\t\tfunction nextState(token: Token | null): State {\n\t\t\tconst tagCloseToken = token as TagCloseToken | null;\n\t\t\tswitch (context.contentModel) {\n\t\t\t\tcase ContentModel.TEXT:\n\t\t\t\t\treturn State.TEXT;\n\t\t\t\tcase ContentModel.SCRIPT:\n\t\t\t\t\tif (tagCloseToken && !tagCloseToken.data[0].startsWith(\"/\")) {\n\t\t\t\t\t\treturn State.SCRIPT;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn State.TEXT; /* <script/> (not legal but handle it anyway so the lexer doesn't choke on it) */\n\t\t\t\t\t}\n\t\t\t\tcase ContentModel.STYLE:\n\t\t\t\t\tif (tagCloseToken && !tagCloseToken.data[0].startsWith(\"/\")) {\n\t\t\t\t\t\treturn State.STYLE;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn State.TEXT; /* <style/> */\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tyield* this.match(\n\t\t\tcontext,\n\t\t\t[\n\t\t\t\t[MATCH_TAG_CLOSE, nextState, TokenType.TAG_CLOSE],\n\t\t\t\t[MATCH_ATTR_START, State.ATTR, TokenType.ATTR_NAME],\n\t\t\t\t[MATCH_WHITESPACE, State.TAG, TokenType.WHITESPACE],\n\t\t\t],\n\t\t\t'expected attribute, \">\" or \"/>\"',\n\t\t);\n\t}\n\n\tprivate *tokenizeAttr(context: Context): Iterable<Token> {\n\t\tyield* this.match(\n\t\t\tcontext,\n\t\t\t[\n\t\t\t\t[MATCH_ATTR_SINGLE, State.TAG, TokenType.ATTR_VALUE],\n\t\t\t\t[MATCH_ATTR_DOUBLE, State.TAG, TokenType.ATTR_VALUE],\n\t\t\t\t[MATCH_ATTR_UNQUOTED, State.TAG, TokenType.ATTR_VALUE],\n\t\t\t\t[false, State.TAG, false],\n\t\t\t],\n\t\t\t'expected attribute, \">\" or \"/>\"',\n\t\t);\n\t}\n\n\tprivate *tokenizeText(context: Context): Iterable<Token> {\n\t\tyield* this.match(\n\t\t\tcontext,\n\t\t\t[\n\t\t\t\t[MATCH_WHITESPACE, State.TEXT, TokenType.WHITESPACE],\n\t\t\t\t[MATCH_CDATA_BEGIN, State.CDATA, false],\n\t\t\t\t[MATCH_DIRECTIVE, State.TEXT, TokenType.DIRECTIVE],\n\t\t\t\t[MATCH_CONDITIONAL, State.TEXT, TokenType.CONDITIONAL],\n\t\t\t\t[MATCH_COMMENT, State.TEXT, TokenType.COMMENT],\n\t\t\t\t[MATCH_TEMPLATING, State.TEXT, TokenType.TEMPLATING],\n\t\t\t\t[MATCH_TAG_OPEN, State.TAG, TokenType.TAG_OPEN],\n\t\t\t\t[MATCH_TEXT, State.TEXT, TokenType.TEXT],\n\t\t\t\t[MATCH_TAG_LOOKAHEAD, State.TEXT, TokenType.TEXT],\n\t\t\t],\n\t\t\t'expected text or \"<\"',\n\t\t);\n\t}\n\n\tprivate *tokenizeCDATA(context: Context): Iterable<Token> {\n\t\tyield* this.match(context, [[MATCH_CDATA_END, State.TEXT, false]], \"expected ]]>\");\n\t}\n\n\tprivate *tokenizeScript(context: Context): Iterable<Token> {\n\t\tyield* this.match(\n\t\t\tcontext,\n\t\t\t[\n\t\t\t\t[MATCH_SCRIPT_END, State.TAG, TokenType.TAG_OPEN],\n\t\t\t\t[MATCH_SCRIPT_DATA, State.SCRIPT, TokenType.SCRIPT],\n\t\t\t],\n\t\t\t\"expected </script>\",\n\t\t);\n\t}\n\n\tprivate *tokenizeStyle(context: Context): Iterable<Token> {\n\t\tyield* this.match(\n\t\t\tcontext,\n\t\t\t[\n\t\t\t\t[MATCH_STYLE_END, State.TAG, TokenType.TAG_OPEN],\n\t\t\t\t[MATCH_STYLE_DATA, State.STYLE, TokenType.STYLE],\n\t\t\t],\n\t\t\t\"expected </style>\",\n\t\t);\n\t}\n}\n","import { sliceLocation } from \"../context\";\nimport { type TokenEvent } from \"../event\";\nimport { TokenType } from \"../lexer\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nconst whitespace = /(\\s+)/;\n\nexport default class AttrDelimiter extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `Attribute value must not be separated by whitespace.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"token\", (event: TokenEvent) => {\n\t\t\tconst { token } = event;\n\t\t\tif (token.type !== TokenType.ATTR_VALUE) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst delimiter = token.data[1];\n\t\t\tconst match = whitespace.exec(delimiter);\n\t\t\tif (match) {\n\t\t\t\tconst location = sliceLocation(event.location, 0, delimiter.length);\n\t\t\t\tthis.report(null, \"Attribute value must not be delimited by whitespace\", location);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleOptions {\n\tpattern: string | string[];\n\tignoreForeign: boolean;\n}\n\ninterface RuleContext {\n\tattr: string;\n\tpattern: string | string[];\n}\n\nexport const DEFAULT_PATTERN = \"[a-z0-9-:]+\";\n\nconst defaults: RuleOptions = {\n\tpattern: DEFAULT_PATTERN,\n\tignoreForeign: true,\n};\n\nfunction generateRegexp(pattern: string | string[]): RegExp {\n\tif (Array.isArray(pattern)) {\n\t\t/* eslint-disable-next-line security/detect-non-literal-regexp -- expected to be regexp */\n\t\treturn new RegExp(`^(${pattern.join(\"|\")})$`, \"i\");\n\t} else {\n\t\t/* eslint-disable-next-line security/detect-non-literal-regexp -- expected to be regexp */\n\t\treturn new RegExp(`^${pattern}$`, \"i\");\n\t}\n}\n\nfunction generateMessage(name: string, pattern: string | string[]): string {\n\tif (Array.isArray(pattern)) {\n\t\tconst patterns = pattern.map((it) => `/${it}/`).join(\", \");\n\t\treturn `Attribute \"${name}\" should match one of [${patterns}]`;\n\t} else {\n\t\treturn `Attribute \"${name}\" should match /${pattern}/`;\n\t}\n}\n\nfunction generateDescription(name: string, pattern: string | string[]): string {\n\tif (Array.isArray(pattern)) {\n\t\treturn [\n\t\t\t`Attribute \"${name}\" should match one of the configured regular expressions:`,\n\t\t\t\"\",\n\t\t\t...pattern.map((it) => `- \\`/${it}/\\``),\n\t\t].join(\"\\n\");\n\t} else {\n\t\treturn `Attribute \"${name}\" should match the regular expression \\`/${pattern}/\\``;\n\t}\n}\n\nexport default class AttrPattern extends Rule<RuleContext, RuleOptions> {\n\tprivate pattern: RegExp;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.pattern = generateRegexp(this.options.pattern);\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tpattern: {\n\t\t\t\toneOf: [{ type: \"array\", items: { type: \"string\" }, minItems: 1 }, { type: \"string\" }],\n\t\t\t},\n\t\t\tignoreForeign: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: generateDescription(context.attr, context.pattern),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tif (this.isIgnored(event.target)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore case for dynamic attributes, the original attributes will be\n\t\t\t * checked instead (this prevents duplicated errors for the same source\n\t\t\t * attribute) */\n\t\t\tif (event.originalAttribute) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.pattern.test(event.key)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst message = generateMessage(event.key, this.options.pattern);\n\t\t\tconst context: RuleContext = {\n\t\t\t\tattr: event.key,\n\t\t\t\tpattern: this.options.pattern,\n\t\t\t};\n\t\t\tthis.report(event.target, message, event.keyLocation, context);\n\t\t});\n\t}\n\n\tprotected isIgnored(node: HtmlElement): boolean {\n\t\tif (this.options.ignoreForeign) {\n\t\t\treturn Boolean(node.meta?.foreign);\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n}\n","import { ConfigError } from \"../config/error\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ntype QuoteMark = '\"' | \"'\";\nenum QuoteStyle {\n\tSINGLE_QUOTE = \"'\",\n\tDOUBLE_QUOTE = '\"',\n\tAUTO_QUOTE = \"auto\",\n\tANY_QUOTE = \"any\",\n}\n\nexport interface RuleStyleContext {\n\terror: \"style\";\n\tattr: string;\n\texpected: string;\n\tactual: string;\n}\n\nexport interface RuleUnquotedContext {\n\terror: \"unquoted\";\n\tattr: string;\n}\n\ntype RuleContext = RuleStyleContext | RuleUnquotedContext;\n\ninterface RuleOptions {\n\tstyle: \"auto\" | \"single\" | \"double\" | \"any\";\n\tunquoted: boolean;\n}\n\nconst defaults: RuleOptions = {\n\tstyle: \"auto\",\n\tunquoted: false,\n};\n\nfunction describeError(context: RuleContext): string {\n\tswitch (context.error) {\n\t\tcase \"style\":\n\t\t\treturn `Attribute \\`${context.attr}\\` must use \\`${context.expected}\\` instead of \\`${context.actual}\\`.`;\n\t\tcase \"unquoted\":\n\t\t\treturn `Attribute \\`${context.attr}\\` must not be unquoted.`;\n\t}\n}\n\nfunction describeStyle(style: QuoteStyle, unquoted: boolean): string {\n\tconst description: string[] = [];\n\tswitch (style) {\n\t\tcase QuoteStyle.AUTO_QUOTE:\n\t\t\tdescription.push(\n\t\t\t\t\"- quoted with double quotes `\\\"` unless the value contains double quotes in which case single quotes `'` should be used instead\",\n\t\t\t);\n\t\t\tbreak;\n\t\tcase QuoteStyle.ANY_QUOTE:\n\t\t\tdescription.push(\"- quoted with single quotes `'`\");\n\t\t\tdescription.push('- quoted with double quotes `\"`');\n\t\t\tbreak;\n\t\tcase QuoteStyle.SINGLE_QUOTE:\n\t\tcase QuoteStyle.DOUBLE_QUOTE: {\n\t\t\tconst name = style === QuoteStyle.SINGLE_QUOTE ? \"single\" : \"double\";\n\t\t\tdescription.push(`- quoted with ${name} quotes \\`${style}\\``);\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (unquoted) {\n\t\tdescription.push(\"- unquoted (if applicable)\");\n\t}\n\treturn `${description.join(\" or\\n\")}\\n`;\n}\n\nexport default class AttrQuotes extends Rule<RuleContext, RuleOptions> {\n\tprivate style: QuoteStyle;\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tstyle: {\n\t\t\t\tenum: [\"auto\", \"double\", \"single\", \"any\"],\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t\tunquoted: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\tconst { style } = this;\n\t\tconst { unquoted } = this.options;\n\t\tconst description = [\n\t\t\tdescribeError(context),\n\t\t\t\"\",\n\t\t\t\"Under the current configuration attributes must be:\",\n\t\t\t\"\",\n\t\t\tdescribeStyle(style, unquoted),\n\t\t];\n\t\treturn {\n\t\t\tdescription: description.join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.style = parseStyle(this.options.style);\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\t/* ignore attributes with no value */\n\t\t\tif (event.value === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!event.quote) {\n\t\t\t\tif (!this.options.unquoted) {\n\t\t\t\t\tconst message = `Attribute \"${event.key}\" using unquoted value`;\n\t\t\t\t\tconst context: RuleUnquotedContext = {\n\t\t\t\t\t\terror: \"unquoted\",\n\t\t\t\t\t\tattr: event.key,\n\t\t\t\t\t};\n\t\t\t\t\tthis.report(event.target, message, null, context);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* if the style is set to any we skip the rest of the rule as the only\n\t\t\t * thing that matters is if the \"unquoted\" options triggers an error or\n\t\t\t * not */\n\t\t\tif (this.style === QuoteStyle.ANY_QUOTE) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst expected = this.resolveQuotemark(event.value.toString(), this.style);\n\n\t\t\tif (event.quote !== expected) {\n\t\t\t\tconst message = `Attribute \"${event.key}\" used ${event.quote} instead of expected ${expected}`;\n\t\t\t\tconst context: RuleStyleContext = {\n\t\t\t\t\terror: \"style\",\n\t\t\t\t\tattr: event.key,\n\t\t\t\t\tactual: event.quote,\n\t\t\t\t\texpected,\n\t\t\t\t};\n\t\t\t\tthis.report(event.target, message, null, context);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate resolveQuotemark(\n\t\tvalue: string,\n\t\tstyle: Exclude<QuoteStyle, QuoteStyle.ANY_QUOTE>,\n\t): QuoteMark {\n\t\tif (style === QuoteStyle.AUTO_QUOTE) {\n\t\t\treturn value.includes('\"') ? \"'\" : '\"';\n\t\t} else {\n\t\t\treturn style;\n\t\t}\n\t}\n}\n\nfunction parseStyle(style: string): QuoteStyle {\n\tswitch (style.toLowerCase()) {\n\t\tcase \"auto\":\n\t\t\treturn QuoteStyle.AUTO_QUOTE;\n\t\tcase \"double\":\n\t\t\treturn QuoteStyle.DOUBLE_QUOTE;\n\t\tcase \"single\":\n\t\t\treturn QuoteStyle.SINGLE_QUOTE;\n\t\tcase \"any\":\n\t\t\treturn QuoteStyle.ANY_QUOTE;\n\t\t/* istanbul ignore next: covered by schema validation */\n\t\tdefault:\n\t\t\tthrow new ConfigError(`Invalid style \"${style}\" for \"attr-quotes\" rule`);\n\t}\n}\n","import { type TokenEvent } from \"../event\";\nimport { TokenType } from \"../lexer\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class AttrSpacing extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `No space between attributes. At least one whitespace character (commonly space) must be used to separate attributes.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tlet previousToken: TokenType;\n\t\tthis.on(\"token\", (event: TokenEvent) => {\n\t\t\tif (event.type === TokenType.ATTR_NAME && previousToken !== TokenType.WHITESPACE) {\n\t\t\t\tthis.report(null, \"No space between attributes\", event.location);\n\t\t\t}\n\t\t\tpreviousToken = event.type;\n\t\t});\n\t}\n}\n","import { type Location } from \"../context\";\nimport { type HtmlElement, type Attribute } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type MetaAttribute, Validator } from \"../meta\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { walk } from \"../utils\";\n\ninterface Context {\n\telement: string;\n\tattribute: string;\n\tvalue: string;\n\tallowed: Pick<MetaAttribute, \"enum\" | \"boolean\">;\n}\n\nfunction pick(attr: MetaAttribute): Pick<MetaAttribute, \"enum\" | \"boolean\"> {\n\tconst result: Pick<MetaAttribute, \"enum\" | \"boolean\"> = {};\n\tif (typeof attr.enum !== \"undefined\") {\n\t\tresult.enum = attr.enum;\n\t}\n\tif (typeof attr.boolean !== \"undefined\") {\n\t\tresult.boolean = attr.boolean;\n\t}\n\treturn result;\n}\n\nexport default class AttributeAllowedValues extends Rule<Context> {\n\tpublic documentation(context?: Context): RuleDocumentation {\n\t\tconst docs: RuleDocumentation = {\n\t\t\tdescription: \"Attribute has invalid value.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t\tif (!context) {\n\t\t\treturn docs;\n\t\t}\n\n\t\tconst { allowed, attribute, element, value } = context;\n\t\tif (allowed.enum) {\n\t\t\tconst allowedList = allowed.enum.map((value: string | RegExp) => {\n\t\t\t\tif (typeof value === \"string\") {\n\t\t\t\t\treturn `- \\`\"${value}\"\\``;\n\t\t\t\t} else {\n\t\t\t\t\treturn `- \\`${value.toString()}\\``;\n\t\t\t\t}\n\t\t\t});\n\t\t\tdocs.description = [\n\t\t\t\t`The \\`<${element}>\\` element does not allow the attribute \\`${attribute}\\` to have the value \\`\"${value}\"\\`.`,\n\t\t\t\t\"\",\n\t\t\t\t\"It must match one of the following:\",\n\t\t\t\t\"\",\n\t\t\t\t...allowedList,\n\t\t\t].join(\"\\n\");\n\t\t} else if (allowed.boolean) {\n\t\t\tdocs.description = `The \\`<${context.element}>\\` attribute \\`${context.attribute}\\` must be a boolean attribute, e.g. \\`<${context.element} ${context.attribute}>\\``;\n\t\t}\n\n\t\treturn docs;\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\tconst meta = node.meta;\n\n\t\t\t\t/* ignore rule if element has no meta or meta does not specify attribute\n\t\t\t\t * allowed values */\n\t\t\t\tif (!meta?.attributes) return;\n\n\t\t\t\tfor (const attr of node.attributes) {\n\t\t\t\t\tif (Validator.validateAttribute(attr, meta.attributes)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst value = attr.value ? attr.value.toString() : \"\";\n\t\t\t\t\tconst context: Context = {\n\t\t\t\t\t\telement: node.tagName,\n\t\t\t\t\t\tattribute: attr.key,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tallowed: pick(meta.attributes[attr.key]),\n\t\t\t\t\t};\n\t\t\t\t\tconst message = this.getMessage(attr);\n\t\t\t\t\tconst location = this.getLocation(attr);\n\t\t\t\t\tthis.report(node, message, location, context);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate getMessage(attr: Attribute): string {\n\t\tconst { key, value } = attr;\n\t\tif (value !== null) {\n\t\t\treturn `Attribute \"${key}\" has invalid value \"${value.toString()}\"`;\n\t\t} else {\n\t\t\treturn `Attribute \"${key}\" is missing value`;\n\t\t}\n\t}\n\n\tprivate getLocation(attr: Attribute): Location {\n\t\treturn attr.valueLocation ?? attr.keyLocation;\n\t}\n}\n","import { type Attribute, type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type MetaAttribute } from \"../meta/element\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { walk } from \"../utils\";\n\ninterface RuleOptions {\n\tstyle: \"omit\" | \"empty\" | \"name\";\n}\n\nconst defaults: RuleOptions = {\n\tstyle: \"omit\",\n};\n\ntype checkFunction = (attr: Attribute) => boolean;\n\nexport default class AttributeBooleanStyle extends Rule<void, RuleOptions> {\n\tprivate hasInvalidStyle: checkFunction;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.hasInvalidStyle = parseStyle(this.options.style);\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tstyle: {\n\t\t\t\tenum: [\"empty\", \"name\", \"omit\"],\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"Require a specific style when writing boolean attributes.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\tconst meta = node.meta;\n\n\t\t\t\t/* ignore rule if element has no meta or meta does not specify attribute\n\t\t\t\t * allowed values */\n\t\t\t\tif (!meta?.attributes) return;\n\n\t\t\t\t/* check all boolean attributes */\n\t\t\t\tfor (const attr of node.attributes) {\n\t\t\t\t\tif (!this.isBoolean(attr, meta.attributes)) continue;\n\n\t\t\t\t\t/* ignore attribute if it is aliased by a dynamic value,\n\t\t\t\t\t * e.g. ng-required or v-bind:required, since it will probably have a\n\t\t\t\t\t * value despite the target attribute is a boolean. The framework is\n\t\t\t\t\t * assumed to handle it properly */\n\t\t\t\t\tif (attr.originalAttribute) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.hasInvalidStyle(attr)) {\n\t\t\t\t\t\tthis.report(node, reportMessage(attr, this.options.style), attr.keyLocation);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tpublic isBoolean(attr: Attribute, rules: Record<string, MetaAttribute>): boolean {\n\t\tconst meta = rules[attr.key] as MetaAttribute | undefined;\n\t\treturn Boolean(meta?.boolean);\n\t}\n}\n\nfunction parseStyle(style: string): checkFunction {\n\tswitch (style.toLowerCase()) {\n\t\tcase \"omit\":\n\t\t\treturn (attr: Attribute) => attr.value !== null;\n\t\tcase \"empty\":\n\t\t\treturn (attr: Attribute) => attr.value !== \"\";\n\t\tcase \"name\":\n\t\t\treturn (attr: Attribute) => attr.value !== attr.key;\n\t\t/* istanbul ignore next: covered by schema validation */\n\t\tdefault:\n\t\t\tthrow new Error(`Invalid style \"${style}\" for \"attribute-boolean-style\" rule`);\n\t}\n}\n\nfunction reportMessage(attr: Attribute, style: string): string {\n\tconst key = attr.key;\n\tswitch (style.toLowerCase()) {\n\t\tcase \"omit\":\n\t\t\treturn `Attribute \"${key}\" should omit value`;\n\t\tcase \"empty\":\n\t\t\treturn `Attribute \"${key}\" value should be empty string`;\n\t\tcase \"name\":\n\t\t\treturn `Attribute \"${key}\" should be set to ${key}=\"${key}\"`;\n\t}\n\t/* istanbul ignore next: the above switch should cover all cases */\n\treturn \"\";\n}\n","import { type Attribute, type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type MetaAttribute } from \"../meta/element\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { walk } from \"../utils\";\n\ninterface RuleOptions {\n\tstyle: \"omit\" | \"empty\";\n}\n\nconst defaults: RuleOptions = {\n\tstyle: \"omit\",\n};\n\ntype checkFunction = (attr: Attribute) => boolean;\n\nexport default class AttributeEmptyStyle extends Rule<void, RuleOptions> {\n\tprivate hasInvalidStyle: checkFunction;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.hasInvalidStyle = parseStyle(this.options.style);\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tstyle: {\n\t\t\t\tenum: [\"empty\", \"omit\"],\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"Require a specific style for attributes with empty values.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\tconst meta = node.meta;\n\n\t\t\t\t/* ignore rule if element has no meta or meta does not specify attribute\n\t\t\t\t * allowed values */\n\t\t\t\tif (!meta?.attributes) return;\n\n\t\t\t\t/* check all boolean attributes */\n\t\t\t\tfor (const attr of node.attributes) {\n\t\t\t\t\t/* only handle attributes which allows empty values */\n\t\t\t\t\tif (!allowsEmpty(attr, meta.attributes)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* skip attribute if the attribute is set to non-empty value\n\t\t\t\t\t * (attribute-allowed-values deals with non-empty values)*/\n\t\t\t\t\tif (!isEmptyValue(attr)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* skip attribute if the style is valid */\n\t\t\t\t\tif (!this.hasInvalidStyle(attr)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* report error */\n\t\t\t\t\tthis.report(node, reportMessage(attr, this.options.style), attr.keyLocation);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n}\n\nfunction allowsEmpty(attr: Attribute, rules: Record<string, MetaAttribute>): boolean {\n\tconst meta = rules[attr.key] as MetaAttribute | undefined;\n\treturn Boolean(meta?.omit);\n}\n\nfunction isEmptyValue(attr: Attribute): boolean {\n\t/* dynamic values are ignored, assumed to contain a value */\n\tif (attr.isDynamic) {\n\t\treturn false;\n\t}\n\n\treturn attr.value === null || attr.value === \"\";\n}\n\nfunction parseStyle(style: string): checkFunction {\n\tswitch (style.toLowerCase()) {\n\t\tcase \"omit\":\n\t\t\treturn (attr: Attribute) => attr.value !== null;\n\t\tcase \"empty\":\n\t\t\treturn (attr: Attribute) => attr.value !== \"\";\n\t\t/* istanbul ignore next: covered by schema validation */\n\t\tdefault:\n\t\t\tthrow new Error(`Invalid style \"${style}\" for \"attribute-empty-style\" rule`);\n\t}\n}\n\nfunction reportMessage(attr: Attribute, style: string): string {\n\tconst key = attr.key;\n\tswitch (style.toLowerCase()) {\n\t\tcase \"omit\":\n\t\t\treturn `Attribute \"${key}\" should omit value`;\n\t\tcase \"empty\":\n\t\t\treturn `Attribute \"${key}\" value should be empty string`;\n\t}\n\t/* istanbul ignore next: the above switch should cover all cases */\n\treturn \"\";\n}\n","import { type Attribute, type HtmlElement } from \"../dom\";\nimport { type ElementReadyEvent } from \"../event\";\nimport { type MetaAttribute } from \"../meta\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport interface RuleContext {\n\ttagName: string;\n\tattr: string;\n\tdetails: string;\n}\n\nfunction ruleDescription(context: RuleContext): string {\n\tconst { tagName, attr, details } = context;\n\treturn `The \\`${attr}\\` attribute cannot be used on \\`${tagName}\\` in this context: ${details}`;\n}\n\nexport default class AttributeMisuse extends Rule<RuleContext> {\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: ruleDescription(context),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"element:ready\", (event: ElementReadyEvent) => {\n\t\t\tconst { target } = event;\n\t\t\tconst { meta } = target;\n\t\t\tif (!meta) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (const attr of target.attributes) {\n\t\t\t\tconst key = attr.key.toLowerCase();\n\t\t\t\tthis.validateAttr(target, attr, meta.attributes[key]);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate validateAttr(node: HtmlElement, attr: Attribute, meta: MetaAttribute | undefined): void {\n\t\tif (!meta?.allowed) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst details = meta.allowed(node._adapter, attr.value);\n\t\tif (details) {\n\t\t\tthis.report({\n\t\t\t\tnode,\n\t\t\t\tmessage: `\"{{ attr }}\" attribute cannot be used on {{ tagName }} in this context: {{ details }}`,\n\t\t\t\tlocation: attr.keyLocation,\n\t\t\t\tcontext: {\n\t\t\t\t\ttagName: node.annotatedName,\n\t\t\t\t\tattr: attr.key,\n\t\t\t\t\tdetails,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n}\n","export type PatternName = \"kebabcase\" | \"camelcase\" | \"underscore\" | string;\n\n/**\n * @internal\n */\nexport interface ParsedPattern {\n\tregexp: RegExp;\n\tdescription: string;\n}\n\n/**\n * @internal\n */\nexport function parsePattern(pattern: PatternName): ParsedPattern {\n\tswitch (pattern) {\n\t\tcase \"kebabcase\":\n\t\t\treturn { regexp: /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/, description: pattern };\n\n\t\tcase \"camelcase\":\n\t\t\treturn { regexp: /^[a-z][a-zA-Z0-9]*$/, description: pattern };\n\n\t\tcase \"snakecase\":\n\t\tcase \"underscore\":\n\t\t\treturn { regexp: /^[a-z][a-z0-9]*(?:_[a-z0-9]+)*$/, description: pattern };\n\n\t\tcase \"bem\": {\n\t\t\tconst block = \"[a-z][a-z0-9]*(?:-[a-z0-9]+)*\";\n\t\t\tconst element = \"(?:__[a-z0-9]+(?:-[a-z0-9]+)*)?\";\n\t\t\tconst modifier = \"(?:--[a-z0-9]+(?:-[a-z0-9]+)*){0,2}\";\n\t\t\treturn {\n\t\t\t\tregexp: new RegExp(`^${block}${element}${modifier}$`),\n\t\t\t\tdescription: pattern,\n\t\t\t};\n\t\t}\n\n\t\tdefault: {\n\t\t\t/* eslint-disable-next-line security/detect-non-literal-regexp -- expected to be regexp */\n\t\t\tconst regexp = new RegExp(pattern);\n\t\t\treturn { regexp, description: regexp.toString() };\n\t\t}\n\t}\n}\n","import { type Location } from \"../context\";\nimport { type HtmlElement } from \"../dom\";\nimport { type ParsedPattern, type PatternName, parsePattern } from \"../pattern\";\nimport { type SchemaObject, Rule } from \"../rule\";\nimport { naturalJoin } from \"../utils/natural-join\";\n\n/**\n * @internal\n */\nexport interface BasePatternRuleContext {\n\tvalue: string;\n}\n\n/**\n * @internal\n */\nexport interface BasePatternRuleOptions {\n\tpattern: PatternName | PatternName[];\n}\n\nfunction toArray<T>(value: T | T[]): T[] {\n\treturn Array.isArray(value) ? value : [value];\n}\n\n/**\n * Base rule for any rule testing strings against patterns.\n *\n * @internal\n */\nexport abstract class BasePatternRule extends Rule<BasePatternRuleContext, BasePatternRuleOptions> {\n\t/** Attribute being tested */\n\tprotected attr: string;\n\n\t/** Parsed configured patterns */\n\tprotected patterns: ParsedPattern[];\n\n\t/**\n\t * @param attr - Attribute holding the value.\n\t * @param options - Rule options with defaults expanded.\n\t */\n\tpublic constructor(attr: string, options: BasePatternRuleOptions) {\n\t\tsuper(options);\n\t\tconst { pattern } = this.options;\n\t\tthis.attr = attr;\n\t\tthis.patterns = toArray(pattern).map((it) => parsePattern(it));\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tpattern: {\n\t\t\t\toneOf: [{ type: \"array\", items: { type: \"string\" }, minItems: 1 }, { type: \"string\" }],\n\t\t\t},\n\t\t};\n\t}\n\n\tprotected description(context: BasePatternRuleContext): string {\n\t\tconst { attr, patterns } = this;\n\t\tconst { value } = context;\n\t\tconst lead =\n\t\t\tpatterns.length === 1\n\t\t\t\t? `The \\`${attr}\\` attribute value \\`\"${value}\"\\` does not match the configured pattern.`\n\t\t\t\t: `The \\`${attr}\\` attribute value \\`\"${value}\"\\` does not match either of the configured patterns.`;\n\t\treturn [\n\t\t\tlead,\n\t\t\t\"For consistency within the codebase the `${attr}` is required to match one or more of the following patterns:\",\n\t\t\t\"\",\n\t\t\t...patterns.map((it) => `- \\`${it.description}\\``),\n\t\t].join(\"\\n\");\n\t}\n\n\tprotected validateValue(node: HtmlElement, value: string, location: Location | null): void {\n\t\tconst { attr, patterns } = this;\n\t\tconst matches = patterns.some((it) => it.regexp.test(value));\n\t\tif (matches) {\n\t\t\treturn;\n\t\t}\n\t\tconst allowed = naturalJoin(patterns.map((it) => `\"${it.description}\"`));\n\t\tconst message =\n\t\t\tpatterns.length === 1\n\t\t\t\t? `${attr} \"${value}\" does not match the configured pattern ${allowed}`\n\t\t\t\t: `${attr} \"${value}\" does not match either of the configured patterns: ${allowed}`;\n\t\tthis.report({\n\t\t\tnode,\n\t\t\tmessage,\n\t\t\tlocation,\n\t\t\tcontext: {\n\t\t\t\tvalue,\n\t\t\t},\n\t\t});\n\t}\n}\n","import { DOMTokenList } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, ruleDocumentationUrl } from \"../rule\";\nimport {\n\ttype BasePatternRuleContext,\n\ttype BasePatternRuleOptions,\n\tBasePatternRule,\n} from \"./base-pattern-rule\";\n\nconst defaults: BasePatternRuleOptions = {\n\tpattern: \"kebabcase\",\n};\n\nexport default class ClassPattern extends BasePatternRule {\n\tpublic constructor(options: Partial<BasePatternRuleOptions>) {\n\t\tsuper(\"class\", { ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn BasePatternRule.schema();\n\t}\n\n\tpublic documentation(context: BasePatternRuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: this.description(context),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tconst { target, key, value, valueLocation } = event;\n\n\t\t\tif (key.toLowerCase() !== \"class\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst classes = new DOMTokenList(value, valueLocation);\n\t\t\tfor (const { item, location } of classes.iterator()) {\n\t\t\t\tthis.validateValue(target, item, location);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type TagEndEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class CloseAttr extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"HTML disallows end tags to have attributes.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\t/* handle unclosed tags */\n\t\t\tif (!event.target) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore self-closed and void */\n\t\t\tif (event.previous === event.target) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst node = event.target;\n\t\t\tif (Object.keys(node.attributes).length > 0) {\n\t\t\t\tconst first = node.attributes[0];\n\t\t\t\tthis.report(null, \"Close tags cannot have attributes\", first.keyLocation);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type Location } from \"../context\";\nimport { NodeClosed } from \"../dom\";\nimport { type TagEndEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class CloseOrder extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"HTML requires elements to be closed in the same order as they were opened.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\tconst current = event.target; // The current element being closed\n\t\t\tconst active = event.previous; // The current active element (that is, the current element on the stack)\n\n\t\t\t/* handle unclosed tags */\n\t\t\tif (!current) {\n\t\t\t\tthis.report(\n\t\t\t\t\tnull,\n\t\t\t\t\t`Missing close-tag, expected '</${active.tagName}>' but document ended before it was found.`,\n\t\t\t\t\tevent.location,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* void elements are always closed in correct order but if the markup contains\n\t\t\t * an end-tag for it it should be ignored here since the void element is\n\t\t\t * implicitly closed in the right order, so the current active element is the\n\t\t\t * parent. */\n\t\t\tif (current.voidElement) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* if the active element is implicitly closed when the parent is closed\n\t\t\t * (such as a <li> by </ul>) no error should be reported. */\n\t\t\tif (active.closed === NodeClosed.ImplicitClosed) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* handle unopened tags */\n\t\t\tif (active.isRootElement()) {\n\t\t\t\tconst location: Location = {\n\t\t\t\t\tfilename: current.location.filename,\n\t\t\t\t\tline: current.location.line,\n\t\t\t\t\tcolumn: current.location.column,\n\t\t\t\t\toffset: current.location.offset,\n\t\t\t\t\tsize: current.tagName.length + 1,\n\t\t\t\t};\n\t\t\t\tthis.report(null, \"Unexpected close-tag, expected opening tag.\", location);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* check for matching tagnames */\n\t\t\tif (current.tagName !== active.tagName) {\n\t\t\t\tthis.report(\n\t\t\t\t\tnull,\n\t\t\t\t\t`Mismatched close-tag, expected '</${active.tagName}>' but found '</${current.tagName}>'.`,\n\t\t\t\t\tcurrent.location,\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type Location, sliceLocation } from \"../context\";\nimport { type HtmlElement } from \"../dom\";\nimport { type TagStartEvent } from \"../event\";\nimport { type DeprecatedElement } from \"../meta/element\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleContext extends DeprecatedElement {\n\ttagName: string;\n}\n\ninterface RuleOptions {\n\tinclude: string[] | null;\n\texclude: string[] | null;\n}\n\nconst defaults: RuleOptions = {\n\tinclude: null,\n\texclude: null,\n};\n\nexport default class Deprecated extends Rule<RuleContext, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\texclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tinclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\tconst text: string[] = [];\n\t\tif (context.source) {\n\t\t\tconst source = prettySource(context.source);\n\t\t\tconst message = `The \\`<$tagname>\\` element is deprecated ${source} and should not be used in new code.`;\n\t\t\ttext.push(message);\n\t\t} else {\n\t\t\tconst message = `The \\`<$tagname>\\` element is deprecated and should not be used in new code.`;\n\t\t\ttext.push(message);\n\t\t}\n\t\tif (context.documentation) {\n\t\t\ttext.push(context.documentation);\n\t\t}\n\t\tconst doc: RuleDocumentation = {\n\t\t\tdescription: text.map((cur) => cur.replace(/\\$tagname/g, context.tagName)).join(\"\\n\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t\treturn doc;\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:start\", (event: TagStartEvent) => {\n\t\t\tconst node = event.target;\n\n\t\t\t/* cannot validate if meta isn't known */\n\t\t\tif (node.meta === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore if element is not deprecated */\n\t\t\tconst deprecated = node.meta.deprecated;\n\t\t\tif (!deprecated) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore if element is ignored by used configuration */\n\t\t\tif (this.isKeywordIgnored(node.tagName)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst location = sliceLocation(event.location, 1);\n\n\t\t\tif (typeof deprecated === \"string\") {\n\t\t\t\tthis.reportString(deprecated, node, location);\n\t\t\t} else if (typeof deprecated === \"boolean\") {\n\t\t\t\tthis.reportBoolean(node, location);\n\t\t\t} else {\n\t\t\t\tthis.reportObject(deprecated, node, location);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate reportString(deprecated: string, node: HtmlElement, location: Location): void {\n\t\tconst context: RuleContext = { tagName: node.tagName };\n\t\tconst message = `<${node.tagName}> is deprecated: ${deprecated}`;\n\t\tthis.report(node, message, location, context);\n\t}\n\n\tprivate reportBoolean(node: HtmlElement, location: Location): void {\n\t\tconst context: RuleContext = { tagName: node.tagName };\n\t\tconst message = `<${node.tagName}> is deprecated`;\n\t\tthis.report(node, message, location, context);\n\t}\n\n\tprivate reportObject(deprecated: DeprecatedElement, node: HtmlElement, location: Location): void {\n\t\tconst context: RuleContext = { ...deprecated, tagName: node.tagName };\n\t\tconst notice = deprecated.message ? `: ${deprecated.message}` : \"\";\n\t\tconst message = `<${node.tagName}> is deprecated${notice}`;\n\t\tthis.report(node, message, location, context);\n\t}\n}\n\nfunction prettySource(source: string): string {\n\tconst match = source.match(/html(\\d)(\\d)?/);\n\tif (match) {\n\t\tconst [, ...parts] = match;\n\t\tconst version = parts.filter(Boolean).join(\".\");\n\t\treturn `in HTML ${version}`;\n\t}\n\n\tswitch (source) {\n\t\tcase \"whatwg\":\n\t\t\treturn \"in HTML Living Standard\";\n\t\tcase \"non-standard\":\n\t\t\treturn \"and non-standard\";\n\t\tdefault:\n\t\t\treturn `by ${source}`;\n\t}\n}\n","import { Severity } from \"../config/severity\";\nimport { type ConfigReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class DeprecatedRule extends Rule<string> {\n\tpublic documentation(context: string): RuleDocumentation {\n\t\tconst preamble = context ? `The rule \"${context}\"` : \"This rule\";\n\t\treturn {\n\t\t\tdescription: `${preamble} is deprecated and should not be used any longer, consult documentation for further information.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"config:ready\", (event: ConfigReadyEvent) => {\n\t\t\tfor (const rule of this.getDeprecatedRules(event)) {\n\t\t\t\tif (rule.getSeverity() > Severity.DISABLED) {\n\t\t\t\t\tthis.report(null, `Usage of deprecated rule \"${rule.name}\"`, null, rule.name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate getDeprecatedRules(event: ConfigReadyEvent): Array<Rule<unknown, unknown>> {\n\t\tconst rules = Object.values(event.rules);\n\t\treturn rules.filter((rule) => rule.deprecated);\n\t}\n}\n","import { type DoctypeEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class NoStyleTag extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t'HTML5 documents should use the \"html\" doctype (short `form`, not legacy string):',\n\t\t\t\t\"\",\n\t\t\t\t\"```html\",\n\t\t\t\t\"<!DOCTYPE html>\",\n\t\t\t\t\"```\",\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"doctype\", (event: DoctypeEvent) => {\n\t\t\tconst doctype = event.value.toLowerCase();\n\t\t\tif (doctype !== \"html\") {\n\t\t\t\tthis.report(null, 'doctype should be \"html\"', event.valueLocation);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type DoctypeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleContext {\n\tstyle: \"uppercase\" | \"lowercase\";\n}\n\ninterface RuleOptions {\n\tstyle: \"uppercase\" | \"lowercase\";\n}\n\nconst defaults: RuleOptions = {\n\tstyle: \"uppercase\",\n};\n\nexport default class DoctypeStyle extends Rule<RuleContext, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tstyle: {\n\t\t\t\tenum: [\"lowercase\", \"uppercase\"],\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `While DOCTYPE is case-insensitive in the standard the current configuration requires it to be ${context.style}`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"doctype\", (event: DoctypeEvent) => {\n\t\t\tif (this.options.style === \"uppercase\" && event.tag !== \"DOCTYPE\") {\n\t\t\t\tthis.report(null, \"DOCTYPE should be uppercase\", event.location, this.options);\n\t\t\t}\n\t\t\tif (this.options.style === \"lowercase\" && event.tag !== \"doctype\") {\n\t\t\t\tthis.report(null, \"DOCTYPE should be lowercase\", event.location, this.options);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type Location, sliceLocation } from \"../context\";\nimport { type HtmlElement } from \"../dom\";\nimport { type TagEndEvent, type TagStartEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { type CaseStyleName, CaseStyle } from \"./helper/case-style\";\n\ninterface RuleOptions {\n\tstyle: CaseStyleName | CaseStyleName[];\n}\n\nconst defaults: RuleOptions = {\n\tstyle: \"lowercase\",\n};\n\nexport default class ElementCase extends Rule<void, RuleOptions> {\n\tprivate style: CaseStyle;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.style = new CaseStyle(this.options.style, \"element-case\");\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\tconst styleEnum = [\"lowercase\", \"uppercase\", \"pascalcase\", \"camelcase\"];\n\t\treturn {\n\t\t\tstyle: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\tenum: styleEnum,\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\tenum: styleEnum,\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\tconst { style } = this.options;\n\t\treturn {\n\t\t\tdescription: Array.isArray(style)\n\t\t\t\t? [`Element tagname must be in one of:`, \"\", ...style.map((it) => `- ${it}`)].join(\"\\n\")\n\t\t\t\t: `Element tagname must be in ${style}.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:start\", (event: TagStartEvent) => {\n\t\t\tconst { target, location } = event;\n\t\t\tthis.validateCase(target, location);\n\t\t});\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\tconst { target, previous } = event;\n\t\t\tthis.validateMatchingCase(previous, target);\n\t\t});\n\t}\n\n\tprivate validateCase(target: HtmlElement, targetLocation: Location): void {\n\t\tconst letters = target.tagName.replace(/[^a-z]+/gi, \"\");\n\t\tif (!this.style.match(letters)) {\n\t\t\tconst location = sliceLocation(targetLocation, 1);\n\t\t\tthis.report(target, `Element \"${target.tagName}\" should be ${this.style.name}`, location);\n\t\t}\n\t}\n\n\tprivate validateMatchingCase(start: HtmlElement | null, end: HtmlElement | null): void {\n\t\t/* handle when elements have have missing start or end tag */\n\t\tif (!start || !end || !start.tagName || !end.tagName) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* only check case if the names are a lowercase match to each other or it\n\t\t * will yield false positives when elements are closed in wrong order or\n\t\t * otherwise mismatched */\n\t\tif (start.tagName.toLowerCase() !== end.tagName.toLowerCase()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (start.tagName !== end.tagName) {\n\t\t\tthis.report(start, \"Start and end tag must not differ in casing\", end.location);\n\t\t}\n\t}\n}\n","import { sliceLocation } from \"../context\";\nimport { type TagStartEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface Context {\n\ttagName: string;\n\tpattern: string;\n\tblacklist: string[];\n}\n\ninterface RuleOptions {\n\tpattern: string;\n\twhitelist: string[];\n\tblacklist: string[];\n}\n\nconst defaults: RuleOptions = {\n\tpattern: \"^[a-z][a-z0-9\\\\-._]*-[a-z0-9\\\\-._]*$\",\n\twhitelist: [],\n\tblacklist: [],\n};\n\nexport default class ElementName extends Rule<Context, RuleOptions> {\n\tprivate pattern: RegExp;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\n\t\t/* eslint-disable-next-line security/detect-non-literal-regexp -- expected to be a regexp */\n\t\tthis.pattern = new RegExp(this.options.pattern);\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tblacklist: {\n\t\t\t\titems: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t\ttype: \"array\",\n\t\t\t},\n\t\t\tpattern: {\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t\twhitelist: {\n\t\t\t\titems: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t\ttype: \"array\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: Context): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: this.documentationMessages(context).join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tprivate documentationMessages(context: Context): string[] {\n\t\tif (context.blacklist.includes(context.tagName)) {\n\t\t\treturn [\n\t\t\t\t`<${context.tagName}> is blacklisted by the project configuration.`,\n\t\t\t\t\"\",\n\t\t\t\t\"The following names are blacklisted:\",\n\t\t\t\t...context.blacklist.map((cur) => `- ${cur}`),\n\t\t\t];\n\t\t}\n\n\t\tif (context.pattern !== defaults.pattern) {\n\t\t\treturn [\n\t\t\t\t`<${context.tagName}> is not a valid element name. This project is configured to only allow names matching the following regular expression:`,\n\t\t\t\t\"\",\n\t\t\t\t`- \\`${context.pattern}\\``,\n\t\t\t];\n\t\t}\n\n\t\treturn [\n\t\t\t`<${context.tagName}> is not a valid element name. If this is a custom element HTML requires the name to follow these rules:`,\n\t\t\t\"\",\n\t\t\t\"- The name must begin with `a-z`\",\n\t\t\t\"- The name must include a hyphen `-`\",\n\t\t\t\"- It may include alphanumerical characters `a-z0-9` or hyphens `-`, dots `.` or underscores `_`.\",\n\t\t];\n\t}\n\n\tpublic setup(): void {\n\t\tconst xmlns = /^(.+):.+$/;\n\t\tthis.on(\"tag:start\", (event: TagStartEvent) => {\n\t\t\tconst target = event.target;\n\t\t\tconst tagName = target.tagName;\n\t\t\tconst location = sliceLocation(event.location, 1);\n\t\t\tconst context: Context = {\n\t\t\t\ttagName,\n\t\t\t\tpattern: this.options.pattern,\n\t\t\t\tblacklist: this.options.blacklist,\n\t\t\t};\n\n\t\t\t/* check if element is blacklisted */\n\t\t\tif (this.options.blacklist.includes(tagName)) {\n\t\t\t\tthis.report(target, `<${tagName}> element is blacklisted`, location, context);\n\t\t\t}\n\n\t\t\t/* assume that an element with meta has valid name as it is a builtin\n\t\t\t * element */\n\t\t\tif (target.meta) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore elements in xml namespaces, they should be validated against a\n\t\t\t * DTD instead */\n\t\t\tif (tagName.match(xmlns)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* check if element is whitelisted */\n\t\t\tif (this.options.whitelist.includes(tagName)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!tagName.match(this.pattern)) {\n\t\t\t\tthis.report(target, `<${tagName}> is not a valid element name`, location, context);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { Validator } from \"../meta\";\nimport { type Permitted } from \"../meta/element\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { walk } from \"../utils\";\n\nexport enum ErrorKind {\n\tCONTENT = \"content\",\n\tDESCENDANT = \"descendant\",\n}\n\nexport interface ContentContext {\n\tkind: ErrorKind.CONTENT;\n\tparent: string;\n\tchild: string;\n}\n\nexport interface DescendantContext {\n\tkind: ErrorKind.DESCENDANT;\n\tancestor: string;\n\tchild: string;\n}\n\ntype RuleContext = ContentContext | DescendantContext;\n\nfunction getTransparentChildren(node: HtmlElement, transparent: boolean | string[]): HtmlElement[] {\n\tif (typeof transparent === \"boolean\") {\n\t\treturn node.childElements;\n\t} else {\n\t\t/* only return children which matches one of the given content categories */\n\t\treturn node.childElements.filter((it) => {\n\t\t\treturn transparent.some((category) => {\n\t\t\t\treturn Validator.validatePermittedCategory(it, category, false);\n\t\t\t});\n\t\t});\n\t}\n}\n\nfunction getRuleDescription(context: RuleContext): string[] {\n\tswitch (context.kind) {\n\t\tcase ErrorKind.CONTENT:\n\t\t\treturn [\n\t\t\t\t`The \\`${context.child}\\` element is not permitted as content under the parent \\`${context.parent}\\` element.`,\n\t\t\t];\n\t\tcase ErrorKind.DESCENDANT:\n\t\t\treturn [\n\t\t\t\t`The \\`${context.child}\\` element is not permitted as a descendant of the \\`${context.ancestor}\\` element.`,\n\t\t\t];\n\t}\n}\n\nexport default class ElementPermittedContent extends Rule<RuleContext> {\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: getRuleDescription(context).join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\tconst parent = node.parent;\n\n\t\t\t\t/* istanbul ignore next: satisfy typescript but will visitDepthFirst()\n\t\t\t\t * will not yield nodes without a parent */\n\t\t\t\tif (!parent) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t/* Run each validation step, stop as soon as any errors are\n\t\t\t\t * reported. This is to prevent multiple similar errors on the same\n\t\t\t\t * element, such as \"<dd> is not permitted content under <span>\" and\n\t\t\t\t * \"<dd> has no permitted ancestors\". */\n\t\t\t\t[\n\t\t\t\t\t() => this.validatePermittedContent(node, parent),\n\t\t\t\t\t() => this.validatePermittedDescendant(node, parent),\n\t\t\t\t].some((fn) => fn());\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate validatePermittedContent(cur: HtmlElement, parent: HtmlElement): boolean {\n\t\t/* if parent doesn't have metadata (unknown element) skip checking permitted\n\t\t * content */\n\t\tif (!parent.meta) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst rules = parent.meta.permittedContent ?? null;\n\t\treturn this.validatePermittedContentImpl(cur, parent, rules);\n\t}\n\n\tprivate validatePermittedContentImpl(\n\t\tcur: HtmlElement,\n\t\tparent: HtmlElement,\n\t\trules: Permitted | null,\n\t): boolean {\n\t\tif (!Validator.validatePermitted(cur, rules)) {\n\t\t\tconst child = `<${cur.tagName}>`;\n\t\t\tconst message = `${child} element is not permitted as content under ${parent.annotatedName}`;\n\t\t\tconst context: ContentContext = {\n\t\t\t\tkind: ErrorKind.CONTENT,\n\t\t\t\tparent: parent.annotatedName,\n\t\t\t\tchild,\n\t\t\t};\n\t\t\tthis.report(cur, message, null, context);\n\t\t\treturn true;\n\t\t}\n\n\t\t/* for transparent elements all/listed children must be validated against\n\t\t * the (this elements) parent, i.e. if this node was removed from the DOM it\n\t\t * should still be valid. */\n\t\tif (cur.meta?.transparent) {\n\t\t\tconst children = getTransparentChildren(cur, cur.meta.transparent);\n\t\t\treturn children\n\t\t\t\t.map((child: HtmlElement) => {\n\t\t\t\t\treturn this.validatePermittedContentImpl(child, parent, rules);\n\t\t\t\t})\n\t\t\t\t.some(Boolean);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate validatePermittedDescendant(node: HtmlElement, parent: HtmlElement | null): boolean {\n\t\tfor (\n\t\t\tlet cur = parent;\n\t\t\tcur && !cur.isRootElement();\n\t\t\tcur = /* istanbul ignore next */ cur?.parent ?? null\n\t\t) {\n\t\t\tconst meta = cur.meta;\n\n\t\t\t/* ignore checking parent without meta */\n\t\t\tif (!meta) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst rules = meta.permittedDescendants;\n\t\t\tif (!rules) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (Validator.validatePermitted(node, rules)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst child = `<${node.tagName}>`;\n\t\t\tconst ancestor = cur.annotatedName;\n\t\t\tconst message = `${child} element is not permitted as a descendant of ${ancestor}`;\n\t\t\tconst context: DescendantContext = {\n\t\t\t\tkind: ErrorKind.DESCENDANT,\n\t\t\t\tancestor,\n\t\t\t\tchild,\n\t\t\t};\n\t\t\tthis.report(node, message, null, context);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { Validator } from \"../meta\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { walk } from \"../utils\";\n\nexport default class ElementPermittedOccurrences extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"Some elements may only be used a fixed amount of times in given context.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\tif (!node.meta) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst rules = node.meta.permittedContent;\n\t\t\t\tif (!rules) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tValidator.validateOccurrences(\n\t\t\t\t\tnode.childElements,\n\t\t\t\t\trules,\n\t\t\t\t\t(child: HtmlElement, category: string) => {\n\t\t\t\t\t\tthis.report(\n\t\t\t\t\t\t\tchild,\n\t\t\t\t\t\t\t`Element <${category}> can only appear once under ${node.annotatedName}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { Validator } from \"../meta\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { walk } from \"../utils\";\n\nexport default class ElementPermittedOrder extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"Some elements has a specific order the children must use.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\tif (!node.meta) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst rules = node.meta.permittedOrder;\n\t\t\t\tif (!rules) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tValidator.validateOrder(\n\t\t\t\t\tnode.childElements,\n\t\t\t\t\trules,\n\t\t\t\t\t(child: HtmlElement, prev: HtmlElement) => {\n\t\t\t\t\t\tthis.report(\n\t\t\t\t\t\t\tchild,\n\t\t\t\t\t\t\t`Element <${child.tagName}> must be used before <${prev.tagName}> in this context`,\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type CategoryOrTag, Validator } from \"../meta\";\nimport { type Permitted, type PermittedEntry } from \"../meta/element\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { naturalJoin } from \"../utils/natural-join\";\nimport { walk } from \"../utils\";\n\nexport interface RuleContext {\n\tparent: string;\n\tchild: string;\n\trules: Permitted;\n}\n\nfunction isCategoryOrTag(value: PermittedEntry): value is CategoryOrTag {\n\treturn typeof value === \"string\";\n}\n\nfunction isCategory(value: CategoryOrTag): boolean {\n\treturn value.startsWith(\"@\");\n}\n\nfunction formatCategoryOrTag(value: CategoryOrTag): string {\n\treturn isCategory(value) ? value.slice(1) : `<${value}>`;\n}\n\nfunction isFormattable(rules: Permitted): rules is CategoryOrTag[] {\n\treturn rules.length > 0 && rules.every(isCategoryOrTag);\n}\n\nfunction getRuleDescription(context: RuleContext): string[] {\n\tconst { child, parent, rules } = context;\n\tconst preamble = `The \\`${child}\\` element cannot have a \\`${parent}\\` element as parent.`;\n\tif (isFormattable(rules)) {\n\t\tconst allowed = rules.filter(isCategoryOrTag).map((it) => {\n\t\t\tif (isCategory(it)) {\n\t\t\t\treturn `- any ${it.slice(1)} element`;\n\t\t\t} else {\n\t\t\t\treturn `- \\`<${it}>\\``;\n\t\t\t}\n\t\t});\n\t\treturn [preamble, \"\", \"Allowed parents one of:\", \"\", ...allowed];\n\t} else {\n\t\treturn [preamble];\n\t}\n}\n\nfunction formatMessage(node: HtmlElement, parent: HtmlElement, rules: Permitted): string {\n\tconst nodeName = node.annotatedName;\n\tconst parentName = parent.annotatedName;\n\tif (!isFormattable(rules)) {\n\t\treturn `${nodeName} element cannot have ${parentName} element as parent`;\n\t}\n\tconst allowed = naturalJoin(rules.filter(isCategoryOrTag).map(formatCategoryOrTag));\n\treturn `${nodeName} element requires a ${allowed} element as parent`;\n}\n\nexport default class ElementPermittedParent extends Rule<RuleContext> {\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: getRuleDescription(context).join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\tconst parent = node.parent;\n\n\t\t\t\t/* istanbul ignore next: satisfy typescript but will visitDepthFirst()\n\t\t\t\t * will not yield nodes without a parent */\n\t\t\t\tif (!parent) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t/* don't validate root element as the <html> and <body> tag is optional\n\t\t\t\t * so anything could be directly under the root element. */\n\t\t\t\tif (parent.isRootElement()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t/* when the parent element is the same as the current element we ignore\n\t\t\t\t * this rule and let `element-permitted-content` handle it as it will\n\t\t\t\t * create a lot of duplicate errors otherwise */\n\t\t\t\tif (parent.tagName === node.tagName) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t/* if parent doesn't have metadata (unknown element) skip checking permitted\n\t\t\t\t * content */\n\t\t\t\tconst rules = node.meta?.permittedParent;\n\t\t\t\tif (!rules) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (Validator.validatePermitted(parent, rules)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst message = formatMessage(node, parent, rules);\n\t\t\t\tconst context: RuleContext = {\n\t\t\t\t\tparent: parent.annotatedName,\n\t\t\t\t\tchild: node.annotatedName,\n\t\t\t\t\trules,\n\t\t\t\t};\n\t\t\t\tthis.report(node, message, null, context);\n\t\t\t});\n\t\t});\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { Validator } from \"../meta\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { naturalJoin } from \"../utils/natural-join\";\nimport { walk } from \"../utils\";\n\nexport interface RuleContext {\n\tancestor: string[];\n\tchild: string;\n}\n\nfunction isTagnameOnly(value: string): boolean {\n\treturn Boolean(value.match(/^[a-zA-Z0-9-]+$/));\n}\n\nfunction getRuleDescription(context: RuleContext): string[] {\n\tconst escaped = context.ancestor.map((it) => `\\`${it}\\``);\n\treturn [`The \\`${context.child}\\` element requires a ${naturalJoin(escaped)} ancestor.`];\n}\n\nexport default class ElementRequiredAncestor extends Rule<RuleContext> {\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: getRuleDescription(context).join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\tconst parent = node.parent;\n\n\t\t\t\t/* istanbul ignore next: satisfy typescript but will visitDepthFirst()\n\t\t\t\t * will not yield nodes without a parent */\n\t\t\t\tif (!parent) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.validateRequiredAncestors(node);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate validateRequiredAncestors(node: HtmlElement): void {\n\t\tif (!node.meta) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst rules = node.meta.requiredAncestors;\n\t\tif (!rules) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (Validator.validateAncestors(node, rules)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst ancestor = rules.map((it) => (isTagnameOnly(it) ? `<${it}>` : `\"${it}\"`));\n\t\tconst child = `<${node.tagName}>`;\n\t\tconst message = `<${node.tagName}> element requires a ${naturalJoin(ancestor)} ancestor`;\n\t\tconst context: RuleContext = {\n\t\t\tancestor,\n\t\t\tchild,\n\t\t};\n\t\tthis.report(node, message, null, context);\n\t}\n}\n","import { type TagEndEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface Context {\n\telement: string;\n\tattribute: string;\n}\n\nexport default class ElementRequiredAttributes extends Rule<Context> {\n\tpublic documentation(context?: Context): RuleDocumentation {\n\t\tconst docs: RuleDocumentation = {\n\t\t\tdescription: \"Element is missing a required attribute\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\n\t\tif (context) {\n\t\t\tdocs.description = `The <${context.element}> element is required to have a \"${context.attribute}\" attribute.`;\n\t\t}\n\n\t\treturn docs;\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\tconst node = event.previous;\n\t\t\tconst meta = node.meta;\n\n\t\t\t/* handle missing metadata and missing attributes */\n\t\t\tif (!meta?.attributes) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (const [key, attr] of Object.entries(meta.attributes)) {\n\t\t\t\tif (!attr.required) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (node.hasAttribute(key)) continue;\n\n\t\t\t\tconst context: Context = {\n\t\t\t\t\telement: node.tagName,\n\t\t\t\t\tattribute: key,\n\t\t\t\t};\n\n\t\t\t\tthis.report(\n\t\t\t\t\tnode,\n\t\t\t\t\t`${node.annotatedName} is missing required \"${key}\" attribute`,\n\t\t\t\t\tnode.location,\n\t\t\t\t\tcontext,\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type CategoryOrTag, Validator } from \"../meta\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { walk } from \"../utils\";\n\ninterface Context {\n\telement: string;\n\tmissing: string;\n}\n\nfunction isCategory(value: CategoryOrTag): boolean {\n\treturn value.startsWith(\"@\");\n}\n\nexport default class ElementRequiredContent extends Rule<Context> {\n\tpublic documentation(context: Context): RuleDocumentation {\n\t\tconst { element, missing } = context;\n\t\treturn {\n\t\t\tdescription: `The \\`${element}\\` element requires a \\`${missing}\\` to be present as content.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\t/* if element doesn't have metadata (unknown element) skip checking\n\t\t\t\t * required content */\n\t\t\t\tif (!node.meta) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst rules = node.meta.requiredContent;\n\t\t\t\tif (!rules) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (const missing of Validator.validateRequiredContent(node, rules)) {\n\t\t\t\t\tconst context: Context = {\n\t\t\t\t\t\telement: node.annotatedName,\n\t\t\t\t\t\tmissing: `<${missing}>`,\n\t\t\t\t\t};\n\t\t\t\t\tconst tag = isCategory(missing) ? `${missing.slice(1)} element` : `<${missing}>`;\n\t\t\t\t\tconst message = `${node.annotatedName} element must have ${tag} as content`;\n\t\t\t\t\tthis.report(node, message, null, context);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { hasAltText } from \"./helper\";\nimport { classifyNodeText, TextClassification } from \"./helper/text\";\n\nconst selector = [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"].join(\",\");\n\nfunction hasImgAltText(node: HtmlElement): boolean {\n\tif (node.is(\"img\")) {\n\t\treturn hasAltText(node);\n\t} else if (node.is(\"svg\")) {\n\t\treturn node.textContent.trim() !== \"\";\n\t}\n\n\t/* istanbul ignore next -- querySelector(..) is only going to return the two\n\t * above tags but this serves as a sane default if above assumption changes */\n\treturn false;\n}\n\nexport default class EmptyHeading extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `Assistive technology such as screen readers require textual content in headings. Whitespace only is considered empty.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", ({ document }) => {\n\t\t\tconst headings = document.querySelectorAll(selector);\n\t\t\tfor (const heading of headings) {\n\t\t\t\tthis.validateHeading(heading);\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected validateHeading(heading: HtmlElement): void {\n\t\tconst images = heading.querySelectorAll(\"img, svg\");\n\t\tfor (const child of images) {\n\t\t\tif (hasImgAltText(child)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tswitch (classifyNodeText(heading, { ignoreHiddenRoot: true })) {\n\t\t\tcase TextClassification.DYNAMIC_TEXT:\n\t\t\tcase TextClassification.STATIC_TEXT:\n\t\t\t\t/* have some text content, consider ok */\n\t\t\t\tbreak;\n\t\t\tcase TextClassification.EMPTY_TEXT:\n\t\t\t\t/* no content or whitespace only */\n\t\t\t\tthis.report(heading, `<${heading.tagName}> cannot be empty, must have text content`);\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n","import { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { classifyNodeText, TextClassification } from \"./helper/text\";\n\nexport default class EmptyTitle extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t\"The `<title>` element cannot be empty, it must have textual content.\",\n\t\t\t\t\"\",\n\t\t\t\t\"It is used to describe the document and is shown in the browser tab and titlebar.\",\n\t\t\t\t\"WCAG and SEO requires a descriptive title and preferably unique within the site.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Whitespace is ignored.\",\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event) => {\n\t\t\tconst node = event.previous;\n\t\t\tif (node.tagName !== \"title\") return;\n\n\t\t\tswitch (classifyNodeText(node)) {\n\t\t\t\tcase TextClassification.DYNAMIC_TEXT:\n\t\t\t\tcase TextClassification.STATIC_TEXT:\n\t\t\t\t\t/* have some text content, consider ok */\n\t\t\t\t\tbreak;\n\t\t\t\tcase TextClassification.EMPTY_TEXT:\n\t\t\t\t\t/* no content or whitespace only */\n\t\t\t\t\t{\n\t\t\t\t\t\tconst message = `<${node.tagName}> cannot be empty, must have text content`;\n\t\t\t\t\t\tthis.report(node, message, node.location);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type Attribute, type DynamicValue, type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { partition } from \"./helper\";\n\ninterface ControlDetails {\n\t/** `true` if control has name ending with `[]` */\n\tarray: boolean;\n\n\t/** `true` if control is `type=\"hidden\"` and hasn't been used as a default value yet */\n\tpotentialHiddenDefault: boolean;\n}\n\nexport interface RuleContext {\n\tname: string;\n\tkind: \"duplicate\" | \"mix\";\n}\n\ninterface RuleOptions {\n\tallowArrayBrackets: boolean;\n\tallowCheckboxDefault: boolean;\n\tshared: Array<\"radio\" | \"checkbox\" | \"submit\" | \"button\" | \"reset\">;\n}\n\nconst defaults: RuleOptions = {\n\tallowArrayBrackets: true,\n\tallowCheckboxDefault: true,\n\tshared: [\"radio\", \"button\", \"reset\", \"submit\"],\n};\n\nconst UNIQUE_CACHE_KEY = Symbol(\"form-elements-unique\");\nconst SHARED_CACHE_KEY = Symbol(\"form-elements-shared\");\n\ndeclare module \"../dom/cache\" {\n\texport interface DOMNodeCache {\n\t\t[UNIQUE_CACHE_KEY]: Map<string, ControlDetails>;\n\t\t[SHARED_CACHE_KEY]: Map<string, string>;\n\t}\n}\n\nfunction haveName(name: string | DynamicValue | null | undefined): name is string {\n\treturn typeof name === \"string\" && name !== \"\";\n}\n\nfunction allowSharedName(node: HtmlElement, shared: string[]): boolean {\n\tconst type = node.getAttribute(\"type\");\n\treturn Boolean(type?.valueMatches(shared, false));\n}\n\nfunction isInputHidden(element: HtmlElement): boolean {\n\treturn element.is(\"input\") && element.getAttributeValue(\"type\") === \"hidden\";\n}\n\nfunction isInputCheckbox(element: HtmlElement): boolean {\n\treturn element.is(\"input\") && element.getAttributeValue(\"type\") === \"checkbox\";\n}\n\nfunction isCheckboxWithDefault(\n\tcontrol: HtmlElement,\n\tprevious: ControlDetails,\n\toptions: RuleOptions,\n): boolean {\n\tconst { allowCheckboxDefault } = options;\n\tif (!allowCheckboxDefault) {\n\t\treturn false;\n\t}\n\tif (!previous.potentialHiddenDefault) {\n\t\treturn false;\n\t}\n\tif (!isInputCheckbox(control)) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction getDocumentation(context: RuleContext): string {\n\tconst trailer = \"Each form control must have a unique name.\";\n\tconst { name } = context;\n\tswitch (context.kind) {\n\t\tcase \"duplicate\":\n\t\t\treturn [`Duplicate form control name \"${name}\"`, trailer].join(\"\\n\");\n\t\tcase \"mix\":\n\t\t\treturn [\n\t\t\t\t`Form control name cannot mix regular name \"{{ name }}\" with array brackets \"{{ name }}[]\"`,\n\t\t\t\ttrailer,\n\t\t\t].join(\"\\n\");\n\t}\n}\n\nexport default class FormDupName extends Rule<RuleContext, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tallowArrayBrackets: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t\tallowCheckboxDefault: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t\tshared: {\n\t\t\t\ttype: \"array\",\n\t\t\t\titems: {\n\t\t\t\t\tenum: [\"radio\", \"checkbox\", \"submit\", \"button\", \"reset\"],\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: getDocumentation(context),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tconst selector = this.getSelector();\n\t\tconst { shared } = this.options;\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tconst controls = document.querySelectorAll(selector);\n\t\t\tconst [sharedControls, uniqueControls] = partition(controls, (it) => {\n\t\t\t\treturn allowSharedName(it, shared);\n\t\t\t});\n\n\t\t\t/* validate all form controls which require unique elements first so each\n\t\t\t * form has a populated list of unique names */\n\t\t\tfor (const control of uniqueControls) {\n\t\t\t\tconst attr = control.getAttribute(\"name\");\n\t\t\t\tconst name = attr?.value;\n\t\t\t\tif (!attr || !haveName(name)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst group = control.closest(\"form, template\") ?? document.root;\n\t\t\t\tthis.validateUniqueName(control, group, attr, name);\n\t\t\t}\n\n\t\t\t/* validate all form controls which allows shared names to ensure there is\n\t\t\t * no collision with other form controls */\n\t\t\tfor (const control of sharedControls) {\n\t\t\t\tconst attr = control.getAttribute(\"name\");\n\t\t\t\tconst name = attr?.value;\n\t\t\t\tif (!attr || !haveName(name)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst group = control.closest(\"form, template\") ?? document.root;\n\t\t\t\tthis.validateSharedName(control, group, attr, name);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate validateUniqueName(\n\t\tcontrol: HtmlElement,\n\t\tgroup: HtmlElement,\n\t\tattr: Attribute,\n\t\tname: string,\n\t): void {\n\t\tconst elements = this.getUniqueElements(group);\n\t\tconst { allowArrayBrackets } = this.options;\n\n\t\tif (allowArrayBrackets) {\n\t\t\tconst isarray = name.endsWith(\"[]\");\n\t\t\tconst basename = isarray ? name.slice(0, -2) : name;\n\t\t\tconst details = elements.get(basename);\n\n\t\t\t/* if a previous occurrence is found and one of the two is an array it is an error */\n\t\t\tif (details && details.array !== isarray) {\n\t\t\t\tconst context: RuleContext = {\n\t\t\t\t\tname: basename,\n\t\t\t\t\tkind: \"mix\",\n\t\t\t\t};\n\t\t\t\tthis.report({\n\t\t\t\t\tnode: control,\n\t\t\t\t\tlocation: attr.valueLocation,\n\t\t\t\t\tmessage: 'Cannot mix \"{{ name }}[]\" and \"{{ name }}\"',\n\t\t\t\t\tcontext,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* if this is an new array name store it for future tests */\n\t\t\tif (!details && isarray) {\n\t\t\t\telements.set(basename, {\n\t\t\t\t\tarray: true,\n\t\t\t\t\tpotentialHiddenDefault: false,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t/* if this is an array and the previous test passed (no mixing array and\n\t\t\t * non-array) no further testing needs to be done on this element. */\n\t\t\tif (isarray) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst previous = elements.get(name);\n\t\tif (previous) {\n\t\t\tif (isCheckboxWithDefault(control, previous, this.options)) {\n\t\t\t\tprevious.potentialHiddenDefault = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst context: RuleContext = {\n\t\t\t\tname,\n\t\t\t\tkind: \"duplicate\",\n\t\t\t};\n\t\t\tthis.report({\n\t\t\t\tnode: control,\n\t\t\t\tlocation: attr.valueLocation,\n\t\t\t\tmessage: 'Duplicate form control name \"{{ name }}\"',\n\t\t\t\tcontext,\n\t\t\t});\n\t\t} else {\n\t\t\telements.set(name, {\n\t\t\t\tarray: false,\n\t\t\t\tpotentialHiddenDefault: isInputHidden(control),\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate validateSharedName(\n\t\tcontrol: HtmlElement,\n\t\tgroup: HtmlElement,\n\t\tattr: Attribute,\n\t\tname: string,\n\t): void {\n\t\tconst uniqueElements = this.getUniqueElements(group);\n\t\tconst sharedElements = this.getSharedElements(group);\n\t\t/* istanbul ignore next: type will always be set or shared name wouldn't be allowed */\n\t\tconst type = control.getAttributeValue(\"type\") ?? \"\";\n\t\tif (\n\t\t\tuniqueElements.has(name) ||\n\t\t\t(sharedElements.has(name) && sharedElements.get(name) !== type)\n\t\t) {\n\t\t\tconst context: RuleContext = {\n\t\t\t\tname,\n\t\t\t\tkind: \"duplicate\",\n\t\t\t};\n\t\t\tthis.report({\n\t\t\t\tnode: control,\n\t\t\t\tlocation: attr.valueLocation,\n\t\t\t\tmessage: 'Duplicate form control name \"{{ name }}\"',\n\t\t\t\tcontext,\n\t\t\t});\n\t\t}\n\t\tsharedElements.set(name, type);\n\t}\n\n\tprivate getSelector(): string {\n\t\tconst tags = this.getTagsWithProperty(\"formAssociated\").filter((it) => {\n\t\t\treturn this.isListedElement(it);\n\t\t});\n\t\treturn tags.join(\", \");\n\t}\n\n\tprivate isListedElement(tagName: string): boolean {\n\t\tconst meta = this.getMetaFor(tagName);\n\t\t/* istanbul ignore next: the earlier check for getTagsWithProperty ensures\n\t\t * these will actually be set so this is just an untestable fallback */\n\t\tif (!meta?.formAssociated) {\n\t\t\treturn false;\n\t\t}\n\t\treturn meta.formAssociated.listed;\n\t}\n\n\tprivate getUniqueElements(group: HtmlElement): Map<string, ControlDetails> {\n\t\tconst existing = group.cacheGet(UNIQUE_CACHE_KEY);\n\t\tif (existing) {\n\t\t\treturn existing;\n\t\t} else {\n\t\t\tconst elements = new Map<string, ControlDetails>();\n\t\t\tgroup.cacheSet(UNIQUE_CACHE_KEY, elements);\n\t\t\treturn elements;\n\t\t}\n\t}\n\n\tprivate getSharedElements(group: HtmlElement): Map<string, string> {\n\t\tconst existing = group.cacheGet(SHARED_CACHE_KEY);\n\t\tif (existing) {\n\t\t\treturn existing;\n\t\t} else {\n\t\t\tconst elements = new Map<string, string>();\n\t\t\tgroup.cacheSet(SHARED_CACHE_KEY, elements);\n\t\t\treturn elements;\n\t\t}\n\t}\n}\n","import { type Location, sliceLocation } from \"../context\";\nimport { type HtmlElement, Pattern } from \"../dom\";\nimport { type DOMInternalID } from \"../dom/domnode\";\nimport { type SelectorContext } from \"../dom/selector-context\";\nimport { type TagEndEvent, type TagReadyEvent, type TagStartEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleOptions {\n\tallowMultipleH1: boolean;\n\tminInitialRank: \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"any\" | false;\n\tsectioningRoots: string[];\n}\n\ninterface SectioningRoot {\n\tnode: DOMInternalID | null;\n\tcurrent: number;\n\th1Count: number;\n}\n\nconst defaults: RuleOptions = {\n\tallowMultipleH1: false,\n\tminInitialRank: \"h1\",\n\tsectioningRoots: [\"dialog\", '[role=\"dialog\"]', '[role=\"alertdialog\"]'],\n};\n\nfunction isRelevant(event: TagStartEvent): boolean {\n\tconst node = event.target;\n\treturn Boolean(node.meta?.heading);\n}\n\nfunction extractLevel(node: HtmlElement): number | null {\n\tconst match = node.tagName.match(/^[hH](\\d)$/);\n\tif (match) {\n\t\treturn parseInt(match[1], 10);\n\t} else {\n\t\treturn null;\n\t}\n}\n\nfunction parseMaxInitial(value: string | false): number {\n\tif (value === false || value === \"any\") {\n\t\treturn 6;\n\t}\n\tconst match = value.match(/^h(\\d)$/);\n\t/* istanbul ignore next: should never happen, schema validation should catch invalid values */\n\tif (!match) {\n\t\treturn 1;\n\t}\n\treturn parseInt(match[1], 10);\n}\n\nexport default class HeadingLevel extends Rule<void, RuleOptions> {\n\tprivate minInitialRank: number;\n\tprivate sectionRoots: Pattern[];\n\tprivate stack: SectioningRoot[] = [];\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.minInitialRank = parseMaxInitial(this.options.minInitialRank);\n\t\tthis.sectionRoots = this.options.sectioningRoots.map((it) => new Pattern(it));\n\n\t\t/* add a global sectioning root used by default */\n\t\tthis.stack.push({\n\t\t\tnode: null,\n\t\t\tcurrent: 0,\n\t\t\th1Count: 0,\n\t\t});\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tallowMultipleH1: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t\tminInitialRank: {\n\t\t\t\tenum: [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"any\", false],\n\t\t\t},\n\t\t\tsectioningRoots: {\n\t\t\t\titems: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t\ttype: \"array\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\tconst text: string[] = [];\n\t\tconst modality = this.minInitialRank > 1 ? \"should\" : \"must\";\n\t\ttext.push(`Headings ${modality} start at <h1> and can only increase one level at a time.`);\n\t\ttext.push(\"The headings should form a table of contents and make sense on its own.\");\n\t\tif (!this.options.allowMultipleH1) {\n\t\t\ttext.push(\"\");\n\t\t\ttext.push(\n\t\t\t\t\"Under the current configuration only a single <h1> can be present at a time in the document.\",\n\t\t\t);\n\t\t}\n\t\treturn {\n\t\t\tdescription: text.join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:start\", isRelevant, (event: TagStartEvent) => {\n\t\t\tthis.onTagStart(event);\n\t\t});\n\t\tthis.on(\"tag:ready\", (event: TagReadyEvent) => {\n\t\t\tthis.onTagReady(event);\n\t\t});\n\t\tthis.on(\"tag:close\", (event: TagEndEvent) => {\n\t\t\tthis.onTagClose(event);\n\t\t});\n\t}\n\n\tprivate onTagStart(event: TagStartEvent): void {\n\t\t/* extract heading level from tagName (e.g \"h1\" -> 1)*/\n\t\tconst level = extractLevel(event.target);\n\t\tif (!level) return;\n\n\t\t/* fetch the current sectioning root */\n\t\tconst root = this.getCurrentRoot();\n\n\t\t/* do not allow multiple h1 */\n\t\tif (!this.options.allowMultipleH1 && level === 1) {\n\t\t\tif (root.h1Count >= 1) {\n\t\t\t\tconst location = sliceLocation(event.location, 1);\n\t\t\t\tthis.report(event.target, `Multiple <h1> are not allowed`, location);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\troot.h1Count++;\n\t\t}\n\n\t\t/* allow same level or decreasing to any level (e.g. from h4 to h2) */\n\t\tif (level <= root.current) {\n\t\t\troot.current = level;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.checkLevelIncrementation(root, event, level);\n\n\t\troot.current = level;\n\t}\n\n\t/**\n\t * Validate heading level was only incremented by one.\n\t */\n\tprivate checkLevelIncrementation(\n\t\troot: SectioningRoot,\n\t\tevent: TagStartEvent,\n\t\tlevel: number,\n\t): void {\n\t\tconst expected = root.current + 1;\n\n\t\t/* check if the new level is the expected one (headings with higher ranks\n\t\t * are skipped already) */\n\t\tif (level === expected) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* if this is the initial heading of the document it is compared to the\n\t\t * minimal allowed (default h1) */\n\t\tconst isInitial = this.stack.length === 1 && expected === 1;\n\t\tif (isInitial && level <= this.minInitialRank) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* if we reach this far the heading level is not accepted */\n\t\tconst location = sliceLocation(event.location, 1);\n\t\tif (root.current > 0) {\n\t\t\tconst expectedTag = `<h${String(expected)}>`;\n\t\t\tconst actualTag = `<h${String(level)}>`;\n\t\t\tconst msg = `Heading level can only increase by one, expected ${expectedTag} but got ${actualTag}`;\n\t\t\tthis.report(event.target, msg, location);\n\t\t} else {\n\t\t\tthis.checkInitialLevel(event, location, level, expected);\n\t\t}\n\t}\n\n\tprivate checkInitialLevel(\n\t\tevent: TagStartEvent,\n\t\tlocation: Location,\n\t\tlevel: number,\n\t\texpected: number,\n\t): void {\n\t\tconst expectedTag = `<h${String(expected)}>`;\n\t\tconst actualTag = `<h${String(level)}>`;\n\t\tif (this.stack.length === 1) {\n\t\t\tconst msg =\n\t\t\t\tthis.minInitialRank > 1\n\t\t\t\t\t? `Initial heading level must be <h${String(this.minInitialRank)}> or higher rank but got ${actualTag}`\n\t\t\t\t\t: `Initial heading level must be ${expectedTag} but got ${actualTag}`;\n\t\t\tthis.report(event.target, msg, location);\n\t\t} else {\n\t\t\tconst prevRoot = this.getPrevRoot();\n\t\t\tconst prevRootExpected = prevRoot.current + 1;\n\n\t\t\tif (level > prevRootExpected) {\n\t\t\t\tif (expected === prevRootExpected) {\n\t\t\t\t\tconst msg = `Initial heading level for sectioning root must be ${expectedTag} but got ${actualTag}`;\n\t\t\t\t\tthis.report(event.target, msg, location);\n\t\t\t\t} else {\n\t\t\t\t\tconst msg = `Initial heading level for sectioning root must be between ${expectedTag} and <h${String(prevRootExpected)}> but got ${actualTag}`;\n\t\t\t\t\tthis.report(event.target, msg, location);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Check if the current element is a sectioning root and push a new root entry\n\t * on the stack if it is.\n\t */\n\tprivate onTagReady(event: TagReadyEvent): void {\n\t\tconst { target } = event;\n\t\tif (this.isSectioningRoot(target)) {\n\t\t\tthis.stack.push({\n\t\t\t\tnode: target.unique,\n\t\t\t\tcurrent: 0,\n\t\t\t\th1Count: 0,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Check if the current element being closed is the element which opened the\n\t * current sectioning root, in which case the entry is popped from the stack.\n\t */\n\tprivate onTagClose(event: TagEndEvent): void {\n\t\tconst { previous: target } = event;\n\t\tconst root = this.getCurrentRoot();\n\t\tif (target.unique !== root.node) {\n\t\t\treturn;\n\t\t}\n\t\tthis.stack.pop();\n\t}\n\n\tprivate getPrevRoot(): SectioningRoot {\n\t\treturn this.stack[this.stack.length - 2];\n\t}\n\n\tprivate getCurrentRoot(): SectioningRoot {\n\t\treturn this.stack[this.stack.length - 1];\n\t}\n\n\tprivate isSectioningRoot(node: HtmlElement): boolean {\n\t\tconst context: SelectorContext = {\n\t\t\tscope: node,\n\t\t};\n\t\treturn this.sectionRoots.some((it) => it.match(node, context));\n\t}\n}\n","import { type HtmlElement } from \"../../dom\";\nimport { type MetaElement } from \"../../meta\";\nimport { isHTMLHidden, isInert, isStyleHidden } from \"./a11y\";\n\ndeclare module \"../../dom/cache\" {\n\texport interface DOMNodeCache {\n\t\t[FOCUSABLE_CACHE]: boolean;\n\t}\n}\n\nconst FOCUSABLE_CACHE = Symbol(isFocusable.name);\n\nfunction isDisabled(element: HtmlElement, meta: MetaElement): boolean {\n\tif (!meta.formAssociated?.disablable) {\n\t\treturn false;\n\t}\n\n\tconst disabled = element.matches(\"[disabled]\");\n\tif (disabled) {\n\t\treturn true;\n\t}\n\n\tconst fieldset = element.closest(\"fieldset[disabled]\");\n\tif (fieldset) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction isFocusableImpl(element: HtmlElement): boolean {\n\t/* if the element is hidden it is not focusable */\n\tif (isHTMLHidden(element) || isInert(element) || isStyleHidden(element)) {\n\t\treturn false;\n\t}\n\n\tconst { tabIndex, meta } = element;\n\n\t/* if tabindex is present (no matter the value) it takes precedence over\n\tmetadata as it can be used to disable otherwise focusable elements */\n\tif (tabIndex !== null) {\n\t\treturn tabIndex >= 0;\n\t}\n\n\tif (!meta) {\n\t\treturn false;\n\t}\n\n\tif (isDisabled(element, meta)) {\n\t\treturn false;\n\t}\n\n\t/* normally when this is called focusable has already been computed to a\n\t * concrete boolean (see [[Meta.resolve]]), if `isFocusable` is called before\n\t * the element is fully constructed and resolved we cannot know if the element\n\t * is actually focusable or not so consider anything that might ever be\n\t * focusable as focusable. */\n\treturn Boolean(meta.focusable);\n}\n\n/**\n * Tests if an element is focusable.\n *\n * @internal\n */\nexport function isFocusable(element: HtmlElement): boolean {\n\tconst cached = element.cacheGet(FOCUSABLE_CACHE);\n\t/* istanbul ignore next: no need to test cache */\n\tif (cached) {\n\t\treturn cached;\n\t}\n\treturn element.cacheSet(FOCUSABLE_CACHE, isFocusableImpl(element));\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { isAriaHidden } from \"./helper/a11y\";\nimport { isFocusable } from \"./helper/is-focusable\";\n\nexport type RuleContext = \"parent\" | \"self\";\n\nexport default class HiddenFocusable extends Rule<RuleContext> {\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\tconst byParent =\n\t\t\tcontext === \"parent\"\n\t\t\t\t? \" In this case it is being hidden by an ancestor with `aria-hidden.`\"\n\t\t\t\t: \"\";\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t`\\`aria-hidden\\` cannot be used on focusable elements.${byParent}`,\n\t\t\t\t\"\",\n\t\t\t\t\"When focusable elements are hidden with `aria-hidden` they are still reachable using conventional means such as a mouse or keyboard but won't be exposed to assistive technology (AT).\",\n\t\t\t\t\"This is often confusing for users of AT such as screenreaders.\",\n\t\t\t\t\"\",\n\t\t\t\t\"To fix this either:\",\n\t\t\t\t\" - Remove `aria-hidden`.\",\n\t\t\t\t\" - Remove the element from the DOM instead.\",\n\t\t\t\t' - Use `tabindex=\"-1\"` to remove the element from tab order.',\n\t\t\t\t\" - Use `hidden`, `inert` or similar means to hide or disable the element.\",\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tconst focusable = this.getTagsWithProperty(\"focusable\");\n\t\tconst selector = [\"[tabindex]\", ...focusable].join(\",\");\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tfor (const element of document.querySelectorAll(selector)) {\n\t\t\t\tif (isFocusable(element) && isAriaHidden(element)) {\n\t\t\t\t\tthis.reportElement(element);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate reportElement(element: HtmlElement): void {\n\t\tconst attribute = element.getAttribute(\"aria-hidden\");\n\t\tconst message = attribute\n\t\t\t? `aria-hidden cannot be used on focusable elements`\n\t\t\t: `aria-hidden cannot be used on focusable elements (hidden by ancestor element)`;\n\t\tconst location = attribute ? attribute.keyLocation : element.location;\n\t\tconst context = attribute ? \"self\" : \"parent\";\n\t\tthis.report({\n\t\t\tnode: element,\n\t\t\tmessage,\n\t\t\tlocation,\n\t\t\tcontext,\n\t\t});\n\t}\n}\n","import { DynamicValue } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, ruleDocumentationUrl } from \"../rule\";\nimport {\n\ttype BasePatternRuleContext,\n\ttype BasePatternRuleOptions,\n\tBasePatternRule,\n} from \"./base-pattern-rule\";\n\nconst defaults: BasePatternRuleOptions = {\n\tpattern: \"kebabcase\",\n};\n\nexport default class IdPattern extends BasePatternRule {\n\tpublic constructor(options: Partial<BasePatternRuleOptions>) {\n\t\tsuper(\"id\", { ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn BasePatternRule.schema();\n\t}\n\n\tpublic documentation(context: BasePatternRuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: this.description(context),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tconst { target, key, value, valueLocation } = event;\n\n\t\t\tif (key.toLowerCase() !== \"id\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* consider dynamic value as always matching the pattern */\n\t\t\tif (value instanceof DynamicValue) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* omitted value is always valid */\n\t\t\tif (value === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.validateValue(target, value, valueLocation);\n\t\t});\n\t}\n}\n","/* eslint-disable sonarjs/no-duplicate-string -- wont be easier to read or manage with constants */\n\nimport { type TagReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleContext {\n\tattribute: string;\n\ttype: string;\n}\n\nconst restricted = new Map<string, string[]>([\n\t[\"accept\", [\"file\"]],\n\t[\"alt\", [\"image\"]],\n\t[\"capture\", [\"file\"]],\n\t[\"checked\", [\"checkbox\", \"radio\"]],\n\t[\"dirname\", [\"text\", \"search\"]],\n\t[\"height\", [\"image\"]],\n\t[\n\t\t\"list\",\n\t\t[\n\t\t\t\"text\",\n\t\t\t\"search\",\n\t\t\t\"url\",\n\t\t\t\"tel\",\n\t\t\t\"email\",\n\t\t\t\"date\",\n\t\t\t\"month\",\n\t\t\t\"week\",\n\t\t\t\"time\",\n\t\t\t\"datetime-local\",\n\t\t\t\"number\",\n\t\t\t\"range\",\n\t\t\t\"color\",\n\t\t],\n\t],\n\t[\"max\", [\"date\", \"month\", \"week\", \"time\", \"datetime-local\", \"number\", \"range\"]],\n\t[\"maxlength\", [\"text\", \"search\", \"url\", \"tel\", \"email\", \"password\"]],\n\t[\"min\", [\"date\", \"month\", \"week\", \"time\", \"datetime-local\", \"number\", \"range\"]],\n\t[\"minlength\", [\"text\", \"search\", \"url\", \"tel\", \"email\", \"password\"]],\n\t[\"multiple\", [\"email\", \"file\"]],\n\t[\"pattern\", [\"text\", \"search\", \"url\", \"tel\", \"email\", \"password\"]],\n\t[\"placeholder\", [\"text\", \"search\", \"url\", \"tel\", \"email\", \"password\", \"number\"]],\n\t[\n\t\t\"readonly\",\n\t\t[\n\t\t\t\"text\",\n\t\t\t\"search\",\n\t\t\t\"url\",\n\t\t\t\"tel\",\n\t\t\t\"email\",\n\t\t\t\"password\",\n\t\t\t\"date\",\n\t\t\t\"month\",\n\t\t\t\"week\",\n\t\t\t\"time\",\n\t\t\t\"datetime-local\",\n\t\t\t\"number\",\n\t\t],\n\t],\n\t[\n\t\t\"required\",\n\t\t[\n\t\t\t\"text\",\n\t\t\t\"search\",\n\t\t\t\"url\",\n\t\t\t\"tel\",\n\t\t\t\"email\",\n\t\t\t\"password\",\n\t\t\t\"date\",\n\t\t\t\"month\",\n\t\t\t\"week\",\n\t\t\t\"time\",\n\t\t\t\"datetime-local\",\n\t\t\t\"number\",\n\t\t\t\"checkbox\",\n\t\t\t\"radio\",\n\t\t\t\"file\",\n\t\t],\n\t],\n\t[\"size\", [\"text\", \"search\", \"url\", \"tel\", \"email\", \"password\"]],\n\t[\"src\", [\"image\"]],\n\t[\"step\", [\"date\", \"month\", \"week\", \"time\", \"datetime-local\", \"number\", \"range\"]],\n\t[\"width\", [\"image\"]],\n]);\n\nfunction isInput(event: TagReadyEvent): boolean {\n\tconst { target } = event;\n\treturn target.is(\"input\");\n}\n\nexport default class InputAttributes extends Rule<RuleContext> {\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\tconst { attribute, type } = context;\n\t\tconst summary = `Attribute \\`${attribute}\\` is not allowed on \\`<input type=\"${type}\">\\`\\n`;\n\t\tconst details = `\\`${attribute}\\` can only be used when \\`type\\` is:`;\n\t\tconst list = restricted.get(attribute)?.map((it) => `- \\`${it}\\``) ?? [];\n\t\treturn {\n\t\t\tdescription: [summary, details, ...list].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:ready\", isInput, (event: TagReadyEvent) => {\n\t\t\tconst { target } = event;\n\n\t\t\tconst type = target.getAttribute(\"type\");\n\t\t\tif (!type || type.isDynamic || !type.value) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst typeValue = type.value.toString();\n\n\t\t\tfor (const attr of target.attributes) {\n\t\t\t\tconst validTypes = restricted.get(attr.key);\n\t\t\t\tif (!validTypes) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (validTypes.includes(typeValue)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst context: RuleContext = {\n\t\t\t\t\tattribute: attr.key,\n\t\t\t\t\ttype: typeValue,\n\t\t\t\t};\n\t\t\t\tconst message = `Attribute \"${attr.key}\" is not allowed on <input type=\"${typeValue}\">`;\n\t\t\t\tthis.report(target, message, attr.keyLocation, context);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type DOMTree, type HtmlElement, DynamicValue, generateIdSelector } from \"../../dom\";\nimport { inAccessibilityTree } from \"./a11y\";\nimport { hasAltText } from \"./has-alt-text\";\nimport { classifyNodeText, TextClassification } from \"./text\";\n\ndeclare module \"../../dom/cache\" {\n\texport interface DOMNodeCache {\n\t\t[HAS_ACCESSIBLE_TEXT_CACHE]: boolean;\n\t}\n}\n\ninterface Context {\n\tdocument: DOMTree | HtmlElement;\n\treference: HtmlElement | null;\n}\n\nconst HAS_ACCESSIBLE_TEXT_CACHE = Symbol(hasAccessibleName.name);\n\nfunction isHidden(node: HtmlElement, context: Context): boolean {\n\tconst { reference } = context;\n\tif (reference?.isSameNode(node)) {\n\t\treturn false;\n\t} else {\n\t\treturn !inAccessibilityTree(node);\n\t}\n}\n\nfunction hasImgAltText(node: HtmlElement, context: Context): boolean {\n\tif (node.is(\"img\")) {\n\t\treturn hasAltText(node);\n\t} else if (node.is(\"svg\")) {\n\t\treturn node.textContent.trim() !== \"\";\n\t} else {\n\t\tfor (const img of node.querySelectorAll(\"img, svg\")) {\n\t\t\tconst hasName = hasAccessibleNameImpl(img, context);\n\t\t\tif (hasName) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n}\n\nfunction hasLabel(node: HtmlElement): boolean {\n\tconst value = node.getAttributeValue(\"aria-label\") ?? \"\";\n\treturn Boolean(value.trim());\n}\n\nfunction isLabelledby(node: HtmlElement, context: Context): boolean {\n\tconst { document, reference } = context;\n\n\t/* if we already have resolved one level of reference we don't resolve another\n\t * level (as per accname step 2B) */\n\tif (reference) {\n\t\treturn false;\n\t}\n\n\tconst ariaLabelledby = node.ariaLabelledby;\n\n\t/* consider dynamic aria-labelledby as having a name as we cannot resolve it\n\t * so no way to prove correctness */\n\tif (ariaLabelledby instanceof DynamicValue) {\n\t\treturn true;\n\t}\n\n\t/* ignore elements without aria-labelledby */\n\tif (ariaLabelledby === null) {\n\t\treturn false;\n\t}\n\n\treturn ariaLabelledby.some((id) => {\n\t\tconst selector = generateIdSelector(id);\n\t\treturn document.querySelectorAll(selector).some((child) => {\n\t\t\treturn hasAccessibleNameImpl(child, {\n\t\t\t\tdocument,\n\t\t\t\treference: child,\n\t\t\t});\n\t\t});\n\t});\n}\n\n/**\n * This algorithm is based on [\"Accessible Name and Description Computation\n * 1.2\"][accname] with some exceptions:\n *\n * It doesn't compute the actual name but only the presence of one, e.g. if a\n * non-empty flat string is present the algorithm terminates with a positive\n * result.\n *\n * It takes some optimization shortcuts such as starting with step F as it\n * would be more common usage and as there is no actual name being computed\n * the order wont matter.\n *\n * [accname]: https://w3c.github.io/accname\n */\nfunction hasAccessibleNameImpl(current: HtmlElement, context: Context): boolean {\n\tconst { reference } = context;\n\n\t/* if this element is hidden (see function for exceptions) it does not have an accessible name */\n\tif (isHidden(current, context)) {\n\t\treturn false;\n\t}\n\n\t/* special case: when this element is directly referenced by aria-labelledby\n\t * we ignore `hidden` */\n\tconst ignoreHiddenRoot = Boolean(reference?.isSameNode(current));\n\n\tconst text = classifyNodeText(current, { accessible: true, ignoreHiddenRoot });\n\tif (text !== TextClassification.EMPTY_TEXT) {\n\t\treturn true;\n\t}\n\n\tif (hasImgAltText(current, context)) {\n\t\treturn true;\n\t}\n\n\tif (hasLabel(current)) {\n\t\treturn true;\n\t}\n\n\tif (isLabelledby(current, context)) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\n/**\n * Returns `true` if the element has an accessible name.\n *\n * It does not yet consider if the elements role prohibits naming, e.g. a `<p>`\n * element will still show up as having an accessible name.\n *\n * @public\n * @param document - Document element.\n * @param current - The element to get accessible name for\n * @returns `true` if the element has an accessible name.\n */\nexport function hasAccessibleName(document: DOMTree | HtmlElement, current: HtmlElement): boolean {\n\t/* istanbul ignore next: we're not testing cache */\n\tif (current.cacheExists(HAS_ACCESSIBLE_TEXT_CACHE)) {\n\t\treturn Boolean(current.cacheGet(HAS_ACCESSIBLE_TEXT_CACHE));\n\t}\n\n\tconst result = hasAccessibleNameImpl(current, {\n\t\tdocument,\n\t\treference: null,\n\t});\n\treturn current.cacheSet(HAS_ACCESSIBLE_TEXT_CACHE, result);\n}\n","import { type DOMTree, type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { inAccessibilityTree } from \"./helper/a11y\";\nimport { hasAccessibleName } from \"./helper/has-accessible-name\";\n\nfunction isIgnored(node: HtmlElement): boolean {\n\tif (node.is(\"input\")) {\n\t\tconst type = node.getAttributeValue(\"type\")?.toLowerCase();\n\t\tconst ignored = [\"hidden\", \"submit\", \"reset\", \"button\"];\n\t\treturn Boolean(type && ignored.includes(type));\n\t}\n\treturn false;\n}\n\nexport default class InputMissingLabel extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t\"Each form element must have an a label or accessible name.\",\n\t\t\t\t'Typically this is implemented using a `<label for=\"..\">` element describing the purpose of the form element.',\n\t\t\t\t\"\",\n\t\t\t\t\"This can be resolved in one of the following ways:\",\n\t\t\t\t\"\",\n\t\t\t\t' - Use an associated `<label for=\"..\">` element.',\n\t\t\t\t\" - Use a nested `<label>` as parent element.\",\n\t\t\t\t\" - Use `aria-label` or `aria-labelledby` attributes.\",\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst root = event.document;\n\t\t\tfor (const elem of root.querySelectorAll(\"input, textarea, select\")) {\n\t\t\t\tthis.validateInput(root, elem);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate validateInput(root: DOMTree, elem: HtmlElement): void {\n\t\tif (!inAccessibilityTree(elem)) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* hidden, submit, reset or button should not have label */\n\t\tif (isIgnored(elem)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (hasAccessibleName(root, elem)) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet label: HtmlElement[] = [];\n\n\t\t/* try to find label by id */\n\t\tif ((label = findLabelById(root, elem.id)).length > 0) {\n\t\t\tthis.validateLabel(root, elem, label);\n\t\t\treturn;\n\t\t}\n\n\t\t/* try to find parent label (input nested in label) */\n\t\tif ((label = findLabelByParent(elem)).length > 0) {\n\t\t\tthis.validateLabel(root, elem, label);\n\t\t\treturn;\n\t\t}\n\n\t\tif (elem.hasAttribute(\"aria-label\")) {\n\t\t\tthis.report(elem, `<${elem.tagName}> element has aria-label but label has no text`);\n\t\t} else if (elem.hasAttribute(\"aria-labelledby\")) {\n\t\t\tthis.report(\n\t\t\t\telem,\n\t\t\t\t`<${elem.tagName}> element has aria-labelledby but referenced element has no text`,\n\t\t\t);\n\t\t} else {\n\t\t\tthis.report(elem, `<${elem.tagName}> element does not have a <label>`);\n\t\t}\n\t}\n\n\t/**\n\t * Reports error if none of the labels are accessible.\n\t */\n\tprivate validateLabel(root: DOMTree, elem: HtmlElement, labels: HtmlElement[]): void {\n\t\tconst visible = labels.filter(inAccessibilityTree);\n\t\tif (visible.length === 0) {\n\t\t\tthis.report(elem, `<${elem.tagName}> element has <label> but <label> element is hidden`);\n\t\t\treturn;\n\t\t}\n\t\tif (!labels.some((label) => hasAccessibleName(root, label))) {\n\t\t\tthis.report(elem, `<${elem.tagName}> element has <label> but <label> has no text`);\n\t\t}\n\t}\n}\n\nfunction findLabelById(root: DOMTree, id: string | null): HtmlElement[] {\n\tif (!id) return [];\n\treturn root.querySelectorAll(`label[for=\"${id}\"]`);\n}\n\nfunction findLabelByParent(el: HtmlElement): HtmlElement[] {\n\tlet cur = el.parent;\n\twhile (cur) {\n\t\tif (cur.is(\"label\")) {\n\t\t\treturn [cur];\n\t\t}\n\t\tcur = cur.parent;\n\t}\n\treturn [];\n}\n","import { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleOptions {\n\tmaxlength: number;\n}\n\nconst defaults: RuleOptions = {\n\tmaxlength: 70,\n};\n\nexport default class LongTitle extends Rule<void, RuleOptions> {\n\tprivate maxlength: number;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.maxlength = this.options.maxlength;\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tmaxlength: {\n\t\t\t\ttype: \"number\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `Search engines truncates titles with long text, possibly down-ranking the page in the process.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event) => {\n\t\t\tconst node = event.previous;\n\t\t\tif (node.tagName !== \"title\") return;\n\n\t\t\tconst text = node.textContent;\n\t\t\tif (text.length > this.maxlength) {\n\t\t\t\tthis.report(node, `title text cannot be longer than ${String(this.maxlength)} characters`);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type Location } from \"../context\";\nimport { type HtmlElement } from \"../dom\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleOptions {\n\tallowLongDelay: boolean;\n}\n\nconst defaults: RuleOptions = {\n\tallowLongDelay: false,\n};\n\nexport default class MetaRefresh extends Rule<void, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `Meta refresh directive must use the \\`0;url=...\\` format. Non-zero values for time interval is disallowed as people with assistive technology might be unable to read and understand the page content before automatically reloading. For the same reason skipping the url is disallowed as it would put the browser in an infinite loop reloading the same page over and over again.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"element:ready\", ({ target }) => {\n\t\t\t/* only handle <meta> */\n\t\t\tif (!target.is(\"meta\")) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* only handle refresh */\n\t\t\tconst httpEquiv = target.getAttributeValue(\"http-equiv\");\n\t\t\tif (httpEquiv !== \"refresh\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ensure content attribute is set */\n\t\t\tconst content = target.getAttribute(\"content\");\n\t\t\tif (!content?.value || content.isDynamic) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ensure content attribute is valid */\n\t\t\tconst location = content.valueLocation;\n\t\t\tconst value = parseContent(content.value.toString());\n\t\t\tif (!value) {\n\t\t\t\tthis.report(target, \"Malformed meta refresh directive\", location);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { delay, url } = value;\n\t\t\tthis.validateDelay(target, location, delay, url);\n\t\t});\n\t}\n\n\tprivate validateDelay(\n\t\ttarget: HtmlElement,\n\t\tlocation: Location | null,\n\t\tdelay: number,\n\t\turl: string,\n\t): void {\n\t\tconst { allowLongDelay } = this.options;\n\n\t\t/* delay over 20h is allowed only if option is enabled */\n\t\tif (allowLongDelay && delay > 72000) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* if refresh is instant a url must be provided or it will be an infinite refresh loop */\n\t\tif (!url && delay === 0) {\n\t\t\tthis.report(target, \"Don't use instant meta refresh to reload the page\", location);\n\t\t\treturn;\n\t\t}\n\n\t\t/* ensure delay is exactly 0 seconds */\n\t\tif (delay !== 0) {\n\t\t\tconst message = allowLongDelay\n\t\t\t\t? \"Meta refresh must be instant (0 second delay) or greater than 20 hours (72000 second delay)\"\n\t\t\t\t: \"Meta refresh must be instant (0 second delay)\";\n\t\t\tthis.report(target, message, location);\n\t\t}\n\t}\n}\n\nfunction parseContent(text: string): { delay: number; url: string } | null {\n\tconst match = text.match(/^(\\d+)(?:\\s*;\\s*url=(.*))?/i);\n\tif (match) {\n\t\treturn {\n\t\t\tdelay: parseInt(match[1], 10),\n\t\t\turl: match[2],\n\t\t};\n\t} else {\n\t\treturn null;\n\t}\n}\n","import { type Attribute, DynamicValue } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nfunction getName(attr: Attribute): string | null {\n\tconst name = attr.value;\n\tif (!name || name instanceof DynamicValue) {\n\t\treturn null;\n\t}\n\n\treturn name;\n}\n\nexport default class MapDupName extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"`<map>` must have a unique name, it cannot be the same name as another `<map>` element\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tconst maps = document.querySelectorAll(\"map[name]\");\n\n\t\t\tconst names = new Set<string>();\n\n\t\t\tfor (const map of maps) {\n\t\t\t\tconst attr = map.getAttribute(\"name\");\n\t\t\t\t/* istanbul ignore next -- should not happen as querySelector matches\n\t\t\t\t * only the elements with the name attribute */\n\t\t\t\tif (!attr) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst name = getName(attr);\n\t\t\t\tif (!name) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (names.has(name)) {\n\t\t\t\t\tthis.report({\n\t\t\t\t\t\tnode: map,\n\t\t\t\t\t\tmessage: `<map> name must be unique`,\n\t\t\t\t\t\tlocation: attr.keyLocation,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tnames.add(name);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { DynamicValue, type Attribute } from \"../dom\";\nimport { type TagReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nfunction isRelevant(event: TagReadyEvent): boolean {\n\treturn event.target.is(\"map\");\n}\n\nfunction hasStaticValue(\n\tattr: Attribute | null,\n): attr is Attribute & { readonly value: string | null } {\n\treturn Boolean(attr && !(attr.value instanceof DynamicValue));\n}\n\nexport default class MapIdName extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"When the `id` attribute is present on a `<map>` element it must be equal to the `name` attribute.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:ready\", isRelevant, (event: TagReadyEvent) => {\n\t\t\tconst { target } = event;\n\t\t\tconst id = target.getAttribute(\"id\");\n\t\t\tconst name = target.getAttribute(\"name\");\n\n\t\t\t// /* ignore missing attributes or dynamic value */\n\t\t\tif (!hasStaticValue(id) || !hasStaticValue(name)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore when id and name is the same */\n\t\t\tif (id.value === name.value) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.report({\n\t\t\t\tnode: event.target,\n\t\t\t\tmessage: `\"id\" and \"name\" attribute must be the same on <map> elements`,\n\t\t\t\tlocation: id.valueLocation ?? name.valueLocation,\n\t\t\t});\n\t\t});\n\t}\n}\n","import { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class MissingDoctype extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"Requires that the document contains a doctype.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst dom = event.document;\n\t\t\tif (!dom.doctype) {\n\t\t\t\tthis.report(dom.root, \"Document is missing doctype\");\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { type HtmlElement } from \"../dom\";\n\nexport default class MultipleLabeledControls extends Rule {\n\tprivate labelable: string = \"\";\n\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `A \\`<label>\\` element can only be associated with one control at a time.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.labelable = this.getTagsWithProperty(\"labelable\").join(\",\");\n\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tconst labels = document.querySelectorAll(\"label\");\n\t\t\tfor (const label of labels) {\n\t\t\t\t/* no error if it references 0 or 1 controls */\n\t\t\t\tconst numControls = this.getNumLabledControls(label);\n\t\t\t\tif (numControls <= 1) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis.report(label, \"<label> is associated with multiple controls\", label.location);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate getNumLabledControls(src: HtmlElement): number {\n\t\t/* get all controls wrapped by label element */\n\t\tconst controls = src\n\t\t\t.querySelectorAll(this.labelable)\n\t\t\t.filter((node) => node.meta?.labelable)\n\t\t\t.map((node) => node.id);\n\n\t\t/* only count wrapped controls if the \"for\" attribute is missing or static,\n\t\t * for dynamic \"for\" attributes it is better to run in document mode later */\n\t\tconst attr = src.getAttribute(\"for\");\n\t\tif (!attr || attr.isDynamic || !attr.value) {\n\t\t\treturn controls.length;\n\t\t}\n\n\t\t/* if \"for\" attribute references a wrapped element it should not be counted\n\t\t * multiple times */\n\t\tconst redundant = controls.includes(attr.value.toString());\n\t\tif (redundant) {\n\t\t\treturn controls.length;\n\t\t}\n\n\t\t/* has \"for\" attribute pointing to element outside wrapped controls */\n\t\treturn controls.length + 1;\n\t}\n}\n","import { DynamicValue } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, ruleDocumentationUrl } from \"../rule\";\nimport {\n\ttype BasePatternRuleContext,\n\ttype BasePatternRuleOptions,\n\tBasePatternRule,\n} from \"./base-pattern-rule\";\n\nconst defaults: BasePatternRuleOptions = {\n\tpattern: \"camelcase\",\n};\n\nexport default class NamePattern extends BasePatternRule {\n\tpublic constructor(options: Partial<BasePatternRuleOptions>) {\n\t\tsuper(\"name\", { ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn BasePatternRule.schema();\n\t}\n\n\tpublic documentation(context: BasePatternRuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: this.description(context),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tconst { target, key, value, valueLocation } = event;\n\t\t\tconst { meta } = target;\n\n\t\t\t/* only handle form controls */\n\t\t\tif (!meta?.formAssociated?.listed) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* only handle name attribute */\n\t\t\tif (key.toLowerCase() !== \"name\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* consider dynamic value as always matching the pattern */\n\t\t\tif (value instanceof DynamicValue) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* omitted value is always valid */\n\t\t\tif (value === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst name = value.endsWith(\"[]\") ? value.slice(0, -2) : value;\n\t\t\tthis.validateValue(target, name, valueLocation);\n\t\t});\n\t}\n}\n","import { DOMTokenList, DynamicValue } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleContext {\n\trole: string;\n}\n\nconst abstractRoles = [\n\t\"command\",\n\t\"composite\",\n\t\"input\",\n\t\"landmark\",\n\t\"range\",\n\t\"roletype\",\n\t\"section\",\n\t\"sectionhead\",\n\t\"select\",\n\t\"structure\",\n\t\"widget\",\n\t\"window\",\n];\n\nfunction isRelevant(event: AttributeEvent): boolean {\n\treturn event.key === \"role\";\n}\n\nexport default class NoAbstractRole extends Rule<RuleContext> {\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t`Role \\`\"${context.role}\"\\` is abstract and must not be used.`,\n\t\t\t\t\"\",\n\t\t\t\t\"WAI-ARIA defines a list of [abstract roles](https://www.w3.org/TR/wai-aria-1.2/#abstract_roles) which cannot be used by authors:\",\n\t\t\t\t\"\",\n\t\t\t\t...abstractRoles.map((it) => `- \\`\"${it}\"\\``),\n\t\t\t\t\"\",\n\t\t\t\t`Use one of the defined subclass roles for \\`\"${context.role}\"\\` instead.`,\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", isRelevant, (event: AttributeEvent) => {\n\t\t\tconst roles = event.value;\n\n\t\t\t/* ignore missing value and dynamic values */\n\t\t\tif (!roles || roles instanceof DynamicValue) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst tokens = new DOMTokenList(roles, event.valueLocation);\n\t\t\tfor (const { item: role, location } of tokens.iterator()) {\n\t\t\t\t/* ignore roles which are not abstract */\n\t\t\t\tif (!abstractRoles.includes(role)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis.report({\n\t\t\t\t\tnode: event.target,\n\t\t\t\t\tmessage: `Role \"{{ role }}\" is abstract and must not be used`,\n\t\t\t\t\tlocation,\n\t\t\t\t\tcontext: {\n\t\t\t\t\t\trole,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n","import { DynamicValue } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleContext {\n\ttagName: string;\n}\n\ninterface RuleOptions {\n\tinclude: string[] | null;\n\texclude: string[] | null;\n}\n\nconst defaults: RuleOptions = {\n\tinclude: null,\n\texclude: null,\n};\n\nexport default class NoAutoplay extends Rule<RuleContext, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t`The autoplay attribute is not allowed on <${context.tagName}>.`,\n\t\t\t\t\"Autoplaying content can be disruptive for users and has accessibilty concerns.\",\n\t\t\t\t\"Prefer to let the user control playback.\",\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\texclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tinclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\t/* only handle autoplay attribute */\n\t\t\tif (event.key.toLowerCase() !== \"autoplay\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore dynamic values */\n\t\t\tif (event.value && event.value instanceof DynamicValue) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore tagnames configured to be ignored */\n\t\t\tconst tagName = event.target.tagName;\n\t\t\tif (this.isKeywordIgnored(tagName)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* report error */\n\t\t\tconst context: RuleContext = { tagName };\n\t\t\tconst location = event.location;\n\t\t\tthis.report(\n\t\t\t\tevent.target,\n\t\t\t\t`The autoplay attribute is not allowed on <${tagName}>`,\n\t\t\t\tlocation,\n\t\t\t\tcontext,\n\t\t\t);\n\t\t});\n\t}\n}\n","import { type ConditionalEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class NoConditionalComment extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"Microsoft Internet Explorer previously supported using special HTML comments (conditional comments) for targeting specific versions of IE but since IE 10 it is deprecated and not supported in standards mode.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"conditional\", (event: ConditionalEvent) => {\n\t\t\tthis.report(event.parent, \"Use of conditional comments are deprecated\", event.location);\n\t\t});\n\t}\n}\n","import { type AttributeEvent } from \"../event\";\nimport { type MetaAttribute } from \"../meta\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class NoDeprecatedAttr extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"HTML5 deprecated many old attributes.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tconst node = event.target;\n\t\t\tconst meta = node.meta;\n\t\t\tconst attr = event.key.toLowerCase();\n\n\t\t\t/* cannot validate if meta isn't known */\n\t\t\tif (meta === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst metaAttribute = meta.attributes[attr] as MetaAttribute | undefined;\n\t\t\tif (!metaAttribute) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst deprecated = metaAttribute.deprecated;\n\t\t\tif (deprecated) {\n\t\t\t\tthis.report(\n\t\t\t\t\tnode,\n\t\t\t\t\t`Attribute \"${event.key}\" is deprecated on <${node.tagName}> element`,\n\t\t\t\t\tevent.keyLocation,\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class NoDupAttr extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"HTML disallows two or more attributes with the same (case-insensitive) name.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tlet attr: Record<string, boolean> = {};\n\n\t\tthis.on(\"tag:start\", () => {\n\t\t\t/* reset any time a new tag is opened */\n\t\t\tattr = {};\n\t\t});\n\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\t/* ignore dynamic attributes aliasing another, e.g class and ng-class */\n\t\t\tif (event.originalAttribute) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst name = event.key.toLowerCase();\n\t\t\tif (name in attr) {\n\t\t\t\tthis.report(event.target, `Attribute \"${name}\" duplicated`, event.keyLocation);\n\t\t\t}\n\t\t\tattr[event.key] = true;\n\t\t});\n\t}\n}\n","import { DOMTokenList } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class NoDupClass extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"Prevents unnecessary duplication of class names.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tif (event.key.toLowerCase() !== \"class\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst classes = new DOMTokenList(event.value, event.valueLocation);\n\t\t\tconst unique = new Set<string>();\n\t\t\tclasses.forEach((cur: string, index: number) => {\n\t\t\t\tif (unique.has(cur)) {\n\t\t\t\t\tconst location = classes.location(index);\n\t\t\t\t\tthis.report(event.target, `Class \"${cur}\" duplicated`, location);\n\t\t\t\t}\n\t\t\t\tunique.add(cur);\n\t\t\t});\n\t\t});\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nconst CACHE_KEY = Symbol(\"no-dup-id\");\n\ndeclare module \"../dom/cache\" {\n\texport interface DOMNodeCache {\n\t\t[CACHE_KEY]: Set<string>;\n\t}\n}\n\nexport default class NoDupID extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"The ID of an element must be unique.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tconst elements = document.querySelectorAll(\"[id]\");\n\t\t\tconst relevant = elements.filter(isRelevant);\n\t\t\tfor (const el of relevant) {\n\t\t\t\tconst attr = el.getAttribute(\"id\");\n\n\t\t\t\t/* istanbul ignore next: this has already been tested in isRelevant once but for type-safety it is checked again */\n\t\t\t\tif (!attr?.value) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst id = attr.value.toString();\n\n\t\t\t\tconst existing = getExisting(el, document.root);\n\n\t\t\t\tif (existing.has(id)) {\n\t\t\t\t\tthis.report(el, `Duplicate ID \"${id}\"`, attr.valueLocation);\n\t\t\t\t}\n\n\t\t\t\texisting.add(id);\n\t\t\t}\n\t\t});\n\t}\n}\n\nfunction getExisting(element: HtmlElement, root: HtmlElement): Set<string> {\n\tconst group = element.closest(\"template\") ?? root;\n\tconst existing = group.cacheGet(CACHE_KEY);\n\tif (existing) {\n\t\treturn existing;\n\t} else {\n\t\tconst existing = new Set<string>();\n\t\treturn group.cacheSet(CACHE_KEY, existing);\n\t}\n}\n\nfunction isRelevant(element: HtmlElement): boolean {\n\tconst attr = element.getAttribute(\"id\");\n\n\t/* istanbul ignore next: can not really happen as querySelector will only return elements with id present */\n\tif (!attr) {\n\t\treturn false;\n\t}\n\n\t/* id without value is not relevant, e.g. <p id></p> */\n\tif (!attr.value) {\n\t\treturn false;\n\t}\n\n\t/* dynamic id (interpolated or otherwise currently unknown value) is not relevant */\n\tif (attr.isDynamic) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n","import { type ElementReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nfunction isRelevant(event: ElementReadyEvent): boolean {\n\treturn event.target.is(\"button\");\n}\n\nexport default class NoImplicitButtonType extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t\"`<button>` is missing recommended `type` attribute\",\n\t\t\t\t\"\",\n\t\t\t\t\"When the `type` attribute is omitted it defaults to `submit`.\",\n\t\t\t\t\"Submit buttons are triggered when a keyboard user presses <kbd>Enter</kbd>.\",\n\t\t\t\t\"\",\n\t\t\t\t\"As this may or may not be inteded this rule enforces that the `type` attribute be explicitly set to one of the valid types:\",\n\t\t\t\t\"\",\n\t\t\t\t\"- `button` - a generic button.\",\n\t\t\t\t\"- `submit` - a submit button.\",\n\t\t\t\t\"- `reset`- a button to reset form fields.\",\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"element:ready\", isRelevant, (event) => {\n\t\t\tconst { target } = event;\n\t\t\tconst attr = target.getAttribute(\"type\");\n\t\t\tif (!attr) {\n\t\t\t\tthis.report({\n\t\t\t\t\tnode: event.target,\n\t\t\t\t\tmessage: `<button> is missing recommended \"type\" attribute`,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type ElementReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nfunction isRelevant(event: ElementReadyEvent): boolean {\n\treturn event.target.is(\"input\");\n}\n\nexport default class NoImplicitInputType extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: [\"`<input>` is missing recommended `type` attribute\"].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"element:ready\", isRelevant, (event) => {\n\t\t\tconst { target } = event;\n\t\t\tconst attr = target.getAttribute(\"type\");\n\t\t\tif (!attr) {\n\t\t\t\tthis.report({\n\t\t\t\t\tnode: event.target,\n\t\t\t\t\tmessage: `<input> is missing recommended \"type\" attribute`,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n","import { NodeClosed } from \"../dom\";\nimport { type TagEndEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class NoImplicitClose extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `Some elements in HTML has optional end tags. When an optional tag is omitted a browser must handle it as if the end tag was present.\n\nOmitted end tags can be ambigious for humans to read and many editors have trouble formatting the markup.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\tconst closed = event.previous;\n\t\t\tconst by = event.target;\n\n\t\t\t/* not set when unclosed elements are being closed by tree, this rule does\n\t\t\t * not consider such events (handled by close-order instead) */\n\t\t\tif (!by) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (closed.closed !== NodeClosed.ImplicitClosed) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst closedByParent =\n\t\t\t\tclosed.parent && closed.parent.tagName === by.tagName; /* <ul><li></ul> */\n\t\t\tconst sameTag = closed.tagName === by.tagName; /* <p>foo<p>bar */\n\n\t\t\tif (closedByParent) {\n\t\t\t\tthis.report(\n\t\t\t\t\tclosed,\n\t\t\t\t\t`Element <${closed.tagName}> is implicitly closed by parent </${by.tagName}>`,\n\t\t\t\t\tclosed.location,\n\t\t\t\t);\n\t\t\t} else if (sameTag) {\n\t\t\t\tthis.report(\n\t\t\t\t\tclosed,\n\t\t\t\t\t`Element <${closed.tagName}> is implicitly closed by sibling`,\n\t\t\t\t\tclosed.location,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.report(\n\t\t\t\t\tclosed,\n\t\t\t\t\t`Element <${closed.tagName}> is implicitly closed by adjacent <${by.tagName}>`,\n\t\t\t\t\tclosed.location,\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type DynamicValue, parseCssDeclaration } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport interface RuleOptions {\n\tinclude: string[] | null;\n\texclude: string[] | null;\n\tallowedProperties: string[];\n}\n\nconst defaults: RuleOptions = {\n\tinclude: null,\n\texclude: null,\n\tallowedProperties: [\"display\"],\n};\n\nexport default class NoInlineStyle extends Rule<void, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\texclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tinclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tallowedProperties: {\n\t\t\t\titems: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t\ttype: \"array\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\tconst text = [\n\t\t\t\"Inline style is not allowed.\\n\",\n\t\t\t\"Inline style is a sign of unstructured CSS. Use class or ID with a separate stylesheet.\\n\",\n\t\t];\n\t\tif (this.options.allowedProperties.length > 0) {\n\t\t\ttext.push(\"Under the current configuration the following CSS properties are allowed:\\n\");\n\t\t\ttext.push(this.options.allowedProperties.map((it) => `- \\`${it}\\``).join(\"\\n\"));\n\t\t}\n\t\treturn {\n\t\t\tdescription: text.join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\n\t\t\t\"attr\",\n\t\t\t(event: AttributeEvent) => this.isRelevant(event),\n\t\t\t(event: AttributeEvent) => {\n\t\t\t\tconst { value } = event;\n\n\t\t\t\tif (this.allPropertiesAllowed(value)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.report(event.target, \"Inline style is not allowed\");\n\t\t\t},\n\t\t);\n\t}\n\n\tprivate isRelevant(event: AttributeEvent): boolean {\n\t\tif (event.key !== \"style\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst { include, exclude } = this.options;\n\t\tconst key = event.originalAttribute ?? event.key;\n\n\t\t/* ignore attributes not present in \"include\" */\n\t\tif (include && !include.includes(key)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t/* ignore attributes present in \"exclude\" */\n\t\tif (exclude?.includes(key)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tprivate allPropertiesAllowed(value: string | DynamicValue | null): boolean {\n\t\tconst allowProperties = this.options.allowedProperties;\n\n\t\t/* quick path: no properties are allowed, no need to check each one individually */\n\t\tif (allowProperties.length === 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst declarations = Object.keys(parseCssDeclaration(value));\n\t\treturn (\n\t\t\tdeclarations.length > 0 &&\n\t\t\tdeclarations.every((it) => {\n\t\t\t\treturn allowProperties.includes(it);\n\t\t\t})\n\t\t);\n\t}\n}\n","import { type Attribute, type DOMTree, type HtmlElement, DOMTokenList, DynamicValue } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface Context {\n\tkey: string;\n\tvalue: string;\n}\n\ninterface AriaAttribute {\n\tproperty: string;\n\tisList: boolean;\n}\n\nconst ARIA: AriaAttribute[] = [\n\t{ property: \"aria-activedescendant\", isList: false },\n\t{ property: \"aria-controls\", isList: true },\n\t{ property: \"aria-describedby\", isList: true },\n\t{ property: \"aria-details\", isList: false },\n\t{ property: \"aria-errormessage\", isList: false },\n\t{ property: \"aria-flowto\", isList: true },\n\t{ property: \"aria-labelledby\", isList: true },\n\t{ property: \"aria-owns\", isList: true },\n];\n\nfunction idMissing(document: DOMTree, id: string): boolean {\n\tconst nodes = document.querySelectorAll(`[id=\"${id}\"]`);\n\treturn nodes.length === 0;\n}\n\nexport default class NoMissingReferences extends Rule<Context> {\n\tpublic documentation(context: Context): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `The element ID \"${context.value}\" referenced by the ${context.key} attribute must point to an existing element.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst document = event.document;\n\n\t\t\t/* verify <label for=\"..\"> */\n\t\t\tfor (const node of document.querySelectorAll(\"label[for]\")) {\n\t\t\t\tconst attr = node.getAttribute(\"for\");\n\t\t\t\tthis.validateReference(document, node, attr, false);\n\t\t\t}\n\n\t\t\t/* verify <input list=\"..\"> */\n\t\t\tfor (const node of document.querySelectorAll(\"input[list]\")) {\n\t\t\t\tconst attr = node.getAttribute(\"list\");\n\t\t\t\tthis.validateReference(document, node, attr, false);\n\t\t\t}\n\n\t\t\t/* verify WAI-ARIA properties */\n\t\t\tfor (const { property, isList } of ARIA) {\n\t\t\t\tfor (const node of document.querySelectorAll(`[${property}]`)) {\n\t\t\t\t\tconst attr = node.getAttribute(property);\n\t\t\t\t\tthis.validateReference(document, node, attr, isList);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected validateReference(\n\t\tdocument: DOMTree,\n\t\tnode: HtmlElement,\n\t\tattr: Attribute | null,\n\t\tisList: boolean,\n\t): void {\n\t\t/* sanity check: querySelector should never return elements without the attribute */\n\t\t/* istanbul ignore next */\n\t\tif (!attr) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* skip dynamic and empty values */\n\t\tconst value = attr.value;\n\t\tif (value instanceof DynamicValue || value === null || value === \"\") {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isList) {\n\t\t\tthis.validateList(document, node, attr, value);\n\t\t} else {\n\t\t\tthis.validateSingle(document, node, attr, value);\n\t\t}\n\t}\n\n\tprotected validateSingle(\n\t\tdocument: DOMTree,\n\t\tnode: HtmlElement,\n\t\tattr: Attribute,\n\t\tid: string,\n\t): void {\n\t\tif (idMissing(document, id)) {\n\t\t\tconst context: Context = { key: attr.key, value: id };\n\t\t\tthis.report(node, `Element references missing id \"${id}\"`, attr.valueLocation, context);\n\t\t}\n\t}\n\n\tprotected validateList(\n\t\tdocument: DOMTree,\n\t\tnode: HtmlElement,\n\t\tattr: Attribute,\n\t\tvalues: string,\n\t): void {\n\t\tconst parsed = new DOMTokenList(values, attr.valueLocation);\n\t\tfor (const entry of parsed.iterator()) {\n\t\t\tconst id = entry.item;\n\t\t\tif (idMissing(document, id)) {\n\t\t\t\tconst context: Context = { key: attr.key, value: id };\n\t\t\t\tthis.report(node, `Element references missing id \"${id}\"`, entry.location, context);\n\t\t\t}\n\t\t}\n\t}\n}\n","import { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class NoMultipleMain extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t\"Only a single visible `<main>` element can be present at in a document at a time.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Multiple `<main>` can be present in the DOM as long the others are hidden using the HTML5 `hidden` attribute.\",\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tconst main = document.querySelectorAll(\"main\").filter((cur) => !cur.hasAttribute(\"hidden\"));\n\t\t\tmain.shift(); /* ignore the first occurrence */\n\n\t\t\t/* report all other occurrences */\n\t\t\tfor (const elem of main) {\n\t\t\t\tthis.report(elem, \"Multiple <main> elements present in document\");\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type Location, sliceLocation } from \"../context\";\nimport { type DOMNode, NodeType } from \"../dom\";\nimport { type AttributeEvent, type ElementReadyEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleOptions {\n\trelaxed: boolean;\n}\n\nconst defaults: RuleOptions = {\n\trelaxed: false,\n};\n\ntype RawCharacters = '\"' | \"&\" | \"'\" | \"<\" | \"=\" | \">\" | \"`\";\n\nconst textRegexp = /([<>]|&(?![a-zA-Z0-9#]+;))/g;\nconst unquotedAttrRegexp = /([<>\"'=`]|&(?![a-zA-Z0-9#]+;))/g;\nconst matchTemplate = /^(<%.*?%>|<\\?.*?\\?>|<\\$.*?\\$>)$/s;\n\nconst replacementTable: Record<RawCharacters, string> = {\n\t'\"': \""\",\n\t\"&\": \"&\",\n\t\"'\": \"'\",\n\t\"<\": \"<\",\n\t\"=\": \"=\",\n\t\">\": \">\",\n\t\"`\": \"`\",\n};\n\nexport default class NoRawCharacters extends Rule<void, RuleOptions> {\n\tprivate relaxed: boolean;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.relaxed = this.options.relaxed;\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\trelaxed: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `Some characters such as \\`<\\`, \\`>\\` and \\`&\\` hold special meaning in HTML and must be escaped using a character reference (html entity).`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"element:ready\", (event: ElementReadyEvent) => {\n\t\t\tconst node = event.target;\n\n\t\t\t/* only iterate over direct descendants */\n\t\t\tfor (const child of node.childNodes) {\n\t\t\t\tif (child.nodeType !== NodeType.TEXT_NODE) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/* workaround for templating <% ... %> etc */\n\t\t\t\tif (child.textContent.match(matchTemplate)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis.findRawChars(node, child.textContent, child.location, textRegexp);\n\t\t\t}\n\t\t});\n\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\t/* boolean attributes has no value so nothing to validate */\n\t\t\tif (!event.value) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* quoted attribute values can contain most symbols except the quotemark\n\t\t\t * itself but unescaped quotemarks would cause a parsing error */\n\t\t\tif (event.quote) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.findRawChars(\n\t\t\t\tevent.target,\n\t\t\t\tevent.value.toString(),\n\t\t\t\tevent.valueLocation!, // eslint-disable-line @typescript-eslint/no-non-null-assertion -- technical debt, valueLocation is always set if a value is provided\n\t\t\t\tunquotedAttrRegexp,\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * Find raw special characters and report as errors.\n\t *\n\t * @param text - The full text to find unescaped raw characters in.\n\t * @param location - Location of text.\n\t * @param regexp - Regexp pattern to match using.\n\t */\n\tprivate findRawChars(node: DOMNode, text: string, location: Location, regexp: RegExp): void {\n\t\tlet match;\n\t\tdo {\n\t\t\tmatch = regexp.exec(text);\n\t\t\tif (match) {\n\t\t\t\tconst char = match[0] as RawCharacters;\n\t\t\t\t/* In relaxed mode & only needs to be encoded if it is ambiguous,\n\t\t\t\t * however this rule will only match either non-ambiguous ampersands or\n\t\t\t\t * ampersands part of a character reference. Whenever it is a valid\n\t\t\t\t * character reference or not not checked by this rule */\n\t\t\t\tif (this.relaxed && char === \"&\") {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/* determine replacement character and location */\n\t\t\t\tconst replacement = replacementTable[char];\n\t\t\t\tconst charLocation = sliceLocation(location, match.index, match.index + 1);\n\n\t\t\t\t/* report as error */\n\t\t\t\tthis.report(node, `Raw \"${char}\" must be encoded as \"${replacement}\"`, charLocation);\n\t\t\t}\n\t\t} while (match);\n\t}\n}\n","import { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nconst selectors = [\"input[aria-label]\", \"textarea[aria-label]\", \"select[aria-label]\"];\n\nexport default class NoRedundantAriaLabel extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"`aria-label` is redundant when an associated `<label>` element containing the same text exists.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tconst elements = document.querySelectorAll(selectors.join(\",\"));\n\t\t\tfor (const element of elements) {\n\t\t\t\tconst ariaLabel = element.getAttribute(\"aria-label\");\n\t\t\t\tconst id = element.id;\n\t\t\t\tif (!id) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst label = document.querySelector(`label[for=\"${id}\"]`);\n\t\t\t\tif (!ariaLabel || !label || label.textContent.trim() !== ariaLabel.value) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst message = \"aria-label is redundant when label containing same text exists\";\n\t\t\t\tthis.report({\n\t\t\t\t\tmessage,\n\t\t\t\t\tnode: element,\n\t\t\t\t\tlocation: ariaLabel.keyLocation,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n","import { escapeSelectorComponent } from \"../dom\";\nimport { type ElementReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class NoRedundantFor extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `When the \\`<label>\\` element wraps the labelable control the \\`for\\` attribute is redundant and better left out.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"element:ready\", (event: ElementReadyEvent) => {\n\t\t\tconst { target } = event;\n\n\t\t\t/* only handle <label> */\n\t\t\tif (target.tagName !== \"label\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore label without for or dynamic value */\n\t\t\tconst attr = target.getAttribute(\"for\");\n\t\t\tif (!attr || attr.isDynamic) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore omitted/empty values */\n\t\t\tconst id = attr.value;\n\t\t\tif (!id) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* try to find labeled control */\n\t\t\tconst escaped = escapeSelectorComponent(id);\n\t\t\tconst control = target.querySelector(`[id=\"${escaped}\"]`);\n\t\t\tif (!control) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.report(target, 'Redundant \"for\" attribute', attr.keyLocation);\n\t\t});\n\t}\n}\n","import { DynamicValue } from \"../dom\";\nimport { type TagReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport interface RuleContext {\n\ttagName: string;\n\trole: string;\n}\n\nexport default class NoRedundantRole extends Rule<RuleContext> {\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\tconst { role, tagName } = context;\n\t\treturn {\n\t\t\tdescription: `Using the \\`${role}\\` role is redundant as it is already implied by the \\`<${tagName}>\\` element.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:ready\", (event: TagReadyEvent) => {\n\t\t\tconst { target } = event;\n\t\t\tconst role = target.getAttribute(\"role\");\n\n\t\t\t/* ignore missing and dynamic values */\n\t\t\tif (!role?.value || role.value instanceof DynamicValue) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore elements without metadata */\n\t\t\tconst { meta } = target;\n\t\t\tif (!meta) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore elements without implicit role */\n\t\t\tconst implicitRole = meta.aria.implicitRole(target._adapter);\n\t\t\tif (!implicitRole) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore elements with non-redundant roles */\n\t\t\tif (role.value !== implicitRole) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* report error */\n\t\t\tconst context: RuleContext = {\n\t\t\t\ttagName: target.tagName,\n\t\t\t\trole: role.value,\n\t\t\t};\n\t\t\tthis.report(\n\t\t\t\tevent.target,\n\t\t\t\t`Redundant role \"${role.value}\" on <${target.tagName}>`,\n\t\t\t\trole.valueLocation,\n\t\t\t\tcontext,\n\t\t\t);\n\t\t});\n\t}\n}\n","import { type HtmlElement, NodeClosed } from \"../dom\";\nimport { type TagEndEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleOptions {\n\tignoreForeign: boolean;\n\tignoreXML: boolean;\n}\n\nconst xmlns = /^(.+):.+$/;\nconst defaults: RuleOptions = {\n\tignoreForeign: true,\n\tignoreXML: true,\n};\n\nexport default class NoSelfClosing extends Rule<string, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tignoreForeign: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t\tignoreXML: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(tagName: string): RuleDocumentation {\n\t\ttagName = tagName || \"element\";\n\t\treturn {\n\t\t\tdescription: `Self-closing elements are disallowed. Use regular end tag <${tagName}></${tagName}> instead of self-closing <${tagName}/>.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\tconst active = event.previous; // The current active element (that is, the current element on the stack)\n\n\t\t\tif (!isRelevant(active, this.options)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.validateElement(active);\n\t\t});\n\t}\n\n\tprivate validateElement(node: HtmlElement): void {\n\t\tif (node.closed !== NodeClosed.VoidSelfClosed) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.report(node, `<${node.tagName}> must not be self-closed`, null, node.tagName);\n\t}\n}\n\nfunction isRelevant(node: HtmlElement, options: RuleOptions): boolean {\n\t/* tags in XML namespaces are relevant only if ignoreXml is false, in which\n\t * case assume all xml elements must not be self-closed */\n\tif (node.tagName.match(xmlns)) {\n\t\treturn !options.ignoreXML;\n\t}\n\n\t/* nodes with missing metadata is assumed relevant */\n\tif (!node.meta) {\n\t\treturn true;\n\t}\n\n\tif (node.meta.void) {\n\t\treturn false;\n\t}\n\n\t/* foreign elements are relevant only if ignoreForeign is false, in which case\n\t * assume all foreign must not be self-closed */\n\tif (node.meta.foreign) {\n\t\treturn !options.ignoreForeign;\n\t}\n\n\treturn true;\n}\n","import { type TagStartEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class NoStyleTag extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"Prefer to use external stylesheets with the `<link>` tag instead of inlining the styling.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:start\", (event: TagStartEvent) => {\n\t\t\tconst node = event.target;\n\t\t\tif (node.tagName === \"style\") {\n\t\t\t\tthis.report(node, \"Use external stylesheet with <link> instead of <style> tag\");\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type WhitespaceEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class NoTrailingWhitespace extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"Lines with trailing whitespace cause unnessecary diff when using version control and usually serve no special purpose in HTML.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"whitespace\", (event: WhitespaceEvent) => {\n\t\t\tif (event.text.match(/^[ \\t]+\\r?\\n$/)) {\n\t\t\t\tthis.report(null, \"Trailing whitespace\", event.location);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type TagStartEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { type IncludeExcludeOptions, keywordPatternMatcher } from \"./helper\";\n\ntype RuleOptions = IncludeExcludeOptions;\n\nconst defaults: RuleOptions = {\n\tinclude: null,\n\texclude: null,\n};\n\nexport default class NoUnknownElements extends Rule<string, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\texclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tinclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: string): RuleDocumentation {\n\t\tconst element = context ? ` <${context}>` : \"\";\n\t\treturn {\n\t\t\tdescription: `An unknown element${element} was used. If this is a Custom Element you need to supply element metadata for it.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:start\", (event: TagStartEvent) => {\n\t\t\tconst node = event.target;\n\t\t\tif (node.meta) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.isKeywordIgnored(node.tagName, keywordPatternMatcher)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.report(node, `Unknown element <${node.tagName}>`, null, node.tagName);\n\t\t});\n\t}\n}\n","import { type Location } from \"../context\";\nimport { DOMTokenList } from \"../dom\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport interface RuleContext {\n\truleId: string;\n}\n\nexport default class NoUnusedDisable extends Rule<RuleContext> {\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `\\`${context.ruleId}\\` rule is disabled but no error was reported.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\t/* this is a special rule, the `Engine` class directly emits errors on this\n\t\t * rule, it exists only to be able to configure whenever the rule is enabled\n\t\t * or not and to get the regular documentation and contextual help. */\n\t}\n\n\tpublic reportUnused(unused: Set<string>, options: string, location: Location): void {\n\t\tconst tokens = new DOMTokenList(options.replace(/,/g, \" \"), location);\n\t\tfor (const ruleId of unused) {\n\t\t\tconst index = tokens.indexOf(ruleId);\n\t\t\t/* istanbul ignore next: the token should be present or it wouldn't be\n\t\t\t * reported as unused, this is just a sanity check and fallback */\n\t\t\tconst tokenLocation = index >= 0 ? tokens.location(index) : location;\n\t\t\tthis.report({\n\t\t\t\tnode: null,\n\t\t\t\tmessage: '\"{{ ruleId }}\" rule is disabled but no error was reported',\n\t\t\t\tlocation: tokenLocation,\n\t\t\t\tcontext: {\n\t\t\t\t\truleId,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n}\n","import { type TokenEvent } from \"../event\";\nimport { TokenType } from \"../lexer\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class NoUtf8Bom extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `This file is saved with the UTF-8 byte order mark (BOM) present. It is neither required or recommended to use.\\n\\nInstead the document should be served with the \\`Content-Type: application/javascript; charset=utf-8\\` header.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tconst unregister = this.on(\"token\", (event: TokenEvent) => {\n\t\t\tif (event.type === TokenType.UNICODE_BOM) {\n\t\t\t\tthis.report(null, \"File should be saved without UTF-8 BOM\", event.location);\n\t\t\t}\n\n\t\t\t/* since the BOM must be the very first thing the rule can now be disabled for the rest of the run */\n\t\t\tthis.setEnabled(false);\n\t\t\tunregister();\n\t\t});\n\t}\n}\n","import { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { DynamicValue } from \"../dom\";\n\ninterface RuleContext {\n\ttype: string;\n}\n\ninterface RuleOptions {\n\tinclude: string[] | null;\n\texclude: string[] | null;\n}\n\nexport const types = [\"button\", \"submit\", \"reset\", \"image\"];\nconst replacement: Record<string, string> = {\n\tbutton: '<button type=\"button\">',\n\tsubmit: '<button type=\"submit\">',\n\treset: '<button type=\"reset\">',\n\timage: '<button type=\"button\">',\n};\n\nconst defaults: RuleOptions = {\n\tinclude: null,\n\texclude: null,\n};\n\nexport default class PreferButton extends Rule<RuleContext, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\texclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tinclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\tconst src = `<input type=\"${context.type}\">`;\n\t\tconst dst = replacement[context.type] || `<button>`;\n\t\treturn {\n\t\t\tdescription: `Prefer to use \\`${dst}\\` instead of \\`\"${src}\\`.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tconst node = event.target;\n\n\t\t\t/* only handle input elements */\n\t\t\tif (node.tagName.toLowerCase() !== \"input\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* only handle type attribute */\n\t\t\tif (event.key.toLowerCase() !== \"type\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* sanity check: handle missing, boolean and dynamic attributes */\n\t\t\tif (!event.value || event.value instanceof DynamicValue) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore types configured to be ignored */\n\t\t\tconst type = event.value.toLowerCase();\n\t\t\tif (this.isKeywordIgnored(type)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* only values matching known type triggers error */\n\t\t\tif (!types.includes(type)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst context: RuleContext = { type };\n\t\t\tconst message = `Prefer to use <button> instead of <input type=\"${type}\"> when adding buttons`;\n\t\t\tthis.report(node, message, event.valueLocation, context);\n\t\t});\n\t}\n}\n","import { type Location } from \"../context\";\nimport { DynamicValue } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleContext {\n\trole: string;\n\treplacement: string;\n}\n\ninterface RuleOptions {\n\tmapping: Record<string, string>;\n\tinclude: string[] | null;\n\texclude: string[] | null;\n}\n\nconst defaults: RuleOptions = {\n\tmapping: {\n\t\tarticle: \"article\",\n\t\tbanner: \"header\",\n\t\tbutton: \"button\",\n\t\tcell: \"td\",\n\t\tcheckbox: \"input\",\n\t\tcomplementary: \"aside\",\n\t\tcontentinfo: \"footer\",\n\t\tfigure: \"figure\",\n\t\tform: \"form\",\n\t\theading: \"hN\",\n\t\tinput: \"input\",\n\t\tlink: \"a\",\n\t\tlist: \"ul\",\n\t\tlistbox: \"select\",\n\t\tlistitem: \"li\",\n\t\tmain: \"main\",\n\t\tnavigation: \"nav\",\n\t\tprogressbar: \"progress\",\n\t\tradio: \"input\",\n\t\tregion: \"section\",\n\t\ttable: \"table\",\n\t\ttextbox: \"textarea\",\n\t},\n\tinclude: null,\n\texclude: null,\n};\n\nexport default class PreferNativeElement extends Rule<RuleContext, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\texclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tinclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tmapping: {\n\t\t\t\ttype: \"object\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `Instead of using the WAI-ARIA role \"${context.role}\" prefer to use the native <${context.replacement}> element.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tconst { mapping } = this.options;\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\t/* ignore non-role attributes */\n\t\t\tif (event.key.toLowerCase() !== \"role\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore missing and dynamic values */\n\t\t\tif (!event.value || event.value instanceof DynamicValue) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore roles configured to be ignored */\n\t\t\tconst role = event.value.toLowerCase();\n\t\t\tif (this.isIgnored(role)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* dont report when the element is already of the right type but has a\n\t\t\t * redundant role, such as <main role=\"main\"> */\n\t\t\tconst replacement = mapping[role];\n\t\t\tif (event.target.is(replacement)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* report error */\n\t\t\tconst context: RuleContext = { role, replacement };\n\t\t\tconst location = this.getLocation(event);\n\t\t\tthis.report(\n\t\t\t\tevent.target,\n\t\t\t\t`Prefer to use the native <${replacement}> element`,\n\t\t\t\tlocation,\n\t\t\t\tcontext,\n\t\t\t);\n\t\t});\n\t}\n\n\tprivate isIgnored(role: string): boolean {\n\t\tconst { mapping } = this.options;\n\n\t\t/* ignore roles not mapped to native elements */\n\t\tconst replacement = mapping[role];\n\t\tif (!replacement) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn this.isKeywordIgnored(role);\n\t}\n\n\tprivate getLocation(event: AttributeEvent): Location | null {\n\t\tconst begin = event.location;\n\t\tconst end = event.valueLocation!; // eslint-disable-line @typescript-eslint/no-non-null-assertion -- technical debt, valueLocation will always be set when a value is provided\n\t\tconst quote = event.quote ? 1 : 0;\n\t\tconst size = end.offset + end.size - begin.offset + quote;\n\t\treturn {\n\t\t\tfilename: begin.filename,\n\t\t\tline: begin.line,\n\t\t\tcolumn: begin.column,\n\t\t\toffset: begin.offset,\n\t\t\tsize,\n\t\t};\n\t}\n}\n","import { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class PreferTbody extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `While \\`<tbody>\\` is optional is relays semantic information about its contents. Where applicable it should also be combined with \\`<thead>\\` and \\`<tfoot>\\`.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\tfor (const table of doc.querySelectorAll(\"table\")) {\n\t\t\t\tif (table.querySelector(\"> tbody\")) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst tr = table.querySelectorAll(\"> tr\");\n\t\t\t\tif (tr.length >= 1) {\n\t\t\t\t\tthis.report(tr[0], \"Prefer to wrap <tr> elements in <tbody>\");\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type TagEndEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleOptions {\n\ttags: string[];\n}\n\nconst defaults: RuleOptions = {\n\ttags: [\"script\", \"style\"],\n};\n\nexport default class RequireCSPNonce extends Rule<void, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\ttags: {\n\t\t\t\ttype: \"array\",\n\t\t\t\titems: {\n\t\t\t\t\tenum: [\"script\", \"style\"],\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t\"Required Content-Security-Policy (CSP) nonce is missing or empty.\",\n\t\t\t\t\"\",\n\t\t\t\t\"This is set by the `nonce` attribute and must match the `Content-Security-Policy` header.\",\n\t\t\t\t\"For instance, if the header contains `script-src 'nonce-r4nd0m'` the `nonce` attribute must be set to `nonce=\\\"r4nd0m\\\">`\",\n\t\t\t\t\"\",\n\t\t\t\t\"The nonce should be unique per each request and set to a cryptography secure random token.\",\n\t\t\t\t\"It is used to prevent cross site scripting (XSS) by preventing malicious actors from injecting scripts onto the page.\",\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\tconst { tags } = this.options;\n\t\t\tconst node = event.previous;\n\n\t\t\t/* ignore other tags */\n\t\t\tif (!tags.includes(node.tagName)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore if nonce is set to non-empty value (or dynamic) */\n\t\t\tconst nonce = node.getAttribute(\"nonce\")?.value;\n\t\t\tif (nonce && nonce !== \"\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore <script src> */\n\t\t\tif (node.is(\"script\") && node.hasAttribute(\"src\")) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst message = `required CSP nonce is missing`;\n\t\t\tthis.report(node, message, node.location);\n\t\t});\n\t}\n}\n","import { type Attribute, type HtmlElement } from \"../dom\";\nimport { type TagEndEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ntype Target = \"all\" | \"crossorigin\";\n\ninterface RuleOptions {\n\ttarget: Target;\n\tinclude: string[] | null;\n\texclude: string[] | null;\n}\n\nconst defaults: RuleOptions = {\n\ttarget: \"all\",\n\tinclude: null,\n\texclude: null,\n};\n\nconst crossorigin = new RegExp(\"^(\\\\w+://|//)\"); /* e.g. https:// or // */\nconst supportSri: Record<string, string> = {\n\tlink: \"href\",\n\tscript: \"src\",\n};\n\nexport default class RequireSri extends Rule<void, RuleOptions> {\n\tprivate target: Target;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.target = this.options.target;\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\ttarget: {\n\t\t\t\tenum: [\"all\", \"crossorigin\"],\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t\tinclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\texclude: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"null\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `Subresource Integrity (SRI) \\`integrity\\` attribute is required to prevent tampering or manipulation from Content Delivery Networks (CDN), rouge proxies, malicious entities, etc.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\t/* only handle thats supporting and requires sri */\n\t\t\tconst node = event.previous;\n\t\t\tif (!(this.supportSri(node) && this.needSri(node))) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* check if sri attribute is present */\n\t\t\tif (node.hasAttribute(\"integrity\")) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.report(\n\t\t\t\tnode,\n\t\t\t\t`SRI \"integrity\" attribute is required on <${node.tagName}> element`,\n\t\t\t\tnode.location,\n\t\t\t);\n\t\t});\n\t}\n\n\tprivate supportSri(node: HtmlElement): boolean {\n\t\treturn Object.keys(supportSri).includes(node.tagName);\n\t}\n\n\tprivate needSri(node: HtmlElement): boolean {\n\t\tconst attr = this.elementSourceAttr(node);\n\t\tif (!attr) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (attr.value === null || attr.value === \"\" || attr.isDynamic) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst url = attr.value.toString();\n\t\tif (this.target === \"all\" || crossorigin.test(url)) {\n\t\t\treturn !this.isIgnored(url);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate elementSourceAttr(node: HtmlElement): Attribute | null {\n\t\tconst key = supportSri[node.tagName];\n\t\treturn node.getAttribute(key);\n\t}\n\n\tprivate isIgnored(url: string): boolean {\n\t\treturn this.isKeywordIgnored(url, (list, it) => {\n\t\t\treturn list.some((pattern) => it.includes(pattern));\n\t\t});\n\t}\n}\n","import { NodeClosed } from \"../dom\";\nimport { type TagEndEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class ScriptElement extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"The end tag for `<script>` is a hard requirement and must never be omitted even when using the `src` attribute.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\tconst node = event.target; // The current element being closed.\n\n\t\t\tif (!node || node.tagName !== \"script\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (node.closed !== NodeClosed.EndTag) {\n\t\t\t\tthis.report(node, `End tag for <${node.tagName}> must not be omitted`);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type TagEndEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nconst javascript = [\n\t\"\",\n\t\"application/ecmascript\",\n\t\"application/javascript\",\n\t\"text/ecmascript\",\n\t\"text/javascript\",\n];\n\nexport default class ScriptType extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"While valid the HTML5 standard encourages authors to omit the type element for JavaScript resources.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\tconst node = event.previous;\n\n\t\t\tif (node.tagName !== \"script\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst attr = node.getAttribute(\"type\");\n\t\t\tif (!attr || attr.isDynamic) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst value = attr.value ? attr.value.toString() : \"\";\n\t\t\tif (!this.isJavascript(value)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.report(\n\t\t\t\tnode,\n\t\t\t\t'\"type\" attribute is unnecessary for javascript resources',\n\t\t\t\tattr.keyLocation,\n\t\t\t);\n\t\t});\n\t}\n\n\tprivate isJavascript(mime: string): boolean {\n\t\t/* remove mime parameters, e.g. \";charset=utf-8\" */\n\t\tconst type = mime.replace(/;.*/, \"\");\n\t\treturn javascript.includes(type);\n\t}\n}\n","import { type HtmlElement } from \"../dom\";\nimport { type ElementReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class SvgFocusable extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: `Inline SVG elements in IE are focusable by default which may cause issues with tab-ordering. The \\`focusable\\` attribute should explicitly be set to avoid unintended behaviour.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"element:ready\", (event: ElementReadyEvent) => {\n\t\t\tif (event.target.is(\"svg\")) {\n\t\t\t\tthis.validate(event.target);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate validate(svg: HtmlElement): void {\n\t\tif (svg.hasAttribute(\"focusable\")) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.report(svg, `<${svg.tagName}> is missing required \"focusable\" attribute`);\n\t}\n}\n","import { sliceLocation } from \"../context\";\nimport { type HtmlElement, type TextNode, isElementNode, isTextNode } from \"../dom\";\nimport { type ElementReadyEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface Character {\n\tpattern: string;\n\treplacement: string;\n\tdescription: string;\n}\n\nexport interface RuleContext {\n\tpattern: string;\n\treplacement: string;\n\tdescription: string;\n}\n\ninterface RuleOptions {\n\tcharacters: Character[];\n\tignoreClasses: string[];\n\tignoreStyle: boolean;\n}\n\nconst defaults: RuleOptions = {\n\tcharacters: [\n\t\t{ pattern: \" \", replacement: \" \", description: \"non-breaking space\" },\n\t\t{ pattern: \"-\", replacement: \"‑\", description: \"non-breaking hyphen\" },\n\t],\n\tignoreClasses: [],\n\tignoreStyle: true,\n};\n\nexport function constructRegex(characters: Character[]): RegExp {\n\tconst disallowed = characters\n\t\t.map((it) => {\n\t\t\treturn it.pattern;\n\t\t})\n\t\t.join(\"|\");\n\tconst pattern = `(${disallowed})`;\n\t/* eslint-disable-next-line security/detect-non-literal-regexp -- technical debt, should do more input sanitation */\n\treturn new RegExp(pattern, \"g\");\n}\n\nfunction getText(node: TextNode): [offset: number, text: string] {\n\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- this will always match something, it cannot be null */\n\tconst match = node.textContent.match(/^(\\s*)(.*)$/)!;\n\tconst [, leading, text] = match;\n\treturn [leading.length, text.trimEnd()];\n}\n\n/**\n * Node 12 does not support String.matchAll, this simulates it's behavior.\n */\nfunction matchAll(text: string, regexp: RegExp): RegExpExecArray[] {\n\t/* eslint-disable-next-line security/detect-non-literal-regexp -- makes copy of existing one only */\n\tconst copy = new RegExp(regexp);\n\tconst matches: RegExpExecArray[] = [];\n\tlet match: RegExpExecArray | null;\n\twhile ((match = copy.exec(text))) {\n\t\tmatches.push(match);\n\t}\n\treturn matches;\n}\n\nexport default class TelNonBreaking extends Rule<RuleContext, RuleOptions> {\n\tprivate regex: RegExp;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.regex = constructRegex(this.options.characters);\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tcharacters: {\n\t\t\t\ttype: \"array\",\n\t\t\t\titems: {\n\t\t\t\t\ttype: \"object\",\n\t\t\t\t\tadditionalProperties: false,\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tpattern: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\treplacement: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdescription: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tignoreClasses: {\n\t\t\t\ttype: \"array\",\n\t\t\t\titems: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tignoreStyle: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\tconst { characters } = this.options;\n\t\tconst replacements = characters.map((it) => {\n\t\t\treturn ` - \\`${it.pattern}\\` - replace with \\`${it.replacement}\\` (${it.description}).`;\n\t\t});\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t`The \\`${context.pattern}\\` character should be replaced with \\`${context.replacement}\\` character (${context.description}) when used in a telephone number.`,\n\t\t\t\t\"\",\n\t\t\t\t\"Unless non-breaking characters is used there could be a line break inserted at that character.\",\n\t\t\t\t\"Line breaks make is harder to read and understand the telephone number.\",\n\t\t\t\t\"\",\n\t\t\t\t\"The following characters should be avoided:\",\n\t\t\t\t\"\",\n\t\t\t\t...replacements,\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"element:ready\", this.isRelevant, (event: ElementReadyEvent) => {\n\t\t\tconst { target } = event;\n\n\t\t\tif (this.isIgnored(target)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.walk(target, target);\n\t\t});\n\t}\n\n\tprivate isRelevant(this: void, event: ElementReadyEvent): boolean {\n\t\tconst { target } = event;\n\n\t\t/* should only deal with anchors */\n\t\tif (!target.is(\"a\")) {\n\t\t\treturn false;\n\t\t}\n\n\t\t/* ignore if anchor does not have tel href */\n\t\tconst attr = target.getAttribute(\"href\");\n\t\tif (!attr?.valueMatches(/^tel:/, false)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tprivate isIgnoredClass(node: HtmlElement): boolean {\n\t\tconst { ignoreClasses } = this.options;\n\t\tconst { classList } = node;\n\t\treturn ignoreClasses.some((it) => classList.contains(it));\n\t}\n\n\tprivate isIgnoredStyle(node: HtmlElement): boolean {\n\t\tconst { ignoreStyle } = this.options;\n\t\tconst { style } = node;\n\t\tif (!ignoreStyle) {\n\t\t\treturn false;\n\t\t}\n\t\tif (style[\"white-space\"] === \"nowrap\" || style[\"white-space\"] === \"pre\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate isIgnored(node: HtmlElement): boolean {\n\t\treturn this.isIgnoredClass(node) || this.isIgnoredStyle(node);\n\t}\n\n\tprivate walk(anchor: HtmlElement, node: HtmlElement): void {\n\t\tfor (const child of node.childNodes) {\n\t\t\tif (isTextNode(child)) {\n\t\t\t\tthis.detectDisallowed(anchor, child);\n\t\t\t} else if (isElementNode(child)) {\n\t\t\t\tthis.walk(anchor, child);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate detectDisallowed(anchor: HtmlElement, node: TextNode): void {\n\t\tconst [offset, text] = getText(node);\n\t\tconst matches = matchAll(text, this.regex);\n\t\tfor (const match of matches) {\n\t\t\tconst detected = match[0];\n\t\t\tconst entry = this.options.characters.find((it) => it.pattern === detected);\n\t\t\t/* istanbul ignore next: should never happen and cannot be tested, just a sanity check */\n\t\t\tif (!entry) {\n\t\t\t\tthrow new Error(`Failed to find entry for \"${detected}\" when searching text \"${text}\"`);\n\t\t\t}\n\t\t\tconst message = `\"${detected}\" should be replaced with \"${entry.replacement}\" (${entry.description}) in telephone number`;\n\t\t\tconst begin = offset + match.index;\n\t\t\tconst end = begin + detected.length;\n\t\t\tconst location = sliceLocation(node.location, begin, end);\n\t\t\tconst context: RuleContext = entry;\n\t\t\tthis.report(anchor, message, location, context);\n\t\t}\n\t}\n}\n","import { type DOMNode, type HtmlElement, isTextNode } from \"../dom\";\nimport { type ElementReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\nimport { type MetaElement, TextContent as TextContentEnum } from \"../meta\";\nimport { classifyNodeText } from \"./helper\";\nimport { TextClassification } from \"./helper/text\";\nimport { inAccessibilityTree } from \"./helper/a11y\";\n\ninterface RuleContext {\n\ttagName: string;\n\ttextContent?: TextContentEnum;\n}\n\n/**\n * Check if attribute is present and non-empty or dynamic.\n */\nfunction hasNonEmptyAttribute(node: HtmlElement, key: string): boolean {\n\tconst attr = node.getAttribute(key);\n\treturn Boolean(attr?.valueMatches(/.+/, true));\n}\n\n/**\n * Check if element has default text.\n *\n * Only <input type=\"submit\"> and <input type=\"reset\"> at the moment.\n */\nfunction hasDefaultText(node: HtmlElement): boolean {\n\t/* only input element have default text */\n\tif (!node.is(\"input\")) {\n\t\treturn false;\n\t}\n\n\t/* default text is not available if value attribute is present */\n\tif (node.hasAttribute(\"value\")) {\n\t\treturn false;\n\t}\n\n\t/* default text is only present when type is submit or reset */\n\tconst type = node.getAttribute(\"type\");\n\treturn Boolean(type?.valueMatches(/submit|reset/, false));\n}\n\nfunction isNonEmptyText(node: DOMNode): boolean {\n\tif (isTextNode(node)) {\n\t\treturn node.isDynamic || node.textContent.trim() !== \"\";\n\t} else {\n\t\treturn false;\n\t}\n}\n\n/**\n * Walk nodes (depth-first, preorder) searching for accessible text. Children\n * hidden from accessibility tree are ignored.\n *\n * For each node the current conditions satisfies as accessible text:\n *\n * - Non-empty or dynamic `aria-label`\n * - Non-empty or dynamic `aria-labelledby` (reference not validated, use [[no-missing-references]]\n * - Image with non-empty or dynamic `alt` text\n * - Elements with default text\n */\nfunction haveAccessibleText(node: HtmlElement): boolean {\n\tif (!inAccessibilityTree(node)) {\n\t\treturn false;\n\t}\n\n\t/* check direct descendants for non-empty or dynamic text */\n\tconst haveText = node.childNodes.some((child) => isNonEmptyText(child));\n\tif (haveText) {\n\t\treturn true;\n\t}\n\n\tif (hasNonEmptyAttribute(node, \"aria-label\")) {\n\t\treturn true;\n\t}\n\n\tif (hasNonEmptyAttribute(node, \"aria-labelledby\")) {\n\t\treturn true;\n\t}\n\n\tif (node.is(\"img\") && hasNonEmptyAttribute(node, \"alt\")) {\n\t\treturn true;\n\t}\n\n\tif (hasDefaultText(node)) {\n\t\treturn true;\n\t}\n\n\treturn node.childElements.some((child: HtmlElement) => {\n\t\treturn haveAccessibleText(child);\n\t});\n}\n\nexport default class TextContent extends Rule<RuleContext> {\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\tconst doc: RuleDocumentation = {\n\t\t\tdescription: `The textual content for this element is not valid.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t\tswitch (context.textContent) {\n\t\t\tcase TextContentEnum.NONE:\n\t\t\t\tdoc.description = `The \\`<${context.tagName}>\\` element must not have textual content.`;\n\t\t\t\tbreak;\n\t\t\tcase TextContentEnum.REQUIRED:\n\t\t\t\tdoc.description = `The \\`<${context.tagName}>\\` element must have textual content.`;\n\t\t\t\tbreak;\n\t\t\tcase TextContentEnum.ACCESSIBLE:\n\t\t\t\tdoc.description = `The \\`<${context.tagName}>\\` element must have accessible text.`;\n\t\t\t\tbreak;\n\t\t}\n\t\treturn doc;\n\t}\n\n\tprivate static filter(this: void, event: ElementReadyEvent): boolean {\n\t\tconst { target } = event;\n\n\t\t/* skip elements without metadata */\n\t\tif (!target.meta) {\n\t\t\treturn false;\n\t\t}\n\n\t\t/* skip elements without explicit and default textContent */\n\t\tconst { textContent } = target.meta;\n\t\tif (!textContent || textContent === TextContentEnum.DEFAULT) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"element:ready\", TextContent.filter, (event: ElementReadyEvent) => {\n\t\t\tconst target = event.target as HtmlElement & { meta: MetaElement };\n\t\t\tconst { textContent } = target.meta;\n\t\t\tswitch (textContent) {\n\t\t\t\tcase TextContentEnum.NONE:\n\t\t\t\t\tthis.validateNone(target);\n\t\t\t\t\tbreak;\n\t\t\t\tcase TextContentEnum.REQUIRED:\n\t\t\t\t\tthis.validateRequired(target);\n\t\t\t\t\tbreak;\n\t\t\t\tcase TextContentEnum.ACCESSIBLE:\n\t\t\t\t\tthis.validateAccessible(target);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Validate element has empty text (inter-element whitespace is not considered text)\n\t */\n\tprivate validateNone(node: HtmlElement & { meta: MetaElement }): void {\n\t\tif (classifyNodeText(node) === TextClassification.EMPTY_TEXT) {\n\t\t\treturn;\n\t\t}\n\t\tthis.reportError(node, node.meta, `${node.annotatedName} must not have text content`);\n\t}\n\n\t/**\n\t * Validate element has any text (inter-element whitespace is not considered text)\n\t */\n\tprivate validateRequired(node: HtmlElement & { meta: MetaElement }): void {\n\t\tif (classifyNodeText(node) !== TextClassification.EMPTY_TEXT) {\n\t\t\treturn;\n\t\t}\n\t\tthis.reportError(node, node.meta, `${node.annotatedName} must have text content`);\n\t}\n\n\t/**\n\t * Validate element has accessible text (either regular text or text only\n\t * exposed in accessibility tree via aria-label or similar)\n\t */\n\tprivate validateAccessible(node: HtmlElement & { meta: MetaElement }): void {\n\t\t/* skip this element if the element isn't present in accessibility tree */\n\t\tif (!inAccessibilityTree(node)) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* if the element or a child has aria-label, alt or default text, etc the\n\t\t * element has accessible text */\n\t\tif (haveAccessibleText(node)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.reportError(node, node.meta, `${node.annotatedName} must have accessible text`);\n\t}\n\n\tprivate reportError(node: HtmlElement, meta: MetaElement, message: string): void {\n\t\tthis.report(node, message, null, {\n\t\t\ttagName: node.tagName,\n\t\t\ttextContent: meta.textContent,\n\t\t});\n\t}\n}\n","import { type Location } from \"../context\";\nimport { type DOMTree, type HtmlElement, DynamicValue } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nconst roles = [\"complementary\", \"contentinfo\", \"form\", \"banner\", \"main\", \"navigation\", \"region\"];\n\nconst selectors = [\n\t\"aside\",\n\t\"footer\",\n\t\"form\",\n\t\"header\",\n\t\"main\",\n\t\"nav\",\n\t\"section\",\n\t...roles.map((it) => `[role=\"${it}\"]`),\n\t/* <search> does not (yet?) require a unique name */\n];\n\nfunction getTextFromReference(\n\tdocument: DOMTree,\n\tid: string | DynamicValue | null,\n): string | DynamicValue | null {\n\tif (!id || id instanceof DynamicValue) {\n\t\treturn id;\n\t}\n\n\tconst selector = `#${id}`;\n\tconst ref = document.querySelector(selector);\n\tif (ref) {\n\t\treturn ref.textContent;\n\t} else {\n\t\t/* If the referenced element cannot be found (maybe outside the fragment\n\t\t * being tested) we use the selector as text, i.e. if two landmarks\n\t\t * reference the same selector they would still be flagged as\n\t\t * non-unique. */\n\t\treturn selector;\n\t}\n}\n\n/* until Array.groupBy(..) can be used (Node 21) */\nfunction groupBy<T, K extends string | number | symbol>(\n\tvalues: T[],\n\tcallback: (value: T) => K,\n): Record<K, T[]> {\n\tconst result = {} as Record<K, T[]>;\n\tfor (const value of values) {\n\t\tconst key = callback(value);\n\t\tif (key in result) {\n\t\t\tresult[key].push(value);\n\t\t} else {\n\t\t\tresult[key] = [value];\n\t\t}\n\t}\n\treturn result;\n}\n\nfunction getTextEntryFromElement(\n\tdocument: DOMTree,\n\tnode: HtmlElement,\n): {\n\tnode: HtmlElement;\n\ttext: string | DynamicValue | null;\n\tlocation: Location;\n} {\n\tconst ariaLabel = node.getAttribute(\"aria-label\");\n\tif (ariaLabel) {\n\t\treturn {\n\t\t\tnode,\n\t\t\ttext: ariaLabel.value,\n\t\t\tlocation: ariaLabel.keyLocation,\n\t\t};\n\t}\n\n\tconst ariaLabelledby = node.getAttribute(\"aria-labelledby\");\n\tif (ariaLabelledby) {\n\t\tconst text = getTextFromReference(document, ariaLabelledby.value);\n\t\treturn {\n\t\t\tnode,\n\t\t\ttext,\n\t\t\tlocation: ariaLabelledby.keyLocation,\n\t\t};\n\t}\n\n\treturn {\n\t\tnode,\n\t\ttext: null,\n\t\tlocation: node.location,\n\t};\n}\n\nfunction isExcluded(entry: { node: HtmlElement; text: string | DynamicValue | null }): boolean {\n\tconst { node, text } = entry;\n\tif (text === null) {\n\t\treturn !(node.is(\"form\") || node.is(\"section\"));\n\t}\n\treturn true;\n}\n\nexport default class UniqueLandmark extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t\"When the same type of landmark is present more than once in the same document each must be uniquely identifiable with a non-empty and unique name.\",\n\t\t\t\t\"For instance, if the document has two `<nav>` elements each of them need an accessible name to be distinguished from each other.\",\n\t\t\t\t\"\",\n\t\t\t\t\"The following elements / roles are considered landmarks:\",\n\t\t\t\t\"\",\n\t\t\t\t' - `aside` or `[role=\"complementary\"]`',\n\t\t\t\t' - `footer` or `[role=\"contentinfo\"]`',\n\t\t\t\t' - `form` or `[role=\"form\"]`',\n\t\t\t\t' - `header` or `[role=\"banner\"]`',\n\t\t\t\t' - `main` or `[role=\"main\"]`',\n\t\t\t\t' - `nav` or `[role=\"navigation\"]`',\n\t\t\t\t' - `section` or `[role=\"region\"]`',\n\t\t\t\t\"\",\n\t\t\t\t\"To fix this either:\",\n\t\t\t\t\"\",\n\t\t\t\t\" - Add `aria-label`.\",\n\t\t\t\t\" - Add `aria-labelledby`.\",\n\t\t\t\t\" - Remove one of the landmarks.\",\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tconst elements = document\n\t\t\t\t.querySelectorAll(selectors.join(\",\"))\n\t\t\t\t.filter((it) => typeof it.role === \"string\" && roles.includes(it.role));\n\t\t\tconst grouped = groupBy(elements, (it) => it.role as string);\n\t\t\tfor (const nodes of Object.values(grouped)) {\n\t\t\t\t/* if the landmark isn't present or at most a single occurrence it is\n\t\t\t\t * considered unique */\n\t\t\t\tif (nodes.length <= 1) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst entries = nodes.map((it) => getTextEntryFromElement(document, it));\n\n\t\t\t\t/* edge case: unnamed forms are not considered landmarks */\n\t\t\t\tconst filteredEntries = entries.filter(isExcluded);\n\n\t\t\t\tfor (const entry of filteredEntries) {\n\t\t\t\t\tif (entry.text instanceof DynamicValue) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst dup = entries.filter((it) => it.text === entry.text).length > 1;\n\t\t\t\t\tif (!entry.text || dup) {\n\t\t\t\t\t\tconst message = `Landmarks must have a non-empty and unique accessible name (aria-label or aria-labelledby)`;\n\t\t\t\t\t\tconst location = entry.location;\n\t\t\t\t\t\tthis.report({\n\t\t\t\t\t\t\tnode: entry.node,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\tlocation,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type Location, sliceLocation } from \"../context\";\nimport { type HtmlElement, NodeType } from \"../dom\";\nimport { type AttributeEvent, type ElementReadyEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\nimport entities from \"../elements/entities.json\";\n\nexport interface RuleContext {\n\tentity: string;\n\tterminated: boolean;\n}\n\ninterface RuleOptions {\n\tignoreCase: boolean;\n\trequireSemicolon: boolean;\n}\n\ninterface EntityMatch {\n\t/** original regex match object */\n\tmatch: RegExpMatchArray;\n\t/** normalized character reference */\n\tentity: string;\n\t/** raw/original character reference (that is, exactly as the user entered it) */\n\traw: string;\n\t/** `true` if the character reference was terminated with a `;` */\n\tterminated: boolean;\n}\n\nconst defaults: RuleOptions = {\n\tignoreCase: false,\n\trequireSemicolon: true,\n};\n\nconst regexp = /&(?:[a-z0-9]+|#x?[0-9a-f]+)(;|[^a-z0-9]|$)/gi;\nconst lowercaseEntities = entities.map((it) => it.toLowerCase());\n\nfunction isNumerical(entity: string): boolean {\n\treturn entity.startsWith(\"&#\");\n}\n\nfunction getLocation(\n\tlocation: Location | null,\n\tentity: string,\n\tmatch: RegExpMatchArray,\n): Location | null {\n\t/* istanbul ignore next: never happens in practive */\n\tconst index = match.index ?? 0;\n\treturn sliceLocation(location, index, index + entity.length);\n}\n\nfunction getDescription(context: RuleContext, options: RuleOptions): string {\n\tconst url = \"https://html.spec.whatwg.org/multipage/named-characters.html\";\n\tlet message: string;\n\tif (context.terminated) {\n\t\tmessage = `Unrecognized character reference \\`${context.entity}\\`.`;\n\t} else {\n\t\tmessage = `Character reference \\`${context.entity}\\` must be terminated by a semicolon.`;\n\t}\n\n\treturn [\n\t\tmessage,\n\t\t`HTML5 defines a set of [valid character references](${url}) but this is not a valid one.`,\n\t\t\"\",\n\t\t\"Ensure that:\",\n\t\t\"\",\n\t\t\"1. The character is one of the listed names.\",\n\t\t...(options.ignoreCase ? [] : [\"1. The case is correct (names are case sensitive).\"]),\n\t\t...(options.requireSemicolon ? [\"1. The name is terminated with a `;`.\"] : []),\n\t].join(\"\\n\");\n}\n\nexport default class UnknownCharReference extends Rule<RuleContext, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tignoreCase: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t\trequireSemicolon: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: getDescription(context, this.options),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"element:ready\", (event: ElementReadyEvent) => {\n\t\t\tconst node = event.target;\n\n\t\t\t/* only iterate over direct descendants */\n\t\t\tfor (const child of node.childNodes) {\n\t\t\t\tif (child.nodeType !== NodeType.TEXT_NODE) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthis.findCharacterReferences(node, child.textContent, child.location, {\n\t\t\t\t\tisAttribute: false,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\t/* boolean attributes has no value so nothing to validate */\n\t\t\tif (!event.value) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.findCharacterReferences(event.target, event.value.toString(), event.valueLocation, {\n\t\t\t\tisAttribute: true,\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate get entities(): string[] {\n\t\tif (this.options.ignoreCase) {\n\t\t\treturn lowercaseEntities;\n\t\t} else {\n\t\t\treturn entities;\n\t\t}\n\t}\n\n\tprivate findCharacterReferences(\n\t\tnode: HtmlElement,\n\t\ttext: string,\n\t\tlocation: Location | null,\n\t\t{ isAttribute }: { isAttribute: boolean },\n\t): void {\n\t\tconst isQuerystring = isAttribute && text.includes(\"?\");\n\t\tfor (const match of this.getMatches(text)) {\n\t\t\tthis.validateCharacterReference(node, location, match, { isQuerystring });\n\t\t}\n\t}\n\n\tprivate validateCharacterReference(\n\t\tnode: HtmlElement,\n\t\tlocation: Location | null,\n\t\tfoobar: EntityMatch,\n\t\t{ isQuerystring }: { isQuerystring: boolean },\n\t): void {\n\t\tconst { requireSemicolon } = this.options;\n\t\tconst { match, entity, raw, terminated } = foobar;\n\n\t\t/* assume numeric entities are valid for now */\n\t\tif (isNumerical(entity)) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* special case: when attributes use query parameters we skip checking\n\t\t * unterminated attributes */\n\t\tif (isQuerystring && !terminated) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst found = this.entities.includes(entity);\n\n\t\t/* ignore if this is a known character reference name */\n\t\tif (found && (terminated || !requireSemicolon)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (found && !terminated) {\n\t\t\tconst entityLocation = getLocation(location, entity, match);\n\t\t\tconst message = `Character reference \"{{ entity }}\" must be terminated by a semicolon`;\n\t\t\tconst context: RuleContext = {\n\t\t\t\tentity: raw,\n\t\t\t\tterminated: false,\n\t\t\t};\n\t\t\tthis.report(node, message, entityLocation, context);\n\t\t\treturn;\n\t\t}\n\n\t\tconst entityLocation = getLocation(location, entity, match);\n\t\tconst message = `Unrecognized character reference \"{{ entity }}\"`;\n\t\tconst context: RuleContext = {\n\t\t\tentity: raw,\n\t\t\tterminated: true,\n\t\t};\n\t\tthis.report(node, message, entityLocation, context);\n\t}\n\n\tprivate *getMatches(text: string): IterableIterator<EntityMatch> {\n\t\tlet match: RegExpMatchArray | null;\n\t\tdo {\n\t\t\tmatch = regexp.exec(text);\n\t\t\tif (match) {\n\t\t\t\tconst terminator = match[1]; // === \";\" ? match[1] : \"\";\n\t\t\t\tconst terminated = terminator === \";\";\n\t\t\t\tconst needSlice = terminator !== \";\" && terminator.length > 0;\n\t\t\t\tconst entity = needSlice ? match[0].slice(0, -1) : match[0];\n\t\t\t\tif (this.options.ignoreCase) {\n\t\t\t\t\tyield { match, entity: entity.toLowerCase(), raw: entity, terminated };\n\t\t\t\t} else {\n\t\t\t\t\tyield { match, entity, raw: entity, terminated };\n\t\t\t\t}\n\t\t\t}\n\t\t} while (match);\n\t}\n}\n","import { type Location } from \"../context\";\nimport { type HtmlElement, DOMTokenList, DynamicValue } from \"../dom\";\nimport { type DOMReadyEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport const enum MessageID {\n\tInvalidAttribute,\n\tInvalidValue,\n\tInvalidOrder,\n\tInvalidToken,\n\tInvalidCombination,\n\tMissingField,\n}\n\ninterface RuleContextInvalidAttribute {\n\tmsg: MessageID.InvalidAttribute;\n\twhat: string;\n}\n\ninterface RuleContextInvalidValue {\n\tmsg: MessageID.InvalidValue;\n\ttype: string;\n\tvalue: string;\n\twhat: string;\n}\n\ninterface RuleContextInvalidOrder {\n\tmsg: MessageID.InvalidOrder;\n\tfirst: string;\n\tsecond: string;\n}\n\ninterface RuleContextInvalidToken {\n\tmsg: MessageID.InvalidToken;\n\ttoken: string;\n}\n\ninterface RuleContextInvalidCombine {\n\tmsg: MessageID.InvalidCombination;\n\tfirst: string;\n\tsecond: string;\n}\n\ninterface RuleContextMissingField {\n\tmsg: MessageID.MissingField;\n}\n\nexport type RuleContext =\n\t| RuleContextInvalidAttribute\n\t| RuleContextInvalidValue\n\t| RuleContextInvalidOrder\n\t| RuleContextInvalidToken\n\t| RuleContextInvalidCombine\n\t| RuleContextMissingField;\n\ntype ControlGroup =\n\t| \"text\"\n\t| \"username\"\n\t| \"password\"\n\t| \"multiline\"\n\t| \"month\"\n\t| \"numeric\"\n\t| \"date\"\n\t| \"url\"\n\t| \"tel\";\n\ntype TokenType = \"section\" | \"hint\" | \"contact\" | \"field1\" | \"field2\" | \"webauthn\";\n\nconst expectedOrder: TokenType[] = [\"section\", \"hint\", \"contact\", \"field1\", \"field2\", \"webauthn\"];\n\n/* Field names which does not allow the optional contact token */\nconst fieldNames1 = [\n\t\"name\",\n\t\"honorific-prefix\",\n\t\"given-name\",\n\t\"additional-name\",\n\t\"family-name\",\n\t\"honorific-suffix\",\n\t\"nickname\",\n\t\"username\",\n\t\"new-password\",\n\t\"current-password\",\n\t\"one-time-code\",\n\t\"organization-title\",\n\t\"organization\",\n\t\"street-address\",\n\t\"address-line1\",\n\t\"address-line2\",\n\t\"address-line3\",\n\t\"address-level4\",\n\t\"address-level3\",\n\t\"address-level2\",\n\t\"address-level1\",\n\t\"country\",\n\t\"country-name\",\n\t\"postal-code\",\n\t\"cc-name\",\n\t\"cc-given-name\",\n\t\"cc-additional-name\",\n\t\"cc-family-name\",\n\t\"cc-number\",\n\t\"cc-exp\",\n\t\"cc-exp-month\",\n\t\"cc-exp-year\",\n\t\"cc-csc\",\n\t\"cc-type\",\n\t\"transaction-currency\",\n\t\"transaction-amount\",\n\t\"language\",\n\t\"bday\",\n\t\"bday-day\",\n\t\"bday-month\",\n\t\"bday-year\",\n\t\"sex\",\n\t\"url\",\n\t\"photo\",\n];\n\n/* Field names which allows for the optional contact token */\nconst fieldNames2 = [\n\t\"tel\",\n\t\"tel-country-code\",\n\t\"tel-national\",\n\t\"tel-area-code\",\n\t\"tel-local\",\n\t\"tel-local-prefix\",\n\t\"tel-local-suffix\",\n\t\"tel-extension\",\n\t\"email\",\n\t\"impp\",\n];\n\n/* Mapping between field names and which control group it requires */\nconst fieldNameGroup: Record<string, ControlGroup> = {\n\tname: \"text\",\n\t\"honorific-prefix\": \"text\",\n\t\"given-name\": \"text\",\n\t\"additional-name\": \"text\",\n\t\"family-name\": \"text\",\n\t\"honorific-suffix\": \"text\",\n\tnickname: \"text\",\n\tusername: \"username\",\n\t\"new-password\": \"password\",\n\t\"current-password\": \"password\",\n\t\"one-time-code\": \"password\",\n\t\"organization-title\": \"text\",\n\torganization: \"text\",\n\t\"street-address\": \"multiline\",\n\t\"address-line1\": \"text\",\n\t\"address-line2\": \"text\",\n\t\"address-line3\": \"text\",\n\t\"address-level4\": \"text\",\n\t\"address-level3\": \"text\",\n\t\"address-level2\": \"text\",\n\t\"address-level1\": \"text\",\n\tcountry: \"text\",\n\t\"country-name\": \"text\",\n\t\"postal-code\": \"text\",\n\t\"cc-name\": \"text\",\n\t\"cc-given-name\": \"text\",\n\t\"cc-additional-name\": \"text\",\n\t\"cc-family-name\": \"text\",\n\t\"cc-number\": \"text\",\n\t\"cc-exp\": \"month\",\n\t\"cc-exp-month\": \"numeric\",\n\t\"cc-exp-year\": \"numeric\",\n\t\"cc-csc\": \"text\",\n\t\"cc-type\": \"text\",\n\t\"transaction-currency\": \"text\",\n\t\"transaction-amount\": \"numeric\",\n\tlanguage: \"text\",\n\tbday: \"date\",\n\t\"bday-day\": \"numeric\",\n\t\"bday-month\": \"numeric\",\n\t\"bday-year\": \"numeric\",\n\tsex: \"text\",\n\turl: \"url\",\n\tphoto: \"url\",\n\ttel: \"tel\",\n\t\"tel-country-code\": \"text\",\n\t\"tel-national\": \"text\",\n\t\"tel-area-code\": \"text\",\n\t\"tel-local\": \"text\",\n\t\"tel-local-prefix\": \"text\",\n\t\"tel-local-suffix\": \"text\",\n\t\"tel-extension\": \"text\",\n\temail: \"username\",\n\timpp: \"url\",\n};\n\nconst disallowedInputTypes = [\"checkbox\", \"radio\", \"file\", \"submit\", \"image\", \"reset\", \"button\"];\n\nfunction matchSection(token: string): boolean {\n\treturn token.startsWith(\"section-\");\n}\n\nfunction matchHint(token: string): boolean {\n\treturn token === \"shipping\" || token === \"billing\";\n}\n\nfunction matchFieldNames1(token: string): boolean {\n\treturn fieldNames1.includes(token);\n}\n\nfunction matchContact(token: string): boolean {\n\tconst haystack = [\"home\", \"work\", \"mobile\", \"fax\", \"pager\"];\n\treturn haystack.includes(token);\n}\n\nfunction matchFieldNames2(token: string): boolean {\n\treturn fieldNames2.includes(token);\n}\n\nfunction matchWebauthn(token: string): boolean {\n\treturn token === \"webauthn\";\n}\n\nfunction matchToken(token: string): TokenType | null {\n\tif (matchSection(token)) {\n\t\treturn \"section\";\n\t}\n\tif (matchHint(token)) {\n\t\treturn \"hint\";\n\t}\n\tif (matchFieldNames1(token)) {\n\t\treturn \"field1\";\n\t}\n\tif (matchFieldNames2(token)) {\n\t\treturn \"field2\";\n\t}\n\tif (matchContact(token)) {\n\t\treturn \"contact\";\n\t}\n\tif (matchWebauthn(token)) {\n\t\treturn \"webauthn\";\n\t}\n\treturn null;\n}\n\nfunction getControlGroups(type: string): ControlGroup[] {\n\tconst allGroups: ControlGroup[] = [\n\t\t\"text\",\n\t\t\"multiline\",\n\t\t\"password\",\n\t\t\"url\",\n\t\t\"username\",\n\t\t\"tel\",\n\t\t\"numeric\",\n\t\t\"month\",\n\t\t\"date\",\n\t];\n\tconst mapping: Record<string, ControlGroup[] | undefined> = {\n\t\thidden: allGroups,\n\t\ttext: allGroups.filter((it) => it !== \"multiline\"),\n\t\tsearch: allGroups.filter((it) => it !== \"multiline\"),\n\t\tpassword: [\"password\"],\n\t\turl: [\"url\"],\n\t\temail: [\"username\"],\n\t\ttel: [\"tel\"],\n\t\tnumber: [\"numeric\"],\n\t\tmonth: [\"month\"],\n\t\tdate: [\"date\"],\n\t};\n\n\treturn mapping[type] ?? [];\n}\n\nfunction isDisallowedType(node: HtmlElement, type: string): boolean {\n\tif (!node.is(\"input\")) {\n\t\treturn false;\n\t}\n\treturn disallowedInputTypes.includes(type);\n}\n\nfunction getTerminalMessage(context: RuleContext): string {\n\tswitch (context.msg) {\n\t\tcase MessageID.InvalidAttribute:\n\t\t\treturn \"autocomplete attribute cannot be used on {{ what }}\";\n\t\tcase MessageID.InvalidValue:\n\t\t\treturn '\"{{ value }}\" cannot be used on {{ what }}';\n\t\tcase MessageID.InvalidOrder:\n\t\t\treturn '\"{{ second }}\" must appear before \"{{ first }}\"';\n\t\tcase MessageID.InvalidToken:\n\t\t\treturn '\"{{ token }}\" is not a valid autocomplete token or field name';\n\t\tcase MessageID.InvalidCombination:\n\t\t\treturn '\"{{ second }}\" cannot be combined with \"{{ first }}\"';\n\t\tcase MessageID.MissingField:\n\t\t\treturn \"autocomplete attribute is missing field name\";\n\t}\n}\n\nfunction getMarkdownMessage(context: RuleContext): string {\n\tswitch (context.msg) {\n\t\tcase MessageID.InvalidAttribute:\n\t\t\treturn [\n\t\t\t\t`\\`autocomplete\\` attribute cannot be used on \\`${context.what}\\``,\n\t\t\t\t\"\",\n\t\t\t\t\"The following input types cannot use the `autocomplete` attribute:\",\n\t\t\t\t\"\",\n\t\t\t\t...disallowedInputTypes.map((it) => `- \\`${it}\\``),\n\t\t\t].join(\"\\n\");\n\n\t\tcase MessageID.InvalidValue: {\n\t\t\tconst message = `\\`\"${context.value}\"\\` cannot be used on \\`${context.what}\\``;\n\t\t\tif (context.type === \"form\") {\n\t\t\t\treturn [\n\t\t\t\t\tmessage,\n\t\t\t\t\t\"\",\n\t\t\t\t\t'The `<form>` element can only use the values `\"on\"` and `\"off\"`.',\n\t\t\t\t].join(\"\\n\");\n\t\t\t}\n\t\t\tif (context.type === \"hidden\") {\n\t\t\t\treturn [\n\t\t\t\t\tmessage,\n\t\t\t\t\t\"\",\n\t\t\t\t\t'`<input type=\"hidden\">` cannot use the values `\"on\"` and `\"off\"`.',\n\t\t\t\t].join(\"\\n\");\n\t\t\t}\n\t\t\tconst controlGroups = getControlGroups(context.type);\n\t\t\tconst currentGroup = fieldNameGroup[context.value];\n\t\t\treturn [\n\t\t\t\tmessage,\n\t\t\t\t\"\",\n\t\t\t\t`\\`${context.what}\\` allows autocomplete fields from the following group${controlGroups.length > 1 ? \"s\" : \"\"}:`,\n\t\t\t\t\"\",\n\t\t\t\t...controlGroups.map((it) => `- ${it}`),\n\t\t\t\t\"\",\n\t\t\t\t`The field \\`\"${context.value}\"\\` belongs to the group /${currentGroup}/ which cannot be used with this input type.`,\n\t\t\t].join(\"\\n\");\n\t\t}\n\n\t\tcase MessageID.InvalidOrder:\n\t\t\treturn [\n\t\t\t\t`\\`\"${context.second}\"\\` must appear before \\`\"${context.first}\"\\``,\n\t\t\t\t\"\",\n\t\t\t\t\"The autocomplete tokens must appear in the following order:\",\n\t\t\t\t\"\",\n\t\t\t\t\"- Optional section name (`section-` prefix).\",\n\t\t\t\t\"- Optional `shipping` or `billing` token.\",\n\t\t\t\t\"- Optional `home`, `work`, `mobile`, `fax` or `pager` token (for fields supporting it).\",\n\t\t\t\t\"- Field name\",\n\t\t\t\t\"- Optional `webauthn` token.\",\n\t\t\t].join(\"\\n\");\n\n\t\tcase MessageID.InvalidToken:\n\t\t\treturn `\\`\"${context.token}\"\\` is not a valid autocomplete token or field name`;\n\n\t\tcase MessageID.InvalidCombination:\n\t\t\treturn `\\`\"${context.second}\"\\` cannot be combined with \\`\"${context.first}\"\\``;\n\n\t\tcase MessageID.MissingField:\n\t\t\treturn \"Autocomplete attribute is missing field name\";\n\t}\n}\n\nexport default class ValidAutocomplete extends Rule<RuleContext> {\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: getMarkdownMessage(context),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tconst elements = document.querySelectorAll(\"[autocomplete]\");\n\t\t\tfor (const element of elements) {\n\t\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- selector guarantees the attribute is present */\n\t\t\t\tconst autocomplete = element.getAttribute(\"autocomplete\")!;\n\t\t\t\tif (autocomplete.value === null || autocomplete.value instanceof DynamicValue) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- location must be present as the value is */\n\t\t\t\tconst location = autocomplete.valueLocation!;\n\t\t\t\tconst value = autocomplete.value.toLowerCase();\n\t\t\t\tconst tokens = new DOMTokenList(value, location);\n\t\t\t\tif (tokens.length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthis.validate(element, value, tokens, autocomplete.keyLocation, location);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate validate(\n\t\tnode: HtmlElement,\n\t\tvalue: string,\n\t\ttokens: DOMTokenList,\n\t\tkeyLocation: Location,\n\t\tvalueLocation: Location,\n\t): void {\n\t\tswitch (node.tagName) {\n\t\t\tcase \"form\":\n\t\t\t\tthis.validateFormAutocomplete(node, value, valueLocation);\n\t\t\t\tbreak;\n\t\t\tcase \"input\":\n\t\t\tcase \"textarea\":\n\t\t\tcase \"select\":\n\t\t\t\tthis.validateControlAutocomplete(node, tokens, keyLocation);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate validateControlAutocomplete(\n\t\tnode: HtmlElement,\n\t\ttokens: DOMTokenList,\n\t\tkeyLocation: Location,\n\t): void {\n\t\tconst type = node.getAttributeValue(\"type\") ?? \"text\";\n\t\tconst mantle = type !== \"hidden\" ? \"expectation\" : \"anchor\";\n\n\t\tif (isDisallowedType(node, type)) {\n\t\t\tconst context: RuleContext = {\n\t\t\t\tmsg: MessageID.InvalidAttribute,\n\t\t\t\twhat: `<input type=\"${type}\">`,\n\t\t\t};\n\t\t\tthis.report({\n\t\t\t\tnode,\n\t\t\t\tmessage: getTerminalMessage(context),\n\t\t\t\tlocation: keyLocation,\n\t\t\t\tcontext,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tif (tokens.includes(\"on\") || tokens.includes(\"off\")) {\n\t\t\tthis.validateOnOff(node, mantle, tokens);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.validateTokens(node, tokens, keyLocation);\n\t}\n\n\tprivate validateFormAutocomplete(node: HtmlElement, value: string, location: Location): void {\n\t\tconst trimmed = value.trim();\n\t\tif ([\"on\", \"off\"].includes(trimmed)) {\n\t\t\treturn;\n\t\t}\n\t\tconst context: RuleContext = {\n\t\t\tmsg: MessageID.InvalidValue,\n\t\t\ttype: \"form\",\n\t\t\tvalue: trimmed,\n\t\t\twhat: \"<form>\",\n\t\t};\n\t\tthis.report({\n\t\t\tnode,\n\t\t\tmessage: getTerminalMessage(context),\n\t\t\tlocation,\n\t\t\tcontext,\n\t\t});\n\t}\n\n\tprivate validateOnOff(\n\t\tnode: HtmlElement,\n\t\tmantle: \"expectation\" | \"anchor\",\n\t\ttokens: DOMTokenList,\n\t): void {\n\t\tconst index = tokens.findIndex((it) => it === \"on\" || it === \"off\");\n\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- it must be present of it wouldn't be found */\n\t\tconst value = tokens.item(index)!;\n\t\tconst location = tokens.location(index);\n\t\tif (tokens.length > 1) {\n\t\t\tconst context: RuleContext = {\n\t\t\t\tmsg: MessageID.InvalidCombination,\n\t\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- it must be present of it wouldn't be found */\n\t\t\t\tfirst: tokens.item(index > 0 ? 0 : 1)!,\n\t\t\t\tsecond: value,\n\t\t\t};\n\t\t\tthis.report({\n\t\t\t\tnode,\n\t\t\t\tmessage: getTerminalMessage(context),\n\t\t\t\tlocation,\n\t\t\t\tcontext,\n\t\t\t});\n\t\t}\n\t\tswitch (mantle) {\n\t\t\tcase \"expectation\":\n\t\t\t\treturn;\n\t\t\tcase \"anchor\": {\n\t\t\t\tconst context: RuleContext = {\n\t\t\t\t\tmsg: MessageID.InvalidValue,\n\t\t\t\t\ttype: \"hidden\",\n\t\t\t\t\tvalue,\n\t\t\t\t\twhat: `<input type=\"hidden\">`,\n\t\t\t\t};\n\t\t\t\tthis.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tmessage: getTerminalMessage(context),\n\t\t\t\t\tlocation: tokens.location(0),\n\t\t\t\t\tcontext,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate validateTokens(node: HtmlElement, tokens: DOMTokenList, keyLocation: Location): void {\n\t\tconst order: TokenType[] = [];\n\n\t\tfor (const { item, location } of tokens.iterator()) {\n\t\t\tconst tokenType = matchToken(item);\n\t\t\tif (tokenType) {\n\t\t\t\torder.push(tokenType);\n\t\t\t} else {\n\t\t\t\tconst context: RuleContext = {\n\t\t\t\t\tmsg: MessageID.InvalidToken,\n\t\t\t\t\ttoken: item,\n\t\t\t\t};\n\t\t\t\tthis.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tmessage: getTerminalMessage(context),\n\t\t\t\t\tlocation,\n\t\t\t\t\tcontext,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst fieldTokens = order.map((it) => it === \"field1\" || it === \"field2\");\n\n\t\tthis.validateFieldPresence(node, tokens, fieldTokens, keyLocation);\n\t\tthis.validateContact(node, tokens, order);\n\t\tthis.validateOrder(node, tokens, order);\n\t\tthis.validateControlGroup(node, tokens, fieldTokens);\n\t}\n\n\t/**\n\t * Ensure that exactly one field name is present from the two field lists.\n\t */\n\tprivate validateFieldPresence(\n\t\tnode: HtmlElement,\n\t\ttokens: DOMTokenList,\n\t\tfieldTokens: boolean[],\n\t\tkeyLocation: Location,\n\t): void {\n\t\tconst numFields = fieldTokens.filter(Boolean).length;\n\t\tif (numFields === 0) {\n\t\t\tconst context: RuleContext = {\n\t\t\t\tmsg: MessageID.MissingField,\n\t\t\t};\n\t\t\tthis.report({\n\t\t\t\tnode,\n\t\t\t\tmessage: getTerminalMessage(context),\n\t\t\t\tlocation: keyLocation,\n\t\t\t\tcontext,\n\t\t\t});\n\t\t} else if (numFields > 1) {\n\t\t\tconst a = fieldTokens.indexOf(true);\n\t\t\tconst b = fieldTokens.lastIndexOf(true);\n\t\t\tconst context: RuleContext = {\n\t\t\t\tmsg: MessageID.InvalidCombination,\n\t\t\t\t/* eslint-disable @typescript-eslint/no-non-null-assertion -- it must be present of it wouldn't be found */\n\t\t\t\tfirst: tokens.item(a)!,\n\t\t\t\tsecond: tokens.item(b)!,\n\t\t\t\t/* eslint-enable @typescript-eslint/no-non-null-assertion */\n\t\t\t};\n\t\t\tthis.report({\n\t\t\t\tnode,\n\t\t\t\tmessage: getTerminalMessage(context),\n\t\t\t\tlocation: tokens.location(b),\n\t\t\t\tcontext,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Ensure contact token is only used with field names from the second list.\n\t */\n\tprivate validateContact(node: HtmlElement, tokens: DOMTokenList, order: TokenType[]): void {\n\t\tif (order.includes(\"contact\") && order.includes(\"field1\")) {\n\t\t\tconst a = order.indexOf(\"field1\");\n\t\t\tconst b = order.indexOf(\"contact\");\n\t\t\tconst context: RuleContext = {\n\t\t\t\tmsg: MessageID.InvalidCombination,\n\t\t\t\t/* eslint-disable @typescript-eslint/no-non-null-assertion -- it must be present of it wouldn't be found */\n\t\t\t\tfirst: tokens.item(a)!,\n\t\t\t\tsecond: tokens.item(b)!,\n\t\t\t\t/* eslint-enable @typescript-eslint/no-non-null-assertion */\n\t\t\t};\n\t\t\tthis.report({\n\t\t\t\tnode,\n\t\t\t\tmessage: getTerminalMessage(context),\n\t\t\t\tlocation: tokens.location(b),\n\t\t\t\tcontext,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate validateOrder(node: HtmlElement, tokens: DOMTokenList, order: TokenType[]): void {\n\t\tconst indicies = order.map((it) => expectedOrder.indexOf(it));\n\t\tfor (let i = 0; i < indicies.length - 1; i++) {\n\t\t\tif (indicies[0] > indicies[i + 1]) {\n\t\t\t\tconst context: RuleContext = {\n\t\t\t\t\tmsg: MessageID.InvalidOrder,\n\t\t\t\t\t/* eslint-disable @typescript-eslint/no-non-null-assertion -- it must be present of it wouldn't be found */\n\t\t\t\t\tfirst: tokens.item(i)!,\n\t\t\t\t\tsecond: tokens.item(i + 1)!,\n\t\t\t\t\t/* eslint-enable @typescript-eslint/no-non-null-assertion */\n\t\t\t\t};\n\t\t\t\tthis.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tmessage: getTerminalMessage(context),\n\t\t\t\t\tlocation: tokens.location(i + 1),\n\t\t\t\t\tcontext,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate validateControlGroup(\n\t\tnode: HtmlElement,\n\t\ttokens: DOMTokenList,\n\t\tfieldTokens: boolean[],\n\t): void {\n\t\tconst numFields = fieldTokens.filter(Boolean).length;\n\t\tif (numFields === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* only <input> has restrictions on what field names can be used */\n\t\tif (!node.is(\"input\")) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* if type attribute is dynamic we assume anything goes */\n\t\tconst attr = node.getAttribute(\"type\");\n\t\tconst type = attr?.value ?? \"text\";\n\t\tif (type instanceof DynamicValue) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst controlGroups = getControlGroups(type);\n\t\tconst fieldIndex = fieldTokens.indexOf(true);\n\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- it must be present of it wouldn't be found */\n\t\tconst fieldToken = tokens.item(fieldIndex)!;\n\t\tconst fieldGroup = fieldNameGroup[fieldToken];\n\t\tif (!controlGroups.includes(fieldGroup)) {\n\t\t\tconst context: RuleContext = {\n\t\t\t\tmsg: MessageID.InvalidValue,\n\t\t\t\ttype,\n\t\t\t\tvalue: fieldToken,\n\t\t\t\twhat: `<input type=\"${type}\">`,\n\t\t\t};\n\t\t\tthis.report({\n\t\t\t\tnode,\n\t\t\t\tmessage: getTerminalMessage(context),\n\t\t\t\tlocation: tokens.location(fieldIndex),\n\t\t\t\tcontext,\n\t\t\t});\n\t\t}\n\t}\n}\n","import { DynamicValue } from \"../dom\";\nimport { type AttributeEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\ninterface RuleOptions {\n\trelaxed: boolean;\n}\n\nexport enum RuleContext {\n\tEMPTY = 1,\n\tWHITESPACE,\n\tLEADING_CHARACTER,\n\tDISALLOWED_CHARACTER,\n}\n\nconst defaults: RuleOptions = {\n\trelaxed: false,\n};\n\nexport default class ValidID extends Rule<RuleContext, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\trelaxed: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\tconst { relaxed } = this.options;\n\t\tconst message = this.messages[context]\n\t\t\t.replace(\"id\", \"ID\")\n\t\t\t.replace(/^(.)/, (m) => m.toUpperCase());\n\t\tconst relaxedDescription = relaxed\n\t\t\t? []\n\t\t\t: [\n\t\t\t\t\t\" - ID must begin with a letter\",\n\t\t\t\t\t\" - ID must only contain letters, digits, `-` and `_`\",\n\t\t\t\t];\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t`${message}.`,\n\t\t\t\t\"\",\n\t\t\t\t\"Under the current configuration the following rules are applied:\",\n\t\t\t\t\"\",\n\t\t\t\t\" - ID must not be empty\",\n\t\t\t\t\" - ID must not contain any whitespace characters\",\n\t\t\t\t...relaxedDescription,\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", this.isRelevant, (event: AttributeEvent) => {\n\t\t\tconst { value } = event;\n\n\t\t\tif (value === null || value instanceof DynamicValue) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (value === \"\") {\n\t\t\t\tconst context = RuleContext.EMPTY;\n\t\t\t\tthis.report(event.target, this.messages[context], event.location, context);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (value.match(/\\s/)) {\n\t\t\t\tconst context = RuleContext.WHITESPACE;\n\t\t\t\tthis.report(event.target, this.messages[context], event.valueLocation, context);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { relaxed } = this.options;\n\t\t\tif (relaxed) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (value.match(/^[^\\p{L}]/u)) {\n\t\t\t\tconst context = RuleContext.LEADING_CHARACTER;\n\t\t\t\tthis.report(event.target, this.messages[context], event.valueLocation, context);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (value.match(/[^\\p{L}\\p{N}_-]/u)) {\n\t\t\t\tconst context = RuleContext.DISALLOWED_CHARACTER;\n\t\t\t\tthis.report(event.target, this.messages[context], event.valueLocation, context);\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected get messages(): Record<RuleContext, string> {\n\t\treturn {\n\t\t\t[RuleContext.EMPTY]: \"element id must not be empty\",\n\t\t\t[RuleContext.WHITESPACE]: \"element id must not contain whitespace\",\n\t\t\t[RuleContext.LEADING_CHARACTER]: \"element id must begin with a letter\",\n\t\t\t[RuleContext.DISALLOWED_CHARACTER]:\n\t\t\t\t\"element id must only contain letters, digits, dash and underscore characters\",\n\t\t};\n\t}\n\n\tprotected isRelevant(this: void, event: AttributeEvent): boolean {\n\t\treturn event.key === \"id\";\n\t}\n}\n","import { NodeClosed } from \"../dom\";\nimport { type TagEndEvent } from \"../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../rule\";\n\nexport default class VoidContent extends Rule<string> {\n\tpublic documentation(tagName: string): RuleDocumentation {\n\t\tconst doc: RuleDocumentation = {\n\t\t\tdescription:\n\t\t\t\t\"HTML void elements cannot have any content and must not have content or end tag.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t\tif (tagName) {\n\t\t\tdoc.description = `<${tagName}> is a void element and must not have content or end tag.`;\n\t\t}\n\t\treturn doc;\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\tconst node = event.target; // The current element being closed.\n\n\t\t\tif (!node) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!node.voidElement) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (node.closed === NodeClosed.EndTag) {\n\t\t\t\tthis.report(\n\t\t\t\t\tnull,\n\t\t\t\t\t`End tag for <${node.tagName}> must be omitted`,\n\t\t\t\t\tnode.location,\n\t\t\t\t\tnode.tagName,\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type HtmlElement, NodeClosed } from \"../dom\";\nimport { type TagEndEvent } from \"../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../rule\";\n\n/**\n * @internal\n */\nexport enum Style {\n\tAlwaysOmit = 1,\n\tAlwaysSelfclose = 2,\n}\n\n/**\n * @internal\n */\nexport interface RuleContext {\n\tstyle: Style;\n\ttagName: string;\n}\n\ninterface RuleOptions {\n\tstyle: \"omit\" | \"selfclose\" | \"selfclosing\";\n}\n\nconst defaults: RuleOptions = {\n\tstyle: \"omit\",\n};\n\nexport default class VoidStyle extends Rule<RuleContext, RuleOptions> {\n\tprivate style: Style;\n\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\t\tthis.style = parseStyle(this.options.style);\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\tstyle: {\n\t\t\t\tenum: [\"omit\", \"selfclose\", \"selfclosing\"],\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(context: RuleContext): RuleDocumentation {\n\t\tconst [desc, end] = styleDescription(context.style);\n\t\treturn {\n\t\t\tdescription: `The current configuration requires void elements to ${desc}, use <${context.tagName}${end}> instead.`,\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\tconst active = event.previous; // The current active element (that is, the current element on the stack)\n\n\t\t\tif (active.meta) {\n\t\t\t\tthis.validateActive(active);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate validateActive(node: HtmlElement): void {\n\t\t/* ignore non-void elements, they must be closed with regular end tag */\n\t\tif (!node.voidElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.shouldBeOmitted(node)) {\n\t\t\tthis.reportError(\n\t\t\t\tnode,\n\t\t\t\t`Expected omitted end tag <${node.tagName}> instead of self-closing element <${node.tagName}/>`,\n\t\t\t);\n\t\t}\n\n\t\tif (this.shouldBeSelfClosed(node)) {\n\t\t\tthis.reportError(\n\t\t\t\tnode,\n\t\t\t\t`Expected self-closing element <${node.tagName}/> instead of omitted end-tag <${node.tagName}>`,\n\t\t\t);\n\t\t}\n\t}\n\n\tpublic reportError(node: HtmlElement, message: string): void {\n\t\tconst context: RuleContext = {\n\t\t\tstyle: this.style,\n\t\t\ttagName: node.tagName,\n\t\t};\n\t\tsuper.report(node, message, null, context);\n\t}\n\n\tprivate shouldBeOmitted(node: HtmlElement): boolean {\n\t\treturn this.style === Style.AlwaysOmit && node.closed === NodeClosed.VoidSelfClosed;\n\t}\n\n\tprivate shouldBeSelfClosed(node: HtmlElement): boolean {\n\t\treturn this.style === Style.AlwaysSelfclose && node.closed === NodeClosed.VoidOmitted;\n\t}\n}\n\nfunction parseStyle(name: string): Style {\n\tswitch (name) {\n\t\tcase \"omit\":\n\t\t\treturn Style.AlwaysOmit;\n\t\tcase \"selfclose\":\n\t\tcase \"selfclosing\":\n\t\t\treturn Style.AlwaysSelfclose;\n\t\t/* istanbul ignore next: covered by schema validation */\n\t\tdefault:\n\t\t\tthrow new Error(`Invalid style \"${name}\" for \"void-style\" rule`);\n\t}\n}\n\nfunction styleDescription(style: Style): [string, string] {\n\tswitch (style) {\n\t\tcase Style.AlwaysOmit:\n\t\t\treturn [\"omit end tag\", \"\"];\n\t\tcase Style.AlwaysSelfclose:\n\t\t\treturn [\"be self-closed\", \"/\"];\n\t\t// istanbul ignore next: will only happen if new styles are added, otherwise this isn't reached\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown style`);\n\t}\n}\n","import { type DOMReadyEvent } from \"../../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../../rule\";\nimport { hasAltText, hasAriaLabel } from \"../helper\";\nimport { inAccessibilityTree } from \"../helper/a11y\";\nimport { classifyNodeText, TextClassification } from \"../helper/text\";\n\nexport default class H30 extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"WCAG 2.1 requires each `<a href>` anchor link to have a text describing the purpose of the link using either plain text or an `<img>` with the `alt` attribute set.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst links = event.document.getElementsByTagName(\"a\");\n\t\t\tfor (const link of links) {\n\t\t\t\t/* ignore links missing the href attribute */\n\t\t\t\tif (!link.hasAttribute(\"href\")) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/* ignore links with aria-hidden=\"true\" */\n\t\t\t\tif (!inAccessibilityTree(link)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/* check if text content is present (or dynamic) */\n\t\t\t\tconst textClassification = classifyNodeText(link, { ignoreHiddenRoot: true });\n\t\t\t\tif (textClassification !== TextClassification.EMPTY_TEXT) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/* check if image with alt-text is present */\n\t\t\t\tconst images = link.querySelectorAll(\"img\");\n\t\t\t\tif (images.some((image) => hasAltText(image))) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/* check if aria-label is present on either the <a> element or a descendant */\n\t\t\t\tconst labels = link.querySelectorAll(\"[aria-label]\");\n\t\t\t\tif (hasAriaLabel(link) || labels.some((cur) => hasAriaLabel(cur))) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis.report(link, \"Anchor link must have a text describing its purpose\");\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type DOMTree, type HtmlElement } from \"../../dom\";\nimport { type DOMReadyEvent } from \"../../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../../rule\";\n\nexport default class H32 extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: \"WCAG 2.1 requires each `<form>` element to have at least one submit button.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\t/* query all tags with form property, normally this is only the <form> tag\n\t\t * but with custom element metadata other tags might be considered form\n\t\t * (usually a component wrapping a <form> element) */\n\t\tconst formTags = this.getTagsWithProperty(\"form\");\n\t\tconst formSelector = formTags.join(\",\");\n\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tconst forms = document.querySelectorAll(formSelector);\n\n\t\t\tfor (const form of forms) {\n\t\t\t\t/* find nested submit buttons */\n\t\t\t\tif (hasNestedSubmit(form)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/* find explicitly associated submit buttons */\n\t\t\t\tif (hasAssociatedSubmit(document, form)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis.report(form, `<${form.tagName}> element must have a submit button`);\n\t\t\t}\n\t\t});\n\t}\n}\n\nfunction isSubmit(node: HtmlElement): boolean {\n\tconst type = node.getAttribute(\"type\");\n\treturn Boolean(!type || type.valueMatches(/submit|image/));\n}\n\nfunction isAssociated(id: string, node: HtmlElement): boolean {\n\tconst form = node.getAttribute(\"form\");\n\treturn Boolean(form?.valueMatches(id, true));\n}\n\nfunction hasNestedSubmit(form: HtmlElement): boolean {\n\tconst matches = form\n\t\t.querySelectorAll(\"button,input\")\n\t\t.filter(isSubmit)\n\t\t.filter((node) => !node.hasAttribute(\"form\"));\n\treturn matches.length > 0;\n}\n\nfunction hasAssociatedSubmit(document: DOMTree, form: HtmlElement): boolean {\n\tconst { id } = form;\n\tif (!id) {\n\t\treturn false;\n\t}\n\tconst matches = document\n\t\t.querySelectorAll(\"button[form],input[form]\")\n\t\t.filter(isSubmit)\n\t\t.filter((node) => isAssociated(id, node));\n\treturn matches.length > 0;\n}\n","import { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../../rule\";\nimport { hasAltText } from \"../helper\";\nimport { inAccessibilityTree } from \"../helper/a11y\";\n\nexport default class H36 extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t\"WCAG 2.1 requires all images used as submit buttons to have a non-empty textual description using the `alt` attribute.\",\n\t\t\t\t'The alt text cannot be empty (`alt=\"\"`).',\n\t\t\t].join(\"\\n\"),\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event) => {\n\t\t\t/* only handle input elements */\n\t\t\tconst node = event.previous;\n\t\t\tif (node.tagName !== \"input\") return;\n\n\t\t\t/* only handle images with type=\"image\" */\n\t\t\tif (node.getAttributeValue(\"type\") !== \"image\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!inAccessibilityTree(node)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!hasAltText(node)) {\n\t\t\t\tconst message = \"image used as submit button must have non-empty alt text\";\n\t\t\t\tconst alt = node.getAttribute(\"alt\");\n\t\t\t\tthis.report({\n\t\t\t\t\tnode,\n\t\t\t\t\tmessage,\n\t\t\t\t\tlocation: alt ? alt.keyLocation : node.location,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n","import { type HtmlElement } from \"../../dom\";\nimport { type DOMReadyEvent } from \"../../event\";\nimport { type RuleDocumentation, type SchemaObject, Rule, ruleDocumentationUrl } from \"../../rule\";\nimport { inAccessibilityTree } from \"../helper/a11y\";\n\ninterface RuleOptions {\n\tallowEmpty: boolean;\n\talias: string | string[];\n}\n\nconst defaults: RuleOptions = {\n\tallowEmpty: true,\n\talias: [],\n};\n\nexport default class H37 extends Rule<void, RuleOptions> {\n\tpublic constructor(options: Partial<RuleOptions>) {\n\t\tsuper({ ...defaults, ...options });\n\n\t\t/* ensure alias is array */\n\t\tif (!Array.isArray(this.options.alias)) {\n\t\t\tthis.options.alias = [this.options.alias];\n\t\t}\n\t}\n\n\tpublic static schema(): SchemaObject {\n\t\treturn {\n\t\t\talias: {\n\t\t\t\tanyOf: [\n\t\t\t\t\t{\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tallowEmpty: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t};\n\t}\n\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"Both HTML5 and WCAG 2.0 requires images to have a alternative text for each image.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tconst nodes = document.querySelectorAll(\"img\");\n\t\t\tfor (const node of nodes) {\n\t\t\t\tthis.validateNode(node);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate validateNode(node: HtmlElement): void {\n\t\t/* ignore images with aria-hidden=\"true\" or role=\"presentation\" */\n\t\tif (!inAccessibilityTree(node)) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* validate plain alt-attribute */\n\t\tif (\n\t\t\tBoolean(node.getAttributeValue(\"alt\")) ||\n\t\t\tBoolean(node.hasAttribute(\"alt\") && this.options.allowEmpty)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* validate if any non-empty alias is present */\n\t\tfor (const attr of this.options.alias) {\n\t\t\tif (node.getAttribute(attr)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst tag = node.annotatedName;\n\t\tif (node.hasAttribute(\"alt\")) {\n\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- we just verified presence with hasAttribute */\n\t\t\tconst attr = node.getAttribute(\"alt\")!;\n\t\t\t/* istanbul ignore next */\n\t\t\tthis.report(node, `${tag} cannot have empty \"alt\" attribute`, attr.keyLocation);\n\t\t} else {\n\t\t\tthis.report(node, `${tag} is missing required \"alt\" attribute`, node.location);\n\t\t}\n\t}\n}\n","import { type TagReadyEvent } from \"../../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../../rule\";\nimport html5 from \"../../elements/html5\";\nimport { type MetaAttribute } from \"../../meta\";\nimport { naturalJoin } from \"../../utils/natural-join\";\nimport { DynamicValue } from \"../../dom\";\n\n/* istanbul ignore next: this will always be present for the <th>\n * attribute (or the tests would fail) */\nconst { enum: validScopes } = html5.th.attributes?.scope as MetaAttribute & { enum: string[] };\n\nconst joinedScopes = naturalJoin(validScopes);\n\nexport default class H63 extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"H63: Using the scope attribute to associate header cells and data cells in data tables\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:ready\", (event: TagReadyEvent) => {\n\t\t\tconst node = event.target;\n\n\t\t\t/* only validate th */\n\t\t\tif (node.tagName !== \"th\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst scope = node.getAttribute(\"scope\");\n\t\t\tconst value = scope?.value;\n\n\t\t\t/* ignore dynamic scope */\n\t\t\tif (value instanceof DynamicValue) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore elements with valid scope values */\n\t\t\tif (value && validScopes.includes(value)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst message = `<th> element must have a valid scope attribute: ${joinedScopes}`;\n\t\t\tconst location = scope?.valueLocation ?? scope?.keyLocation ?? node.location;\n\t\t\tthis.report(node, message, location);\n\t\t});\n\t}\n}\n","import { type TagEndEvent } from \"../../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../../rule\";\n\nexport default class H67 extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"A decorative image cannot have a title attribute. Either remove `title` or add a descriptive `alt` text.\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"tag:end\", (event: TagEndEvent) => {\n\t\t\tconst node = event.target;\n\n\t\t\t/* only validate images */\n\t\t\tif (!node || node.tagName !== \"img\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore images without title */\n\t\t\tconst title = node.getAttribute(\"title\");\n\t\t\tif (!title || title.value === \"\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* ignore elements with non-empty alt-text */\n\t\t\tconst alt = node.getAttributeValue(\"alt\");\n\t\t\tif (alt && alt !== \"\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.report(node, \"<img> with empty alt text cannot have title attribute\", title.keyLocation);\n\t\t});\n\t}\n}\n","import { type DOMReadyEvent } from \"../../event\";\nimport { type RuleDocumentation, Rule, ruleDocumentationUrl } from \"../../rule\";\nimport { type HtmlElement } from \"../../dom\";\n\nexport default class H71 extends Rule {\n\tpublic documentation(): RuleDocumentation {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t\"H71: Providing a description for groups of form controls using fieldset and legend elements\",\n\t\t\turl: ruleDocumentationUrl(__filename),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst { document } = event;\n\t\t\tconst fieldsets = document.querySelectorAll(this.selector);\n\t\t\tfor (const fieldset of fieldsets) {\n\t\t\t\tthis.validate(fieldset);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate validate(fieldset: HtmlElement): void {\n\t\tconst legend = fieldset.querySelectorAll(\"> legend\");\n\t\tif (legend.length === 0) {\n\t\t\tthis.reportNode(fieldset);\n\t\t}\n\t}\n\n\tprivate reportNode(node: HtmlElement): void {\n\t\tsuper.report(node, `${node.annotatedName} must have a <legend> as the first child`);\n\t}\n\n\tprivate get selector(): string {\n\t\treturn this.getTagsDerivedFrom(\"fieldset\").join(\",\");\n\t}\n}\n","import { type RuleConstructor } from \"../../rule\";\n\nimport H30 from \"./h30\";\nimport H32 from \"./h32\";\nimport H36 from \"./h36\";\nimport H37 from \"./h37\";\nimport H63 from \"./h63\";\nimport H67 from \"./h67\";\nimport H71 from \"./h71\";\n\nconst bundledRules: Record<string, RuleConstructor<any, any>> = {\n\t\"wcag/h30\": H30,\n\t\"wcag/h32\": H32,\n\t\"wcag/h36\": H36,\n\t\"wcag/h37\": H37,\n\t\"wcag/h63\": H63,\n\t\"wcag/h67\": H67,\n\t\"wcag/h71\": H71,\n};\n\nexport default bundledRules;\n","import { type RuleConstructor } from \"../rule\";\nimport AllowedLinks from \"./allowed-links\";\nimport AreaAlt from \"./area-alt\";\nimport AriaHiddenBody from \"./aria-hidden-body\";\nimport AriaLabelMisuse from \"./aria-label-misuse\";\nimport AttrCase from \"./attr-case\";\nimport AttrDelimiter from \"./attr-delimiter\";\nimport AttrPattern from \"./attr-pattern\";\nimport AttrQuotes from \"./attr-quotes\";\nimport AttrSpacing from \"./attr-spacing\";\nimport AttributeAllowedValues from \"./attribute-allowed-values\";\nimport AttributeBooleanStyle from \"./attribute-boolean-style\";\nimport AttributeEmptyStyle from \"./attribute-empty-style\";\nimport AttributeMisuse from \"./attribute-misuse\";\nimport ClassPattern from \"./class-pattern\";\nimport CloseAttr from \"./close-attr\";\nimport CloseOrder from \"./close-order\";\nimport Deprecated from \"./deprecated\";\nimport DeprecatedRule from \"./deprecated-rule\";\nimport DoctypeHtml from \"./doctype-html\";\nimport DoctypeStyle from \"./doctype-style\";\nimport ElementCase from \"./element-case\";\nimport ElementName from \"./element-name\";\nimport ElementPermittedContent from \"./element-permitted-content\";\nimport ElementPermittedOccurrences from \"./element-permitted-occurrences\";\nimport ElementPermittedOrder from \"./element-permitted-order\";\nimport ElementPermittedParent from \"./element-permitted-parent\";\nimport ElementRequiredAncestor from \"./element-required-ancestor\";\nimport ElementRequiredAttributes from \"./element-required-attributes\";\nimport ElementRequiredContent from \"./element-required-content\";\nimport EmptyHeading from \"./empty-heading\";\nimport EmptyTitle from \"./empty-title\";\nimport FormDupName from \"./form-dup-name\";\nimport HeadingLevel from \"./heading-level\";\nimport HiddenFocusable from \"./hidden-focusable\";\nimport IdPattern from \"./id-pattern\";\nimport InputAttributes from \"./input-attributes\";\nimport InputMissingLabel from \"./input-missing-label\";\nimport LongTitle from \"./long-title\";\nimport MetaRefresh from \"./meta-refresh\";\nimport MapDupName from \"./map-dup-name\";\nimport MapIdName from \"./map-id-name\";\nimport MissingDoctype from \"./missing-doctype\";\nimport MultipleLabeledControls from \"./multiple-labeled-controls\";\nimport NamePattern from \"./name-pattern\";\nimport NoAbstractRole from \"./no-abstract-role\";\nimport NoAutoplay from \"./no-autoplay\";\nimport NoConditionalComment from \"./no-conditional-comment\";\nimport NoDeprecatedAttr from \"./no-deprecated-attr\";\nimport NoDupAttr from \"./no-dup-attr\";\nimport NoDupClass from \"./no-dup-class\";\nimport NoDupId from \"./no-dup-id\";\nimport NoImplicitButtonType from \"./no-implicit-button-type\";\nimport NoImplicitInputType from \"./no-implicit-input-type\";\nimport NoImplicitClose from \"./no-implicit-close\";\nimport NoInlineStyle from \"./no-inline-style\";\nimport NoMissingReferences from \"./no-missing-references\";\nimport NoMultipleMain from \"./no-multiple-main\";\nimport NoRawCharacters from \"./no-raw-characters\";\nimport NoRedundantAriaLabel from \"./no-redundant-aria-label\";\nimport NoRedundantFor from \"./no-redundant-for\";\nimport NoRedundantRole from \"./no-redundant-role\";\nimport NoSelfClosing from \"./no-self-closing\";\nimport NoStyleTag from \"./no-style-tag\";\nimport NoTrailingWhitespace from \"./no-trailing-whitespace\";\nimport NoUnknownElements from \"./no-unknown-elements\";\nimport NoUnusedDisable from \"./no-unused-disable\";\nimport NoUtf8Bom from \"./no-utf8-bom\";\nimport PreferButton from \"./prefer-button\";\nimport PreferNativeElement from \"./prefer-native-element\";\nimport PreferTbody from \"./prefer-tbody\";\nimport RequireCSPNonce from \"./require-csp-nonce\";\nimport RequireSri from \"./require-sri\";\nimport ScriptElement from \"./script-element\";\nimport ScriptType from \"./script-type\";\nimport SvgFocusable from \"./svg-focusable\";\nimport TelNonBreaking from \"./tel-non-breaking\";\nimport TextContent from \"./text-content\";\nimport UniqueLandmark from \"./unique-landmark\";\nimport UnrecognizedCharRef from \"./unrecognized-char-ref\";\nimport ValidAutocomplete from \"./valid-autocomplete\";\nimport ValidID from \"./valid-id\";\nimport VoidContent from \"./void-content\";\nimport VoidStyle from \"./void-style\";\nimport WCAG from \"./wcag\";\n\nconst bundledRules: Record<string, RuleConstructor<any, any>> = {\n\t\"allowed-links\": AllowedLinks,\n\t\"area-alt\": AreaAlt,\n\t\"aria-hidden-body\": AriaHiddenBody,\n\t\"aria-label-misuse\": AriaLabelMisuse,\n\t\"attr-case\": AttrCase,\n\t\"attr-delimiter\": AttrDelimiter,\n\t\"attr-pattern\": AttrPattern,\n\t\"attr-quotes\": AttrQuotes,\n\t\"attr-spacing\": AttrSpacing,\n\t\"attribute-allowed-values\": AttributeAllowedValues,\n\t\"attribute-boolean-style\": AttributeBooleanStyle,\n\t\"attribute-empty-style\": AttributeEmptyStyle,\n\t\"attribute-misuse\": AttributeMisuse,\n\t\"class-pattern\": ClassPattern,\n\t\"close-attr\": CloseAttr,\n\t\"close-order\": CloseOrder,\n\tdeprecated: Deprecated,\n\t\"deprecated-rule\": DeprecatedRule,\n\t\"doctype-html\": DoctypeHtml,\n\t\"doctype-style\": DoctypeStyle,\n\t\"element-case\": ElementCase,\n\t\"element-name\": ElementName,\n\t\"element-permitted-content\": ElementPermittedContent,\n\t\"element-permitted-occurrences\": ElementPermittedOccurrences,\n\t\"element-permitted-order\": ElementPermittedOrder,\n\t\"element-permitted-parent\": ElementPermittedParent,\n\t\"element-required-ancestor\": ElementRequiredAncestor,\n\t\"element-required-attributes\": ElementRequiredAttributes,\n\t\"element-required-content\": ElementRequiredContent,\n\t\"empty-heading\": EmptyHeading,\n\t\"empty-title\": EmptyTitle,\n\t\"form-dup-name\": FormDupName,\n\t\"heading-level\": HeadingLevel,\n\t\"hidden-focusable\": HiddenFocusable,\n\t\"id-pattern\": IdPattern,\n\t\"input-attributes\": InputAttributes,\n\t\"input-missing-label\": InputMissingLabel,\n\t\"long-title\": LongTitle,\n\t\"map-dup-name\": MapDupName,\n\t\"map-id-name\": MapIdName,\n\t\"meta-refresh\": MetaRefresh,\n\t\"missing-doctype\": MissingDoctype,\n\t\"multiple-labeled-controls\": MultipleLabeledControls,\n\t\"name-pattern\": NamePattern,\n\t\"no-abstract-role\": NoAbstractRole,\n\t\"no-autoplay\": NoAutoplay,\n\t\"no-conditional-comment\": NoConditionalComment,\n\t\"no-deprecated-attr\": NoDeprecatedAttr,\n\t\"no-dup-attr\": NoDupAttr,\n\t\"no-dup-class\": NoDupClass,\n\t\"no-dup-id\": NoDupId,\n\t\"no-implicit-button-type\": NoImplicitButtonType,\n\t\"no-implicit-input-type\": NoImplicitInputType,\n\t\"no-implicit-close\": NoImplicitClose,\n\t\"no-inline-style\": NoInlineStyle,\n\t\"no-missing-references\": NoMissingReferences,\n\t\"no-multiple-main\": NoMultipleMain,\n\t\"no-raw-characters\": NoRawCharacters,\n\t\"no-redundant-aria-label\": NoRedundantAriaLabel,\n\t\"no-redundant-for\": NoRedundantFor,\n\t\"no-redundant-role\": NoRedundantRole,\n\t\"no-self-closing\": NoSelfClosing,\n\t\"no-style-tag\": NoStyleTag,\n\t\"no-trailing-whitespace\": NoTrailingWhitespace,\n\t\"no-unknown-elements\": NoUnknownElements,\n\t\"no-unused-disable\": NoUnusedDisable,\n\t\"no-utf8-bom\": NoUtf8Bom,\n\t\"prefer-button\": PreferButton,\n\t\"prefer-native-element\": PreferNativeElement,\n\t\"prefer-tbody\": PreferTbody,\n\t\"require-csp-nonce\": RequireCSPNonce,\n\t\"require-sri\": RequireSri,\n\t\"script-element\": ScriptElement,\n\t\"script-type\": ScriptType,\n\t\"svg-focusable\": SvgFocusable,\n\t\"tel-non-breaking\": TelNonBreaking,\n\t\"text-content\": TextContent,\n\t\"unique-landmark\": UniqueLandmark,\n\t\"unrecognized-char-ref\": UnrecognizedCharRef,\n\t\"valid-autocomplete\": ValidAutocomplete,\n\t\"valid-id\": ValidID,\n\t\"void-content\": VoidContent,\n\t\"void-style\": VoidStyle,\n\t...WCAG,\n};\n\nexport default bundledRules;\n","import rules from \"../rules\";\n\nconst ruleIds = new Set<string>(Object.keys(rules));\n\n/**\n * Returns true if given ruleId is an existing builtin rule. It does not handle\n * rules loaded via plugins.\n *\n * Can be used to create forward/backward compatibility by checking if a rule\n * exists to enable/disable it.\n *\n * @public\n * @param ruleId - Rule id to check\n * @returns `true` if rule exists\n */\nexport function ruleExists(ruleId: string): boolean {\n\treturn ruleIds.has(ruleId);\n}\n","import { type HtmlElement, DOMTree } from \"../dom\";\n\n/**\n * @public\n * @since 8.21.0\n */\nexport interface Walk {\n\t/**\n\t * Visits all nodes in the tree starting at node or document in a depth-first\n\t * (in-order) manner, i.e. any children will be visited before its parent.\n\t *\n\t * @public\n\t * @since 8.21.0\n\t * @param root - Element or document to visit nodes from.\n\t * @param callback - Callback executed for each node.\n\t */\n\tdepthFirst(this: void, root: HtmlElement | DOMTree, callback: (node: HtmlElement) => void): void;\n}\n\nfunction depthFirst(\n\tthis: void,\n\troot: HtmlElement | DOMTree,\n\tcallback: (node: HtmlElement) => void,\n): void {\n\tif (root instanceof DOMTree) {\n\t\tif (root.readyState !== \"complete\") {\n\t\t\tthrow new Error(`Cannot call walk.depthFirst(..) before document is ready`);\n\t\t}\n\t\troot = root.root;\n\t}\n\n\tfunction visit(node: HtmlElement): void {\n\t\tnode.childElements.forEach(visit);\n\t\tif (!node.isRootElement()) {\n\t\t\tcallback(node);\n\t\t}\n\t}\n\n\tvisit(root);\n}\n\n/**\n * Helper functions to walk the DOM tree.\n *\n * @public\n * @since 8.21.0\n */\nexport const walk: Walk = {\n\tdepthFirst,\n};\n","import { type Location } from \"../context\";\nimport { type MetaTable } from \"../meta\";\nimport { walk } from \"../utils\";\nimport { HtmlElement } from \"./htmlelement\";\n\n/**\n * @public\n */\nexport class DOMTree {\n\tpublic readonly root: HtmlElement;\n\tprivate active: HtmlElement;\n\tprivate _readyState: \"loading\" | \"complete\";\n\tpublic doctype: string | null;\n\n\t/**\n\t * @internal\n\t */\n\tpublic constructor(location: Location) {\n\t\tthis.root = HtmlElement.rootNode(location);\n\t\tthis.active = this.root;\n\t\tthis.doctype = null;\n\t\tthis._readyState = \"loading\";\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic pushActive(node: HtmlElement): void {\n\t\tthis.active = node;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic popActive(): void {\n\t\tif (this.active.isRootElement()) {\n\t\t\t/* root element should never be popped, continue as if nothing happened */\n\t\t\treturn;\n\t\t}\n\t\tthis.active = this.active.parent ?? this.root;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic getActive(): HtmlElement {\n\t\treturn this.active;\n\t}\n\n\t/**\n\t * Describes the loading state of the document.\n\t *\n\t * When `\"loading\"` it is still not safe to use functions such as\n\t * `querySelector` or presence of attributes, child nodes, etc.\n\t */\n\tpublic get readyState(): \"loading\" | \"complete\" {\n\t\treturn this._readyState;\n\t}\n\n\t/**\n\t * Resolve dynamic meta expressions.\n\t *\n\t * @internal\n\t */\n\tpublic resolveMeta(table: MetaTable): void {\n\t\tthis._readyState = \"complete\";\n\t\twalk.depthFirst(this, (node: HtmlElement) => {\n\t\t\ttable.resolve(node);\n\t\t});\n\t}\n\n\tpublic getElementsByTagName(tagName: string): HtmlElement[] {\n\t\treturn this.root.getElementsByTagName(tagName);\n\t}\n\n\t/**\n\t * @deprecated use utility function `walk.depthFirst(..)` instead (since 8.21.0).\n\t */\n\tpublic visitDepthFirst(callback: (node: HtmlElement) => void): void {\n\t\twalk.depthFirst(this, callback);\n\t}\n\n\t/**\n\t * @deprecated use `querySelector(..)` instead (since 8.21.0)\n\t */\n\tpublic find(callback: (node: HtmlElement) => boolean): HtmlElement | null {\n\t\treturn this.root.find(callback);\n\t}\n\n\tpublic querySelector(selector: string): HtmlElement | null {\n\t\treturn this.root.querySelector(selector);\n\t}\n\n\tpublic querySelectorAll(selector: string): HtmlElement[] {\n\t\treturn this.root.querySelectorAll(selector);\n\t}\n}\n","import { type Attribute, type HtmlElement, DynamicValue, DOMTokenList } from \"../dom\";\nimport {\n\ttype MetaAttribute,\n\ttype Permitted,\n\ttype PermittedEntry,\n\ttype PermittedGroup,\n\ttype PermittedOrder,\n\ttype RequiredAncestors,\n\ttype RequiredContent,\n\ttype CategoryOrTag,\n} from \"./element\";\n\nconst allowedKeys = [\"exclude\"];\n\n/**\n * Helper class to validate elements against metadata rules.\n *\n * @public\n */\n/* eslint-disable-next-line @typescript-eslint/no-extraneous-class -- technical debt, should probably be plain functions maybe in an object */\nexport class Validator {\n\t/**\n\t * Test if element is used in a proper context.\n\t *\n\t * @param node - Element to test.\n\t * @param rules - List of rules.\n\t * @returns `true` if element passes all tests.\n\t */\n\tpublic static validatePermitted(node: HtmlElement, rules: Permitted | null): boolean {\n\t\tif (!rules) {\n\t\t\treturn true;\n\t\t}\n\t\treturn rules.some((rule) => {\n\t\t\treturn Validator.validatePermittedRule(node, rule);\n\t\t});\n\t}\n\n\t/**\n\t * Test if an element is used the correct amount of times.\n\t *\n\t * For instance, a `<table>` element can only contain a single `<tbody>`\n\t * child. If multiple `<tbody>` exists this test will fail both nodes.\n\t * Note that this is called on the parent but will fail the children violating\n\t * the rule.\n\t *\n\t * @param children - Array of children to validate.\n\t * @param rules - List of rules of the parent element.\n\t * @returns `true` if the parent element of the children passes the test.\n\t */\n\tpublic static validateOccurrences(\n\t\tchildren: HtmlElement[],\n\t\trules: Permitted | null,\n\t\tcb: (node: HtmlElement, category: string) => void,\n\t): boolean {\n\t\tif (!rules) {\n\t\t\treturn true;\n\t\t}\n\t\tlet valid: boolean = true;\n\t\tfor (const rule of rules) {\n\t\t\t/** @todo handle complex rules and not just plain arrays (but as of now\n\t\t\t * there is no use-case for it) */\n\t\t\t// istanbul ignore next\n\t\t\tif (typeof rule !== \"string\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Check if the rule has a quantifier\n\t\t\tconst [, category, quantifier] = rule.match(/^(@?.*?)([?*]?)$/)!; // eslint-disable-line @typescript-eslint/no-non-null-assertion -- will always match\n\t\t\tconst limit = category && quantifier && parseQuantifier(quantifier);\n\n\t\t\tif (limit) {\n\t\t\t\tconst siblings = children.filter((cur) =>\n\t\t\t\t\tValidator.validatePermittedCategory(cur, rule, true),\n\t\t\t\t);\n\t\t\t\tif (siblings.length > limit) {\n\t\t\t\t\t// fail only the children above the limit (currently limit can only be 1)\n\t\t\t\t\tfor (const child of siblings.slice(limit)) {\n\t\t\t\t\t\tcb(child, category);\n\t\t\t\t\t}\n\t\t\t\t\tvalid = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn valid;\n\t}\n\n\t/**\n\t * Validate elements order.\n\t *\n\t * Given a parent element with children and metadata containing permitted\n\t * order it will validate each children and ensure each one exists in the\n\t * specified order.\n\t *\n\t * For instance, for a `<table>` element the `<caption>` element must come\n\t * before a `<thead>` which must come before `<tbody>`.\n\t *\n\t * @param children - Array of children to validate.\n\t */\n\tpublic static validateOrder(\n\t\tchildren: HtmlElement[],\n\t\trules: PermittedOrder | null,\n\t\tcb: (node: HtmlElement, prev: HtmlElement) => void,\n\t): boolean {\n\t\tif (!rules) {\n\t\t\treturn true;\n\t\t}\n\t\tlet i = 0;\n\t\tlet prev: HtmlElement | null = null;\n\t\tfor (const node of children) {\n\t\t\tconst old = i;\n\t\t\twhile (rules[i] && !Validator.validatePermittedCategory(node, rules[i], true)) {\n\t\t\t\ti++;\n\t\t\t}\n\n\t\t\tif (i >= rules.length) {\n\t\t\t\t/* Second check is if the order is specified for this element at all. It\n\t\t\t\t * will be unspecified in two cases:\n\t\t\t\t * - disallowed elements\n\t\t\t\t * - elements where the order doesn't matter\n\t\t\t\t * In both of these cases no error should be reported. */\n\t\t\t\tconst orderSpecified = rules.find((cur: string) =>\n\t\t\t\t\tValidator.validatePermittedCategory(node, cur, true),\n\t\t\t\t);\n\t\t\t\tif (orderSpecified) {\n\t\t\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- technical debt, should never happen */\n\t\t\t\t\tcb(node, prev!);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t/* if this element has unspecified order the index is restored so new\n\t\t\t\t * elements of the same type can be specified again */\n\t\t\t\ti = old;\n\t\t\t}\n\t\t\tprev = node;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Validate element ancestors.\n\t *\n\t * Check if an element has the required set of elements. At least one of the\n\t * selectors must match.\n\t */\n\tpublic static validateAncestors(node: HtmlElement, rules: RequiredAncestors | null): boolean {\n\t\tif (!rules || rules.length === 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn rules.some((rule) => node.closest(rule));\n\t}\n\n\t/**\n\t * Validate element required content.\n\t *\n\t * Check if an element has the required set of elements. At least one of the\n\t * selectors must match.\n\t *\n\t * Returns `[]` when valid or a list of required but missing tagnames or\n\t * categories.\n\t */\n\tpublic static validateRequiredContent(\n\t\tnode: HtmlElement,\n\t\trules: RequiredContent | null,\n\t): CategoryOrTag[] {\n\t\tif (!rules || rules.length === 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn rules.filter((tagName) => {\n\t\t\tconst haveMatchingChild = node.childElements.some((child) =>\n\t\t\t\tValidator.validatePermittedCategory(child, tagName, false),\n\t\t\t);\n\t\t\treturn !haveMatchingChild;\n\t\t});\n\t}\n\n\t/**\n\t * Test if an attribute has an allowed value and/or format.\n\t *\n\t * @param attr - Attribute to test.\n\t * @param rules - Element attribute metadta.\n\t * @returns `true` if attribute passes all tests.\n\t */\n\tpublic static validateAttribute(\n\t\tattr: Attribute,\n\t\trules: Record<string, MetaAttribute | undefined>,\n\t): boolean {\n\t\tconst rule = rules[attr.key];\n\t\tif (!rule) {\n\t\t\treturn true;\n\t\t}\n\n\t\t/* consider dynamic values as valid as there is no way to properly test them\n\t\t * while using transformed sources, i.e. it must be tested when running in a\n\t\t * browser instead */\n\t\tconst value = attr.value;\n\t\tif (value instanceof DynamicValue) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst empty = value === null || value === \"\";\n\n\t\t/* if boolean is set the value can be either null, empty string or the\n\t\t * attribute key (attribute-boolean-style regulates style) */\n\t\tif (rule.boolean) {\n\t\t\treturn empty || value === attr.key;\n\t\t}\n\n\t\t/* if omit is set the value can be either null or empty string\n\t\t * (attribute-empty style regulates style) */\n\t\tif (rule.omit && empty) {\n\t\t\treturn true;\n\t\t}\n\n\t\t/* validate each token when using list, all tokens must be valid */\n\t\tif (rule.list) {\n\t\t\tconst tokens = new DOMTokenList(value, attr.valueLocation);\n\t\t\treturn tokens.every((token) => {\n\t\t\t\treturn this.validateAttributeValue(token, rule);\n\t\t\t});\n\t\t}\n\n\t\treturn this.validateAttributeValue(value, rule);\n\t}\n\n\tprivate static validateAttributeValue(value: string | null, rule: MetaAttribute): boolean {\n\t\t/* skip attribute if it not have enumerated list */\n\t\tif (!rule.enum) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (value === null) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst caseInsensitiveValue = value.toLowerCase();\n\n\t\treturn rule.enum.some((entry: string | RegExp) => {\n\t\t\tif (entry instanceof RegExp) {\n\t\t\t\t/* regular expressions are matched case-sensitive */\n\t\t\t\treturn !!value.match(entry);\n\t\t\t} else {\n\t\t\t\t/* strings matched case-insensitive */\n\t\t\t\treturn caseInsensitiveValue === entry;\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate static validatePermittedRule(\n\t\tnode: HtmlElement,\n\t\trule: PermittedEntry,\n\t\tisExclude: boolean = false,\n\t): boolean {\n\t\tif (typeof rule === \"string\") {\n\t\t\treturn Validator.validatePermittedCategory(node, rule, !isExclude);\n\t\t} else if (Array.isArray(rule)) {\n\t\t\treturn rule.every((inner: PermittedEntry) => {\n\t\t\t\treturn Validator.validatePermittedRule(node, inner, isExclude);\n\t\t\t});\n\t\t} else {\n\t\t\tvalidateKeys(rule);\n\t\t\tif (rule.exclude) {\n\t\t\t\tif (Array.isArray(rule.exclude)) {\n\t\t\t\t\treturn !rule.exclude.some((inner: PermittedEntry) => {\n\t\t\t\t\t\treturn Validator.validatePermittedRule(node, inner, true);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn !Validator.validatePermittedRule(node, rule.exclude, true);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Validate node against a content category.\n\t *\n\t * When matching parent nodes against permitted parents use the superset\n\t * parameter to also match for `@flow`. E.g. if a node expects a `@phrasing`\n\t * parent it should also allow `@flow` parent since `@phrasing` is a subset of\n\t * `@flow`.\n\t *\n\t * @param node - The node to test against\n\t * @param category - Name of category with `@` prefix or tag name.\n\t * @param defaultMatch - The default return value when node categories is not known.\n\t */\n\t/* eslint-disable-next-line complexity -- rule does not like switch */\n\tpublic static validatePermittedCategory(\n\t\tnode: HtmlElement,\n\t\tcategory: string,\n\t\tdefaultMatch: boolean,\n\t): boolean {\n\t\tconst [, rawCategory] = category.match(/^(@?.*?)([?*]?)$/)!; // eslint-disable-line @typescript-eslint/no-non-null-assertion -- will always match\n\n\t\t/* match tagName when an explicit name is given */\n\t\tif (!rawCategory.startsWith(\"@\")) {\n\t\t\treturn node.tagName === rawCategory;\n\t\t}\n\n\t\t/* if the meta entry is missing assume any content model would match */\n\t\tif (!node.meta) {\n\t\t\treturn defaultMatch;\n\t\t}\n\n\t\tswitch (rawCategory) {\n\t\t\tcase \"@meta\":\n\t\t\t\treturn node.meta.metadata as boolean;\n\t\t\tcase \"@flow\":\n\t\t\t\treturn node.meta.flow as boolean;\n\t\t\tcase \"@sectioning\":\n\t\t\t\treturn node.meta.sectioning as boolean;\n\t\t\tcase \"@heading\":\n\t\t\t\treturn node.meta.heading as boolean;\n\t\t\tcase \"@phrasing\":\n\t\t\t\treturn node.meta.phrasing as boolean;\n\t\t\tcase \"@embedded\":\n\t\t\t\treturn node.meta.embedded as boolean;\n\t\t\tcase \"@interactive\":\n\t\t\t\treturn node.meta.interactive as boolean;\n\t\t\tcase \"@script\":\n\t\t\t\treturn Boolean(node.meta.scriptSupporting);\n\t\t\tcase \"@form\":\n\t\t\t\treturn Boolean(node.meta.form);\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Invalid content category \"${category}\"`);\n\t\t}\n\t}\n}\n\nfunction validateKeys(rule: PermittedGroup): void {\n\tfor (const key of Object.keys(rule)) {\n\t\tif (!allowedKeys.includes(key)) {\n\t\t\tconst str = JSON.stringify(rule);\n\t\t\tthrow new Error(`Permitted rule \"${str}\" contains unknown property \"${key}\"`);\n\t\t}\n\t}\n}\n\nfunction parseQuantifier(quantifier: string): number | null {\n\tswitch (quantifier) {\n\t\tcase \"?\":\n\t\t\treturn 1;\n\t\tcase \"*\":\n\t\t\treturn null;\n\t\t// istanbul ignore next\n\t\tdefault:\n\t\t\tthrow new Error(`Invalid quantifier \"${quantifier}\" used`);\n\t}\n}\n","export { type TransformContext } from \"./context\";\nexport { type Transformer } from \"./transformer\";\n\n/**\n * @internal\n */\nexport const TRANSFORMER_API: { readonly VERSION: number } = {\n\tVERSION: 1,\n};\n","export default {};\n","import { type ConfigData } from \"../config-data\";\n\nconst config: ConfigData = {\n\trules: {\n\t\t\"area-alt\": [\"error\", { accessible: true }],\n\t\t\"aria-hidden-body\": \"error\",\n\t\t\"aria-label-misuse\": [\"error\", { allowAnyNamable: false }],\n\t\t\"deprecated-rule\": \"warn\",\n\t\t\"empty-heading\": \"error\",\n\t\t\"empty-title\": \"error\",\n\t\t\"hidden-focusable\": \"error\",\n\t\t\"meta-refresh\": \"error\",\n\t\t\"multiple-labeled-controls\": \"error\",\n\t\t\"no-abstract-role\": \"error\",\n\t\t\"no-autoplay\": [\"error\", { include: [\"audio\", \"video\"] }],\n\t\t\"no-dup-id\": \"error\",\n\t\t\"no-implicit-button-type\": \"error\",\n\t\t\"no-redundant-aria-label\": \"error\",\n\t\t\"no-redundant-for\": \"error\",\n\t\t\"no-redundant-role\": \"error\",\n\t\t\"prefer-native-element\": \"error\",\n\t\t\"svg-focusable\": \"off\",\n\t\t\"text-content\": \"error\",\n\t\t\"unique-landmark\": \"error\",\n\t\t\"valid-autocomplete\": \"error\",\n\t\t\"wcag/h30\": \"error\",\n\t\t\"wcag/h32\": \"error\",\n\t\t\"wcag/h36\": \"error\",\n\t\t\"wcag/h37\": \"error\",\n\t\t\"wcag/h63\": \"error\",\n\t\t\"wcag/h67\": \"error\",\n\t\t\"wcag/h71\": \"error\",\n\t},\n};\n\nexport default config;\n","import { type ConfigData } from \"../config-data\";\n\nconst config: ConfigData = {\n\trules: {\n\t\t/* doctype is usually not included when fetching source code from browser */\n\t\t\"missing-doctype\": \"off\",\n\n\t\t/* some frameworks (such as jQuery) often uses inline style, e.g. for\n\t\t * showing/hiding elements so it is counter-productive to check for inline\n\t\t * style. If anything it should be used on original sorce code only. */\n\t\t\"no-inline-style\": \"off\",\n\n\t\t/* scripts will often add markup with trailing whitespace */\n\t\t\"no-trailing-whitespace\": \"off\",\n\n\t\t/* browser normalizes boolean attributes */\n\t\t\"attribute-boolean-style\": \"off\",\n\t\t\"attribute-empty-style\": \"off\",\n\n\t\t/* the browser will often do what it wants, out of users control */\n\t\t\"void-style\": \"off\",\n\t\t\"no-self-closing\": \"off\",\n\t},\n};\n\nexport default config;\n","import { type ConfigData } from \"../config-data\";\n\nconst config: ConfigData = {\n\trules: {\n\t\t\"input-missing-label\": \"error\",\n\t\t\"heading-level\": \"error\",\n\t\t\"missing-doctype\": \"error\",\n\t\t\"no-missing-references\": \"error\",\n\t\t\"require-sri\": \"error\",\n\t},\n};\n\nexport default config;\n","import { type ConfigData } from \"../config-data\";\n\nconst config: ConfigData = {\n\trules: {\n\t\t\"attr-quotes\": \"off\",\n\t\t\"doctype-style\": \"off\",\n\t\t\"void-style\": \"off\",\n\t},\n};\n\nexport default config;\n","import { type ConfigData } from \"../config-data\";\n\nconst config: ConfigData = {\n\trules: {\n\t\t\"area-alt\": [\"error\", { accessible: true }],\n\t\t\"aria-hidden-body\": \"error\",\n\t\t\"aria-label-misuse\": [\"error\", { allowAnyNamable: false }],\n\t\t\"attr-case\": \"error\",\n\t\t\"attr-delimiter\": \"error\",\n\t\t\"attr-quotes\": \"error\",\n\t\t\"attr-spacing\": \"error\",\n\t\t\"attribute-allowed-values\": \"error\",\n\t\t\"attribute-boolean-style\": \"error\",\n\t\t\"attribute-empty-style\": \"error\",\n\t\t\"attribute-misuse\": \"error\",\n\t\t\"close-attr\": \"error\",\n\t\t\"close-order\": \"error\",\n\t\tdeprecated: \"error\",\n\t\t\"deprecated-rule\": \"warn\",\n\t\t\"doctype-html\": \"error\",\n\t\t\"doctype-style\": \"error\",\n\t\t\"element-case\": \"error\",\n\t\t\"element-name\": \"error\",\n\t\t\"element-permitted-content\": \"error\",\n\t\t\"element-permitted-occurrences\": \"error\",\n\t\t\"element-permitted-order\": \"error\",\n\t\t\"element-permitted-parent\": \"error\",\n\t\t\"element-required-ancestor\": \"error\",\n\t\t\"element-required-attributes\": \"error\",\n\t\t\"element-required-content\": \"error\",\n\t\t\"empty-heading\": \"error\",\n\t\t\"empty-title\": \"error\",\n\t\t\"form-dup-name\": \"error\",\n\t\t\"hidden-focusable\": \"error\",\n\t\t\"input-attributes\": \"error\",\n\t\t\"long-title\": \"error\",\n\t\t\"map-dup-name\": \"error\",\n\t\t\"map-id-name\": \"error\",\n\t\t\"meta-refresh\": \"error\",\n\t\t\"multiple-labeled-controls\": \"error\",\n\t\t\"no-abstract-role\": \"error\",\n\t\t\"no-autoplay\": [\"error\", { include: [\"audio\", \"video\"] }],\n\t\t\"no-conditional-comment\": \"error\",\n\t\t\"no-deprecated-attr\": \"error\",\n\t\t\"no-dup-attr\": \"error\",\n\t\t\"no-dup-class\": \"error\",\n\t\t\"no-dup-id\": \"error\",\n\t\t\"no-implicit-button-type\": \"error\",\n\t\t\"no-implicit-input-type\": \"error\",\n\t\t\"no-implicit-close\": \"error\",\n\t\t\"no-inline-style\": \"error\",\n\t\t\"no-multiple-main\": \"error\",\n\t\t\"no-raw-characters\": \"error\",\n\t\t\"no-redundant-aria-label\": \"error\",\n\t\t\"no-redundant-for\": \"error\",\n\t\t\"no-redundant-role\": \"error\",\n\t\t\"no-self-closing\": \"error\",\n\t\t\"no-trailing-whitespace\": \"error\",\n\t\t\"no-utf8-bom\": \"error\",\n\t\t\"no-unused-disable\": \"error\",\n\t\t\"prefer-button\": \"error\",\n\t\t\"prefer-native-element\": \"error\",\n\t\t\"prefer-tbody\": \"error\",\n\t\t\"script-element\": \"error\",\n\t\t\"script-type\": \"error\",\n\t\t\"svg-focusable\": \"off\",\n\t\t\"tel-non-breaking\": \"error\",\n\t\t\"text-content\": \"error\",\n\t\t\"unique-landmark\": \"error\",\n\t\t\"unrecognized-char-ref\": \"error\",\n\t\t\"valid-autocomplete\": \"error\",\n\t\t\"valid-id\": [\"error\", { relaxed: false }],\n\t\tvoid: \"off\",\n\t\t\"void-content\": \"error\",\n\t\t\"void-style\": \"error\",\n\t\t\"wcag/h30\": \"error\",\n\t\t\"wcag/h32\": \"error\",\n\t\t\"wcag/h36\": \"error\",\n\t\t\"wcag/h37\": \"error\",\n\t\t\"wcag/h63\": \"error\",\n\t\t\"wcag/h67\": \"error\",\n\t\t\"wcag/h71\": \"error\",\n\t},\n};\n\nexport default config;\n","import { type ConfigData } from \"../config-data\";\n\nconst config: ConfigData = {\n\trules: {\n\t\t\"area-alt\": [\"error\", { accessible: false }],\n\t\t\"aria-label-misuse\": [\"error\", { allowAnyNamable: true }],\n\t\t\"attr-spacing\": \"error\",\n\t\t\"attribute-allowed-values\": \"error\",\n\t\t\"attribute-misuse\": \"error\",\n\t\t\"close-attr\": \"error\",\n\t\t\"close-order\": \"error\",\n\t\tdeprecated: \"error\",\n\t\t\"deprecated-rule\": \"warn\",\n\t\t\"doctype-html\": \"error\",\n\t\t\"element-name\": \"error\",\n\t\t\"element-permitted-content\": \"error\",\n\t\t\"element-permitted-occurrences\": \"error\",\n\t\t\"element-permitted-order\": \"error\",\n\t\t\"element-permitted-parent\": \"error\",\n\t\t\"element-required-ancestor\": \"error\",\n\t\t\"element-required-attributes\": \"error\",\n\t\t\"element-required-content\": \"error\",\n\t\t\"map-dup-name\": \"error\",\n\t\t\"map-id-name\": \"error\",\n\t\t\"multiple-labeled-controls\": \"error\",\n\t\t\"no-abstract-role\": \"error\",\n\t\t\"no-deprecated-attr\": \"error\",\n\t\t\"no-dup-attr\": \"error\",\n\t\t\"no-dup-id\": \"error\",\n\t\t\"no-multiple-main\": \"error\",\n\t\t\"no-raw-characters\": [\"error\", { relaxed: true }],\n\t\t\"no-unused-disable\": \"error\",\n\t\t\"script-element\": \"error\",\n\t\t\"unrecognized-char-ref\": \"error\",\n\t\t\"valid-autocomplete\": \"error\",\n\t\t\"valid-id\": [\"error\", { relaxed: true }],\n\t\t\"void-content\": \"error\",\n\t},\n};\n\nexport default config;\n","import { type ConfigData } from \"../config-data\";\nimport a11y from \"./a11y\";\nimport browser from \"./browser\";\nimport document from \"./document\";\nimport prettier from \"./prettier\";\nimport recommended from \"./recommended\";\nimport standard from \"./standard\";\n\n/**\n * @internal\n */\nconst presets: Record<string, ConfigData> = {\n\t\"html-validate:a11y\": a11y,\n\n\t\"html-validate:browser\": browser,\n\t\"html-validate:document\": document,\n\t\"html-validate:prettier\": prettier,\n\t\"html-validate:recommended\": recommended,\n\t\"html-validate:standard\": standard,\n\n\t/* @deprecated aliases */\n\t\"htmlvalidate:recommended\": recommended,\n\t\"htmlvalidate:document\": document,\n\t\"html-validate:a17y\": a11y,\n};\n\nexport default presets;\n","import fs from \"fs\";\nimport { type Source } from \"../context\";\nimport { ensureError, NestedError } from \"../error\";\nimport { type MetaTable } from \"../meta\";\nimport { type Plugin } from \"../plugin\";\nimport { type TransformContext, type Transformer } from \"../transform\";\nimport { type ConfigData, type RuleOptions } from \"./config-data\";\nimport { type Severity } from \"./severity\";\n\n/**\n * @public\n */\nexport interface TransformerEntry {\n\tpattern: RegExp;\n\tname: string;\n\tfn: Transformer;\n}\n\n/**\n * @public\n */\nexport interface ResolvedConfigData {\n\tmetaTable: MetaTable;\n\tplugins: Plugin[];\n\trules: Map<string, [Severity, RuleOptions]>;\n\ttransformers: TransformerEntry[];\n}\n\n/**\n * A resolved configuration is a normalized configuration with all extends,\n * plugins etc resolved.\n *\n * @public\n */\nexport class ResolvedConfig {\n\tprivate metaTable: MetaTable;\n\tprivate plugins: Plugin[];\n\tprivate rules: Map<string, [Severity, RuleOptions]>;\n\tprivate transformers: TransformerEntry[];\n\n\t/** The original data this resolved configuration was created from */\n\tprivate original: ConfigData;\n\n\t/**\n\t * @internal\n\t */\n\tpublic constructor(\n\t\t{ metaTable, plugins, rules, transformers }: ResolvedConfigData,\n\t\toriginal: ConfigData,\n\t) {\n\t\tthis.metaTable = metaTable;\n\t\tthis.plugins = plugins;\n\t\tthis.rules = rules;\n\t\tthis.transformers = transformers;\n\t\tthis.original = original;\n\t}\n\n\t/**\n\t * Returns the (merged) configuration data used to create this resolved\n\t * configuration.\n\t */\n\tpublic getConfigData(): ConfigData {\n\t\treturn this.original;\n\t}\n\n\tpublic getMetaTable(): MetaTable {\n\t\treturn this.metaTable;\n\t}\n\n\tpublic getPlugins(): Plugin[] {\n\t\treturn this.plugins;\n\t}\n\n\tpublic getRules(): Map<string, [Severity, RuleOptions]> {\n\t\treturn this.rules;\n\t}\n\n\t/**\n\t * Transform a source.\n\t *\n\t * When transforming zero or more new sources will be generated.\n\t *\n\t * @param source - Current source to transform.\n\t * @param filename - If set it is the filename used to match\n\t * transformer. Default is to use filename from source.\n\t * @returns A list of transformed sources ready for validation.\n\t */\n\tpublic transformSource(source: Source, filename?: string): Source[] {\n\t\tconst transformer = this.findTransformer(filename ?? source.filename);\n\t\tconst context: TransformContext = {\n\t\t\thasChain: (filename: string): boolean => {\n\t\t\t\treturn !!this.findTransformer(filename);\n\t\t\t},\n\t\t\tchain: (source: Source, filename: string) => {\n\t\t\t\treturn this.transformSource(source, filename);\n\t\t\t},\n\t\t};\n\t\tif (transformer) {\n\t\t\ttry {\n\t\t\t\treturn Array.from(transformer.fn.call(context, source), (cur: Source) => {\n\t\t\t\t\t/* keep track of which transformers that has been run on this source\n\t\t\t\t\t * by appending this entry to the transformedBy array */\n\t\t\t\t\tcur.transformedBy ??= [];\n\t\t\t\t\tcur.transformedBy.push(transformer.name);\n\t\t\t\t\treturn cur;\n\t\t\t\t});\n\t\t\t} catch (err: unknown) {\n\t\t\t\t/* istanbul ignore next: only used as a fallback */\n\t\t\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\t\t\tthrow new NestedError(\n\t\t\t\t\t`When transforming \"${source.filename}\": ${message}`,\n\t\t\t\t\tensureError(err),\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\treturn [source];\n\t\t}\n\t}\n\n\t/**\n\t * Wrapper around [[transformSource]] which reads a file before passing it\n\t * as-is to transformSource.\n\t *\n\t * @param filename - Filename to transform (according to configured\n\t * transformations)\n\t * @returns A list of transformed sources ready for validation.\n\t */\n\tpublic transformFilename(filename: string): Source[] {\n\t\tconst stdin = 0;\n\t\tconst src = filename !== \"/dev/stdin\" ? filename : stdin;\n\t\tconst data = fs.readFileSync(src, { encoding: \"utf8\" });\n\t\tconst source: Source = {\n\t\t\tdata,\n\t\t\tfilename,\n\t\t\tline: 1,\n\t\t\tcolumn: 1,\n\t\t\toffset: 0,\n\t\t\toriginalData: data,\n\t\t};\n\t\treturn this.transformSource(source);\n\t}\n\n\t/**\n\t * Returns true if a transformer matches given filename.\n\t */\n\tpublic canTransform(filename: string): boolean {\n\t\tconst entry = this.findTransformer(filename);\n\t\treturn !!entry;\n\t}\n\n\tprivate findTransformer(filename: string): TransformerEntry | null {\n\t\tconst match = this.transformers.find((entry: TransformerEntry) => entry.pattern.test(filename));\n\t\treturn match ?? null;\n\t}\n}\n","import { UserError } from \"../../error\";\nimport { type MetaDataTable } from \"../../meta\";\nimport { type Plugin } from \"../../plugin\";\nimport { type Transformer } from \"../../transform\";\nimport { type ConfigData } from \"../config-data\";\nimport { type Resolver, type ResolverOptions } from \"./resolver\";\n\ntype BoundResolver<K extends keyof Resolver> = Resolver & Required<Pick<Resolver, K>>;\n\nfunction haveResolver<K extends keyof Resolver>(\n\tkey: K,\n\tvalue: Resolver,\n): value is BoundResolver<K> {\n\treturn key in value;\n}\n\nfunction haveConfigResolver(value: Resolver): value is BoundResolver<\"resolveConfig\"> {\n\treturn haveResolver(\"resolveConfig\", value);\n}\n\nfunction haveElementsResolver(value: Resolver): value is BoundResolver<\"resolveElements\"> {\n\treturn haveResolver(\"resolveElements\", value);\n}\n\nfunction havePluginResolver(value: Resolver): value is BoundResolver<\"resolvePlugin\"> {\n\treturn haveResolver(\"resolvePlugin\", value);\n}\n\nfunction haveTransformerResolver(value: Resolver): value is BoundResolver<\"resolveTransformer\"> {\n\treturn haveResolver(\"resolveTransformer\", value);\n}\n\n/**\n * @internal\n */\nexport function resolveConfig(\n\tresolvers: Resolver[],\n\tid: string,\n\toptions: ResolverOptions,\n): ConfigData {\n\tfor (const resolver of resolvers.filter(haveConfigResolver)) {\n\t\tconst config = resolver.resolveConfig(id, options);\n\t\tif (config) {\n\t\t\treturn config;\n\t\t}\n\t}\n\tthrow new UserError(`Failed to load configuration from \"${id}\"`);\n}\n\n/**\n * @internal\n */\nexport function resolveElements(\n\tresolvers: Resolver[],\n\tid: string,\n\toptions: ResolverOptions,\n): MetaDataTable {\n\tfor (const resolver of resolvers.filter(haveElementsResolver)) {\n\t\tconst elements = resolver.resolveElements(id, options);\n\t\tif (elements) {\n\t\t\treturn elements;\n\t\t}\n\t}\n\tthrow new UserError(`Failed to load elements from \"${id}\"`);\n}\n\n/**\n * @internal\n */\nexport function resolvePlugin(resolvers: Resolver[], id: string, options: ResolverOptions): Plugin {\n\tfor (const resolver of resolvers.filter(havePluginResolver)) {\n\t\tconst plugin = resolver.resolvePlugin(id, options);\n\t\tif (plugin) {\n\t\t\treturn plugin;\n\t\t}\n\t}\n\tthrow new UserError(`Failed to load plugin from \"${id}\"`);\n}\n\n/**\n * @internal\n */\nexport function resolveTransformer(\n\tresolvers: Resolver[],\n\tid: string,\n\toptions: ResolverOptions,\n): Transformer {\n\tfor (const resolver of resolvers.filter(haveTransformerResolver)) {\n\t\tconst transformer = resolver.resolveTransformer(id, options);\n\t\tif (transformer) {\n\t\t\treturn transformer;\n\t\t}\n\t}\n\tthrow new UserError(`Failed to load transformer from \"${id}\"`);\n}\n","import { type MetaDataTable } from \"../../../meta\";\nimport { type Plugin } from \"../../../plugin\";\nimport { type Transformer } from \"../../../transform\";\nimport { type ConfigData } from \"../../config-data\";\nimport { type Resolver } from \"../resolver\";\n\n/**\n * Entries for the static resolver.\n *\n * @public\n * @since 8.0.0\n */\nexport interface StaticResolverMap {\n\telements?: Record<string, MetaDataTable>;\n\tconfigs?: Record<string, ConfigData>;\n\tplugins?: Record<string, Plugin>;\n\ttransformers?: Record<string, Transformer>;\n}\n\n/**\n * Static resolver.\n *\n * @public\n * @since 8.0.0\n */\nexport interface StaticResolver extends Required<Resolver> {\n\taddElements(id: string, elements: MetaDataTable): void;\n\taddConfig(id: string, config: ConfigData): void;\n\taddPlugin(id: string, plugin: Plugin): void;\n\taddTransformer(id: string, transformer: Transformer): void;\n}\n\n/**\n * Create a new resolver for static content, i.e. plugins or transformers known\n * at compile time.\n *\n * @public\n * @since 8.0.0\n */\nexport function staticResolver(map: StaticResolverMap = {}): StaticResolver {\n\tconst { elements = {}, configs = {}, plugins = {}, transformers = {} } = map;\n\treturn {\n\t\tname: \"static-qresolver\",\n\t\taddElements(id: string, value: MetaDataTable): void {\n\t\t\telements[id] = value;\n\t\t},\n\t\taddConfig(id: string, value: ConfigData): void {\n\t\t\tconfigs[id] = value;\n\t\t},\n\t\taddPlugin(id: string, value: Plugin): void {\n\t\t\tplugins[id] = value;\n\t\t},\n\t\taddTransformer(id: string, value: Transformer): void {\n\t\t\ttransformers[id] = value;\n\t\t},\n\t\tresolveElements(id: string): MetaDataTable | null {\n\t\t\treturn elements[id] ?? null;\n\t\t},\n\t\tresolveConfig(id: string): ConfigData | null {\n\t\t\treturn configs[id] ?? null;\n\t\t},\n\t\tresolvePlugin(id: string): Plugin | null {\n\t\t\treturn plugins[id] ?? null;\n\t\t},\n\t\tresolveTransformer(id: string): Transformer | null {\n\t\t\treturn transformers[id] ?? null;\n\t\t},\n\t};\n}\n","import Ajv from \"ajv\";\nimport ajvSchemaDraft from \"ajv/lib/refs/json-schema-draft-06.json\";\nimport deepmerge from \"deepmerge\";\nimport { bundledElements } from \"../elements\";\nimport { ensureError, SchemaValidationError } from \"../error\";\nimport { MetaTable } from \"../meta\";\nimport { type MetaDataTable, type MetaElement, MetaCopyableProperty } from \"../meta/element\";\nimport { type Plugin } from \"../plugin\";\nimport schema from \"../schema/config.json\";\nimport { type Transformer, TRANSFORMER_API } from \"../transform\";\nimport bundledRules from \"../rules\";\nimport { Rule } from \"../rule\";\nimport {\n\ttype ConfigData,\n\ttype RuleConfig,\n\ttype RuleOptions,\n\ttype TransformMap,\n} from \"./config-data\";\nimport defaultConfig from \"./default\";\nimport { ConfigError } from \"./error\";\nimport { type Severity, parseSeverity } from \"./severity\";\nimport Presets from \"./presets\";\nimport { type ResolvedConfigData, type TransformerEntry, ResolvedConfig } from \"./resolved-config\";\nimport {\n\ttype Resolver,\n\tresolvePlugin,\n\tresolveTransformer,\n\tresolveConfig,\n\tresolveElements,\n} from \"./resolver\";\n\n/**\n * Internal interface for a loaded plugin.\n *\n * @internal\n */\nexport interface LoadedPlugin extends Plugin {\n\tname: string;\n\toriginalName: string;\n}\n\nconst ajv = new Ajv({ strict: true, strictTuples: true, strictTypes: true });\najv.addMetaSchema(ajvSchemaDraft);\n\nconst validator = ajv.compile(schema);\n\nfunction overwriteMerge<T>(a: T[], b: T[]): T[] {\n\treturn b;\n}\n\nfunction mergeInternal(base: ConfigData, rhs: ConfigData): ConfigData {\n\tconst dst = deepmerge(base, { ...rhs, rules: {} });\n\n\t/* rules need some special care, should overwrite arrays instead of\n\t * concaternation, i.e. [\"error\", {...options}] should not be merged by\n\t * appending to old value */\n\tif (rhs.rules) {\n\t\tdst.rules = deepmerge(dst.rules, rhs.rules, { arrayMerge: overwriteMerge });\n\t}\n\n\t/* root property is merged with boolean \"or\" since it should always be truthy\n\t * if any config has it set. */\n\tconst root = Boolean(base.root) || Boolean(rhs.root);\n\tif (root) {\n\t\tdst.root = root;\n\t}\n\n\treturn dst;\n}\n\nfunction toArray<T>(value: T | T[]): T[] {\n\tif (Array.isArray(value)) {\n\t\treturn value;\n\t} else {\n\t\treturn [value];\n\t}\n}\n\n/**\n * Configuration holder.\n *\n * Each file being validated will have a unique instance of this class.\n *\n * @public\n */\nexport class Config {\n\tprivate config: ConfigData;\n\tprivate configurations: Map<string, ConfigData>;\n\tprivate initialized: boolean;\n\n\tprivate resolvers: Resolver[];\n\tprivate metaTable: MetaTable | null;\n\tprivate plugins: LoadedPlugin[];\n\tprivate transformers: TransformerEntry[] = [];\n\n\t/**\n\t * Create a new blank configuration. See also `Config.defaultConfig()`.\n\t */\n\tpublic static empty(): Config {\n\t\treturn Config.create([], {\n\t\t\textends: [],\n\t\t\trules: {},\n\t\t\tplugins: [],\n\t\t\ttransform: {},\n\t\t});\n\t}\n\n\t/**\n\t * Create configuration from object.\n\t */\n\tpublic static fromObject(\n\t\tresolvers: Resolver | Resolver[],\n\t\toptions: ConfigData,\n\t\tfilename: string | null = null,\n\t): Config {\n\t\tConfig.validate(options, filename);\n\t\treturn Config.create(resolvers, options);\n\t}\n\n\t/**\n\t * Read configuration from filename.\n\t *\n\t * Note: this reads configuration data from a file. If you intent to load\n\t * configuration for a file to validate use `ConfigLoader.fromTarget()`.\n\t *\n\t * @internal\n\t * @param filename - The file to read from\n\t */\n\tpublic static fromFile(resolvers: Resolver | Resolver[], filename: string): Config {\n\t\tconst configData = resolveConfig(toArray(resolvers), filename, { cache: false });\n\t\treturn Config.fromObject(resolvers, configData, filename);\n\t}\n\n\t/**\n\t * Validate configuration data.\n\t *\n\t * Throws SchemaValidationError if invalid.\n\t *\n\t * @internal\n\t */\n\tpublic static validate(configData: ConfigData, filename: string | null = null): void {\n\t\tconst valid = validator(configData);\n\t\tif (!valid) {\n\t\t\tthrow new SchemaValidationError(\n\t\t\t\tfilename,\n\t\t\t\t`Invalid configuration`,\n\t\t\t\tconfigData,\n\t\t\t\tschema,\n\t\t\t\t/* istanbul ignore next: will be set when a validation error has occurred */\n\t\t\t\tvalidator.errors ?? [],\n\t\t\t);\n\t\t}\n\n\t\tif (configData.rules) {\n\t\t\tconst normalizedRules = Config.getRulesObject(configData.rules);\n\t\t\tfor (const [ruleId, [, ruleOptions]] of normalizedRules.entries()) {\n\t\t\t\tconst cls = bundledRules[ruleId];\n\t\t\t\tconst path = `/rules/${ruleId}/1`;\n\t\t\t\tRule.validateOptions(cls, ruleId, path, ruleOptions, filename, configData);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Load a default configuration object.\n\t */\n\tpublic static defaultConfig(): Config {\n\t\treturn Config.create([], defaultConfig);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate static create(resolvers: Resolver | Resolver[], options: ConfigData): Config {\n\t\tconst instance = new Config(resolvers, options);\n\n\t\t/* load plugins */\n\t\tinstance.plugins = instance.loadPlugins(instance.config.plugins ?? []);\n\t\tinstance.configurations = instance.loadConfigurations(instance.plugins);\n\t\tinstance.extendMeta(instance.plugins);\n\n\t\t/* process extended configs */\n\t\tinstance.config = instance.extendConfig(instance.config.extends ?? []);\n\n\t\t/* reset extends as we already processed them, this prevents the next config\n\t\t * from reapplying config from extended config as well as duplicate entries\n\t\t * when merging arrays */\n\t\tinstance.config.extends = [];\n\n\t\t/* rules explicitly set by passed options should have precedence over any\n\t\t * extended rules, not the other way around. */\n\t\tif (options.rules) {\n\t\t\tinstance.config = mergeInternal(instance.config, { rules: options.rules });\n\t\t}\n\n\t\treturn instance;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate constructor(resolvers: Resolver | Resolver[], options: ConfigData) {\n\t\tconst initial: ConfigData = {\n\t\t\textends: [],\n\t\t\tplugins: [],\n\t\t\trules: {},\n\t\t\ttransform: {},\n\t\t};\n\t\tthis.config = mergeInternal(initial, options);\n\t\tthis.configurations = new Map();\n\t\tthis.initialized = false;\n\t\tthis.resolvers = toArray(resolvers);\n\t\tthis.metaTable = null;\n\t\tthis.plugins = [];\n\t}\n\n\t/**\n\t * Initialize plugins, transforms etc.\n\t *\n\t * Must be called before trying to use config. Can safely be called multiple\n\t * times.\n\t *\n\t * @public\n\t */\n\tpublic init(): void {\n\t\tif (this.initialized) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* precompile transform patterns */\n\t\tthis.transformers = this.precompileTransformers(this.config.transform ?? {});\n\n\t\tthis.initialized = true;\n\t}\n\n\t/**\n\t * Returns true if this configuration is marked as \"root\".\n\t */\n\tpublic isRootFound(): boolean {\n\t\treturn Boolean(this.config.root);\n\t}\n\n\t/**\n\t * Returns a new configuration as a merge of the two. Entries from the passed\n\t * object takes priority over this object.\n\t *\n\t * @public\n\t * @param rhs - Configuration to merge with this one.\n\t */\n\tpublic merge(resolvers: Resolver[], rhs: Config): Config {\n\t\treturn Config.create(resolvers, mergeInternal(this.config, rhs.config));\n\t}\n\n\tprivate extendConfig(entries: string[]): ConfigData {\n\t\tif (entries.length === 0) {\n\t\t\treturn this.config;\n\t\t}\n\n\t\tlet base: ConfigData = {};\n\t\tfor (const entry of entries) {\n\t\t\tlet extended: ConfigData;\n\t\t\tif (this.configurations.has(entry)) {\n\t\t\t\textended = this.configurations.get(entry)!; // eslint-disable-line @typescript-eslint/no-non-null-assertion -- map has/get combo\n\t\t\t} else {\n\t\t\t\textended = Config.fromFile(this.resolvers, entry).config;\n\t\t\t}\n\t\t\tbase = mergeInternal(base, extended);\n\t\t}\n\t\treturn mergeInternal(base, this.config);\n\t}\n\n\t/**\n\t * Get element metadata.\n\t *\n\t * @internal\n\t */\n\tpublic getMetaTable(): MetaTable {\n\t\t/* use cached table if it exists */\n\t\tif (this.metaTable) {\n\t\t\treturn this.metaTable;\n\t\t}\n\n\t\tconst metaTable = new MetaTable();\n\t\tconst source = this.config.elements ?? [\"html5\"];\n\n\t\t/* extend validation schema from plugins */\n\t\tfor (const plugin of this.getPlugins()) {\n\t\t\tif (plugin.elementSchema) {\n\t\t\t\tmetaTable.extendValidationSchema(plugin.elementSchema);\n\t\t\t}\n\t\t}\n\n\t\t/* load from all entries */\n\t\tfor (const entry of source) {\n\t\t\t/* load meta directly from entry */\n\t\t\tif (typeof entry !== \"string\") {\n\t\t\t\tmetaTable.loadFromObject(entry as MetaDataTable);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t/* try searching builtin metadata */\n\t\t\tconst bundled = bundledElements[entry] as MetaDataTable | undefined;\n\t\t\tif (bundled) {\n\t\t\t\tmetaTable.loadFromObject(bundled);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t/* load with resolver */\n\t\t\ttry {\n\t\t\t\tconst data = resolveElements(this.resolvers, entry, { cache: false });\n\t\t\t\tmetaTable.loadFromObject(data, entry);\n\t\t\t} catch (err: unknown) {\n\t\t\t\t/* istanbul ignore next: only used as a fallback */\n\t\t\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\t\t\tthrow new ConfigError(\n\t\t\t\t\t`Failed to load elements from \"${entry}\": ${message}`,\n\t\t\t\t\tensureError(err),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tmetaTable.init();\n\t\treturn (this.metaTable = metaTable);\n\t}\n\n\t/**\n\t * Get a copy of internal configuration data.\n\t *\n\t * @internal primary purpose is unittests\n\t */\n\t/* istanbul ignore next: used for testing only */\n\tpublic get(): ConfigData {\n\t\treturn { ...this.config };\n\t}\n\n\t/**\n\t * Get all configured rules, their severity and options.\n\t *\n\t * @internal\n\t */\n\tpublic getRules(): Map<string, [Severity, RuleOptions]> {\n\t\t/* istanbul ignore next: only used as a fallback */\n\t\treturn Config.getRulesObject(this.config.rules ?? {});\n\t}\n\n\tprivate static getRulesObject(src: RuleConfig): Map<string, [Severity, RuleOptions]> {\n\t\tconst rules = new Map<string, [Severity, RuleOptions]>();\n\t\tfor (const [ruleId, data] of Object.entries(src)) {\n\t\t\tlet options = data;\n\t\t\tif (!Array.isArray(options)) {\n\t\t\t\toptions = [options, {}];\n\t\t\t} else if (options.length === 1) {\n\t\t\t\toptions = [options[0], {}];\n\t\t\t}\n\t\t\tconst severity = parseSeverity(options[0]);\n\t\t\trules.set(ruleId, [severity, options[1]]);\n\t\t}\n\t\treturn rules;\n\t}\n\n\t/**\n\t * Get all configured plugins.\n\t *\n\t * @internal\n\t */\n\tpublic getPlugins(): Plugin[] {\n\t\treturn this.plugins;\n\t}\n\n\tprivate loadPlugins(plugins: Array<string | Plugin>): LoadedPlugin[] {\n\t\treturn plugins.map((moduleName: string | Plugin, index: number) => {\n\t\t\tif (typeof moduleName !== \"string\") {\n\t\t\t\tconst plugin = moduleName as LoadedPlugin;\n\t\t\t\tplugin.name = plugin.name || `:unnamedPlugin@${String(index + 1)}`;\n\t\t\t\tplugin.originalName = `:unnamedPlugin@${String(index + 1)}`;\n\t\t\t\treturn plugin;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst plugin = resolvePlugin(this.resolvers, moduleName, { cache: true }) as LoadedPlugin;\n\t\t\t\tplugin.name = plugin.name || moduleName;\n\t\t\t\tplugin.originalName = moduleName;\n\t\t\t\treturn plugin;\n\t\t\t} catch (err: unknown) {\n\t\t\t\t/* istanbul ignore next: only used as a fallback */\n\t\t\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\t\t\tthrow new ConfigError(\n\t\t\t\t\t`Failed to load plugin \"${moduleName}\": ${message}`,\n\t\t\t\t\tensureError(err),\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate loadConfigurations(plugins: LoadedPlugin[]): Map<string, ConfigData> {\n\t\tconst configs = new Map<string, ConfigData>();\n\n\t\t/* builtin presets */\n\t\tfor (const [name, config] of Object.entries(Presets)) {\n\t\t\tConfig.validate(config, name);\n\t\t\tconfigs.set(name, config);\n\t\t}\n\n\t\t/* presets from plugins */\n\t\tfor (const plugin of plugins) {\n\t\t\tfor (const [name, config] of Object.entries(plugin.configs ?? {})) {\n\t\t\t\tif (!config) continue;\n\n\t\t\t\tConfig.validate(config, name);\n\n\t\t\t\t/* add configuration with name provided by plugin */\n\t\t\t\tconfigs.set(`${plugin.name}:${name}`, config);\n\n\t\t\t\t/* add configuration with name provided by user (in config file) */\n\t\t\t\tif (plugin.name !== plugin.originalName) {\n\t\t\t\t\tconfigs.set(`${plugin.originalName}:${name}`, config);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn configs;\n\t}\n\n\tprivate extendMeta(plugins: LoadedPlugin[]): void {\n\t\tfor (const plugin of plugins) {\n\t\t\tif (!plugin.elementSchema) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst { properties } = plugin.elementSchema;\n\t\t\tif (!properties) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tfor (const [raw, schema] of Object.entries(properties)) {\n\t\t\t\t/* at compile time this is a fixed list but the point of this method is\n\t\t\t\t * to augment the runtime with additional keys so it is a bit of lying\n\t\t\t\t * to typescript */\n\t\t\t\tconst key = raw as keyof MetaElement;\n\t\t\t\tif ((schema as any).copyable && !MetaCopyableProperty.includes(key)) {\n\t\t\t\t\tMetaCopyableProperty.push(key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Resolve all configuration and return a [[ResolvedConfig]] instance.\n\t *\n\t * A resolved configuration will merge all extended configs and load all\n\t * plugins and transformers, and normalize the rest of the configuration.\n\t *\n\t * @public\n\t */\n\tpublic resolve(): ResolvedConfig {\n\t\treturn new ResolvedConfig(this.resolveData(), this.get());\n\t}\n\n\t/**\n\t * Same as [[resolve]] but returns the raw configuration data instead of\n\t * [[ResolvedConfig]] instance. Mainly used for testing.\n\t *\n\t * @internal\n\t */\n\tpublic resolveData(): ResolvedConfigData {\n\t\treturn {\n\t\t\tmetaTable: this.getMetaTable(),\n\t\t\tplugins: this.getPlugins(),\n\t\t\trules: this.getRules(),\n\t\t\ttransformers: this.transformers,\n\t\t};\n\t}\n\n\tprivate precompileTransformers(transform: TransformMap): TransformerEntry[] {\n\t\treturn Object.entries(transform).map(([pattern, name]) => {\n\t\t\ttry {\n\t\t\t\tconst fn = this.getTransformFunction(name);\n\n\t\t\t\t/* istanbul ignore next */\n\t\t\t\tconst version = fn.api ?? 0;\n\n\t\t\t\t/* check if transformer version is supported */\n\t\t\t\tif (version !== TRANSFORMER_API.VERSION) {\n\t\t\t\t\tthrow new ConfigError(\n\t\t\t\t\t\t`Transformer uses API version ${String(version)} but only version ${String(TRANSFORMER_API.VERSION)} is supported`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\t// eslint-disable-next-line security/detect-non-literal-regexp -- expected to be a regexp\n\t\t\t\t\tpattern: new RegExp(pattern),\n\n\t\t\t\t\tname,\n\t\t\t\t\tfn,\n\t\t\t\t};\n\t\t\t} catch (err: unknown) {\n\t\t\t\tif (err instanceof ConfigError) {\n\t\t\t\t\tthrow new ConfigError(`Failed to load transformer \"${name}\": ${err.message}`, err);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new ConfigError(`Failed to load transformer \"${name}\"`, ensureError(err));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Get transformation function requested by configuration.\n\t *\n\t * Searches:\n\t *\n\t * - Named transformers from plugins.\n\t * - Unnamed transformer from plugin.\n\t * - Standalone modules (local or node_modules)\n\t *\n\t * @param name - Key from configuration\n\t */\n\tprivate getTransformFunction(name: string): Transformer {\n\t\t/* try to match a named transformer from plugin */\n\t\tconst match = name.match(/(.*):(.*)/);\n\t\tif (match) {\n\t\t\tconst [, pluginName, key] = match;\n\t\t\treturn this.getNamedTransformerFromPlugin(name, pluginName, key);\n\t\t}\n\n\t\t/* try to match an unnamed transformer from plugin */\n\t\tconst plugin = this.plugins.find((cur) => cur.name === name);\n\t\tif (plugin) {\n\t\t\treturn this.getUnnamedTransformerFromPlugin(name, plugin);\n\t\t}\n\n\t\t/* assume transformer refers to a regular module */\n\t\treturn this.getTransformerFromModule(name);\n\t}\n\n\t/**\n\t * @param name - Original name from configuration\n\t * @param pluginName - Name of plugin\n\t * @param key - Name of transform (from plugin)\n\t */\n\tprivate getNamedTransformerFromPlugin(\n\t\tname: string,\n\t\tpluginName: string,\n\t\tkey: string,\n\t): Transformer {\n\t\tconst plugin = this.plugins.find((cur) => cur.name === pluginName);\n\t\tif (!plugin) {\n\t\t\tthrow new ConfigError(`No plugin named \"${pluginName}\" has been loaded`);\n\t\t}\n\n\t\tif (!plugin.transformer) {\n\t\t\tthrow new ConfigError(`Plugin does not expose any transformer`);\n\t\t}\n\n\t\tif (typeof plugin.transformer === \"function\") {\n\t\t\tthrow new ConfigError(\n\t\t\t\t`Transformer \"${name}\" refers to named transformer but plugin exposes only unnamed, use \"${pluginName}\" instead.`,\n\t\t\t);\n\t\t}\n\n\t\tconst transformer = plugin.transformer[key];\n\t\tif (!transformer) {\n\t\t\tthrow new ConfigError(`Plugin \"${pluginName}\" does not expose a transformer named \"${key}\".`);\n\t\t}\n\n\t\treturn transformer;\n\t}\n\n\t/**\n\t * @param name - Original name from configuration\n\t * @param plugin - Plugin instance\n\t */\n\tprivate getUnnamedTransformerFromPlugin(name: string, plugin: Plugin): Transformer {\n\t\tif (!plugin.transformer) {\n\t\t\tthrow new ConfigError(`Plugin does not expose any transformer`);\n\t\t}\n\n\t\tif (typeof plugin.transformer !== \"function\") {\n\t\t\tif (plugin.transformer.default) {\n\t\t\t\treturn plugin.transformer.default;\n\t\t\t}\n\t\t\tthrow new ConfigError(\n\t\t\t\t`Transformer \"${name}\" refers to unnamed transformer but plugin exposes only named.`,\n\t\t\t);\n\t\t}\n\n\t\treturn plugin.transformer;\n\t}\n\n\tprivate getTransformerFromModule(name: string): Transformer {\n\t\treturn resolveTransformer(this.resolvers, name, { cache: true });\n\t}\n}\n","import { Config } from \"./config\";\nimport { type ConfigData } from \"./config-data\";\nimport { type ResolvedConfig } from \"./resolved-config\";\nimport { type Resolver } from \"./resolver\";\n\n/**\n * Configuration loader interface.\n *\n * A configuration loader takes a handle (typically a filename) and returns a\n * configuration for it.\n *\n * @public\n */\nexport abstract class ConfigLoader {\n\tprotected readonly resolvers: Resolver[];\n\tprotected globalConfig: Config;\n\n\t/**\n\t * Create a new ConfigLoader.\n\t *\n\t * @param resolvers - Sorted list of resolvers to use (in order).\n\t * @param configData - Default configuration (which all configurations will inherit from).\n\t */\n\tpublic constructor(resolvers: Resolver[], configData?: ConfigData) {\n\t\tconst defaults = Config.empty();\n\t\tthis.resolvers = resolvers;\n\t\tthis.globalConfig = defaults.merge(\n\t\t\tthis.resolvers,\n\t\t\tconfigData ? this.loadFromObject(configData) : this.defaultConfig(),\n\t\t);\n\t}\n\n\t/**\n\t * Get configuration for given handle.\n\t *\n\t * Handle is typically a filename but it is up to the loader to interpret the\n\t * handle as something useful.\n\t *\n\t * If [[configOverride]] is set it is merged with the final result.\n\t *\n\t * @param handle - Unique handle to get configuration for.\n\t * @param configOverride - Optional configuration to merge final results with.\n\t */\n\tpublic abstract getConfigFor(handle: string, configOverride?: ConfigData): ResolvedConfig;\n\n\t/**\n\t * Flush configuration cache.\n\t *\n\t * Flushes all cached entries unless a specific handle is given.\n\t *\n\t * @param handle - If given only the cache for given handle will be flushed.\n\t */\n\tpublic abstract flushCache(handle?: string): void;\n\n\t/**\n\t * @internal For testing only\n\t */\n\tpublic _getGlobalConfig(): ConfigData {\n\t\treturn this.globalConfig.get();\n\t}\n\n\t/**\n\t * Default configuration used when no explicit configuration is passed to constructor.\n\t */\n\tprotected abstract defaultConfig(): Config;\n\n\tprotected empty(): Config {\n\t\treturn Config.empty();\n\t}\n\n\tprotected loadFromObject(options: ConfigData, filename?: string | null): Config {\n\t\treturn Config.fromObject(this.resolvers, options, filename);\n\t}\n\n\tprotected loadFromFile(filename: string): Config {\n\t\treturn Config.fromFile(this.resolvers, filename);\n\t}\n}\n","import { type ConfigData } from \"./config-data\";\n\n/**\n * Helper function to assist IDE with completion and type-checking.\n *\n * @public\n * @since\n */\nexport function defineConfig(config: ConfigData): ConfigData {\n\treturn config;\n}\n","/**\n * @public\n */\nexport type EventCallback = (event: string, data: any) => void;\n\n/**\n * @public\n */\nexport class EventHandler {\n\tprivate listeners: Record<string, EventCallback[] | undefined>;\n\n\tpublic constructor() {\n\t\tthis.listeners = {};\n\t}\n\n\t/**\n\t * Add an event listener.\n\t *\n\t * @param event - Event names (comma separated) or '*' for any event.\n\t * @param callback - Called any time even triggers.\n\t * @returns Unregistration function.\n\t */\n\tpublic on(event: string, callback: EventCallback): () => void {\n\t\tconst { listeners } = this;\n\t\tconst names = event.split(\",\").map((it) => it.trim());\n\t\tfor (const name of names) {\n\t\t\tconst list = listeners[name] ?? [];\n\t\t\tlisteners[name] = list;\n\t\t\tlist.push(callback);\n\t\t}\n\t\treturn () => {\n\t\t\tfor (const name of names) {\n\t\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion --\n\t\t\t\t * this is never unset here as we must have associated the name with an\n\t\t\t\t * array earlier or we wouldn't have ended up here */\n\t\t\t\tconst list = listeners[name]!;\n\t\t\t\tthis.listeners[name] = list.filter((fn) => fn !== callback);\n\t\t\t}\n\t\t};\n\t}\n\n\t/**\n\t * Add a onetime event listener. The listener will automatically be removed\n\t * after being triggered once.\n\t *\n\t * @param event - Event names (comma separated) or '*' for any event.\n\t * @param callback - Called any time even triggers.\n\t * @returns Unregistration function.\n\t */\n\tpublic once(event: string, callback: EventCallback): () => void {\n\t\tconst deregister = this.on(event, (event, data) => {\n\t\t\tcallback(event, data);\n\t\t\tderegister();\n\t\t});\n\t\treturn deregister;\n\t}\n\n\t/**\n\t * Trigger event causing all listeners to be called.\n\t *\n\t * @param event - Event name.\n\t * @param data - Event data.\n\t */\n\tpublic trigger(event: string, data: any): void {\n\t\tfor (const listener of this.getCallbacks(event)) {\n\t\t\tlistener.call(null, event, data);\n\t\t}\n\t}\n\n\tprivate getCallbacks(event: string): EventCallback[] {\n\t\tconst { listeners } = this;\n\t\tconst callbacks = listeners[event] ?? [];\n\t\tconst global = listeners[\"*\"] ?? [];\n\t\treturn [...callbacks, ...global];\n\t}\n}\n\nexport default EventHandler;\n","import { type Location, sliceLocation } from \"../context\";\n\nexport interface ConditionalComment {\n\texpression: string;\n\tlocation: Location;\n}\n\nconst regexp = /<!(?:--)?\\[(.*?)\\](?:--)?>/g;\n\nexport function* parseConditionalComment(\n\tcomment: string,\n\tcommentLocation: Location,\n): IterableIterator<ConditionalComment> {\n\tlet match: RegExpExecArray | null;\n\n\twhile ((match = regexp.exec(comment)) !== null) {\n\t\tconst expression = match[1];\n\t\tconst begin = match.index;\n\t\tconst end = begin + match[0].length;\n\t\tconst location = sliceLocation(commentLocation, begin, end, comment);\n\t\tyield {\n\t\t\texpression,\n\t\t\tlocation,\n\t\t};\n\t}\n}\n","import { type Location } from \"../context\";\n\nexport class ParserError extends Error {\n\tpublic location: Location;\n\n\tpublic constructor(location: Location, message: string) {\n\t\tsuper(message);\n\t\tthis.location = location;\n\t}\n}\n","import { type ResolvedConfig } from \"../config\";\nimport { type Location, type Source, sliceLocation } from \"../context\";\nimport { type ProcessAttributeCallback, type ProcessElementContext } from \"../context/source\";\nimport { DOMTree, HtmlElement, NodeClosed } from \"../dom\";\nimport {\n\ttype AttributeEvent,\n\ttype Event,\n\ttype EventCallback,\n\ttype ListenEventMap,\n\ttype TagEndEvent,\n\ttype TriggerEventMap,\n\tEventHandler,\n} from \"../event\";\nimport {\n\ttype Token,\n\ttype TokenStream,\n\ttype DirectiveToken,\n\ttype TagOpenToken,\n\ttype TagCloseToken,\n\ttype CommentToken,\n\ttype AttrNameToken,\n\ttype AttrValueToken,\n\ttype ConditionalToken,\n\ttype DoctypeOpenToken,\n\ttype DoctypeValueToken,\n\tLexer,\n\tTokenType,\n} from \"../lexer\";\nimport { type MetaTable, type MetaElement } from \"../meta\";\nimport { type AttributeData } from \"./attribute-data\";\nimport { parseConditionalComment } from \"./conditional-comment\";\nimport { ParserError } from \"./parser-error\";\n\nfunction isAttrValueToken(token?: Token): token is AttrValueToken {\n\treturn Boolean(token && token.type === TokenType.ATTR_VALUE);\n}\n\nfunction svgShouldRetainTag(foreignTagName: string, tagName: string): boolean {\n\treturn foreignTagName === \"svg\" && [\"title\", \"desc\"].includes(tagName);\n}\n\nfunction isValidDirective(\n\taction: string,\n): action is \"enable\" | \"disable\" | \"disable-block\" | \"disable-next\" {\n\tconst validActions = [\"enable\", \"disable\", \"disable-block\", \"disable-next\"];\n\treturn validActions.includes(action);\n}\n\n/**\n * Parse HTML document into a DOM tree.\n *\n * @public\n */\nexport class Parser {\n\tprivate readonly event: EventHandler;\n\tprivate readonly metaTable: MetaTable;\n\tprivate currentNamespace: string = \"\";\n\tprivate dom: DOMTree;\n\n\t/**\n\t * Create a new parser instance.\n\t *\n\t * @public\n\t * @param config - Configuration\n\t */\n\tpublic constructor(config: ResolvedConfig) {\n\t\tthis.event = new EventHandler();\n\t\tthis.dom = null as unknown as DOMTree;\n\t\tthis.metaTable = config.getMetaTable();\n\t}\n\n\t/**\n\t * Parse HTML markup.\n\t *\n\t * @public\n\t * @param source - HTML markup.\n\t * @returns DOM tree representing the HTML markup.\n\t */\n\tpublic parseHtml(source: string | Source): HtmlElement {\n\t\tif (typeof source === \"string\") {\n\t\t\tsource = {\n\t\t\t\tdata: source,\n\t\t\t\tfilename: \"inline\",\n\t\t\t\tline: 1,\n\t\t\t\tcolumn: 1,\n\t\t\t\toffset: 0,\n\t\t\t};\n\t\t}\n\n\t\t/* trigger starting event */\n\t\tthis.trigger(\"parse:begin\", {\n\t\t\tlocation: null,\n\t\t});\n\n\t\t/* reset DOM in case there are multiple calls in the same session */\n\t\tthis.dom = new DOMTree({\n\t\t\tfilename: source.filename,\n\t\t\toffset: source.offset,\n\t\t\tline: source.line,\n\t\t\tcolumn: source.column,\n\t\t\tsize: 0,\n\t\t});\n\n\t\t/* trigger any rules waiting for DOM load event */\n\t\tthis.trigger(\"dom:load\", {\n\t\t\tsource,\n\t\t\tlocation: null,\n\t\t});\n\n\t\tconst lexer = new Lexer();\n\t\tconst tokenStream = lexer.tokenize(source);\n\n\t\t/* consume all tokens from the stream */\n\t\tlet it = this.next(tokenStream);\n\t\twhile (!it.done) {\n\t\t\tconst token = it.value;\n\t\t\tthis.consume(source, token, tokenStream);\n\t\t\tit = this.next(tokenStream);\n\t\t}\n\n\t\t/* resolve any dynamic meta element properties */\n\t\tthis.dom.resolveMeta(this.metaTable);\n\n\t\t/* enable cache on root element, all children already have cached enabled */\n\t\tthis.dom.root.cacheEnable();\n\n\t\t/* trigger any rules waiting for DOM ready */\n\t\tthis.trigger(\"dom:ready\", {\n\t\t\tdocument: this.dom,\n\t\t\tsource,\n\n\t\t\t/* disable location for this event so rules can use implicit node location\n\t\t\t * instead */\n\t\t\tlocation: null,\n\t\t});\n\n\t\t/* trigger ending event */\n\t\tthis.trigger(\"parse:end\", {\n\t\t\tlocation: null,\n\t\t});\n\n\t\treturn this.dom.root;\n\t}\n\n\t/**\n\t * Detect optional end tag.\n\t *\n\t * Some tags have optional end tags (e.g. <ul><li>foo<li>bar</ul> is\n\t * valid). The parser handles this by checking if the element on top of the\n\t * stack when is allowed to omit.\n\t */\n\tprivate closeOptional(token: TagOpenToken): boolean {\n\t\t/* if the element doesn't have metadata it cannot have optional end\n\t\t * tags. Period. */\n\t\tconst active = this.dom.getActive();\n\t\tif (!active.meta?.implicitClosed) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst tagName = token.data[2];\n\t\tconst open = !token.data[1];\n\t\tconst meta = active.meta.implicitClosed;\n\n\t\tif (open) {\n\t\t\t/* a new element is opened, check if the new element should close the\n\t\t\t * previous */\n\t\t\treturn meta.includes(tagName);\n\t\t} else {\n\t\t\t/* if we are explicitly closing the active element, ignore implicit */\n\t\t\tif (active.is(tagName)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t/* the parent element is closed, check if the active element would be\n\t\t\t * implicitly closed when parent is. */\n\t\t\treturn Boolean(active.parent && active.parent.is(tagName) && meta.includes(active.tagName));\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\t/* eslint-disable-next-line complexity -- there isn't really a good other way to structure this method (that is still readable) */\n\tprivate consume(source: Source, token: Token, tokenStream: TokenStream): void {\n\t\tswitch (token.type) {\n\t\t\tcase TokenType.UNICODE_BOM:\n\t\t\t\t/* ignore */\n\t\t\t\tbreak;\n\n\t\t\tcase TokenType.TAG_OPEN:\n\t\t\t\tthis.consumeTag(source, token, tokenStream);\n\t\t\t\tbreak;\n\n\t\t\tcase TokenType.WHITESPACE:\n\t\t\t\tthis.trigger(\"whitespace\", {\n\t\t\t\t\ttext: token.data[0],\n\t\t\t\t\tlocation: token.location,\n\t\t\t\t});\n\t\t\t\tthis.appendText(token.data[0], token.location);\n\t\t\t\tbreak;\n\n\t\t\tcase TokenType.DIRECTIVE:\n\t\t\t\tthis.consumeDirective(token);\n\t\t\t\tbreak;\n\n\t\t\tcase TokenType.CONDITIONAL:\n\t\t\t\tthis.consumeConditional(token);\n\t\t\t\tbreak;\n\n\t\t\tcase TokenType.COMMENT:\n\t\t\t\tthis.consumeComment(token);\n\t\t\t\tbreak;\n\n\t\t\tcase TokenType.DOCTYPE_OPEN:\n\t\t\t\tthis.consumeDoctype(token, tokenStream);\n\t\t\t\tbreak;\n\n\t\t\tcase TokenType.TEXT:\n\t\t\tcase TokenType.TEMPLATING:\n\t\t\t\tthis.appendText(token.data[0], token.location);\n\t\t\t\tbreak;\n\n\t\t\tcase TokenType.EOF:\n\t\t\t\tthis.closeTree(source, token.location);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\t/* eslint-disable-next-line complexity -- technical debt, chould be refactored a bit */\n\tprotected consumeTag(source: Source, startToken: TagOpenToken, tokenStream: TokenStream): void {\n\t\tconst tokens = Array.from(\n\t\t\tthis.consumeUntil(tokenStream, TokenType.TAG_CLOSE, startToken.location),\n\t\t);\n\t\tconst endToken = tokens.slice(-1)[0] as TagCloseToken;\n\t\tconst closeOptional = this.closeOptional(startToken);\n\t\tconst parent = closeOptional ? this.dom.getActive().parent : this.dom.getActive();\n\t\tconst node = HtmlElement.fromTokens(\n\t\t\tstartToken,\n\t\t\tendToken,\n\t\t\tparent,\n\t\t\tthis.metaTable,\n\t\t\tthis.currentNamespace,\n\t\t);\n\t\tconst isStartTag = !startToken.data[1];\n\t\tconst isClosing = !isStartTag || node.closed !== NodeClosed.Open;\n\t\tconst isForeign = node.meta?.foreign;\n\n\t\t/* if the previous tag to be implicitly closed by the current tag we close\n\t\t * it and pop it from the stack before continuing processing this tag */\n\t\tif (closeOptional) {\n\t\t\tconst active = this.dom.getActive();\n\t\t\tactive.closed = NodeClosed.ImplicitClosed;\n\t\t\tthis.closeElement(source, node, active, startToken.location);\n\t\t\tthis.dom.popActive();\n\t\t}\n\n\t\tif (isStartTag) {\n\t\t\tthis.dom.pushActive(node);\n\t\t\tthis.trigger(\"tag:start\", {\n\t\t\t\ttarget: node,\n\t\t\t\tlocation: startToken.location,\n\t\t\t});\n\t\t}\n\n\t\tfor (let i = 0; i < tokens.length; i++) {\n\t\t\tconst token = tokens[i];\n\t\t\tswitch (token.type) {\n\t\t\t\tcase TokenType.WHITESPACE:\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.ATTR_NAME:\n\t\t\t\t\tthis.consumeAttribute(source, node, token, tokens[i + 1]);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t/* emit tag:ready unless this is a end tag */\n\t\tif (isStartTag) {\n\t\t\tthis.trigger(\"tag:ready\", {\n\t\t\t\ttarget: node,\n\t\t\t\tlocation: endToken.location,\n\t\t\t});\n\t\t}\n\n\t\tif (isClosing) {\n\t\t\tconst active = this.dom.getActive();\n\n\t\t\t/* if this is not an open tag it is a close tag and thus we force it to be\n\t\t\t * one, in case it is detected as void */\n\t\t\tif (!isStartTag) {\n\t\t\t\tnode.closed = NodeClosed.EndTag;\n\t\t\t}\n\n\t\t\tthis.closeElement(source, node, active, endToken.location);\n\n\t\t\t/* if this element is closed with an end tag but is would it will not be\n\t\t\t * closed again (it is already closed automatically since it is\n\t\t\t * void). Closing again will have side-effects as it will close the parent\n\t\t\t * and cause a mess later. */\n\t\t\tconst voidClosed = !isStartTag && node.voidElement;\n\t\t\tif (!voidClosed) {\n\t\t\t\tthis.dom.popActive();\n\t\t\t}\n\t\t} else if (isForeign) {\n\t\t\t/* consume the body of the foreign element so it won't be part of the\n\t\t\t * document (only the root foreign element is). */\n\t\t\tthis.discardForeignBody(source, node.tagName, tokenStream, startToken.location);\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate closeElement(\n\t\tsource: Source,\n\t\tnode: HtmlElement | null,\n\t\tactive: HtmlElement,\n\t\tlocation: Location,\n\t): void {\n\t\t/* call processElement hook */\n\t\tthis.processElement(active, source);\n\n\t\t/* trigger event for the closing of the element (the </> tag)*/\n\t\tconst event: TagEndEvent = {\n\t\t\ttarget: node,\n\t\t\tprevious: active,\n\t\t\tlocation,\n\t\t};\n\t\tthis.trigger(\"tag:end\", event);\n\n\t\t/* trigger event for for an element being fully constructed. Special care\n\t\t * for void elements explicit closed <input></input> */\n\t\tif (!active.isRootElement()) {\n\t\t\tthis.trigger(\"element:ready\", {\n\t\t\t\ttarget: active,\n\t\t\t\tlocation: active.location,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate processElement(node: HtmlElement, source: Source): void {\n\t\t/* enable cache on node now that it is fully constructed */\n\t\tnode.cacheEnable();\n\n\t\tif (source.hooks?.processElement) {\n\t\t\tconst processElement = source.hooks.processElement;\n\t\t\tconst metaTable = this.metaTable;\n\t\t\tconst context: ProcessElementContext = {\n\t\t\t\tgetMetaFor(this: void, tagName: string): MetaElement | null {\n\t\t\t\t\treturn metaTable.getMetaFor(tagName);\n\t\t\t\t},\n\t\t\t};\n\t\t\tprocessElement.call(context, node);\n\t\t}\n\t}\n\n\t/**\n\t * Discard tokens until the end tag for the foreign element is found.\n\t *\n\t * @internal\n\t */\n\tprivate discardForeignBody(\n\t\tsource: Source,\n\t\tforeignTagName: string,\n\t\ttokenStream: TokenStream,\n\t\terrorLocation: Location,\n\t): void {\n\t\t/* consume elements until the end tag for this foreign element is found */\n\t\tlet nested = 1;\n\t\tlet startToken: TagOpenToken | undefined;\n\t\tlet endToken: TagCloseToken | undefined;\n\t\tdo {\n\t\t\t/* search for tags */\n\t\t\tconst tokens = Array.from(this.consumeUntil(tokenStream, TokenType.TAG_OPEN, errorLocation));\n\t\t\tconst [last] = tokens.slice(-1) as [TagOpenToken];\n\t\t\tconst [, tagClosed, tagName] = last.data;\n\n\t\t\t/* special case: svg <title> and <desc> should be intact as it affects accessibility */\n\t\t\tif (!tagClosed && svgShouldRetainTag(foreignTagName, tagName)) {\n\t\t\t\tconst oldNamespace = this.currentNamespace;\n\t\t\t\tthis.currentNamespace = \"svg\";\n\t\t\t\tthis.consumeTag(source, last, tokenStream);\n\t\t\t\tthis.consumeUntilMatchingTag(source, tokenStream, tagName);\n\t\t\t\tthis.currentNamespace = oldNamespace;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t/* keep going unless the new tag matches the foreign root element */\n\t\t\tif (tagName !== foreignTagName) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t/* locate end token and determine if this is a self-closed tag */\n\t\t\tconst endTokens = Array.from(\n\t\t\t\tthis.consumeUntil(tokenStream, TokenType.TAG_CLOSE, last.location),\n\t\t\t);\n\t\t\tendToken = endTokens.slice(-1)[0] as TagCloseToken;\n\t\t\tconst selfClosed = endToken.data[0] === \"/>\";\n\n\t\t\t/* since foreign element may be nested keep a count for the number of\n\t\t\t * opened/closed elements */\n\t\t\tif (tagClosed) {\n\t\t\t\tstartToken = last;\n\t\t\t\tnested--;\n\t\t\t} else if (!selfClosed) {\n\t\t\t\tnested++;\n\t\t\t}\n\t\t} while (nested > 0);\n\n\t\t/* istanbul ignore next: this should never happen because `consumeUntil`\n\t\t * would have thrown errors however typescript does not know that */\n\t\tif (!startToken || !endToken) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst active = this.dom.getActive();\n\t\tconst node = HtmlElement.fromTokens(startToken, endToken, active, this.metaTable);\n\n\t\tthis.closeElement(source, node, active, endToken.location);\n\t\tthis.dom.popActive();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate consumeAttribute(\n\t\tsource: Source,\n\t\tnode: HtmlElement,\n\t\ttoken: AttrNameToken,\n\t\tnext?: Token,\n\t): void {\n\t\tconst { meta } = node;\n\t\tconst keyLocation = this.getAttributeKeyLocation(token);\n\t\tconst valueLocation = this.getAttributeValueLocation(next);\n\t\tconst location = this.getAttributeLocation(token, next);\n\t\tconst haveValue = isAttrValueToken(next);\n\t\tconst attrData: AttributeData = {\n\t\t\tkey: token.data[1],\n\t\t\tvalue: null,\n\t\t\tquote: null,\n\t\t};\n\n\t\tif (haveValue) {\n\t\t\tconst [, , value, quote] = next.data;\n\t\t\tattrData.value = value;\n\t\t\tattrData.quote = quote ?? null;\n\t\t}\n\n\t\t/* get callback to process attributes, default is to just return attribute\n\t\t * data right away but a transformer may override it to allow aliasing\n\t\t * attributes, e.g ng-attr-foo or v-bind:foo */\n\t\tlet processAttribute: ProcessAttributeCallback = (\n\t\t\tattr: AttributeData,\n\t\t): Iterable<AttributeData> => [attr];\n\t\tif (source.hooks?.processAttribute) {\n\t\t\tprocessAttribute = source.hooks.processAttribute;\n\t\t}\n\n\t\t/* handle deprecated callbacks */\n\t\tlet iterator: Iterable<AttributeData>;\n\t\tconst legacy = processAttribute.call({}, attrData);\n\t\tif (typeof (legacy as any)[Symbol.iterator] !== \"function\") {\n\t\t\t/* AttributeData */\n\t\t\titerator = [attrData];\n\t\t} else {\n\t\t\t/* Iterable<AttributeData> */\n\t\t\titerator = legacy;\n\t\t}\n\n\t\t/* process attribute(s) */\n\t\tfor (const attr of iterator) {\n\t\t\tconst event: AttributeEvent = {\n\t\t\t\ttarget: node,\n\t\t\t\tkey: attr.key,\n\t\t\t\tvalue: attr.value,\n\t\t\t\tquote: attr.quote,\n\t\t\t\toriginalAttribute: attr.originalAttribute,\n\t\t\t\tlocation,\n\t\t\t\tkeyLocation,\n\t\t\t\tvalueLocation,\n\t\t\t\tmeta: meta?.attributes[attr.key] ?? null,\n\t\t\t};\n\t\t\tthis.trigger(\"attr\", event);\n\t\t\tnode.setAttribute(attr.key, attr.value, keyLocation, valueLocation, attr.originalAttribute);\n\t\t}\n\t}\n\n\t/**\n\t * Takes attribute key token an returns location.\n\t */\n\tprivate getAttributeKeyLocation(token: AttrNameToken): Location {\n\t\treturn token.location;\n\t}\n\n\t/**\n\t * Take attribute value token and return a new location referring to only the\n\t * value.\n\t *\n\t * foo=\"bar\" foo='bar' foo=bar foo foo=\"\"\n\t * ^^^ ^^^ ^^^ (null) (null)\n\t */\n\tprivate getAttributeValueLocation(token?: Token): Location | null {\n\t\tif (!token || token.type !== TokenType.ATTR_VALUE || token.data[2] === \"\") {\n\t\t\treturn null;\n\t\t}\n\t\tconst quote = token.data[3];\n\t\tif (quote) {\n\t\t\treturn sliceLocation(token.location, 2, -1);\n\t\t} else {\n\t\t\treturn sliceLocation(token.location, 1);\n\t\t}\n\t}\n\n\t/**\n\t * Take attribute key and value token an returns a new location referring to\n\t * an aggregate location covering key, quotes if present and value.\n\t */\n\tprivate getAttributeLocation(key: AttrNameToken, value?: Token): Location {\n\t\tconst begin = key.location;\n\t\tconst end = value && value.type === TokenType.ATTR_VALUE ? value.location : undefined;\n\t\treturn {\n\t\t\tfilename: begin.filename,\n\t\t\tline: begin.line,\n\t\t\tcolumn: begin.column,\n\t\t\tsize: begin.size + (end?.size ?? 0),\n\t\t\toffset: begin.offset,\n\t\t};\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprotected consumeDirective(token: DirectiveToken): void {\n\t\tconst [text, preamble, action, separator1, directive, postamble] = token.data;\n\t\tif (!postamble.startsWith(\"]\")) {\n\t\t\tthrow new ParserError(token.location, `Missing end bracket \"]\" on directive \"${text}\"`);\n\t\t}\n\t\tconst match = directive.match(/^(.*?)(?:(\\s*(?:--|:)\\s*)(.*))?$/);\n\n\t\t/* istanbul ignore next: should not be possible, would be emitted as comment token */\n\t\tif (!match) {\n\t\t\tthrow new Error(`Failed to parse directive \"${text}\"`);\n\t\t}\n\n\t\tif (!isValidDirective(action)) {\n\t\t\tthrow new ParserError(token.location, `Unknown directive \"${action}\"`);\n\t\t}\n\n\t\tconst [, data, separator2, comment] = match;\n\t\tconst prefix = \"html-validate-\";\n\n\t\t/* <!-- [html-validate-action options -- comment] -->\n\t\t * ^ ^ ^--------------- comment offset\n\t\t * | \\-------------------------- options offset\n\t\t * \\--------------------------------- action offset\n\t\t */\n\t\tconst actionOffset = preamble.length;\n\t\tconst optionsOffset = actionOffset + action.length + separator1.length;\n\t\tconst commentOffset = optionsOffset + data.length + (separator2 || \"\").length;\n\n\t\tconst location = sliceLocation(\n\t\t\ttoken.location,\n\t\t\tpreamble.length - prefix.length - 1,\n\t\t\t-postamble.length + 1,\n\t\t);\n\t\tconst actionLocation = sliceLocation(\n\t\t\ttoken.location,\n\t\t\tactionOffset,\n\t\t\tactionOffset + action.length,\n\t\t);\n\t\tconst optionsLocation = data\n\t\t\t? sliceLocation(token.location, optionsOffset, optionsOffset + data.length)\n\t\t\t: undefined;\n\t\tconst commentLocation = comment\n\t\t\t? sliceLocation(token.location, commentOffset, commentOffset + comment.length)\n\t\t\t: undefined;\n\n\t\tthis.trigger(\"directive\", {\n\t\t\taction,\n\t\t\tdata,\n\t\t\tcomment: comment || \"\",\n\t\t\tlocation,\n\t\t\tactionLocation,\n\t\t\toptionsLocation,\n\t\t\tcommentLocation,\n\t\t});\n\t}\n\n\t/**\n\t * Consumes conditional comment in tag form.\n\t *\n\t * See also the related [[consumeCommend]] method.\n\t *\n\t * @internal\n\t */\n\tprivate consumeConditional(token: ConditionalToken): void {\n\t\tconst element = this.dom.getActive();\n\t\tthis.trigger(\"conditional\", {\n\t\t\tcondition: token.data[1],\n\t\t\tlocation: token.location,\n\t\t\tparent: element,\n\t\t});\n\t}\n\n\t/**\n\t * Consumes comment token.\n\t *\n\t * Tries to find IE conditional comments and emits conditional token if\n\t * found. See also the related [[consumeConditional]] method.\n\t *\n\t * @internal\n\t */\n\tprivate consumeComment(token: CommentToken): void {\n\t\tconst comment = token.data[0];\n\t\tconst element = this.dom.getActive();\n\t\tfor (const conditional of parseConditionalComment(comment, token.location)) {\n\t\t\tthis.trigger(\"conditional\", {\n\t\t\t\tcondition: conditional.expression,\n\t\t\t\tlocation: conditional.location,\n\t\t\t\tparent: element,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Consumes doctype tokens. Emits doctype event.\n\t *\n\t * @internal\n\t */\n\tprivate consumeDoctype(startToken: DoctypeOpenToken, tokenStream: TokenStream): void {\n\t\tconst tokens = Array.from(\n\t\t\tthis.consumeUntil(tokenStream, TokenType.DOCTYPE_CLOSE, startToken.location),\n\t\t);\n\t\t/* first token is the doctype, second is the closing \">\" */\n\t\tconst doctype: DoctypeValueToken = tokens[0] as DoctypeValueToken;\n\t\tconst value = doctype.data[0];\n\t\tthis.dom.doctype = value;\n\t\tthis.trigger(\"doctype\", {\n\t\t\ttag: startToken.data[1],\n\t\t\tvalue,\n\t\t\tvalueLocation: tokens[0].location,\n\t\t\tlocation: startToken.location,\n\t\t});\n\t}\n\n\t/**\n\t * Return a list of tokens found until the expected token was found.\n\t *\n\t * @internal\n\t * @param errorLocation - What location to use if an error occurs\n\t */\n\tprotected *consumeUntil(\n\t\ttokenStream: TokenStream,\n\t\tsearch: TokenType,\n\t\terrorLocation: Location,\n\t): IterableIterator<Token> {\n\t\tlet it = this.next(tokenStream);\n\t\twhile (!it.done) {\n\t\t\tconst token = it.value;\n\t\t\tyield token;\n\t\t\tif (token.type === search) return;\n\t\t\tit = this.next(tokenStream);\n\t\t}\n\t\tthrow new ParserError(\n\t\t\terrorLocation,\n\t\t\t`stream ended before ${TokenType[search]} token was found`,\n\t\t);\n\t}\n\n\t/**\n\t * Consumes tokens until a matching close-tag is found. Tags are appended to\n\t * the document.\n\t *\n\t * @internal\n\t */\n\tprivate consumeUntilMatchingTag(\n\t\tsource: Source,\n\t\ttokenStream: TokenStream,\n\t\tsearchTag: string,\n\t): void {\n\t\tlet numOpen = 1;\n\t\tlet it = this.next(tokenStream);\n\t\twhile (!it.done) {\n\t\t\tconst token = it.value;\n\t\t\tthis.consume(source, token, tokenStream);\n\t\t\tif (token.type === TokenType.TAG_OPEN) {\n\t\t\t\tconst [, close, tagName] = token.data;\n\t\t\t\tif (tagName === searchTag) {\n\t\t\t\t\tif (close) {\n\t\t\t\t\t\tnumOpen--;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnumOpen++;\n\t\t\t\t\t}\n\t\t\t\t\tif (numOpen === 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tit = this.next(tokenStream);\n\t\t}\n\t}\n\n\tprivate next(tokenStream: TokenStream): IteratorResult<Token> {\n\t\tconst it = tokenStream.next();\n\t\tif (!it.done) {\n\t\t\tconst token = it.value;\n\t\t\tthis.trigger(\"token\", {\n\t\t\t\tlocation: token.location,\n\t\t\t\ttype: token.type,\n\t\t\t\tdata: Array.from(token.data),\n\t\t\t\ttoken,\n\t\t\t});\n\t\t}\n\t\treturn it;\n\t}\n\n\t/**\n\t * Listen on events.\n\t *\n\t * @public\n\t * @param event - Event name.\n\t * @param listener - Event callback.\n\t * @returns A function to unregister the listener.\n\t */\n\tpublic on<K extends keyof ListenEventMap>(\n\t\tevent: K,\n\t\tlistener: (event: string, data: ListenEventMap[K]) => void,\n\t): () => void;\n\tpublic on(event: string, listener: EventCallback): () => void;\n\tpublic on(event: string, listener: EventCallback): () => void {\n\t\treturn this.event.on(event, listener);\n\t}\n\n\t/**\n\t * Listen on single event. The listener is automatically unregistered once the\n\t * event has been received.\n\t *\n\t * @public\n\t * @param event - Event name.\n\t * @param listener - Event callback.\n\t * @returns A function to unregister the listener.\n\t */\n\tpublic once<K extends keyof ListenEventMap>(\n\t\tevent: K,\n\t\tlistener: (event: string, data: ListenEventMap[K]) => void,\n\t): () => void;\n\tpublic once(event: string, listener: EventCallback): () => void;\n\tpublic once(event: string, listener: EventCallback): () => void {\n\t\treturn this.event.once(event, listener);\n\t}\n\n\t/**\n\t * Defer execution. Will call function sometime later.\n\t *\n\t * @internal\n\t * @param cb - Callback to execute later.\n\t */\n\tpublic defer(cb: () => void): void {\n\t\tthis.event.once(\"*\", cb);\n\t}\n\n\t/**\n\t * Trigger event.\n\t *\n\t * @internal\n\t * @param event - Event name\n\t * @param data - Event data\n\t */\n\tpublic trigger<K extends keyof TriggerEventMap>(event: K, data: TriggerEventMap[K]): void;\n\tpublic trigger(event: string, data: Event): void {\n\t\tif (typeof data.location === \"undefined\") {\n\t\t\tthrow new Error(\"Triggered event must contain location\");\n\t\t}\n\t\tthis.event.trigger(event, data);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic getEventHandler(): EventHandler {\n\t\treturn this.event;\n\t}\n\n\t/**\n\t * Appends a text node to the current element on the stack.\n\t */\n\tprivate appendText(text: string, location: Location): void {\n\t\tthis.dom.getActive().appendText(text, location);\n\t}\n\n\t/**\n\t * Trigger close events for any still open elements.\n\t */\n\tprivate closeTree(source: Source, location: Location): void {\n\t\tlet active;\n\t\t/* eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- the condition is not unnecessary, it performs an assignment */\n\t\twhile ((active = this.dom.getActive()) && !active.isRootElement()) {\n\t\t\tthis.closeElement(source, null, active, location);\n\t\t\tthis.dom.popActive();\n\t\t}\n\t}\n}\n","import { Severity } from \"./config\";\nimport { type Location, type Source } from \"./context\";\nimport { type Rule } from \"./rule\";\nimport { type DOMNode } from \"./dom\";\nimport { type Message } from \"./message\";\nimport { isThenable } from \"./utils\";\n\n/**\n * @public\n */\nexport interface DeferredMessage extends Omit<Message, \"selector\"> {\n\tselector: () => string | null;\n}\n\nfunction freeze(src: DeferredMessage): Message {\n\treturn {\n\t\t...src,\n\t\tselector: src.selector(),\n\t};\n}\n\nfunction isThenableArray<T>(value: T[] | Array<Promise<T>>): value is Array<Promise<T>> {\n\tif (value.length === 0) {\n\t\treturn false;\n\t}\n\treturn isThenable(value[0]);\n}\n\n/**\n * @public\n */\nexport interface Result {\n\tmessages: Message[];\n\tfilePath: string;\n\terrorCount: number;\n\twarningCount: number;\n\tsource: string | null;\n}\n\n/**\n * Report object returned by [[HtmlValidate]].\n *\n * @public\n */\nexport interface Report {\n\t/** `true` if validation was successful */\n\tvalid: boolean;\n\n\t/** Detailed results per validated source */\n\tresults: Result[];\n\n\t/** Total number of errors across all sources */\n\terrorCount: number;\n\n\t/** Total warnings of errors across all sources */\n\twarningCount: number;\n}\n\n/**\n * @public\n */\nexport class Reporter {\n\tprotected result: Record<string, DeferredMessage[]>;\n\n\tpublic constructor() {\n\t\tthis.result = {};\n\t}\n\n\t/**\n\t * Merge two or more reports into a single one.\n\t *\n\t * @param reports- Reports to merge.\n\t * @returns A merged report.\n\t */\n\tpublic static merge(reports: Report[]): Report;\n\n\t/**\n\t * Merge two or more reports into a single one.\n\t *\n\t * @param reports- Reports to merge.\n\t * @returns A promise resolved with the merged report.\n\t */\n\tpublic static merge(reports: Promise<Report[]> | Array<Promise<Report>>): Promise<Report>;\n\n\tpublic static merge(\n\t\treports: Report[] | Promise<Report[]> | Array<Promise<Report>>,\n\t): Report | Promise<Report> {\n\t\tif (isThenable(reports)) {\n\t\t\treturn reports.then((reports) => this.merge(reports));\n\t\t}\n\t\tif (isThenableArray(reports)) {\n\t\t\treturn Promise.all(reports).then((reports) => this.merge(reports));\n\t\t}\n\t\tconst valid = reports.every((report) => report.valid);\n\t\tconst merged: Record<string, Result> = {};\n\t\treports.forEach((report: Report) => {\n\t\t\treport.results.forEach((result: Result) => {\n\t\t\t\tconst key = result.filePath;\n\t\t\t\tif (key in merged) {\n\t\t\t\t\tmerged[key].messages = [...merged[key].messages, ...result.messages];\n\t\t\t\t} else {\n\t\t\t\t\tmerged[key] = { ...result };\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tconst results: Result[] = Object.values(merged).map((result: Result) => {\n\t\t\t/* recalculate error- and warning-count */\n\t\t\tresult.errorCount = countErrors(result.messages);\n\t\t\tresult.warningCount = countWarnings(result.messages);\n\t\t\treturn result;\n\t\t});\n\t\treturn {\n\t\t\tvalid,\n\t\t\tresults,\n\t\t\terrorCount: sumErrors(results),\n\t\t\twarningCount: sumWarnings(results),\n\t\t};\n\t}\n\n\tpublic add<ContextType, OptionsType>(\n\t\trule: Rule<ContextType, OptionsType>,\n\t\tmessage: string,\n\t\tseverity: number,\n\t\tnode: DOMNode | null,\n\t\tlocation: Location,\n\t\tcontext: ContextType,\n\t): void {\n\t\tif (!(location.filename in this.result)) {\n\t\t\tthis.result[location.filename] = [];\n\t\t}\n\t\tconst ruleUrl = rule.documentation(context)?.url;\n\t\tconst entry: DeferredMessage = {\n\t\t\truleId: rule.name,\n\t\t\tseverity,\n\t\t\tmessage,\n\t\t\toffset: location.offset,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column,\n\t\t\tsize: location.size || 0,\n\t\t\tselector() {\n\t\t\t\treturn node ? node.generateSelector() : null;\n\t\t\t},\n\t\t};\n\t\tif (ruleUrl) {\n\t\t\tentry.ruleUrl = ruleUrl;\n\t\t}\n\t\tif (context) {\n\t\t\tentry.context = context;\n\t\t}\n\t\tthis.result[location.filename].push(entry);\n\t}\n\n\tpublic addManual(filename: string, message: DeferredMessage): void {\n\t\tif (!(filename in this.result)) {\n\t\t\tthis.result[filename] = [];\n\t\t}\n\t\tthis.result[filename].push(message);\n\t}\n\n\tpublic save(sources?: Source[]): Report {\n\t\tconst report: Report = {\n\t\t\tvalid: this.isValid(),\n\t\t\tresults: Object.keys(this.result).map((filePath) => {\n\t\t\t\tconst messages = Array.from(this.result[filePath], freeze).sort(messageSort);\n\t\t\t\tconst source = (sources ?? []).find((source: Source) => filePath === source.filename);\n\t\t\t\treturn {\n\t\t\t\t\tfilePath,\n\t\t\t\t\tmessages,\n\t\t\t\t\terrorCount: countErrors(messages),\n\t\t\t\t\twarningCount: countWarnings(messages),\n\t\t\t\t\tsource: source ? (source.originalData ?? source.data) : null,\n\t\t\t\t};\n\t\t\t}),\n\t\t\terrorCount: 0,\n\t\t\twarningCount: 0,\n\t\t};\n\t\treport.errorCount = sumErrors(report.results);\n\t\treport.warningCount = sumWarnings(report.results);\n\t\treturn report;\n\t}\n\n\tprotected isValid(): boolean {\n\t\tconst numErrors = Object.values(this.result).reduce((sum, messages) => {\n\t\t\treturn sum + countErrors(messages);\n\t\t}, 0);\n\t\treturn numErrors === 0;\n\t}\n}\n\nfunction countErrors(messages: Array<Message | DeferredMessage>): number {\n\treturn messages.filter((m) => m.severity === Number(Severity.ERROR)).length;\n}\n\nfunction countWarnings(messages: Array<Message | DeferredMessage>): number {\n\treturn messages.filter((m) => m.severity === Number(Severity.WARN)).length;\n}\n\nfunction sumErrors(results: Result[]): number {\n\treturn results.reduce((sum: number, result: Result) => {\n\t\treturn sum + result.errorCount;\n\t}, 0);\n}\n\nfunction sumWarnings(results: Result[]): number {\n\treturn results.reduce((sum: number, result: Result) => {\n\t\treturn sum + result.warningCount;\n\t}, 0);\n}\n\nfunction messageSort(a: Message, b: Message): number {\n\tif (a.line < b.line) {\n\t\treturn -1;\n\t}\n\n\tif (a.line > b.line) {\n\t\treturn 1;\n\t}\n\n\tif (a.column < b.column) {\n\t\treturn -1;\n\t}\n\n\tif (a.column > b.column) {\n\t\treturn 1;\n\t}\n\n\treturn 0;\n}\n\nexport default Reporter;\n","/**\n * @internal\n */\nexport type RuleBlocker = number & { __type: \"rule-blocker\" };\n\nlet blockerCounter = 1;\n\n/**\n * Creates a new rule blocker for using when blocking rules from generating\n * errors.\n *\n * @internal\n */\nexport function createBlocker(): RuleBlocker {\n\tconst id = blockerCounter++;\n\treturn id as RuleBlocker;\n}\n","import { type ResolvedConfig, type RuleOptions, Severity } from \"../config\";\nimport { type Location, type Source } from \"../context\";\nimport { type DOMInternalID } from \"../dom/domnode\";\nimport {\n\ttype ConfigReadyEvent,\n\ttype DirectiveEvent,\n\ttype RuleErrorEvent,\n\ttype SourceReadyEvent,\n\ttype TagEndEvent,\n\ttype TagStartEvent,\n} from \"../event\";\nimport { InvalidTokenError, Lexer, TokenType } from \"../lexer\";\nimport { type Message } from \"../message\";\nimport { type Parser, ParserError } from \"../parser\";\nimport { type Report, Reporter } from \"../reporter\";\nimport { type RuleConstructor, type RuleDocumentation, Rule } from \"../rule\";\nimport type NoUnusedDisable from \"../rules/no-unused-disable\";\nimport bundledRules from \"../rules\";\nimport { dumpTree } from \"../utils\";\nimport { createBlocker } from \"./rule-blocker\";\n\n/**\n * @internal\n */\nexport interface EventDump {\n\tevent: string;\n\tdata: any;\n}\n\n/**\n * @internal\n */\nexport interface TokenDump {\n\ttoken: string;\n\tdata: string;\n\tlocation: string;\n}\n\ninterface DirectiveContext {\n\treadonly rules: Record<string, Rule<unknown, unknown> | undefined>;\n\treportUnused(rules: Set<string>, unused: Set<string>, options: string, location: Location): void;\n}\n\n/**\n * @internal\n */\nexport class Engine<T extends Parser = Parser> {\n\tprivate report: Reporter;\n\tprivate config: ResolvedConfig;\n\tprivate ParserClass: new (config: ResolvedConfig) => T;\n\tprivate availableRules: Record<string, RuleConstructor<unknown, unknown> | undefined>;\n\n\tpublic constructor(config: ResolvedConfig, ParserClass: new (config: ResolvedConfig) => T) {\n\t\tthis.report = new Reporter();\n\t\tthis.config = config;\n\t\tthis.ParserClass = ParserClass;\n\n\t\t/* initialize plugins and rules */\n\t\tconst result = this.initPlugins(this.config);\n\t\tthis.availableRules = {\n\t\t\t...bundledRules,\n\t\t\t...result.availableRules,\n\t\t};\n\t}\n\n\t/**\n\t * Lint sources and return report\n\t *\n\t * @param sources - Sources to lint.\n\t * @returns Report output.\n\t */\n\tpublic lint(sources: Source[]): Report {\n\t\tfor (const source of sources) {\n\t\t\t/* create parser for source */\n\t\t\tconst parser = this.instantiateParser();\n\n\t\t\t/* setup plugins and rules */\n\t\t\tconst { rules } = this.setupPlugins(source, this.config, parser);\n\t\t\tconst noUnusedDisable = rules[\"no-unused-disable\"] as NoUnusedDisable;\n\t\t\tconst directiveContext: DirectiveContext = {\n\t\t\t\trules,\n\t\t\t\treportUnused(\n\t\t\t\t\trules: Set<string>,\n\t\t\t\t\tunused: Set<string>,\n\t\t\t\t\toptions: string,\n\t\t\t\t\tlocation: Location,\n\t\t\t\t): void {\n\t\t\t\t\tif (!rules.has(noUnusedDisable.name)) {\n\t\t\t\t\t\tnoUnusedDisable.reportUnused(unused, options, location);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\n\t\t\t/* create a faux location at the start of the stream for the next events */\n\t\t\tconst location: Location = {\n\t\t\t\tfilename: source.filename,\n\t\t\t\tline: 1,\n\t\t\t\tcolumn: 1,\n\t\t\t\toffset: 0,\n\t\t\t\tsize: 1,\n\t\t\t};\n\n\t\t\t/* trigger configuration ready event */\n\t\t\tconst configEvent: ConfigReadyEvent = {\n\t\t\t\tlocation,\n\t\t\t\tconfig: this.config,\n\t\t\t\trules,\n\t\t\t};\n\t\t\tparser.trigger(\"config:ready\", configEvent);\n\n\t\t\t/* trigger source ready event */\n\t\t\tconst { hooks: _, ...sourceData } = source;\n\t\t\tconst sourceEvent: SourceReadyEvent = {\n\t\t\t\tlocation,\n\t\t\t\tsource: sourceData,\n\t\t\t};\n\t\t\tparser.trigger(\"source:ready\", sourceEvent);\n\n\t\t\t/* setup directive handling */\n\t\t\tparser.on(\"directive\", (_: string, event: DirectiveEvent) => {\n\t\t\t\tthis.processDirective(event, parser, directiveContext);\n\t\t\t});\n\n\t\t\t/* parse token stream */\n\t\t\ttry {\n\t\t\t\tparser.parseHtml(source);\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof InvalidTokenError || e instanceof ParserError) {\n\t\t\t\t\tthis.reportError(\"parser-error\", e.message, e.location);\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/* generate results from report */\n\t\treturn this.report.save(sources);\n\t}\n\n\t/**\n\t * Returns a list of all events generated while parsing the source.\n\t *\n\t * For verbosity, token events are ignored (use [[dumpTokens]] to inspect\n\t * token stream).\n\t */\n\tpublic dumpEvents(source: Source[]): EventDump[] {\n\t\tconst parser = this.instantiateParser();\n\t\tconst lines: EventDump[] = [];\n\t\tparser.on(\"*\", (event, data) => {\n\t\t\t/* ignore token events as it becomes to verbose */\n\t\t\tif (event === \"token\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlines.push({ event, data });\n\t\t});\n\t\tsource.forEach((src) => parser.parseHtml(src));\n\t\treturn lines;\n\t}\n\n\tpublic dumpTokens(source: Source[]): TokenDump[] {\n\t\tconst lexer = new Lexer();\n\t\tconst lines: TokenDump[] = [];\n\t\tfor (const src of source) {\n\t\t\tfor (const token of lexer.tokenize(src)) {\n\t\t\t\tconst data = token.data[0] ?? \"\";\n\t\t\t\tconst filename = token.location.filename;\n\t\t\t\tconst line = String(token.location.line);\n\t\t\t\tconst column = String(token.location.column);\n\t\t\t\tlines.push({\n\t\t\t\t\ttoken: TokenType[token.type],\n\t\t\t\t\tdata,\n\t\t\t\t\tlocation: `${filename}:${line}:${column}`,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn lines;\n\t}\n\n\tpublic dumpTree(source: Source[]): string[] {\n\t\t/* @todo handle dumping each tree */\n\t\tconst parser = this.instantiateParser();\n\t\tconst root = parser.parseHtml(source[0]);\n\t\treturn dumpTree(root);\n\t}\n\n\t/**\n\t * Get rule documentation.\n\t */\n\tpublic getRuleDocumentation({\n\t\truleId,\n\t\tcontext,\n\t}: Pick<Message, \"ruleId\" | \"context\">): RuleDocumentation | null {\n\t\tconst rules = this.config.getRules();\n\t\tconst ruleData = rules.get(ruleId);\n\t\tif (ruleData) {\n\t\t\tconst [, options] = ruleData;\n\t\t\tconst rule = this.instantiateRule(ruleId, options);\n\t\t\treturn rule.documentation(context);\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t * Create a new parser instance with the current configuration.\n\t *\n\t * @internal\n\t */\n\tpublic instantiateParser(): Parser {\n\t\treturn new this.ParserClass(this.config);\n\t}\n\n\tprivate processDirective(event: DirectiveEvent, parser: Parser, context: DirectiveContext): void {\n\t\tconst rules = event.data\n\t\t\t.split(\",\")\n\t\t\t.map((name) => name.trim())\n\t\t\t.map((name) => context.rules[name])\n\t\t\t.filter((rule): rule is Rule<unknown, unknown> => {\n\t\t\t\t/* filter out missing rules */\n\t\t\t\treturn Boolean(rule);\n\t\t\t});\n\t\t/* istanbul ignore next: option must be present or there would be no rules to disable */\n\t\tconst location = event.optionsLocation ?? event.location;\n\t\tswitch (event.action) {\n\t\t\tcase \"enable\":\n\t\t\t\tthis.processEnableDirective(rules, parser);\n\t\t\t\tbreak;\n\t\t\tcase \"disable\":\n\t\t\t\tthis.processDisableDirective(rules, parser);\n\t\t\t\tbreak;\n\t\t\tcase \"disable-block\":\n\t\t\t\tthis.processDisableBlockDirective(context, rules, parser, event.data, location);\n\t\t\t\tbreak;\n\t\t\tcase \"disable-next\":\n\t\t\t\tthis.processDisableNextDirective(context, rules, parser, event.data, location);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate processEnableDirective(rules: Array<Rule<unknown, unknown>>, parser: Parser): void {\n\t\tfor (const rule of rules) {\n\t\t\trule.setEnabled(true);\n\t\t\tif (rule.getSeverity() === Severity.DISABLED) {\n\t\t\t\trule.setServerity(Severity.ERROR);\n\t\t\t}\n\t\t}\n\n\t\t/* enable rules on node */\n\t\tparser.on(\"tag:start\", (_event: string, data: TagStartEvent) => {\n\t\t\tdata.target.enableRules(rules.map((rule) => rule.name));\n\t\t});\n\t}\n\n\tprivate processDisableDirective(rules: Array<Rule<unknown, unknown>>, parser: Parser): void {\n\t\tfor (const rule of rules) {\n\t\t\trule.setEnabled(false);\n\t\t}\n\n\t\t/* disable rules on node */\n\t\tparser.on(\"tag:start\", (_event: string, data: TagStartEvent) => {\n\t\t\tdata.target.disableRules(rules.map((rule) => rule.name));\n\t\t});\n\t}\n\n\tprivate processDisableBlockDirective(\n\t\tcontext: DirectiveContext,\n\t\trules: Array<Rule<unknown, unknown>>,\n\t\tparser: Parser,\n\t\toptions: string,\n\t\tlocation: Location,\n\t): void {\n\t\tconst ruleIds = new Set(rules.map((it) => it.name));\n\t\tconst unused = new Set(ruleIds);\n\t\tconst blocker = createBlocker();\n\t\tlet directiveBlock: DOMInternalID | null = null;\n\n\t\tfor (const rule of rules) {\n\t\t\trule.block(blocker);\n\t\t}\n\n\t\tconst unregisterOpen = parser.on(\"tag:start\", (_event: string, data: TagStartEvent) => {\n\t\t\t/* wait for a tag to open and find the current block by using its parent */\n\t\t\tif (directiveBlock === null) {\n\t\t\t\t/* istanbul ignore next: there will always be a parent (root element if\n\t\t\t\t * nothing else) but typescript doesn't know that */\n\t\t\t\tdirectiveBlock = data.target.parent?.unique ?? null;\n\t\t\t}\n\n\t\t\t/* disable rules directly on the node so it will be recorded for later,\n\t\t\t * more specifically when using the domtree to trigger errors */\n\t\t\tdata.target.blockRules(ruleIds, blocker);\n\t\t});\n\n\t\tconst unregisterClose = parser.on(\"tag:end\", (_event: string, data: TagEndEvent) => {\n\t\t\t/* if the directive is the last thing in a block no id would be set */\n\t\t\tconst lastNode = directiveBlock === null;\n\n\t\t\t/* test if the block is being closed by checking the parent of the block\n\t\t\t * element is being closed */\n\t\t\tconst parentClosed = directiveBlock === data.previous.unique;\n\n\t\t\t/* remove listeners and restore state */\n\t\t\tif (lastNode || parentClosed) {\n\t\t\t\tunregisterClose();\n\t\t\t\tunregisterOpen();\n\t\t\t\tfor (const rule of rules) {\n\t\t\t\t\trule.unblock(blocker);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tparser.on(\"rule:error\", (_event: string, data: RuleErrorEvent) => {\n\t\t\tif (data.blockers.includes(blocker)) {\n\t\t\t\tunused.delete(data.ruleId);\n\t\t\t}\n\t\t});\n\n\t\tparser.on(\"parse:end\", () => {\n\t\t\tcontext.reportUnused(ruleIds, unused, options, location);\n\t\t});\n\t}\n\n\tprivate processDisableNextDirective(\n\t\tcontext: DirectiveContext,\n\t\trules: Array<Rule<unknown, unknown>>,\n\t\tparser: Parser,\n\t\toptions: string,\n\t\tlocation: Location,\n\t): void {\n\t\tconst ruleIds = new Set(rules.map((it) => it.name));\n\t\tconst unused = new Set(ruleIds);\n\t\tconst blocker = createBlocker();\n\n\t\tfor (const rule of rules) {\n\t\t\trule.block(blocker);\n\t\t}\n\n\t\t/* block rules directly on the node so it will be recorded for later,\n\t\t * more specifically when using the domtree to trigger errors */\n\t\tconst unregister = parser.on(\"tag:start\", (_event: string, data: TagStartEvent) => {\n\t\t\tdata.target.blockRules(ruleIds, blocker);\n\t\t});\n\n\t\tparser.on(\"rule:error\", (_event: string, data: RuleErrorEvent) => {\n\t\t\tif (data.blockers.includes(blocker)) {\n\t\t\t\tunused.delete(data.ruleId);\n\t\t\t}\n\t\t});\n\n\t\tparser.on(\"parse:end\", () => {\n\t\t\tcontext.reportUnused(ruleIds, unused, options, location);\n\t\t});\n\n\t\t/* disable directive after next event occurs */\n\t\tparser.once(\"tag:ready, tag:end, attr\", () => {\n\t\t\tunregister();\n\t\t\tparser.defer(() => {\n\t\t\t\tfor (const rule of rules) {\n\t\t\t\t\trule.unblock(blocker);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t/*\n\t * Initialize all plugins. This should only be done once for all sessions.\n\t */\n\tprivate initPlugins(config: ResolvedConfig): {\n\t\tavailableRules: Record<string, RuleConstructor<any, any>>;\n\t} {\n\t\tfor (const plugin of config.getPlugins()) {\n\t\t\tif (plugin.init) {\n\t\t\t\tplugin.init();\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tavailableRules: this.initRules(config),\n\t\t};\n\t}\n\n\t/**\n\t * Initializes all rules from plugins and returns an object with a mapping\n\t * between rule name and its constructor.\n\t */\n\tprivate initRules(config: ResolvedConfig): Record<string, RuleConstructor<any, any>> {\n\t\tconst availableRules: Record<string, RuleConstructor<any, any>> = {};\n\t\tfor (const plugin of config.getPlugins()) {\n\t\t\tfor (const [name, rule] of Object.entries(plugin.rules ?? {})) {\n\t\t\t\tif (!rule) continue;\n\t\t\t\tavailableRules[name] = rule;\n\t\t\t}\n\t\t}\n\t\treturn availableRules;\n\t}\n\n\t/**\n\t * Setup all plugins for this session.\n\t */\n\tprivate setupPlugins(\n\t\tsource: Source,\n\t\tconfig: ResolvedConfig,\n\t\tparser: Parser,\n\t): {\n\t\trules: Record<string, Rule<unknown, unknown>>;\n\t} {\n\t\tconst eventHandler = parser.getEventHandler();\n\t\tfor (const plugin of config.getPlugins()) {\n\t\t\tif (plugin.setup) {\n\t\t\t\tplugin.setup(source, eventHandler);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\trules: this.setupRules(config, parser),\n\t\t};\n\t}\n\n\t/**\n\t * Load and setup all rules for current configuration.\n\t */\n\tprivate setupRules(\n\t\tconfig: ResolvedConfig,\n\t\tparser: Parser,\n\t): Record<string, Rule<unknown, unknown>> {\n\t\tconst rules: Record<string, Rule<unknown, unknown>> = {};\n\t\tfor (const [ruleId, [severity, options]] of config.getRules().entries()) {\n\t\t\trules[ruleId] = this.loadRule(ruleId, config, severity, options, parser, this.report);\n\t\t}\n\t\treturn rules;\n\t}\n\n\t/**\n\t * Load and setup a rule using current config.\n\t */\n\tprotected loadRule(\n\t\truleId: string,\n\t\tconfig: ResolvedConfig,\n\t\tseverity: Severity,\n\t\toptions: RuleOptions,\n\t\tparser: Parser,\n\t\treport: Reporter,\n\t): Rule<unknown, unknown> {\n\t\tconst meta = config.getMetaTable();\n\t\tconst rule = this.instantiateRule(ruleId, options);\n\t\trule.name = ruleId;\n\t\trule.init(parser, report, severity, meta);\n\n\t\t/* call setup callback if present */\n\t\t/* eslint-disable-next-line @typescript-eslint/no-unnecessary-condition --\n\t\t * unnecessary from a typescript perspective but if the plugin is not\n\t\t * implemented in TS the user might not have implemented the callback even\n\t\t * if the declaration requires it */\n\t\tif (rule.setup) {\n\t\t\trule.setup();\n\t\t}\n\n\t\treturn rule;\n\t}\n\n\tprotected instantiateRule(name: string, options: RuleOptions): Rule<unknown, unknown> {\n\t\tif (this.availableRules[name]) {\n\t\t\tconst RuleConstructor = this.availableRules[name];\n\t\t\treturn new RuleConstructor(options);\n\t\t} else {\n\t\t\treturn this.missingRule(name);\n\t\t}\n\t}\n\n\tprotected missingRule(name: string): Rule {\n\t\treturn new (class MissingRule extends Rule {\n\t\t\tpublic setup(): void {\n\t\t\t\tthis.on(\"dom:load\", () => {\n\t\t\t\t\tthis.report(null, `Definition for rule '${name}' was not found`);\n\t\t\t\t});\n\t\t\t}\n\t\t})();\n\t}\n\n\tprivate reportError(ruleId: string, message: string, location: Location): void {\n\t\tthis.report.addManual(location.filename, {\n\t\t\truleId,\n\t\t\tseverity: Severity.ERROR,\n\t\t\tmessage,\n\t\t\toffset: location.offset,\n\t\t\tline: location.line,\n\t\t\tcolumn: location.column,\n\t\t\tsize: location.size,\n\t\t\tselector: () => null,\n\t\t});\n\t}\n}\n","import { Config } from \"../config\";\nimport { type ConfigData } from \"../config-data\";\nimport { ConfigLoader } from \"../config-loader\";\nimport { type ResolvedConfig } from \"../resolved-config\";\nimport { type Resolver } from \"../resolver\";\n\nconst defaultResolvers: Resolver[] = [];\n\ntype ConstructorParametersDefault = [ConfigData?];\ntype ConstructorParametersResolver = [Resolver[], ConfigData?];\ntype ConstructorParameters = ConstructorParametersDefault | ConstructorParametersResolver;\n\nfunction hasResolver(value: ConstructorParameters): value is ConstructorParametersResolver {\n\treturn Array.isArray(value[0]);\n}\n\n/**\n * The static configuration loader does not do any per-handle lookup. Only the\n * global or per-call configuration is used.\n *\n * In practice this means no configuration is fetched by traversing the\n * filesystem.\n *\n * @public\n */\nexport class StaticConfigLoader extends ConfigLoader {\n\t/**\n\t * Create a static configuration loader with default resolvers.\n\t *\n\t * @param config - Global configuration\n\t * @param configFactory - Optional configuration factory\n\t */\n\tpublic constructor(config?: ConfigData);\n\n\t/**\n\t * Create a static configuration loader with custom resolvers.\n\t *\n\t * @param resolvers - Resolvers to use\n\t * @param config - Global configuration\n\t * @param configFactory - Optional configuration factory\n\t */\n\tpublic constructor(resolvers: Resolver[], config?: ConfigData);\n\n\tpublic constructor(...args: ConstructorParameters) {\n\t\tif (hasResolver(args)) {\n\t\t\tconst [resolvers, config] = args;\n\t\t\tsuper(resolvers, config);\n\t\t} else {\n\t\t\tconst [config] = args;\n\t\t\tsuper(defaultResolvers, config);\n\t\t}\n\t}\n\n\t/**\n\t * Set a new configuration for this loader.\n\t *\n\t * @public\n\t * @since 8.20.0\n\t * @param config - New configuration to use.\n\t */\n\t/* istanbul ignore next -- not testing setters/getters */\n\tpublic setConfig(config: ConfigData): void {\n\t\tconst defaults = Config.empty();\n\t\tthis.globalConfig = defaults.merge(this.resolvers, this.loadFromObject(config));\n\t}\n\n\tpublic override getConfigFor(_handle: string, configOverride?: ConfigData): ResolvedConfig {\n\t\tconst override = this.loadFromObject(configOverride ?? {});\n\t\tif (override.isRootFound()) {\n\t\t\toverride.init();\n\t\t\treturn override.resolve();\n\t\t}\n\n\t\tconst merged = this.globalConfig.merge(this.resolvers, override);\n\t\tmerged.init();\n\t\treturn merged.resolve();\n\t}\n\n\tpublic override flushCache(): void {\n\t\t/* do nothing */\n\t}\n\n\tprotected defaultConfig(): Config {\n\t\treturn this.loadFromObject({\n\t\t\textends: [\"html-validate:recommended\"],\n\t\t\telements: [\"html5\"],\n\t\t});\n\t}\n}\n","import { type SchemaObject } from \"ajv\";\nimport { type ConfigData, type ResolvedConfig, ConfigLoader } from \"./config\";\nimport { normalizeSource, type Source } from \"./context\";\nimport { type SourceHooks } from \"./context/source\";\nimport { type EventDump, type TokenDump, Engine } from \"./engine\";\nimport { type Message } from \"./message\";\nimport { Parser } from \"./parser\";\nimport { type Report, Reporter } from \"./reporter\";\nimport { type RuleDocumentation } from \"./rule\";\nimport configurationSchema from \"./schema/config.json\";\nimport { StaticConfigLoader } from \"./config/loaders/static\";\n\nfunction isSourceHooks(value: any): value is SourceHooks {\n\tif (!value || typeof value === \"string\") {\n\t\treturn false;\n\t}\n\treturn Boolean(value.processAttribute || value.processElement);\n}\n\nfunction isConfigData(value: any): value is ConfigData {\n\tif (!value || typeof value === \"string\") {\n\t\treturn false;\n\t}\n\treturn !(value.processAttribute || value.processElement);\n}\n\n/**\n * Primary API for using HTML-validate.\n *\n * Provides high-level abstractions for common operations.\n *\n * @public\n */\nexport class HtmlValidate {\n\tprotected configLoader: ConfigLoader;\n\n\t/**\n\t * Create a new validator.\n\t *\n\t * @public\n\t * @param configLoader - Use a custom configuration loader.\n\t * @param config - If set it provides the global default configuration. By\n\t * default `Config.defaultConfig()` is used.\n\t */\n\tpublic constructor(config?: ConfigData);\n\tpublic constructor(configLoader: ConfigLoader);\n\tpublic constructor(arg?: ConfigLoader | ConfigData) {\n\t\tconst [loader, config] = arg instanceof ConfigLoader ? [arg, undefined] : [undefined, arg];\n\t\tthis.configLoader = loader ?? new StaticConfigLoader(config);\n\t}\n\n\t/**\n\t * Parse and validate HTML from string.\n\t *\n\t * @public\n\t * @param str - Text to parse.\n\t * @param filename - If set configuration is loaded for given filename.\n\t * @param hooks - Optional hooks (see [[Source]]) for definition.\n\t * @returns Report output.\n\t */\n\t/* eslint-disable @typescript-eslint/unified-signatures -- for easier readability */\n\tpublic validateString(str: string): Promise<Report>;\n\tpublic validateString(str: string, filename: string): Promise<Report>;\n\tpublic validateString(str: string, hooks: SourceHooks): Promise<Report>;\n\tpublic validateString(str: string, options: ConfigData): Promise<Report>;\n\tpublic validateString(str: string, filename: string, hooks: SourceHooks): Promise<Report>;\n\tpublic validateString(str: string, filename: string, options: ConfigData): Promise<Report>;\n\tpublic validateString(\n\t\tstr: string,\n\t\tfilename: string,\n\t\toptions: ConfigData,\n\t\thooks: SourceHooks,\n\t): Promise<Report>;\n\t/* eslint-enable @typescript-eslint/unified-signatures */\n\tpublic validateString(\n\t\tstr: string,\n\t\targ1?: string | SourceHooks | ConfigData,\n\t\targ2?: SourceHooks | ConfigData,\n\t\targ3?: SourceHooks,\n\t): Promise<Report> {\n\t\tconst filename = typeof arg1 === \"string\" ? arg1 : \"inline\";\n\t\tconst options = isConfigData(arg1) ? arg1 : isConfigData(arg2) ? arg2 : undefined;\n\t\tconst hooks = isSourceHooks(arg1) ? arg1 : isSourceHooks(arg2) ? arg2 : arg3;\n\t\tconst source = {\n\t\t\tdata: str,\n\t\t\tfilename,\n\t\t\tline: 1,\n\t\t\tcolumn: 1,\n\t\t\toffset: 0,\n\t\t\thooks,\n\t\t};\n\t\treturn this.validateSource(source, options);\n\t}\n\n\t/**\n\t * Parse and validate HTML from string.\n\t *\n\t * @public\n\t * @param str - Text to parse.\n\t * @param filename - If set configuration is loaded for given filename.\n\t * @param hooks - Optional hooks (see [[Source]]) for definition.\n\t * @returns Report output.\n\t */\n\t/* eslint-disable @typescript-eslint/unified-signatures -- for easier readability */\n\tpublic validateStringSync(str: string): Report;\n\tpublic validateStringSync(str: string, filename: string): Report;\n\tpublic validateStringSync(str: string, hooks: SourceHooks): Report;\n\tpublic validateStringSync(str: string, options: ConfigData): Report;\n\tpublic validateStringSync(str: string, filename: string, hooks: SourceHooks): Report;\n\tpublic validateStringSync(str: string, filename: string, options: ConfigData): Report;\n\tpublic validateStringSync(\n\t\tstr: string,\n\t\tfilename: string,\n\t\toptions: ConfigData,\n\t\thooks: SourceHooks,\n\t): Report;\n\t/* eslint-enable @typescript-eslint/unified-signatures */\n\tpublic validateStringSync(\n\t\tstr: string,\n\t\targ1?: string | SourceHooks | ConfigData,\n\t\targ2?: SourceHooks | ConfigData,\n\t\targ3?: SourceHooks,\n\t): Report {\n\t\tconst filename = typeof arg1 === \"string\" ? arg1 : \"inline\";\n\t\tconst options = isConfigData(arg1) ? arg1 : isConfigData(arg2) ? arg2 : undefined;\n\t\tconst hooks = isSourceHooks(arg1) ? arg1 : isSourceHooks(arg2) ? arg2 : arg3;\n\t\tconst source = {\n\t\t\tdata: str,\n\t\t\tfilename,\n\t\t\tline: 1,\n\t\t\tcolumn: 1,\n\t\t\toffset: 0,\n\t\t\thooks,\n\t\t};\n\t\treturn this.validateSourceSync(source, options);\n\t}\n\n\t/**\n\t * Parse and validate HTML from [[Source]].\n\t *\n\t * @public\n\t * @param input - Source to parse.\n\t * @returns Report output.\n\t */\n\tpublic async validateSource(input: Source, configOverride?: ConfigData): Promise<Report> {\n\t\tconst source = normalizeSource(input);\n\t\tconst config = await this.getConfigFor(source.filename, configOverride);\n\t\tconst transformedSource = config.transformSource(source);\n\t\tconst engine = new Engine(config, Parser);\n\t\treturn engine.lint(transformedSource);\n\t}\n\n\t/**\n\t * Parse and validate HTML from [[Source]].\n\t *\n\t * @public\n\t * @param input - Source to parse.\n\t * @returns Report output.\n\t */\n\tpublic validateSourceSync(input: Source, configOverride?: ConfigData): Report {\n\t\tconst source = normalizeSource(input);\n\t\tconst config = this.getConfigForSync(source.filename, configOverride);\n\t\tconst transformedSource = config.transformSource(source);\n\t\tconst engine = new Engine(config, Parser);\n\t\treturn engine.lint(transformedSource);\n\t}\n\n\t/**\n\t * Parse and validate HTML from file.\n\t *\n\t * @public\n\t * @param filename - Filename to read and parse.\n\t * @returns Report output.\n\t */\n\tpublic async validateFile(filename: string): Promise<Report> {\n\t\tconst config = await this.getConfigFor(filename);\n\t\tconst source = config.transformFilename(filename);\n\t\tconst engine = new Engine(config, Parser);\n\t\treturn Promise.resolve(engine.lint(source));\n\t}\n\n\t/**\n\t * Parse and validate HTML from file.\n\t *\n\t * @public\n\t * @param filename - Filename to read and parse.\n\t * @returns Report output.\n\t */\n\tpublic validateFileSync(filename: string): Report {\n\t\tconst config = this.getConfigForSync(filename);\n\t\tconst source = config.transformFilename(filename);\n\t\tconst engine = new Engine(config, Parser);\n\t\treturn engine.lint(source);\n\t}\n\n\t/**\n\t * Parse and validate HTML from multiple files. Result is merged together to a\n\t * single report.\n\t *\n\t * @param filenames - Filenames to read and parse.\n\t * @returns Report output.\n\t */\n\tpublic async validateMultipleFiles(filenames: string[]): Promise<Report> {\n\t\tconst report = Reporter.merge(filenames.map((filename) => this.validateFileSync(filename)));\n\t\treturn Promise.resolve(report);\n\t}\n\n\t/**\n\t * Parse and validate HTML from multiple files. Result is merged together to a\n\t * single report.\n\t *\n\t * @param filenames - Filenames to read and parse.\n\t * @returns Report output.\n\t */\n\tpublic validateMultipleFilesSync(filenames: string[]): Report {\n\t\treturn Reporter.merge(filenames.map((filename) => this.validateFileSync(filename)));\n\t}\n\n\t/**\n\t * Returns true if the given filename can be validated.\n\t *\n\t * A file is considered to be validatable if the extension is `.html` or if a\n\t * transformer matches the filename.\n\t *\n\t * This is mostly useful for tooling to determine whenever to validate the\n\t * file or not. CLI tools will run on all the given files anyway.\n\t */\n\tpublic async canValidate(filename: string): Promise<boolean> {\n\t\t/* .html is always supported */\n\t\tif (filename.toLowerCase().endsWith(\".html\")) {\n\t\t\treturn true;\n\t\t}\n\n\t\t/* test if there is a matching transformer */\n\t\tconst config = await this.getConfigFor(filename);\n\t\treturn config.canTransform(filename);\n\t}\n\n\t/**\n\t * Returns true if the given filename can be validated.\n\t *\n\t * A file is considered to be validatable if the extension is `.html` or if a\n\t * transformer matches the filename.\n\t *\n\t * This is mostly useful for tooling to determine whenever to validate the\n\t * file or not. CLI tools will run on all the given files anyway.\n\t */\n\tpublic canValidateSync(filename: string): boolean {\n\t\t/* .html is always supported */\n\t\tif (filename.toLowerCase().endsWith(\".html\")) {\n\t\t\treturn true;\n\t\t}\n\n\t\t/* test if there is a matching transformer */\n\t\tconst config = this.getConfigForSync(filename);\n\t\treturn config.canTransform(filename);\n\t}\n\n\t/**\n\t * Tokenize filename and output all tokens.\n\t *\n\t * Using CLI this is enabled with `--dump-tokens`. Mostly useful for\n\t * debugging.\n\t *\n\t * @internal\n\t * @param filename - Filename to tokenize.\n\t */\n\tpublic dumpTokens(filename: string): TokenDump[] {\n\t\tconst config = this.getConfigForSync(filename);\n\t\tconst source = config.transformFilename(filename);\n\t\tconst engine = new Engine(config, Parser);\n\t\treturn engine.dumpTokens(source);\n\t}\n\n\t/**\n\t * Parse filename and output all events.\n\t *\n\t * Using CLI this is enabled with `--dump-events`. Mostly useful for\n\t * debugging.\n\t *\n\t * @internal\n\t * @param filename - Filename to dump events from.\n\t */\n\tpublic dumpEvents(filename: string): EventDump[] {\n\t\tconst config = this.getConfigForSync(filename);\n\t\tconst source = config.transformFilename(filename);\n\t\tconst engine = new Engine(config, Parser);\n\t\treturn engine.dumpEvents(source);\n\t}\n\n\t/**\n\t * Parse filename and output DOM tree.\n\t *\n\t * Using CLI this is enabled with `--dump-tree`. Mostly useful for\n\t * debugging.\n\t *\n\t * @internal\n\t * @param filename - Filename to dump DOM tree from.\n\t */\n\tpublic dumpTree(filename: string): string[] {\n\t\tconst config = this.getConfigForSync(filename);\n\t\tconst source = config.transformFilename(filename);\n\t\tconst engine = new Engine(config, Parser);\n\t\treturn engine.dumpTree(source);\n\t}\n\n\t/**\n\t * Transform filename and output source data.\n\t *\n\t * Using CLI this is enabled with `--dump-source`. Mostly useful for\n\t * debugging.\n\t *\n\t * @internal\n\t * @param filename - Filename to dump source from.\n\t */\n\tpublic dumpSource(filename: string): string[] {\n\t\tconst config = this.getConfigForSync(filename);\n\t\tconst sources = config.transformFilename(filename);\n\t\treturn sources.reduce<string[]>((result: string[], source: Source) => {\n\t\t\tconst line = String(source.line);\n\t\t\tconst column = String(source.column);\n\t\t\tconst offset = String(source.offset);\n\t\t\tresult.push(`Source ${source.filename}@${line}:${column} (offset: ${offset})`);\n\t\t\tif (source.transformedBy) {\n\t\t\t\tresult.push(\"Transformed by:\");\n\t\t\t\tresult = result.concat(source.transformedBy.reverse().map((name) => ` - ${name}`));\n\t\t\t}\n\t\t\tif (source.hooks && Object.keys(source.hooks).length > 0) {\n\t\t\t\tresult.push(\"Hooks\");\n\t\t\t\tfor (const [key, present] of Object.entries(source.hooks)) {\n\t\t\t\t\tif (present) {\n\t\t\t\t\t\tresult.push(` - ${key}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tresult.push(\"---\");\n\t\t\tresult = result.concat(source.data.split(\"\\n\"));\n\t\t\tresult.push(\"---\");\n\t\t\treturn result;\n\t\t}, []);\n\t}\n\n\t/**\n\t * Get effective configuration schema.\n\t */\n\tpublic getConfigurationSchema(): SchemaObject {\n\t\treturn configurationSchema;\n\t}\n\n\t/**\n\t * Get effective metadata element schema.\n\t *\n\t * If a filename is given the configured plugins can extend the\n\t * schema. Filename must not be an existing file or a filetype normally\n\t * handled by html-validate but the path will be used when resolving\n\t * configuration. As a rule-of-thumb, set it to the elements json file.\n\t */\n\tpublic async getElementsSchema(filename?: string): Promise<SchemaObject> {\n\t\tconst config = await this.getConfigFor(filename ?? \"inline\");\n\t\tconst metaTable = config.getMetaTable();\n\t\treturn metaTable.getJSONSchema();\n\t}\n\n\t/**\n\t * Get effective metadata element schema.\n\t *\n\t * If a filename is given the configured plugins can extend the\n\t * schema. Filename must not be an existing file or a filetype normally\n\t * handled by html-validate but the path will be used when resolving\n\t * configuration. As a rule-of-thumb, set it to the elements json file.\n\t */\n\tpublic getElementsSchemaSync(filename?: string): SchemaObject {\n\t\tconst config = this.getConfigForSync(filename ?? \"inline\");\n\t\tconst metaTable = config.getMetaTable();\n\t\treturn metaTable.getJSONSchema();\n\t}\n\n\t/**\n\t * Get contextual documentation for the given rule. Configuration will be\n\t * resolved for given filename.\n\t *\n\t * @example\n\t *\n\t * ```js\n\t * const report = await htmlvalidate.validateFile(\"my-file.html\");\n\t * for (const result of report.results){\n\t * for (const message of result.messages){\n\t * const documentation = await htmlvalidate.getContextualDocumentation(message, result.filePath);\n\t * // do something with documentation\n\t * }\n\t * }\n\t * ```\n\t *\n\t * @public\n\t * @since 8.0.0\n\t * @param message - Message reported during validation\n\t * @param filename - Filename used to resolve configuration.\n\t * @returns Contextual documentation or `null` if the rule does not exist.\n\t */\n\tpublic getContextualDocumentation(\n\t\tmessage: Pick<Message, \"ruleId\" | \"context\">,\n\t\tfilename?: string,\n\t): Promise<RuleDocumentation | null>;\n\n\t/**\n\t * Get contextual documentation for the given rule using provided\n\t * configuration.\n\t *\n\t * @example\n\t *\n\t * ```js\n\t * const report = await htmlvalidate.validateFile(\"my-file.html\");\n\t * for (const result of report.results){\n\t * for (const message of result.messages){\n\t * const documentation = await htmlvalidate.getRuleDocumentation(message, result.filePath);\n\t * // do something with documentation\n\t * }\n\t * }\n\t * ```\n\t *\n\t * @public\n\t * @since 8.0.0\n\t * @param message - Message reported during validation\n\t * @param config - Configuration to use.\n\t * @returns Contextual documentation or `null` if the rule does not exist.\n\t */\n\tpublic getContextualDocumentation(\n\t\tmessage: Pick<Message, \"ruleId\" | \"context\">,\n\t\tconfig: ResolvedConfig | Promise<ResolvedConfig>,\n\t): Promise<RuleDocumentation | null>;\n\n\tpublic async getContextualDocumentation(\n\t\tmessage: Pick<Message, \"ruleId\" | \"context\">,\n\t\tfilenameOrConfig: ResolvedConfig | Promise<ResolvedConfig> | string = \"inline\",\n\t): Promise<RuleDocumentation | null> {\n\t\tconst config =\n\t\t\ttypeof filenameOrConfig === \"string\"\n\t\t\t\t? await this.getConfigFor(filenameOrConfig)\n\t\t\t\t: await filenameOrConfig;\n\t\tconst engine = new Engine(config, Parser);\n\t\treturn engine.getRuleDocumentation(message);\n\t}\n\n\t/**\n\t * Get contextual documentation for the given rule. Configuration will be\n\t * resolved for given filename.\n\t *\n\t * @example\n\t *\n\t * ```js\n\t * const report = htmlvalidate.validateFileSync(\"my-file.html\");\n\t * for (const result of report.results){\n\t * for (const message of result.messages){\n\t * const documentation = htmlvalidate.getRuleDocumentationSync(message, result.filePath);\n\t * // do something with documentation\n\t * }\n\t * }\n\t * ```\n\t *\n\t * @public\n\t * @since 8.0.0\n\t * @param message - Message reported during validation\n\t * @param filename - Filename used to resolve configuration.\n\t * @returns Contextual documentation or `null` if the rule does not exist.\n\t */\n\tpublic getContextualDocumentationSync(\n\t\tmessage: Pick<Message, \"ruleId\" | \"context\">,\n\t\tfilename?: string,\n\t): RuleDocumentation | null;\n\n\t/**\n\t * Get contextual documentation for the given rule using provided\n\t * configuration.\n\t *\n\t * @example\n\t *\n\t * ```js\n\t * const report = htmlvalidate.validateFileSync(\"my-file.html\");\n\t * for (const result of report.results){\n\t * for (const message of result.messages){\n\t * const documentation = htmlvalidate.getRuleDocumentationSync(message, result.filePath);\n\t * // do something with documentation\n\t * }\n\t * }\n\t * ```\n\t *\n\t * @public\n\t * @since 8.0.0\n\t * @param message - Message reported during validation\n\t * @param config - Configuration to use.\n\t * @returns Contextual documentation or `null` if the rule does not exist.\n\t */\n\tpublic getContextualDocumentationSync(\n\t\tmessage: Pick<Message, \"ruleId\" | \"context\">,\n\t\tconfig: ResolvedConfig,\n\t): RuleDocumentation | null;\n\n\tpublic getContextualDocumentationSync(\n\t\tmessage: Pick<Message, \"ruleId\" | \"context\">,\n\t\tfilenameOrConfig: ResolvedConfig | string = \"inline\",\n\t): RuleDocumentation | null {\n\t\tconst config =\n\t\t\ttypeof filenameOrConfig === \"string\"\n\t\t\t\t? this.getConfigForSync(filenameOrConfig)\n\t\t\t\t: filenameOrConfig;\n\t\tconst engine = new Engine(config, Parser);\n\t\treturn engine.getRuleDocumentation(message);\n\t}\n\n\t/**\n\t * Get contextual documentation for the given rule.\n\t *\n\t * Typical usage:\n\t *\n\t * ```js\n\t * const report = await htmlvalidate.validateFile(\"my-file.html\");\n\t * for (const result of report.results){\n\t * const config = await htmlvalidate.getConfigFor(result.filePath);\n\t * for (const message of result.messages){\n\t * const documentation = await htmlvalidate.getRuleDocumentation(message.ruleId, config, message.context);\n\t * // do something with documentation\n\t * }\n\t * }\n\t * ```\n\t *\n\t * @public\n\t * @deprecated Deprecated since 8.0.0, use [[getContextualDocumentation]] instead.\n\t * @param ruleId - Rule to get documentation for.\n\t * @param config - If set it provides more accurate description by using the\n\t * correct configuration for the file.\n\t * @param context - If set to `Message.context` some rules can provide\n\t * contextual details and suggestions.\n\t */\n\tpublic async getRuleDocumentation(\n\t\truleId: string,\n\t\tconfig: ResolvedConfig | Promise<ResolvedConfig> | null = null,\n\t\tcontext: unknown | null = null,\n\t): Promise<RuleDocumentation | null> {\n\t\tconst c = config ?? this.getConfigFor(\"inline\");\n\t\tconst engine = new Engine(await c, Parser);\n\t\treturn engine.getRuleDocumentation({ ruleId, context });\n\t}\n\n\t/**\n\t * Get contextual documentation for the given rule.\n\t *\n\t * Typical usage:\n\t *\n\t * ```js\n\t * const report = htmlvalidate.validateFileSync(\"my-file.html\");\n\t * for (const result of report.results){\n\t * const config = htmlvalidate.getConfigForSync(result.filePath);\n\t * for (const message of result.messages){\n\t * const documentation = htmlvalidate.getRuleDocumentationSync(message.ruleId, config, message.context);\n\t * // do something with documentation\n\t * }\n\t * }\n\t * ```\n\t *\n\t * @public\n\t * @deprecated Deprecated since 8.0.0, use [[getContextualDocumentationSync]] instead.\n\t * @param ruleId - Rule to get documentation for.\n\t * @param config - If set it provides more accurate description by using the\n\t * correct configuration for the file.\n\t * @param context - If set to `Message.context` some rules can provide\n\t * contextual details and suggestions.\n\t */\n\tpublic getRuleDocumentationSync(\n\t\truleId: string,\n\t\tconfig: ResolvedConfig | null = null,\n\t\tcontext: unknown | null = null,\n\t): RuleDocumentation | null {\n\t\tconst c = config ?? this.getConfigForSync(\"inline\");\n\t\tconst engine = new Engine(c, Parser);\n\t\treturn engine.getRuleDocumentation({ ruleId, context });\n\t}\n\n\t/**\n\t * Create a parser configured for given filename.\n\t *\n\t * @internal\n\t * @param source - Source to use.\n\t */\n\tpublic async getParserFor(source: Source): Promise<Parser> {\n\t\tconst config = await this.getConfigFor(source.filename);\n\t\treturn new Parser(config);\n\t}\n\n\t/**\n\t * Get configuration for given filename.\n\t *\n\t * See [[FileSystemConfigLoader]] for details.\n\t *\n\t * @public\n\t * @param filename - Filename to get configuration for.\n\t * @param configOverride - Configuration to apply last.\n\t */\n\tpublic getConfigFor(filename: string, configOverride?: ConfigData): Promise<ResolvedConfig> {\n\t\tconst config = this.configLoader.getConfigFor(filename, configOverride);\n\t\treturn Promise.resolve(config);\n\t}\n\n\t/**\n\t * Get configuration for given filename.\n\t *\n\t * See [[FileSystemConfigLoader]] for details.\n\t *\n\t * @public\n\t * @param filename - Filename to get configuration for.\n\t * @param configOverride - Configuration to apply last.\n\t */\n\tpublic getConfigForSync(filename: string, configOverride?: ConfigData): ResolvedConfig {\n\t\treturn this.configLoader.getConfigFor(filename, configOverride);\n\t}\n\n\t/**\n\t * Get current configuration loader.\n\t *\n\t * @public\n\t * @since %version%\n\t * @returns Current configuration loader.\n\t */\n\t/* istanbul ignore next -- not testing setters/getters */\n\tpublic getConfigLoader(): ConfigLoader {\n\t\treturn this.configLoader;\n\t}\n\n\t/**\n\t * Set configuration loader.\n\t *\n\t * @public\n\t * @since %version%\n\t * @param loader - New configuration loader to use.\n\t */\n\t/* istanbul ignore next -- not testing setters/getters */\n\tpublic setConfigLoader(loader: ConfigLoader): void {\n\t\tthis.configLoader = loader;\n\t}\n\n\t/**\n\t * Flush configuration cache. Clears full cache unless a filename is given.\n\t *\n\t * See [[FileSystemConfigLoader]] for details.\n\t *\n\t * @public\n\t * @param filename - If set, only flush cache for given filename.\n\t */\n\tpublic flushConfigCache(filename?: string): void {\n\t\tthis.configLoader.flushCache(filename);\n\t}\n}\n","/* generated file, changes will be overwritten */\n/** @public */\nexport const name: string = \"html-validate\";\n/** @public */\nexport const version: string = \"8.24.0\";\n/** @public */\nexport const homepage: string = \"https://html-validate.org\";\n/** @public */\nexport const bugs: string = \"https://gitlab.com/html-validate/html-validate/issues/new\";\n","import { type Plugin } from \"./plugin\";\n\n/**\n * Helper function to assist IDE with completion and type-checking.\n *\n * @public\n */\nexport function definePlugin(plugin: Plugin): Plugin {\n\treturn plugin;\n}\n","// A simple implementation of make-array\nfunction makeArray (subject) {\n return Array.isArray(subject)\n ? subject\n : [subject]\n}\n\nconst EMPTY = ''\nconst SPACE = ' '\nconst ESCAPE = '\\\\'\nconst REGEX_TEST_BLANK_LINE = /^\\s+$/\nconst REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\\\]|^)\\\\$/\nconst REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\\\!/\nconst REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\\\#/\nconst REGEX_SPLITALL_CRLF = /\\r?\\n/g\n// /foo,\n// ./foo,\n// ../foo,\n// .\n// ..\nconst REGEX_TEST_INVALID_PATH = /^\\.*\\/|^\\.+$/\n\nconst SLASH = '/'\n\n// Do not use ternary expression here, since \"istanbul ignore next\" is buggy\nlet TMP_KEY_IGNORE = 'node-ignore'\n/* istanbul ignore else */\nif (typeof Symbol !== 'undefined') {\n TMP_KEY_IGNORE = Symbol.for('node-ignore')\n}\nconst KEY_IGNORE = TMP_KEY_IGNORE\n\nconst define = (object, key, value) =>\n Object.defineProperty(object, key, {value})\n\nconst REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g\n\nconst RETURN_FALSE = () => false\n\n// Sanitize the range of a regular expression\n// The cases are complicated, see test cases for details\nconst sanitizeRange = range => range.replace(\n REGEX_REGEXP_RANGE,\n (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0)\n ? match\n // Invalid range (out of order) which is ok for gitignore rules but\n // fatal for JavaScript regular expression, so eliminate it.\n : EMPTY\n)\n\n// See fixtures #59\nconst cleanRangeBackSlash = slashes => {\n const {length} = slashes\n return slashes.slice(0, length - length % 2)\n}\n\n// > If the pattern ends with a slash,\n// > it is removed for the purpose of the following description,\n// > but it would only find a match with a directory.\n// > In other words, foo/ will match a directory foo and paths underneath it,\n// > but will not match a regular file or a symbolic link foo\n// > (this is consistent with the way how pathspec works in general in Git).\n// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`'\n// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call\n// you could use option `mark: true` with `glob`\n\n// '`foo/`' should not continue with the '`..`'\nconst REPLACERS = [\n\n [\n // remove BOM\n // TODO:\n // Other similar zero-width characters?\n /^\\uFEFF/,\n () => EMPTY\n ],\n\n // > Trailing spaces are ignored unless they are quoted with backslash (\"\\\")\n [\n // (a\\ ) -> (a )\n // (a ) -> (a)\n // (a ) -> (a)\n // (a \\ ) -> (a )\n /((?:\\\\\\\\)*?)(\\\\?\\s+)$/,\n (_, m1, m2) => m1 + (\n m2.indexOf('\\\\') === 0\n ? SPACE\n : EMPTY\n )\n ],\n\n // replace (\\ ) with ' '\n // (\\ ) -> ' '\n // (\\\\ ) -> '\\\\ '\n // (\\\\\\ ) -> '\\\\ '\n [\n /(\\\\+?)\\s/g,\n (_, m1) => {\n const {length} = m1\n return m1.slice(0, length - length % 2) + SPACE\n }\n ],\n\n // Escape metacharacters\n // which is written down by users but means special for regular expressions.\n\n // > There are 12 characters with special meanings:\n // > - the backslash \\,\n // > - the caret ^,\n // > - the dollar sign $,\n // > - the period or dot .,\n // > - the vertical bar or pipe symbol |,\n // > - the question mark ?,\n // > - the asterisk or star *,\n // > - the plus sign +,\n // > - the opening parenthesis (,\n // > - the closing parenthesis ),\n // > - and the opening square bracket [,\n // > - the opening curly brace {,\n // > These special characters are often called \"metacharacters\".\n [\n /[\\\\$.|*+(){^]/g,\n match => `\\\\${match}`\n ],\n\n [\n // > a question mark (?) matches a single character\n /(?!\\\\)\\?/g,\n () => '[^/]'\n ],\n\n // leading slash\n [\n\n // > A leading slash matches the beginning of the pathname.\n // > For example, \"/*.c\" matches \"cat-file.c\" but not \"mozilla-sha1/sha1.c\".\n // A leading slash matches the beginning of the pathname\n /^\\//,\n () => '^'\n ],\n\n // replace special metacharacter slash after the leading slash\n [\n /\\//g,\n () => '\\\\/'\n ],\n\n [\n // > A leading \"**\" followed by a slash means match in all directories.\n // > For example, \"**/foo\" matches file or directory \"foo\" anywhere,\n // > the same as pattern \"foo\".\n // > \"**/foo/bar\" matches file or directory \"bar\" anywhere that is directly\n // > under directory \"foo\".\n // Notice that the '*'s have been replaced as '\\\\*'\n /^\\^*\\\\\\*\\\\\\*\\\\\\//,\n\n // '**/foo' <-> 'foo'\n () => '^(?:.*\\\\/)?'\n ],\n\n // starting\n [\n // there will be no leading '/'\n // (which has been replaced by section \"leading slash\")\n // If starts with '**', adding a '^' to the regular expression also works\n /^(?=[^^])/,\n function startingReplacer () {\n // If has a slash `/` at the beginning or middle\n return !/\\/(?!$)/.test(this)\n // > Prior to 2.22.1\n // > If the pattern does not contain a slash /,\n // > Git treats it as a shell glob pattern\n // Actually, if there is only a trailing slash,\n // git also treats it as a shell glob pattern\n\n // After 2.22.1 (compatible but clearer)\n // > If there is a separator at the beginning or middle (or both)\n // > of the pattern, then the pattern is relative to the directory\n // > level of the particular .gitignore file itself.\n // > Otherwise the pattern may also match at any level below\n // > the .gitignore level.\n ? '(?:^|\\\\/)'\n\n // > Otherwise, Git treats the pattern as a shell glob suitable for\n // > consumption by fnmatch(3)\n : '^'\n }\n ],\n\n // two globstars\n [\n // Use lookahead assertions so that we could match more than one `'/**'`\n /\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,\n\n // Zero, one or several directories\n // should not use '*', or it will be replaced by the next replacer\n\n // Check if it is not the last `'/**'`\n (_, index, str) => index + 6 < str.length\n\n // case: /**/\n // > A slash followed by two consecutive asterisks then a slash matches\n // > zero or more directories.\n // > For example, \"a/**/b\" matches \"a/b\", \"a/x/b\", \"a/x/y/b\" and so on.\n // '/**/'\n ? '(?:\\\\/[^\\\\/]+)*'\n\n // case: /**\n // > A trailing `\"/**\"` matches everything inside.\n\n // #21: everything inside but it should not include the current folder\n : '\\\\/.+'\n ],\n\n // normal intermediate wildcards\n [\n // Never replace escaped '*'\n // ignore rule '\\*' will match the path '*'\n\n // 'abc.*/' -> go\n // 'abc.*' -> skip this rule,\n // coz trailing single wildcard will be handed by [trailing wildcard]\n /(^|[^\\\\]+)(\\\\\\*)+(?=.+)/g,\n\n // '*.js' matches '.js'\n // '*.js' doesn't match 'abc'\n (_, p1, p2) => {\n // 1.\n // > An asterisk \"*\" matches anything except a slash.\n // 2.\n // > Other consecutive asterisks are considered regular asterisks\n // > and will match according to the previous rules.\n const unescaped = p2.replace(/\\\\\\*/g, '[^\\\\/]*')\n return p1 + unescaped\n }\n ],\n\n [\n // unescape, revert step 3 except for back slash\n // For example, if a user escape a '\\\\*',\n // after step 3, the result will be '\\\\\\\\\\\\*'\n /\\\\\\\\\\\\(?=[$.|*+(){^])/g,\n () => ESCAPE\n ],\n\n [\n // '\\\\\\\\' -> '\\\\'\n /\\\\\\\\/g,\n () => ESCAPE\n ],\n\n [\n // > The range notation, e.g. [a-zA-Z],\n // > can be used to match one of the characters in a range.\n\n // `\\` is escaped by step 3\n /(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g,\n (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE\n // '\\\\[bar]' -> '\\\\\\\\[bar\\\\]'\n ? `\\\\[${range}${cleanRangeBackSlash(endEscape)}${close}`\n : close === ']'\n ? endEscape.length % 2 === 0\n // A normal case, and it is a range notation\n // '[bar]'\n // '[bar\\\\\\\\]'\n ? `[${sanitizeRange(range)}${endEscape}]`\n // Invalid range notaton\n // '[bar\\\\]' -> '[bar\\\\\\\\]'\n : '[]'\n : '[]'\n ],\n\n // ending\n [\n // 'js' will not match 'js.'\n // 'ab' will not match 'abc'\n /(?:[^*])$/,\n\n // WTF!\n // https://git-scm.com/docs/gitignore\n // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1)\n // which re-fixes #24, #38\n\n // > If there is a separator at the end of the pattern then the pattern\n // > will only match directories, otherwise the pattern can match both\n // > files and directories.\n\n // 'js*' will not match 'a.js'\n // 'js/' will not match 'a.js'\n // 'js' will match 'a.js' and 'a.js/'\n match => /\\/$/.test(match)\n // foo/ will not match 'foo'\n ? `${match}$`\n // foo matches 'foo' and 'foo/'\n : `${match}(?=$|\\\\/$)`\n ],\n\n // trailing wildcard\n [\n /(\\^|\\\\\\/)?\\\\\\*$/,\n (_, p1) => {\n const prefix = p1\n // '\\^':\n // '/*' does not match EMPTY\n // '/*' does not match everything\n\n // '\\\\\\/':\n // 'abc/*' does not match 'abc/'\n ? `${p1}[^/]+`\n\n // 'a*' matches 'a'\n // 'a*' matches 'aa'\n : '[^/]*'\n\n return `${prefix}(?=$|\\\\/$)`\n }\n ],\n]\n\n// A simple cache, because an ignore rule only has only one certain meaning\nconst regexCache = Object.create(null)\n\n// @param {pattern}\nconst makeRegex = (pattern, ignoreCase) => {\n let source = regexCache[pattern]\n\n if (!source) {\n source = REPLACERS.reduce(\n (prev, [matcher, replacer]) =>\n prev.replace(matcher, replacer.bind(pattern)),\n pattern\n )\n regexCache[pattern] = source\n }\n\n return ignoreCase\n ? new RegExp(source, 'i')\n : new RegExp(source)\n}\n\nconst isString = subject => typeof subject === 'string'\n\n// > A blank line matches no files, so it can serve as a separator for readability.\nconst checkPattern = pattern => pattern\n && isString(pattern)\n && !REGEX_TEST_BLANK_LINE.test(pattern)\n && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern)\n\n // > A line starting with # serves as a comment.\n && pattern.indexOf('#') !== 0\n\nconst splitPattern = pattern => pattern.split(REGEX_SPLITALL_CRLF)\n\nclass IgnoreRule {\n constructor (\n origin,\n pattern,\n negative,\n regex\n ) {\n this.origin = origin\n this.pattern = pattern\n this.negative = negative\n this.regex = regex\n }\n}\n\nconst createRule = (pattern, ignoreCase) => {\n const origin = pattern\n let negative = false\n\n // > An optional prefix \"!\" which negates the pattern;\n if (pattern.indexOf('!') === 0) {\n negative = true\n pattern = pattern.substr(1)\n }\n\n pattern = pattern\n // > Put a backslash (\"\\\") in front of the first \"!\" for patterns that\n // > begin with a literal \"!\", for example, `\"\\!important!.txt\"`.\n .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!')\n // > Put a backslash (\"\\\") in front of the first hash for patterns that\n // > begin with a hash.\n .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#')\n\n const regex = makeRegex(pattern, ignoreCase)\n\n return new IgnoreRule(\n origin,\n pattern,\n negative,\n regex\n )\n}\n\nconst throwError = (message, Ctor) => {\n throw new Ctor(message)\n}\n\nconst checkPath = (path, originalPath, doThrow) => {\n if (!isString(path)) {\n return doThrow(\n `path must be a string, but got \\`${originalPath}\\``,\n TypeError\n )\n }\n\n // We don't know if we should ignore EMPTY, so throw\n if (!path) {\n return doThrow(`path must not be empty`, TypeError)\n }\n\n // Check if it is a relative path\n if (checkPath.isNotRelative(path)) {\n const r = '`path.relative()`d'\n return doThrow(\n `path should be a ${r} string, but got \"${originalPath}\"`,\n RangeError\n )\n }\n\n return true\n}\n\nconst isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path)\n\ncheckPath.isNotRelative = isNotRelative\ncheckPath.convert = p => p\n\nclass Ignore {\n constructor ({\n ignorecase = true,\n ignoreCase = ignorecase,\n allowRelativePaths = false\n } = {}) {\n define(this, KEY_IGNORE, true)\n\n this._rules = []\n this._ignoreCase = ignoreCase\n this._allowRelativePaths = allowRelativePaths\n this._initCache()\n }\n\n _initCache () {\n this._ignoreCache = Object.create(null)\n this._testCache = Object.create(null)\n }\n\n _addPattern (pattern) {\n // #32\n if (pattern && pattern[KEY_IGNORE]) {\n this._rules = this._rules.concat(pattern._rules)\n this._added = true\n return\n }\n\n if (checkPattern(pattern)) {\n const rule = createRule(pattern, this._ignoreCase)\n this._added = true\n this._rules.push(rule)\n }\n }\n\n // @param {Array<string> | string | Ignore} pattern\n add (pattern) {\n this._added = false\n\n makeArray(\n isString(pattern)\n ? splitPattern(pattern)\n : pattern\n ).forEach(this._addPattern, this)\n\n // Some rules have just added to the ignore,\n // making the behavior changed.\n if (this._added) {\n this._initCache()\n }\n\n return this\n }\n\n // legacy\n addPattern (pattern) {\n return this.add(pattern)\n }\n\n // | ignored : unignored\n // negative | 0:0 | 0:1 | 1:0 | 1:1\n // -------- | ------- | ------- | ------- | --------\n // 0 | TEST | TEST | SKIP | X\n // 1 | TESTIF | SKIP | TEST | X\n\n // - SKIP: always skip\n // - TEST: always test\n // - TESTIF: only test if checkUnignored\n // - X: that never happen\n\n // @param {boolean} whether should check if the path is unignored,\n // setting `checkUnignored` to `false` could reduce additional\n // path matching.\n\n // @returns {TestResult} true if a file is ignored\n _testOne (path, checkUnignored) {\n let ignored = false\n let unignored = false\n\n this._rules.forEach(rule => {\n const {negative} = rule\n if (\n unignored === negative && ignored !== unignored\n || negative && !ignored && !unignored && !checkUnignored\n ) {\n return\n }\n\n const matched = rule.regex.test(path)\n\n if (matched) {\n ignored = !negative\n unignored = negative\n }\n })\n\n return {\n ignored,\n unignored\n }\n }\n\n // @returns {TestResult}\n _test (originalPath, cache, checkUnignored, slices) {\n const path = originalPath\n // Supports nullable path\n && checkPath.convert(originalPath)\n\n checkPath(\n path,\n originalPath,\n this._allowRelativePaths\n ? RETURN_FALSE\n : throwError\n )\n\n return this._t(path, cache, checkUnignored, slices)\n }\n\n _t (path, cache, checkUnignored, slices) {\n if (path in cache) {\n return cache[path]\n }\n\n if (!slices) {\n // path/to/a.js\n // ['path', 'to', 'a.js']\n slices = path.split(SLASH)\n }\n\n slices.pop()\n\n // If the path has no parent directory, just test it\n if (!slices.length) {\n return cache[path] = this._testOne(path, checkUnignored)\n }\n\n const parent = this._t(\n slices.join(SLASH) + SLASH,\n cache,\n checkUnignored,\n slices\n )\n\n // If the path contains a parent directory, check the parent first\n return cache[path] = parent.ignored\n // > It is not possible to re-include a file if a parent directory of\n // > that file is excluded.\n ? parent\n : this._testOne(path, checkUnignored)\n }\n\n ignores (path) {\n return this._test(path, this._ignoreCache, false).ignored\n }\n\n createFilter () {\n return path => !this.ignores(path)\n }\n\n filter (paths) {\n return makeArray(paths).filter(this.createFilter())\n }\n\n // @returns {TestResult}\n test (path) {\n return this._test(path, this._testCache, true)\n }\n}\n\nconst factory = options => new Ignore(options)\n\nconst isPathValid = path =>\n checkPath(path && checkPath.convert(path), path, RETURN_FALSE)\n\nfactory.isPathValid = isPathValid\n\n// Fixes typescript\nfactory.default = factory\n\nmodule.exports = factory\n\n// Windows\n// --------------------------------------------------------------\n/* istanbul ignore if */\nif (\n // Detect `process` so that it can run in browsers.\n typeof process !== 'undefined'\n && (\n process.env && process.env.IGNORE_TEST_WIN32\n || process.platform === 'win32'\n )\n) {\n /* eslint no-control-regex: \"off\" */\n const makePosix = str => /^\\\\\\\\\\?\\\\/.test(str)\n || /[\"<>|\\u0000-\\u001F]+/u.test(str)\n ? str\n : str.replace(/\\\\/g, '/')\n\n checkPath.convert = makePosix\n\n // 'C:\\\\foo' <- 'C:\\\\foo' has been converted to 'C:/'\n // 'd:\\\\foo'\n const REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\\//i\n checkPath.isNotRelative = path =>\n REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path)\n || isNotRelative(path)\n}\n","import { type Message } from \"../message\";\nimport { type Result } from \"../reporter\";\nimport { type Formatter } from \"./formatter\";\n\nconst entities: Record<string, string> = {\n\t\">\": \">\",\n\t\"<\": \"<\",\n\t\"'\": \"'\",\n\t'\"': \""\",\n\t\"&\": \"&\",\n};\n\nfunction xmlescape(src: string | number): string {\n\treturn src.toString().replace(/[><'\"&]/g, (match: string) => {\n\t\treturn entities[match];\n\t});\n}\n\nfunction getMessageType(message: Message): \"error\" | \"warning\" {\n\tswitch (message.severity) {\n\t\tcase 2:\n\t\t\treturn \"error\";\n\t\tcase 1:\n\t\t\treturn \"warning\";\n\t\tdefault:\n\t\t\treturn \"error\";\n\t}\n}\n\nfunction checkstyleFormatter(results: Result[]): string {\n\tlet output = \"\";\n\n\toutput += `<?xml version=\"1.0\" encoding=\"utf-8\"?>\\n`;\n\toutput += `<checkstyle version=\"4.3\">\\n`;\n\n\tresults.forEach((result) => {\n\t\tconst messages = result.messages;\n\n\t\toutput += ` <file name=\"${xmlescape(result.filePath)}\">\\n`;\n\n\t\tmessages.forEach((message) => {\n\t\t\tconst ruleId = xmlescape(`htmlvalidate.rules.${message.ruleId}`);\n\t\t\toutput += \" \";\n\t\t\toutput += [\n\t\t\t\t`<error line=\"${xmlescape(message.line)}\"`,\n\t\t\t\t`column=\"${xmlescape(message.column)}\"`,\n\t\t\t\t`severity=\"${xmlescape(getMessageType(message))}\"`,\n\t\t\t\t`message=\"${xmlescape(message.message)} (${message.ruleId})\"`,\n\t\t\t\t`source=\"${ruleId}\" />`,\n\t\t\t].join(\" \");\n\t\t\toutput += \"\\n\";\n\t\t});\n\n\t\toutput += \" </file>\\n\";\n\t});\n\n\toutput += \"</checkstyle>\\n\";\n\n\treturn output;\n}\n\nconst formatter: Formatter = checkstyleFormatter;\nexport default formatter;\n","import kleur from \"kleur\";\nimport { type Message } from \"../message\";\nimport { type Result } from \"../reporter\";\n\ninterface Location {\n\tline: number;\n\tcolumn: number;\n}\n\ninterface NodeLocation {\n\tend?: Location;\n\tstart: Location;\n}\n\nexport interface CodeframeOptions {\n\tshowLink: boolean;\n\tshowSummary: boolean;\n\tshowSelector: boolean;\n}\n\nconst defaults: CodeframeOptions = {\n\tshowLink: true,\n\tshowSummary: true,\n\tshowSelector: false,\n};\n\n/**\n * RegExp to test for newlines in terminal.\n */\n\nconst NEWLINE = /\\r\\n|[\\n\\r\\u2028\\u2029]/;\n\n/**\n * Extract what lines should be marked and highlighted.\n */\n\ntype MarkerLines = Record<number, true | [number, number] | undefined>;\n\nfunction getMarkerLines(\n\tloc: NodeLocation,\n\tsource: string[],\n): {\n\tstart: number;\n\tend: number;\n\tmarkerLines: MarkerLines;\n} {\n\tconst startLoc: Location = {\n\t\t...loc.start,\n\t};\n\tconst endLoc: Location = {\n\t\t...startLoc,\n\t\t...loc.end,\n\t};\n\tconst linesAbove = 2;\n\tconst linesBelow = 3;\n\tconst startLine = startLoc.line;\n\tconst startColumn = startLoc.column;\n\tconst endLine = endLoc.line;\n\tconst endColumn = endLoc.column;\n\n\tconst start = Math.max(startLine - (linesAbove + 1), 0);\n\tconst end = Math.min(source.length, endLine + linesBelow);\n\tconst lineDiff = endLine - startLine;\n\tconst markerLines: MarkerLines = {};\n\n\tif (lineDiff) {\n\t\tfor (let i = 0; i <= lineDiff; i++) {\n\t\t\tconst lineNumber = i + startLine;\n\n\t\t\tif (!startColumn) {\n\t\t\t\tmarkerLines[lineNumber] = true;\n\t\t\t} else if (i === 0) {\n\t\t\t\tconst sourceLength = source[lineNumber - 1].length;\n\n\t\t\t\tmarkerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1];\n\t\t\t} else if (i === lineDiff) {\n\t\t\t\tmarkerLines[lineNumber] = [0, endColumn];\n\t\t\t} else {\n\t\t\t\tconst sourceLength = source[lineNumber - i].length;\n\n\t\t\t\tmarkerLines[lineNumber] = [0, sourceLength];\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (startColumn === endColumn) {\n\t\t\tif (startColumn) {\n\t\t\t\tmarkerLines[startLine] = [startColumn, 0];\n\t\t\t} else {\n\t\t\t\tmarkerLines[startLine] = true;\n\t\t\t}\n\t\t} else {\n\t\t\tmarkerLines[startLine] = [startColumn, endColumn - startColumn];\n\t\t}\n\t}\n\n\treturn { start, end, markerLines };\n}\n\nexport function codeFrameColumns(rawLines: string, loc: NodeLocation): string {\n\tconst lines = rawLines.split(NEWLINE);\n\tconst { start, end, markerLines } = getMarkerLines(loc, lines);\n\tconst numberMaxWidth = String(end).length;\n\n\treturn rawLines\n\t\t.split(NEWLINE, end)\n\t\t.slice(start, end)\n\t\t.map((line, index) => {\n\t\t\tconst number = start + 1 + index;\n\t\t\tconst paddedNumber = ` ${String(number)}`.slice(-numberMaxWidth);\n\t\t\tconst gutter = ` ${paddedNumber} |`;\n\t\t\tconst hasMarker = markerLines[number];\n\t\t\tif (hasMarker) {\n\t\t\t\tlet markerLine = \"\";\n\t\t\t\tif (Array.isArray(hasMarker)) {\n\t\t\t\t\tconst markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\\t]/g, \" \");\n\t\t\t\t\tconst numberOfMarkers = hasMarker[1] || 1;\n\n\t\t\t\t\tmarkerLine = [\n\t\t\t\t\t\t\"\\n \",\n\t\t\t\t\t\tgutter.replace(/\\d/g, \" \"),\n\t\t\t\t\t\t\" \",\n\t\t\t\t\t\tmarkerSpacing,\n\t\t\t\t\t\t\"^\".repeat(numberOfMarkers),\n\t\t\t\t\t].join(\"\");\n\t\t\t\t}\n\t\t\t\treturn [\">\", gutter, line.length > 0 ? ` ${line}` : \"\", markerLine].join(\"\");\n\t\t\t} else {\n\t\t\t\treturn [\" \", gutter, line.length > 0 ? ` ${line}` : \"\"].join(\"\");\n\t\t\t}\n\t\t})\n\t\t.join(\"\\n\");\n}\n\n/**\n * Codeframe formatter based on ESLint codeframe.\n */\n\n/**\n * Given a word and a count, append an s if count is not one.\n * @param word - A word in its singular form.\n * @param count - A number controlling whether word should be pluralized.\n * @returns The original word with an s on the end if count is not one.\n */\nfunction pluralize(word: string, count: number): string {\n\treturn count === 1 ? word : `${word}s`;\n}\n\n/**\n * Gets a formatted relative file path from an absolute path and a line/column in the file.\n * @param filePath - The absolute file path to format.\n * @param line - The line from the file to use for formatting.\n * @param column -The column from the file to use for formatting.\n * @returns The formatted file path.\n */\nfunction formatFilePath(filePath: string, line: number, column: number): string {\n\t/* istanbul ignore next: safety check from original implementation */\n\tif (line && column) {\n\t\tfilePath += `:${String(line)}:${String(column)}`;\n\t}\n\n\treturn kleur.green(filePath);\n}\n\nfunction getStartLocation(message: Message): Location {\n\treturn {\n\t\tline: message.line,\n\t\tcolumn: message.column,\n\t};\n}\n\nfunction getEndLocation(message: Message, source: string): Location {\n\tlet line = message.line;\n\tlet column = message.column;\n\tfor (let i = 0; i < message.size; i++) {\n\t\tif (source.charAt(message.offset + i) === \"\\n\") {\n\t\t\tline++;\n\t\t\tcolumn = 0;\n\t\t} else {\n\t\t\tcolumn++;\n\t\t}\n\t}\n\treturn { line, column };\n}\n\n/**\n * Gets the formatted output for a given message.\n * @param message - The object that represents this message.\n * @param parentResult - The result object that this message belongs to.\n * @returns The formatted output.\n */\nfunction formatMessage(message: Message, parentResult: Result, options: CodeframeOptions): string {\n\tconst type = message.severity === 2 ? kleur.red(\"error\") : kleur.yellow(\"warning\");\n\tconst msg = kleur.bold(message.message.replace(/([^ ])\\.$/, \"$1\"));\n\tconst ruleId = kleur.dim(`(${message.ruleId})`);\n\tconst filePath = formatFilePath(parentResult.filePath, message.line, message.column);\n\tconst sourceCode = parentResult.source;\n\n\t/* istanbul ignore next: safety check from original implementation */\n\tconst firstLine = [\n\t\t`${type}:`,\n\t\tmsg,\n\t\truleId ? ruleId : \"\",\n\t\tsourceCode ? `at ${filePath}:` : `at ${filePath}`,\n\t]\n\t\t.filter(String)\n\t\t.join(\" \");\n\n\tconst result = [firstLine];\n\n\t/* istanbul ignore next: safety check from original implementation */\n\tif (sourceCode) {\n\t\tconst output = codeFrameColumns(sourceCode, {\n\t\t\tstart: getStartLocation(message),\n\t\t\tend: getEndLocation(message, sourceCode),\n\t\t});\n\t\tresult.push(output);\n\t}\n\n\tif (options.showSelector) {\n\t\tresult.push(`${kleur.bold(\"Selector:\")} ${message.selector ?? \"-\"}`);\n\t}\n\n\tif (options.showLink && message.ruleUrl) {\n\t\tresult.push(`${kleur.bold(\"Details:\")} ${message.ruleUrl}`);\n\t}\n\n\treturn result.join(\"\\n\");\n}\n\n/**\n * Gets the formatted output summary for a given number of errors and warnings.\n * @param errors - The number of errors.\n * @param warnings - The number of warnings.\n * @returns The formatted output summary.\n */\nfunction formatSummary(errors: number, warnings: number): string {\n\tconst summaryColor = errors > 0 ? \"red\" : \"yellow\";\n\tconst summary = [];\n\n\tif (errors > 0) {\n\t\tsummary.push(`${String(errors)} ${pluralize(\"error\", errors)}`);\n\t}\n\n\tif (warnings > 0) {\n\t\tsummary.push(`${String(warnings)} ${pluralize(\"warning\", warnings)}`);\n\t}\n\n\treturn kleur[summaryColor]().bold(`${summary.join(\" and \")} found.`);\n}\n\nexport function codeframe(results: Result[], options?: Partial<CodeframeOptions>): string {\n\tconst merged: CodeframeOptions = { ...defaults, ...options };\n\n\tlet errors = 0;\n\tlet warnings = 0;\n\n\tconst resultsWithMessages = results.filter((result) => result.messages.length > 0);\n\n\tlet output = resultsWithMessages\n\t\t.reduce<string[]>((resultsOutput, result) => {\n\t\t\tconst messages = result.messages.map((message) => {\n\t\t\t\treturn `${formatMessage(message, result, merged)}\\n\\n`;\n\t\t\t});\n\n\t\t\terrors += result.errorCount;\n\t\t\twarnings += result.warningCount;\n\n\t\t\treturn resultsOutput.concat(messages);\n\t\t}, [])\n\t\t.join(\"\\n\");\n\n\tif (merged.showSummary) {\n\t\toutput += \"\\n\";\n\t\toutput += formatSummary(errors, warnings);\n\t\toutput += \"\\n\";\n\t}\n\n\treturn errors + warnings > 0 ? output : \"\";\n}\n","import { type Result } from \"../reporter\";\nimport { type Formatter } from \"./formatter\";\n\nfunction jsonFormatter(results: Result[]): string {\n\treturn JSON.stringify(results);\n}\n\nconst formatter: Formatter = jsonFormatter;\nexport default formatter;\n","import { stylish as stylishImpl } from \"@html-validate/stylish\";\nimport kleur from \"kleur\";\nimport { type Result } from \"../reporter\";\nimport { type Formatter } from \"./formatter\";\n\nfunction linkSummary(results: Result[]): string {\n\tconst urls = results.reduce<string[]>((result, it): string[] => {\n\t\tconst urls: string[] = it.messages\n\t\t\t.map((error) => error.ruleUrl)\n\t\t\t.filter((error): error is string => Boolean(error));\n\t\treturn [...result, ...urls];\n\t}, []);\n\n\tconst unique = Array.from(new Set(urls));\n\tif (unique.length === 0) {\n\t\treturn \"\";\n\t}\n\n\tconst lines = unique.map((url) => ` ${url}\\n`);\n\treturn `\\n${kleur.bold(\"More information\")}:\\n${lines.join(\"\")}\\n`;\n}\n\nfunction stylish(results: Result[]): string {\n\tconst errors = stylishImpl(\n\t\tresults.map((it) => ({\n\t\t\t...it,\n\t\t\tfixableErrorCount: 0,\n\t\t\tfixableWarningCount: 0,\n\t\t})),\n\t);\n\tconst links = linkSummary(results);\n\treturn `${errors}${links}`;\n}\n\nconst formatter: Formatter = stylish;\nexport default formatter;\n","import { type Result } from \"../reporter\";\nimport { type Formatter } from \"./formatter\";\n\nfunction textFormatter(results: Result[]): string {\n\tlet output = \"\";\n\tlet total = 0;\n\n\tresults.forEach((result) => {\n\t\tconst messages = result.messages;\n\n\t\tif (messages.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\ttotal += messages.length;\n\n\t\toutput += messages\n\t\t\t.map((message) => {\n\t\t\t\tlet messageType;\n\n\t\t\t\tif (message.severity === 2) {\n\t\t\t\t\tmessageType = \"error\";\n\t\t\t\t} else {\n\t\t\t\t\tmessageType = \"warning\";\n\t\t\t\t}\n\n\t\t\t\tconst line = String(message.line);\n\t\t\t\tconst column = String(message.column);\n\t\t\t\tconst location = `${result.filePath}:${line}:${column}`;\n\t\t\t\treturn `${location}: ${messageType} [${message.ruleId}] ${message.message}\\n`;\n\t\t\t})\n\t\t\t.join(\"\");\n\t});\n\n\treturn total > 0 ? output : \"\";\n}\n\nconst formatter: Formatter = textFormatter;\nexport default formatter;\n","import checkstyle from \"./checkstyle\";\nimport { codeframe } from \"./codeframe\";\nimport json from \"./json\";\nimport stylish from \"./stylish\";\nimport text from \"./text\";\nimport { type Formatter } from \"./formatter\";\n\nexport { type Formatter } from \"./formatter\";\n\n/**\n * @public\n */\nexport interface AvailableFormatters {\n\tcheckstyle: Formatter;\n\tcodeframe: Formatter;\n\tjson: Formatter;\n\tstylish: Formatter;\n\ttext: Formatter;\n}\n\nconst availableFormatters: AvailableFormatters & Record<string, Formatter> = {\n\tcheckstyle,\n\tcodeframe,\n\tjson,\n\tstylish,\n\ttext,\n};\n\n/**\n * Get formatter function by name.\n *\n * @public\n * @param name - Name of formatter.\n * @returns Formatter function or null if it doesn't exist.\n */\nexport function getFormatter(name: keyof AvailableFormatters): Formatter;\n\n/**\n * @public\n */\nexport function getFormatter(name: string): Formatter | null;\n\nexport function getFormatter(name: string): Formatter | null {\n\treturn availableFormatters[name] ?? null;\n}\n","import semver from \"semver\";\n\n/**\n * Options for {@link compatibilityCheck}.\n *\n * @public\n */\nexport interface CompatibilityOptions {\n\t/** If `true` nothing no output will be generated on console. Default: `false` */\n\tsilent: boolean;\n\n\t/**\n\t * @internal\n\t * Use this version number instead of running version. Default: running version.\n\t */\n\tversion: string;\n\n\t/** Use custom logging callback. Default: `console.error` */\n\tlogger(this: void, message: string): void;\n}\n\n/**\n * @internal\n */\nexport function compatibilityCheckImpl(\n\tname: string,\n\tdeclared: string,\n\toptions: CompatibilityOptions,\n): boolean {\n\tconst { silent, version: current, logger } = options;\n\tconst valid = semver.satisfies(current, declared);\n\tif (valid || silent) {\n\t\treturn valid;\n\t}\n\n\tconst text = [\n\t\t\"-----------------------------------------------------------------------------------------------------\",\n\t\t`${name} requires html-validate version \"${declared}\" but current installed version is ${current}`,\n\t\t\"This is not a supported configuration. Please install a supported version before reporting bugs.\",\n\t\t\"-----------------------------------------------------------------------------------------------------\",\n\t].join(\"\\n\");\n\n\tlogger(text);\n\n\treturn false;\n}\n"],"names":["betterAjvErrors","TextContent","overwriteMerge","deepmerge","tagName","Ajv","value","State","ContentModel","NodeType","Combinator","factory","splitPattern","pseudoClassFunction","NodeClosed","Severity","node","TextClassification","ajv","defaults","getDescription","TokenType","parseStyle","reportMessage","toArray","naturalJoin","getRuleDescription","isCategory","formatMessage","hasImgAltText","isRelevant","existing","selectors","TextContentEnum","regexp","entities","entityLocation","message","context","html5","bundledRules","DoctypeHtml","NoDupId","UnrecognizedCharRef","WCAG","rules","config","a11y","browser","document","prettier","recommended","standard","filename","source","fs","schema","bundledElements","Presets","event","reports","location","_","formatter","kleur","urls","stylishImpl","checkstyle","json","stylish","text","semver"],"mappings":"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","x_google_ignoreList":[0,178]}
|