@markuplint/ml-core 3.0.0-alpha.66 → 3.0.0-dev.176

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 (124) hide show
  1. package/README.md +12 -3
  2. package/lib/configs.browser.d.ts +2 -0
  3. package/lib/configs.browser.js +12 -0
  4. package/lib/configs.js +4 -1
  5. package/lib/index.d.ts +11 -1
  6. package/lib/ml-core.d.ts +24 -13
  7. package/lib/ml-core.js +16 -10
  8. package/lib/ml-dom/helper/accname.d.ts +2 -1
  9. package/lib/ml-dom/helper/accname.js +62 -2
  10. package/lib/ml-dom/helper/create-node.d.ts +7 -3
  11. package/lib/ml-dom/helper/create-node.js +4 -2
  12. package/lib/ml-dom/helper/debug.js +10 -5
  13. package/lib/ml-dom/helper/getIndent.d.ts +7 -7
  14. package/lib/ml-dom/helper/getIndent.js +18 -12
  15. package/lib/ml-dom/helper/walkers.d.ts +15 -5
  16. package/lib/ml-dom/helper/walkers.js +22 -16
  17. package/lib/ml-dom/index.d.ts +1 -0
  18. package/lib/ml-dom/manipulations/child-node-methods.d.ts +20 -7
  19. package/lib/ml-dom/manipulations/child-node-methods.js +24 -6
  20. package/lib/ml-dom/manipulations/get-children.d.ts +4 -2
  21. package/lib/ml-dom/manipulations/get-children.js +3 -1
  22. package/lib/ml-dom/node/attr.d.ts +94 -91
  23. package/lib/ml-dom/node/attr.js +26 -16
  24. package/lib/ml-dom/node/block.d.ts +36 -32
  25. package/lib/ml-dom/node/block.js +14 -4
  26. package/lib/ml-dom/node/character-data.d.ts +61 -54
  27. package/lib/ml-dom/node/character-data.js +9 -3
  28. package/lib/ml-dom/node/child-node.d.ts +10 -3
  29. package/lib/ml-dom/node/child-node.js +3 -1
  30. package/lib/ml-dom/node/comment.d.ts +16 -13
  31. package/lib/ml-dom/node/document-fragment.d.ts +24 -21
  32. package/lib/ml-dom/node/document-type.d.ts +35 -32
  33. package/lib/ml-dom/node/document-type.js +14 -4
  34. package/lib/ml-dom/node/document.d.ts +1608 -1545
  35. package/lib/ml-dom/node/document.js +125 -33
  36. package/lib/ml-dom/node/dom-token-list.d.ts +27 -27
  37. package/lib/ml-dom/node/dom-token-list.js +15 -13
  38. package/lib/ml-dom/node/element.d.ts +1906 -1817
  39. package/lib/ml-dom/node/element.js +345 -75
  40. package/lib/ml-dom/node/named-node-map.d.ts +45 -40
  41. package/lib/ml-dom/node/named-node-map.js +13 -5
  42. package/lib/ml-dom/node/node-list.d.ts +10 -4
  43. package/lib/ml-dom/node/node-list.js +25 -5
  44. package/lib/ml-dom/node/node-store.d.ts +10 -5
  45. package/lib/ml-dom/node/node-store.js +19 -1
  46. package/lib/ml-dom/node/node.d.ts +494 -467
  47. package/lib/ml-dom/node/node.js +89 -47
  48. package/lib/ml-dom/node/parent-node.d.ts +68 -59
  49. package/lib/ml-dom/node/parent-node.js +15 -6
  50. package/lib/ml-dom/node/rule-mapper.d.ts +9 -9
  51. package/lib/ml-dom/node/rule-mapper.js +11 -3
  52. package/lib/ml-dom/node/text.d.ts +50 -47
  53. package/lib/ml-dom/node/types.d.ts +94 -16
  54. package/lib/ml-dom/node/unexpected-call-error.d.ts +1 -2
  55. package/lib/ml-dom/token/token.d.ts +44 -44
  56. package/lib/ml-rule/create-rule.d.ts +4 -2
  57. package/lib/ml-rule/create-test-rule.d.ts +6 -4
  58. package/lib/ml-rule/ml-rule-context.d.ts +58 -49
  59. package/lib/ml-rule/ml-rule-context.js +23 -4
  60. package/lib/ml-rule/ml-rule.d.ts +36 -26
  61. package/lib/ml-rule/ml-rule.js +39 -34
  62. package/lib/ml-rule/types.d.ts +35 -17
  63. package/lib/plugin/plugin.d.ts +3 -1
  64. package/lib/plugin/types.d.ts +9 -9
  65. package/lib/ruleset/index.d.ts +4 -4
  66. package/lib/ruleset/index.js +4 -4
  67. package/lib/test/index.d.ts +21 -8
  68. package/lib/test/index.js +6 -4
  69. package/lib/types.d.ts +12 -10
  70. package/lib/utils/get-location-from-chars.d.ts +9 -4
  71. package/package.json +21 -15
  72. package/test/ml-dom/helper/accname.spec.js +85 -0
  73. package/test/ml-dom/helper/create-node.spec.js +18 -0
  74. package/test/ml-dom/index.spec.js +680 -0
  75. package/lib/ml-dom/document.d.ts +0 -94
  76. package/lib/ml-dom/document.js +0 -273
  77. package/lib/ml-dom/helper/index.d.ts +0 -4
  78. package/lib/ml-dom/helper/index.js +0 -12
  79. package/lib/ml-dom/helper/mapped-nodes.d.ts +0 -52
  80. package/lib/ml-dom/helper/mapped-nodes.js +0 -2
  81. package/lib/ml-dom/helper/match-selector.d.ts +0 -20
  82. package/lib/ml-dom/helper/match-selector.js +0 -233
  83. package/lib/ml-dom/helper/node-store.d.ts +0 -12
  84. package/lib/ml-dom/helper/node-store.js +0 -28
  85. package/lib/ml-dom/helper/selector.d.ts +0 -11
  86. package/lib/ml-dom/helper/selector.js +0 -549
  87. package/lib/ml-dom/rule-mapper.d.ts +0 -16
  88. package/lib/ml-dom/rule-mapper.js +0 -57
  89. package/lib/ml-dom/tokens/abstract-element.d.ts +0 -54
  90. package/lib/ml-dom/tokens/abstract-element.js +0 -249
  91. package/lib/ml-dom/tokens/attribute.d.ts +0 -42
  92. package/lib/ml-dom/tokens/attribute.js +0 -85
  93. package/lib/ml-dom/tokens/comment.d.ts +0 -12
  94. package/lib/ml-dom/tokens/comment.js +0 -15
  95. package/lib/ml-dom/tokens/doctype.d.ts +0 -18
  96. package/lib/ml-dom/tokens/doctype.js +0 -32
  97. package/lib/ml-dom/tokens/element-close-tag.d.ts +0 -27
  98. package/lib/ml-dom/tokens/element-close-tag.js +0 -45
  99. package/lib/ml-dom/tokens/element.d.ts +0 -26
  100. package/lib/ml-dom/tokens/element.js +0 -66
  101. package/lib/ml-dom/tokens/index.d.ts +0 -10
  102. package/lib/ml-dom/tokens/index.js +0 -26
  103. package/lib/ml-dom/tokens/node.d.ts +0 -46
  104. package/lib/ml-dom/tokens/node.js +0 -126
  105. package/lib/ml-dom/tokens/omitted-element.d.ts +0 -13
  106. package/lib/ml-dom/tokens/omitted-element.js +0 -12
  107. package/lib/ml-dom/tokens/preprocessor-specific-attribute.d.ts +0 -24
  108. package/lib/ml-dom/tokens/preprocessor-specific-attribute.js +0 -37
  109. package/lib/ml-dom/tokens/preprocessor-specific-block.d.ts +0 -14
  110. package/lib/ml-dom/tokens/preprocessor-specific-block.js +0 -16
  111. package/lib/ml-dom/tokens/text.d.ts +0 -19
  112. package/lib/ml-dom/tokens/text.js +0 -26
  113. package/lib/ml-dom/tokens/token.d.ts +0 -16
  114. package/lib/ml-dom/tokens/token.js +0 -55
  115. package/lib/ml-dom/types.d.ts +0 -49
  116. package/lib/ml-dom/types.js +0 -2
  117. package/lib/selector/is-pure-html-element.d.ts +0 -1
  118. package/lib/selector/is-pure-html-element.js +0 -7
  119. package/lib/selector/match-selector.d.ts +0 -14
  120. package/lib/selector/match-selector.js +0 -230
  121. package/lib/selector/selector.d.ts +0 -9
  122. package/lib/selector/selector.js +0 -561
  123. package/tsconfig.test.json +0 -3
  124. package/tsconfig.tsbuildinfo +0 -1
@@ -23,22 +23,25 @@ class MLDocument extends parent_node_1.MLParentNode {
23
23
  * @param ast node list of markuplint AST
24
24
  * @param ruleset ruleset object
25
25
  */
26
- constructor(ast, ruleset, schemas, options) {
27
- var _a;
26
+ constructor(
27
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
28
+ ast, ruleset, schemas, options) {
29
+ var _a, _b;
28
30
  // @ts-ignore
29
31
  super(ast, null);
30
32
  /**
31
33
  *
32
34
  */
33
- _MLDocument_filename.set(this, void 0);
34
- _MLDocument_tokenList.set(this, null);
35
+ this.currentRule = null;
35
36
  /**
36
37
  *
37
38
  */
38
- this.currentRule = null;
39
+ _MLDocument_filename.set(this, void 0);
40
+ _MLDocument_tokenList.set(this, null);
39
41
  this.isFragment = ast.isFragment;
40
42
  this.specs = (0, ml_spec_1.schemaToSpec)(schemas);
41
- this.endTag = (_a = options === null || options === void 0 ? void 0 : options.endTag) !== null && _a !== void 0 ? _a : 'omittable';
43
+ this.booleanish = (_a = options === null || options === void 0 ? void 0 : options.booleanish) !== null && _a !== void 0 ? _a : false;
44
+ this.endTag = (_b = options === null || options === void 0 ? void 0 : options.endTag) !== null && _b !== void 0 ? _b : 'omittable';
42
45
  tslib_1.__classPrivateFieldSet(this, _MLDocument_filename, options === null || options === void 0 ? void 0 : options.filename, "f");
43
46
  // console.log(ast.nodeList.map((n, i) => `${i}: ${n.uuid} "${n.raw.trim()}"(${n.type})`));
44
47
  this.nodeList = Object.freeze(ast.nodeList
@@ -49,8 +52,18 @@ class MLDocument extends parent_node_1.MLParentNode {
49
52
  return (0, create_node_1.createNode)(astNode, this);
50
53
  })
51
54
  .filter((n) => !!n));
55
+ this._pretending(options === null || options === void 0 ? void 0 : options.pretenders);
52
56
  this._ruleMapping(ruleset);
53
57
  }
58
+ /**
59
+ * **IT THROWS AN ERROR WHEN CALLING THIS.**
60
+ *
61
+ * @unsupported
62
+ * @implements DOM API: `Document`
63
+ */
64
+ get URL() {
65
+ throw new unexpected_call_error_1.default('Not supported "URL" property');
66
+ }
54
67
  /**
55
68
  * **IT THROWS AN ERROR WHEN CALLING THIS.**
56
69
  *
@@ -60,6 +73,15 @@ class MLDocument extends parent_node_1.MLParentNode {
60
73
  get activeElement() {
61
74
  throw new unexpected_call_error_1.default('Not supported "activeElement" property');
62
75
  }
76
+ /**
77
+ * **IT THROWS AN ERROR WHEN CALLING THIS.**
78
+ *
79
+ * @unsupported
80
+ * @implements DOM API: `Document`
81
+ */
82
+ get adoptedStyleSheets() {
83
+ throw new unexpected_call_error_1.default('Not supported "adoptedStyleSheets" property');
84
+ }
63
85
  /**
64
86
  * **IT THROWS AN ERROR WHEN CALLING THIS.**
65
87
  *
@@ -184,7 +206,9 @@ class MLDocument extends parent_node_1.MLParentNode {
184
206
  */
185
207
  get defaultView() {
186
208
  return {
187
- getComputedStyle(_el) {
209
+ getComputedStyle(
210
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
211
+ _el) {
188
212
  return {
189
213
  getPropertyValue(_propName) {
190
214
  return {};
@@ -320,7 +344,7 @@ class MLDocument extends parent_node_1.MLParentNode {
320
344
  * @implements DOM API: `Document`
321
345
  */
322
346
  get fullscreenEnabled() {
323
- throw new unexpected_call_error_1.default('Not supported "UfullscreenEnabledRL" property');
347
+ throw new unexpected_call_error_1.default('Not supported "FullscreenEnabledURL" property');
324
348
  }
325
349
  /**
326
350
  * **IT THROWS AN ERROR WHEN CALLING THIS.**
@@ -479,6 +503,16 @@ class MLDocument extends parent_node_1.MLParentNode {
479
503
  get onauxclick() {
480
504
  throw new unexpected_call_error_1.default('Not supported "onauxclick" property');
481
505
  }
506
+ /**
507
+ * **IT THROWS AN ERROR WHEN CALLING THIS.**
508
+ *
509
+ * @deprecated
510
+ * @unsupported
511
+ * @implements DOM API: `Document`
512
+ */
513
+ get onbeforeinput() {
514
+ throw new unexpected_call_error_1.default('Not supported "onbeforeinput" property');
515
+ }
482
516
  /**
483
517
  * **IT THROWS AN ERROR WHEN CALLING THIS.**
484
518
  *
@@ -489,6 +523,16 @@ class MLDocument extends parent_node_1.MLParentNode {
489
523
  get onblur() {
490
524
  throw new unexpected_call_error_1.default('Not supported "onblur" property');
491
525
  }
526
+ /**
527
+ * **IT THROWS AN ERROR WHEN CALLING THIS.**
528
+ *
529
+ * @deprecated
530
+ * @unsupported
531
+ * @implements DOM API: `Document`
532
+ */
533
+ get oncancel() {
534
+ throw new unexpected_call_error_1.default('Not supported "oncanplay" property');
535
+ }
492
536
  /**
493
537
  * **IT THROWS AN ERROR WHEN CALLING THIS.**
494
538
  *
@@ -1481,15 +1525,6 @@ class MLDocument extends parent_node_1.MLParentNode {
1481
1525
  get title() {
1482
1526
  throw new unexpected_call_error_1.default('Not supported "title" property');
1483
1527
  }
1484
- /**
1485
- * **IT THROWS AN ERROR WHEN CALLING THIS.**
1486
- *
1487
- * @unsupported
1488
- * @implements DOM API: `Document`
1489
- */
1490
- get URL() {
1491
- throw new unexpected_call_error_1.default('Not supported "URL" property');
1492
- }
1493
1528
  /**
1494
1529
  * **IT THROWS AN ERROR WHEN CALLING THIS.**
1495
1530
  *
@@ -1634,7 +1669,9 @@ class MLDocument extends parent_node_1.MLParentNode {
1634
1669
  * @unsupported
1635
1670
  * @implements DOM API: `Document`
1636
1671
  */
1637
- createExpression(expression, resolver) {
1672
+ createExpression(expression,
1673
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
1674
+ resolver) {
1638
1675
  throw new unexpected_call_error_1.default('Not supported "createExpression" method');
1639
1676
  }
1640
1677
  /**
@@ -1643,8 +1680,10 @@ class MLDocument extends parent_node_1.MLParentNode {
1643
1680
  * @unsupported
1644
1681
  * @implements DOM API: `Document`
1645
1682
  */
1646
- createNodeIterator(root, whatToShow, filter) {
1647
- throw new unexpected_call_error_1.default('Not supported "createNodeIterator" method');
1683
+ createNSResolver(
1684
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
1685
+ nodeResolver) {
1686
+ throw new unexpected_call_error_1.default('Not supported "createNSResolver" method');
1648
1687
  }
1649
1688
  /**
1650
1689
  * **IT THROWS AN ERROR WHEN CALLING THIS.**
@@ -1652,8 +1691,12 @@ class MLDocument extends parent_node_1.MLParentNode {
1652
1691
  * @unsupported
1653
1692
  * @implements DOM API: `Document`
1654
1693
  */
1655
- createNSResolver(nodeResolver) {
1656
- throw new unexpected_call_error_1.default('Not supported "createNSResolver" method');
1694
+ createNodeIterator(
1695
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
1696
+ root, whatToShow,
1697
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
1698
+ filter) {
1699
+ throw new unexpected_call_error_1.default('Not supported "createNodeIterator" method');
1657
1700
  }
1658
1701
  /**
1659
1702
  * **IT THROWS AN ERROR WHEN CALLING THIS.**
@@ -1688,7 +1731,11 @@ class MLDocument extends parent_node_1.MLParentNode {
1688
1731
  * @unsupported
1689
1732
  * @implements DOM API: `Document`
1690
1733
  */
1691
- createTreeWalker(root, whatToShow, filter) {
1734
+ createTreeWalker(
1735
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
1736
+ root, whatToShow,
1737
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
1738
+ filter) {
1692
1739
  throw new unexpected_call_error_1.default('Not supported "createTreeWalker" method');
1693
1740
  }
1694
1741
  /**
@@ -1721,7 +1768,13 @@ class MLDocument extends parent_node_1.MLParentNode {
1721
1768
  * @unsupported
1722
1769
  * @implements DOM API: `Document`
1723
1770
  */
1724
- evaluate(expression, contextNode, resolver, type, result) {
1771
+ evaluate(expression,
1772
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
1773
+ contextNode,
1774
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
1775
+ resolver, type,
1776
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
1777
+ result) {
1725
1778
  throw new unexpected_call_error_1.default('Not supported "evaluate" method');
1726
1779
  }
1727
1780
  /**
@@ -1945,6 +1998,17 @@ class MLDocument extends parent_node_1.MLParentNode {
1945
1998
  requestStorageAccess() {
1946
1999
  throw new unexpected_call_error_1.default('Not supported "requestStorageAccess" method');
1947
2000
  }
2001
+ /**
2002
+ * @implements `@markuplint/ml-core` API: `MLDocument`
2003
+ */
2004
+ searchNodeByLocation(line, col) {
2005
+ for (const node of this.nodeList) {
2006
+ if (node.startLine <= line && line <= node.endLine && node.startCol <= col && col <= node.endCol) {
2007
+ return node;
2008
+ }
2009
+ }
2010
+ return null;
2011
+ }
1948
2012
  /**
1949
2013
  * @implements `@markuplint/ml-core` API: `MLDocument`
1950
2014
  */
@@ -2001,6 +2065,19 @@ class MLDocument extends parent_node_1.MLParentNode {
2001
2065
  writeln(...text) {
2002
2066
  throw new unexpected_call_error_1.default('Not supported "writeln" method');
2003
2067
  }
2068
+ _pretending(pretenders) {
2069
+ if (docLog.enabled) {
2070
+ docLog('Pretending: %O', pretenders);
2071
+ }
2072
+ if (!pretenders) {
2073
+ return;
2074
+ }
2075
+ for (const node of this.nodeList) {
2076
+ if (node.is(node.ELEMENT_NODE)) {
2077
+ node.pretending(pretenders);
2078
+ }
2079
+ }
2080
+ }
2004
2081
  _ruleMapping(ruleset) {
2005
2082
  if (docLog.enabled) {
2006
2083
  docLog('Rule Mapping: %O', Object.keys(ruleset.rules));
@@ -2009,6 +2086,9 @@ class MLDocument extends parent_node_1.MLParentNode {
2009
2086
  // global rules to #document
2010
2087
  Object.keys(ruleset.rules).forEach(ruleName => {
2011
2088
  const rule = ruleset.rules[ruleName];
2089
+ if (rule == null) {
2090
+ return;
2091
+ }
2012
2092
  ruleMapper.set(this, ruleName, {
2013
2093
  from: 'rules',
2014
2094
  specificity: [0, 0, 0],
@@ -2023,6 +2103,9 @@ class MLDocument extends parent_node_1.MLParentNode {
2023
2103
  // global rules to each element
2024
2104
  Object.keys(ruleset.rules).forEach(ruleName => {
2025
2105
  const rule = ruleset.rules[ruleName];
2106
+ if (rule == null) {
2107
+ return;
2108
+ }
2026
2109
  ruleMapper.set(node, ruleName, {
2027
2110
  from: 'rules',
2028
2111
  specificity: [0, 0, 0],
@@ -2035,13 +2118,14 @@ class MLDocument extends parent_node_1.MLParentNode {
2035
2118
  const selectorTarget = node.is(node.ELEMENT_NODE) ? node : null;
2036
2119
  // node specs and special rules for node by selector
2037
2120
  ruleset.nodeRules.forEach(nodeRule => {
2121
+ var _a, _b;
2038
2122
  if (!nodeRule.rules) {
2039
2123
  return;
2040
2124
  }
2041
2125
  if (!selectorTarget) {
2042
2126
  return;
2043
2127
  }
2044
- const selector = nodeRule.selector || nodeRule.regexSelector;
2128
+ const selector = (_a = nodeRule.selector) !== null && _a !== void 0 ? _a : nodeRule.regexSelector;
2045
2129
  const matches = (0, selector_1.matchSelector)(selectorTarget, selector);
2046
2130
  if (!matches.matched) {
2047
2131
  return;
@@ -2052,12 +2136,15 @@ class MLDocument extends parent_node_1.MLParentNode {
2052
2136
  const ruleList = Object.keys(nodeRule.rules);
2053
2137
  for (const ruleName of ruleList) {
2054
2138
  const rule = nodeRule.rules[ruleName];
2055
- const convertedRule = (0, ml_config_1.exchangeValueOnRule)(rule, matches.data || {});
2139
+ if (rule == null) {
2140
+ continue;
2141
+ }
2142
+ const convertedRule = (0, ml_config_1.exchangeValueOnRule)(rule, (_b = matches.data) !== null && _b !== void 0 ? _b : {});
2056
2143
  if (convertedRule === undefined) {
2057
2144
  continue;
2058
2145
  }
2059
2146
  const globalRule = ruleset.rules[ruleName];
2060
- const mergedRule = globalRule ? (0, ml_config_1.mergeRule)(globalRule, convertedRule) : convertedRule;
2147
+ const mergedRule = globalRule != null ? (0, ml_config_1.mergeRule)(globalRule, convertedRule) : convertedRule;
2061
2148
  ruleLog('↑ nodeRule (%s): %O', ruleName, mergedRule);
2062
2149
  ruleMapper.set(node, ruleName, {
2063
2150
  from: 'nodeRules',
@@ -2067,19 +2154,20 @@ class MLDocument extends parent_node_1.MLParentNode {
2067
2154
  }
2068
2155
  });
2069
2156
  // overwrite rule to child node
2070
- if (selectorTarget && ruleset.childNodeRules.length) {
2157
+ if (selectorTarget && ruleset.childNodeRules.length > 0) {
2071
2158
  const descendants = [];
2072
2159
  const children = Array.from(selectorTarget.childNodes);
2073
2160
  (0, walkers_1.syncWalk)(children, childNode => {
2074
2161
  descendants.push(childNode);
2075
2162
  });
2076
- ruleset.childNodeRules.forEach((nodeRule, i) => {
2163
+ ruleset.childNodeRules.forEach(nodeRule => {
2164
+ var _a;
2077
2165
  if (!nodeRule.rules) {
2078
2166
  return;
2079
2167
  }
2080
2168
  const nodeRuleRules = nodeRule.rules;
2081
- const selector = nodeRule.selector || nodeRule.regexSelector;
2082
- if (!selector) {
2169
+ const selector = (_a = nodeRule.selector) !== null && _a !== void 0 ? _a : nodeRule.regexSelector;
2170
+ if (selector == null) {
2083
2171
  return;
2084
2172
  }
2085
2173
  const matches = (0, selector_1.matchSelector)(selectorTarget, selector);
@@ -2091,13 +2179,17 @@ class MLDocument extends parent_node_1.MLParentNode {
2091
2179
  }
2092
2180
  const targetDescendants = nodeRule.inheritance ? descendants : children;
2093
2181
  Object.keys(nodeRuleRules).forEach(ruleName => {
2182
+ var _a;
2094
2183
  const rule = nodeRuleRules[ruleName];
2095
- const convertedRule = (0, ml_config_1.exchangeValueOnRule)(rule, matches.data || {});
2184
+ if (rule == null) {
2185
+ return;
2186
+ }
2187
+ const convertedRule = (0, ml_config_1.exchangeValueOnRule)(rule, (_a = matches.data) !== null && _a !== void 0 ? _a : {});
2096
2188
  if (convertedRule === undefined) {
2097
2189
  return;
2098
2190
  }
2099
2191
  const globalRule = ruleset.rules[ruleName];
2100
- const mergedRule = globalRule ? (0, ml_config_1.mergeRule)(globalRule, convertedRule) : convertedRule;
2192
+ const mergedRule = globalRule != null ? (0, ml_config_1.mergeRule)(globalRule, convertedRule) : convertedRule;
2101
2193
  ruleLog('↑ childNodeRule (%s): %O', ruleName, mergedRule);
2102
2194
  targetDescendants.forEach(descendant => {
2103
2195
  ruleMapper.set(descendant, ruleName, {
@@ -1,33 +1,33 @@
1
1
  import type { MLAttr } from './attr';
2
2
  import type { RuleInfo } from '@markuplint/ml-config';
3
- declare type Scope = {
4
- raw: string;
5
- startOffset: number;
6
- startLine: number;
7
- startCol: number;
8
- rule: RuleInfo<any, any>;
3
+ type Scope = {
4
+ raw: string;
5
+ startOffset: number;
6
+ startLine: number;
7
+ startCol: number;
8
+ rule: RuleInfo<any, any>;
9
9
  };
10
10
  export declare class MLDomTokenList extends Array<string> implements DOMTokenList {
11
- #private;
12
- get value(): string;
13
- constructor(tokens: string, ownerAttrs: MLAttr<any, any>[]);
14
- add(...tokens: string[]): void;
15
- /**
16
- * @implements `@markuplint/ml-core` API: `MLDomTokenList`
17
- */
18
- allTokens(): Scope[];
19
- contains(token: string): boolean;
20
- forEach(callbackfn: (value: string, index: number, parent: any) => void, thisArg?: any): void;
21
- item(index: number): string | null;
22
- /**
23
- * @implements `@markuplint/ml-core` API: `MLDomTokenList`
24
- */
25
- pick(token: string): Scope | null;
26
- remove(...tokens: string[]): void;
27
- replace(token: string, newToken: string): boolean;
28
- supports(token: string): boolean;
29
- toggle(token: string, force?: boolean): boolean;
30
- toString(): string;
31
- private _pick;
11
+ #private;
12
+ constructor(tokens: string, ownerAttrs: MLAttr<any, any>[]);
13
+ get value(): string;
14
+ add(...tokens: readonly string[]): void;
15
+ /**
16
+ * @implements `@markuplint/ml-core` API: `MLDomTokenList`
17
+ */
18
+ allTokens(): Scope[];
19
+ contains(token: string): boolean;
20
+ forEach(callbackfn: (value: string, index: number, parent: any) => void, thisArg?: any): void;
21
+ item(index: number): string | null;
22
+ /**
23
+ * @implements `@markuplint/ml-core` API: `MLDomTokenList`
24
+ */
25
+ pick(token: string): Scope | null;
26
+ remove(...tokens: readonly string[]): void;
27
+ replace(token: string, newToken: string): boolean;
28
+ supports(token: string): boolean;
29
+ toString(): string;
30
+ toggle(token: string, force?: boolean): boolean;
31
+ private _pick;
32
32
  }
33
33
  export {};
@@ -1,24 +1,26 @@
1
1
  "use strict";
2
- var _MLDomTokenList_set, _MLDomTokenList_origin, _MLDomTokenList_ownerAttrs;
2
+ var _MLDomTokenList_origin, _MLDomTokenList_ownerAttrs, _MLDomTokenList_set;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.MLDomTokenList = void 0;
5
5
  const tslib_1 = require("tslib");
6
6
  const parser_utils_1 = require("@markuplint/parser-utils");
7
7
  const unexpected_call_error_1 = tslib_1.__importDefault(require("./unexpected-call-error"));
8
8
  class MLDomTokenList extends Array {
9
- constructor(tokens, ownerAttrs) {
9
+ constructor(tokens,
10
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
11
+ ownerAttrs) {
10
12
  const list = tokens
11
13
  .split(/\s+/)
12
14
  .map(t => t.trim())
13
15
  .filter(t => !!t);
14
16
  super(...list);
15
- _MLDomTokenList_set.set(this, void 0);
16
17
  _MLDomTokenList_origin.set(this, void 0);
17
18
  /**
18
19
  * In some cases, an author specifies multiple attributes or directives.
19
20
  * The reference is not always one.
20
21
  */
21
22
  _MLDomTokenList_ownerAttrs.set(this, void 0);
23
+ _MLDomTokenList_set.set(this, void 0);
22
24
  tslib_1.__classPrivateFieldSet(this, _MLDomTokenList_origin, tokens, "f");
23
25
  tslib_1.__classPrivateFieldSet(this, _MLDomTokenList_ownerAttrs, ownerAttrs, "f");
24
26
  tslib_1.__classPrivateFieldSet(this, _MLDomTokenList_set, new Set(list), "f");
@@ -43,7 +45,7 @@ class MLDomTokenList extends Array {
43
45
  let offset = 0;
44
46
  const tokens = Array.from(this);
45
47
  const locs = [];
46
- while (tokens.length) {
48
+ while (tokens.length > 0) {
47
49
  const token = tokens.shift();
48
50
  if (!token) {
49
51
  break;
@@ -99,15 +101,15 @@ class MLDomTokenList extends Array {
99
101
  supports(token) {
100
102
  throw new unexpected_call_error_1.default('Not supported "supports" method');
101
103
  }
102
- toggle(token, force) {
103
- throw new unexpected_call_error_1.default('Not supported "toggle" method');
104
- }
105
104
  toString() {
106
105
  return this.value;
107
106
  }
107
+ toggle(token, force) {
108
+ throw new unexpected_call_error_1.default('Not supported "toggle" method');
109
+ }
108
110
  _pick(token, _offset = 0) {
109
- var _a, _b, _c, _d, _e, _f;
110
- token = token.trim().split(/\s+/g)[0];
111
+ var _a, _b, _c, _d, _e, _f, _g;
112
+ token = (_a = token.trim().split(/\s+/g)[0]) !== null && _a !== void 0 ? _a : '';
111
113
  if (!token) {
112
114
  return null;
113
115
  }
@@ -123,9 +125,9 @@ class MLDomTokenList extends Array {
123
125
  const startCol = (0, parser_utils_1.getCol)(tslib_1.__classPrivateFieldGet(this, _MLDomTokenList_origin, "f"), startOffset);
124
126
  return {
125
127
  raw: token,
126
- startOffset: ((_b = (_a = ownerAttr.valueNode) === null || _a === void 0 ? void 0 : _a.startOffset) !== null && _b !== void 0 ? _b : 0) + startOffset,
127
- startLine: ((_d = (_c = ownerAttr.valueNode) === null || _c === void 0 ? void 0 : _c.startLine) !== null && _d !== void 0 ? _d : 0) + (startLine - 1),
128
- startCol: ((_f = (_e = ownerAttr.valueNode) === null || _e === void 0 ? void 0 : _e.startCol) !== null && _f !== void 0 ? _f : 0) + (startCol - 1),
128
+ startOffset: ((_c = (_b = ownerAttr.valueNode) === null || _b === void 0 ? void 0 : _b.startOffset) !== null && _c !== void 0 ? _c : 0) + startOffset,
129
+ startLine: ((_e = (_d = ownerAttr.valueNode) === null || _d === void 0 ? void 0 : _d.startLine) !== null && _e !== void 0 ? _e : 0) + (startLine - 1),
130
+ startCol: ((_g = (_f = ownerAttr.valueNode) === null || _f === void 0 ? void 0 : _f.startCol) !== null && _g !== void 0 ? _g : 0) + (startCol - 1),
129
131
  rule: ownerAttr.rule,
130
132
  _searchedIndex: startOffset,
131
133
  };
@@ -134,4 +136,4 @@ class MLDomTokenList extends Array {
134
136
  }
135
137
  }
136
138
  exports.MLDomTokenList = MLDomTokenList;
137
- _MLDomTokenList_set = new WeakMap(), _MLDomTokenList_origin = new WeakMap(), _MLDomTokenList_ownerAttrs = new WeakMap();
139
+ _MLDomTokenList_origin = new WeakMap(), _MLDomTokenList_ownerAttrs = new WeakMap(), _MLDomTokenList_set = new WeakMap();