clarity-pattern-parser 4.0.1 → 4.0.2

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.
@@ -900,7 +900,8 @@
900
900
  if (pattern == null) {
901
901
  return false;
902
902
  }
903
- return pattern.name === this.name;
903
+ return (pattern.type !== "recursive" &&
904
+ pattern.name === this.name);
904
905
  });
905
906
  }
906
907
  climb(pattern, isMatch) {
@@ -946,26 +947,15 @@
946
947
  }
947
948
  return new Recursive(name, isOptional);
948
949
  }
949
- getTokenValue() {
950
- var _a;
951
- return ((_a = this.getPattern()) === null || _a === void 0 ? void 0 : _a.getTokenValue()) || null;
952
- }
953
950
  getTokens() {
954
951
  var _a;
955
- if (!this.isRecursing) {
956
- this.isRecursing = true;
957
- const tokens = ((_a = this.getPattern()) === null || _a === void 0 ? void 0 : _a.getTokens()) || [];
958
- this.isRecursing = false;
959
- return tokens;
960
- }
961
- return [];
952
+ return ((_a = this.getPattern()) === null || _a === void 0 ? void 0 : _a.getTokens()) || [];
962
953
  }
963
954
  }
964
955
 
965
956
  class Reference extends Pattern {
966
957
  constructor(name, isOptional = false) {
967
958
  super("reference", name, [], isOptional);
968
- this.isRecursing = false;
969
959
  }
970
960
  getRoot() {
971
961
  let node = this.parent;
@@ -1036,9 +1026,6 @@
1036
1026
  }
1037
1027
  return new Reference(name, isOptional);
1038
1028
  }
1039
- getTokenValue() {
1040
- return this.safelyGetPattern().getTokenValue();
1041
- }
1042
1029
  safelyGetPattern() {
1043
1030
  let pattern = this.children[0];
1044
1031
  const hasNoPattern = pattern == null;
@@ -1053,14 +1040,7 @@
1053
1040
  return pattern;
1054
1041
  }
1055
1042
  getTokens() {
1056
- if (!this.isRecursing) {
1057
- this.isRecursing = true;
1058
- let pattern = this.safelyGetPattern();
1059
- const tokens = pattern.getTokens();
1060
- this.isRecursing = false;
1061
- return tokens;
1062
- }
1063
- return [];
1043
+ return this.safelyGetPattern().getTokens();
1064
1044
  }
1065
1045
  }
1066
1046
 
@@ -1207,7 +1187,7 @@
1207
1187
  if (noMatch) {
1208
1188
  let options = (_d = this.rootPattern) === null || _d === void 0 ? void 0 : _d.getTokens();
1209
1189
  options = options === null || options === void 0 ? void 0 : options.filter((option) => {
1210
- return option.indexOf(this.text) > -1;
1190
+ return option.indexOf(this.text) === 0;
1211
1191
  });
1212
1192
  if ((options === null || options === void 0 ? void 0 : options.length) === 0) {
1213
1193
  this.tokens = null;
@@ -1 +1 @@
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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"}
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 (\n pattern.type !== \"recursive\" &&\n pattern.name === this.name\n );\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 getTokens() {\n return this.getPattern()?.getTokens() || [];\n }\n}\n","import Pattern from \"./Pattern\";\nimport ParserError from \"./ParseError\";\nimport Cursor from \"../Cursor\";\n\nexport default class Reference extends Pattern {\n constructor(name: string, isOptional = false) {\n super(\"reference\", name, [], isOptional);\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 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 return this.safelyGetPattern().getTokens();\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) === 0;\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.esm.js CHANGED
@@ -894,7 +894,8 @@ class Recursive extends Pattern {
894
894
  if (pattern == null) {
895
895
  return false;
896
896
  }
897
- return pattern.name === this.name;
897
+ return (pattern.type !== "recursive" &&
898
+ pattern.name === this.name);
898
899
  });
899
900
  }
900
901
  climb(pattern, isMatch) {
@@ -940,26 +941,15 @@ class Recursive extends Pattern {
940
941
  }
941
942
  return new Recursive(name, isOptional);
942
943
  }
943
- getTokenValue() {
944
- var _a;
945
- return ((_a = this.getPattern()) === null || _a === void 0 ? void 0 : _a.getTokenValue()) || null;
946
- }
947
944
  getTokens() {
948
945
  var _a;
949
- if (!this.isRecursing) {
950
- this.isRecursing = true;
951
- const tokens = ((_a = this.getPattern()) === null || _a === void 0 ? void 0 : _a.getTokens()) || [];
952
- this.isRecursing = false;
953
- return tokens;
954
- }
955
- return [];
946
+ return ((_a = this.getPattern()) === null || _a === void 0 ? void 0 : _a.getTokens()) || [];
956
947
  }
957
948
  }
958
949
 
959
950
  class Reference extends Pattern {
960
951
  constructor(name, isOptional = false) {
961
952
  super("reference", name, [], isOptional);
962
- this.isRecursing = false;
963
953
  }
964
954
  getRoot() {
965
955
  let node = this.parent;
@@ -1030,9 +1020,6 @@ class Reference extends Pattern {
1030
1020
  }
1031
1021
  return new Reference(name, isOptional);
1032
1022
  }
1033
- getTokenValue() {
1034
- return this.safelyGetPattern().getTokenValue();
1035
- }
1036
1023
  safelyGetPattern() {
1037
1024
  let pattern = this.children[0];
1038
1025
  const hasNoPattern = pattern == null;
@@ -1047,14 +1034,7 @@ class Reference extends Pattern {
1047
1034
  return pattern;
1048
1035
  }
1049
1036
  getTokens() {
1050
- if (!this.isRecursing) {
1051
- this.isRecursing = true;
1052
- let pattern = this.safelyGetPattern();
1053
- const tokens = pattern.getTokens();
1054
- this.isRecursing = false;
1055
- return tokens;
1056
- }
1057
- return [];
1037
+ return this.safelyGetPattern().getTokens();
1058
1038
  }
1059
1039
  }
1060
1040
 
@@ -1201,7 +1181,7 @@ class TextSuggester {
1201
1181
  if (noMatch) {
1202
1182
  let options = (_d = this.rootPattern) === null || _d === void 0 ? void 0 : _d.getTokens();
1203
1183
  options = options === null || options === void 0 ? void 0 : options.filter((option) => {
1204
- return option.indexOf(this.text) > -1;
1184
+ return option.indexOf(this.text) === 0;
1205
1185
  });
1206
1186
  if ((options === null || options === void 0 ? void 0 : options.length) === 0) {
1207
1187
  this.tokens = null;