@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.
@@ -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"}
@@ -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"}
@@ -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"}
@@ -1,5 +1,5 @@
1
1
  import { MASK_CHAR } from './const.js';
2
- import { getCol, getLine } from './get-location.js';
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 node = newNodeList.find(node => node.startOffset === tag.index);
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 raw = `${tag.startTag}${tag.taggedCode}${tag.endTag ?? ''}`;
69
- const token = parser.createToken(raw, node.startOffset, node.startLine, node.startCol);
70
- const psNode = {
71
- ...token,
72
- type: 'psblock',
73
- depth: node.depth,
74
- nodeName: `#ps:${tag.type}`,
75
- parentNode: node.parentNode,
76
- childNodes: [],
77
- isBogus: false,
78
- };
79
- if (node.type !== 'doctype' && node.parentNode?.childNodes) {
80
- parser.replaceChild(node.parentNode, node, psNode);
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: getLine(source, tag.index),
125
- col: getCol(source, tag.index),
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, newChildNode: MLASTChildNode): void;
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 { getCol, getEndCol, getEndLine, getLine } from './get-location.js';
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: getLine(this.rawCode, start),
582
- startCol: getCol(this.rawCode, start),
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, newChildNode) {
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, newChildNode);
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, newChildNode);
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 = newNodes.findLast(n => n.type === 'starttag' && n.nodeName === node.nodeName);
1092
- if (openTag && openTag.type === 'starttag' && !openTag.pairNode) {
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"}
@@ -1,2 +1,2 @@
1
1
  import type { MLASTNodeTreeItem } from '@markuplint/ml-ast';
2
- export declare function sortNodes(a: MLASTNodeTreeItem, b: MLASTNodeTreeItem): 1 | -1 | 0;
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, 'endOffset');
3
+ return sort(a.endOffset, b.endOffset);
4
4
  }
5
- return sort(a, b, 'startOffset');
5
+ return sort(a.startOffset, b.startOffset);
6
6
  }
7
- function sort(a, b, key) {
8
- if (Number.isNaN(a[key]) || Number.isNaN(b[key])) {
7
+ function sort(a, b) {
8
+ const diff = a - b;
9
+ if (Number.isNaN(diff)) {
9
10
  return 0;
10
11
  }
11
- if (a[key] < b[key]) {
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.1.0",
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.1",
32
- "@markuplint/types": "4.0.1",
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": "b9817c30c2df71faa866e3b3fe286afa499deede"
39
+ "gitHead": "d5d99c5d84b676f8b2bb84684533ed74cf2f1da6"
40
40
  }