html-validate 11.0.0 → 11.2.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.
Files changed (63) hide show
  1. package/dist/cjs/cli.js +8 -3
  2. package/dist/cjs/cli.js.map +1 -1
  3. package/dist/cjs/core.js +7 -4
  4. package/dist/cjs/core.js.map +1 -1
  5. package/dist/cjs/html-validate.js +35 -50
  6. package/dist/cjs/html-validate.js.map +1 -1
  7. package/dist/cjs/index.js +1 -1
  8. package/dist/cjs/{matchers.js → jest-matchers.js} +66 -38
  9. package/dist/cjs/jest-matchers.js.map +1 -0
  10. package/dist/cjs/{matcher-utils.js → jest-utils.js} +1 -8
  11. package/dist/cjs/jest-utils.js.map +1 -0
  12. package/dist/cjs/jest-worker.js.map +1 -1
  13. package/dist/cjs/jest.js +10 -13
  14. package/dist/cjs/jest.js.map +1 -1
  15. package/dist/cjs/vitest-matchers.js +281 -0
  16. package/dist/cjs/vitest-matchers.js.map +1 -0
  17. package/dist/cjs/vitest-utils.js +120 -0
  18. package/dist/cjs/vitest-utils.js.map +1 -0
  19. package/dist/cjs/vitest-worker.d.ts +1 -0
  20. package/dist/cjs/vitest-worker.js +63 -0
  21. package/dist/cjs/vitest-worker.js.map +1 -0
  22. package/dist/cjs/vitest.js +9 -7
  23. package/dist/cjs/vitest.js.map +1 -1
  24. package/dist/esm/browser.js +1 -1
  25. package/dist/esm/cli.js +10 -5
  26. package/dist/esm/cli.js.map +1 -1
  27. package/dist/esm/core-browser.js +1 -1
  28. package/dist/esm/core-nodejs.js +1 -1
  29. package/dist/esm/core.js +6 -4
  30. package/dist/esm/core.js.map +1 -1
  31. package/dist/esm/html-validate.js +37 -51
  32. package/dist/esm/html-validate.js.map +1 -1
  33. package/dist/esm/index.js +2 -2
  34. package/dist/esm/jest-matchers.js +263 -0
  35. package/dist/esm/jest-matchers.js.map +1 -0
  36. package/dist/esm/{matcher-utils.js → jest-utils.js} +3 -9
  37. package/dist/esm/jest-utils.js.map +1 -0
  38. package/dist/esm/jest-worker.js.map +1 -1
  39. package/dist/esm/jest.js +6 -9
  40. package/dist/esm/jest.js.map +1 -1
  41. package/dist/esm/{matchers.js → vitest-matchers.js} +62 -45
  42. package/dist/esm/vitest-matchers.js.map +1 -0
  43. package/dist/esm/vitest-utils.js +116 -0
  44. package/dist/esm/vitest-utils.js.map +1 -0
  45. package/dist/esm/vitest-worker.d.ts +1 -0
  46. package/dist/esm/vitest-worker.js +62 -0
  47. package/dist/esm/vitest-worker.js.map +1 -0
  48. package/dist/esm/vitest.js +9 -7
  49. package/dist/esm/vitest.js.map +1 -1
  50. package/dist/types/vitest.d.ts +18 -0
  51. package/package.json +7 -9
  52. package/dist/cjs/jest-diff.js +0 -41
  53. package/dist/cjs/jest-diff.js.map +0 -1
  54. package/dist/cjs/matcher-utils.js.map +0 -1
  55. package/dist/cjs/matchers-jestonly.js +0 -44
  56. package/dist/cjs/matchers-jestonly.js.map +0 -1
  57. package/dist/cjs/matchers.js.map +0 -1
  58. package/dist/esm/jest-diff.js +0 -20
  59. package/dist/esm/jest-diff.js.map +0 -1
  60. package/dist/esm/matcher-utils.js.map +0 -1
  61. package/dist/esm/matchers-jestonly.js +0 -41
  62. package/dist/esm/matchers-jestonly.js.map +0 -1
  63. package/dist/esm/matchers.js.map +0 -1
@@ -1,9 +1,9 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
+ import { parseArgs } from 'node:util';
3
4
  import kleur from 'kleur';
4
- import minimist from 'minimist';
5
- import { a3 as name, v as version, y as SchemaValidationError, O as isUserError, a4 as bugs } from './core.js';
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';
5
+ import { Q as name, a3 as version, S as SchemaValidationError, K as isUserError, q as bugs } from './core.js';
6
+ import { M as Mode, m as modeToFlag, C as CLI, a as haveImportMetaResolve, I as ImportResolveMissingError, d as dump, p as printConfig, i as init, l as lint, h as handleSchemaValidationError } from './cli.js';
7
7
  import 'ajv';
8
8
  import './elements.js';
9
9
  import './meta-helper.js';
@@ -17,7 +17,6 @@ import 'node:fs/promises';
17
17
  import 'node:url';
18
18
  import 'node:module';
19
19
  import 'node:path/posix';
20
- import 'glob';
21
20
  import 'prompts';
22
21
 
23
22
  function getMode(argv2) {
@@ -88,51 +87,38 @@ function handleUnknownError(err) {
88
87
  )
89
88
  );
90
89
  }
91
- const argv = minimist(process.argv.slice(2), {
92
- string: [
93
- "c",
94
- "config",
95
- "ext",
96
- "f",
97
- "formatter",
98
- "max-warnings",
99
- "p",
100
- "preset",
101
- "rule",
102
- "stdin-filename"
103
- ],
104
- boolean: [
105
- "init",
106
- "dump-events",
107
- "dump-source",
108
- "dump-tokens",
109
- "dump-tree",
110
- "h",
111
- "help",
112
- "performance",
113
- "print-config",
114
- "stdin",
115
- "version"
116
- ],
117
- alias: {
118
- c: "config",
119
- f: "formatter",
120
- p: "preset",
121
- h: "help"
122
- },
123
- default: {
124
- ext: "html",
125
- formatter: "stylish"
126
- },
127
- unknown: (opt) => {
128
- if (opt.startsWith("-")) {
129
- process.stderr.write(`unknown option ${opt}
90
+ const { values: argv, positionals } = (() => {
91
+ try {
92
+ return parseArgs({
93
+ args: process.argv.slice(2),
94
+ options: {
95
+ config: { type: "string", short: "c" },
96
+ "dump-events": { type: "boolean", default: false },
97
+ "dump-source": { type: "boolean", default: false },
98
+ "dump-tokens": { type: "boolean", default: false },
99
+ "dump-tree": { type: "boolean", default: false },
100
+ ext: { type: "string", default: "html" },
101
+ formatter: { type: "string", short: "f", default: "stylish" },
102
+ help: { type: "boolean", short: "h", default: false },
103
+ init: { type: "boolean", default: false },
104
+ "max-warnings": { type: "string" },
105
+ performance: { type: "boolean", default: false },
106
+ preset: { type: "string", short: "p" },
107
+ "print-config": { type: "boolean", default: false },
108
+ rule: { type: "string" },
109
+ stdin: { type: "boolean", default: false },
110
+ "stdin-filename": { type: "string" },
111
+ version: { type: "boolean", default: false }
112
+ },
113
+ allowPositionals: true,
114
+ strict: true
115
+ });
116
+ } catch (err) {
117
+ process.stderr.write(`${err.message}
130
118
  `);
131
- process.exit(1);
132
- }
133
- return true;
119
+ process.exit(1);
134
120
  }
135
- });
121
+ })();
136
122
  function showUsage() {
137
123
  process.stdout.write(`${name}-${version}
138
124
  Usage: html-validate [OPTIONS] [FILENAME..] [DIR..]
@@ -177,7 +163,7 @@ function showVersion() {
177
163
  `);
178
164
  }
179
165
  if (argv.stdin) {
180
- argv._.push("-");
166
+ positionals.push("-");
181
167
  }
182
168
  if (argv.version) {
183
169
  showVersion();
@@ -187,7 +173,7 @@ if (argv.help) {
187
173
  showUsage();
188
174
  process.exit();
189
175
  }
190
- if (argv._.length === 0) {
176
+ if (positionals.length === 0) {
191
177
  const mode = getMode(argv);
192
178
  if (mode === Mode.LINT) {
193
179
  showUsage();
@@ -223,9 +209,9 @@ async function run() {
223
209
  const extensions = argv.ext.split(",").map((cur) => {
224
210
  return cur.startsWith(".") ? cur.slice(1) : cur;
225
211
  });
226
- const files = await cli.expandFiles(argv._, { extensions });
212
+ const files = await cli.expandFiles(positionals, { extensions });
227
213
  if (files.length === 0 && mode !== Mode.INIT) {
228
- console.error("No files matching patterns", argv._);
214
+ console.error("No files matching patterns", positionals);
229
215
  process.exit(1);
230
216
  }
231
217
  try {
@@ -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\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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"}
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 { parseArgs } from \"node:util\";\nimport kleur from \"kleur\";\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\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 { values: argv, positionals } = (() => {\n\ttry {\n\t\treturn parseArgs({\n\t\t\targs: process.argv.slice(2),\n\t\t\toptions: {\n\t\t\t\tconfig: { type: \"string\" as const, short: \"c\" },\n\t\t\t\t\"dump-events\": { type: \"boolean\" as const, default: false },\n\t\t\t\t\"dump-source\": { type: \"boolean\" as const, default: false },\n\t\t\t\t\"dump-tokens\": { type: \"boolean\" as const, default: false },\n\t\t\t\t\"dump-tree\": { type: \"boolean\" as const, default: false },\n\t\t\t\text: { type: \"string\" as const, default: \"html\" },\n\t\t\t\tformatter: { type: \"string\" as const, short: \"f\", default: \"stylish\" },\n\t\t\t\thelp: { type: \"boolean\" as const, short: \"h\", default: false },\n\t\t\t\tinit: { type: \"boolean\" as const, default: false },\n\t\t\t\t\"max-warnings\": { type: \"string\" as const },\n\t\t\t\tperformance: { type: \"boolean\" as const, default: false },\n\t\t\t\tpreset: { type: \"string\" as const, short: \"p\" },\n\t\t\t\t\"print-config\": { type: \"boolean\" as const, default: false },\n\t\t\t\trule: { type: \"string\" as const },\n\t\t\t\tstdin: { type: \"boolean\" as const, default: false },\n\t\t\t\t\"stdin-filename\": { type: \"string\" as const },\n\t\t\t\tversion: { type: \"boolean\" as const, default: false },\n\t\t\t},\n\t\t\tallowPositionals: true,\n\t\t\tstrict: true,\n\t\t});\n\t} catch (err) {\n\t\tprocess.stderr.write(`${(err as Error).message}\\n`);\n\t\tprocess.exit(1);\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\tpositionals.push(\"-\");\n}\n\nif (argv.version) {\n\tshowVersion();\n\tprocess.exit();\n}\n\nif (argv.help) {\n\tshowUsage();\n\tprocess.exit();\n}\n\nif (positionals.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(positionals, { extensions });\n\tif (files.length === 0 && mode !== Mode.INIT) {\n\t\tconsole.error(\"No files matching patterns\", positionals);\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 } from './core-nodejs.js';
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 Node, a as Parser, P as PerformanceTracker, R as Reporter, w as ResolvedConfig, x as Rule, y as SchemaValidationError, z as Severity, S as StaticConfigLoader, T as TextClassification, B as TextContent, F as TextNode, U as UserError, W as WrappedError, G as ariaNaming, I as classifyNodeText, J as configPresets, K as defineConfig, L as definePlugin, k as formatterFactory, O as isUserError, Q as keywordPatternMatcher, V as ruleExists, X as sliceLocation, Y as staticResolver, v as version, Z as walk } from './core.js';
2
+ export { A as Attribute, C as Config, a as ConfigError, b as ConfigLoader, D as DOMNode, c as DOMTokenList, d as DOMTree, e as DynamicValue, f as EventHandler, H as HtmlElement, M as MetaCopyableProperty, g as MetaTable, N as NestedError, h as Node, P as Parser, i as PerformanceTracker, R as Reporter, j as ResolvedConfig, k as Rule, S as SchemaValidationError, l as Severity, m as StaticConfigLoader, T as TextClassification, n as TextContent, o as TextNode, U as UserError, W as WrappedError, p as ariaNaming, r as classifyNodeText, X as configPresets, w as defineConfig, x as definePlugin, F as formatterFactory, K as isUserError, O as keywordPatternMatcher, Y as ruleExists, Z as sliceLocation, _ as staticResolver, a3 as version, a5 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';
@@ -16,6 +16,6 @@ import './utils/natural-join.js';
16
16
  import '@html-validate/stylish';
17
17
  import 'semver';
18
18
  import 'node:path/posix';
19
- import 'glob';
20
19
  import 'prompts';
20
+ import 'node:util';
21
21
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,263 @@
1
+ import { d as diverge, a as createSyncFn, c as codeframe, i as isThenable } from './jest-utils.js';
2
+ import { v as deepmerge, L as jestWorkerPath } from './core.js';
3
+ import { toMatchSnapshot, toMatchInlineSnapshot } from 'jest-snapshot';
4
+
5
+ function createMatcher$6() {
6
+ function toBeValid(report) {
7
+ if (report.valid) {
8
+ return {
9
+ pass: true,
10
+ message: (
11
+ /* istanbul ignore next */
12
+ () => "Result should not contain error"
13
+ )
14
+ };
15
+ } else {
16
+ const firstError = report.results[0].messages[0];
17
+ return {
18
+ pass: false,
19
+ message: () => `Result should be valid but had error "${firstError.message}"`
20
+ };
21
+ }
22
+ }
23
+ return diverge(toBeValid);
24
+ }
25
+
26
+ function createMatcher$5() {
27
+ function toBeInvalid(report) {
28
+ if (report.valid) {
29
+ return {
30
+ pass: false,
31
+ message: () => "Result should be invalid but had no errors"
32
+ };
33
+ } else {
34
+ return {
35
+ pass: true,
36
+ message: (
37
+ /* istanbul ignore next */
38
+ () => "Result should not contain error"
39
+ )
40
+ };
41
+ }
42
+ }
43
+ return diverge(toBeInvalid);
44
+ }
45
+
46
+ function isMessage(arg) {
47
+ if (!arg || typeof arg !== "object") {
48
+ return false;
49
+ }
50
+ return [
51
+ "ruleId",
52
+ "severity",
53
+ "message",
54
+ "offset",
55
+ "line",
56
+ "column",
57
+ "size",
58
+ "selector",
59
+ "context"
60
+ ].some((key) => key in arg);
61
+ }
62
+ function isConfig(arg) {
63
+ if (!arg || typeof arg !== "object") {
64
+ return false;
65
+ }
66
+ return ["root", "extends", "elements", "plugin", "transform", "rules"].some((key) => key in arg);
67
+ }
68
+ function isString(arg) {
69
+ return typeof arg === "string";
70
+ }
71
+ function getMarkup(src) {
72
+ if (typeof HTMLElement !== "undefined" && src instanceof HTMLElement) {
73
+ return src.outerHTML;
74
+ }
75
+ if (typeof src === "string") {
76
+ return src;
77
+ } else {
78
+ throw new TypeError(`Failed to get markup from "${typeof src}" argument`);
79
+ }
80
+ }
81
+ function createMatcher$4(expect) {
82
+ function toHTMLValidate(actual, arg0, arg1, arg2) {
83
+ const markup = getMarkup(actual);
84
+ const message = isMessage(arg0) ? arg0 : void 0;
85
+ const config = isConfig(arg0) ? arg0 : isConfig(arg1) ? arg1 : void 0;
86
+ const filename = isString(arg0) ? arg0 : isString(arg1) ? arg1 : arg2;
87
+ return toHTMLValidateImpl.call(this, expect, markup, message, config, filename);
88
+ }
89
+ return diverge(toHTMLValidate);
90
+ }
91
+ function toHTMLValidateImpl(expect, actual, expectedError, userConfig, filename) {
92
+ const defaultConfig = {
93
+ rules: {
94
+ /* jsdom normalizes style so disabling rule when using this matcher or it
95
+ * gets quite noisy when configured with self-closing */
96
+ "void-style": "off"
97
+ }
98
+ };
99
+ const config = deepmerge(defaultConfig, userConfig ?? {});
100
+ const actualFilename = filename ?? this.testPath ?? "inline";
101
+ const syncFn = createSyncFn(jestWorkerPath);
102
+ const report = syncFn(actual, actualFilename, config);
103
+ const pass = report.valid;
104
+ const result = report.results[0];
105
+ if (pass) {
106
+ return { pass, message: () => "HTML is valid when an error was expected" };
107
+ } else {
108
+ if (expectedError) {
109
+ const actual2 = result.messages;
110
+ const expected = expect.arrayContaining([expect.objectContaining(expectedError)]);
111
+ const errorPass = this.equals(actual2, expected);
112
+ const diffString = this.utils.diff(expected, actual2, {
113
+ expand: this.expand,
114
+ aAnnotation: "Expected error",
115
+ bAnnotation: "Actual error"
116
+ });
117
+ const hint = this.utils.matcherHint(".not.toHTMLValidate", void 0, void 0, {
118
+ comment: "expected error"
119
+ });
120
+ const expectedErrorMessage = () => [
121
+ hint,
122
+ "",
123
+ "Expected error to be present:",
124
+ this.utils.printExpected(expectedError),
125
+ /* istanbul ignore next */
126
+ diffString ? `
127
+ ${diffString}` : ""
128
+ ].join("\n");
129
+ return { pass: !errorPass, message: expectedErrorMessage };
130
+ }
131
+ const errors = result.messages.map((message) => ` ${message.message} [${message.ruleId}]`);
132
+ return {
133
+ pass,
134
+ message: () => ["Expected HTML to be valid but had the following errors:", ""].concat(errors).join("\n")
135
+ };
136
+ }
137
+ }
138
+
139
+ function toHaveErrorImpl(context, expect, actual, expected) {
140
+ const flattened = actual.results.flatMap((result) => result.messages);
141
+ const matcher = [expect.objectContaining(expected)];
142
+ const pass = context.equals(flattened, matcher);
143
+ const diffString = context.utils.diff(matcher, flattened, { expand: context.expand });
144
+ const hint = context.utils.matcherHint(".toHaveError");
145
+ const prettyExpected = context.utils.printExpected(matcher);
146
+ const prettyReceived = context.utils.printReceived(flattened);
147
+ const resultMessage = () => {
148
+ return [
149
+ hint,
150
+ "",
151
+ "Expected error to equal:",
152
+ ` ${prettyExpected}`,
153
+ "Received:",
154
+ ` ${prettyReceived}`,
155
+ /* istanbul ignore next */
156
+ diffString ? `
157
+ Difference:
158
+
159
+ ${diffString}` : ""
160
+ ].join("\n");
161
+ };
162
+ return { pass, message: resultMessage };
163
+ }
164
+ function createMatcher$3(expect) {
165
+ function toHaveError(actual, arg1, arg2, arg3) {
166
+ if (typeof arg1 === "string") {
167
+ const expected = {
168
+ ruleId: arg1,
169
+ message: arg2
170
+ };
171
+ if (arg3 !== void 0) {
172
+ expected.context = arg3;
173
+ }
174
+ return toHaveErrorImpl(this, expect, actual, expected);
175
+ } else {
176
+ return toHaveErrorImpl(this, expect, actual, arg1);
177
+ }
178
+ }
179
+ return diverge(toHaveError);
180
+ }
181
+
182
+ function createMatcher$2(expect) {
183
+ function toHaveErrors(report, errors) {
184
+ const flattened = report.results.flatMap((result) => result.messages);
185
+ const matcher = errors.map((entry) => {
186
+ if (Array.isArray(entry)) {
187
+ const [ruleId, message] = entry;
188
+ return expect.objectContaining({ ruleId, message });
189
+ } else {
190
+ return expect.objectContaining(entry);
191
+ }
192
+ });
193
+ const pass = this.equals(flattened, matcher);
194
+ const diffString = this.utils.diff(matcher, flattened, { expand: this.expand });
195
+ const resultMessage = () => this.utils.matcherHint(".toHaveErrors") + `
196
+
197
+ Expected error to equal:
198
+ ${this.utils.printExpected(matcher)}
199
+ Received:
200
+ ${this.utils.printReceived(flattened)}` + /* istanbul ignore next */
201
+ (diffString ? `
202
+
203
+ Difference:
204
+
205
+ ${diffString}` : "");
206
+ return { pass, message: resultMessage };
207
+ }
208
+ return diverge(toHaveErrors);
209
+ }
210
+
211
+ function getResults(filename, value) {
212
+ if (typeof value === "string") {
213
+ const syncFn = createSyncFn(jestWorkerPath);
214
+ const report = syncFn(value, filename, {
215
+ rules: {
216
+ "void-style": "off"
217
+ }
218
+ });
219
+ return report.results.map((it) => {
220
+ return { ...it, filePath: "inline" };
221
+ });
222
+ } else {
223
+ return value.results;
224
+ }
225
+ }
226
+
227
+ function createMatcher$1() {
228
+ function toMatchCodeframe(actual, ...rest) {
229
+ const filename = this.testPath ?? "inline";
230
+ const results = getResults(filename, actual);
231
+ const snapshot = codeframe(results).replaceAll(/\s+$/gm, "");
232
+ return toMatchSnapshot.call(this, snapshot, ...rest);
233
+ }
234
+ return diverge(toMatchCodeframe);
235
+ }
236
+
237
+ function toMatchInlineCodeframeImpl(context, actual, ...rest) {
238
+ const filename = context.testPath ?? "inline";
239
+ const results = getResults(filename, actual);
240
+ const snapshot = codeframe(results).replaceAll(/\s+$/gm, "");
241
+ return toMatchInlineSnapshot.call(context, snapshot, ...rest);
242
+ }
243
+ function toMatchInlineCodeframe(actual, ...rest) {
244
+ const context = {
245
+ ...this,
246
+ /* Capture the original stack frames as they are needed by "jest-snapshot"
247
+ * to determine where to write the inline snapshots. When resolving the
248
+ * promise the original stack frames are lost and the snapshot will be
249
+ * written in this files instaed. */
250
+ error: new Error("stacktrace")
251
+ };
252
+ if (isThenable(actual)) {
253
+ return actual.then((resolved) => toMatchInlineCodeframeImpl(context, resolved, ...rest));
254
+ } else {
255
+ return toMatchInlineCodeframeImpl(context, actual, ...rest);
256
+ }
257
+ }
258
+ function createMatcher() {
259
+ return toMatchInlineCodeframe;
260
+ }
261
+
262
+ export { createMatcher$1 as a, createMatcher$2 as b, createMatcher as c, createMatcher$3 as d, createMatcher$4 as e, createMatcher$5 as f, createMatcher$6 as g };
263
+ //# sourceMappingURL=jest-matchers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jest-matchers.js","sources":["../../src/jest/matchers/to-be-valid.ts","../../src/jest/matchers/to-be-invalid.ts","../../src/jest/matchers/to-htmlvalidate.ts","../../src/jest/matchers/to-have-error.ts","../../src/jest/matchers/to-have-errors.ts","../../src/jest/matchers/get-results.ts","../../src/jest/matchers/to-match-codeframe.ts","../../src/jest/matchers/to-match-inline-codeframe.ts"],"sourcesContent":["import { type SyncExpectationResult } from \"expect\";\nimport { type Report } from \"../../reporter\";\nimport { type MaybeAsyncCallback, diverge } from \"../utils\";\n\nfunction createMatcher(): MaybeAsyncCallback<Report, []> {\n\tfunction toBeValid(report: Report): SyncExpectationResult {\n\t\tif (report.valid) {\n\t\t\treturn {\n\t\t\t\tpass: true,\n\t\t\t\tmessage: /* istanbul ignore next */ () => \"Result should not contain error\",\n\t\t\t};\n\t\t} else {\n\t\t\tconst firstError = report.results[0].messages[0];\n\t\t\treturn {\n\t\t\t\tpass: false,\n\t\t\t\tmessage: () => `Result should be valid but had error \"${firstError.message}\"`,\n\t\t\t};\n\t\t}\n\t}\n\treturn diverge(toBeValid);\n}\n\nexport { createMatcher as toBeValid };\n","import { type SyncExpectationResult } from \"expect\";\nimport { type Report } from \"../../reporter\";\nimport { type MaybeAsyncCallback, diverge } from \"../utils\";\n\nfunction createMatcher(): MaybeAsyncCallback<Report, []> {\n\tfunction toBeInvalid(report: Report): SyncExpectationResult {\n\t\tif (report.valid) {\n\t\t\treturn {\n\t\t\t\tpass: false,\n\t\t\t\tmessage: () => \"Result should be invalid but had no errors\",\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tpass: true,\n\t\t\t\tmessage: /* istanbul ignore next */ () => \"Result should not contain error\",\n\t\t\t};\n\t\t}\n\t}\n\treturn diverge(toBeInvalid);\n}\n\nexport { createMatcher as toBeInvalid };\n","import { type expect } from \"@jest/globals\";\nimport deepmerge from \"deepmerge\";\nimport { type MatcherContext, type SyncExpectationResult } from \"expect\";\nimport { type ConfigData } from \"../../config\";\nimport { type Message } from \"../../message\";\nimport { type MaybeAsyncCallback, diverge } from \"../utils\";\nimport { type ValidateStringFn, createSyncFn, jestWorkerPath } from \"../worker\";\n\ntype JestExpect = typeof expect;\n\nfunction isMessage(arg: Arg1 | undefined): arg is Partial<Message> {\n\tif (!arg || typeof arg !== \"object\") {\n\t\treturn false;\n\t}\n\treturn [\n\t\t\"ruleId\",\n\t\t\"severity\",\n\t\t\"message\",\n\t\t\"offset\",\n\t\t\"line\",\n\t\t\"column\",\n\t\t\"size\",\n\t\t\"selector\",\n\t\t\"context\",\n\t].some((key) => key in arg);\n}\n\nfunction isConfig(arg: Arg1 | undefined): arg is ConfigData {\n\tif (!arg || typeof arg !== \"object\") {\n\t\treturn false;\n\t}\n\treturn [\"root\", \"extends\", \"elements\", \"plugin\", \"transform\", \"rules\"].some((key) => key in arg);\n}\n\nfunction isString(arg: Arg1 | undefined): arg is string {\n\treturn typeof arg === \"string\";\n}\n\nfunction getMarkup(src: unknown): string {\n\tif (typeof HTMLElement !== \"undefined\" && src instanceof HTMLElement) {\n\t\treturn (src as { outerHTML: string }).outerHTML;\n\t}\n\t/* istanbul ignore else: prototype only allows string or HTMLElement */\n\tif (typeof src === \"string\") {\n\t\treturn src;\n\t} else {\n\t\tthrow new TypeError(`Failed to get markup from \"${typeof src}\" argument`);\n\t}\n}\n\ntype Arg1 = Partial<Message> | ConfigData | string;\ntype Arg2 = ConfigData | string;\ntype Arg3 = string;\n\nfunction createMatcher(expect: JestExpect): MaybeAsyncCallback<unknown, [Arg1?, Arg2?, Arg3?]> {\n\tfunction toHTMLValidate(\n\t\tthis: MatcherContext,\n\t\tactual: unknown,\n\t\targ0?: Arg1,\n\t\targ1?: Arg2,\n\t\targ2?: Arg3,\n\t): SyncExpectationResult {\n\t\tconst markup = getMarkup(actual);\n\t\tconst message = isMessage(arg0) ? arg0 : undefined;\n\t\tconst config = isConfig(arg0) ? arg0 : isConfig(arg1) ? arg1 : undefined; // eslint-disable-line sonarjs/no-nested-conditional -- easier to read than the alternative */\n\t\tconst filename = isString(arg0) ? arg0 : isString(arg1) ? arg1 : arg2; // eslint-disable-line sonarjs/no-nested-conditional -- easier to read than the alternative */\n\t\treturn toHTMLValidateImpl.call(this, expect, markup, message, config, filename);\n\t}\n\treturn diverge(toHTMLValidate);\n}\n\n/* eslint-disable-next-line @typescript-eslint/max-params -- technical debt */\nfunction toHTMLValidateImpl(\n\tthis: MatcherContext,\n\texpect: JestExpect,\n\tactual: string,\n\texpectedError?: Partial<Message>,\n\tuserConfig?: ConfigData,\n\tfilename?: string,\n): SyncExpectationResult {\n\tconst defaultConfig = {\n\t\trules: {\n\t\t\t/* jsdom normalizes style so disabling rule when using this matcher or it\n\t\t\t * gets quite noisy when configured with self-closing */\n\t\t\t\"void-style\": \"off\",\n\t\t},\n\t};\n\tconst config = deepmerge(defaultConfig, userConfig ?? {});\n\t/* istanbul ignore next: cant figure out when this would be unset */\n\tconst actualFilename = filename ?? this.testPath ?? \"inline\";\n\n\tconst syncFn = createSyncFn<ValidateStringFn>(jestWorkerPath);\n\tconst report = syncFn(actual, actualFilename, config);\n\tconst pass = report.valid;\n\tconst result = report.results[0];\n\tif (pass) {\n\t\treturn { pass, message: () => \"HTML is valid when an error was expected\" };\n\t} else {\n\t\tif (expectedError) {\n\t\t\tconst actual = result.messages;\n\t\t\tconst expected = expect.arrayContaining([expect.objectContaining(expectedError)]);\n\t\t\tconst errorPass = this.equals(actual, expected);\n\t\t\tconst diffString = this.utils.diff(expected, actual, {\n\t\t\t\texpand: this.expand,\n\t\t\t\taAnnotation: \"Expected error\",\n\t\t\t\tbAnnotation: \"Actual error\",\n\t\t\t});\n\t\t\tconst hint = this.utils.matcherHint(\".not.toHTMLValidate\", undefined, undefined, {\n\t\t\t\tcomment: \"expected error\",\n\t\t\t});\n\t\t\tconst expectedErrorMessage = (): string =>\n\t\t\t\t[\n\t\t\t\t\thint,\n\t\t\t\t\t\"\",\n\t\t\t\t\t\"Expected error to be present:\",\n\t\t\t\t\tthis.utils.printExpected(expectedError),\n\t\t\t\t\t/* istanbul ignore next */ diffString ? `\\n${diffString}` : \"\",\n\t\t\t\t].join(\"\\n\");\n\t\t\treturn { pass: !errorPass, message: expectedErrorMessage };\n\t\t}\n\n\t\tconst errors = result.messages.map((message) => ` ${message.message} [${message.ruleId}]`);\n\t\treturn {\n\t\t\tpass,\n\t\t\tmessage: () =>\n\t\t\t\t[\"Expected HTML to be valid but had the following errors:\", \"\"].concat(errors).join(\"\\n\"),\n\t\t};\n\t}\n}\n\nexport { createMatcher as toHTMLValidate };\n","import { type expect } from \"@jest/globals\";\nimport { type MatcherContext, type SyncExpectationResult } from \"expect\";\nimport { type Message } from \"../../message\";\nimport { type Report } from \"../../reporter\";\nimport { type MaybeAsyncCallback, diverge } from \"../utils\";\n\ntype JestExpect = typeof expect;\n\nfunction toHaveErrorImpl(\n\tcontext: MatcherContext,\n\texpect: JestExpect,\n\tactual: Report,\n\texpected: Partial<Message>,\n): SyncExpectationResult {\n\tconst flattened = actual.results.flatMap((result) => result.messages);\n\tconst matcher = [expect.objectContaining(expected)];\n\tconst pass = context.equals(flattened, matcher);\n\tconst diffString = context.utils.diff(matcher, flattened, { expand: context.expand });\n\tconst hint = context.utils.matcherHint(\".toHaveError\");\n\tconst prettyExpected = context.utils.printExpected(matcher);\n\tconst prettyReceived = context.utils.printReceived(flattened);\n\tconst resultMessage = (): string => {\n\t\treturn [\n\t\t\thint,\n\t\t\t\"\",\n\t\t\t\"Expected error to equal:\",\n\t\t\t` ${prettyExpected}`,\n\t\t\t\"Received:\",\n\t\t\t` ${prettyReceived}`,\n\t\t\t/* istanbul ignore next */ diffString ? `\\nDifference:\\n\\n${diffString}` : \"\",\n\t\t].join(\"\\n\");\n\t};\n\treturn { pass, message: resultMessage };\n}\n\nfunction createMatcher(\n\texpect: JestExpect,\n):\n\t| MaybeAsyncCallback<Report, [Partial<Message>]>\n\t| MaybeAsyncCallback<Report, [string, string, unknown?]> {\n\tfunction toHaveError(\n\t\tthis: MatcherContext,\n\t\tactual: Report,\n\t\terror: Partial<Message>,\n\t): SyncExpectationResult;\n\tfunction toHaveError(\n\t\tthis: MatcherContext,\n\t\tactual: Report,\n\t\truleId: string,\n\t\tmessage: string,\n\t\tcontext?: unknown,\n\t): SyncExpectationResult;\n\tfunction toHaveError(\n\t\tthis: MatcherContext,\n\t\tactual: Report,\n\t\targ1: string | Partial<Message>,\n\t\targ2?: string,\n\t\targ3?: unknown,\n\t): SyncExpectationResult {\n\t\tif (typeof arg1 === \"string\") {\n\t\t\tconst expected: Partial<Message> = {\n\t\t\t\truleId: arg1,\n\t\t\t\tmessage: arg2,\n\t\t\t};\n\t\t\tif (arg3 !== undefined) {\n\t\t\t\texpected.context = arg3;\n\t\t\t}\n\t\t\treturn toHaveErrorImpl(this, expect, actual, expected);\n\t\t} else {\n\t\t\treturn toHaveErrorImpl(this, expect, actual, arg1);\n\t\t}\n\t}\n\treturn diverge(toHaveError);\n}\n\nexport { createMatcher as toHaveError };\n","/* eslint-disable prefer-template -- technical debt, should be refactored */\n\nimport { type expect } from \"@jest/globals\";\nimport { type MatcherContext, type SyncExpectationResult } from \"expect\";\nimport { type Report } from \"../../reporter\";\nimport { type MaybeAsyncCallback, diverge } from \"../utils\";\n\ntype JestExpect = typeof expect;\n\nfunction createMatcher(\n\texpect: JestExpect,\n): MaybeAsyncCallback<Report, [Array<[string, string] | Record<string, unknown>>]> {\n\tfunction toHaveErrors(\n\t\tthis: MatcherContext,\n\t\treport: Report,\n\t\terrors: Array<[string, string] | Record<string, unknown>>,\n\t): SyncExpectationResult {\n\t\tconst flattened = report.results.flatMap((result) => result.messages);\n\t\tconst matcher = errors.map((entry) => {\n\t\t\tif (Array.isArray(entry)) {\n\t\t\t\tconst [ruleId, message] = entry;\n\t\t\t\treturn expect.objectContaining({ ruleId, message });\n\t\t\t} else {\n\t\t\t\treturn expect.objectContaining(entry);\n\t\t\t}\n\t\t});\n\t\tconst pass = this.equals(flattened, matcher);\n\t\tconst diffString = this.utils.diff(matcher, flattened, { expand: this.expand });\n\t\tconst resultMessage = (): string =>\n\t\t\tthis.utils.matcherHint(\".toHaveErrors\") +\n\t\t\t\"\\n\\n\" +\n\t\t\t\"Expected error to equal:\\n\" +\n\t\t\t` ${this.utils.printExpected(matcher)}\\n` +\n\t\t\t\"Received:\\n\" +\n\t\t\t` ${this.utils.printReceived(flattened)}` +\n\t\t\t/* istanbul ignore next */ (diffString ? `\\n\\nDifference:\\n\\n${diffString}` : \"\");\n\n\t\treturn { pass, message: resultMessage };\n\t}\n\treturn diverge(toHaveErrors);\n}\n\nexport { createMatcher as toHaveErrors };\n","import { type Report, type Result } from \"../../reporter\";\nimport { type ValidateStringFn, createSyncFn, jestWorkerPath } from \"../worker\";\n\n/**\n * @internal\n */\nexport function getResults(filename: string, value: Report | string): Result[] {\n\tif (typeof value === \"string\") {\n\t\tconst syncFn = createSyncFn<ValidateStringFn>(jestWorkerPath);\n\t\tconst report = syncFn(value, filename, {\n\t\t\trules: {\n\t\t\t\t\"void-style\": \"off\",\n\t\t\t},\n\t\t});\n\t\treturn report.results.map((it) => {\n\t\t\treturn { ...it, filePath: \"inline\" };\n\t\t});\n\t} else {\n\t\treturn value.results;\n\t}\n}\n","import { type MatcherContext, type SyncExpectationResult } from \"expect\";\nimport { toMatchSnapshot } from \"jest-snapshot\";\nimport { type Report } from \"../../reporter\";\nimport { type MaybeAsyncCallback, codeframe, diverge } from \"../utils\";\nimport { getResults } from \"./get-results\";\n\nfunction createMatcher(): MaybeAsyncCallback<Report | string, [Array<string | object>]> {\n\tfunction toMatchCodeframe(\n\t\tthis: MatcherContext,\n\t\tactual: Report | string,\n\t\t...rest: Array<string | object>\n\t): SyncExpectationResult {\n\t\t/* istanbul ignore next: cant figure out when this would be unset */\n\t\tconst filename = this.testPath ?? \"inline\";\n\t\tconst results = getResults(filename, actual);\n\t\tconst snapshot = codeframe(results).replaceAll(/\\s+$/gm, \"\");\n\n\t\t/* eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call --\n\t\t * the implementation works but the declarations doesn't allow it */\n\t\treturn (toMatchSnapshot as any).call(this, snapshot, ...rest);\n\t}\n\treturn diverge(toMatchCodeframe);\n}\n\nexport { createMatcher as toMatchCodeframe };\n","import {\n\ttype AsyncExpectationResult,\n\ttype MatcherContext,\n\ttype SyncExpectationResult,\n} from \"expect\";\nimport { toMatchInlineSnapshot } from \"jest-snapshot\";\nimport { type Report } from \"../../reporter\";\nimport { codeframe, isThenable } from \"../utils\";\nimport { getResults } from \"./get-results\";\n\nfunction toMatchInlineCodeframeImpl(\n\tcontext: MatcherContext,\n\tactual: Report | string,\n\t...rest: Array<string | object>\n): SyncExpectationResult {\n\t/* istanbul ignore next: cant figure out when this would be unset */\n\tconst filename = context.testPath ?? \"inline\";\n\tconst results = getResults(filename, actual);\n\tconst snapshot = codeframe(results).replaceAll(/\\s+$/gm, \"\");\n\n\t/* eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call --\n\t * the implementation works but the declarations doesn't allow it */\n\treturn (toMatchInlineSnapshot as any).call(context, snapshot, ...rest);\n}\n\ntype ToMatchInlineCodeframeMatcher = (\n\tthis: MatcherContext,\n\tactual: Report | Promise<Report> | string,\n\t...rest: Array<string | object>\n) => SyncExpectationResult | Promise<SyncExpectationResult>;\n\nfunction toMatchInlineCodeframe(\n\tthis: MatcherContext,\n\tactual: Report | Promise<Report> | string,\n\t...rest: Array<string | object>\n): SyncExpectationResult | AsyncExpectationResult {\n\tconst context = {\n\t\t...this,\n\n\t\t/* Capture the original stack frames as they are needed by \"jest-snapshot\"\n\t\t * to determine where to write the inline snapshots. When resolving the\n\t\t * promise the original stack frames are lost and the snapshot will be\n\t\t * written in this files instaed. */\n\t\terror: new Error(\"stacktrace\"),\n\t};\n\n\tif (isThenable(actual)) {\n\t\treturn actual.then((resolved) => toMatchInlineCodeframeImpl(context, resolved, ...rest));\n\t} else {\n\t\treturn toMatchInlineCodeframeImpl(context, actual, ...rest);\n\t}\n}\n\nfunction createMatcher(): ToMatchInlineCodeframeMatcher {\n\treturn toMatchInlineCodeframe;\n}\n\nexport { createMatcher as toMatchInlineCodeframe };\n"],"names":["createMatcher","actual"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { $ as codeFrameColumns, a0 as getEndLocation, a1 as getStartLocation } from './core.js';
1
+ import { s as codeFrameColumns, B as getEndLocation, G 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
 
@@ -51,12 +51,6 @@ function diverge(fn) {
51
51
  return diverged;
52
52
  }
53
53
 
54
- function flattenMessages(report) {
55
- return report.results.reduce((aggregated, result) => {
56
- return aggregated.concat(result.messages);
57
- }, []);
58
- }
59
-
60
54
  const INT32_BYTES = 4;
61
55
  const syncFnCache = /* @__PURE__ */ new Map();
62
56
  const sharedBuffer = new SharedArrayBuffer(INT32_BYTES);
@@ -118,5 +112,5 @@ function createSyncFn(workerPath) {
118
112
  return syncFn;
119
113
  }
120
114
 
121
- export { codeframe as a, createSyncFn as c, diverge as d, flattenMessages as f, isThenable as i };
122
- //# sourceMappingURL=matcher-utils.js.map
115
+ export { createSyncFn as a, codeframe as c, diverge as d, isThenable as i };
116
+ //# sourceMappingURL=jest-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jest-utils.js","sources":["../../src/jest/utils/codeframe.ts","../../src/jest/utils/is-thenable.ts","../../src/jest/utils/diverge.ts","../../src/jest/worker/create-sync-fn.ts"],"sourcesContent":["import { type Message } from \"../../message\";\nimport { type Result } from \"../../reporter\";\nimport { codeFrameColumns } from \"../../utils/code-frame-columns\";\nimport { getEndLocation, getStartLocation } from \"../../utils/message-location\";\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): string {\n\tconst type = message.severity === 2 ? \"error\" : \"warning\";\n\tconst msg = message.message.replace(/([^ ])\\.$/, \"$1\");\n\tconst ruleId = `(${message.ruleId})`;\n\tconst sourceCode = parentResult.source;\n\tconst firstLine = [`${type}:`, msg, ruleId].join(\" \");\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\tresult.push(`Selector: ${message.selector ?? \"-\"}`);\n\n\treturn result.join(\"\\n\");\n}\n\n/**\n * Codeframe formatter based on ESLint codeframe.\n *\n * @internal\n */\nexport function codeframe(results: Result[]): string {\n\tlet errors = 0;\n\tlet warnings = 0;\n\n\tconst resultsWithMessages = results.filter((result) => result.messages.length > 0);\n\n\tconst 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)}\\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\treturn errors + warnings > 0 ? output : \"\";\n}\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","import {\n\ttype AsyncExpectationResult,\n\ttype MatcherContext,\n\ttype SyncExpectationResult,\n} from \"expect\";\nimport { isThenable } from \"./is-thenable\";\n\ntype SyncCallback<T, TArgs extends unknown[]> = (\n\tthis: MatcherContext,\n\tactual: T,\n\t...args: TArgs\n) => SyncExpectationResult;\n\n/**\n * @internal\n */\nexport interface MaybeAsyncCallback<TActual, TArgs extends unknown[]> {\n\t(this: MatcherContext, actual: TActual, ...args: TArgs): SyncExpectationResult;\n\t(this: MatcherContext, actual: Promise<TActual>, ...args: TArgs): AsyncExpectationResult;\n}\n\n/**\n * Creates a wrapped function based on the passed function.\n *\n * The returned function takes either a `T` or `Promise<T>`. If `T` the result\n * will be synchronous or if `Promise<T>` the result will be asynchronous.\n *\n * In practice this means that if you pass a synchronous object into it you will\n * maintain synchronous code but if you pass an asynchronous object you must\n * await the result.\n *\n * @internal\n */\nexport function diverge<T, TArgs extends unknown[]>(\n\tfn: SyncCallback<T, TArgs>,\n): MaybeAsyncCallback<T, TArgs> {\n\tfunction diverged(this: MatcherContext, actual: T, ...args: TArgs): SyncExpectationResult;\n\tfunction diverged(\n\t\tthis: MatcherContext,\n\t\tactual: Promise<T>,\n\t\t...args: TArgs\n\t): AsyncExpectationResult;\n\tfunction diverged(\n\t\tthis: MatcherContext,\n\t\tactual: T | Promise<T>,\n\t\t...args: TArgs\n\t): SyncExpectationResult | AsyncExpectationResult {\n\t\tif (isThenable(actual)) {\n\t\t\treturn actual.then((resolved) => fn.call(this, resolved, ...args));\n\t\t} else {\n\t\t\treturn fn.call(this, actual, ...args);\n\t\t}\n\t}\n\treturn diverged;\n}\n","import {\n\ttype MessagePort,\n\tMessageChannel,\n\tWorker,\n\treceiveMessageOnPort,\n} from \"node:worker_threads\";\nimport { legacyRequire } from \"../../resolve\";\nimport {\n\ttype AnyAsyncFn,\n\ttype AnyFn,\n\ttype MainToWorkerCommandMessage,\n\ttype MainToWorkerMessage,\n\ttype Syncify,\n\ttype WorkerToMainError,\n\ttype WorkerToMainMessage,\n} from \"./types\";\n\n/**\n * This is all based on the synckit library but without all the extra stuff such\n * as typescript, esbuld, pnp etc.\n */\n\nconst INT32_BYTES = 4;\nconst syncFnCache = new Map<string, AnyFn>();\nconst sharedBuffer = new SharedArrayBuffer(INT32_BYTES);\nconst sharedBufferView = new Int32Array(sharedBuffer, 0, 1);\n\nfunction isWorkerError<T>(value: WorkerToMainMessage<T>): value is WorkerToMainError {\n\treturn \"error\" in value;\n}\n\nfunction receiveMessageWithId<R>(port: MessagePort, expectedId: number): WorkerToMainMessage<R> {\n\t/* wait for the semaphore to be raised before receiving message */\n\tconst timeout = 30000;\n\tconst status = Atomics.wait(sharedBufferView, 0, 0, timeout);\n\tAtomics.store(sharedBufferView, 0, 0);\n\n\t/* handle timeout or unexpected errors */\n\tif (![\"ok\", \"not-equal\"].includes(status)) {\n\t\tconst abortMsg: MainToWorkerCommandMessage = {\n\t\t\tid: expectedId,\n\t\t\tcmd: \"abort\",\n\t\t};\n\t\tport.postMessage(abortMsg);\n\t\tthrow new Error(`Internal error: Atomics.wait() failed: ${status}`);\n\t}\n\n\t/* the worker process will post the message before raising the semaphore, we\n\t * should not reach this part of the code unless there is a message waiting to\n\t * be read */\n\tconst reply = receiveMessageOnPort(port) as { message: WorkerToMainMessage<R> };\n\tconst { id, ...message } = reply.message;\n\n\tif (id < expectedId) {\n\t\treturn receiveMessageWithId(port, expectedId);\n\t}\n\n\tif (expectedId !== id) {\n\t\tthrow new Error(`Internal error: Expected id ${String(expectedId)} but got id ${String(id)}`);\n\t}\n\n\treturn { id, ...message };\n}\n\nfunction startWorkerThread<R, T extends AnyAsyncFn<R>>(\n\tworkerPath: string,\n): (...args: Parameters<T>) => R {\n\tconst { port1: mainPort, port2: workerPort } = new MessageChannel();\n\tconst workerPathUrl = legacyRequire.resolve(workerPath);\n\tconst worker = new Worker(workerPathUrl, {\n\t\teval: false,\n\t\tworkerData: { sharedBuffer, workerPort },\n\t\ttransferList: [workerPort],\n\t});\n\n\tlet nextID = 0;\n\n\tconst syncFn = (...args: Parameters<T>): R => {\n\t\tconst id = nextID++;\n\t\tconst msg: MainToWorkerMessage<Parameters<T>> = { id, args };\n\n\t\tworker.postMessage(msg);\n\n\t\tconst reply = receiveMessageWithId<R>(mainPort, id);\n\n\t\tif (isWorkerError(reply)) {\n\t\t\tthrow new Error(reply.error);\n\t\t}\n\n\t\treturn reply.result;\n\t};\n\n\tworker.unref();\n\n\treturn syncFn;\n}\n\nexport function createSyncFn<T extends AnyAsyncFn<R>, R = unknown>(workerPath: string): Syncify<T> {\n\tconst cachedSyncFn = syncFnCache.get(workerPath);\n\tif (cachedSyncFn) {\n\t\treturn cachedSyncFn as Syncify<T>;\n\t}\n\n\tconst syncFn = startWorkerThread<R, T>(workerPath);\n\tsyncFnCache.set(workerPath, syncFn);\n\treturn syncFn as Syncify<T>;\n}\n"],"names":[],"mappings":";;;;AAWA,SAAS,aAAA,CAAc,SAAkB,YAAA,EAA8B;AACtE,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,QAAA,KAAa,CAAA,GAAI,OAAA,GAAU,SAAA;AAChD,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,aAAa,IAAI,CAAA;AACrD,EAAA,MAAM,MAAA,GAAS,CAAA,CAAA,EAAI,OAAA,CAAQ,MAAM,CAAA,CAAA,CAAA;AACjC,EAAA,MAAM,aAAa,YAAA,CAAa,MAAA;AAChC,EAAA,MAAM,SAAA,GAAY,CAAC,CAAA,EAAG,IAAI,KAAK,GAAA,EAAK,MAAM,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AACpD,EAAA,MAAM,MAAA,GAAS,CAAC,SAAS,CAAA;AAGzB,EAAA,IAAI,UAAA,EAAY;AACf,IAAA,MAAM,MAAA,GAAS,iBAAiB,UAAA,EAAY;AAAA,MAC3C,KAAA,EAAO,iBAAiB,OAAO,CAAA;AAAA,MAC/B,GAAA,EAAK,cAAA,CAAe,OAAA,EAAS,UAAU;AAAA,KACvC,CAAA;AACD,IAAA,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA,EACnB;AAEA,EAAA,MAAA,CAAO,IAAA,CAAK,CAAA,UAAA,EAAa,OAAA,CAAQ,QAAA,IAAY,GAAG,CAAA,CAAE,CAAA;AAElD,EAAA,OAAO,MAAA,CAAO,KAAK,IAAI,CAAA;AACxB;AAOO,SAAS,UAAU,OAAA,EAA2B;AACpD,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,QAAA,GAAW,CAAA;AAEf,EAAA,MAAM,mBAAA,GAAsB,QAAQ,MAAA,CAAO,CAAC,WAAW,MAAA,CAAO,QAAA,CAAS,SAAS,CAAC,CAAA;AAEjF,EAAA,MAAM,MAAA,GAAS,mBAAA,CACb,MAAA,CAAiB,CAAC,eAAe,MAAA,KAAW;AAC5C,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,KAAY;AACjD,MAAA,OAAO,CAAA,EAAG,aAAA,CAAc,OAAA,EAAS,MAAM,CAAC;;AAAA,CAAA;AAAA,IACzC,CAAC,CAAA;AAED,IAAA,MAAA,IAAU,MAAA,CAAO,UAAA;AACjB,IAAA,QAAA,IAAY,MAAA,CAAO,YAAA;AAEnB,IAAA,OAAO,aAAA,CAAc,OAAO,QAAQ,CAAA;AAAA,EACrC,CAAA,EAAG,EAAE,CAAA,CACJ,KAAK,IAAI,CAAA;AAEX,EAAA,OAAO,MAAA,GAAS,QAAA,GAAW,CAAA,GAAI,MAAA,GAAS,EAAA;AACzC;;ACvDO,SAAS,WAAc,KAAA,EAA4C;AACzE,EAAA,OAAO,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,UAAU,KAAA,IAAS,OAAO,MAAM,IAAA,KAAS,UAAA;AACvF;;AC4BO,SAAS,QACf,EAAA,EAC+B;AAO/B,EAAA,SAAS,QAAA,CAER,WACG,IAAA,EAC8C;AACjD,IAAA,IAAI,UAAA,CAAW,MAAM,CAAA,EAAG;AACvB,MAAA,OAAO,MAAA,CAAO,IAAA,CAAK,CAAC,QAAA,KAAa,EAAA,CAAG,KAAK,IAAA,EAAM,QAAA,EAAU,GAAG,IAAI,CAAC,CAAA;AAAA,IAClE,CAAA,MAAO;AACN,MAAA,OAAO,EAAA,CAAG,IAAA,CAAK,IAAA,EAAM,MAAA,EAAQ,GAAG,IAAI,CAAA;AAAA,IACrC;AAAA,EACD;AACA,EAAA,OAAO,QAAA;AACR;;AChCA,MAAM,WAAA,GAAc,CAAA;AACpB,MAAM,WAAA,uBAAkB,GAAA,EAAmB;AAC3C,MAAM,YAAA,GAAe,IAAI,iBAAA,CAAkB,WAAW,CAAA;AACtD,MAAM,gBAAA,GAAmB,IAAI,UAAA,CAAW,YAAA,EAAc,GAAG,CAAC,CAAA;AAE1D,SAAS,cAAiB,KAAA,EAA2D;AACpF,EAAA,OAAO,OAAA,IAAW,KAAA;AACnB;AAEA,SAAS,oBAAA,CAAwB,MAAmB,UAAA,EAA4C;AAE/F,EAAA,MAAM,OAAA,GAAU,GAAA;AAChB,EAAA,MAAM,SAAS,OAAA,CAAQ,IAAA,CAAK,gBAAA,EAAkB,CAAA,EAAG,GAAG,OAAO,CAAA;AAC3D,EAAA,OAAA,CAAQ,KAAA,CAAM,gBAAA,EAAkB,CAAA,EAAG,CAAC,CAAA;AAGpC,EAAA,IAAI,CAAC,CAAC,IAAA,EAAM,WAAW,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA,EAAG;AAC1C,IAAA,MAAM,QAAA,GAAuC;AAAA,MAC5C,EAAA,EAAI,UAAA;AAAA,MACJ,GAAA,EAAK;AAAA,KACN;AACA,IAAA,IAAA,CAAK,YAAY,QAAQ,CAAA;AACzB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,MAAM,CAAA,CAAE,CAAA;AAAA,EACnE;AAKA,EAAA,MAAM,KAAA,GAAQ,qBAAqB,IAAI,CAAA;AACvC,EAAA,MAAM,EAAE,EAAA,EAAI,GAAG,OAAA,KAAY,KAAA,CAAM,OAAA;AAEjC,EAAA,IAAI,KAAK,UAAA,EAAY;AACpB,IAAA,OAAO,oBAAA,CAAqB,MAAM,UAAU,CAAA;AAAA,EAC7C;AAEA,EAAA,IAAI,eAAe,EAAA,EAAI;AACtB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,MAAA,CAAO,UAAU,CAAC,CAAA,YAAA,EAAe,MAAA,CAAO,EAAE,CAAC,CAAA,CAAE,CAAA;AAAA,EAC7F;AAEA,EAAA,OAAO,EAAE,EAAA,EAAI,GAAG,OAAA,EAAQ;AACzB;AAEA,SAAS,kBACR,UAAA,EACgC;AAChC,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,OAAO,UAAA,EAAW,GAAI,IAAI,cAAA,EAAe;AAClE,EAAA,MAAM,aAAA,GAAgB,aAAA,CAAc,OAAA,CAAQ,UAAU,CAAA;AACtD,EAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,aAAA,EAAe;AAAA,IACxC,IAAA,EAAM,KAAA;AAAA,IACN,UAAA,EAAY,EAAE,YAAA,EAAc,UAAA,EAAW;AAAA,IACvC,YAAA,EAAc,CAAC,UAAU;AAAA,GACzB,CAAA;AAED,EAAA,IAAI,MAAA,GAAS,CAAA;AAEb,EAAA,MAAM,MAAA,GAAS,IAAI,IAAA,KAA2B;AAC7C,IAAA,MAAM,EAAA,GAAK,MAAA,EAAA;AACX,IAAA,MAAM,GAAA,GAA0C,EAAE,EAAA,EAAI,IAAA,EAAK;AAE3D,IAAA,MAAA,CAAO,YAAY,GAAG,CAAA;AAEtB,IAAA,MAAM,KAAA,GAAQ,oBAAA,CAAwB,QAAA,EAAU,EAAE,CAAA;AAElD,IAAA,IAAI,aAAA,CAAc,KAAK,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA;AAAA,IAC5B;AAEA,IAAA,OAAO,KAAA,CAAM,MAAA;AAAA,EACd,CAAA;AAEA,EAAA,MAAA,CAAO,KAAA,EAAM;AAEb,EAAA,OAAO,MAAA;AACR;AAEO,SAAS,aAAmD,UAAA,EAAgC;AAClG,EAAA,MAAM,YAAA,GAAe,WAAA,CAAY,GAAA,CAAI,UAAU,CAAA;AAC/C,EAAA,IAAI,YAAA,EAAc;AACjB,IAAA,OAAO,YAAA;AAAA,EACR;AAEA,EAAA,MAAM,MAAA,GAAS,kBAAwB,UAAU,CAAA;AACjD,EAAA,WAAA,CAAY,GAAA,CAAI,YAAY,MAAM,CAAA;AAClC,EAAA,OAAO,MAAA;AACR;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"jest-worker.js","sources":["../../src/jest/worker/worker.ts"],"sourcesContent":["import { type MessagePort, parentPort, workerData } from \"node:worker_threads\";\nimport { type ConfigData } from \"../../config\";\nimport { FileSystemConfigLoader } from \"../../config/loaders/file-system\";\nimport { HtmlValidate } from \"../../htmlvalidate\";\nimport { type Report } from \"../../reporter\";\nimport {\n\ttype AnyAsyncFn,\n\ttype MainToWorkerCommandMessage,\n\ttype MainToWorkerMessage,\n\ttype WorkerToMainMessage,\n} from \"./types\";\n\ninterface WorkerData {\n\tsharedBuffer: SharedArrayBuffer;\n\tworkerPort: MessagePort;\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- false positive, it is used in nested functions */\nfunction runAsWorker<R = unknown, T extends AnyAsyncFn<R> = AnyAsyncFn<R>>(fn: T): void {\n\tif (!workerData) {\n\t\treturn;\n\t}\n\n\tconst { workerPort, sharedBuffer } = workerData as WorkerData;\n\tconst sharedBufferView = new Int32Array(sharedBuffer, 0, 1);\n\n\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- better crash at runtime if not set */\n\tparentPort!.on(\"message\", ({ id, args }: MainToWorkerMessage<Parameters<T>>) => {\n\t\tasync function inner(): Promise<void> {\n\t\t\tlet isAborted = false;\n\t\t\tconst handleAbortMessage = (msg: MainToWorkerCommandMessage): void => {\n\t\t\t\tif (msg.id === id && msg.cmd === \"abort\") {\n\t\t\t\t\tisAborted = true;\n\t\t\t\t}\n\t\t\t};\n\t\t\tworkerPort.on(\"message\", handleAbortMessage);\n\t\t\tlet msg: WorkerToMainMessage<R>;\n\t\t\ttry {\n\t\t\t\tmsg = { id, result: await fn(...args) };\n\t\t\t} catch (error: unknown) {\n\t\t\t\tmsg = {\n\t\t\t\t\tid,\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t};\n\t\t\t}\n\t\t\tworkerPort.off(\"message\", handleAbortMessage);\n\n\t\t\t/* eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- it may have been set by `handleAbortMessage` */\n\t\t\tif (isAborted) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tworkerPort.postMessage(msg);\n\t\t\tAtomics.add(sharedBufferView, 0, 1);\n\t\t\tAtomics.notify(sharedBufferView, 0);\n\t\t}\n\t\t// eslint-disable-next-line @typescript-eslint/no-floating-promises -- should not happen\n\t\tinner();\n\t});\n}\n\nfunction validateString(markup: string, filename: string, config: ConfigData): Promise<Report> {\n\tconst loader = new FileSystemConfigLoader({\n\t\textends: [\"html-validate:recommended\"],\n\t});\n\tconst htmlvalidate = new HtmlValidate(loader);\n\treturn htmlvalidate.validateString(markup, filename, config);\n}\n\nexport type ValidateStringFn = typeof validateString;\n\nrunAsWorker(validateString);\n"],"names":["msg"],"mappings":";;;;;;;;;;;;;;;;;;AAkBA,SAAS,YAAkE,EAAA,EAAa;AACvF,EAAA,IAAI,CAAC,UAAA,EAAY;AAChB,IAAA;AAAA,EACD;AAEA,EAAA,MAAM,EAAE,UAAA,EAAY,YAAA,EAAa,GAAI,UAAA;AACrC,EAAA,MAAM,gBAAA,GAAmB,IAAI,UAAA,CAAW,YAAA,EAAc,GAAG,CAAC,CAAA;AAG1D,EAAA,UAAA,CAAY,GAAG,SAAA,EAAW,CAAC,EAAE,EAAA,EAAI,MAAK,KAA0C;AAC/E,IAAA,eAAe,KAAA,GAAuB;AACrC,MAAA,IAAI,SAAA,GAAY,KAAA;AAChB,MAAA,MAAM,kBAAA,GAAqB,CAACA,IAAAA,KAA0C;AACrE,QAAA,IAAIA,IAAAA,CAAI,EAAA,KAAO,EAAA,IAAMA,IAAAA,CAAI,QAAQ,OAAA,EAAS;AACzC,UAAA,SAAA,GAAY,IAAA;AAAA,QACb;AAAA,MACD,CAAA;AACA,MAAA,UAAA,CAAW,EAAA,CAAG,WAAW,kBAAkB,CAAA;AAC3C,MAAA,IAAI,GAAA;AACJ,MAAA,IAAI;AACH,QAAA,GAAA,GAAM,EAAE,EAAA,EAAI,MAAA,EAAQ,MAAM,EAAA,CAAG,GAAG,IAAI,CAAA,EAAE;AAAA,MACvC,SAAS,KAAA,EAAgB;AACxB,QAAA,GAAA,GAAM;AAAA,UACL,EAAA;AAAA,UACA,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,SAC7D;AAAA,MACD;AACA,MAAA,UAAA,CAAW,GAAA,CAAI,WAAW,kBAAkB,CAAA;AAG5C,MAAA,IAAI,SAAA,EAAW;AACd,QAAA;AAAA,MACD;AACA,MAAA,UAAA,CAAW,YAAY,GAAG,CAAA;AAC1B,MAAA,OAAA,CAAQ,GAAA,CAAI,gBAAA,EAAkB,CAAA,EAAG,CAAC,CAAA;AAClC,MAAA,OAAA,CAAQ,MAAA,CAAO,kBAAkB,CAAC,CAAA;AAAA,IACnC;AAEA,IAAA,KAAA,EAAM;AAAA,EACP,CAAC,CAAA;AACF;AAEA,SAAS,cAAA,CAAe,MAAA,EAAgB,QAAA,EAAkB,MAAA,EAAqC;AAC9F,EAAA,MAAM,MAAA,GAAS,IAAI,sBAAA,CAAuB;AAAA,IACzC,OAAA,EAAS,CAAC,2BAA2B;AAAA,GACrC,CAAA;AACD,EAAA,MAAM,YAAA,GAAe,IAAI,YAAA,CAAa,MAAM,CAAA;AAC5C,EAAA,OAAO,YAAA,CAAa,cAAA,CAAe,MAAA,EAAQ,QAAA,EAAU,MAAM,CAAA;AAC5D;AAIA,WAAA,CAAY,cAAc,CAAA"}
1
+ {"version":3,"file":"jest-worker.js","sources":["../../src/jest/worker/jest-worker.ts"],"sourcesContent":["import { type MessagePort, parentPort, workerData } from \"node:worker_threads\";\nimport { type ConfigData } from \"../../config\";\nimport { FileSystemConfigLoader } from \"../../config/loaders/file-system\";\nimport { HtmlValidate } from \"../../htmlvalidate\";\nimport { type Report } from \"../../reporter\";\nimport {\n\ttype AnyAsyncFn,\n\ttype MainToWorkerCommandMessage,\n\ttype MainToWorkerMessage,\n\ttype WorkerToMainMessage,\n} from \"./types\";\n\ninterface WorkerData {\n\tsharedBuffer: SharedArrayBuffer;\n\tworkerPort: MessagePort;\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- false positive, it is used in nested functions */\nfunction runAsWorker<R = unknown, T extends AnyAsyncFn<R> = AnyAsyncFn<R>>(fn: T): void {\n\tif (!workerData) {\n\t\treturn;\n\t}\n\n\tconst { workerPort, sharedBuffer } = workerData as WorkerData;\n\tconst sharedBufferView = new Int32Array(sharedBuffer, 0, 1);\n\n\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- better crash at runtime if not set */\n\tparentPort!.on(\"message\", ({ id, args }: MainToWorkerMessage<Parameters<T>>) => {\n\t\tasync function inner(): Promise<void> {\n\t\t\tlet isAborted = false;\n\t\t\tconst handleAbortMessage = (msg: MainToWorkerCommandMessage): void => {\n\t\t\t\tif (msg.id === id && msg.cmd === \"abort\") {\n\t\t\t\t\tisAborted = true;\n\t\t\t\t}\n\t\t\t};\n\t\t\tworkerPort.on(\"message\", handleAbortMessage);\n\t\t\tlet msg: WorkerToMainMessage<R>;\n\t\t\ttry {\n\t\t\t\tmsg = { id, result: await fn(...args) };\n\t\t\t} catch (error: unknown) {\n\t\t\t\tmsg = {\n\t\t\t\t\tid,\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t};\n\t\t\t}\n\t\t\tworkerPort.off(\"message\", handleAbortMessage);\n\n\t\t\t/* eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- it may have been set by `handleAbortMessage` */\n\t\t\tif (isAborted) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tworkerPort.postMessage(msg);\n\t\t\tAtomics.add(sharedBufferView, 0, 1);\n\t\t\tAtomics.notify(sharedBufferView, 0);\n\t\t}\n\t\t// eslint-disable-next-line @typescript-eslint/no-floating-promises -- should not happen\n\t\tinner();\n\t});\n}\n\nfunction validateString(markup: string, filename: string, config: ConfigData): Promise<Report> {\n\tconst loader = new FileSystemConfigLoader({\n\t\textends: [\"html-validate:recommended\"],\n\t});\n\tconst htmlvalidate = new HtmlValidate(loader);\n\treturn htmlvalidate.validateString(markup, filename, config);\n}\n\nexport type ValidateStringFn = typeof validateString;\n\nrunAsWorker(validateString);\n"],"names":["msg"],"mappings":";;;;;;;;;;;;;;;;;;AAkBA,SAAS,YAAkE,EAAA,EAAa;AACvF,EAAA,IAAI,CAAC,UAAA,EAAY;AAChB,IAAA;AAAA,EACD;AAEA,EAAA,MAAM,EAAE,UAAA,EAAY,YAAA,EAAa,GAAI,UAAA;AACrC,EAAA,MAAM,gBAAA,GAAmB,IAAI,UAAA,CAAW,YAAA,EAAc,GAAG,CAAC,CAAA;AAG1D,EAAA,UAAA,CAAY,GAAG,SAAA,EAAW,CAAC,EAAE,EAAA,EAAI,MAAK,KAA0C;AAC/E,IAAA,eAAe,KAAA,GAAuB;AACrC,MAAA,IAAI,SAAA,GAAY,KAAA;AAChB,MAAA,MAAM,kBAAA,GAAqB,CAACA,IAAAA,KAA0C;AACrE,QAAA,IAAIA,IAAAA,CAAI,EAAA,KAAO,EAAA,IAAMA,IAAAA,CAAI,QAAQ,OAAA,EAAS;AACzC,UAAA,SAAA,GAAY,IAAA;AAAA,QACb;AAAA,MACD,CAAA;AACA,MAAA,UAAA,CAAW,EAAA,CAAG,WAAW,kBAAkB,CAAA;AAC3C,MAAA,IAAI,GAAA;AACJ,MAAA,IAAI;AACH,QAAA,GAAA,GAAM,EAAE,EAAA,EAAI,MAAA,EAAQ,MAAM,EAAA,CAAG,GAAG,IAAI,CAAA,EAAE;AAAA,MACvC,SAAS,KAAA,EAAgB;AACxB,QAAA,GAAA,GAAM;AAAA,UACL,EAAA;AAAA,UACA,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,SAC7D;AAAA,MACD;AACA,MAAA,UAAA,CAAW,GAAA,CAAI,WAAW,kBAAkB,CAAA;AAG5C,MAAA,IAAI,SAAA,EAAW;AACd,QAAA;AAAA,MACD;AACA,MAAA,UAAA,CAAW,YAAY,GAAG,CAAA;AAC1B,MAAA,OAAA,CAAQ,GAAA,CAAI,gBAAA,EAAkB,CAAA,EAAG,CAAC,CAAA;AAClC,MAAA,OAAA,CAAQ,MAAA,CAAO,kBAAkB,CAAC,CAAA;AAAA,IACnC;AAEA,IAAA,KAAA,EAAM;AAAA,EACP,CAAC,CAAA;AACF;AAEA,SAAS,cAAA,CAAe,MAAA,EAAgB,QAAA,EAAkB,MAAA,EAAqC;AAC9F,EAAA,MAAM,MAAA,GAAS,IAAI,sBAAA,CAAuB;AAAA,IACzC,OAAA,EAAS,CAAC,2BAA2B;AAAA,GACrC,CAAA;AACD,EAAA,MAAM,YAAA,GAAe,IAAI,YAAA,CAAa,MAAM,CAAA;AAC5C,EAAA,OAAO,YAAA,CAAa,cAAA,CAAe,MAAA,EAAQ,QAAA,EAAU,MAAM,CAAA;AAC5D;AAIA,WAAA,CAAY,cAAc,CAAA"}