@markuplint/rules 3.13.0 → 4.0.0-alpha.2

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 (142) hide show
  1. package/lib/attr-check.js +14 -19
  2. package/lib/attr-duplication/index.js +3 -6
  3. package/lib/attr-value-quotes/index.js +5 -9
  4. package/lib/case-sensitive-attr-name/index.js +9 -13
  5. package/lib/case-sensitive-tag-name/index.js +2 -4
  6. package/lib/character-reference/index.js +6 -8
  7. package/lib/class-naming/index.js +9 -11
  8. package/lib/create-message.js +9 -16
  9. package/lib/debug.js +2 -6
  10. package/lib/deprecated-attr/index.js +6 -9
  11. package/lib/deprecated-element/index.js +3 -5
  12. package/lib/disallowed-element/index.js +2 -4
  13. package/lib/doctype/index.js +2 -4
  14. package/lib/end-tag/index.js +5 -8
  15. package/lib/helpers.d.ts +1 -1
  16. package/lib/helpers.js +17 -28
  17. package/lib/id-duplication/index.js +2 -4
  18. package/lib/index.d.ts +15 -15
  19. package/lib/index.js +63 -66
  20. package/lib/ineffective-attr/index.js +5 -7
  21. package/lib/invalid-attr/index.js +30 -33
  22. package/lib/label-has-control/index.js +2 -4
  23. package/lib/landmark-roles/index.js +3 -6
  24. package/lib/no-boolean-attr-value/index.js +6 -9
  25. package/lib/no-default-value/index.js +9 -12
  26. package/lib/no-empty-palpable-content/index.js +5 -7
  27. package/lib/no-hard-code-id/index.js +2 -4
  28. package/lib/no-refer-to-non-existent-id/index.js +26 -30
  29. package/lib/no-use-event-handler-attr/index.js +4 -6
  30. package/lib/permitted-contents/choice.d.ts +1 -1
  31. package/lib/permitted-contents/choice.js +13 -18
  32. package/lib/permitted-contents/complex-branch.d.ts +1 -1
  33. package/lib/permitted-contents/complex-branch.js +10 -14
  34. package/lib/permitted-contents/content-model.d.ts +1 -1
  35. package/lib/permitted-contents/content-model.js +5 -9
  36. package/lib/permitted-contents/count-pattern.d.ts +1 -1
  37. package/lib/permitted-contents/count-pattern.js +19 -24
  38. package/lib/permitted-contents/debug.browser.js +9 -12
  39. package/lib/permitted-contents/debug.d.ts +8 -1
  40. package/lib/permitted-contents/debug.js +12 -13
  41. package/lib/permitted-contents/index.d.ts +1 -1
  42. package/lib/permitted-contents/index.js +10 -13
  43. package/lib/permitted-contents/matches-selector.d.ts +1 -1
  44. package/lib/permitted-contents/matches-selector.js +12 -17
  45. package/lib/permitted-contents/order.d.ts +1 -1
  46. package/lib/permitted-contents/order.js +17 -22
  47. package/lib/permitted-contents/recursive-branch.d.ts +2 -2
  48. package/lib/permitted-contents/recursive-branch.js +9 -13
  49. package/lib/permitted-contents/represent-transparent-nodes.d.ts +1 -1
  50. package/lib/permitted-contents/represent-transparent-nodes.js +15 -20
  51. package/lib/permitted-contents/start.d.ts +1 -1
  52. package/lib/permitted-contents/start.js +13 -21
  53. package/lib/permitted-contents/transparent.d.ts +1 -1
  54. package/lib/permitted-contents/transparent.js +4 -9
  55. package/lib/permitted-contents/types.js +1 -2
  56. package/lib/permitted-contents/utils.d.ts +1 -1
  57. package/lib/permitted-contents/utils.js +55 -74
  58. package/lib/placeholder-label-option/index.js +5 -9
  59. package/lib/require-accessible-name/index.js +10 -13
  60. package/lib/require-datetime/index.d.ts +1 -1
  61. package/lib/require-datetime/index.js +6 -8
  62. package/lib/require-datetime/types.js +1 -2
  63. package/lib/require-datetime/utils.d.ts +1 -1
  64. package/lib/require-datetime/utils.js +4 -11
  65. package/lib/required-attr/index.js +8 -11
  66. package/lib/required-element/index.js +3 -6
  67. package/lib/required-h1/index.js +3 -6
  68. package/lib/use-list/index.js +6 -10
  69. package/lib/wai-aria/checkings/abstract-role.d.ts +1 -1
  70. package/lib/wai-aria/checkings/abstract-role.js +5 -10
  71. package/lib/wai-aria/checkings/default-value.d.ts +1 -1
  72. package/lib/wai-aria/checkings/default-value.js +2 -6
  73. package/lib/wai-aria/checkings/deprecated-props.d.ts +1 -1
  74. package/lib/wai-aria/checkings/deprecated-props.js +3 -8
  75. package/lib/wai-aria/checkings/disallowed-prop.d.ts +1 -1
  76. package/lib/wai-aria/checkings/disallowed-prop.js +7 -12
  77. package/lib/wai-aria/checkings/implicit-props.d.ts +1 -1
  78. package/lib/wai-aria/checkings/implicit-props.js +6 -11
  79. package/lib/wai-aria/checkings/implicit-role.d.ts +1 -1
  80. package/lib/wai-aria/checkings/implicit-role.js +4 -9
  81. package/lib/wai-aria/checkings/interaction-in-hidden.d.ts +1 -1
  82. package/lib/wai-aria/checkings/interaction-in-hidden.js +4 -8
  83. package/lib/wai-aria/checkings/no-global-prop.d.ts +1 -1
  84. package/lib/wai-aria/checkings/no-global-prop.js +2 -7
  85. package/lib/wai-aria/checkings/non-existent-role.d.ts +1 -1
  86. package/lib/wai-aria/checkings/non-existent-role.js +4 -9
  87. package/lib/wai-aria/checkings/permitted-roles.d.ts +1 -1
  88. package/lib/wai-aria/checkings/permitted-roles.js +4 -9
  89. package/lib/wai-aria/checkings/presentational-children.d.ts +1 -1
  90. package/lib/wai-aria/checkings/presentational-children.js +4 -9
  91. package/lib/wai-aria/checkings/required-owned-elements.d.ts +1 -1
  92. package/lib/wai-aria/checkings/required-owned-elements.js +4 -8
  93. package/lib/wai-aria/checkings/required-prop.d.ts +1 -1
  94. package/lib/wai-aria/checkings/required-prop.js +2 -7
  95. package/lib/wai-aria/checkings/value.d.ts +1 -1
  96. package/lib/wai-aria/checkings/value.js +4 -10
  97. package/lib/wai-aria/index.d.ts +1 -1
  98. package/lib/wai-aria/index.js +38 -40
  99. package/lib/wai-aria/types.js +1 -2
  100. package/package.json +17 -12
  101. package/test/attr-check.spec.js +0 -77
  102. package/test/attr-duplication/index.spec.js +0 -159
  103. package/test/attr-value-quotes/index.spec.js +0 -133
  104. package/test/case-sensitive-attr-name/index.spec.js +0 -65
  105. package/test/case-sensitive-tag-name/index.spec.js +0 -80
  106. package/test/character-reference/index.spec.js +0 -72
  107. package/test/class-naming/index.spec.js +0 -470
  108. package/test/create-message.spec.js +0 -497
  109. package/test/deprecated-attr/index.spec.js +0 -48
  110. package/test/deprecated-element/index.spec.js +0 -35
  111. package/test/disallowed-element/index.spec.js +0 -90
  112. package/test/doctype/index.spec.js +0 -50
  113. package/test/end-tag/index.spec.js +0 -162
  114. package/test/id-duplication/index.spec.js +0 -47
  115. package/test/ineffective-attr/index.spec.js +0 -31
  116. package/test/invalid-attr/index.spec.js +0 -1631
  117. package/test/label-has-control/index.spec.js +0 -29
  118. package/test/landmark-roles/index.spec.js +0 -187
  119. package/test/no-boolean-attr-value/index.spec.js +0 -41
  120. package/test/no-default-value/index.spec.js +0 -74
  121. package/test/no-empty-palpable-content/index.spec.js +0 -115
  122. package/test/no-hard-code-id/index.spec.js +0 -100
  123. package/test/no-refer-to-non-existent-id/index.spec.js +0 -254
  124. package/test/no-use-event-handler-attr/index.spec.js +0 -57
  125. package/test/permitted-contents/choice.spec.js +0 -174
  126. package/test/permitted-contents/count-pattern.spec.js +0 -308
  127. package/test/permitted-contents/index.spec.js +0 -1395
  128. package/test/permitted-contents/matches-selector.spec.js +0 -59
  129. package/test/permitted-contents/order.spec.js +0 -351
  130. package/test/permitted-contents/recursive-branch.spec.js +0 -41
  131. package/test/permitted-contents/represent-transparent-nodes.spec.js +0 -24
  132. package/test/permitted-contents/start.spec.js +0 -67
  133. package/test/placeholder-label-option/index.spec.js +0 -113
  134. package/test/require-accessible-name/index.spec.js +0 -444
  135. package/test/require-datetime/index.spec.js +0 -54
  136. package/test/require-datetime/utils.spec.js +0 -52
  137. package/test/required-attr/index.spec.js +0 -414
  138. package/test/required-element/index.spec.js +0 -188
  139. package/test/required-h1/index.spec.js +0 -69
  140. package/test/use-list/index.spec.js +0 -109
  141. package/test/wai-aria/checkings/value.spec.js +0 -33
  142. package/test/wai-aria/index.spec.js +0 -1203
@@ -1,17 +1,13 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkingAbstractRole = void 0;
4
- const ml_spec_1 = require("@markuplint/ml-spec");
5
- const checkingAbstractRole = ({ attr }) => t => {
6
- var _a;
7
- const { roles } = (0, ml_spec_1.ariaSpecs)(attr.ownerMLDocument.specs, attr.rule.options.version);
8
- const tokens = (_a = attr.tokenList) === null || _a === void 0 ? void 0 : _a.allTokens();
1
+ import { ariaSpecs } from '@markuplint/ml-spec';
2
+ export const checkingAbstractRole = ({ attr }) => t => {
3
+ const { roles } = ariaSpecs(attr.ownerMLDocument.specs, attr.rule.options.version);
4
+ const tokens = attr.tokenList?.allTokens();
9
5
  if (!tokens) {
10
6
  return;
11
7
  }
12
8
  for (const token of tokens) {
13
9
  const role = roles.find(r => r.name === token.raw);
14
- if (role === null || role === void 0 ? void 0 : role.isAbstract) {
10
+ if (role?.isAbstract) {
15
11
  return {
16
12
  scope: token,
17
13
  message: t('{0} is {1}', t('the "{0*}" {1}', token.raw, 'role'), 'the abstract role'),
@@ -19,4 +15,3 @@ const checkingAbstractRole = ({ attr }) => t => {
19
15
  }
20
16
  }
21
17
  };
22
- exports.checkingAbstractRole = checkingAbstractRole;
@@ -1,4 +1,4 @@
1
- import type { Options } from '../types';
1
+ import type { Options } from '../types.js';
2
2
  import type { AttrChecker } from '@markuplint/ml-core';
3
3
  import type { ARIAProperty } from '@markuplint/ml-spec';
4
4
  export declare const checkingDefaultValue: AttrChecker<boolean, Options, {
@@ -1,17 +1,13 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkingDefaultValue = void 0;
4
- const checkingDefaultValue = ({ attr, propSpecs }) => t => {
1
+ export const checkingDefaultValue = ({ attr, propSpecs }) => t => {
5
2
  if (attr.isDynamicValue) {
6
3
  return;
7
4
  }
8
5
  const propSpec = propSpecs.find(p => p.name === attr.name);
9
6
  const value = attr.value.trim().toLowerCase();
10
- if ((propSpec === null || propSpec === void 0 ? void 0 : propSpec.defaultValue) != null && propSpec.defaultValue === value) {
7
+ if (propSpec?.defaultValue != null && propSpec.defaultValue === value) {
11
8
  return {
12
9
  scope: attr,
13
10
  message: t('It is {0}', 'default value'),
14
11
  };
15
12
  }
16
13
  };
17
- exports.checkingDefaultValue = checkingDefaultValue;
@@ -1,4 +1,4 @@
1
- import type { Options } from '../types';
1
+ import type { Options } from '../types.js';
2
2
  import type { AttrChecker } from '@markuplint/ml-core';
3
3
  import type { ARIAProperty, ARIARole } from '@markuplint/ml-spec';
4
4
  export declare const checkingDeprecatedProps: AttrChecker<boolean, Options, {
@@ -1,18 +1,13 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkingDeprecatedProps = void 0;
4
- const checkingDeprecatedProps = ({ attr, role, propSpecs }) => t => {
5
- var _a;
1
+ export const checkingDeprecatedProps = ({ attr, role, propSpecs }) => t => {
6
2
  if (!role) {
7
3
  return;
8
4
  }
9
5
  const props = role.ownedProperties.find(p => p.name === attr.name);
10
- if (props === null || props === void 0 ? void 0 : props.deprecated) {
6
+ if (props?.deprecated) {
11
7
  const propSpec = propSpecs.find(p => p.name === attr.name);
12
8
  return {
13
9
  scope: attr,
14
- message: t('{0:c} on {1}', t('{0} is {1:c}', t('the "{0*}" {1}', attr.name, `ARIA ${(_a = propSpec === null || propSpec === void 0 ? void 0 : propSpec.type) !== null && _a !== void 0 ? _a : 'property'}`), 'deprecated'), t('the "{0*}" {1}', role.name, 'role')),
10
+ message: t('{0:c} on {1}', t('{0} is {1:c}', t('the "{0*}" {1}', attr.name, `ARIA ${propSpec?.type ?? 'property'}`), 'deprecated'), t('the "{0*}" {1}', role.name, 'role')),
15
11
  };
16
12
  }
17
13
  };
18
- exports.checkingDeprecatedProps = checkingDeprecatedProps;
@@ -1,4 +1,4 @@
1
- import type { Options } from '../types';
1
+ import type { Options } from '../types.js';
2
2
  import type { AttrChecker } from '@markuplint/ml-core';
3
3
  import type { ARIAProperty, ARIARole } from '@markuplint/ml-spec';
4
4
  export declare const checkingDisallowedProp: AttrChecker<boolean, Options, {
@@ -1,9 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkingDisallowedProp = void 0;
4
- const ml_spec_1 = require("@markuplint/ml-spec");
5
- const checkingDisallowedProp = ({ attr, role, propSpecs }) => t => {
6
- var _a, _b, _c, _d;
1
+ import { getARIA } from '@markuplint/ml-spec';
2
+ export const checkingDisallowedProp = ({ attr, role, propSpecs }) => t => {
7
3
  if (!role) {
8
4
  return;
9
5
  }
@@ -12,8 +8,8 @@ const checkingDisallowedProp = ({ attr, role, propSpecs }) => t => {
12
8
  }
13
9
  const statesAndProp = role.ownedProperties.find(p => p.name === attr.name);
14
10
  const propSpec = propSpecs.find(p => p.name === attr.name);
15
- const elAriaSpec = (0, ml_spec_1.getARIA)(attr.ownerMLDocument.specs, attr.ownerElement.localName, attr.ownerElement.namespaceURI, attr.rule.options.version, attr.ownerElement.matches.bind(attr.ownerElement));
16
- if ((elAriaSpec === null || elAriaSpec === void 0 ? void 0 : elAriaSpec.properties) !== false && ((_a = elAriaSpec === null || elAriaSpec === void 0 ? void 0 : elAriaSpec.properties) === null || _a === void 0 ? void 0 : _a.without)) {
11
+ const elAriaSpec = getARIA(attr.ownerMLDocument.specs, attr.ownerElement.localName, attr.ownerElement.namespaceURI, attr.rule.options.version, attr.ownerElement.matches.bind(attr.ownerElement));
12
+ if (elAriaSpec?.properties !== false && elAriaSpec?.properties?.without) {
17
13
  for (const ignore of elAriaSpec.properties.without) {
18
14
  if (ignore.name === attr.name) {
19
15
  return {
@@ -24,12 +20,12 @@ const checkingDisallowedProp = ({ attr, role, propSpecs }) => t => {
24
20
  ? '{0} should not {1}'
25
21
  : '{0} is not recommended to {1}',
26
22
  // {0}
27
- t('the "{0*}" {1}', attr.name, `ARIA ${(_b = propSpec === null || propSpec === void 0 ? void 0 : propSpec.type) !== null && _b !== void 0 ? _b : 'property'}`),
23
+ t('the "{0*}" {1}', attr.name, `ARIA ${propSpec?.type ?? 'property'}`),
28
24
  // {1}
29
25
  'use'), t('the "{0*}" {1}', attr.ownerElement.localName, 'element')) +
30
26
  (ignore.alt
31
27
  ? t('. ') +
32
- t('{0} if you {1} {2}', t(ignore.alt.method === 'remove-attr' ? 'Remove {0}' : 'Add {0}', t('the "{0*}" {1}', ignore.alt.target, 'attribute')), 'use', t('the {0}', `ARIA ${(_c = propSpec === null || propSpec === void 0 ? void 0 : propSpec.type) !== null && _c !== void 0 ? _c : 'property'}`))
28
+ t('{0} if you {1} {2}', t(ignore.alt.method === 'remove-attr' ? 'Remove {0}' : 'Add {0}', t('the "{0*}" {1}', ignore.alt.target, 'attribute')), 'use', t('the {0}', `ARIA ${propSpec?.type ?? 'property'}`))
33
29
  : ''),
34
30
  };
35
31
  }
@@ -40,7 +36,6 @@ const checkingDisallowedProp = ({ attr, role, propSpecs }) => t => {
40
36
  }
41
37
  return {
42
38
  scope: attr,
43
- message: t('{0:c} on {1}', t('{0} is {1:c}', t('the "{0*}" {1}', attr.name, `ARIA ${(_d = propSpec === null || propSpec === void 0 ? void 0 : propSpec.type) !== null && _d !== void 0 ? _d : 'property'}`), 'disallowed'), t('the "{0*}" {1}', role.name, 'role')),
39
+ message: t('{0:c} on {1}', t('{0} is {1:c}', t('the "{0*}" {1}', attr.name, `ARIA ${propSpec?.type ?? 'property'}`), 'disallowed'), t('the "{0*}" {1}', role.name, 'role')),
44
40
  };
45
41
  };
46
- exports.checkingDisallowedProp = checkingDisallowedProp;
@@ -1,4 +1,4 @@
1
- import type { Options } from '../types';
1
+ import type { Options } from '../types.js';
2
2
  import type { AttrChecker } from '@markuplint/ml-core';
3
3
  import type { ARIAProperty, Attribute } from '@markuplint/ml-spec';
4
4
  export declare const checkingImplicitProps: AttrChecker<boolean, Options, {
@@ -1,9 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkingImplicitProps = void 0;
4
- const helpers_1 = require("../../helpers");
5
- const checkingImplicitProps = ({ attr, propSpecs, attrSpecs }) => t => {
6
- var _a;
1
+ import { isValidAttr } from '../../helpers.js';
2
+ export const checkingImplicitProps = ({ attr, propSpecs, attrSpecs }) => t => {
7
3
  if (!attrSpecs) {
8
4
  return;
9
5
  }
@@ -11,12 +7,12 @@ const checkingImplicitProps = ({ attr, propSpecs, attrSpecs }) => t => {
11
7
  return;
12
8
  }
13
9
  const propSpec = propSpecs.find(p => p.name === attr.name);
14
- if (!(propSpec === null || propSpec === void 0 ? void 0 : propSpec.equivalentHtmlAttrs)) {
10
+ if (!propSpec?.equivalentHtmlAttrs) {
15
11
  return;
16
12
  }
17
13
  for (const equivalentHtmlAttr of propSpec.equivalentHtmlAttrs) {
18
14
  const htmlAttrSpec = attrSpecs.find(a => a.name === equivalentHtmlAttr.htmlAttrName);
19
- const isValid = (0, helpers_1.isValidAttr)(t, equivalentHtmlAttr.htmlAttrName, (_a = equivalentHtmlAttr.value) !== null && _a !== void 0 ? _a : '', false, attr.ownerElement, attrSpecs);
15
+ const isValid = isValidAttr(t, equivalentHtmlAttr.htmlAttrName, equivalentHtmlAttr.value ?? '', false, attr.ownerElement, attrSpecs);
20
16
  if (isValid !== false && isValid.invalidType === 'non-existent') {
21
17
  continue;
22
18
  }
@@ -30,7 +26,7 @@ const checkingImplicitProps = ({ attr, propSpecs, attrSpecs }) => t => {
30
26
  message: t('{0} has {1}', t('the "{0*}" {1}', attr.name, `ARIA ${propSpec.type}`), t('the same {0} as {1}', 'semantics', t('{0} or {1}', t('the current "{0}" {1}', equivalentHtmlAttr.htmlAttrName, 'attribute'), t('the implicit "{0}" {1}', equivalentHtmlAttr.htmlAttrName, 'attribute')))),
31
27
  };
32
28
  }
33
- if ((htmlAttrSpec === null || htmlAttrSpec === void 0 ? void 0 : htmlAttrSpec.type) === 'Boolean' && value !== 'false') {
29
+ if (htmlAttrSpec?.type === 'Boolean' && value !== 'false') {
34
30
  continue;
35
31
  }
36
32
  return {
@@ -39,7 +35,7 @@ const checkingImplicitProps = ({ attr, propSpecs, attrSpecs }) => t => {
39
35
  };
40
36
  }
41
37
  else if (value === 'true') {
42
- if (!equivalentHtmlAttr.isNotStrictEquivalent && (htmlAttrSpec === null || htmlAttrSpec === void 0 ? void 0 : htmlAttrSpec.type) === 'Boolean') {
38
+ if (!equivalentHtmlAttr.isNotStrictEquivalent && htmlAttrSpec?.type === 'Boolean') {
43
39
  return {
44
40
  scope: attr,
45
41
  message: t('{0} contradicts {1}', t('the "{0*}" {1}', attr.name, `ARIA ${propSpec.type}`), t('the implicit "{0}" {1}', equivalentHtmlAttr.htmlAttrName, 'attribute')),
@@ -48,4 +44,3 @@ const checkingImplicitProps = ({ attr, propSpecs, attrSpecs }) => t => {
48
44
  }
49
45
  }
50
46
  };
51
- exports.checkingImplicitProps = checkingImplicitProps;
@@ -1,3 +1,3 @@
1
- import type { Options } from '../types';
1
+ import type { Options } from '../types.js';
2
2
  import type { AttrChecker } from '@markuplint/ml-core';
3
3
  export declare const checkingImplicitRole: AttrChecker<boolean, Options>;
@@ -1,11 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkingImplicitRole = void 0;
4
- const ml_spec_1 = require("@markuplint/ml-spec");
5
- const checkingImplicitRole = ({ attr }) => t => {
6
- var _a;
7
- const implicitRole = (0, ml_spec_1.getImplicitRoleName)(attr.ownerElement, attr.rule.options.version, attr.ownerMLDocument.specs);
8
- const tokens = (_a = attr.tokenList) === null || _a === void 0 ? void 0 : _a.allTokens();
1
+ import { getImplicitRoleName } from '@markuplint/ml-spec';
2
+ export const checkingImplicitRole = ({ attr }) => t => {
3
+ const implicitRole = getImplicitRoleName(attr.ownerElement, attr.rule.options.version, attr.ownerMLDocument.specs);
4
+ const tokens = attr.tokenList?.allTokens();
9
5
  if (!tokens) {
10
6
  return;
11
7
  }
@@ -18,4 +14,3 @@ const checkingImplicitRole = ({ attr }) => t => {
18
14
  }
19
15
  }
20
16
  };
21
- exports.checkingImplicitRole = checkingImplicitRole;
@@ -1,4 +1,4 @@
1
- import type { Options } from '../types';
1
+ import type { Options } from '../types.js';
2
2
  import type { ElementChecker } from '@markuplint/ml-core';
3
3
  /**
4
4
  * Including Elements in the Accessibility Tree
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkingInteractionInHidden = void 0;
4
- const ml_spec_1 = require("@markuplint/ml-spec");
1
+ import { mayBeFocusable } from '@markuplint/ml-spec';
5
2
  /**
6
3
  * Including Elements in the Accessibility Tree
7
4
  *
@@ -14,8 +11,8 @@ const ml_spec_1 = require("@markuplint/ml-spec");
14
11
  // なので、aria-hidden=trueの子孫要素で且つインタラクティブ要素である場合、
15
12
  // それは開発者にとってはほとんどの場合、意図しないことが多いはずなので、
16
13
  // 仕様上不正にはならないが、十分に注意しなければならない状態である。
17
- const checkingInteractionInHidden = ({ el }) => t => {
18
- if (!(0, ml_spec_1.mayBeFocusable)(el, el.ownerMLDocument.specs)) {
14
+ export const checkingInteractionInHidden = ({ el }) => t => {
15
+ if (!mayBeFocusable(el, el.ownerMLDocument.specs)) {
19
16
  return;
20
17
  }
21
18
  const ariaHidden = getClosestAriaHidden(el);
@@ -33,14 +30,13 @@ const checkingInteractionInHidden = ({ el }) => t => {
33
30
  message: t('It may be focusable in spite of it has the ancestor that has aria-hidden=true'),
34
31
  };
35
32
  };
36
- exports.checkingInteractionInHidden = checkingInteractionInHidden;
37
33
  function getClosestAriaHidden(
38
34
  // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
39
35
  el) {
40
36
  let current = el;
41
37
  while (current) {
42
38
  const ariaHidden = current.getAttributeNode('aria-hidden');
43
- if ((ariaHidden === null || ariaHidden === void 0 ? void 0 : ariaHidden.value) === 'true') {
39
+ if (ariaHidden?.value === 'true') {
44
40
  return ariaHidden;
45
41
  }
46
42
  current = current.parentElement;
@@ -1,4 +1,4 @@
1
- import type { Options } from '../types';
1
+ import type { Options } from '../types.js';
2
2
  import type { AttrChecker } from '@markuplint/ml-core';
3
3
  import type { ARIAProperty } from '@markuplint/ml-spec';
4
4
  export declare const checkingNoGlobalProp: AttrChecker<boolean, Options, {
@@ -1,14 +1,9 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkingNoGlobalProp = void 0;
4
- const checkingNoGlobalProp = ({ attr, propSpecs }) => t => {
5
- var _a, _b;
1
+ export const checkingNoGlobalProp = ({ attr, propSpecs }) => t => {
6
2
  const propSpec = propSpecs.find(prop => prop.name === attr.name);
7
3
  if (propSpec && !propSpec.isGlobal) {
8
4
  return {
9
5
  scope: attr,
10
- message: t('{0} is not {1}', t('the "{0*}" {1}', attr.name, `ARIA ${(_a = propSpec.type) !== null && _a !== void 0 ? _a : 'property'}`), `global ${(_b = propSpec.type) !== null && _b !== void 0 ? _b : 'property'}`),
6
+ message: t('{0} is not {1}', t('the "{0*}" {1}', attr.name, `ARIA ${propSpec.type ?? 'property'}`), `global ${propSpec.type ?? 'property'}`),
11
7
  };
12
8
  }
13
9
  };
14
- exports.checkingNoGlobalProp = checkingNoGlobalProp;
@@ -1,3 +1,3 @@
1
- import type { Options } from '../types';
1
+ import type { Options } from '../types.js';
2
2
  import type { AttrChecker } from '@markuplint/ml-core';
3
3
  export declare const checkingNonExistentRole: AttrChecker<boolean, Options>;
@@ -1,11 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkingNonExistentRole = void 0;
4
- const ml_spec_1 = require("@markuplint/ml-spec");
5
- const checkingNonExistentRole = ({ attr }) => t => {
6
- var _a;
7
- const { roles, graphicsRoles } = (0, ml_spec_1.ariaSpecs)(attr.ownerMLDocument.specs, attr.rule.options.version);
8
- const tokens = (_a = attr.tokenList) === null || _a === void 0 ? void 0 : _a.allTokens();
1
+ import { ariaSpecs } from '@markuplint/ml-spec';
2
+ export const checkingNonExistentRole = ({ attr }) => t => {
3
+ const { roles, graphicsRoles } = ariaSpecs(attr.ownerMLDocument.specs, attr.rule.options.version);
4
+ const tokens = attr.tokenList?.allTokens();
9
5
  if (!tokens) {
10
6
  return;
11
7
  }
@@ -25,4 +21,3 @@ const checkingNonExistentRole = ({ attr }) => t => {
25
21
  }
26
22
  }
27
23
  };
28
- exports.checkingNonExistentRole = checkingNonExistentRole;
@@ -1,3 +1,3 @@
1
- import type { Options } from '../types';
1
+ import type { Options } from '../types.js';
2
2
  import type { AttrChecker } from '@markuplint/ml-core';
3
3
  export declare const checkingPermittedRoles: AttrChecker<boolean, Options>;
@@ -1,18 +1,14 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkingPermittedRoles = void 0;
4
- const ml_spec_1 = require("@markuplint/ml-spec");
5
- const checkingPermittedRoles = ({ attr }) => t => {
6
- var _a;
1
+ import { getPermittedRoles } from '@markuplint/ml-spec';
2
+ export const checkingPermittedRoles = ({ attr }) => t => {
7
3
  const el = attr.ownerElement;
8
- const permittedRoles = (0, ml_spec_1.getPermittedRoles)(el, el.rule.options.version, attr.ownerMLDocument.specs);
4
+ const permittedRoles = getPermittedRoles(el, el.rule.options.version, attr.ownerMLDocument.specs);
9
5
  if (permittedRoles.length === 0) {
10
6
  return {
11
7
  scope: attr,
12
8
  message: t('{0} according to {1}', t('Cannot overwrite {0}', t('{0} of {1}', t('the {0}', 'role'), t('the "{0*}" {1}', el.localName, 'element'))), 'ARIA in HTML specification'),
13
9
  };
14
10
  }
15
- const tokens = (_a = attr.tokenList) === null || _a === void 0 ? void 0 : _a.allTokens();
11
+ const tokens = attr.tokenList?.allTokens();
16
12
  if (!tokens) {
17
13
  return;
18
14
  }
@@ -25,4 +21,3 @@ const checkingPermittedRoles = ({ attr }) => t => {
25
21
  }
26
22
  }
27
23
  };
28
- exports.checkingPermittedRoles = checkingPermittedRoles;
@@ -1,4 +1,4 @@
1
- import type { Options } from '../types';
1
+ import type { Options } from '../types.js';
2
2
  import type { ElementChecker } from '@markuplint/ml-core';
3
3
  /**
4
4
  * Presentational Children
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkingPresentationalChildren = void 0;
4
- const ml_spec_1 = require("@markuplint/ml-spec");
1
+ import { getComputedRole } from '@markuplint/ml-spec';
5
2
  /**
6
3
  * Presentational Children
7
4
  *
@@ -28,7 +25,7 @@ const ml_spec_1 = require("@markuplint/ml-spec");
28
25
  * > may still be used in the name and description computation
29
26
  * > even when not included in the accessibility tree.
30
27
  */
31
- const checkingPresentationalChildren = ({ el }) => t => {
28
+ export const checkingPresentationalChildren = ({ el }) => t => {
32
29
  const ancestor = getAncestorHasPresentationalChildren(el);
33
30
  if (!ancestor) {
34
31
  return;
@@ -45,15 +42,13 @@ const checkingPresentationalChildren = ({ el }) => t => {
45
42
  message: t('it may be ineffective because {0}', t("it has {0} as an ancestor that doesn't expose its descendants to the accessibility tree", t('the "{0*}" {1}', ancestor.role.name, 'role'))),
46
43
  };
47
44
  };
48
- exports.checkingPresentationalChildren = checkingPresentationalChildren;
49
45
  function getAncestorHasPresentationalChildren(
50
46
  // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
51
47
  el) {
52
- var _a;
53
48
  let current = el.parentElement;
54
49
  while (current) {
55
- const computed = (0, ml_spec_1.getComputedRole)(el.ownerMLDocument.specs, current, el.rule.options.version);
56
- if ((_a = computed.role) === null || _a === void 0 ? void 0 : _a.childrenPresentational) {
50
+ const computed = getComputedRole(el.ownerMLDocument.specs, current, el.rule.options.version);
51
+ if (computed.role?.childrenPresentational) {
57
52
  return computed;
58
53
  }
59
54
  current = current.parentElement;
@@ -1,4 +1,4 @@
1
- import type { Options } from '../types';
1
+ import type { Options } from '../types.js';
2
2
  import type { ElementChecker } from '@markuplint/ml-core';
3
3
  import type { ARIARole } from '@markuplint/ml-spec';
4
4
  /**
@@ -1,13 +1,10 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkingRequiredOwnedElements = void 0;
4
- const ml_spec_1 = require("@markuplint/ml-spec");
1
+ import { getComputedRole, isRequiredOwnedElement } from '@markuplint/ml-spec';
5
2
  /**
6
3
  * Required Owned Elements
7
4
  *
8
5
  * @see https://w3c.github.io/aria/#mustContain
9
6
  */
10
- const checkingRequiredOwnedElements = ({ el, role }) => t => {
7
+ export const checkingRequiredOwnedElements = ({ el, role }) => t => {
11
8
  if (!role) {
12
9
  return;
13
10
  }
@@ -33,8 +30,8 @@ const checkingRequiredOwnedElements = ({ el, role }) => t => {
33
30
  if (child.matches('[aria-busy="true" i]')) {
34
31
  return [child, 'BUSY'];
35
32
  }
36
- const computedChild = (0, ml_spec_1.getComputedRole)(child.ownerMLDocument.specs, child, child.rule.options.version);
37
- if (role.requiredOwnedElements.some(ownedRole => (0, ml_spec_1.isRequiredOwnedElement)(computedChild.el, computedChild.role, ownedRole, child.ownerMLDocument.specs, child.rule.options.version))) {
33
+ const computedChild = getComputedRole(child.ownerMLDocument.specs, child, child.rule.options.version);
34
+ if (role.requiredOwnedElements.some(ownedRole => isRequiredOwnedElement(computedChild.el, computedChild.role, ownedRole, child.ownerMLDocument.specs, child.rule.options.version))) {
38
35
  return [child, 'REQUIRED'];
39
36
  }
40
37
  return [child, 'OTHER'];
@@ -90,7 +87,6 @@ const checkingRequiredOwnedElements = ({ el, role }) => t => {
90
87
  : t('the {0}', 'roles') + `: ${t(role.requiredOwnedElements)}`),
91
88
  };
92
89
  };
93
- exports.checkingRequiredOwnedElements = checkingRequiredOwnedElements;
94
90
  function mayBeBeforeCreated(
95
91
  // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
96
92
  el) {
@@ -1,4 +1,4 @@
1
- import type { Options } from '../types';
1
+ import type { Options } from '../types.js';
2
2
  import type { ElementChecker } from '@markuplint/ml-core';
3
3
  import type { ARIAProperty, ARIARole } from '@markuplint/ml-spec';
4
4
  export declare const checkingRequiredProp: ElementChecker<boolean, Options, {
@@ -1,8 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkingRequiredProp = void 0;
4
- const checkingRequiredProp = ({ el, role, propSpecs }) => t => {
5
- var _a;
1
+ export const checkingRequiredProp = ({ el, role, propSpecs }) => t => {
6
2
  if (!role) {
7
3
  return;
8
4
  }
@@ -19,9 +15,8 @@ const checkingRequiredProp = ({ el, role, propSpecs }) => t => {
19
15
  const propSpec = propSpecs.find(p => p.name === requiredProp);
20
16
  return {
21
17
  scope: el,
22
- message: t('{0:c} on {1}', t('Require {0}', t('the "{0*}" {1}', requiredProp, `ARIA ${(_a = propSpec === null || propSpec === void 0 ? void 0 : propSpec.type) !== null && _a !== void 0 ? _a : 'property'}`)), t('the "{0*}" {1}', role.name, 'role')),
18
+ message: t('{0:c} on {1}', t('Require {0}', t('the "{0*}" {1}', requiredProp, `ARIA ${propSpec?.type ?? 'property'}`)), t('the "{0*}" {1}', role.name, 'role')),
23
19
  };
24
20
  }
25
21
  }
26
22
  };
27
- exports.checkingRequiredProp = checkingRequiredProp;
@@ -1,4 +1,4 @@
1
- import type { Options } from '../types';
1
+ import type { Options } from '../types.js';
2
2
  import type { AttrChecker } from '@markuplint/ml-core';
3
3
  import type { ARIAProperty, ARIARole } from '@markuplint/ml-spec';
4
4
  export declare const checkingValue: AttrChecker<boolean, Options, {
@@ -1,25 +1,20 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkAriaValue = exports.checkingValue = void 0;
4
- const checkingValue = ({ attr, role, propSpecs, booleanish }) => t => {
5
- var _a;
1
+ export const checkingValue = ({ attr, role, propSpecs, booleanish }) => t => {
6
2
  if (attr.isDynamicValue) {
7
3
  return;
8
4
  }
9
5
  const propSpec = propSpecs.find(p => p.name === attr.name);
10
- const result = checkAria(propSpec, attr.value, role === null || role === void 0 ? void 0 : role.name, booleanish);
6
+ const result = checkAria(propSpec, attr.value, role?.name, booleanish);
11
7
  if (result.isValid) {
12
8
  return;
13
9
  }
14
10
  return {
15
11
  scope: attr,
16
- message: t('{0:c} on {1}', t('{0} is {1:c}', t('the "{0}"', attr.value), 'disallowed'), t('the "{0*}" {1}', attr.name, `ARIA ${(_a = propSpec === null || propSpec === void 0 ? void 0 : propSpec.type) !== null && _a !== void 0 ? _a : 'property'}`)) +
12
+ message: t('{0:c} on {1}', t('{0} is {1:c}', t('the "{0}"', attr.value), 'disallowed'), t('the "{0*}" {1}', attr.name, `ARIA ${propSpec?.type ?? 'property'}`)) +
17
13
  ('enum' in result && result.enum.length > 0
18
14
  ? t('. ') + t('Allowed values are: {0}', t(result.enum))
19
15
  : ''),
20
16
  };
21
17
  };
22
- exports.checkingValue = checkingValue;
23
18
  function checkAria(propSpec, currentValue, role, booleanish) {
24
19
  if (!propSpec) {
25
20
  return {
@@ -48,7 +43,7 @@ function checkAria(propSpec, currentValue, role, booleanish) {
48
43
  *
49
44
  * @see https://www.w3.org/TR/wai-aria-1.2/#propcharacteristic_value
50
45
  */
51
- function checkAriaValue(type, value, tokenEnum, booleanish) {
46
+ export function checkAriaValue(type, value, tokenEnum, booleanish) {
52
47
  switch (type) {
53
48
  case 'token': {
54
49
  return tokenEnum.includes(value);
@@ -90,4 +85,3 @@ function checkAriaValue(type, value, tokenEnum, booleanish) {
90
85
  // For skipping checking
91
86
  return true;
92
87
  }
93
- exports.checkAriaValue = checkAriaValue;
@@ -1,3 +1,3 @@
1
- import type { Options } from './types';
1
+ import type { Options } from './types.js';
2
2
  declare const _default: Readonly<import("@markuplint/ml-core").RuleSeed<boolean, Options>>;
3
3
  export default _default;