@markuplint/ml-core 2.3.3 → 3.0.0-alpha.1

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 (113) hide show
  1. package/lib/configs.d.ts +1 -1
  2. package/lib/configs.js +29 -9
  3. package/lib/index.d.ts +8 -8
  4. package/lib/index.js +18 -10
  5. package/lib/ml-core.d.ts +3 -3
  6. package/lib/ml-core.js +48 -44
  7. package/lib/ml-dom/helper/accname.d.ts +3 -2
  8. package/lib/ml-dom/helper/accname.js +53 -5
  9. package/lib/ml-dom/helper/create-node.d.ts +4 -5
  10. package/lib/ml-dom/helper/create-node.js +12 -16
  11. package/lib/ml-dom/helper/debug.d.ts +2 -2
  12. package/lib/ml-dom/helper/debug.js +35 -21
  13. package/lib/ml-dom/helper/getIndent.d.ts +5 -5
  14. package/lib/ml-dom/helper/getIndent.js +14 -14
  15. package/lib/ml-dom/helper/walkers.d.ts +5 -4
  16. package/lib/ml-dom/helper/walkers.js +39 -3
  17. package/lib/ml-dom/index.d.ts +8 -3
  18. package/lib/ml-dom/index.js +3 -15
  19. package/lib/ml-dom/manipulations/child-node-methods.d.ts +33 -0
  20. package/lib/ml-dom/manipulations/child-node-methods.js +73 -0
  21. package/lib/ml-dom/manipulations/get-children.d.ts +4 -0
  22. package/lib/ml-dom/manipulations/get-children.js +10 -0
  23. package/lib/ml-dom/node/attr.d.ts +98 -0
  24. package/lib/ml-dom/node/attr.js +157 -0
  25. package/lib/ml-dom/node/block.d.ts +38 -0
  26. package/lib/ml-dom/node/block.js +53 -0
  27. package/lib/ml-dom/node/character-data.d.ts +57 -0
  28. package/lib/ml-dom/node/character-data.js +87 -0
  29. package/lib/ml-dom/node/child-node.d.ts +9 -0
  30. package/lib/ml-dom/node/child-node.js +10 -0
  31. package/lib/ml-dom/node/comment.d.ts +17 -0
  32. package/lib/ml-dom/node/comment.js +24 -0
  33. package/lib/ml-dom/node/document-fragment.d.ts +24 -0
  34. package/lib/ml-dom/node/document-fragment.js +33 -0
  35. package/lib/ml-dom/node/document-type.d.ts +38 -0
  36. package/lib/ml-dom/node/document-type.js +52 -0
  37. package/lib/ml-dom/node/document.d.ts +1563 -0
  38. package/lib/ml-dom/node/document.js +2140 -0
  39. package/lib/ml-dom/node/dom-token-list.d.ts +33 -0
  40. package/lib/ml-dom/node/dom-token-list.js +137 -0
  41. package/lib/ml-dom/node/element.d.ts +1844 -0
  42. package/lib/ml-dom/node/element.js +2601 -0
  43. package/lib/ml-dom/node/named-node-map.d.ts +42 -0
  44. package/lib/ml-dom/node/named-node-map.js +64 -0
  45. package/lib/ml-dom/node/node-list.d.ts +6 -0
  46. package/lib/ml-dom/node/node-list.js +39 -0
  47. package/lib/ml-dom/node/node-store.d.ts +14 -0
  48. package/lib/ml-dom/{helper → node}/node-store.js +8 -4
  49. package/lib/ml-dom/node/node.d.ts +482 -0
  50. package/lib/ml-dom/node/node.js +675 -0
  51. package/lib/ml-dom/node/parent-node.d.ts +66 -0
  52. package/lib/ml-dom/node/parent-node.js +131 -0
  53. package/lib/ml-dom/node/rule-mapper.d.ts +17 -0
  54. package/lib/ml-dom/{rule-mapper.js → node/rule-mapper.js} +20 -28
  55. package/lib/ml-dom/node/text.d.ts +51 -0
  56. package/lib/ml-dom/node/text.js +76 -0
  57. package/lib/ml-dom/node/types.d.ts +35 -0
  58. package/lib/ml-dom/{types.js → node/types.js} +0 -0
  59. package/lib/ml-dom/node/unexpected-call-error.d.ts +2 -0
  60. package/lib/ml-dom/node/unexpected-call-error.js +5 -0
  61. package/lib/ml-dom/token/token.d.ts +47 -0
  62. package/lib/ml-dom/token/token.js +89 -0
  63. package/lib/ml-rule/ml-rule-context.d.ts +14 -10
  64. package/lib/ml-rule/ml-rule-context.js +29 -6
  65. package/lib/ml-rule/ml-rule.d.ts +12 -12
  66. package/lib/ml-rule/ml-rule.js +63 -63
  67. package/lib/ml-rule/types.d.ts +12 -2
  68. package/lib/ruleset/index.d.ts +2 -2
  69. package/lib/test/index.d.ts +3 -1
  70. package/lib/test/index.js +12 -5
  71. package/lib/types.d.ts +3 -2
  72. package/package.json +11 -10
  73. package/tsconfig.tsbuildinfo +1 -1
  74. package/lib/ml-dom/document.d.ts +0 -85
  75. package/lib/ml-dom/document.js +0 -273
  76. package/lib/ml-dom/helper/index.d.ts +0 -4
  77. package/lib/ml-dom/helper/index.js +0 -12
  78. package/lib/ml-dom/helper/mapped-nodes.d.ts +0 -4
  79. package/lib/ml-dom/helper/mapped-nodes.js +0 -2
  80. package/lib/ml-dom/helper/match-selector.d.ts +0 -16
  81. package/lib/ml-dom/helper/match-selector.js +0 -233
  82. package/lib/ml-dom/helper/node-store.d.ts +0 -9
  83. package/lib/ml-dom/helper/selector.d.ts +0 -11
  84. package/lib/ml-dom/helper/selector.js +0 -549
  85. package/lib/ml-dom/rule-mapper.d.ts +0 -16
  86. package/lib/ml-dom/tokens/abstract-element.d.ts +0 -49
  87. package/lib/ml-dom/tokens/abstract-element.js +0 -249
  88. package/lib/ml-dom/tokens/attribute.d.ts +0 -42
  89. package/lib/ml-dom/tokens/attribute.js +0 -85
  90. package/lib/ml-dom/tokens/comment.d.ts +0 -9
  91. package/lib/ml-dom/tokens/comment.js +0 -15
  92. package/lib/ml-dom/tokens/doctype.d.ts +0 -15
  93. package/lib/ml-dom/tokens/doctype.js +0 -32
  94. package/lib/ml-dom/tokens/element-close-tag.d.ts +0 -24
  95. package/lib/ml-dom/tokens/element-close-tag.js +0 -45
  96. package/lib/ml-dom/tokens/element.d.ts +0 -23
  97. package/lib/ml-dom/tokens/element.js +0 -66
  98. package/lib/ml-dom/tokens/index.d.ts +0 -10
  99. package/lib/ml-dom/tokens/index.js +0 -26
  100. package/lib/ml-dom/tokens/node.d.ts +0 -39
  101. package/lib/ml-dom/tokens/node.js +0 -126
  102. package/lib/ml-dom/tokens/omitted-element.d.ts +0 -10
  103. package/lib/ml-dom/tokens/omitted-element.js +0 -12
  104. package/lib/ml-dom/tokens/preprocessor-specific-attribute.d.ts +0 -24
  105. package/lib/ml-dom/tokens/preprocessor-specific-attribute.js +0 -37
  106. package/lib/ml-dom/tokens/preprocessor-specific-block.d.ts +0 -11
  107. package/lib/ml-dom/tokens/preprocessor-specific-block.js +0 -16
  108. package/lib/ml-dom/tokens/text.d.ts +0 -15
  109. package/lib/ml-dom/tokens/text.js +0 -26
  110. package/lib/ml-dom/tokens/token.d.ts +0 -16
  111. package/lib/ml-dom/tokens/token.js +0 -55
  112. package/lib/ml-dom/types.d.ts +0 -27
  113. package/markuplint-recommended.json +0 -196
@@ -1,549 +0,0 @@
1
- "use strict";
2
- var _Selector_ruleset, _Ruleset_selectorGroup, _StructuredSelector_edge, _StructuredSelector_selector, _SelectorTarget_tagNameCaseSensitive, _SelectorTarget_isAdded, _SelectorTarget_combinatedFrom;
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.compareSpecificity = exports.createSelector = void 0;
5
- const tslib_1 = require("tslib");
6
- const postcss_selector_parser_1 = tslib_1.__importDefault(require("postcss-selector-parser"));
7
- const debug_1 = require("../../debug");
8
- const log = debug_1.log.extend('selector');
9
- const resLog = log.extend('result');
10
- function createSelector(selector, tagNameCaseSensitive) {
11
- return new Selector(selector, !!tagNameCaseSensitive);
12
- }
13
- exports.createSelector = createSelector;
14
- function compareSpecificity(a, b) {
15
- if (a[0] < b[0]) {
16
- return -1;
17
- }
18
- else if (a[0] > b[0]) {
19
- return 1;
20
- }
21
- else if (a[1] < b[1]) {
22
- return -1;
23
- }
24
- else if (a[1] > b[1]) {
25
- return 1;
26
- }
27
- else if (a[2] < b[2]) {
28
- return -1;
29
- }
30
- else if (a[2] > b[2]) {
31
- return 1;
32
- }
33
- return 0;
34
- }
35
- exports.compareSpecificity = compareSpecificity;
36
- class Selector {
37
- constructor(selector, tagNameCaseSensitive) {
38
- _Selector_ruleset.set(this, void 0);
39
- tslib_1.__classPrivateFieldSet(this, _Selector_ruleset, Ruleset.parse(selector, tagNameCaseSensitive), "f");
40
- }
41
- match(el, caller = el) {
42
- const results = tslib_1.__classPrivateFieldGet(this, _Selector_ruleset, "f").match(el, caller);
43
- for (const result of results) {
44
- if (result.matched) {
45
- return result.specificity;
46
- }
47
- }
48
- return false;
49
- }
50
- }
51
- _Selector_ruleset = new WeakMap();
52
- class Ruleset {
53
- constructor(selectors, tagNameCaseSensitive) {
54
- _Ruleset_selectorGroup.set(this, []);
55
- tslib_1.__classPrivateFieldGet(this, _Ruleset_selectorGroup, "f").push(...selectors.map(selector => new StructuredSelector(selector, tagNameCaseSensitive)));
56
- }
57
- static parse(selector, tagNameCaseSensitive) {
58
- const selectors = [];
59
- (0, postcss_selector_parser_1.default)(root => {
60
- selectors.push(...root.nodes);
61
- }).processSync(selector);
62
- return new Ruleset(selectors, tagNameCaseSensitive);
63
- }
64
- match(el, caller) {
65
- log('%s', el.raw);
66
- return tslib_1.__classPrivateFieldGet(this, _Ruleset_selectorGroup, "f").map(selector => {
67
- const res = selector.match(el, caller);
68
- resLog('%s => %o', selector.selector, res);
69
- return res;
70
- });
71
- }
72
- }
73
- _Ruleset_selectorGroup = new WeakMap();
74
- class StructuredSelector {
75
- constructor(selector, tagNameCaseSensitive) {
76
- _StructuredSelector_edge.set(this, void 0);
77
- _StructuredSelector_selector.set(this, void 0);
78
- tslib_1.__classPrivateFieldSet(this, _StructuredSelector_selector, selector, "f");
79
- tslib_1.__classPrivateFieldSet(this, _StructuredSelector_edge, new SelectorTarget(tagNameCaseSensitive), "f");
80
- tslib_1.__classPrivateFieldGet(this, _StructuredSelector_selector, "f").nodes.forEach(node => {
81
- switch (node.type) {
82
- case 'combinator': {
83
- const combinatedTarget = new SelectorTarget(tagNameCaseSensitive);
84
- combinatedTarget.from(tslib_1.__classPrivateFieldGet(this, _StructuredSelector_edge, "f"), node);
85
- tslib_1.__classPrivateFieldSet(this, _StructuredSelector_edge, combinatedTarget, "f");
86
- break;
87
- }
88
- case 'root':
89
- case 'string': {
90
- throw new Error(`Unsupported selector: ${selector.toString()}`);
91
- }
92
- case 'nesting': {
93
- throw new Error(`Unsupported nested selector: ${selector.toString()}`);
94
- }
95
- case 'comment': {
96
- throw new Error(`Unsupported comment in selector: ${selector.toString()}`);
97
- }
98
- default: {
99
- tslib_1.__classPrivateFieldGet(this, _StructuredSelector_edge, "f").add(node);
100
- }
101
- }
102
- });
103
- }
104
- get selector() {
105
- return tslib_1.__classPrivateFieldGet(this, _StructuredSelector_selector, "f").nodes.join('');
106
- }
107
- match(el, caller) {
108
- return tslib_1.__classPrivateFieldGet(this, _StructuredSelector_edge, "f").match(el, caller);
109
- }
110
- }
111
- _StructuredSelector_edge = new WeakMap(), _StructuredSelector_selector = new WeakMap();
112
- class SelectorTarget {
113
- constructor(tagNameCaseSensitive) {
114
- this.tag = null;
115
- this.id = [];
116
- this.class = [];
117
- this.attr = [];
118
- this.pseudo = [];
119
- _SelectorTarget_tagNameCaseSensitive.set(this, void 0);
120
- _SelectorTarget_isAdded.set(this, false);
121
- _SelectorTarget_combinatedFrom.set(this, null);
122
- tslib_1.__classPrivateFieldSet(this, _SelectorTarget_tagNameCaseSensitive, tagNameCaseSensitive, "f");
123
- }
124
- match(el, caller) {
125
- const unitCheck = this._matchWithoutCombinateChecking(el, caller);
126
- if (!unitCheck.matched) {
127
- return unitCheck;
128
- }
129
- if (!tslib_1.__classPrivateFieldGet(this, _SelectorTarget_combinatedFrom, "f")) {
130
- return unitCheck;
131
- }
132
- const { target, combinator } = tslib_1.__classPrivateFieldGet(this, _SelectorTarget_combinatedFrom, "f");
133
- switch (combinator.value) {
134
- // Descendant combinator
135
- case ' ': {
136
- let ancestor = el.getParentElement();
137
- let matched = false;
138
- let specificity;
139
- while (ancestor) {
140
- const res = target.match(ancestor, caller);
141
- if (!specificity) {
142
- specificity = [
143
- unitCheck.specificity[0] + res.specificity[0],
144
- unitCheck.specificity[1] + res.specificity[1],
145
- unitCheck.specificity[2] + res.specificity[2],
146
- ];
147
- }
148
- if (res.matched) {
149
- matched = true;
150
- }
151
- ancestor = ancestor.getParentElement();
152
- }
153
- if (!specificity) {
154
- const res = target.match(el, caller);
155
- specificity = [
156
- unitCheck.specificity[0] + res.specificity[0],
157
- unitCheck.specificity[1] + res.specificity[1],
158
- unitCheck.specificity[2] + res.specificity[2],
159
- ];
160
- }
161
- return {
162
- specificity,
163
- matched,
164
- };
165
- }
166
- // Child combinator
167
- case '>': {
168
- let matched;
169
- const specificity = unitCheck.specificity;
170
- const parentNode = el.getParentElement();
171
- if (parentNode) {
172
- const res = target.match(parentNode, caller);
173
- specificity[0] += res.specificity[0];
174
- specificity[1] += res.specificity[1];
175
- specificity[2] += res.specificity[2];
176
- matched = res.matched;
177
- }
178
- else {
179
- const res = target.match(el, caller);
180
- specificity[0] += res.specificity[0];
181
- specificity[1] += res.specificity[1];
182
- specificity[2] += res.specificity[2];
183
- matched = false;
184
- }
185
- return {
186
- specificity,
187
- matched,
188
- };
189
- }
190
- // Next-sibling combinator
191
- case '+': {
192
- let matched;
193
- const specificity = unitCheck.specificity;
194
- if (el.previousElementSibling) {
195
- const res = target.match(el.previousElementSibling, caller);
196
- specificity[0] += res.specificity[0];
197
- specificity[1] += res.specificity[1];
198
- specificity[2] += res.specificity[2];
199
- matched = res.matched;
200
- }
201
- else {
202
- const res = target.match(el, caller);
203
- specificity[0] += res.specificity[0];
204
- specificity[1] += res.specificity[1];
205
- specificity[2] += res.specificity[2];
206
- matched = false;
207
- }
208
- return {
209
- specificity,
210
- matched,
211
- };
212
- }
213
- // // Subsequent-sibling combinator
214
- case '~': {
215
- let prev = el.previousElementSibling;
216
- let matched = false;
217
- let specificity;
218
- while (prev) {
219
- const res = target.match(prev, caller);
220
- if (!specificity) {
221
- specificity = [
222
- unitCheck.specificity[0] + res.specificity[0],
223
- unitCheck.specificity[1] + res.specificity[1],
224
- unitCheck.specificity[2] + res.specificity[2],
225
- ];
226
- }
227
- if (res.matched) {
228
- matched = true;
229
- }
230
- prev = prev.previousElementSibling;
231
- }
232
- if (!specificity) {
233
- const res = target.match(el, caller);
234
- specificity = [
235
- unitCheck.specificity[0] + res.specificity[0],
236
- unitCheck.specificity[1] + res.specificity[1],
237
- unitCheck.specificity[2] + res.specificity[2],
238
- ];
239
- }
240
- return {
241
- specificity,
242
- matched,
243
- };
244
- }
245
- // Column combinator
246
- case '||': {
247
- throw new Error('Unsupported column combinator yet. If you want it, please request it as the issue (https://github.com/markuplint/markuplint/issues/new).');
248
- }
249
- default: {
250
- throw new Error(`Unsupported ${tslib_1.__classPrivateFieldGet(this, _SelectorTarget_combinatedFrom, "f").combinator.value} combinator in selector`);
251
- }
252
- }
253
- }
254
- _matchWithoutCombinateChecking(el, caller) {
255
- const specificity = [0, 0, 0];
256
- let matched = true;
257
- if (!tslib_1.__classPrivateFieldGet(this, _SelectorTarget_isAdded, "f") && !isScope(el, caller)) {
258
- matched = false;
259
- }
260
- if (!this.id.every(id => id.value === el.id)) {
261
- matched = false;
262
- }
263
- specificity[0] += this.id.length;
264
- if (!this.class.every(className => el.classList.includes(className.value))) {
265
- matched = false;
266
- }
267
- specificity[1] += this.class.length;
268
- if (!this.attr.every(attr => attrMatch(attr, el))) {
269
- matched = false;
270
- }
271
- specificity[1] += this.attr.length;
272
- for (const pseudo of this.pseudo) {
273
- const pseudoRes = pseudoMatch(pseudo, el, caller, tslib_1.__classPrivateFieldGet(this, _SelectorTarget_tagNameCaseSensitive, "f"));
274
- specificity[0] += pseudoRes.specificity[0];
275
- specificity[1] += pseudoRes.specificity[1];
276
- specificity[2] += pseudoRes.specificity[2];
277
- if (!pseudoRes.matched) {
278
- matched = false;
279
- }
280
- }
281
- if (this.tag && this.tag.type === 'tag') {
282
- specificity[2] += 1;
283
- let a = this.tag.value;
284
- let b = el.nodeName;
285
- if (!tslib_1.__classPrivateFieldGet(this, _SelectorTarget_tagNameCaseSensitive, "f")) {
286
- a = a.toLowerCase();
287
- b = b.toLowerCase();
288
- }
289
- if (a !== b) {
290
- matched = false;
291
- }
292
- }
293
- return {
294
- specificity,
295
- matched,
296
- };
297
- }
298
- add(selector) {
299
- tslib_1.__classPrivateFieldSet(this, _SelectorTarget_isAdded, true, "f");
300
- switch (selector.type) {
301
- case 'tag':
302
- case 'universal': {
303
- this.tag = selector;
304
- break;
305
- }
306
- case 'id': {
307
- this.id.push(selector);
308
- break;
309
- }
310
- case 'class': {
311
- this.class.push(selector);
312
- break;
313
- }
314
- case 'attribute': {
315
- this.attr.push(selector);
316
- break;
317
- }
318
- case 'pseudo': {
319
- this.pseudo.push(selector);
320
- break;
321
- }
322
- }
323
- }
324
- from(target, combinator) {
325
- tslib_1.__classPrivateFieldSet(this, _SelectorTarget_combinatedFrom, { target, combinator }, "f");
326
- }
327
- }
328
- _SelectorTarget_tagNameCaseSensitive = new WeakMap(), _SelectorTarget_isAdded = new WeakMap(), _SelectorTarget_combinatedFrom = new WeakMap();
329
- function attrMatch(attr, el) {
330
- return el.attributes.some(attrOfEl => {
331
- if (attr.attribute !== attrOfEl.getName().potential) {
332
- return false;
333
- }
334
- if (attr.value != null) {
335
- let value = attr.value;
336
- let valueOfEl = attrOfEl.getValue().potential;
337
- if (attr.insensitive) {
338
- value = value.toLowerCase();
339
- valueOfEl = valueOfEl.toLowerCase();
340
- }
341
- switch (attr.operator) {
342
- case '=': {
343
- if (value !== valueOfEl) {
344
- return false;
345
- }
346
- break;
347
- }
348
- case '~=': {
349
- if (!valueOfEl.split(/\s+/).includes(value)) {
350
- return false;
351
- }
352
- break;
353
- }
354
- case '|=': {
355
- if (!new RegExp(`^${value}(?:$|-)`).test(valueOfEl)) {
356
- return false;
357
- }
358
- break;
359
- }
360
- case '*=': {
361
- if (valueOfEl.indexOf(value) === -1) {
362
- return false;
363
- }
364
- break;
365
- }
366
- case '^=': {
367
- if (valueOfEl.indexOf(value) !== 0) {
368
- return false;
369
- }
370
- break;
371
- }
372
- case '$=': {
373
- if (valueOfEl.lastIndexOf(value) !== valueOfEl.length - value.length) {
374
- return false;
375
- }
376
- break;
377
- }
378
- }
379
- }
380
- return true;
381
- });
382
- }
383
- function pseudoMatch(pseudo, el, caller, tagNameCaseSensitive) {
384
- switch (pseudo.value) {
385
- /**
386
- * Below, markuplint Specific Selector
387
- */
388
- case ':closest': {
389
- const ruleset = new Ruleset(pseudo.nodes, tagNameCaseSensitive);
390
- const specificity = getSpecificity(ruleset.match(el, caller));
391
- let parent = el.getParentElement();
392
- while (parent) {
393
- if (ruleset.match(parent, caller).some(r => r.matched)) {
394
- return {
395
- specificity,
396
- matched: true,
397
- };
398
- }
399
- parent = parent.getParentElement();
400
- }
401
- return {
402
- specificity,
403
- matched: false,
404
- };
405
- }
406
- /**
407
- * Below, Selector Level 4
408
- */
409
- case ':not': {
410
- const ruleset = new Ruleset(pseudo.nodes, tagNameCaseSensitive);
411
- const resList = ruleset.match(el, caller);
412
- const specificity = getSpecificity(resList);
413
- const matched = resList.every(r => !r.matched);
414
- return {
415
- specificity,
416
- matched,
417
- };
418
- }
419
- case ':is': {
420
- const ruleset = new Ruleset(pseudo.nodes, tagNameCaseSensitive);
421
- const resList = ruleset.match(el, caller);
422
- const specificity = getSpecificity(resList);
423
- const matched = resList.some(r => r.matched);
424
- return {
425
- specificity,
426
- matched,
427
- };
428
- }
429
- case ':has': {
430
- const ruleset = new Ruleset(pseudo.nodes, tagNameCaseSensitive);
431
- const specificity = getSpecificity(ruleset.match(el, caller));
432
- const descendants = getDescendants(el);
433
- const matched = descendants.some(desc => ruleset.match(desc, caller).some(m => m.matched));
434
- return {
435
- specificity,
436
- matched,
437
- };
438
- }
439
- case ':where': {
440
- const ruleset = new Ruleset(pseudo.nodes, tagNameCaseSensitive);
441
- const resList = ruleset.match(el, caller);
442
- const matched = resList.some(r => r.matched);
443
- return {
444
- specificity: [0, 0, 0],
445
- matched,
446
- };
447
- }
448
- case ':scope': {
449
- if (!isScope(el, caller)) {
450
- return {
451
- specificity: [0, 1, 0],
452
- matched: false,
453
- };
454
- }
455
- return {
456
- specificity: [0, 1, 0],
457
- matched: true,
458
- };
459
- }
460
- case ':root': {
461
- if (!(!el.isInFragmentDocument && el.parentNode === null)) {
462
- return {
463
- specificity: [0, 1, 0],
464
- matched: false,
465
- };
466
- }
467
- return {
468
- specificity: [0, 1, 0],
469
- matched: true,
470
- };
471
- }
472
- case ':enable':
473
- case ':disable':
474
- case ':read-write':
475
- case ':read-only':
476
- case ':placeholder-shown':
477
- case ':default':
478
- case ':checked':
479
- case ':indeterminate':
480
- case ':valid':
481
- case ':invalid':
482
- case ':in-range':
483
- case ':out-of-range':
484
- case ':required':
485
- case ':optional':
486
- case ':blank':
487
- case ':user-invalid':
488
- case ':empty':
489
- case ':nth-child':
490
- case ':nth-last-child':
491
- case ':first-child':
492
- case ':last-child':
493
- case ':only-child':
494
- case ':nth-of-type':
495
- case ':nth-last-of-type':
496
- case ':first-of-type':
497
- case ':last-of-type':
498
- case ':only-of-type':
499
- case ':nth-last-col':
500
- case ':nth-col': {
501
- throw new Error(`Unsupported pseudo ${pseudo.toString()} selector yet. If you want it, please request it as the issue (https://github.com/markuplint/markuplint/issues/new).`);
502
- }
503
- case ':dir':
504
- case ':lang':
505
- case ':any-link':
506
- case ':link':
507
- case ':visited':
508
- case ':local-link':
509
- case ':target':
510
- case ':target-within':
511
- case ':current':
512
- case ':past':
513
- case ':future':
514
- case ':active':
515
- case ':hover':
516
- case ':focus':
517
- case ':focus-within':
518
- case ':focus-visible':
519
- case '::before':
520
- case '::after':
521
- default: {
522
- throw new Error(`Unsupported pseudo ${pseudo.toString()} selector.`);
523
- }
524
- }
525
- }
526
- function isScope(el, caller) {
527
- return el.uuid === (caller === null || caller === void 0 ? void 0 : caller.uuid) || (!el.isInFragmentDocument && el.parentNode === null);
528
- }
529
- function getDescendants(el, includeSelf = false) {
530
- return [...el.children.map(child => getDescendants(child, true)).flat(), ...(includeSelf ? [el] : [])];
531
- }
532
- function getSpecificity(result) {
533
- let specificity;
534
- for (const res of result) {
535
- if (specificity) {
536
- const order = compareSpecificity(specificity, res.specificity);
537
- if (order === -1) {
538
- specificity = res.specificity;
539
- }
540
- }
541
- else {
542
- specificity = res.specificity;
543
- }
544
- }
545
- if (!specificity) {
546
- throw new Error('Result is empty');
547
- }
548
- return specificity;
549
- }
@@ -1,16 +0,0 @@
1
- import type { Specificity } from './helper/selector';
2
- import type { AnonymousNode } from './types';
3
- import type { AnyRule } from '@markuplint/ml-config';
4
- declare type RuleType = 'rules' | 'nodeRules' | 'childNodeRules';
5
- declare type MappingLayer = {
6
- from: RuleType;
7
- specificity: Specificity;
8
- rule: AnyRule;
9
- };
10
- export declare class RuleMapper<N extends AnonymousNode<any, any> = AnonymousNode<any, any>> {
11
- #private;
12
- constructor(nodeList: ReadonlyArray<N>);
13
- set(node: N, ruleName: string, rule: MappingLayer): void;
14
- apply(): void;
15
- }
16
- export {};
@@ -1,49 +0,0 @@
1
- import type { Document } from '../';
2
- import type { MLDOMAttribute, MLDOMElement, MLDOMOmittedElement, MLDOMText } from './';
3
- import type MLDOMPreprocessorSpecificAttribute from './preprocessor-specific-attribute';
4
- import type { MLASTElement, MLASTOmittedElement } from '@markuplint/ml-ast';
5
- import type { RuleConfigValue } from '@markuplint/ml-config';
6
- import type { ContentModel } from '@markuplint/ml-spec';
7
- import MLDOMNode from './node';
8
- export default abstract class MLDOMAbstractElement<T extends RuleConfigValue, O = null, E extends MLASTElement | MLASTOmittedElement = MLASTElement | MLASTOmittedElement> extends MLDOMNode<T, O, E> {
9
- #private;
10
- readonly nodeType = 1;
11
- readonly nodeName: string;
12
- readonly attributes: (MLDOMAttribute | MLDOMPreprocessorSpecificAttribute)[];
13
- readonly hasSpreadAttr: boolean;
14
- readonly namespaceURI: string;
15
- readonly isForeignElement: boolean;
16
- readonly ownModels: Set<ContentModel>;
17
- readonly childModels: Set<ContentModel>;
18
- readonly descendantModels: Set<ContentModel>;
19
- readonly isCustomElement: boolean;
20
- readonly isInFragmentDocument: boolean;
21
- constructor(astNode: E, document: Document<T, O>);
22
- get tagName(): string;
23
- get children(): (MLDOMElement<T, O> | MLDOMOmittedElement<T, O>)[];
24
- get nextElementSibling(): MLDOMElement<T, O> | MLDOMOmittedElement<T, O> | null;
25
- get previousElementSibling(): MLDOMElement<T, O> | MLDOMOmittedElement<T, O> | null;
26
- get ns(): string;
27
- get nameWithNS(): string;
28
- get classList(): string[];
29
- get id(): string;
30
- get fixedNodeName(): string;
31
- get textContent(): string;
32
- querySelectorAll(selector: string): (MLDOMElement<T, O> | MLDOMText<T, O>)[];
33
- closest(selector: string): MLDOMAbstractElement<T, O> | null;
34
- getAttributeToken(attrName: string): (MLDOMAttribute | MLDOMPreprocessorSpecificAttribute)[];
35
- getAttributeNode(attrName: string): MLDOMAttribute | MLDOMPreprocessorSpecificAttribute;
36
- getAttribute(attrName: string): string | null;
37
- hasAttribute(attrName: string): boolean;
38
- matches(selector: string): boolean;
39
- fixNodeName(name: string): void;
40
- getChildElementsAndTextNodeWithoutWhitespaces(): (MLDOMElement<T, O> | MLDOMText<T, O>)[];
41
- /**
42
- * This element has "Preprocessor Specific Block". In other words, Its children are potentially mutable.
43
- */
44
- hasMutableChildren(attr?: boolean): boolean;
45
- hasMutableAttributes(): boolean;
46
- isDescendantByUUIDList(uuidList: string[]): boolean;
47
- getAccessibleName(): string;
48
- toNormalizeString(): string;
49
- }