html-validate 9.7.1 → 10.1.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 -2
- package/bin/html-validate.mjs +1 -1
- package/dist/cjs/cli.js +2 -2
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/core-browser.js.map +1 -1
- package/dist/cjs/core-nodejs.js.map +1 -1
- package/dist/cjs/core.js +40 -12
- package/dist/cjs/core.js.map +1 -1
- package/dist/cjs/elements.js.map +1 -1
- package/dist/cjs/html-validate.js +3 -3
- package/dist/cjs/html-validate.js.map +1 -1
- package/dist/cjs/jest-worker.js.map +1 -1
- package/dist/cjs/matcher-utils.js.map +1 -1
- package/dist/cjs/matchers-jestonly.js.map +1 -1
- package/dist/cjs/matchers.js.map +1 -1
- package/dist/cjs/meta-helper.js.map +1 -1
- package/dist/cjs/tsdoc-metadata.json +1 -1
- package/dist/{es → esm}/cli.js +2 -2
- package/dist/esm/cli.js.map +1 -0
- package/dist/{es → esm}/core-browser.js.map +1 -1
- package/dist/{es → esm}/core-nodejs.js.map +1 -1
- package/dist/{es → esm}/core.js +40 -12
- package/dist/esm/core.js.map +1 -0
- package/dist/{es → esm}/elements.js.map +1 -1
- package/dist/{es → esm}/html-validate.js +3 -3
- package/dist/esm/html-validate.js.map +1 -0
- package/dist/{es → esm}/jest-worker.js.map +1 -1
- package/dist/{es → esm}/matcher-utils.js.map +1 -1
- package/dist/{es → esm}/matchers-jestonly.js.map +1 -1
- package/dist/{es → esm}/matchers.js.map +1 -1
- package/dist/{es → esm}/meta-helper.js.map +1 -1
- package/dist/tsdoc-metadata.json +1 -1
- package/package.json +20 -27
- package/browser.d.ts +0 -1
- package/browser.js +0 -1
- package/dist/es/cli.js.map +0 -1
- package/dist/es/core.js.map +0 -1
- package/dist/es/html-validate.js.map +0 -1
- package/elements/html5.js +0 -1
- package/jest.d.ts +0 -1
- package/jest.js +0 -1
- package/node.d.ts +0 -1
- package/node.js +0 -1
- package/test-utils.d.ts +0 -1
- package/test-utils.js +0 -1
- /package/dist/{es → esm}/browser.d.ts +0 -0
- /package/dist/{es → esm}/browser.js +0 -0
- /package/dist/{es → esm}/browser.js.map +0 -0
- /package/dist/{es → esm}/core-browser.js +0 -0
- /package/dist/{es → esm}/core-nodejs.js +0 -0
- /package/dist/{es → esm}/elements.js +0 -0
- /package/dist/{es → esm}/html-validate.d.ts +0 -0
- /package/dist/{es → esm}/html5.d.ts +0 -0
- /package/dist/{es → esm}/html5.js +0 -0
- /package/dist/{es → esm}/html5.js.map +0 -0
- /package/dist/{es → esm}/index.d.ts +0 -0
- /package/dist/{es → esm}/index.js +0 -0
- /package/dist/{es → esm}/index.js.map +0 -0
- /package/dist/{es → esm}/jest-diff.js +0 -0
- /package/dist/{es → esm}/jest-diff.js.map +0 -0
- /package/dist/{es → esm}/jest-worker.d.ts +0 -0
- /package/dist/{es → esm}/jest-worker.js +0 -0
- /package/dist/{es → esm}/jest.d.ts +0 -0
- /package/dist/{es → esm}/jest.js +0 -0
- /package/dist/{es → esm}/jest.js.map +0 -0
- /package/dist/{es → esm}/matcher-utils.js +0 -0
- /package/dist/{es → esm}/matchers-jestonly.js +0 -0
- /package/dist/{es → esm}/matchers.js +0 -0
- /package/dist/{es → esm}/meta-helper.js +0 -0
- /package/dist/{es → esm}/package.json +0 -0
- /package/dist/{es → esm}/test-utils.d.ts +0 -0
- /package/dist/{es → esm}/test-utils.js +0 -0
- /package/dist/{es → esm}/test-utils.js.map +0 -0
- /package/dist/{es → esm}/utils/natural-join.js +0 -0
- /package/dist/{es → esm}/utils/natural-join.js.map +0 -0
- /package/dist/{es → esm}/vitest.d.ts +0 -0
- /package/dist/{es → esm}/vitest.js +0 -0
- /package/dist/{es → esm}/vitest.js.map +0 -0
- /package/{elements → dist/types}/html5.d.ts +0 -0
package/dist/{es → esm}/core.js
RENAMED
|
@@ -387,7 +387,7 @@ var deepmerge = /*@__PURE__*/getDefaultExportFromCjs(cjsExports);
|
|
|
387
387
|
|
|
388
388
|
function stringify(value) {
|
|
389
389
|
if (typeof value === "string") {
|
|
390
|
-
return
|
|
390
|
+
return value;
|
|
391
391
|
} else {
|
|
392
392
|
return JSON.stringify(value);
|
|
393
393
|
}
|
|
@@ -1508,6 +1508,7 @@ var State = /* @__PURE__ */ ((State2) => {
|
|
|
1508
1508
|
State2[State2["CDATA"] = 6] = "CDATA";
|
|
1509
1509
|
State2[State2["SCRIPT"] = 7] = "SCRIPT";
|
|
1510
1510
|
State2[State2["STYLE"] = 8] = "STYLE";
|
|
1511
|
+
State2[State2["TEXTAREA"] = 9] = "TEXTAREA";
|
|
1511
1512
|
return State2;
|
|
1512
1513
|
})(State || {});
|
|
1513
1514
|
|
|
@@ -1515,6 +1516,7 @@ var ContentModel = /* @__PURE__ */ ((ContentModel2) => {
|
|
|
1515
1516
|
ContentModel2[ContentModel2["TEXT"] = 1] = "TEXT";
|
|
1516
1517
|
ContentModel2[ContentModel2["SCRIPT"] = 2] = "SCRIPT";
|
|
1517
1518
|
ContentModel2[ContentModel2["STYLE"] = 3] = "STYLE";
|
|
1519
|
+
ContentModel2[ContentModel2["TEXTAREA"] = 4] = "TEXTAREA";
|
|
1518
1520
|
return ContentModel2;
|
|
1519
1521
|
})(ContentModel || {});
|
|
1520
1522
|
class Context {
|
|
@@ -1538,9 +1540,6 @@ class Context {
|
|
|
1538
1540
|
return JSON.stringify(this.string.length > n ? `${this.string.slice(0, 10)}...` : this.string);
|
|
1539
1541
|
}
|
|
1540
1542
|
consume(n, state) {
|
|
1541
|
-
if (typeof n !== "number") {
|
|
1542
|
-
n = n[0].length;
|
|
1543
|
-
}
|
|
1544
1543
|
let consumed = this.string.slice(0, n);
|
|
1545
1544
|
let offset;
|
|
1546
1545
|
while ((offset = consumed.indexOf("\n")) >= 0) {
|
|
@@ -2400,7 +2399,7 @@ function isElementNode(node) {
|
|
|
2400
2399
|
return Boolean(node && node.nodeType === NodeType.ELEMENT_NODE);
|
|
2401
2400
|
}
|
|
2402
2401
|
function isInvalidTagName(tagName) {
|
|
2403
|
-
return
|
|
2402
|
+
return tagName === "" || tagName === "*";
|
|
2404
2403
|
}
|
|
2405
2404
|
function createAdapter(node) {
|
|
2406
2405
|
return {
|
|
@@ -4696,6 +4695,8 @@ const MATCH_SCRIPT_DATA = /^[^]*?(?=<\/script)/;
|
|
|
4696
4695
|
const MATCH_SCRIPT_END = /^<(\/)(script)/;
|
|
4697
4696
|
const MATCH_STYLE_DATA = /^[^]*?(?=<\/style)/;
|
|
4698
4697
|
const MATCH_STYLE_END = /^<(\/)(style)/;
|
|
4698
|
+
const MATCH_TEXTAREA_DATA = /^[^]*?(?=<\/textarea)/;
|
|
4699
|
+
const MATCH_TEXTAREA_END = /^<(\/)(textarea)/;
|
|
4699
4700
|
const MATCH_DIRECTIVE = /^(<!--\s*\[html-validate-)([a-z0-9-]+)(\s*)(.*?)(]?\s*-->)/;
|
|
4700
4701
|
const MATCH_COMMENT = /^<!--([^]*?)-->/;
|
|
4701
4702
|
const MATCH_CONDITIONAL = /^<!\[([^\]]*?)\]>/;
|
|
@@ -4738,6 +4739,9 @@ class Lexer {
|
|
|
4738
4739
|
case State.STYLE:
|
|
4739
4740
|
yield* this.tokenizeStyle(context);
|
|
4740
4741
|
break;
|
|
4742
|
+
case State.TEXTAREA:
|
|
4743
|
+
yield* this.tokenizeTextarea(context);
|
|
4744
|
+
break;
|
|
4741
4745
|
/* istanbul ignore next: sanity check: should not happen unless adding new states */
|
|
4742
4746
|
default:
|
|
4743
4747
|
this.unhandled(context);
|
|
@@ -4793,7 +4797,7 @@ class Lexer {
|
|
|
4793
4797
|
yield token;
|
|
4794
4798
|
}
|
|
4795
4799
|
const state = this.evalNextState(nextState, token);
|
|
4796
|
-
context.consume(match, state);
|
|
4800
|
+
context.consume(match[0].length, state);
|
|
4797
4801
|
this.enter(context, state, match);
|
|
4798
4802
|
return;
|
|
4799
4803
|
}
|
|
@@ -4810,6 +4814,8 @@ class Lexer {
|
|
|
4810
4814
|
context.contentModel = ContentModel.SCRIPT;
|
|
4811
4815
|
} else if (data[0] === "<style") {
|
|
4812
4816
|
context.contentModel = ContentModel.STYLE;
|
|
4817
|
+
} else if (data[0] === "<textarea") {
|
|
4818
|
+
context.contentModel = ContentModel.TEXTAREA;
|
|
4813
4819
|
} else {
|
|
4814
4820
|
context.contentModel = ContentModel.TEXT;
|
|
4815
4821
|
}
|
|
@@ -4845,21 +4851,28 @@ class Lexer {
|
|
|
4845
4851
|
*tokenizeTag(context) {
|
|
4846
4852
|
function nextState(token) {
|
|
4847
4853
|
const tagCloseToken = token;
|
|
4854
|
+
const selfClosed = tagCloseToken && !tagCloseToken.data[0].startsWith("/");
|
|
4848
4855
|
switch (context.contentModel) {
|
|
4849
4856
|
case ContentModel.TEXT:
|
|
4850
4857
|
return State.TEXT;
|
|
4851
4858
|
case ContentModel.SCRIPT:
|
|
4852
|
-
if (
|
|
4859
|
+
if (selfClosed) {
|
|
4853
4860
|
return State.SCRIPT;
|
|
4854
4861
|
} else {
|
|
4855
4862
|
return State.TEXT;
|
|
4856
4863
|
}
|
|
4857
4864
|
case ContentModel.STYLE:
|
|
4858
|
-
if (
|
|
4865
|
+
if (selfClosed) {
|
|
4859
4866
|
return State.STYLE;
|
|
4860
4867
|
} else {
|
|
4861
4868
|
return State.TEXT;
|
|
4862
4869
|
}
|
|
4870
|
+
case ContentModel.TEXTAREA:
|
|
4871
|
+
if (selfClosed) {
|
|
4872
|
+
return State.TEXTAREA;
|
|
4873
|
+
} else {
|
|
4874
|
+
return State.TEXT;
|
|
4875
|
+
}
|
|
4863
4876
|
}
|
|
4864
4877
|
}
|
|
4865
4878
|
yield* this.match(
|
|
@@ -4924,6 +4937,16 @@ class Lexer {
|
|
|
4924
4937
|
"expected </style>"
|
|
4925
4938
|
);
|
|
4926
4939
|
}
|
|
4940
|
+
*tokenizeTextarea(context) {
|
|
4941
|
+
yield* this.match(
|
|
4942
|
+
context,
|
|
4943
|
+
[
|
|
4944
|
+
[MATCH_TEXTAREA_END, State.TAG, TokenType.TAG_OPEN],
|
|
4945
|
+
[MATCH_TEXTAREA_DATA, State.TEXTAREA, TokenType.TEXT]
|
|
4946
|
+
],
|
|
4947
|
+
"expected </textarea>"
|
|
4948
|
+
);
|
|
4949
|
+
}
|
|
4927
4950
|
}
|
|
4928
4951
|
|
|
4929
4952
|
const whitespace = /(\s+)/;
|
|
@@ -8145,6 +8168,9 @@ class NoRawCharacters extends Rule {
|
|
|
8145
8168
|
setup() {
|
|
8146
8169
|
this.on("element:ready", (event) => {
|
|
8147
8170
|
const node = event.target;
|
|
8171
|
+
if (node.matches("script, style")) {
|
|
8172
|
+
return;
|
|
8173
|
+
}
|
|
8148
8174
|
for (const child of node.childNodes) {
|
|
8149
8175
|
if (child.nodeType !== NodeType.TEXT_NODE) {
|
|
8150
8176
|
continue;
|
|
@@ -10298,7 +10324,7 @@ class H32 extends Rule {
|
|
|
10298
10324
|
}
|
|
10299
10325
|
function isSubmit(node) {
|
|
10300
10326
|
const type = node.getAttribute("type");
|
|
10301
|
-
return
|
|
10327
|
+
return !type || type.valueMatches(/submit|image/);
|
|
10302
10328
|
}
|
|
10303
10329
|
function isAssociated(id, node) {
|
|
10304
10330
|
const form = node.getAttribute("form");
|
|
@@ -10400,7 +10426,7 @@ class H37 extends Rule {
|
|
|
10400
10426
|
if (!inAccessibilityTree(node)) {
|
|
10401
10427
|
return;
|
|
10402
10428
|
}
|
|
10403
|
-
if (Boolean(node.getAttributeValue("alt")) ||
|
|
10429
|
+
if (Boolean(node.getAttributeValue("alt")) || node.hasAttribute("alt") && this.options.allowEmpty) {
|
|
10404
10430
|
return;
|
|
10405
10431
|
}
|
|
10406
10432
|
for (const attr of this.options.alias) {
|
|
@@ -11797,7 +11823,7 @@ class EventHandler {
|
|
|
11797
11823
|
}
|
|
11798
11824
|
|
|
11799
11825
|
const name = "html-validate";
|
|
11800
|
-
const version = "
|
|
11826
|
+
const version = "10.1.0";
|
|
11801
11827
|
const bugs = "https://gitlab.com/html-validate/html-validate/issues/new";
|
|
11802
11828
|
|
|
11803
11829
|
function freeze(src) {
|
|
@@ -12101,6 +12127,8 @@ class Parser {
|
|
|
12101
12127
|
break;
|
|
12102
12128
|
case TokenType.TEXT:
|
|
12103
12129
|
case TokenType.TEMPLATING:
|
|
12130
|
+
case TokenType.SCRIPT:
|
|
12131
|
+
case TokenType.STYLE:
|
|
12104
12132
|
this.appendText(token.data[0], token.location);
|
|
12105
12133
|
break;
|
|
12106
12134
|
case TokenType.EOF:
|
|
@@ -14194,7 +14222,7 @@ var ignoreExports = /*@__PURE__*/ requireIgnore();
|
|
|
14194
14222
|
var ignore = /*@__PURE__*/getDefaultExportFromCjs(ignoreExports);
|
|
14195
14223
|
|
|
14196
14224
|
const engines = {
|
|
14197
|
-
node: "^
|
|
14225
|
+
node: "^20.19.0 || >= 22.12.0"
|
|
14198
14226
|
};
|
|
14199
14227
|
|
|
14200
14228
|
var workerPath = "./jest-worker.js";
|