html-validate 8.0.4 → 8.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.
Files changed (55) hide show
  1. package/dist/cjs/browser.js +11 -9
  2. package/dist/cjs/browser.js.map +1 -1
  3. package/dist/cjs/cli.js +5 -6
  4. package/dist/cjs/cli.js.map +1 -1
  5. package/dist/cjs/core-browser.js +31 -0
  6. package/dist/cjs/core-browser.js.map +1 -0
  7. package/dist/cjs/{nodejs.js → core-nodejs.js} +30 -2
  8. package/dist/cjs/core-nodejs.js.map +1 -0
  9. package/dist/cjs/core.js +2586 -2131
  10. package/dist/cjs/core.js.map +1 -1
  11. package/dist/cjs/elements.js.map +1 -1
  12. package/dist/cjs/html-validate.js +5 -5
  13. package/dist/cjs/html-validate.js.map +1 -1
  14. package/dist/cjs/html5.js +10 -0
  15. package/dist/cjs/html5.js.map +1 -0
  16. package/dist/cjs/index.js +13 -13
  17. package/dist/cjs/jest-lib.js +3 -3
  18. package/dist/cjs/jest-lib.js.map +1 -1
  19. package/dist/cjs/jest.js +4 -4
  20. package/dist/cjs/meta-helper.js +4 -4
  21. package/dist/cjs/meta-helper.js.map +1 -1
  22. package/dist/cjs/tsdoc-metadata.json +1 -1
  23. package/dist/cjs/utils/natural-join.js +30 -0
  24. package/dist/cjs/utils/natural-join.js.map +1 -0
  25. package/dist/es/browser.js +5 -4
  26. package/dist/es/browser.js.map +1 -1
  27. package/dist/es/cli.js +3 -4
  28. package/dist/es/cli.js.map +1 -1
  29. package/dist/es/core-browser.js +29 -0
  30. package/dist/es/core-browser.js.map +1 -0
  31. package/dist/es/{nodejs.js → core-nodejs.js} +30 -4
  32. package/dist/es/core-nodejs.js.map +1 -0
  33. package/dist/es/core.js +2556 -2100
  34. package/dist/es/core.js.map +1 -1
  35. package/dist/es/elements.js.map +1 -1
  36. package/dist/es/html-validate.js +6 -6
  37. package/dist/es/html-validate.js.map +1 -1
  38. package/dist/es/html5.js +8 -0
  39. package/dist/es/html5.js.map +1 -0
  40. package/dist/es/index.js +5 -5
  41. package/dist/es/jest-lib.js +2 -2
  42. package/dist/es/jest.js +4 -4
  43. package/dist/es/meta-helper.js +1 -1
  44. package/dist/es/utils/natural-join.js +28 -0
  45. package/dist/es/utils/natural-join.js.map +1 -0
  46. package/dist/tsdoc-metadata.json +1 -1
  47. package/dist/types/browser.d.ts +33 -18
  48. package/dist/types/index.d.ts +12 -21
  49. package/package.json +24 -19
  50. package/dist/cjs/nodejs.js.map +0 -1
  51. package/dist/cjs/rules-helper.js +0 -486
  52. package/dist/cjs/rules-helper.js.map +0 -1
  53. package/dist/es/nodejs.js.map +0 -1
  54. package/dist/es/rules-helper.js +0 -473
  55. package/dist/es/rules-helper.js.map +0 -1
@@ -1,473 +0,0 @@
1
- import { y as isTextNode, z as isElementNode, a as ConfigError, D as DynamicValue, B as generateIdSelector } from './core.js';
2
-
3
- const patternCache = new Map();
4
- function compileStringPattern(pattern) {
5
- const regexp = pattern.replace(/[*]+/g, ".+");
6
- /* eslint-disable-next-line security/detect-non-literal-regexp -- technical debt, should do input sanitation and precompilation */
7
- return new RegExp(`^${regexp}$`);
8
- }
9
- function compileRegExpPattern(pattern) {
10
- /* eslint-disable-next-line security/detect-non-literal-regexp -- technical debt, should do input sanitation and precompilation */
11
- return new RegExp(`^${pattern}$`);
12
- }
13
- function compilePattern(pattern) {
14
- const cached = patternCache.get(pattern);
15
- if (cached) {
16
- return cached;
17
- }
18
- const match = pattern.match(/^\/(.*)\/$/);
19
- const regexp = match ? compileRegExpPattern(match[1]) : compileStringPattern(pattern);
20
- patternCache.set(pattern, regexp);
21
- return regexp;
22
- }
23
- /**
24
- * @internal
25
- */
26
- function keywordPatternMatcher(list, keyword) {
27
- for (const pattern of list) {
28
- const regexp = compilePattern(pattern);
29
- if (regexp.test(keyword)) {
30
- return true;
31
- }
32
- }
33
- return false;
34
- }
35
- /**
36
- * @internal
37
- */
38
- function isKeywordIgnored(options, keyword, matcher = (list, it) => list.includes(it)) {
39
- const { include, exclude } = options;
40
- /* ignore keyword if not present in "include" */
41
- if (include && !matcher(include, keyword)) {
42
- return true;
43
- }
44
- /* ignore keyword if present in "excludes" */
45
- if (exclude && matcher(exclude, keyword)) {
46
- return true;
47
- }
48
- return false;
49
- }
50
-
51
- const ARIA_HIDDEN_CACHE = Symbol(isAriaHidden.name);
52
- const HTML_HIDDEN_CACHE = Symbol(isHTMLHidden.name);
53
- const ROLE_PRESENTATION_CACHE = Symbol(isPresentation.name);
54
- /**
55
- * Tests if this element is present in the accessibility tree.
56
- *
57
- * In practice it tests whenever the element or its parents has
58
- * `role="presentation"` or `aria-hidden="false"`. Dynamic values counts as
59
- * visible since the element might be in the visibility tree sometimes.
60
- */
61
- function inAccessibilityTree(node) {
62
- return !isAriaHidden(node) && !isPresentation(node);
63
- }
64
- function isAriaHiddenImpl(node) {
65
- const isHidden = (node) => {
66
- const ariaHidden = node.getAttribute("aria-hidden");
67
- return Boolean(ariaHidden && ariaHidden.value === "true");
68
- };
69
- return {
70
- byParent: node.parent ? isAriaHidden(node.parent) : false,
71
- bySelf: isHidden(node),
72
- };
73
- }
74
- function isAriaHidden(node, details) {
75
- const cached = node.cacheGet(ARIA_HIDDEN_CACHE);
76
- if (cached) {
77
- return details ? cached : cached.byParent || cached.bySelf;
78
- }
79
- const result = node.cacheSet(ARIA_HIDDEN_CACHE, isAriaHiddenImpl(node));
80
- return details ? result : result.byParent || result.bySelf;
81
- }
82
- function isHTMLHiddenImpl(node) {
83
- const isHidden = (node) => {
84
- const hidden = node.getAttribute("hidden");
85
- return hidden !== null && hidden.isStatic;
86
- };
87
- return {
88
- byParent: node.parent ? isHTMLHidden(node.parent) : false,
89
- bySelf: isHidden(node),
90
- };
91
- }
92
- function isHTMLHidden(node, details) {
93
- const cached = node.cacheGet(HTML_HIDDEN_CACHE);
94
- if (cached) {
95
- return details ? cached : cached.byParent || cached.bySelf;
96
- }
97
- const result = node.cacheSet(HTML_HIDDEN_CACHE, isHTMLHiddenImpl(node));
98
- return details ? result : result.byParent || result.bySelf;
99
- }
100
- /**
101
- * Tests if this element or a parent element has role="presentation".
102
- *
103
- * Dynamic values yields `false` just as if the attribute wasn't present.
104
- */
105
- function isPresentation(node) {
106
- if (node.cacheExists(ROLE_PRESENTATION_CACHE)) {
107
- return Boolean(node.cacheGet(ROLE_PRESENTATION_CACHE));
108
- }
109
- let cur = node;
110
- do {
111
- const role = cur.getAttribute("role");
112
- /* role="presentation" */
113
- if (role && role.value === "presentation") {
114
- return cur.cacheSet(ROLE_PRESENTATION_CACHE, true);
115
- }
116
- /* sanity check: break if no parent is present, normally not an issue as the
117
- * root element should be found first */
118
- if (!cur.parent) {
119
- break;
120
- }
121
- /* check parents */
122
- cur = cur.parent;
123
- } while (!cur.isRootElement());
124
- return node.cacheSet(ROLE_PRESENTATION_CACHE, false);
125
- }
126
-
127
- const cachePrefix = classifyNodeText.name;
128
- const HTML_CACHE_KEY = Symbol(`${cachePrefix}|html`);
129
- const A11Y_CACHE_KEY = Symbol(`${cachePrefix}|a11y`);
130
- const IGNORE_HIDDEN_ROOT_HTML_CACHE_KEY = Symbol(`${cachePrefix}|html|ignore-hidden-root`);
131
- const IGNORE_HIDDEN_ROOT_A11Y_CACHE_KEY = Symbol(`${cachePrefix}|a11y|ignore-hidden-root`);
132
- /**
133
- * @public
134
- */
135
- var TextClassification;
136
- (function (TextClassification) {
137
- TextClassification[TextClassification["EMPTY_TEXT"] = 0] = "EMPTY_TEXT";
138
- TextClassification[TextClassification["DYNAMIC_TEXT"] = 1] = "DYNAMIC_TEXT";
139
- TextClassification[TextClassification["STATIC_TEXT"] = 2] = "STATIC_TEXT";
140
- })(TextClassification || (TextClassification = {}));
141
- /**
142
- * @internal
143
- */
144
- function getCachekey(options) {
145
- const { accessible = false, ignoreHiddenRoot = false } = options;
146
- if (accessible && ignoreHiddenRoot) {
147
- return IGNORE_HIDDEN_ROOT_A11Y_CACHE_KEY;
148
- }
149
- else if (ignoreHiddenRoot) {
150
- return IGNORE_HIDDEN_ROOT_HTML_CACHE_KEY;
151
- }
152
- else if (accessible) {
153
- return A11Y_CACHE_KEY;
154
- }
155
- else {
156
- return HTML_CACHE_KEY;
157
- }
158
- }
159
- /* While I cannot find a reference about this in the standard the <select>
160
- * element kinda acts as if there is no text content, most particularly it
161
- * doesn't receive and accessible name. The `.textContent` property does
162
- * however include the <option> childrens text. But for the sake of the
163
- * validator it is probably best if the classification acts as if there is no
164
- * text as I think that is what is expected of the return values. Might have
165
- * to revisit this at some point or if someone could clarify what section of
166
- * the standard deals with this. */
167
- function isSpecialEmpty(node) {
168
- return node.is("select") || node.is("textarea");
169
- }
170
- /**
171
- * Checks text content of an element.
172
- *
173
- * Any text is considered including text from descendant elements. Whitespace is
174
- * ignored.
175
- *
176
- * If any text is dynamic `TextClassification.DYNAMIC_TEXT` is returned.
177
- *
178
- * @public
179
- */
180
- function classifyNodeText(node, options = {}) {
181
- const { accessible = false, ignoreHiddenRoot = false } = options;
182
- const cacheKey = getCachekey(options);
183
- if (node.cacheExists(cacheKey)) {
184
- return node.cacheGet(cacheKey);
185
- }
186
- if (!ignoreHiddenRoot && isHTMLHidden(node)) {
187
- return node.cacheSet(cacheKey, TextClassification.EMPTY_TEXT);
188
- }
189
- if (!ignoreHiddenRoot && accessible && isAriaHidden(node)) {
190
- return node.cacheSet(cacheKey, TextClassification.EMPTY_TEXT);
191
- }
192
- if (isSpecialEmpty(node)) {
193
- return node.cacheSet(cacheKey, TextClassification.EMPTY_TEXT);
194
- }
195
- const text = findTextNodes(node, {
196
- ...options,
197
- ignoreHiddenRoot: false,
198
- });
199
- /* if any text is dynamic classify as dynamic */
200
- if (text.some((cur) => cur.isDynamic)) {
201
- return node.cacheSet(cacheKey, TextClassification.DYNAMIC_TEXT);
202
- }
203
- /* if any text has non-whitespace character classify as static */
204
- if (text.some((cur) => cur.textContent.match(/\S/) !== null)) {
205
- return node.cacheSet(cacheKey, TextClassification.STATIC_TEXT);
206
- }
207
- /* default to empty */
208
- return node.cacheSet(cacheKey, TextClassification.EMPTY_TEXT);
209
- }
210
- function findTextNodes(node, options) {
211
- const { accessible = false } = options;
212
- let text = [];
213
- for (const child of node.childNodes) {
214
- if (isTextNode(child)) {
215
- text.push(child);
216
- }
217
- else if (isElementNode(child)) {
218
- if (isHTMLHidden(child, true).bySelf) {
219
- continue;
220
- }
221
- if (accessible && isAriaHidden(child, true).bySelf) {
222
- continue;
223
- }
224
- text = text.concat(findTextNodes(child, options));
225
- }
226
- }
227
- return text;
228
- }
229
-
230
- function hasAltText(image) {
231
- const alt = image.getAttribute("alt");
232
- /* missing or boolean */
233
- if (alt === null || alt.value === null) {
234
- return false;
235
- }
236
- return alt.isDynamic || alt.value.toString() !== "";
237
- }
238
-
239
- function hasAriaLabel(node) {
240
- const label = node.getAttribute("aria-label");
241
- /* missing or boolean */
242
- if (label === null || label.value === null) {
243
- return false;
244
- }
245
- return label.isDynamic || label.value.toString() !== "";
246
- }
247
-
248
- /**
249
- * Joins a list of words into natural language.
250
- *
251
- * - `["foo"]` becomes `"foo"`
252
- * - `["foo", "bar"]` becomes `"foo or bar"`
253
- * - `["foo", "bar", "baz"]` becomes `"foo, bar or baz"`
254
- * - and so on...
255
- *
256
- * @internal
257
- * @param values - List of words to join
258
- * @param conjunction - Conjunction for the last element.
259
- * @returns String with the words naturally joined with a conjunction.
260
- */
261
- function naturalJoin(values, conjunction = "or") {
262
- switch (values.length) {
263
- case 0:
264
- return "";
265
- case 1:
266
- return values[0];
267
- case 2:
268
- return `${values[0]} ${conjunction} ${values[1]}`;
269
- default:
270
- return `${values.slice(0, -1).join(", ")} ${conjunction} ${values.slice(-1)[0]}`;
271
- }
272
- }
273
-
274
- /**
275
- * Partition an array to two new lists based on the result of a
276
- * predicate. Similar to `Array.filter` but returns both matching and
277
- * non-matching in the same call.
278
- *
279
- * Elements matching the predicate is placed in the first array and elements not
280
- * matching is placed in the second.
281
- *
282
- * @public
283
- * @param values - The array of values to partition.
284
- * @param predicate - A predicate function taking a single element and returning
285
- * a boolean.
286
- * @returns - Two arrays where the first contains all elements where the
287
- * predicate matched and second contains the rest of the elements.
288
- */
289
- function partition(values, predicate) {
290
- const initial = [[], []];
291
- return values.reduce((accumulator, value, index) => {
292
- const match = predicate(value, index, values);
293
- accumulator[match ? 0 : 1].push(value);
294
- return accumulator;
295
- }, initial);
296
- }
297
-
298
- /**
299
- * Represents casing for a name, e.g. lowercase, uppercase, etc.
300
- */
301
- class CaseStyle {
302
- /**
303
- * @param style - Name of a valid case style.
304
- */
305
- constructor(style, ruleId) {
306
- if (!Array.isArray(style)) {
307
- style = [style];
308
- }
309
- if (style.length === 0) {
310
- throw new ConfigError(`Missing style for ${ruleId} rule`);
311
- }
312
- this.styles = this.parseStyle(style, ruleId);
313
- }
314
- /**
315
- * Test if a text matches this case style.
316
- */
317
- match(text) {
318
- return this.styles.some((style) => text.match(style.pattern));
319
- }
320
- get name() {
321
- const names = this.styles.map((style) => style.name);
322
- switch (this.styles.length) {
323
- case 1:
324
- return names[0];
325
- case 2:
326
- return names.join(" or ");
327
- default: {
328
- const last = names.slice(-1);
329
- const rest = names.slice(0, -1);
330
- return `${rest.join(", ")} or ${last[0]}`;
331
- }
332
- }
333
- }
334
- parseStyle(style, ruleId) {
335
- return style.map((cur) => {
336
- switch (cur.toLowerCase()) {
337
- case "lowercase":
338
- return { pattern: /^[a-z]*$/, name: "lowercase" };
339
- case "uppercase":
340
- return { pattern: /^[A-Z]*$/, name: "uppercase" };
341
- case "pascalcase":
342
- return { pattern: /^[A-Z][A-Za-z]*$/, name: "PascalCase" };
343
- case "camelcase":
344
- return { pattern: /^[a-z][A-Za-z]*$/, name: "camelCase" };
345
- default:
346
- throw new ConfigError(`Invalid style "${cur}" for ${ruleId} rule`);
347
- }
348
- });
349
- }
350
- }
351
-
352
- const HAS_ACCESSIBLE_TEXT_CACHE = Symbol(hasAccessibleName.name);
353
- function isHidden(node, context) {
354
- const { reference } = context;
355
- if (reference && reference.isSameNode(node)) {
356
- return false;
357
- }
358
- else {
359
- return isHTMLHidden(node) || !inAccessibilityTree(node);
360
- }
361
- }
362
- function hasImgAltText(node, context) {
363
- if (node.is("img")) {
364
- return hasAltText(node);
365
- }
366
- else if (node.is("svg")) {
367
- return node.textContent.trim() !== "";
368
- }
369
- else {
370
- for (const img of node.querySelectorAll("img, svg")) {
371
- const hasName = hasAccessibleNameImpl(img, context);
372
- if (hasName) {
373
- return true;
374
- }
375
- }
376
- return false;
377
- }
378
- }
379
- function hasLabel(node) {
380
- var _a;
381
- const value = (_a = node.getAttributeValue("aria-label")) !== null && _a !== void 0 ? _a : "";
382
- return Boolean(value.trim());
383
- }
384
- function isLabelledby(node, context) {
385
- const { document, reference } = context;
386
- /* if we already have resolved one level of reference we don't resolve another
387
- * level (as per accname step 2B) */
388
- if (reference) {
389
- return false;
390
- }
391
- const ariaLabelledby = node.ariaLabelledby;
392
- /* consider dynamic aria-labelledby as having a name as we cannot resolve it
393
- * so no way to prove correctness */
394
- if (ariaLabelledby instanceof DynamicValue) {
395
- return true;
396
- }
397
- /* ignore elements without aria-labelledby */
398
- if (ariaLabelledby === null) {
399
- return false;
400
- }
401
- return ariaLabelledby.some((id) => {
402
- const selector = generateIdSelector(id);
403
- return document.querySelectorAll(selector).some((child) => {
404
- return hasAccessibleNameImpl(child, {
405
- document,
406
- reference: child,
407
- });
408
- });
409
- });
410
- }
411
- /**
412
- * This algorithm is based on ["Accessible Name and Description Computation
413
- * 1.2"][accname] with some exceptions:
414
- *
415
- * It doesn't compute the actual name but only the presence of one, e.g. if a
416
- * non-empty flat string is present the algorithm terminates with a positive
417
- * result.
418
- *
419
- * It takes some optimization shortcuts such as starting with step F as it
420
- * would be more common usage and as there is no actual name being computed
421
- * the order wont matter.
422
- *
423
- * [accname]: https://w3c.github.io/accname
424
- */
425
- function hasAccessibleNameImpl(current, context) {
426
- const { reference } = context;
427
- /* if this element is hidden (see function for exceptions) it does not have an accessible name */
428
- if (isHidden(current, context)) {
429
- return false;
430
- }
431
- /* special case: when this element is directly referenced by aria-labelledby
432
- * we ignore `hidden` */
433
- const ignoreHiddenRoot = Boolean(reference && reference.isSameNode(current));
434
- const text = classifyNodeText(current, { accessible: true, ignoreHiddenRoot });
435
- if (text !== TextClassification.EMPTY_TEXT) {
436
- return true;
437
- }
438
- if (hasImgAltText(current, context)) {
439
- return true;
440
- }
441
- if (hasLabel(current)) {
442
- return true;
443
- }
444
- if (isLabelledby(current, context)) {
445
- return true;
446
- }
447
- return false;
448
- }
449
- /**
450
- * Returns `true` if the element has an accessible name.
451
- *
452
- * It does not yet consider if the elements role prohibits naming, e.g. a `<p>`
453
- * element will still show up as having an accessible name.
454
- *
455
- * @public
456
- * @param document - Document element.
457
- * @param current - The element to get accessible name for
458
- * @returns `true` if the element has an accessible name.
459
- */
460
- function hasAccessibleName(document, current) {
461
- /* istanbul ignore next: we're not testing cache */
462
- if (current.cacheExists(HAS_ACCESSIBLE_TEXT_CACHE)) {
463
- return Boolean(current.cacheGet(HAS_ACCESSIBLE_TEXT_CACHE));
464
- }
465
- const result = hasAccessibleNameImpl(current, {
466
- document,
467
- reference: null,
468
- });
469
- return current.cacheSet(HAS_ACCESSIBLE_TEXT_CACHE, result);
470
- }
471
-
472
- export { CaseStyle as C, TextClassification as T, isHTMLHidden as a, isAriaHidden as b, classifyNodeText as c, hasAccessibleName as d, inAccessibilityTree as e, hasAriaLabel as f, hasAltText as h, isKeywordIgnored as i, keywordPatternMatcher as k, naturalJoin as n, partition as p };
473
- //# sourceMappingURL=rules-helper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rules-helper.js","sources":["../../../src/rules/helper/is-keyword-ignored.ts","../../../src/rules/helper/a11y.ts","../../../src/rules/helper/text.ts","../../../src/rules/helper/has-alt-text.ts","../../../src/rules/helper/has-aria-label.ts","../../../src/rules/helper/natural-join.ts","../../../src/rules/helper/partition.ts","../../../src/rules/helper/case-style.ts","../../../src/rules/helper/has-accessible-name.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":[],"mappings":"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"}