@herb-tools/rewriter 0.8.5 → 0.8.6

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-rewriter.ts","../src/string-rewriter.ts","../src/mutable.ts","../src/type-guards.ts","../../core/dist/herb-core.esm.js","../../printer/dist/index.js","../src/rewrite.ts"],"sourcesContent":[null,null,null,null,"class Position {\n line;\n column;\n static from(positionOrLine, column) {\n if (typeof positionOrLine === \"number\") {\n return new Position(positionOrLine, column);\n }\n else {\n return new Position(positionOrLine.line, positionOrLine.column);\n }\n }\n static get zero() {\n return new Position(0, 0);\n }\n constructor(line, column) {\n this.line = line;\n this.column = column;\n }\n toHash() {\n return { line: this.line, column: this.column };\n }\n toJSON() {\n return this.toHash();\n }\n treeInspect() {\n return `(${this.line}:${this.column})`;\n }\n inspect() {\n return `#<Herb::Position ${this.treeInspect()}>`;\n }\n toString() {\n return this.inspect();\n }\n}\n\nclass Location {\n start;\n end;\n static from(locationOrLine, column, endLine, endColumn) {\n if (typeof locationOrLine === \"number\") {\n const start = Position.from(locationOrLine, column);\n const end = Position.from(endLine, endColumn);\n return new Location(start, end);\n }\n else {\n const start = Position.from(locationOrLine.start);\n const end = Position.from(locationOrLine.end);\n return new Location(start, end);\n }\n }\n static get zero() {\n return new Location(Position.zero, Position.zero);\n }\n constructor(start, end) {\n this.start = start;\n this.end = end;\n }\n toHash() {\n return {\n start: this.start.toHash(),\n end: this.end.toHash(),\n };\n }\n toJSON() {\n return this.toHash();\n }\n treeInspect() {\n return `${this.start.treeInspect()}-${this.end.treeInspect()}`;\n }\n treeInspectWithLabel() {\n return `(location: ${this.treeInspect()})`;\n }\n inspect() {\n return `#<Herb::Location ${this.treeInspect()}>`;\n }\n toString() {\n return this.inspect();\n }\n}\n\nclass Range {\n start;\n end;\n static from(rangeOrStart, end) {\n if (typeof rangeOrStart === \"number\") {\n return new Range(rangeOrStart, end);\n }\n else {\n return new Range(rangeOrStart[0], rangeOrStart[1]);\n }\n }\n static get zero() {\n return new Range(0, 0);\n }\n constructor(start, end) {\n this.start = start;\n this.end = end;\n }\n toArray() {\n return [this.start, this.end];\n }\n toJSON() {\n return this.toArray();\n }\n treeInspect() {\n return `[${this.start}, ${this.end}]`;\n }\n inspect() {\n return `#<Herb::Range ${this.toArray()}>`;\n }\n toString() {\n return this.inspect();\n }\n}\n\nclass Token {\n value;\n range;\n location;\n type;\n static from(token) {\n return new Token(token.value, Range.from(token.range), Location.from(token.location), token.type);\n }\n constructor(value, range, location, type) {\n this.value = value;\n this.range = range;\n this.location = location;\n this.type = type;\n }\n toHash() {\n return {\n value: this.value,\n range: this.range?.toArray(),\n location: this.location?.toHash(),\n type: this.type,\n };\n }\n toJSON() {\n return this.toHash();\n }\n treeInspect() {\n return `\"${this.value}\" ${this.location.treeInspectWithLabel()}`;\n }\n valueInspect() {\n return this.type === \"TOKEN_EOF\"\n ? JSON.stringify(\"<EOF>\")\n : JSON.stringify(this.value);\n }\n inspect() {\n return `#<Herb::Token type=\"${this.type}\" value=${this.valueInspect()} range=${this.range.treeInspect()} start=${this.location.start.treeInspect()} end=${this.location.end.treeInspect()}>`;\n }\n toString() {\n return this.inspect();\n }\n}\n\n// NOTE: This file is generated by the templates/template.rb script and should not\n// be modified manually. See /Users/marcoroth/Development/herb-release-0.8.5/templates/javascript/packages/core/src/errors.ts.erb\nclass HerbError {\n type;\n message;\n location;\n severity = \"error\";\n source = \"parser\";\n get code() {\n return this.type;\n }\n static from(error) {\n return fromSerializedError(error);\n }\n constructor(type, message, location) {\n this.type = type;\n this.message = message;\n this.location = location;\n }\n toJSON() {\n return {\n type: this.type,\n message: this.message,\n location: this.location.toJSON(),\n };\n }\n inspect() {\n return this.treeInspect(0);\n }\n}\nclass UnexpectedError extends HerbError {\n description;\n expected;\n found;\n static from(data) {\n return new UnexpectedError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n description: data.description,\n expected: data.expected,\n found: data.found,\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n this.description = props.description;\n this.expected = props.expected;\n this.found = props.found;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"UNEXPECTED_ERROR\",\n description: this.description,\n expected: this.expected,\n found: this.found,\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ UnexpectedError ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── message: \"${this.message}\"\\n`;\n output += `├── description: ${JSON.stringify(this.description)}\\n`;\n output += `├── expected: ${JSON.stringify(this.expected)}\\n`;\n output += `└── found: ${JSON.stringify(this.found)}\\n`;\n return output;\n }\n}\nclass UnexpectedTokenError extends HerbError {\n expected_type;\n found;\n static from(data) {\n return new UnexpectedTokenError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n expected_type: data.expected_type,\n found: data.found ? Token.from(data.found) : null,\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n this.expected_type = props.expected_type;\n this.found = props.found;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"UNEXPECTED_TOKEN_ERROR\",\n expected_type: this.expected_type,\n found: this.found ? this.found.toJSON() : null,\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ UnexpectedTokenError ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── message: \"${this.message}\"\\n`;\n output += `├── expected_type: ${JSON.stringify(this.expected_type)}\\n`;\n output += `└── found: ${this.found ? this.found.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass MissingOpeningTagError extends HerbError {\n closing_tag;\n static from(data) {\n return new MissingOpeningTagError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n closing_tag: data.closing_tag ? Token.from(data.closing_tag) : null,\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n this.closing_tag = props.closing_tag;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"MISSING_OPENING_TAG_ERROR\",\n closing_tag: this.closing_tag ? this.closing_tag.toJSON() : null,\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ MissingOpeningTagError ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── message: \"${this.message}\"\\n`;\n output += `└── closing_tag: ${this.closing_tag ? this.closing_tag.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass MissingClosingTagError extends HerbError {\n opening_tag;\n static from(data) {\n return new MissingClosingTagError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n opening_tag: data.opening_tag ? Token.from(data.opening_tag) : null,\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n this.opening_tag = props.opening_tag;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"MISSING_CLOSING_TAG_ERROR\",\n opening_tag: this.opening_tag ? this.opening_tag.toJSON() : null,\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ MissingClosingTagError ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── message: \"${this.message}\"\\n`;\n output += `└── opening_tag: ${this.opening_tag ? this.opening_tag.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass TagNamesMismatchError extends HerbError {\n opening_tag;\n closing_tag;\n static from(data) {\n return new TagNamesMismatchError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n opening_tag: data.opening_tag ? Token.from(data.opening_tag) : null,\n closing_tag: data.closing_tag ? Token.from(data.closing_tag) : null,\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n this.opening_tag = props.opening_tag;\n this.closing_tag = props.closing_tag;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"TAG_NAMES_MISMATCH_ERROR\",\n opening_tag: this.opening_tag ? this.opening_tag.toJSON() : null,\n closing_tag: this.closing_tag ? this.closing_tag.toJSON() : null,\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ TagNamesMismatchError ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── message: \"${this.message}\"\\n`;\n output += `├── opening_tag: ${this.opening_tag ? this.opening_tag.treeInspect() : \"∅\"}\\n`;\n output += `└── closing_tag: ${this.closing_tag ? this.closing_tag.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass QuotesMismatchError extends HerbError {\n opening_quote;\n closing_quote;\n static from(data) {\n return new QuotesMismatchError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n opening_quote: data.opening_quote ? Token.from(data.opening_quote) : null,\n closing_quote: data.closing_quote ? Token.from(data.closing_quote) : null,\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n this.opening_quote = props.opening_quote;\n this.closing_quote = props.closing_quote;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"QUOTES_MISMATCH_ERROR\",\n opening_quote: this.opening_quote ? this.opening_quote.toJSON() : null,\n closing_quote: this.closing_quote ? this.closing_quote.toJSON() : null,\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ QuotesMismatchError ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── message: \"${this.message}\"\\n`;\n output += `├── opening_quote: ${this.opening_quote ? this.opening_quote.treeInspect() : \"∅\"}\\n`;\n output += `└── closing_quote: ${this.closing_quote ? this.closing_quote.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass VoidElementClosingTagError extends HerbError {\n tag_name;\n expected;\n found;\n static from(data) {\n return new VoidElementClosingTagError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n tag_name: data.tag_name ? Token.from(data.tag_name) : null,\n expected: data.expected,\n found: data.found,\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n this.tag_name = props.tag_name;\n this.expected = props.expected;\n this.found = props.found;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"VOID_ELEMENT_CLOSING_TAG_ERROR\",\n tag_name: this.tag_name ? this.tag_name.toJSON() : null,\n expected: this.expected,\n found: this.found,\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ VoidElementClosingTagError ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── message: \"${this.message}\"\\n`;\n output += `├── tag_name: ${this.tag_name ? this.tag_name.treeInspect() : \"∅\"}\\n`;\n output += `├── expected: ${JSON.stringify(this.expected)}\\n`;\n output += `└── found: ${JSON.stringify(this.found)}\\n`;\n return output;\n }\n}\nclass UnclosedElementError extends HerbError {\n opening_tag;\n static from(data) {\n return new UnclosedElementError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n opening_tag: data.opening_tag ? Token.from(data.opening_tag) : null,\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n this.opening_tag = props.opening_tag;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"UNCLOSED_ELEMENT_ERROR\",\n opening_tag: this.opening_tag ? this.opening_tag.toJSON() : null,\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ UnclosedElementError ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── message: \"${this.message}\"\\n`;\n output += `└── opening_tag: ${this.opening_tag ? this.opening_tag.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass RubyParseError extends HerbError {\n error_message;\n diagnostic_id;\n level;\n static from(data) {\n return new RubyParseError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n error_message: data.error_message,\n diagnostic_id: data.diagnostic_id,\n level: data.level,\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n this.error_message = props.error_message;\n this.diagnostic_id = props.diagnostic_id;\n this.level = props.level;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"RUBY_PARSE_ERROR\",\n error_message: this.error_message,\n diagnostic_id: this.diagnostic_id,\n level: this.level,\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ RubyParseError ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── message: \"${this.message}\"\\n`;\n output += `├── error_message: ${JSON.stringify(this.error_message)}\\n`;\n output += `├── diagnostic_id: ${JSON.stringify(this.diagnostic_id)}\\n`;\n output += `└── level: ${JSON.stringify(this.level)}\\n`;\n return output;\n }\n}\nclass ERBControlFlowScopeError extends HerbError {\n keyword;\n static from(data) {\n return new ERBControlFlowScopeError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n keyword: data.keyword,\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n this.keyword = props.keyword;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"ERB_CONTROL_FLOW_SCOPE_ERROR\",\n keyword: this.keyword,\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBControlFlowScopeError ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── message: \"${this.message}\"\\n`;\n output += `└── keyword: ${JSON.stringify(this.keyword)}\\n`;\n return output;\n }\n}\nclass MissingERBEndTagError extends HerbError {\n keyword;\n static from(data) {\n return new MissingERBEndTagError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n keyword: data.keyword,\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n this.keyword = props.keyword;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"MISSINGERB_END_TAG_ERROR\",\n keyword: this.keyword,\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ MissingERBEndTagError ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── message: \"${this.message}\"\\n`;\n output += `└── keyword: ${JSON.stringify(this.keyword)}\\n`;\n return output;\n }\n}\nclass ERBMultipleBlocksInTagError extends HerbError {\n static from(data) {\n return new ERBMultipleBlocksInTagError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"ERB_MULTIPLE_BLOCKS_IN_TAG_ERROR\",\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBMultipleBlocksInTagError ${this.location.treeInspectWithLabel()}\\n`;\n output += `└── message: \"${this.message}\"\\n`;\n return output;\n }\n}\nfunction fromSerializedError(error) {\n switch (error.type) {\n case \"UNEXPECTED_ERROR\": return UnexpectedError.from(error);\n case \"UNEXPECTED_TOKEN_ERROR\": return UnexpectedTokenError.from(error);\n case \"MISSING_OPENING_TAG_ERROR\": return MissingOpeningTagError.from(error);\n case \"MISSING_CLOSING_TAG_ERROR\": return MissingClosingTagError.from(error);\n case \"TAG_NAMES_MISMATCH_ERROR\": return TagNamesMismatchError.from(error);\n case \"QUOTES_MISMATCH_ERROR\": return QuotesMismatchError.from(error);\n case \"VOID_ELEMENT_CLOSING_TAG_ERROR\": return VoidElementClosingTagError.from(error);\n case \"UNCLOSED_ELEMENT_ERROR\": return UnclosedElementError.from(error);\n case \"RUBY_PARSE_ERROR\": return RubyParseError.from(error);\n case \"ERB_CONTROL_FLOW_SCOPE_ERROR\": return ERBControlFlowScopeError.from(error);\n case \"MISSINGERB_END_TAG_ERROR\": return MissingERBEndTagError.from(error);\n case \"ERB_MULTIPLE_BLOCKS_IN_TAG_ERROR\": return ERBMultipleBlocksInTagError.from(error);\n default:\n throw new Error(`Unknown node type: ${error.type}`);\n }\n}\n\nfunction ensureString(object) {\n if (typeof object === \"string\") {\n return object;\n }\n throw new TypeError(\"Argument must be a string\");\n}\nfunction convertToUTF8(string) {\n const bytes = [];\n for (let i = 0; i < string.length; i++) {\n bytes.push(string.charCodeAt(i));\n }\n const decoder = new TextDecoder(\"utf-8\");\n return decoder.decode(new Uint8Array(bytes));\n}\n\n// NOTE: This file is generated by the templates/template.rb script and should not\n// be modified manually. See /Users/marcoroth/Development/herb-release-0.8.5/templates/javascript/packages/core/src/nodes.ts.erb\nclass Node {\n type;\n location;\n errors;\n static from(node) {\n return fromSerializedNode(node);\n }\n static get type() {\n throw new Error(\"AST_NODE\");\n }\n constructor(type, location, errors) {\n this.type = type;\n this.location = location;\n this.errors = errors;\n }\n toJSON() {\n return {\n type: this.type,\n location: this.location.toJSON(),\n errors: this.errors,\n };\n }\n inspect() {\n return this.treeInspect(0);\n }\n is(nodeClass) {\n return this.type === nodeClass.type;\n }\n isOfType(type) {\n return this.type === type;\n }\n get isSingleLine() {\n return this.location.start.line === this.location.end.line;\n }\n inspectArray(array, prefix) {\n if (!array)\n return \"∅\\n\";\n if (array.length === 0)\n return \"[]\\n\";\n let output = `(${array.length} item${array.length === 1 ? \"\" : \"s\"})\\n`;\n array.forEach((item, index) => {\n const isLast = index === array.length - 1;\n if (item instanceof Node || item instanceof HerbError) {\n output += this.inspectNode(item, prefix, isLast ? \" \" : \"│ \", isLast, false);\n }\n else {\n const symbol = isLast ? \"└── \" : \"├── \";\n output += `${prefix}${symbol} ${item}\\n`;\n }\n });\n output += `${prefix}\\n`;\n return output;\n }\n inspectNode(node, prefix, prefix2 = \" \", last = true, trailingNewline = true) {\n if (!node)\n return \"∅\\n\";\n let output = trailingNewline ? \"\\n\" : \"\";\n output += `${prefix}`;\n output += last ? \"└── \" : \"├── \";\n output += node\n .treeInspect()\n .trimStart()\n .split(\"\\n\")\n .map((line, index) => index === 0 ? line.trimStart() : `${prefix}${prefix2}${line}`)\n .join(\"\\n\")\n .trimStart();\n output += `\\n`;\n return output;\n }\n}\nclass DocumentNode extends Node {\n children;\n static get type() {\n return \"AST_DOCUMENT_NODE\";\n }\n static from(data) {\n return new DocumentNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n children: (data.children || []).map(node => fromSerializedNode(node)),\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.children = props.children;\n }\n accept(visitor) {\n visitor.visitDocumentNode(this);\n }\n childNodes() {\n return [\n ...this.children,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.children.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_DOCUMENT_NODE\",\n children: this.children.map(node => node.toJSON()),\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ DocumentNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `└── children: ${this.inspectArray(this.children, \" \")}`;\n return output;\n }\n}\nclass LiteralNode extends Node {\n content;\n static get type() {\n return \"AST_LITERAL_NODE\";\n }\n static from(data) {\n return new LiteralNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n content: data.content,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.content = convertToUTF8(props.content);\n }\n accept(visitor) {\n visitor.visitLiteralNode(this);\n }\n childNodes() {\n return [];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_LITERAL_NODE\",\n content: this.content,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ LiteralNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `└── content: ${this.content ? JSON.stringify(this.content) : \"∅\"}\\n`;\n return output;\n }\n}\nclass HTMLOpenTagNode extends Node {\n tag_opening;\n tag_name;\n tag_closing;\n children;\n is_void;\n static get type() {\n return \"AST_HTML_OPEN_TAG_NODE\";\n }\n static from(data) {\n return new HTMLOpenTagNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n tag_name: data.tag_name ? Token.from(data.tag_name) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n children: (data.children || []).map(node => fromSerializedNode(node)),\n is_void: data.is_void,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.tag_name = props.tag_name;\n this.tag_closing = props.tag_closing;\n this.children = props.children;\n this.is_void = props.is_void;\n }\n accept(visitor) {\n visitor.visitHTMLOpenTagNode(this);\n }\n childNodes() {\n return [\n ...this.children,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.children.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_HTML_OPEN_TAG_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n tag_name: this.tag_name ? this.tag_name.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n children: this.children.map(node => node.toJSON()),\n is_void: this.is_void,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ HTMLOpenTagNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_name: ${this.tag_name ? this.tag_name.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `├── children: ${this.inspectArray(this.children, \"│ \")}`;\n output += `└── is_void: ${typeof this.is_void === 'boolean' ? String(this.is_void) : \"∅\"}\\n`;\n return output;\n }\n}\nclass HTMLCloseTagNode extends Node {\n tag_opening;\n tag_name;\n children;\n tag_closing;\n static get type() {\n return \"AST_HTML_CLOSE_TAG_NODE\";\n }\n static from(data) {\n return new HTMLCloseTagNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n tag_name: data.tag_name ? Token.from(data.tag_name) : null,\n children: (data.children || []).map(node => fromSerializedNode(node)),\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.tag_name = props.tag_name;\n this.children = props.children;\n this.tag_closing = props.tag_closing;\n }\n accept(visitor) {\n visitor.visitHTMLCloseTagNode(this);\n }\n childNodes() {\n return [\n ...this.children,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.children.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_HTML_CLOSE_TAG_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n tag_name: this.tag_name ? this.tag_name.toJSON() : null,\n children: this.children.map(node => node.toJSON()),\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ HTMLCloseTagNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_name: ${this.tag_name ? this.tag_name.treeInspect() : \"∅\"}\\n`;\n output += `├── children: ${this.inspectArray(this.children, \"│ \")}`;\n output += `└── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass HTMLElementNode extends Node {\n open_tag;\n tag_name;\n body;\n close_tag;\n is_void;\n source;\n static get type() {\n return \"AST_HTML_ELEMENT_NODE\";\n }\n static from(data) {\n return new HTMLElementNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n open_tag: data.open_tag ? fromSerializedNode((data.open_tag)) : null,\n tag_name: data.tag_name ? Token.from(data.tag_name) : null,\n body: (data.body || []).map(node => fromSerializedNode(node)),\n close_tag: data.close_tag ? fromSerializedNode((data.close_tag)) : null,\n is_void: data.is_void,\n source: data.source,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.open_tag = props.open_tag;\n this.tag_name = props.tag_name;\n this.body = props.body;\n this.close_tag = props.close_tag;\n this.is_void = props.is_void;\n this.source = props.source;\n }\n accept(visitor) {\n visitor.visitHTMLElementNode(this);\n }\n childNodes() {\n return [\n this.open_tag,\n ...this.body,\n this.close_tag,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n this.open_tag ? this.open_tag.recursiveErrors() : [],\n ...this.body.map(node => node.recursiveErrors()),\n this.close_tag ? this.close_tag.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_HTML_ELEMENT_NODE\",\n open_tag: this.open_tag ? this.open_tag.toJSON() : null,\n tag_name: this.tag_name ? this.tag_name.toJSON() : null,\n body: this.body.map(node => node.toJSON()),\n close_tag: this.close_tag ? this.close_tag.toJSON() : null,\n is_void: this.is_void,\n source: this.source,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ HTMLElementNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── open_tag: ${this.inspectNode(this.open_tag, \"│ \")}`;\n output += `├── tag_name: ${this.tag_name ? this.tag_name.treeInspect() : \"∅\"}\\n`;\n output += `├── body: ${this.inspectArray(this.body, \"│ \")}`;\n output += `├── close_tag: ${this.inspectNode(this.close_tag, \"│ \")}`;\n output += `├── is_void: ${typeof this.is_void === 'boolean' ? String(this.is_void) : \"∅\"}\\n`;\n output += `└── source: ${this.source ? JSON.stringify(this.source) : \"∅\"}\\n`;\n return output;\n }\n}\nclass HTMLAttributeValueNode extends Node {\n open_quote;\n children;\n close_quote;\n quoted;\n static get type() {\n return \"AST_HTML_ATTRIBUTE_VALUE_NODE\";\n }\n static from(data) {\n return new HTMLAttributeValueNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n open_quote: data.open_quote ? Token.from(data.open_quote) : null,\n children: (data.children || []).map(node => fromSerializedNode(node)),\n close_quote: data.close_quote ? Token.from(data.close_quote) : null,\n quoted: data.quoted,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.open_quote = props.open_quote;\n this.children = props.children;\n this.close_quote = props.close_quote;\n this.quoted = props.quoted;\n }\n accept(visitor) {\n visitor.visitHTMLAttributeValueNode(this);\n }\n childNodes() {\n return [\n ...this.children,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.children.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_HTML_ATTRIBUTE_VALUE_NODE\",\n open_quote: this.open_quote ? this.open_quote.toJSON() : null,\n children: this.children.map(node => node.toJSON()),\n close_quote: this.close_quote ? this.close_quote.toJSON() : null,\n quoted: this.quoted,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ HTMLAttributeValueNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── open_quote: ${this.open_quote ? this.open_quote.treeInspect() : \"∅\"}\\n`;\n output += `├── children: ${this.inspectArray(this.children, \"│ \")}`;\n output += `├── close_quote: ${this.close_quote ? this.close_quote.treeInspect() : \"∅\"}\\n`;\n output += `└── quoted: ${typeof this.quoted === 'boolean' ? String(this.quoted) : \"∅\"}\\n`;\n return output;\n }\n}\nclass HTMLAttributeNameNode extends Node {\n children;\n static get type() {\n return \"AST_HTML_ATTRIBUTE_NAME_NODE\";\n }\n static from(data) {\n return new HTMLAttributeNameNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n children: (data.children || []).map(node => fromSerializedNode(node)),\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.children = props.children;\n }\n accept(visitor) {\n visitor.visitHTMLAttributeNameNode(this);\n }\n childNodes() {\n return [\n ...this.children,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.children.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_HTML_ATTRIBUTE_NAME_NODE\",\n children: this.children.map(node => node.toJSON()),\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ HTMLAttributeNameNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `└── children: ${this.inspectArray(this.children, \" \")}`;\n return output;\n }\n}\nclass HTMLAttributeNode extends Node {\n name;\n equals;\n value;\n static get type() {\n return \"AST_HTML_ATTRIBUTE_NODE\";\n }\n static from(data) {\n return new HTMLAttributeNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n name: data.name ? fromSerializedNode((data.name)) : null,\n equals: data.equals ? Token.from(data.equals) : null,\n value: data.value ? fromSerializedNode((data.value)) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.name = props.name;\n this.equals = props.equals;\n this.value = props.value;\n }\n accept(visitor) {\n visitor.visitHTMLAttributeNode(this);\n }\n childNodes() {\n return [\n this.name,\n this.value,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n this.name ? this.name.recursiveErrors() : [],\n this.value ? this.value.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_HTML_ATTRIBUTE_NODE\",\n name: this.name ? this.name.toJSON() : null,\n equals: this.equals ? this.equals.toJSON() : null,\n value: this.value ? this.value.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ HTMLAttributeNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── name: ${this.inspectNode(this.name, \"│ \")}`;\n output += `├── equals: ${this.equals ? this.equals.treeInspect() : \"∅\"}\\n`;\n output += `└── value: ${this.inspectNode(this.value, \" \")}`;\n return output;\n }\n}\nclass HTMLTextNode extends Node {\n content;\n static get type() {\n return \"AST_HTML_TEXT_NODE\";\n }\n static from(data) {\n return new HTMLTextNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n content: data.content,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.content = convertToUTF8(props.content);\n }\n accept(visitor) {\n visitor.visitHTMLTextNode(this);\n }\n childNodes() {\n return [];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_HTML_TEXT_NODE\",\n content: this.content,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ HTMLTextNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `└── content: ${this.content ? JSON.stringify(this.content) : \"∅\"}\\n`;\n return output;\n }\n}\nclass HTMLCommentNode extends Node {\n comment_start;\n children;\n comment_end;\n static get type() {\n return \"AST_HTML_COMMENT_NODE\";\n }\n static from(data) {\n return new HTMLCommentNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n comment_start: data.comment_start ? Token.from(data.comment_start) : null,\n children: (data.children || []).map(node => fromSerializedNode(node)),\n comment_end: data.comment_end ? Token.from(data.comment_end) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.comment_start = props.comment_start;\n this.children = props.children;\n this.comment_end = props.comment_end;\n }\n accept(visitor) {\n visitor.visitHTMLCommentNode(this);\n }\n childNodes() {\n return [\n ...this.children,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.children.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_HTML_COMMENT_NODE\",\n comment_start: this.comment_start ? this.comment_start.toJSON() : null,\n children: this.children.map(node => node.toJSON()),\n comment_end: this.comment_end ? this.comment_end.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ HTMLCommentNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── comment_start: ${this.comment_start ? this.comment_start.treeInspect() : \"∅\"}\\n`;\n output += `├── children: ${this.inspectArray(this.children, \"│ \")}`;\n output += `└── comment_end: ${this.comment_end ? this.comment_end.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass HTMLDoctypeNode extends Node {\n tag_opening;\n children;\n tag_closing;\n static get type() {\n return \"AST_HTML_DOCTYPE_NODE\";\n }\n static from(data) {\n return new HTMLDoctypeNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n children: (data.children || []).map(node => fromSerializedNode(node)),\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.children = props.children;\n this.tag_closing = props.tag_closing;\n }\n accept(visitor) {\n visitor.visitHTMLDoctypeNode(this);\n }\n childNodes() {\n return [\n ...this.children,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.children.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_HTML_DOCTYPE_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n children: this.children.map(node => node.toJSON()),\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ HTMLDoctypeNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── children: ${this.inspectArray(this.children, \"│ \")}`;\n output += `└── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass XMLDeclarationNode extends Node {\n tag_opening;\n children;\n tag_closing;\n static get type() {\n return \"AST_XML_DECLARATION_NODE\";\n }\n static from(data) {\n return new XMLDeclarationNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n children: (data.children || []).map(node => fromSerializedNode(node)),\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.children = props.children;\n this.tag_closing = props.tag_closing;\n }\n accept(visitor) {\n visitor.visitXMLDeclarationNode(this);\n }\n childNodes() {\n return [\n ...this.children,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.children.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_XML_DECLARATION_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n children: this.children.map(node => node.toJSON()),\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ XMLDeclarationNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── children: ${this.inspectArray(this.children, \"│ \")}`;\n output += `└── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass CDATANode extends Node {\n tag_opening;\n children;\n tag_closing;\n static get type() {\n return \"AST_CDATA_NODE\";\n }\n static from(data) {\n return new CDATANode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n children: (data.children || []).map(node => fromSerializedNode(node)),\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.children = props.children;\n this.tag_closing = props.tag_closing;\n }\n accept(visitor) {\n visitor.visitCDATANode(this);\n }\n childNodes() {\n return [\n ...this.children,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.children.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_CDATA_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n children: this.children.map(node => node.toJSON()),\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ CDATANode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── children: ${this.inspectArray(this.children, \"│ \")}`;\n output += `└── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass WhitespaceNode extends Node {\n value;\n static get type() {\n return \"AST_WHITESPACE_NODE\";\n }\n static from(data) {\n return new WhitespaceNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n value: data.value ? Token.from(data.value) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.value = props.value;\n }\n accept(visitor) {\n visitor.visitWhitespaceNode(this);\n }\n childNodes() {\n return [];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_WHITESPACE_NODE\",\n value: this.value ? this.value.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ WhitespaceNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `└── value: ${this.value ? this.value.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass ERBContentNode extends Node {\n tag_opening;\n content;\n tag_closing;\n // no-op for analyzed_ruby\n parsed;\n valid;\n static get type() {\n return \"AST_ERB_CONTENT_NODE\";\n }\n static from(data) {\n return new ERBContentNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n // no-op for analyzed_ruby\n parsed: data.parsed,\n valid: data.valid,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n // no-op for analyzed_ruby\n this.parsed = props.parsed;\n this.valid = props.valid;\n }\n accept(visitor) {\n visitor.visitERBContentNode(this);\n }\n childNodes() {\n return [];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_CONTENT_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n // no-op for analyzed_ruby\n parsed: this.parsed,\n valid: this.valid,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBContentNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n // no-op for analyzed_ruby\n output += `├── parsed: ${typeof this.parsed === 'boolean' ? String(this.parsed) : \"∅\"}\\n`;\n output += `└── valid: ${typeof this.valid === 'boolean' ? String(this.valid) : \"∅\"}\\n`;\n return output;\n }\n}\nclass ERBEndNode extends Node {\n tag_opening;\n content;\n tag_closing;\n static get type() {\n return \"AST_ERB_END_NODE\";\n }\n static from(data) {\n return new ERBEndNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n }\n accept(visitor) {\n visitor.visitERBEndNode(this);\n }\n childNodes() {\n return [];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_END_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBEndNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `└── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass ERBElseNode extends Node {\n tag_opening;\n content;\n tag_closing;\n statements;\n static get type() {\n return \"AST_ERB_ELSE_NODE\";\n }\n static from(data) {\n return new ERBElseNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n statements: (data.statements || []).map(node => fromSerializedNode(node)),\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.statements = props.statements;\n }\n accept(visitor) {\n visitor.visitERBElseNode(this);\n }\n childNodes() {\n return [\n ...this.statements,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.statements.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_ELSE_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n statements: this.statements.map(node => node.toJSON()),\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBElseNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `└── statements: ${this.inspectArray(this.statements, \" \")}`;\n return output;\n }\n}\nclass ERBIfNode extends Node {\n tag_opening;\n content;\n tag_closing;\n statements;\n subsequent;\n end_node;\n static get type() {\n return \"AST_ERB_IF_NODE\";\n }\n static from(data) {\n return new ERBIfNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n statements: (data.statements || []).map(node => fromSerializedNode(node)),\n subsequent: data.subsequent ? fromSerializedNode((data.subsequent)) : null,\n end_node: data.end_node ? fromSerializedNode((data.end_node)) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.statements = props.statements;\n this.subsequent = props.subsequent;\n this.end_node = props.end_node;\n }\n accept(visitor) {\n visitor.visitERBIfNode(this);\n }\n childNodes() {\n return [\n ...this.statements,\n this.subsequent,\n this.end_node,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.statements.map(node => node.recursiveErrors()),\n this.subsequent ? this.subsequent.recursiveErrors() : [],\n this.end_node ? this.end_node.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_IF_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n statements: this.statements.map(node => node.toJSON()),\n subsequent: this.subsequent ? this.subsequent.toJSON() : null,\n end_node: this.end_node ? this.end_node.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBIfNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `├── statements: ${this.inspectArray(this.statements, \"│ \")}`;\n output += `├── subsequent: ${this.inspectNode(this.subsequent, \"│ \")}`;\n output += `└── end_node: ${this.inspectNode(this.end_node, \" \")}`;\n return output;\n }\n}\nclass ERBBlockNode extends Node {\n tag_opening;\n content;\n tag_closing;\n body;\n end_node;\n static get type() {\n return \"AST_ERB_BLOCK_NODE\";\n }\n static from(data) {\n return new ERBBlockNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n body: (data.body || []).map(node => fromSerializedNode(node)),\n end_node: data.end_node ? fromSerializedNode((data.end_node)) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.body = props.body;\n this.end_node = props.end_node;\n }\n accept(visitor) {\n visitor.visitERBBlockNode(this);\n }\n childNodes() {\n return [\n ...this.body,\n this.end_node,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.body.map(node => node.recursiveErrors()),\n this.end_node ? this.end_node.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_BLOCK_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n body: this.body.map(node => node.toJSON()),\n end_node: this.end_node ? this.end_node.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBBlockNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `├── body: ${this.inspectArray(this.body, \"│ \")}`;\n output += `└── end_node: ${this.inspectNode(this.end_node, \" \")}`;\n return output;\n }\n}\nclass ERBWhenNode extends Node {\n tag_opening;\n content;\n tag_closing;\n statements;\n static get type() {\n return \"AST_ERB_WHEN_NODE\";\n }\n static from(data) {\n return new ERBWhenNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n statements: (data.statements || []).map(node => fromSerializedNode(node)),\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.statements = props.statements;\n }\n accept(visitor) {\n visitor.visitERBWhenNode(this);\n }\n childNodes() {\n return [\n ...this.statements,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.statements.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_WHEN_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n statements: this.statements.map(node => node.toJSON()),\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBWhenNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `└── statements: ${this.inspectArray(this.statements, \" \")}`;\n return output;\n }\n}\nclass ERBCaseNode extends Node {\n tag_opening;\n content;\n tag_closing;\n children;\n conditions;\n else_clause;\n end_node;\n static get type() {\n return \"AST_ERB_CASE_NODE\";\n }\n static from(data) {\n return new ERBCaseNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n children: (data.children || []).map(node => fromSerializedNode(node)),\n conditions: (data.conditions || []).map(node => fromSerializedNode(node)),\n else_clause: data.else_clause ? fromSerializedNode((data.else_clause)) : null,\n end_node: data.end_node ? fromSerializedNode((data.end_node)) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.children = props.children;\n this.conditions = props.conditions;\n this.else_clause = props.else_clause;\n this.end_node = props.end_node;\n }\n accept(visitor) {\n visitor.visitERBCaseNode(this);\n }\n childNodes() {\n return [\n ...this.children,\n ...this.conditions,\n this.else_clause,\n this.end_node,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.children.map(node => node.recursiveErrors()),\n ...this.conditions.map(node => node.recursiveErrors()),\n this.else_clause ? this.else_clause.recursiveErrors() : [],\n this.end_node ? this.end_node.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_CASE_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n children: this.children.map(node => node.toJSON()),\n conditions: this.conditions.map(node => node.toJSON()),\n else_clause: this.else_clause ? this.else_clause.toJSON() : null,\n end_node: this.end_node ? this.end_node.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBCaseNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `├── children: ${this.inspectArray(this.children, \"│ \")}`;\n output += `├── conditions: ${this.inspectArray(this.conditions, \"│ \")}`;\n output += `├── else_clause: ${this.inspectNode(this.else_clause, \"│ \")}`;\n output += `└── end_node: ${this.inspectNode(this.end_node, \" \")}`;\n return output;\n }\n}\nclass ERBCaseMatchNode extends Node {\n tag_opening;\n content;\n tag_closing;\n children;\n conditions;\n else_clause;\n end_node;\n static get type() {\n return \"AST_ERB_CASE_MATCH_NODE\";\n }\n static from(data) {\n return new ERBCaseMatchNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n children: (data.children || []).map(node => fromSerializedNode(node)),\n conditions: (data.conditions || []).map(node => fromSerializedNode(node)),\n else_clause: data.else_clause ? fromSerializedNode((data.else_clause)) : null,\n end_node: data.end_node ? fromSerializedNode((data.end_node)) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.children = props.children;\n this.conditions = props.conditions;\n this.else_clause = props.else_clause;\n this.end_node = props.end_node;\n }\n accept(visitor) {\n visitor.visitERBCaseMatchNode(this);\n }\n childNodes() {\n return [\n ...this.children,\n ...this.conditions,\n this.else_clause,\n this.end_node,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.children.map(node => node.recursiveErrors()),\n ...this.conditions.map(node => node.recursiveErrors()),\n this.else_clause ? this.else_clause.recursiveErrors() : [],\n this.end_node ? this.end_node.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_CASE_MATCH_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n children: this.children.map(node => node.toJSON()),\n conditions: this.conditions.map(node => node.toJSON()),\n else_clause: this.else_clause ? this.else_clause.toJSON() : null,\n end_node: this.end_node ? this.end_node.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBCaseMatchNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `├── children: ${this.inspectArray(this.children, \"│ \")}`;\n output += `├── conditions: ${this.inspectArray(this.conditions, \"│ \")}`;\n output += `├── else_clause: ${this.inspectNode(this.else_clause, \"│ \")}`;\n output += `└── end_node: ${this.inspectNode(this.end_node, \" \")}`;\n return output;\n }\n}\nclass ERBWhileNode extends Node {\n tag_opening;\n content;\n tag_closing;\n statements;\n end_node;\n static get type() {\n return \"AST_ERB_WHILE_NODE\";\n }\n static from(data) {\n return new ERBWhileNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n statements: (data.statements || []).map(node => fromSerializedNode(node)),\n end_node: data.end_node ? fromSerializedNode((data.end_node)) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.statements = props.statements;\n this.end_node = props.end_node;\n }\n accept(visitor) {\n visitor.visitERBWhileNode(this);\n }\n childNodes() {\n return [\n ...this.statements,\n this.end_node,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.statements.map(node => node.recursiveErrors()),\n this.end_node ? this.end_node.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_WHILE_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n statements: this.statements.map(node => node.toJSON()),\n end_node: this.end_node ? this.end_node.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBWhileNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `├── statements: ${this.inspectArray(this.statements, \"│ \")}`;\n output += `└── end_node: ${this.inspectNode(this.end_node, \" \")}`;\n return output;\n }\n}\nclass ERBUntilNode extends Node {\n tag_opening;\n content;\n tag_closing;\n statements;\n end_node;\n static get type() {\n return \"AST_ERB_UNTIL_NODE\";\n }\n static from(data) {\n return new ERBUntilNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n statements: (data.statements || []).map(node => fromSerializedNode(node)),\n end_node: data.end_node ? fromSerializedNode((data.end_node)) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.statements = props.statements;\n this.end_node = props.end_node;\n }\n accept(visitor) {\n visitor.visitERBUntilNode(this);\n }\n childNodes() {\n return [\n ...this.statements,\n this.end_node,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.statements.map(node => node.recursiveErrors()),\n this.end_node ? this.end_node.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_UNTIL_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n statements: this.statements.map(node => node.toJSON()),\n end_node: this.end_node ? this.end_node.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBUntilNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `├── statements: ${this.inspectArray(this.statements, \"│ \")}`;\n output += `└── end_node: ${this.inspectNode(this.end_node, \" \")}`;\n return output;\n }\n}\nclass ERBForNode extends Node {\n tag_opening;\n content;\n tag_closing;\n statements;\n end_node;\n static get type() {\n return \"AST_ERB_FOR_NODE\";\n }\n static from(data) {\n return new ERBForNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n statements: (data.statements || []).map(node => fromSerializedNode(node)),\n end_node: data.end_node ? fromSerializedNode((data.end_node)) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.statements = props.statements;\n this.end_node = props.end_node;\n }\n accept(visitor) {\n visitor.visitERBForNode(this);\n }\n childNodes() {\n return [\n ...this.statements,\n this.end_node,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.statements.map(node => node.recursiveErrors()),\n this.end_node ? this.end_node.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_FOR_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n statements: this.statements.map(node => node.toJSON()),\n end_node: this.end_node ? this.end_node.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBForNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `├── statements: ${this.inspectArray(this.statements, \"│ \")}`;\n output += `└── end_node: ${this.inspectNode(this.end_node, \" \")}`;\n return output;\n }\n}\nclass ERBRescueNode extends Node {\n tag_opening;\n content;\n tag_closing;\n statements;\n subsequent;\n static get type() {\n return \"AST_ERB_RESCUE_NODE\";\n }\n static from(data) {\n return new ERBRescueNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n statements: (data.statements || []).map(node => fromSerializedNode(node)),\n subsequent: data.subsequent ? fromSerializedNode((data.subsequent)) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.statements = props.statements;\n this.subsequent = props.subsequent;\n }\n accept(visitor) {\n visitor.visitERBRescueNode(this);\n }\n childNodes() {\n return [\n ...this.statements,\n this.subsequent,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.statements.map(node => node.recursiveErrors()),\n this.subsequent ? this.subsequent.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_RESCUE_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n statements: this.statements.map(node => node.toJSON()),\n subsequent: this.subsequent ? this.subsequent.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBRescueNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `├── statements: ${this.inspectArray(this.statements, \"│ \")}`;\n output += `└── subsequent: ${this.inspectNode(this.subsequent, \" \")}`;\n return output;\n }\n}\nclass ERBEnsureNode extends Node {\n tag_opening;\n content;\n tag_closing;\n statements;\n static get type() {\n return \"AST_ERB_ENSURE_NODE\";\n }\n static from(data) {\n return new ERBEnsureNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n statements: (data.statements || []).map(node => fromSerializedNode(node)),\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.statements = props.statements;\n }\n accept(visitor) {\n visitor.visitERBEnsureNode(this);\n }\n childNodes() {\n return [\n ...this.statements,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.statements.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_ENSURE_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n statements: this.statements.map(node => node.toJSON()),\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBEnsureNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `└── statements: ${this.inspectArray(this.statements, \" \")}`;\n return output;\n }\n}\nclass ERBBeginNode extends Node {\n tag_opening;\n content;\n tag_closing;\n statements;\n rescue_clause;\n else_clause;\n ensure_clause;\n end_node;\n static get type() {\n return \"AST_ERB_BEGIN_NODE\";\n }\n static from(data) {\n return new ERBBeginNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n statements: (data.statements || []).map(node => fromSerializedNode(node)),\n rescue_clause: data.rescue_clause ? fromSerializedNode((data.rescue_clause)) : null,\n else_clause: data.else_clause ? fromSerializedNode((data.else_clause)) : null,\n ensure_clause: data.ensure_clause ? fromSerializedNode((data.ensure_clause)) : null,\n end_node: data.end_node ? fromSerializedNode((data.end_node)) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.statements = props.statements;\n this.rescue_clause = props.rescue_clause;\n this.else_clause = props.else_clause;\n this.ensure_clause = props.ensure_clause;\n this.end_node = props.end_node;\n }\n accept(visitor) {\n visitor.visitERBBeginNode(this);\n }\n childNodes() {\n return [\n ...this.statements,\n this.rescue_clause,\n this.else_clause,\n this.ensure_clause,\n this.end_node,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.statements.map(node => node.recursiveErrors()),\n this.rescue_clause ? this.rescue_clause.recursiveErrors() : [],\n this.else_clause ? this.else_clause.recursiveErrors() : [],\n this.ensure_clause ? this.ensure_clause.recursiveErrors() : [],\n this.end_node ? this.end_node.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_BEGIN_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n statements: this.statements.map(node => node.toJSON()),\n rescue_clause: this.rescue_clause ? this.rescue_clause.toJSON() : null,\n else_clause: this.else_clause ? this.else_clause.toJSON() : null,\n ensure_clause: this.ensure_clause ? this.ensure_clause.toJSON() : null,\n end_node: this.end_node ? this.end_node.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBBeginNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `├── statements: ${this.inspectArray(this.statements, \"│ \")}`;\n output += `├── rescue_clause: ${this.inspectNode(this.rescue_clause, \"│ \")}`;\n output += `├── else_clause: ${this.inspectNode(this.else_clause, \"│ \")}`;\n output += `├── ensure_clause: ${this.inspectNode(this.ensure_clause, \"│ \")}`;\n output += `└── end_node: ${this.inspectNode(this.end_node, \" \")}`;\n return output;\n }\n}\nclass ERBUnlessNode extends Node {\n tag_opening;\n content;\n tag_closing;\n statements;\n else_clause;\n end_node;\n static get type() {\n return \"AST_ERB_UNLESS_NODE\";\n }\n static from(data) {\n return new ERBUnlessNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n statements: (data.statements || []).map(node => fromSerializedNode(node)),\n else_clause: data.else_clause ? fromSerializedNode((data.else_clause)) : null,\n end_node: data.end_node ? fromSerializedNode((data.end_node)) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.statements = props.statements;\n this.else_clause = props.else_clause;\n this.end_node = props.end_node;\n }\n accept(visitor) {\n visitor.visitERBUnlessNode(this);\n }\n childNodes() {\n return [\n ...this.statements,\n this.else_clause,\n this.end_node,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.statements.map(node => node.recursiveErrors()),\n this.else_clause ? this.else_clause.recursiveErrors() : [],\n this.end_node ? this.end_node.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_UNLESS_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n statements: this.statements.map(node => node.toJSON()),\n else_clause: this.else_clause ? this.else_clause.toJSON() : null,\n end_node: this.end_node ? this.end_node.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBUnlessNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `├── statements: ${this.inspectArray(this.statements, \"│ \")}`;\n output += `├── else_clause: ${this.inspectNode(this.else_clause, \"│ \")}`;\n output += `└── end_node: ${this.inspectNode(this.end_node, \" \")}`;\n return output;\n }\n}\nclass ERBYieldNode extends Node {\n tag_opening;\n content;\n tag_closing;\n static get type() {\n return \"AST_ERB_YIELD_NODE\";\n }\n static from(data) {\n return new ERBYieldNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n }\n accept(visitor) {\n visitor.visitERBYieldNode(this);\n }\n childNodes() {\n return [];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_YIELD_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBYieldNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `└── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass ERBInNode extends Node {\n tag_opening;\n content;\n tag_closing;\n statements;\n static get type() {\n return \"AST_ERB_IN_NODE\";\n }\n static from(data) {\n return new ERBInNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n statements: (data.statements || []).map(node => fromSerializedNode(node)),\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.statements = props.statements;\n }\n accept(visitor) {\n visitor.visitERBInNode(this);\n }\n childNodes() {\n return [\n ...this.statements,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.statements.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_IN_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n statements: this.statements.map(node => node.toJSON()),\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBInNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `└── statements: ${this.inspectArray(this.statements, \" \")}`;\n return output;\n }\n}\nfunction fromSerializedNode(node) {\n switch (node.type) {\n case \"AST_DOCUMENT_NODE\": return DocumentNode.from(node);\n case \"AST_LITERAL_NODE\": return LiteralNode.from(node);\n case \"AST_HTML_OPEN_TAG_NODE\": return HTMLOpenTagNode.from(node);\n case \"AST_HTML_CLOSE_TAG_NODE\": return HTMLCloseTagNode.from(node);\n case \"AST_HTML_ELEMENT_NODE\": return HTMLElementNode.from(node);\n case \"AST_HTML_ATTRIBUTE_VALUE_NODE\": return HTMLAttributeValueNode.from(node);\n case \"AST_HTML_ATTRIBUTE_NAME_NODE\": return HTMLAttributeNameNode.from(node);\n case \"AST_HTML_ATTRIBUTE_NODE\": return HTMLAttributeNode.from(node);\n case \"AST_HTML_TEXT_NODE\": return HTMLTextNode.from(node);\n case \"AST_HTML_COMMENT_NODE\": return HTMLCommentNode.from(node);\n case \"AST_HTML_DOCTYPE_NODE\": return HTMLDoctypeNode.from(node);\n case \"AST_XML_DECLARATION_NODE\": return XMLDeclarationNode.from(node);\n case \"AST_CDATA_NODE\": return CDATANode.from(node);\n case \"AST_WHITESPACE_NODE\": return WhitespaceNode.from(node);\n case \"AST_ERB_CONTENT_NODE\": return ERBContentNode.from(node);\n case \"AST_ERB_END_NODE\": return ERBEndNode.from(node);\n case \"AST_ERB_ELSE_NODE\": return ERBElseNode.from(node);\n case \"AST_ERB_IF_NODE\": return ERBIfNode.from(node);\n case \"AST_ERB_BLOCK_NODE\": return ERBBlockNode.from(node);\n case \"AST_ERB_WHEN_NODE\": return ERBWhenNode.from(node);\n case \"AST_ERB_CASE_NODE\": return ERBCaseNode.from(node);\n case \"AST_ERB_CASE_MATCH_NODE\": return ERBCaseMatchNode.from(node);\n case \"AST_ERB_WHILE_NODE\": return ERBWhileNode.from(node);\n case \"AST_ERB_UNTIL_NODE\": return ERBUntilNode.from(node);\n case \"AST_ERB_FOR_NODE\": return ERBForNode.from(node);\n case \"AST_ERB_RESCUE_NODE\": return ERBRescueNode.from(node);\n case \"AST_ERB_ENSURE_NODE\": return ERBEnsureNode.from(node);\n case \"AST_ERB_BEGIN_NODE\": return ERBBeginNode.from(node);\n case \"AST_ERB_UNLESS_NODE\": return ERBUnlessNode.from(node);\n case \"AST_ERB_YIELD_NODE\": return ERBYieldNode.from(node);\n case \"AST_ERB_IN_NODE\": return ERBInNode.from(node);\n default:\n throw new Error(`Unknown node type: ${node.type}`);\n }\n}\nconst ERBNodeClasses = [\n ERBContentNode,\n ERBEndNode,\n ERBElseNode,\n ERBIfNode,\n ERBBlockNode,\n ERBWhenNode,\n ERBCaseNode,\n ERBCaseMatchNode,\n ERBWhileNode,\n ERBUntilNode,\n ERBForNode,\n ERBRescueNode,\n ERBEnsureNode,\n ERBBeginNode,\n ERBUnlessNode,\n ERBYieldNode,\n ERBInNode,\n];\n\nclass Result {\n source;\n warnings;\n errors;\n constructor(source, warnings = [], errors = []) {\n this.source = source;\n this.warnings = warnings || [];\n this.errors = errors || [];\n }\n /**\n * Determines if the parsing was successful.\n * @returns `true` if there are no errors, otherwise `false`.\n */\n get successful() {\n return this.errors.length === 0;\n }\n /**\n * Determines if the parsing failed.\n * @returns `true` if there are errors, otherwise `false`.\n */\n get failed() {\n return this.errors.length > 0;\n }\n}\n\nclass HerbWarning {\n message;\n location;\n static from(warning) {\n return new HerbWarning(warning.message, Location.from(warning.location));\n }\n constructor(message, location) {\n this.message = message;\n this.location = location;\n }\n}\n\n/**\n * Represents the result of a parsing operation, extending the base `Result` class.\n * It contains the parsed document node, source code, warnings, and errors.\n */\nclass ParseResult extends Result {\n /** The document node generated from the source code. */\n value;\n /**\n * Creates a `ParseResult` instance from a serialized result.\n * @param result - The serialized parse result containing the value and source.\n * @returns A new `ParseResult` instance.\n */\n static from(result) {\n return new ParseResult(DocumentNode.from(result.value), result.source, result.warnings.map((warning) => HerbWarning.from(warning)), result.errors.map((error) => HerbError.from(error)));\n }\n /**\n * Constructs a new `ParseResult`.\n * @param value - The document node.\n * @param source - The source code that was parsed.\n * @param warnings - An array of warnings encountered during parsing.\n * @param errors - An array of errors encountered during parsing.\n */\n constructor(value, source, warnings = [], errors = []) {\n super(source, warnings, errors);\n this.value = value;\n }\n /**\n * Determines if the parsing failed.\n * @returns `true` if there are errors, otherwise `false`.\n */\n get failed() {\n // Consider errors on this result and recursively in the document tree\n return this.recursiveErrors().length > 0;\n }\n /**\n * Determines if the parsing was successful.\n * @returns `true` if there are no errors, otherwise `false`.\n */\n get successful() {\n return !this.failed;\n }\n /**\n * Returns a pretty-printed JSON string of the errors.\n * @returns A string representation of the errors.\n */\n prettyErrors() {\n return JSON.stringify([...this.errors, ...this.value.errors], null, 2);\n }\n recursiveErrors() {\n return [...this.errors, ...this.value.recursiveErrors()];\n }\n /**\n * Returns a pretty-printed string of the parse result.\n * @returns A string representation of the parse result.\n */\n inspect() {\n return this.value.inspect();\n }\n /**\n * Accepts a visitor to traverse the document node.\n * @param visitor - The visitor instance.\n */\n visit(visitor) {\n visitor.visit(this.value);\n }\n}\n\n// NOTE: This file is generated by the templates/template.rb script and should not\n// be modified manually. See /Users/marcoroth/Development/herb-release-0.8.5/templates/javascript/packages/core/src/node-type-guards.ts.erb\n/**\n * Type guard functions for AST nodes.\n * These functions provide type checking by combining both instanceof\n * checks and type string comparisons for maximum reliability across different\n * runtime scenarios (e.g., serialized/deserialized nodes).\n */\n/**\n * Checks if a node is a DocumentNode\n */\nfunction isDocumentNode(node) {\n return node instanceof DocumentNode || node.type === \"AST_DOCUMENT_NODE\" || node.constructor.type === \"AST_DOCUMENT_NODE\";\n}\n/**\n * Checks if a node is a LiteralNode\n */\nfunction isLiteralNode(node) {\n return node instanceof LiteralNode || node.type === \"AST_LITERAL_NODE\" || node.constructor.type === \"AST_LITERAL_NODE\";\n}\n/**\n * Checks if a node is a HTMLOpenTagNode\n */\nfunction isHTMLOpenTagNode(node) {\n return node instanceof HTMLOpenTagNode || node.type === \"AST_HTML_OPEN_TAG_NODE\" || node.constructor.type === \"AST_HTML_OPEN_TAG_NODE\";\n}\n/**\n * Checks if a node is a HTMLCloseTagNode\n */\nfunction isHTMLCloseTagNode(node) {\n return node instanceof HTMLCloseTagNode || node.type === \"AST_HTML_CLOSE_TAG_NODE\" || node.constructor.type === \"AST_HTML_CLOSE_TAG_NODE\";\n}\n/**\n * Checks if a node is a HTMLElementNode\n */\nfunction isHTMLElementNode(node) {\n return node instanceof HTMLElementNode || node.type === \"AST_HTML_ELEMENT_NODE\" || node.constructor.type === \"AST_HTML_ELEMENT_NODE\";\n}\n/**\n * Checks if a node is a HTMLAttributeValueNode\n */\nfunction isHTMLAttributeValueNode(node) {\n return node instanceof HTMLAttributeValueNode || node.type === \"AST_HTML_ATTRIBUTE_VALUE_NODE\" || node.constructor.type === \"AST_HTML_ATTRIBUTE_VALUE_NODE\";\n}\n/**\n * Checks if a node is a HTMLAttributeNameNode\n */\nfunction isHTMLAttributeNameNode(node) {\n return node instanceof HTMLAttributeNameNode || node.type === \"AST_HTML_ATTRIBUTE_NAME_NODE\" || node.constructor.type === \"AST_HTML_ATTRIBUTE_NAME_NODE\";\n}\n/**\n * Checks if a node is a HTMLAttributeNode\n */\nfunction isHTMLAttributeNode(node) {\n return node instanceof HTMLAttributeNode || node.type === \"AST_HTML_ATTRIBUTE_NODE\" || node.constructor.type === \"AST_HTML_ATTRIBUTE_NODE\";\n}\n/**\n * Checks if a node is a HTMLTextNode\n */\nfunction isHTMLTextNode(node) {\n return node instanceof HTMLTextNode || node.type === \"AST_HTML_TEXT_NODE\" || node.constructor.type === \"AST_HTML_TEXT_NODE\";\n}\n/**\n * Checks if a node is a HTMLCommentNode\n */\nfunction isHTMLCommentNode(node) {\n return node instanceof HTMLCommentNode || node.type === \"AST_HTML_COMMENT_NODE\" || node.constructor.type === \"AST_HTML_COMMENT_NODE\";\n}\n/**\n * Checks if a node is a HTMLDoctypeNode\n */\nfunction isHTMLDoctypeNode(node) {\n return node instanceof HTMLDoctypeNode || node.type === \"AST_HTML_DOCTYPE_NODE\" || node.constructor.type === \"AST_HTML_DOCTYPE_NODE\";\n}\n/**\n * Checks if a node is a XMLDeclarationNode\n */\nfunction isXMLDeclarationNode(node) {\n return node instanceof XMLDeclarationNode || node.type === \"AST_XML_DECLARATION_NODE\" || node.constructor.type === \"AST_XML_DECLARATION_NODE\";\n}\n/**\n * Checks if a node is a CDATANode\n */\nfunction isCDATANode(node) {\n return node instanceof CDATANode || node.type === \"AST_CDATA_NODE\" || node.constructor.type === \"AST_CDATA_NODE\";\n}\n/**\n * Checks if a node is a WhitespaceNode\n */\nfunction isWhitespaceNode(node) {\n return node instanceof WhitespaceNode || node.type === \"AST_WHITESPACE_NODE\" || node.constructor.type === \"AST_WHITESPACE_NODE\";\n}\n/**\n * Checks if a node is a ERBContentNode\n */\nfunction isERBContentNode(node) {\n return node instanceof ERBContentNode || node.type === \"AST_ERB_CONTENT_NODE\" || node.constructor.type === \"AST_ERB_CONTENT_NODE\";\n}\n/**\n * Checks if a node is a ERBEndNode\n */\nfunction isERBEndNode(node) {\n return node instanceof ERBEndNode || node.type === \"AST_ERB_END_NODE\" || node.constructor.type === \"AST_ERB_END_NODE\";\n}\n/**\n * Checks if a node is a ERBElseNode\n */\nfunction isERBElseNode(node) {\n return node instanceof ERBElseNode || node.type === \"AST_ERB_ELSE_NODE\" || node.constructor.type === \"AST_ERB_ELSE_NODE\";\n}\n/**\n * Checks if a node is a ERBIfNode\n */\nfunction isERBIfNode(node) {\n return node instanceof ERBIfNode || node.type === \"AST_ERB_IF_NODE\" || node.constructor.type === \"AST_ERB_IF_NODE\";\n}\n/**\n * Checks if a node is a ERBBlockNode\n */\nfunction isERBBlockNode(node) {\n return node instanceof ERBBlockNode || node.type === \"AST_ERB_BLOCK_NODE\" || node.constructor.type === \"AST_ERB_BLOCK_NODE\";\n}\n/**\n * Checks if a node is a ERBWhenNode\n */\nfunction isERBWhenNode(node) {\n return node instanceof ERBWhenNode || node.type === \"AST_ERB_WHEN_NODE\" || node.constructor.type === \"AST_ERB_WHEN_NODE\";\n}\n/**\n * Checks if a node is a ERBCaseNode\n */\nfunction isERBCaseNode(node) {\n return node instanceof ERBCaseNode || node.type === \"AST_ERB_CASE_NODE\" || node.constructor.type === \"AST_ERB_CASE_NODE\";\n}\n/**\n * Checks if a node is a ERBCaseMatchNode\n */\nfunction isERBCaseMatchNode(node) {\n return node instanceof ERBCaseMatchNode || node.type === \"AST_ERB_CASE_MATCH_NODE\" || node.constructor.type === \"AST_ERB_CASE_MATCH_NODE\";\n}\n/**\n * Checks if a node is a ERBWhileNode\n */\nfunction isERBWhileNode(node) {\n return node instanceof ERBWhileNode || node.type === \"AST_ERB_WHILE_NODE\" || node.constructor.type === \"AST_ERB_WHILE_NODE\";\n}\n/**\n * Checks if a node is a ERBUntilNode\n */\nfunction isERBUntilNode(node) {\n return node instanceof ERBUntilNode || node.type === \"AST_ERB_UNTIL_NODE\" || node.constructor.type === \"AST_ERB_UNTIL_NODE\";\n}\n/**\n * Checks if a node is a ERBForNode\n */\nfunction isERBForNode(node) {\n return node instanceof ERBForNode || node.type === \"AST_ERB_FOR_NODE\" || node.constructor.type === \"AST_ERB_FOR_NODE\";\n}\n/**\n * Checks if a node is a ERBRescueNode\n */\nfunction isERBRescueNode(node) {\n return node instanceof ERBRescueNode || node.type === \"AST_ERB_RESCUE_NODE\" || node.constructor.type === \"AST_ERB_RESCUE_NODE\";\n}\n/**\n * Checks if a node is a ERBEnsureNode\n */\nfunction isERBEnsureNode(node) {\n return node instanceof ERBEnsureNode || node.type === \"AST_ERB_ENSURE_NODE\" || node.constructor.type === \"AST_ERB_ENSURE_NODE\";\n}\n/**\n * Checks if a node is a ERBBeginNode\n */\nfunction isERBBeginNode(node) {\n return node instanceof ERBBeginNode || node.type === \"AST_ERB_BEGIN_NODE\" || node.constructor.type === \"AST_ERB_BEGIN_NODE\";\n}\n/**\n * Checks if a node is a ERBUnlessNode\n */\nfunction isERBUnlessNode(node) {\n return node instanceof ERBUnlessNode || node.type === \"AST_ERB_UNLESS_NODE\" || node.constructor.type === \"AST_ERB_UNLESS_NODE\";\n}\n/**\n * Checks if a node is a ERBYieldNode\n */\nfunction isERBYieldNode(node) {\n return node instanceof ERBYieldNode || node.type === \"AST_ERB_YIELD_NODE\" || node.constructor.type === \"AST_ERB_YIELD_NODE\";\n}\n/**\n * Checks if a node is a ERBInNode\n */\nfunction isERBInNode(node) {\n return node instanceof ERBInNode || node.type === \"AST_ERB_IN_NODE\" || node.constructor.type === \"AST_ERB_IN_NODE\";\n}\n/**\n * Convenience type guards for common node categories\n */\n/**\n * Checks if a node is any HTML node type\n */\nfunction isHTMLNode(node) {\n return isHTMLOpenTagNode(node) ||\n isHTMLCloseTagNode(node) ||\n isHTMLElementNode(node) ||\n isHTMLAttributeValueNode(node) ||\n isHTMLAttributeNameNode(node) ||\n isHTMLAttributeNode(node) ||\n isHTMLTextNode(node) ||\n isHTMLCommentNode(node) ||\n isHTMLDoctypeNode(node);\n}\n/**\n * Checks if a node is any ERB node type\n */\nfunction isERBNode(node) {\n return isERBContentNode(node) ||\n isERBEndNode(node) ||\n isERBElseNode(node) ||\n isERBIfNode(node) ||\n isERBBlockNode(node) ||\n isERBWhenNode(node) ||\n isERBCaseNode(node) ||\n isERBCaseMatchNode(node) ||\n isERBWhileNode(node) ||\n isERBUntilNode(node) ||\n isERBForNode(node) ||\n isERBRescueNode(node) ||\n isERBEnsureNode(node) ||\n isERBBeginNode(node) ||\n isERBUnlessNode(node) ||\n isERBYieldNode(node) ||\n isERBInNode(node);\n}\n/**\n * Map of node classes to their corresponding type guard functions\n *\n * @example\n * const guard = NODE_TYPE_GUARDS[HTMLTextNode]\n *\n * if (guard(node)) {\n * // node is HTMLTextNode\n * }\n */\nconst NODE_TYPE_GUARDS = new Map([\n [DocumentNode, isDocumentNode],\n [LiteralNode, isLiteralNode],\n [HTMLOpenTagNode, isHTMLOpenTagNode],\n [HTMLCloseTagNode, isHTMLCloseTagNode],\n [HTMLElementNode, isHTMLElementNode],\n [HTMLAttributeValueNode, isHTMLAttributeValueNode],\n [HTMLAttributeNameNode, isHTMLAttributeNameNode],\n [HTMLAttributeNode, isHTMLAttributeNode],\n [HTMLTextNode, isHTMLTextNode],\n [HTMLCommentNode, isHTMLCommentNode],\n [HTMLDoctypeNode, isHTMLDoctypeNode],\n [XMLDeclarationNode, isXMLDeclarationNode],\n [CDATANode, isCDATANode],\n [WhitespaceNode, isWhitespaceNode],\n [ERBContentNode, isERBContentNode],\n [ERBEndNode, isERBEndNode],\n [ERBElseNode, isERBElseNode],\n [ERBIfNode, isERBIfNode],\n [ERBBlockNode, isERBBlockNode],\n [ERBWhenNode, isERBWhenNode],\n [ERBCaseNode, isERBCaseNode],\n [ERBCaseMatchNode, isERBCaseMatchNode],\n [ERBWhileNode, isERBWhileNode],\n [ERBUntilNode, isERBUntilNode],\n [ERBForNode, isERBForNode],\n [ERBRescueNode, isERBRescueNode],\n [ERBEnsureNode, isERBEnsureNode],\n [ERBBeginNode, isERBBeginNode],\n [ERBUnlessNode, isERBUnlessNode],\n [ERBYieldNode, isERBYieldNode],\n [ERBInNode, isERBInNode],\n]);\n/**\n * Map of AST node type strings to their corresponding type guard functions\n *\n * @example\n * const guard = AST_TYPE_GUARDS[\"AST_HTML_TEXT_NODE\"]\n *\n * if (guard(node)) {\n * // node is HTMLTextNode\n * }\n */\nconst AST_TYPE_GUARDS = new Map([\n [\"AST_DOCUMENT_NODE\", isDocumentNode],\n [\"AST_LITERAL_NODE\", isLiteralNode],\n [\"AST_HTML_OPEN_TAG_NODE\", isHTMLOpenTagNode],\n [\"AST_HTML_CLOSE_TAG_NODE\", isHTMLCloseTagNode],\n [\"AST_HTML_ELEMENT_NODE\", isHTMLElementNode],\n [\"AST_HTML_ATTRIBUTE_VALUE_NODE\", isHTMLAttributeValueNode],\n [\"AST_HTML_ATTRIBUTE_NAME_NODE\", isHTMLAttributeNameNode],\n [\"AST_HTML_ATTRIBUTE_NODE\", isHTMLAttributeNode],\n [\"AST_HTML_TEXT_NODE\", isHTMLTextNode],\n [\"AST_HTML_COMMENT_NODE\", isHTMLCommentNode],\n [\"AST_HTML_DOCTYPE_NODE\", isHTMLDoctypeNode],\n [\"AST_XML_DECLARATION_NODE\", isXMLDeclarationNode],\n [\"AST_CDATA_NODE\", isCDATANode],\n [\"AST_WHITESPACE_NODE\", isWhitespaceNode],\n [\"AST_ERB_CONTENT_NODE\", isERBContentNode],\n [\"AST_ERB_END_NODE\", isERBEndNode],\n [\"AST_ERB_ELSE_NODE\", isERBElseNode],\n [\"AST_ERB_IF_NODE\", isERBIfNode],\n [\"AST_ERB_BLOCK_NODE\", isERBBlockNode],\n [\"AST_ERB_WHEN_NODE\", isERBWhenNode],\n [\"AST_ERB_CASE_NODE\", isERBCaseNode],\n [\"AST_ERB_CASE_MATCH_NODE\", isERBCaseMatchNode],\n [\"AST_ERB_WHILE_NODE\", isERBWhileNode],\n [\"AST_ERB_UNTIL_NODE\", isERBUntilNode],\n [\"AST_ERB_FOR_NODE\", isERBForNode],\n [\"AST_ERB_RESCUE_NODE\", isERBRescueNode],\n [\"AST_ERB_ENSURE_NODE\", isERBEnsureNode],\n [\"AST_ERB_BEGIN_NODE\", isERBBeginNode],\n [\"AST_ERB_UNLESS_NODE\", isERBUnlessNode],\n [\"AST_ERB_YIELD_NODE\", isERBYieldNode],\n [\"AST_ERB_IN_NODE\", isERBInNode],\n]);\n/**\n * Checks if a node matches any of the provided type identifiers with proper type narrowing\n * Supports AST type strings, node classes, or type guard functions\n *\n * @example\n * if (isAnyOf(node, \"AST_HTML_TEXT_NODE\", \"AST_LITERAL_NODE\")) {\n * // node is narrowed to HTMLTextNode | LiteralNode\n * }\n *\n * @example\n * if (isAnyOf(node, HTMLTextNode, LiteralNode)) {\n * // node is narrowed to HTMLTextNode | LiteralNode\n * }\n */\nfunction isAnyOf(node, ...types) {\n return types.some(type => {\n if (typeof type === 'string') {\n return isNode(node, type);\n }\n else if (typeof type === 'function' && type.prototype && type.prototype.constructor === type && NODE_TYPE_GUARDS.has(type)) {\n return isNode(node, type);\n }\n else if (typeof type === 'function') {\n return type(node);\n }\n else {\n return false;\n }\n });\n}\n/**\n * Checks if a node does NOT match any of the provided type identifiers\n * Supports AST type strings, node classes, or type guard functions\n * This is the logical inverse of isAnyOf\n *\n * @example\n * if (isNoneOf(node, \"AST_HTML_TEXT_NODE\", \"AST_LITERAL_NODE\")) {\n * // node is neither HTMLTextNode nor LiteralNode\n * }\n *\n * @example\n * if (isNoneOf(node, HTMLTextNode, LiteralNode)) {\n * // node is neither HTMLTextNode nor LiteralNode\n * }\n *\n * @example\n * if (isNoneOf(node, isHTMLTextNode, isLiteralNode)) {\n * // node is neither HTMLTextNode nor LiteralNode\n * }\n */\nfunction isNoneOf(node, ...types) {\n return !isAnyOf(node, ...types);\n}\nfunction areAllOfType(nodes, ...types) {\n return nodes.every(node => isAnyOf(node, ...types));\n}\nfunction filterNodes(nodes, ...types) {\n if (!nodes)\n return [];\n return nodes.filter(node => isAnyOf(node, ...types));\n}\nfunction isNode(node, type) {\n if (!node)\n return false;\n if (typeof type === 'string') {\n const guard = AST_TYPE_GUARDS.get(type);\n return guard ? guard(node) : false;\n }\n else if (typeof type === 'function') {\n const guard = NODE_TYPE_GUARDS.get(type);\n return guard ? guard(node) : false;\n }\n else {\n return false;\n }\n}\nfunction isToken(object) {\n return (object instanceof Token) || (object?.constructor?.name === \"Token\" && \"value\" in object) || object.type?.startsWith('TOKEN_');\n}\nfunction isParseResult(object) {\n return (object instanceof ParseResult) || (object?.constructor?.name === \"ParseResult\" && \"value\" in object);\n}\n/**\n * Checks if a node has children (contains other nodes)\n */\nfunction hasChildren(node) {\n return isDocumentNode(node) ||\n isHTMLOpenTagNode(node) ||\n isHTMLCloseTagNode(node) ||\n isHTMLElementNode(node) ||\n isHTMLAttributeValueNode(node) ||\n isHTMLAttributeNameNode(node) ||\n isHTMLCommentNode(node) ||\n isHTMLDoctypeNode(node) ||\n isERBElseNode(node) ||\n isERBIfNode(node) ||\n isERBBlockNode(node) ||\n isERBWhenNode(node) ||\n isERBCaseNode(node) ||\n isERBCaseMatchNode(node) ||\n isERBWhileNode(node) ||\n isERBUntilNode(node) ||\n isERBForNode(node) ||\n isERBRescueNode(node) ||\n isERBEnsureNode(node) ||\n isERBBeginNode(node) ||\n isERBUnlessNode(node) ||\n isERBInNode(node);\n}\n/**\n * Filter functions for extracting specific node types from arrays\n */\n/**\n * Filters an array of nodes to only include DocumentNode nodes\n */\nfunction filterDocumentNodes(nodes) {\n return nodes.filter(isDocumentNode);\n}\n/**\n * Filters an array of nodes to only include LiteralNode nodes\n */\nfunction filterLiteralNodes(nodes) {\n return nodes.filter(isLiteralNode);\n}\n/**\n * Filters an array of nodes to only include HTMLOpenTagNode nodes\n */\nfunction filterHTMLOpenTagNodes(nodes) {\n return nodes.filter(isHTMLOpenTagNode);\n}\n/**\n * Filters an array of nodes to only include HTMLCloseTagNode nodes\n */\nfunction filterHTMLCloseTagNodes(nodes) {\n return nodes.filter(isHTMLCloseTagNode);\n}\n/**\n * Filters an array of nodes to only include HTMLElementNode nodes\n */\nfunction filterHTMLElementNodes(nodes) {\n return nodes.filter(isHTMLElementNode);\n}\n/**\n * Filters an array of nodes to only include HTMLAttributeValueNode nodes\n */\nfunction filterHTMLAttributeValueNodes(nodes) {\n return nodes.filter(isHTMLAttributeValueNode);\n}\n/**\n * Filters an array of nodes to only include HTMLAttributeNameNode nodes\n */\nfunction filterHTMLAttributeNameNodes(nodes) {\n return nodes.filter(isHTMLAttributeNameNode);\n}\n/**\n * Filters an array of nodes to only include HTMLAttributeNode nodes\n */\nfunction filterHTMLAttributeNodes(nodes) {\n return nodes.filter(isHTMLAttributeNode);\n}\n/**\n * Filters an array of nodes to only include HTMLTextNode nodes\n */\nfunction filterHTMLTextNodes(nodes) {\n return nodes.filter(isHTMLTextNode);\n}\n/**\n * Filters an array of nodes to only include HTMLCommentNode nodes\n */\nfunction filterHTMLCommentNodes(nodes) {\n return nodes.filter(isHTMLCommentNode);\n}\n/**\n * Filters an array of nodes to only include HTMLDoctypeNode nodes\n */\nfunction filterHTMLDoctypeNodes(nodes) {\n return nodes.filter(isHTMLDoctypeNode);\n}\n/**\n * Filters an array of nodes to only include XMLDeclarationNode nodes\n */\nfunction filterXMLDeclarationNodes(nodes) {\n return nodes.filter(isXMLDeclarationNode);\n}\n/**\n * Filters an array of nodes to only include CDATANode nodes\n */\nfunction filterCDATANodes(nodes) {\n return nodes.filter(isCDATANode);\n}\n/**\n * Filters an array of nodes to only include WhitespaceNode nodes\n */\nfunction filterWhitespaceNodes(nodes) {\n return nodes.filter(isWhitespaceNode);\n}\n/**\n * Filters an array of nodes to only include ERBContentNode nodes\n */\nfunction filterERBContentNodes(nodes) {\n return nodes.filter(isERBContentNode);\n}\n/**\n * Filters an array of nodes to only include ERBEndNode nodes\n */\nfunction filterERBEndNodes(nodes) {\n return nodes.filter(isERBEndNode);\n}\n/**\n * Filters an array of nodes to only include ERBElseNode nodes\n */\nfunction filterERBElseNodes(nodes) {\n return nodes.filter(isERBElseNode);\n}\n/**\n * Filters an array of nodes to only include ERBIfNode nodes\n */\nfunction filterERBIfNodes(nodes) {\n return nodes.filter(isERBIfNode);\n}\n/**\n * Filters an array of nodes to only include ERBBlockNode nodes\n */\nfunction filterERBBlockNodes(nodes) {\n return nodes.filter(isERBBlockNode);\n}\n/**\n * Filters an array of nodes to only include ERBWhenNode nodes\n */\nfunction filterERBWhenNodes(nodes) {\n return nodes.filter(isERBWhenNode);\n}\n/**\n * Filters an array of nodes to only include ERBCaseNode nodes\n */\nfunction filterERBCaseNodes(nodes) {\n return nodes.filter(isERBCaseNode);\n}\n/**\n * Filters an array of nodes to only include ERBCaseMatchNode nodes\n */\nfunction filterERBCaseMatchNodes(nodes) {\n return nodes.filter(isERBCaseMatchNode);\n}\n/**\n * Filters an array of nodes to only include ERBWhileNode nodes\n */\nfunction filterERBWhileNodes(nodes) {\n return nodes.filter(isERBWhileNode);\n}\n/**\n * Filters an array of nodes to only include ERBUntilNode nodes\n */\nfunction filterERBUntilNodes(nodes) {\n return nodes.filter(isERBUntilNode);\n}\n/**\n * Filters an array of nodes to only include ERBForNode nodes\n */\nfunction filterERBForNodes(nodes) {\n return nodes.filter(isERBForNode);\n}\n/**\n * Filters an array of nodes to only include ERBRescueNode nodes\n */\nfunction filterERBRescueNodes(nodes) {\n return nodes.filter(isERBRescueNode);\n}\n/**\n * Filters an array of nodes to only include ERBEnsureNode nodes\n */\nfunction filterERBEnsureNodes(nodes) {\n return nodes.filter(isERBEnsureNode);\n}\n/**\n * Filters an array of nodes to only include ERBBeginNode nodes\n */\nfunction filterERBBeginNodes(nodes) {\n return nodes.filter(isERBBeginNode);\n}\n/**\n * Filters an array of nodes to only include ERBUnlessNode nodes\n */\nfunction filterERBUnlessNodes(nodes) {\n return nodes.filter(isERBUnlessNode);\n}\n/**\n * Filters an array of nodes to only include ERBYieldNode nodes\n */\nfunction filterERBYieldNodes(nodes) {\n return nodes.filter(isERBYieldNode);\n}\n/**\n * Filters an array of nodes to only include ERBInNode nodes\n */\nfunction filterERBInNodes(nodes) {\n return nodes.filter(isERBInNode);\n}\n\n/**\n * Checks if a node is an ERB output node (generates content: <%= %> or <%== %>)\n */\nfunction isERBOutputNode(node) {\n if (!isERBNode(node))\n return false;\n if (!node.tag_opening?.value)\n return false;\n return [\"<%=\", \"<%==\"].includes(node.tag_opening?.value);\n}\n/**\n * Checks if a node is a ERB comment node (control flow: <%# %>)\n */\nfunction isERBCommentNode(node) {\n if (!isERBNode(node))\n return false;\n if (!node.tag_opening?.value)\n return false;\n return node.tag_opening?.value === \"<%#\" || (node.tag_opening?.value !== \"<%#\" && (node.content?.value || \"\").trimStart().startsWith(\"#\"));\n}\n/**\n * Checks if a node is a non-output ERB node (control flow: <% %>)\n */\nfunction isERBControlFlowNode(node) {\n return isAnyOf(node, ERBIfNode, ERBUnlessNode, ERBBlockNode, ERBCaseNode, ERBCaseMatchNode, ERBWhileNode, ERBForNode, ERBBeginNode);\n}\n/**\n * Checks if an array of nodes contains any ERB content nodes\n */\nfunction hasERBContent(nodes) {\n return nodes.some(isERBContentNode);\n}\n/**\n * Checks if an array of nodes contains any ERB output nodes (dynamic content)\n */\nfunction hasERBOutput(nodes) {\n return nodes.some(isERBOutputNode);\n}\n/**\n * Extracts a static string from an array of literal nodes\n * Returns null if any node is not a literal node\n */\nfunction getStaticStringFromNodes(nodes) {\n if (!areAllOfType(nodes, LiteralNode)) {\n return null;\n }\n return nodes.map(node => node.content).join(\"\");\n}\n/**\n * Extracts static content from nodes, including mixed literal/ERB content\n * Returns the concatenated literal content, or null if no literal nodes exist\n */\nfunction getStaticContentFromNodes(nodes) {\n const literalNodes = filterLiteralNodes(nodes);\n if (literalNodes.length === 0) {\n return null;\n }\n return literalNodes.map(node => node.content).join(\"\");\n}\n/**\n * Checks if nodes contain any literal content (for static validation)\n */\nfunction hasStaticContent(nodes) {\n return nodes.some(isLiteralNode);\n}\n/**\n * Checks if nodes are effectively static (only literals and non-output ERB)\n * Non-output ERB like <% if %> doesn't affect static validation\n */\nfunction isEffectivelyStatic(nodes) {\n return !hasERBOutput(nodes);\n}\n/**\n * Gets static-validatable content from nodes (ignores control ERB, includes literals)\n * Returns concatenated literal content for validation, or null if contains output ERB\n */\nfunction getValidatableStaticContent(nodes) {\n if (hasERBOutput(nodes)) {\n return null;\n }\n return filterLiteralNodes(nodes).map(node => node.content).join(\"\");\n}\n/**\n * Extracts a combined string from nodes, including ERB content\n * For ERB nodes, includes the full tag syntax (e.g., \"<%= foo %>\")\n * This is useful for debugging or displaying the full attribute name\n */\nfunction getCombinedStringFromNodes(nodes) {\n return nodes.map(node => {\n if (isLiteralNode(node)) {\n return node.content;\n }\n else if (isERBContentNode(node)) {\n const opening = node.tag_opening?.value || \"\";\n const content = node.content?.value || \"\";\n const closing = node.tag_closing?.value || \"\";\n return `${opening}${content}${closing}`;\n }\n else {\n // For other node types, return a placeholder or empty string\n return `[${node.type}]`;\n }\n }).join(\"\");\n}\n/**\n * Checks if an HTML attribute name node has a static (literal-only) name\n */\nfunction hasStaticAttributeName(attributeNameNode) {\n if (!attributeNameNode.children) {\n return false;\n }\n return areAllOfType(attributeNameNode.children, LiteralNode);\n}\n/**\n * Checks if an HTML attribute name node has dynamic content (contains ERB)\n */\nfunction hasDynamicAttributeName(attributeNameNode) {\n if (!attributeNameNode.children) {\n return false;\n }\n return hasERBContent(attributeNameNode.children);\n}\n/**\n * Gets the static string value of an HTML attribute name node\n * Returns null if the attribute name contains dynamic content (ERB)\n */\nfunction getStaticAttributeName(attributeNameNode) {\n if (!attributeNameNode.children) {\n return null;\n }\n return getStaticStringFromNodes(attributeNameNode.children);\n}\n/**\n * Gets the combined string representation of an HTML attribute name node\n * This includes both static and dynamic content, useful for debugging\n */\nfunction getCombinedAttributeName(attributeNameNode) {\n if (!attributeNameNode.children) {\n return \"\";\n }\n return getCombinedStringFromNodes(attributeNameNode.children);\n}\n/**\n * Gets the tag name of an HTML element node\n */\nfunction getTagName(node) {\n return node.tag_name?.value ?? \"\";\n}\n/**\n * Check if a node is a comment (HTML comment or ERB comment)\n */\nfunction isCommentNode(node) {\n return isHTMLCommentNode(node) || isERBCommentNode(node);\n}\n/**\n * Compares two positions to determine if the first comes before the second\n * Returns true if pos1 comes before pos2 in source order\n * @param inclusive - If true, returns true when positions are equal\n */\nfunction isPositionBefore(position1, position2, inclusive = false) {\n if (position1.line < position2.line)\n return true;\n if (position1.line > position2.line)\n return false;\n return inclusive ? position1.column <= position2.column : position1.column < position2.column;\n}\n/**\n * Compares two positions to determine if they are equal\n * Returns true if pos1 and pos2 are at the same location\n */\nfunction isPositionEqual(position1, position2) {\n return position1.line === position2.line && position1.column === position2.column;\n}\n/**\n * Compares two positions to determine if the first comes after the second\n * Returns true if pos1 comes after pos2 in source order\n * @param inclusive - If true, returns true when positions are equal\n */\nfunction isPositionAfter(position1, position2, inclusive = false) {\n if (position1.line > position2.line)\n return true;\n if (position1.line < position2.line)\n return false;\n return inclusive ? position1.column >= position2.column : position1.column > position2.column;\n}\n/**\n * Gets nodes that appear before the specified location in source order\n * Uses line and column positions to determine ordering\n */\nfunction getNodesBeforeLocation(nodes, location) {\n return nodes.filter(node => node.location && isPositionBefore(node.location.end, location.start));\n}\n/**\n * Gets nodes that appear after the specified location in source order\n * Uses line and column positions to determine ordering\n */\nfunction getNodesAfterLocation(nodes, location) {\n return nodes.filter(node => node.location && isPositionAfter(node.location.start, location.end));\n}\n/**\n * Splits nodes into before and after the specified location\n * Returns an object with `before` and `after` arrays\n */\nfunction splitNodesAroundLocation(nodes, location) {\n return {\n before: getNodesBeforeLocation(nodes, location),\n after: getNodesAfterLocation(nodes, location)\n };\n}\n/**\n * Splits nodes at a specific position\n * Returns nodes that end before the position and nodes that start after the position\n * More precise than splitNodesAroundLocation as it uses a single position point\n * Uses the same defaults as the individual functions: before=exclusive, after=inclusive\n */\nfunction splitNodesAroundPosition(nodes, position) {\n return {\n before: getNodesBeforePosition(nodes, position), // uses default: inclusive = false\n after: getNodesAfterPosition(nodes, position) // uses default: inclusive = true\n };\n}\n/**\n * Gets nodes that end before the specified position\n * @param inclusive - If true, includes nodes that end exactly at the position (default: false, matching half-open interval semantics)\n */\nfunction getNodesBeforePosition(nodes, position, inclusive = false) {\n return nodes.filter(node => node.location && isPositionBefore(node.location.end, position, inclusive));\n}\n/**\n * Gets nodes that start after the specified position\n * @param inclusive - If true, includes nodes that start exactly at the position (default: true, matching typical boundary behavior)\n */\nfunction getNodesAfterPosition(nodes, position, inclusive = true) {\n return nodes.filter(node => node.location && isPositionAfter(node.location.start, position, inclusive));\n}\n\nconst expectedFunctions = [\n \"parse\",\n \"lex\",\n \"parseFile\",\n \"lexFile\",\n \"extractRuby\",\n \"extractHTML\",\n \"version\",\n];\n// NOTE: This function should never be called and is only for type checking\n// so we can make sure `expectedFunctions` matches the functions defined\n// in `LibHerbBackendFunctions` and the other way around.\n//\nfunction _TYPECHECK() {\n const checkFunctionsExist = true;\n const checkInterfaceComplete = true;\n return { checkFunctionsExist, checkInterfaceComplete };\n}\nfunction isLibHerbBackend(object, libherbpath = \"unknown\") {\n for (const expectedFunction of expectedFunctions) {\n if (object[expectedFunction] === undefined) {\n throw new Error(`Libherb at \"${libherbpath}\" doesn't expose function \"${expectedFunction}\".`);\n }\n if (typeof object[expectedFunction] !== \"function\") {\n throw new Error(`Libherb at \"${libherbpath}\" has \"${expectedFunction}\" but it's not a function.`);\n }\n }\n return true;\n}\nfunction ensureLibHerbBackend(object, libherbpath = \"unknown\") {\n isLibHerbBackend(object, libherbpath);\n return object;\n}\n\n/**\n * Converts a Diagnostic to Monaco/VSCode-compatible MonacoDiagnostic format\n */\nfunction toMonacoDiagnostic(diagnostic) {\n const { message, location } = diagnostic;\n const severity = diagnostic.severity === \"hint\" ? \"info\" : diagnostic.severity;\n return {\n line: location.start.line,\n column: location.start.column,\n endLine: location.end.line,\n endColumn: location.end.column,\n message,\n severity\n };\n}\n\n/*\n * The following code is derived from the \"js-levenshtein\" repository,\n * Copyright (c) 2017 Gustaf Andersson (https://github.com/gustf/js-levenshtein)\n * Licensed under the MIT License (https://github.com/gustf/js-levenshtein/blob/master/LICENSE).\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * https://github.com/marcoroth/stimulus-lsp/blob/52268d4a4d06504dde6cb81f505a23b5db5d5759/server/src/levenshtein.ts\n *\n */\nfunction levenshtein(a, b) {\n function _min(d0, d1, d2, bx, ay) {\n return d0 < d1 || d2 < d1 ? (d0 > d2 ? d2 + 1 : d0 + 1) : bx === ay ? d1 : d1 + 1;\n }\n if (a === b) {\n return 0;\n }\n if (a.length > b.length) {\n const tmp = a;\n a = b;\n b = tmp;\n }\n let la = a.length;\n let lb = b.length;\n while (la > 0 && a.charCodeAt(la - 1) === b.charCodeAt(lb - 1)) {\n la--;\n lb--;\n }\n let offset = 0;\n while (offset < la && a.charCodeAt(offset) === b.charCodeAt(offset)) {\n offset++;\n }\n la -= offset;\n lb -= offset;\n if (la === 0 || lb < 3) {\n return lb;\n }\n let x = 0;\n let y;\n let d0;\n let d1;\n let d2;\n let d3;\n let dd;\n let dy;\n let ay;\n let bx0;\n let bx1;\n let bx2;\n let bx3;\n const vector = [];\n for (y = 0; y < la; y++) {\n vector.push(y + 1);\n vector.push(a.charCodeAt(offset + y));\n }\n const len = vector.length - 1;\n for (; x < lb - 3;) {\n bx0 = b.charCodeAt(offset + (d0 = x));\n bx1 = b.charCodeAt(offset + (d1 = x + 1));\n bx2 = b.charCodeAt(offset + (d2 = x + 2));\n bx3 = b.charCodeAt(offset + (d3 = x + 3));\n dd = x += 4;\n for (y = 0; y < len; y += 2) {\n dy = vector[y];\n ay = vector[y + 1];\n d0 = _min(dy, d0, d1, bx0, ay);\n d1 = _min(d0, d1, d2, bx1, ay);\n d2 = _min(d1, d2, d3, bx2, ay);\n dd = _min(d2, d3, dd, bx3, ay);\n vector[y] = dd;\n d3 = d2;\n d2 = d1;\n d1 = d0;\n d0 = dy;\n }\n }\n for (; x < lb;) {\n bx0 = b.charCodeAt(offset + (d0 = x));\n dd = ++x;\n for (y = 0; y < len; y += 2) {\n dy = vector[y];\n vector[y] = dd = _min(dy, d0, dd, bx0, vector[y + 1]);\n d0 = dy;\n }\n }\n return dd;\n}\n\n/**\n * Ranks a list of strings by their Levenshtein distance from the input string.\n * Items are sorted in ascending order by distance, with closer matches first.\n *\n * @param input - The string to compare against\n * @param list - The list of strings to rank\n * @returns An array of objects containing the item and its distance score, sorted by score\n */\nfunction rank(input, list) {\n return list.map(item => {\n const score = levenshtein(input.toLowerCase(), item.toLowerCase());\n return { item, score };\n }).sort((a, b) => a.score - b.score);\n}\n/**\n * Finds the closest matching string from a list using Levenshtein distance.\n * Performs case-insensitive comparison.\n *\n * @param input - The string to match against\n * @param list - The list of candidate strings to search\n * @param threshold - Maximum Levenshtein distance to consider a match. If undefined, returns the closest match regardless of distance.\n * @returns The closest matching string from the list, or null if the list is empty or no match is within the threshold\n *\n * @example\n * ```ts\n * didyoumean('speling', ['spelling', 'writing', 'reading']) // Returns 'spelling'\n * didyoumean('test', []) // Returns null\n * didyoumean('speling', ['spelling', 'writing', 'reading'], 2) // Returns 'spelling' (distance: 1)\n * didyoumean('xyz', ['spelling', 'writing', 'reading'], 2) // Returns null (all distances > 2)\n * ```\n */\nfunction didyoumean(input, list, threshold) {\n if (list.length === 0)\n return null;\n const scores = rank(input, list);\n if (scores.length === 0)\n return null;\n const closest = scores[0];\n if (threshold !== undefined && closest.score > threshold)\n return null;\n return closest.item;\n}\n/**\n * Returns all strings from a list ranked by their Levenshtein distance from the input string.\n * Performs case-insensitive comparison. Results are sorted with closest matches first.\n *\n * @param input - The string to match against\n * @param list - The list of candidate strings to rank\n * @param threshold - Maximum Levenshtein distance to include in results. If undefined, returns all ranked results.\n * @returns An array of ranked results with items and scores, or an empty array if the list is empty or no matches are within the threshold\n *\n * @example\n * ```ts\n * didyoumeanRanked('speling', ['spelling', 'writing', 'reading'])\n * // Returns [{ item: 'spelling', score: 1 }, { item: 'reading', score: 5 }, { item: 'writing', score: 6 }]\n *\n * didyoumeanRanked('speling', ['spelling', 'writing', 'reading'], 2)\n * // Returns [{ item: 'spelling', score: 1 }]\n *\n * didyoumeanRanked('test', []) // Returns []\n * ```\n */\nfunction didyoumeanRanked(input, list, threshold) {\n if (list.length === 0)\n return [];\n const scores = rank(input, list);\n if (threshold !== undefined) {\n return scores.filter(result => result.score <= threshold);\n }\n return scores;\n}\n\nvar name = \"@herb-tools/core\";\nvar version = \"0.8.5\";\nvar packageJSON = {\n\tname: name,\n\tversion: version};\n\nclass TokenList {\n list;\n static from(list) {\n return new TokenList(list.map((token) => Token.from(token)));\n }\n constructor(list) {\n this.list = list;\n }\n get length() {\n return this.list.length;\n }\n get tokens() {\n return this.list;\n }\n [Symbol.iterator]() {\n return this.list[Symbol.iterator]();\n }\n at(index) {\n return this.list.at(index);\n }\n forEach(callback) {\n this.list.forEach(callback);\n }\n map(callback) {\n return this.list.map(callback);\n }\n filter(predicate) {\n return this.list.filter(predicate);\n }\n __getobj__() {\n return this.list;\n }\n inspect() {\n return this.list.map((token) => token.inspect()).join(\"\\n\") + \"\\n\";\n }\n toString() {\n return this.inspect();\n }\n}\n\n/**\n * Represents the result of a lexical analysis, extending the base `Result` class.\n * It contains the token list, source code, warnings, and errors.\n */\nclass LexResult extends Result {\n /** The list of tokens generated from the source code. */\n value;\n /**\n * Creates a `LexResult` instance from a serialized result.\n * @param result - The serialized lexical result containing tokens, source, warnings, and errors.\n * @returns A new `LexResult` instance.\n */\n static from(result) {\n return new LexResult(TokenList.from(result.tokens || []), result.source, result.warnings.map((warning) => HerbWarning.from(warning)), result.errors.map((error) => HerbError.from(error)));\n }\n /**\n * Constructs a new `LexResult`.\n * @param value - The list of tokens.\n * @param source - The source code that was lexed.\n * @param warnings - An array of warnings encountered during lexing.\n * @param errors - An array of errors encountered during lexing.\n */\n constructor(value, source, warnings = [], errors = []) {\n super(source, warnings, errors);\n this.value = value;\n }\n /**\n * Determines if the lexing was successful.\n * @returns `true` if there are no errors, otherwise `false`.\n */\n get successful() {\n return this.errors.length === 0;\n }\n /**\n * Determines if the lexing failed.\n * @returns `true` if there are errors, otherwise `false`.\n */\n get failed() {\n return this.errors.length > 0;\n }\n /**\n * Converts the `LexResult` to a JSON representation.\n * @returns An object containing the token list, source, warnings, and errors.\n */\n toJSON() {\n return {\n value: this.value,\n source: this.source,\n warnings: this.warnings,\n errors: this.errors,\n };\n }\n}\n\nconst DEFAULT_PARSER_OPTIONS = {\n track_whitespace: false,\n};\n\n/**\n * The main Herb parser interface, providing methods to lex and parse input.\n */\nclass HerbBackend {\n /** The backend instance handling lexing and parsing. */\n backend = undefined;\n backendPromise;\n /**\n * Creates a new Herb instance.\n * @param backendPromise - A promise resolving to a `LibHerbBackend` implementation for lexing and parsing.\n * @throws Error if no valid backend is provided.\n */\n constructor(backendPromise) {\n if (!backendPromise) {\n throw new Error(\"No LibHerb backend provided\");\n }\n this.backendPromise = backendPromise;\n }\n /**\n * Loads the backend by resolving the backend promise.\n * @returns A promise containing the resolved `HerbBackend` instance after loading it.\n */\n async load() {\n const backend = await this.backendPromise();\n this.backend = backend;\n return this;\n }\n /**\n * Lexes the given source string into a `LexResult`.\n * @param source - The source code to lex.\n * @returns A `LexResult` instance.\n * @throws Error if the backend is not loaded.\n */\n lex(source) {\n this.ensureBackend();\n return LexResult.from(this.backend.lex(ensureString(source)));\n }\n /**\n * Lexes a file.\n * @param path - The file path to lex.\n * @returns A `LexResult` instance.\n * @throws Error if the backend is not loaded.\n */\n lexFile(path) {\n this.ensureBackend();\n return LexResult.from(this.backend.lexFile(ensureString(path)));\n }\n /**\n * Parses the given source string into a `ParseResult`.\n * @param source - The source code to parse.\n * @param options - Optional parsing options.\n * @returns A `ParseResult` instance.\n * @throws Error if the backend is not loaded.\n */\n parse(source, options) {\n this.ensureBackend();\n const mergedOptions = { ...DEFAULT_PARSER_OPTIONS, ...options };\n return ParseResult.from(this.backend.parse(ensureString(source), mergedOptions));\n }\n /**\n * Parses a file.\n * @param path - The file path to parse.\n * @returns A `ParseResult` instance.\n * @throws Error if the backend is not loaded.\n */\n parseFile(path) {\n this.ensureBackend();\n return ParseResult.from(this.backend.parseFile(ensureString(path)));\n }\n /**\n * Extracts embedded Ruby code from the given source.\n * @param source - The source code to extract Ruby from.\n * @returns The extracted Ruby code as a string.\n * @throws Error if the backend is not loaded.\n */\n extractRuby(source) {\n this.ensureBackend();\n return this.backend.extractRuby(ensureString(source));\n }\n /**\n * Extracts HTML from the given source.\n * @param source - The source code to extract HTML from.\n * @returns The extracted HTML as a string.\n * @throws Error if the backend is not loaded.\n */\n extractHTML(source) {\n this.ensureBackend();\n return this.backend.extractHTML(ensureString(source));\n }\n /**\n * Gets the Herb version information, including the core and backend versions.\n * @returns A version string containing backend, core, and libherb versions.\n * @throws Error if the backend is not loaded.\n */\n get version() {\n this.ensureBackend();\n const backend = this.backendVersion();\n const core = `${packageJSON.name}@${packageJSON.version}`;\n const libherb = this.backend.version();\n return `${backend}, ${core}, ${libherb}`;\n }\n /**\n * Ensures that the backend is loaded.\n * @throws Error if the backend is not loaded.\n */\n ensureBackend() {\n if (!this.isLoaded) {\n throw new Error(\"Herb backend is not loaded. Call `await Herb.load()` first.\");\n }\n }\n /**\n * Checks if the backend is loaded.\n * @returns True if the backend is loaded, false otherwise.\n */\n get isLoaded() {\n return this.backend !== undefined;\n }\n}\n\n// NOTE: This file is generated by the templates/template.rb script and should not\n// be modified manually. See /Users/marcoroth/Development/herb-release-0.8.5/templates/javascript/packages/core/src/visitor.ts.erb\nclass Visitor {\n visit(node) {\n if (!node)\n return;\n node.accept(this);\n }\n visitAll(nodes) {\n nodes.forEach(node => node?.accept(this));\n }\n visitChildNodes(node) {\n node.compactChildNodes().forEach(node => node.accept(this));\n }\n visitNode(_node) {\n // Default implementation does nothing\n }\n visitERBNode(_node) {\n // Default implementation does nothing\n }\n visitDocumentNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitLiteralNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitHTMLOpenTagNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitHTMLCloseTagNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitHTMLElementNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitHTMLAttributeValueNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitHTMLAttributeNameNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitHTMLAttributeNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitHTMLTextNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitHTMLCommentNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitHTMLDoctypeNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitXMLDeclarationNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitCDATANode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitWhitespaceNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitERBContentNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBEndNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBElseNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBIfNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBBlockNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBWhenNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBCaseNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBCaseMatchNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBWhileNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBUntilNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBForNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBRescueNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBEnsureNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBBeginNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBUnlessNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBYieldNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBInNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n}\n\nexport { AST_TYPE_GUARDS, CDATANode, DEFAULT_PARSER_OPTIONS, DocumentNode, ERBBeginNode, ERBBlockNode, ERBCaseMatchNode, ERBCaseNode, ERBContentNode, ERBControlFlowScopeError, ERBElseNode, ERBEndNode, ERBEnsureNode, ERBForNode, ERBIfNode, ERBInNode, ERBMultipleBlocksInTagError, ERBNodeClasses, ERBRescueNode, ERBUnlessNode, ERBUntilNode, ERBWhenNode, ERBWhileNode, ERBYieldNode, HTMLAttributeNameNode, HTMLAttributeNode, HTMLAttributeValueNode, HTMLCloseTagNode, HTMLCommentNode, HTMLDoctypeNode, HTMLElementNode, HTMLOpenTagNode, HTMLTextNode, HerbBackend, HerbError, HerbWarning, LexResult, LiteralNode, Location, MissingClosingTagError, MissingERBEndTagError, MissingOpeningTagError, NODE_TYPE_GUARDS, Node, ParseResult, Position, QuotesMismatchError, Range, Result, RubyParseError, TagNamesMismatchError, Token, TokenList, UnclosedElementError, UnexpectedError, UnexpectedTokenError, Visitor, VoidElementClosingTagError, WhitespaceNode, XMLDeclarationNode, _TYPECHECK, areAllOfType, convertToUTF8, didyoumean, didyoumeanRanked, ensureLibHerbBackend, ensureString, filterCDATANodes, filterDocumentNodes, filterERBBeginNodes, filterERBBlockNodes, filterERBCaseMatchNodes, filterERBCaseNodes, filterERBContentNodes, filterERBElseNodes, filterERBEndNodes, filterERBEnsureNodes, filterERBForNodes, filterERBIfNodes, filterERBInNodes, filterERBRescueNodes, filterERBUnlessNodes, filterERBUntilNodes, filterERBWhenNodes, filterERBWhileNodes, filterERBYieldNodes, filterHTMLAttributeNameNodes, filterHTMLAttributeNodes, filterHTMLAttributeValueNodes, filterHTMLCloseTagNodes, filterHTMLCommentNodes, filterHTMLDoctypeNodes, filterHTMLElementNodes, filterHTMLOpenTagNodes, filterHTMLTextNodes, filterLiteralNodes, filterNodes, filterWhitespaceNodes, filterXMLDeclarationNodes, fromSerializedError, fromSerializedNode, getCombinedAttributeName, getCombinedStringFromNodes, getNodesAfterLocation, getNodesAfterPosition, getNodesBeforeLocation, getNodesBeforePosition, getStaticAttributeName, getStaticContentFromNodes, getStaticStringFromNodes, getTagName, getValidatableStaticContent, hasChildren, hasDynamicAttributeName, hasERBContent, hasERBOutput, hasStaticAttributeName, hasStaticContent, isAnyOf, isCDATANode, isCommentNode, isDocumentNode, isERBBeginNode, isERBBlockNode, isERBCaseMatchNode, isERBCaseNode, isERBCommentNode, isERBContentNode, isERBControlFlowNode, isERBElseNode, isERBEndNode, isERBEnsureNode, isERBForNode, isERBIfNode, isERBInNode, isERBNode, isERBOutputNode, isERBRescueNode, isERBUnlessNode, isERBUntilNode, isERBWhenNode, isERBWhileNode, isERBYieldNode, isEffectivelyStatic, isHTMLAttributeNameNode, isHTMLAttributeNode, isHTMLAttributeValueNode, isHTMLCloseTagNode, isHTMLCommentNode, isHTMLDoctypeNode, isHTMLElementNode, isHTMLNode, isHTMLOpenTagNode, isHTMLTextNode, isLibHerbBackend, isLiteralNode, isNode, isNoneOf, isParseResult, isPositionAfter, isPositionEqual, isToken, isWhitespaceNode, isXMLDeclarationNode, levenshtein, splitNodesAroundLocation, splitNodesAroundPosition, toMonacoDiagnostic };\n//# sourceMappingURL=herb-core.esm.js.map\n","import { Visitor, isToken, isParseResult, getNodesBeforePosition, getNodesAfterPosition, filterNodes, ERBContentNode, isERBOutputNode } from '@herb-tools/core';\n\nclass PrintContext {\n output = \"\";\n indentLevel = 0;\n currentColumn = 0;\n preserveStack = [];\n /**\n * Write text to the output\n */\n write(text) {\n this.output += text;\n this.currentColumn += text.length;\n }\n /**\n * Write text and update column tracking for newlines\n */\n writeWithColumnTracking(text) {\n this.output += text;\n const lines = text.split('\\n');\n if (lines.length > 1) {\n this.currentColumn = lines[lines.length - 1].length;\n }\n else {\n this.currentColumn += text.length;\n }\n }\n /**\n * Increase indentation level\n */\n indent() {\n this.indentLevel++;\n }\n /**\n * Decrease indentation level\n */\n dedent() {\n if (this.indentLevel > 0) {\n this.indentLevel--;\n }\n }\n /**\n * Enter a tag that may preserve whitespace\n */\n enterTag(tagName) {\n this.preserveStack.push(tagName.toLowerCase());\n }\n /**\n * Exit the current tag\n */\n exitTag() {\n this.preserveStack.pop();\n }\n /**\n * Check if we're at the start of a line\n */\n isAtStartOfLine() {\n return this.currentColumn === 0;\n }\n /**\n * Get current indentation level\n */\n getCurrentIndentLevel() {\n return this.indentLevel;\n }\n /**\n * Get current column position\n */\n getCurrentColumn() {\n return this.currentColumn;\n }\n /**\n * Get the current tag stack (for debugging)\n */\n getTagStack() {\n return [...this.preserveStack];\n }\n /**\n * Get the complete output string\n */\n getOutput() {\n return this.output;\n }\n /**\n * Reset the context for reuse\n */\n reset() {\n this.output = \"\";\n this.indentLevel = 0;\n this.currentColumn = 0;\n this.preserveStack = [];\n }\n}\n\n/**\n * Default print options used when none are provided\n */\nconst DEFAULT_PRINT_OPTIONS = {\n ignoreErrors: false\n};\nclass Printer extends Visitor {\n context = new PrintContext();\n /**\n * Static method to print a node without creating an instance\n *\n * @param input - The AST Node, Token, or ParseResult to print\n * @param options - Print options to control behavior\n * @returns The printed string representation of the input\n * @throws {Error} When node has parse errors and ignoreErrors is false\n */\n static print(input, options = DEFAULT_PRINT_OPTIONS) {\n const printer = new this();\n return printer.print(input, options);\n }\n /**\n * Print a node, token, or parse result to a string\n *\n * @param input - The AST Node, Token, or ParseResult to print\n * @param options - Print options to control behavior\n * @returns The printed string representation of the input\n * @throws {Error} When node has parse errors and ignoreErrors is false\n */\n print(input, options = DEFAULT_PRINT_OPTIONS) {\n if (!input)\n return \"\";\n if (isToken(input)) {\n return input.value;\n }\n if (Array.isArray(input)) {\n this.context.reset();\n input.forEach(node => this.visit(node));\n return this.context.getOutput();\n }\n const node = isParseResult(input) ? input.value : input;\n if (options.ignoreErrors === false && node.recursiveErrors().length > 0) {\n throw new Error(`Cannot print the node (${node.type}) since it or any of its children has parse errors. Either pass in a valid Node or call \\`print()\\` using \\`print(node, { ignoreErrors: true })\\``);\n }\n this.context.reset();\n this.visit(node);\n return this.context.getOutput();\n }\n write(content) {\n this.context.write(content);\n }\n}\n\n/**\n * IdentityPrinter - Provides lossless reconstruction of the original source\n *\n * This printer aims to reconstruct the original input as faithfully as possible,\n * preserving all whitespace, formatting, and structure. It's useful for:\n * - Testing parser accuracy (input should equal output)\n * - Baseline printing before applying transformations\n * - Verifying AST round-trip fidelity\n */\nclass IdentityPrinter extends Printer {\n static printERBNode(node) {\n const printer = new IdentityPrinter();\n printer.printERBNode(node);\n return printer.context.getOutput();\n }\n visitLiteralNode(node) {\n this.write(node.content);\n }\n visitHTMLTextNode(node) {\n this.write(node.content);\n }\n visitWhitespaceNode(node) {\n if (node.value) {\n this.write(node.value.value);\n }\n }\n visitHTMLOpenTagNode(node) {\n if (node.tag_opening) {\n this.write(node.tag_opening.value);\n }\n if (node.tag_name) {\n this.write(node.tag_name.value);\n }\n this.visitChildNodes(node);\n if (node.tag_closing) {\n this.write(node.tag_closing.value);\n }\n }\n visitHTMLCloseTagNode(node) {\n if (node.tag_opening) {\n this.write(node.tag_opening.value);\n }\n if (node.tag_name) {\n const before = getNodesBeforePosition(node.children, node.tag_name.location.start, true);\n const after = getNodesAfterPosition(node.children, node.tag_name.location.end);\n this.visitAll(before);\n this.write(node.tag_name.value);\n this.visitAll(after);\n }\n else {\n this.visitAll(node.children);\n }\n if (node.tag_closing) {\n this.write(node.tag_closing.value);\n }\n }\n visitHTMLElementNode(node) {\n const tagName = node.tag_name?.value;\n if (tagName) {\n this.context.enterTag(tagName);\n }\n if (node.open_tag) {\n this.visit(node.open_tag);\n }\n if (node.body) {\n node.body.forEach(child => this.visit(child));\n }\n if (node.close_tag) {\n this.visit(node.close_tag);\n }\n if (tagName) {\n this.context.exitTag();\n }\n }\n visitHTMLAttributeNode(node) {\n if (node.name) {\n this.visit(node.name);\n }\n if (node.equals) {\n this.write(node.equals.value);\n }\n if (node.equals && node.value) {\n this.visit(node.value);\n }\n }\n visitHTMLAttributeNameNode(node) {\n this.visitChildNodes(node);\n }\n visitHTMLAttributeValueNode(node) {\n if (node.quoted && node.open_quote) {\n this.write(node.open_quote.value);\n }\n this.visitChildNodes(node);\n if (node.quoted && node.close_quote) {\n this.write(node.close_quote.value);\n }\n }\n visitHTMLCommentNode(node) {\n if (node.comment_start) {\n this.write(node.comment_start.value);\n }\n this.visitChildNodes(node);\n if (node.comment_end) {\n this.write(node.comment_end.value);\n }\n }\n visitHTMLDoctypeNode(node) {\n if (node.tag_opening) {\n this.write(node.tag_opening.value);\n }\n this.visitChildNodes(node);\n if (node.tag_closing) {\n this.write(node.tag_closing.value);\n }\n }\n visitXMLDeclarationNode(node) {\n if (node.tag_opening) {\n this.write(node.tag_opening.value);\n }\n this.visitChildNodes(node);\n if (node.tag_closing) {\n this.write(node.tag_closing.value);\n }\n }\n visitCDATANode(node) {\n if (node.tag_opening) {\n this.write(node.tag_opening.value);\n }\n this.visitChildNodes(node);\n if (node.tag_closing) {\n this.write(node.tag_closing.value);\n }\n }\n visitERBContentNode(node) {\n this.printERBNode(node);\n }\n visitERBIfNode(node) {\n this.printERBNode(node);\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n if (node.subsequent) {\n this.visit(node.subsequent);\n }\n if (node.end_node) {\n this.visit(node.end_node);\n }\n }\n visitERBElseNode(node) {\n this.printERBNode(node);\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n }\n visitERBEndNode(node) {\n this.printERBNode(node);\n }\n visitERBBlockNode(node) {\n this.printERBNode(node);\n if (node.body) {\n node.body.forEach(child => this.visit(child));\n }\n if (node.end_node) {\n this.visit(node.end_node);\n }\n }\n visitERBCaseNode(node) {\n this.printERBNode(node);\n if (node.children) {\n node.children.forEach(child => this.visit(child));\n }\n if (node.conditions) {\n node.conditions.forEach(condition => this.visit(condition));\n }\n if (node.else_clause) {\n this.visit(node.else_clause);\n }\n if (node.end_node) {\n this.visit(node.end_node);\n }\n }\n visitERBWhenNode(node) {\n this.printERBNode(node);\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n }\n visitERBWhileNode(node) {\n this.printERBNode(node);\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n if (node.end_node) {\n this.visit(node.end_node);\n }\n }\n visitERBUntilNode(node) {\n this.printERBNode(node);\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n if (node.end_node) {\n this.visit(node.end_node);\n }\n }\n visitERBForNode(node) {\n this.printERBNode(node);\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n if (node.end_node) {\n this.visit(node.end_node);\n }\n }\n visitERBBeginNode(node) {\n this.printERBNode(node);\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n if (node.rescue_clause) {\n this.visit(node.rescue_clause);\n }\n if (node.else_clause) {\n this.visit(node.else_clause);\n }\n if (node.ensure_clause) {\n this.visit(node.ensure_clause);\n }\n if (node.end_node) {\n this.visit(node.end_node);\n }\n }\n visitERBRescueNode(node) {\n this.printERBNode(node);\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n if (node.subsequent) {\n this.visit(node.subsequent);\n }\n }\n visitERBEnsureNode(node) {\n this.printERBNode(node);\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n }\n visitERBUnlessNode(node) {\n this.printERBNode(node);\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n if (node.else_clause) {\n this.visit(node.else_clause);\n }\n if (node.end_node) {\n this.visit(node.end_node);\n }\n }\n visitERBYieldNode(node) {\n this.printERBNode(node);\n }\n visitERBInNode(node) {\n this.printERBNode(node);\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n }\n visitERBCaseMatchNode(node) {\n this.printERBNode(node);\n if (node.children) {\n node.children.forEach(child => this.visit(child));\n }\n if (node.conditions) {\n node.conditions.forEach(condition => this.visit(condition));\n }\n if (node.else_clause) {\n this.visit(node.else_clause);\n }\n if (node.end_node) {\n this.visit(node.end_node);\n }\n }\n /**\n * Print ERB node tags and content\n */\n printERBNode(node) {\n if (node.tag_opening) {\n this.write(node.tag_opening.value);\n }\n if (node.content) {\n this.write(node.content.value);\n }\n if (node.tag_closing) {\n this.write(node.tag_closing.value);\n }\n }\n}\n\nconst DEFAULT_ERB_TO_RUBY_STRING_OPTIONS = {\n ...DEFAULT_PRINT_OPTIONS,\n forceQuotes: false\n};\n/**\n * ERBToRubyStringPrinter - Converts ERB snippets to Ruby strings with interpolation\n *\n * This printer transforms ERB templates into Ruby strings by:\n * - Converting literal text to string content\n * - Converting <%= %> tags to #{} interpolation\n * - Converting simple if/else blocks to ternary operators\n * - Ignoring <% %> tags (they don't produce output)\n *\n * Examples:\n * - `hello world <%= hello %>` => `\"hello world #{hello}\"`\n * - `hello world <% hello %>` => `\"hello world \"`\n * - `Welcome <%= user.name %>!` => `\"Welcome #{user.name}!\"`\n * - `<% if logged_in? %>Welcome<% else %>Login<% end %>` => `\"logged_in? ? \"Welcome\" : \"Login\"`\n * - `<% if logged_in? %>Welcome<% else %>Login<% end %>!` => `\"#{logged_in? ? \"Welcome\" : \"Login\"}!\"`\n */\nclass ERBToRubyStringPrinter extends IdentityPrinter {\n // TODO: cleanup `.type === \"AST_*\" checks`\n static print(node, options = DEFAULT_ERB_TO_RUBY_STRING_OPTIONS) {\n const erbNodes = filterNodes([node], ERBContentNode);\n if (erbNodes.length === 1 && isERBOutputNode(erbNodes[0]) && !options.forceQuotes) {\n return (erbNodes[0].content?.value || \"\").trim();\n }\n if ('children' in node && Array.isArray(node.children)) {\n const childErbNodes = filterNodes(node.children, ERBContentNode);\n const hasOnlyERBContent = node.children.length > 0 && node.children.length === childErbNodes.length;\n if (hasOnlyERBContent && childErbNodes.length === 1 && isERBOutputNode(childErbNodes[0]) && !options.forceQuotes) {\n return (childErbNodes[0].content?.value || \"\").trim();\n }\n if (node.children.length === 1 && node.children[0].type === \"AST_ERB_IF_NODE\" && !options.forceQuotes) {\n const ifNode = node.children[0];\n const printer = new ERBToRubyStringPrinter();\n if (printer.canConvertToTernary(ifNode)) {\n printer.convertToTernaryWithoutWrapper(ifNode);\n return printer.context.getOutput();\n }\n }\n if (node.children.length === 1 && node.children[0].type === \"AST_ERB_UNLESS_NODE\" && !options.forceQuotes) {\n const unlessNode = node.children[0];\n const printer = new ERBToRubyStringPrinter();\n if (printer.canConvertUnlessToTernary(unlessNode)) {\n printer.convertUnlessToTernaryWithoutWrapper(unlessNode);\n return printer.context.getOutput();\n }\n }\n }\n const printer = new ERBToRubyStringPrinter();\n printer.context.write('\"');\n printer.visit(node);\n printer.context.write('\"');\n return printer.context.getOutput();\n }\n visitHTMLTextNode(node) {\n if (node.content) {\n const escapedContent = node.content.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n this.context.write(escapedContent);\n }\n }\n visitERBContentNode(node) {\n if (isERBOutputNode(node)) {\n this.context.write(\"#{\");\n if (node.content?.value) {\n this.context.write(node.content.value.trim());\n }\n this.context.write(\"}\");\n }\n }\n visitERBIfNode(node) {\n if (this.canConvertToTernary(node)) {\n this.convertToTernary(node);\n }\n }\n visitERBUnlessNode(node) {\n if (this.canConvertUnlessToTernary(node)) {\n this.convertUnlessToTernary(node);\n }\n }\n visitHTMLAttributeValueNode(node) {\n this.visitChildNodes(node);\n }\n canConvertToTernary(node) {\n if (node.subsequent && node.subsequent.type !== \"AST_ERB_ELSE_NODE\") {\n return false;\n }\n const ifOnlyText = node.statements ? node.statements.every(statement => statement.type === \"AST_HTML_TEXT_NODE\") : true;\n if (!ifOnlyText)\n return false;\n if (node.subsequent && node.subsequent.type === \"AST_ERB_ELSE_NODE\") {\n return node.subsequent.statements\n ? node.subsequent.statements.every(statement => statement.type === \"AST_HTML_TEXT_NODE\")\n : true;\n }\n return true;\n }\n convertToTernary(node) {\n this.context.write(\"#{\");\n if (node.content?.value) {\n const condition = node.content.value.trim();\n const cleanCondition = condition.replace(/^if\\s+/, '');\n const needsParentheses = cleanCondition.includes(' ');\n if (needsParentheses) {\n this.context.write(\"(\");\n }\n this.context.write(cleanCondition);\n if (needsParentheses) {\n this.context.write(\")\");\n }\n }\n this.context.write(\" ? \");\n this.context.write('\"');\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n this.context.write('\"');\n this.context.write(\" : \");\n this.context.write('\"');\n if (node.subsequent && node.subsequent.type === \"AST_ERB_ELSE_NODE\" && node.subsequent.statements) {\n node.subsequent.statements.forEach(statement => this.visit(statement));\n }\n this.context.write('\"');\n this.context.write(\"}\");\n }\n convertToTernaryWithoutWrapper(node) {\n if (node.subsequent && node.subsequent.type !== \"AST_ERB_ELSE_NODE\") {\n return false;\n }\n if (node.content?.value) {\n const condition = node.content.value.trim();\n const cleanCondition = condition.replace(/^if\\s+/, '');\n const needsParentheses = cleanCondition.includes(' ');\n if (needsParentheses) {\n this.context.write(\"(\");\n }\n this.context.write(cleanCondition);\n if (needsParentheses) {\n this.context.write(\")\");\n }\n }\n this.context.write(\" ? \");\n this.context.write('\"');\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n this.context.write('\"');\n this.context.write(\" : \");\n this.context.write('\"');\n if (node.subsequent && node.subsequent.type === \"AST_ERB_ELSE_NODE\" && node.subsequent.statements) {\n node.subsequent.statements.forEach(statement => this.visit(statement));\n }\n this.context.write('\"');\n }\n canConvertUnlessToTernary(node) {\n const unlessOnlyText = node.statements ? node.statements.every(statement => statement.type === \"AST_HTML_TEXT_NODE\") : true;\n if (!unlessOnlyText)\n return false;\n if (node.else_clause && node.else_clause.type === \"AST_ERB_ELSE_NODE\") {\n return node.else_clause.statements\n ? node.else_clause.statements.every(statement => statement.type === \"AST_HTML_TEXT_NODE\")\n : true;\n }\n return true;\n }\n convertUnlessToTernary(node) {\n this.context.write(\"#{\");\n if (node.content?.value) {\n const condition = node.content.value.trim();\n const cleanCondition = condition.replace(/^unless\\s+/, '');\n const needsParentheses = cleanCondition.includes(' ');\n this.context.write(\"!(\");\n if (needsParentheses) {\n this.context.write(\"(\");\n }\n this.context.write(cleanCondition);\n if (needsParentheses) {\n this.context.write(\")\");\n }\n this.context.write(\")\");\n }\n this.context.write(\" ? \");\n this.context.write('\"');\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n this.context.write('\"');\n this.context.write(\" : \");\n this.context.write('\"');\n if (node.else_clause && node.else_clause.type === \"AST_ERB_ELSE_NODE\") {\n node.else_clause.statements.forEach(statement => this.visit(statement));\n }\n this.context.write('\"');\n this.context.write(\"}\");\n }\n convertUnlessToTernaryWithoutWrapper(node) {\n if (node.content?.value) {\n const condition = node.content.value.trim();\n const cleanCondition = condition.replace(/^unless\\s+/, '');\n const needsParentheses = cleanCondition.includes(' ');\n this.context.write(\"!(\");\n if (needsParentheses) {\n this.context.write(\"(\");\n }\n this.context.write(cleanCondition);\n if (needsParentheses) {\n this.context.write(\")\");\n }\n this.context.write(\")\");\n }\n this.context.write(\" ? \");\n this.context.write('\"');\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n this.context.write('\"');\n this.context.write(\" : \");\n this.context.write('\"');\n if (node.else_clause && node.else_clause.type === \"AST_ERB_ELSE_NODE\") {\n node.else_clause.statements.forEach(statement => this.visit(statement));\n }\n this.context.write('\"');\n }\n}\n\nexport { DEFAULT_PRINT_OPTIONS, ERBToRubyStringPrinter, IdentityPrinter, PrintContext, Printer };\n//# sourceMappingURL=index.js.map\n",null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/ast-rewriter.ts","../src/string-rewriter.ts","../src/mutable.ts","../src/type-guards.ts","../../core/dist/herb-core.esm.js","../../printer/dist/index.js","../src/rewrite.ts"],"sourcesContent":[null,null,null,null,"class Position {\n line;\n column;\n static from(positionOrLine, column) {\n if (typeof positionOrLine === \"number\") {\n return new Position(positionOrLine, column);\n }\n else {\n return new Position(positionOrLine.line, positionOrLine.column);\n }\n }\n static get zero() {\n return new Position(0, 0);\n }\n constructor(line, column) {\n this.line = line;\n this.column = column;\n }\n toHash() {\n return { line: this.line, column: this.column };\n }\n toJSON() {\n return this.toHash();\n }\n treeInspect() {\n return `(${this.line}:${this.column})`;\n }\n inspect() {\n return `#<Herb::Position ${this.treeInspect()}>`;\n }\n toString() {\n return this.inspect();\n }\n}\n\nclass Location {\n start;\n end;\n static from(locationOrLine, column, endLine, endColumn) {\n if (typeof locationOrLine === \"number\") {\n const start = Position.from(locationOrLine, column);\n const end = Position.from(endLine, endColumn);\n return new Location(start, end);\n }\n else {\n const start = Position.from(locationOrLine.start);\n const end = Position.from(locationOrLine.end);\n return new Location(start, end);\n }\n }\n static get zero() {\n return new Location(Position.zero, Position.zero);\n }\n constructor(start, end) {\n this.start = start;\n this.end = end;\n }\n toHash() {\n return {\n start: this.start.toHash(),\n end: this.end.toHash(),\n };\n }\n toJSON() {\n return this.toHash();\n }\n treeInspect() {\n return `${this.start.treeInspect()}-${this.end.treeInspect()}`;\n }\n treeInspectWithLabel() {\n return `(location: ${this.treeInspect()})`;\n }\n inspect() {\n return `#<Herb::Location ${this.treeInspect()}>`;\n }\n toString() {\n return this.inspect();\n }\n}\n\nclass Range {\n start;\n end;\n static from(rangeOrStart, end) {\n if (typeof rangeOrStart === \"number\") {\n return new Range(rangeOrStart, end);\n }\n else {\n return new Range(rangeOrStart[0], rangeOrStart[1]);\n }\n }\n static get zero() {\n return new Range(0, 0);\n }\n constructor(start, end) {\n this.start = start;\n this.end = end;\n }\n toArray() {\n return [this.start, this.end];\n }\n toJSON() {\n return this.toArray();\n }\n treeInspect() {\n return `[${this.start}, ${this.end}]`;\n }\n inspect() {\n return `#<Herb::Range ${this.toArray()}>`;\n }\n toString() {\n return this.inspect();\n }\n}\n\nclass Token {\n value;\n range;\n location;\n type;\n static from(token) {\n return new Token(token.value, Range.from(token.range), Location.from(token.location), token.type);\n }\n constructor(value, range, location, type) {\n this.value = value;\n this.range = range;\n this.location = location;\n this.type = type;\n }\n toHash() {\n return {\n value: this.value,\n range: this.range?.toArray(),\n location: this.location?.toHash(),\n type: this.type,\n };\n }\n toJSON() {\n return this.toHash();\n }\n treeInspect() {\n return `\"${this.value}\" ${this.location.treeInspectWithLabel()}`;\n }\n valueInspect() {\n return this.type === \"TOKEN_EOF\"\n ? JSON.stringify(\"<EOF>\")\n : JSON.stringify(this.value);\n }\n inspect() {\n return `#<Herb::Token type=\"${this.type}\" value=${this.valueInspect()} range=${this.range.treeInspect()} start=${this.location.start.treeInspect()} end=${this.location.end.treeInspect()}>`;\n }\n toString() {\n return this.inspect();\n }\n}\n\n// NOTE: This file is generated by the templates/template.rb script and should not\n// be modified manually. See /Users/marcoroth/Development/herb-release-0.8.6/templates/javascript/packages/core/src/errors.ts.erb\nclass HerbError {\n type;\n message;\n location;\n severity = \"error\";\n source = \"parser\";\n get code() {\n return this.type;\n }\n static from(error) {\n return fromSerializedError(error);\n }\n constructor(type, message, location) {\n this.type = type;\n this.message = message;\n this.location = location;\n }\n toJSON() {\n return {\n type: this.type,\n message: this.message,\n location: this.location.toJSON(),\n };\n }\n inspect() {\n return this.treeInspect(0);\n }\n}\nclass UnexpectedError extends HerbError {\n description;\n expected;\n found;\n static from(data) {\n return new UnexpectedError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n description: data.description,\n expected: data.expected,\n found: data.found,\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n this.description = props.description;\n this.expected = props.expected;\n this.found = props.found;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"UNEXPECTED_ERROR\",\n description: this.description,\n expected: this.expected,\n found: this.found,\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ UnexpectedError ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── message: \"${this.message}\"\\n`;\n output += `├── description: ${JSON.stringify(this.description)}\\n`;\n output += `├── expected: ${JSON.stringify(this.expected)}\\n`;\n output += `└── found: ${JSON.stringify(this.found)}\\n`;\n return output;\n }\n}\nclass UnexpectedTokenError extends HerbError {\n expected_type;\n found;\n static from(data) {\n return new UnexpectedTokenError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n expected_type: data.expected_type,\n found: data.found ? Token.from(data.found) : null,\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n this.expected_type = props.expected_type;\n this.found = props.found;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"UNEXPECTED_TOKEN_ERROR\",\n expected_type: this.expected_type,\n found: this.found ? this.found.toJSON() : null,\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ UnexpectedTokenError ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── message: \"${this.message}\"\\n`;\n output += `├── expected_type: ${JSON.stringify(this.expected_type)}\\n`;\n output += `└── found: ${this.found ? this.found.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass MissingOpeningTagError extends HerbError {\n closing_tag;\n static from(data) {\n return new MissingOpeningTagError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n closing_tag: data.closing_tag ? Token.from(data.closing_tag) : null,\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n this.closing_tag = props.closing_tag;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"MISSING_OPENING_TAG_ERROR\",\n closing_tag: this.closing_tag ? this.closing_tag.toJSON() : null,\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ MissingOpeningTagError ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── message: \"${this.message}\"\\n`;\n output += `└── closing_tag: ${this.closing_tag ? this.closing_tag.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass MissingClosingTagError extends HerbError {\n opening_tag;\n static from(data) {\n return new MissingClosingTagError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n opening_tag: data.opening_tag ? Token.from(data.opening_tag) : null,\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n this.opening_tag = props.opening_tag;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"MISSING_CLOSING_TAG_ERROR\",\n opening_tag: this.opening_tag ? this.opening_tag.toJSON() : null,\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ MissingClosingTagError ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── message: \"${this.message}\"\\n`;\n output += `└── opening_tag: ${this.opening_tag ? this.opening_tag.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass TagNamesMismatchError extends HerbError {\n opening_tag;\n closing_tag;\n static from(data) {\n return new TagNamesMismatchError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n opening_tag: data.opening_tag ? Token.from(data.opening_tag) : null,\n closing_tag: data.closing_tag ? Token.from(data.closing_tag) : null,\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n this.opening_tag = props.opening_tag;\n this.closing_tag = props.closing_tag;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"TAG_NAMES_MISMATCH_ERROR\",\n opening_tag: this.opening_tag ? this.opening_tag.toJSON() : null,\n closing_tag: this.closing_tag ? this.closing_tag.toJSON() : null,\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ TagNamesMismatchError ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── message: \"${this.message}\"\\n`;\n output += `├── opening_tag: ${this.opening_tag ? this.opening_tag.treeInspect() : \"∅\"}\\n`;\n output += `└── closing_tag: ${this.closing_tag ? this.closing_tag.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass QuotesMismatchError extends HerbError {\n opening_quote;\n closing_quote;\n static from(data) {\n return new QuotesMismatchError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n opening_quote: data.opening_quote ? Token.from(data.opening_quote) : null,\n closing_quote: data.closing_quote ? Token.from(data.closing_quote) : null,\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n this.opening_quote = props.opening_quote;\n this.closing_quote = props.closing_quote;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"QUOTES_MISMATCH_ERROR\",\n opening_quote: this.opening_quote ? this.opening_quote.toJSON() : null,\n closing_quote: this.closing_quote ? this.closing_quote.toJSON() : null,\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ QuotesMismatchError ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── message: \"${this.message}\"\\n`;\n output += `├── opening_quote: ${this.opening_quote ? this.opening_quote.treeInspect() : \"∅\"}\\n`;\n output += `└── closing_quote: ${this.closing_quote ? this.closing_quote.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass VoidElementClosingTagError extends HerbError {\n tag_name;\n expected;\n found;\n static from(data) {\n return new VoidElementClosingTagError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n tag_name: data.tag_name ? Token.from(data.tag_name) : null,\n expected: data.expected,\n found: data.found,\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n this.tag_name = props.tag_name;\n this.expected = props.expected;\n this.found = props.found;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"VOID_ELEMENT_CLOSING_TAG_ERROR\",\n tag_name: this.tag_name ? this.tag_name.toJSON() : null,\n expected: this.expected,\n found: this.found,\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ VoidElementClosingTagError ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── message: \"${this.message}\"\\n`;\n output += `├── tag_name: ${this.tag_name ? this.tag_name.treeInspect() : \"∅\"}\\n`;\n output += `├── expected: ${JSON.stringify(this.expected)}\\n`;\n output += `└── found: ${JSON.stringify(this.found)}\\n`;\n return output;\n }\n}\nclass UnclosedElementError extends HerbError {\n opening_tag;\n static from(data) {\n return new UnclosedElementError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n opening_tag: data.opening_tag ? Token.from(data.opening_tag) : null,\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n this.opening_tag = props.opening_tag;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"UNCLOSED_ELEMENT_ERROR\",\n opening_tag: this.opening_tag ? this.opening_tag.toJSON() : null,\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ UnclosedElementError ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── message: \"${this.message}\"\\n`;\n output += `└── opening_tag: ${this.opening_tag ? this.opening_tag.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass RubyParseError extends HerbError {\n error_message;\n diagnostic_id;\n level;\n static from(data) {\n return new RubyParseError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n error_message: data.error_message,\n diagnostic_id: data.diagnostic_id,\n level: data.level,\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n this.error_message = props.error_message;\n this.diagnostic_id = props.diagnostic_id;\n this.level = props.level;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"RUBY_PARSE_ERROR\",\n error_message: this.error_message,\n diagnostic_id: this.diagnostic_id,\n level: this.level,\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ RubyParseError ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── message: \"${this.message}\"\\n`;\n output += `├── error_message: ${JSON.stringify(this.error_message)}\\n`;\n output += `├── diagnostic_id: ${JSON.stringify(this.diagnostic_id)}\\n`;\n output += `└── level: ${JSON.stringify(this.level)}\\n`;\n return output;\n }\n}\nclass ERBControlFlowScopeError extends HerbError {\n keyword;\n static from(data) {\n return new ERBControlFlowScopeError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n keyword: data.keyword,\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n this.keyword = props.keyword;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"ERB_CONTROL_FLOW_SCOPE_ERROR\",\n keyword: this.keyword,\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBControlFlowScopeError ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── message: \"${this.message}\"\\n`;\n output += `└── keyword: ${JSON.stringify(this.keyword)}\\n`;\n return output;\n }\n}\nclass MissingERBEndTagError extends HerbError {\n keyword;\n static from(data) {\n return new MissingERBEndTagError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n keyword: data.keyword,\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n this.keyword = props.keyword;\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"MISSINGERB_END_TAG_ERROR\",\n keyword: this.keyword,\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ MissingERBEndTagError ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── message: \"${this.message}\"\\n`;\n output += `└── keyword: ${JSON.stringify(this.keyword)}\\n`;\n return output;\n }\n}\nclass ERBMultipleBlocksInTagError extends HerbError {\n static from(data) {\n return new ERBMultipleBlocksInTagError({\n type: data.type,\n message: data.message,\n location: Location.from(data.location),\n });\n }\n constructor(props) {\n super(props.type, props.message, props.location);\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"ERB_MULTIPLE_BLOCKS_IN_TAG_ERROR\",\n };\n }\n toMonacoDiagnostic() {\n return {\n line: this.location.start.line,\n column: this.location.start.column,\n endLine: this.location.end.line,\n endColumn: this.location.end.column,\n message: this.message,\n severity: 'error'\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBMultipleBlocksInTagError ${this.location.treeInspectWithLabel()}\\n`;\n output += `└── message: \"${this.message}\"\\n`;\n return output;\n }\n}\nfunction fromSerializedError(error) {\n switch (error.type) {\n case \"UNEXPECTED_ERROR\": return UnexpectedError.from(error);\n case \"UNEXPECTED_TOKEN_ERROR\": return UnexpectedTokenError.from(error);\n case \"MISSING_OPENING_TAG_ERROR\": return MissingOpeningTagError.from(error);\n case \"MISSING_CLOSING_TAG_ERROR\": return MissingClosingTagError.from(error);\n case \"TAG_NAMES_MISMATCH_ERROR\": return TagNamesMismatchError.from(error);\n case \"QUOTES_MISMATCH_ERROR\": return QuotesMismatchError.from(error);\n case \"VOID_ELEMENT_CLOSING_TAG_ERROR\": return VoidElementClosingTagError.from(error);\n case \"UNCLOSED_ELEMENT_ERROR\": return UnclosedElementError.from(error);\n case \"RUBY_PARSE_ERROR\": return RubyParseError.from(error);\n case \"ERB_CONTROL_FLOW_SCOPE_ERROR\": return ERBControlFlowScopeError.from(error);\n case \"MISSINGERB_END_TAG_ERROR\": return MissingERBEndTagError.from(error);\n case \"ERB_MULTIPLE_BLOCKS_IN_TAG_ERROR\": return ERBMultipleBlocksInTagError.from(error);\n default:\n throw new Error(`Unknown node type: ${error.type}`);\n }\n}\n\nfunction ensureString(object) {\n if (typeof object === \"string\") {\n return object;\n }\n throw new TypeError(\"Argument must be a string\");\n}\nfunction convertToUTF8(string) {\n const bytes = [];\n for (let i = 0; i < string.length; i++) {\n bytes.push(string.charCodeAt(i));\n }\n const decoder = new TextDecoder(\"utf-8\");\n return decoder.decode(new Uint8Array(bytes));\n}\n\n// NOTE: This file is generated by the templates/template.rb script and should not\n// be modified manually. See /Users/marcoroth/Development/herb-release-0.8.6/templates/javascript/packages/core/src/nodes.ts.erb\nclass Node {\n type;\n location;\n errors;\n static from(node) {\n return fromSerializedNode(node);\n }\n static get type() {\n throw new Error(\"AST_NODE\");\n }\n constructor(type, location, errors) {\n this.type = type;\n this.location = location;\n this.errors = errors;\n }\n toJSON() {\n return {\n type: this.type,\n location: this.location.toJSON(),\n errors: this.errors,\n };\n }\n inspect() {\n return this.treeInspect(0);\n }\n is(nodeClass) {\n return this.type === nodeClass.type;\n }\n isOfType(type) {\n return this.type === type;\n }\n get isSingleLine() {\n return this.location.start.line === this.location.end.line;\n }\n inspectArray(array, prefix) {\n if (!array)\n return \"∅\\n\";\n if (array.length === 0)\n return \"[]\\n\";\n let output = `(${array.length} item${array.length === 1 ? \"\" : \"s\"})\\n`;\n array.forEach((item, index) => {\n const isLast = index === array.length - 1;\n if (item instanceof Node || item instanceof HerbError) {\n output += this.inspectNode(item, prefix, isLast ? \" \" : \"│ \", isLast, false);\n }\n else {\n const symbol = isLast ? \"└── \" : \"├── \";\n output += `${prefix}${symbol} ${item}\\n`;\n }\n });\n output += `${prefix}\\n`;\n return output;\n }\n inspectNode(node, prefix, prefix2 = \" \", last = true, trailingNewline = true) {\n if (!node)\n return \"∅\\n\";\n let output = trailingNewline ? \"\\n\" : \"\";\n output += `${prefix}`;\n output += last ? \"└── \" : \"├── \";\n output += node\n .treeInspect()\n .trimStart()\n .split(\"\\n\")\n .map((line, index) => index === 0 ? line.trimStart() : `${prefix}${prefix2}${line}`)\n .join(\"\\n\")\n .trimStart();\n output += `\\n`;\n return output;\n }\n}\nclass DocumentNode extends Node {\n children;\n static get type() {\n return \"AST_DOCUMENT_NODE\";\n }\n static from(data) {\n return new DocumentNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n children: (data.children || []).map(node => fromSerializedNode(node)),\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.children = props.children;\n }\n accept(visitor) {\n visitor.visitDocumentNode(this);\n }\n childNodes() {\n return [\n ...this.children,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.children.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_DOCUMENT_NODE\",\n children: this.children.map(node => node.toJSON()),\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ DocumentNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `└── children: ${this.inspectArray(this.children, \" \")}`;\n return output;\n }\n}\nclass LiteralNode extends Node {\n content;\n static get type() {\n return \"AST_LITERAL_NODE\";\n }\n static from(data) {\n return new LiteralNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n content: data.content,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.content = convertToUTF8(props.content);\n }\n accept(visitor) {\n visitor.visitLiteralNode(this);\n }\n childNodes() {\n return [];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_LITERAL_NODE\",\n content: this.content,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ LiteralNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `└── content: ${this.content ? JSON.stringify(this.content) : \"∅\"}\\n`;\n return output;\n }\n}\nclass HTMLOpenTagNode extends Node {\n tag_opening;\n tag_name;\n tag_closing;\n children;\n is_void;\n static get type() {\n return \"AST_HTML_OPEN_TAG_NODE\";\n }\n static from(data) {\n return new HTMLOpenTagNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n tag_name: data.tag_name ? Token.from(data.tag_name) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n children: (data.children || []).map(node => fromSerializedNode(node)),\n is_void: data.is_void,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.tag_name = props.tag_name;\n this.tag_closing = props.tag_closing;\n this.children = props.children;\n this.is_void = props.is_void;\n }\n accept(visitor) {\n visitor.visitHTMLOpenTagNode(this);\n }\n childNodes() {\n return [\n ...this.children,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.children.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_HTML_OPEN_TAG_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n tag_name: this.tag_name ? this.tag_name.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n children: this.children.map(node => node.toJSON()),\n is_void: this.is_void,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ HTMLOpenTagNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_name: ${this.tag_name ? this.tag_name.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `├── children: ${this.inspectArray(this.children, \"│ \")}`;\n output += `└── is_void: ${typeof this.is_void === 'boolean' ? String(this.is_void) : \"∅\"}\\n`;\n return output;\n }\n}\nclass HTMLCloseTagNode extends Node {\n tag_opening;\n tag_name;\n children;\n tag_closing;\n static get type() {\n return \"AST_HTML_CLOSE_TAG_NODE\";\n }\n static from(data) {\n return new HTMLCloseTagNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n tag_name: data.tag_name ? Token.from(data.tag_name) : null,\n children: (data.children || []).map(node => fromSerializedNode(node)),\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.tag_name = props.tag_name;\n this.children = props.children;\n this.tag_closing = props.tag_closing;\n }\n accept(visitor) {\n visitor.visitHTMLCloseTagNode(this);\n }\n childNodes() {\n return [\n ...this.children,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.children.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_HTML_CLOSE_TAG_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n tag_name: this.tag_name ? this.tag_name.toJSON() : null,\n children: this.children.map(node => node.toJSON()),\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ HTMLCloseTagNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_name: ${this.tag_name ? this.tag_name.treeInspect() : \"∅\"}\\n`;\n output += `├── children: ${this.inspectArray(this.children, \"│ \")}`;\n output += `└── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass HTMLElementNode extends Node {\n open_tag;\n tag_name;\n body;\n close_tag;\n is_void;\n source;\n static get type() {\n return \"AST_HTML_ELEMENT_NODE\";\n }\n static from(data) {\n return new HTMLElementNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n open_tag: data.open_tag ? fromSerializedNode((data.open_tag)) : null,\n tag_name: data.tag_name ? Token.from(data.tag_name) : null,\n body: (data.body || []).map(node => fromSerializedNode(node)),\n close_tag: data.close_tag ? fromSerializedNode((data.close_tag)) : null,\n is_void: data.is_void,\n source: data.source,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.open_tag = props.open_tag;\n this.tag_name = props.tag_name;\n this.body = props.body;\n this.close_tag = props.close_tag;\n this.is_void = props.is_void;\n this.source = props.source;\n }\n accept(visitor) {\n visitor.visitHTMLElementNode(this);\n }\n childNodes() {\n return [\n this.open_tag,\n ...this.body,\n this.close_tag,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n this.open_tag ? this.open_tag.recursiveErrors() : [],\n ...this.body.map(node => node.recursiveErrors()),\n this.close_tag ? this.close_tag.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_HTML_ELEMENT_NODE\",\n open_tag: this.open_tag ? this.open_tag.toJSON() : null,\n tag_name: this.tag_name ? this.tag_name.toJSON() : null,\n body: this.body.map(node => node.toJSON()),\n close_tag: this.close_tag ? this.close_tag.toJSON() : null,\n is_void: this.is_void,\n source: this.source,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ HTMLElementNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── open_tag: ${this.inspectNode(this.open_tag, \"│ \")}`;\n output += `├── tag_name: ${this.tag_name ? this.tag_name.treeInspect() : \"∅\"}\\n`;\n output += `├── body: ${this.inspectArray(this.body, \"│ \")}`;\n output += `├── close_tag: ${this.inspectNode(this.close_tag, \"│ \")}`;\n output += `├── is_void: ${typeof this.is_void === 'boolean' ? String(this.is_void) : \"∅\"}\\n`;\n output += `└── source: ${this.source ? JSON.stringify(this.source) : \"∅\"}\\n`;\n return output;\n }\n}\nclass HTMLAttributeValueNode extends Node {\n open_quote;\n children;\n close_quote;\n quoted;\n static get type() {\n return \"AST_HTML_ATTRIBUTE_VALUE_NODE\";\n }\n static from(data) {\n return new HTMLAttributeValueNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n open_quote: data.open_quote ? Token.from(data.open_quote) : null,\n children: (data.children || []).map(node => fromSerializedNode(node)),\n close_quote: data.close_quote ? Token.from(data.close_quote) : null,\n quoted: data.quoted,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.open_quote = props.open_quote;\n this.children = props.children;\n this.close_quote = props.close_quote;\n this.quoted = props.quoted;\n }\n accept(visitor) {\n visitor.visitHTMLAttributeValueNode(this);\n }\n childNodes() {\n return [\n ...this.children,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.children.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_HTML_ATTRIBUTE_VALUE_NODE\",\n open_quote: this.open_quote ? this.open_quote.toJSON() : null,\n children: this.children.map(node => node.toJSON()),\n close_quote: this.close_quote ? this.close_quote.toJSON() : null,\n quoted: this.quoted,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ HTMLAttributeValueNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── open_quote: ${this.open_quote ? this.open_quote.treeInspect() : \"∅\"}\\n`;\n output += `├── children: ${this.inspectArray(this.children, \"│ \")}`;\n output += `├── close_quote: ${this.close_quote ? this.close_quote.treeInspect() : \"∅\"}\\n`;\n output += `└── quoted: ${typeof this.quoted === 'boolean' ? String(this.quoted) : \"∅\"}\\n`;\n return output;\n }\n}\nclass HTMLAttributeNameNode extends Node {\n children;\n static get type() {\n return \"AST_HTML_ATTRIBUTE_NAME_NODE\";\n }\n static from(data) {\n return new HTMLAttributeNameNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n children: (data.children || []).map(node => fromSerializedNode(node)),\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.children = props.children;\n }\n accept(visitor) {\n visitor.visitHTMLAttributeNameNode(this);\n }\n childNodes() {\n return [\n ...this.children,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.children.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_HTML_ATTRIBUTE_NAME_NODE\",\n children: this.children.map(node => node.toJSON()),\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ HTMLAttributeNameNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `└── children: ${this.inspectArray(this.children, \" \")}`;\n return output;\n }\n}\nclass HTMLAttributeNode extends Node {\n name;\n equals;\n value;\n static get type() {\n return \"AST_HTML_ATTRIBUTE_NODE\";\n }\n static from(data) {\n return new HTMLAttributeNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n name: data.name ? fromSerializedNode((data.name)) : null,\n equals: data.equals ? Token.from(data.equals) : null,\n value: data.value ? fromSerializedNode((data.value)) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.name = props.name;\n this.equals = props.equals;\n this.value = props.value;\n }\n accept(visitor) {\n visitor.visitHTMLAttributeNode(this);\n }\n childNodes() {\n return [\n this.name,\n this.value,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n this.name ? this.name.recursiveErrors() : [],\n this.value ? this.value.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_HTML_ATTRIBUTE_NODE\",\n name: this.name ? this.name.toJSON() : null,\n equals: this.equals ? this.equals.toJSON() : null,\n value: this.value ? this.value.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ HTMLAttributeNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── name: ${this.inspectNode(this.name, \"│ \")}`;\n output += `├── equals: ${this.equals ? this.equals.treeInspect() : \"∅\"}\\n`;\n output += `└── value: ${this.inspectNode(this.value, \" \")}`;\n return output;\n }\n}\nclass HTMLTextNode extends Node {\n content;\n static get type() {\n return \"AST_HTML_TEXT_NODE\";\n }\n static from(data) {\n return new HTMLTextNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n content: data.content,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.content = convertToUTF8(props.content);\n }\n accept(visitor) {\n visitor.visitHTMLTextNode(this);\n }\n childNodes() {\n return [];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_HTML_TEXT_NODE\",\n content: this.content,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ HTMLTextNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `└── content: ${this.content ? JSON.stringify(this.content) : \"∅\"}\\n`;\n return output;\n }\n}\nclass HTMLCommentNode extends Node {\n comment_start;\n children;\n comment_end;\n static get type() {\n return \"AST_HTML_COMMENT_NODE\";\n }\n static from(data) {\n return new HTMLCommentNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n comment_start: data.comment_start ? Token.from(data.comment_start) : null,\n children: (data.children || []).map(node => fromSerializedNode(node)),\n comment_end: data.comment_end ? Token.from(data.comment_end) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.comment_start = props.comment_start;\n this.children = props.children;\n this.comment_end = props.comment_end;\n }\n accept(visitor) {\n visitor.visitHTMLCommentNode(this);\n }\n childNodes() {\n return [\n ...this.children,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.children.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_HTML_COMMENT_NODE\",\n comment_start: this.comment_start ? this.comment_start.toJSON() : null,\n children: this.children.map(node => node.toJSON()),\n comment_end: this.comment_end ? this.comment_end.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ HTMLCommentNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── comment_start: ${this.comment_start ? this.comment_start.treeInspect() : \"∅\"}\\n`;\n output += `├── children: ${this.inspectArray(this.children, \"│ \")}`;\n output += `└── comment_end: ${this.comment_end ? this.comment_end.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass HTMLDoctypeNode extends Node {\n tag_opening;\n children;\n tag_closing;\n static get type() {\n return \"AST_HTML_DOCTYPE_NODE\";\n }\n static from(data) {\n return new HTMLDoctypeNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n children: (data.children || []).map(node => fromSerializedNode(node)),\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.children = props.children;\n this.tag_closing = props.tag_closing;\n }\n accept(visitor) {\n visitor.visitHTMLDoctypeNode(this);\n }\n childNodes() {\n return [\n ...this.children,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.children.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_HTML_DOCTYPE_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n children: this.children.map(node => node.toJSON()),\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ HTMLDoctypeNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── children: ${this.inspectArray(this.children, \"│ \")}`;\n output += `└── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass XMLDeclarationNode extends Node {\n tag_opening;\n children;\n tag_closing;\n static get type() {\n return \"AST_XML_DECLARATION_NODE\";\n }\n static from(data) {\n return new XMLDeclarationNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n children: (data.children || []).map(node => fromSerializedNode(node)),\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.children = props.children;\n this.tag_closing = props.tag_closing;\n }\n accept(visitor) {\n visitor.visitXMLDeclarationNode(this);\n }\n childNodes() {\n return [\n ...this.children,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.children.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_XML_DECLARATION_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n children: this.children.map(node => node.toJSON()),\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ XMLDeclarationNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── children: ${this.inspectArray(this.children, \"│ \")}`;\n output += `└── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass CDATANode extends Node {\n tag_opening;\n children;\n tag_closing;\n static get type() {\n return \"AST_CDATA_NODE\";\n }\n static from(data) {\n return new CDATANode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n children: (data.children || []).map(node => fromSerializedNode(node)),\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.children = props.children;\n this.tag_closing = props.tag_closing;\n }\n accept(visitor) {\n visitor.visitCDATANode(this);\n }\n childNodes() {\n return [\n ...this.children,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.children.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_CDATA_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n children: this.children.map(node => node.toJSON()),\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ CDATANode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── children: ${this.inspectArray(this.children, \"│ \")}`;\n output += `└── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass WhitespaceNode extends Node {\n value;\n static get type() {\n return \"AST_WHITESPACE_NODE\";\n }\n static from(data) {\n return new WhitespaceNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n value: data.value ? Token.from(data.value) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.value = props.value;\n }\n accept(visitor) {\n visitor.visitWhitespaceNode(this);\n }\n childNodes() {\n return [];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_WHITESPACE_NODE\",\n value: this.value ? this.value.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ WhitespaceNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `└── value: ${this.value ? this.value.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass ERBContentNode extends Node {\n tag_opening;\n content;\n tag_closing;\n // no-op for analyzed_ruby\n parsed;\n valid;\n static get type() {\n return \"AST_ERB_CONTENT_NODE\";\n }\n static from(data) {\n return new ERBContentNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n // no-op for analyzed_ruby\n parsed: data.parsed,\n valid: data.valid,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n // no-op for analyzed_ruby\n this.parsed = props.parsed;\n this.valid = props.valid;\n }\n accept(visitor) {\n visitor.visitERBContentNode(this);\n }\n childNodes() {\n return [];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_CONTENT_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n // no-op for analyzed_ruby\n parsed: this.parsed,\n valid: this.valid,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBContentNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n // no-op for analyzed_ruby\n output += `├── parsed: ${typeof this.parsed === 'boolean' ? String(this.parsed) : \"∅\"}\\n`;\n output += `└── valid: ${typeof this.valid === 'boolean' ? String(this.valid) : \"∅\"}\\n`;\n return output;\n }\n}\nclass ERBEndNode extends Node {\n tag_opening;\n content;\n tag_closing;\n static get type() {\n return \"AST_ERB_END_NODE\";\n }\n static from(data) {\n return new ERBEndNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n }\n accept(visitor) {\n visitor.visitERBEndNode(this);\n }\n childNodes() {\n return [];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_END_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBEndNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `└── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass ERBElseNode extends Node {\n tag_opening;\n content;\n tag_closing;\n statements;\n static get type() {\n return \"AST_ERB_ELSE_NODE\";\n }\n static from(data) {\n return new ERBElseNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n statements: (data.statements || []).map(node => fromSerializedNode(node)),\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.statements = props.statements;\n }\n accept(visitor) {\n visitor.visitERBElseNode(this);\n }\n childNodes() {\n return [\n ...this.statements,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.statements.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_ELSE_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n statements: this.statements.map(node => node.toJSON()),\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBElseNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `└── statements: ${this.inspectArray(this.statements, \" \")}`;\n return output;\n }\n}\nclass ERBIfNode extends Node {\n tag_opening;\n content;\n tag_closing;\n statements;\n subsequent;\n end_node;\n static get type() {\n return \"AST_ERB_IF_NODE\";\n }\n static from(data) {\n return new ERBIfNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n statements: (data.statements || []).map(node => fromSerializedNode(node)),\n subsequent: data.subsequent ? fromSerializedNode((data.subsequent)) : null,\n end_node: data.end_node ? fromSerializedNode((data.end_node)) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.statements = props.statements;\n this.subsequent = props.subsequent;\n this.end_node = props.end_node;\n }\n accept(visitor) {\n visitor.visitERBIfNode(this);\n }\n childNodes() {\n return [\n ...this.statements,\n this.subsequent,\n this.end_node,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.statements.map(node => node.recursiveErrors()),\n this.subsequent ? this.subsequent.recursiveErrors() : [],\n this.end_node ? this.end_node.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_IF_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n statements: this.statements.map(node => node.toJSON()),\n subsequent: this.subsequent ? this.subsequent.toJSON() : null,\n end_node: this.end_node ? this.end_node.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBIfNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `├── statements: ${this.inspectArray(this.statements, \"│ \")}`;\n output += `├── subsequent: ${this.inspectNode(this.subsequent, \"│ \")}`;\n output += `└── end_node: ${this.inspectNode(this.end_node, \" \")}`;\n return output;\n }\n}\nclass ERBBlockNode extends Node {\n tag_opening;\n content;\n tag_closing;\n body;\n end_node;\n static get type() {\n return \"AST_ERB_BLOCK_NODE\";\n }\n static from(data) {\n return new ERBBlockNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n body: (data.body || []).map(node => fromSerializedNode(node)),\n end_node: data.end_node ? fromSerializedNode((data.end_node)) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.body = props.body;\n this.end_node = props.end_node;\n }\n accept(visitor) {\n visitor.visitERBBlockNode(this);\n }\n childNodes() {\n return [\n ...this.body,\n this.end_node,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.body.map(node => node.recursiveErrors()),\n this.end_node ? this.end_node.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_BLOCK_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n body: this.body.map(node => node.toJSON()),\n end_node: this.end_node ? this.end_node.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBBlockNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `├── body: ${this.inspectArray(this.body, \"│ \")}`;\n output += `└── end_node: ${this.inspectNode(this.end_node, \" \")}`;\n return output;\n }\n}\nclass ERBWhenNode extends Node {\n tag_opening;\n content;\n tag_closing;\n statements;\n static get type() {\n return \"AST_ERB_WHEN_NODE\";\n }\n static from(data) {\n return new ERBWhenNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n statements: (data.statements || []).map(node => fromSerializedNode(node)),\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.statements = props.statements;\n }\n accept(visitor) {\n visitor.visitERBWhenNode(this);\n }\n childNodes() {\n return [\n ...this.statements,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.statements.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_WHEN_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n statements: this.statements.map(node => node.toJSON()),\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBWhenNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `└── statements: ${this.inspectArray(this.statements, \" \")}`;\n return output;\n }\n}\nclass ERBCaseNode extends Node {\n tag_opening;\n content;\n tag_closing;\n children;\n conditions;\n else_clause;\n end_node;\n static get type() {\n return \"AST_ERB_CASE_NODE\";\n }\n static from(data) {\n return new ERBCaseNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n children: (data.children || []).map(node => fromSerializedNode(node)),\n conditions: (data.conditions || []).map(node => fromSerializedNode(node)),\n else_clause: data.else_clause ? fromSerializedNode((data.else_clause)) : null,\n end_node: data.end_node ? fromSerializedNode((data.end_node)) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.children = props.children;\n this.conditions = props.conditions;\n this.else_clause = props.else_clause;\n this.end_node = props.end_node;\n }\n accept(visitor) {\n visitor.visitERBCaseNode(this);\n }\n childNodes() {\n return [\n ...this.children,\n ...this.conditions,\n this.else_clause,\n this.end_node,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.children.map(node => node.recursiveErrors()),\n ...this.conditions.map(node => node.recursiveErrors()),\n this.else_clause ? this.else_clause.recursiveErrors() : [],\n this.end_node ? this.end_node.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_CASE_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n children: this.children.map(node => node.toJSON()),\n conditions: this.conditions.map(node => node.toJSON()),\n else_clause: this.else_clause ? this.else_clause.toJSON() : null,\n end_node: this.end_node ? this.end_node.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBCaseNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `├── children: ${this.inspectArray(this.children, \"│ \")}`;\n output += `├── conditions: ${this.inspectArray(this.conditions, \"│ \")}`;\n output += `├── else_clause: ${this.inspectNode(this.else_clause, \"│ \")}`;\n output += `└── end_node: ${this.inspectNode(this.end_node, \" \")}`;\n return output;\n }\n}\nclass ERBCaseMatchNode extends Node {\n tag_opening;\n content;\n tag_closing;\n children;\n conditions;\n else_clause;\n end_node;\n static get type() {\n return \"AST_ERB_CASE_MATCH_NODE\";\n }\n static from(data) {\n return new ERBCaseMatchNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n children: (data.children || []).map(node => fromSerializedNode(node)),\n conditions: (data.conditions || []).map(node => fromSerializedNode(node)),\n else_clause: data.else_clause ? fromSerializedNode((data.else_clause)) : null,\n end_node: data.end_node ? fromSerializedNode((data.end_node)) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.children = props.children;\n this.conditions = props.conditions;\n this.else_clause = props.else_clause;\n this.end_node = props.end_node;\n }\n accept(visitor) {\n visitor.visitERBCaseMatchNode(this);\n }\n childNodes() {\n return [\n ...this.children,\n ...this.conditions,\n this.else_clause,\n this.end_node,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.children.map(node => node.recursiveErrors()),\n ...this.conditions.map(node => node.recursiveErrors()),\n this.else_clause ? this.else_clause.recursiveErrors() : [],\n this.end_node ? this.end_node.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_CASE_MATCH_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n children: this.children.map(node => node.toJSON()),\n conditions: this.conditions.map(node => node.toJSON()),\n else_clause: this.else_clause ? this.else_clause.toJSON() : null,\n end_node: this.end_node ? this.end_node.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBCaseMatchNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `├── children: ${this.inspectArray(this.children, \"│ \")}`;\n output += `├── conditions: ${this.inspectArray(this.conditions, \"│ \")}`;\n output += `├── else_clause: ${this.inspectNode(this.else_clause, \"│ \")}`;\n output += `└── end_node: ${this.inspectNode(this.end_node, \" \")}`;\n return output;\n }\n}\nclass ERBWhileNode extends Node {\n tag_opening;\n content;\n tag_closing;\n statements;\n end_node;\n static get type() {\n return \"AST_ERB_WHILE_NODE\";\n }\n static from(data) {\n return new ERBWhileNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n statements: (data.statements || []).map(node => fromSerializedNode(node)),\n end_node: data.end_node ? fromSerializedNode((data.end_node)) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.statements = props.statements;\n this.end_node = props.end_node;\n }\n accept(visitor) {\n visitor.visitERBWhileNode(this);\n }\n childNodes() {\n return [\n ...this.statements,\n this.end_node,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.statements.map(node => node.recursiveErrors()),\n this.end_node ? this.end_node.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_WHILE_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n statements: this.statements.map(node => node.toJSON()),\n end_node: this.end_node ? this.end_node.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBWhileNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `├── statements: ${this.inspectArray(this.statements, \"│ \")}`;\n output += `└── end_node: ${this.inspectNode(this.end_node, \" \")}`;\n return output;\n }\n}\nclass ERBUntilNode extends Node {\n tag_opening;\n content;\n tag_closing;\n statements;\n end_node;\n static get type() {\n return \"AST_ERB_UNTIL_NODE\";\n }\n static from(data) {\n return new ERBUntilNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n statements: (data.statements || []).map(node => fromSerializedNode(node)),\n end_node: data.end_node ? fromSerializedNode((data.end_node)) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.statements = props.statements;\n this.end_node = props.end_node;\n }\n accept(visitor) {\n visitor.visitERBUntilNode(this);\n }\n childNodes() {\n return [\n ...this.statements,\n this.end_node,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.statements.map(node => node.recursiveErrors()),\n this.end_node ? this.end_node.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_UNTIL_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n statements: this.statements.map(node => node.toJSON()),\n end_node: this.end_node ? this.end_node.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBUntilNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `├── statements: ${this.inspectArray(this.statements, \"│ \")}`;\n output += `└── end_node: ${this.inspectNode(this.end_node, \" \")}`;\n return output;\n }\n}\nclass ERBForNode extends Node {\n tag_opening;\n content;\n tag_closing;\n statements;\n end_node;\n static get type() {\n return \"AST_ERB_FOR_NODE\";\n }\n static from(data) {\n return new ERBForNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n statements: (data.statements || []).map(node => fromSerializedNode(node)),\n end_node: data.end_node ? fromSerializedNode((data.end_node)) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.statements = props.statements;\n this.end_node = props.end_node;\n }\n accept(visitor) {\n visitor.visitERBForNode(this);\n }\n childNodes() {\n return [\n ...this.statements,\n this.end_node,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.statements.map(node => node.recursiveErrors()),\n this.end_node ? this.end_node.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_FOR_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n statements: this.statements.map(node => node.toJSON()),\n end_node: this.end_node ? this.end_node.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBForNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `├── statements: ${this.inspectArray(this.statements, \"│ \")}`;\n output += `└── end_node: ${this.inspectNode(this.end_node, \" \")}`;\n return output;\n }\n}\nclass ERBRescueNode extends Node {\n tag_opening;\n content;\n tag_closing;\n statements;\n subsequent;\n static get type() {\n return \"AST_ERB_RESCUE_NODE\";\n }\n static from(data) {\n return new ERBRescueNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n statements: (data.statements || []).map(node => fromSerializedNode(node)),\n subsequent: data.subsequent ? fromSerializedNode((data.subsequent)) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.statements = props.statements;\n this.subsequent = props.subsequent;\n }\n accept(visitor) {\n visitor.visitERBRescueNode(this);\n }\n childNodes() {\n return [\n ...this.statements,\n this.subsequent,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.statements.map(node => node.recursiveErrors()),\n this.subsequent ? this.subsequent.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_RESCUE_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n statements: this.statements.map(node => node.toJSON()),\n subsequent: this.subsequent ? this.subsequent.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBRescueNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `├── statements: ${this.inspectArray(this.statements, \"│ \")}`;\n output += `└── subsequent: ${this.inspectNode(this.subsequent, \" \")}`;\n return output;\n }\n}\nclass ERBEnsureNode extends Node {\n tag_opening;\n content;\n tag_closing;\n statements;\n static get type() {\n return \"AST_ERB_ENSURE_NODE\";\n }\n static from(data) {\n return new ERBEnsureNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n statements: (data.statements || []).map(node => fromSerializedNode(node)),\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.statements = props.statements;\n }\n accept(visitor) {\n visitor.visitERBEnsureNode(this);\n }\n childNodes() {\n return [\n ...this.statements,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.statements.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_ENSURE_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n statements: this.statements.map(node => node.toJSON()),\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBEnsureNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `└── statements: ${this.inspectArray(this.statements, \" \")}`;\n return output;\n }\n}\nclass ERBBeginNode extends Node {\n tag_opening;\n content;\n tag_closing;\n statements;\n rescue_clause;\n else_clause;\n ensure_clause;\n end_node;\n static get type() {\n return \"AST_ERB_BEGIN_NODE\";\n }\n static from(data) {\n return new ERBBeginNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n statements: (data.statements || []).map(node => fromSerializedNode(node)),\n rescue_clause: data.rescue_clause ? fromSerializedNode((data.rescue_clause)) : null,\n else_clause: data.else_clause ? fromSerializedNode((data.else_clause)) : null,\n ensure_clause: data.ensure_clause ? fromSerializedNode((data.ensure_clause)) : null,\n end_node: data.end_node ? fromSerializedNode((data.end_node)) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.statements = props.statements;\n this.rescue_clause = props.rescue_clause;\n this.else_clause = props.else_clause;\n this.ensure_clause = props.ensure_clause;\n this.end_node = props.end_node;\n }\n accept(visitor) {\n visitor.visitERBBeginNode(this);\n }\n childNodes() {\n return [\n ...this.statements,\n this.rescue_clause,\n this.else_clause,\n this.ensure_clause,\n this.end_node,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.statements.map(node => node.recursiveErrors()),\n this.rescue_clause ? this.rescue_clause.recursiveErrors() : [],\n this.else_clause ? this.else_clause.recursiveErrors() : [],\n this.ensure_clause ? this.ensure_clause.recursiveErrors() : [],\n this.end_node ? this.end_node.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_BEGIN_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n statements: this.statements.map(node => node.toJSON()),\n rescue_clause: this.rescue_clause ? this.rescue_clause.toJSON() : null,\n else_clause: this.else_clause ? this.else_clause.toJSON() : null,\n ensure_clause: this.ensure_clause ? this.ensure_clause.toJSON() : null,\n end_node: this.end_node ? this.end_node.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBBeginNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `├── statements: ${this.inspectArray(this.statements, \"│ \")}`;\n output += `├── rescue_clause: ${this.inspectNode(this.rescue_clause, \"│ \")}`;\n output += `├── else_clause: ${this.inspectNode(this.else_clause, \"│ \")}`;\n output += `├── ensure_clause: ${this.inspectNode(this.ensure_clause, \"│ \")}`;\n output += `└── end_node: ${this.inspectNode(this.end_node, \" \")}`;\n return output;\n }\n}\nclass ERBUnlessNode extends Node {\n tag_opening;\n content;\n tag_closing;\n statements;\n else_clause;\n end_node;\n static get type() {\n return \"AST_ERB_UNLESS_NODE\";\n }\n static from(data) {\n return new ERBUnlessNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n statements: (data.statements || []).map(node => fromSerializedNode(node)),\n else_clause: data.else_clause ? fromSerializedNode((data.else_clause)) : null,\n end_node: data.end_node ? fromSerializedNode((data.end_node)) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.statements = props.statements;\n this.else_clause = props.else_clause;\n this.end_node = props.end_node;\n }\n accept(visitor) {\n visitor.visitERBUnlessNode(this);\n }\n childNodes() {\n return [\n ...this.statements,\n this.else_clause,\n this.end_node,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.statements.map(node => node.recursiveErrors()),\n this.else_clause ? this.else_clause.recursiveErrors() : [],\n this.end_node ? this.end_node.recursiveErrors() : [],\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_UNLESS_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n statements: this.statements.map(node => node.toJSON()),\n else_clause: this.else_clause ? this.else_clause.toJSON() : null,\n end_node: this.end_node ? this.end_node.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBUnlessNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `├── statements: ${this.inspectArray(this.statements, \"│ \")}`;\n output += `├── else_clause: ${this.inspectNode(this.else_clause, \"│ \")}`;\n output += `└── end_node: ${this.inspectNode(this.end_node, \" \")}`;\n return output;\n }\n}\nclass ERBYieldNode extends Node {\n tag_opening;\n content;\n tag_closing;\n static get type() {\n return \"AST_ERB_YIELD_NODE\";\n }\n static from(data) {\n return new ERBYieldNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n }\n accept(visitor) {\n visitor.visitERBYieldNode(this);\n }\n childNodes() {\n return [];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_YIELD_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBYieldNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `└── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n return output;\n }\n}\nclass ERBInNode extends Node {\n tag_opening;\n content;\n tag_closing;\n statements;\n static get type() {\n return \"AST_ERB_IN_NODE\";\n }\n static from(data) {\n return new ERBInNode({\n type: data.type,\n location: Location.from(data.location),\n errors: (data.errors || []).map(error => HerbError.from(error)),\n tag_opening: data.tag_opening ? Token.from(data.tag_opening) : null,\n content: data.content ? Token.from(data.content) : null,\n tag_closing: data.tag_closing ? Token.from(data.tag_closing) : null,\n statements: (data.statements || []).map(node => fromSerializedNode(node)),\n });\n }\n constructor(props) {\n super(props.type, props.location, props.errors);\n this.tag_opening = props.tag_opening;\n this.content = props.content;\n this.tag_closing = props.tag_closing;\n this.statements = props.statements;\n }\n accept(visitor) {\n visitor.visitERBInNode(this);\n }\n childNodes() {\n return [\n ...this.statements,\n ];\n }\n compactChildNodes() {\n return this.childNodes().filter(node => node !== null && node !== undefined);\n }\n recursiveErrors() {\n return [\n ...this.errors,\n ...this.statements.map(node => node.recursiveErrors()),\n ].flat();\n }\n toJSON() {\n return {\n ...super.toJSON(),\n type: \"AST_ERB_IN_NODE\",\n tag_opening: this.tag_opening ? this.tag_opening.toJSON() : null,\n content: this.content ? this.content.toJSON() : null,\n tag_closing: this.tag_closing ? this.tag_closing.toJSON() : null,\n statements: this.statements.map(node => node.toJSON()),\n };\n }\n treeInspect() {\n let output = \"\";\n output += `@ ERBInNode ${this.location.treeInspectWithLabel()}\\n`;\n output += `├── errors: ${this.inspectArray(this.errors, \"│ \")}`;\n output += `├── tag_opening: ${this.tag_opening ? this.tag_opening.treeInspect() : \"∅\"}\\n`;\n output += `├── content: ${this.content ? this.content.treeInspect() : \"∅\"}\\n`;\n output += `├── tag_closing: ${this.tag_closing ? this.tag_closing.treeInspect() : \"∅\"}\\n`;\n output += `└── statements: ${this.inspectArray(this.statements, \" \")}`;\n return output;\n }\n}\nfunction fromSerializedNode(node) {\n switch (node.type) {\n case \"AST_DOCUMENT_NODE\": return DocumentNode.from(node);\n case \"AST_LITERAL_NODE\": return LiteralNode.from(node);\n case \"AST_HTML_OPEN_TAG_NODE\": return HTMLOpenTagNode.from(node);\n case \"AST_HTML_CLOSE_TAG_NODE\": return HTMLCloseTagNode.from(node);\n case \"AST_HTML_ELEMENT_NODE\": return HTMLElementNode.from(node);\n case \"AST_HTML_ATTRIBUTE_VALUE_NODE\": return HTMLAttributeValueNode.from(node);\n case \"AST_HTML_ATTRIBUTE_NAME_NODE\": return HTMLAttributeNameNode.from(node);\n case \"AST_HTML_ATTRIBUTE_NODE\": return HTMLAttributeNode.from(node);\n case \"AST_HTML_TEXT_NODE\": return HTMLTextNode.from(node);\n case \"AST_HTML_COMMENT_NODE\": return HTMLCommentNode.from(node);\n case \"AST_HTML_DOCTYPE_NODE\": return HTMLDoctypeNode.from(node);\n case \"AST_XML_DECLARATION_NODE\": return XMLDeclarationNode.from(node);\n case \"AST_CDATA_NODE\": return CDATANode.from(node);\n case \"AST_WHITESPACE_NODE\": return WhitespaceNode.from(node);\n case \"AST_ERB_CONTENT_NODE\": return ERBContentNode.from(node);\n case \"AST_ERB_END_NODE\": return ERBEndNode.from(node);\n case \"AST_ERB_ELSE_NODE\": return ERBElseNode.from(node);\n case \"AST_ERB_IF_NODE\": return ERBIfNode.from(node);\n case \"AST_ERB_BLOCK_NODE\": return ERBBlockNode.from(node);\n case \"AST_ERB_WHEN_NODE\": return ERBWhenNode.from(node);\n case \"AST_ERB_CASE_NODE\": return ERBCaseNode.from(node);\n case \"AST_ERB_CASE_MATCH_NODE\": return ERBCaseMatchNode.from(node);\n case \"AST_ERB_WHILE_NODE\": return ERBWhileNode.from(node);\n case \"AST_ERB_UNTIL_NODE\": return ERBUntilNode.from(node);\n case \"AST_ERB_FOR_NODE\": return ERBForNode.from(node);\n case \"AST_ERB_RESCUE_NODE\": return ERBRescueNode.from(node);\n case \"AST_ERB_ENSURE_NODE\": return ERBEnsureNode.from(node);\n case \"AST_ERB_BEGIN_NODE\": return ERBBeginNode.from(node);\n case \"AST_ERB_UNLESS_NODE\": return ERBUnlessNode.from(node);\n case \"AST_ERB_YIELD_NODE\": return ERBYieldNode.from(node);\n case \"AST_ERB_IN_NODE\": return ERBInNode.from(node);\n default:\n throw new Error(`Unknown node type: ${node.type}`);\n }\n}\nconst ERBNodeClasses = [\n ERBContentNode,\n ERBEndNode,\n ERBElseNode,\n ERBIfNode,\n ERBBlockNode,\n ERBWhenNode,\n ERBCaseNode,\n ERBCaseMatchNode,\n ERBWhileNode,\n ERBUntilNode,\n ERBForNode,\n ERBRescueNode,\n ERBEnsureNode,\n ERBBeginNode,\n ERBUnlessNode,\n ERBYieldNode,\n ERBInNode,\n];\n\nclass Result {\n source;\n warnings;\n errors;\n constructor(source, warnings = [], errors = []) {\n this.source = source;\n this.warnings = warnings || [];\n this.errors = errors || [];\n }\n /**\n * Determines if the parsing was successful.\n * @returns `true` if there are no errors, otherwise `false`.\n */\n get successful() {\n return this.errors.length === 0;\n }\n /**\n * Determines if the parsing failed.\n * @returns `true` if there are errors, otherwise `false`.\n */\n get failed() {\n return this.errors.length > 0;\n }\n}\n\nclass HerbWarning {\n message;\n location;\n static from(warning) {\n return new HerbWarning(warning.message, Location.from(warning.location));\n }\n constructor(message, location) {\n this.message = message;\n this.location = location;\n }\n}\n\n/**\n * Represents the result of a parsing operation, extending the base `Result` class.\n * It contains the parsed document node, source code, warnings, and errors.\n */\nclass ParseResult extends Result {\n /** The document node generated from the source code. */\n value;\n /**\n * Creates a `ParseResult` instance from a serialized result.\n * @param result - The serialized parse result containing the value and source.\n * @returns A new `ParseResult` instance.\n */\n static from(result) {\n return new ParseResult(DocumentNode.from(result.value), result.source, result.warnings.map((warning) => HerbWarning.from(warning)), result.errors.map((error) => HerbError.from(error)));\n }\n /**\n * Constructs a new `ParseResult`.\n * @param value - The document node.\n * @param source - The source code that was parsed.\n * @param warnings - An array of warnings encountered during parsing.\n * @param errors - An array of errors encountered during parsing.\n */\n constructor(value, source, warnings = [], errors = []) {\n super(source, warnings, errors);\n this.value = value;\n }\n /**\n * Determines if the parsing failed.\n * @returns `true` if there are errors, otherwise `false`.\n */\n get failed() {\n // Consider errors on this result and recursively in the document tree\n return this.recursiveErrors().length > 0;\n }\n /**\n * Determines if the parsing was successful.\n * @returns `true` if there are no errors, otherwise `false`.\n */\n get successful() {\n return !this.failed;\n }\n /**\n * Returns a pretty-printed JSON string of the errors.\n * @returns A string representation of the errors.\n */\n prettyErrors() {\n return JSON.stringify([...this.errors, ...this.value.errors], null, 2);\n }\n recursiveErrors() {\n return [...this.errors, ...this.value.recursiveErrors()];\n }\n /**\n * Returns a pretty-printed string of the parse result.\n * @returns A string representation of the parse result.\n */\n inspect() {\n return this.value.inspect();\n }\n /**\n * Accepts a visitor to traverse the document node.\n * @param visitor - The visitor instance.\n */\n visit(visitor) {\n visitor.visit(this.value);\n }\n}\n\n// NOTE: This file is generated by the templates/template.rb script and should not\n// be modified manually. See /Users/marcoroth/Development/herb-release-0.8.6/templates/javascript/packages/core/src/node-type-guards.ts.erb\n/**\n * Type guard functions for AST nodes.\n * These functions provide type checking by combining both instanceof\n * checks and type string comparisons for maximum reliability across different\n * runtime scenarios (e.g., serialized/deserialized nodes).\n */\n/**\n * Checks if a node is a DocumentNode\n */\nfunction isDocumentNode(node) {\n return node instanceof DocumentNode || node.type === \"AST_DOCUMENT_NODE\" || node.constructor.type === \"AST_DOCUMENT_NODE\";\n}\n/**\n * Checks if a node is a LiteralNode\n */\nfunction isLiteralNode(node) {\n return node instanceof LiteralNode || node.type === \"AST_LITERAL_NODE\" || node.constructor.type === \"AST_LITERAL_NODE\";\n}\n/**\n * Checks if a node is a HTMLOpenTagNode\n */\nfunction isHTMLOpenTagNode(node) {\n return node instanceof HTMLOpenTagNode || node.type === \"AST_HTML_OPEN_TAG_NODE\" || node.constructor.type === \"AST_HTML_OPEN_TAG_NODE\";\n}\n/**\n * Checks if a node is a HTMLCloseTagNode\n */\nfunction isHTMLCloseTagNode(node) {\n return node instanceof HTMLCloseTagNode || node.type === \"AST_HTML_CLOSE_TAG_NODE\" || node.constructor.type === \"AST_HTML_CLOSE_TAG_NODE\";\n}\n/**\n * Checks if a node is a HTMLElementNode\n */\nfunction isHTMLElementNode(node) {\n return node instanceof HTMLElementNode || node.type === \"AST_HTML_ELEMENT_NODE\" || node.constructor.type === \"AST_HTML_ELEMENT_NODE\";\n}\n/**\n * Checks if a node is a HTMLAttributeValueNode\n */\nfunction isHTMLAttributeValueNode(node) {\n return node instanceof HTMLAttributeValueNode || node.type === \"AST_HTML_ATTRIBUTE_VALUE_NODE\" || node.constructor.type === \"AST_HTML_ATTRIBUTE_VALUE_NODE\";\n}\n/**\n * Checks if a node is a HTMLAttributeNameNode\n */\nfunction isHTMLAttributeNameNode(node) {\n return node instanceof HTMLAttributeNameNode || node.type === \"AST_HTML_ATTRIBUTE_NAME_NODE\" || node.constructor.type === \"AST_HTML_ATTRIBUTE_NAME_NODE\";\n}\n/**\n * Checks if a node is a HTMLAttributeNode\n */\nfunction isHTMLAttributeNode(node) {\n return node instanceof HTMLAttributeNode || node.type === \"AST_HTML_ATTRIBUTE_NODE\" || node.constructor.type === \"AST_HTML_ATTRIBUTE_NODE\";\n}\n/**\n * Checks if a node is a HTMLTextNode\n */\nfunction isHTMLTextNode(node) {\n return node instanceof HTMLTextNode || node.type === \"AST_HTML_TEXT_NODE\" || node.constructor.type === \"AST_HTML_TEXT_NODE\";\n}\n/**\n * Checks if a node is a HTMLCommentNode\n */\nfunction isHTMLCommentNode(node) {\n return node instanceof HTMLCommentNode || node.type === \"AST_HTML_COMMENT_NODE\" || node.constructor.type === \"AST_HTML_COMMENT_NODE\";\n}\n/**\n * Checks if a node is a HTMLDoctypeNode\n */\nfunction isHTMLDoctypeNode(node) {\n return node instanceof HTMLDoctypeNode || node.type === \"AST_HTML_DOCTYPE_NODE\" || node.constructor.type === \"AST_HTML_DOCTYPE_NODE\";\n}\n/**\n * Checks if a node is a XMLDeclarationNode\n */\nfunction isXMLDeclarationNode(node) {\n return node instanceof XMLDeclarationNode || node.type === \"AST_XML_DECLARATION_NODE\" || node.constructor.type === \"AST_XML_DECLARATION_NODE\";\n}\n/**\n * Checks if a node is a CDATANode\n */\nfunction isCDATANode(node) {\n return node instanceof CDATANode || node.type === \"AST_CDATA_NODE\" || node.constructor.type === \"AST_CDATA_NODE\";\n}\n/**\n * Checks if a node is a WhitespaceNode\n */\nfunction isWhitespaceNode(node) {\n return node instanceof WhitespaceNode || node.type === \"AST_WHITESPACE_NODE\" || node.constructor.type === \"AST_WHITESPACE_NODE\";\n}\n/**\n * Checks if a node is a ERBContentNode\n */\nfunction isERBContentNode(node) {\n return node instanceof ERBContentNode || node.type === \"AST_ERB_CONTENT_NODE\" || node.constructor.type === \"AST_ERB_CONTENT_NODE\";\n}\n/**\n * Checks if a node is a ERBEndNode\n */\nfunction isERBEndNode(node) {\n return node instanceof ERBEndNode || node.type === \"AST_ERB_END_NODE\" || node.constructor.type === \"AST_ERB_END_NODE\";\n}\n/**\n * Checks if a node is a ERBElseNode\n */\nfunction isERBElseNode(node) {\n return node instanceof ERBElseNode || node.type === \"AST_ERB_ELSE_NODE\" || node.constructor.type === \"AST_ERB_ELSE_NODE\";\n}\n/**\n * Checks if a node is a ERBIfNode\n */\nfunction isERBIfNode(node) {\n return node instanceof ERBIfNode || node.type === \"AST_ERB_IF_NODE\" || node.constructor.type === \"AST_ERB_IF_NODE\";\n}\n/**\n * Checks if a node is a ERBBlockNode\n */\nfunction isERBBlockNode(node) {\n return node instanceof ERBBlockNode || node.type === \"AST_ERB_BLOCK_NODE\" || node.constructor.type === \"AST_ERB_BLOCK_NODE\";\n}\n/**\n * Checks if a node is a ERBWhenNode\n */\nfunction isERBWhenNode(node) {\n return node instanceof ERBWhenNode || node.type === \"AST_ERB_WHEN_NODE\" || node.constructor.type === \"AST_ERB_WHEN_NODE\";\n}\n/**\n * Checks if a node is a ERBCaseNode\n */\nfunction isERBCaseNode(node) {\n return node instanceof ERBCaseNode || node.type === \"AST_ERB_CASE_NODE\" || node.constructor.type === \"AST_ERB_CASE_NODE\";\n}\n/**\n * Checks if a node is a ERBCaseMatchNode\n */\nfunction isERBCaseMatchNode(node) {\n return node instanceof ERBCaseMatchNode || node.type === \"AST_ERB_CASE_MATCH_NODE\" || node.constructor.type === \"AST_ERB_CASE_MATCH_NODE\";\n}\n/**\n * Checks if a node is a ERBWhileNode\n */\nfunction isERBWhileNode(node) {\n return node instanceof ERBWhileNode || node.type === \"AST_ERB_WHILE_NODE\" || node.constructor.type === \"AST_ERB_WHILE_NODE\";\n}\n/**\n * Checks if a node is a ERBUntilNode\n */\nfunction isERBUntilNode(node) {\n return node instanceof ERBUntilNode || node.type === \"AST_ERB_UNTIL_NODE\" || node.constructor.type === \"AST_ERB_UNTIL_NODE\";\n}\n/**\n * Checks if a node is a ERBForNode\n */\nfunction isERBForNode(node) {\n return node instanceof ERBForNode || node.type === \"AST_ERB_FOR_NODE\" || node.constructor.type === \"AST_ERB_FOR_NODE\";\n}\n/**\n * Checks if a node is a ERBRescueNode\n */\nfunction isERBRescueNode(node) {\n return node instanceof ERBRescueNode || node.type === \"AST_ERB_RESCUE_NODE\" || node.constructor.type === \"AST_ERB_RESCUE_NODE\";\n}\n/**\n * Checks if a node is a ERBEnsureNode\n */\nfunction isERBEnsureNode(node) {\n return node instanceof ERBEnsureNode || node.type === \"AST_ERB_ENSURE_NODE\" || node.constructor.type === \"AST_ERB_ENSURE_NODE\";\n}\n/**\n * Checks if a node is a ERBBeginNode\n */\nfunction isERBBeginNode(node) {\n return node instanceof ERBBeginNode || node.type === \"AST_ERB_BEGIN_NODE\" || node.constructor.type === \"AST_ERB_BEGIN_NODE\";\n}\n/**\n * Checks if a node is a ERBUnlessNode\n */\nfunction isERBUnlessNode(node) {\n return node instanceof ERBUnlessNode || node.type === \"AST_ERB_UNLESS_NODE\" || node.constructor.type === \"AST_ERB_UNLESS_NODE\";\n}\n/**\n * Checks if a node is a ERBYieldNode\n */\nfunction isERBYieldNode(node) {\n return node instanceof ERBYieldNode || node.type === \"AST_ERB_YIELD_NODE\" || node.constructor.type === \"AST_ERB_YIELD_NODE\";\n}\n/**\n * Checks if a node is a ERBInNode\n */\nfunction isERBInNode(node) {\n return node instanceof ERBInNode || node.type === \"AST_ERB_IN_NODE\" || node.constructor.type === \"AST_ERB_IN_NODE\";\n}\n/**\n * Convenience type guards for common node categories\n */\n/**\n * Checks if a node is any HTML node type\n */\nfunction isHTMLNode(node) {\n return isHTMLOpenTagNode(node) ||\n isHTMLCloseTagNode(node) ||\n isHTMLElementNode(node) ||\n isHTMLAttributeValueNode(node) ||\n isHTMLAttributeNameNode(node) ||\n isHTMLAttributeNode(node) ||\n isHTMLTextNode(node) ||\n isHTMLCommentNode(node) ||\n isHTMLDoctypeNode(node);\n}\n/**\n * Checks if a node is any ERB node type\n */\nfunction isERBNode(node) {\n return isERBContentNode(node) ||\n isERBEndNode(node) ||\n isERBElseNode(node) ||\n isERBIfNode(node) ||\n isERBBlockNode(node) ||\n isERBWhenNode(node) ||\n isERBCaseNode(node) ||\n isERBCaseMatchNode(node) ||\n isERBWhileNode(node) ||\n isERBUntilNode(node) ||\n isERBForNode(node) ||\n isERBRescueNode(node) ||\n isERBEnsureNode(node) ||\n isERBBeginNode(node) ||\n isERBUnlessNode(node) ||\n isERBYieldNode(node) ||\n isERBInNode(node);\n}\n/**\n * Map of node classes to their corresponding type guard functions\n *\n * @example\n * const guard = NODE_TYPE_GUARDS[HTMLTextNode]\n *\n * if (guard(node)) {\n * // node is HTMLTextNode\n * }\n */\nconst NODE_TYPE_GUARDS = new Map([\n [DocumentNode, isDocumentNode],\n [LiteralNode, isLiteralNode],\n [HTMLOpenTagNode, isHTMLOpenTagNode],\n [HTMLCloseTagNode, isHTMLCloseTagNode],\n [HTMLElementNode, isHTMLElementNode],\n [HTMLAttributeValueNode, isHTMLAttributeValueNode],\n [HTMLAttributeNameNode, isHTMLAttributeNameNode],\n [HTMLAttributeNode, isHTMLAttributeNode],\n [HTMLTextNode, isHTMLTextNode],\n [HTMLCommentNode, isHTMLCommentNode],\n [HTMLDoctypeNode, isHTMLDoctypeNode],\n [XMLDeclarationNode, isXMLDeclarationNode],\n [CDATANode, isCDATANode],\n [WhitespaceNode, isWhitespaceNode],\n [ERBContentNode, isERBContentNode],\n [ERBEndNode, isERBEndNode],\n [ERBElseNode, isERBElseNode],\n [ERBIfNode, isERBIfNode],\n [ERBBlockNode, isERBBlockNode],\n [ERBWhenNode, isERBWhenNode],\n [ERBCaseNode, isERBCaseNode],\n [ERBCaseMatchNode, isERBCaseMatchNode],\n [ERBWhileNode, isERBWhileNode],\n [ERBUntilNode, isERBUntilNode],\n [ERBForNode, isERBForNode],\n [ERBRescueNode, isERBRescueNode],\n [ERBEnsureNode, isERBEnsureNode],\n [ERBBeginNode, isERBBeginNode],\n [ERBUnlessNode, isERBUnlessNode],\n [ERBYieldNode, isERBYieldNode],\n [ERBInNode, isERBInNode],\n]);\n/**\n * Map of AST node type strings to their corresponding type guard functions\n *\n * @example\n * const guard = AST_TYPE_GUARDS[\"AST_HTML_TEXT_NODE\"]\n *\n * if (guard(node)) {\n * // node is HTMLTextNode\n * }\n */\nconst AST_TYPE_GUARDS = new Map([\n [\"AST_DOCUMENT_NODE\", isDocumentNode],\n [\"AST_LITERAL_NODE\", isLiteralNode],\n [\"AST_HTML_OPEN_TAG_NODE\", isHTMLOpenTagNode],\n [\"AST_HTML_CLOSE_TAG_NODE\", isHTMLCloseTagNode],\n [\"AST_HTML_ELEMENT_NODE\", isHTMLElementNode],\n [\"AST_HTML_ATTRIBUTE_VALUE_NODE\", isHTMLAttributeValueNode],\n [\"AST_HTML_ATTRIBUTE_NAME_NODE\", isHTMLAttributeNameNode],\n [\"AST_HTML_ATTRIBUTE_NODE\", isHTMLAttributeNode],\n [\"AST_HTML_TEXT_NODE\", isHTMLTextNode],\n [\"AST_HTML_COMMENT_NODE\", isHTMLCommentNode],\n [\"AST_HTML_DOCTYPE_NODE\", isHTMLDoctypeNode],\n [\"AST_XML_DECLARATION_NODE\", isXMLDeclarationNode],\n [\"AST_CDATA_NODE\", isCDATANode],\n [\"AST_WHITESPACE_NODE\", isWhitespaceNode],\n [\"AST_ERB_CONTENT_NODE\", isERBContentNode],\n [\"AST_ERB_END_NODE\", isERBEndNode],\n [\"AST_ERB_ELSE_NODE\", isERBElseNode],\n [\"AST_ERB_IF_NODE\", isERBIfNode],\n [\"AST_ERB_BLOCK_NODE\", isERBBlockNode],\n [\"AST_ERB_WHEN_NODE\", isERBWhenNode],\n [\"AST_ERB_CASE_NODE\", isERBCaseNode],\n [\"AST_ERB_CASE_MATCH_NODE\", isERBCaseMatchNode],\n [\"AST_ERB_WHILE_NODE\", isERBWhileNode],\n [\"AST_ERB_UNTIL_NODE\", isERBUntilNode],\n [\"AST_ERB_FOR_NODE\", isERBForNode],\n [\"AST_ERB_RESCUE_NODE\", isERBRescueNode],\n [\"AST_ERB_ENSURE_NODE\", isERBEnsureNode],\n [\"AST_ERB_BEGIN_NODE\", isERBBeginNode],\n [\"AST_ERB_UNLESS_NODE\", isERBUnlessNode],\n [\"AST_ERB_YIELD_NODE\", isERBYieldNode],\n [\"AST_ERB_IN_NODE\", isERBInNode],\n]);\n/**\n * Checks if a node matches any of the provided type identifiers with proper type narrowing\n * Supports AST type strings, node classes, or type guard functions\n *\n * @example\n * if (isAnyOf(node, \"AST_HTML_TEXT_NODE\", \"AST_LITERAL_NODE\")) {\n * // node is narrowed to HTMLTextNode | LiteralNode\n * }\n *\n * @example\n * if (isAnyOf(node, HTMLTextNode, LiteralNode)) {\n * // node is narrowed to HTMLTextNode | LiteralNode\n * }\n */\nfunction isAnyOf(node, ...types) {\n return types.some(type => {\n if (typeof type === 'string') {\n return isNode(node, type);\n }\n else if (typeof type === 'function' && type.prototype && type.prototype.constructor === type && NODE_TYPE_GUARDS.has(type)) {\n return isNode(node, type);\n }\n else if (typeof type === 'function') {\n return type(node);\n }\n else {\n return false;\n }\n });\n}\n/**\n * Checks if a node does NOT match any of the provided type identifiers\n * Supports AST type strings, node classes, or type guard functions\n * This is the logical inverse of isAnyOf\n *\n * @example\n * if (isNoneOf(node, \"AST_HTML_TEXT_NODE\", \"AST_LITERAL_NODE\")) {\n * // node is neither HTMLTextNode nor LiteralNode\n * }\n *\n * @example\n * if (isNoneOf(node, HTMLTextNode, LiteralNode)) {\n * // node is neither HTMLTextNode nor LiteralNode\n * }\n *\n * @example\n * if (isNoneOf(node, isHTMLTextNode, isLiteralNode)) {\n * // node is neither HTMLTextNode nor LiteralNode\n * }\n */\nfunction isNoneOf(node, ...types) {\n return !isAnyOf(node, ...types);\n}\nfunction areAllOfType(nodes, ...types) {\n return nodes.every(node => isAnyOf(node, ...types));\n}\nfunction filterNodes(nodes, ...types) {\n if (!nodes)\n return [];\n return nodes.filter(node => isAnyOf(node, ...types));\n}\nfunction isNode(node, type) {\n if (!node)\n return false;\n if (typeof type === 'string') {\n const guard = AST_TYPE_GUARDS.get(type);\n return guard ? guard(node) : false;\n }\n else if (typeof type === 'function') {\n const guard = NODE_TYPE_GUARDS.get(type);\n return guard ? guard(node) : false;\n }\n else {\n return false;\n }\n}\nfunction isToken(object) {\n return (object instanceof Token) || (object?.constructor?.name === \"Token\" && \"value\" in object) || object.type?.startsWith('TOKEN_');\n}\nfunction isParseResult(object) {\n return (object instanceof ParseResult) || (object?.constructor?.name === \"ParseResult\" && \"value\" in object);\n}\n/**\n * Checks if a node has children (contains other nodes)\n */\nfunction hasChildren(node) {\n return isDocumentNode(node) ||\n isHTMLOpenTagNode(node) ||\n isHTMLCloseTagNode(node) ||\n isHTMLElementNode(node) ||\n isHTMLAttributeValueNode(node) ||\n isHTMLAttributeNameNode(node) ||\n isHTMLCommentNode(node) ||\n isHTMLDoctypeNode(node) ||\n isERBElseNode(node) ||\n isERBIfNode(node) ||\n isERBBlockNode(node) ||\n isERBWhenNode(node) ||\n isERBCaseNode(node) ||\n isERBCaseMatchNode(node) ||\n isERBWhileNode(node) ||\n isERBUntilNode(node) ||\n isERBForNode(node) ||\n isERBRescueNode(node) ||\n isERBEnsureNode(node) ||\n isERBBeginNode(node) ||\n isERBUnlessNode(node) ||\n isERBInNode(node);\n}\n/**\n * Filter functions for extracting specific node types from arrays\n */\n/**\n * Filters an array of nodes to only include DocumentNode nodes\n */\nfunction filterDocumentNodes(nodes) {\n return nodes.filter(isDocumentNode);\n}\n/**\n * Filters an array of nodes to only include LiteralNode nodes\n */\nfunction filterLiteralNodes(nodes) {\n return nodes.filter(isLiteralNode);\n}\n/**\n * Filters an array of nodes to only include HTMLOpenTagNode nodes\n */\nfunction filterHTMLOpenTagNodes(nodes) {\n return nodes.filter(isHTMLOpenTagNode);\n}\n/**\n * Filters an array of nodes to only include HTMLCloseTagNode nodes\n */\nfunction filterHTMLCloseTagNodes(nodes) {\n return nodes.filter(isHTMLCloseTagNode);\n}\n/**\n * Filters an array of nodes to only include HTMLElementNode nodes\n */\nfunction filterHTMLElementNodes(nodes) {\n return nodes.filter(isHTMLElementNode);\n}\n/**\n * Filters an array of nodes to only include HTMLAttributeValueNode nodes\n */\nfunction filterHTMLAttributeValueNodes(nodes) {\n return nodes.filter(isHTMLAttributeValueNode);\n}\n/**\n * Filters an array of nodes to only include HTMLAttributeNameNode nodes\n */\nfunction filterHTMLAttributeNameNodes(nodes) {\n return nodes.filter(isHTMLAttributeNameNode);\n}\n/**\n * Filters an array of nodes to only include HTMLAttributeNode nodes\n */\nfunction filterHTMLAttributeNodes(nodes) {\n return nodes.filter(isHTMLAttributeNode);\n}\n/**\n * Filters an array of nodes to only include HTMLTextNode nodes\n */\nfunction filterHTMLTextNodes(nodes) {\n return nodes.filter(isHTMLTextNode);\n}\n/**\n * Filters an array of nodes to only include HTMLCommentNode nodes\n */\nfunction filterHTMLCommentNodes(nodes) {\n return nodes.filter(isHTMLCommentNode);\n}\n/**\n * Filters an array of nodes to only include HTMLDoctypeNode nodes\n */\nfunction filterHTMLDoctypeNodes(nodes) {\n return nodes.filter(isHTMLDoctypeNode);\n}\n/**\n * Filters an array of nodes to only include XMLDeclarationNode nodes\n */\nfunction filterXMLDeclarationNodes(nodes) {\n return nodes.filter(isXMLDeclarationNode);\n}\n/**\n * Filters an array of nodes to only include CDATANode nodes\n */\nfunction filterCDATANodes(nodes) {\n return nodes.filter(isCDATANode);\n}\n/**\n * Filters an array of nodes to only include WhitespaceNode nodes\n */\nfunction filterWhitespaceNodes(nodes) {\n return nodes.filter(isWhitespaceNode);\n}\n/**\n * Filters an array of nodes to only include ERBContentNode nodes\n */\nfunction filterERBContentNodes(nodes) {\n return nodes.filter(isERBContentNode);\n}\n/**\n * Filters an array of nodes to only include ERBEndNode nodes\n */\nfunction filterERBEndNodes(nodes) {\n return nodes.filter(isERBEndNode);\n}\n/**\n * Filters an array of nodes to only include ERBElseNode nodes\n */\nfunction filterERBElseNodes(nodes) {\n return nodes.filter(isERBElseNode);\n}\n/**\n * Filters an array of nodes to only include ERBIfNode nodes\n */\nfunction filterERBIfNodes(nodes) {\n return nodes.filter(isERBIfNode);\n}\n/**\n * Filters an array of nodes to only include ERBBlockNode nodes\n */\nfunction filterERBBlockNodes(nodes) {\n return nodes.filter(isERBBlockNode);\n}\n/**\n * Filters an array of nodes to only include ERBWhenNode nodes\n */\nfunction filterERBWhenNodes(nodes) {\n return nodes.filter(isERBWhenNode);\n}\n/**\n * Filters an array of nodes to only include ERBCaseNode nodes\n */\nfunction filterERBCaseNodes(nodes) {\n return nodes.filter(isERBCaseNode);\n}\n/**\n * Filters an array of nodes to only include ERBCaseMatchNode nodes\n */\nfunction filterERBCaseMatchNodes(nodes) {\n return nodes.filter(isERBCaseMatchNode);\n}\n/**\n * Filters an array of nodes to only include ERBWhileNode nodes\n */\nfunction filterERBWhileNodes(nodes) {\n return nodes.filter(isERBWhileNode);\n}\n/**\n * Filters an array of nodes to only include ERBUntilNode nodes\n */\nfunction filterERBUntilNodes(nodes) {\n return nodes.filter(isERBUntilNode);\n}\n/**\n * Filters an array of nodes to only include ERBForNode nodes\n */\nfunction filterERBForNodes(nodes) {\n return nodes.filter(isERBForNode);\n}\n/**\n * Filters an array of nodes to only include ERBRescueNode nodes\n */\nfunction filterERBRescueNodes(nodes) {\n return nodes.filter(isERBRescueNode);\n}\n/**\n * Filters an array of nodes to only include ERBEnsureNode nodes\n */\nfunction filterERBEnsureNodes(nodes) {\n return nodes.filter(isERBEnsureNode);\n}\n/**\n * Filters an array of nodes to only include ERBBeginNode nodes\n */\nfunction filterERBBeginNodes(nodes) {\n return nodes.filter(isERBBeginNode);\n}\n/**\n * Filters an array of nodes to only include ERBUnlessNode nodes\n */\nfunction filterERBUnlessNodes(nodes) {\n return nodes.filter(isERBUnlessNode);\n}\n/**\n * Filters an array of nodes to only include ERBYieldNode nodes\n */\nfunction filterERBYieldNodes(nodes) {\n return nodes.filter(isERBYieldNode);\n}\n/**\n * Filters an array of nodes to only include ERBInNode nodes\n */\nfunction filterERBInNodes(nodes) {\n return nodes.filter(isERBInNode);\n}\n\n/**\n * Checks if a node is an ERB output node (generates content: <%= %> or <%== %>)\n */\nfunction isERBOutputNode(node) {\n if (!isERBNode(node))\n return false;\n if (!node.tag_opening?.value)\n return false;\n return [\"<%=\", \"<%==\"].includes(node.tag_opening?.value);\n}\n/**\n * Checks if a node is a ERB comment node (control flow: <%# %>)\n */\nfunction isERBCommentNode(node) {\n if (!isERBNode(node))\n return false;\n if (!node.tag_opening?.value)\n return false;\n return node.tag_opening?.value === \"<%#\" || (node.tag_opening?.value !== \"<%#\" && (node.content?.value || \"\").trimStart().startsWith(\"#\"));\n}\n/**\n * Checks if a node is a non-output ERB node (control flow: <% %>)\n */\nfunction isERBControlFlowNode(node) {\n return isAnyOf(node, ERBIfNode, ERBUnlessNode, ERBBlockNode, ERBCaseNode, ERBCaseMatchNode, ERBWhileNode, ERBForNode, ERBBeginNode);\n}\n/**\n * Checks if an array of nodes contains any ERB content nodes\n */\nfunction hasERBContent(nodes) {\n return nodes.some(isERBContentNode);\n}\n/**\n * Checks if an array of nodes contains any ERB output nodes (dynamic content)\n */\nfunction hasERBOutput(nodes) {\n return nodes.some(isERBOutputNode);\n}\n/**\n * Extracts a static string from an array of literal nodes\n * Returns null if any node is not a literal node\n */\nfunction getStaticStringFromNodes(nodes) {\n if (!areAllOfType(nodes, LiteralNode)) {\n return null;\n }\n return nodes.map(node => node.content).join(\"\");\n}\n/**\n * Extracts static content from nodes, including mixed literal/ERB content\n * Returns the concatenated literal content, or null if no literal nodes exist\n */\nfunction getStaticContentFromNodes(nodes) {\n const literalNodes = filterLiteralNodes(nodes);\n if (literalNodes.length === 0) {\n return null;\n }\n return literalNodes.map(node => node.content).join(\"\");\n}\n/**\n * Checks if nodes contain any literal content (for static validation)\n */\nfunction hasStaticContent(nodes) {\n return nodes.some(isLiteralNode);\n}\n/**\n * Checks if nodes are effectively static (only literals and non-output ERB)\n * Non-output ERB like <% if %> doesn't affect static validation\n */\nfunction isEffectivelyStatic(nodes) {\n return !hasERBOutput(nodes);\n}\n/**\n * Gets static-validatable content from nodes (ignores control ERB, includes literals)\n * Returns concatenated literal content for validation, or null if contains output ERB\n */\nfunction getValidatableStaticContent(nodes) {\n if (hasERBOutput(nodes)) {\n return null;\n }\n return filterLiteralNodes(nodes).map(node => node.content).join(\"\");\n}\n/**\n * Extracts a combined string from nodes, including ERB content\n * For ERB nodes, includes the full tag syntax (e.g., \"<%= foo %>\")\n * This is useful for debugging or displaying the full attribute name\n */\nfunction getCombinedStringFromNodes(nodes) {\n return nodes.map(node => {\n if (isLiteralNode(node)) {\n return node.content;\n }\n else if (isERBContentNode(node)) {\n const opening = node.tag_opening?.value || \"\";\n const content = node.content?.value || \"\";\n const closing = node.tag_closing?.value || \"\";\n return `${opening}${content}${closing}`;\n }\n else {\n // For other node types, return a placeholder or empty string\n return `[${node.type}]`;\n }\n }).join(\"\");\n}\n/**\n * Checks if an HTML attribute name node has a static (literal-only) name\n */\nfunction hasStaticAttributeName(attributeNameNode) {\n if (!attributeNameNode.children) {\n return false;\n }\n return areAllOfType(attributeNameNode.children, LiteralNode);\n}\n/**\n * Checks if an HTML attribute name node has dynamic content (contains ERB)\n */\nfunction hasDynamicAttributeName(attributeNameNode) {\n if (!attributeNameNode.children) {\n return false;\n }\n return hasERBContent(attributeNameNode.children);\n}\n/**\n * Gets the static string value of an HTML attribute name node\n * Returns null if the attribute name contains dynamic content (ERB)\n */\nfunction getStaticAttributeName(attributeNameNode) {\n if (!attributeNameNode.children) {\n return null;\n }\n return getStaticStringFromNodes(attributeNameNode.children);\n}\n/**\n * Gets the combined string representation of an HTML attribute name node\n * This includes both static and dynamic content, useful for debugging\n */\nfunction getCombinedAttributeName(attributeNameNode) {\n if (!attributeNameNode.children) {\n return \"\";\n }\n return getCombinedStringFromNodes(attributeNameNode.children);\n}\n/**\n * Gets the tag name of an HTML element node\n */\nfunction getTagName(node) {\n return node.tag_name?.value ?? \"\";\n}\n/**\n * Check if a node is a comment (HTML comment or ERB comment)\n */\nfunction isCommentNode(node) {\n return isHTMLCommentNode(node) || isERBCommentNode(node);\n}\n/**\n * Compares two positions to determine if the first comes before the second\n * Returns true if pos1 comes before pos2 in source order\n * @param inclusive - If true, returns true when positions are equal\n */\nfunction isPositionBefore(position1, position2, inclusive = false) {\n if (position1.line < position2.line)\n return true;\n if (position1.line > position2.line)\n return false;\n return inclusive ? position1.column <= position2.column : position1.column < position2.column;\n}\n/**\n * Compares two positions to determine if they are equal\n * Returns true if pos1 and pos2 are at the same location\n */\nfunction isPositionEqual(position1, position2) {\n return position1.line === position2.line && position1.column === position2.column;\n}\n/**\n * Compares two positions to determine if the first comes after the second\n * Returns true if pos1 comes after pos2 in source order\n * @param inclusive - If true, returns true when positions are equal\n */\nfunction isPositionAfter(position1, position2, inclusive = false) {\n if (position1.line > position2.line)\n return true;\n if (position1.line < position2.line)\n return false;\n return inclusive ? position1.column >= position2.column : position1.column > position2.column;\n}\n/**\n * Gets nodes that appear before the specified location in source order\n * Uses line and column positions to determine ordering\n */\nfunction getNodesBeforeLocation(nodes, location) {\n return nodes.filter(node => node.location && isPositionBefore(node.location.end, location.start));\n}\n/**\n * Gets nodes that appear after the specified location in source order\n * Uses line and column positions to determine ordering\n */\nfunction getNodesAfterLocation(nodes, location) {\n return nodes.filter(node => node.location && isPositionAfter(node.location.start, location.end));\n}\n/**\n * Splits nodes into before and after the specified location\n * Returns an object with `before` and `after` arrays\n */\nfunction splitNodesAroundLocation(nodes, location) {\n return {\n before: getNodesBeforeLocation(nodes, location),\n after: getNodesAfterLocation(nodes, location)\n };\n}\n/**\n * Splits nodes at a specific position\n * Returns nodes that end before the position and nodes that start after the position\n * More precise than splitNodesAroundLocation as it uses a single position point\n * Uses the same defaults as the individual functions: before=exclusive, after=inclusive\n */\nfunction splitNodesAroundPosition(nodes, position) {\n return {\n before: getNodesBeforePosition(nodes, position), // uses default: inclusive = false\n after: getNodesAfterPosition(nodes, position) // uses default: inclusive = true\n };\n}\n/**\n * Gets nodes that end before the specified position\n * @param inclusive - If true, includes nodes that end exactly at the position (default: false, matching half-open interval semantics)\n */\nfunction getNodesBeforePosition(nodes, position, inclusive = false) {\n return nodes.filter(node => node.location && isPositionBefore(node.location.end, position, inclusive));\n}\n/**\n * Gets nodes that start after the specified position\n * @param inclusive - If true, includes nodes that start exactly at the position (default: true, matching typical boundary behavior)\n */\nfunction getNodesAfterPosition(nodes, position, inclusive = true) {\n return nodes.filter(node => node.location && isPositionAfter(node.location.start, position, inclusive));\n}\n\nconst expectedFunctions = [\n \"parse\",\n \"lex\",\n \"parseFile\",\n \"lexFile\",\n \"extractRuby\",\n \"extractHTML\",\n \"version\",\n];\n// NOTE: This function should never be called and is only for type checking\n// so we can make sure `expectedFunctions` matches the functions defined\n// in `LibHerbBackendFunctions` and the other way around.\n//\nfunction _TYPECHECK() {\n const checkFunctionsExist = true;\n const checkInterfaceComplete = true;\n return { checkFunctionsExist, checkInterfaceComplete };\n}\nfunction isLibHerbBackend(object, libherbpath = \"unknown\") {\n for (const expectedFunction of expectedFunctions) {\n if (object[expectedFunction] === undefined) {\n throw new Error(`Libherb at \"${libherbpath}\" doesn't expose function \"${expectedFunction}\".`);\n }\n if (typeof object[expectedFunction] !== \"function\") {\n throw new Error(`Libherb at \"${libherbpath}\" has \"${expectedFunction}\" but it's not a function.`);\n }\n }\n return true;\n}\nfunction ensureLibHerbBackend(object, libherbpath = \"unknown\") {\n isLibHerbBackend(object, libherbpath);\n return object;\n}\n\n/**\n * Converts a Diagnostic to Monaco/VSCode-compatible MonacoDiagnostic format\n */\nfunction toMonacoDiagnostic(diagnostic) {\n const { message, location } = diagnostic;\n const severity = diagnostic.severity === \"hint\" ? \"info\" : diagnostic.severity;\n return {\n line: location.start.line,\n column: location.start.column,\n endLine: location.end.line,\n endColumn: location.end.column,\n message,\n severity\n };\n}\n\n/*\n * The following code is derived from the \"js-levenshtein\" repository,\n * Copyright (c) 2017 Gustaf Andersson (https://github.com/gustf/js-levenshtein)\n * Licensed under the MIT License (https://github.com/gustf/js-levenshtein/blob/master/LICENSE).\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * https://github.com/marcoroth/stimulus-lsp/blob/52268d4a4d06504dde6cb81f505a23b5db5d5759/server/src/levenshtein.ts\n *\n */\nfunction levenshtein(a, b) {\n function _min(d0, d1, d2, bx, ay) {\n return d0 < d1 || d2 < d1 ? (d0 > d2 ? d2 + 1 : d0 + 1) : bx === ay ? d1 : d1 + 1;\n }\n if (a === b) {\n return 0;\n }\n if (a.length > b.length) {\n const tmp = a;\n a = b;\n b = tmp;\n }\n let la = a.length;\n let lb = b.length;\n while (la > 0 && a.charCodeAt(la - 1) === b.charCodeAt(lb - 1)) {\n la--;\n lb--;\n }\n let offset = 0;\n while (offset < la && a.charCodeAt(offset) === b.charCodeAt(offset)) {\n offset++;\n }\n la -= offset;\n lb -= offset;\n if (la === 0 || lb < 3) {\n return lb;\n }\n let x = 0;\n let y;\n let d0;\n let d1;\n let d2;\n let d3;\n let dd;\n let dy;\n let ay;\n let bx0;\n let bx1;\n let bx2;\n let bx3;\n const vector = [];\n for (y = 0; y < la; y++) {\n vector.push(y + 1);\n vector.push(a.charCodeAt(offset + y));\n }\n const len = vector.length - 1;\n for (; x < lb - 3;) {\n bx0 = b.charCodeAt(offset + (d0 = x));\n bx1 = b.charCodeAt(offset + (d1 = x + 1));\n bx2 = b.charCodeAt(offset + (d2 = x + 2));\n bx3 = b.charCodeAt(offset + (d3 = x + 3));\n dd = x += 4;\n for (y = 0; y < len; y += 2) {\n dy = vector[y];\n ay = vector[y + 1];\n d0 = _min(dy, d0, d1, bx0, ay);\n d1 = _min(d0, d1, d2, bx1, ay);\n d2 = _min(d1, d2, d3, bx2, ay);\n dd = _min(d2, d3, dd, bx3, ay);\n vector[y] = dd;\n d3 = d2;\n d2 = d1;\n d1 = d0;\n d0 = dy;\n }\n }\n for (; x < lb;) {\n bx0 = b.charCodeAt(offset + (d0 = x));\n dd = ++x;\n for (y = 0; y < len; y += 2) {\n dy = vector[y];\n vector[y] = dd = _min(dy, d0, dd, bx0, vector[y + 1]);\n d0 = dy;\n }\n }\n return dd;\n}\n\n/**\n * Ranks a list of strings by their Levenshtein distance from the input string.\n * Items are sorted in ascending order by distance, with closer matches first.\n *\n * @param input - The string to compare against\n * @param list - The list of strings to rank\n * @returns An array of objects containing the item and its distance score, sorted by score\n */\nfunction rank(input, list) {\n return list.map(item => {\n const score = levenshtein(input.toLowerCase(), item.toLowerCase());\n return { item, score };\n }).sort((a, b) => a.score - b.score);\n}\n/**\n * Finds the closest matching string from a list using Levenshtein distance.\n * Performs case-insensitive comparison.\n *\n * @param input - The string to match against\n * @param list - The list of candidate strings to search\n * @param threshold - Maximum Levenshtein distance to consider a match. If undefined, returns the closest match regardless of distance.\n * @returns The closest matching string from the list, or null if the list is empty or no match is within the threshold\n *\n * @example\n * ```ts\n * didyoumean('speling', ['spelling', 'writing', 'reading']) // Returns 'spelling'\n * didyoumean('test', []) // Returns null\n * didyoumean('speling', ['spelling', 'writing', 'reading'], 2) // Returns 'spelling' (distance: 1)\n * didyoumean('xyz', ['spelling', 'writing', 'reading'], 2) // Returns null (all distances > 2)\n * ```\n */\nfunction didyoumean(input, list, threshold) {\n if (list.length === 0)\n return null;\n const scores = rank(input, list);\n if (scores.length === 0)\n return null;\n const closest = scores[0];\n if (threshold !== undefined && closest.score > threshold)\n return null;\n return closest.item;\n}\n/**\n * Returns all strings from a list ranked by their Levenshtein distance from the input string.\n * Performs case-insensitive comparison. Results are sorted with closest matches first.\n *\n * @param input - The string to match against\n * @param list - The list of candidate strings to rank\n * @param threshold - Maximum Levenshtein distance to include in results. If undefined, returns all ranked results.\n * @returns An array of ranked results with items and scores, or an empty array if the list is empty or no matches are within the threshold\n *\n * @example\n * ```ts\n * didyoumeanRanked('speling', ['spelling', 'writing', 'reading'])\n * // Returns [{ item: 'spelling', score: 1 }, { item: 'reading', score: 5 }, { item: 'writing', score: 6 }]\n *\n * didyoumeanRanked('speling', ['spelling', 'writing', 'reading'], 2)\n * // Returns [{ item: 'spelling', score: 1 }]\n *\n * didyoumeanRanked('test', []) // Returns []\n * ```\n */\nfunction didyoumeanRanked(input, list, threshold) {\n if (list.length === 0)\n return [];\n const scores = rank(input, list);\n if (threshold !== undefined) {\n return scores.filter(result => result.score <= threshold);\n }\n return scores;\n}\n\nvar name = \"@herb-tools/core\";\nvar version = \"0.8.6\";\nvar packageJSON = {\n\tname: name,\n\tversion: version};\n\nclass TokenList {\n list;\n static from(list) {\n return new TokenList(list.map((token) => Token.from(token)));\n }\n constructor(list) {\n this.list = list;\n }\n get length() {\n return this.list.length;\n }\n get tokens() {\n return this.list;\n }\n [Symbol.iterator]() {\n return this.list[Symbol.iterator]();\n }\n at(index) {\n return this.list.at(index);\n }\n forEach(callback) {\n this.list.forEach(callback);\n }\n map(callback) {\n return this.list.map(callback);\n }\n filter(predicate) {\n return this.list.filter(predicate);\n }\n __getobj__() {\n return this.list;\n }\n inspect() {\n return this.list.map((token) => token.inspect()).join(\"\\n\") + \"\\n\";\n }\n toString() {\n return this.inspect();\n }\n}\n\n/**\n * Represents the result of a lexical analysis, extending the base `Result` class.\n * It contains the token list, source code, warnings, and errors.\n */\nclass LexResult extends Result {\n /** The list of tokens generated from the source code. */\n value;\n /**\n * Creates a `LexResult` instance from a serialized result.\n * @param result - The serialized lexical result containing tokens, source, warnings, and errors.\n * @returns A new `LexResult` instance.\n */\n static from(result) {\n return new LexResult(TokenList.from(result.tokens || []), result.source, result.warnings.map((warning) => HerbWarning.from(warning)), result.errors.map((error) => HerbError.from(error)));\n }\n /**\n * Constructs a new `LexResult`.\n * @param value - The list of tokens.\n * @param source - The source code that was lexed.\n * @param warnings - An array of warnings encountered during lexing.\n * @param errors - An array of errors encountered during lexing.\n */\n constructor(value, source, warnings = [], errors = []) {\n super(source, warnings, errors);\n this.value = value;\n }\n /**\n * Determines if the lexing was successful.\n * @returns `true` if there are no errors, otherwise `false`.\n */\n get successful() {\n return this.errors.length === 0;\n }\n /**\n * Determines if the lexing failed.\n * @returns `true` if there are errors, otherwise `false`.\n */\n get failed() {\n return this.errors.length > 0;\n }\n /**\n * Converts the `LexResult` to a JSON representation.\n * @returns An object containing the token list, source, warnings, and errors.\n */\n toJSON() {\n return {\n value: this.value,\n source: this.source,\n warnings: this.warnings,\n errors: this.errors,\n };\n }\n}\n\nconst DEFAULT_PARSER_OPTIONS = {\n track_whitespace: false,\n};\n\n/**\n * The main Herb parser interface, providing methods to lex and parse input.\n */\nclass HerbBackend {\n /** The backend instance handling lexing and parsing. */\n backend = undefined;\n backendPromise;\n /**\n * Creates a new Herb instance.\n * @param backendPromise - A promise resolving to a `LibHerbBackend` implementation for lexing and parsing.\n * @throws Error if no valid backend is provided.\n */\n constructor(backendPromise) {\n if (!backendPromise) {\n throw new Error(\"No LibHerb backend provided\");\n }\n this.backendPromise = backendPromise;\n }\n /**\n * Loads the backend by resolving the backend promise.\n * @returns A promise containing the resolved `HerbBackend` instance after loading it.\n */\n async load() {\n const backend = await this.backendPromise();\n this.backend = backend;\n return this;\n }\n /**\n * Lexes the given source string into a `LexResult`.\n * @param source - The source code to lex.\n * @returns A `LexResult` instance.\n * @throws Error if the backend is not loaded.\n */\n lex(source) {\n this.ensureBackend();\n return LexResult.from(this.backend.lex(ensureString(source)));\n }\n /**\n * Lexes a file.\n * @param path - The file path to lex.\n * @returns A `LexResult` instance.\n * @throws Error if the backend is not loaded.\n */\n lexFile(path) {\n this.ensureBackend();\n return LexResult.from(this.backend.lexFile(ensureString(path)));\n }\n /**\n * Parses the given source string into a `ParseResult`.\n * @param source - The source code to parse.\n * @param options - Optional parsing options.\n * @returns A `ParseResult` instance.\n * @throws Error if the backend is not loaded.\n */\n parse(source, options) {\n this.ensureBackend();\n const mergedOptions = { ...DEFAULT_PARSER_OPTIONS, ...options };\n return ParseResult.from(this.backend.parse(ensureString(source), mergedOptions));\n }\n /**\n * Parses a file.\n * @param path - The file path to parse.\n * @returns A `ParseResult` instance.\n * @throws Error if the backend is not loaded.\n */\n parseFile(path) {\n this.ensureBackend();\n return ParseResult.from(this.backend.parseFile(ensureString(path)));\n }\n /**\n * Extracts embedded Ruby code from the given source.\n * @param source - The source code to extract Ruby from.\n * @returns The extracted Ruby code as a string.\n * @throws Error if the backend is not loaded.\n */\n extractRuby(source) {\n this.ensureBackend();\n return this.backend.extractRuby(ensureString(source));\n }\n /**\n * Extracts HTML from the given source.\n * @param source - The source code to extract HTML from.\n * @returns The extracted HTML as a string.\n * @throws Error if the backend is not loaded.\n */\n extractHTML(source) {\n this.ensureBackend();\n return this.backend.extractHTML(ensureString(source));\n }\n /**\n * Gets the Herb version information, including the core and backend versions.\n * @returns A version string containing backend, core, and libherb versions.\n * @throws Error if the backend is not loaded.\n */\n get version() {\n this.ensureBackend();\n const backend = this.backendVersion();\n const core = `${packageJSON.name}@${packageJSON.version}`;\n const libherb = this.backend.version();\n return `${backend}, ${core}, ${libherb}`;\n }\n /**\n * Ensures that the backend is loaded.\n * @throws Error if the backend is not loaded.\n */\n ensureBackend() {\n if (!this.isLoaded) {\n throw new Error(\"Herb backend is not loaded. Call `await Herb.load()` first.\");\n }\n }\n /**\n * Checks if the backend is loaded.\n * @returns True if the backend is loaded, false otherwise.\n */\n get isLoaded() {\n return this.backend !== undefined;\n }\n}\n\n// NOTE: This file is generated by the templates/template.rb script and should not\n// be modified manually. See /Users/marcoroth/Development/herb-release-0.8.6/templates/javascript/packages/core/src/visitor.ts.erb\nclass Visitor {\n visit(node) {\n if (!node)\n return;\n node.accept(this);\n }\n visitAll(nodes) {\n nodes.forEach(node => node?.accept(this));\n }\n visitChildNodes(node) {\n node.compactChildNodes().forEach(node => node.accept(this));\n }\n visitNode(_node) {\n // Default implementation does nothing\n }\n visitERBNode(_node) {\n // Default implementation does nothing\n }\n visitDocumentNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitLiteralNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitHTMLOpenTagNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitHTMLCloseTagNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitHTMLElementNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitHTMLAttributeValueNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitHTMLAttributeNameNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitHTMLAttributeNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitHTMLTextNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitHTMLCommentNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitHTMLDoctypeNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitXMLDeclarationNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitCDATANode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitWhitespaceNode(node) {\n this.visitNode(node);\n this.visitChildNodes(node);\n }\n visitERBContentNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBEndNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBElseNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBIfNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBBlockNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBWhenNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBCaseNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBCaseMatchNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBWhileNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBUntilNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBForNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBRescueNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBEnsureNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBBeginNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBUnlessNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBYieldNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n visitERBInNode(node) {\n this.visitNode(node);\n this.visitERBNode(node);\n this.visitChildNodes(node);\n }\n}\n\nexport { AST_TYPE_GUARDS, CDATANode, DEFAULT_PARSER_OPTIONS, DocumentNode, ERBBeginNode, ERBBlockNode, ERBCaseMatchNode, ERBCaseNode, ERBContentNode, ERBControlFlowScopeError, ERBElseNode, ERBEndNode, ERBEnsureNode, ERBForNode, ERBIfNode, ERBInNode, ERBMultipleBlocksInTagError, ERBNodeClasses, ERBRescueNode, ERBUnlessNode, ERBUntilNode, ERBWhenNode, ERBWhileNode, ERBYieldNode, HTMLAttributeNameNode, HTMLAttributeNode, HTMLAttributeValueNode, HTMLCloseTagNode, HTMLCommentNode, HTMLDoctypeNode, HTMLElementNode, HTMLOpenTagNode, HTMLTextNode, HerbBackend, HerbError, HerbWarning, LexResult, LiteralNode, Location, MissingClosingTagError, MissingERBEndTagError, MissingOpeningTagError, NODE_TYPE_GUARDS, Node, ParseResult, Position, QuotesMismatchError, Range, Result, RubyParseError, TagNamesMismatchError, Token, TokenList, UnclosedElementError, UnexpectedError, UnexpectedTokenError, Visitor, VoidElementClosingTagError, WhitespaceNode, XMLDeclarationNode, _TYPECHECK, areAllOfType, convertToUTF8, didyoumean, didyoumeanRanked, ensureLibHerbBackend, ensureString, filterCDATANodes, filterDocumentNodes, filterERBBeginNodes, filterERBBlockNodes, filterERBCaseMatchNodes, filterERBCaseNodes, filterERBContentNodes, filterERBElseNodes, filterERBEndNodes, filterERBEnsureNodes, filterERBForNodes, filterERBIfNodes, filterERBInNodes, filterERBRescueNodes, filterERBUnlessNodes, filterERBUntilNodes, filterERBWhenNodes, filterERBWhileNodes, filterERBYieldNodes, filterHTMLAttributeNameNodes, filterHTMLAttributeNodes, filterHTMLAttributeValueNodes, filterHTMLCloseTagNodes, filterHTMLCommentNodes, filterHTMLDoctypeNodes, filterHTMLElementNodes, filterHTMLOpenTagNodes, filterHTMLTextNodes, filterLiteralNodes, filterNodes, filterWhitespaceNodes, filterXMLDeclarationNodes, fromSerializedError, fromSerializedNode, getCombinedAttributeName, getCombinedStringFromNodes, getNodesAfterLocation, getNodesAfterPosition, getNodesBeforeLocation, getNodesBeforePosition, getStaticAttributeName, getStaticContentFromNodes, getStaticStringFromNodes, getTagName, getValidatableStaticContent, hasChildren, hasDynamicAttributeName, hasERBContent, hasERBOutput, hasStaticAttributeName, hasStaticContent, isAnyOf, isCDATANode, isCommentNode, isDocumentNode, isERBBeginNode, isERBBlockNode, isERBCaseMatchNode, isERBCaseNode, isERBCommentNode, isERBContentNode, isERBControlFlowNode, isERBElseNode, isERBEndNode, isERBEnsureNode, isERBForNode, isERBIfNode, isERBInNode, isERBNode, isERBOutputNode, isERBRescueNode, isERBUnlessNode, isERBUntilNode, isERBWhenNode, isERBWhileNode, isERBYieldNode, isEffectivelyStatic, isHTMLAttributeNameNode, isHTMLAttributeNode, isHTMLAttributeValueNode, isHTMLCloseTagNode, isHTMLCommentNode, isHTMLDoctypeNode, isHTMLElementNode, isHTMLNode, isHTMLOpenTagNode, isHTMLTextNode, isLibHerbBackend, isLiteralNode, isNode, isNoneOf, isParseResult, isPositionAfter, isPositionEqual, isToken, isWhitespaceNode, isXMLDeclarationNode, levenshtein, splitNodesAroundLocation, splitNodesAroundPosition, toMonacoDiagnostic };\n//# sourceMappingURL=herb-core.esm.js.map\n","import { Visitor, isToken, isParseResult, getNodesBeforePosition, getNodesAfterPosition, filterNodes, ERBContentNode, isERBOutputNode } from '@herb-tools/core';\n\nclass PrintContext {\n output = \"\";\n indentLevel = 0;\n currentColumn = 0;\n preserveStack = [];\n /**\n * Write text to the output\n */\n write(text) {\n this.output += text;\n this.currentColumn += text.length;\n }\n /**\n * Write text and update column tracking for newlines\n */\n writeWithColumnTracking(text) {\n this.output += text;\n const lines = text.split('\\n');\n if (lines.length > 1) {\n this.currentColumn = lines[lines.length - 1].length;\n }\n else {\n this.currentColumn += text.length;\n }\n }\n /**\n * Increase indentation level\n */\n indent() {\n this.indentLevel++;\n }\n /**\n * Decrease indentation level\n */\n dedent() {\n if (this.indentLevel > 0) {\n this.indentLevel--;\n }\n }\n /**\n * Enter a tag that may preserve whitespace\n */\n enterTag(tagName) {\n this.preserveStack.push(tagName.toLowerCase());\n }\n /**\n * Exit the current tag\n */\n exitTag() {\n this.preserveStack.pop();\n }\n /**\n * Check if we're at the start of a line\n */\n isAtStartOfLine() {\n return this.currentColumn === 0;\n }\n /**\n * Get current indentation level\n */\n getCurrentIndentLevel() {\n return this.indentLevel;\n }\n /**\n * Get current column position\n */\n getCurrentColumn() {\n return this.currentColumn;\n }\n /**\n * Get the current tag stack (for debugging)\n */\n getTagStack() {\n return [...this.preserveStack];\n }\n /**\n * Get the complete output string\n */\n getOutput() {\n return this.output;\n }\n /**\n * Reset the context for reuse\n */\n reset() {\n this.output = \"\";\n this.indentLevel = 0;\n this.currentColumn = 0;\n this.preserveStack = [];\n }\n}\n\n/**\n * Default print options used when none are provided\n */\nconst DEFAULT_PRINT_OPTIONS = {\n ignoreErrors: false\n};\nclass Printer extends Visitor {\n context = new PrintContext();\n /**\n * Static method to print a node without creating an instance\n *\n * @param input - The AST Node, Token, or ParseResult to print\n * @param options - Print options to control behavior\n * @returns The printed string representation of the input\n * @throws {Error} When node has parse errors and ignoreErrors is false\n */\n static print(input, options = DEFAULT_PRINT_OPTIONS) {\n const printer = new this();\n return printer.print(input, options);\n }\n /**\n * Print a node, token, or parse result to a string\n *\n * @param input - The AST Node, Token, or ParseResult to print\n * @param options - Print options to control behavior\n * @returns The printed string representation of the input\n * @throws {Error} When node has parse errors and ignoreErrors is false\n */\n print(input, options = DEFAULT_PRINT_OPTIONS) {\n if (!input)\n return \"\";\n if (isToken(input)) {\n return input.value;\n }\n if (Array.isArray(input)) {\n this.context.reset();\n input.forEach(node => this.visit(node));\n return this.context.getOutput();\n }\n const node = isParseResult(input) ? input.value : input;\n if (options.ignoreErrors === false && node.recursiveErrors().length > 0) {\n throw new Error(`Cannot print the node (${node.type}) since it or any of its children has parse errors. Either pass in a valid Node or call \\`print()\\` using \\`print(node, { ignoreErrors: true })\\``);\n }\n this.context.reset();\n this.visit(node);\n return this.context.getOutput();\n }\n write(content) {\n this.context.write(content);\n }\n}\n\n/**\n * IdentityPrinter - Provides lossless reconstruction of the original source\n *\n * This printer aims to reconstruct the original input as faithfully as possible,\n * preserving all whitespace, formatting, and structure. It's useful for:\n * - Testing parser accuracy (input should equal output)\n * - Baseline printing before applying transformations\n * - Verifying AST round-trip fidelity\n */\nclass IdentityPrinter extends Printer {\n static printERBNode(node) {\n const printer = new IdentityPrinter();\n printer.printERBNode(node);\n return printer.context.getOutput();\n }\n visitLiteralNode(node) {\n this.write(node.content);\n }\n visitHTMLTextNode(node) {\n this.write(node.content);\n }\n visitWhitespaceNode(node) {\n if (node.value) {\n this.write(node.value.value);\n }\n }\n visitHTMLOpenTagNode(node) {\n if (node.tag_opening) {\n this.write(node.tag_opening.value);\n }\n if (node.tag_name) {\n this.write(node.tag_name.value);\n }\n this.visitChildNodes(node);\n if (node.tag_closing) {\n this.write(node.tag_closing.value);\n }\n }\n visitHTMLCloseTagNode(node) {\n if (node.tag_opening) {\n this.write(node.tag_opening.value);\n }\n if (node.tag_name) {\n const before = getNodesBeforePosition(node.children, node.tag_name.location.start, true);\n const after = getNodesAfterPosition(node.children, node.tag_name.location.end);\n this.visitAll(before);\n this.write(node.tag_name.value);\n this.visitAll(after);\n }\n else {\n this.visitAll(node.children);\n }\n if (node.tag_closing) {\n this.write(node.tag_closing.value);\n }\n }\n visitHTMLElementNode(node) {\n const tagName = node.tag_name?.value;\n if (tagName) {\n this.context.enterTag(tagName);\n }\n if (node.open_tag) {\n this.visit(node.open_tag);\n }\n if (node.body) {\n node.body.forEach(child => this.visit(child));\n }\n if (node.close_tag) {\n this.visit(node.close_tag);\n }\n if (tagName) {\n this.context.exitTag();\n }\n }\n visitHTMLAttributeNode(node) {\n if (node.name) {\n this.visit(node.name);\n }\n if (node.equals) {\n this.write(node.equals.value);\n }\n if (node.equals && node.value) {\n this.visit(node.value);\n }\n }\n visitHTMLAttributeNameNode(node) {\n this.visitChildNodes(node);\n }\n visitHTMLAttributeValueNode(node) {\n if (node.quoted && node.open_quote) {\n this.write(node.open_quote.value);\n }\n this.visitChildNodes(node);\n if (node.quoted && node.close_quote) {\n this.write(node.close_quote.value);\n }\n }\n visitHTMLCommentNode(node) {\n if (node.comment_start) {\n this.write(node.comment_start.value);\n }\n this.visitChildNodes(node);\n if (node.comment_end) {\n this.write(node.comment_end.value);\n }\n }\n visitHTMLDoctypeNode(node) {\n if (node.tag_opening) {\n this.write(node.tag_opening.value);\n }\n this.visitChildNodes(node);\n if (node.tag_closing) {\n this.write(node.tag_closing.value);\n }\n }\n visitXMLDeclarationNode(node) {\n if (node.tag_opening) {\n this.write(node.tag_opening.value);\n }\n this.visitChildNodes(node);\n if (node.tag_closing) {\n this.write(node.tag_closing.value);\n }\n }\n visitCDATANode(node) {\n if (node.tag_opening) {\n this.write(node.tag_opening.value);\n }\n this.visitChildNodes(node);\n if (node.tag_closing) {\n this.write(node.tag_closing.value);\n }\n }\n visitERBContentNode(node) {\n this.printERBNode(node);\n }\n visitERBIfNode(node) {\n this.printERBNode(node);\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n if (node.subsequent) {\n this.visit(node.subsequent);\n }\n if (node.end_node) {\n this.visit(node.end_node);\n }\n }\n visitERBElseNode(node) {\n this.printERBNode(node);\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n }\n visitERBEndNode(node) {\n this.printERBNode(node);\n }\n visitERBBlockNode(node) {\n this.printERBNode(node);\n if (node.body) {\n node.body.forEach(child => this.visit(child));\n }\n if (node.end_node) {\n this.visit(node.end_node);\n }\n }\n visitERBCaseNode(node) {\n this.printERBNode(node);\n if (node.children) {\n node.children.forEach(child => this.visit(child));\n }\n if (node.conditions) {\n node.conditions.forEach(condition => this.visit(condition));\n }\n if (node.else_clause) {\n this.visit(node.else_clause);\n }\n if (node.end_node) {\n this.visit(node.end_node);\n }\n }\n visitERBWhenNode(node) {\n this.printERBNode(node);\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n }\n visitERBWhileNode(node) {\n this.printERBNode(node);\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n if (node.end_node) {\n this.visit(node.end_node);\n }\n }\n visitERBUntilNode(node) {\n this.printERBNode(node);\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n if (node.end_node) {\n this.visit(node.end_node);\n }\n }\n visitERBForNode(node) {\n this.printERBNode(node);\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n if (node.end_node) {\n this.visit(node.end_node);\n }\n }\n visitERBBeginNode(node) {\n this.printERBNode(node);\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n if (node.rescue_clause) {\n this.visit(node.rescue_clause);\n }\n if (node.else_clause) {\n this.visit(node.else_clause);\n }\n if (node.ensure_clause) {\n this.visit(node.ensure_clause);\n }\n if (node.end_node) {\n this.visit(node.end_node);\n }\n }\n visitERBRescueNode(node) {\n this.printERBNode(node);\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n if (node.subsequent) {\n this.visit(node.subsequent);\n }\n }\n visitERBEnsureNode(node) {\n this.printERBNode(node);\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n }\n visitERBUnlessNode(node) {\n this.printERBNode(node);\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n if (node.else_clause) {\n this.visit(node.else_clause);\n }\n if (node.end_node) {\n this.visit(node.end_node);\n }\n }\n visitERBYieldNode(node) {\n this.printERBNode(node);\n }\n visitERBInNode(node) {\n this.printERBNode(node);\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n }\n visitERBCaseMatchNode(node) {\n this.printERBNode(node);\n if (node.children) {\n node.children.forEach(child => this.visit(child));\n }\n if (node.conditions) {\n node.conditions.forEach(condition => this.visit(condition));\n }\n if (node.else_clause) {\n this.visit(node.else_clause);\n }\n if (node.end_node) {\n this.visit(node.end_node);\n }\n }\n /**\n * Print ERB node tags and content\n */\n printERBNode(node) {\n if (node.tag_opening) {\n this.write(node.tag_opening.value);\n }\n if (node.content) {\n this.write(node.content.value);\n }\n if (node.tag_closing) {\n this.write(node.tag_closing.value);\n }\n }\n}\n\nconst DEFAULT_ERB_TO_RUBY_STRING_OPTIONS = {\n ...DEFAULT_PRINT_OPTIONS,\n forceQuotes: false\n};\n/**\n * ERBToRubyStringPrinter - Converts ERB snippets to Ruby strings with interpolation\n *\n * This printer transforms ERB templates into Ruby strings by:\n * - Converting literal text to string content\n * - Converting <%= %> tags to #{} interpolation\n * - Converting simple if/else blocks to ternary operators\n * - Ignoring <% %> tags (they don't produce output)\n *\n * Examples:\n * - `hello world <%= hello %>` => `\"hello world #{hello}\"`\n * - `hello world <% hello %>` => `\"hello world \"`\n * - `Welcome <%= user.name %>!` => `\"Welcome #{user.name}!\"`\n * - `<% if logged_in? %>Welcome<% else %>Login<% end %>` => `\"logged_in? ? \"Welcome\" : \"Login\"`\n * - `<% if logged_in? %>Welcome<% else %>Login<% end %>!` => `\"#{logged_in? ? \"Welcome\" : \"Login\"}!\"`\n */\nclass ERBToRubyStringPrinter extends IdentityPrinter {\n // TODO: cleanup `.type === \"AST_*\" checks`\n static print(node, options = DEFAULT_ERB_TO_RUBY_STRING_OPTIONS) {\n const erbNodes = filterNodes([node], ERBContentNode);\n if (erbNodes.length === 1 && isERBOutputNode(erbNodes[0]) && !options.forceQuotes) {\n return (erbNodes[0].content?.value || \"\").trim();\n }\n if ('children' in node && Array.isArray(node.children)) {\n const childErbNodes = filterNodes(node.children, ERBContentNode);\n const hasOnlyERBContent = node.children.length > 0 && node.children.length === childErbNodes.length;\n if (hasOnlyERBContent && childErbNodes.length === 1 && isERBOutputNode(childErbNodes[0]) && !options.forceQuotes) {\n return (childErbNodes[0].content?.value || \"\").trim();\n }\n if (node.children.length === 1 && node.children[0].type === \"AST_ERB_IF_NODE\" && !options.forceQuotes) {\n const ifNode = node.children[0];\n const printer = new ERBToRubyStringPrinter();\n if (printer.canConvertToTernary(ifNode)) {\n printer.convertToTernaryWithoutWrapper(ifNode);\n return printer.context.getOutput();\n }\n }\n if (node.children.length === 1 && node.children[0].type === \"AST_ERB_UNLESS_NODE\" && !options.forceQuotes) {\n const unlessNode = node.children[0];\n const printer = new ERBToRubyStringPrinter();\n if (printer.canConvertUnlessToTernary(unlessNode)) {\n printer.convertUnlessToTernaryWithoutWrapper(unlessNode);\n return printer.context.getOutput();\n }\n }\n }\n const printer = new ERBToRubyStringPrinter();\n printer.context.write('\"');\n printer.visit(node);\n printer.context.write('\"');\n return printer.context.getOutput();\n }\n visitHTMLTextNode(node) {\n if (node.content) {\n const escapedContent = node.content.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n this.context.write(escapedContent);\n }\n }\n visitERBContentNode(node) {\n if (isERBOutputNode(node)) {\n this.context.write(\"#{\");\n if (node.content?.value) {\n this.context.write(node.content.value.trim());\n }\n this.context.write(\"}\");\n }\n }\n visitERBIfNode(node) {\n if (this.canConvertToTernary(node)) {\n this.convertToTernary(node);\n }\n }\n visitERBUnlessNode(node) {\n if (this.canConvertUnlessToTernary(node)) {\n this.convertUnlessToTernary(node);\n }\n }\n visitHTMLAttributeValueNode(node) {\n this.visitChildNodes(node);\n }\n canConvertToTernary(node) {\n if (node.subsequent && node.subsequent.type !== \"AST_ERB_ELSE_NODE\") {\n return false;\n }\n const ifOnlyText = node.statements ? node.statements.every(statement => statement.type === \"AST_HTML_TEXT_NODE\") : true;\n if (!ifOnlyText)\n return false;\n if (node.subsequent && node.subsequent.type === \"AST_ERB_ELSE_NODE\") {\n return node.subsequent.statements\n ? node.subsequent.statements.every(statement => statement.type === \"AST_HTML_TEXT_NODE\")\n : true;\n }\n return true;\n }\n convertToTernary(node) {\n this.context.write(\"#{\");\n if (node.content?.value) {\n const condition = node.content.value.trim();\n const cleanCondition = condition.replace(/^if\\s+/, '');\n const needsParentheses = cleanCondition.includes(' ');\n if (needsParentheses) {\n this.context.write(\"(\");\n }\n this.context.write(cleanCondition);\n if (needsParentheses) {\n this.context.write(\")\");\n }\n }\n this.context.write(\" ? \");\n this.context.write('\"');\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n this.context.write('\"');\n this.context.write(\" : \");\n this.context.write('\"');\n if (node.subsequent && node.subsequent.type === \"AST_ERB_ELSE_NODE\" && node.subsequent.statements) {\n node.subsequent.statements.forEach(statement => this.visit(statement));\n }\n this.context.write('\"');\n this.context.write(\"}\");\n }\n convertToTernaryWithoutWrapper(node) {\n if (node.subsequent && node.subsequent.type !== \"AST_ERB_ELSE_NODE\") {\n return false;\n }\n if (node.content?.value) {\n const condition = node.content.value.trim();\n const cleanCondition = condition.replace(/^if\\s+/, '');\n const needsParentheses = cleanCondition.includes(' ');\n if (needsParentheses) {\n this.context.write(\"(\");\n }\n this.context.write(cleanCondition);\n if (needsParentheses) {\n this.context.write(\")\");\n }\n }\n this.context.write(\" ? \");\n this.context.write('\"');\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n this.context.write('\"');\n this.context.write(\" : \");\n this.context.write('\"');\n if (node.subsequent && node.subsequent.type === \"AST_ERB_ELSE_NODE\" && node.subsequent.statements) {\n node.subsequent.statements.forEach(statement => this.visit(statement));\n }\n this.context.write('\"');\n }\n canConvertUnlessToTernary(node) {\n const unlessOnlyText = node.statements ? node.statements.every(statement => statement.type === \"AST_HTML_TEXT_NODE\") : true;\n if (!unlessOnlyText)\n return false;\n if (node.else_clause && node.else_clause.type === \"AST_ERB_ELSE_NODE\") {\n return node.else_clause.statements\n ? node.else_clause.statements.every(statement => statement.type === \"AST_HTML_TEXT_NODE\")\n : true;\n }\n return true;\n }\n convertUnlessToTernary(node) {\n this.context.write(\"#{\");\n if (node.content?.value) {\n const condition = node.content.value.trim();\n const cleanCondition = condition.replace(/^unless\\s+/, '');\n const needsParentheses = cleanCondition.includes(' ');\n this.context.write(\"!(\");\n if (needsParentheses) {\n this.context.write(\"(\");\n }\n this.context.write(cleanCondition);\n if (needsParentheses) {\n this.context.write(\")\");\n }\n this.context.write(\")\");\n }\n this.context.write(\" ? \");\n this.context.write('\"');\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n this.context.write('\"');\n this.context.write(\" : \");\n this.context.write('\"');\n if (node.else_clause && node.else_clause.type === \"AST_ERB_ELSE_NODE\") {\n node.else_clause.statements.forEach(statement => this.visit(statement));\n }\n this.context.write('\"');\n this.context.write(\"}\");\n }\n convertUnlessToTernaryWithoutWrapper(node) {\n if (node.content?.value) {\n const condition = node.content.value.trim();\n const cleanCondition = condition.replace(/^unless\\s+/, '');\n const needsParentheses = cleanCondition.includes(' ');\n this.context.write(\"!(\");\n if (needsParentheses) {\n this.context.write(\"(\");\n }\n this.context.write(cleanCondition);\n if (needsParentheses) {\n this.context.write(\")\");\n }\n this.context.write(\")\");\n }\n this.context.write(\" ? \");\n this.context.write('\"');\n if (node.statements) {\n node.statements.forEach(statement => this.visit(statement));\n }\n this.context.write('\"');\n this.context.write(\" : \");\n this.context.write('\"');\n if (node.else_clause && node.else_clause.type === \"AST_ERB_ELSE_NODE\") {\n node.else_clause.statements.forEach(statement => this.visit(statement));\n }\n this.context.write('\"');\n }\n}\n\nexport { DEFAULT_PRINT_OPTIONS, ERBToRubyStringPrinter, IdentityPrinter, PrintContext, Printer };\n//# sourceMappingURL=index.js.map\n",null],"names":[],"mappings":"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"}