@markuplint/parser-utils 4.1.0 → 4.2.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/lib/attr-tokenizer.d.ts.map +1 -0
- package/lib/const.d.ts.map +1 -0
- package/lib/debug.d.ts.map +1 -0
- package/lib/debugger.d.ts.map +1 -0
- package/lib/decision.d.ts.map +1 -0
- package/lib/detect-element-type.d.ts.map +1 -0
- package/lib/enums.d.ts.map +1 -0
- package/lib/get-location.d.ts +10 -0
- package/lib/get-location.d.ts.map +1 -0
- package/lib/get-location.js +12 -0
- package/lib/idl-attributes.d.ts.map +1 -0
- package/lib/ignore-block.d.ts.map +1 -0
- package/lib/ignore-block.js +69 -20
- package/lib/ignore-front-matter.d.ts.map +1 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/parser-error.d.ts.map +1 -0
- package/lib/parser.d.ts +1 -1
- package/lib/parser.d.ts.map +1 -0
- package/lib/parser.js +13 -8
- package/lib/script-parser.d.ts.map +1 -0
- package/lib/sort-nodes.d.ts +1 -1
- package/lib/sort-nodes.d.ts.map +1 -0
- package/lib/sort-nodes.js +6 -11
- package/lib/types.d.ts.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attr-tokenizer.d.ts","sourceRoot":"","sources":["../src/attr-tokenizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAavC;;;;GAIG;AACH,wBAAgB,aAAa,CAC5B,GAAG,EAAE,MAAM,EACX,QAAQ,sBAAkB,EAC1B,UAAU,YAAuB,EACjC,iBAAiB,GAAE,aAAa,CAAC,QAAQ,CAA4B,EACrE,uBAAuB,GAAE,aAAa,CAAC,MAAM,CAAgC;;;;;;;;;;EAgL7E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../src/const.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,WAAW,CAAC;AAElC;;;;GAIG;AACH,eAAO,MAAM,cAAc,UAyF1B,CAAC;AAEF,eAAO,MAAM,SAAS,QAA2B,CAAC;AAElD,eAAO,MAAM,aAAa,QAAa,CAAC;AAExC;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,wCAAyC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,eAAO,MAAM,GAAG,gBAAqB,CAAC;AAEtC,wBAAgB,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,QAE7D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debugger.d.ts","sourceRoot":"","sources":["../src/debugger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAc,MAAM,oBAAoB,CAAC;AAE3E,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,QAAQ,UAAQ,YAS5F;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,cAsCrE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,0BA6B/D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision.d.ts","sourceRoot":"","sources":["../src/decision.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,WAE5C;AAGD,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,WAE3D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-element-type.d.ts","sourceRoot":"","sources":["../src/detect-element-type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,uCAAuC,EAAE,MAAM,oBAAoB,CAAC;AAI/F,wBAAgB,iBAAiB,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,uCAAuC,EAChD,cAAc,CAAC,EAAE,uCAAuC,GACtD,WAAW,CAKb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../src/enums.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IACnB,aAAa,IAAA;IACb,kBAAkB,IAAA;IAClB,OAAO,IAAA;IACP,KAAK,IAAA;IACL,UAAU,IAAA;IACV,YAAY,IAAA;CACZ;AAED,oBAAY,SAAS;IACpB,UAAU,IAAA;IACV,IAAI,IAAA;IACJ,KAAK,IAAA;IACL,WAAW,IAAA;IACX,KAAK,IAAA;IACL,UAAU,IAAA;CACV"}
|
package/lib/get-location.d.ts
CHANGED
|
@@ -1,4 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Use {@link getPosition} instead. Will be removed in v5.0.0.
|
|
3
|
+
*/
|
|
1
4
|
export declare function getLine(rawCodeFragment: string, startOffset: number): number;
|
|
5
|
+
/**
|
|
6
|
+
* @deprecated Use {@link getPosition} instead. Will be removed in v5.0.0.
|
|
7
|
+
*/
|
|
2
8
|
export declare function getCol(rawCodeFragment: string, startOffset: number): number;
|
|
9
|
+
export declare function getPosition(rawCodeFragment: string, startOffset: number): {
|
|
10
|
+
readonly line: number;
|
|
11
|
+
readonly column: number;
|
|
12
|
+
};
|
|
3
13
|
export declare function getEndLine(rawCodeFragment: string, startLine: number): number;
|
|
4
14
|
export declare function getEndCol(rawCodeFragment: string, startCol: number): number;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-location.d.ts","sourceRoot":"","sources":["../src/get-location.ts"],"names":[],"mappings":"AAEA,wBAAgB,OAAO,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,UAEnE;AAED,wBAAgB,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,UAGlE;AAED,wBAAgB,UAAU,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,UAEpE;AAED,wBAAgB,SAAS,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAKlE"}
|
package/lib/get-location.js
CHANGED
|
@@ -1,11 +1,23 @@
|
|
|
1
1
|
const LINE_BREAK = '\n';
|
|
2
|
+
/**
|
|
3
|
+
* @deprecated Use {@link getPosition} instead. Will be removed in v5.0.0.
|
|
4
|
+
*/
|
|
2
5
|
export function getLine(rawCodeFragment, startOffset) {
|
|
3
6
|
return rawCodeFragment.slice(0, startOffset).split(LINE_BREAK).length;
|
|
4
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* @deprecated Use {@link getPosition} instead. Will be removed in v5.0.0.
|
|
10
|
+
*/
|
|
5
11
|
export function getCol(rawCodeFragment, startOffset) {
|
|
6
12
|
const lines = rawCodeFragment.slice(0, startOffset).split(LINE_BREAK);
|
|
7
13
|
return (lines.at(-1) ?? '').length + 1;
|
|
8
14
|
}
|
|
15
|
+
export function getPosition(rawCodeFragment, startOffset) {
|
|
16
|
+
const lines = rawCodeFragment.slice(0, startOffset).split(LINE_BREAK);
|
|
17
|
+
const line = lines.length;
|
|
18
|
+
const column = (lines.at(-1) ?? '').length + 1;
|
|
19
|
+
return { line, column };
|
|
20
|
+
}
|
|
9
21
|
export function getEndLine(rawCodeFragment, startLine) {
|
|
10
22
|
return rawCodeFragment.split(LINE_BREAK).length - 1 + startLine;
|
|
11
23
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idl-attributes.d.ts","sourceRoot":"","sources":["../src/idl-attributes.ts"],"names":[],"mappings":"AAsaA,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM;;;EAc9C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ignore-block.d.ts","sourceRoot":"","sources":["../src/ignore-block.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAQ,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAkC,MAAM,oBAAoB,CAAC;AAM5F,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,SAAS,EAAE,EAAE,QAAQ,SAAY,GAAG,WAAW,CAuBzG;AAmCD,wBAAgB,WAAW,CAE1B,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EACxB,QAAQ,EAAE,SAAS,iBAAiB,EAAE,EAEtC,WAAW,EAAE,WAAW,EACxB,8BAA8B,UAAO,uBA6FrC"}
|
package/lib/ignore-block.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MASK_CHAR } from './const.js';
|
|
2
|
-
import {
|
|
2
|
+
import { getPosition } from './get-location.js';
|
|
3
3
|
import { ParserError } from './parser-error.js';
|
|
4
4
|
export function ignoreBlock(source, tags, maskChar = MASK_CHAR) {
|
|
5
5
|
let replaced = source;
|
|
@@ -61,27 +61,75 @@ ignoreBlock, throwErrorWhenTagHasUnresolved = true) {
|
|
|
61
61
|
return newNodeList;
|
|
62
62
|
}
|
|
63
63
|
for (const tag of stack) {
|
|
64
|
-
const
|
|
64
|
+
const raw = `${tag.startTag}${tag.taggedCode}${tag.endTag ?? ''}`;
|
|
65
|
+
const tagIndexEnd = tag.index + raw.length;
|
|
66
|
+
const node = newNodeList.find(node => node.startOffset <= tag.index && node.endOffset >= tagIndexEnd);
|
|
65
67
|
if (!node) {
|
|
66
68
|
continue;
|
|
67
69
|
}
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
70
|
+
const replacementChildNodes = [];
|
|
71
|
+
if (node.startOffset === tag.index && node.endOffset === tagIndexEnd) {
|
|
72
|
+
const token = parser.createToken(raw, node.startOffset, node.startLine, node.startCol);
|
|
73
|
+
const psNode = {
|
|
74
|
+
...token,
|
|
75
|
+
type: 'psblock',
|
|
76
|
+
depth: node.depth,
|
|
77
|
+
nodeName: `#ps:${tag.type}`,
|
|
78
|
+
parentNode: node.parentNode,
|
|
79
|
+
childNodes: [],
|
|
80
|
+
isBogus: false,
|
|
81
|
+
};
|
|
82
|
+
replacementChildNodes.push(psNode);
|
|
83
|
+
}
|
|
84
|
+
else if (node.type === 'text') {
|
|
85
|
+
const offset = tag.index - node.startOffset;
|
|
86
|
+
const above = node.raw.slice(0, offset);
|
|
87
|
+
const below = node.raw.slice(offset + raw.length);
|
|
88
|
+
if (above) {
|
|
89
|
+
const { line, column } = getPosition(node.raw, 0);
|
|
90
|
+
const token = parser.createToken(above, node.startOffset, node.startLine + line - 1, node.startCol + column - 1);
|
|
91
|
+
const aboveNode = {
|
|
92
|
+
...token,
|
|
93
|
+
nodeName: '#text',
|
|
94
|
+
type: 'text',
|
|
95
|
+
parentNode: node.parentNode,
|
|
96
|
+
depth: node.depth,
|
|
97
|
+
};
|
|
98
|
+
replacementChildNodes.push(aboveNode);
|
|
99
|
+
}
|
|
100
|
+
const { line, column } = getPosition(raw, offset);
|
|
101
|
+
const token = parser.createToken(raw, node.startOffset + offset, node.startLine + line - 1, node.startCol + column - 1);
|
|
102
|
+
const psNode = {
|
|
103
|
+
...token,
|
|
104
|
+
type: 'psblock',
|
|
105
|
+
depth: node.depth,
|
|
106
|
+
nodeName: `#ps:${tag.type}`,
|
|
107
|
+
parentNode: node.parentNode,
|
|
108
|
+
childNodes: [],
|
|
109
|
+
isBogus: false,
|
|
110
|
+
};
|
|
111
|
+
replacementChildNodes.push(psNode);
|
|
112
|
+
if (below) {
|
|
113
|
+
const { line, column } = getPosition(node.raw, offset + raw.length);
|
|
114
|
+
const token = parser.createToken(below, node.startOffset + offset + raw.length, node.startLine + line - 1, node.startCol + column - 1);
|
|
115
|
+
const aboveNode = {
|
|
116
|
+
...token,
|
|
117
|
+
nodeName: '#text',
|
|
118
|
+
type: 'text',
|
|
119
|
+
parentNode: node.parentNode,
|
|
120
|
+
depth: node.depth,
|
|
121
|
+
};
|
|
122
|
+
replacementChildNodes.push(aboveNode);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (replacementChildNodes.length > 0) {
|
|
126
|
+
if (node.type !== 'doctype' && node.parentNode?.childNodes) {
|
|
127
|
+
parser.replaceChild(node.parentNode, node, ...replacementChildNodes);
|
|
128
|
+
}
|
|
129
|
+
const index = newNodeList.indexOf(node);
|
|
130
|
+
newNodeList.splice(index, 1, ...replacementChildNodes);
|
|
131
|
+
tag.resolved = true;
|
|
81
132
|
}
|
|
82
|
-
const index = newNodeList.indexOf(node);
|
|
83
|
-
newNodeList.splice(index, 1, psNode);
|
|
84
|
-
tag.resolved = true;
|
|
85
133
|
}
|
|
86
134
|
for (const node of newNodeList) {
|
|
87
135
|
if (node.type === 'starttag') {
|
|
@@ -120,9 +168,10 @@ ignoreBlock, throwErrorWhenTagHasUnresolved = true) {
|
|
|
120
168
|
if (throwErrorWhenTagHasUnresolved) {
|
|
121
169
|
for (const tag of stack) {
|
|
122
170
|
if (!tag.resolved) {
|
|
171
|
+
const { line, column } = getPosition(source, tag.index);
|
|
123
172
|
throw new ParserError('Parsing failed. Unsupported syntax detected', {
|
|
124
|
-
line
|
|
125
|
-
col:
|
|
173
|
+
line,
|
|
174
|
+
col: column,
|
|
126
175
|
raw: tag.startTag + tag.taggedCode + (tag.endTag ?? ''),
|
|
127
176
|
});
|
|
128
177
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ignore-front-matter.d.ts","sourceRoot":"","sources":["../src/ignore-front-matter.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAgCA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-error.d.ts","sourceRoot":"","sources":["../src/parser-error.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,qBAAa,WAAY,SAAQ,KAAK;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,IAAI,SAAiB;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;gBAET,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe;CAOlD;AAED,qBAAa,iBAAkB,SAAQ,WAAW;IACjD,IAAI,SAAuB;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;gBAGhC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,eAAe,GAAG;QACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAClC;CASF;AAED,qBAAa,iBAAkB,SAAQ,WAAW;IACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,IAAI,SAAuB;gBAG1B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,eAAe,GAAG;QACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC1B;CASF"}
|
package/lib/parser.d.ts
CHANGED
|
@@ -108,5 +108,5 @@ export declare abstract class Parser<Node extends {} = {}, State extends unknown
|
|
|
108
108
|
};
|
|
109
109
|
walk<Node extends MLASTNodeTreeItem>(nodeList: readonly Node[], walker: Walker<Node>, depth?: number): void;
|
|
110
110
|
appendChild(parentNode: MLASTParentNode | null, ...childNodes: readonly MLASTChildNode[]): void;
|
|
111
|
-
replaceChild(parentNode: MLASTParentNode, oldChildNode: MLASTChildNode,
|
|
111
|
+
replaceChild(parentNode: MLASTParentNode, oldChildNode: MLASTChildNode, ...replacementChildNodes: readonly MLASTChildNode[]): void;
|
|
112
112
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
|
package/lib/parser.js
CHANGED
|
@@ -17,7 +17,7 @@ import { defaultSpaces } from './const.js';
|
|
|
17
17
|
import { domLog } from './debug.js';
|
|
18
18
|
import { detectElementType } from './detect-element-type.js';
|
|
19
19
|
import { AttrState, TagState } from './enums.js';
|
|
20
|
-
import {
|
|
20
|
+
import { getEndCol, getEndLine, getPosition } from './get-location.js';
|
|
21
21
|
import { ignoreBlock, restoreNode } from './ignore-block.js';
|
|
22
22
|
import { ignoreFrontMatter } from './ignore-front-matter.js';
|
|
23
23
|
import { ParserError } from './parser-error.js';
|
|
@@ -575,11 +575,12 @@ export class Parser {
|
|
|
575
575
|
}
|
|
576
576
|
sliceFragment(start, end) {
|
|
577
577
|
const raw = this.rawCode.slice(start, end);
|
|
578
|
+
const { line, column } = getPosition(this.rawCode, start);
|
|
578
579
|
return {
|
|
579
580
|
raw,
|
|
580
581
|
startOffset: start,
|
|
581
|
-
startLine:
|
|
582
|
-
startCol:
|
|
582
|
+
startLine: line,
|
|
583
|
+
startCol: column,
|
|
583
584
|
};
|
|
584
585
|
}
|
|
585
586
|
getOffsetsFromCode(startLine, startCol, endLine, endCol) {
|
|
@@ -634,7 +635,7 @@ export class Parser {
|
|
|
634
635
|
childNodes: __classPrivateFieldGet(this, _Parser_instances, "m", _Parser_siblingsCorrection).call(this, newChildNodes),
|
|
635
636
|
});
|
|
636
637
|
}
|
|
637
|
-
replaceChild(parentNode, oldChildNode,
|
|
638
|
+
replaceChild(parentNode, oldChildNode, ...replacementChildNodes) {
|
|
638
639
|
const index = parentNode.childNodes.findIndex(childNode => childNode.uuid === oldChildNode.uuid);
|
|
639
640
|
if (index === -1) {
|
|
640
641
|
return;
|
|
@@ -642,11 +643,11 @@ export class Parser {
|
|
|
642
643
|
if (Array.prototype.toSpliced == null) {
|
|
643
644
|
const newChildNodes = [...parentNode.childNodes];
|
|
644
645
|
// TODO: Use splice instead of toSpliced until we end support for Node 18
|
|
645
|
-
newChildNodes.splice(index, 1,
|
|
646
|
+
newChildNodes.splice(index, 1, ...replacementChildNodes);
|
|
646
647
|
Object.assign(parentNode, { childNodes: newChildNodes });
|
|
647
648
|
return;
|
|
648
649
|
}
|
|
649
|
-
const newChildNodes = parentNode.childNodes.toSpliced(index, 1,
|
|
650
|
+
const newChildNodes = parentNode.childNodes.toSpliced(index, 1, ...replacementChildNodes);
|
|
650
651
|
Object.assign(parentNode, { childNodes: newChildNodes });
|
|
651
652
|
}
|
|
652
653
|
}
|
|
@@ -1081,6 +1082,7 @@ _Parser_booleanish = new WeakMap(), _Parser_defaultState = new WeakMap(), _Parse
|
|
|
1081
1082
|
? // TODO: Use sort instead of toSorted until we end support for Node 18
|
|
1082
1083
|
[...nodes].sort(sortNodes)
|
|
1083
1084
|
: nodes.toSorted(sortNodes);
|
|
1085
|
+
const nameToLastOpenTag = {};
|
|
1084
1086
|
for (const node of oldNodes) {
|
|
1085
1087
|
const id = `${node.startOffset}::${node.nodeName}`;
|
|
1086
1088
|
if (stack.has(id)) {
|
|
@@ -1088,13 +1090,16 @@ _Parser_booleanish = new WeakMap(), _Parser_defaultState = new WeakMap(), _Parse
|
|
|
1088
1090
|
}
|
|
1089
1091
|
stack.add(id);
|
|
1090
1092
|
if (node.type === 'endtag') {
|
|
1091
|
-
const openTag =
|
|
1092
|
-
if (openTag &&
|
|
1093
|
+
const openTag = nameToLastOpenTag[node.nodeName];
|
|
1094
|
+
if (openTag && !openTag.pairNode) {
|
|
1093
1095
|
__classPrivateFieldGet(this, _Parser_instances, "m", _Parser_pairing).call(this, openTag, node, false);
|
|
1094
1096
|
newNodes.push(node);
|
|
1095
1097
|
continue;
|
|
1096
1098
|
}
|
|
1097
1099
|
}
|
|
1100
|
+
else if (node.type === 'starttag') {
|
|
1101
|
+
nameToLastOpenTag[node.nodeName] = node;
|
|
1102
|
+
}
|
|
1098
1103
|
newNodes.push(node);
|
|
1099
1104
|
}
|
|
1100
1105
|
return newNodes;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script-parser.d.ts","sourceRoot":"","sources":["../src/script-parser.ts"],"names":[],"mappings":"AAGA,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,EAAE,CAU9D;AAED,MAAM,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;IAClF,KAAK,EAAE,MAAM,CAAC;CACd,CAAC"}
|
package/lib/sort-nodes.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { MLASTNodeTreeItem } from '@markuplint/ml-ast';
|
|
2
|
-
export declare function sortNodes(a: MLASTNodeTreeItem, b: MLASTNodeTreeItem):
|
|
2
|
+
export declare function sortNodes(a: MLASTNodeTreeItem, b: MLASTNodeTreeItem): number;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-nodes.d.ts","sourceRoot":"","sources":["../src/sort-nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,wBAAgB,SAAS,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,cAMnE"}
|
package/lib/sort-nodes.js
CHANGED
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
export function sortNodes(a, b) {
|
|
2
2
|
if (a.startOffset === b.startOffset) {
|
|
3
|
-
return sort(a, b
|
|
3
|
+
return sort(a.endOffset, b.endOffset);
|
|
4
4
|
}
|
|
5
|
-
return sort(a, b
|
|
5
|
+
return sort(a.startOffset, b.startOffset);
|
|
6
6
|
}
|
|
7
|
-
function sort(a, b
|
|
8
|
-
|
|
7
|
+
function sort(a, b) {
|
|
8
|
+
const diff = a - b;
|
|
9
|
+
if (Number.isNaN(diff)) {
|
|
9
10
|
return 0;
|
|
10
11
|
}
|
|
11
|
-
|
|
12
|
-
return -1;
|
|
13
|
-
}
|
|
14
|
-
if (a[key] > b[key]) {
|
|
15
|
-
return 1;
|
|
16
|
-
}
|
|
17
|
-
return 0;
|
|
12
|
+
return diff;
|
|
18
13
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@markuplint/parser-utils",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.2.0",
|
|
4
4
|
"description": "Utility module for markuplint parser plugin",
|
|
5
5
|
"repository": "git@github.com:markuplint/markuplint.git",
|
|
6
6
|
"author": "Yusuke Hirao <yusukehirao@me.com>",
|
|
@@ -28,13 +28,13 @@
|
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@markuplint/ml-ast": "4.0.1",
|
|
31
|
-
"@markuplint/ml-spec": "4.0
|
|
32
|
-
"@markuplint/types": "4.0.
|
|
31
|
+
"@markuplint/ml-spec": "4.1.0",
|
|
32
|
+
"@markuplint/types": "4.0.2",
|
|
33
33
|
"@types/uuid": "^9.0.8",
|
|
34
34
|
"debug": "^4.3.4",
|
|
35
35
|
"espree": "^10.0.1",
|
|
36
36
|
"type-fest": "^4.10.2",
|
|
37
37
|
"uuid": "^9.0.1"
|
|
38
38
|
},
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "d5d99c5d84b676f8b2bb84684533ed74cf2f1da6"
|
|
40
40
|
}
|