html-validate 8.21.0 → 8.22.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 +0 -1
- package/dist/cjs/browser.js.map +1 -1
- package/dist/cjs/core.js +176 -50
- package/dist/cjs/core.js.map +1 -1
- package/dist/cjs/html-validate.js +0 -1
- package/dist/cjs/html-validate.js.map +1 -1
- package/dist/cjs/index.js +0 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/jest.js +0 -1
- package/dist/cjs/jest.js.map +1 -1
- package/dist/cjs/tsdoc-metadata.json +1 -1
- package/dist/cjs/vitest.js +0 -1
- package/dist/cjs/vitest.js.map +1 -1
- package/dist/es/browser.js +0 -1
- package/dist/es/browser.js.map +1 -1
- package/dist/es/core.js +176 -50
- package/dist/es/core.js.map +1 -1
- package/dist/es/html-validate.js +0 -1
- package/dist/es/html-validate.js.map +1 -1
- package/dist/es/index.js +0 -1
- package/dist/es/index.js.map +1 -1
- package/dist/es/jest.js +0 -1
- package/dist/es/jest.js.map +1 -1
- package/dist/es/vitest.js +0 -1
- package/dist/es/vitest.js.map +1 -1
- package/dist/tsdoc-metadata.json +1 -1
- package/dist/types/browser.d.ts +21 -10
- package/dist/types/index.d.ts +21 -10
- package/package.json +20 -24
|
@@ -11,7 +11,6 @@ require('./elements.js');
|
|
|
11
11
|
require('./meta-helper.js');
|
|
12
12
|
require('./utils/natural-join.js');
|
|
13
13
|
require('@sidvind/better-ajv-errors');
|
|
14
|
-
require('@babel/code-frame');
|
|
15
14
|
require('@html-validate/stylish');
|
|
16
15
|
require('semver');
|
|
17
16
|
require('./core-nodejs.js');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-validate.js","sources":["../../src/cli/html-validate.ts"],"sourcesContent":["/* eslint-disable no-console, n/no-process-exit, sonarjs/no-duplicate-string -- as expected from a cli app */\nimport fs from \"fs\";\nimport path from \"node:path\";\nimport kleur from \"kleur\";\nimport minimist from \"minimist\";\nimport { SchemaValidationError, UserError } from \"..\";\nimport { name, version, bugs as pkgBugs } from \"../generated/package\";\nimport { CLI } from \"./cli\";\nimport { handleSchemaValidationError } from \"./errors\";\nimport { Mode, modeToFlag } from \"./mode\";\nimport { lint } from \"./actions/lint\";\nimport { init } from \"./actions/init\";\nimport { printConfig } from \"./actions/print-config\";\nimport { dump } from \"./actions/dump\";\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\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, any>): 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: UserError): 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: [\"c\", \"config\", \"ext\", \"f\", \"formatter\", \"max-warnings\", \"rule\", \"stdin-filename\"],\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\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 --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 (typeof argv.config !== \"undefined\") {\n\tconst checkPath = path.resolve(argv.config);\n\tif (!fs.existsSync(checkPath)) {\n\t\tconsole.log(`The file \"${String(argv.config)}\" was not found.`);\n\t\tconsole.log(`The location this file was checked for at was: \"${String(checkPath)}\"`);\n\t\tprocess.exit(1);\n\t}\n}\n\nconst cli = new CLI({\n\tconfigFile: argv.config,\n\trules: argv.rule,\n});\nconst mode = getMode(argv);\nconst formatter = cli.getFormatter(argv.formatter);\nconst maxWarnings = parseInt(argv[\"max-warnings\"] ?? \"-1\", 10);\nconst htmlvalidate = cli.getValidator();\n\n/* sanity check: ensure maxWarnings has a valid value */\nif (isNaN(maxWarnings)) {\n\tconsole.log(`Invalid value \"${String(argv[\"max-warnings\"])}\" given to --max-warnings`);\n\tprocess.exit(1);\n}\n\n/* parse extensions (used when expanding directories) */\nconst extensions = argv.ext.split(\",\").map((cur: string) => {\n\treturn cur.startsWith(\".\") ? cur.slice(1) : cur;\n});\n\nconst files = cli.expandFiles(argv._, { extensions });\nif (files.length === 0 && mode !== Mode.INIT) {\n\tconsole.error(\"No files matching patterns\", argv._);\n\tprocess.exit(1);\n}\n\nasync function run(): Promise<void> {\n\ttry {\n\t\tlet success: boolean;\n\t\tif (mode === Mode.LINT) {\n\t\t\tsuccess = await lint(htmlvalidate, process.stdout, files, {\n\t\t\t\tformatter,\n\t\t\t\tmaxWarnings,\n\t\t\t\tstdinFilename: argv[\"stdin-filename\"] ?? false,\n\t\t\t});\n\t\t} else if (mode === Mode.INIT) {\n\t\t\tsuccess = await init(cli, process.stdout, { cwd: process.cwd() });\n\t\t} else if (mode === Mode.PRINT_CONFIG) {\n\t\t\tsuccess = await printConfig(htmlvalidate, process.stdout, files);\n\t\t} else {\n\t\t\tsuccess = await dump(htmlvalidate, process.stdout, files, mode);\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 (err instanceof UserError) {\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\nrun().catch((err: unknown) => {\n\tconsole.error(err);\n\tprocess.exit(1);\n});\n"],"names":["argv","Mode","mode","kleur","pkgBugs","name","version","minimist","modeToFlag","path","fs","CLI","lint","init","printConfig","dump","SchemaValidationError","handleSchemaValidationError","UserError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"html-validate.js","sources":["../../src/cli/html-validate.ts"],"sourcesContent":["/* eslint-disable no-console, n/no-process-exit, sonarjs/no-duplicate-string -- as expected from a cli app */\nimport fs from \"fs\";\nimport path from \"node:path\";\nimport kleur from \"kleur\";\nimport minimist from \"minimist\";\nimport { SchemaValidationError, UserError } from \"..\";\nimport { name, version, bugs as pkgBugs } from \"../generated/package\";\nimport { CLI } from \"./cli\";\nimport { handleSchemaValidationError } from \"./errors\";\nimport { Mode, modeToFlag } from \"./mode\";\nimport { lint } from \"./actions/lint\";\nimport { init } from \"./actions/init\";\nimport { printConfig } from \"./actions/print-config\";\nimport { dump } from \"./actions/dump\";\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\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, any>): 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: UserError): 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: [\"c\", \"config\", \"ext\", \"f\", \"formatter\", \"max-warnings\", \"rule\", \"stdin-filename\"],\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\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 --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 (typeof argv.config !== \"undefined\") {\n\tconst checkPath = path.resolve(argv.config);\n\tif (!fs.existsSync(checkPath)) {\n\t\tconsole.log(`The file \"${String(argv.config)}\" was not found.`);\n\t\tconsole.log(`The location this file was checked for at was: \"${String(checkPath)}\"`);\n\t\tprocess.exit(1);\n\t}\n}\n\nconst cli = new CLI({\n\tconfigFile: argv.config,\n\trules: argv.rule,\n});\nconst mode = getMode(argv);\nconst formatter = cli.getFormatter(argv.formatter);\nconst maxWarnings = parseInt(argv[\"max-warnings\"] ?? \"-1\", 10);\nconst htmlvalidate = cli.getValidator();\n\n/* sanity check: ensure maxWarnings has a valid value */\nif (isNaN(maxWarnings)) {\n\tconsole.log(`Invalid value \"${String(argv[\"max-warnings\"])}\" given to --max-warnings`);\n\tprocess.exit(1);\n}\n\n/* parse extensions (used when expanding directories) */\nconst extensions = argv.ext.split(\",\").map((cur: string) => {\n\treturn cur.startsWith(\".\") ? cur.slice(1) : cur;\n});\n\nconst files = cli.expandFiles(argv._, { extensions });\nif (files.length === 0 && mode !== Mode.INIT) {\n\tconsole.error(\"No files matching patterns\", argv._);\n\tprocess.exit(1);\n}\n\nasync function run(): Promise<void> {\n\ttry {\n\t\tlet success: boolean;\n\t\tif (mode === Mode.LINT) {\n\t\t\tsuccess = await lint(htmlvalidate, process.stdout, files, {\n\t\t\t\tformatter,\n\t\t\t\tmaxWarnings,\n\t\t\t\tstdinFilename: argv[\"stdin-filename\"] ?? false,\n\t\t\t});\n\t\t} else if (mode === Mode.INIT) {\n\t\t\tsuccess = await init(cli, process.stdout, { cwd: process.cwd() });\n\t\t} else if (mode === Mode.PRINT_CONFIG) {\n\t\t\tsuccess = await printConfig(htmlvalidate, process.stdout, files);\n\t\t} else {\n\t\t\tsuccess = await dump(htmlvalidate, process.stdout, files, mode);\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 (err instanceof UserError) {\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\nrun().catch((err: unknown) => {\n\tconsole.error(err);\n\tprocess.exit(1);\n});\n"],"names":["argv","Mode","mode","kleur","pkgBugs","name","version","minimist","modeToFlag","path","fs","CLI","lint","init","printConfig","dump","SchemaValidationError","handleSchemaValidationError","UserError"],"mappings":"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"}
|
package/dist/cjs/index.js
CHANGED
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/cjs/jest.js
CHANGED
package/dist/cjs/jest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jest.js","sources":["../../src/jest/jest.ts"],"sourcesContent":["import \"./augmentation\";\n\nimport {\n\ttoBeValid,\n\ttoBeInvalid,\n\ttoHTMLValidate,\n\ttoHaveError,\n\ttoHaveErrors,\n\ttoMatchCodeframe,\n\ttoMatchInlineCodeframe,\n} from \"./matchers\";\nimport { diff } from \"./utils\";\n\nexpect.extend({\n\ttoBeValid: toBeValid(),\n\ttoBeInvalid: toBeInvalid(),\n\ttoHTMLValidate: toHTMLValidate(expect, diff),\n\ttoHaveError: toHaveError(expect, diff),\n\ttoHaveErrors: toHaveErrors(expect, diff),\n\ttoMatchCodeframe: toMatchCodeframe(),\n\ttoMatchInlineCodeframe: toMatchInlineCodeframe(),\n});\n"],"names":["toBeValid","toBeInvalid","toHTMLValidate","diff","toHaveError","toHaveErrors","toMatchCodeframe","toMatchInlineCodeframe"],"mappings":"
|
|
1
|
+
{"version":3,"file":"jest.js","sources":["../../src/jest/jest.ts"],"sourcesContent":["import \"./augmentation\";\n\nimport {\n\ttoBeValid,\n\ttoBeInvalid,\n\ttoHTMLValidate,\n\ttoHaveError,\n\ttoHaveErrors,\n\ttoMatchCodeframe,\n\ttoMatchInlineCodeframe,\n} from \"./matchers\";\nimport { diff } from \"./utils\";\n\nexpect.extend({\n\ttoBeValid: toBeValid(),\n\ttoBeInvalid: toBeInvalid(),\n\ttoHTMLValidate: toHTMLValidate(expect, diff),\n\ttoHaveError: toHaveError(expect, diff),\n\ttoHaveErrors: toHaveErrors(expect, diff),\n\ttoMatchCodeframe: toMatchCodeframe(),\n\ttoMatchInlineCodeframe: toMatchInlineCodeframe(),\n});\n"],"names":["toBeValid","toBeInvalid","toHTMLValidate","diff","toHaveError","toHaveErrors","toMatchCodeframe","toMatchInlineCodeframe"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAaA,MAAA,CAAO,MAAO,CAAA;AAAA,EACb,WAAWA,sBAAU,EAAA;AAAA,EACrB,aAAaC,wBAAY,EAAA;AAAA,EACzB,cAAA,EAAgBC,wBAAe,CAAA,MAAA,EAAQC,aAAI,CAAA;AAAA,EAC3C,WAAA,EAAaC,wBAAY,CAAA,MAAA,EAAQD,aAAI,CAAA;AAAA,EACrC,YAAA,EAAcE,wBAAa,CAAA,MAAA,EAAQF,aAAI,CAAA;AAAA,EACvC,kBAAkBG,8BAAiB,EAAA;AAAA,EACnC,wBAAwBC,gCAAuB,EAAA;AAChD,CAAC,CAAA;;"}
|
package/dist/cjs/vitest.js
CHANGED
package/dist/cjs/vitest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest.js","sources":["../../src/vitest/vitest.ts"],"sourcesContent":["import \"./augmentation\";\n\nimport { expect } from \"vitest\";\nimport {\n\ttoBeValid,\n\ttoBeInvalid,\n\ttoHTMLValidate,\n\ttoHaveError,\n\ttoHaveErrors,\n} from \"../jest/matchers\";\n\nexpect.extend({\n\ttoBeValid: toBeValid(),\n\ttoBeInvalid: toBeInvalid(),\n\ttoHTMLValidate: toHTMLValidate(expect, undefined),\n\ttoHaveError: toHaveError(expect, undefined),\n\ttoHaveErrors: toHaveErrors(expect, undefined),\n});\n"],"names":["expect","toBeValid","toBeInvalid","toHTMLValidate","toHaveError","toHaveErrors"],"mappings":"
|
|
1
|
+
{"version":3,"file":"vitest.js","sources":["../../src/vitest/vitest.ts"],"sourcesContent":["import \"./augmentation\";\n\nimport { expect } from \"vitest\";\nimport {\n\ttoBeValid,\n\ttoBeInvalid,\n\ttoHTMLValidate,\n\ttoHaveError,\n\ttoHaveErrors,\n} from \"../jest/matchers\";\n\nexpect.extend({\n\ttoBeValid: toBeValid(),\n\ttoBeInvalid: toBeInvalid(),\n\ttoHTMLValidate: toHTMLValidate(expect, undefined),\n\ttoHaveError: toHaveError(expect, undefined),\n\ttoHaveErrors: toHaveErrors(expect, undefined),\n});\n"],"names":["expect","toBeValid","toBeInvalid","toHTMLValidate","toHaveError","toHaveErrors"],"mappings":";;;;;;;;;;;;;;;;;;;AAWAA,aAAA,CAAO,MAAO,CAAA;AAAA,EACb,WAAWC,sBAAU,EAAA;AAAA,EACrB,aAAaC,wBAAY,EAAA;AAAA,EACzB,cAAA,EAAgBC,wBAAe,CAAAH,aAAA,EAAQ,KAAS,CAAA,CAAA;AAAA,EAChD,WAAA,EAAaI,wBAAY,CAAAJ,aAAA,EAAQ,KAAS,CAAA,CAAA;AAAA,EAC1C,YAAA,EAAcK,wBAAa,CAAAL,aAAA,EAAQ,KAAS,CAAA,CAAA;AAC7C,CAAC,CAAA;;"}
|
package/dist/es/browser.js
CHANGED
package/dist/es/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"browser.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
|
package/dist/es/core.js
CHANGED
|
@@ -3,7 +3,6 @@ import { e as entities$1, h as html5, b as bundledElements } from './elements.js
|
|
|
3
3
|
import betterAjvErrors from '@sidvind/better-ajv-errors';
|
|
4
4
|
import { n as naturalJoin } from './utils/natural-join.js';
|
|
5
5
|
import fs from 'fs';
|
|
6
|
-
import { codeFrameColumns } from '@babel/code-frame';
|
|
7
6
|
import kleur from 'kleur';
|
|
8
7
|
import { stylish as stylish$1 } from '@html-validate/stylish';
|
|
9
8
|
import semver from 'semver';
|
|
@@ -1671,6 +1670,7 @@ class DOMNode {
|
|
|
1671
1670
|
/**
|
|
1672
1671
|
* Create a new DOMNode.
|
|
1673
1672
|
*
|
|
1673
|
+
* @internal
|
|
1674
1674
|
* @param nodeType - What node type to create.
|
|
1675
1675
|
* @param nodeName - What node name to use. For `HtmlElement` this corresponds
|
|
1676
1676
|
* to the tagName but other node types have specific predefined values.
|
|
@@ -2339,8 +2339,15 @@ function createAdapter(node) {
|
|
|
2339
2339
|
};
|
|
2340
2340
|
}
|
|
2341
2341
|
class HtmlElement extends DOMNode {
|
|
2342
|
-
constructor(
|
|
2343
|
-
const
|
|
2342
|
+
constructor(details) {
|
|
2343
|
+
const {
|
|
2344
|
+
nodeType,
|
|
2345
|
+
tagName,
|
|
2346
|
+
parent = null,
|
|
2347
|
+
closed = 1 /* EndTag */,
|
|
2348
|
+
meta = null,
|
|
2349
|
+
location
|
|
2350
|
+
} = details;
|
|
2344
2351
|
super(nodeType, tagName, location);
|
|
2345
2352
|
if (isInvalidTagName(tagName)) {
|
|
2346
2353
|
throw new Error(`The tag name provided ("${tagName}") is not a valid name`);
|
|
@@ -2363,11 +2370,39 @@ class HtmlElement extends DOMNode {
|
|
|
2363
2370
|
}
|
|
2364
2371
|
}
|
|
2365
2372
|
}
|
|
2373
|
+
/**
|
|
2374
|
+
* Manually create a new element. This is primary useful for test-cases. While
|
|
2375
|
+
* the API is public it is not meant for general consumption and is not
|
|
2376
|
+
* guaranteed to be stable across versions.
|
|
2377
|
+
*
|
|
2378
|
+
* Use at your own risk. Prefer to use [[Parser]] to parse a string of markup
|
|
2379
|
+
* instead.
|
|
2380
|
+
*
|
|
2381
|
+
* @public
|
|
2382
|
+
* @since 8.22.0
|
|
2383
|
+
* @param tagName - Element tagname.
|
|
2384
|
+
* @param location - Element location.
|
|
2385
|
+
* @param details - Additional element details.
|
|
2386
|
+
*/
|
|
2387
|
+
static createElement(tagName, location, details = {}) {
|
|
2388
|
+
const { closed = 1 /* EndTag */, meta = null, parent = null } = details;
|
|
2389
|
+
return new HtmlElement({
|
|
2390
|
+
nodeType: NodeType.ELEMENT_NODE,
|
|
2391
|
+
tagName,
|
|
2392
|
+
parent,
|
|
2393
|
+
closed,
|
|
2394
|
+
meta,
|
|
2395
|
+
location
|
|
2396
|
+
});
|
|
2397
|
+
}
|
|
2366
2398
|
/**
|
|
2367
2399
|
* @internal
|
|
2368
2400
|
*/
|
|
2369
2401
|
static rootNode(location) {
|
|
2370
|
-
const root = new HtmlElement(
|
|
2402
|
+
const root = new HtmlElement({
|
|
2403
|
+
nodeType: NodeType.DOCUMENT_NODE,
|
|
2404
|
+
location
|
|
2405
|
+
});
|
|
2371
2406
|
root.setAnnotation("#document");
|
|
2372
2407
|
return root;
|
|
2373
2408
|
}
|
|
@@ -2386,7 +2421,14 @@ class HtmlElement extends DOMNode {
|
|
|
2386
2421
|
const open = startToken.data[1] !== "/";
|
|
2387
2422
|
const closed = isClosed(endToken, meta);
|
|
2388
2423
|
const location = sliceLocation(startToken.location, 1);
|
|
2389
|
-
return new HtmlElement(
|
|
2424
|
+
return new HtmlElement({
|
|
2425
|
+
nodeType: NodeType.ELEMENT_NODE,
|
|
2426
|
+
tagName,
|
|
2427
|
+
parent: open ? parent : null,
|
|
2428
|
+
closed,
|
|
2429
|
+
meta,
|
|
2430
|
+
location
|
|
2431
|
+
});
|
|
2390
2432
|
}
|
|
2391
2433
|
/**
|
|
2392
2434
|
* Returns annotated name if set or defaults to `<tagName>`.
|
|
@@ -2816,6 +2858,35 @@ function isClosed(endToken, meta) {
|
|
|
2816
2858
|
return closed;
|
|
2817
2859
|
}
|
|
2818
2860
|
|
|
2861
|
+
function dumpTree(root) {
|
|
2862
|
+
const lines = [];
|
|
2863
|
+
function decoration(node) {
|
|
2864
|
+
let output = "";
|
|
2865
|
+
if (node.id) {
|
|
2866
|
+
output += `#${node.id}`;
|
|
2867
|
+
}
|
|
2868
|
+
if (node.hasAttribute("class")) {
|
|
2869
|
+
output += `.${node.classList.join(".")}`;
|
|
2870
|
+
}
|
|
2871
|
+
return output;
|
|
2872
|
+
}
|
|
2873
|
+
function writeNode(node, level, sibling) {
|
|
2874
|
+
if (node.parent) {
|
|
2875
|
+
const indent = " ".repeat(level - 1);
|
|
2876
|
+
const l = node.childElements.length > 0 ? "\u252C" : "\u2500";
|
|
2877
|
+
const b = sibling < node.parent.childElements.length - 1 ? "\u251C" : "\u2514";
|
|
2878
|
+
lines.push(`${indent}${b}\u2500${l} ${node.tagName}${decoration(node)}`);
|
|
2879
|
+
} else {
|
|
2880
|
+
lines.push("(root)");
|
|
2881
|
+
}
|
|
2882
|
+
node.childElements.forEach((child, index) => {
|
|
2883
|
+
writeNode(child, level + 1, index);
|
|
2884
|
+
});
|
|
2885
|
+
}
|
|
2886
|
+
writeNode(root, 0, 0);
|
|
2887
|
+
return lines;
|
|
2888
|
+
}
|
|
2889
|
+
|
|
2819
2890
|
function escape(value) {
|
|
2820
2891
|
return JSON.stringify(value);
|
|
2821
2892
|
}
|
|
@@ -12086,33 +12157,8 @@ class Engine {
|
|
|
12086
12157
|
}
|
|
12087
12158
|
dumpTree(source) {
|
|
12088
12159
|
const parser = this.instantiateParser();
|
|
12089
|
-
const
|
|
12090
|
-
|
|
12091
|
-
function decoration(node) {
|
|
12092
|
-
let output = "";
|
|
12093
|
-
if (node.id) {
|
|
12094
|
-
output += `#${node.id}`;
|
|
12095
|
-
}
|
|
12096
|
-
if (node.hasAttribute("class")) {
|
|
12097
|
-
output += `.${node.classList.join(".")}`;
|
|
12098
|
-
}
|
|
12099
|
-
return output;
|
|
12100
|
-
}
|
|
12101
|
-
function writeNode(node, level, sibling) {
|
|
12102
|
-
if (node.parent) {
|
|
12103
|
-
const indent = " ".repeat(level - 1);
|
|
12104
|
-
const l = node.childElements.length > 0 ? "\u252C" : "\u2500";
|
|
12105
|
-
const b = sibling < node.parent.childElements.length - 1 ? "\u251C" : "\u2514";
|
|
12106
|
-
lines.push(`${indent}${b}\u2500${l} ${node.tagName}${decoration(node)}`);
|
|
12107
|
-
} else {
|
|
12108
|
-
lines.push("(root)");
|
|
12109
|
-
}
|
|
12110
|
-
node.childElements.forEach((child, index) => {
|
|
12111
|
-
writeNode(child, level + 1, index);
|
|
12112
|
-
});
|
|
12113
|
-
}
|
|
12114
|
-
writeNode(document, 0, 0);
|
|
12115
|
-
return lines;
|
|
12160
|
+
const root = parser.parseHtml(source[0]);
|
|
12161
|
+
return dumpTree(root);
|
|
12116
12162
|
}
|
|
12117
12163
|
/**
|
|
12118
12164
|
* Get rule documentation.
|
|
@@ -12787,7 +12833,7 @@ class HtmlValidate {
|
|
|
12787
12833
|
}
|
|
12788
12834
|
|
|
12789
12835
|
const name = "html-validate";
|
|
12790
|
-
const version = "8.
|
|
12836
|
+
const version = "8.22.0";
|
|
12791
12837
|
const bugs = "https://gitlab.com/html-validate/html-validate/issues/new";
|
|
12792
12838
|
|
|
12793
12839
|
function definePlugin(plugin) {
|
|
@@ -12875,17 +12921,26 @@ const REPLACERS = [
|
|
|
12875
12921
|
[
|
|
12876
12922
|
// (a\ ) -> (a )
|
|
12877
12923
|
// (a ) -> (a)
|
|
12924
|
+
// (a ) -> (a)
|
|
12878
12925
|
// (a \ ) -> (a )
|
|
12879
|
-
|
|
12880
|
-
|
|
12881
|
-
|
|
12882
|
-
|
|
12926
|
+
/((?:\\\\)*?)(\\?\s+)$/,
|
|
12927
|
+
(_, m1, m2) => m1 + (
|
|
12928
|
+
m2.indexOf('\\') === 0
|
|
12929
|
+
? SPACE
|
|
12930
|
+
: EMPTY
|
|
12931
|
+
)
|
|
12883
12932
|
],
|
|
12884
12933
|
|
|
12885
12934
|
// replace (\ ) with ' '
|
|
12935
|
+
// (\ ) -> ' '
|
|
12936
|
+
// (\\ ) -> '\\ '
|
|
12937
|
+
// (\\\ ) -> '\\ '
|
|
12886
12938
|
[
|
|
12887
|
-
|
|
12888
|
-
() =>
|
|
12939
|
+
/(\\+?)\s/g,
|
|
12940
|
+
(_, m1) => {
|
|
12941
|
+
const {length} = m1;
|
|
12942
|
+
return m1.slice(0, length - length % 2) + SPACE
|
|
12943
|
+
}
|
|
12889
12944
|
],
|
|
12890
12945
|
|
|
12891
12946
|
// Escape metacharacters
|
|
@@ -13113,7 +13168,8 @@ const makeRegex = (pattern, ignoreCase) => {
|
|
|
13113
13168
|
|
|
13114
13169
|
if (!source) {
|
|
13115
13170
|
source = REPLACERS.reduce(
|
|
13116
|
-
(prev,
|
|
13171
|
+
(prev, [matcher, replacer]) =>
|
|
13172
|
+
prev.replace(matcher, replacer.bind(pattern)),
|
|
13117
13173
|
pattern
|
|
13118
13174
|
);
|
|
13119
13175
|
regexCache[pattern] = source;
|
|
@@ -13479,6 +13535,81 @@ const defaults = {
|
|
|
13479
13535
|
showSummary: true,
|
|
13480
13536
|
showSelector: false
|
|
13481
13537
|
};
|
|
13538
|
+
const NEWLINE = /\r\n|[\n\r\u2028\u2029]/;
|
|
13539
|
+
function getMarkerLines(loc, source) {
|
|
13540
|
+
const startLoc = {
|
|
13541
|
+
...loc.start
|
|
13542
|
+
};
|
|
13543
|
+
const endLoc = {
|
|
13544
|
+
...startLoc,
|
|
13545
|
+
...loc.end
|
|
13546
|
+
};
|
|
13547
|
+
const linesAbove = 2;
|
|
13548
|
+
const linesBelow = 3;
|
|
13549
|
+
const startLine = startLoc.line;
|
|
13550
|
+
const startColumn = startLoc.column;
|
|
13551
|
+
const endLine = endLoc.line;
|
|
13552
|
+
const endColumn = endLoc.column;
|
|
13553
|
+
const start = Math.max(startLine - (linesAbove + 1), 0);
|
|
13554
|
+
const end = Math.min(source.length, endLine + linesBelow);
|
|
13555
|
+
const lineDiff = endLine - startLine;
|
|
13556
|
+
const markerLines = {};
|
|
13557
|
+
if (lineDiff) {
|
|
13558
|
+
for (let i = 0; i <= lineDiff; i++) {
|
|
13559
|
+
const lineNumber = i + startLine;
|
|
13560
|
+
if (!startColumn) {
|
|
13561
|
+
markerLines[lineNumber] = true;
|
|
13562
|
+
} else if (i === 0) {
|
|
13563
|
+
const sourceLength = source[lineNumber - 1].length;
|
|
13564
|
+
markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1];
|
|
13565
|
+
} else if (i === lineDiff) {
|
|
13566
|
+
markerLines[lineNumber] = [0, endColumn];
|
|
13567
|
+
} else {
|
|
13568
|
+
const sourceLength = source[lineNumber - i].length;
|
|
13569
|
+
markerLines[lineNumber] = [0, sourceLength];
|
|
13570
|
+
}
|
|
13571
|
+
}
|
|
13572
|
+
} else {
|
|
13573
|
+
if (startColumn === endColumn) {
|
|
13574
|
+
if (startColumn) {
|
|
13575
|
+
markerLines[startLine] = [startColumn, 0];
|
|
13576
|
+
} else {
|
|
13577
|
+
markerLines[startLine] = true;
|
|
13578
|
+
}
|
|
13579
|
+
} else {
|
|
13580
|
+
markerLines[startLine] = [startColumn, endColumn - startColumn];
|
|
13581
|
+
}
|
|
13582
|
+
}
|
|
13583
|
+
return { start, end, markerLines };
|
|
13584
|
+
}
|
|
13585
|
+
function codeFrameColumns(rawLines, loc) {
|
|
13586
|
+
const lines = rawLines.split(NEWLINE);
|
|
13587
|
+
const { start, end, markerLines } = getMarkerLines(loc, lines);
|
|
13588
|
+
const numberMaxWidth = String(end).length;
|
|
13589
|
+
return rawLines.split(NEWLINE, end).slice(start, end).map((line, index) => {
|
|
13590
|
+
const number = start + 1 + index;
|
|
13591
|
+
const paddedNumber = ` ${String(number)}`.slice(-numberMaxWidth);
|
|
13592
|
+
const gutter = ` ${paddedNumber} |`;
|
|
13593
|
+
const hasMarker = markerLines[number];
|
|
13594
|
+
if (hasMarker) {
|
|
13595
|
+
let markerLine = "";
|
|
13596
|
+
if (Array.isArray(hasMarker)) {
|
|
13597
|
+
const markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\t]/g, " ");
|
|
13598
|
+
const numberOfMarkers = hasMarker[1] || 1;
|
|
13599
|
+
markerLine = [
|
|
13600
|
+
"\n ",
|
|
13601
|
+
gutter.replace(/\d/g, " "),
|
|
13602
|
+
" ",
|
|
13603
|
+
markerSpacing,
|
|
13604
|
+
"^".repeat(numberOfMarkers)
|
|
13605
|
+
].join("");
|
|
13606
|
+
}
|
|
13607
|
+
return [">", gutter, line.length > 0 ? ` ${line}` : "", markerLine].join("");
|
|
13608
|
+
} else {
|
|
13609
|
+
return [" ", gutter, line.length > 0 ? ` ${line}` : ""].join("");
|
|
13610
|
+
}
|
|
13611
|
+
}).join("\n");
|
|
13612
|
+
}
|
|
13482
13613
|
function pluralize(word, count) {
|
|
13483
13614
|
return count === 1 ? word : `${word}s`;
|
|
13484
13615
|
}
|
|
@@ -13521,16 +13652,11 @@ function formatMessage(message, parentResult, options) {
|
|
|
13521
13652
|
].filter(String).join(" ");
|
|
13522
13653
|
const result = [firstLine];
|
|
13523
13654
|
if (sourceCode) {
|
|
13524
|
-
|
|
13525
|
-
|
|
13526
|
-
|
|
13527
|
-
|
|
13528
|
-
|
|
13529
|
-
end: getEndLocation(message, sourceCode)
|
|
13530
|
-
},
|
|
13531
|
-
{ highlightCode: false }
|
|
13532
|
-
)
|
|
13533
|
-
);
|
|
13655
|
+
const output = codeFrameColumns(sourceCode, {
|
|
13656
|
+
start: getStartLocation(message),
|
|
13657
|
+
end: getEndLocation(message, sourceCode)
|
|
13658
|
+
});
|
|
13659
|
+
result.push(output);
|
|
13534
13660
|
}
|
|
13535
13661
|
if (options.showSelector) {
|
|
13536
13662
|
result.push(`${kleur.bold("Selector:")} ${message.selector ?? "-"}`);
|