html-validate 10.13.1 → 10.15.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 -0
- package/dist/cjs/browser.js.map +1 -1
- package/dist/cjs/cli.js +50 -4
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/core-browser.js +60 -11
- package/dist/cjs/core-browser.js.map +1 -1
- package/dist/cjs/core-nodejs.js +60 -11
- package/dist/cjs/core-nodejs.js.map +1 -1
- package/dist/cjs/core.js +420 -198
- package/dist/cjs/core.js.map +1 -1
- package/dist/cjs/elements.js +71 -4
- package/dist/cjs/elements.js.map +1 -1
- package/dist/cjs/html-validate.js +4 -1
- package/dist/cjs/html-validate.js.map +1 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/tsdoc-metadata.json +1 -1
- package/dist/esm/browser.js +1 -1
- package/dist/esm/cli.js +51 -5
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/core-browser.js +61 -12
- package/dist/esm/core-browser.js.map +1 -1
- package/dist/esm/core-nodejs.js +61 -12
- package/dist/esm/core-nodejs.js.map +1 -1
- package/dist/esm/core.js +420 -199
- package/dist/esm/core.js.map +1 -1
- package/dist/esm/elements.js +71 -4
- package/dist/esm/elements.js.map +1 -1
- package/dist/esm/html-validate.js +5 -2
- package/dist/esm/html-validate.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/matcher-utils.js +1 -1
- package/dist/esm/matchers.js +1 -1
- package/dist/tsdoc-metadata.json +1 -1
- package/dist/types/browser.d.ts +42 -0
- package/dist/types/index.d.ts +42 -0
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@ import fs from 'node:fs';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import kleur from 'kleur';
|
|
4
4
|
import minimist from 'minimist';
|
|
5
|
-
import {
|
|
5
|
+
import { a5 as name, v as version, z as SchemaValidationError, Q as isUserError, a6 as bugs } from './core.js';
|
|
6
6
|
import { M as Mode, m as modeToFlag, C as CLI, h as haveImportMetaResolve, I as ImportResolveMissingError, d as dump, p as printConfig, i as init, l as lint, a as handleSchemaValidationError } from './cli.js';
|
|
7
7
|
import 'ajv';
|
|
8
8
|
import './elements.js';
|
|
@@ -109,6 +109,7 @@ const argv = minimist(process.argv.slice(2), {
|
|
|
109
109
|
"dump-tree",
|
|
110
110
|
"h",
|
|
111
111
|
"help",
|
|
112
|
+
"performance",
|
|
112
113
|
"print-config",
|
|
113
114
|
"stdin",
|
|
114
115
|
"version"
|
|
@@ -160,6 +161,7 @@ Debugging options:
|
|
|
160
161
|
--dump-source output post-transformed source data.
|
|
161
162
|
--dump-tokens output tokens from lexing stage.
|
|
162
163
|
--dump-tree output nodes from the dom tree.
|
|
164
|
+
--performance output performance data after validation.
|
|
163
165
|
|
|
164
166
|
Formatters:
|
|
165
167
|
|
|
@@ -233,9 +235,10 @@ async function run() {
|
|
|
233
235
|
let success;
|
|
234
236
|
switch (mode) {
|
|
235
237
|
case Mode.LINT: {
|
|
236
|
-
success = await lint(htmlvalidate, process.stdout, files, {
|
|
238
|
+
success = await lint(htmlvalidate, process.stdout, process.stderr, files, {
|
|
237
239
|
formatter,
|
|
238
240
|
maxWarnings,
|
|
241
|
+
performance: argv.performance,
|
|
239
242
|
stdinFilename: argv["stdin-filename"] ?? false
|
|
240
243
|
});
|
|
241
244
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-validate.js","sources":["../../src/cli/html-validate.ts"],"sourcesContent":["/* eslint-disable no-console, n/no-process-exit -- as expected from a cli app */\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport kleur from \"kleur\";\nimport minimist from \"minimist\";\nimport { type UserErrorData, SchemaValidationError, isUserError } from \"..\";\nimport { bugs as pkgBugs, name, version } from \"../generated/package-json\";\nimport { dump } from \"./actions/dump\";\nimport { init } from \"./actions/init\";\nimport { lint } from \"./actions/lint\";\nimport { printConfig } from \"./actions/print-config\";\nimport { CLI } from \"./cli\";\nimport { ImportResolveMissingError, handleSchemaValidationError } from \"./errors\";\nimport { haveImportMetaResolve } from \"./have-import-meta-resolve\";\nimport { Mode, modeToFlag } from \"./mode\";\n\ninterface ParsedArgs {\n\tconfig?: string;\n\t\"dump-events\": boolean;\n\t\"dump-source\": boolean;\n\t\"dump-tokens\": boolean;\n\t\"dump-tree\": boolean;\n\text: string;\n\tformatter: string;\n\thelp: boolean;\n\tinit: boolean;\n\t\"max-warnings\"?: string;\n\tpreset?: string;\n\t\"print-config\": boolean;\n\trule?: string;\n\tstdin: boolean;\n\t\"stdin-filename\"?: string;\n\tversion: boolean;\n}\n\nfunction getMode(argv: Record<string, unknown>): Mode {\n\tif (argv[\"init\"]) {\n\t\treturn Mode.INIT;\n\t}\n\n\tif (argv[\"dump-events\"]) {\n\t\treturn Mode.DUMP_EVENTS;\n\t}\n\n\tif (argv[\"dump-source\"]) {\n\t\treturn Mode.DUMP_SOURCE;\n\t}\n\n\tif (argv[\"dump-tokens\"]) {\n\t\treturn Mode.DUMP_TOKENS;\n\t}\n\n\tif (argv[\"dump-tree\"]) {\n\t\treturn Mode.DUMP_TREE;\n\t}\n\n\tif (argv[\"print-config\"]) {\n\t\treturn Mode.PRINT_CONFIG;\n\t}\n\n\treturn Mode.LINT;\n}\n\nfunction requiresFilename(mode: Mode): boolean {\n\tswitch (mode) {\n\t\tcase Mode.LINT:\n\t\t\treturn true;\n\t\tcase Mode.INIT:\n\t\t\treturn false;\n\t\tcase Mode.DUMP_EVENTS:\n\t\tcase Mode.DUMP_TOKENS:\n\t\tcase Mode.DUMP_TREE:\n\t\tcase Mode.DUMP_SOURCE:\n\t\tcase Mode.PRINT_CONFIG:\n\t\t\treturn true;\n\t}\n}\n\nfunction handleUserError(err: UserErrorData): void {\n\tconst formatted = err.prettyFormat();\n\tif (formatted) {\n\t\tconsole.error(); /* blank line */\n\t\tconsole.error(formatted);\n\t\treturn;\n\t}\n\n\tconsole.error(kleur.red(\"Caught exception:\"));\n\tconsole.group();\n\t{\n\t\tconsole.error(err.prettyFormat() ?? err);\n\t}\n\tconsole.groupEnd();\n}\n\nfunction handleUnknownError(err: unknown): void {\n\tconsole.error(kleur.red(\"Caught exception:\"));\n\tconsole.group();\n\t{\n\t\tconsole.error(err);\n\t}\n\tconsole.groupEnd();\n\tconst bugUrl = `${pkgBugs}?issuable_template=Bug`;\n\tconsole.error(kleur.red(`This is a bug in ${name}-${version}.`));\n\tconsole.error(\n\t\tkleur.red(\n\t\t\t[\n\t\t\t\t`Please file a bug at ${bugUrl}`,\n\t\t\t\t`and include this message in full and if possible the content of the`,\n\t\t\t\t`file being parsed (or a reduced testcase).`,\n\t\t\t].join(\"\\n\"),\n\t\t),\n\t);\n}\n\nconst argv = minimist<ParsedArgs>(process.argv.slice(2), {\n\tstring: [\n\t\t\"c\",\n\t\t\"config\",\n\t\t\"ext\",\n\t\t\"f\",\n\t\t\"formatter\",\n\t\t\"max-warnings\",\n\t\t\"p\",\n\t\t\"preset\",\n\t\t\"rule\",\n\t\t\"stdin-filename\",\n\t],\n\tboolean: [\n\t\t\"init\",\n\t\t\"dump-events\",\n\t\t\"dump-source\",\n\t\t\"dump-tokens\",\n\t\t\"dump-tree\",\n\t\t\"h\",\n\t\t\"help\",\n\t\t\"print-config\",\n\t\t\"stdin\",\n\t\t\"version\",\n\t],\n\talias: {\n\t\tc: \"config\",\n\t\tf: \"formatter\",\n\t\tp: \"preset\",\n\t\th: \"help\",\n\t},\n\tdefault: {\n\t\text: \"html\",\n\t\tformatter: \"stylish\",\n\t},\n\tunknown: (opt: string) => {\n\t\tif (opt.startsWith(\"-\")) {\n\t\t\tprocess.stderr.write(`unknown option ${opt}\\n`);\n\t\t\tprocess.exit(1);\n\t\t}\n\t\treturn true;\n\t},\n});\n\nfunction showUsage(): void {\n\tprocess.stdout.write(`${name}-${version}\nUsage: html-validate [OPTIONS] [FILENAME..] [DIR..]\n\nCommon options:\n --ext=STRING specify file extensions (commaseparated).\n -f, --formatter=FORMATTER specify the formatter to use.\n --max-warnings=INT number of warnings to trigger nonzero exit code\n -p, --preset=STRING configuration preset to use, use\n comma-separator for multiple presets. (default:\n \"recommended\")\n --rule=RULE:SEVERITY set additional rule, use comma separator for\n multiple.\n --stdin process markup from stdin.\n --stdin-filename=STRING specify filename to report when using stdin\n\nMiscellaneous:\n -c, --config=STRING use custom configuration file.\n --init initialize project with a new configuration\n --print-config output configuration for given file.\n -h, --help show help.\n --version show version.\n\nDebugging options:\n --dump-events output events during parsing.\n --dump-source output post-transformed source data.\n --dump-tokens output tokens from lexing stage.\n --dump-tree output nodes from the dom tree.\n\nFormatters:\n\nMultiple formatters can be specified with a comma-separated list,\ne.g. \"json,checkstyle\" to enable both.\n\nTo capture output to a file use \"formatter=/path/to/file\",\ne.g. \"checkstyle=dist/html-validate.xml\"\n`);\n}\n\nfunction showVersion(): void {\n\tprocess.stdout.write(`${name}-${version}\\n`);\n}\n\nif (argv.stdin) {\n\targv._.push(\"-\");\n}\n\nif (argv.version) {\n\tshowVersion();\n\tprocess.exit();\n}\n\nif (argv.help) {\n\tshowUsage();\n\tprocess.exit();\n}\n\nif (argv._.length === 0) {\n\tconst mode = getMode(argv);\n\tif (mode === Mode.LINT) {\n\t\tshowUsage();\n\t\tprocess.exit(0);\n\t} else if (requiresFilename(mode)) {\n\t\tconst flag = modeToFlag(mode);\n\t\tconsole.error(`\\`${flag}\\` requires a filename.`);\n\t\tprocess.exit(1);\n\t}\n}\n\n/* check that supplied config file exists before creating CLI */\nif (argv.config !== undefined) {\n\tconst checkPath = path.resolve(argv.config);\n\tif (!fs.existsSync(checkPath)) {\n\t\tconsole.error(`The file \"${argv.config}\" was not found.`);\n\t\tconsole.error(`The location this file was checked for at was: \"${checkPath}\"`);\n\t\tprocess.exit(1);\n\t}\n}\n\n/* eslint-disable-next-line complexity -- for now */\nasync function run(): Promise<void> {\n\tconst cli = new CLI({\n\t\tconfigFile: argv.config,\n\t\tpreset: argv.preset,\n\t\trules: argv.rule,\n\t});\n\tconst mode = getMode(argv);\n\tconst formatter = await cli.getFormatter(argv.formatter);\n\tconst maxWarnings = Number.parseInt(argv[\"max-warnings\"] ?? \"-1\", 10);\n\tconst htmlvalidate = await cli.getValidator();\n\n\t/* sanity check: ensure maxWarnings has a valid value */\n\tif (Number.isNaN(maxWarnings)) {\n\t\tconsole.error(`Invalid value \"${String(argv[\"max-warnings\"])}\" given to --max-warnings`);\n\t\tprocess.exit(1);\n\t}\n\n\t/* parse extensions (used when expanding directories) */\n\tconst extensions = argv.ext.split(\",\").map((cur: string) => {\n\t\treturn cur.startsWith(\".\") ? cur.slice(1) : cur;\n\t});\n\n\tconst files = await cli.expandFiles(argv._, { extensions });\n\tif (files.length === 0 && mode !== Mode.INIT) {\n\t\tconsole.error(\"No files matching patterns\", argv._);\n\t\tprocess.exit(1);\n\t}\n\n\ttry {\n\t\t/* istanbul ignore next -- not tested with unittests */\n\t\tif (!haveImportMetaResolve()) {\n\t\t\tthrow new ImportResolveMissingError();\n\t\t}\n\n\t\tlet success: boolean;\n\t\tswitch (mode) {\n\t\t\tcase Mode.LINT: {\n\t\t\t\tsuccess = await lint(htmlvalidate, process.stdout, files, {\n\t\t\t\t\tformatter,\n\t\t\t\t\tmaxWarnings,\n\t\t\t\t\tstdinFilename: argv[\"stdin-filename\"] ?? false,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Mode.INIT: {\n\t\t\t\tsuccess = await init(cli, process.stdout, { cwd: process.cwd() });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Mode.PRINT_CONFIG: {\n\t\t\t\tsuccess = await printConfig(htmlvalidate, process.stdout, files);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tsuccess = await dump(htmlvalidate, process.stdout, files, mode);\n\t\t\t}\n\t\t}\n\t\tprocess.exit(success ? 0 : 1);\n\t} catch (err) {\n\t\tif (err instanceof SchemaValidationError) {\n\t\t\thandleSchemaValidationError(console, err);\n\t\t} else if (isUserError(err)) {\n\t\t\thandleUserError(err);\n\t\t} else {\n\t\t\thandleUnknownError(err);\n\t\t}\n\t\tprocess.exit(1);\n\t}\n}\n\n/* eslint-disable-next-line unicorn/prefer-top-level-await -- technical debt, as long as we bundle and ship commonjs we cannot use TLA here */\nrun().catch((err: unknown) => {\n\tconsole.error(err);\n\tprocess.exit(1);\n});\n"],"names":["argv","pkgBugs"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAmCA,SAAS,QAAQA,KAAAA,EAAqC;AACrD,EAAA,IAAIA,KAAAA,CAAK,MAAM,CAAA,EAAG;AACjB,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACb;AAEA,EAAA,IAAIA,KAAAA,CAAK,aAAa,CAAA,EAAG;AACxB,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACb;AAEA,EAAA,IAAIA,KAAAA,CAAK,aAAa,CAAA,EAAG;AACxB,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACb;AAEA,EAAA,IAAIA,KAAAA,CAAK,aAAa,CAAA,EAAG;AACxB,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACb;AAEA,EAAA,IAAIA,KAAAA,CAAK,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACb;AAEA,EAAA,IAAIA,KAAAA,CAAK,cAAc,CAAA,EAAG;AACzB,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACb;AAEA,EAAA,OAAO,IAAA,CAAK,IAAA;AACb;AAEA,SAAS,iBAAiB,IAAA,EAAqB;AAC9C,EAAA,QAAQ,IAAA;AAAM,IACb,KAAK,IAAA,CAAK,IAAA;AACT,MAAA,OAAO,IAAA;AAAA,IACR,KAAK,IAAA,CAAK,IAAA;AACT,MAAA,OAAO,KAAA;AAAA,IACR,KAAK,IAAA,CAAK,WAAA;AAAA,IACV,KAAK,IAAA,CAAK,WAAA;AAAA,IACV,KAAK,IAAA,CAAK,SAAA;AAAA,IACV,KAAK,IAAA,CAAK,WAAA;AAAA,IACV,KAAK,IAAA,CAAK,YAAA;AACT,MAAA,OAAO,IAAA;AAAA;AAEV;AAEA,SAAS,gBAAgB,GAAA,EAA0B;AAClD,EAAA,MAAM,SAAA,GAAY,IAAI,YAAA,EAAa;AACnC,EAAA,IAAI,SAAA,EAAW;AACd,IAAA,OAAA,CAAQ,KAAA,EAAM;AACd,IAAA,OAAA,CAAQ,MAAM,SAAS,CAAA;AACvB,IAAA;AAAA,EACD;AAEA,EAAA,OAAA,CAAQ,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,mBAAmB,CAAC,CAAA;AAC5C,EAAA,OAAA,CAAQ,KAAA,EAAM;AACd,EAAA;AACC,IAAA,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,YAAA,EAAa,IAAK,GAAG,CAAA;AAAA,EACxC;AACA,EAAA,OAAA,CAAQ,QAAA,EAAS;AAClB;AAEA,SAAS,mBAAmB,GAAA,EAAoB;AAC/C,EAAA,OAAA,CAAQ,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,mBAAmB,CAAC,CAAA;AAC5C,EAAA,OAAA,CAAQ,KAAA,EAAM;AACd,EAAA;AACC,IAAA,OAAA,CAAQ,MAAM,GAAG,CAAA;AAAA,EAClB;AACA,EAAA,OAAA,CAAQ,QAAA,EAAS;AACjB,EAAA,MAAM,MAAA,GAAS,GAAGC,IAAO,CAAA,sBAAA,CAAA;AACzB,EAAA,OAAA,CAAQ,KAAA,CAAM,MAAM,GAAA,CAAI,CAAA,iBAAA,EAAoB,IAAI,CAAA,CAAA,EAAI,OAAO,GAAG,CAAC,CAAA;AAC/D,EAAA,OAAA,CAAQ,KAAA;AAAA,IACP,KAAA,CAAM,GAAA;AAAA,MACL;AAAA,QACC,wBAAwB,MAAM,CAAA,CAAA;AAAA,QAC9B,CAAA,mEAAA,CAAA;AAAA,QACA,CAAA,0CAAA;AAAA,OACD,CAAE,KAAK,IAAI;AAAA;AACZ,GACD;AACD;AAEA,MAAM,OAAO,QAAA,CAAqB,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,EAAG;AAAA,EACxD,MAAA,EAAQ;AAAA,IACP,GAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAA;AAAA,IACA,GAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACD;AAAA,EACA,OAAA,EAAS;AAAA,IACR,MAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,GAAA;AAAA,IACA,MAAA;AAAA,IACA,cAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACD;AAAA,EACA,KAAA,EAAO;AAAA,IACN,CAAA,EAAG,QAAA;AAAA,IACH,CAAA,EAAG,WAAA;AAAA,IACH,CAAA,EAAG,QAAA;AAAA,IACH,CAAA,EAAG;AAAA,GACJ;AAAA,EACA,OAAA,EAAS;AAAA,IACR,GAAA,EAAK,MAAA;AAAA,IACL,SAAA,EAAW;AAAA,GACZ;AAAA,EACA,OAAA,EAAS,CAAC,GAAA,KAAgB;AACzB,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AACxB,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,eAAA,EAAkB,GAAG;AAAA,CAAI,CAAA;AAC9C,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IACf;AACA,IAAA,OAAO,IAAA;AAAA,EACR;AACD,CAAC,CAAA;AAED,SAAS,SAAA,GAAkB;AAC1B,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,IAAI,IAAI,OAAO;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA,CAmCvC,CAAA;AACD;AAEA,SAAS,WAAA,GAAoB;AAC5B,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,IAAI,IAAI,OAAO;AAAA,CAAI,CAAA;AAC5C;AAEA,IAAI,KAAK,KAAA,EAAO;AACf,EAAA,IAAA,CAAK,CAAA,CAAE,KAAK,GAAG,CAAA;AAChB;AAEA,IAAI,KAAK,OAAA,EAAS;AACjB,EAAA,WAAA,EAAY;AACZ,EAAA,OAAA,CAAQ,IAAA,EAAK;AACd;AAEA,IAAI,KAAK,IAAA,EAAM;AACd,EAAA,SAAA,EAAU;AACV,EAAA,OAAA,CAAQ,IAAA,EAAK;AACd;AAEA,IAAI,IAAA,CAAK,CAAA,CAAE,MAAA,KAAW,CAAA,EAAG;AACxB,EAAA,MAAM,IAAA,GAAO,QAAQ,IAAI,CAAA;AACzB,EAAA,IAAI,IAAA,KAAS,KAAK,IAAA,EAAM;AACvB,IAAA,SAAA,EAAU;AACV,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EACf,CAAA,MAAA,IAAW,gBAAA,CAAiB,IAAI,CAAA,EAAG;AAClC,IAAA,MAAM,IAAA,GAAO,WAAW,IAAI,CAAA;AAC5B,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAA,EAAK,IAAI,CAAA,uBAAA,CAAyB,CAAA;AAChD,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EACf;AACD;AAGA,IAAI,IAAA,CAAK,WAAW,MAAA,EAAW;AAC9B,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAC1C,EAAA,IAAI,CAAC,EAAA,CAAG,UAAA,CAAW,SAAS,CAAA,EAAG;AAC9B,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,UAAA,EAAa,IAAA,CAAK,MAAM,CAAA,gBAAA,CAAkB,CAAA;AACxD,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,gDAAA,EAAmD,SAAS,CAAA,CAAA,CAAG,CAAA;AAC7E,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EACf;AACD;AAGA,eAAe,GAAA,GAAqB;AACnC,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI;AAAA,IACnB,YAAY,IAAA,CAAK,MAAA;AAAA,IACjB,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,OAAO,IAAA,CAAK;AAAA,GACZ,CAAA;AACD,EAAA,MAAM,IAAA,GAAO,QAAQ,IAAI,CAAA;AACzB,EAAA,MAAM,SAAA,GAAY,MAAM,GAAA,CAAI,YAAA,CAAa,KAAK,SAAS,CAAA;AACvD,EAAA,MAAM,cAAc,MAAA,CAAO,QAAA,CAAS,KAAK,cAAc,CAAA,IAAK,MAAM,EAAE,CAAA;AACpE,EAAA,MAAM,YAAA,GAAe,MAAM,GAAA,CAAI,YAAA,EAAa;AAG5C,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,WAAW,CAAA,EAAG;AAC9B,IAAA,OAAA,CAAQ,MAAM,CAAA,eAAA,EAAkB,MAAA,CAAO,KAAK,cAAc,CAAC,CAAC,CAAA,yBAAA,CAA2B,CAAA;AACvF,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EACf;AAGA,EAAA,MAAM,UAAA,GAAa,KAAK,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,GAAA,KAAgB;AAC3D,IAAA,OAAO,IAAI,UAAA,CAAW,GAAG,IAAI,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA,GAAI,GAAA;AAAA,EAC7C,CAAC,CAAA;AAED,EAAA,MAAM,KAAA,GAAQ,MAAM,GAAA,CAAI,WAAA,CAAY,KAAK,CAAA,EAAG,EAAE,YAAY,CAAA;AAC1D,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,IAAK,IAAA,KAAS,KAAK,IAAA,EAAM;AAC7C,IAAA,OAAA,CAAQ,KAAA,CAAM,4BAAA,EAA8B,IAAA,CAAK,CAAC,CAAA;AAClD,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EACf;AAEA,EAAA,IAAI;AAEH,IAAA,IAAI,CAAC,uBAAsB,EAAG;AAC7B,MAAA,MAAM,IAAI,yBAAA,EAA0B;AAAA,IACrC;AAEA,IAAA,IAAI,OAAA;AACJ,IAAA,QAAQ,IAAA;AAAM,MACb,KAAK,KAAK,IAAA,EAAM;AACf,QAAA,OAAA,GAAU,MAAM,IAAA,CAAK,YAAA,EAAc,OAAA,CAAQ,QAAQ,KAAA,EAAO;AAAA,UACzD,SAAA;AAAA,UACA,WAAA;AAAA,UACA,aAAA,EAAe,IAAA,CAAK,gBAAgB,CAAA,IAAK;AAAA,SACzC,CAAA;AACD,QAAA;AAAA,MACD;AAAA,MACA,KAAK,KAAK,IAAA,EAAM;AACf,QAAA,OAAA,GAAU,MAAM,IAAA,CAAK,GAAA,EAAK,OAAA,CAAQ,MAAA,EAAQ,EAAE,GAAA,EAAK,OAAA,CAAQ,GAAA,EAAI,EAAG,CAAA;AAChE,QAAA;AAAA,MACD;AAAA,MACA,KAAK,KAAK,YAAA,EAAc;AACvB,QAAA,OAAA,GAAU,MAAM,WAAA,CAAY,YAAA,EAAc,OAAA,CAAQ,QAAQ,KAAK,CAAA;AAC/D,QAAA;AAAA,MACD;AAAA,MACA,SAAS;AACR,QAAA,OAAA,GAAU,MAAM,IAAA,CAAK,YAAA,EAAc,OAAA,CAAQ,MAAA,EAAQ,OAAO,IAAI,CAAA;AAAA,MAC/D;AAAA;AAED,IAAA,OAAA,CAAQ,IAAA,CAAK,OAAA,GAAU,CAAA,GAAI,CAAC,CAAA;AAAA,EAC7B,SAAS,GAAA,EAAK;AACb,IAAA,IAAI,eAAe,qBAAA,EAAuB;AACzC,MAAA,2BAAA,CAA4B,SAAS,GAAG,CAAA;AAAA,IACzC,CAAA,MAAA,IAAW,WAAA,CAAY,GAAG,CAAA,EAAG;AAC5B,MAAA,eAAA,CAAgB,GAAG,CAAA;AAAA,IACpB,CAAA,MAAO;AACN,MAAA,kBAAA,CAAmB,GAAG,CAAA;AAAA,IACvB;AACA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EACf;AACD;AAGA,GAAA,EAAI,CAAE,KAAA,CAAM,CAAC,GAAA,KAAiB;AAC7B,EAAA,OAAA,CAAQ,MAAM,GAAG,CAAA;AACjB,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AACf,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"html-validate.js","sources":["../../src/cli/html-validate.ts"],"sourcesContent":["/* eslint-disable no-console, n/no-process-exit -- as expected from a cli app */\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport kleur from \"kleur\";\nimport minimist from \"minimist\";\nimport { type UserErrorData, SchemaValidationError, isUserError } from \"..\";\nimport { bugs as pkgBugs, name, version } from \"../generated/package-json\";\nimport { dump } from \"./actions/dump\";\nimport { init } from \"./actions/init\";\nimport { lint } from \"./actions/lint\";\nimport { printConfig } from \"./actions/print-config\";\nimport { CLI } from \"./cli\";\nimport { ImportResolveMissingError, handleSchemaValidationError } from \"./errors\";\nimport { haveImportMetaResolve } from \"./have-import-meta-resolve\";\nimport { Mode, modeToFlag } from \"./mode\";\n\ninterface ParsedArgs {\n\tconfig?: string;\n\t\"dump-events\": boolean;\n\t\"dump-source\": boolean;\n\t\"dump-tokens\": boolean;\n\t\"dump-tree\": boolean;\n\text: string;\n\tformatter: string;\n\thelp: boolean;\n\tinit: boolean;\n\t\"max-warnings\"?: string;\n\tperformance: boolean;\n\tpreset?: string;\n\t\"print-config\": boolean;\n\trule?: string;\n\tstdin: boolean;\n\t\"stdin-filename\"?: string;\n\tversion: boolean;\n}\n\nfunction getMode(argv: Record<string, unknown>): Mode {\n\tif (argv[\"init\"]) {\n\t\treturn Mode.INIT;\n\t}\n\n\tif (argv[\"dump-events\"]) {\n\t\treturn Mode.DUMP_EVENTS;\n\t}\n\n\tif (argv[\"dump-source\"]) {\n\t\treturn Mode.DUMP_SOURCE;\n\t}\n\n\tif (argv[\"dump-tokens\"]) {\n\t\treturn Mode.DUMP_TOKENS;\n\t}\n\n\tif (argv[\"dump-tree\"]) {\n\t\treturn Mode.DUMP_TREE;\n\t}\n\n\tif (argv[\"print-config\"]) {\n\t\treturn Mode.PRINT_CONFIG;\n\t}\n\n\treturn Mode.LINT;\n}\n\nfunction requiresFilename(mode: Mode): boolean {\n\tswitch (mode) {\n\t\tcase Mode.LINT:\n\t\t\treturn true;\n\t\tcase Mode.INIT:\n\t\t\treturn false;\n\t\tcase Mode.DUMP_EVENTS:\n\t\tcase Mode.DUMP_TOKENS:\n\t\tcase Mode.DUMP_TREE:\n\t\tcase Mode.DUMP_SOURCE:\n\t\tcase Mode.PRINT_CONFIG:\n\t\t\treturn true;\n\t}\n}\n\nfunction handleUserError(err: UserErrorData): void {\n\tconst formatted = err.prettyFormat();\n\tif (formatted) {\n\t\tconsole.error(); /* blank line */\n\t\tconsole.error(formatted);\n\t\treturn;\n\t}\n\n\tconsole.error(kleur.red(\"Caught exception:\"));\n\tconsole.group();\n\t{\n\t\tconsole.error(err.prettyFormat() ?? err);\n\t}\n\tconsole.groupEnd();\n}\n\nfunction handleUnknownError(err: unknown): void {\n\tconsole.error(kleur.red(\"Caught exception:\"));\n\tconsole.group();\n\t{\n\t\tconsole.error(err);\n\t}\n\tconsole.groupEnd();\n\tconst bugUrl = `${pkgBugs}?issuable_template=Bug`;\n\tconsole.error(kleur.red(`This is a bug in ${name}-${version}.`));\n\tconsole.error(\n\t\tkleur.red(\n\t\t\t[\n\t\t\t\t`Please file a bug at ${bugUrl}`,\n\t\t\t\t`and include this message in full and if possible the content of the`,\n\t\t\t\t`file being parsed (or a reduced testcase).`,\n\t\t\t].join(\"\\n\"),\n\t\t),\n\t);\n}\n\nconst argv = minimist<ParsedArgs>(process.argv.slice(2), {\n\tstring: [\n\t\t\"c\",\n\t\t\"config\",\n\t\t\"ext\",\n\t\t\"f\",\n\t\t\"formatter\",\n\t\t\"max-warnings\",\n\t\t\"p\",\n\t\t\"preset\",\n\t\t\"rule\",\n\t\t\"stdin-filename\",\n\t],\n\tboolean: [\n\t\t\"init\",\n\t\t\"dump-events\",\n\t\t\"dump-source\",\n\t\t\"dump-tokens\",\n\t\t\"dump-tree\",\n\t\t\"h\",\n\t\t\"help\",\n\t\t\"performance\",\n\t\t\"print-config\",\n\t\t\"stdin\",\n\t\t\"version\",\n\t],\n\talias: {\n\t\tc: \"config\",\n\t\tf: \"formatter\",\n\t\tp: \"preset\",\n\t\th: \"help\",\n\t},\n\tdefault: {\n\t\text: \"html\",\n\t\tformatter: \"stylish\",\n\t},\n\tunknown: (opt: string) => {\n\t\tif (opt.startsWith(\"-\")) {\n\t\t\tprocess.stderr.write(`unknown option ${opt}\\n`);\n\t\t\tprocess.exit(1);\n\t\t}\n\t\treturn true;\n\t},\n});\n\nfunction showUsage(): void {\n\tprocess.stdout.write(`${name}-${version}\nUsage: html-validate [OPTIONS] [FILENAME..] [DIR..]\n\nCommon options:\n --ext=STRING specify file extensions (commaseparated).\n -f, --formatter=FORMATTER specify the formatter to use.\n --max-warnings=INT number of warnings to trigger nonzero exit code\n -p, --preset=STRING configuration preset to use, use\n comma-separator for multiple presets. (default:\n \"recommended\")\n --rule=RULE:SEVERITY set additional rule, use comma separator for\n multiple.\n --stdin process markup from stdin.\n --stdin-filename=STRING specify filename to report when using stdin\n\nMiscellaneous:\n -c, --config=STRING use custom configuration file.\n --init initialize project with a new configuration\n --print-config output configuration for given file.\n -h, --help show help.\n --version show version.\n\nDebugging options:\n --dump-events output events during parsing.\n --dump-source output post-transformed source data.\n --dump-tokens output tokens from lexing stage.\n --dump-tree output nodes from the dom tree.\n --performance output performance data after validation.\n\nFormatters:\n\nMultiple formatters can be specified with a comma-separated list,\ne.g. \"json,checkstyle\" to enable both.\n\nTo capture output to a file use \"formatter=/path/to/file\",\ne.g. \"checkstyle=dist/html-validate.xml\"\n`);\n}\n\nfunction showVersion(): void {\n\tprocess.stdout.write(`${name}-${version}\\n`);\n}\n\nif (argv.stdin) {\n\targv._.push(\"-\");\n}\n\nif (argv.version) {\n\tshowVersion();\n\tprocess.exit();\n}\n\nif (argv.help) {\n\tshowUsage();\n\tprocess.exit();\n}\n\nif (argv._.length === 0) {\n\tconst mode = getMode(argv);\n\tif (mode === Mode.LINT) {\n\t\tshowUsage();\n\t\tprocess.exit(0);\n\t} else if (requiresFilename(mode)) {\n\t\tconst flag = modeToFlag(mode);\n\t\tconsole.error(`\\`${flag}\\` requires a filename.`);\n\t\tprocess.exit(1);\n\t}\n}\n\n/* check that supplied config file exists before creating CLI */\nif (argv.config !== undefined) {\n\tconst checkPath = path.resolve(argv.config);\n\tif (!fs.existsSync(checkPath)) {\n\t\tconsole.error(`The file \"${argv.config}\" was not found.`);\n\t\tconsole.error(`The location this file was checked for at was: \"${checkPath}\"`);\n\t\tprocess.exit(1);\n\t}\n}\n\n/* eslint-disable-next-line complexity -- for now */\nasync function run(): Promise<void> {\n\tconst cli = new CLI({\n\t\tconfigFile: argv.config,\n\t\tpreset: argv.preset,\n\t\trules: argv.rule,\n\t});\n\tconst mode = getMode(argv);\n\tconst formatter = await cli.getFormatter(argv.formatter);\n\tconst maxWarnings = Number.parseInt(argv[\"max-warnings\"] ?? \"-1\", 10);\n\tconst htmlvalidate = await cli.getValidator();\n\n\t/* sanity check: ensure maxWarnings has a valid value */\n\tif (Number.isNaN(maxWarnings)) {\n\t\tconsole.error(`Invalid value \"${String(argv[\"max-warnings\"])}\" given to --max-warnings`);\n\t\tprocess.exit(1);\n\t}\n\n\t/* parse extensions (used when expanding directories) */\n\tconst extensions = argv.ext.split(\",\").map((cur: string) => {\n\t\treturn cur.startsWith(\".\") ? cur.slice(1) : cur;\n\t});\n\n\tconst files = await cli.expandFiles(argv._, { extensions });\n\tif (files.length === 0 && mode !== Mode.INIT) {\n\t\tconsole.error(\"No files matching patterns\", argv._);\n\t\tprocess.exit(1);\n\t}\n\n\ttry {\n\t\t/* istanbul ignore next -- not tested with unittests */\n\t\tif (!haveImportMetaResolve()) {\n\t\t\tthrow new ImportResolveMissingError();\n\t\t}\n\n\t\tlet success: boolean;\n\t\tswitch (mode) {\n\t\t\tcase Mode.LINT: {\n\t\t\t\tsuccess = await lint(htmlvalidate, process.stdout, process.stderr, files, {\n\t\t\t\t\tformatter,\n\t\t\t\t\tmaxWarnings,\n\t\t\t\t\tperformance: argv.performance,\n\t\t\t\t\tstdinFilename: argv[\"stdin-filename\"] ?? false,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Mode.INIT: {\n\t\t\t\tsuccess = await init(cli, process.stdout, { cwd: process.cwd() });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Mode.PRINT_CONFIG: {\n\t\t\t\tsuccess = await printConfig(htmlvalidate, process.stdout, files);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tsuccess = await dump(htmlvalidate, process.stdout, files, mode);\n\t\t\t}\n\t\t}\n\t\tprocess.exit(success ? 0 : 1);\n\t} catch (err) {\n\t\tif (err instanceof SchemaValidationError) {\n\t\t\thandleSchemaValidationError(console, err);\n\t\t} else if (isUserError(err)) {\n\t\t\thandleUserError(err);\n\t\t} else {\n\t\t\thandleUnknownError(err);\n\t\t}\n\t\tprocess.exit(1);\n\t}\n}\n\n/* eslint-disable-next-line unicorn/prefer-top-level-await -- technical debt, as long as we bundle and ship commonjs we cannot use TLA here */\nrun().catch((err: unknown) => {\n\tconsole.error(err);\n\tprocess.exit(1);\n});\n"],"names":["argv","pkgBugs"],"mappings":"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"}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { F as FileSystemConfigLoader, H as HtmlValidate, c as cjsResolver, a as compatibilityCheck, e as esmResolver, n as nodejsResolver } from './core-nodejs.js';
|
|
2
|
-
export { A as Attribute,
|
|
2
|
+
export { A as Attribute, g as Config, f as ConfigError, C as ConfigLoader, D as DOMNode, o as DOMTokenList, p as DOMTree, q as DynamicValue, r as EventHandler, H as HtmlElement, M as MetaCopyableProperty, s as MetaTable, N as NestedError, u as NodeClosed, w as NodeType, a as Parser, P as PerformanceTracker, R as Reporter, x as ResolvedConfig, y as Rule, z as SchemaValidationError, B as Severity, S as StaticConfigLoader, T as TextClassification, F as TextContent, G as TextNode, U as UserError, V as Validator, W as WrappedError, I as ariaNaming, J as classifyNodeText, K as configPresets, L as defineConfig, O as definePlugin, k as formatterFactory, Q as isUserError, X as keywordPatternMatcher, Y as ruleExists, Z as sliceLocation, _ as staticResolver, v as version, $ as walk } from './core.js';
|
|
3
3
|
export { C as CLI } from './cli.js';
|
|
4
4
|
export { d as defineMetadata, m as metadataHelper } from './meta-helper.js';
|
|
5
5
|
import 'node:fs';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a1 as codeFrameColumns, a2 as getEndLocation, a3 as getStartLocation } from './core.js';
|
|
2
2
|
import { MessageChannel, Worker, receiveMessageOnPort } from 'node:worker_threads';
|
|
3
3
|
import { l as legacyRequire } from './core-nodejs.js';
|
|
4
4
|
|
package/dist/esm/matchers.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { d as diverge, c as createSyncFn, f as flattenMessages } from './matcher-utils.js';
|
|
2
|
-
import {
|
|
2
|
+
import { l as deepmerge, a4 as workerPath } from './core.js';
|
|
3
3
|
|
|
4
4
|
function createMatcher$4() {
|
|
5
5
|
function toBeValid(report) {
|
package/dist/tsdoc-metadata.json
CHANGED
package/dist/types/browser.d.ts
CHANGED
|
@@ -720,6 +720,7 @@ export declare type EventCallback = (event: string, data: any) => void;
|
|
|
720
720
|
*/
|
|
721
721
|
export declare class EventHandler {
|
|
722
722
|
private listeners;
|
|
723
|
+
private tracker;
|
|
723
724
|
constructor();
|
|
724
725
|
/**
|
|
725
726
|
* Add an event listener.
|
|
@@ -738,6 +739,7 @@ export declare class EventHandler {
|
|
|
738
739
|
* @returns Unregistration function.
|
|
739
740
|
*/
|
|
740
741
|
once(event: string, callback: EventCallback): () => void;
|
|
742
|
+
/* Excluded from this release type: setTracker */
|
|
741
743
|
/**
|
|
742
744
|
* Trigger event causing all listeners to be called.
|
|
743
745
|
*
|
|
@@ -748,6 +750,8 @@ export declare class EventHandler {
|
|
|
748
750
|
private getCallbacks;
|
|
749
751
|
}
|
|
750
752
|
|
|
753
|
+
/* Excluded from this release type: EventPerformanceEntry */
|
|
754
|
+
|
|
751
755
|
/**
|
|
752
756
|
* @public
|
|
753
757
|
*/
|
|
@@ -979,6 +983,9 @@ export declare class HtmlElement extends DOMNode {
|
|
|
979
983
|
/* Excluded from this release type: someChildren */
|
|
980
984
|
/* Excluded from this release type: everyChildren */
|
|
981
985
|
/* Excluded from this release type: find */
|
|
986
|
+
append(node: DOMNode): void;
|
|
987
|
+
insertBefore(node: DOMNode, reference: DOMNode | null): void;
|
|
988
|
+
removeChild<T extends DOMNode>(node: T): T;
|
|
982
989
|
/* Excluded from this release type: _setParent */
|
|
983
990
|
}
|
|
984
991
|
|
|
@@ -1008,6 +1015,7 @@ export declare interface HtmlElementLike {
|
|
|
1008
1015
|
*/
|
|
1009
1016
|
export declare class HtmlValidate {
|
|
1010
1017
|
protected configLoader: ConfigLoader;
|
|
1018
|
+
private _performanceTracker;
|
|
1011
1019
|
/**
|
|
1012
1020
|
* Create a new validator.
|
|
1013
1021
|
*
|
|
@@ -1018,6 +1026,8 @@ export declare class HtmlValidate {
|
|
|
1018
1026
|
*/
|
|
1019
1027
|
constructor(config?: ConfigData);
|
|
1020
1028
|
constructor(configLoader: ConfigLoader);
|
|
1029
|
+
/* Excluded from this release type: startPerformance */
|
|
1030
|
+
/* Excluded from this release type: stopPerformance */
|
|
1021
1031
|
/**
|
|
1022
1032
|
* Parse and validate HTML from string.
|
|
1023
1033
|
*
|
|
@@ -1917,7 +1927,31 @@ export declare class Parser {
|
|
|
1917
1927
|
* valid). The parser handles this by checking if the element on top of the
|
|
1918
1928
|
* stack when is allowed to omit.
|
|
1919
1929
|
*/
|
|
1930
|
+
/**
|
|
1931
|
+
* Check whether a given element would be implicitly closed by an incoming
|
|
1932
|
+
* start tag. Used both in `closeOptional` and in the multi-level lookahead.
|
|
1933
|
+
*/
|
|
1934
|
+
private wouldCloseElement;
|
|
1935
|
+
/**
|
|
1936
|
+
* Walk up the active stack to find the parent element that will remain
|
|
1937
|
+
* after all multi-level implicit closes triggered by the incoming start tag.
|
|
1938
|
+
* For a single-level close this is equivalent to `getActive().parent`.
|
|
1939
|
+
*/
|
|
1940
|
+
private getParentAfterImplicitClose;
|
|
1920
1941
|
private closeOptional;
|
|
1942
|
+
/**
|
|
1943
|
+
* Returns `true` if the element’s end tag may be omitted, either because
|
|
1944
|
+
* its `implicitClosed` list includes its own tag name (e.g. `<li>`, `<td>`)
|
|
1945
|
+
* or because `optionalEnd` is set.
|
|
1946
|
+
*/
|
|
1947
|
+
private canOmitEndTag;
|
|
1948
|
+
/**
|
|
1949
|
+
* Check whether the active element can be implicitly closed by an incoming
|
|
1950
|
+
* end tag. The end tag may close a direct parent or any ancestor, as long as
|
|
1951
|
+
* every intermediate element can also have its end tag omitted.
|
|
1952
|
+
* This handles cases like `</table>` implicitly closing `<td>`, `<tr>`, `<tbody>`.
|
|
1953
|
+
*/
|
|
1954
|
+
private closeOptionalEndTag;
|
|
1921
1955
|
/**
|
|
1922
1956
|
* Check whether an intermediary element (e.g. `<head>` or `<body>`) should
|
|
1923
1957
|
* be implicitly opened before the incoming element is inserted under
|
|
@@ -1995,6 +2029,10 @@ export declare class Parser {
|
|
|
1995
2029
|
private closeTree;
|
|
1996
2030
|
}
|
|
1997
2031
|
|
|
2032
|
+
/* Excluded from this release type: PerformanceResult */
|
|
2033
|
+
|
|
2034
|
+
/* Excluded from this release type: PerformanceTracker */
|
|
2035
|
+
|
|
1998
2036
|
/**
|
|
1999
2037
|
* @public
|
|
2000
2038
|
*/
|
|
@@ -2272,6 +2310,7 @@ export declare abstract class Rule<ContextType = void, OptionsType = void> {
|
|
|
2272
2310
|
private blockers;
|
|
2273
2311
|
private severity;
|
|
2274
2312
|
private event;
|
|
2313
|
+
private tracker;
|
|
2275
2314
|
/**
|
|
2276
2315
|
* Rule name. Defaults to filename without extension but can be overwritten by
|
|
2277
2316
|
* subclasses.
|
|
@@ -2376,6 +2415,7 @@ export declare abstract class Rule<ContextType = void, OptionsType = void> {
|
|
|
2376
2415
|
on<K extends keyof ListenEventMap>(event: K, callback: (event: ListenEventMap[K]) => void): () => void;
|
|
2377
2416
|
on<K extends keyof ListenEventMap>(event: K, filter: (event: ListenEventMap[K]) => boolean, callback: (event: ListenEventMap[K]) => void): () => void;
|
|
2378
2417
|
/* Excluded from this release type: init */
|
|
2418
|
+
/* Excluded from this release type: setTracker */
|
|
2379
2419
|
/* Excluded from this release type: validateOptions */
|
|
2380
2420
|
/**
|
|
2381
2421
|
* Rule setup callback.
|
|
@@ -2441,6 +2481,8 @@ export declare function ruleExists(ruleId: string): boolean;
|
|
|
2441
2481
|
*/
|
|
2442
2482
|
export declare type RuleOptions = string | number | Record<string, any>;
|
|
2443
2483
|
|
|
2484
|
+
/* Excluded from this release type: RulePerformanceEntry */
|
|
2485
|
+
|
|
2444
2486
|
/**
|
|
2445
2487
|
* @public
|
|
2446
2488
|
*/
|
package/dist/types/index.d.ts
CHANGED
|
@@ -825,6 +825,7 @@ export declare type EventCallback = (event: string, data: any) => void;
|
|
|
825
825
|
*/
|
|
826
826
|
export declare class EventHandler {
|
|
827
827
|
private listeners;
|
|
828
|
+
private tracker;
|
|
828
829
|
constructor();
|
|
829
830
|
/**
|
|
830
831
|
* Add an event listener.
|
|
@@ -843,6 +844,7 @@ export declare class EventHandler {
|
|
|
843
844
|
* @returns Unregistration function.
|
|
844
845
|
*/
|
|
845
846
|
once(event: string, callback: EventCallback): () => void;
|
|
847
|
+
/* Excluded from this release type: setTracker */
|
|
846
848
|
/**
|
|
847
849
|
* Trigger event causing all listeners to be called.
|
|
848
850
|
*
|
|
@@ -853,6 +855,8 @@ export declare class EventHandler {
|
|
|
853
855
|
private getCallbacks;
|
|
854
856
|
}
|
|
855
857
|
|
|
858
|
+
/* Excluded from this release type: EventPerformanceEntry */
|
|
859
|
+
|
|
856
860
|
/**
|
|
857
861
|
* @public
|
|
858
862
|
*/
|
|
@@ -1215,6 +1219,9 @@ export declare class HtmlElement extends DOMNode {
|
|
|
1215
1219
|
/* Excluded from this release type: someChildren */
|
|
1216
1220
|
/* Excluded from this release type: everyChildren */
|
|
1217
1221
|
/* Excluded from this release type: find */
|
|
1222
|
+
append(node: DOMNode): void;
|
|
1223
|
+
insertBefore(node: DOMNode, reference: DOMNode | null): void;
|
|
1224
|
+
removeChild<T extends DOMNode>(node: T): T;
|
|
1218
1225
|
/* Excluded from this release type: _setParent */
|
|
1219
1226
|
}
|
|
1220
1227
|
|
|
@@ -1244,6 +1251,7 @@ export declare interface HtmlElementLike {
|
|
|
1244
1251
|
*/
|
|
1245
1252
|
export declare class HtmlValidate {
|
|
1246
1253
|
protected configLoader: ConfigLoader;
|
|
1254
|
+
private _performanceTracker;
|
|
1247
1255
|
/**
|
|
1248
1256
|
* Create a new validator.
|
|
1249
1257
|
*
|
|
@@ -1254,6 +1262,8 @@ export declare class HtmlValidate {
|
|
|
1254
1262
|
*/
|
|
1255
1263
|
constructor(config?: ConfigData);
|
|
1256
1264
|
constructor(configLoader: ConfigLoader);
|
|
1265
|
+
/* Excluded from this release type: startPerformance */
|
|
1266
|
+
/* Excluded from this release type: stopPerformance */
|
|
1257
1267
|
/**
|
|
1258
1268
|
* Parse and validate HTML from string.
|
|
1259
1269
|
*
|
|
@@ -2185,7 +2195,31 @@ export declare class Parser {
|
|
|
2185
2195
|
* valid). The parser handles this by checking if the element on top of the
|
|
2186
2196
|
* stack when is allowed to omit.
|
|
2187
2197
|
*/
|
|
2198
|
+
/**
|
|
2199
|
+
* Check whether a given element would be implicitly closed by an incoming
|
|
2200
|
+
* start tag. Used both in `closeOptional` and in the multi-level lookahead.
|
|
2201
|
+
*/
|
|
2202
|
+
private wouldCloseElement;
|
|
2203
|
+
/**
|
|
2204
|
+
* Walk up the active stack to find the parent element that will remain
|
|
2205
|
+
* after all multi-level implicit closes triggered by the incoming start tag.
|
|
2206
|
+
* For a single-level close this is equivalent to `getActive().parent`.
|
|
2207
|
+
*/
|
|
2208
|
+
private getParentAfterImplicitClose;
|
|
2188
2209
|
private closeOptional;
|
|
2210
|
+
/**
|
|
2211
|
+
* Returns `true` if the element’s end tag may be omitted, either because
|
|
2212
|
+
* its `implicitClosed` list includes its own tag name (e.g. `<li>`, `<td>`)
|
|
2213
|
+
* or because `optionalEnd` is set.
|
|
2214
|
+
*/
|
|
2215
|
+
private canOmitEndTag;
|
|
2216
|
+
/**
|
|
2217
|
+
* Check whether the active element can be implicitly closed by an incoming
|
|
2218
|
+
* end tag. The end tag may close a direct parent or any ancestor, as long as
|
|
2219
|
+
* every intermediate element can also have its end tag omitted.
|
|
2220
|
+
* This handles cases like `</table>` implicitly closing `<td>`, `<tr>`, `<tbody>`.
|
|
2221
|
+
*/
|
|
2222
|
+
private closeOptionalEndTag;
|
|
2189
2223
|
/**
|
|
2190
2224
|
* Check whether an intermediary element (e.g. `<head>` or `<body>`) should
|
|
2191
2225
|
* be implicitly opened before the incoming element is inserted under
|
|
@@ -2263,6 +2297,10 @@ export declare class Parser {
|
|
|
2263
2297
|
private closeTree;
|
|
2264
2298
|
}
|
|
2265
2299
|
|
|
2300
|
+
/* Excluded from this release type: PerformanceResult */
|
|
2301
|
+
|
|
2302
|
+
/* Excluded from this release type: PerformanceTracker */
|
|
2303
|
+
|
|
2266
2304
|
/**
|
|
2267
2305
|
* @public
|
|
2268
2306
|
*/
|
|
@@ -2540,6 +2578,7 @@ export declare abstract class Rule<ContextType = void, OptionsType = void> {
|
|
|
2540
2578
|
private blockers;
|
|
2541
2579
|
private severity;
|
|
2542
2580
|
private event;
|
|
2581
|
+
private tracker;
|
|
2543
2582
|
/**
|
|
2544
2583
|
* Rule name. Defaults to filename without extension but can be overwritten by
|
|
2545
2584
|
* subclasses.
|
|
@@ -2644,6 +2683,7 @@ export declare abstract class Rule<ContextType = void, OptionsType = void> {
|
|
|
2644
2683
|
on<K extends keyof ListenEventMap>(event: K, callback: (event: ListenEventMap[K]) => void): () => void;
|
|
2645
2684
|
on<K extends keyof ListenEventMap>(event: K, filter: (event: ListenEventMap[K]) => boolean, callback: (event: ListenEventMap[K]) => void): () => void;
|
|
2646
2685
|
/* Excluded from this release type: init */
|
|
2686
|
+
/* Excluded from this release type: setTracker */
|
|
2647
2687
|
/* Excluded from this release type: validateOptions */
|
|
2648
2688
|
/**
|
|
2649
2689
|
* Rule setup callback.
|
|
@@ -2709,6 +2749,8 @@ export declare function ruleExists(ruleId: string): boolean;
|
|
|
2709
2749
|
*/
|
|
2710
2750
|
export declare type RuleOptions = string | number | Record<string, any>;
|
|
2711
2751
|
|
|
2752
|
+
/* Excluded from this release type: RulePerformanceEntry */
|
|
2753
|
+
|
|
2712
2754
|
/**
|
|
2713
2755
|
* @public
|
|
2714
2756
|
*/
|