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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.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.esm.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.js CHANGED
@@ -898,7 +898,8 @@ class Recursive extends Pattern {
898
898
  if (pattern == null) {
899
899
  return false;
900
900
  }
901
- return pattern.name === this.name;
901
+ return (pattern.type !== "recursive" &&
902
+ pattern.name === this.name);
902
903
  });
903
904
  }
904
905
  climb(pattern, isMatch) {
@@ -944,26 +945,15 @@ class Recursive extends Pattern {
944
945
  }
945
946
  return new Recursive(name, isOptional);
946
947
  }
947
- getTokenValue() {
948
- var _a;
949
- return ((_a = this.getPattern()) === null || _a === void 0 ? void 0 : _a.getTokenValue()) || null;
950
- }
951
948
  getTokens() {
952
949
  var _a;
953
- if (!this.isRecursing) {
954
- this.isRecursing = true;
955
- const tokens = ((_a = this.getPattern()) === null || _a === void 0 ? void 0 : _a.getTokens()) || [];
956
- this.isRecursing = false;
957
- return tokens;
958
- }
959
- return [];
950
+ return ((_a = this.getPattern()) === null || _a === void 0 ? void 0 : _a.getTokens()) || [];
960
951
  }
961
952
  }
962
953
 
963
954
  class Reference extends Pattern {
964
955
  constructor(name, isOptional = false) {
965
956
  super("reference", name, [], isOptional);
966
- this.isRecursing = false;
967
957
  }
968
958
  getRoot() {
969
959
  let node = this.parent;
@@ -1034,9 +1024,6 @@ class Reference extends Pattern {
1034
1024
  }
1035
1025
  return new Reference(name, isOptional);
1036
1026
  }
1037
- getTokenValue() {
1038
- return this.safelyGetPattern().getTokenValue();
1039
- }
1040
1027
  safelyGetPattern() {
1041
1028
  let pattern = this.children[0];
1042
1029
  const hasNoPattern = pattern == null;
@@ -1051,14 +1038,7 @@ class Reference extends Pattern {
1051
1038
  return pattern;
1052
1039
  }
1053
1040
  getTokens() {
1054
- if (!this.isRecursing) {
1055
- this.isRecursing = true;
1056
- let pattern = this.safelyGetPattern();
1057
- const tokens = pattern.getTokens();
1058
- this.isRecursing = false;
1059
- return tokens;
1060
- }
1061
- return [];
1041
+ return this.safelyGetPattern().getTokens();
1062
1042
  }
1063
1043
  }
1064
1044
 
@@ -1205,7 +1185,7 @@ class TextSuggester {
1205
1185
  if (noMatch) {
1206
1186
  let options = (_d = this.rootPattern) === null || _d === void 0 ? void 0 : _d.getTokens();
1207
1187
  options = options === null || options === void 0 ? void 0 : options.filter((option) => {
1208
- return option.indexOf(this.text) > -1;
1188
+ return option.indexOf(this.text) === 0;
1209
1189
  });
1210
1190
  if ((options === null || options === void 0 ? void 0 : options.length) === 0) {
1211
1191
  this.tokens = null;