@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.
- package/README.md +12 -3
- package/lib/configs.browser.d.ts +2 -0
- package/lib/configs.browser.js +12 -0
- package/lib/configs.js +4 -1
- package/lib/index.d.ts +11 -1
- package/lib/ml-core.d.ts +24 -13
- package/lib/ml-core.js +16 -10
- package/lib/ml-dom/helper/accname.d.ts +2 -1
- package/lib/ml-dom/helper/accname.js +62 -2
- package/lib/ml-dom/helper/create-node.d.ts +7 -3
- package/lib/ml-dom/helper/create-node.js +4 -2
- package/lib/ml-dom/helper/debug.js +10 -5
- package/lib/ml-dom/helper/getIndent.d.ts +7 -7
- package/lib/ml-dom/helper/getIndent.js +18 -12
- package/lib/ml-dom/helper/walkers.d.ts +15 -5
- package/lib/ml-dom/helper/walkers.js +22 -16
- package/lib/ml-dom/index.d.ts +1 -0
- package/lib/ml-dom/manipulations/child-node-methods.d.ts +20 -7
- package/lib/ml-dom/manipulations/child-node-methods.js +24 -6
- package/lib/ml-dom/manipulations/get-children.d.ts +4 -2
- package/lib/ml-dom/manipulations/get-children.js +3 -1
- package/lib/ml-dom/node/attr.d.ts +94 -91
- package/lib/ml-dom/node/attr.js +26 -16
- package/lib/ml-dom/node/block.d.ts +36 -32
- package/lib/ml-dom/node/block.js +14 -4
- package/lib/ml-dom/node/character-data.d.ts +61 -54
- package/lib/ml-dom/node/character-data.js +9 -3
- package/lib/ml-dom/node/child-node.d.ts +10 -3
- package/lib/ml-dom/node/child-node.js +3 -1
- package/lib/ml-dom/node/comment.d.ts +16 -13
- package/lib/ml-dom/node/document-fragment.d.ts +24 -21
- package/lib/ml-dom/node/document-type.d.ts +35 -32
- package/lib/ml-dom/node/document-type.js +14 -4
- package/lib/ml-dom/node/document.d.ts +1608 -1545
- package/lib/ml-dom/node/document.js +125 -33
- package/lib/ml-dom/node/dom-token-list.d.ts +27 -27
- package/lib/ml-dom/node/dom-token-list.js +15 -13
- package/lib/ml-dom/node/element.d.ts +1906 -1817
- package/lib/ml-dom/node/element.js +345 -75
- package/lib/ml-dom/node/named-node-map.d.ts +45 -40
- package/lib/ml-dom/node/named-node-map.js +13 -5
- package/lib/ml-dom/node/node-list.d.ts +10 -4
- package/lib/ml-dom/node/node-list.js +25 -5
- package/lib/ml-dom/node/node-store.d.ts +10 -5
- package/lib/ml-dom/node/node-store.js +19 -1
- package/lib/ml-dom/node/node.d.ts +494 -467
- package/lib/ml-dom/node/node.js +89 -47
- package/lib/ml-dom/node/parent-node.d.ts +68 -59
- package/lib/ml-dom/node/parent-node.js +15 -6
- package/lib/ml-dom/node/rule-mapper.d.ts +9 -9
- package/lib/ml-dom/node/rule-mapper.js +11 -3
- package/lib/ml-dom/node/text.d.ts +50 -47
- package/lib/ml-dom/node/types.d.ts +94 -16
- package/lib/ml-dom/node/unexpected-call-error.d.ts +1 -2
- package/lib/ml-dom/token/token.d.ts +44 -44
- package/lib/ml-rule/create-rule.d.ts +4 -2
- package/lib/ml-rule/create-test-rule.d.ts +6 -4
- package/lib/ml-rule/ml-rule-context.d.ts +58 -49
- package/lib/ml-rule/ml-rule-context.js +23 -4
- package/lib/ml-rule/ml-rule.d.ts +36 -26
- package/lib/ml-rule/ml-rule.js +39 -34
- package/lib/ml-rule/types.d.ts +35 -17
- package/lib/plugin/plugin.d.ts +3 -1
- package/lib/plugin/types.d.ts +9 -9
- package/lib/ruleset/index.d.ts +4 -4
- package/lib/ruleset/index.js +4 -4
- package/lib/test/index.d.ts +21 -8
- package/lib/test/index.js +6 -4
- package/lib/types.d.ts +12 -10
- package/lib/utils/get-location-from-chars.d.ts +9 -4
- package/package.json +21 -15
- package/test/ml-dom/helper/accname.spec.js +85 -0
- package/test/ml-dom/helper/create-node.spec.js +18 -0
- package/test/ml-dom/index.spec.js +680 -0
- package/lib/ml-dom/document.d.ts +0 -94
- package/lib/ml-dom/document.js +0 -273
- package/lib/ml-dom/helper/index.d.ts +0 -4
- package/lib/ml-dom/helper/index.js +0 -12
- package/lib/ml-dom/helper/mapped-nodes.d.ts +0 -52
- package/lib/ml-dom/helper/mapped-nodes.js +0 -2
- package/lib/ml-dom/helper/match-selector.d.ts +0 -20
- package/lib/ml-dom/helper/match-selector.js +0 -233
- package/lib/ml-dom/helper/node-store.d.ts +0 -12
- package/lib/ml-dom/helper/node-store.js +0 -28
- package/lib/ml-dom/helper/selector.d.ts +0 -11
- package/lib/ml-dom/helper/selector.js +0 -549
- package/lib/ml-dom/rule-mapper.d.ts +0 -16
- package/lib/ml-dom/rule-mapper.js +0 -57
- package/lib/ml-dom/tokens/abstract-element.d.ts +0 -54
- package/lib/ml-dom/tokens/abstract-element.js +0 -249
- package/lib/ml-dom/tokens/attribute.d.ts +0 -42
- package/lib/ml-dom/tokens/attribute.js +0 -85
- package/lib/ml-dom/tokens/comment.d.ts +0 -12
- package/lib/ml-dom/tokens/comment.js +0 -15
- package/lib/ml-dom/tokens/doctype.d.ts +0 -18
- package/lib/ml-dom/tokens/doctype.js +0 -32
- package/lib/ml-dom/tokens/element-close-tag.d.ts +0 -27
- package/lib/ml-dom/tokens/element-close-tag.js +0 -45
- package/lib/ml-dom/tokens/element.d.ts +0 -26
- package/lib/ml-dom/tokens/element.js +0 -66
- package/lib/ml-dom/tokens/index.d.ts +0 -10
- package/lib/ml-dom/tokens/index.js +0 -26
- package/lib/ml-dom/tokens/node.d.ts +0 -46
- package/lib/ml-dom/tokens/node.js +0 -126
- package/lib/ml-dom/tokens/omitted-element.d.ts +0 -13
- package/lib/ml-dom/tokens/omitted-element.js +0 -12
- package/lib/ml-dom/tokens/preprocessor-specific-attribute.d.ts +0 -24
- package/lib/ml-dom/tokens/preprocessor-specific-attribute.js +0 -37
- package/lib/ml-dom/tokens/preprocessor-specific-block.d.ts +0 -14
- package/lib/ml-dom/tokens/preprocessor-specific-block.js +0 -16
- package/lib/ml-dom/tokens/text.d.ts +0 -19
- package/lib/ml-dom/tokens/text.js +0 -26
- package/lib/ml-dom/tokens/token.d.ts +0 -16
- package/lib/ml-dom/tokens/token.js +0 -55
- package/lib/ml-dom/types.d.ts +0 -49
- package/lib/ml-dom/types.js +0 -2
- package/lib/selector/is-pure-html-element.d.ts +0 -1
- package/lib/selector/is-pure-html-element.js +0 -7
- package/lib/selector/match-selector.d.ts +0 -14
- package/lib/selector/match-selector.js +0 -230
- package/lib/selector/selector.d.ts +0 -9
- package/lib/selector/selector.js +0 -561
- package/tsconfig.test.json +0 -3
- package/tsconfig.tsbuildinfo +0 -1
package/README.md
CHANGED
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
# @markuplint/ml-core
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@markuplint/ml-core)
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
|
|
5
|
+
## Documentation
|
|
6
|
+
|
|
7
|
+
- [API Document](https://markuplint.dev/api-docs)
|
|
6
8
|
|
|
7
9
|
## Install
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
[`markuplint`](https://www.npmjs.com/package/markuplint) package includes this package.
|
|
12
|
+
|
|
13
|
+
<details>
|
|
14
|
+
<summary>If you are installing purposely, how below:</summary>
|
|
15
|
+
|
|
16
|
+
```shell
|
|
10
17
|
$ npm install @markuplint/ml-core
|
|
11
18
|
|
|
12
19
|
$ yarn add @markuplint/ml-core
|
|
13
20
|
```
|
|
21
|
+
|
|
22
|
+
</details>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPreset = void 0;
|
|
4
|
+
async function getPreset(name) {
|
|
5
|
+
const res = await fetch(`@markuplint/config-presets/preset.${name}.json`).catch(() => new Error());
|
|
6
|
+
if (res instanceof Error) {
|
|
7
|
+
throw new ReferenceError(`Preset markuplint:${name} is not found`);
|
|
8
|
+
}
|
|
9
|
+
const json = await res.json();
|
|
10
|
+
return json;
|
|
11
|
+
}
|
|
12
|
+
exports.getPreset = getPreset;
|
package/lib/configs.js
CHANGED
|
@@ -25,7 +25,10 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.getPreset = void 0;
|
|
27
27
|
async function getPreset(name) {
|
|
28
|
-
const json = await Promise.resolve(
|
|
28
|
+
const json = await Promise.resolve(`${`@markuplint/config-presets/preset.${name}.json`}`).then(s => __importStar(require(s))).catch(() => new Error());
|
|
29
|
+
if (json instanceof Error) {
|
|
30
|
+
throw new ReferenceError(`Preset markuplint:${name} is not found`);
|
|
31
|
+
}
|
|
29
32
|
return json.default;
|
|
30
33
|
}
|
|
31
34
|
exports.getPreset = getPreset;
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
export { RuleInfo, RuleConfig, RuleConfigValue } from '@markuplint/ml-config';
|
|
2
|
-
export {
|
|
2
|
+
export {
|
|
3
|
+
ariaSpecs,
|
|
4
|
+
contentModelCategoryToTagNames,
|
|
5
|
+
getAttrSpecs,
|
|
6
|
+
getComputedRole,
|
|
7
|
+
getImplicitRole,
|
|
8
|
+
getPermittedRoles,
|
|
9
|
+
getRoleSpec,
|
|
10
|
+
getSpec,
|
|
11
|
+
resolveNamespace,
|
|
12
|
+
} from '@markuplint/ml-spec';
|
|
3
13
|
export { default as Ruleset } from './ruleset';
|
|
4
14
|
export { enableDebug } from './debug';
|
|
5
15
|
export { getIndent } from './ml-dom/helper/getIndent';
|
package/lib/ml-core.d.ts
CHANGED
|
@@ -1,19 +1,30 @@
|
|
|
1
1
|
import type { MLFabric } from './types';
|
|
2
|
-
import type { RuleConfigValue, Violation } from '@markuplint/ml-config';
|
|
2
|
+
import type { PlainData, RuleConfigValue, Violation } from '@markuplint/ml-config';
|
|
3
3
|
import { ParserError } from '@markuplint/parser-utils';
|
|
4
4
|
import { Document } from './ml-dom';
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
export type MLCoreParams = {
|
|
6
|
+
readonly sourceCode: string;
|
|
7
|
+
readonly filename: string;
|
|
8
|
+
readonly debug?: boolean;
|
|
9
9
|
} & MLFabric;
|
|
10
10
|
export declare class MLCore {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
11
|
+
#private;
|
|
12
|
+
constructor({
|
|
13
|
+
parser,
|
|
14
|
+
sourceCode,
|
|
15
|
+
ruleset,
|
|
16
|
+
rules,
|
|
17
|
+
locale,
|
|
18
|
+
schemas,
|
|
19
|
+
parserOptions,
|
|
20
|
+
pretenders,
|
|
21
|
+
filename,
|
|
22
|
+
debug,
|
|
23
|
+
}: MLCoreParams);
|
|
24
|
+
get document(): ParserError | Document<RuleConfigValue, PlainData>;
|
|
25
|
+
setCode(sourceCode: string): void;
|
|
26
|
+
update({ parser, ruleset, rules, locale, schemas, parserOptions }: Partial<MLFabric>): void;
|
|
27
|
+
verify(fix?: boolean): Promise<Violation[]>;
|
|
28
|
+
private _createDocument;
|
|
29
|
+
private _parse;
|
|
19
30
|
}
|
package/lib/ml-core.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var _MLCore_ast, _MLCore_document, _MLCore_filename,
|
|
2
|
+
var _MLCore_ast, _MLCore_document, _MLCore_filename, _MLCore_locale, _MLCore_parser, _MLCore_parserOptions, _MLCore_pretenders, _MLCore_rules, _MLCore_ruleset, _MLCore_schemas, _MLCore_sourceCode;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.MLCore = void 0;
|
|
5
5
|
const tslib_1 = require("tslib");
|
|
@@ -8,14 +8,15 @@ const debug_1 = require("./debug");
|
|
|
8
8
|
const ml_dom_1 = require("./ml-dom");
|
|
9
9
|
const resultLog = debug_1.log.extend('result');
|
|
10
10
|
class MLCore {
|
|
11
|
-
constructor({ parser, sourceCode, ruleset, rules, locale, schemas, parserOptions, filename, debug }) {
|
|
11
|
+
constructor({ parser, sourceCode, ruleset, rules, locale, schemas, parserOptions, pretenders, filename, debug, }) {
|
|
12
12
|
var _a, _b, _c;
|
|
13
13
|
_MLCore_ast.set(this, null);
|
|
14
14
|
_MLCore_document.set(this, void 0);
|
|
15
15
|
_MLCore_filename.set(this, void 0);
|
|
16
|
-
_MLCore_ignoreFrontMatter.set(this, void 0);
|
|
17
16
|
_MLCore_locale.set(this, void 0);
|
|
18
17
|
_MLCore_parser.set(this, void 0);
|
|
18
|
+
_MLCore_parserOptions.set(this, void 0);
|
|
19
|
+
_MLCore_pretenders.set(this, void 0);
|
|
19
20
|
_MLCore_rules.set(this, void 0);
|
|
20
21
|
_MLCore_ruleset.set(this, void 0);
|
|
21
22
|
_MLCore_schemas.set(this, void 0);
|
|
@@ -25,7 +26,7 @@ class MLCore {
|
|
|
25
26
|
}
|
|
26
27
|
tslib_1.__classPrivateFieldSet(this, _MLCore_parser, parser, "f");
|
|
27
28
|
tslib_1.__classPrivateFieldSet(this, _MLCore_sourceCode, sourceCode, "f");
|
|
28
|
-
tslib_1.__classPrivateFieldSet(this,
|
|
29
|
+
tslib_1.__classPrivateFieldSet(this, _MLCore_parserOptions, parserOptions, "f");
|
|
29
30
|
tslib_1.__classPrivateFieldSet(this, _MLCore_ruleset, {
|
|
30
31
|
rules: (_a = ruleset.rules) !== null && _a !== void 0 ? _a : {},
|
|
31
32
|
nodeRules: (_b = ruleset.nodeRules) !== null && _b !== void 0 ? _b : [],
|
|
@@ -34,7 +35,8 @@ class MLCore {
|
|
|
34
35
|
tslib_1.__classPrivateFieldSet(this, _MLCore_locale, locale, "f");
|
|
35
36
|
tslib_1.__classPrivateFieldSet(this, _MLCore_schemas, schemas, "f");
|
|
36
37
|
tslib_1.__classPrivateFieldSet(this, _MLCore_filename, filename, "f");
|
|
37
|
-
tslib_1.__classPrivateFieldSet(this, _MLCore_rules, rules, "f");
|
|
38
|
+
tslib_1.__classPrivateFieldSet(this, _MLCore_rules, rules.slice(), "f");
|
|
39
|
+
tslib_1.__classPrivateFieldSet(this, _MLCore_pretenders, pretenders.slice(), "f");
|
|
38
40
|
this._parse();
|
|
39
41
|
this._createDocument();
|
|
40
42
|
}
|
|
@@ -47,17 +49,19 @@ class MLCore {
|
|
|
47
49
|
this._createDocument();
|
|
48
50
|
}
|
|
49
51
|
update({ parser, ruleset, rules, locale, schemas, parserOptions }) {
|
|
50
|
-
var _a, _b, _c;
|
|
52
|
+
var _a, _b, _c, _d;
|
|
51
53
|
tslib_1.__classPrivateFieldSet(this, _MLCore_parser, parser !== null && parser !== void 0 ? parser : tslib_1.__classPrivateFieldGet(this, _MLCore_parser, "f"), "f");
|
|
52
54
|
tslib_1.__classPrivateFieldSet(this, _MLCore_ruleset, {
|
|
53
55
|
rules: (_a = ruleset === null || ruleset === void 0 ? void 0 : ruleset.rules) !== null && _a !== void 0 ? _a : tslib_1.__classPrivateFieldGet(this, _MLCore_ruleset, "f").rules,
|
|
54
56
|
nodeRules: (_b = ruleset === null || ruleset === void 0 ? void 0 : ruleset.nodeRules) !== null && _b !== void 0 ? _b : tslib_1.__classPrivateFieldGet(this, _MLCore_ruleset, "f").nodeRules,
|
|
55
57
|
childNodeRules: (_c = ruleset === null || ruleset === void 0 ? void 0 : ruleset.childNodeRules) !== null && _c !== void 0 ? _c : tslib_1.__classPrivateFieldGet(this, _MLCore_ruleset, "f").childNodeRules,
|
|
56
58
|
}, "f");
|
|
57
|
-
tslib_1.__classPrivateFieldSet(this, _MLCore_rules, rules !== null &&
|
|
59
|
+
tslib_1.__classPrivateFieldSet(this, _MLCore_rules, (_d = rules === null || rules === void 0 ? void 0 : rules.slice()) !== null && _d !== void 0 ? _d : tslib_1.__classPrivateFieldGet(this, _MLCore_rules, "f"), "f");
|
|
58
60
|
tslib_1.__classPrivateFieldSet(this, _MLCore_locale, locale !== null && locale !== void 0 ? locale : tslib_1.__classPrivateFieldGet(this, _MLCore_locale, "f"), "f");
|
|
59
61
|
tslib_1.__classPrivateFieldSet(this, _MLCore_schemas, schemas !== null && schemas !== void 0 ? schemas : tslib_1.__classPrivateFieldGet(this, _MLCore_schemas, "f"), "f");
|
|
60
|
-
if (parserOptions &&
|
|
62
|
+
if (parserOptions &&
|
|
63
|
+
(parserOptions.ignoreFrontMatter !== tslib_1.__classPrivateFieldGet(this, _MLCore_parserOptions, "f").ignoreFrontMatter ||
|
|
64
|
+
parserOptions.authoredElementName !== tslib_1.__classPrivateFieldGet(this, _MLCore_parserOptions, "f").authoredElementName)) {
|
|
61
65
|
this._parse();
|
|
62
66
|
}
|
|
63
67
|
this._createDocument();
|
|
@@ -130,6 +134,8 @@ class MLCore {
|
|
|
130
134
|
tslib_1.__classPrivateFieldSet(this, _MLCore_document, new ml_dom_1.Document(tslib_1.__classPrivateFieldGet(this, _MLCore_ast, "f"), tslib_1.__classPrivateFieldGet(this, _MLCore_ruleset, "f"), tslib_1.__classPrivateFieldGet(this, _MLCore_schemas, "f"), {
|
|
131
135
|
filename: tslib_1.__classPrivateFieldGet(this, _MLCore_filename, "f"),
|
|
132
136
|
endTag: tslib_1.__classPrivateFieldGet(this, _MLCore_parser, "f").endTag,
|
|
137
|
+
booleanish: tslib_1.__classPrivateFieldGet(this, _MLCore_parser, "f").booleanish,
|
|
138
|
+
pretenders: tslib_1.__classPrivateFieldGet(this, _MLCore_pretenders, "f"),
|
|
133
139
|
}), "f");
|
|
134
140
|
}
|
|
135
141
|
catch (err) {
|
|
@@ -143,7 +149,7 @@ class MLCore {
|
|
|
143
149
|
}
|
|
144
150
|
_parse() {
|
|
145
151
|
try {
|
|
146
|
-
tslib_1.__classPrivateFieldSet(this, _MLCore_ast, tslib_1.__classPrivateFieldGet(this, _MLCore_parser, "f").parse(tslib_1.__classPrivateFieldGet(this, _MLCore_sourceCode, "f"),
|
|
152
|
+
tslib_1.__classPrivateFieldSet(this, _MLCore_ast, tslib_1.__classPrivateFieldGet(this, _MLCore_parser, "f").parse(tslib_1.__classPrivateFieldGet(this, _MLCore_sourceCode, "f"), tslib_1.__classPrivateFieldGet(this, _MLCore_parserOptions, "f")), "f");
|
|
147
153
|
}
|
|
148
154
|
catch (err) {
|
|
149
155
|
(0, debug_1.log)('Caught the parse error: %O', err);
|
|
@@ -158,4 +164,4 @@ class MLCore {
|
|
|
158
164
|
}
|
|
159
165
|
}
|
|
160
166
|
exports.MLCore = MLCore;
|
|
161
|
-
_MLCore_ast = new WeakMap(), _MLCore_document = new WeakMap(), _MLCore_filename = new WeakMap(),
|
|
167
|
+
_MLCore_ast = new WeakMap(), _MLCore_document = new WeakMap(), _MLCore_filename = new WeakMap(), _MLCore_locale = new WeakMap(), _MLCore_parser = new WeakMap(), _MLCore_parserOptions = new WeakMap(), _MLCore_pretenders = new WeakMap(), _MLCore_rules = new WeakMap(), _MLCore_ruleset = new WeakMap(), _MLCore_schemas = new WeakMap(), _MLCore_sourceCode = new WeakMap();
|
|
@@ -4,7 +4,40 @@ exports.getAccname = void 0;
|
|
|
4
4
|
const ml_spec_1 = require("@markuplint/ml-spec");
|
|
5
5
|
const debug_1 = require("../../debug");
|
|
6
6
|
const accnameLog = debug_1.log.extend('accname');
|
|
7
|
-
function getAccname(
|
|
7
|
+
function getAccname(
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
9
|
+
el, version) {
|
|
10
|
+
let accname = safeGet(el);
|
|
11
|
+
if (accname) {
|
|
12
|
+
return accname;
|
|
13
|
+
}
|
|
14
|
+
accname = getAccnameFromPretender(el);
|
|
15
|
+
if (accname) {
|
|
16
|
+
return accname;
|
|
17
|
+
}
|
|
18
|
+
if (isHidden(el)) {
|
|
19
|
+
return '';
|
|
20
|
+
}
|
|
21
|
+
if (isFromContent(el, version)) {
|
|
22
|
+
return Array.from(el.childNodes)
|
|
23
|
+
.map(child => {
|
|
24
|
+
var _a;
|
|
25
|
+
if (child.is(child.ELEMENT_NODE)) {
|
|
26
|
+
return getAccname(child, version);
|
|
27
|
+
}
|
|
28
|
+
if (child.is(child.TEXT_NODE)) {
|
|
29
|
+
return (_a = child.textContent) !== null && _a !== void 0 ? _a : '';
|
|
30
|
+
}
|
|
31
|
+
return '';
|
|
32
|
+
})
|
|
33
|
+
.join('');
|
|
34
|
+
}
|
|
35
|
+
return '';
|
|
36
|
+
}
|
|
37
|
+
exports.getAccname = getAccname;
|
|
38
|
+
function safeGet(
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
40
|
+
el) {
|
|
8
41
|
try {
|
|
9
42
|
const name = (0, ml_spec_1.getAccname)(el);
|
|
10
43
|
return name;
|
|
@@ -15,4 +48,31 @@ function getAccname(el) {
|
|
|
15
48
|
return '';
|
|
16
49
|
}
|
|
17
50
|
}
|
|
18
|
-
|
|
51
|
+
function getAccnameFromPretender(
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
53
|
+
el) {
|
|
54
|
+
var _a, _b;
|
|
55
|
+
if (((_a = el.pretenderContext) === null || _a === void 0 ? void 0 : _a.type) === 'pretender' && ((_b = el.pretenderContext.aria) === null || _b === void 0 ? void 0 : _b.name) != null) {
|
|
56
|
+
if (typeof el.pretenderContext.aria.name === 'boolean') {
|
|
57
|
+
return 'some-name(Pretender Options)';
|
|
58
|
+
}
|
|
59
|
+
const attrName = el.pretenderContext.aria.name.fromAttr;
|
|
60
|
+
const attrValue = el.getAttributePretended(attrName);
|
|
61
|
+
if (attrValue) {
|
|
62
|
+
return attrValue;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return '';
|
|
66
|
+
}
|
|
67
|
+
function isHidden(
|
|
68
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
69
|
+
el) {
|
|
70
|
+
return el.getAttribute('aria-hidden') === 'true' || el.hasAttribute('hidden');
|
|
71
|
+
}
|
|
72
|
+
function isFromContent(
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
74
|
+
el, version) {
|
|
75
|
+
var _a;
|
|
76
|
+
const role = (0, ml_spec_1.getComputedRole)(el.ownerMLDocument.specs, el, version);
|
|
77
|
+
return !!((_a = role.role) === null || _a === void 0 ? void 0 : _a.accessibleNameFromContent);
|
|
78
|
+
}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import type { MLDocument } from '../node/document';
|
|
2
2
|
import type { MappedNode } from '../node/types';
|
|
3
|
-
import type {
|
|
4
|
-
import type { RuleConfigValue } from '@markuplint/ml-config';
|
|
5
|
-
export declare function createNode<
|
|
3
|
+
import type { MLASTAbstractNode } from '@markuplint/ml-ast';
|
|
4
|
+
import type { PlainData, RuleConfigValue } from '@markuplint/ml-config';
|
|
5
|
+
export declare function createNode<
|
|
6
|
+
N extends MLASTAbstractNode,
|
|
7
|
+
T extends RuleConfigValue,
|
|
8
|
+
O extends PlainData = undefined,
|
|
9
|
+
>(astNode: N, document: MLDocument<T, O>): MappedNode<N, T, O>;
|
|
@@ -6,7 +6,9 @@ const comment_1 = require("../node/comment");
|
|
|
6
6
|
const document_type_1 = require("../node/document-type");
|
|
7
7
|
const element_1 = require("../node/element");
|
|
8
8
|
const text_1 = require("../node/text");
|
|
9
|
-
function createNode(astNode,
|
|
9
|
+
function createNode(astNode,
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
11
|
+
document) {
|
|
10
12
|
const _astNode = astNode;
|
|
11
13
|
switch (_astNode.type) {
|
|
12
14
|
case 'doctype': {
|
|
@@ -25,6 +27,6 @@ function createNode(astNode, document) {
|
|
|
25
27
|
return new text_1.MLText(_astNode, document);
|
|
26
28
|
}
|
|
27
29
|
}
|
|
28
|
-
throw new TypeError(`Invalid AST node
|
|
30
|
+
throw new TypeError(`Invalid AST node types "${astNode.type}"`);
|
|
29
31
|
}
|
|
30
32
|
exports.createNode = createNode;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.nodeListToDebugMaps = void 0;
|
|
4
|
-
function nodeListToDebugMaps(
|
|
4
|
+
function nodeListToDebugMaps(
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
6
|
+
nodeList, withAttr = false) {
|
|
5
7
|
return nodeList
|
|
6
8
|
.map(n => {
|
|
7
9
|
const r = [];
|
|
@@ -12,9 +14,9 @@ function nodeListToDebugMaps(nodeList, withAttr = false) {
|
|
|
12
14
|
r.push(tokenDebug(n));
|
|
13
15
|
if (n.is(n.ELEMENT_NODE)) {
|
|
14
16
|
r.push(` namespaceURI: ${!!n.namespaceURI}`);
|
|
15
|
-
r.push(`
|
|
17
|
+
r.push(` elementType: ${n.elementType}`);
|
|
18
|
+
r.push(` isInFragmentDocument: ${n.isInFragmentDocument()}`);
|
|
16
19
|
r.push(` isForeignElement: ${!!n.isForeignElement}`);
|
|
17
|
-
r.push(` isCustomElement: ${!!n.isCustomElement}`);
|
|
18
20
|
if (withAttr) {
|
|
19
21
|
r.push(...attributesToDebugMaps(n.attributes)
|
|
20
22
|
.flat()
|
|
@@ -26,7 +28,9 @@ function nodeListToDebugMaps(nodeList, withAttr = false) {
|
|
|
26
28
|
.flat();
|
|
27
29
|
}
|
|
28
30
|
exports.nodeListToDebugMaps = nodeListToDebugMaps;
|
|
29
|
-
function attributesToDebugMaps(
|
|
31
|
+
function attributesToDebugMaps(
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
33
|
+
attributes) {
|
|
30
34
|
return attributes
|
|
31
35
|
.map(n => {
|
|
32
36
|
const r = [
|
|
@@ -77,7 +81,8 @@ function attributesToDebugMaps(attributes) {
|
|
|
77
81
|
.flat();
|
|
78
82
|
}
|
|
79
83
|
function tokenDebug(n, type = '') {
|
|
80
|
-
|
|
84
|
+
var _a, _b, _c, _d;
|
|
85
|
+
return `[${n.startLine}:${n.startCol}]>[${n.endLine}:${n.endCol}](${n.startOffset},${n.endOffset})${(_d = (_c = (_b = (_a = n.nodeName) !== null && _a !== void 0 ? _a : n.potentialName) !== null && _b !== void 0 ? _b : n.name) !== null && _c !== void 0 ? _c : n.type) !== null && _d !== void 0 ? _d : type}: ${visibleWhiteSpace(n.raw)}`;
|
|
81
86
|
}
|
|
82
87
|
function visibleWhiteSpace(chars) {
|
|
83
88
|
return chars.replace(/\n/g, '⏎').replace(/\t/g, '→').replace(/\s/g, '␣');
|
|
@@ -7,12 +7,12 @@ import type { MLText } from '../node/text';
|
|
|
7
7
|
*/
|
|
8
8
|
export declare function getIndent(node: MLNode<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: MLText<any, any>, raw: string, line: number, parentNode: MLNode<any, any>);
|
|
13
|
+
get raw(): string;
|
|
14
|
+
get type(): 'tab' | 'space' | 'mixed' | 'none';
|
|
15
|
+
get width(): number;
|
|
16
|
+
fix(raw: string): void;
|
|
17
17
|
}
|
|
18
18
|
export {};
|
|
@@ -8,7 +8,9 @@ const tslib_1 = require("tslib");
|
|
|
8
8
|
* @deprecated
|
|
9
9
|
* @param node
|
|
10
10
|
*/
|
|
11
|
-
function getIndent(
|
|
11
|
+
function getIndent(
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
13
|
+
node) {
|
|
12
14
|
const prevToken = node.prevToken;
|
|
13
15
|
if (!prevToken) {
|
|
14
16
|
return null;
|
|
@@ -51,7 +53,11 @@ function getIndent(node) {
|
|
|
51
53
|
}
|
|
52
54
|
exports.getIndent = getIndent;
|
|
53
55
|
class MLDOMIndentation {
|
|
54
|
-
constructor(
|
|
56
|
+
constructor(
|
|
57
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
58
|
+
originTextNode, raw, line,
|
|
59
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
60
|
+
parentNode) {
|
|
55
61
|
_MLDOMIndentation_fixed.set(this, void 0);
|
|
56
62
|
_MLDOMIndentation_node.set(this, void 0);
|
|
57
63
|
_MLDOMIndentation_parent.set(this, void 0);
|
|
@@ -82,19 +88,19 @@ class MLDOMIndentation {
|
|
|
82
88
|
fix(raw) {
|
|
83
89
|
const current = tslib_1.__classPrivateFieldGet(this, _MLDOMIndentation_fixed, "f");
|
|
84
90
|
tslib_1.__classPrivateFieldSet(this, _MLDOMIndentation_fixed, raw, "f");
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
lines[index] = lines[index].replace(current, tslib_1.__classPrivateFieldGet(this, _MLDOMIndentation_fixed, "f"));
|
|
92
|
-
}
|
|
93
|
-
node.fix(lines.join('\n'));
|
|
91
|
+
const node = tslib_1.__classPrivateFieldGet(this, _MLDOMIndentation_node, "f");
|
|
92
|
+
const line = node.startLine;
|
|
93
|
+
const lines = node.raw.split(/\r?\n/);
|
|
94
|
+
const index = this.line - line;
|
|
95
|
+
if (lines[index] != null) {
|
|
96
|
+
lines[index] = lines[index].replace(current, tslib_1.__classPrivateFieldGet(this, _MLDOMIndentation_fixed, "f"));
|
|
94
97
|
}
|
|
98
|
+
node.fix(lines.join('\n'));
|
|
95
99
|
}
|
|
96
100
|
}
|
|
97
101
|
_MLDOMIndentation_fixed = new WeakMap(), _MLDOMIndentation_node = new WeakMap(), _MLDOMIndentation_parent = new WeakMap();
|
|
98
|
-
function isFirstToken(
|
|
102
|
+
function isFirstToken(
|
|
103
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
104
|
+
node) {
|
|
99
105
|
return !node.prevToken;
|
|
100
106
|
}
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
import type { MLNode } from '../node/node';
|
|
2
|
-
import type { RuleConfigValue } from '@markuplint/ml-config';
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export
|
|
2
|
+
import type { PlainData, RuleConfigValue } from '@markuplint/ml-config';
|
|
3
|
+
export type Walker<T extends RuleConfigValue, O extends PlainData = undefined, N = MLNode<T, O>> = (
|
|
4
|
+
node: N,
|
|
5
|
+
) => void | Promise<void> | Promise<void>[];
|
|
6
|
+
export type SyncWalker<T extends RuleConfigValue, O extends PlainData = undefined, N = MLNode<T, O>> = (
|
|
7
|
+
node: N,
|
|
8
|
+
) => void;
|
|
9
|
+
export declare function syncWalk<T extends RuleConfigValue, O extends PlainData = undefined>(
|
|
10
|
+
nodeList: ReadonlyArray<MLNode<T, O>>,
|
|
11
|
+
walker: SyncWalker<T, O>,
|
|
12
|
+
): void;
|
|
13
|
+
export declare function sequentialWalker<T extends RuleConfigValue, O extends PlainData = undefined, N = MLNode<T, O>>(
|
|
14
|
+
list: ReadonlyArray<N>,
|
|
15
|
+
walker: Walker<T, O, N>,
|
|
16
|
+
): Promise<void>;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.sequentialWalker = exports.syncWalk = void 0;
|
|
4
|
-
function syncWalk(
|
|
4
|
+
function syncWalk(
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
6
|
+
nodeList, walker) {
|
|
5
7
|
for (const node of nodeList) {
|
|
6
8
|
if (node.is(node.ELEMENT_NODE) || node.is(node.MARKUPLINT_PREPROCESSOR_BLOCK)) {
|
|
7
9
|
syncWalk(Array.from(node.childNodes), walker);
|
|
@@ -25,21 +27,25 @@ function sequentialWalker(list, walker) {
|
|
|
25
27
|
_reject = reject;
|
|
26
28
|
});
|
|
27
29
|
const loop = (index = 0) => {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
result
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
30
|
+
// eslint-disable-next-line no-constant-condition
|
|
31
|
+
while (true) {
|
|
32
|
+
if (index >= list.length) {
|
|
33
|
+
_resolve();
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const node = list[index];
|
|
37
|
+
if (node == null) {
|
|
38
|
+
_resolve();
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const result = walker(node);
|
|
42
|
+
if (result instanceof Promise) {
|
|
43
|
+
result.then(() => loop(index + 1)).catch(_reject);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
index = index + 1;
|
|
48
|
+
}
|
|
43
49
|
}
|
|
44
50
|
};
|
|
45
51
|
loop();
|
package/lib/ml-dom/index.d.ts
CHANGED
|
@@ -5,4 +5,5 @@ export type { MLDocumentFragment as DocumentFragment } from './node/document-fra
|
|
|
5
5
|
export type { MLDocumentType as DocumentType } from './node/document-type';
|
|
6
6
|
export type { MLElement as Element } from './node/element';
|
|
7
7
|
export type { MLText as Text } from './node/text';
|
|
8
|
+
export type { MLChildNode as ChildNode } from './node/child-node';
|
|
8
9
|
export { MLDocument as Document } from './node/document';
|
|
@@ -1,33 +1,46 @@
|
|
|
1
1
|
import type { MLElement } from '../node/element';
|
|
2
2
|
import type { MLNode } from '../node/node';
|
|
3
|
-
import type { RuleConfigValue } from '@markuplint/ml-config';
|
|
3
|
+
import type { PlainData, RuleConfigValue } from '@markuplint/ml-config';
|
|
4
4
|
/**
|
|
5
5
|
*
|
|
6
6
|
* @see https://dom.spec.whatwg.org/#ref-for-dom-childnode-before%E2%91%A0
|
|
7
7
|
*/
|
|
8
|
-
export declare function before<T extends RuleConfigValue, O =
|
|
8
|
+
export declare function before<T extends RuleConfigValue, O extends PlainData = undefined>(
|
|
9
|
+
node: MLNode<T, O>,
|
|
10
|
+
...additionalNodes: ReadonlyArray<MLNode<T, O> | string>
|
|
11
|
+
): void;
|
|
9
12
|
/**
|
|
10
13
|
*
|
|
11
14
|
* @see https://dom.spec.whatwg.org/#ref-for-dom-childnode-after%E2%91%A0
|
|
12
15
|
*/
|
|
13
|
-
export declare function after<T extends RuleConfigValue, O =
|
|
16
|
+
export declare function after<T extends RuleConfigValue, O extends PlainData = undefined>(
|
|
17
|
+
node: MLNode<T, O>,
|
|
18
|
+
...additionalNodes: ReadonlyArray<MLNode<T, O> | string>
|
|
19
|
+
): void;
|
|
14
20
|
/**
|
|
15
21
|
*
|
|
16
22
|
* @see https://dom.spec.whatwg.org/#ref-for-dom-childnode-replacewith%E2%91%A0
|
|
17
23
|
*/
|
|
18
|
-
export declare function replaceWith<T extends RuleConfigValue, O =
|
|
24
|
+
export declare function replaceWith<T extends RuleConfigValue, O extends PlainData = undefined>(
|
|
25
|
+
node: MLNode<T, O>,
|
|
26
|
+
...additionalNodes: ReadonlyArray<MLNode<T, O> | string>
|
|
27
|
+
): void;
|
|
19
28
|
/**
|
|
20
29
|
*
|
|
21
30
|
* @see https://dom.spec.whatwg.org/#ref-for-dom-childnode-remove%E2%91%A0
|
|
22
31
|
*/
|
|
23
|
-
export declare function remove<T extends RuleConfigValue, O =
|
|
32
|
+
export declare function remove<T extends RuleConfigValue, O extends PlainData = undefined>(node: MLNode<T, O>): void;
|
|
24
33
|
/**
|
|
25
34
|
*
|
|
26
35
|
* @see https://dom.spec.whatwg.org/#ref-for-dom-nondocumenttypechildnode-previouselementsibling%E2%91%A0
|
|
27
36
|
*/
|
|
28
|
-
export declare function previousElementSibling<T extends RuleConfigValue, O =
|
|
37
|
+
export declare function previousElementSibling<T extends RuleConfigValue, O extends PlainData = undefined>(
|
|
38
|
+
node: MLNode<T, O>,
|
|
39
|
+
): MLElement<T, O> | null;
|
|
29
40
|
/**
|
|
30
41
|
*
|
|
31
42
|
* @see https://dom.spec.whatwg.org/#ref-for-dom-nondocumenttypechildnode-nextelementsibling%E2%91%A0
|
|
32
43
|
*/
|
|
33
|
-
export declare function nextElementSibling<T extends RuleConfigValue, O =
|
|
44
|
+
export declare function nextElementSibling<T extends RuleConfigValue, O extends PlainData = undefined>(
|
|
45
|
+
node: MLNode<T, O>,
|
|
46
|
+
): MLElement<T, O> | null;
|