html-validate 8.27.0 → 8.29.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/README.md +2 -0
- package/dist/cjs/cli.js +1 -2
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/core-nodejs.js +2 -5
- package/dist/cjs/core-nodejs.js.map +1 -1
- package/dist/cjs/core.js +2760 -2745
- package/dist/cjs/core.js.map +1 -1
- package/dist/cjs/elements.js +3 -1
- package/dist/cjs/elements.js.map +1 -1
- package/dist/cjs/jest-worker.js +60 -0
- package/dist/cjs/jest-worker.js.map +1 -0
- package/dist/cjs/jest.js +2 -0
- package/dist/cjs/jest.js.map +1 -1
- package/dist/cjs/matcher-utils.js +65 -0
- package/dist/cjs/matcher-utils.js.map +1 -1
- package/dist/cjs/matchers.js +2 -5
- package/dist/cjs/matchers.js.map +1 -1
- package/dist/cjs/tsdoc-metadata.json +1 -1
- package/dist/cjs/vitest.js +2 -0
- package/dist/cjs/vitest.js.map +1 -1
- package/dist/es/cli.js +1 -2
- package/dist/es/cli.js.map +1 -1
- package/dist/es/core-nodejs.js +2 -5
- package/dist/es/core-nodejs.js.map +1 -1
- package/dist/es/core.js +2760 -2746
- package/dist/es/core.js.map +1 -1
- package/dist/es/elements.js +3 -1
- package/dist/es/elements.js.map +1 -1
- package/dist/es/html-validate.js +1 -1
- package/dist/es/jest-worker.js +59 -0
- package/dist/es/jest-worker.js.map +1 -0
- package/dist/es/jest.js +2 -0
- package/dist/es/jest.js.map +1 -1
- package/dist/es/matcher-utils.js +65 -1
- package/dist/es/matcher-utils.js.map +1 -1
- package/dist/es/matchers-jestonly.js +1 -1
- package/dist/es/matchers.js +4 -7
- package/dist/es/matchers.js.map +1 -1
- package/dist/es/vitest.js +2 -0
- package/dist/es/vitest.js.map +1 -1
- package/dist/schema/config.json +2 -2
- package/dist/schema/elements.json +5 -1
- package/dist/tsdoc-metadata.json +1 -1
- package/dist/types/browser.d.ts +20 -4
- package/dist/types/index.d.ts +20 -4
- package/package.json +1 -1
package/dist/es/html-validate.js
CHANGED
|
@@ -2,7 +2,7 @@ import fs from 'fs';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import kleur from 'kleur';
|
|
4
4
|
import minimist from 'minimist';
|
|
5
|
-
import {
|
|
5
|
+
import { O as name, v as version, o as SchemaValidationError, U as UserError, Q as bugs } from './core.js';
|
|
6
6
|
import { M as Mode, m as modeToFlag, C as CLI, l as lint, i as init, p as printConfig, d as dump, h as handleSchemaValidationError } from './cli.js';
|
|
7
7
|
import 'ajv';
|
|
8
8
|
import './elements.js';
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { workerData, parentPort } from 'node:worker_threads';
|
|
2
|
+
import { F as FileSystemConfigLoader } from './core-nodejs.js';
|
|
3
|
+
import { H as HtmlValidate } from './core.js';
|
|
4
|
+
import 'node:fs';
|
|
5
|
+
import 'node:path';
|
|
6
|
+
import 'node:module';
|
|
7
|
+
import 'kleur';
|
|
8
|
+
import 'ajv';
|
|
9
|
+
import './elements.js';
|
|
10
|
+
import './meta-helper.js';
|
|
11
|
+
import './utils/natural-join.js';
|
|
12
|
+
import '@sidvind/better-ajv-errors';
|
|
13
|
+
import '@html-validate/stylish';
|
|
14
|
+
import 'semver';
|
|
15
|
+
|
|
16
|
+
function runAsWorker(fn) {
|
|
17
|
+
if (!workerData) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const { workerPort, sharedBuffer } = workerData;
|
|
21
|
+
const sharedBufferView = new Int32Array(sharedBuffer, 0, 1);
|
|
22
|
+
parentPort.on("message", ({ id, args }) => {
|
|
23
|
+
async function inner() {
|
|
24
|
+
let isAborted = false;
|
|
25
|
+
const handleAbortMessage = (msg2) => {
|
|
26
|
+
if (msg2.id === id && msg2.cmd === "abort") {
|
|
27
|
+
isAborted = true;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
workerPort.on("message", handleAbortMessage);
|
|
31
|
+
let msg;
|
|
32
|
+
try {
|
|
33
|
+
msg = { id, result: await fn(...args) };
|
|
34
|
+
} catch (error) {
|
|
35
|
+
msg = {
|
|
36
|
+
id,
|
|
37
|
+
error: error instanceof Error ? error.message : String(error)
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
workerPort.off("message", handleAbortMessage);
|
|
41
|
+
if (isAborted) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
workerPort.postMessage(msg);
|
|
45
|
+
Atomics.add(sharedBufferView, 0, 1);
|
|
46
|
+
Atomics.notify(sharedBufferView, 0);
|
|
47
|
+
}
|
|
48
|
+
inner();
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
function validateString(markup, filename, config) {
|
|
52
|
+
const loader = new FileSystemConfigLoader({
|
|
53
|
+
extends: ["html-validate:recommended"]
|
|
54
|
+
});
|
|
55
|
+
const htmlvalidate = new HtmlValidate(loader);
|
|
56
|
+
return htmlvalidate.validateString(markup, filename, config);
|
|
57
|
+
}
|
|
58
|
+
runAsWorker(validateString);
|
|
59
|
+
//# sourceMappingURL=jest-worker.js.map
|
|
@@ -0,0 +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\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\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- modified 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":";;;;;;;;;;;;;;;AAiBA,SAAS,YAAkE,EAAa,EAAA;AACvF,EAAA,IAAI,CAAC,UAAY,EAAA;AAChB,IAAA;AAAA;AAGD,EAAM,MAAA,EAAE,UAAY,EAAA,YAAA,EAAiB,GAAA,UAAA;AACrC,EAAA,MAAM,gBAAmB,GAAA,IAAI,UAAW,CAAA,YAAA,EAAc,GAAG,CAAC,CAAA;AAG1D,EAAA,UAAA,CAAY,GAAG,SAAW,EAAA,CAAC,EAAE,EAAA,EAAI,MAA+C,KAAA;AAC/E,IAAA,eAAe,KAAuB,GAAA;AACrC,MAAA,IAAI,SAAY,GAAA,KAAA;AAChB,MAAM,MAAA,kBAAA,GAAqB,CAACA,IAA0C,KAAA;AACrE,QAAA,IAAIA,IAAI,CAAA,EAAA,KAAO,EAAMA,IAAAA,IAAAA,CAAI,QAAQ,OAAS,EAAA;AACzC,UAAY,SAAA,GAAA,IAAA;AAAA;AACb,OACD;AACA,MAAW,UAAA,CAAA,EAAA,CAAG,WAAW,kBAAkB,CAAA;AAC3C,MAAI,IAAA,GAAA;AACJ,MAAI,IAAA;AACH,QAAA,GAAA,GAAM,EAAE,EAAI,EAAA,MAAA,EAAQ,MAAM,EAAG,CAAA,GAAG,IAAI,CAAE,EAAA;AAAA,eAC9B,KAAgB,EAAA;AACxB,QAAM,GAAA,GAAA;AAAA,UACL,EAAA;AAAA,UACA,OAAO,KAAiB,YAAA,KAAA,GAAQ,KAAM,CAAA,OAAA,GAAU,OAAO,KAAK;AAAA,SAC7D;AAAA;AAED,MAAW,UAAA,CAAA,GAAA,CAAI,WAAW,kBAAkB,CAAA;AAE5C,MAAA,IAAI,SAAW,EAAA;AACd,QAAA;AAAA;AAED,MAAA,UAAA,CAAW,YAAY,GAAG,CAAA;AAC1B,MAAQ,OAAA,CAAA,GAAA,CAAI,gBAAkB,EAAA,CAAA,EAAG,CAAC,CAAA;AAClC,MAAQ,OAAA,CAAA,MAAA,CAAO,kBAAkB,CAAC,CAAA;AAAA;AAGnC,IAAM,KAAA,EAAA;AAAA,GACN,CAAA;AACF;AAEA,SAAS,cAAA,CAAe,MAAgB,EAAA,QAAA,EAAkB,MAAqC,EAAA;AAC9F,EAAM,MAAA,MAAA,GAAS,IAAI,sBAAuB,CAAA;AAAA,IACzC,OAAA,EAAS,CAAC,2BAA2B;AAAA,GACrC,CAAA;AACD,EAAM,MAAA,YAAA,GAAe,IAAI,YAAA,CAAa,MAAM,CAAA;AAC5C,EAAA,OAAO,YAAa,CAAA,cAAA,CAAe,MAAQ,EAAA,QAAA,EAAU,MAAM,CAAA;AAC5D;AAIA,WAAA,CAAY,cAAc,CAAA"}
|
package/dist/es/jest.js
CHANGED
|
@@ -2,6 +2,8 @@ import { c as createMatcher, a as createMatcher$1, b as createMatcher$2, d as cr
|
|
|
2
2
|
import { c as createMatcher$5, a as createMatcher$6 } from './matchers-jestonly.js';
|
|
3
3
|
import { d as diff } from './jest-diff.js';
|
|
4
4
|
import './matcher-utils.js';
|
|
5
|
+
import 'node:url';
|
|
6
|
+
import 'node:worker_threads';
|
|
5
7
|
import './core.js';
|
|
6
8
|
import 'ajv';
|
|
7
9
|
import './elements.js';
|
package/dist/es/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","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","toHaveError","toHaveErrors","toMatchCodeframe","toMatchInlineCodeframe"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAaA,MAAA,CAAO,MAAO,CAAA;AAAA,EACb,WAAWA,aAAU,EAAA;AAAA,EACrB,aAAaC,eAAY,EAAA;AAAA,EACzB,cAAA,EAAgBC,eAAe,CAAA,MAAA,EAAQ,IAAI,CAAA;AAAA,EAC3C,WAAA,EAAaC,eAAY,CAAA,MAAA,EAAQ,IAAI,CAAA;AAAA,EACrC,YAAA,EAAcC,eAAa,CAAA,MAAA,EAAQ,IAAI,CAAA;AAAA,EACvC,kBAAkBC,eAAiB,EAAA;AAAA,EACnC,wBAAwBC,eAAuB;AAChD,CAAC,CAAA"}
|
package/dist/es/matcher-utils.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { pathToFileURL } from 'node:url';
|
|
2
|
+
import { MessageChannel, Worker, receiveMessageOnPort } from 'node:worker_threads';
|
|
3
|
+
|
|
1
4
|
function isThenable(value) {
|
|
2
5
|
return value && typeof value === "object" && "then" in value && typeof value.then === "function";
|
|
3
6
|
}
|
|
@@ -19,5 +22,66 @@ function flattenMessages(report) {
|
|
|
19
22
|
}, []);
|
|
20
23
|
}
|
|
21
24
|
|
|
22
|
-
|
|
25
|
+
const INT32_BYTES = 4;
|
|
26
|
+
const syncFnCache = /* @__PURE__ */ new Map();
|
|
27
|
+
const sharedBuffer = new SharedArrayBuffer(INT32_BYTES);
|
|
28
|
+
const sharedBufferView = new Int32Array(sharedBuffer, 0, 1);
|
|
29
|
+
function isWorkerError(value) {
|
|
30
|
+
return "error" in value;
|
|
31
|
+
}
|
|
32
|
+
function receiveMessageWithId(port, expectedId) {
|
|
33
|
+
const timeout = 1e4;
|
|
34
|
+
const status = Atomics.wait(sharedBufferView, 0, 0, timeout);
|
|
35
|
+
Atomics.store(sharedBufferView, 0, 0);
|
|
36
|
+
if (!["ok", "not-equal"].includes(status)) {
|
|
37
|
+
const abortMsg = {
|
|
38
|
+
id: expectedId,
|
|
39
|
+
cmd: "abort"
|
|
40
|
+
};
|
|
41
|
+
port.postMessage(abortMsg);
|
|
42
|
+
throw new Error(`Internal error: Atomics.wait() failed: ${status}`);
|
|
43
|
+
}
|
|
44
|
+
const reply = receiveMessageOnPort(port);
|
|
45
|
+
const { id, ...message } = reply.message;
|
|
46
|
+
if (id < expectedId) {
|
|
47
|
+
return receiveMessageWithId(port, expectedId);
|
|
48
|
+
}
|
|
49
|
+
if (expectedId !== id) {
|
|
50
|
+
throw new Error(`Internal error: Expected id ${String(expectedId)} but got id ${String(id)}`);
|
|
51
|
+
}
|
|
52
|
+
return { id, ...message };
|
|
53
|
+
}
|
|
54
|
+
function startWorkerThread(workerPath) {
|
|
55
|
+
const { port1: mainPort, port2: workerPort } = new MessageChannel();
|
|
56
|
+
const workerPathUrl = pathToFileURL(require.resolve(workerPath));
|
|
57
|
+
const worker = new Worker(workerPathUrl, {
|
|
58
|
+
eval: false,
|
|
59
|
+
workerData: { sharedBuffer, workerPort },
|
|
60
|
+
transferList: [workerPort]
|
|
61
|
+
});
|
|
62
|
+
let nextID = 0;
|
|
63
|
+
const syncFn = (...args) => {
|
|
64
|
+
const id = nextID++;
|
|
65
|
+
const msg = { id, args };
|
|
66
|
+
worker.postMessage(msg);
|
|
67
|
+
const reply = receiveMessageWithId(mainPort, id);
|
|
68
|
+
if (isWorkerError(reply)) {
|
|
69
|
+
throw new Error(reply.error);
|
|
70
|
+
}
|
|
71
|
+
return reply.result;
|
|
72
|
+
};
|
|
73
|
+
worker.unref();
|
|
74
|
+
return syncFn;
|
|
75
|
+
}
|
|
76
|
+
function createSyncFn(workerPath) {
|
|
77
|
+
const cachedSyncFn = syncFnCache.get(workerPath);
|
|
78
|
+
if (cachedSyncFn) {
|
|
79
|
+
return cachedSyncFn;
|
|
80
|
+
}
|
|
81
|
+
const syncFn = startWorkerThread(workerPath);
|
|
82
|
+
syncFnCache.set(workerPath, syncFn);
|
|
83
|
+
return syncFn;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export { createSyncFn as c, diverge as d, flattenMessages as f, isThenable as i };
|
|
23
87
|
//# sourceMappingURL=matcher-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matcher-utils.js","sources":["../../src/jest/utils/is-thenable.ts","../../src/jest/utils/diverge.ts","../../src/jest/utils/flatten-messages.ts"],"sourcesContent":["/**\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 { isThenable } from \"./is-thenable\";\nimport { type MatcherContext } from \"./matcher-context\";\nimport { type MatcherResult } from \"./matcher-result\";\n\ntype SyncCallback<T, TArgs extends any[]> = (\n\tthis: MatcherContext,\n\tactual: T,\n\t...args: TArgs\n) => MatcherResult;\n\n/**\n * @internal\n */\nexport interface MaybeAsyncCallback<TActual, TArgs extends any[]> {\n\t(this: MatcherContext, actual: TActual, ...args: TArgs): MatcherResult;\n\t(this: MatcherContext, actual: Promise<TActual>, ...args: TArgs): Promise<MatcherResult>;\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 any[]>(\n\tfn: SyncCallback<T, TArgs>,\n): MaybeAsyncCallback<T, TArgs> {\n\tfunction diverged(this: MatcherContext, actual: T, ...args: TArgs): MatcherResult;\n\tfunction diverged(\n\t\tthis: MatcherContext,\n\t\tactual: Promise<T>,\n\t\t...args: TArgs\n\t): Promise<MatcherResult>;\n\tfunction diverged(\n\t\tthis: MatcherContext,\n\t\tactual: T | Promise<T>,\n\t\t...args: TArgs\n\t): MatcherResult | Promise<MatcherResult> {\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 { type Message } from \"../../message\";\nimport { type Report, type Result } from \"../../reporter\";\n\n/**\n * Takes all messages from all files and flattens to a single array.\n */\nexport function flattenMessages(report: Report): Message[] {\n\treturn report.results.reduce((aggregated: Message[], result: Result) => {\n\t\treturn aggregated.concat(result.messages);\n\t}, []);\n}\n"],"names":[],"mappings":"AAGO,SAAS,WAAc,KAA4C,EAAA;AACzE,EAAO,OAAA,KAAA,IAAS,OAAO,KAAU,KAAA,QAAA,IAAY,UAAU,KAAS,IAAA,OAAO,MAAM,IAAS,KAAA,UAAA;AACvF;;ACyBO,SAAS,QACf,EAC+B,EAAA;AAO/B,EAAS,SAAA,QAAA,CAER,WACG,IACsC,EAAA;AACzC,IAAI,IAAA,UAAA,CAAW,MAAM,CAAG,EAAA;AACvB,MAAO,OAAA,MAAA,CAAO,IAAK,CAAA,CAAC,QAAa,KAAA,EAAA,CAAG,KAAK,IAAM,EAAA,QAAA,EAAU,GAAG,IAAI,CAAC,CAAA;AAAA,KAC3D,MAAA;AACN,MAAA,OAAO,EAAG,CAAA,IAAA,CAAK,IAAM,EAAA,MAAA,EAAQ,GAAG,IAAI,CAAA;AAAA;AACrC;AAED,EAAO,OAAA,QAAA;AACR;;AC7CO,SAAS,gBAAgB,MAA2B,EAAA;AAC1D,EAAA,OAAO,MAAO,CAAA,OAAA,CAAQ,MAAO,CAAA,CAAC,YAAuB,MAAmB,KAAA;AACvE,IAAO,OAAA,UAAA,CAAW,MAAO,CAAA,MAAA,CAAO,QAAQ,CAAA;AAAA,GACzC,EAAG,EAAE,CAAA;AACN;;;;"}
|
|
1
|
+
{"version":3,"file":"matcher-utils.js","sources":["../../src/jest/utils/is-thenable.ts","../../src/jest/utils/diverge.ts","../../src/jest/utils/flatten-messages.ts","../../src/jest/worker/create-sync-fn.ts"],"sourcesContent":["/**\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 { isThenable } from \"./is-thenable\";\nimport { type MatcherContext } from \"./matcher-context\";\nimport { type MatcherResult } from \"./matcher-result\";\n\ntype SyncCallback<T, TArgs extends any[]> = (\n\tthis: MatcherContext,\n\tactual: T,\n\t...args: TArgs\n) => MatcherResult;\n\n/**\n * @internal\n */\nexport interface MaybeAsyncCallback<TActual, TArgs extends any[]> {\n\t(this: MatcherContext, actual: TActual, ...args: TArgs): MatcherResult;\n\t(this: MatcherContext, actual: Promise<TActual>, ...args: TArgs): Promise<MatcherResult>;\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 any[]>(\n\tfn: SyncCallback<T, TArgs>,\n): MaybeAsyncCallback<T, TArgs> {\n\tfunction diverged(this: MatcherContext, actual: T, ...args: TArgs): MatcherResult;\n\tfunction diverged(\n\t\tthis: MatcherContext,\n\t\tactual: Promise<T>,\n\t\t...args: TArgs\n\t): Promise<MatcherResult>;\n\tfunction diverged(\n\t\tthis: MatcherContext,\n\t\tactual: T | Promise<T>,\n\t\t...args: TArgs\n\t): MatcherResult | Promise<MatcherResult> {\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 { type Message } from \"../../message\";\nimport { type Report, type Result } from \"../../reporter\";\n\n/**\n * Takes all messages from all files and flattens to a single array.\n */\nexport function flattenMessages(report: Report): Message[] {\n\treturn report.results.reduce((aggregated: Message[], result: Result) => {\n\t\treturn aggregated.concat(result.messages);\n\t}, []);\n}\n","import { pathToFileURL } from \"node:url\";\nimport {\n\ttype MessagePort,\n\tMessageChannel,\n\tWorker,\n\treceiveMessageOnPort,\n} from \"node:worker_threads\";\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\tconst timeout = 10000;\n\tconst status = Atomics.wait(sharedBufferView, 0, 0, timeout);\n\tAtomics.store(sharedBufferView, 0, 0);\n\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\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 = pathToFileURL(require.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":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import kleur from 'kleur';
|
|
2
2
|
import { toMatchSnapshot, toMatchInlineSnapshot } from 'jest-snapshot';
|
|
3
|
-
import {
|
|
3
|
+
import { L as codeframe } from './core.js';
|
|
4
4
|
import { g as getResults } from './matchers.js';
|
|
5
5
|
import { d as diverge, i as isThenable } from './matcher-utils.js';
|
|
6
6
|
|
package/dist/es/matchers.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { d as diverge, f as flattenMessages } from './matcher-utils.js';
|
|
2
|
-
import { d as deepmerge, H as HtmlValidate } from './core.js';
|
|
1
|
+
import { d as diverge, c as createSyncFn, f as flattenMessages } from './matcher-utils.js';
|
|
2
|
+
import { d as deepmerge, K as workerPath, H as HtmlValidate } from './core.js';
|
|
3
3
|
import { F as FileSystemConfigLoader } from './core-nodejs.js';
|
|
4
4
|
|
|
5
5
|
function createMatcher$4() {
|
|
@@ -92,11 +92,8 @@ function toHTMLValidateImpl(expect, diff, actual, expectedError, userConfig, fil
|
|
|
92
92
|
};
|
|
93
93
|
const config = deepmerge(defaultConfig, userConfig ?? {});
|
|
94
94
|
const actualFilename = filename ?? this.testPath ?? "inline";
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
});
|
|
98
|
-
const htmlvalidate = new HtmlValidate(loader);
|
|
99
|
-
const report = htmlvalidate.validateStringSync(actual, actualFilename, config);
|
|
95
|
+
const syncFn = createSyncFn(workerPath);
|
|
96
|
+
const report = syncFn(actual, actualFilename, config);
|
|
100
97
|
const pass = report.valid;
|
|
101
98
|
const result = report.results[0];
|
|
102
99
|
if (pass) {
|
package/dist/es/matchers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"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"],"sourcesContent":["import { type Report } from \"../../reporter\";\nimport { type MatcherResult, type MaybeAsyncCallback, diverge } from \"../utils\";\n\nfunction createMatcher(): MaybeAsyncCallback<Report, []> {\n\tfunction toBeValid(report: Report): MatcherResult {\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 Report } from \"../../reporter\";\nimport { type MatcherResult, type MaybeAsyncCallback, diverge } from \"../utils\";\n\nfunction createMatcher(): MaybeAsyncCallback<Report, []> {\n\tfunction toBeInvalid(report: Report): MatcherResult {\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 deepmerge from \"deepmerge\";\nimport { type ConfigData } from \"../../config\";\nimport { FileSystemConfigLoader } from \"../../config/loaders/file-system\";\nimport { HtmlValidate } from \"../../htmlvalidate\";\nimport { type Message } from \"../../message\";\nimport {\n\ttype DiffFunction,\n\ttype MatcherContext,\n\ttype MatcherExpect,\n\ttype MatcherResult,\n\ttype MaybeAsyncCallback,\n\tdiverge,\n} from \"../utils\";\n\nfunction isMessage(arg: any): arg is Partial<Message> {\n\tif (!arg) {\n\t\treturn false;\n\t}\n\treturn Boolean(\n\t\targ.ruleId ||\n\t\t\targ.severity ||\n\t\t\targ.message ||\n\t\t\targ.offset ||\n\t\t\targ.line ||\n\t\t\targ.column ||\n\t\t\targ.size ||\n\t\t\targ.selector ||\n\t\t\targ.context,\n\t);\n}\n\nfunction isConfig(arg: any): arg is ConfigData {\n\tif (!arg) {\n\t\treturn false;\n\t}\n\treturn Boolean(\n\t\targ.root || arg.extends || arg.elements || arg.plugin || arg.transform || arg.rules,\n\t);\n}\n\nfunction isString(arg: any): 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 Error(`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(\n\texpect: MatcherExpect,\n\tdiff: DiffFunction | undefined,\n): 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): MatcherResult {\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;\n\t\tconst filename = isString(arg0) ? arg0 : isString(arg1) ? arg1 : arg2;\n\t\treturn toHTMLValidateImpl.call(this, expect, diff, markup, message, config, filename);\n\t}\n\treturn diverge(toHTMLValidate);\n}\n\nfunction toHTMLValidateImpl(\n\tthis: MatcherContext,\n\texpect: MatcherExpect,\n\tdiff: DiffFunction | undefined,\n\tactual: string,\n\texpectedError?: Partial<Message>,\n\tuserConfig?: ConfigData,\n\tfilename?: string,\n): MatcherResult {\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\tconst loader = new FileSystemConfigLoader({\n\t\textends: [\"html-validate:recommended\"],\n\t});\n\tconst htmlvalidate = new HtmlValidate(loader);\n\tconst report = htmlvalidate.validateStringSync(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 = diff\n\t\t\t\t? diff(expected, actual, {\n\t\t\t\t\t\texpand: this.expand,\n\t\t\t\t\t\taAnnotation: \"Expected error\",\n\t\t\t\t\t\tbAnnotation: \"Actual error\",\n\t\t\t\t\t})\n\t\t\t\t: /* istanbul ignore next */ undefined;\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, actual, expected };\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 Message } from \"../../message\";\nimport { type Report } from \"../../reporter\";\nimport {\n\ttype DiffFunction,\n\ttype MatcherContext,\n\ttype MatcherExpect,\n\ttype MatcherResult,\n\ttype MaybeAsyncCallback,\n\tdiverge,\n} from \"../utils\";\nimport { flattenMessages } from \"../utils/flatten-messages\";\n\nfunction toHaveErrorImpl(\n\tcontext: MatcherContext,\n\texpect: MatcherExpect,\n\tdiff: DiffFunction | undefined,\n\tactual: Report,\n\texpected: Partial<Message>,\n): MatcherResult {\n\tconst flattened = flattenMessages(actual);\n\tconst matcher = [expect.objectContaining(expected)];\n\tconst pass = context.equals(flattened, matcher);\n\tconst diffString = diff\n\t\t? diff(matcher, flattened, { expand: context.expand })\n\t\t: /* istanbul ignore next */ undefined;\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, actual: flattened, expected: matcher };\n}\n\nfunction createMatcher(\n\texpect: MatcherExpect,\n\tdiff: DiffFunction | undefined,\n):\n\t| MaybeAsyncCallback<Report, [Partial<Message>]>\n\t| MaybeAsyncCallback<Report, [string, string, any?]> {\n\tfunction toHaveError(\n\t\tthis: MatcherContext,\n\t\tactual: Report,\n\t\terror: Partial<Message>,\n\t): MatcherResult;\n\tfunction toHaveError(\n\t\tthis: MatcherContext,\n\t\tactual: Report,\n\t\truleId: string,\n\t\tmessage: string,\n\t\tcontext?: any,\n\t): MatcherResult;\n\tfunction toHaveError(\n\t\tthis: MatcherContext,\n\t\tactual: Report,\n\t\targ1: string | Partial<Message>,\n\t\targ2?: string,\n\t\targ3?: any,\n\t): MatcherResult {\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) {\n\t\t\t\t/* eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- this is supposed to accept anything */\n\t\t\t\texpected.context = arg3;\n\t\t\t}\n\t\t\treturn toHaveErrorImpl(this, expect, diff, actual, expected);\n\t\t} else {\n\t\t\treturn toHaveErrorImpl(this, expect, diff, 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 Report } from \"../../reporter\";\nimport {\n\ttype DiffFunction,\n\ttype MatcherContext,\n\ttype MatcherExpect,\n\ttype MatcherResult,\n\ttype MaybeAsyncCallback,\n\tdiverge,\n\tflattenMessages,\n} from \"../utils\";\n\nfunction createMatcher(\n\texpect: MatcherExpect,\n\tdiff: DiffFunction | undefined,\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): MatcherResult {\n\t\tconst flattened = flattenMessages(report);\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 = diff\n\t\t\t? diff(matcher, flattened, { expand: this.expand })\n\t\t\t: /* istanbul ignore next */ undefined;\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 { FileSystemConfigLoader } from \"../../config/loaders/file-system\";\nimport { type Report, type Result } from \"../../reporter\";\nimport { HtmlValidate } from \"../../htmlvalidate\";\n\n/**\n * @internal\n */\nexport function getResults(filename: string, value: Report | string): Result[] {\n\tif (typeof value === \"string\") {\n\t\tconst loader = new FileSystemConfigLoader({\n\t\t\textends: [\"html-validate:recommended\"],\n\t\t});\n\t\tconst htmlvalidate = new HtmlValidate(loader);\n\t\tconst report = htmlvalidate.validateStringSync(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"],"names":["createMatcher","actual"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"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"],"sourcesContent":["import { type Report } from \"../../reporter\";\nimport { type MatcherResult, type MaybeAsyncCallback, diverge } from \"../utils\";\n\nfunction createMatcher(): MaybeAsyncCallback<Report, []> {\n\tfunction toBeValid(report: Report): MatcherResult {\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 Report } from \"../../reporter\";\nimport { type MatcherResult, type MaybeAsyncCallback, diverge } from \"../utils\";\n\nfunction createMatcher(): MaybeAsyncCallback<Report, []> {\n\tfunction toBeInvalid(report: Report): MatcherResult {\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 deepmerge from \"deepmerge\";\nimport { type ConfigData } from \"../../config\";\nimport { type Message } from \"../../message\";\nimport {\n\ttype DiffFunction,\n\ttype MatcherContext,\n\ttype MatcherExpect,\n\ttype MatcherResult,\n\ttype MaybeAsyncCallback,\n\tdiverge,\n} from \"../utils\";\nimport { type ValidateStringFn, createSyncFn, workerPath } from \"../worker\";\n\nfunction isMessage(arg: any): arg is Partial<Message> {\n\tif (!arg) {\n\t\treturn false;\n\t}\n\treturn Boolean(\n\t\targ.ruleId ||\n\t\t\targ.severity ||\n\t\t\targ.message ||\n\t\t\targ.offset ||\n\t\t\targ.line ||\n\t\t\targ.column ||\n\t\t\targ.size ||\n\t\t\targ.selector ||\n\t\t\targ.context,\n\t);\n}\n\nfunction isConfig(arg: any): arg is ConfigData {\n\tif (!arg) {\n\t\treturn false;\n\t}\n\treturn Boolean(\n\t\targ.root || arg.extends || arg.elements || arg.plugin || arg.transform || arg.rules,\n\t);\n}\n\nfunction isString(arg: any): 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 Error(`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(\n\texpect: MatcherExpect,\n\tdiff: DiffFunction | undefined,\n): 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): MatcherResult {\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;\n\t\tconst filename = isString(arg0) ? arg0 : isString(arg1) ? arg1 : arg2;\n\t\treturn toHTMLValidateImpl.call(this, expect, diff, markup, message, config, filename);\n\t}\n\treturn diverge(toHTMLValidate);\n}\n\nfunction toHTMLValidateImpl(\n\tthis: MatcherContext,\n\texpect: MatcherExpect,\n\tdiff: DiffFunction | undefined,\n\tactual: string,\n\texpectedError?: Partial<Message>,\n\tuserConfig?: ConfigData,\n\tfilename?: string,\n): MatcherResult {\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>(workerPath);\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 = diff\n\t\t\t\t? diff(expected, actual, {\n\t\t\t\t\t\texpand: this.expand,\n\t\t\t\t\t\taAnnotation: \"Expected error\",\n\t\t\t\t\t\tbAnnotation: \"Actual error\",\n\t\t\t\t\t})\n\t\t\t\t: /* istanbul ignore next */ undefined;\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, actual, expected };\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 Message } from \"../../message\";\nimport { type Report } from \"../../reporter\";\nimport {\n\ttype DiffFunction,\n\ttype MatcherContext,\n\ttype MatcherExpect,\n\ttype MatcherResult,\n\ttype MaybeAsyncCallback,\n\tdiverge,\n} from \"../utils\";\nimport { flattenMessages } from \"../utils/flatten-messages\";\n\nfunction toHaveErrorImpl(\n\tcontext: MatcherContext,\n\texpect: MatcherExpect,\n\tdiff: DiffFunction | undefined,\n\tactual: Report,\n\texpected: Partial<Message>,\n): MatcherResult {\n\tconst flattened = flattenMessages(actual);\n\tconst matcher = [expect.objectContaining(expected)];\n\tconst pass = context.equals(flattened, matcher);\n\tconst diffString = diff\n\t\t? diff(matcher, flattened, { expand: context.expand })\n\t\t: /* istanbul ignore next */ undefined;\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, actual: flattened, expected: matcher };\n}\n\nfunction createMatcher(\n\texpect: MatcherExpect,\n\tdiff: DiffFunction | undefined,\n):\n\t| MaybeAsyncCallback<Report, [Partial<Message>]>\n\t| MaybeAsyncCallback<Report, [string, string, any?]> {\n\tfunction toHaveError(\n\t\tthis: MatcherContext,\n\t\tactual: Report,\n\t\terror: Partial<Message>,\n\t): MatcherResult;\n\tfunction toHaveError(\n\t\tthis: MatcherContext,\n\t\tactual: Report,\n\t\truleId: string,\n\t\tmessage: string,\n\t\tcontext?: any,\n\t): MatcherResult;\n\tfunction toHaveError(\n\t\tthis: MatcherContext,\n\t\tactual: Report,\n\t\targ1: string | Partial<Message>,\n\t\targ2?: string,\n\t\targ3?: any,\n\t): MatcherResult {\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) {\n\t\t\t\t/* eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- this is supposed to accept anything */\n\t\t\t\texpected.context = arg3;\n\t\t\t}\n\t\t\treturn toHaveErrorImpl(this, expect, diff, actual, expected);\n\t\t} else {\n\t\t\treturn toHaveErrorImpl(this, expect, diff, 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 Report } from \"../../reporter\";\nimport {\n\ttype DiffFunction,\n\ttype MatcherContext,\n\ttype MatcherExpect,\n\ttype MatcherResult,\n\ttype MaybeAsyncCallback,\n\tdiverge,\n\tflattenMessages,\n} from \"../utils\";\n\nfunction createMatcher(\n\texpect: MatcherExpect,\n\tdiff: DiffFunction | undefined,\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): MatcherResult {\n\t\tconst flattened = flattenMessages(report);\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 = diff\n\t\t\t? diff(matcher, flattened, { expand: this.expand })\n\t\t\t: /* istanbul ignore next */ undefined;\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 { FileSystemConfigLoader } from \"../../config/loaders/file-system\";\nimport { type Report, type Result } from \"../../reporter\";\nimport { HtmlValidate } from \"../../htmlvalidate\";\n\n/**\n * @internal\n */\nexport function getResults(filename: string, value: Report | string): Result[] {\n\tif (typeof value === \"string\") {\n\t\tconst loader = new FileSystemConfigLoader({\n\t\t\textends: [\"html-validate:recommended\"],\n\t\t});\n\t\tconst htmlvalidate = new HtmlValidate(loader);\n\t\tconst report = htmlvalidate.validateStringSync(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"],"names":["createMatcher","actual"],"mappings":"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"}
|
package/dist/es/vitest.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { expect } from 'vitest';
|
|
2
2
|
import { c as createMatcher, a as createMatcher$1, b as createMatcher$2, d as createMatcher$3, e as createMatcher$4 } from './matchers.js';
|
|
3
3
|
import './matcher-utils.js';
|
|
4
|
+
import 'node:url';
|
|
5
|
+
import 'node:worker_threads';
|
|
4
6
|
import './core.js';
|
|
5
7
|
import 'ajv';
|
|
6
8
|
import './elements.js';
|
package/dist/es/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":["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":["toBeValid","toBeInvalid","toHTMLValidate","toHaveError","toHaveErrors"],"mappings":";;;;;;;;;;;;;;;;;;;AAWA,MAAA,CAAO,MAAO,CAAA;AAAA,EACb,WAAWA,aAAU,EAAA;AAAA,EACrB,aAAaC,eAAY,EAAA;AAAA,EACzB,cAAA,EAAgBC,eAAe,CAAA,MAAA,EAAQ,KAAS,CAAA,CAAA;AAAA,EAChD,WAAA,EAAaC,eAAY,CAAA,MAAA,EAAQ,KAAS,CAAA,CAAA;AAAA,EAC1C,YAAA,EAAcC,eAAa,CAAA,MAAA,EAAQ,KAAS,CAAA;AAC7C,CAAC,CAAA"}
|
package/dist/schema/config.json
CHANGED
|
@@ -50,10 +50,10 @@
|
|
|
50
50
|
"transform": {
|
|
51
51
|
"type": "object",
|
|
52
52
|
"additionalProperties": {
|
|
53
|
-
"type": "string"
|
|
53
|
+
"anyOf": [{ "type": "string" }, { "function": true }]
|
|
54
54
|
},
|
|
55
55
|
"title": "File transformations to use.",
|
|
56
|
-
"description": "Object where key is regular expression to match filename and value is name of transformer.",
|
|
56
|
+
"description": "Object where key is regular expression to match filename and value is name of transformer or a function.",
|
|
57
57
|
"examples": [
|
|
58
58
|
{
|
|
59
59
|
"^.*\\.foo$": "my-transformer",
|
|
@@ -127,7 +127,11 @@
|
|
|
127
127
|
"labelable": {
|
|
128
128
|
"title": "Mark this element as labelable",
|
|
129
129
|
"description": "This element may contain an associated label element.",
|
|
130
|
-
"anyOf": [
|
|
130
|
+
"anyOf": [
|
|
131
|
+
{ "type": "boolean" },
|
|
132
|
+
{ "function": true },
|
|
133
|
+
{ "$ref": "#/definitions/expression" }
|
|
134
|
+
]
|
|
131
135
|
},
|
|
132
136
|
|
|
133
137
|
"deprecatedAttributes": {
|
package/dist/tsdoc-metadata.json
CHANGED
package/dist/types/browser.d.ts
CHANGED
|
@@ -1523,7 +1523,7 @@ export declare interface MetaData {
|
|
|
1523
1523
|
form?: boolean;
|
|
1524
1524
|
/** Mark element as a form-associated element */
|
|
1525
1525
|
formAssociated?: Partial<FormAssociated>;
|
|
1526
|
-
labelable?: boolean | PropertyExpression;
|
|
1526
|
+
labelable?: boolean | PropertyExpression | MetaLabelableCallback;
|
|
1527
1527
|
/** @deprecated use {@link MetaAria.implicitRole} instead */
|
|
1528
1528
|
implicitRole?: MetaImplicitRoleCallback;
|
|
1529
1529
|
/** WAI-ARIA attributes */
|
|
@@ -1609,6 +1609,17 @@ export declare type MetaFocusableCallback = (node: HtmlElementLike) => boolean;
|
|
|
1609
1609
|
*/
|
|
1610
1610
|
export declare type MetaImplicitRoleCallback = (node: HtmlElementLike) => string | null;
|
|
1611
1611
|
|
|
1612
|
+
/**
|
|
1613
|
+
* Callback for the `labelable` properties of `MetaData`. It takes a node and
|
|
1614
|
+
* returns whenever the element is labelable or not.
|
|
1615
|
+
*
|
|
1616
|
+
* @public
|
|
1617
|
+
* @since 8.29.0
|
|
1618
|
+
* @param node - The node to determine if it is labelable.
|
|
1619
|
+
* @returns `true` if the node is labelable.
|
|
1620
|
+
*/
|
|
1621
|
+
export declare type MetaLabelableCallback = (node: HtmlElementLike) => boolean;
|
|
1622
|
+
|
|
1612
1623
|
/**
|
|
1613
1624
|
* Properties listed here can be used to reverse search elements with the given
|
|
1614
1625
|
* property enabled. See [[MetaTable.getTagsWithProperty]].
|
|
@@ -2690,15 +2701,20 @@ export { Transformer_2 as Transformer }
|
|
|
2690
2701
|
/**
|
|
2691
2702
|
* @public
|
|
2692
2703
|
*/
|
|
2693
|
-
export declare
|
|
2704
|
+
export declare type TransformerEntry = {
|
|
2705
|
+
kind: "import";
|
|
2694
2706
|
pattern: RegExp;
|
|
2695
2707
|
name: string;
|
|
2696
|
-
}
|
|
2708
|
+
} | {
|
|
2709
|
+
kind: "function";
|
|
2710
|
+
pattern: RegExp;
|
|
2711
|
+
function: Transformer_2;
|
|
2712
|
+
};
|
|
2697
2713
|
|
|
2698
2714
|
/**
|
|
2699
2715
|
* @public
|
|
2700
2716
|
*/
|
|
2701
|
-
export declare type TransformMap = Record<string, string>;
|
|
2717
|
+
export declare type TransformMap = Record<string, string | Transformer_2>;
|
|
2702
2718
|
|
|
2703
2719
|
/**
|
|
2704
2720
|
* @public
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1750,7 +1750,7 @@ export declare interface MetaData {
|
|
|
1750
1750
|
form?: boolean;
|
|
1751
1751
|
/** Mark element as a form-associated element */
|
|
1752
1752
|
formAssociated?: Partial<FormAssociated>;
|
|
1753
|
-
labelable?: boolean | PropertyExpression;
|
|
1753
|
+
labelable?: boolean | PropertyExpression | MetaLabelableCallback;
|
|
1754
1754
|
/** @deprecated use {@link MetaAria.implicitRole} instead */
|
|
1755
1755
|
implicitRole?: MetaImplicitRoleCallback;
|
|
1756
1756
|
/** WAI-ARIA attributes */
|
|
@@ -1836,6 +1836,17 @@ export declare type MetaFocusableCallback = (node: HtmlElementLike) => boolean;
|
|
|
1836
1836
|
*/
|
|
1837
1837
|
export declare type MetaImplicitRoleCallback = (node: HtmlElementLike) => string | null;
|
|
1838
1838
|
|
|
1839
|
+
/**
|
|
1840
|
+
* Callback for the `labelable` properties of `MetaData`. It takes a node and
|
|
1841
|
+
* returns whenever the element is labelable or not.
|
|
1842
|
+
*
|
|
1843
|
+
* @public
|
|
1844
|
+
* @since 8.29.0
|
|
1845
|
+
* @param node - The node to determine if it is labelable.
|
|
1846
|
+
* @returns `true` if the node is labelable.
|
|
1847
|
+
*/
|
|
1848
|
+
export declare type MetaLabelableCallback = (node: HtmlElementLike) => boolean;
|
|
1849
|
+
|
|
1839
1850
|
/**
|
|
1840
1851
|
* Properties listed here can be used to reverse search elements with the given
|
|
1841
1852
|
* property enabled. See [[MetaTable.getTagsWithProperty]].
|
|
@@ -2942,15 +2953,20 @@ export { Transformer_2 as Transformer }
|
|
|
2942
2953
|
/**
|
|
2943
2954
|
* @public
|
|
2944
2955
|
*/
|
|
2945
|
-
export declare
|
|
2956
|
+
export declare type TransformerEntry = {
|
|
2957
|
+
kind: "import";
|
|
2946
2958
|
pattern: RegExp;
|
|
2947
2959
|
name: string;
|
|
2948
|
-
}
|
|
2960
|
+
} | {
|
|
2961
|
+
kind: "function";
|
|
2962
|
+
pattern: RegExp;
|
|
2963
|
+
function: Transformer_2;
|
|
2964
|
+
};
|
|
2949
2965
|
|
|
2950
2966
|
/**
|
|
2951
2967
|
* @public
|
|
2952
2968
|
*/
|
|
2953
|
-
export declare type TransformMap = Record<string, string>;
|
|
2969
|
+
export declare type TransformMap = Record<string, string | Transformer_2>;
|
|
2954
2970
|
|
|
2955
2971
|
/**
|
|
2956
2972
|
* @public
|