@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
@@ -1,42 +1,47 @@
1
1
  import type { MLAttr } from './attr';
2
- import type { RuleConfigValue } from '@markuplint/ml-config';
3
- export declare class MLNamedNodeMap<T extends RuleConfigValue, O = null> extends Array<MLAttr<T, O>> implements NamedNodeMap {
4
- getNamedItem(qualifiedName: string): MLAttr<T, O> | null;
5
- /**
6
- * **IT THROWS AN ERROR WHEN CALLING THIS.**
7
- *
8
- * @unsupported
9
- * @implements DOM API: `NamedNodeMap`
10
- */
11
- getNamedItemNS(namespace: string | null, localName: string): Attr | null;
12
- item(index: number): MLAttr<T, O> | null;
13
- /**
14
- * **IT THROWS AN ERROR WHEN CALLING THIS.**
15
- *
16
- * @unsupported
17
- * @implements DOM API: `NamedNodeMap`
18
- */
19
- removeNamedItem(qualifiedName: string): MLAttr<T, O>;
20
- /**
21
- * **IT THROWS AN ERROR WHEN CALLING THIS.**
22
- *
23
- * @unsupported
24
- * @implements DOM API: `NamedNodeMap`
25
- */
26
- removeNamedItemNS(namespace: string | null, localName: string): MLAttr<T, O>;
27
- /**
28
- * **IT THROWS AN ERROR WHEN CALLING THIS.**
29
- *
30
- * @unsupported
31
- * @implements DOM API: `NamedNodeMap`
32
- */
33
- setNamedItem(attr: MLAttr<T, O>): MLAttr<T, O> | null;
34
- /**
35
- * **IT THROWS AN ERROR WHEN CALLING THIS.**
36
- *
37
- * @unsupported
38
- * @implements DOM API: `NamedNodeMap`
39
- */
40
- setNamedItemNS(attr: MLAttr<T, O>): MLAttr<T, O> | null;
2
+ import type { PlainData, RuleConfigValue } from '@markuplint/ml-config';
3
+ export declare class MLNamedNodeMap<T extends RuleConfigValue, O extends PlainData = undefined>
4
+ extends Array<MLAttr<T, O>>
5
+ implements NamedNodeMap
6
+ {
7
+ getNamedItem(qualifiedName: string): MLAttr<T, O> | null;
8
+ /**
9
+ * **IT THROWS AN ERROR WHEN CALLING THIS.**
10
+ *
11
+ * @unsupported
12
+ * @implements DOM API: `NamedNodeMap`
13
+ */
14
+ getNamedItemNS(namespace: string | null, localName: string): Attr | null;
15
+ item(index: number): MLAttr<T, O> | null;
16
+ /**
17
+ * **IT THROWS AN ERROR WHEN CALLING THIS.**
18
+ *
19
+ * @unsupported
20
+ * @implements DOM API: `NamedNodeMap`
21
+ */
22
+ removeNamedItem(qualifiedName: string): MLAttr<T, O>;
23
+ /**
24
+ * **IT THROWS AN ERROR WHEN CALLING THIS.**
25
+ *
26
+ * @unsupported
27
+ * @implements DOM API: `NamedNodeMap`
28
+ */
29
+ removeNamedItemNS(namespace: string | null, localName: string): MLAttr<T, O>;
30
+ /**
31
+ * **IT THROWS AN ERROR WHEN CALLING THIS.**
32
+ *
33
+ * @unsupported
34
+ * @implements DOM API: `NamedNodeMap`
35
+ */
36
+ setNamedItem(attr: MLAttr<T, O>): MLAttr<T, O> | null;
37
+ /**
38
+ * **IT THROWS AN ERROR WHEN CALLING THIS.**
39
+ *
40
+ * @unsupported
41
+ * @implements DOM API: `NamedNodeMap`
42
+ */
43
+ setNamedItemNS(attr: MLAttr<T, O>): MLAttr<T, O> | null;
41
44
  }
42
- export declare function toNamedNodeMap<T extends RuleConfigValue, O = null>(nodes: ReadonlyArray<MLAttr<T, O>>): MLNamedNodeMap<T, O>;
45
+ export declare function toNamedNodeMap<T extends RuleConfigValue, O extends PlainData = undefined>(
46
+ nodes: ReadonlyArray<MLAttr<T, O>>,
47
+ ): MLNamedNodeMap<T, O>;
@@ -5,7 +5,8 @@ const tslib_1 = require("tslib");
5
5
  const unexpected_call_error_1 = tslib_1.__importDefault(require("./unexpected-call-error"));
6
6
  class MLNamedNodeMap extends Array {
7
7
  getNamedItem(qualifiedName) {
8
- return this.find(attr => attr.name === qualifiedName) || null;
8
+ var _a;
9
+ return (_a = this.find(attr => attr.name === qualifiedName)) !== null && _a !== void 0 ? _a : null;
9
10
  }
10
11
  /**
11
12
  * **IT THROWS AN ERROR WHEN CALLING THIS.**
@@ -17,7 +18,8 @@ class MLNamedNodeMap extends Array {
17
18
  throw new unexpected_call_error_1.default('Not supported "getNamedItemNS" method');
18
19
  }
19
20
  item(index) {
20
- return this[index];
21
+ var _a;
22
+ return (_a = this[index]) !== null && _a !== void 0 ? _a : null;
21
23
  }
22
24
  /**
23
25
  * **IT THROWS AN ERROR WHEN CALLING THIS.**
@@ -43,7 +45,9 @@ class MLNamedNodeMap extends Array {
43
45
  * @unsupported
44
46
  * @implements DOM API: `NamedNodeMap`
45
47
  */
46
- setNamedItem(attr) {
48
+ setNamedItem(
49
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
50
+ attr) {
47
51
  throw new unexpected_call_error_1.default('Not supported "setNamedItem" method');
48
52
  }
49
53
  /**
@@ -52,12 +56,16 @@ class MLNamedNodeMap extends Array {
52
56
  * @unsupported
53
57
  * @implements DOM API: `NamedNodeMap`
54
58
  */
55
- setNamedItemNS(attr) {
59
+ setNamedItemNS(
60
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
61
+ attr) {
56
62
  throw new unexpected_call_error_1.default('Not supported "setNamedItemNS" method');
57
63
  }
58
64
  }
59
65
  exports.MLNamedNodeMap = MLNamedNodeMap;
60
- function toNamedNodeMap(nodes) {
66
+ function toNamedNodeMap(
67
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
68
+ nodes) {
61
69
  const namedNodeMap = new MLNamedNodeMap(...nodes);
62
70
  return namedNodeMap;
63
71
  }
@@ -1,6 +1,12 @@
1
1
  import type { MLChildNode } from './child-node';
2
2
  import type { MLElement } from './element';
3
- import type { RuleConfigValue } from '@markuplint/ml-config';
4
- export declare function toNodeList<T extends RuleConfigValue, O extends Object | null, N extends MLChildNode<T, O>>(nodes: ReadonlyArray<N>): NodeListOf<N>;
5
- export declare function toHTMLCollection<T extends RuleConfigValue, O = null>(nodes: ReadonlyArray<MLElement<T, O>>): HTMLCollectionOf<MLElement<T, O>>;
6
- export declare function nodeListToHTMLCollection<T extends RuleConfigValue, O = null>(nodeList: NodeListOf<MLChildNode<T, O>>): HTMLCollectionOf<MLElement<T, O>>;
3
+ import type { PlainData, RuleConfigValue } from '@markuplint/ml-config';
4
+ export declare function toNodeList<T extends RuleConfigValue, O extends PlainData, N extends MLChildNode<T, O>>(
5
+ nodes: ReadonlyArray<N>,
6
+ ): NodeListOf<N>;
7
+ export declare function toHTMLCollection<T extends RuleConfigValue, O extends PlainData = undefined>(
8
+ nodes: ReadonlyArray<MLElement<T, O>>,
9
+ ): HTMLCollectionOf<MLElement<T, O>>;
10
+ export declare function nodeListToHTMLCollection<T extends RuleConfigValue, O extends PlainData = undefined>(
11
+ nodeList: NodeListOf<MLChildNode<T, O>>,
12
+ ): HTMLCollectionOf<MLElement<T, O>>;
@@ -6,7 +6,21 @@ class MLNodeList extends Array {
6
6
  return super.forEach.bind(this)((v, k) => callbackfn(v, k, thisArg !== null && thisArg !== void 0 ? thisArg : this));
7
7
  }
8
8
  item(index) {
9
- return this[index];
9
+ const node = this[index];
10
+ if (!node) {
11
+ /**
12
+ * ⚠ TYPE CONTRADICTION
13
+ *
14
+ * It throws an error because it should return null but the `item` method of `NodeListOf` doesn't return null in the type definition of TypeScript.
15
+ *
16
+ * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-844377136
17
+ *
18
+ * > item
19
+ * > Returns the index-th item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.
20
+ */
21
+ throw new ReferenceError('Invalid index');
22
+ }
23
+ return node;
10
24
  }
11
25
  }
12
26
  function toNodeList(nodes) {
@@ -16,18 +30,24 @@ function toNodeList(nodes) {
16
30
  exports.toNodeList = toNodeList;
17
31
  class MLHTMLCollection extends Array {
18
32
  item(index) {
19
- return this[index];
33
+ var _a;
34
+ return (_a = this[index]) !== null && _a !== void 0 ? _a : null;
20
35
  }
21
36
  namedItem(name) {
22
- return this.find(el => el.getAttribute('name') === name) || null;
37
+ var _a;
38
+ return (_a = this.find(el => el.getAttribute('name') === name)) !== null && _a !== void 0 ? _a : null;
23
39
  }
24
40
  }
25
- function toHTMLCollection(nodes) {
41
+ function toHTMLCollection(
42
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
43
+ nodes) {
26
44
  const collection = new MLHTMLCollection(...nodes);
27
45
  return collection;
28
46
  }
29
47
  exports.toHTMLCollection = toHTMLCollection;
30
- function nodeListToHTMLCollection(nodeList) {
48
+ function nodeListToHTMLCollection(
49
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
50
+ nodeList) {
31
51
  const collection = new MLHTMLCollection();
32
52
  nodeList.forEach(node => {
33
53
  if (node.is(node.ELEMENT_NODE)) {
@@ -1,11 +1,16 @@
1
1
  import type { MLNode } from './node';
2
2
  import type { MappedNode } from './types';
3
- import type { MLASTAbstructNode } from '@markuplint/ml-ast';
4
- import type { RuleConfigValue } from '@markuplint/ml-config';
3
+ import type { MLASTAbstractNode } from '@markuplint/ml-ast';
4
+ import type { PlainData, RuleConfigValue } from '@markuplint/ml-config';
5
5
  declare class NodeStore {
6
- #private;
7
- getNode<N extends MLASTAbstructNode, T extends RuleConfigValue, O = null>(astNode: N): MappedNode<N, T, O>;
8
- setNode<A extends MLASTAbstructNode, T extends RuleConfigValue, O = null>(astNode: A, node: MLNode<T, O, A>): void;
6
+ #private;
7
+ getNode<N extends MLASTAbstractNode, T extends RuleConfigValue, O extends PlainData = undefined>(
8
+ astNode: N,
9
+ ): MappedNode<N, T, O>;
10
+ setNode<A extends MLASTAbstractNode, T extends RuleConfigValue, O extends PlainData = undefined>(
11
+ astNode: A,
12
+ node: MLNode<T, O, A>,
13
+ ): void;
9
14
  }
10
15
  /**
11
16
  * `NodeStore` Singleton
@@ -4,6 +4,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.nodeStore = void 0;
5
5
  const tslib_1 = require("tslib");
6
6
  const parser_utils_1 = require("@markuplint/parser-utils");
7
+ const debug_1 = require("../../debug");
8
+ const nodeStoreLog = debug_1.log.extend('node-store');
9
+ const nodeStoreError = nodeStoreLog.extend('error');
7
10
  class NodeStore {
8
11
  constructor() {
9
12
  _NodeStore_store.set(this, new Map());
@@ -12,6 +15,11 @@ class NodeStore {
12
15
  // console.log(`Get: ${astNode.uuid} -> ${astNode.raw.trim()}(${astNode.type})`);
13
16
  const node = tslib_1.__classPrivateFieldGet(this, _NodeStore_store, "f").get(astNode.uuid);
14
17
  if (!node) {
18
+ nodeStoreError('Ref ID: %s (%s: "%s")', astNode.uuid, astNode.nodeName, astNode.raw);
19
+ nodeStoreError('Map: %O', Array.from(tslib_1.__classPrivateFieldGet(this, _NodeStore_store, "f").entries()).map(([id, node]) => ({
20
+ id,
21
+ name: node.nodeName,
22
+ })));
15
23
  throw new parser_utils_1.ParserError('Broke mapping nodes.', {
16
24
  line: astNode.startLine,
17
25
  col: astNode.startCol,
@@ -21,7 +29,17 @@ class NodeStore {
21
29
  }
22
30
  return node;
23
31
  }
24
- setNode(astNode, node) {
32
+ setNode(astNode,
33
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
34
+ node) {
35
+ if (node.is(node.DOCUMENT_NODE)) {
36
+ return;
37
+ }
38
+ if (!astNode.uuid) {
39
+ nodeStoreError('UUID is invalid: %s (%s: "%s")', astNode.uuid, astNode.nodeName, astNode.raw);
40
+ nodeStoreError('Invalid node: %O', node);
41
+ }
42
+ nodeStoreLog('Mapped: %s (%s: "%s")', astNode.uuid, astNode.nodeName, astNode.raw.replace(/\n/g, '⏎').replace(/\t/g, '→'));
25
43
  tslib_1.__classPrivateFieldGet(this, _NodeStore_store, "f").set(astNode.uuid, node);
26
44
  }
27
45
  }