@markuplint/ml-core 2.0.0-rc.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +0 -15
  2. package/lib/index.d.ts +0 -1
  3. package/lib/index.js +1 -3
  4. package/lib/ml-core.d.ts +12 -11
  5. package/lib/ml-core.js +35 -14
  6. package/lib/ml-dom/document.d.ts +66 -49
  7. package/lib/ml-dom/document.js +8 -6
  8. package/lib/ml-dom/helper/create-node.d.ts +5 -1
  9. package/lib/ml-dom/helper/debug.d.ts +4 -1
  10. package/lib/ml-dom/helper/getIndent.d.ts +7 -7
  11. package/lib/ml-dom/helper/mapped-nodes.d.ts +51 -3
  12. package/lib/ml-dom/helper/match-selector.d.ts +10 -6
  13. package/lib/ml-dom/helper/match-selector.js +2 -2
  14. package/lib/ml-dom/helper/node-store.d.ts +6 -3
  15. package/lib/ml-dom/helper/node-store.js +7 -2
  16. package/lib/ml-dom/helper/selector.d.ts +4 -4
  17. package/lib/ml-dom/helper/selector.js +30 -22
  18. package/lib/ml-dom/helper/walkers.d.ts +7 -2
  19. package/lib/ml-dom/index.d.ts +10 -1
  20. package/lib/ml-dom/rule-mapper.d.ts +7 -7
  21. package/lib/ml-dom/tokens/abstract-element.d.ts +40 -36
  22. package/lib/ml-dom/tokens/attribute.d.ts +36 -36
  23. package/lib/ml-dom/tokens/comment.d.ts +5 -2
  24. package/lib/ml-dom/tokens/doctype.d.ts +10 -7
  25. package/lib/ml-dom/tokens/element-close-tag.d.ts +19 -16
  26. package/lib/ml-dom/tokens/element.d.ts +18 -15
  27. package/lib/ml-dom/tokens/node.d.ts +23 -16
  28. package/lib/ml-dom/tokens/omitted-element.d.ts +7 -4
  29. package/lib/ml-dom/tokens/preprocessor-specific-attribute.d.ts +20 -20
  30. package/lib/ml-dom/tokens/preprocessor-specific-block.d.ts +8 -5
  31. package/lib/ml-dom/tokens/text.d.ts +9 -6
  32. package/lib/ml-dom/tokens/token.d.ts +13 -13
  33. package/lib/ml-dom/types.d.ts +35 -13
  34. package/lib/ml-error/ml-parse-error.d.ts +5 -5
  35. package/lib/ml-rule/create-test-rule.d.ts +5 -3
  36. package/lib/ml-rule/ml-rule-context.d.ts +52 -44
  37. package/lib/ml-rule/ml-rule.d.ts +33 -23
  38. package/lib/ml-rule/types.d.ts +5 -5
  39. package/lib/plugin/types.d.ts +5 -5
  40. package/lib/ruleset/index.d.ts +4 -4
  41. package/lib/test/index.d.ts +14 -5
  42. package/lib/types.d.ts +6 -6
  43. package/lib/utils/get-location-from-chars.d.ts +9 -4
  44. package/markuplint-recommended.json +13 -6
  45. package/package.json +10 -9
  46. package/tsconfig.tsbuildinfo +1 -1
package/README.md CHANGED
@@ -6,23 +6,8 @@
6
6
 
7
7
  ## Install
8
8
 
9
- Prerequisites: [Node.js](https://nodejs.org) (Version 12.4.0 or later)
10
-
11
9
  ```sh
12
10
  $ npm install @markuplint/ml-core
13
11
 
14
12
  $ yarn add @markuplint/ml-core
15
13
  ```
16
-
17
- ## Contributing
18
-
19
- ```
20
- $ git clone git@github.com:markuplint/markuplint.git -b main
21
- $ yarn
22
- $ yarn build
23
- $ yarn test
24
- ```
25
-
26
- ---
27
-
28
- Copyright © 2021 markuplint. Under the MIT License.
package/lib/index.d.ts CHANGED
@@ -3,7 +3,6 @@ export { getAttrSpecs } from '@markuplint/ml-spec';
3
3
  export * from './convert-ruleset';
4
4
  export * from './ml-core';
5
5
  export * from './ml-rule';
6
- export { default as MLParseError } from './ml-error/ml-parse-error';
7
6
  export { default as Ruleset } from './ruleset';
8
7
  export * from './ml-dom';
9
8
  export * from './plugin';
package/lib/index.js CHANGED
@@ -1,14 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.enableDebug = exports.getIndent = exports.Ruleset = exports.MLParseError = exports.getAttrSpecs = void 0;
3
+ exports.enableDebug = exports.getIndent = exports.Ruleset = exports.getAttrSpecs = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  var ml_spec_1 = require("@markuplint/ml-spec");
6
6
  Object.defineProperty(exports, "getAttrSpecs", { enumerable: true, get: function () { return ml_spec_1.getAttrSpecs; } });
7
7
  (0, tslib_1.__exportStar)(require("./convert-ruleset"), exports);
8
8
  (0, tslib_1.__exportStar)(require("./ml-core"), exports);
9
9
  (0, tslib_1.__exportStar)(require("./ml-rule"), exports);
10
- var ml_parse_error_1 = require("./ml-error/ml-parse-error");
11
- Object.defineProperty(exports, "MLParseError", { enumerable: true, get: function () { return (0, tslib_1.__importDefault)(ml_parse_error_1).default; } });
12
10
  var ruleset_1 = require("./ruleset");
13
11
  Object.defineProperty(exports, "Ruleset", { enumerable: true, get: function () { return (0, tslib_1.__importDefault)(ruleset_1).default; } });
14
12
  (0, tslib_1.__exportStar)(require("./ml-dom"), exports);
package/lib/ml-core.d.ts CHANGED
@@ -1,18 +1,19 @@
1
1
  import type { MLFabric } from './types';
2
2
  import type { RuleConfigValue, Violation } from '@markuplint/ml-config';
3
+ import { ParserError } from '@markuplint/parser-utils';
3
4
  import { Document } from './ml-dom';
4
- import MLParseError from './ml-error/ml-parse-error';
5
5
  export declare type MLCoreParams = {
6
- sourceCode: string;
7
- filename: string;
8
- debug?: boolean;
6
+ sourceCode: string;
7
+ filename: string;
8
+ debug?: boolean;
9
9
  } & MLFabric;
10
10
  export declare class MLCore {
11
- #private;
12
- constructor({ parser, sourceCode, ruleset, rules, locale, schemas, parserOptions, filename, debug }: MLCoreParams);
13
- get document(): Document<RuleConfigValue, unknown> | MLParseError;
14
- verify(fix?: boolean): Promise<Violation[]>;
15
- setCode(sourceCode: string): void;
16
- update({ parser, ruleset, rules, locale, schemas, parserOptions }: Partial<MLFabric>): void;
17
- private _createDocument;
11
+ #private;
12
+ constructor({ parser, sourceCode, ruleset, rules, locale, schemas, parserOptions, filename, debug }: MLCoreParams);
13
+ get document(): ParserError | Document<RuleConfigValue, unknown>;
14
+ verify(fix?: boolean): Promise<Violation[]>;
15
+ setCode(sourceCode: string): void;
16
+ update({ parser, ruleset, rules, locale, schemas, parserOptions }: Partial<MLFabric>): void;
17
+ private _parse;
18
+ private _createDocument;
18
19
  }
package/lib/ml-core.js CHANGED
@@ -3,10 +3,9 @@ var _MLCore_filename, _MLCore_document, _MLCore_parser, _MLCore_sourceCode, _MLC
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.MLCore = void 0;
5
5
  const tslib_1 = require("tslib");
6
+ const parser_utils_1 = require("@markuplint/parser-utils");
6
7
  const debug_1 = require("./debug");
7
8
  const ml_dom_1 = require("./ml-dom");
8
- const ml_parse_error_1 = (0, tslib_1.__importDefault)(require("./ml-error/ml-parse-error"));
9
- const _1 = require(".");
10
9
  const resultLog = debug_1.log.extend('result');
11
10
  class MLCore {
12
11
  constructor({ parser, sourceCode, ruleset, rules, locale, schemas, parserOptions, filename, debug }) {
@@ -15,12 +14,15 @@ class MLCore {
15
14
  _MLCore_document.set(this, void 0);
16
15
  _MLCore_parser.set(this, void 0);
17
16
  _MLCore_sourceCode.set(this, void 0);
18
- _MLCore_ast.set(this, void 0);
17
+ _MLCore_ast.set(this, null);
19
18
  _MLCore_ruleset.set(this, void 0);
20
19
  _MLCore_locale.set(this, void 0);
21
20
  _MLCore_rules.set(this, void 0);
22
21
  _MLCore_schemas.set(this, void 0);
23
22
  _MLCore_ignoreFrontMatter.set(this, void 0);
23
+ if (debug) {
24
+ (0, debug_1.enableDebug)();
25
+ }
24
26
  (0, tslib_1.__classPrivateFieldSet)(this, _MLCore_parser, parser, "f");
25
27
  (0, tslib_1.__classPrivateFieldSet)(this, _MLCore_sourceCode, sourceCode, "f");
26
28
  (0, tslib_1.__classPrivateFieldSet)(this, _MLCore_ignoreFrontMatter, !!parserOptions.ignoreFrontMatter, "f");
@@ -31,12 +33,9 @@ class MLCore {
31
33
  }, "f");
32
34
  (0, tslib_1.__classPrivateFieldSet)(this, _MLCore_locale, locale, "f");
33
35
  (0, tslib_1.__classPrivateFieldSet)(this, _MLCore_schemas, schemas, "f");
34
- (0, tslib_1.__classPrivateFieldSet)(this, _MLCore_ast, (0, tslib_1.__classPrivateFieldGet)(this, _MLCore_parser, "f").parse((0, tslib_1.__classPrivateFieldGet)(this, _MLCore_sourceCode, "f"), 0, 0, 0, (0, tslib_1.__classPrivateFieldGet)(this, _MLCore_ignoreFrontMatter, "f")), "f");
35
36
  (0, tslib_1.__classPrivateFieldSet)(this, _MLCore_filename, filename, "f");
36
37
  (0, tslib_1.__classPrivateFieldSet)(this, _MLCore_rules, rules, "f");
37
- if (debug) {
38
- (0, _1.enableDebug)();
39
- }
38
+ this._parse();
40
39
  this._createDocument();
41
40
  }
42
41
  get document() {
@@ -45,7 +44,7 @@ class MLCore {
45
44
  async verify(fix = false) {
46
45
  (0, debug_1.log)('verify: start');
47
46
  const violations = [];
48
- if ((0, tslib_1.__classPrivateFieldGet)(this, _MLCore_document, "f") instanceof ml_parse_error_1.default) {
47
+ if ((0, tslib_1.__classPrivateFieldGet)(this, _MLCore_document, "f") instanceof parser_utils_1.ParserError) {
49
48
  violations.push({
50
49
  ruleId: 'parse-error',
51
50
  severity: 'error',
@@ -64,12 +63,12 @@ class MLCore {
64
63
  }
65
64
  (0, debug_1.log)('%s Rule: verify', rule.name);
66
65
  const results = await rule.verify((0, tslib_1.__classPrivateFieldGet)(this, _MLCore_document, "f"), (0, tslib_1.__classPrivateFieldGet)(this, _MLCore_locale, "f"), ruleInfo, fix).catch(e => {
67
- if (e instanceof ml_parse_error_1.default) {
66
+ if (e instanceof parser_utils_1.ParserError) {
68
67
  return e;
69
68
  }
70
69
  throw e;
71
70
  });
72
- if (results instanceof ml_parse_error_1.default) {
71
+ if (results instanceof parser_utils_1.ParserError) {
73
72
  (0, debug_1.log)('%s Rule: verify error %o', rule.name, results.message);
74
73
  violations.push({
75
74
  ruleId: 'parse-error',
@@ -104,7 +103,7 @@ class MLCore {
104
103
  }
105
104
  setCode(sourceCode) {
106
105
  (0, tslib_1.__classPrivateFieldSet)(this, _MLCore_sourceCode, sourceCode, "f");
107
- (0, tslib_1.__classPrivateFieldSet)(this, _MLCore_ast, (0, tslib_1.__classPrivateFieldGet)(this, _MLCore_parser, "f").parse((0, tslib_1.__classPrivateFieldGet)(this, _MLCore_sourceCode, "f"), 0, 0, 0, (0, tslib_1.__classPrivateFieldGet)(this, _MLCore_ignoreFrontMatter, "f")), "f");
106
+ this._parse();
108
107
  this._createDocument();
109
108
  }
110
109
  update({ parser, ruleset, rules, locale, schemas, parserOptions }) {
@@ -119,16 +118,38 @@ class MLCore {
119
118
  (0, tslib_1.__classPrivateFieldSet)(this, _MLCore_locale, locale !== null && locale !== void 0 ? locale : (0, tslib_1.__classPrivateFieldGet)(this, _MLCore_locale, "f"), "f");
120
119
  (0, tslib_1.__classPrivateFieldSet)(this, _MLCore_schemas, schemas !== null && schemas !== void 0 ? schemas : (0, tslib_1.__classPrivateFieldGet)(this, _MLCore_schemas, "f"), "f");
121
120
  if (parserOptions && parserOptions.ignoreFrontMatter !== (0, tslib_1.__classPrivateFieldGet)(this, _MLCore_ignoreFrontMatter, "f")) {
122
- (0, tslib_1.__classPrivateFieldSet)(this, _MLCore_ast, (0, tslib_1.__classPrivateFieldGet)(this, _MLCore_parser, "f").parse((0, tslib_1.__classPrivateFieldGet)(this, _MLCore_sourceCode, "f"), 0, 0, 0, (0, tslib_1.__classPrivateFieldGet)(this, _MLCore_ignoreFrontMatter, "f")), "f");
121
+ this._parse();
123
122
  }
124
123
  this._createDocument();
125
124
  }
125
+ _parse() {
126
+ try {
127
+ (0, tslib_1.__classPrivateFieldSet)(this, _MLCore_ast, (0, tslib_1.__classPrivateFieldGet)(this, _MLCore_parser, "f").parse((0, tslib_1.__classPrivateFieldGet)(this, _MLCore_sourceCode, "f"), 0, 0, 0, (0, tslib_1.__classPrivateFieldGet)(this, _MLCore_ignoreFrontMatter, "f")), "f");
128
+ }
129
+ catch (err) {
130
+ (0, debug_1.log)('Caught the parse error: %O', err);
131
+ (0, tslib_1.__classPrivateFieldSet)(this, _MLCore_ast, null, "f");
132
+ if (err instanceof parser_utils_1.ParserError) {
133
+ (0, tslib_1.__classPrivateFieldSet)(this, _MLCore_document, err, "f");
134
+ }
135
+ else {
136
+ throw err;
137
+ }
138
+ }
139
+ }
126
140
  _createDocument() {
141
+ if (!(0, tslib_1.__classPrivateFieldGet)(this, _MLCore_ast, "f")) {
142
+ return;
143
+ }
127
144
  try {
128
- (0, tslib_1.__classPrivateFieldSet)(this, _MLCore_document, new ml_dom_1.Document((0, tslib_1.__classPrivateFieldGet)(this, _MLCore_ast, "f"), (0, tslib_1.__classPrivateFieldGet)(this, _MLCore_ruleset, "f"), (0, tslib_1.__classPrivateFieldGet)(this, _MLCore_schemas, "f"), (0, tslib_1.__classPrivateFieldGet)(this, _MLCore_filename, "f")), "f");
145
+ (0, tslib_1.__classPrivateFieldSet)(this, _MLCore_document, new ml_dom_1.Document((0, tslib_1.__classPrivateFieldGet)(this, _MLCore_ast, "f"), (0, tslib_1.__classPrivateFieldGet)(this, _MLCore_ruleset, "f"), (0, tslib_1.__classPrivateFieldGet)(this, _MLCore_schemas, "f"), {
146
+ filename: (0, tslib_1.__classPrivateFieldGet)(this, _MLCore_filename, "f"),
147
+ tagNameCaseSensitive: (0, tslib_1.__classPrivateFieldGet)(this, _MLCore_parser, "f").tagNameCaseSensitive,
148
+ endTag: (0, tslib_1.__classPrivateFieldGet)(this, _MLCore_parser, "f").endTag,
149
+ }), "f");
129
150
  }
130
151
  catch (err) {
131
- if (err instanceof ml_parse_error_1.default) {
152
+ if (err instanceof parser_utils_1.ParserError) {
132
153
  (0, tslib_1.__classPrivateFieldSet)(this, _MLCore_document, err, "f");
133
154
  }
134
155
  else {
@@ -12,53 +12,70 @@ import { MLDOMDoctype } from './tokens';
12
12
  * markuplint DOM Document
13
13
  */
14
14
  export default class MLDOMDocument<T extends RuleConfigValue, O = null> {
15
- #private;
16
- /**
17
- * An array of markuplint DOM nodes
18
- */
19
- nodeList: ReadonlyArray<AnonymousNode<T, O>>;
20
- /**
21
- *
22
- */
23
- currentRule: MLRule<T, O> | null;
24
- /**
25
- *
26
- */
27
- isFragment: boolean;
28
- /**
29
- *
30
- */
31
- specs: Readonly<MLMLSpec>;
32
- /**
33
- *
34
- */
35
- readonly nodeStore: NodeStore;
36
- /**
37
- * It could be used in rule, make sure it is immutable
38
- */
39
- get filename(): string | undefined;
40
- /**
41
- *
42
- * @param ast node list of markuplint AST
43
- * @param ruleset ruleset object
44
- */
45
- constructor(ast: MLASTDocument, ruleset: Ruleset, schemas: readonly [MLMLSpec, ...ExtendedSpec[]], filename?: string);
46
- get doctype(): MLDOMDoctype<T, O> | null;
47
- get tree(): AnonymousNode<T, O>[];
48
- walk(walker: Walker<T, O>): Promise<void>;
49
- /**
50
- *
51
- * @param type
52
- * @param walker
53
- * @param skipWhenRuleIsDisabled
54
- */
55
- walkOn(type: 'Element', walker: Walker<T, O, MLDOMElement<T, O>>, skipWhenRuleIsDisabled?: boolean): Promise<void>;
56
- walkOn(type: 'Text', walker: Walker<T, O, MLDOMText<T, O>>, skipWhenRuleIsDisabled?: boolean): Promise<void>;
57
- walkOn(type: 'Comment', walker: Walker<T, O, MLDOMComment<T, O>>, skipWhenRuleIsDisabled?: boolean): Promise<void>;
58
- walkOn(type: 'ElementCloseTag', walker: Walker<T, O, MLDOMElementCloseTag<T, O>>, skipWhenRuleIsDisabled?: boolean): Promise<void>;
59
- setRule(rule: MLRule<T, O> | null): void;
60
- matchNodes(query: string): MLDOMElement<T, O>[];
61
- toString(): string;
62
- debugMap(): string[];
63
- private _ruleMapping;
15
+ #private;
16
+ /**
17
+ * An array of markuplint DOM nodes
18
+ */
19
+ nodeList: ReadonlyArray<AnonymousNode<T, O>>;
20
+ /**
21
+ *
22
+ */
23
+ currentRule: MLRule<T, O> | null;
24
+ /**
25
+ *
26
+ */
27
+ isFragment: boolean;
28
+ /**
29
+ *
30
+ */
31
+ specs: Readonly<MLMLSpec>;
32
+ /**
33
+ *
34
+ */
35
+ readonly endTag: 'xml' | 'omittable' | 'never';
36
+ /**
37
+ *
38
+ */
39
+ readonly nodeStore: NodeStore;
40
+ /**
41
+ * It could be used in rule, make sure it is immutable
42
+ */
43
+ get filename(): string | undefined;
44
+ /**
45
+ *
46
+ * @param ast node list of markuplint AST
47
+ * @param ruleset ruleset object
48
+ */
49
+ constructor(
50
+ ast: MLASTDocument,
51
+ ruleset: Ruleset,
52
+ schemas: readonly [MLMLSpec, ...ExtendedSpec[]],
53
+ options?: {
54
+ filename?: string;
55
+ tagNameCaseSensitive?: boolean;
56
+ endTag?: 'xml' | 'omittable' | 'never';
57
+ },
58
+ );
59
+ get doctype(): MLDOMDoctype<T, O> | null;
60
+ get tree(): AnonymousNode<T, O>[];
61
+ walk(walker: Walker<T, O>): Promise<void>;
62
+ /**
63
+ *
64
+ * @param type
65
+ * @param walker
66
+ * @param skipWhenRuleIsDisabled
67
+ */
68
+ walkOn(type: 'Element', walker: Walker<T, O, MLDOMElement<T, O>>, skipWhenRuleIsDisabled?: boolean): Promise<void>;
69
+ walkOn(type: 'Text', walker: Walker<T, O, MLDOMText<T, O>>, skipWhenRuleIsDisabled?: boolean): Promise<void>;
70
+ walkOn(type: 'Comment', walker: Walker<T, O, MLDOMComment<T, O>>, skipWhenRuleIsDisabled?: boolean): Promise<void>;
71
+ walkOn(
72
+ type: 'ElementCloseTag',
73
+ walker: Walker<T, O, MLDOMElementCloseTag<T, O>>,
74
+ skipWhenRuleIsDisabled?: boolean,
75
+ ): Promise<void>;
76
+ setRule(rule: MLRule<T, O> | null): void;
77
+ matchNodes(query: string): MLDOMElement<T, O>[];
78
+ toString(): string;
79
+ debugMap(): string[];
80
+ private _ruleMapping;
64
81
  }
@@ -23,7 +23,8 @@ class MLDOMDocument {
23
23
  * @param ast node list of markuplint AST
24
24
  * @param ruleset ruleset object
25
25
  */
26
- constructor(ast, ruleset, schemas, filename) {
26
+ constructor(ast, ruleset, schemas, options) {
27
+ var _a;
27
28
  /**
28
29
  *
29
30
  */
@@ -35,7 +36,8 @@ class MLDOMDocument {
35
36
  _MLDOMDocument_filename.set(this, void 0);
36
37
  this.isFragment = ast.isFragment;
37
38
  this.specs = (0, ml_spec_1.getSpec)(schemas);
38
- (0, tslib_1.__classPrivateFieldSet)(this, _MLDOMDocument_filename, filename, "f");
39
+ this.endTag = (_a = options === null || options === void 0 ? void 0 : options.endTag) !== null && _a !== void 0 ? _a : 'omittable';
40
+ (0, tslib_1.__classPrivateFieldSet)(this, _MLDOMDocument_filename, options === null || options === void 0 ? void 0 : options.filename, "f");
39
41
  // console.log(ast.nodeList.map((n, i) => `${i}: ${n.uuid} "${n.raw.trim()}"(${n.type})`));
40
42
  this.nodeList = Object.freeze(ast.nodeList.map(astNode => {
41
43
  if (astNode.type === 'endtag') {
@@ -43,7 +45,7 @@ class MLDOMDocument {
43
45
  }
44
46
  return (0, helper_1.createNode)(astNode, this);
45
47
  }));
46
- this._ruleMapping(ruleset);
48
+ this._ruleMapping(ruleset, options === null || options === void 0 ? void 0 : options.tagNameCaseSensitive);
47
49
  }
48
50
  /**
49
51
  * It could be used in rule, make sure it is immutable
@@ -124,7 +126,7 @@ class MLDOMDocument {
124
126
  debugMap() {
125
127
  return (0, debug_2.nodeListToDebugMaps)(this.nodeList, true);
126
128
  }
127
- _ruleMapping(ruleset) {
129
+ _ruleMapping(ruleset, tagNameCaseSensitive) {
128
130
  docLog('Rule Mapping');
129
131
  const ruleMapper = new rule_mapper_1.RuleMapper(this.nodeList);
130
132
  // add rules to node
@@ -170,7 +172,7 @@ class MLDOMDocument {
170
172
  : /**
171
173
  * v2.0.0 or later
172
174
  */
173
- (0, match_selector_1.matchSelector)(selectorTarget, selector);
175
+ (0, match_selector_1.matchSelector)(selectorTarget, selector, tagNameCaseSensitive);
174
176
  if (!matches.matched) {
175
177
  return;
176
178
  }
@@ -213,7 +215,7 @@ class MLDOMDocument {
213
215
  if (!selector) {
214
216
  return;
215
217
  }
216
- const matches = (0, match_selector_1.matchSelector)(selectorTarget, selector);
218
+ const matches = (0, match_selector_1.matchSelector)(selectorTarget, selector, tagNameCaseSensitive);
217
219
  if (!matches.matched) {
218
220
  return;
219
221
  }
@@ -3,4 +3,8 @@ import type { MappedNode } from './mapped-nodes';
3
3
  import type { MLASTAbstructNode } from '@markuplint/ml-ast';
4
4
  import type { RuleConfigValue } from '@markuplint/ml-config';
5
5
  import { MLDOMElement } from '../tokens';
6
- export declare function createNode<N extends MLASTAbstructNode, T extends RuleConfigValue, O = null>(astNode: N, document: Document<T, O>, pearNode?: MLDOMElement<T, O>): MappedNode<N, T, O>;
6
+ export declare function createNode<N extends MLASTAbstructNode, T extends RuleConfigValue, O = null>(
7
+ astNode: N,
8
+ document: Document<T, O>,
9
+ pearNode?: MLDOMElement<T, O>,
10
+ ): MappedNode<N, T, O>;
@@ -1,2 +1,5 @@
1
1
  import type { AnonymousNode } from '@markuplint/ml-core';
2
- export declare function nodeListToDebugMaps(nodeList: Readonly<AnonymousNode<any, any>[]>, withAttr?: boolean): string[];
2
+ export declare function nodeListToDebugMaps(
3
+ nodeList: Readonly<AnonymousNode<any, any>[]>,
4
+ withAttr?: boolean,
5
+ ): string[];
@@ -7,12 +7,12 @@ import type { AnonymousNode } from '../types';
7
7
  */
8
8
  export declare function getIndent(node: AnonymousNode<any, any>): MLDOMIndentation | null;
9
9
  declare class MLDOMIndentation {
10
- #private;
11
- readonly line: number;
12
- constructor(originTextNode: MLDOMText<any, any>, raw: string, line: number, parentNode: MLDOMNode<any, any>);
13
- get type(): 'tab' | 'space' | 'mixed' | 'none';
14
- get width(): number;
15
- get raw(): string;
16
- fix(raw: string): void;
10
+ #private;
11
+ readonly line: number;
12
+ constructor(originTextNode: MLDOMText<any, any>, raw: string, line: number, parentNode: MLDOMNode<any, any>);
13
+ get type(): 'tab' | 'space' | 'mixed' | 'none';
14
+ get width(): number;
15
+ get raw(): string;
16
+ fix(raw: string): void;
17
17
  }
18
18
  export {};
@@ -1,4 +1,52 @@
1
- import type { MLDOMAttribute, MLDOMComment, MLDOMDoctype, MLDOMElement, MLDOMElementCloseTag, MLDOMNode, MLDOMOmittedElement, MLDOMPreprocessorSpecificBlock, MLDOMText, MLDOMToken } from '../tokens';
2
- import type { MLASTAbstructNode, MLASTAttr, MLASTComment, MLASTDoctype, MLASTElement, MLASTElementCloseTag, MLASTNode, MLASTOmittedElement, MLASTParentNode, MLASTPreprocessorSpecificBlock, MLASTText, MLToken } from '@markuplint/ml-ast/';
1
+ import type {
2
+ MLDOMAttribute,
3
+ MLDOMComment,
4
+ MLDOMDoctype,
5
+ MLDOMElement,
6
+ MLDOMElementCloseTag,
7
+ MLDOMNode,
8
+ MLDOMOmittedElement,
9
+ MLDOMPreprocessorSpecificBlock,
10
+ MLDOMText,
11
+ MLDOMToken,
12
+ } from '../tokens';
13
+ import type {
14
+ MLASTAbstructNode,
15
+ MLASTAttr,
16
+ MLASTComment,
17
+ MLASTDoctype,
18
+ MLASTElement,
19
+ MLASTElementCloseTag,
20
+ MLASTNode,
21
+ MLASTOmittedElement,
22
+ MLASTParentNode,
23
+ MLASTPreprocessorSpecificBlock,
24
+ MLASTText,
25
+ MLToken,
26
+ } from '@markuplint/ml-ast/';
3
27
  import type { RuleConfigValue } from '@markuplint/ml-config';
4
- export declare type MappedNode<N, T extends RuleConfigValue, O = null> = N extends MLASTElement ? MLDOMElement<T, O> : N extends MLASTElementCloseTag ? MLDOMElementCloseTag<T, O> : N extends MLASTOmittedElement ? MLDOMOmittedElement<T, O> : N extends MLASTParentNode ? (MLDOMElement<T, O> | MLDOMOmittedElement<T, O>) : N extends MLASTComment ? MLDOMComment<T, O> : N extends MLASTText ? MLDOMText<T, O> : N extends MLASTDoctype ? MLDOMDoctype<T, O> : N extends MLASTNode ? MLDOMNode<T, O, MLASTNode> : N extends MLASTPreprocessorSpecificBlock ? MLDOMPreprocessorSpecificBlock<T, O> : N extends MLASTAbstructNode ? MLDOMNode<T, O, MLASTAbstructNode> : N extends MLASTAttr ? MLDOMAttribute : N extends MLToken ? MLDOMToken<MLToken> : never;
28
+ export declare type MappedNode<N, T extends RuleConfigValue, O = null> = N extends MLASTElement
29
+ ? MLDOMElement<T, O>
30
+ : N extends MLASTElementCloseTag
31
+ ? MLDOMElementCloseTag<T, O>
32
+ : N extends MLASTOmittedElement
33
+ ? MLDOMOmittedElement<T, O>
34
+ : N extends MLASTParentNode
35
+ ? MLDOMElement<T, O> | MLDOMOmittedElement<T, O>
36
+ : N extends MLASTComment
37
+ ? MLDOMComment<T, O>
38
+ : N extends MLASTText
39
+ ? MLDOMText<T, O>
40
+ : N extends MLASTDoctype
41
+ ? MLDOMDoctype<T, O>
42
+ : N extends MLASTNode
43
+ ? MLDOMNode<T, O, MLASTNode>
44
+ : N extends MLASTPreprocessorSpecificBlock
45
+ ? MLDOMPreprocessorSpecificBlock<T, O>
46
+ : N extends MLASTAbstructNode
47
+ ? MLDOMNode<T, O, MLASTAbstructNode>
48
+ : N extends MLASTAttr
49
+ ? MLDOMAttribute
50
+ : N extends MLToken
51
+ ? MLDOMToken<MLToken>
52
+ : never;
@@ -3,14 +3,18 @@ import type { Specificity } from './selector';
3
3
  import type { RegexSelector } from '@markuplint/ml-config';
4
4
  export declare type SelectorMatches = SelectorMatched | SelectorUnmatched;
5
5
  declare type SelectorMatched = {
6
- matched: true;
7
- selector: string;
8
- specificity: Specificity;
9
- data?: Record<string, string>;
6
+ matched: true;
7
+ selector: string;
8
+ specificity: Specificity;
9
+ data?: Record<string, string>;
10
10
  };
11
11
  declare type SelectorUnmatched = {
12
- matched: false;
12
+ matched: false;
13
13
  };
14
14
  declare type TargetElement = MLDOMAbstractElement<any, any>;
15
- export declare function matchSelector(el: TargetElement, selector: string | RegexSelector | undefined): SelectorMatches;
15
+ export declare function matchSelector(
16
+ el: TargetElement,
17
+ selector: string | RegexSelector | undefined,
18
+ tagNameCaseSensitive?: boolean,
19
+ ): SelectorMatches;
16
20
  export {};
@@ -3,14 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.matchSelector = void 0;
4
4
  const ml_config_1 = require("@markuplint/ml-config");
5
5
  const selector_1 = require("./selector");
6
- function matchSelector(el, selector) {
6
+ function matchSelector(el, selector, tagNameCaseSensitive) {
7
7
  if (!selector) {
8
8
  return {
9
9
  matched: false,
10
10
  };
11
11
  }
12
12
  if (typeof selector === 'string') {
13
- const sel = (0, selector_1.createSelector)(selector);
13
+ const sel = (0, selector_1.createSelector)(selector, tagNameCaseSensitive);
14
14
  const specificity = sel.match(el);
15
15
  if (specificity) {
16
16
  return {
@@ -3,7 +3,10 @@ import type { MappedNode } from './mapped-nodes';
3
3
  import type { MLASTAbstructNode } from '@markuplint/ml-ast';
4
4
  import type { RuleConfigValue } from '@markuplint/ml-config';
5
5
  export default class NodeStore {
6
- #private;
7
- setNode<A extends MLASTAbstructNode, T extends RuleConfigValue, O = null>(astNode: A, node: MLDOMNode<T, O, A>): void;
8
- getNode<N extends MLASTAbstructNode, T extends RuleConfigValue, O = null>(astNode: N): MappedNode<N, T, O>;
6
+ #private;
7
+ setNode<A extends MLASTAbstructNode, T extends RuleConfigValue, O = null>(
8
+ astNode: A,
9
+ node: MLDOMNode<T, O, A>,
10
+ ): void;
11
+ getNode<N extends MLASTAbstructNode, T extends RuleConfigValue, O = null>(astNode: N): MappedNode<N, T, O>;
9
12
  }
@@ -2,7 +2,7 @@
2
2
  var _NodeStore_store;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  const tslib_1 = require("tslib");
5
- const ml_parse_error_1 = (0, tslib_1.__importDefault)(require("../../ml-error/ml-parse-error"));
5
+ const parser_utils_1 = require("@markuplint/parser-utils");
6
6
  class NodeStore {
7
7
  constructor() {
8
8
  _NodeStore_store.set(this, new Map());
@@ -14,7 +14,12 @@ class NodeStore {
14
14
  // console.log(`Get: ${astNode.uuid} -> ${astNode.raw.trim()}(${astNode.type})`);
15
15
  const node = (0, tslib_1.__classPrivateFieldGet)(this, _NodeStore_store, "f").get(astNode.uuid);
16
16
  if (!node) {
17
- throw new ml_parse_error_1.default(astNode.startLine, astNode.startCol, astNode.raw, astNode.nodeName);
17
+ throw new parser_utils_1.ParserError('Broke mapping nodes.', {
18
+ line: astNode.startLine,
19
+ col: astNode.startCol,
20
+ raw: astNode.raw,
21
+ nodeName: astNode.nodeName,
22
+ });
18
23
  }
19
24
  return node;
20
25
  }
@@ -1,11 +1,11 @@
1
1
  import type MLDOMAbstractElement from '../tokens/abstract-element';
2
2
  export declare type Specificity = [number, number, number];
3
- export declare function createSelector(selector: string): Selector;
3
+ export declare function createSelector(selector: string, tagNameCaseSensitive?: boolean): Selector;
4
4
  export declare function compareSpecificity(a: Specificity, b: Specificity): 0 | 1 | -1;
5
5
  declare type TargetElement = MLDOMAbstractElement<any, any>;
6
6
  declare class Selector {
7
- #private;
8
- constructor(selector: string);
9
- match(el: TargetElement, caller?: TargetElement | null): Specificity | false;
7
+ #private;
8
+ constructor(selector: string, tagNameCaseSensitive: boolean);
9
+ match(el: TargetElement, caller?: TargetElement | null): Specificity | false;
10
10
  }
11
11
  export {};