@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.
- package/README.md +0 -15
- package/lib/index.d.ts +0 -1
- package/lib/index.js +1 -3
- package/lib/ml-core.d.ts +12 -11
- package/lib/ml-core.js +35 -14
- package/lib/ml-dom/document.d.ts +66 -49
- package/lib/ml-dom/document.js +8 -6
- package/lib/ml-dom/helper/create-node.d.ts +5 -1
- package/lib/ml-dom/helper/debug.d.ts +4 -1
- package/lib/ml-dom/helper/getIndent.d.ts +7 -7
- package/lib/ml-dom/helper/mapped-nodes.d.ts +51 -3
- package/lib/ml-dom/helper/match-selector.d.ts +10 -6
- package/lib/ml-dom/helper/match-selector.js +2 -2
- package/lib/ml-dom/helper/node-store.d.ts +6 -3
- package/lib/ml-dom/helper/node-store.js +7 -2
- package/lib/ml-dom/helper/selector.d.ts +4 -4
- package/lib/ml-dom/helper/selector.js +30 -22
- package/lib/ml-dom/helper/walkers.d.ts +7 -2
- package/lib/ml-dom/index.d.ts +10 -1
- package/lib/ml-dom/rule-mapper.d.ts +7 -7
- package/lib/ml-dom/tokens/abstract-element.d.ts +40 -36
- package/lib/ml-dom/tokens/attribute.d.ts +36 -36
- package/lib/ml-dom/tokens/comment.d.ts +5 -2
- package/lib/ml-dom/tokens/doctype.d.ts +10 -7
- package/lib/ml-dom/tokens/element-close-tag.d.ts +19 -16
- package/lib/ml-dom/tokens/element.d.ts +18 -15
- package/lib/ml-dom/tokens/node.d.ts +23 -16
- package/lib/ml-dom/tokens/omitted-element.d.ts +7 -4
- package/lib/ml-dom/tokens/preprocessor-specific-attribute.d.ts +20 -20
- package/lib/ml-dom/tokens/preprocessor-specific-block.d.ts +8 -5
- package/lib/ml-dom/tokens/text.d.ts +9 -6
- package/lib/ml-dom/tokens/token.d.ts +13 -13
- package/lib/ml-dom/types.d.ts +35 -13
- package/lib/ml-error/ml-parse-error.d.ts +5 -5
- package/lib/ml-rule/create-test-rule.d.ts +5 -3
- package/lib/ml-rule/ml-rule-context.d.ts +52 -44
- package/lib/ml-rule/ml-rule.d.ts +33 -23
- package/lib/ml-rule/types.d.ts +5 -5
- package/lib/plugin/types.d.ts +5 -5
- package/lib/ruleset/index.d.ts +4 -4
- package/lib/test/index.d.ts +14 -5
- package/lib/types.d.ts +6 -6
- package/lib/utils/get-location-from-chars.d.ts +9 -4
- package/markuplint-recommended.json +13 -6
- package/package.json +10 -9
- 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.
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
sourceCode: string;
|
|
7
|
+
filename: string;
|
|
8
|
+
debug?: boolean;
|
|
9
9
|
} & MLFabric;
|
|
10
10
|
export declare class MLCore {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
|
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
|
|
66
|
+
if (e instanceof parser_utils_1.ParserError) {
|
|
68
67
|
return e;
|
|
69
68
|
}
|
|
70
69
|
throw e;
|
|
71
70
|
});
|
|
72
|
-
if (results instanceof
|
|
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
|
-
|
|
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
|
-
|
|
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"),
|
|
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
|
|
152
|
+
if (err instanceof parser_utils_1.ParserError) {
|
|
132
153
|
(0, tslib_1.__classPrivateFieldSet)(this, _MLCore_document, err, "f");
|
|
133
154
|
}
|
|
134
155
|
else {
|
package/lib/ml-dom/document.d.ts
CHANGED
|
@@ -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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
}
|
package/lib/ml-dom/document.js
CHANGED
|
@@ -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,
|
|
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
|
|
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>(
|
|
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(
|
|
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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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 {
|
|
2
|
-
|
|
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
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
matched: true;
|
|
7
|
+
selector: string;
|
|
8
|
+
specificity: Specificity;
|
|
9
|
+
data?: Record<string, string>;
|
|
10
10
|
};
|
|
11
11
|
declare type SelectorUnmatched = {
|
|
12
|
-
|
|
12
|
+
matched: false;
|
|
13
13
|
};
|
|
14
14
|
declare type TargetElement = MLDOMAbstractElement<any, any>;
|
|
15
|
-
export declare function matchSelector(
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
#private;
|
|
8
|
+
constructor(selector: string, tagNameCaseSensitive: boolean);
|
|
9
|
+
match(el: TargetElement, caller?: TargetElement | null): Specificity | false;
|
|
10
10
|
}
|
|
11
11
|
export {};
|