grammar-composer 0.6.2 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +27 -19
  2. package/dist/parser/Builder.d.ts +3 -3
  3. package/dist/parser/Builder.d.ts.map +1 -1
  4. package/dist/parser/Builder.js +37 -37
  5. package/dist/parser/Builder.js.map +1 -1
  6. package/dist/parser/Grammar.d.ts +24 -24
  7. package/dist/parser/Grammar.d.ts.map +1 -1
  8. package/dist/parser/Grammar.js +11 -11
  9. package/dist/parser/Grammar.js.map +1 -1
  10. package/dist/parser/ParseError.js +6 -6
  11. package/dist/parser/ParseError.js.map +1 -1
  12. package/dist/parser/Parser.d.ts.map +1 -1
  13. package/dist/parser/Parser.js +36 -36
  14. package/dist/parser/Parser.js.map +1 -1
  15. package/dist/parser/StaticAnalysis.d.ts +3 -3
  16. package/dist/parser/StaticAnalysis.d.ts.map +1 -1
  17. package/dist/parser/StaticAnalysis.js +6 -6
  18. package/dist/parser/StaticAnalysis.js.map +1 -1
  19. package/dist/parser/{TerminalToText.d.ts → TerminalFormatter.d.ts} +2 -2
  20. package/dist/parser/TerminalFormatter.d.ts.map +1 -0
  21. package/dist/parser/{TerminalToText.js → TerminalFormatter.js} +2 -2
  22. package/dist/parser/TerminalFormatter.js.map +1 -0
  23. package/dist/tests/Test.js +6 -6
  24. package/dist/tests/Test.js.map +1 -1
  25. package/dist/tests/test-grammars/JsonGrammar.d.ts +3 -3
  26. package/dist/tests/test-grammars/JsonGrammar.d.ts.map +1 -1
  27. package/dist/tests/test-grammars/JsonGrammar.js +2 -2
  28. package/dist/tests/test-grammars/JsonGrammar.js.map +1 -1
  29. package/dist/tests/test-grammars/RegExpGrammar.d.ts +11 -11
  30. package/dist/tests/test-grammars/RegExpGrammar.d.ts.map +1 -1
  31. package/dist/tests/test-grammars/RegExpGrammar.js +2 -2
  32. package/dist/tests/test-grammars/RegExpGrammar.js.map +1 -1
  33. package/dist/tests/test-grammars/XmlGrammar.d.ts +1 -1
  34. package/dist/tests/test-grammars/XmlGrammar.d.ts.map +1 -1
  35. package/dist/tests/test-grammars/XmlGrammar.js +2 -2
  36. package/dist/tests/test-grammars/XmlGrammar.js.map +1 -1
  37. package/package.json +2 -2
  38. package/src/parser/Builder.ts +42 -42
  39. package/src/parser/Grammar.ts +36 -36
  40. package/src/parser/ParseError.ts +6 -6
  41. package/src/parser/Parser.ts +38 -38
  42. package/src/parser/StaticAnalysis.ts +20 -18
  43. package/src/parser/{TerminalToText.ts → TerminalFormatter.ts} +1 -1
  44. package/src/tests/Test.ts +6 -6
  45. package/src/tests/test-grammars/JsonGrammar.ts +2 -2
  46. package/src/tests/test-grammars/RegExpGrammar.ts +2 -2
  47. package/src/tests/test-grammars/XmlGrammar.ts +2 -2
  48. package/dist/parser/TerminalToText.d.ts.map +0 -1
  49. package/dist/parser/TerminalToText.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { isNumber } from '../utilities/Utilities.js'
2
- import { Grammar, GrammarElement, Terminal, type Nonterminal } from './Grammar.js'
2
+ import { Grammar, GrammarNode, Terminal, type Nonterminal } from './Grammar.js'
3
3
  import { type FailedMatch, ParseError } from './ParseError.js'
4
4
 
5
5
  //////////////////////////////////////////////////////////////////////////////////////////////
@@ -34,22 +34,22 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
34
34
  }
35
35
  }
36
36
 
37
- function tryParse(grammarElement: GrammarElement, startOffset: number): ParseResult | null {
38
- if (isNumber(grammarElement.cacheId)) {
39
- return tryParseCached(grammarElement, startOffset)
37
+ function tryParse(grammarNode: GrammarNode, startOffset: number): ParseResult | null {
38
+ if (isNumber(grammarNode.cacheId)) {
39
+ return tryParseCached(grammarNode, startOffset)
40
40
  } else {
41
- return tryParseUncached(grammarElement, startOffset)
41
+ return tryParseUncached(grammarNode, startOffset)
42
42
  }
43
43
  }
44
44
 
45
- function tryParseCached(grammarElement: GrammarElement, startOffset: number): ParseResult | null {
46
- const cacheId = grammarElement.cacheId!
45
+ function tryParseCached(grammarNode: GrammarNode, startOffset: number): ParseResult | null {
46
+ const cacheId = grammarNode.cacheId!
47
47
  const cacheKey = (startOffset * cacheKeyOffsetMultiplier) + cacheId
48
48
 
49
49
  if (parseResultsCache.has(cacheKey)) {
50
50
  return parseResultsCache.get(cacheKey)!
51
51
  } else {
52
- const parseResult = tryParseUncached(grammarElement, startOffset)
52
+ const parseResult = tryParseUncached(grammarNode, startOffset)
53
53
 
54
54
  parseResultsCache.set(cacheKey, parseResult)
55
55
 
@@ -57,14 +57,14 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
57
57
  }
58
58
  }
59
59
 
60
- function tryParseUncached(grammarElement: GrammarElement, startOffset: number): ParseResult | null {
61
- const result = tryParseElement(grammarElement, startOffset)
60
+ function tryParseUncached(grammarNode: GrammarNode, startOffset: number): ParseResult | null {
61
+ const result = tryParseNode(grammarNode, startOffset)
62
62
 
63
- if (result === null && grammarElement.optional === true) {
64
- // An optional element that doesn't match is "skipped": it succeeds
63
+ if (result === null && grammarNode.optional === true) {
64
+ // An optional node that doesn't match is "skipped": it succeeds
65
65
  // by consuming no input and producing no nodes. This uniformly
66
66
  // implements the `possibly()` "or skip" semantics wherever the
67
- // element appears (sequence members, repetition content, choice
67
+ // node appears (sequence members, repetition content, choice
68
68
  // members, or as the content of a production itself).
69
69
  return { endOffset: startOffset, nodes: undefined, skipped: true }
70
70
  }
@@ -72,14 +72,14 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
72
72
  return result
73
73
  }
74
74
 
75
- function tryParseElement(grammarElement: GrammarElement, startOffset: number): ParseResult | null {
76
- switch (grammarElement.type) {
75
+ function tryParseNode(grammarNode: GrammarNode, startOffset: number): ParseResult | null {
76
+ switch (grammarNode.type) {
77
77
  case 'StringTerminal': {
78
- const target = grammarElement.content
78
+ const target = grammarNode.content
79
79
  const endOffset = startOffset + target.length
80
80
 
81
81
  if (endOffset > inputLength) {
82
- updateBestFailedMatchesIfNeeded(grammarElement, startOffset)
82
+ updateBestFailedMatchesIfNeeded(grammarNode, startOffset)
83
83
 
84
84
  return null
85
85
  }
@@ -92,7 +92,7 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
92
92
  nodes: undefined
93
93
  }
94
94
  } else {
95
- updateBestFailedMatchesIfNeeded(grammarElement, startOffset)
95
+ updateBestFailedMatchesIfNeeded(grammarNode, startOffset)
96
96
 
97
97
  return null
98
98
  }
@@ -101,10 +101,10 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
101
101
  case 'PatternTerminal': {
102
102
  const substringToMatch = inputString.substring(startOffset)
103
103
 
104
- const matchResults = grammarElement.regExp.exec(substringToMatch)
104
+ const matchResults = grammarNode.regExp.exec(substringToMatch)
105
105
 
106
106
  if (matchResults === null) {
107
- updateBestFailedMatchesIfNeeded(grammarElement, startOffset)
107
+ updateBestFailedMatchesIfNeeded(grammarNode, startOffset)
108
108
 
109
109
  return null
110
110
  }
@@ -177,9 +177,9 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
177
177
  }
178
178
 
179
179
  case 'Nonterminal': {
180
- nonterminalStack.push(grammarElement)
180
+ nonterminalStack.push(grammarNode)
181
181
 
182
- const result = tryParse(grammarElement.content, startOffset)
182
+ const result = tryParse(grammarNode.content, startOffset)
183
183
 
184
184
  nonterminalStack.pop()
185
185
 
@@ -194,9 +194,9 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
194
194
  return { endOffset: startOffset, nodes: undefined, skipped: true }
195
195
  }
196
196
 
197
- const grammarElementName = grammarElement.name
197
+ const grammarNodeName = grammarNode.name
198
198
 
199
- if (grammarElement.unwrapped) {
199
+ if (grammarNode.unfolded) {
200
200
  const newResult: ParseResult = {
201
201
  endOffset: result.endOffset,
202
202
  nodes: result.nodes
@@ -205,7 +205,7 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
205
205
  return newResult
206
206
  } else {
207
207
  const newNode: ParseTreeNode = {
208
- name: grammarElementName,
208
+ name: grammarNodeName,
209
209
 
210
210
  startOffset,
211
211
  endOffset: result.endOffset,
@@ -228,14 +228,14 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
228
228
  let successfulResults: ParseResult[] = []
229
229
  let readOffset = startOffset
230
230
 
231
- for (const element of grammarElement.members) {
232
- const elementResult = tryParse(element, readOffset)
231
+ for (const node of grammarNode.members) {
232
+ const parseResult = tryParse(node, readOffset)
233
233
 
234
- if (elementResult !== null) {
235
- successfulResults.push(elementResult)
234
+ if (parseResult !== null) {
235
+ successfulResults.push(parseResult)
236
236
 
237
- readOffset = elementResult.endOffset
238
- } else if (element.optional === false) {
237
+ readOffset = parseResult.endOffset
238
+ } else if (node.optional === false) {
239
239
  return null
240
240
  }
241
241
  }
@@ -260,7 +260,7 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
260
260
  const nodes: ParseTreeNode[] = []
261
261
 
262
262
  while (true) {
263
- const result = tryParse(grammarElement.content, readOffset)
263
+ const result = tryParse(grammarNode.content, readOffset)
264
264
 
265
265
  if (result === null) {
266
266
  break
@@ -282,7 +282,7 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
282
282
  endOffset: readOffset,
283
283
  nodes: nodes.length > 0 ? nodes : undefined
284
284
  }
285
- } else if (grammarElement.optional === true) {
285
+ } else if (grammarNode.optional === true) {
286
286
  return {
287
287
  endOffset: startOffset,
288
288
  nodes: undefined
@@ -295,13 +295,13 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
295
295
  case 'Choice': {
296
296
  let bestResult: ParseResult | null = null
297
297
 
298
- for (const member of grammarElement.members) {
298
+ for (const member of grammarNode.members) {
299
299
  const result = tryParse(member, startOffset)
300
300
 
301
301
  if (result !== null && (bestResult === null || result.endOffset > bestResult.endOffset)) {
302
302
  bestResult = result
303
303
 
304
- if (grammarElement.exhaustive === false) {
304
+ if (grammarNode.exhaustive === false) {
305
305
  break
306
306
  }
307
307
  }
@@ -311,12 +311,12 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
311
311
  }
312
312
 
313
313
  default: {
314
- throw new Error(`Unsupported grammar element type '${(grammarElement as any).type}'.`)
314
+ throw new Error(`Unrecognized grammar node type '${(grammarNode as any).type}'.`)
315
315
  }
316
316
  }
317
317
  }
318
318
 
319
- const result = tryParse(grammar.rootElement, 0)
319
+ const result = tryParse(grammar.rootNode, 0)
320
320
 
321
321
  if (result && result.endOffset >= inputLength) {
322
322
  return result.nodes ?? []
@@ -341,7 +341,7 @@ export interface ParseResult {
341
341
  endOffset: number
342
342
  nodes: ParseTreeNode[] | undefined
343
343
 
344
- // Marks a result produced by an optional element that was "skipped" (it
344
+ // Marks a result produced by an optional node that was "skipped" (it
345
345
  // didn't match, so the parse succeeded by consuming no input and producing
346
346
  // no nodes). Set internally by the parser; a receiving `Nonterminal` uses
347
347
  // it to avoid creating a node for skipped content.
@@ -1,17 +1,17 @@
1
1
  import { Pattern } from 'regexp-composer'
2
2
  import { isArray, isBoolean, isString } from '../utilities/Utilities.js'
3
- import { GrammarElement } from './Grammar.js'
3
+ import { GrammarNode } from './Grammar.js'
4
4
 
5
5
  /////////////////////////////////////////////////////////////////////////////////////////////////
6
6
  // Internal static analysis methods
7
7
  /////////////////////////////////////////////////////////////////////////////////////////////////
8
- export function detectAndAnnotateOptionalNodes(rootNode: GrammarElement) {
9
- const visitedNodes = new Set<GrammarElement>()
8
+ export function detectAndAnnotateOptionalNodes(rootNode: GrammarNode) {
9
+ const visitedNodes = new Set<GrammarNode>()
10
10
 
11
- const resolvedNodes = new Map<GrammarElement, boolean>()
12
- const unresolvedNodes = new Map<GrammarElement, { dependencies: Set<GrammarElement>, isChoice: boolean }>()
11
+ const resolvedNodes = new Map<GrammarNode, boolean>()
12
+ const unresolvedNodes = new Map<GrammarNode, { dependencies: Set<GrammarNode>, isChoice: boolean }>()
13
13
 
14
- function processDepthFirst(node: GrammarElement): boolean | undefined {
14
+ function processDepthFirst(node: GrammarNode): boolean | undefined {
15
15
  if (visitedNodes.has(node)) {
16
16
  return resolvedNodes.get(node)
17
17
  }
@@ -46,19 +46,19 @@ export function detectAndAnnotateOptionalNodes(rootNode: GrammarElement) {
46
46
  }
47
47
 
48
48
  case 'Sequence': {
49
- const dependencies = new Set<GrammarElement>()
49
+ const dependencies = new Set<GrammarNode>()
50
50
 
51
51
  let hasNonOptionalResolvedMember = false
52
52
 
53
- for (const element of node.members) {
54
- const result = processDepthFirst(element)
53
+ for (const member of node.members) {
54
+ const result = processDepthFirst(member)
55
55
 
56
56
  if (isBoolean(result)) {
57
57
  if (result === false) {
58
58
  hasNonOptionalResolvedMember = true
59
59
  }
60
60
  } else {
61
- dependencies.add(element)
61
+ dependencies.add(member)
62
62
  }
63
63
  }
64
64
 
@@ -82,18 +82,18 @@ export function detectAndAnnotateOptionalNodes(rootNode: GrammarElement) {
82
82
  }
83
83
 
84
84
  case 'Choice': {
85
- const dependencies = new Set<GrammarElement>()
85
+ const dependencies = new Set<GrammarNode>()
86
86
  let hasOptionalResolvedMember = false
87
87
 
88
- for (const element of node.members) {
89
- const result = processDepthFirst(element)
88
+ for (const member of node.members) {
89
+ const result = processDepthFirst(member)
90
90
 
91
91
  if (isBoolean(result)) {
92
92
  if (result === true) {
93
93
  hasOptionalResolvedMember = true
94
94
  }
95
95
  } else {
96
- dependencies.add(element)
96
+ dependencies.add(member)
97
97
  }
98
98
  }
99
99
 
@@ -132,7 +132,7 @@ export function detectAndAnnotateOptionalNodes(rootNode: GrammarElement) {
132
132
  // and we should exit the loop.
133
133
  let atLastOneDependencyResolvedInAnyNode = false
134
134
 
135
- const nodesToDelete: GrammarElement[] = []
135
+ const nodesToDelete: GrammarNode[] = []
136
136
 
137
137
  // Scan the unresolved nodes to locate any new resolved dependencies
138
138
  for (const [node, { dependencies, isChoice }] of unresolvedNodes) {
@@ -151,12 +151,14 @@ export function detectAndAnnotateOptionalNodes(rootNode: GrammarElement) {
151
151
  if (value === true) {
152
152
  resolvedNodes.set(node, true)
153
153
  nodeResolved = true
154
+
154
155
  break
155
156
  }
156
157
  } else {
157
158
  if (value === false) {
158
159
  resolvedNodes.set(node, false)
159
160
  nodeResolved = true
161
+
160
162
  break
161
163
  }
162
164
  }
@@ -204,10 +206,10 @@ export function detectAndAnnotateOptionalNodes(rootNode: GrammarElement) {
204
206
  }
205
207
  }
206
208
 
207
- export function detectAndErrorOnLeftRecursion(rootNode: GrammarElement) {
208
- const currentlyIteratedNodes = new Set<GrammarElement>()
209
+ export function detectAndErrorOnLeftRecursion(rootNode: GrammarNode) {
210
+ const currentlyIteratedNodes = new Set<GrammarNode>()
209
211
 
210
- function detect(node: GrammarElement) {
212
+ function detect(node: GrammarNode) {
211
213
  if (currentlyIteratedNodes.has(node)) {
212
214
  if (node.type === 'Nonterminal') {
213
215
  throw new Error(`Detected left recursion for nonterminal '${node.name}'.`)
@@ -4,7 +4,7 @@ import type { PatternTerminal, StringTerminal, Terminal } from './Grammar.js'
4
4
  /////////////////////////////////////////////////////////////////////////////////////////////////
5
5
  // Terminal to text conversion
6
6
  /////////////////////////////////////////////////////////////////////////////////////////////////
7
- export class TerminalToText {
7
+ export class TerminalFormatter {
8
8
  constructor(private stringifiedLengthLimit: number) {
9
9
  }
10
10
 
package/src/tests/Test.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { Timer } from '../utilities/Timer.js'
2
2
  import { jsonSample1, jsonSample2 } from './test-data/TestData.js'
3
3
  import { anyOf, buildGrammar } from '../exports/Exports.js'
4
- import { JsonGrammar, jsonGrammarUnwrappedNonterminalNames } from './test-grammars/JsonGrammar.js'
5
- import { XmlGrammar, xmlGrammarUnwrappedNonterminalNames } from './test-grammars/XmlGrammar.js'
6
- import { RegExpGrammar, regExpGrammarUnwrappedNonterminalNames } from './test-grammars/RegExpGrammar.js'
4
+ import { JsonGrammar, jsonGrammarUnfoldedNonterminalNames } from './test-grammars/JsonGrammar.js'
5
+ import { XmlGrammar, xmlGrammarUnfoldedNonterminalNames } from './test-grammars/XmlGrammar.js'
6
+ import { RegExpGrammar, regExpGrammarUnfoldedNonterminalNames } from './test-grammars/RegExpGrammar.js'
7
7
  import { writeFile } from 'fs/promises'
8
8
  import { SimpleTestGrammar1 } from './test-grammars/SimpleTestGrammar1.js'
9
9
 
@@ -31,7 +31,7 @@ function testJsonParser() {
31
31
  const jsonString = jsonSample1
32
32
 
33
33
  const grammar = buildGrammar(JsonGrammar, 'expression', {
34
- unwrappedNonterminalNames: jsonGrammarUnwrappedNonterminalNames
34
+ unfoldedNonterminalNames: jsonGrammarUnfoldedNonterminalNames
35
35
  })
36
36
 
37
37
  const iterations = 1000
@@ -66,7 +66,7 @@ async function testXmlParser() {
66
66
  `
67
67
  // Build the grammar. 'document' is the starting production
68
68
  const grammar = buildGrammar(XmlGrammar, 'document', {
69
- unwrappedNonterminalNames: xmlGrammarUnwrappedNonterminalNames
69
+ unfoldedNonterminalNames: xmlGrammarUnfoldedNonterminalNames
70
70
  })
71
71
 
72
72
  // Parse the XML string
@@ -87,7 +87,7 @@ async function testRegExpParser() {
87
87
  //const regExpString = '(abcd)(aa))'
88
88
 
89
89
  const grammar = buildGrammar(RegExpGrammar, 'root', {
90
- unwrappedNonterminalNames: regExpGrammarUnwrappedNonterminalNames
90
+ unfoldedNonterminalNames: regExpGrammarUnfoldedNonterminalNames
91
91
  })
92
92
 
93
93
  const parseTree = grammar.parse(regExpString)
@@ -115,9 +115,9 @@ function createPatternWithClearedWhitespace(subpattern: R.Pattern) {
115
115
  const zeroOrMoreWhitespace = R.zeroOrMore(R.whitespace)
116
116
 
117
117
  //////////////////////////////////////////////////////////////////////////////////////////////
118
- // Wrapped nonterminal names
118
+ // Unfolded nonterminal list
119
119
  //////////////////////////////////////////////////////////////////////////////////////////////
120
- export const jsonGrammarUnwrappedNonterminalNames: G.GrammarNonterminalNames<JsonGrammar> = [
120
+ export const jsonGrammarUnfoldedNonterminalNames: G.GrammarNonterminalNames<JsonGrammar> = [
121
121
  //'stringLiteral',
122
122
  //'numberLiteral',
123
123
  //'booleanLiteral',
@@ -394,9 +394,9 @@ const escapedChars = {
394
394
  }
395
395
 
396
396
  //////////////////////////////////////////////////////////////////////////////////////////////
397
- // Wrapped nonterminal names
397
+ // Unfolded nonterminal list
398
398
  //////////////////////////////////////////////////////////////////////////////////////////////
399
- export const regExpGrammarUnwrappedNonterminalNames: G.GrammarNonterminalNames<RegExpGrammar> = [
399
+ export const regExpGrammarUnfoldedNonterminalNames: G.GrammarNonterminalNames<RegExpGrammar> = [
400
400
  'disjunctionOrSequence',
401
401
  'group',
402
402
  'backReference',
@@ -144,9 +144,9 @@ const quotedString = R.anyOf(
144
144
  )
145
145
 
146
146
  //////////////////////////////////////////////////////////////////////////////////////////////
147
- // Wrapped nonterminal names
147
+ // Unfolded nonterminal list
148
148
  //////////////////////////////////////////////////////////////////////////////////////////////
149
- export const xmlGrammarUnwrappedNonterminalNames: G.GrammarNonterminalNames<XmlGrammar> = [
149
+ export const xmlGrammarUnfoldedNonterminalNames: G.GrammarNonterminalNames<XmlGrammar> = [
150
150
  'openingTagStart',
151
151
  'tagEnd',
152
152
  'declarationTagOpening',
@@ -1 +0,0 @@
1
- {"version":3,"file":"TerminalToText.d.ts","sourceRoot":"","sources":["../../src/parser/TerminalToText.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAK7E,qBAAa,cAAc;IACd,OAAO,CAAC,sBAAsB;IAA1C,YAAoB,sBAAsB,EAAE,MAAM,EACjD;IAED,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAM5C;IAED,uBAAuB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAExD;IAED,wBAAwB,CAAC,QAAQ,EAAE,eAAe,UAmBjD;IAED,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CA+FzC;IAED,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUlD;IAED,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAgBjD;IAED,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAMvD;CACD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgB/C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TerminalToText.js","sourceRoot":"","sources":["../../src/parser/TerminalToText.ts"],"names":[],"mappings":"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"}