html-validate 10.8.0 → 10.10.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 (38) hide show
  1. package/dist/cjs/cli.js +10 -10
  2. package/dist/cjs/cli.js.map +1 -1
  3. package/dist/cjs/core-browser.js +1 -1
  4. package/dist/cjs/core-browser.js.map +1 -1
  5. package/dist/cjs/core-nodejs.js +1 -1
  6. package/dist/cjs/core-nodejs.js.map +1 -1
  7. package/dist/cjs/core.js +333 -142
  8. package/dist/cjs/core.js.map +1 -1
  9. package/dist/cjs/elements.js +30 -18
  10. package/dist/cjs/elements.js.map +1 -1
  11. package/dist/cjs/html-validate.js +23 -15
  12. package/dist/cjs/html-validate.js.map +1 -1
  13. package/dist/cjs/matchers-jestonly.js +2 -2
  14. package/dist/cjs/matchers-jestonly.js.map +1 -1
  15. package/dist/cjs/tsdoc-metadata.json +1 -1
  16. package/dist/cjs/utils/natural-join.js +1 -1
  17. package/dist/cjs/utils/natural-join.js.map +1 -1
  18. package/dist/esm/cli.js +10 -10
  19. package/dist/esm/cli.js.map +1 -1
  20. package/dist/esm/core-browser.js +1 -1
  21. package/dist/esm/core-browser.js.map +1 -1
  22. package/dist/esm/core-nodejs.js +1 -1
  23. package/dist/esm/core-nodejs.js.map +1 -1
  24. package/dist/esm/core.js +333 -142
  25. package/dist/esm/core.js.map +1 -1
  26. package/dist/esm/elements.js +30 -18
  27. package/dist/esm/elements.js.map +1 -1
  28. package/dist/esm/html-validate.js +24 -16
  29. package/dist/esm/html-validate.js.map +1 -1
  30. package/dist/esm/matchers-jestonly.js +2 -2
  31. package/dist/esm/matchers-jestonly.js.map +1 -1
  32. package/dist/esm/utils/natural-join.js +1 -1
  33. package/dist/esm/utils/natural-join.js.map +1 -1
  34. package/dist/schema/elements.json +6 -0
  35. package/dist/tsdoc-metadata.json +1 -1
  36. package/dist/types/browser.d.ts +24 -9
  37. package/dist/types/index.d.ts +24 -9
  38. package/package.json +3 -3
@@ -45,7 +45,7 @@ function linkBodyOk(node) {
45
45
  if (typeof rel !== "string") {
46
46
  return false;
47
47
  }
48
- const bodyOk = [
48
+ const bodyOk = /* @__PURE__ */ new Set([
49
49
  "dns-prefetch",
50
50
  "modulepreload",
51
51
  "pingback",
@@ -53,9 +53,9 @@ function linkBodyOk(node) {
53
53
  "prefetch",
54
54
  "preload",
55
55
  "stylesheet"
56
- ];
56
+ ]);
57
57
  const tokens = rel.toLowerCase().split(/\s+/);
58
- return tokens.some((keyword) => bodyOk.includes(keyword));
58
+ return tokens.some((keyword) => bodyOk.has(keyword));
59
59
  }
60
60
  var html5 = {
61
61
  "*": {
@@ -150,7 +150,7 @@ var html5 = {
150
150
  if (!attr || attr === "" || typeof attr !== "string") {
151
151
  return null;
152
152
  }
153
- const disallowed = [
153
+ const disallowed = /* @__PURE__ */ new Set([
154
154
  /* whatwg */
155
155
  "canonical",
156
156
  "dns-prefetch",
@@ -197,10 +197,10 @@ var html5 = {
197
197
  "stylesheet/less",
198
198
  "token_endpoint",
199
199
  "yandex-tableau-widget"
200
- ];
200
+ ]);
201
201
  const tokens = attr.toLowerCase().split(/\s+/);
202
202
  for (const keyword of tokens) {
203
- if (disallowed.includes(keyword)) {
203
+ if (disallowed.has(keyword)) {
204
204
  return `<a> does not allow rel="${keyword}"`;
205
205
  }
206
206
  if (keyword.startsWith("dcterms.")) {
@@ -324,7 +324,7 @@ var html5 = {
324
324
  if (!attr || attr === "" || typeof attr !== "string") {
325
325
  return null;
326
326
  }
327
- const disallowed = [
327
+ const disallowed = /* @__PURE__ */ new Set([
328
328
  /* whatwg */
329
329
  "canonical",
330
330
  "dns-prefetch",
@@ -371,10 +371,10 @@ var html5 = {
371
371
  "stylesheet/less",
372
372
  "token_endpoint",
373
373
  "yandex-tableau-widget"
374
- ];
374
+ ]);
375
375
  const tokens = attr.toLowerCase().split(/\s+/);
376
376
  for (const keyword of tokens) {
377
- if (disallowed.includes(keyword)) {
377
+ if (disallowed.has(keyword)) {
378
378
  return `<area> does not allow rel="${keyword}"`;
379
379
  }
380
380
  if (keyword.startsWith("dcterms.")) {
@@ -601,6 +601,10 @@ var html5 = {
601
601
  listed: true
602
602
  },
603
603
  labelable: true,
604
+ submitButton(node) {
605
+ const type = node.getAttribute("type");
606
+ return !type || type === "submit";
607
+ },
604
608
  attributes: {
605
609
  autofocus: {
606
610
  boolean: true
@@ -956,7 +960,7 @@ var html5 = {
956
960
  if (!attr || attr === "" || typeof attr !== "string") {
957
961
  return null;
958
962
  }
959
- const disallowed = [
963
+ const disallowed = /* @__PURE__ */ new Set([
960
964
  /* whatwg */
961
965
  "alternate",
962
966
  "canonical",
@@ -975,10 +979,10 @@ var html5 = {
975
979
  "stylesheet",
976
980
  "tag",
977
981
  "terms-of-service"
978
- ];
982
+ ]);
979
983
  const tokens = attr.toLowerCase().split(/\s+/);
980
984
  for (const keyword of tokens) {
981
- if (disallowed.includes(keyword)) {
985
+ if (disallowed.has(keyword)) {
982
986
  return `<form> does not allow rel="${keyword}"`;
983
987
  }
984
988
  }
@@ -1179,7 +1183,7 @@ var html5 = {
1179
1183
  }
1180
1184
  },
1181
1185
  aria: {
1182
- implicitRole: "document",
1186
+ implicitRole: "generic",
1183
1187
  naming: "prohibited"
1184
1188
  }
1185
1189
  },
@@ -1348,6 +1352,10 @@ var html5 = {
1348
1352
  labelable(node) {
1349
1353
  return node.getAttribute("type") !== "hidden";
1350
1354
  },
1355
+ submitButton(node) {
1356
+ const type = node.getAttribute("type");
1357
+ return type === "submit" || type === "image";
1358
+ },
1351
1359
  attributes: {
1352
1360
  align: {
1353
1361
  deprecated: true
@@ -1713,7 +1721,7 @@ var html5 = {
1713
1721
  if (!attr || attr === "" || typeof attr !== "string") {
1714
1722
  return null;
1715
1723
  }
1716
- const disallowed = [
1724
+ const disallowed = /* @__PURE__ */ new Set([
1717
1725
  /* whatwg */
1718
1726
  "bookmark",
1719
1727
  "external",
@@ -1727,10 +1735,10 @@ var html5 = {
1727
1735
  "entry-content",
1728
1736
  "lightbox",
1729
1737
  "lightvideo"
1730
- ];
1738
+ ]);
1731
1739
  const tokens = attr.toLowerCase().split(/\s+/);
1732
1740
  for (const keyword of tokens) {
1733
- if (disallowed.includes(keyword)) {
1741
+ if (disallowed.has(keyword)) {
1734
1742
  return `<link> does not allow rel="${keyword}"`;
1735
1743
  }
1736
1744
  }
@@ -2321,7 +2329,7 @@ var html5 = {
2321
2329
  }
2322
2330
  const size = node.getAttribute("size");
2323
2331
  if (typeof size === "string") {
2324
- const parsed = parseInt(size, 10);
2332
+ const parsed = Number.parseInt(size, 10);
2325
2333
  if (parsed > 1) {
2326
2334
  return "listbox";
2327
2335
  }
@@ -2353,7 +2361,11 @@ var html5 = {
2353
2361
  phrasing: true,
2354
2362
  permittedContent: [],
2355
2363
  textContent: "none",
2356
- requiredAncestors: ["select > button"]
2364
+ requiredAncestors: ["select > button"],
2365
+ aria: {
2366
+ implicitRole: "generic",
2367
+ naming: "prohibited"
2368
+ }
2357
2369
  },
2358
2370
  slot: {
2359
2371
  flow: true,