clarity-pattern-parser 3.0.16 → 4.0.1

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 (169) hide show
  1. package/README.md +0 -191
  2. package/dist/ast/Node.d.ts +4 -5
  3. package/dist/index.browser.js +476 -731
  4. package/dist/index.browser.js.map +1 -1
  5. package/dist/index.d.ts +10 -18
  6. package/dist/index.esm.js +469 -716
  7. package/dist/index.esm.js.map +1 -1
  8. package/dist/index.js +476 -731
  9. package/dist/index.js.map +1 -1
  10. package/dist/patterns/And.d.ts +24 -0
  11. package/dist/patterns/Literal.d.ts +19 -0
  12. package/dist/patterns/LookAhead.d.ts +8 -0
  13. package/dist/patterns/Not.d.ts +11 -0
  14. package/dist/patterns/Or.d.ts +22 -0
  15. package/dist/patterns/Pattern.d.ts +6 -7
  16. package/dist/patterns/{RecursivePattern.d.ts → Recursive.d.ts} +4 -4
  17. package/dist/patterns/Reference.d.ts +14 -0
  18. package/dist/patterns/Regex.d.ts +21 -0
  19. package/dist/patterns/Repeat.d.ts +20 -0
  20. package/package.json +1 -1
  21. package/src/CursorHistory.ts +1 -1
  22. package/src/TextSuggester.ts +1 -1
  23. package/src/ast/Node.ts +20 -17
  24. package/src/ast/Visitor.ts +14 -18
  25. package/src/index.ts +17 -33
  26. package/src/patterns/And.ts +178 -0
  27. package/src/patterns/Literal.ts +91 -0
  28. package/src/patterns/Not.ts +50 -0
  29. package/src/patterns/Or.ts +132 -0
  30. package/src/patterns/Pattern.ts +31 -47
  31. package/src/patterns/Recursive.ts +92 -0
  32. package/src/patterns/{ReferencePattern.ts → Reference.ts} +32 -28
  33. package/src/patterns/Regex.ts +123 -0
  34. package/src/patterns/Repeat.ts +155 -0
  35. package/src/tests/{AndValue.test.ts → And.test.ts} +31 -41
  36. package/src/tests/CursorHistory.test.ts +6 -6
  37. package/src/tests/Cusor.test.ts +7 -10
  38. package/src/tests/Literal.test.ts +3 -5
  39. package/src/tests/LookAhead.test.ts +2 -51
  40. package/src/tests/Not.test.ts +51 -0
  41. package/src/tests/Or.test.ts +113 -0
  42. package/src/tests/Pattern.test.ts +40 -139
  43. package/src/tests/{RecursivePattern.test.ts → Recursive.test.ts} +10 -8
  44. package/src/tests/Reference.test.ts +16 -0
  45. package/src/tests/{RepeatValue.test.ts → Repeat.test.ts} +10 -42
  46. package/src/tests/TextSuggester.test.ts +30 -28
  47. package/src/tests/{NodeVisitor.test.ts → Visitor.test.ts} +42 -21
  48. package/src/tests/cssPatterns/cssValue.ts +2 -2
  49. package/src/tests/cssPatterns/divider.ts +2 -2
  50. package/src/tests/cssPatterns/hex.ts +2 -2
  51. package/src/tests/cssPatterns/method.ts +7 -9
  52. package/src/tests/cssPatterns/name.ts +2 -2
  53. package/src/tests/cssPatterns/number.ts +2 -2
  54. package/src/tests/cssPatterns/optionalSpaces.ts +1 -2
  55. package/src/tests/cssPatterns/spaces.ts +2 -2
  56. package/src/tests/cssPatterns/unit.ts +3 -3
  57. package/src/tests/cssPatterns/value.ts +2 -2
  58. package/src/tests/cssPatterns/values.ts +2 -2
  59. package/src/tests/htmlPatterns/element.ts +18 -33
  60. package/src/tests/javascriptPatterns/boolean.ts +2 -3
  61. package/src/tests/javascriptPatterns/json.ts +14 -26
  62. package/src/tests/javascriptPatterns/name.ts +3 -20
  63. package/src/tests/javascriptPatterns/number.ts +2 -2
  64. package/src/tests/javascriptPatterns/objectLiteral.ts +9 -16
  65. package/src/tests/javascriptPatterns/string.ts +26 -24
  66. package/src/tests/javascriptPatterns/unit.ts +3 -6
  67. package/src/tests/javascriptPatterns/whitespace.ts +8 -12
  68. package/src/tests/naturalLanguage/filter.ts +16 -33
  69. package/src/tests/patterns/sentence.ts +8 -8
  70. package/dist/Cursor.js +0 -105
  71. package/dist/Cursor.js.map +0 -1
  72. package/dist/CursorHistory.js +0 -104
  73. package/dist/CursorHistory.js.map +0 -1
  74. package/dist/Permutor.d.ts +0 -13
  75. package/dist/Permutor.js +0 -52
  76. package/dist/Permutor.js.map +0 -1
  77. package/dist/TextSuggester.js +0 -244
  78. package/dist/TextSuggester.js.map +0 -1
  79. package/dist/ast/CompositeNode.d.ts +0 -6
  80. package/dist/ast/CompositeNode.js +0 -17
  81. package/dist/ast/CompositeNode.js.map +0 -1
  82. package/dist/ast/Node.js +0 -16
  83. package/dist/ast/Node.js.map +0 -1
  84. package/dist/ast/NodeVisitor.d.ts +0 -31
  85. package/dist/ast/ValueNode.d.ts +0 -6
  86. package/dist/ast/ValueNode.js +0 -14
  87. package/dist/ast/ValueNode.js.map +0 -1
  88. package/dist/ast/Visitor.js +0 -209
  89. package/dist/ast/Visitor.js.map +0 -1
  90. package/dist/patterns/ParseError.js +0 -9
  91. package/dist/patterns/ParseError.js.map +0 -1
  92. package/dist/patterns/Pattern.js +0 -127
  93. package/dist/patterns/Pattern.js.map +0 -1
  94. package/dist/patterns/RecursivePattern.js +0 -65
  95. package/dist/patterns/RecursivePattern.js.map +0 -1
  96. package/dist/patterns/composite/AndComposite.d.ts +0 -22
  97. package/dist/patterns/composite/AndComposite.js +0 -117
  98. package/dist/patterns/composite/AndComposite.js.map +0 -1
  99. package/dist/patterns/composite/CompositePattern.d.ts +0 -4
  100. package/dist/patterns/composite/CompositePattern.js +0 -7
  101. package/dist/patterns/composite/CompositePattern.js.map +0 -1
  102. package/dist/patterns/composite/OptionalComposite.d.ts +0 -10
  103. package/dist/patterns/composite/OptionalComposite.js +0 -29
  104. package/dist/patterns/composite/OptionalComposite.js.map +0 -1
  105. package/dist/patterns/composite/OrComposite.d.ts +0 -16
  106. package/dist/patterns/composite/OrComposite.js +0 -69
  107. package/dist/patterns/composite/OrComposite.js.map +0 -1
  108. package/dist/patterns/composite/RepeatComposite.d.ts +0 -21
  109. package/dist/patterns/composite/RepeatComposite.js +0 -88
  110. package/dist/patterns/composite/RepeatComposite.js.map +0 -1
  111. package/dist/patterns/value/AndValue.d.ts +0 -21
  112. package/dist/patterns/value/AndValue.js +0 -118
  113. package/dist/patterns/value/AndValue.js.map +0 -1
  114. package/dist/patterns/value/AnyOfThese.d.ts +0 -18
  115. package/dist/patterns/value/AnyOfThese.js +0 -59
  116. package/dist/patterns/value/AnyOfThese.js.map +0 -1
  117. package/dist/patterns/value/Literal.d.ts +0 -20
  118. package/dist/patterns/value/Literal.js +0 -63
  119. package/dist/patterns/value/Literal.js.map +0 -1
  120. package/dist/patterns/value/NotValue.d.ts +0 -17
  121. package/dist/patterns/value/NotValue.js +0 -70
  122. package/dist/patterns/value/NotValue.js.map +0 -1
  123. package/dist/patterns/value/OptionalValue.d.ts +0 -9
  124. package/dist/patterns/value/OptionalValue.js +0 -32
  125. package/dist/patterns/value/OptionalValue.js.map +0 -1
  126. package/dist/patterns/value/OrValue.d.ts +0 -19
  127. package/dist/patterns/value/OrValue.js +0 -73
  128. package/dist/patterns/value/OrValue.js.map +0 -1
  129. package/dist/patterns/value/RegexValue.d.ts +0 -19
  130. package/dist/patterns/value/RegexValue.js +0 -69
  131. package/dist/patterns/value/RegexValue.js.map +0 -1
  132. package/dist/patterns/value/RepeatValue.d.ts +0 -19
  133. package/dist/patterns/value/RepeatValue.js +0 -89
  134. package/dist/patterns/value/RepeatValue.js.map +0 -1
  135. package/dist/patterns/value/ValuePattern.d.ts +0 -5
  136. package/dist/patterns/value/ValuePattern.js +0 -7
  137. package/dist/patterns/value/ValuePattern.js.map +0 -1
  138. package/src/Permutor.ts +0 -64
  139. package/src/ast/CompositeNode.ts +0 -26
  140. package/src/ast/ValueNode.ts +0 -28
  141. package/src/patterns/RecursivePattern.ts +0 -86
  142. package/src/patterns/composite/AndComposite.ts +0 -159
  143. package/src/patterns/composite/CompositePattern.ts +0 -7
  144. package/src/patterns/composite/OptionalComposite.ts +0 -37
  145. package/src/patterns/composite/OrComposite.ts +0 -96
  146. package/src/patterns/composite/RepeatComposite.ts +0 -130
  147. package/src/patterns/value/AndValue.ts +0 -152
  148. package/src/patterns/value/AnyOfThese.ts +0 -81
  149. package/src/patterns/value/Literal.ts +0 -92
  150. package/src/patterns/value/NotValue.ts +0 -95
  151. package/src/patterns/value/OptionalValue.ts +0 -39
  152. package/src/patterns/value/OrValue.ts +0 -103
  153. package/src/patterns/value/RegexValue.ts +0 -103
  154. package/src/patterns/value/RepeatValue.ts +0 -131
  155. package/src/patterns/value/ValuePattern.ts +0 -8
  156. package/src/tests/AndComposite.test.ts +0 -102
  157. package/src/tests/AnyOfThese.test.ts +0 -74
  158. package/src/tests/CompositeNode.test.ts +0 -33
  159. package/src/tests/NotValue.test.ts +0 -76
  160. package/src/tests/OptionalValue.test.ts +0 -50
  161. package/src/tests/OrComposite.test.ts +0 -75
  162. package/src/tests/OrValue.test.ts +0 -171
  163. package/src/tests/Permutor.test.ts +0 -30
  164. package/src/tests/ReferencePattern.test.ts +0 -24
  165. package/src/tests/RegexValue.test.ts +0 -22
  166. package/src/tests/RepeatComposite.test.ts +0 -58
  167. package/src/tests/ValueNode.test.ts +0 -24
  168. package/src/tests/javascriptPatterns/varStatement.ts +0 -0
  169. package/src/tests/readmeDemo.test.ts +0 -124
@@ -1 +1 @@
1
- {"version":3,"file":"index.browser.js","sources":["../src/ast/Node.ts","../src/ast/CompositeNode.ts","../src/ast/ValueNode.ts","../src/CursorHistory.ts","../src/Cursor.ts","../src/patterns/ParseError.ts","../src/patterns/Pattern.ts","../src/patterns/value/ValuePattern.ts","../src/patterns/value/RegexValue.ts","../src/patterns/value/OptionalValue.ts","../src/patterns/value/AndValue.ts","../src/patterns/value/AnyOfThese.ts","../src/patterns/value/Literal.ts","../src/patterns/value/NotValue.ts","../src/patterns/value/OrValue.ts","../src/patterns/value/RepeatValue.ts","../src/patterns/composite/CompositePattern.ts","../src/patterns/composite/OptionalComposite.ts","../src/patterns/composite/AndComposite.ts","../src/patterns/composite/OrComposite.ts","../src/patterns/composite/RepeatComposite.ts","../src/patterns/RecursivePattern.ts","../src/TextSuggester.ts","../src/ast/Visitor.ts"],"sourcesContent":["export default abstract class Node {\n public type: string;\n public name: string;\n public startIndex: number;\n public endIndex: number;\n public isComposite: boolean;\n public children: Node[] = [];\n public value: string = \"\";\n\n constructor(\n type: string,\n name: string,\n startIndex: number,\n endIndex: number,\n isComposite = false\n ) {\n this.type = type;\n this.name = name;\n this.startIndex = startIndex;\n this.endIndex = endIndex;\n this.isComposite = isComposite;\n\n if (\n typeof this.startIndex !== \"number\" ||\n typeof this.endIndex !== \"number\"\n ) {\n throw new Error(\n \"Invalid Arguments: startIndex and endIndex need to be number.\"\n );\n }\n }\n\n abstract clone(): Node;\n\n abstract toString(): string;\n}\n","import Node from \"./Node\";\n\nexport default class CompositeNode extends Node {\n constructor(type: string, name: string, startIndex = 0, endIndex = 0) {\n super(type, name, startIndex, endIndex, true);\n }\n\n clone() {\n const node = new CompositeNode(\n this.type,\n this.name,\n this.startIndex,\n this.endIndex\n );\n\n node.children = this.children.map((child) => {\n return child.clone();\n });\n\n return node;\n }\n\n toString() {\n return this.children.map((child) => child.toString()).join(\"\");\n }\n}\n","import Node from \"./Node\";\n\nexport default class ValueNode extends Node {\n constructor(\n type: string,\n name: string,\n value: string,\n startIndex = 0,\n endIndex = 0\n ) {\n super(type, name, startIndex, endIndex);\n this.value = value;\n }\n\n clone() {\n return new ValueNode(\n this.type,\n this.name,\n this.value,\n this.startIndex,\n this.endIndex\n );\n }\n\n toString() {\n return this.value;\n }\n}\n","import Pattern from \"./patterns/Pattern\";\nimport Node from \"./ast/Node\";\nimport ParseError from \"./patterns/ParseError\";\n\nexport interface Match {\n pattern: Pattern | null;\n astNode: Node | null;\n}\n\nexport default class CursorHistory {\n public isRecording: boolean;\n public furthestMatch: Match;\n public furthestError: ParseError | null;\n public patterns: Pattern[];\n public astNodes: Node[];\n public errors: ParseError[];\n\n constructor() {\n this.isRecording = false;\n\n this.furthestMatch = {\n pattern: null,\n astNode: null,\n };\n\n this.furthestError = null;\n\n this.patterns = [];\n this.astNodes = [];\n this.errors = [];\n }\n\n addMatch(pattern: Pattern, astNode: Node) {\n if (this.isRecording) {\n this.patterns.push(pattern);\n this.astNodes.push(astNode);\n }\n\n if (\n this.furthestMatch.astNode == null ||\n astNode.endIndex >= this.furthestMatch.astNode.endIndex\n ) {\n this.furthestMatch.pattern = pattern;\n this.furthestMatch.astNode = astNode;\n }\n }\n\n addError(error: ParseError) {\n if (this.isRecording) {\n this.errors.push(error);\n }\n\n if (this.furthestError == null || error.index >= this.furthestError.index) {\n this.furthestError = error;\n }\n }\n\n startRecording() {\n this.isRecording = true;\n }\n\n stopRecording() {\n this.isRecording = false;\n this.clear();\n }\n\n clear() {\n this.patterns.length = 0;\n this.astNodes.length = 0;\n this.errors.length = 0;\n }\n\n getFurthestError() {\n return this.furthestError;\n }\n\n getFurthestMatch() {\n return this.furthestMatch;\n }\n\n getLastMatch() {\n if (this.isRecording) {\n return {\n pattern: this.patterns[this.patterns.length - 1] || null,\n astNode: this.astNodes[this.astNodes.length - 1] || null,\n } as Match;\n } else {\n return this.furthestMatch as Match;\n }\n }\n\n getLastError() {\n return this.errors[this.errors.length - 1] || null;\n }\n\n getAllParseStacks() {\n const stacks = this.astNodes.reduce((acc: Node[][], node) => {\n let container: Node[] = acc[acc.length - 1];\n\n if (node.startIndex === 0) {\n container = [];\n acc.push(container);\n }\n\n container.push(node);\n\n return acc;\n }, []);\n\n // There are times when the matching will fail and hit again on the same node.\n // This filters them out.\n // We simply check to see if there is any overlap with the previous one,\n // and if there is we don't add it. This is why we move backwards.\n const cleanedStack = stacks.map((stack: Node[]) => {\n const cleanedStack = [];\n\n for (let x = stack.length - 1; x >= 0; x--) {\n const currentNode = stack[x];\n const previousNode = stack[x + 1];\n\n if (previousNode == null) {\n cleanedStack.unshift(currentNode);\n } else {\n const left = Math.max(\n currentNode.startIndex,\n previousNode.startIndex\n );\n const right = Math.min(currentNode.endIndex, previousNode.endIndex);\n const isOverlapping = left <= right;\n\n if (!isOverlapping) {\n cleanedStack.unshift(currentNode);\n }\n }\n }\n return cleanedStack;\n });\n\n return cleanedStack;\n }\n\n getLastParseStack() {\n const stacks = this.getAllParseStacks();\n return stacks[stacks.length - 1] || [];\n }\n}\n","import Pattern from \"./patterns/Pattern\";\nimport Node from \"./ast/Node\";\nimport CursorHistory from \"./CursorHistory\";\nimport ParseError from \"./patterns/ParseError\";\n\nexport default class Cursor {\n public text: string;\n public index: number;\n public length: number;\n public history: CursorHistory;\n public isInErrorState: boolean;\n\n constructor(text: string) {\n this.text = text;\n this.assertValidity();\n\n this.index = 0;\n this.length = text.length;\n this.history = new CursorHistory();\n this.isInErrorState = false;\n }\n\n assertValidity() {\n if (this.isNullOrEmpty(this.text)) {\n throw new Error(\n \"Illegal Argument: Cursor needs to have a string that has a length greater than 0.\"\n );\n }\n }\n\n startRecording() {\n this.history.startRecording();\n }\n\n stopRecording() {\n this.history.stopRecording();\n }\n\n get parseError() {\n return this.history.getFurthestError();\n }\n\n get lastMatch() {\n return this.history.getFurthestMatch();\n }\n\n throwError(parseError: ParseError) {\n this.isInErrorState = true;\n this.history.addError(parseError);\n }\n\n addMatch(pattern: Pattern, astNode: Node) {\n this.history.addMatch(pattern, astNode);\n }\n\n resolveError() {\n this.isInErrorState = false;\n }\n\n hasUnresolvedError() {\n return this.isInErrorState;\n }\n\n isNullOrEmpty(value: string | null) {\n return value == null || (typeof value === \"string\" && value.length === 0);\n }\n\n hasNext() {\n return this.index + 1 < this.text.length;\n }\n\n hasPrevious() {\n return this.index - 1 >= 0;\n }\n\n next() {\n if (this.hasNext()) {\n this.index++;\n } else {\n throw new Error(\"Cursor: Out of Bounds Exception.\");\n }\n }\n\n previous() {\n if (this.hasPrevious()) {\n this.index--;\n } else {\n throw new Error(\"Cursor: Out of Bounds Exception.\");\n }\n }\n\n mark() {\n return this.index;\n }\n\n moveToMark(mark: number) {\n this.index = mark;\n }\n\n moveToBeginning() {\n this.index = 0;\n }\n\n moveToEnd() {\n this.index = this.text.length - 1;\n }\n\n getChar() {\n return this.text.charAt(this.index);\n }\n\n getIndex() {\n return this.index;\n }\n\n setIndex(index: number) {\n if (typeof index === \"number\") {\n if (index < 0 || index > this.lastIndex()) {\n throw new Error(\"Cursor: Out of Bounds Exception.\");\n }\n\n this.index = index;\n }\n }\n\n isAtBeginning() {\n return this.index === 0;\n }\n\n isAtEnd() {\n return this.index === this.text.length - 1;\n }\n\n lastIndex() {\n return this.length - 1;\n }\n\n didSuccessfullyParse() {\n return !this.hasUnresolvedError() && this.isAtEnd();\n }\n}\n","import Pattern from \"./Pattern\";\n\nexport default class ParseError {\n public message: string;\n public name: string;\n public index: number;\n public pattern: Pattern;\n\n constructor(message: string, index: number, pattern: Pattern) {\n this.name = \"ParseError\";\n this.message = message;\n this.index = index;\n this.pattern = pattern;\n }\n}\n","import Cursor from \"../Cursor\";\nimport Node from \"../ast/Node\";\n\nexport default abstract class Pattern {\n protected _type: string;\n protected _name: string;\n protected _children: Pattern[];\n protected _parent: Pattern | null;\n public isSequence: boolean;\n\n constructor(type: string = \"\", name: string, children: Pattern[] = []) {\n this._type = type;\n this._name = name;\n this._children = [];\n this._parent = null;\n this.isSequence = false;\n\n this._assertName();\n this.children = children;\n }\n\n private _assertName() {\n if (typeof this.name !== \"string\") {\n throw new Error(\n \"Invalid Argument: Patterns needs to have a name that's a string.\"\n );\n }\n }\n\n abstract parse(cursor: Cursor): Node | null;\n\n exec(text: string) {\n const cursor = new Cursor(text);\n const node = this.parse(cursor);\n\n if (cursor.didSuccessfullyParse()) {\n return node;\n } else {\n return null;\n }\n }\n\n test(text: string) {\n return this.exec(text) != null;\n }\n\n get name() {\n return this._name;\n }\n\n get type() {\n return this._type;\n }\n\n get parent() {\n return this._parent;\n }\n\n set parent(value: Pattern | null) {\n if (value instanceof Pattern) {\n this._parent = value;\n }\n }\n\n get children() {\n return this._children;\n }\n\n set children(value) {\n this._children = value;\n this._cloneChildren();\n this._assertChildren();\n this._assignAsParent();\n }\n\n protected _assertChildren() {\n // Empty,can be overridden by subclasses.\n }\n\n private _cloneChildren() {\n // We need to clone the patterns so nested patterns can be parsed.\n this._children = this._children.map((pattern) => {\n if (!(pattern instanceof Pattern)) {\n throw new Error(\n `The ${this.name} pattern has an invalid child pattern.`\n );\n }\n return pattern.clone();\n });\n\n // We need to freeze the children so they aren't modified.\n Object.freeze(this._children);\n }\n\n private _assignAsParent() {\n this._children.forEach((child) => (child.parent = this));\n }\n\n abstract clone(name?: string): Pattern;\n\n abstract getTokens(): string[];\n\n getNextTokens(): string[] {\n const parent = this._parent;\n\n if (parent != null) {\n const siblings = parent.children;\n const index = siblings.findIndex((c) => c === this);\n const nextSibling = siblings[index + 1];\n\n // I don't like this, so I think we need to rethink this.\n if (parent.type.indexOf(\"repeat\") === 0) {\n const tokens = parent.getNextTokens();\n if (index === 0 && siblings.length > 1) {\n return nextSibling.getTokens().concat(tokens);\n } else if (index === 1) {\n return siblings[0].getTokens();\n } else {\n return this.getTokens().concat(tokens);\n }\n }\n\n // Another thing I don't like.\n if (\n this._parent?.type?.indexOf(\"and\") === 0 &&\n nextSibling != null &&\n nextSibling?.type?.indexOf(\"optional\") === 0\n ) {\n let tokens: string[] = [];\n\n for (let x = index + 1; x < siblings.length; x++) {\n const child = siblings[x];\n\n if (child.type.indexOf(\"optional\") === 0) {\n tokens = tokens.concat(child.getTokens());\n } else {\n tokens = tokens.concat(child.getTokens());\n break;\n }\n\n if (x === siblings.length - 1) {\n tokens = tokens.concat(this._parent.getNextTokens());\n }\n }\n\n return tokens;\n }\n\n // If you are an or you have already qualified.\n if (parent.type.indexOf(\"or\") === 0) {\n return parent.getNextTokens();\n }\n\n if (nextSibling != null) {\n return nextSibling.getTokens();\n } else {\n return parent.getNextTokens();\n }\n }\n\n return [];\n }\n\n getTokenValue(): string | null {\n return null;\n }\n}\n","import Pattern from \"../Pattern\";\n\nexport default abstract class ValuePattern extends Pattern {\n constructor(type: string, name: string, children: ValuePattern[] = []) {\n super(type, name, children);\n }\n abstract clone(name?: string): ValuePattern;\n}\n","import ParseError from \"../ParseError\";\nimport ValueNode from \"../../ast/ValueNode\";\nimport ValuePattern from \"./ValuePattern\";\nimport Cursor from \"../../Cursor\";\n\nexport default class RegexValue extends ValuePattern {\n public regexString: string;\n public regex: RegExp;\n public node: ValueNode | null = null;\n public cursor!: Cursor;\n public substring: string = \"\";\n\n constructor(name: string, regex: string) {\n super(\"regex-value\", name);\n this.regexString = regex;\n this.regex = new RegExp(`^${regex}`, \"g\");\n this._assertArguments();\n }\n\n private _assertArguments() {\n if (typeof this.regexString !== \"string\") {\n throw new Error(\n \"Invalid Arguments: The regex argument needs to be a string of regex.\"\n );\n }\n\n if (this.regexString.length < 1) {\n throw new Error(\n \"Invalid Arguments: The regex string argument needs to be at least one character long.\"\n );\n }\n\n if (this.regexString.charAt(0) === \"^\") {\n throw new Error(\n \"Invalid Arguments: The regex string cannot start with a '^' because it is expected to be in the middle of a string.\"\n );\n }\n\n if (this.regexString.charAt(this.regexString.length - 1) === \"$\") {\n throw new Error(\n \"Invalid Arguments: The regex string cannot end with a '$' because it is expected to be in the middle of a string.\"\n );\n }\n }\n\n parse(cursor: Cursor) {\n this._reset(cursor);\n this._tryPattern();\n\n return this.node;\n }\n\n private _reset(cursor: Cursor) {\n this.cursor = cursor;\n this.regex.lastIndex = 0;\n this.substring = this.cursor.text.substr(this.cursor.getIndex());\n this.node = null;\n }\n\n private _tryPattern() {\n const result = this.regex.exec(this.substring);\n\n if (result != null && result.index === 0) {\n const currentIndex = this.cursor.getIndex();\n const newIndex = currentIndex + result[0].length - 1;\n\n this.node = new ValueNode(\n \"regex-value\",\n this.name,\n result[0],\n currentIndex,\n newIndex\n );\n\n this.cursor.index = newIndex;\n this.cursor.addMatch(this, this.node);\n } else {\n this._processError();\n }\n }\n\n private _processError() {\n const message = `ParseError: Expected regex pattern of '${this.regexString}' but found '${this.substring}'.`;\n const parseError = new ParseError(message, this.cursor.getIndex(), this);\n\n this.cursor.throwError(parseError);\n }\n\n clone(name: string) {\n if (typeof name !== \"string\") {\n name = this.name;\n }\n return new RegexValue(name, this.regexString);\n }\n\n getTokenValue() {\n return this.name;\n }\n\n getTokens() {\n return [this.name];\n }\n}\n","import ValuePattern from \"./ValuePattern\";\nimport Pattern from \"../Pattern\";\nimport Cursor from \"../../Cursor\";\n\nexport default class OptionalValue extends ValuePattern {\n constructor(pattern: ValuePattern) {\n super(\"optional-value\", \"optional-value\", [pattern]);\n this._assertArguments();\n }\n\n private _assertArguments() {\n if (!(this.children[0] instanceof ValuePattern)) {\n throw new Error(\"Invalid Arguments: Expected a ValuePattern.\");\n }\n }\n\n parse(cursor: Cursor) {\n const mark = cursor.mark();\n\n const node = this.children[0].parse(cursor);\n\n if (cursor.hasUnresolvedError() || node == null) {\n cursor.resolveError();\n cursor.moveToMark(mark);\n return null;\n } else {\n cursor.addMatch(this, node);\n return node;\n }\n }\n\n clone() {\n return new OptionalValue(this.children[0] as ValuePattern);\n }\n\n getTokens() {\n return this._children[0].getTokens();\n }\n}\n","import ValuePattern from \"./ValuePattern\";\nimport ValueNode from \"../../ast/ValueNode\";\nimport ParseError from \"../../patterns/ParseError\";\nimport OptionalValue from \"./OptionalValue\";\nimport Permutor from \"../../Permutor\";\nimport Cursor from \"../../Cursor\";\n\nconst permutor = new Permutor();\n\nexport default class AndValue extends ValuePattern {\n public index: number = 0;\n public nodes: ValueNode[] = [];\n public node: ValueNode | null = null;\n public cursor!: Cursor;\n public mark: number = 0;\n\n constructor(name: string, patterns: ValuePattern[]) {\n super(\"and-value\", name, patterns);\n this._assertArguments();\n }\n\n private _assertArguments() {\n if (this._children.length < 2) {\n throw new Error(\n \"Invalid Argument: AndValue needs to have more than one value pattern.\"\n );\n }\n }\n\n private _reset(cursor: Cursor) {\n this.index = 0;\n this.nodes = [];\n this.node = null;\n this.cursor = cursor;\n this.mark = this.cursor.mark();\n }\n\n parse(cursor: Cursor) {\n this._reset(cursor);\n this._tryPatterns();\n\n return this.node;\n }\n\n private _tryPatterns() {\n while (true) {\n const pattern = this._children[this.index];\n const node = pattern.parse(this.cursor) as ValueNode;\n\n if (this.cursor.hasUnresolvedError()) {\n break;\n } else {\n this.nodes.push(node);\n }\n\n if (!this._next()) {\n this._processValue();\n break;\n }\n }\n }\n\n private _next() {\n if (this._hasMorePatterns()) {\n if (this.cursor.hasNext()) {\n // If the last result was a failed optional, then don't increment the cursor.\n if (this.nodes[this.nodes.length - 1] != null) {\n this.cursor.next();\n }\n\n this.index++;\n return true;\n } else if (this.nodes[this.nodes.length - 1] == null) {\n this.index++;\n return true;\n }\n\n this._assertRestOfPatternsAreOptional();\n return false;\n } else {\n return false;\n }\n }\n\n private _hasMorePatterns() {\n return this.index + 1 < this._children.length;\n }\n\n private _assertRestOfPatternsAreOptional() {\n const areTheRestOptional = this.children.every((pattern, index) => {\n return index <= this.index || pattern instanceof OptionalValue;\n });\n\n if (!areTheRestOptional) {\n const parseError = new ParseError(\n `Could not match ${this.name} before string ran out.`,\n this.index,\n this\n );\n\n this.cursor.throwError(parseError);\n }\n }\n\n private _processValue() {\n if (this.cursor.hasUnresolvedError()) {\n this.node = null;\n } else {\n this.nodes = this.nodes.filter((node) => node != null);\n\n const lastNode = this.nodes[this.nodes.length - 1];\n const startIndex = this.mark;\n const endIndex = lastNode.endIndex;\n const value = this.nodes.map((node) => node.value).join(\"\");\n\n this.node = new ValueNode(\n \"and-value\",\n this.name,\n value,\n startIndex,\n endIndex\n );\n\n this.cursor.index = this.node.endIndex;\n this.cursor.addMatch(this, this.node);\n }\n }\n\n clone(name?: string) {\n if (typeof name !== \"string\") {\n name = this.name;\n }\n return new AndValue(name, this._children as ValuePattern[]);\n }\n\n getTokens() {\n let tokens: string[] = [];\n\n for (let x = 0; x < this._children.length; x++) {\n const child = this._children[x];\n\n if (child instanceof OptionalValue) {\n tokens = tokens.concat(child.getTokens());\n } else {\n tokens = tokens.concat(child.getTokens());\n break;\n }\n }\n\n return tokens;\n }\n}\n","import ValuePattern from \"./ValuePattern\";\nimport ParseError from \"../ParseError\";\nimport ValueNode from \"../../ast/ValueNode\";\nimport Pattern from \"../Pattern\";\nimport Cursor from \"../../Cursor\";\n\nexport default class AnyOfThese extends ValuePattern {\n public characters: string;\n public node: ValueNode | null = null;\n public cursor!: Cursor;\n public mark: number = 0;\n\n constructor(name: string, characters: string) {\n super(\"any-of-these\", name);\n this.characters = characters;\n this._assertArguments();\n }\n\n private _assertArguments() {\n if (typeof this.characters !== \"string\") {\n throw new Error(\n \"Invalid Arguments: The characters argument needs to be a string of characters.\"\n );\n }\n\n if (this.characters.length < 1) {\n throw new Error(\n \"Invalid Arguments: The characters argument needs to be at least one character long.\"\n );\n }\n }\n\n parse(cursor: Cursor) {\n this._reset(cursor);\n this._tryPattern();\n return this.node;\n }\n\n private _reset(cursor: Cursor) {\n this.cursor = cursor;\n this.mark = this.cursor.mark();\n this.node = null;\n }\n\n private _tryPattern() {\n if (this._isMatch()) {\n const value = this.cursor.getChar();\n const index = this.cursor.getIndex();\n\n this.node = new ValueNode(\"any-of-these\", this.name, value, index, index);\n\n this.cursor.addMatch(this, this.node);\n } else {\n this._processError();\n }\n }\n\n private _isMatch() {\n return this.characters.indexOf(this.cursor.getChar()) > -1;\n }\n\n private _processError() {\n const message = `ParseError: Expected one of these characters, '${\n this.characters\n }' but found '${this.cursor.getChar()}' while parsing for '${this.name}'.`;\n\n const parseError = new ParseError(message, this.cursor.getIndex(), this);\n this.cursor.throwError(parseError);\n }\n\n clone(name?: string) {\n if (typeof name !== \"string\") {\n name = this.name;\n }\n return new AnyOfThese(name, this.characters);\n }\n\n getTokens() {\n return this.characters.split(\"\");\n }\n}\n","import ParseError from \"../ParseError\";\nimport ValueNode from \"../../ast/ValueNode\";\nimport ValuePattern from \"./ValuePattern\";\nimport Cursor from \"../../Cursor\";\n\nexport default class Literal extends ValuePattern {\n public literal: string;\n public node: ValueNode | null = null;\n public cursor!: Cursor;\n public mark: number = 0;\n public substring: string = \"\";\n\n constructor(name: string, literal: string) {\n super(\"literal\", name);\n this.literal = literal;\n this._assertArguments();\n }\n\n private _assertArguments() {\n if (typeof this.literal !== \"string\") {\n throw new Error(\n \"Invalid Arguments: The literal argument needs to be a string of characters.\"\n );\n }\n\n if (this.literal.length < 1) {\n throw new Error(\n \"Invalid Arguments: The literalString argument needs to be at least one character long.\"\n );\n }\n }\n\n parse(cursor: Cursor) {\n this._reset(cursor);\n this._tryPattern();\n\n return this.node;\n }\n\n private _reset(cursor: Cursor) {\n this.cursor = cursor;\n this.mark = this.cursor.mark();\n this.substring = this.cursor.text.substring(\n this.mark,\n this.mark + this.literal.length\n );\n this.node = null;\n }\n\n private _tryPattern() {\n if (this.substring === this.literal) {\n this._processMatch();\n } else {\n this._processError();\n }\n }\n\n private _processError() {\n const message = `ParseError: Expected '${this.literal}' but found '${this.substring}'.`;\n\n const parseError = new ParseError(message, this.cursor.getIndex(), this);\n this.cursor.throwError(parseError);\n }\n\n private _processMatch() {\n this.node = new ValueNode(\n \"literal\",\n this.name,\n this.substring,\n this.mark,\n this.mark + this.literal.length - 1\n );\n\n this.cursor.index = this.node.endIndex;\n this.cursor.addMatch(this, this.node);\n }\n\n clone(name?: string) {\n if (typeof name !== \"string\") {\n name = this.name;\n }\n return new Literal(name, this.literal);\n }\n\n getTokenValue() {\n return this.literal;\n }\n\n getTokens() {\n return [this.getTokenValue()];\n }\n}\n","import ValuePattern from \"./ValuePattern\";\nimport ValueNode from \"../../ast/ValueNode\";\nimport ParseError from \"../ParseError\";\nimport Pattern from \"../Pattern\";\nimport Cursor from \"../../Cursor\";\n\nexport default class NotValue extends ValuePattern {\n public match: string = \"\";\n public node: ValueNode | null = null;\n public cursor!: Cursor;\n public mark: number = 0;\n\n constructor(name: string, pattern: ValuePattern) {\n super(\"not-value\", name, [pattern]);\n this._assertArguments();\n }\n\n private _assertArguments() {\n if (!(this.children[0] instanceof Pattern)) {\n throw new Error(\n \"Invalid Arguments: Expected the pattern to be a ValuePattern.\"\n );\n }\n\n if (typeof this.name !== \"string\") {\n throw new Error(\"Invalid Arguments: Expected name to be a string.\");\n }\n }\n\n private _reset(cursor: Cursor) {\n this.match = \"\";\n this.node = null;\n this.cursor = cursor;\n this.mark = this.cursor.mark();\n }\n\n parse(cursor: Cursor) {\n this._reset(cursor);\n this._tryPattern();\n\n return this.node;\n }\n\n private _tryPattern() {\n while (true) {\n const mark = this.cursor.mark();\n this.children[0].parse(this.cursor);\n\n if (this.cursor.hasUnresolvedError()) {\n this.cursor.resolveError();\n this.cursor.moveToMark(mark);\n this.match += this.cursor.getChar();\n break;\n } else {\n this.cursor.moveToMark(mark);\n break;\n }\n }\n\n this._processMatch();\n }\n\n private _processMatch() {\n if (this.match.length === 0) {\n const parseError = new ParseError(\n `Didn't find any characters that didn't match the ${this.children[0].name} pattern.`,\n this.mark,\n this\n );\n this.cursor.throwError(parseError);\n } else {\n this.node = new ValueNode(\n \"not-value\",\n this.name,\n this.match,\n this.mark,\n this.mark\n );\n\n this.cursor.index = this.node.endIndex;\n this.cursor.addMatch(this, this.node);\n }\n }\n\n clone(name?: string) {\n if (typeof name !== \"string\") {\n name = this.name;\n }\n return new NotValue(name, this.children[0] as ValuePattern);\n }\n\n getTokens() {\n return [];\n }\n}\n","import ValuePattern from \"./ValuePattern\";\nimport ValueNode from \"../../ast/ValueNode\";\nimport OptionalValue from \"./OptionalValue\";\nimport Pattern from \"../Pattern\";\nimport ParseError from \"../ParseError\";\nimport Cursor from \"../../Cursor\";\n\nexport default class OrValue extends ValuePattern {\n public index: number = 0;\n public errors: ParseError[] = [];\n public node: ValueNode | null = null;\n public cursor!: Cursor;\n public mark: number = 0;\n public parseError: ParseError | null = null;\n\n constructor(name: string, patterns: ValuePattern[]) {\n super(\"or-value\", name, patterns);\n this._assertArguments();\n }\n\n private _assertArguments() {\n if (this._children.length < 2) {\n throw new Error(\n \"Invalid Argument: OrValue needs to have more than one value pattern.\"\n );\n }\n\n const hasOptionalChildren = this._children.some(\n (pattern) => pattern instanceof OptionalValue\n );\n\n if (hasOptionalChildren) {\n throw new Error(\"OrValues cannot have optional values.\");\n }\n }\n\n private _reset(cursor: Cursor) {\n this.index = 0;\n this.errors = [];\n this.node = null;\n this.cursor = cursor;\n this.mark = cursor.mark();\n }\n\n parse(cursor: Cursor) {\n this._reset(cursor);\n this._tryPattern();\n\n return this.node;\n }\n\n private _tryPattern() {\n while (true) {\n const pattern = this._children[this.index];\n const node = pattern.parse(this.cursor) as ValueNode;\n\n if (this.cursor.hasUnresolvedError()) {\n if (this.index + 1 < this._children.length) {\n this.cursor.resolveError();\n this.index++;\n this.cursor.moveToMark(this.mark);\n } else {\n this.node = null;\n break;\n }\n } else {\n this.node = new ValueNode(\n \"or-value\",\n this.name,\n node.value,\n node.startIndex,\n node.endIndex\n );\n\n this.cursor.index = this.node.endIndex;\n this.cursor.addMatch(this, this.node);\n\n break;\n }\n }\n }\n\n clone(name: string) {\n if (typeof name !== \"string\") {\n name = this.name;\n }\n return new OrValue(name, this._children as ValuePattern[]);\n }\n\n getTokens() {\n const tokens = this._children.map((c) => c.getTokens());\n\n const hasPrimitiveTokens = tokens.every((t) =>\n t.every((value) => typeof value === \"string\")\n );\n\n if (hasPrimitiveTokens && tokens.length > 0) {\n return tokens.reduce((acc, t) => acc.concat(t), []);\n }\n\n return this._children[0].getTokens();\n }\n}\n","import ValuePattern from \"./ValuePattern\";\nimport ValueNode from \"../../ast/ValueNode\";\nimport ParseError from \"../ParseError\";\nimport OptionalValue from \"./OptionalValue\";\nimport Pattern from \"../Pattern\";\nimport Cursor from \"../../Cursor\";\n\nexport default class RepeatValue extends ValuePattern {\n public _pattern: ValuePattern;\n public _divider: ValuePattern;\n public nodes: ValueNode[] = [];\n public cursor!: Cursor;\n public mark: number = 0;\n public node: ValueNode | null = null;\n\n constructor(name: string, pattern: ValuePattern, divider?: ValuePattern) {\n super(\n \"repeat-value\",\n name,\n divider != null ? [pattern, divider] : [pattern]\n );\n\n this._pattern = this.children[0] as ValuePattern;\n this._divider = this.children[1] as ValuePattern;\n\n this._assertArguments();\n }\n\n private _assertArguments() {\n if (this._pattern instanceof OptionalValue) {\n throw new Error(\n \"Invalid Arguments: The pattern cannot be a optional pattern.\"\n );\n }\n }\n\n private _reset(cursor: Cursor) {\n this.nodes = [];\n this.cursor = cursor;\n this.mark = this.cursor.mark();\n }\n\n parse(cursor: Cursor) {\n this._reset(cursor);\n this._tryPattern();\n\n return this.node;\n }\n\n private _tryPattern() {\n while (true) {\n const node = this._pattern.parse(this.cursor) as ValueNode;\n\n if (this.cursor.hasUnresolvedError()) {\n this._processMatch();\n break;\n } else {\n this.nodes.push(node);\n\n if (node.endIndex === this.cursor.lastIndex()) {\n this._processMatch();\n break;\n }\n\n this.cursor.next();\n\n if (this._divider != null) {\n const mark = this.cursor.mark();\n const node = this._divider.parse(this.cursor) as ValueNode;\n\n if (this.cursor.hasUnresolvedError()) {\n this.cursor.moveToMark(mark);\n this._processMatch();\n break;\n } else {\n this.nodes.push(node);\n\n if (node.endIndex === this.cursor.lastIndex()) {\n this._processMatch();\n break;\n }\n\n this.cursor.next();\n }\n }\n }\n }\n }\n\n private _processMatch() {\n const endsOnDivider = this.nodes.length % 2 === 0;\n const noMatch = this.nodes.length === 0;\n const hasDivider = this._divider != null;\n\n this.cursor.resolveError();\n\n if ((hasDivider && endsOnDivider) || noMatch) {\n const parseError = new ParseError(\n `Did not find a repeating match of ${this.name}.`,\n this.mark,\n this\n );\n this.cursor.throwError(parseError);\n this.node = null;\n } else {\n const value = this.nodes.map((node) => node.value).join(\"\");\n\n this.node = new ValueNode(\n \"repeat-value\",\n this.name,\n value,\n this.nodes[0].startIndex,\n this.nodes[this.nodes.length - 1].endIndex\n );\n\n this.cursor.index = this.node.endIndex;\n this.cursor.addMatch(this, this.node);\n }\n }\n\n clone(name?: string) {\n if (typeof name !== \"string\") {\n name = this.name;\n }\n return new RepeatValue(name, this._pattern, this._divider);\n }\n\n getTokens() {\n return this._pattern.getTokens();\n }\n}\n","import Pattern from \"../Pattern\";\n\nexport default abstract class CompositePattern extends Pattern {\n constructor(type: string, name: string, children: Pattern[] = []) {\n super(type, name, children);\n }\n}\n","import CompositePattern from \"./CompositePattern\";\nimport Pattern from \"../Pattern\";\nimport Cursor from \"../../Cursor\";\n\nexport default class OptionalComposite extends CompositePattern {\n\tpublic mark: any;\n\n constructor(pattern: Pattern) {\n super(\"optional-composite\", \"optional-composite\", [pattern]);\n }\n\n parse(cursor: Cursor) {\n const mark = cursor.mark();\n this.mark = mark;\n\n const node = this.children[0].parse(cursor);\n\n if (cursor.hasUnresolvedError()) {\n cursor.resolveError();\n cursor.moveToMark(mark);\n return null;\n } else {\n if (node != null){\n cursor.addMatch(this, node);\n }\n return node;\n }\n }\n\n clone() {\n return new OptionalComposite(this.children[0]);\n }\n\n getTokens() {\n return this._children[0].getTokens();\n }\n}\n","import CompositePattern from \"./CompositePattern\";\nimport CompositeNode from \"../../ast/CompositeNode\";\nimport ParseError from \"../../patterns/ParseError\";\nimport OptionalValue from \"../value/OptionalValue\";\nimport OptionalComposite from \"./OptionalComposite\";\nimport Pattern from \"../Pattern\";\nimport Cursor from \"../../Cursor\";\n\n\nexport default class AndComposite extends CompositePattern {\n public index!: number;\n public nodes!: CompositeNode[];\n public node!: CompositeNode | null;\n public cursor!: Cursor;\n public mark!: number;\n\n constructor(name: string, patterns: Pattern[] = []) {\n super(\"and-composite\", name, patterns);\n this._assertArguments();\n }\n\n private _assertArguments() {\n if (this._children.length < 2) {\n throw new Error(\n \"Invalid Argument: AndValue needs to have more than one value pattern.\"\n );\n }\n }\n\n private _reset(cursor: Cursor) {\n this.index = 0;\n this.nodes = [];\n this.node = null;\n this.cursor = cursor;\n this.mark = this.cursor.mark();\n }\n\n parse(cursor: Cursor) {\n this._reset(cursor);\n this._tryPatterns();\n\n return this.node;\n }\n\n private _tryPatterns() {\n while (true) {\n const pattern = this._children[this.index];\n const node = pattern.parse(this.cursor) as CompositeNode;\n\n if (this.cursor.hasUnresolvedError()) {\n this.cursor.moveToMark(this.mark);\n break;\n } else {\n this.nodes.push(node);\n }\n\n if (!this._next()) {\n this._processValue();\n break;\n }\n }\n }\n\n private _next() {\n if (this._hasMorePatterns()) {\n if (this.cursor.hasNext()) {\n // If the last result was a failed optional, then don't increment the cursor.\n if (this.nodes[this.nodes.length - 1] != null) {\n this.cursor.next();\n }\n\n this.index++;\n return true;\n } else if (this.nodes[this.nodes.length - 1] == null) {\n this.index++;\n return true;\n }\n\n this._assertRestOfPatternsAreOptional();\n return false;\n } else {\n return false;\n }\n }\n\n private _hasMorePatterns() {\n return this.index + 1 < this._children.length;\n }\n\n private _assertRestOfPatternsAreOptional() {\n const areTheRestOptional = this.children.every((pattern, index) => {\n return (\n index <= this.index ||\n pattern instanceof OptionalValue ||\n pattern instanceof OptionalComposite\n );\n });\n\n if (!areTheRestOptional) {\n const parseError = new ParseError(\n `Could not match ${this.name} before string ran out.`,\n this.index,\n this\n );\n this.cursor.throwError(parseError);\n }\n }\n\n private _processValue() {\n if (!this.cursor.hasUnresolvedError()) {\n this.nodes = this.nodes.filter((node) => node != null);\n\n const lastNode = this.nodes[this.nodes.length - 1];\n const startIndex = this.mark;\n const endIndex = lastNode.endIndex;\n\n this.node = new CompositeNode(\n \"and-composite\",\n this.name,\n startIndex,\n endIndex\n );\n\n this.node.children = this.nodes;\n\n this.cursor.index = this.node.endIndex;\n this.cursor.addMatch(this, this.node);\n } else {\n this.node = null;\n }\n }\n\n clone(name?: string) {\n if (typeof name !== \"string\") {\n name = this.name;\n }\n return new AndComposite(name, this._children);\n }\n\n getTokens() {\n let tokens: string[] = [];\n\n for (let x = 0; x < this._children.length; x++) {\n const child = this._children[x];\n\n if (\n child instanceof OptionalValue ||\n child instanceof OptionalComposite\n ) {\n tokens = tokens.concat(child.getTokens());\n } else {\n tokens = tokens.concat(child.getTokens());\n break;\n }\n }\n\n return tokens;\n }\n}\n","import CompositePattern from \"./CompositePattern\";\nimport OptionalValue from \"../value/OptionalValue\";\nimport OptionalComposite from \"./OptionalComposite\";\nimport Pattern from \"../Pattern\";\nimport Cursor from \"../../Cursor\";\n\nexport default class OrComposite extends CompositePattern {\n public cursor: any;\n public mark: any;\n public index: any;\n public node: any;\n\n constructor(name: string, patterns: Pattern[]) {\n super(\"or-composite\", name, patterns);\n this._assertArguments();\n }\n\n private _assertArguments() {\n if (this._children.length < 2) {\n throw new Error(\n \"Invalid Argument: OrValue needs to have more than one value pattern.\"\n );\n }\n\n const hasOptionalChildren = this._children.some(\n (pattern) =>\n pattern instanceof OptionalValue || pattern instanceof OptionalComposite\n );\n\n if (hasOptionalChildren) {\n throw new Error(\"OrComposite cannot have optional values.\");\n }\n }\n\n private _reset(cursor: Cursor) {\n this.cursor = cursor;\n this.mark = null;\n this.index = 0;\n this.node = null;\n this.mark = cursor.mark();\n }\n\n parse(cursor: Cursor) {\n this._reset(cursor);\n this._tryPattern();\n\n if (this.node != null) {\n this.cursor.addMatch(this, this.node);\n }\n\n return this.node;\n }\n\n private _tryPattern() {\n while (true) {\n const pattern = this._children[this.index];\n\n this.node = pattern.parse(this.cursor);\n\n if (this.cursor.hasUnresolvedError()) {\n if (this.index + 1 < this._children.length) {\n this.cursor.resolveError();\n this.index++;\n this.cursor.moveToMark(this.mark);\n } else {\n this.node = null;\n break;\n }\n } else {\n this.cursor.index = this.node.endIndex;\n break;\n }\n }\n }\n\n clone(name?: string) {\n if (typeof name !== \"string\") {\n name = this.name;\n }\n return new OrComposite(name, this._children);\n }\n\n getTokens() {\n const tokens = this._children.map((c) => c.getTokens());\n\n const hasPrimitiveTokens = tokens.every((t) =>\n t.every((value) => typeof value === \"string\")\n );\n\n if (hasPrimitiveTokens && tokens.length > 0) {\n return tokens.reduce((acc, t) => acc.concat(t), []);\n }\n\n return this._children[0].getTokens();\n }\n}\n","import CompositePattern from \"./CompositePattern\";\nimport CompositeNode from \"../../ast/CompositeNode\";\nimport ParseError from \"../ParseError\";\nimport OptionalComposite from \"./OptionalComposite\";\nimport Pattern from \"../Pattern\";\nimport Cursor from \"../../Cursor\";\nimport Node from \"../../ast/Node\";\n\nexport default class RepeatComposite extends CompositePattern {\n private _pattern: Pattern;\n private _divider: Pattern;\n public nodes: Node[] = [];\n public cursor!: Cursor;\n public mark: number = 0;\n public node: CompositeNode | null = null;\n\n constructor(name: string, pattern: Pattern, divider?: Pattern) {\n super(\n \"repeat-composite\",\n name,\n divider != null ? [pattern, divider] : [pattern]\n );\n this._pattern = this.children[0];\n this._divider = this.children[1];\n this._assertArguments();\n }\n\n private _assertArguments() {\n if (this._pattern instanceof OptionalComposite) {\n throw new Error(\n \"Invalid Arguments: The pattern cannot be a optional pattern.\"\n );\n }\n }\n\n private _reset(cursor: Cursor) {\n this.nodes = [];\n this.cursor = cursor;\n this.mark = this.cursor.mark();\n }\n\n parse(cursor: Cursor) {\n this._reset(cursor);\n this._tryPattern();\n\n return this.node;\n }\n\n private _tryPattern() {\n while (true) {\n const node = this._pattern.parse(this.cursor);\n\n if (this.cursor.hasUnresolvedError() || node == null) {\n this._processMatch();\n break;\n } else {\n this.nodes.push(node);\n\n if (node.endIndex === this.cursor.lastIndex()) {\n this._processMatch();\n break;\n }\n\n this.cursor.next();\n\n if (this._divider != null) {\n const mark = this.cursor.mark();\n const node = this._divider.parse(this.cursor);\n\n if (this.cursor.hasUnresolvedError() || node == null) {\n this.cursor.moveToMark(mark);\n this._processMatch();\n break;\n } else {\n this.nodes.push(node);\n\n if (node.endIndex === this.cursor.lastIndex()) {\n this._processMatch();\n break;\n }\n\n this.cursor.next();\n }\n }\n }\n }\n }\n\n private _processMatch() {\n const endsOnDivider = this.nodes.length % 2 === 0;\n const noMatch = this.nodes.length === 0;\n const hasDivider = this._divider != null;\n\n this.cursor.resolveError();\n\n if ((hasDivider && endsOnDivider) || noMatch) {\n this.cursor.throwError(\n new ParseError(\n `Did not find a repeating match of ${this.name}.`,\n this.mark,\n this\n )\n );\n this.node = null;\n } else {\n this.node = new CompositeNode(\n \"repeat-composite\",\n this.name,\n this.nodes[0].startIndex,\n this.nodes[this.nodes.length - 1].endIndex\n );\n\n this.node.children = this.nodes;\n this.cursor.index = this.node.endIndex;\n\n this.cursor.addMatch(this, this.node);\n }\n }\n\n clone(name?: string) {\n if (typeof name !== \"string\") {\n name = this.name;\n }\n return new RepeatComposite(name, this._pattern, this._divider);\n }\n\n getTokens() {\n return this._pattern.getTokens();\n }\n}\n","import Pattern from \"./Pattern\";\nimport ParserError from \"./ParseError\";\nimport Cursor from \"../Cursor\";\n\nexport default class RecursivePattern extends Pattern {\n public isRecursing: boolean;\n public pattern: Pattern | null = null;\n\n constructor(name: string) {\n super(\"recursive\", name);\n this.isRecursing = false;\n }\n\n getPattern() {\n return this._climb(this.parent, (pattern: Pattern | null) => {\n if (pattern == null) {\n return false;\n }\n return pattern.name === this.name;\n });\n }\n\n _climb(\n pattern: Pattern | null,\n isMatch: (pattern: Pattern | null) => boolean\n ): Pattern | null {\n if (isMatch(pattern)) {\n return pattern;\n } else {\n if (pattern && pattern.parent != null) {\n return this._climb(pattern.parent, isMatch);\n }\n return null;\n }\n }\n\n parse(cursor: Cursor) {\n if (this.pattern == null) {\n const pattern = this.getPattern();\n\n if (pattern == null) {\n cursor.throwError(\n new ParserError(\n `Couldn't find parent pattern to recursively parse, with the name ${this.name}.`,\n cursor.index,\n this as Pattern\n )\n );\n return null;\n }\n\n this.pattern = pattern.clone();\n this.pattern.parent = this as Pattern;\n }\n\n const node = this.pattern.parse(cursor);\n\n if (!cursor.hasUnresolvedError() && node != null) {\n cursor.addMatch(this as Pattern, node);\n }\n\n return node;\n }\n\n clone(name?: string): Pattern {\n if (typeof name !== \"string\") {\n name = this.name;\n }\n return new RecursivePattern(name);\n }\n\n getTokenValue() {\n return this.getPattern()?.getTokenValue() || null;\n }\n\n getTokens() {\n if (!this.isRecursing) {\n this.isRecursing = true;\n const tokens = this.getPattern()?.getTokens() || [];\n this.isRecursing = false;\n\n return tokens;\n }\n return [];\n }\n}\n","import Node from \"./ast/Node\";\nimport Cursor from \"./Cursor\";\nimport { Match } from \"./CursorHistory\";\nimport Pattern from \"./patterns/Pattern\";\n\nexport interface Token {\n startIndex: number;\n values: string[];\n}\n\nexport interface SuggestionError {\n startIndex: number;\n endIndex: number;\n text: string;\n}\n\nexport interface SuggestionMatch {\n startIndex: number;\n endIndex: number;\n text: string;\n}\n\nexport interface SuggestionResult {\n pattern: Pattern | null;\n astNode: Node | null;\n match: SuggestionMatch | null;\n error: SuggestionError | null;\n options: Token;\n isComplete: boolean;\n parseStack: Node[];\n}\n\nexport default class TextSuggester {\n private cursor: Cursor | null = null;\n private result: Node | null = null;\n private text: string = \"\";\n private match: SuggestionMatch | null = null;\n private error: SuggestionError | null = null;\n private patternMatch: Match | null = null;\n private matchedText: string = \"\";\n private rootPattern: Pattern | null = null;\n private tokens: Token | null = {\n startIndex: 0,\n values: [],\n };\n private options: string[] = [];\n private parseStack: Node[] = [];\n\n suggest(text: string, pattern: Pattern) {\n this.reset();\n\n this.text = text;\n this.rootPattern = pattern;\n\n // If no text all options are available.\n if (text.length === 0) {\n return {\n pattern: null,\n astNode: null,\n match: null,\n error: null,\n options: {\n startIndex: 0,\n values: pattern.getTokens(),\n },\n isComplete: false,\n parseStack: [],\n } as SuggestionResult;\n }\n\n this.parse();\n this.saveParseStack();\n this.saveMatchedText();\n this.saveMatch();\n this.saveError();\n this.saveOptions();\n this.saveNextToken();\n\n return {\n pattern: this.patternMatch?.pattern || null,\n astNode: this.patternMatch?.astNode || null,\n match: this.match,\n error: this.error,\n options: this.tokens,\n isComplete: this.cursor?.didSuccessfullyParse() || false,\n parseStack: this.parseStack,\n } as SuggestionResult;\n }\n\n private reset() {\n this.cursor = null;\n this.result = null;\n this.text = \"\";\n this.match = null;\n this.error = null;\n this.patternMatch = null;\n this.matchedText = \"\";\n this.rootPattern = null;\n this.tokens = {\n startIndex: 0,\n values: [],\n };\n this.options = [];\n this.parseStack = [];\n }\n\n private parse() {\n this.rootPattern = this.rootPattern;\n this.cursor = new Cursor(this.text || \"\");\n this.cursor.startRecording();\n this.result = this.rootPattern?.parse(this.cursor) || null;\n this.patternMatch = this.cursor.lastMatch;\n }\n\n private saveParseStack() {\n this.parseStack = this.cursor?.history.getLastParseStack() || [];\n }\n\n private saveMatchedText() {\n if (this.patternMatch?.astNode != null) {\n this.matchedText =\n this.text?.substring(0, this.patternMatch.astNode.endIndex + 1) || \"\";\n }\n }\n\n private saveMatch() {\n const node = this.patternMatch?.astNode;\n\n if (node == null) {\n this.match = null;\n return;\n }\n\n let endIndex = this.matchedText.length - 1;\n\n this.match = {\n text: this.matchedText,\n startIndex: 0,\n endIndex: endIndex,\n };\n }\n\n private saveError() {\n if (this.patternMatch?.astNode == null) {\n this.error = {\n startIndex: 0,\n endIndex: this.text.length - 1,\n text: this.text,\n };\n return this;\n }\n\n if (\n this.patternMatch != null &&\n this.text.length > this.matchedText.length\n ) {\n const difference = this.text.length - this.matchedText.length;\n const startIndex = this.patternMatch.astNode.endIndex + 1;\n const endIndex = startIndex + difference - 1;\n\n this.error = {\n startIndex: startIndex,\n endIndex: endIndex,\n text: this.text.substring(startIndex, endIndex + 1),\n };\n\n return;\n } else {\n this.error = null;\n return;\n }\n }\n\n private saveNextToken() {\n const isCompleteMatch =\n this.patternMatch?.pattern === this.rootPattern &&\n this.cursor?.didSuccessfullyParse();\n const noMatch = this.patternMatch?.astNode == null;\n const noOptions = this.options.length === 0;\n\n if (isCompleteMatch && noOptions) {\n this.tokens = null;\n return;\n }\n\n if (noMatch) {\n let options = this.rootPattern?.getTokens();\n\n options = options?.filter((option: any) => {\n return option.indexOf(this.text) > -1;\n });\n\n if (options?.length === 0) {\n this.tokens = null;\n return;\n }\n\n const values = options?.map((option) => {\n const parts = option.split(this.text);\n return parts[1];\n });\n\n this.tokens = {\n startIndex: 0,\n values: values || [],\n };\n\n this.matchedText = this.text;\n this.match = {\n text: this.text,\n startIndex: 0,\n endIndex: this.text.length - 1,\n };\n this.error = null;\n\n return;\n }\n\n const options = this.options;\n let startIndex = this.matchedText.length;\n\n if (this.matchedText.length < this.text.length) {\n const leftOver = this.text.substring(this.matchedText.length);\n const partialMatchOptions = options\n .filter((option: any) => {\n return option.indexOf(leftOver) === 0;\n })\n .map((option: any) => {\n return option.substring(leftOver.length);\n });\n\n if (partialMatchOptions.length === 0) {\n this.tokens = null;\n return;\n } else {\n if (this.match == null) {\n return;\n }\n\n this.match = {\n text: this.match.text + leftOver,\n startIndex: this.match.startIndex,\n endIndex: this.match.endIndex + leftOver.length,\n };\n\n this.error = null;\n\n this.tokens = {\n startIndex: this.match.endIndex + 1,\n values: partialMatchOptions,\n };\n\n return;\n }\n }\n\n this.tokens = {\n startIndex,\n values: options,\n };\n }\n\n private saveOptions() {\n const parents = new Map<Pattern, Pattern>();\n const cursor = this.cursor;\n\n if (cursor == null) {\n this.options = [];\n return;\n }\n\n const furthestMatches = cursor.history.astNodes.reduce(\n (acc: any, node: any, index: any) => {\n const pattern = cursor.history.patterns[index];\n const parent = pattern.parent;\n\n if (parent != null) {\n parents.set(parent, parent);\n }\n\n if (parents.has(pattern)){\n return acc;\n }\n\n if (node.endIndex === acc.furthestTextIndex) {\n acc.nodeIndexes.push(index);\n } else if (node.endIndex > acc.furthestTextIndex) {\n acc.furthestTextIndex = node.endIndex;\n acc.nodeIndexes = [index];\n }\n\n return acc;\n },\n { furthestTextIndex: -1, nodeIndexes: [] }\n );\n\n const matches = furthestMatches.nodeIndexes.reduce(\n (acc: any, index: any) => {\n const pattern = this.cursor?.history.patterns[index];\n const tokens = pattern?.getNextTokens();\n\n tokens?.forEach((token: any) => {\n acc[token] = true;\n });\n\n return acc;\n },\n {}\n );\n\n this.options = Object.keys(matches);\n }\n\n static suggest(text: string, pattern: Pattern) {\n return new TextSuggester().suggest(text, pattern);\n }\n}\n","import Node from \"./Node\";\n\nexport default class Visitor {\n public root: Node | null;\n public selectedNodes: Node[];\n\n constructor(root: Node | null = null, selectedNodes: Node[] = []) {\n this.root = root;\n this.selectedNodes = selectedNodes;\n }\n\n flatten() {\n this.selectedNodes.forEach((node) => {\n if (node.isComposite) {\n const children: Node[] = [];\n\n Visitor.walkUp(node, (descendant: Node) => {\n if (!descendant.isComposite) {\n children.push(descendant);\n }\n });\n\n node.children = children;\n }\n });\n\n return this;\n }\n\n remove() {\n if (this.root == null) {\n return this;\n }\n\n this.recursiveRemove(this.root);\n return this;\n }\n\n private recursiveRemove(node: Node) {\n const nodesToRemove = this.selectedNodes;\n if (node.isComposite && Array.isArray(node.children)) {\n for (let x = 0; x < node.children.length; x++) {\n if (nodesToRemove.indexOf(node.children[x]) > -1) {\n node.children.splice(x, 1);\n x--;\n } else {\n this.recursiveRemove(node.children[x]);\n }\n }\n }\n }\n\n wrap(callback: (node: Node) => Node) {\n const visitor = new Visitor(this.root);\n\n visitor.selectRoot().transform((node) => {\n if (this.selectedNodes.includes(node)) {\n return callback(node);\n }\n return node;\n });\n\n return this;\n }\n\n unwrap() {\n if (this.root == null) {\n return this;\n }\n\n Visitor.walkDown(this.root, (node, stack) => {\n if (this.selectedNodes.includes(node)) {\n const parent = stack[stack.length - 1];\n const grandParent = stack[stack.length - 2];\n\n if (parent != null && grandParent != null) {\n const index = grandParent.children.indexOf(parent);\n if (index > -1) {\n grandParent.children.splice(index, 1, ...parent.children);\n }\n }\n }\n });\n\n return this;\n }\n\n prepend(callback: (node: Node) => Node) {\n if (this.root == null) {\n return this;\n }\n\n Visitor.walkUp(this.root, (node, stack) => {\n if (this.selectedNodes.includes(node)) {\n const parent = stack[stack.length - 1];\n\n if (parent != null) {\n const index = parent.children.indexOf(node);\n if (index > -1) {\n parent.children.splice(index, 0, callback(node));\n }\n }\n }\n });\n\n return this;\n }\n\n append(callback: (node: Node) => Node) {\n if (this.root == null) {\n return this;\n }\n\n Visitor.walkDown(this.root, (node, stack) => {\n if (this.selectedNodes.includes(node)) {\n const parent = stack[stack.length - 1];\n\n if (parent != null) {\n const index = parent.children.indexOf(node);\n if (index > -1) {\n parent.children.splice(index + 1, 0, callback(node));\n }\n }\n }\n });\n\n return this;\n }\n\n transform(callback: (node: Node) => Node) {\n this.selectedNodes.forEach((node) => {\n return this.recursiveTransform(node, callback);\n });\n\n return this;\n }\n\n private recursiveTransform(node: Node, callback: (node: Node) => Node) {\n if (node.isComposite && Array.isArray(node.children)) {\n const length = node.children.length;\n\n for (let x = 0; x < length; x++) {\n node.children[x] = this.recursiveTransform(node.children[x], callback);\n }\n }\n\n return callback(node);\n }\n\n selectAll() {\n return this.select((n) => true);\n }\n\n selectNode(node: Node) {\n return new Visitor(this.root, [...this.selectedNodes, node]);\n }\n\n deselectNode(node: Node) {\n const visitor = new Visitor(this.root, this.selectedNodes.slice());\n return visitor.filter((n) => n !== node);\n }\n\n select(callback: (node: Node) => boolean) {\n if (this.root == null) {\n return this;\n }\n\n const node = this.root;\n const selectedNodes: Node[] = [];\n\n if (node.isComposite) {\n Visitor.walkDown(node, (descendant: Node) => {\n if (callback(descendant)) {\n selectedNodes.push(descendant);\n }\n });\n }\n\n return new Visitor(this.root, selectedNodes);\n }\n\n forEach(callback: (node: Node) => void) {\n this.selectedNodes.forEach(callback);\n return this;\n }\n\n filter(callback: (node: Node) => boolean) {\n return new Visitor(this.root, this.selectedNodes.filter(callback));\n }\n\n map(callback: (node: Node) => Node) {\n return new Visitor(this.root, this.selectedNodes.map(callback));\n }\n\n selectRoot() {\n if (this.root == null) {\n return this;\n }\n\n return new Visitor(this.root, [this.root]);\n }\n\n first() {\n return this.get(0);\n }\n\n last() {\n return this.get(this.selectedNodes.length - 1);\n }\n\n get(index: number) {\n const node = this.selectedNodes[index];\n\n if (node == null) {\n throw new Error(\n `Couldn't find node at index: ${index}, out of ${this.selectedNodes.length}.`\n );\n }\n\n return new Visitor(node, []);\n }\n\n clear() {\n this.selectedNodes = [];\n return this;\n }\n\n setRoot(root: Node | null) {\n this.root = root;\n return this;\n }\n\n static select(root: Node, callback?: (node: Node) => boolean) {\n if (callback != null) {\n return new Visitor(root).select(callback);\n } else {\n return new Visitor(root);\n }\n }\n\n static walkUp(\n node: Node,\n callback: (node: Node, ancestors: Node[]) => void,\n ancestors: Node[] = []\n ) {\n ancestors.push(node);\n\n if (node.isComposite && Array.isArray(node.children)) {\n const children = node.children.slice();\n children.forEach((c) => this.walkUp(c, callback, ancestors));\n }\n\n ancestors.pop();\n callback(node, ancestors);\n\n return this;\n }\n\n static walkDown(\n node: Node,\n callback: (node: Node, ancestors: Node[]) => void,\n ancestors: Node[] = []\n ) {\n callback(node, ancestors);\n ancestors.push(node);\n\n if (node.isComposite && Array.isArray(node.children)) {\n const children = node.children.slice();\n children.forEach((c) => this.walkDown(c, callback, ancestors));\n }\n\n ancestors.pop();\n return this;\n }\n}\n"],"names":["ParserError"],"mappings":"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"}
1
+ {"version":3,"file":"index.browser.js","sources":["../src/ast/Node.ts","../src/CursorHistory.ts","../src/Cursor.ts","../src/patterns/ParseError.ts","../src/patterns/Pattern.ts","../src/patterns/Regex.ts","../src/patterns/And.ts","../src/patterns/Literal.ts","../src/patterns/LookAhead.ts","../src/patterns/Not.ts","../src/patterns/Or.ts","../src/patterns/Repeat.ts","../src/patterns/Recursive.ts","../src/patterns/Reference.ts","../src/TextSuggester.ts","../src/ast/Visitor.ts"],"sourcesContent":["export default class Node {\n public type: string;\n public name: string;\n public startIndex: number;\n public endIndex: number;\n public children: Node[];\n public value: string;\n\n constructor(\n type: string,\n name: string,\n startIndex: number,\n endIndex: number,\n children: Node[] = [],\n value: string = \"\"\n ) {\n this.type = type;\n this.name = name;\n this.startIndex = startIndex;\n this.endIndex = endIndex;\n this.children = children;\n this.value = value;\n }\n\n clone(): Node {\n return new Node(\n this.type,\n this.name,\n this.startIndex,\n this.endIndex,\n this.children.map((c) => c.clone()),\n this.value\n );\n }\n\n toString() {\n return this.value;\n }\n}\n","import Pattern from \"./patterns/Pattern\";\nimport Node from \"./ast/Node\";\nimport ParseError from \"./patterns/ParseError\";\n\nexport interface Match {\n pattern: Pattern | null;\n astNode: Node | null;\n}\n\nexport default class CursorHistory {\n public isRecording: boolean;\n public furthestMatch: Match;\n public furthestError: ParseError | null;\n public patterns: Pattern[];\n public astNodes: Node[];\n public errors: ParseError[];\n\n constructor() {\n this.isRecording = false;\n\n this.furthestMatch = {\n pattern: null,\n astNode: null,\n };\n\n this.furthestError = null;\n\n this.patterns = [];\n this.astNodes = [];\n this.errors = [];\n }\n\n addMatch(pattern: Pattern, astNode: Node) {\n if (this.isRecording) {\n this.patterns.push(pattern);\n this.astNodes.push(astNode);\n }\n\n if (\n this.furthestMatch.astNode == null ||\n astNode.endIndex >= this.furthestMatch.astNode.endIndex\n ) {\n this.furthestMatch.pattern = pattern;\n this.furthestMatch.astNode = astNode;\n }\n }\n\n addError(error: ParseError) {\n if (this.isRecording) {\n this.errors.push(error);\n }\n\n if (this.furthestError == null || error.index >= this.furthestError.index) {\n this.furthestError = error;\n }\n }\n\n startRecording() {\n this.isRecording = true;\n }\n\n stopRecording() {\n this.isRecording = false;\n this.clear();\n }\n\n clear() {\n this.patterns.length = 0;\n this.astNodes.length = 0;\n this.errors.length = 0;\n }\n\n getFurthestError() {\n return this.furthestError;\n }\n\n getFurthestMatch() {\n return this.furthestMatch;\n }\n\n getLastMatch() {\n if (this.isRecording) {\n return {\n pattern: this.patterns[this.patterns.length - 1] || null,\n astNode: this.astNodes[this.astNodes.length - 1] || null,\n } as Match;\n } else {\n return this.furthestMatch as Match;\n }\n }\n\n getLastError() {\n return this.errors[this.errors.length - 1] || null;\n }\n\n getAllParseStacks() {\n const stacks = this.astNodes.reduce((acc: Node[][], node) => {\n let container: Node[] = acc[acc.length - 1];\n\n if (node.startIndex === 0) {\n container = [];\n acc.push(container);\n }\n\n container.push(node);\n\n return acc;\n }, []);\n\n // There are times when the matching will fail and hit again on the same node.\n // This filters them out.\n // We simply check to see if there is any overlap with the previous one,\n // and if there is we don't add it. This is why we move backwards.\n const cleanedStack = stacks.map((stack: Node[]) => {\n const cleanedStack = [];\n\n for (let x = stack.length - 1; x >= 0; x--) {\n const currentNode = stack[x];\n const previousNode = stack[x + 1];\n\n if (previousNode == null) {\n cleanedStack.unshift(currentNode);\n } else {\n const left = Math.max(\n currentNode.startIndex,\n previousNode.startIndex\n );\n const right = Math.min(currentNode.endIndex, previousNode.endIndex);\n const isOverlapping = left <= right;\n\n if (!isOverlapping) {\n cleanedStack.unshift(currentNode);\n }\n }\n }\n return cleanedStack;\n });\n\n return cleanedStack;\n }\n\n getLastParseStack(): Node[] {\n const stacks = this.getAllParseStacks();\n return stacks[stacks.length - 1] || [];\n }\n}\n","import Pattern from \"./patterns/Pattern\";\nimport Node from \"./ast/Node\";\nimport CursorHistory from \"./CursorHistory\";\nimport ParseError from \"./patterns/ParseError\";\n\nexport default class Cursor {\n public text: string;\n public index: number;\n public length: number;\n public history: CursorHistory;\n public isInErrorState: boolean;\n\n constructor(text: string) {\n this.text = text;\n this.assertValidity();\n\n this.index = 0;\n this.length = text.length;\n this.history = new CursorHistory();\n this.isInErrorState = false;\n }\n\n assertValidity() {\n if (this.isNullOrEmpty(this.text)) {\n throw new Error(\n \"Illegal Argument: Cursor needs to have a string that has a length greater than 0.\"\n );\n }\n }\n\n startRecording() {\n this.history.startRecording();\n }\n\n stopRecording() {\n this.history.stopRecording();\n }\n\n get parseError() {\n return this.history.getFurthestError();\n }\n\n get lastMatch() {\n return this.history.getFurthestMatch();\n }\n\n throwError(parseError: ParseError) {\n this.isInErrorState = true;\n this.history.addError(parseError);\n }\n\n addMatch(pattern: Pattern, astNode: Node) {\n this.history.addMatch(pattern, astNode);\n }\n\n resolveError() {\n this.isInErrorState = false;\n }\n\n hasUnresolvedError() {\n return this.isInErrorState;\n }\n\n isNullOrEmpty(value: string | null) {\n return value == null || (typeof value === \"string\" && value.length === 0);\n }\n\n hasNext() {\n return this.index + 1 < this.text.length;\n }\n\n hasPrevious() {\n return this.index - 1 >= 0;\n }\n\n next() {\n if (this.hasNext()) {\n this.index++;\n } else {\n throw new Error(\"Cursor: Out of Bounds Exception.\");\n }\n }\n\n previous() {\n if (this.hasPrevious()) {\n this.index--;\n } else {\n throw new Error(\"Cursor: Out of Bounds Exception.\");\n }\n }\n\n mark() {\n return this.index;\n }\n\n moveToMark(mark: number) {\n this.index = mark;\n }\n\n moveToBeginning() {\n this.index = 0;\n }\n\n moveToEnd() {\n this.index = this.text.length - 1;\n }\n\n getChar() {\n return this.text.charAt(this.index);\n }\n\n getIndex() {\n return this.index;\n }\n\n setIndex(index: number) {\n if (typeof index === \"number\") {\n if (index < 0 || index > this.lastIndex()) {\n throw new Error(\"Cursor: Out of Bounds Exception.\");\n }\n\n this.index = index;\n }\n }\n\n isAtBeginning() {\n return this.index === 0;\n }\n\n isAtEnd() {\n return this.index === this.text.length - 1;\n }\n\n lastIndex() {\n return this.length - 1;\n }\n\n didSuccessfullyParse() {\n return !this.hasUnresolvedError() && this.isAtEnd();\n }\n}\n","import Pattern from \"./Pattern\";\n\nexport default class ParseError {\n public message: string;\n public name: string;\n public index: number;\n public pattern: Pattern;\n\n constructor(message: string, index: number, pattern: Pattern) {\n this.name = \"ParseError\";\n this.message = message;\n this.index = index;\n this.pattern = pattern;\n }\n}\n","import Cursor from \"../Cursor\";\nimport Node from \"../ast/Node\";\n\nexport default abstract class Pattern {\n protected _type: string;\n protected _name: string;\n protected _children: Pattern[];\n protected _parent: Pattern | null;\n protected _isOptional = false;\n\n get isOptional() {\n return this._isOptional;\n }\n\n constructor(\n type: string,\n name: string,\n children: Pattern[] = [],\n isOptional = false\n ) {\n this._type = type;\n this._name = name;\n this._children = [];\n this._parent = null;\n this._isOptional = isOptional;\n this.children = children;\n }\n\n abstract parse(cursor: Cursor): Node | null;\n\n exec(text: string) {\n const cursor = new Cursor(text);\n const node = this.parse(cursor);\n\n if (cursor.didSuccessfullyParse()) {\n return node;\n } else {\n return null;\n }\n }\n\n test(text: string) {\n return this.exec(text) != null;\n }\n\n get name() {\n return this._name;\n }\n\n get type() {\n return this._type;\n }\n\n get parent() {\n return this._parent;\n }\n\n set parent(value: Pattern | null) {\n this._parent = value;\n }\n\n get children() {\n return this._children;\n }\n\n set children(value) {\n this._children = value;\n this.cloneChildren();\n this.assignAsParent();\n }\n\n abstract clone(name?: string): Pattern;\n abstract getTokens(): string[];\n\n getTokenValue(): string | null {\n return null;\n }\n\n getNextTokens(): string[] {\n const parent = this._parent;\n\n if (parent != null) {\n const siblings = parent.children;\n const index = siblings.findIndex((c) => c === this);\n const nextSibling = siblings[index + 1];\n\n // I don't like this, so I think we need to rethink this.\n if (parent.type.indexOf(\"repeat\") === 0) {\n const tokens = parent.getNextTokens();\n if (index === 0 && siblings.length > 1) {\n return nextSibling.getTokens().concat(tokens);\n } else if (index === 1) {\n return siblings[0].getTokens();\n } else {\n return this.getTokens().concat(tokens);\n }\n }\n\n // Another thing I don't like.\n if (\n this._parent?.type?.indexOf(\"and\") === 0 &&\n nextSibling != null &&\n nextSibling.isOptional\n ) {\n let tokens: string[] = [];\n\n for (let x = index + 1; x < siblings.length; x++) {\n const child = siblings[x];\n\n if (child.isOptional) {\n tokens = tokens.concat(child.getTokens());\n } else {\n tokens = tokens.concat(child.getTokens());\n break;\n }\n\n if (x === siblings.length - 1) {\n tokens = tokens.concat(this._parent.getNextTokens());\n }\n }\n\n return tokens;\n }\n\n // If you are an or you have already qualified.\n if (parent.type.indexOf(\"or\") === 0) {\n return parent.getNextTokens();\n }\n\n if (nextSibling != null) {\n return nextSibling.getTokens();\n } else {\n return parent.getNextTokens();\n }\n }\n\n return [];\n }\n\n private cloneChildren() {\n this._children = this._children.map((pattern) => {\n return pattern.clone();\n });\n\n Object.freeze(this._children);\n }\n\n private assignAsParent() {\n this._children.forEach((child) => (child.parent = this));\n }\n}\n","import ParseError from \"./ParseError\";\nimport Node from \"../ast/Node\";\nimport Pattern from \"./Pattern\";\nimport Cursor from \"../Cursor\";\n\nexport default class Regex extends Pattern {\n private regexString: string;\n private regex: RegExp;\n private node: Node | null = null;\n private cursor: Cursor | null = null;\n private substring: string = \"\";\n\n constructor(name: string, regex: string, isOptional = false) {\n super(\"regex\", name, [], isOptional);\n this.regexString = regex;\n this.regex = new RegExp(`^${regex}`, \"g\");\n this.assertArguments();\n }\n\n private assertArguments() {\n if (this.regexString.length < 1) {\n throw new Error(\n \"Invalid Arguments: The regex string argument needs to be at least one character long.\"\n );\n }\n\n if (this.regexString.charAt(0) === \"^\") {\n throw new Error(\n \"Invalid Arguments: The regex string cannot start with a '^' because it is expected to be in the middle of a string.\"\n );\n }\n\n if (this.regexString.charAt(this.regexString.length - 1) === \"$\") {\n throw new Error(\n \"Invalid Arguments: The regex string cannot end with a '$' because it is expected to be in the middle of a string.\"\n );\n }\n }\n\n parse(cursor: Cursor) {\n this.resetState(cursor);\n this.tryToParse();\n\n return this.node;\n }\n\n private resetState(cursor: Cursor) {\n this.cursor = cursor;\n this.regex.lastIndex = 0;\n this.substring = this.cursor.text.substr(this.cursor.getIndex());\n this.node = null;\n }\n\n private tryToParse() {\n const result = this.regex.exec(this.substring);\n\n if (result != null && result.index === 0) {\n this.processResult(result);\n } else {\n this.processError();\n }\n }\n\n private processResult(result: RegExpExecArray) {\n const cursor = this.safelyGetCursor();\n const currentIndex = cursor.getIndex();\n const newIndex = currentIndex + result[0].length - 1;\n\n this.node = new Node(\n \"regex\",\n this.name,\n currentIndex,\n newIndex,\n [],\n result[0]\n );\n\n cursor.moveToMark(newIndex);\n cursor.addMatch(this, this.node);\n }\n\n private processError() {\n const cursor = this.safelyGetCursor();\n\n if (!this._isOptional) {\n const message = `ParseError: Expected regex pattern of '${this.regexString}' but found '${this.substring}'.`;\n const parseError = new ParseError(message, cursor.getIndex(), this);\n\n cursor.throwError(parseError);\n }\n\n this.node = null;\n }\n\n private safelyGetCursor() {\n const cursor = this.cursor;\n\n if (cursor == null) {\n throw new Error(\"Couldn't find cursor.\");\n }\n return cursor;\n }\n\n clone(name?: string, isOptional?: boolean) {\n if (name == null) {\n name = this.name;\n }\n\n if (isOptional == null) {\n isOptional = this._isOptional;\n }\n\n return new Regex(name, this.regexString, isOptional);\n }\n\n getTokenValue() {\n return this.name;\n }\n\n getTokens() {\n return [this.name];\n }\n}","import ParseError from \"../patterns/ParseError\";\nimport Cursor from \"../Cursor\";\nimport Pattern from \"./Pattern\";\nimport Node from \"../ast/Node\";\n\nexport default class And extends Pattern {\n public onPatternIndex: number = 0;\n public nodes: (Node | null)[] = [];\n public node: Node | null = null;\n public cursor: Cursor | null = null;\n public mark: number = 0;\n\n constructor(name: string, patterns: Pattern[], isOptional = false) {\n super(\"and\", name, patterns, isOptional);\n }\n\n parse(cursor: Cursor) {\n this.resetState(cursor);\n this.tryToParse();\n\n return this.node;\n }\n\n clone(name?: string, isOptional?: boolean) {\n if (name == null) {\n name = this.name;\n }\n\n if (isOptional == null){\n isOptional = this._isOptional;\n }\n\n return new And(name, this._children, isOptional);\n }\n\n getTokens() {\n let tokens: string[] = [];\n\n for (let x = 0; x < this._children.length; x++) {\n const child = this._children[x];\n\n if (child.isOptional) {\n tokens = tokens.concat(child.getTokens());\n } else {\n tokens = tokens.concat(child.getTokens());\n break;\n }\n }\n\n return tokens;\n }\n\n private resetState(cursor: Cursor) {\n this.onPatternIndex = 0;\n this.nodes = [];\n this.node = null;\n this.cursor = cursor;\n this.mark = this.cursor.mark();\n }\n\n private tryToParse() {\n const cursor = this.safelyGetCursor();\n\n while (true) {\n const pattern = this._children[this.onPatternIndex];\n const node = pattern.parse(cursor);\n\n if (cursor.hasUnresolvedError()) {\n this.processError();\n break;\n } else {\n this.nodes.push(node);\n }\n\n if (!this.shouldProceed()) {\n this.processResult();\n break;\n }\n }\n }\n\n private safelyGetCursor() {\n const cursor = this.cursor;\n\n if (cursor == null) {\n throw new Error(\"Couldn't find cursor.\");\n }\n return cursor;\n }\n\n private processResult() {\n const cursor = this.safelyGetCursor();\n\n if (cursor.hasUnresolvedError()) {\n this.processError();\n } else {\n this.processSuccess();\n }\n }\n\n private processError() {\n const cursor = this.safelyGetCursor();\n\n if (this.isOptional) {\n cursor.moveToMark(this.mark);\n cursor.resolveError();\n }\n this.node = null;\n }\n\n private shouldProceed() {\n const cursor = this.safelyGetCursor();\n\n if (this.hasMorePatterns()) {\n const lastNode = this.nodes[this.nodes.length - 1];\n const wasOptional = lastNode == null;\n\n if (cursor.hasNext()) {\n if (!wasOptional) {\n cursor.next();\n }\n\n this.onPatternIndex++;\n return true;\n } else if (wasOptional) {\n this.onPatternIndex++;\n return true;\n }\n\n this.assertRestOfPatternsAreOptional();\n return false;\n } else {\n return false;\n }\n }\n\n private hasMorePatterns() {\n return this.onPatternIndex + 1 < this._children.length;\n }\n\n private assertRestOfPatternsAreOptional() {\n const cursor = this.safelyGetCursor();\n const areTheRestOptional = this.areTheRemainingPatternsOptional();\n\n if (!areTheRestOptional) {\n const parseError = new ParseError(\n `Could not match ${this.name} before string ran out.`,\n this.onPatternIndex,\n this\n );\n\n cursor.throwError(parseError);\n }\n }\n\n private areTheRemainingPatternsOptional() {\n return this.children\n .slice(this.onPatternIndex + 1)\n .map((p) => p.isOptional)\n .every((r) => r);\n }\n\n private processSuccess() {\n const cursor = this.safelyGetCursor();\n const nodes = this.nodes.filter((node) => node != null) as Node[];\n this.nodes = nodes;\n\n const lastNode = nodes[this.nodes.length - 1];\n const startIndex = this.mark;\n const endIndex = lastNode.endIndex;\n const value = nodes.map((node) => node.value).join(\"\");\n\n this.node = new Node(\"and\", this.name, startIndex, endIndex, nodes, value);\n\n cursor.index = this.node.endIndex;\n cursor.addMatch(this, this.node);\n }\n}\n","import ParseError from \"./ParseError\";\nimport Node from \"../ast/Node\";\nimport Pattern from \"./Pattern\";\nimport Cursor from \"../Cursor\";\n\nexport default class Literal extends Pattern {\n public literal: string;\n public node: Node | null = null;\n public cursor!: Cursor;\n public mark: number = 0;\n public substring: string = \"\";\n\n constructor(name: string, literal: string, isOptional = false) {\n super(\"literal\", name, [], isOptional);\n this.literal = literal;\n this.assertArguments();\n }\n\n parse(cursor: Cursor) {\n this.resetState(cursor);\n this.tryToParse();\n\n return this.node;\n }\n\n clone(name?: string, isOptional?: boolean) {\n if (name == null) {\n name = this.name;\n }\n\n if (isOptional == null) {\n isOptional = this._isOptional;\n }\n \n return new Literal(name, this.literal, isOptional);\n }\n\n getTokens() {\n return [this.literal];\n }\n\n private assertArguments() {\n if (this.literal.length < 1) {\n throw new Error(\n \"Invalid Arguments: The `literal` argument needs to be at least one character long.\"\n );\n }\n }\n\n private resetState(cursor: Cursor) {\n this.cursor = cursor;\n this.mark = this.cursor.mark();\n this.substring = this.cursor.text.substring(\n this.mark,\n this.mark + this.literal.length\n );\n this.node = null;\n }\n\n private tryToParse() {\n if (this.substring === this.literal) {\n this.processResult();\n } else {\n this.processError();\n }\n }\n\n private processError() {\n this.node = null;\n\n if (!this._isOptional) {\n const message = `ParseError: Expected '${this.literal}' but found '${this.substring}'.`;\n const parseError = new ParseError(message, this.cursor.getIndex(), this);\n this.cursor.throwError(parseError);\n }\n }\n\n private processResult() {\n this.node = new Node(\n \"literal\",\n this.name,\n this.mark,\n this.mark + this.literal.length - 1,\n [],\n this.substring\n );\n\n this.cursor.index = this.node.endIndex;\n this.cursor.addMatch(this, this.node);\n }\n}\n","import Cursor from \"../Cursor\";\nimport ParseError from \"./ParseError\";\nimport Pattern from \"./Pattern\";\n\nexport default class LookAhead extends Pattern {\n constructor(pattern: Pattern) {\n super(\"look-ahead\", \"look-ahead\", [pattern]);\n }\n\n parse(cursor: Cursor) {\n const mark = cursor.mark();\n const node = this.children[0].parse(cursor);\n\n if (cursor.hasUnresolvedError() || node == null) {\n cursor.resolveError();\n cursor.throwError(\n new ParseError(\"Couldn't find look ahead pattern.\", mark, this.children[0])\n );\n cursor.moveToMark(mark);\n }\n\n return null;\n }\n\n clone() {\n return new LookAhead(this.children[0].clone());\n }\n\n getTokens() {\n return [];\n }\n}\n","import Pattern from \"./Pattern\";\nimport ParseError from \"./ParseError\";\nimport Cursor from \"../Cursor\";\n\nexport default class Not extends Pattern {\n public cursor!: Cursor;\n public mark: number = 0;\n\n constructor(pattern: Pattern) {\n super(\"not\", `not-${pattern.name}`, [pattern]);\n this._isOptional = true;\n }\n\n parse(cursor: Cursor) {\n this.cursor = cursor;\n this.mark = cursor.mark();\n this.tryToParse();\n return null;\n }\n\n private tryToParse() {\n const mark = this.cursor.mark();\n this.children[0].parse(this.cursor);\n\n if (this.cursor.hasUnresolvedError()) {\n this.cursor.resolveError();\n this.cursor.moveToMark(mark);\n } else {\n this.cursor.moveToMark(mark);\n const parseError = new ParseError(\n `Match invalid pattern: ${this.children[0].name}.`,\n this.mark,\n this\n );\n this.cursor.throwError(parseError);\n }\n }\n\n clone(name?: string) {\n if (name == null) {\n name = this.name;\n }\n\n return new Not(this.children[0]);\n }\n\n getTokens() {\n return [];\n }\n}\n","import Pattern from \"./Pattern\";\nimport ParseError from \"./ParseError\";\nimport Cursor from \"../Cursor\";\nimport Node from \"../ast/Node\";\n\nexport default class Or extends Pattern {\n public patternIndex: number = 0;\n public errors: ParseError[] = [];\n public node: Node | null = null;\n public cursor: Cursor | null = null;\n public mark: number = 0;\n public parseError: ParseError | null = null;\n\n constructor(name: string, patterns: Pattern[], isOptional = false) {\n super(\"or\", name, patterns, isOptional);\n this.assertArguments();\n }\n\n private assertArguments() {\n if (this._children.length < 2) {\n throw new Error(\n \"Invalid Argument: OrValue needs to have more than one value pattern.\"\n );\n }\n\n const hasOptionalChildren = this._children.some(\n (pattern) => pattern.isOptional\n );\n\n if (hasOptionalChildren) {\n throw new Error(\"OrValues cannot have optional patterns.\");\n }\n }\n\n private resetState(cursor: Cursor) {\n this.patternIndex = 0;\n this.errors = [];\n this.node = null;\n this.cursor = cursor;\n this.mark = cursor.mark();\n }\n\n private safelyGetCursor() {\n const cursor = this.cursor;\n\n if (cursor == null) {\n throw new Error(\"Couldn't find cursor.\");\n }\n return cursor;\n }\n\n parse(cursor: Cursor) {\n this.resetState(cursor);\n this.tryToParse();\n\n return this.node;\n }\n\n private tryToParse() {\n const cursor = this.safelyGetCursor();\n\n while (true) {\n const pattern = this._children[this.patternIndex];\n const node = pattern.parse(cursor);\n const hasError = cursor.hasUnresolvedError();\n\n if (hasError) {\n const shouldBreak = this.processError();\n if (shouldBreak) {\n break;\n }\n } else if (node != null) {\n this.processResult(node);\n break;\n }\n }\n }\n\n private processError() {\n const cursor = this.safelyGetCursor();\n const isLastPattern = this.patternIndex + 1 === this._children.length;\n\n if (!isLastPattern) {\n this.patternIndex++;\n cursor.resolveError();\n cursor.moveToMark(this.mark);\n return false;\n } else {\n if (this._isOptional) {\n cursor.resolveError();\n cursor.moveToMark(this.mark);\n }\n this.node = null;\n return true;\n }\n }\n\n private processResult(node: Node) {\n const cursor = this.safelyGetCursor();\n\n this.node = new Node(\n \"or\",\n this.name,\n node.startIndex,\n node.endIndex,\n [node],\n node.value\n );\n\n cursor.index = this.node.endIndex;\n cursor.addMatch(this, this.node);\n }\n\n clone(name?: string, isOptional?: boolean) {\n if (name == null) {\n name = this.name;\n }\n\n if (isOptional == null) {\n isOptional = this._isOptional;\n }\n\n return new Or(name, this._children, isOptional);\n }\n\n getTokens() {\n return this._children.reduce<string[]>(\n (acc, c) => acc.concat(c.getTokens()),\n []\n );\n }\n}\n","import Pattern from \"./Pattern\";\nimport Node from \"../ast/Node\";\nimport ParseError from \"./ParseError\";\nimport Cursor from \"../Cursor\";\n\nexport default class Repeat extends Pattern {\n public _pattern: Pattern;\n public _divider: Pattern;\n public nodes: Node[] = [];\n public cursor!: Cursor;\n public mark: number = 0;\n public node: Node | null = null;\n\n constructor(\n name: string,\n pattern: Pattern,\n divider?: Pattern,\n isOptional = false\n ) {\n super(\n \"repeat\",\n name,\n divider != null ? [pattern, divider] : [pattern],\n isOptional\n );\n\n this._pattern = this.children[0];\n this._divider = this.children[1];\n this.assertArguments();\n }\n\n private assertArguments() {\n if (this._pattern.isOptional) {\n throw new Error(\n \"Invalid Arguments: The pattern cannot be a optional pattern.\"\n );\n }\n }\n\n private _reset(cursor: Cursor) {\n this.nodes = [];\n this.cursor = cursor;\n this.mark = this.cursor.mark();\n }\n\n parse(cursor: Cursor) {\n this._reset(cursor);\n this.tryToParse();\n\n return this.node;\n }\n\n private tryToParse() {\n const cursor = this.safelyGetCursor();\n\n while (true) {\n const node = this._pattern.parse(cursor);\n\n if (cursor.hasUnresolvedError()) {\n this.processResult();\n break;\n } else if (node != null) {\n this.nodes.push(node);\n\n if (node.endIndex === cursor.lastIndex()) {\n this.processResult();\n break;\n }\n\n cursor.next();\n\n if (this._divider != null) {\n const mark = cursor.mark();\n const node = this._divider.parse(cursor);\n\n if (cursor.hasUnresolvedError()) {\n cursor.moveToMark(mark);\n this.processResult();\n break;\n } else if (node != null) {\n this.nodes.push(node);\n\n if (node.endIndex === cursor.lastIndex()) {\n this.processResult();\n break;\n }\n\n cursor.next();\n }\n }\n }\n }\n }\n\n private processResult() {\n const endsOnDivider = this.nodes.length % 2 === 0;\n const noMatch = this.nodes.length === 0;\n const hasDivider = this._divider != null;\n\n this.cursor.resolveError();\n\n if ((hasDivider && endsOnDivider) || noMatch) {\n if (this._isOptional) {\n this.cursor.moveToMark(this.mark);\n } else {\n const parseError = new ParseError(\n `Did not find a repeating match of ${this.name}.`,\n this.mark,\n this\n );\n this.cursor.throwError(parseError);\n }\n this.node = null;\n } else {\n const value = this.nodes.map((node) => node.value).join(\"\");\n\n this.node = new Node(\n \"repeat\",\n this.name,\n this.nodes[0].startIndex,\n this.nodes[this.nodes.length - 1].endIndex,\n this.nodes,\n value\n );\n\n this.cursor.index = this.node.endIndex;\n this.cursor.addMatch(this, this.node);\n }\n }\n\n private safelyGetCursor() {\n const cursor = this.cursor;\n\n if (cursor == null) {\n throw new Error(\"Couldn't find cursor.\");\n }\n return cursor;\n }\n\n clone(name?: string, isOptional?: boolean) {\n if (name == null) {\n name = this.name;\n }\n\n if (isOptional == null) {\n isOptional = this._isOptional;\n }\n\n return new Repeat(name, this._pattern, this._divider, isOptional);\n }\n\n getTokens() {\n return this._pattern.getTokens();\n }\n}\n","import Pattern from \"./Pattern\";\nimport ParserError from \"./ParseError\";\nimport Cursor from \"../Cursor\";\n\nexport default class Recursive extends Pattern {\n public isRecursing: boolean;\n public pattern: Pattern | null = null;\n\n constructor(name: string, isOptional = false) {\n super(\"recursive\", name, [], isOptional);\n this.isRecursing = false;\n }\n\n getPattern() {\n return this.climb(this.parent, (pattern: Pattern | null) => {\n if (pattern == null) {\n return false;\n }\n return pattern.name === this.name;\n });\n }\n\n private climb(\n pattern: Pattern | null,\n isMatch: (pattern: Pattern | null) => boolean\n ): Pattern | null {\n if (isMatch(pattern)) {\n return pattern;\n } else {\n if (pattern && pattern.parent != null) {\n return this.climb(pattern.parent, isMatch);\n }\n return null;\n }\n }\n\n parse(cursor: Cursor) {\n if (this.pattern == null) {\n const pattern = this.getPattern();\n\n if (pattern == null) {\n if (!this._isOptional){\n cursor.throwError(\n new ParserError(\n `Couldn't find parent pattern to recursively parse, with the name ${this.name}.`,\n cursor.index,\n this\n )\n );\n }\n\n return null;\n }\n\n this.pattern = pattern.clone();\n this.pattern.parent = this;\n }\n\n const mark = cursor.mark();\n const node = this.pattern.parse(cursor);\n\n if (!cursor.hasUnresolvedError() && node != null) {\n cursor.addMatch(this, node);\n }\n\n if (cursor.hasUnresolvedError() && this._isOptional) {\n cursor.resolveError();\n cursor.moveToMark(mark);\n }\n\n return node;\n }\n\n clone(name?: string, isOptional?: boolean) {\n if (name == null) {\n name = this.name;\n }\n\n if (isOptional == null) {\n isOptional = this._isOptional;\n }\n\n return new Recursive(name, isOptional);\n }\n\n getTokenValue() {\n return this.getPattern()?.getTokenValue() || null;\n }\n\n getTokens() {\n if (!this.isRecursing) {\n this.isRecursing = true;\n const tokens = this.getPattern()?.getTokens() || [];\n this.isRecursing = false;\n\n return tokens;\n }\n return [];\n }\n}\n","import Pattern from \"./Pattern\";\nimport ParserError from \"./ParseError\";\nimport Cursor from \"../Cursor\";\n\nexport default class Reference extends Pattern {\n private isRecursing: boolean;\n\n constructor(name: string, isOptional = false) {\n super(\"reference\", name, [], isOptional);\n this.isRecursing = false;\n }\n\n private getRoot() {\n let node = this.parent;\n while (node != null) {\n if (node.parent == null) {\n return node;\n }\n node = node.parent;\n }\n return node;\n }\n\n private findPattern(): Pattern | null {\n const root = this.getRoot();\n let result: Pattern | null = null;\n\n if (root == null) {\n return null;\n }\n\n this.walkTheTree(root, (pattern) => {\n if (\n pattern.name === this.name &&\n pattern != this &&\n pattern.type != \"reference\"\n ) {\n result = pattern;\n return false;\n }\n return true;\n });\n\n return result;\n }\n\n private walkTheTree(\n pattern: Pattern,\n callback: (pattern: Pattern) => boolean\n ) {\n for (let x = 0; x < pattern.children.length; x++) {\n const p = pattern.children[x];\n const continueWalking = this.walkTheTree(p, callback);\n\n if (!continueWalking) {\n return false;\n }\n }\n\n return callback(pattern);\n }\n\n parse(cursor: Cursor) {\n const mark = cursor.mark();\n\n try {\n const node = this.safelyGetPattern().parse(cursor);\n\n if (!cursor.hasUnresolvedError() && node != null) {\n cursor.addMatch(this, node);\n }\n\n if (cursor.hasUnresolvedError() && this._isOptional) {\n cursor.resolveError();\n cursor.moveToMark(mark);\n }\n\n return node;\n } catch (error) {\n if (this._isOptional) {\n cursor.moveToMark(mark);\n } else {\n cursor.throwError(\n new ParserError(\n `Couldn't find reference pattern to parse, with the name ${this.name}.`,\n cursor.index,\n this as Pattern\n )\n );\n }\n\n return null;\n }\n }\n\n clone(name?: string, isOptional?: boolean) {\n if (name == null) {\n name = this.name;\n }\n\n if (isOptional == null) {\n isOptional = this._isOptional;\n }\n\n return new Reference(name, isOptional);\n }\n\n getTokenValue() {\n return this.safelyGetPattern().getTokenValue();\n }\n\n private safelyGetPattern() {\n let pattern = this.children[0];\n const hasNoPattern = pattern == null;\n\n if (hasNoPattern) {\n const reference = this.findPattern();\n if (reference == null) {\n throw new Error(\n `Couldn't find reference pattern, with the name ${this.name}.`\n );\n }\n\n pattern = reference;\n this.children = [pattern];\n }\n\n return pattern;\n }\n\n getTokens() {\n if (!this.isRecursing) {\n this.isRecursing = true;\n let pattern = this.safelyGetPattern();\n const tokens = pattern.getTokens();\n this.isRecursing = false;\n return tokens;\n }\n return [];\n }\n}\n","import Node from \"./ast/Node\";\nimport Cursor from \"./Cursor\";\nimport { Match } from \"./CursorHistory\";\nimport Pattern from \"./patterns/Pattern\";\n\nexport interface Token {\n startIndex: number;\n values: string[];\n}\n\nexport interface SuggestionError {\n startIndex: number;\n endIndex: number;\n text: string;\n}\n\nexport interface SuggestionMatch {\n startIndex: number;\n endIndex: number;\n text: string;\n}\n\nexport interface SuggestionResult {\n pattern: Pattern | null;\n astNode: Node | null;\n match: SuggestionMatch | null;\n error: SuggestionError | null;\n options: Token;\n isComplete: boolean;\n parseStack: Node[];\n}\n\nexport default class TextSuggester {\n private cursor: Cursor | null = null;\n private result: Node | null = null;\n private text: string = \"\";\n private match: SuggestionMatch | null = null;\n private error: SuggestionError | null = null;\n private patternMatch: Match | null = null;\n private matchedText: string = \"\";\n private rootPattern: Pattern | null = null;\n private tokens: Token | null = {\n startIndex: 0,\n values: [],\n };\n private options: string[] = [];\n private parseStack: Node[] = [];\n\n suggest(text: string, pattern: Pattern) {\n this.reset();\n\n this.text = text;\n this.rootPattern = pattern;\n\n // If no text all options are available.\n if (text.length === 0) {\n return {\n pattern: null,\n astNode: null,\n match: null,\n error: null,\n options: {\n startIndex: 0,\n values: pattern.getTokens(),\n },\n isComplete: false,\n parseStack: [],\n } as SuggestionResult;\n }\n\n this.parse();\n this.saveParseStack();\n this.saveMatchedText();\n this.saveMatch();\n this.saveError();\n this.saveOptions();\n this.saveNextToken();\n\n return {\n pattern: this.patternMatch?.pattern || null,\n astNode: this.patternMatch?.astNode || null,\n match: this.match,\n error: this.error,\n options: this.tokens,\n isComplete: this.cursor?.didSuccessfullyParse() || false,\n parseStack: this.parseStack,\n } as SuggestionResult;\n }\n\n private reset() {\n this.cursor = null;\n this.result = null;\n this.text = \"\";\n this.match = null;\n this.error = null;\n this.patternMatch = null;\n this.matchedText = \"\";\n this.rootPattern = null;\n this.tokens = {\n startIndex: 0,\n values: [],\n };\n this.options = [];\n this.parseStack = [];\n }\n\n private parse() {\n this.rootPattern = this.rootPattern;\n this.cursor = new Cursor(this.text || \"\");\n this.cursor.startRecording();\n this.result = this.rootPattern?.parse(this.cursor) || null;\n this.patternMatch = this.cursor.lastMatch;\n }\n\n private saveParseStack() {\n this.parseStack = this.cursor?.history.getLastParseStack() || [];\n }\n\n private saveMatchedText() {\n if (this.patternMatch?.astNode != null) {\n this.matchedText =\n this.text?.substring(0, this.patternMatch.astNode.endIndex + 1) || \"\";\n }\n }\n\n private saveMatch() {\n const node = this.patternMatch?.astNode;\n\n if (node == null) {\n this.match = null;\n return;\n }\n\n let endIndex = this.matchedText.length - 1;\n\n this.match = {\n text: this.matchedText,\n startIndex: 0,\n endIndex: endIndex,\n };\n }\n\n private saveError() {\n if (this.patternMatch?.astNode == null) {\n this.error = {\n startIndex: 0,\n endIndex: this.text.length - 1,\n text: this.text,\n };\n return this;\n }\n\n if (\n this.patternMatch != null &&\n this.text.length > this.matchedText.length\n ) {\n const difference = this.text.length - this.matchedText.length;\n const startIndex = this.patternMatch.astNode.endIndex + 1;\n const endIndex = startIndex + difference - 1;\n\n this.error = {\n startIndex: startIndex,\n endIndex: endIndex,\n text: this.text.substring(startIndex, endIndex + 1),\n };\n\n return;\n } else {\n this.error = null;\n return;\n }\n }\n\n private saveNextToken() {\n const isCompleteMatch =\n this.patternMatch?.pattern === this.rootPattern &&\n this.cursor?.didSuccessfullyParse();\n const noMatch = this.patternMatch?.astNode == null;\n const noOptions = this.options.length === 0;\n\n if (isCompleteMatch && noOptions) {\n this.tokens = null;\n return;\n }\n\n if (noMatch) {\n let options = this.rootPattern?.getTokens();\n\n options = options?.filter((option: any) => {\n return option.indexOf(this.text) > -1;\n });\n\n if (options?.length === 0) {\n this.tokens = null;\n return;\n }\n\n const values = options?.map((option) => {\n const parts = option.split(this.text);\n return parts[1];\n });\n\n this.tokens = {\n startIndex: 0,\n values: values || [],\n };\n\n this.matchedText = this.text;\n this.match = {\n text: this.text,\n startIndex: 0,\n endIndex: this.text.length - 1,\n };\n this.error = null;\n\n return;\n }\n\n const options = this.options;\n let startIndex = this.matchedText.length;\n\n if (this.matchedText.length < this.text.length) {\n const leftOver = this.text.substring(this.matchedText.length);\n const partialMatchOptions = options\n .filter((option: any) => {\n return option.indexOf(leftOver) === 0;\n })\n .map((option: any) => {\n return option.substring(leftOver.length);\n });\n\n if (partialMatchOptions.length === 0) {\n this.tokens = null;\n return;\n } else {\n if (this.match == null) {\n return;\n }\n\n this.match = {\n text: this.match.text + leftOver,\n startIndex: this.match.startIndex,\n endIndex: this.match.endIndex + leftOver.length,\n };\n\n this.error = null;\n\n this.tokens = {\n startIndex: this.match.endIndex + 1,\n values: partialMatchOptions,\n };\n\n return;\n }\n }\n\n this.tokens = {\n startIndex,\n values: options,\n };\n }\n\n private saveOptions() {\n const parents = new Map<Pattern, Pattern>();\n const cursor = this.cursor;\n\n if (cursor == null) {\n this.options = [];\n return;\n }\n\n const furthestMatches = cursor.history.astNodes.reduce(\n (acc: any, node: any, index: any) => {\n const pattern = cursor.history.patterns[index];\n const parent = pattern.parent;\n\n if (parent != null) {\n parents.set(parent, parent);\n }\n\n if (parents.has(pattern)){\n return acc;\n }\n\n if (node.endIndex === acc.furthestTextIndex) {\n acc.nodeIndexes.push(index);\n } else if (node.endIndex > acc.furthestTextIndex) {\n acc.furthestTextIndex = node.endIndex;\n acc.nodeIndexes = [index];\n }\n\n return acc;\n },\n { furthestTextIndex: -1, nodeIndexes: [] }\n );\n\n const matches = furthestMatches.nodeIndexes.reduce(\n (acc: any, index: any) => {\n const pattern = this.cursor?.history.patterns[index];\n const tokens = pattern?.getNextTokens();\n\n tokens?.forEach((token: any) => {\n acc[token] = true;\n });\n\n return acc;\n },\n {}\n );\n\n this.options = Object.keys(matches);\n }\n\n static suggest(text: string, pattern: Pattern) {\n return new TextSuggester().suggest(text, pattern);\n }\n}\n","import Node from \"./Node\";\n\nexport default class Visitor {\n public root: Node | null;\n public selectedNodes: Node[];\n\n constructor(root: Node | null = null, selectedNodes: Node[] = []) {\n this.root = root;\n this.selectedNodes = selectedNodes;\n }\n\n flatten() {\n this.selectedNodes.forEach((node) => {\n if (node.children.length > 0) {\n const children: Node[] = [];\n\n Visitor.walkUp(node, (descendant: Node) => {\n if (descendant.children.length === 0) {\n children.push(descendant);\n }\n });\n\n node.children = children;\n }\n });\n\n return this;\n }\n\n remove() {\n if (this.root == null) {\n return this;\n }\n\n this.recursiveRemove(this.root);\n return this;\n }\n\n private recursiveRemove(node: Node) {\n const nodesToRemove = this.selectedNodes;\n for (let x = 0; x < node.children.length; x++) {\n if (nodesToRemove.indexOf(node.children[x]) > -1) {\n node.children.splice(x, 1);\n x--;\n } else {\n this.recursiveRemove(node.children[x]);\n }\n }\n }\n\n wrap(callback: (node: Node) => Node) {\n const visitor = new Visitor(this.root);\n\n visitor.selectRoot().transform((node) => {\n if (this.selectedNodes.includes(node)) {\n return callback(node);\n }\n return node;\n });\n\n return this;\n }\n\n unwrap() {\n if (this.root == null) {\n return this;\n }\n\n Visitor.walkDown(this.root, (node, stack) => {\n if (this.selectedNodes.includes(node)) {\n const parent = stack[stack.length - 1];\n const grandParent = stack[stack.length - 2];\n\n if (parent != null && grandParent != null) {\n const index = grandParent.children.indexOf(parent);\n if (index > -1) {\n grandParent.children.splice(index, 1, ...parent.children);\n }\n }\n }\n });\n\n return this;\n }\n\n prepend(callback: (node: Node) => Node) {\n if (this.root == null) {\n return this;\n }\n\n Visitor.walkUp(this.root, (node, stack) => {\n if (this.selectedNodes.includes(node)) {\n const parent = stack[stack.length - 1];\n\n if (parent != null) {\n const index = parent.children.indexOf(node);\n if (index > -1) {\n parent.children.splice(index, 0, callback(node));\n }\n }\n }\n });\n\n return this;\n }\n\n append(callback: (node: Node) => Node) {\n if (this.root == null) {\n return this;\n }\n\n Visitor.walkDown(this.root, (node, stack) => {\n if (this.selectedNodes.includes(node)) {\n const parent = stack[stack.length - 1];\n\n if (parent != null) {\n const index = parent.children.indexOf(node);\n if (index > -1) {\n parent.children.splice(index + 1, 0, callback(node));\n }\n }\n }\n });\n\n return this;\n }\n\n transform(callback: (node: Node) => Node) {\n this.selectedNodes.forEach((node) => {\n return this.recursiveTransform(node, callback);\n });\n\n return this;\n }\n\n private recursiveTransform(node: Node, callback: (node: Node) => Node) {\n const length = node.children.length;\n\n for (let x = 0; x < length; x++) {\n node.children[x] = this.recursiveTransform(node.children[x], callback);\n }\n\n return callback(node);\n }\n\n selectAll() {\n return this.select((n) => true);\n }\n\n selectNode(node: Node) {\n return new Visitor(this.root, [...this.selectedNodes, node]);\n }\n\n deselectNode(node: Node) {\n const visitor = new Visitor(this.root, this.selectedNodes.slice());\n return visitor.filter((n) => n !== node);\n }\n\n select(callback: (node: Node) => boolean) {\n if (this.root == null) {\n return this;\n }\n\n const node = this.root;\n const selectedNodes: Node[] = [];\n\n if (node.children.length > 0) {\n Visitor.walkDown(node, (descendant: Node) => {\n if (callback(descendant)) {\n selectedNodes.push(descendant);\n }\n });\n }\n\n return new Visitor(this.root, selectedNodes);\n }\n\n forEach(callback: (node: Node) => void) {\n this.selectedNodes.forEach(callback);\n return this;\n }\n\n filter(callback: (node: Node) => boolean) {\n return new Visitor(this.root, this.selectedNodes.filter(callback));\n }\n\n map(callback: (node: Node) => Node) {\n return new Visitor(this.root, this.selectedNodes.map(callback));\n }\n\n selectRoot() {\n if (this.root == null) {\n return this;\n }\n\n return new Visitor(this.root, [this.root]);\n }\n\n first() {\n return this.get(0);\n }\n\n last() {\n return this.get(this.selectedNodes.length - 1);\n }\n\n get(index: number) {\n const node = this.selectedNodes[index];\n\n if (node == null) {\n throw new Error(\n `Couldn't find node at index: ${index}, out of ${this.selectedNodes.length}.`\n );\n }\n\n return new Visitor(node, []);\n }\n\n clear() {\n this.selectedNodes = [];\n return this;\n }\n\n setRoot(root: Node | null) {\n this.root = root;\n return this;\n }\n\n static select(root: Node, callback?: (node: Node) => boolean) {\n if (callback != null) {\n return new Visitor(root).select(callback);\n } else {\n return new Visitor(root);\n }\n }\n\n static walkUp(\n node: Node,\n callback: (node: Node, ancestors: Node[]) => void,\n ancestors: Node[] = []\n ) {\n ancestors.push(node);\n\n if (node.children.length > 0) {\n const children = node.children.slice();\n children.forEach((c) => this.walkUp(c, callback, ancestors));\n }\n\n ancestors.pop();\n callback(node, ancestors);\n\n return this;\n }\n\n static walkDown(\n node: Node,\n callback: (node: Node, ancestors: Node[]) => void,\n ancestors: Node[] = []\n ) {\n callback(node, ancestors);\n ancestors.push(node);\n\n if (node.children.length > 0) {\n const children = node.children.slice();\n children.forEach((c) => this.walkDown(c, callback, ancestors));\n }\n\n ancestors.pop();\n return this;\n }\n}\n"],"names":["ParserError"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,24 +1,16 @@
1
1
  import Node from "./ast/Node";
2
- import CompositeNode from "./ast/CompositeNode";
3
- import ValueNode from "./ast/ValueNode";
4
2
  import Cursor from "./Cursor";
5
- import RegexValue from "./patterns/value/RegexValue";
6
- import AndValue from "./patterns/value/AndValue";
7
- import AnyOfThese from "./patterns/value/AnyOfThese";
8
- import Literal from "./patterns/value/Literal";
9
- import NotValue from "./patterns/value/NotValue";
10
- import OptionalValue from "./patterns/value/OptionalValue";
11
- import OrValue from "./patterns/value/OrValue";
12
- import RepeatValue from "./patterns/value/RepeatValue";
13
- import ValuePattern from "./patterns/value/ValuePattern";
14
- import AndComposite from "./patterns/composite/AndComposite";
15
- import CompositePattern from "./patterns/composite/CompositePattern";
16
- import OptionalComposite from "./patterns/composite/OptionalComposite";
17
- import OrComposite from "./patterns/composite/OrComposite";
18
- import RepeatComposite from "./patterns/composite/RepeatComposite";
3
+ import Regex from "./patterns/Regex";
4
+ import And from "./patterns/And";
5
+ import Literal from "./patterns/Literal";
6
+ import LookAhead from "./patterns/LookAhead";
7
+ import Not from "./patterns/Not";
8
+ import Or from "./patterns/Or";
9
+ import Repeat from "./patterns/Repeat";
19
10
  import ParseError from "./patterns/ParseError";
20
11
  import Pattern from "./patterns/Pattern";
21
- import RecursivePattern from "./patterns/RecursivePattern";
12
+ import Recursive from "./patterns/Recursive";
13
+ import Reference from "./patterns/Reference";
22
14
  import TextSuggester from "./TextSuggester";
23
15
  import Visitor from "./ast/Visitor";
24
- export { Node, CompositeNode, ValueNode, Cursor, RegexValue, AndValue, AnyOfThese, Literal, NotValue, OptionalValue, OrValue, RepeatValue, ValuePattern, AndComposite, CompositePattern, OptionalComposite, OrComposite, RepeatComposite, ParseError, Pattern, RecursivePattern, TextSuggester, Visitor, };
16
+ export { Node, Cursor, Regex, And, Literal, Not, Or, Repeat, ParseError, Pattern, Recursive, Reference, TextSuggester, Visitor, LookAhead, };