xnl-core 0.1.2 → 0.1.3

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/position.ts","../src/errors.ts","../src/parser.ts","../src/types.ts","../src/formatter.ts","../src/path/index.ts","../src/mutation/index.ts","../src/loader/index.ts","../src/NodeHelper.ts","../src/index.ts"],"names":["metaStr","idPart","isPlainObject","isDocument","isComment","isTextElement","isDataElement","id"],"mappings":"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","file":"index.js","sourcesContent":["export function positionToLineColumn(input: string, index: number): { line: number; column: number } {\n let line = 1;\n let column = 1;\n for (let i = 0; i < index && i < input.length; i++) {\n const ch = input[i];\n if (ch === \"\\n\") {\n line += 1;\n column = 1;\n } else {\n column += 1;\n }\n }\n return { line, column };\n}\n","import { positionToLineColumn } from \"./position\";\n\nexport type XnlErrorCode =\n | \"UNEXPECTED_EOF\"\n | \"MISMATCHED_TAG\"\n | \"DUPLICATE_CHILD\"\n | \"INVALID_CONTENT\"\n | \"INVALID_LITERAL\"\n | \"UNEXPECTED_TOKEN\";\n\nexport class XnlParseError extends Error {\n readonly code: XnlErrorCode;\n readonly position: number;\n readonly line: number;\n readonly column: number;\n\n constructor(code: XnlErrorCode, message: string, input: string, position: number) {\n const { line, column } = positionToLineColumn(input, position);\n super(`${message} (at ${line}:${column})`);\n this.code = code;\n this.position = position;\n this.line = line;\n this.column = column;\n }\n}\n","import { XnlParseError } from \"./errors\";\nimport {\n AttributeMap,\n DataElementNode,\n ExtendBody,\n ParseWarning,\n SingleNodeResult,\n XnlDocument,\n XnlNode,\n TextElementNode,\n UniqueChildrenResult,\n XnlWord,\n} from \"./types\";\n\ninterface ParseState {\n input: string;\n pos: number;\n length: number;\n warnings: ParseWarning[];\n}\n\nexport function parseXnl(input: string): XnlDocument {\n const warnings: ParseWarning[] = [];\n const nodes = parseNodesFromString(input, warnings);\n return { nodes, warnings };\n}\n\nexport function parseXnlSingleNode(input: string): SingleNodeResult {\n const warnings: ParseWarning[] = [];\n const state: ParseState = { input, pos: 0, length: input.length, warnings };\n skipWhitespaceAndComments(state);\n const node = parseNode(state);\n skipWhitespaceAndComments(state);\n if (!eof(state)) {\n throw error(state, \"UNEXPECTED_TOKEN\", \"Expected a single node\");\n }\n return { node, warnings };\n}\n\nexport function parseUniqueChildren(\n name: string,\n input: string,\n metadata: AttributeMap = {},\n attributes: AttributeMap = {}\n): UniqueChildrenResult {\n const warnings: ParseWarning[] = [];\n const children = parseNodesFromString(input, warnings);\n const extend = buildExtendBody(children, name, warnings);\n const node: DataElementNode = { kind: \"DataElement\", tag: name, id: undefined, metadata, attributes, extend };\n return { node, warnings };\n}\n\nfunction parseNodesFromString(input: string, warnings: ParseWarning[]): XnlNode[] {\n const state: ParseState = { input, pos: 0, length: input.length, warnings };\n const nodes: XnlNode[] = [];\n skipWhitespaceAndComments(state);\n while (!eof(state)) {\n nodes.push(parseNode(state));\n skipWhitespaceAndComments(state);\n }\n return nodes;\n}\n\nfunction parseNode(state: ParseState): DataElementNode | TextElementNode {\n consumeChar(state, \"<\", \"UNEXPECTED_TOKEN\", \"Expected '<' to start a node\");\n const tag = readIdentifier(state, \"Expected node name\");\n skipWhitespaceAndComments(state);\n const id = parseOptionalId(state);\n const metadata = parseMetadata(state);\n\n let attributes: AttributeMap | undefined;\n let body: XnlNode[] | undefined;\n let extend: ExtendBody | undefined;\n let text: string | undefined;\n let textMarker: string | undefined;\n\n skipWhitespaceAndComments(state);\n\n // Text node start\n if (consumeIf(state, \"?\")) {\n ({ text, textMarker } = parseTextBody(state, tag));\n return { kind: \"TextElement\", tag, id, metadata, attributes, text, textMarker };\n }\n\n // Parse zero or more section blocks until '>' or '?'\n while (true) {\n if (lookAhead(state, \">\")) {\n state.pos += 1;\n return { kind: \"DataElement\", tag, id, metadata, attributes, body, extend };\n }\n if (lookAhead(state, \"?\")) {\n state.pos += 1;\n if (body || extend) {\n throw error(state, \"INVALID_CONTENT\", `Text block not allowed with array/extend sections in <${tag}>`);\n }\n ({ text, textMarker } = parseTextBody(state, tag));\n return { kind: \"TextElement\", tag, id, metadata, attributes, text, textMarker };\n }\n if (lookAhead(state, \"{\")) {\n if (attributes) {\n throw error(state, \"INVALID_CONTENT\", \"Multiple attribute blocks are not allowed\");\n }\n attributes = parseAttributeBlock(state, tag);\n skipWhitespaceAndComments(state);\n continue;\n }\n if (lookAhead(state, \"[\")) {\n if (text) throw error(state, \"INVALID_CONTENT\", `Text block cannot include array block in <${tag}>`);\n if (body) {\n throw error(state, \"INVALID_CONTENT\", \"Multiple array blocks are not allowed\");\n }\n body = parseArrayBody(state, tag);\n skipWhitespaceAndComments(state);\n continue;\n }\n if (lookAhead(state, \"(\")) {\n if (text) throw error(state, \"INVALID_CONTENT\", `Text block cannot include extend block in <${tag}>`);\n if (extend) {\n throw error(state, \"INVALID_CONTENT\", \"Multiple extend blocks are not allowed\");\n }\n extend = parseExtendBody(state, tag);\n skipWhitespaceAndComments(state);\n continue;\n }\n if (eof(state)) {\n throw error(state, \"UNEXPECTED_EOF\", \"Unexpected end of input\");\n }\n throw error(state, \"UNEXPECTED_TOKEN\", `Unexpected token '${peek(state)}' while parsing node <${tag}>`);\n }\n}\n\nfunction parseMetadata(state: ParseState): AttributeMap {\n const attrs: AttributeMap = {};\n while (true) {\n skipWhitespaceAndComments(state);\n if (lookAhead(state, \"{\") || lookAhead(state, \"[\") || lookAhead(state, \"(\") || lookAhead(state, \"?\") || lookAhead(state, \">\")) {\n break;\n }\n if (eof(state)) {\n throw error(state, \"UNEXPECTED_EOF\", \"Unexpected end while reading metadata\");\n }\n const key = readKey(state, \"Expected metadata key\");\n skipWhitespaceAndComments(state);\n consumeChar(state, \"=\", \"UNEXPECTED_TOKEN\", \"Expected '=' after metadata key\");\n skipWhitespaceAndComments(state);\n attrs[key] = parseValueNode(state);\n }\n return attrs;\n}\n\nfunction parseAttributeBlock(state: ParseState, name: string): AttributeMap {\n consumeChar(state, \"{\", \"UNEXPECTED_TOKEN\", \"Expected '{' to start attribute block\");\n const attrs: AttributeMap = {};\n while (true) {\n skipWhitespaceAndComments(state);\n if (consumeIf(state, \"}\")) {\n return attrs;\n }\n if (eof(state)) {\n throw error(state, \"UNEXPECTED_EOF\", `Missing closing '}' for attributes in <${name}>`);\n }\n const key = readKey(state, \"Expected key in attribute block\");\n skipWhitespaceAndComments(state);\n consumeChar(state, \"=\", \"UNEXPECTED_TOKEN\", \"Expected '=' after key in attribute block\");\n skipWhitespaceAndComments(state);\n attrs[key] = parseValueNode(state);\n }\n}\n\nfunction parseArrayBody(state: ParseState, name: string): XnlNode[] {\n consumeChar(state, \"[\", \"UNEXPECTED_TOKEN\", \"Expected '[' to start array block\");\n const items: XnlNode[] = [];\n while (true) {\n skipWhitespaceAndComments(state);\n if (consumeIf(state, \"]\")) {\n return items;\n }\n if (eof(state)) {\n throw error(state, \"UNEXPECTED_EOF\", `Missing closing ']' for array in <${name}>`);\n }\n if (lookAhead(state, \"<\")) {\n items.push(parseNode(state));\n } else {\n items.push(parseValueNode(state));\n }\n }\n}\n\nfunction parseExtendBody(state: ParseState, name: string): ExtendBody {\n consumeChar(state, \"(\", \"UNEXPECTED_TOKEN\", \"Expected '(' to start extend block\");\n const children: Record<string, DataElementNode | TextElementNode> = {};\n const order: string[] = [];\n while (true) {\n skipWhitespaceAndComments(state);\n if (consumeIf(state, \")\")) {\n return { children, order };\n }\n if (eof(state)) {\n throw error(state, \"UNEXPECTED_EOF\", `Missing closing ')' for extend in <${name}>`);\n }\n if (!lookAhead(state, \"<\")) {\n throw error(state, \"INVALID_CONTENT\", `Extend block inside <${name}> must contain child nodes`);\n }\n const child = parseNode(state);\n mergeChild(children, order, child, name, state.warnings);\n }\n}\n\nfunction parseOptionalId(state: ParseState): XnlWord | undefined {\n if (!consumeIf(state, \"#\")) return undefined;\n const word = parseWordLiteral(state);\n skipWhitespaceAndComments(state);\n return word;\n}\n\nfunction parseTextBody(state: ParseState, name: string): { text: string; textMarker?: string } {\n const marker = readOptionalMarker(state);\n consumeChar(state, \">\", \"UNEXPECTED_TOKEN\", \"Expected '>' after text marker\");\n const start = state.pos;\n\n while (true) {\n const idx = state.input.indexOf(\"</?\", state.pos);\n if (idx === -1) {\n throw error(state, \"MISMATCHED_TAG\", `Missing closing text tag </?${marker ?? \"\"}> for <${name}>`);\n }\n const markerStart = idx + 3;\n let i = markerStart;\n while (i < state.length && isIdentifierChar(state.input[i])) i++;\n const foundMarker = state.input.slice(markerStart, i);\n if (state.input[i] !== \">\") {\n state.pos = idx;\n throw error(\n state,\n \"UNEXPECTED_TOKEN\",\n `Invalid closing text tag for <${name}>; expected '>' after marker '${foundMarker}'`\n );\n }\n if ((marker ?? \"\") !== foundMarker) {\n state.pos = idx;\n throw error(\n state,\n \"MISMATCHED_TAG\",\n `Mismatched text marker for <${name}>: expected '${marker ?? \"\"}' but found '${foundMarker}'`\n );\n }\n const closingIndent = indentationBefore(state.input, idx);\n const content = stripComments(dedentContent(state.input.slice(start, idx), closingIndent));\n state.pos = i + 1;\n return { text: content, textMarker: marker ?? undefined };\n }\n}\n\nfunction buildExtendBody(nodes: XnlNode[], parentName: string, warnings: ParseWarning[]): ExtendBody {\n const children: Record<string, DataElementNode | TextElementNode> = {};\n const order: string[] = [];\n for (const node of nodes) {\n const element = node as DataElementNode | TextElementNode;\n if (element.kind !== \"DataElement\" && element.kind !== \"TextElement\") continue;\n mergeChild(children, order, element, parentName, warnings);\n }\n return { children, order };\n}\n\nfunction mergeChild(\n children: Record<string, DataElementNode | TextElementNode>,\n order: string[],\n node: DataElementNode | TextElementNode,\n parentName: string,\n warnings: ParseWarning[]\n): void {\n if (children[node.tag]) {\n warnings.push({\n code: \"DUPLICATE_CHILD\",\n message: `Duplicate child '${node.tag}' inside <${parentName} ( ... )> (later node overwrote earlier)`,\n parentName,\n childName: node.tag,\n });\n const idx = order.indexOf(node.tag);\n if (idx !== -1) order.splice(idx, 1);\n }\n children[node.tag] = node;\n order.push(node.tag);\n}\n\nfunction parseValueNode(state: ParseState): XnlNode {\n const ch = state.input[state.pos];\n if (ch === \"<\") return parseNode(state);\n if (ch === \"{\") return parseObjectLiteral(state);\n if (ch === \"[\") return parseArrayLiteral(state);\n if (ch === \"'\" || ch === '\"') return parseStringLiteral(state);\n if (startsWithNumber(state)) return parseNumberLiteral(state);\n if (startsWithBoolean(state)) return parseBooleanLiteral(state);\n if (startsWithNull(state)) return parseNullLiteral(state);\n if (isIdentifierStart(ch)) return parseWordLiteral(state);\n\n throw error(state, \"INVALID_LITERAL\", `Unexpected literal starting with '${ch}'`);\n}\n\nfunction parseObjectLiteral(state: ParseState): Record<string, XnlNode> {\n consumeChar(state, \"{\", \"UNEXPECTED_TOKEN\", \"Expected '{' to start object literal\");\n const entries: Record<string, XnlNode> = {};\n while (true) {\n skipWhitespaceAndComments(state);\n if (consumeIf(state, \"}\")) break;\n const key = readKey(state, \"Expected key in object literal\");\n skipWhitespaceAndComments(state);\n consumeChar(state, \"=\", \"UNEXPECTED_TOKEN\", \"Expected '=' after key in object literal\");\n skipWhitespaceAndComments(state);\n entries[key] = parseValueNode(state);\n skipWhitespaceAndComments(state);\n }\n return entries;\n}\n\nfunction parseArrayLiteral(state: ParseState): XnlNode[] {\n consumeChar(state, \"[\", \"UNEXPECTED_TOKEN\", \"Expected '[' to start array literal\");\n const items: XnlNode[] = [];\n while (true) {\n skipWhitespaceAndComments(state);\n if (consumeIf(state, \"]\")) break;\n items.push(parseValueNode(state));\n skipWhitespaceAndComments(state);\n }\n return items;\n}\n\nfunction parseStringLiteral(state: ParseState): string {\n const quote = consume(state);\n let value = \"\";\n while (!eof(state)) {\n const ch = consume(state);\n if (ch === quote) {\n return value;\n }\n if (ch === \"\\\\\") {\n const next = consume(state);\n if (next === \"n\") value += \"\\n\";\n else if (next === \"t\") value += \"\\t\";\n else if (next === '\"') value += '\"';\n else if (next === \"'\") value += \"'\";\n else value += next;\n } else {\n value += ch;\n }\n }\n throw error(state, \"UNEXPECTED_EOF\", \"Unterminated string literal\");\n}\n\nfunction parseNumberLiteral(state: ParseState): number {\n const start = state.pos;\n if (state.input[state.pos] === \"+\" || state.input[state.pos] === \"-\") {\n state.pos++;\n }\n while (isDigit(peek(state))) {\n state.pos++;\n }\n if (peek(state) === \".\") {\n state.pos++;\n if (!isDigit(peek(state))) {\n throw error(state, \"INVALID_LITERAL\", \"Invalid float literal\");\n }\n while (isDigit(peek(state))) state.pos++;\n }\n if (peek(state) && (peek(state) === \"e\" || peek(state) === \"E\")) {\n state.pos++;\n if (peek(state) === \"+\" || peek(state) === \"-\") state.pos++;\n if (!isDigit(peek(state))) throw error(state, \"INVALID_LITERAL\", \"Invalid exponent in number\");\n while (isDigit(peek(state))) state.pos++;\n }\n const raw = state.input.slice(start, state.pos);\n const value = Number(raw);\n if (Number.isNaN(value)) {\n throw error(state, \"INVALID_LITERAL\", \"Invalid number literal\");\n }\n return value;\n}\n\nfunction parseBooleanLiteral(state: ParseState): boolean {\n if (lookAhead(state, \"true\")) {\n state.pos += 4;\n return true;\n }\n if (lookAhead(state, \"false\")) {\n state.pos += 5;\n return false;\n }\n throw error(state, \"INVALID_LITERAL\", \"Invalid boolean literal\");\n}\n\nfunction parseNullLiteral(state: ParseState): null {\n consumeString(state, \"null\", \"INVALID_LITERAL\", \"Invalid null literal\");\n return null;\n}\n\nfunction parseWordLiteral(state: ParseState): XnlWord {\n const first = readIdentifier(state, \"Expected identifier literal\");\n const parts = [first];\n while (lookAhead(state, \".\")) {\n state.pos += 1;\n const next = readIdentifier(state, \"Expected identifier segment after '.'\");\n parts.push(next);\n }\n const name = parts.pop() as string;\n return { kind: \"Word\", namespace: parts, name };\n}\n\nfunction readOptionalMarker(state: ParseState): string | undefined {\n if (!isMarkerStart(peek(state))) return undefined;\n return readMarker(state);\n}\n\nfunction readMarker(state: ParseState): string {\n const start = state.pos;\n while (!eof(state) && isIdentifierChar(state.input[state.pos])) {\n state.pos++;\n }\n return state.input.slice(start, state.pos);\n}\n\nfunction readKey(state: ParseState, message: string): string {\n const ch = peek(state);\n if (ch === \"\\\"\" || ch === \"'\") {\n return parseStringLiteral(state);\n }\n return readIdentifier(state, message);\n}\n\nfunction readIdentifier(state: ParseState, message: string): string {\n const start = state.pos;\n const first = state.input[state.pos];\n if (!isIdentifierStart(first)) {\n throw error(state, \"UNEXPECTED_TOKEN\", message);\n }\n state.pos++;\n while (!eof(state) && isIdentifierChar(state.input[state.pos])) {\n state.pos++;\n }\n return state.input.slice(start, state.pos);\n}\n\nfunction startsWithNumber(state: ParseState): boolean {\n const ch = state.input[state.pos];\n if (ch === \"+\" || ch === \"-\") {\n const next = peek(state, 1);\n return next !== undefined && isDigit(next);\n }\n return isDigit(ch);\n}\n\nfunction startsWithBoolean(state: ParseState): boolean {\n return lookAhead(state, \"true\") || lookAhead(state, \"false\");\n}\n\nfunction startsWithNull(state: ParseState): boolean {\n return lookAhead(state, \"null\");\n}\n\nfunction consumeIf(state: ParseState, token: string): boolean {\n if (lookAhead(state, token)) {\n state.pos += token.length;\n return true;\n }\n return false;\n}\n\nfunction consumeString(state: ParseState, token: string, code: any, message: string): void {\n if (!lookAhead(state, token)) {\n throw error(state, code, message);\n }\n state.pos += token.length;\n}\n\nfunction lookAhead(state: ParseState, token: string): boolean {\n return state.input.startsWith(token, state.pos);\n}\n\nfunction consumeChar(state: ParseState, expected: string, code: any, message: string): string {\n const ch = consume(state);\n if (ch !== expected) {\n throw error(state, code, message);\n }\n return ch;\n}\n\nfunction consume(state: ParseState): string {\n if (eof(state)) throw error(state, \"UNEXPECTED_EOF\", \"Unexpected end of input\");\n const ch = state.input[state.pos];\n state.pos += 1;\n return ch;\n}\n\nfunction skipWhitespaceAndComments(state: ParseState): void {\n while (!eof(state)) {\n const ch = state.input[state.pos];\n if (isWhitespace(ch)) {\n state.pos++;\n continue;\n }\n if (lookAhead(state, \"<!--\")) {\n skipComment(state);\n continue;\n }\n break;\n }\n}\n\nfunction indentationBefore(input: string, index: number): string {\n const lastNewline = input.lastIndexOf(\"\\n\", index - 1);\n if (lastNewline === -1) return \"\";\n const indent = input.slice(lastNewline + 1, index);\n return /^[ \\t]*$/.test(indent) ? indent : \"\";\n}\n\nfunction dedentContent(content: string, indent: string): string {\n if (!content.includes(\"\\n\") || indent === \"\") return content;\n const lines = content.split(\"\\n\");\n const startIndex = lines[0].length === 0 ? 1 : 0;\n const dedented = lines.slice(startIndex).map((line) => {\n let remove = 0;\n while (\n remove < indent.length &&\n remove < line.length &&\n line[remove] === indent[remove] &&\n (indent[remove] === \" \" || indent[remove] === \"\\t\")\n ) {\n remove++;\n }\n return line.slice(remove);\n });\n return dedented.join(\"\\n\");\n}\n\nfunction stripComments(content: string): string {\n return content.replace(/<!--[\\\\s\\\\S]*?-->/g, \"\");\n}\n\nfunction eof(state: ParseState): boolean {\n return state.pos >= state.length;\n}\n\nfunction peek(state: ParseState, offset = 0): string | undefined {\n const idx = state.pos + offset;\n return idx < state.length ? state.input[idx] : undefined;\n}\n\nfunction isIdentifierStart(ch: string | undefined): boolean {\n if (!ch) return false;\n return /[A-Za-z_]/.test(ch);\n}\n\nfunction isIdentifierChar(ch: string | undefined): boolean {\n if (!ch) return false;\n return /[A-Za-z0-9_-]/.test(ch);\n}\n\nfunction isMarkerStart(ch: string | undefined): boolean {\n return isIdentifierStart(ch) || isDigit(ch);\n}\n\nfunction isWhitespace(ch: string): boolean {\n return ch === \" \" || ch === \"\\t\" || ch === \"\\n\" || ch === \"\\r\";\n}\n\nfunction isDigit(ch: string | undefined): boolean {\n return ch !== undefined && ch >= \"0\" && ch <= \"9\";\n}\n\nfunction error(state: ParseState, code: any, message: string): XnlParseError {\n return new XnlParseError(code, message, state.input, state.pos);\n}\n\nfunction skipComment(state: ParseState): void {\n if (!lookAhead(state, \"<!--\")) return;\n const end = state.input.indexOf(\"-->\", state.pos + 4);\n if (end === -1) {\n throw error(state, \"UNEXPECTED_EOF\", \"Unterminated comment\");\n }\n state.pos = end + 3;\n}\n","export type ValueLiteral = string | boolean | null | number;\n\nexport type AttributeMap = Record<string, XnlNode>;\n\nexport interface ExtendBody {\n order: string[];\n children: Record<string, ElementNode>;\n}\n\nexport type ElementNode = DataElementNode | TextElementNode;\nexport type ElementNodeKind = 'DataElement' | 'TextElement';\n\nexport interface DataElementNode {\n kind: \"DataElement\";\n tag: string;\n id?: XnlWord;\n metadata: AttributeMap;\n attributes?: AttributeMap;\n body?: XnlNode[];\n extend?: ExtendBody;\n}\n\nexport interface XnlWord {\n kind: \"Word\";\n namespace: string[];\n name: string;\n}\n\nexport interface TextElementNode {\n kind: \"TextElement\";\n tag: string;\n id?: XnlWord;\n metadata: AttributeMap;\n attributes?: AttributeMap;\n text?: string;\n textMarker?: string;\n}\n\nexport interface CommentNode {\n kind: \"Comment\";\n value: string;\n}\n\nexport type ContainerNode = Array<XnlNode> | Object | ElementNode;\n\nexport type XnlNode = ValueLiteral | XnlWord | ContainerNode | CommentNode;\n\nexport function isWord(value: any): value is XnlWord {\n return value !== null && typeof value === \"object\" && (value as any).kind === \"Word\";\n}\n\nexport function wordToString(word?: XnlWord | null): string | undefined {\n if (!word) return undefined;\n const ns = word.namespace ?? [];\n const parts = [...ns.filter(Boolean), word.name].filter((p) => p !== undefined && p !== null);\n const str = parts.join(\".\");\n return str.length ? str : undefined;\n}\n\n\nexport type ParseWarningCode = \"DUPLICATE_CHILD\";\n\nexport interface ParseWarning {\n code: ParseWarningCode;\n message: string;\n parentName: string;\n childName: string;\n}\n\nexport interface XnlDocument {\n nodes: XnlNode[];\n warnings?: ParseWarning[];\n}\n\nexport interface SingleNodeResult {\n node: XnlNode;\n warnings: ParseWarning[];\n}\n\nexport interface UniqueChildrenResult {\n node: XnlNode;\n warnings: ParseWarning[];\n}\n","import {\n AttributeMap,\n CommentNode,\n DataElementNode,\n ElementNode,\n TextElementNode,\n XnlDocument,\n XnlNode,\n XnlWord,\n isWord,\n wordToString,\n} from \"./types\";\n\ninterface StringifyOptions {\n pretty?: boolean;\n indent?: number | string;\n}\n\ninterface StringifyState {\n pretty: boolean;\n indent: string;\n depth: number;\n}\n\nexport function stringify(value: XnlDocument | XnlNode, options: StringifyOptions = {}): string {\n const pretty = options.pretty === true;\n const indent = typeof options.indent === \"string\" ? options.indent : \" \".repeat(options.indent ?? 0);\n const state: StringifyState = { pretty, indent, depth: 0 };\n const separator = pretty ? \"\\n\" : \"\";\n const content = isDocument(value)\n ? (value.nodes as XnlNode[]).map((n) => serializeNode(n, state)).join(separator)\n : serializeNode(value as XnlNode, state);\n return content;\n}\n\nfunction isDocument(value: any): value is XnlDocument {\n return value && Array.isArray((value as XnlDocument).nodes);\n}\n\nfunction serializeNode(node: XnlNode, state: StringifyState): string {\n if (isComment(node)) {\n const pad = state.pretty ? state.indent.repeat(state.depth) : \"\";\n return `${pad}<!-- ${node.value} -->`;\n }\n if (isElement(node)) {\n const pad = state.pretty ? state.indent.repeat(state.depth) : \"\";\n if (node.kind === \"TextElement\") {\n const metaStr = serializeInlineAttributes(node.metadata, state);\n const attrStr = node.attributes ? ` ${serializeAttributeBlock(node.attributes, state)}` : \"\";\n const idPart = node.id ? ` #${formatWord(node.id)}` : \"\";\n const marker = node.textMarker ?? \"\";\n return `${pad}<${node.tag}${idPart}${metaStr}${attrStr} ?${marker}>${node.text ?? \"\"}</?${marker}>`;\n }\n const metaStr = serializeInlineAttributes(node.metadata, state);\n const attrPart = node.attributes ? ` ${serializeAttributeBlock(node.attributes, state)}` : \"\";\n const bodyPart = node.body ? ` ${serializeArrayBlock(node.body, state)}` : \"\";\n const extendPart = node.extend ? ` ${serializeExtendBlock(node.extend, state)}` : \"\";\n const idPart = node.id ? ` #${formatWord(node.id)}` : \"\";\n return `${pad}<${node.tag}${idPart}${metaStr}${attrPart}${bodyPart}${extendPart}>`;\n }\n if (Array.isArray(node)) {\n return serializeArrayLiteral(node, state);\n }\n if (isPlainObject(node)) {\n return serializeObjectLiteral(node as Record<string, XnlNode>, state);\n }\n return serializePrimitive(node as any);\n}\n\nfunction serializeInlineAttributes(attrs: AttributeMap, state: StringifyState): string {\n const parts: string[] = [];\n for (const [key, value] of Object.entries(attrs)) {\n parts.push(`${serializeKey(key)}=${serializeValueNode(value, state)}`);\n }\n return parts.length ? \" \" + parts.join(\" \") : \"\";\n}\n\nfunction serializeAttributeBlock(attrs: AttributeMap, state: StringifyState): string {\n if (!state.pretty) {\n const entries = Object.entries(attrs)\n .map(([k, v]) => `${serializeKey(k)} = ${serializeValueNode(v, state)}`)\n .join(\" \");\n return `{ ${entries} }`;\n }\n const nextDepth = state.depth + 1;\n const pad = state.indent.repeat(nextDepth);\n const lines = Object.entries(attrs).map(\n ([k, v]) => `${pad}${serializeKey(k)} = ${serializeValueNode(v, { ...state, depth: nextDepth })}`\n );\n const closingPad = state.indent.repeat(state.depth);\n return `{\\n${lines.join(\"\\n\")}\\n${closingPad}}`;\n}\n\nfunction serializeArrayBlock(items: XnlNode[], state: StringifyState): string {\n if (!state.pretty) {\n const serialized = items.map((item) => serializeValueNode(item, state)).join(\" \");\n return `[ ${serialized} ]`;\n }\n const nextDepth = state.depth + 1;\n const pad = state.indent.repeat(nextDepth);\n const lines = items.map((item) => `${pad}${serializeValueNode(item, { ...state, depth: nextDepth })}`);\n const closingPad = state.indent.repeat(state.depth);\n return `[\\n${lines.join(\"\\n\")}\\n${closingPad}]`;\n}\n\nfunction serializeExtendBlock(extend: { order: string[]; children: Record<string, ElementNode> }, state: StringifyState): string {\n if (!state.pretty) {\n const children = extend.order.map((name) => serializeNode(extend.children[name], state)).join(\" \");\n return `( ${children} )`;\n }\n const nextDepth = state.depth + 1;\n const pad = state.indent.repeat(nextDepth);\n const childStrings = extend.order.map((name) => `${pad}${serializeNode(extend.children[name], { ...state, depth: nextDepth })}`);\n const closingPad = state.indent.repeat(state.depth);\n return `(\\n${childStrings.join(\"\\n\")}\\n${closingPad})`;\n}\n\nfunction serializeValueNode(node: XnlNode, state: StringifyState): string {\n if (isComment(node) || isElement(node)) return serializeNode(node, state);\n if (isWord(node)) return formatWord(node);\n if (Array.isArray(node)) return serializeArrayLiteral(node, state);\n if (isPlainObject(node)) return serializeObjectLiteral(node as Record<string, XnlNode>, state);\n return serializePrimitive(node as any);\n}\n\nfunction serializePrimitive(value: string | number | boolean | null): string {\n if (value === null) return \"null\";\n if (typeof value === \"string\") return `\"${escapeString(value)}\"`;\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\n return String(value);\n}\n\nfunction serializeObjectLiteral(obj: Record<string, XnlNode>, state: StringifyState): string {\n if (!state.pretty) {\n return `{ ${Object.entries(obj)\n .map(([k, v]) => `${serializeKey(k)} = ${serializeValueNode(v, state)}`)\n .join(\" \")} }`;\n }\n const nextDepth = state.depth + 1;\n const pad = state.indent.repeat(nextDepth);\n const lines = Object.entries(obj).map(\n ([k, v]) => `${pad}${serializeKey(k)} = ${serializeValueNode(v, { ...state, depth: nextDepth })}`\n );\n const closingPad = state.indent.repeat(state.depth);\n return `{\\n${lines.join(\"\\n\")}\\n${closingPad}}`;\n}\n\nfunction serializeArrayLiteral(arr: XnlNode[], state: StringifyState): string {\n if (!state.pretty) {\n return `[${arr.map((v) => serializeValueNode(v, state)).join(\" \")}]`;\n }\n const nextDepth = state.depth + 1;\n const pad = state.indent.repeat(nextDepth);\n const lines = arr.map((v) => `${pad}${serializeValueNode(v, { ...state, depth: nextDepth })}`);\n const closingPad = state.indent.repeat(state.depth);\n return `[\\n${lines.join(\"\\n\")}\\n${closingPad}]`;\n}\n\nfunction isComment(node: XnlNode): node is CommentNode {\n return typeof node === \"object\" && node !== null && (node as CommentNode).kind === \"Comment\";\n}\n\nfunction isElement(node: XnlNode): node is ElementNode {\n return (\n typeof node === \"object\" &&\n node !== null &&\n ((node as DataElementNode).kind === \"DataElement\" || (node as TextElementNode).kind === \"TextElement\")\n );\n}\n\nfunction isPlainObject(value: any): value is Record<string, XnlNode> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value) && (value as any).kind === undefined;\n}\n\nfunction serializeKey(key: string): string {\n if (/^[A-Za-z_][A-Za-z0-9_-]*$/.test(key)) return key;\n return `\"${escapeString(key)}\"`;\n}\n\nfunction escapeString(value: string): string {\n return value\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\r/g, \"\\\\r\");\n}\n\nfunction formatWord(word: XnlWord): string {\n return wordToString(word) ?? \"\";\n}\n","import {\n AttributeMap,\n DataElementNode,\n ElementNode,\n ExtendBody,\n TextElementNode,\n XnlDocument,\n XnlNode,\n isWord,\n wordToString,\n XnlWord,\n} from \"../types\";\n\nexport type PathItemType = \"UniqueName\" | \"MetadataSelector\" | \"InstanceProperty\" | \"MapKey\" | \"ListIndex\";\n\nexport interface PathItem {\n type: PathItemType;\n value: string;\n}\n\nexport type XnlPath = PathItem[];\n\nexport type MetadataSelectorMode = \"identity\" | \"metadata\";\n\nexport interface ResolveOptions {\n strict?: boolean;\n metadataIdMode?: MetadataSelectorMode;\n}\n\nexport interface SetOptions extends ResolveOptions {\n mode?: \"insert\" | \"replace\";\n}\n\nexport class XnlPathError extends Error {}\n\nexport function parsePath(input: string): XnlPath {\n if (!input) return [];\n const items: PathItem[] = [];\n let i = 0;\n while (i < input.length) {\n const c = input[i];\n const next = input[i + 1];\n if (c === \"#\") {\n i += 1;\n const { value, length } = readWordToken(input, i);\n items.push({ type: \"UniqueName\", value });\n i += length;\n continue;\n }\n if (c === \"<\") {\n const parsed = parseMetadataSelector(input, i);\n items.push(parsed.item);\n i = parsed.nextIndex;\n continue;\n }\n if (c === \":\" && next === \":\") {\n i += 2;\n if (input[i] === \"'\") {\n i += 1;\n const end = input.indexOf(\"'\", i);\n if (end === -1) throw new XnlPathError(\"Unterminated map key literal\");\n const key = input.slice(i, end);\n items.push({ type: \"MapKey\", value: key });\n i = end + 1;\n } else {\n const digits = readWhile(input, i, (ch) => /[0-9]/.test(ch));\n if (!digits) throw new XnlPathError(\"ListIndex must be numeric\");\n items.push({ type: \"ListIndex\", value: digits });\n i += digits.length;\n }\n continue;\n }\n if (c === \":\") {\n i += 1;\n const value = readUntilDelimiter(input, i);\n if (!value) throw new XnlPathError(\"InstanceProperty cannot be empty\");\n items.push({ type: \"InstanceProperty\", value });\n i += value.length;\n continue;\n }\n if (c === \".\") {\n throw new XnlPathError(\"Namespace/static segments are not supported for XNL paths\");\n }\n throw new XnlPathError(`Unexpected character '${c}' at position ${i}`);\n }\n return items;\n}\n\nexport function resolvePath(target: XnlDocument | XnlNode, path: string | XnlPath, options: ResolveOptions = {}): any {\n const { strict = true, metadataIdMode } = options;\n const parsed = Array.isArray(path) ? path : parsePath(path);\n let current: any = target;\n\n for (let i = 0; i < parsed.length; i++) {\n const item = parsed[i];\n if (item.type === \"UniqueName\") {\n const found = findByUniqueName(target, item.value);\n if (!found) {\n if (strict) throw new XnlPathError(`UniqueName '${item.value}' not found`);\n return undefined;\n }\n current = found;\n continue;\n }\n if (item.type === \"MetadataSelector\") {\n const isLast = i === parsed.length - 1;\n if (metadataIdMode === \"identity\") {\n const selector = parseMetadataSelectorValue(item.value);\n const found =\n selector.key === \"id\"\n ? findByUniqueName(target, selector.value) ?? findByMetadataSelector(target, item.value)\n : findByMetadataSelector(target, item.value);\n if (!found) {\n if (strict) throw new XnlPathError(`MetadataSelector '${item.value}' not found`);\n return undefined;\n }\n current = found;\n continue;\n }\n\n const allFound = findAllByMetadataSelector(target, item.value);\n if (allFound.length === 0) {\n if (strict) throw new XnlPathError(`MetadataSelector '${item.value}' not found`);\n return undefined;\n }\n\n // Preserve traversal semantics for non-terminal selectors while exposing all\n // matches when the selector is terminal.\n current = isLast ? allFound : allFound[0];\n continue;\n }\n\n if (item.type === \"InstanceProperty\") {\n if (current && isDataElement(current)) {\n current = (current as any)[item.value];\n } else if (current && isTextElement(current)) {\n current = (current as any)[item.value];\n } else if (isPlainObject(current) || isDocument(current)) {\n current = (current as any)[item.value];\n } else {\n if (strict) throw new XnlPathError(`InstanceProperty '${item.value}' not allowed on current node`);\n return undefined;\n }\n if (current === undefined && strict) {\n throw new XnlPathError(`InstanceProperty '${item.value}' not found`);\n }\n continue;\n }\n if (item.type === \"MapKey\") {\n if (isExtendBody(current)) {\n const child = current.children[item.value];\n if (!child && strict) throw new XnlPathError(`Extend child '${item.value}' not found`);\n current = child;\n continue;\n }\n if (!isPlainObject(current)) {\n if (strict) throw new XnlPathError(\"MapKey requires a map/object target\");\n return undefined;\n }\n if (!(item.value in (current as any)) && strict) {\n throw new XnlPathError(`Key '${item.value}' not found`);\n }\n current = (current as any)[item.value];\n continue;\n }\n if (item.type === \"ListIndex\") {\n const index = Number(item.value);\n if (isExtendBody(current)) {\n const tag = current.order[index];\n if (tag === undefined) {\n if (strict) throw new XnlPathError(`Extend index ${index} out of bounds`);\n return undefined;\n }\n current = current.children[tag];\n continue;\n }\n if (!Array.isArray(current)) {\n if (strict) throw new XnlPathError(\"ListIndex requires an array target\");\n return undefined;\n }\n if (index < 0 || index >= current.length) {\n if (strict) throw new XnlPathError(`Index ${index} out of bounds`);\n return undefined;\n }\n current = current[index];\n }\n }\n return current;\n}\n\nexport function setPathValue(\n target: XnlDocument | XnlNode,\n path: string | XnlPath,\n value: any,\n options: SetOptions = {}\n): any {\n const { mode = \"insert\", strict = true } = options;\n const parsed = Array.isArray(path) ? path : parsePath(path);\n if (parsed.length === 0) {\n return value;\n }\n const { parent, last } = getParentAndLast(target, parsed, { strict, createMissing: true });\n\n switch (last.type) {\n case \"InstanceProperty\":\n (parent as any)[last.value] = value;\n return target;\n case \"MapKey\":\n if (isExtendBody(parent)) {\n parent.children[last.value] = value;\n if (!parent.order.includes(last.value)) {\n parent.order.push(last.value);\n }\n return target;\n }\n ensureMap(parent, strict);\n (parent as any)[last.value] = value;\n return target;\n case \"ListIndex\": {\n const idx = Number(last.value);\n if (isExtendBody(parent)) {\n if (mode === \"insert\") {\n parent.order.splice(idx, 0, value.tag ?? String(idx));\n parent.children[value.tag ?? String(idx)] = value;\n } else {\n const tag = parent.order[idx];\n if (tag === undefined && strict) {\n throw new XnlPathError(`Extend index ${idx} out of bounds`);\n }\n const useTag = value?.tag ?? tag;\n parent.order[idx] = useTag;\n parent.children[useTag] = value;\n }\n return target;\n }\n if (!Array.isArray(parent)) {\n throw new XnlPathError(\"ListIndex requires an array target\");\n }\n if (mode === \"insert\") {\n const insertAt = idx < 0 ? 0 : idx > parent.length ? parent.length : idx;\n parent.splice(insertAt, 0, value);\n } else {\n if (idx < 0 || idx >= parent.length) {\n throw new XnlPathError(`Index ${idx} out of bounds for replace`);\n }\n parent[idx] = value;\n }\n return target;\n }\n default:\n throw new XnlPathError(`Unsupported path item ${last.type}`);\n }\n}\n\nexport function deleteAtPath(target: XnlDocument | XnlNode, path: string | XnlPath, options: ResolveOptions = {}): any {\n const { strict = true } = options;\n const parsed = Array.isArray(path) ? path : parsePath(path);\n if (parsed.length === 0) return undefined;\n const { parent, last } = getParentAndLast(target, parsed, { strict, createMissing: false });\n switch (last.type) {\n case \"InstanceProperty\":\n if (isPlainObject(parent) || isDataElement(parent) || isTextElement(parent) || isDocument(parent)) {\n if (!(last.value in (parent as any)) && strict) {\n throw new XnlPathError(`InstanceProperty '${last.value}' not found`);\n }\n delete (parent as any)[last.value];\n return target;\n }\n throw new XnlPathError(\"InstanceProperty delete requires an object-like target\");\n case \"MapKey\":\n if (isExtendBody(parent)) {\n if (!(last.value in parent.children) && strict) {\n throw new XnlPathError(`Extend child '${last.value}' not found`);\n }\n delete parent.children[last.value];\n parent.order = parent.order.filter((t) => t !== last.value);\n return target;\n }\n ensureMap(parent, strict);\n delete (parent as any)[last.value];\n return target;\n case \"ListIndex\": {\n const idx = Number(last.value);\n if (isExtendBody(parent)) {\n if (idx < 0 || idx >= parent.order.length) {\n if (strict) throw new XnlPathError(`Extend index ${idx} out of bounds`);\n return target;\n }\n const tag = parent.order[idx];\n parent.order.splice(idx, 1);\n delete parent.children[tag];\n return target;\n }\n if (!Array.isArray(parent)) throw new XnlPathError(\"ListIndex delete requires an array target\");\n if (idx < 0 || idx >= parent.length) {\n if (strict) throw new XnlPathError(`Index ${idx} out of bounds`);\n return target;\n }\n parent.splice(idx, 1);\n return target;\n }\n default:\n throw new XnlPathError(`Unsupported path item ${last.type}`);\n }\n}\n\nfunction getParentAndLast(\n target: XnlDocument | XnlNode,\n path: XnlPath,\n opts: ResolveOptions & { createMissing: boolean }\n): { parent: any; last: PathItem } {\n if (path.length === 0) throw new XnlPathError(\"Path is empty\");\n const { createMissing, strict = true } = opts;\n const parentPath = path.slice(0, -1);\n const last = path[path.length - 1];\n let current: any = target;\n for (const item of parentPath) {\n if (item.type === \"UniqueName\") {\n const found = findByUniqueName(target, item.value);\n if (!found) {\n if (strict) throw new XnlPathError(`UniqueName '${item.value}' not found`);\n return { parent: undefined, last };\n }\n current = found;\n continue;\n }\n if (item.type === \"MetadataSelector\") {\n const selector = parseMetadataSelectorValue(item.value);\n const found =\n selector.key === \"id\"\n ? findByUniqueName(target, selector.value) ?? findByMetadataSelector(target, item.value)\n : findByMetadataSelector(target, item.value);\n if (!found) {\n if (strict) throw new XnlPathError(`MetadataSelector '${item.value}' not found`);\n return { parent: undefined, last };\n }\n current = found;\n continue;\n }\n if (item.type === \"InstanceProperty\") {\n if (current && isDataElement(current)) {\n if ((current as any)[item.value] === undefined && createMissing) {\n if (item.value === \"metadata\" || item.value === \"attributes\") {\n (current as any)[item.value] = {};\n } else if (item.value === \"body\") {\n (current as any)[item.value] = [];\n } else if (item.value === \"extend\") {\n (current as any)[item.value] = { order: [], children: {} } as ExtendBody;\n }\n }\n current = (current as any)[item.value];\n } else if (current && isTextElement(current)) {\n current = (current as any)[item.value];\n } else if (isPlainObject(current) || isDocument(current)) {\n if ((current as any)[item.value] === undefined && createMissing && isPlainObject(current)) {\n (current as any)[item.value] = {};\n }\n current = (current as any)[item.value];\n } else {\n throw new XnlPathError(`InstanceProperty '${item.value}' not allowed on current node`);\n }\n if (current === undefined && strict) {\n throw new XnlPathError(`InstanceProperty '${item.value}' not found`);\n }\n continue;\n }\n if (item.type === \"MapKey\") {\n if (isExtendBody(current)) {\n const child = current.children[item.value];\n if (!child && createMissing) {\n current.children[item.value] = undefined as any;\n if (!current.order.includes(item.value)) {\n current.order.push(item.value);\n }\n }\n current = current.children[item.value];\n if (current === undefined && strict && !createMissing) {\n throw new XnlPathError(`Extend child '${item.value}' not found`);\n }\n continue;\n }\n ensureMap(current, strict);\n if (!(item.value in (current as any)) && createMissing) {\n (current as any)[item.value] = {};\n }\n current = (current as any)[item.value];\n if (current === undefined && strict && !createMissing) {\n throw new XnlPathError(`Key '${item.value}' not found`);\n }\n continue;\n }\n if (item.type === \"ListIndex\") {\n const idx = Number(item.value);\n if (isExtendBody(current)) {\n if (idx < 0 || idx > current.order.length) {\n throw new XnlPathError(`Extend index ${idx} out of bounds`);\n }\n const tag = current.order[idx];\n if (!tag && createMissing) {\n const placeholder = String(idx);\n current.order[idx] = placeholder;\n current.children[placeholder] = undefined as any;\n current = current.children[placeholder];\n } else {\n if (tag === undefined && strict) {\n throw new XnlPathError(`Extend index ${idx} out of bounds`);\n }\n current = current.children[tag];\n }\n continue;\n }\n if (!Array.isArray(current)) {\n if (!strict && !current) return { parent: undefined, last };\n throw new XnlPathError(\"ListIndex requires an array target\");\n }\n if (idx < 0 || idx > current.length) {\n throw new XnlPathError(`Index ${idx} out of bounds`);\n }\n if (createMissing && idx === current.length) {\n current.push(undefined as any);\n }\n current = current[idx];\n continue;\n }\n }\n return { parent: current, last };\n}\n\nfunction readUntilDelimiter(input: string, start: number): string {\n let i = start;\n let value = \"\";\n while (i < input.length) {\n const c = input[i];\n if (c === \":\" || c === \"#\" || c === \".\" || c === \"<\") break;\n value += c;\n i++;\n }\n return value;\n}\n\nfunction readWordToken(input: string, start: number): { value: string; length: number } {\n let i = start;\n let value = \"\";\n while (i < input.length) {\n const c = input[i];\n if (c === \":\" || c === \"#\") break;\n value += c;\n i++;\n }\n if (!value) throw new XnlPathError(\"UniqueName cannot be empty\");\n const segments = value.split(\".\");\n for (const segment of segments) {\n if (!/^[A-Za-z_][A-Za-z0-9_-]*$/.test(segment)) {\n throw new XnlPathError(\"UniqueName must use word identifiers (letters/digits/_/- with dots for namespace)\");\n }\n }\n return { value, length: value.length };\n}\n\nfunction readWhile(input: string, start: number, pred: (c: string) => boolean): string {\n let i = start;\n let out = \"\";\n while (i < input.length && pred(input[i])) {\n out += input[i];\n i++;\n }\n return out;\n}\n\nfunction findByUniqueName(target: XnlDocument | XnlNode, id: string): ElementNode | undefined {\n const roots: XnlNode[] = isDocument(target) ? target.nodes : [target as XnlNode];\n for (const root of roots) {\n const found = findInNode(root, id);\n if (found) return found;\n }\n return undefined;\n}\n\nfunction findByMetadataSelector(target: XnlDocument | XnlNode, selector: string): ElementNode | undefined {\n const parsed = parseMetadataSelectorValue(selector);\n const roots: XnlNode[] = isDocument(target) ? target.nodes : [target as XnlNode];\n for (const root of roots) {\n const found = findInNodeByMeta(root, parsed.key, parsed.value);\n if (found) return found;\n }\n return undefined;\n}\n\nfunction findAllByMetadataSelector(target: XnlDocument | XnlNode, selector: string): ElementNode[] {\n const parsed = parseMetadataSelectorValue(selector);\n const roots: XnlNode[] = isDocument(target) ? target.nodes : [target as XnlNode];\n const out: ElementNode[] = [];\n for (const root of roots) {\n collectInNodeByMeta(root, parsed.key, parsed.value, out);\n }\n return out;\n}\n\nfunction findInNodeByMeta(node: XnlNode, key: string, value: string): ElementNode | undefined {\n if (isElementNode(node)) {\n const meta = (node as any).metadata as AttributeMap | undefined;\n const raw = meta ? (meta as any)[key] : undefined;\n const rawStr = typeof raw === \"string\" ? raw : isWord(raw) ? wordToString(raw) : undefined;\n if (rawStr === value) return node;\n\n if (node.kind === \"DataElement\") {\n if (node.body) {\n for (const child of node.body) {\n const found = findInNodeByMeta(child, key, value);\n if (found) return found;\n }\n }\n if (node.extend) {\n for (const tag of node.extend.order) {\n const child = node.extend.children[tag];\n if (!child) continue;\n const found = findInNodeByMeta(child, key, value);\n if (found) return found;\n }\n }\n }\n\n return undefined;\n }\n\n if (Array.isArray(node)) {\n for (const child of node) {\n const found = findInNodeByMeta(child, key, value);\n if (found) return found;\n }\n } else if (isPlainObject(node)) {\n for (const k of Object.keys(node)) {\n const found = findInNodeByMeta((node as any)[k], key, value);\n if (found) return found;\n }\n }\n\n return undefined;\n}\n\nfunction collectInNodeByMeta(node: XnlNode, key: string, value: string, out: ElementNode[]): void {\n if (isElementNode(node)) {\n const meta = (node as any).metadata as AttributeMap | undefined;\n const raw = meta ? (meta as any)[key] : undefined;\n const rawStr = typeof raw === \"string\" ? raw : isWord(raw) ? wordToString(raw) : undefined;\n if (rawStr === value) out.push(node);\n\n if (node.kind === \"DataElement\") {\n if (node.body) {\n for (const child of node.body) {\n collectInNodeByMeta(child, key, value, out);\n }\n }\n if (node.extend) {\n for (const tag of node.extend.order) {\n const child = node.extend.children[tag];\n if (!child) continue;\n collectInNodeByMeta(child, key, value, out);\n }\n }\n }\n return;\n }\n\n if (Array.isArray(node)) {\n for (const child of node) {\n collectInNodeByMeta(child, key, value, out);\n }\n } else if (isPlainObject(node)) {\n for (const k of Object.keys(node)) {\n collectInNodeByMeta((node as any)[k], key, value, out);\n }\n }\n}\n\nexport function parseMetadataSelectorValue(selector: string): { key: string; value: string } {\n const m = selector.match(/^<([A-Za-z_][A-Za-z0-9_-]*)=(\"([^\"]*)\"|'([^']*)')>$/);\n if (!m) throw new XnlPathError(\"Invalid metadata selector\");\n const key = m[1];\n const value = m[3] ?? m[4] ?? \"\";\n return { key, value };\n}\n\nfunction parseMetadataSelector(input: string, start: number): { item: PathItem; nextIndex: number } {\n if (input[start] !== \"<\") throw new XnlPathError(\"Metadata selector must start with '<'\");\n const end = input.indexOf(\">\", start);\n if (end === -1) throw new XnlPathError(\"Unterminated metadata selector\");\n const raw = input.slice(start, end + 1);\n parseMetadataSelectorValue(raw);\n return { item: { type: \"MetadataSelector\", value: raw }, nextIndex: end + 1 };\n}\n\nfunction findInNode(node: XnlNode, id: string): ElementNode | undefined {\n if (isElementNode(node)) {\n if (readId(node) === id) return node;\n if (node.kind === \"DataElement\") {\n if (node.body) {\n for (const child of node.body) {\n const found = findInNode(child, id);\n if (found) return found;\n }\n }\n if (node.extend) {\n for (const tag of node.extend.order) {\n const child = node.extend.children[tag];\n if (!child) continue;\n const found = findInNode(child, id);\n if (found) return found;\n }\n }\n }\n return undefined;\n }\n if (Array.isArray(node)) {\n for (const child of node) {\n const found = findInNode(child, id);\n if (found) return found;\n }\n } else if (isPlainObject(node)) {\n for (const key of Object.keys(node)) {\n const found = findInNode((node as any)[key], id);\n if (found) return found;\n }\n }\n return undefined;\n}\n\nfunction isElementNode(node: any): node is ElementNode {\n return node && (node.kind === \"DataElement\" || node.kind === \"TextElement\");\n}\n\nfunction isDataElement(node: any): node is DataElementNode {\n return node && node.kind === \"DataElement\";\n}\n\nfunction isTextElement(node: any): node is TextElementNode {\n return node && node.kind === \"TextElement\";\n}\n\nfunction isExtendBody(value: any): value is ExtendBody {\n return value && typeof value === \"object\" && Array.isArray(value.order) && value.children;\n}\n\nfunction isDocument(value: any): value is XnlDocument {\n return value && typeof value === \"object\" && Array.isArray((value as any).nodes);\n}\n\nfunction isPlainObject(value: any): value is Record<string, any> {\n return (\n value !== null &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n !isElementNode(value) &&\n !isExtendBody(value) &&\n !isWord(value)\n );\n}\n\nfunction ensureMap(value: any, strict: boolean) {\n if (!isPlainObject(value)) {\n if (strict) throw new XnlPathError(\"Target is not a map/object\");\n }\n}\n\nfunction readId(node: ElementNode | undefined): string | undefined {\n if (!node) return undefined;\n const idValue = (node as any).id as XnlWord | undefined;\n const wordStr = wordToString(idValue);\n if (wordStr) return wordStr;\n const metaId = (node as any).metadata?.id;\n if (isWord(metaId)) return wordToString(metaId);\n if (typeof metaId === \"string\") return metaId;\n return undefined;\n}\n","import { deleteAtPath, parsePath, resolvePath, setPathValue, XnlPath, XnlPathError, PathItem } from \"../path\";\nimport { DataElementNode, TextElementNode, XnlNode, isWord, wordToString } from \"../types\";\n\nexport type MutationType =\n | \"TREE_ADD\"\n | \"TREE_DELETE\"\n | \"TREE_MOVE\"\n | \"TREE_UPDATE\"\n | \"TREE_MOVE_SAME_LEVEL\"\n | \"TREE_MOVE_CROSS_LEVEL\"\n | \"OBJECT_ADD\"\n | \"OBJECT_DELETE\"\n | \"OBJECT_UPDATE\";\n\nexport interface XnlMutation {\n type: MutationType;\n path: string | XnlPath;\n pathBefore?: string | XnlPath;\n valueBefore?: XnlNode;\n valueAfter?: XnlNode;\n metadata?: Record<string, unknown>;\n targetUniqueName?: string;\n parentUniqueNameBefore?: string;\n parentUniqueNameAfter?: string;\n}\n\nexport type MetadataIdMode = \"identity\" | \"metadata\";\n\nexport interface XnlMutationOptions {\n metadataIdMode?: MetadataIdMode;\n}\n\nfunction resolveMetaIdMode(opts: XnlMutationOptions): MetadataIdMode {\n return opts.metadataIdMode ?? \"identity\";\n}\n\nfunction isMetadataIdPath(path: XnlPath): boolean {\n const n = path.length;\n return (\n n >= 2 &&\n path[n - 2]?.type === \"InstanceProperty\" &&\n path[n - 2]?.value === \"metadata\" &&\n path[n - 1]?.type === \"MapKey\" &&\n path[n - 1]?.value === \"id\"\n );\n}\n\nfunction isMetadataMapPath(path: XnlPath): boolean {\n const last = path[path.length - 1];\n return last?.type === \"InstanceProperty\" && last.value === \"metadata\";\n}\n\nexport function applyMutations(root: XnlNode, mutations: XnlMutation[], opts: XnlMutationOptions = {}): XnlNode {\n let current = root;\n for (const mutation of mutations) {\n current = applySingle(current, mutation, opts);\n }\n return current;\n}\n\nexport function diffNodes(\n oldNode: XnlNode,\n newNode: XnlNode,\n basePath: string | XnlPath = [],\n opts: XnlMutationOptions = {}\n): XnlMutation[] {\n const pathItems = Array.isArray(basePath) ? basePath : parsePath(basePath);\n if (!sameKind(oldNode, newNode)) {\n throw new XnlPathError(\"Root kinds must match to diff\");\n }\n if (isValueLiteral(oldNode) || isComment(oldNode)) {\n return oldNode === newNode ? [] : [{ type: \"OBJECT_UPDATE\", path: pathItems, valueAfter: newNode }];\n }\n if (Array.isArray(oldNode) && Array.isArray(newNode)) {\n return diffArray(oldNode, newNode, pathItems, undefined, undefined, opts);\n }\n if (isPlainObject(oldNode) && isPlainObject(newNode)) {\n return diffMap(oldNode as Record<string, any>, newNode as Record<string, any>, pathItems, undefined, undefined, opts);\n }\n if (isTextElement(oldNode) && isTextElement(newNode)) {\n return diffTextElement(oldNode, newNode, pathItems, opts);\n }\n if (isDataElement(oldNode) && isDataElement(newNode)) {\n const mutations = diffDataElement(oldNode, newNode, pathItems, opts);\n return reconcileMoves(mutations);\n }\n return [];\n}\n\nfunction applySingle(root: XnlNode, mutation: XnlMutation, opts: XnlMutationOptions): XnlNode {\n const { type, path, valueAfter } = mutation;\n const pathItems = Array.isArray(path) ? path : parsePath(path);\n\n if (resolveMetaIdMode(opts) === \"identity\" && isMetadataIdPath(pathItems)) {\n return root;\n }\n\n if (type === \"TREE_MOVE\" || type === \"TREE_MOVE_SAME_LEVEL\" || type === \"TREE_MOVE_CROSS_LEVEL\") {\n if (!mutation.targetUniqueName && !mutation.pathBefore) {\n throw new XnlPathError(\"TREE_MOVE requires targetUniqueName or pathBefore\");\n }\n const fromPath = mutation.pathBefore\n ? Array.isArray(mutation.pathBefore)\n ? mutation.pathBefore\n : parsePath(mutation.pathBefore)\n : [];\n let moved = mutation.targetUniqueName ? extractByUniqueId(root, mutation.targetUniqueName) : undefined;\n if (moved === undefined && fromPath.length > 0) {\n try {\n const found = resolvePath(root, fromPath, { strict: false });\n if (moved === undefined) moved = found;\n deleteAtPath(root, fromPath, { strict: false });\n } catch {\n /* ignore */\n }\n }\n if (moved === undefined && mutation.targetUniqueName) {\n throw new XnlPathError(`TREE_MOVE could not find node '${mutation.targetUniqueName}' to move`);\n }\n return applySingle(root, { ...mutation, type: \"TREE_ADD\", path, valueAfter: moved }, opts);\n }\n\n switch (type) {\n case \"TREE_ADD\":\n setPathValue(root, pathItems, valueAfter, { mode: \"insert\" });\n return root;\n case \"TREE_DELETE\":\n deleteAtPath(root, pathItems);\n return root;\n case \"TREE_UPDATE\":\n setPathValue(root, pathItems, valueAfter, { mode: \"replace\" });\n return root;\n case \"OBJECT_ADD\":\n case \"OBJECT_UPDATE\":\n setPathValue(root, pathItems, valueAfter, { mode: \"replace\" });\n return root;\n case \"OBJECT_DELETE\":\n deleteAtPath(root, pathItems);\n return root;\n default:\n throw new XnlPathError(`Unknown mutation type ${type}`);\n }\n}\n\nfunction diffTextElement(\n oldNode: TextElementNode,\n newNode: TextElementNode,\n basePath: XnlPath,\n opts: XnlMutationOptions\n): XnlMutation[] {\n const mutations: XnlMutation[] = [];\n mutations.push(...diffMap(oldNode.metadata, newNode.metadata, [...basePath, ip(\"metadata\")], oldNode, newNode, opts));\n if (oldNode.attributes || newNode.attributes) {\n mutations.push(...diffMap(oldNode.attributes ?? {}, newNode.attributes ?? {}, [...basePath, ip(\"attributes\")], oldNode, newNode, opts));\n }\n if (oldNode.text !== newNode.text) {\n mutations.push({\n type: \"TREE_UPDATE\",\n path: [...basePath, ip(\"text\")],\n valueAfter: newNode.text,\n });\n }\n if (oldNode.textMarker !== newNode.textMarker) {\n mutations.push({\n type: \"TREE_UPDATE\",\n path: [...basePath, ip(\"textMarker\")],\n valueAfter: newNode.textMarker,\n });\n }\n return mutations;\n}\n\nfunction diffDataElement(\n oldNode: DataElementNode,\n newNode: DataElementNode,\n basePath: XnlPath,\n opts: XnlMutationOptions\n): XnlMutation[] {\n const mutations: XnlMutation[] = [];\n const metaPath = [...basePath, ip(\"metadata\")];\n mutations.push(...diffMap(oldNode.metadata, newNode.metadata, metaPath, oldNode, newNode, opts));\n const attrPath = [...basePath, ip(\"attributes\")];\n mutations.push(...diffMap(oldNode.attributes ?? {}, newNode.attributes ?? {}, attrPath, oldNode, newNode, opts));\n\n if (oldNode.body || newNode.body) {\n mutations.push(\n ...diffArray(oldNode.body ?? [], newNode.body ?? [], [...basePath, ip(\"body\")], oldNode, newNode, opts)\n );\n }\n if (oldNode.extend || newNode.extend) {\n mutations.push(...diffExtend(oldNode.extend, newNode.extend, [...basePath, ip(\"extend\")], oldNode, newNode, opts));\n }\n return mutations;\n}\n\nfunction diffArray(\n oldArr: XnlNode[],\n newArr: XnlNode[],\n basePath: XnlPath,\n parentBefore: any,\n parentAfter: any,\n opts: XnlMutationOptions\n): XnlMutation[] {\n const mutations: XnlMutation[] = [];\n\n const parentId =\n resolveMetaIdMode(opts) === \"identity\" ? readIdOrMetadaataId(parentBefore) ?? readIdOrMetadaataId(parentAfter) : undefined;\n\n const pathBase = parentId ? [ms(\"id\", parentId) as PathItem, ip(\"body\")] : basePath;\n const oldById: Record<string, { index: number; value: XnlNode }> = {};\n const newById: Record<string, { index: number; value: XnlNode }> = {};\n oldArr.forEach((item, idx) => {\n const id = readIdOrMetadaataId(item);\n if (id) oldById[id] = { index: idx, value: item };\n });\n newArr.forEach((item, idx) => {\n const id = readIdOrMetadaataId(item);\n if (id) newById[id] = { index: idx, value: item };\n });\n\n const max = Math.max(oldArr.length, newArr.length);\n for (let i = 0; i < max; i++) {\n const oldItem = oldArr[i];\n const newItem = newArr[i];\n const path = [...pathBase, li(i)];\n if (oldItem === undefined && newItem !== undefined) {\n const id = readIdOrMetadaataId(newItem);\n mutations.push({\n type: \"TREE_ADD\",\n path,\n valueAfter: newItem,\n targetUniqueName: id,\n parentUniqueNameAfter: readIdOrMetadaataId(parentAfter),\n });\n continue;\n }\n if (oldItem !== undefined && newItem === undefined) {\n const id = readIdOrMetadaataId(oldItem);\n mutations.push({\n type: \"TREE_DELETE\",\n path,\n valueBefore: oldItem,\n targetUniqueName: id,\n parentUniqueNameBefore: readIdOrMetadaataId(parentBefore),\n });\n continue;\n }\n if (oldItem !== undefined && newItem !== undefined) {\n const useIdentity = resolveMetaIdMode(opts) === \"identity\";\n\n const oldId = readIdOrMetadaataId(oldItem);\n const newId = readIdOrMetadaataId(newItem);\n\n if (useIdentity && oldId && newId && oldId !== newId) {\n mutations.push({\n type: \"TREE_DELETE\",\n path,\n valueBefore: oldItem,\n targetUniqueName: oldId,\n parentUniqueNameBefore: readIdOrMetadaataId(parentBefore),\n });\n mutations.push({\n type: \"TREE_ADD\",\n path,\n valueAfter: newItem,\n targetUniqueName: newId,\n parentUniqueNameAfter: readIdOrMetadaataId(parentAfter),\n });\n continue;\n }\n\n if (isEqual(oldItem, newItem)) {\n continue;\n }\n\n const nested = diffNodes(oldItem, newItem, path, opts);\n if (nested.length === 0) {\n if (!useIdentity) {\n mutations.push({ type: \"TREE_UPDATE\", path, valueAfter: newItem, targetUniqueName: readIdOrMetadaataId(newItem) });\n }\n } else {\n mutations.push(...nested);\n }\n }\n }\n\n if (resolveMetaIdMode(opts) === \"identity\") {\n const oldIds = oldArr.map(readIdOrMetadaataId).filter(Boolean) as string[];\n const newIds = newArr.map(readIdOrMetadaataId).filter(Boolean) as string[];\n if (oldIds.length && newIds.length) {\n for (const id of oldIds) {\n if (!(id in newById)) continue;\n const oldIdx = oldById[id]?.index ?? -1;\n const newIdx = newById[id]?.index ?? -1;\n if (oldIdx !== -1 && newIdx !== -1 && oldIdx !== newIdx) {\n mutations.push({\n type: \"TREE_MOVE_SAME_LEVEL\",\n pathBefore: [...pathBase, li(oldIdx)],\n path: [...pathBase, li(newIdx)],\n targetUniqueName: id,\n parentUniqueNameBefore: readIdOrMetadaataId(parentBefore),\n parentUniqueNameAfter: readIdOrMetadaataId(parentAfter),\n });\n }\n }\n }\n }\n return mutations;\n}\n\nfunction diffMap(\n oldMap: Record<string, any>,\n newMap: Record<string, any>,\n basePath: XnlPath,\n parentBefore: any,\n parentAfter: any,\n opts: XnlMutationOptions\n): XnlMutation[] {\n const mutations: XnlMutation[] = [];\n const keys = new Set([...Object.keys(oldMap || {}), ...Object.keys(newMap || {})]);\n for (const key of keys) {\n if (resolveMetaIdMode(opts) === \"identity\" && isMetadataMapPath(basePath) && key === \"id\") {\n continue;\n }\n const oldVal = (oldMap || {})[key];\n const newVal = (newMap || {})[key];\n const path = [...basePath, mk(key)];\n if (oldVal === undefined && newVal !== undefined) {\n mutations.push({\n type: \"OBJECT_ADD\",\n path,\n valueAfter: newVal,\n targetUniqueName: readIdOrMetadaataId(newVal),\n parentUniqueNameAfter: readIdOrMetadaataId(parentAfter),\n });\n continue;\n }\n if (oldVal !== undefined && newVal === undefined) {\n mutations.push({\n type: \"OBJECT_DELETE\",\n path,\n valueBefore: oldVal,\n targetUniqueName: readIdOrMetadaataId(oldVal),\n parentUniqueNameBefore: readIdOrMetadaataId(parentBefore),\n });\n continue;\n }\n if (!isEqual(oldVal, newVal)) {\n const nested = diffNodes(oldVal, newVal, path, opts);\n if (nested.length === 0) {\n mutations.push({ type: \"OBJECT_UPDATE\", path, valueAfter: newVal });\n } else {\n mutations.push(...nested);\n }\n }\n }\n return mutations;\n}\n\nfunction diffExtend(\n oldExtend: DataElementNode[\"extend\"] | undefined,\n newExtend: DataElementNode[\"extend\"] | undefined,\n basePath: XnlPath,\n parentBefore: any,\n parentAfter: any,\n opts: XnlMutationOptions\n): XnlMutation[] {\n const mutations: XnlMutation[] = [];\n\n const parentId =\n resolveMetaIdMode(opts) === \"identity\" ? readIdOrMetadaataId(parentBefore) ?? readIdOrMetadaataId(parentAfter) : undefined;\n\n const pathBase = parentId ? [ms(\"id\", parentId) as PathItem, ip(\"extend\")] : basePath;\n const oldChildren = oldExtend?.children ?? {};\n const newChildren = newExtend?.children ?? {};\n const allTags = new Set([...Object.keys(oldChildren), ...Object.keys(newChildren)]);\n for (const tag of allTags) {\n const oldChild = oldChildren[tag];\n const newChild = newChildren[tag];\n const childPath = [...pathBase, mk(tag)];\n if (!oldChild && newChild) {\n mutations.push({\n type: \"TREE_ADD\",\n path: childPath,\n valueAfter: newChild,\n targetUniqueName: readIdOrMetadaataId(newChild),\n parentUniqueNameAfter: readIdOrMetadaataId(parentAfter),\n });\n continue;\n }\n if (oldChild && !newChild) {\n mutations.push({\n type: \"TREE_DELETE\",\n path: childPath,\n valueBefore: oldChild,\n targetUniqueName: readIdOrMetadaataId(oldChild),\n parentUniqueNameBefore: readIdOrMetadaataId(parentBefore),\n });\n continue;\n }\n if (oldChild && newChild) {\n const nested = diffNodes(oldChild, newChild, childPath, opts);\n if (nested.length === 0) {\n if (!isEqual(oldChild, newChild)) {\n mutations.push({ type: \"TREE_UPDATE\", path: childPath, valueAfter: newChild });\n }\n } else {\n mutations.push(...nested);\n }\n }\n }\n\n const oldOrder = oldExtend?.order ?? [];\n const newOrder = newExtend?.order ?? [];\n if (!isEqual(oldOrder, newOrder)) {\n mutations.push({\n type: \"TREE_UPDATE\",\n path: [...basePath, ip(\"order\")],\n valueAfter: newOrder,\n });\n }\n return mutations;\n}\n\nfunction sameKind(a: XnlNode, b: XnlNode): boolean {\n if (isDataElement(a) && isDataElement(b)) return true;\n if (isTextElement(a) && isTextElement(b)) return true;\n if (Array.isArray(a) && Array.isArray(b)) return true;\n if (isPlainObject(a) && isPlainObject(b)) return true;\n if (isValueLiteral(a) && isValueLiteral(b)) return true;\n return typeof a === typeof b;\n}\n\nfunction isEqual(a: any, b: any): boolean {\n if (isWord(a) && isWord(b)) {\n return wordToString(a) === wordToString(b);\n }\n if (a === b) return true;\n if (typeof a !== typeof b) return false;\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((item, idx) => isEqual(item, b[idx]));\n }\n if (isPlainObject(a) && isPlainObject(b)) {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n return keysA.every((key) => isEqual(a[key], (b as any)[key]));\n }\n return false;\n}\n\nfunction isPlainObject(value: any): value is Record<string, any> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value) && !isDataElement(value) && !isTextElement(value) && !isWord(value);\n}\n\nfunction isDataElement(node: any): node is DataElementNode {\n return node && node.kind === \"DataElement\";\n}\n\nfunction isTextElement(node: any): node is TextElementNode {\n return node && node.kind === \"TextElement\";\n}\n\nfunction isValueLiteral(node: any): boolean {\n return (\n typeof node === \"string\" ||\n typeof node === \"number\" ||\n typeof node === \"boolean\" ||\n node === null ||\n isWord(node)\n );\n}\n\nfunction isComment(node: any): boolean {\n return node && node.kind === \"Comment\";\n}\n\nconst ip = (value: string): PathItem => ({ type: \"InstanceProperty\", value });\nconst mk = (value: string): PathItem => ({ type: \"MapKey\", value });\nconst li = (value: number | string): PathItem => ({ type: \"ListIndex\", value: String(value) });\n\nfunction ms(key: string, value: string): PathItem {\n return { type: \"MetadataSelector\", value: `<${key}=${JSON.stringify(value)}>` } as PathItem;\n}\n\nfunction readIdOrMetadaataId(node: any): string | undefined {\n if (isDataElement(node) || isTextElement(node)) {\n const nodeId = wordToString((node as any).id);\n if (nodeId) return nodeId;\n\n const metaId = (node as any).metadata?.id;\n if (typeof metaId === \"string\") return metaId;\n if (isWord(metaId)) return wordToString(metaId);\n }\n return undefined;\n}\n\nfunction extractByUniqueId(root: any, id: string): any {\n if (Array.isArray(root)) {\n const idx = root.findIndex((item) => readIdOrMetadaataId(item) === id);\n if (idx !== -1) {\n const [removed] = root.splice(idx, 1);\n return removed;\n }\n for (const item of root) {\n const found = extractByUniqueId(item, id);\n if (found !== undefined) return found;\n }\n } else if (isDataElement(root)) {\n if (root.body) {\n const idx = root.body.findIndex((item) => readIdOrMetadaataId(item) === id);\n if (idx !== -1) {\n const [removed] = root.body.splice(idx, 1);\n return removed;\n }\n for (const child of root.body) {\n const found = extractByUniqueId(child, id);\n if (found !== undefined) return found;\n }\n }\n if (root.extend) {\n const tags = [...root.extend.order];\n for (const tag of tags) {\n const child = root.extend.children[tag];\n if (readIdOrMetadaataId(child) === id) {\n delete root.extend.children[tag];\n root.extend.order = root.extend.order.filter((t) => t !== tag);\n return child;\n }\n const found = extractByUniqueId(child, id);\n if (found !== undefined) return found;\n }\n }\n }\n return undefined;\n}\n\nfunction reconcileMoves(mutations: XnlMutation[]): XnlMutation[] {\n const addsById: Record<string, XnlMutation[]> = {};\n const deletesById: Record<string, XnlMutation[]> = {};\n for (const m of mutations) {\n if (m.type === \"TREE_ADD\" && m.targetUniqueName) {\n addsById[m.targetUniqueName] = addsById[m.targetUniqueName] ?? [];\n addsById[m.targetUniqueName].push(m);\n }\n if (m.type === \"TREE_DELETE\" && m.targetUniqueName) {\n deletesById[m.targetUniqueName] = deletesById[m.targetUniqueName] ?? [];\n deletesById[m.targetUniqueName].push(m);\n }\n }\n\n const result: XnlMutation[] = [];\n const usedAdds = new Set<XnlMutation>();\n const usedDeletes = new Set<XnlMutation>();\n\n for (const [id, dels] of Object.entries(deletesById)) {\n const adds = addsById[id];\n if (!adds || adds.length === 0) continue;\n const del = dels[0];\n const add = adds[0];\n usedAdds.add(add);\n usedDeletes.add(del);\n const sameParent = add.parentUniqueNameAfter && del.parentUniqueNameBefore && add.parentUniqueNameAfter === del.parentUniqueNameBefore;\n const type: MutationType = sameParent ? \"TREE_MOVE_SAME_LEVEL\" : \"TREE_MOVE_CROSS_LEVEL\";\n const move: XnlMutation = {\n type,\n path: add.path,\n pathBefore: del.path,\n targetUniqueName: id,\n parentUniqueNameBefore: del.parentUniqueNameBefore,\n parentUniqueNameAfter: add.parentUniqueNameAfter,\n };\n result.push(move);\n }\n\n for (const m of mutations) {\n if (usedAdds.has(m) || usedDeletes.has(m)) continue;\n result.push(m);\n }\n\n const filtered: XnlMutation[] = [];\n const seenMoveKeys = new Set<string>();\n for (const m of result) {\n if ((m.type === \"TREE_MOVE_SAME_LEVEL\" || m.type === \"TREE_MOVE_CROSS_LEVEL\") && m.targetUniqueName) {\n const key = `${m.type}:${m.targetUniqueName}:${JSON.stringify(m.path)}:${JSON.stringify(m.pathBefore)}`;\n if (seenMoveKeys.has(key)) continue;\n seenMoveKeys.add(key);\n }\n filtered.push(m);\n }\n\n return filtered;\n}\n","import {\n AttributeMap,\n DataElementNode,\n ElementNode,\n ExtendBody,\n TextElementNode,\n XnlDocument,\n XnlNode,\n XnlWord,\n isWord,\n wordToString,\n} from \"../types\";\nimport { parseXnl } from \"../parser\";\n\nexport interface LoaderContext {\n prototypes: Record<string, Record<string, DataElementNode>>;\n}\n\nconst SYSTEM_FIELDS = {\n proto: \"proto\",\n extendType: \"extendType\",\n exportFlag: \"export\",\n remove: \"remove\",\n name: \"name\",\n id: \"id\",\n};\n\nexport function loadFromString(input: string): XnlDocument {\n const parsed = parseXnl(input);\n const ctx = buildPrototypeContext(parsed.nodes);\n const resolvedNodes = parsed.nodes.map((n) => (isDataElement(n) ? resolveNode(ctx, n, []) : n));\n return { nodes: resolvedNodes, warnings: parsed.warnings };\n}\n\nexport function resolveNode(\n ctx: LoaderContext,\n node: DataElementNode,\n scope: Record<string, Record<string, DataElementNode>>[]\n): DataElementNode {\n const protoName = readStringMeta(node.metadata, SYSTEM_FIELDS.proto);\n const extendType = readStringMeta(node.metadata, SYSTEM_FIELDS.extendType) ?? \"Override\";\n\n const localPrefabs = collectTypedPrefabs(node);\n const nextScope = [localPrefabs, ...scope];\n\n let resolved = cloneDataElement(node);\n if (protoName) {\n const proto = lookupPrototype(ctx, node.tag, protoName, nextScope);\n const merged = mergeNodes(ctx, proto, resolved, extendType, nextScope);\n resolved = merged;\n } else {\n resolved = resolveChildren(ctx, resolved, nextScope);\n }\n\n resolved.metadata = mergeMaps(ctx, {}, resolved.metadata, nextScope);\n resolved.attributes = mergeMaps(ctx, {}, resolved.attributes ?? {}, nextScope);\n stripControlMetadata(resolved.metadata);\n if (resolved.attributes) stripControlMetadata(resolved.attributes as AttributeMap);\n return resolved;\n}\n\nexport function batchLoad(batches: DataElementNode[][]): {\n resolved: DataElementNode[][];\n exports: Record<string, Record<string, DataElementNode>>;\n} {\n const allNodes = batches.flat();\n const ctx = buildPrototypeContext(allNodes);\n const exportsMap: Record<string, Record<string, DataElementNode>> = {};\n const resolved = batches.map((batch) =>\n batch.map((node) => {\n if (!isDataElement(node)) return node;\n const rawExportName = readExportName(node);\n let resolvedNode = resolveNode(ctx, node, []);\n resolvedNode = resolvePending(resolvedNode, ctx, []);\n const exportName = rawExportName ?? readExportName(resolvedNode);\n if (exportName) {\n exportsMap[resolvedNode.tag] = exportsMap[resolvedNode.tag] ?? {};\n exportsMap[resolvedNode.tag][exportName] = resolvedNode;\n }\n collectExportsFromPrefabs(resolvedNode, exportsMap);\n return resolvedNode;\n })\n );\n return { resolved, exports: exportsMap };\n}\n\nfunction buildPrototypeContext(nodes: XnlNode[]): LoaderContext {\n const prototypes: Record<string, Record<string, DataElementNode>> = {};\n for (const node of nodes) {\n if (!isDataElement(node)) continue;\n collectPrefabs(node, prototypes);\n }\n return { prototypes };\n}\n\nfunction collectPrefabs(node: DataElementNode, store: Record<string, Record<string, DataElementNode>>) {\n const typed = collectTypedPrefabs(node);\n for (const [type, prefabs] of Object.entries(typed)) {\n store[type] = store[type] ?? {};\n for (const [name, prefab] of Object.entries(prefabs)) {\n if (!store[type][name]) {\n store[type][name] = cloneDataElement(prefab);\n }\n }\n }\n if (node.body) {\n for (const child of node.body) {\n if (isDataElement(child)) collectPrefabs(child, store);\n }\n }\n if (node.extend) {\n for (const tag of node.extend.order) {\n const child = node.extend.children[tag];\n if (isDataElement(child)) collectPrefabs(child, store);\n }\n }\n}\n\nfunction collectExportsFromPrefabs(node: DataElementNode, exportsMap: Record<string, Record<string, DataElementNode>>) {\n if (!node.extend) return;\n const typed = collectTypedPrefabs(node);\n for (const [type, prefabs] of Object.entries(typed)) {\n for (const [name, prefab] of Object.entries(prefabs)) {\n exportsMap[type] = exportsMap[type] ?? {};\n exportsMap[type][name] = prefab;\n }\n }\n}\n\nfunction lookupPrototype(\n ctx: LoaderContext,\n type: string,\n name: string,\n scope: Record<string, Record<string, DataElementNode>>[]\n): DataElementNode {\n for (const prefabs of scope) {\n const foundScoped = prefabs[type]?.[name];\n if (foundScoped) return foundScoped;\n }\n const found = ctx.prototypes[type]?.[name];\n if (!found) {\n throw new Error(`Prototype not found for type '${type}' name '${name}'`);\n }\n return found;\n}\n\nfunction mergeNodes(\n ctx: LoaderContext,\n base: DataElementNode,\n override: DataElementNode,\n extendType: string,\n scope: Record<string, Record<string, DataElementNode>>[]\n): DataElementNode {\n if (extendType !== \"Override\") {\n throw new Error(`Unsupported extendType '${extendType}'`);\n }\n const merged: DataElementNode = cloneDataElement(base);\n merged.id = override.id ?? base.id;\n merged.metadata = mergeMaps(ctx, base.metadata, override.metadata, scope);\n merged.attributes = mergeMaps(ctx, base.attributes ?? {}, override.attributes ?? {}, scope);\n merged.body = mergeBody(ctx, base.body ?? [], override.body ?? [], scope);\n merged.extend = mergeExtend(ctx, base.extend, override.extend, scope);\n\n stripControlMetadata(merged.metadata);\n if (merged.attributes) stripControlMetadata(merged.attributes as AttributeMap);\n return merged;\n}\n\nfunction resolveChildren(\n ctx: LoaderContext,\n node: DataElementNode,\n scope: Record<string, Record<string, DataElementNode>>[]\n): DataElementNode {\n const copy = cloneDataElement(node);\n if (copy.body) {\n copy.body = copy.body.map((item) => resolveValue(ctx, item, scope));\n }\n if (copy.extend) {\n const nextChildren: Record<string, ElementNode> = {};\n for (const tag of copy.extend.order) {\n const child = copy.extend.children[tag];\n nextChildren[tag] = resolveValue(ctx, child, scope) as ElementNode;\n }\n copy.extend = { order: [...copy.extend.order], children: nextChildren };\n }\n return copy;\n}\n\nfunction mergeBody(\n ctx: LoaderContext,\n baseBody: XnlNode[],\n overrideBody: XnlNode[],\n scope: Record<string, Record<string, DataElementNode>>[]\n): XnlNode[] {\n const result: XnlNode[] = [];\n const baseById: Record<string, XnlNode> = {};\n for (const item of baseBody) {\n const id = readElementId(item);\n if (id) baseById[id] = item;\n result.push(resolveValue(ctx, item, scope));\n }\n for (const item of overrideBody) {\n if (isRemoveFlag(item) || isRemoveMarker(item)) {\n const id = readElementId(item);\n if (id && baseById[id]) {\n const index = result.findIndex((n) => readElementId(n) === id);\n if (index >= 0) {\n result.splice(index, 1);\n }\n }\n continue;\n }\n const id = readElementId(item);\n if (id && baseById[id] && isDataElement(baseById[id]) && isDataElement(item)) {\n const merged = mergeNodes(ctx, baseById[id] as DataElementNode, item, \"Override\", scope);\n const idx = result.findIndex((n) => readElementId(n) === id);\n if (idx >= 0) {\n result[idx] = merged;\n continue;\n }\n }\n result.push(resolveValue(ctx, item, scope));\n }\n return result;\n}\n\nfunction mergeExtend(\n ctx: LoaderContext,\n baseExtend: ExtendBody | undefined,\n overrideExtend: ExtendBody | undefined,\n scope: Record<string, Record<string, DataElementNode>>[]\n): ExtendBody | undefined {\n if (!baseExtend && !overrideExtend) return undefined;\n if (!baseExtend) return resolveExtend(ctx, overrideExtend, scope);\n if (!overrideExtend) return resolveExtend(ctx, baseExtend, scope);\n\n const order: string[] = [...baseExtend.order];\n const children: Record<string, ElementNode> = { ...baseExtend.children };\n\n for (const tag of overrideExtend.order) {\n const child = overrideExtend.children[tag];\n const existing = children[tag];\n if (isDataElement(child) && (isRemoveFlag(child) || isRemoveMarker(child))) {\n delete children[tag];\n const idx = order.indexOf(tag);\n if (idx >= 0) order.splice(idx, 1);\n continue;\n }\n if (existing && isDataElement(existing) && isDataElement(child)) {\n children[tag] = mergeNodes(ctx, existing, child, \"Override\", scope);\n } else {\n children[tag] = resolveValue(ctx, child, scope) as ElementNode;\n }\n if (!order.includes(tag)) order.push(tag);\n }\n return { order, children };\n}\n\nfunction resolveExtend(\n ctx: LoaderContext,\n extend: ExtendBody | undefined,\n scope: Record<string, Record<string, DataElementNode>>[]\n): ExtendBody | undefined {\n if (!extend) return undefined;\n const children: Record<string, ElementNode> = {};\n for (const tag of extend.order) {\n const child = extend.children[tag];\n children[tag] = resolveValue(ctx, child, scope) as ElementNode;\n }\n return { order: [...extend.order], children };\n}\n\nfunction cloneDataElement(node: DataElementNode): DataElementNode {\n return {\n kind: \"DataElement\",\n tag: node.tag,\n id: node.id ? cloneWord(node.id) : undefined,\n metadata: cloneMap(node.metadata),\n attributes: node.attributes ? cloneMap(node.attributes) : undefined,\n body: node.body ? node.body.map((n) => cloneNode(n)) : undefined,\n extend: node.extend ? cloneExtend(node.extend) : undefined,\n };\n}\n\nfunction cloneExtend(extend: ExtendBody): ExtendBody {\n const children: Record<string, ElementNode> = {};\n for (const tag of extend.order) {\n children[tag] = cloneNode(extend.children[tag]) as ElementNode;\n }\n return { order: [...extend.order], children };\n}\n\nfunction cloneNode<T extends XnlNode>(node: T): T {\n if (Array.isArray(node)) {\n return node.map((n) => cloneNode(n)) as unknown as T;\n }\n if (isWord(node)) {\n return cloneWord(node) as unknown as T;\n }\n if (isPlainObject(node)) {\n const out: Record<string, any> = {};\n for (const key of Object.keys(node)) {\n out[key] = cloneNode((node as any)[key]);\n }\n return out as T;\n }\n if (isDataElement(node)) return cloneDataElement(node) as unknown as T;\n return node;\n}\n\nfunction cloneMap(map: Record<string, any>): Record<string, any> {\n const out: Record<string, any> = {};\n for (const key of Object.keys(map || {})) {\n out[key] = cloneNode(map[key]);\n }\n return out;\n}\n\nfunction mergeMaps(\n ctx: LoaderContext,\n base: Record<string, any>,\n override: Record<string, any>,\n scope: Record<string, Record<string, DataElementNode>>[]\n): Record<string, any> {\n const result = cloneMap(base || {});\n for (const key of Object.keys(override || {})) {\n const value = override[key];\n if (isRemoveMarker(value)) {\n delete result[key];\n continue;\n }\n const resolvedValue = resolveValue(ctx, value, scope);\n if (isPlainObject(resolvedValue) && isPlainObject(result[key])) {\n result[key] = mergeMaps(ctx, result[key], resolvedValue, scope);\n } else if (Array.isArray(resolvedValue) && Array.isArray(result[key])) {\n result[key] = mergeArray(ctx, result[key], resolvedValue, scope);\n } else {\n result[key] = resolvedValue;\n }\n }\n return result;\n}\n\nfunction mergeArray(\n ctx: LoaderContext,\n baseArr: any[],\n overrideArr: any[],\n scope: Record<string, Record<string, DataElementNode>>[]\n): any[] {\n const result = baseArr.map((v) => resolveValue(ctx, v, scope));\n for (let i = 0; i < overrideArr.length; i++) {\n const value = overrideArr[i];\n if (isRemoveMarker(value)) {\n if (i < result.length) result.splice(i, 1);\n continue;\n }\n const resolved = resolveValue(ctx, value, scope);\n if (i < result.length) {\n const baseVal = result[i];\n if (isPlainObject(baseVal) && isPlainObject(resolved)) {\n result[i] = mergeMaps(ctx, baseVal, resolved, scope);\n } else if (Array.isArray(baseVal) && Array.isArray(resolved)) {\n result[i] = mergeArray(ctx, baseVal, resolved, scope);\n } else {\n result[i] = resolved;\n }\n } else {\n result.push(resolved);\n }\n }\n return result;\n}\n\nfunction stripControlMetadata(meta: AttributeMap) {\n delete (meta as any)[SYSTEM_FIELDS.proto];\n delete (meta as any)[SYSTEM_FIELDS.extendType];\n delete (meta as any)[SYSTEM_FIELDS.exportFlag];\n delete (meta as any)[SYSTEM_FIELDS.remove];\n}\n\nfunction readExportName(node: DataElementNode): string | undefined {\n const exported = node.metadata?.[SYSTEM_FIELDS.exportFlag];\n if (exported !== true && exported !== \"true\") return undefined;\n const id = wordToString(node.id);\n if (id) return id;\n const nameVal = (node.metadata as any)?.[SYSTEM_FIELDS.name];\n const name = asString(nameVal);\n return name;\n}\n\nfunction readElementId(node: XnlNode): string | undefined {\n if (isDataElement(node) || isTextElement(node)) {\n const idVal = (node as any).id as XnlWord | undefined;\n const id = wordToString(idVal);\n if (id) return id;\n const metaId = (node as any).metadata?.[SYSTEM_FIELDS.id];\n const metaIdStr = asString(metaId);\n if (metaIdStr) return metaIdStr;\n }\n return undefined;\n}\n\nfunction readStringMeta(meta: AttributeMap, key: string): string | undefined {\n const val = meta?.[key];\n return asString(val);\n}\n\nfunction isRemoveFlag(node: any): boolean {\n return !!(node && (node.metadata?.[SYSTEM_FIELDS.remove] === true || node.metadata?.[SYSTEM_FIELDS.remove] === \"true\"));\n}\n\nfunction isRemoveMarker(node: any): boolean {\n return isDataElement(node) && node.tag === \"delta\" && isRemoveFlag(node);\n}\n\nfunction isDataElement(node: any): node is DataElementNode {\n return node && node.kind === \"DataElement\";\n}\n\nfunction isTextElement(node: any): node is TextElementNode {\n return node && node.kind === \"TextElement\";\n}\n\nfunction isPlainObject(value: any): value is Record<string, any> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value) && !isDataElement(value) && !isWord(value);\n}\n\nfunction resolveValue(\n ctx: LoaderContext,\n value: XnlNode,\n scope: Record<string, Record<string, DataElementNode>>[]\n): XnlNode {\n if (isDataElement(value)) {\n const proto = readStringMeta(value.metadata, SYSTEM_FIELDS.proto);\n if (proto) {\n return resolveNode(ctx, value, scope);\n }\n const resolved = resolveChildren(ctx, value, scope);\n resolved.attributes = mergeMaps(ctx, {}, resolved.attributes ?? {}, scope);\n resolved.metadata = mergeMaps(ctx, {}, resolved.metadata ?? {}, scope);\n return resolved;\n }\n if (Array.isArray(value)) {\n return value.map((v) => resolveValue(ctx, v, scope));\n }\n if (isPlainObject(value)) {\n const out: Record<string, any> = {};\n for (const key of Object.keys(value)) {\n out[key] = resolveValue(ctx, (value as any)[key], scope);\n }\n return out;\n }\n return cloneNode(value);\n}\n\nfunction collectTypedPrefabs(node: DataElementNode): Record<string, Record<string, DataElementNode>> {\n const result: Record<string, Record<string, DataElementNode>> = {};\n if (!node.extend) return result;\n const suffix = \"Prefabs\";\n for (const tag of node.extend.order) {\n const child: ElementNode | undefined = node.extend.children[tag];\n if (!isDataElement(child) || !child.body) continue;\n if (tag === \"Prefabs\") {\n for (const prefab of child.body as XnlNode[]) {\n if (!isDataElement(prefab)) continue;\n const name = readExportName(prefab) ?? readElementId(prefab);\n if (!name) continue;\n const type = prefab.tag;\n result[type] = result[type] ?? {};\n result[type][name] = cloneDataElement(prefab);\n }\n continue;\n }\n if (tag.endsWith(suffix)) {\n const type = tag.slice(0, tag.length - suffix.length);\n for (const prefab of child.body as XnlNode[]) {\n if (!isDataElement(prefab)) continue;\n const name = readExportName(prefab) ?? readElementId(prefab);\n if (!name) continue;\n result[type] = result[type] ?? {};\n result[type][name] = cloneDataElement(prefab);\n }\n }\n }\n return result;\n}\n\nfunction resolvePending(\n node: DataElementNode,\n ctx: LoaderContext,\n scope: Record<string, Record<string, DataElementNode>>[]\n): DataElementNode {\n const resolved = resolveNode(ctx, node, scope);\n return resolved;\n}\n\nfunction cloneWord(word: XnlWord): XnlWord {\n return { kind: \"Word\", namespace: [...(word.namespace ?? [])], name: word.name };\n}\n\nfunction asString(value: any): string | undefined {\n if (isWord(value)) return wordToString(value) ?? undefined;\n if (typeof value === \"string\") return value;\n return undefined;\n}\n","import { XnlWord } from \"./types\";\n\nexport function GetWordFullName(word: XnlWord): string {\n const parts = [...(word.namespace ?? []), word.name].filter((part) => part.length > 0);\n return parts.join(\".\");\n}\n\nexport function MakeWord(wordStr: string, namespace = []): XnlWord {\n return {\n kind: \"Word\",\n namespace: namespace,\n name: wordStr\n }\n}","import * as Parser from \"./parser\";\nimport { stringify as xnlStringify } from \"./formatter\";\nimport { parsePath, resolvePath, setPathValue, deleteAtPath } from \"./path\";\nimport { applyMutations, diffNodes } from \"./mutation\";\nimport { loadFromString, resolveNode, batchLoad } from \"./loader\";\nexport { parseXnl } from \"./parser\";\nexport { parseXnlSingleNode, parseUniqueChildren } from \"./parser\";\nexport { XnlParseError } from \"./errors\";\nexport type { XnlErrorCode } from \"./errors\";\nexport type {\n AttributeMap,\n ValueLiteral,\n XnlDocument,\n XnlNode,\n CommentNode,\n ParseWarning,\n SingleNodeResult,\n UniqueChildrenResult,\n ExtendBody,\n ElementNode,\n DataElementNode,\n TextElementNode,\n ElementNodeKind,\n XnlWord,\n} from \"./types\";\nexport { isWord, wordToString } from \"./types\";\nexport type { PathItem, PathItemType, XnlPath } from \"./path\";\nexport type { XnlMutation, MutationType, XnlMutationOptions, MetadataIdMode } from \"./mutation\";\nexport {\n parsePath,\n resolvePath,\n setPathValue,\n deleteAtPath,\n XnlPathError,\n} from \"./path\";\nexport { applyMutations, diffNodes } from \"./mutation\";\nexport { loadFromString, resolveNode as loadNode, batchLoad } from \"./loader\";\nexport { GetWordFullName, MakeWord } from \"./NodeHelper\";\n\nexport const XNL = {\n parseMany: Parser.parseXnl,\n parseSingle: Parser.parseXnlSingleNode,\n parseUnique: Parser.parseUniqueChildren,\n stringify: xnlStringify,\n path: {\n parse: parsePath,\n resolve: resolvePath,\n set: setPathValue,\n delete: deleteAtPath,\n },\n mutation: {\n apply: applyMutations,\n diff: diffNodes,\n },\n loader: {\n loadFromString,\n loadNode: resolveNode,\n batchLoad,\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/position.ts","../src/errors.ts","../src/parser.ts","../src/types.ts","../src/formatter.ts","../src/lineBlockFormatter.ts","../src/path/index.ts","../src/mutation/index.ts","../src/loader/index.ts","../src/NodeHelper.ts","../src/index.ts"],"names":["pad","metaStr","idPart","stringify","isDocument","serializeNode","isComment","isElement","serializeAttributeBlock","serializeArrayBlock","serializeExtendBlock","serializeKey","formatWord","isPlainObject","serializePrimitive","escapeString","isTextElement","isDataElement","id"],"mappings":"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","file":"index.js","sourcesContent":["export function positionToLineColumn(input: string, index: number): { line: number; column: number } {\n let line = 1;\n let column = 1;\n for (let i = 0; i < index && i < input.length; i++) {\n const ch = input[i];\n if (ch === \"\\n\") {\n line += 1;\n column = 1;\n } else {\n column += 1;\n }\n }\n return { line, column };\n}\n","import { positionToLineColumn } from \"./position\";\n\nexport type XnlErrorCode =\n | \"UNEXPECTED_EOF\"\n | \"MISMATCHED_TAG\"\n | \"DUPLICATE_CHILD\"\n | \"INVALID_CONTENT\"\n | \"INVALID_LITERAL\"\n | \"UNEXPECTED_TOKEN\";\n\nexport class XnlParseError extends Error {\n readonly code: XnlErrorCode;\n readonly position: number;\n readonly line: number;\n readonly column: number;\n\n constructor(code: XnlErrorCode, message: string, input: string, position: number) {\n const { line, column } = positionToLineColumn(input, position);\n super(`${message} (at ${line}:${column})`);\n this.code = code;\n this.position = position;\n this.line = line;\n this.column = column;\n }\n}\n","import { XnlParseError } from \"./errors\";\nimport {\n AttributeMap,\n DataElementNode,\n ExtendBody,\n ParseWarning,\n SingleNodeResult,\n XnlDocument,\n XnlNode,\n TextElementNode,\n UniqueChildrenResult,\n XnlWord,\n} from \"./types\";\n\ninterface ParseState {\n input: string;\n pos: number;\n length: number;\n warnings: ParseWarning[];\n}\n\nexport function parseXnl(input: string): XnlDocument {\n const warnings: ParseWarning[] = [];\n const nodes = parseNodesFromString(input, warnings);\n return { nodes, warnings };\n}\n\nexport function parseXnlSingleNode(input: string): SingleNodeResult {\n const warnings: ParseWarning[] = [];\n const state: ParseState = { input, pos: 0, length: input.length, warnings };\n skipWhitespaceAndComments(state);\n const node = parseNode(state);\n skipWhitespaceAndComments(state);\n if (!eof(state)) {\n throw error(state, \"UNEXPECTED_TOKEN\", \"Expected a single node\");\n }\n return { node, warnings };\n}\n\nexport function parseUniqueChildren(\n name: string,\n input: string,\n metadata: AttributeMap = {},\n attributes: AttributeMap = {}\n): UniqueChildrenResult {\n const warnings: ParseWarning[] = [];\n const children = parseNodesFromString(input, warnings);\n const extend = buildExtendBody(children, name, warnings);\n const node: DataElementNode = { kind: \"DataElement\", tag: name, id: undefined, metadata, attributes, extend };\n return { node, warnings };\n}\n\nfunction parseNodesFromString(input: string, warnings: ParseWarning[]): XnlNode[] {\n const state: ParseState = { input, pos: 0, length: input.length, warnings };\n const nodes: XnlNode[] = [];\n skipWhitespaceAndComments(state);\n while (!eof(state)) {\n nodes.push(parseNode(state));\n skipWhitespaceAndComments(state);\n }\n return nodes;\n}\n\nfunction parseNode(state: ParseState): DataElementNode | TextElementNode {\n consumeChar(state, \"<\", \"UNEXPECTED_TOKEN\", \"Expected '<' to start a node\");\n const tag = readIdentifier(state, \"Expected node name\");\n skipWhitespaceAndComments(state);\n const id = parseOptionalId(state);\n const metadata = parseMetadata(state);\n\n let attributes: AttributeMap | undefined;\n let body: XnlNode[] | undefined;\n let extend: ExtendBody | undefined;\n let text: string | undefined;\n let textMarker: string | undefined;\n\n skipWhitespaceAndComments(state);\n\n // Text node start\n if (consumeIf(state, \"?\")) {\n ({ text, textMarker } = parseTextBody(state, tag));\n return { kind: \"TextElement\", tag, id, metadata, attributes, text, textMarker };\n }\n\n // Parse zero or more section blocks until '>' or '?'\n while (true) {\n if (lookAhead(state, \">\")) {\n state.pos += 1;\n return { kind: \"DataElement\", tag, id, metadata, attributes, body, extend };\n }\n if (lookAhead(state, \"?\")) {\n state.pos += 1;\n if (body || extend) {\n throw error(state, \"INVALID_CONTENT\", `Text block not allowed with array/extend sections in <${tag}>`);\n }\n ({ text, textMarker } = parseTextBody(state, tag));\n return { kind: \"TextElement\", tag, id, metadata, attributes, text, textMarker };\n }\n if (lookAhead(state, \"{\")) {\n if (attributes) {\n throw error(state, \"INVALID_CONTENT\", \"Multiple attribute blocks are not allowed\");\n }\n attributes = parseAttributeBlock(state, tag);\n skipWhitespaceAndComments(state);\n continue;\n }\n if (lookAhead(state, \"[\")) {\n if (text) throw error(state, \"INVALID_CONTENT\", `Text block cannot include array block in <${tag}>`);\n if (body) {\n throw error(state, \"INVALID_CONTENT\", \"Multiple array blocks are not allowed\");\n }\n body = parseArrayBody(state, tag);\n skipWhitespaceAndComments(state);\n continue;\n }\n if (lookAhead(state, \"(\")) {\n if (text) throw error(state, \"INVALID_CONTENT\", `Text block cannot include extend block in <${tag}>`);\n if (extend) {\n throw error(state, \"INVALID_CONTENT\", \"Multiple extend blocks are not allowed\");\n }\n extend = parseExtendBody(state, tag);\n skipWhitespaceAndComments(state);\n continue;\n }\n if (eof(state)) {\n throw error(state, \"UNEXPECTED_EOF\", \"Unexpected end of input\");\n }\n throw error(state, \"UNEXPECTED_TOKEN\", `Unexpected token '${peek(state)}' while parsing node <${tag}>`);\n }\n}\n\nfunction parseMetadata(state: ParseState): AttributeMap {\n const attrs: AttributeMap = {};\n while (true) {\n skipWhitespaceAndComments(state);\n if (lookAhead(state, \"{\") || lookAhead(state, \"[\") || lookAhead(state, \"(\") || lookAhead(state, \"?\") || lookAhead(state, \">\")) {\n break;\n }\n if (eof(state)) {\n throw error(state, \"UNEXPECTED_EOF\", \"Unexpected end while reading metadata\");\n }\n const key = readKey(state, \"Expected metadata key\");\n skipWhitespaceAndComments(state);\n consumeChar(state, \"=\", \"UNEXPECTED_TOKEN\", \"Expected '=' after metadata key\");\n skipWhitespaceAndComments(state);\n attrs[key] = parseValueNode(state);\n }\n return attrs;\n}\n\nfunction parseAttributeBlock(state: ParseState, name: string): AttributeMap {\n consumeChar(state, \"{\", \"UNEXPECTED_TOKEN\", \"Expected '{' to start attribute block\");\n const attrs: AttributeMap = {};\n while (true) {\n skipWhitespaceAndComments(state);\n if (consumeIf(state, \"}\")) {\n return attrs;\n }\n if (eof(state)) {\n throw error(state, \"UNEXPECTED_EOF\", `Missing closing '}' for attributes in <${name}>`);\n }\n const key = readKey(state, \"Expected key in attribute block\");\n skipWhitespaceAndComments(state);\n consumeChar(state, \"=\", \"UNEXPECTED_TOKEN\", \"Expected '=' after key in attribute block\");\n skipWhitespaceAndComments(state);\n attrs[key] = parseValueNode(state);\n }\n}\n\nfunction parseArrayBody(state: ParseState, name: string): XnlNode[] {\n consumeChar(state, \"[\", \"UNEXPECTED_TOKEN\", \"Expected '[' to start array block\");\n const items: XnlNode[] = [];\n while (true) {\n skipWhitespaceAndComments(state);\n if (consumeIf(state, \"]\")) {\n return items;\n }\n if (eof(state)) {\n throw error(state, \"UNEXPECTED_EOF\", `Missing closing ']' for array in <${name}>`);\n }\n if (lookAhead(state, \"<\")) {\n items.push(parseNode(state));\n } else {\n items.push(parseValueNode(state));\n }\n }\n}\n\nfunction parseExtendBody(state: ParseState, name: string): ExtendBody {\n consumeChar(state, \"(\", \"UNEXPECTED_TOKEN\", \"Expected '(' to start extend block\");\n const children: Record<string, DataElementNode | TextElementNode> = {};\n const order: string[] = [];\n while (true) {\n skipWhitespaceAndComments(state);\n if (consumeIf(state, \")\")) {\n return { children, order };\n }\n if (eof(state)) {\n throw error(state, \"UNEXPECTED_EOF\", `Missing closing ')' for extend in <${name}>`);\n }\n if (!lookAhead(state, \"<\")) {\n throw error(state, \"INVALID_CONTENT\", `Extend block inside <${name}> must contain child nodes`);\n }\n const child = parseNode(state);\n mergeChild(children, order, child, name, state.warnings);\n }\n}\n\nfunction parseOptionalId(state: ParseState): XnlWord | undefined {\n if (!consumeIf(state, \"#\")) return undefined;\n const word = parseWordLiteral(state);\n skipWhitespaceAndComments(state);\n return word;\n}\n\nfunction parseTextBody(state: ParseState, name: string): { text: string; textMarker?: string } {\n const marker = readOptionalMarker(state);\n consumeChar(state, \">\", \"UNEXPECTED_TOKEN\", \"Expected '>' after text marker\");\n const start = state.pos;\n\n while (true) {\n const idx = state.input.indexOf(\"</?\", state.pos);\n if (idx === -1) {\n throw error(state, \"MISMATCHED_TAG\", `Missing closing text tag </?${marker ?? \"\"}> for <${name}>`);\n }\n const markerStart = idx + 3;\n let i = markerStart;\n while (i < state.length && isIdentifierChar(state.input[i])) i++;\n const foundMarker = state.input.slice(markerStart, i);\n if (state.input[i] !== \">\") {\n state.pos = idx;\n throw error(\n state,\n \"UNEXPECTED_TOKEN\",\n `Invalid closing text tag for <${name}>; expected '>' after marker '${foundMarker}'`\n );\n }\n if ((marker ?? \"\") !== foundMarker) {\n state.pos = idx;\n throw error(\n state,\n \"MISMATCHED_TAG\",\n `Mismatched text marker for <${name}>: expected '${marker ?? \"\"}' but found '${foundMarker}'`\n );\n }\n const closingIndent = indentationBefore(state.input, idx);\n const content = stripComments(dedentContent(state.input.slice(start, idx), closingIndent));\n state.pos = i + 1;\n return { text: content, textMarker: marker ?? undefined };\n }\n}\n\nfunction buildExtendBody(nodes: XnlNode[], parentName: string, warnings: ParseWarning[]): ExtendBody {\n const children: Record<string, DataElementNode | TextElementNode> = {};\n const order: string[] = [];\n for (const node of nodes) {\n const element = node as DataElementNode | TextElementNode;\n if (element.kind !== \"DataElement\" && element.kind !== \"TextElement\") continue;\n mergeChild(children, order, element, parentName, warnings);\n }\n return { children, order };\n}\n\nfunction mergeChild(\n children: Record<string, DataElementNode | TextElementNode>,\n order: string[],\n node: DataElementNode | TextElementNode,\n parentName: string,\n warnings: ParseWarning[]\n): void {\n if (children[node.tag]) {\n warnings.push({\n code: \"DUPLICATE_CHILD\",\n message: `Duplicate child '${node.tag}' inside <${parentName} ( ... )> (later node overwrote earlier)`,\n parentName,\n childName: node.tag,\n });\n const idx = order.indexOf(node.tag);\n if (idx !== -1) order.splice(idx, 1);\n }\n children[node.tag] = node;\n order.push(node.tag);\n}\n\nfunction parseValueNode(state: ParseState): XnlNode {\n const ch = state.input[state.pos];\n if (ch === \"<\") return parseNode(state);\n if (ch === \"{\") return parseObjectLiteral(state);\n if (ch === \"[\") return parseArrayLiteral(state);\n if (ch === \"'\" || ch === '\"') return parseStringLiteral(state);\n if (startsWithNumber(state)) return parseNumberLiteral(state);\n if (startsWithBoolean(state)) return parseBooleanLiteral(state);\n if (startsWithNull(state)) return parseNullLiteral(state);\n if (isIdentifierStart(ch)) return parseWordLiteral(state);\n\n throw error(state, \"INVALID_LITERAL\", `Unexpected literal starting with '${ch}'`);\n}\n\nfunction parseObjectLiteral(state: ParseState): Record<string, XnlNode> {\n consumeChar(state, \"{\", \"UNEXPECTED_TOKEN\", \"Expected '{' to start object literal\");\n const entries: Record<string, XnlNode> = {};\n while (true) {\n skipWhitespaceAndComments(state);\n if (consumeIf(state, \"}\")) break;\n const key = readKey(state, \"Expected key in object literal\");\n skipWhitespaceAndComments(state);\n consumeChar(state, \"=\", \"UNEXPECTED_TOKEN\", \"Expected '=' after key in object literal\");\n skipWhitespaceAndComments(state);\n entries[key] = parseValueNode(state);\n skipWhitespaceAndComments(state);\n }\n return entries;\n}\n\nfunction parseArrayLiteral(state: ParseState): XnlNode[] {\n consumeChar(state, \"[\", \"UNEXPECTED_TOKEN\", \"Expected '[' to start array literal\");\n const items: XnlNode[] = [];\n while (true) {\n skipWhitespaceAndComments(state);\n if (consumeIf(state, \"]\")) break;\n items.push(parseValueNode(state));\n skipWhitespaceAndComments(state);\n }\n return items;\n}\n\nfunction parseStringLiteral(state: ParseState): string {\n const quote = consume(state);\n let value = \"\";\n while (!eof(state)) {\n const ch = consume(state);\n if (ch === quote) {\n return value;\n }\n if (ch === \"\\\\\") {\n const next = consume(state);\n if (next === \"n\") value += \"\\n\";\n else if (next === \"t\") value += \"\\t\";\n else if (next === '\"') value += '\"';\n else if (next === \"'\") value += \"'\";\n else value += next;\n } else {\n value += ch;\n }\n }\n throw error(state, \"UNEXPECTED_EOF\", \"Unterminated string literal\");\n}\n\nfunction parseNumberLiteral(state: ParseState): number {\n const start = state.pos;\n if (state.input[state.pos] === \"+\" || state.input[state.pos] === \"-\") {\n state.pos++;\n }\n while (isDigit(peek(state))) {\n state.pos++;\n }\n if (peek(state) === \".\") {\n state.pos++;\n if (!isDigit(peek(state))) {\n throw error(state, \"INVALID_LITERAL\", \"Invalid float literal\");\n }\n while (isDigit(peek(state))) state.pos++;\n }\n if (peek(state) && (peek(state) === \"e\" || peek(state) === \"E\")) {\n state.pos++;\n if (peek(state) === \"+\" || peek(state) === \"-\") state.pos++;\n if (!isDigit(peek(state))) throw error(state, \"INVALID_LITERAL\", \"Invalid exponent in number\");\n while (isDigit(peek(state))) state.pos++;\n }\n const raw = state.input.slice(start, state.pos);\n const value = Number(raw);\n if (Number.isNaN(value)) {\n throw error(state, \"INVALID_LITERAL\", \"Invalid number literal\");\n }\n return value;\n}\n\nfunction parseBooleanLiteral(state: ParseState): boolean {\n if (lookAhead(state, \"true\")) {\n state.pos += 4;\n return true;\n }\n if (lookAhead(state, \"false\")) {\n state.pos += 5;\n return false;\n }\n throw error(state, \"INVALID_LITERAL\", \"Invalid boolean literal\");\n}\n\nfunction parseNullLiteral(state: ParseState): null {\n consumeString(state, \"null\", \"INVALID_LITERAL\", \"Invalid null literal\");\n return null;\n}\n\nfunction parseWordLiteral(state: ParseState): XnlWord {\n const first = readIdentifier(state, \"Expected identifier literal\");\n const parts = [first];\n while (lookAhead(state, \".\")) {\n state.pos += 1;\n const next = readIdentifier(state, \"Expected identifier segment after '.'\");\n parts.push(next);\n }\n const name = parts.pop() as string;\n return { kind: \"Word\", namespace: parts, name };\n}\n\nfunction readOptionalMarker(state: ParseState): string | undefined {\n if (!isMarkerStart(peek(state))) return undefined;\n return readMarker(state);\n}\n\nfunction readMarker(state: ParseState): string {\n const start = state.pos;\n while (!eof(state) && isIdentifierChar(state.input[state.pos])) {\n state.pos++;\n }\n return state.input.slice(start, state.pos);\n}\n\nfunction readKey(state: ParseState, message: string): string {\n const ch = peek(state);\n if (ch === \"\\\"\" || ch === \"'\") {\n return parseStringLiteral(state);\n }\n return readIdentifier(state, message);\n}\n\nfunction readIdentifier(state: ParseState, message: string): string {\n const start = state.pos;\n const first = state.input[state.pos];\n if (!isIdentifierStart(first)) {\n throw error(state, \"UNEXPECTED_TOKEN\", message);\n }\n state.pos++;\n while (!eof(state) && isIdentifierChar(state.input[state.pos])) {\n state.pos++;\n }\n return state.input.slice(start, state.pos);\n}\n\nfunction startsWithNumber(state: ParseState): boolean {\n const ch = state.input[state.pos];\n if (ch === \"+\" || ch === \"-\") {\n const next = peek(state, 1);\n return next !== undefined && isDigit(next);\n }\n return isDigit(ch);\n}\n\nfunction startsWithBoolean(state: ParseState): boolean {\n return lookAhead(state, \"true\") || lookAhead(state, \"false\");\n}\n\nfunction startsWithNull(state: ParseState): boolean {\n return lookAhead(state, \"null\");\n}\n\nfunction consumeIf(state: ParseState, token: string): boolean {\n if (lookAhead(state, token)) {\n state.pos += token.length;\n return true;\n }\n return false;\n}\n\nfunction consumeString(state: ParseState, token: string, code: any, message: string): void {\n if (!lookAhead(state, token)) {\n throw error(state, code, message);\n }\n state.pos += token.length;\n}\n\nfunction lookAhead(state: ParseState, token: string): boolean {\n return state.input.startsWith(token, state.pos);\n}\n\nfunction consumeChar(state: ParseState, expected: string, code: any, message: string): string {\n const ch = consume(state);\n if (ch !== expected) {\n throw error(state, code, message);\n }\n return ch;\n}\n\nfunction consume(state: ParseState): string {\n if (eof(state)) throw error(state, \"UNEXPECTED_EOF\", \"Unexpected end of input\");\n const ch = state.input[state.pos];\n state.pos += 1;\n return ch;\n}\n\nfunction skipWhitespaceAndComments(state: ParseState): void {\n while (!eof(state)) {\n const ch = state.input[state.pos];\n if (isWhitespace(ch)) {\n state.pos++;\n continue;\n }\n if (lookAhead(state, \"<!--\")) {\n skipComment(state);\n continue;\n }\n break;\n }\n}\n\nfunction indentationBefore(input: string, index: number): string {\n const lastNewline = input.lastIndexOf(\"\\n\", index - 1);\n if (lastNewline === -1) return \"\";\n const indent = input.slice(lastNewline + 1, index);\n return /^[ \\t]*$/.test(indent) ? indent : \"\";\n}\n\nfunction dedentContent(content: string, indent: string): string {\n if (!content.includes(\"\\n\") || indent === \"\") return content;\n const lines = content.split(\"\\n\");\n const startIndex = lines[0].length === 0 ? 1 : 0;\n const dedented = lines.slice(startIndex).map((line) => {\n let remove = 0;\n while (\n remove < indent.length &&\n remove < line.length &&\n line[remove] === indent[remove] &&\n (indent[remove] === \" \" || indent[remove] === \"\\t\")\n ) {\n remove++;\n }\n return line.slice(remove);\n });\n return dedented.join(\"\\n\");\n}\n\nfunction stripComments(content: string): string {\n return content.replace(/<!--[\\\\s\\\\S]*?-->/g, \"\");\n}\n\nfunction eof(state: ParseState): boolean {\n return state.pos >= state.length;\n}\n\nfunction peek(state: ParseState, offset = 0): string | undefined {\n const idx = state.pos + offset;\n return idx < state.length ? state.input[idx] : undefined;\n}\n\nfunction isIdentifierStart(ch: string | undefined): boolean {\n if (!ch) return false;\n return /[A-Za-z_]/.test(ch);\n}\n\nfunction isIdentifierChar(ch: string | undefined): boolean {\n if (!ch) return false;\n return /[A-Za-z0-9_-]/.test(ch);\n}\n\nfunction isMarkerStart(ch: string | undefined): boolean {\n return isIdentifierStart(ch) || isDigit(ch);\n}\n\nfunction isWhitespace(ch: string): boolean {\n return ch === \" \" || ch === \"\\t\" || ch === \"\\n\" || ch === \"\\r\";\n}\n\nfunction isDigit(ch: string | undefined): boolean {\n return ch !== undefined && ch >= \"0\" && ch <= \"9\";\n}\n\nfunction error(state: ParseState, code: any, message: string): XnlParseError {\n return new XnlParseError(code, message, state.input, state.pos);\n}\n\nfunction skipComment(state: ParseState): void {\n if (!lookAhead(state, \"<!--\")) return;\n const end = state.input.indexOf(\"-->\", state.pos + 4);\n if (end === -1) {\n throw error(state, \"UNEXPECTED_EOF\", \"Unterminated comment\");\n }\n state.pos = end + 3;\n}\n","export type ValueLiteral = string | boolean | null | number;\n\nexport type AttributeMap = Record<string, XnlNode>;\n\nexport interface ExtendBody {\n order: string[];\n children: Record<string, ElementNode>;\n}\n\nexport type ElementNode = DataElementNode | TextElementNode;\nexport type ElementNodeKind = 'DataElement' | 'TextElement';\n\nexport interface DataElementNode {\n kind: \"DataElement\";\n tag: string;\n id?: XnlWord;\n metadata: AttributeMap;\n attributes?: AttributeMap;\n body?: XnlNode[];\n extend?: ExtendBody;\n}\n\nexport interface XnlWord {\n kind: \"Word\";\n namespace: string[];\n name: string;\n}\n\nexport interface TextElementNode {\n kind: \"TextElement\";\n tag: string;\n id?: XnlWord;\n metadata: AttributeMap;\n attributes?: AttributeMap;\n text?: string;\n textMarker?: string;\n}\n\nexport interface CommentNode {\n kind: \"Comment\";\n value: string;\n}\n\nexport type ContainerNode = Array<XnlNode> | Object | ElementNode;\n\nexport type XnlNode = ValueLiteral | XnlWord | ContainerNode | CommentNode;\n\nexport function isWord(value: any): value is XnlWord {\n return value !== null && typeof value === \"object\" && (value as any).kind === \"Word\";\n}\n\nexport function wordToString(word?: XnlWord | null): string | undefined {\n if (!word) return undefined;\n const ns = word.namespace ?? [];\n const parts = [...ns.filter(Boolean), word.name].filter((p) => p !== undefined && p !== null);\n const str = parts.join(\".\");\n return str.length ? str : undefined;\n}\n\n\nexport type ParseWarningCode = \"DUPLICATE_CHILD\";\n\nexport interface ParseWarning {\n code: ParseWarningCode;\n message: string;\n parentName: string;\n childName: string;\n}\n\nexport interface XnlDocument {\n nodes: XnlNode[];\n warnings?: ParseWarning[];\n}\n\nexport interface SingleNodeResult {\n node: XnlNode;\n warnings: ParseWarning[];\n}\n\nexport interface UniqueChildrenResult {\n node: XnlNode;\n warnings: ParseWarning[];\n}\n","import {\n AttributeMap,\n CommentNode,\n DataElementNode,\n ElementNode,\n TextElementNode,\n XnlDocument,\n XnlNode,\n XnlWord,\n isWord,\n wordToString,\n} from \"./types\";\n\ninterface StringifyOptions {\n pretty?: boolean;\n indent?: number | string;\n}\n\ninterface StringifyState {\n pretty: boolean;\n indent: string;\n depth: number;\n}\n\nexport function stringify(value: XnlDocument | XnlNode, options: StringifyOptions = {}): string {\n const pretty = options.pretty === true;\n const indent = typeof options.indent === \"string\" ? options.indent : \" \".repeat(options.indent ?? 0);\n const state: StringifyState = { pretty, indent, depth: 0 };\n const separator = pretty ? \"\\n\" : \"\";\n const content = isDocument(value)\n ? (value.nodes as XnlNode[]).map((n) => serializeNode(n, state)).join(separator)\n : serializeNode(value as XnlNode, state);\n return content;\n}\n\nfunction isDocument(value: any): value is XnlDocument {\n return value && Array.isArray((value as XnlDocument).nodes);\n}\n\nfunction serializeNode(node: XnlNode, state: StringifyState): string {\n if (isComment(node)) {\n const pad = state.pretty ? state.indent.repeat(state.depth) : \"\";\n return `${pad}<!-- ${node.value} -->`;\n }\n if (isElement(node)) {\n const pad = state.pretty ? state.indent.repeat(state.depth) : \"\";\n if (node.kind === \"TextElement\") {\n const metaStr = serializeInlineAttributes(node.metadata, state);\n const attrStr = node.attributes ? ` ${serializeAttributeBlock(node.attributes, state)}` : \"\";\n const idPart = node.id ? ` #${formatWord(node.id)}` : \"\";\n const marker = node.textMarker ?? \"\";\n return `${pad}<${node.tag}${idPart}${metaStr}${attrStr} ?${marker}>${node.text ?? \"\"}</?${marker}>`;\n }\n const metaStr = serializeInlineAttributes(node.metadata, state);\n const attrPart = node.attributes ? ` ${serializeAttributeBlock(node.attributes, state)}` : \"\";\n const bodyPart = node.body ? ` ${serializeArrayBlock(node.body, state)}` : \"\";\n const extendPart = node.extend ? ` ${serializeExtendBlock(node.extend, state)}` : \"\";\n const idPart = node.id ? ` #${formatWord(node.id)}` : \"\";\n return `${pad}<${node.tag}${idPart}${metaStr}${attrPart}${bodyPart}${extendPart}>`;\n }\n if (Array.isArray(node)) {\n return serializeArrayLiteral(node, state);\n }\n if (isPlainObject(node)) {\n return serializeObjectLiteral(node as Record<string, XnlNode>, state);\n }\n return serializePrimitive(node as any);\n}\n\nfunction serializeInlineAttributes(attrs: AttributeMap, state: StringifyState): string {\n const parts: string[] = [];\n for (const [key, value] of Object.entries(attrs)) {\n parts.push(`${serializeKey(key)}=${serializeValueNode(value, state)}`);\n }\n return parts.length ? \" \" + parts.join(\" \") : \"\";\n}\n\nfunction serializeAttributeBlock(attrs: AttributeMap, state: StringifyState): string {\n if (!state.pretty) {\n const entries = Object.entries(attrs)\n .map(([k, v]) => `${serializeKey(k)} = ${serializeValueNode(v, state)}`)\n .join(\" \");\n return `{ ${entries} }`;\n }\n const nextDepth = state.depth + 1;\n const pad = state.indent.repeat(nextDepth);\n const lines = Object.entries(attrs).map(\n ([k, v]) => `${pad}${serializeKey(k)} = ${serializeValueNode(v, { ...state, depth: nextDepth })}`\n );\n const closingPad = state.indent.repeat(state.depth);\n return `{\\n${lines.join(\"\\n\")}\\n${closingPad}}`;\n}\n\nfunction serializeArrayBlock(items: XnlNode[], state: StringifyState): string {\n if (!state.pretty) {\n const serialized = items.map((item) => serializeValueNode(item, state)).join(\" \");\n return `[ ${serialized} ]`;\n }\n const nextDepth = state.depth + 1;\n const pad = state.indent.repeat(nextDepth);\n const lines = items.map((item) => `${pad}${serializeValueNode(item, { ...state, depth: nextDepth })}`);\n const closingPad = state.indent.repeat(state.depth);\n return `[\\n${lines.join(\"\\n\")}\\n${closingPad}]`;\n}\n\nfunction serializeExtendBlock(extend: { order: string[]; children: Record<string, ElementNode> }, state: StringifyState): string {\n if (!state.pretty) {\n const children = extend.order.map((name) => serializeNode(extend.children[name], state)).join(\" \");\n return `( ${children} )`;\n }\n const nextDepth = state.depth + 1;\n const pad = state.indent.repeat(nextDepth);\n const childStrings = extend.order.map((name) => `${pad}${serializeNode(extend.children[name], { ...state, depth: nextDepth })}`);\n const closingPad = state.indent.repeat(state.depth);\n return `(\\n${childStrings.join(\"\\n\")}\\n${closingPad})`;\n}\n\nfunction serializeValueNode(node: XnlNode, state: StringifyState): string {\n if (isComment(node) || isElement(node)) return serializeNode(node, state);\n if (isWord(node)) return formatWord(node);\n if (Array.isArray(node)) return serializeArrayLiteral(node, state);\n if (isPlainObject(node)) return serializeObjectLiteral(node as Record<string, XnlNode>, state);\n return serializePrimitive(node as any);\n}\n\nfunction serializePrimitive(value: string | number | boolean | null): string {\n if (value === null) return \"null\";\n if (typeof value === \"string\") return `\"${escapeString(value)}\"`;\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\n return String(value);\n}\n\nfunction serializeObjectLiteral(obj: Record<string, XnlNode>, state: StringifyState): string {\n if (!state.pretty) {\n return `{ ${Object.entries(obj)\n .map(([k, v]) => `${serializeKey(k)} = ${serializeValueNode(v, state)}`)\n .join(\" \")} }`;\n }\n const nextDepth = state.depth + 1;\n const pad = state.indent.repeat(nextDepth);\n const lines = Object.entries(obj).map(\n ([k, v]) => `${pad}${serializeKey(k)} = ${serializeValueNode(v, { ...state, depth: nextDepth })}`\n );\n const closingPad = state.indent.repeat(state.depth);\n return `{\\n${lines.join(\"\\n\")}\\n${closingPad}}`;\n}\n\nfunction serializeArrayLiteral(arr: XnlNode[], state: StringifyState): string {\n if (!state.pretty) {\n return `[${arr.map((v) => serializeValueNode(v, state)).join(\" \")}]`;\n }\n const nextDepth = state.depth + 1;\n const pad = state.indent.repeat(nextDepth);\n const lines = arr.map((v) => `${pad}${serializeValueNode(v, { ...state, depth: nextDepth })}`);\n const closingPad = state.indent.repeat(state.depth);\n return `[\\n${lines.join(\"\\n\")}\\n${closingPad}]`;\n}\n\nfunction isComment(node: XnlNode): node is CommentNode {\n return typeof node === \"object\" && node !== null && (node as CommentNode).kind === \"Comment\";\n}\n\nfunction isElement(node: XnlNode): node is ElementNode {\n return (\n typeof node === \"object\" &&\n node !== null &&\n ((node as DataElementNode).kind === \"DataElement\" || (node as TextElementNode).kind === \"TextElement\")\n );\n}\n\nfunction isPlainObject(value: any): value is Record<string, XnlNode> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value) && (value as any).kind === undefined;\n}\n\nfunction serializeKey(key: string): string {\n if (/^[A-Za-z_][A-Za-z0-9_-]*$/.test(key)) return key;\n return `\"${escapeString(key)}\"`;\n}\n\nfunction escapeString(value: string): string {\n return value\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\r/g, \"\\\\r\");\n}\n\nfunction formatWord(word: XnlWord): string {\n return wordToString(word) ?? \"\";\n}\n","import type {\n AttributeMap,\n CommentNode,\n DataElementNode,\n ElementNode,\n TextElementNode,\n XnlDocument,\n XnlNode,\n XnlWord,\n} from \"./types\";\nimport { isWord, wordToString } from \"./types\";\n\nexport interface LineBlockStringifyOptions {\n indent?: number | string;\n textMarkerFactory?: () => string;\n}\n\ninterface StringifyState {\n indent: string;\n depth: number;\n textMarkerFactory: () => string;\n}\n\nconst ULID_ENCODING = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\";\nlet lastUlidTime = -1;\nlet lastUlidRandom: number[] = [];\n\nexport function stringify(value: XnlDocument | XnlNode, options: LineBlockStringifyOptions = {}): string {\n const state: StringifyState = {\n indent: typeof options.indent === \"string\" ? options.indent : \" \".repeat(options.indent ?? 2),\n depth: 0,\n textMarkerFactory: options.textMarkerFactory ?? makeUlid,\n };\n if (isDocument(value)) {\n return value.nodes.map((node) => serializeNode(node, state)).join(\"\\n\");\n }\n return serializeNode(value as XnlNode, state);\n}\n\nfunction serializeNode(node: XnlNode, state: StringifyState): string {\n if (isComment(node)) return `${pad(state)}<!-- ${node.value} -->`;\n if (isElement(node)) return serializeElement(node, state);\n return `${pad(state)}${serializeInlineValue(node, state)}`;\n}\n\nfunction serializeElement(node: ElementNode, state: StringifyState): string {\n if (node.kind === \"TextElement\") return serializeTextElement(node, state);\n return serializeDataElement(node, state);\n}\n\nfunction serializeTextElement(node: TextElementNode, state: StringifyState): string {\n const marker = node.textMarker ?? state.textMarkerFactory();\n const open = [\n `<${node.tag}`,\n serializeId(node.id),\n serializeMetadata(node.metadata, state),\n node.attributes ? ` ${serializeAttributeBlock(node.attributes, state)}` : \"\",\n ` ?${marker}>`,\n ].join(\"\");\n const text = node.text ?? \"\";\n const textLines = text.length > 0\n ? text.split(/\\r?\\n/).map((line) => `${state.indent.repeat(state.depth + 1)}${line}`)\n : [];\n const close = `${pad(state)}</?${marker}>`;\n return [`${pad(state)}${open}`, ...textLines, close].join(\"\\n\");\n}\n\nfunction serializeDataElement(node: DataElementNode, state: StringifyState): string {\n const open = [\n `<${node.tag}`,\n serializeId(node.id),\n serializeMetadata(node.metadata, state),\n node.attributes ? ` ${serializeAttributeBlock(node.attributes, state)}` : \"\",\n ].join(\"\");\n const sections: string[] = [];\n if (node.body) sections.push(serializeArrayBlock(node.body, state));\n if (node.extend) sections.push(serializeExtendBlock(node.extend, state));\n if (sections.length === 0) return `${pad(state)}${open}>`;\n if (sections.length === 1) return `${pad(state)}${open} ${sections[0]}>`;\n return `${pad(state)}${open} ${sections.join(\" \")}>`;\n}\n\nfunction serializeArrayBlock(items: XnlNode[], state: StringifyState): string {\n if (items.length === 0) return \"[]\";\n const nextState = { ...state, depth: state.depth + 1 };\n const lines = items.map((item) => serializeNode(item, nextState));\n return `[\\n${lines.join(\"\\n\")}\\n${pad(state)}]`;\n}\n\nfunction serializeExtendBlock(\n extend: { order: string[]; children: Record<string, ElementNode> },\n state: StringifyState,\n): string {\n if (extend.order.length === 0) return \"()\";\n const nextState = { ...state, depth: state.depth + 1 };\n const lines = extend.order.map((name) => serializeElement(extend.children[name], nextState));\n return `(\\n${lines.join(\"\\n\")}\\n${pad(state)})`;\n}\n\nfunction serializeMetadata(attrs: AttributeMap, state: StringifyState): string {\n const entries = Object.entries(attrs);\n if (entries.length === 0) return \"\";\n return \" \" + entries.map(([key, value]) => `${serializeKey(key)}=${serializeInlineValue(value, state)}`).join(\" \");\n}\n\nfunction serializeAttributeBlock(attrs: AttributeMap, state: StringifyState): string {\n const entries = Object.entries(attrs)\n .map(([key, value]) => `${serializeKey(key)} = ${serializeInlineValue(value, state)}`)\n .join(\" \");\n return `{ ${entries} }`;\n}\n\nfunction serializeInlineValue(value: XnlNode, state: StringifyState): string {\n if (isComment(value)) return `<!-- ${value.value} -->`;\n if (isElement(value)) return serializeInlineElement(value, state);\n if (isWord(value)) return formatWord(value);\n if (Array.isArray(value)) return serializeInlineArray(value, state);\n if (isPlainObject(value)) return serializeInlineObject(value as Record<string, XnlNode>, state);\n return serializePrimitive(value as string | number | boolean | null);\n}\n\nfunction serializeInlineElement(node: ElementNode, state: StringifyState): string {\n const marker = node.kind === \"TextElement\" ? (node.textMarker ?? state.textMarkerFactory()) : undefined;\n const open = [\n `<${node.tag}`,\n serializeId(node.id),\n serializeMetadata(node.metadata, state),\n node.attributes ? ` ${serializeAttributeBlock(node.attributes, state)}` : \"\",\n ].join(\"\");\n if (node.kind === \"TextElement\") return `${open} ?${marker}>${node.text ?? \"\"}</?${marker}>`;\n const sections: string[] = [];\n if (node.body) sections.push(serializeInlineArrayBlock(node.body, state));\n if (node.extend) sections.push(serializeInlineExtendBlock(node.extend, state));\n if (sections.length === 0) return `${open}>`;\n return `${open} ${sections.join(\" \")}>`;\n}\n\nfunction serializeInlineArrayBlock(items: XnlNode[], state: StringifyState): string {\n return `[ ${items.map((item) => serializeInlineValue(item, state)).join(\" \")} ]`;\n}\n\nfunction serializeInlineExtendBlock(\n extend: { order: string[]; children: Record<string, ElementNode> },\n state: StringifyState,\n): string {\n return `( ${extend.order.map((name) => serializeInlineElement(extend.children[name], state)).join(\" \")} )`;\n}\n\nfunction serializeInlineObject(value: Record<string, XnlNode>, state: StringifyState): string {\n const entries = Object.entries(value)\n .map(([key, child]) => `${serializeKey(key)} = ${serializeInlineValue(child, state)}`)\n .join(\" \");\n return `{ ${entries} }`;\n}\n\nfunction serializeInlineArray(value: XnlNode[], state: StringifyState): string {\n return `[${value.map((child) => serializeInlineValue(child, state)).join(\" \")}]`;\n}\n\nfunction serializePrimitive(value: string | number | boolean | null): string {\n if (value === null) return \"null\";\n if (typeof value === \"string\") return `\"${escapeString(value)}\"`;\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\n return String(value);\n}\n\nfunction serializeId(id?: XnlWord): string {\n const value = formatWord(id);\n return value ? ` #${value}` : \"\";\n}\n\nfunction formatWord(word?: XnlWord): string {\n return wordToString(word) ?? \"\";\n}\n\nfunction serializeKey(key: string): string {\n if (/^[A-Za-z_][A-Za-z0-9_-]*$/.test(key)) return key;\n return `\"${escapeString(key)}\"`;\n}\n\nfunction escapeString(value: string): string {\n return value\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\r/g, \"\\\\r\");\n}\n\nfunction pad(state: StringifyState): string {\n return state.indent.repeat(state.depth);\n}\n\nfunction isDocument(value: any): value is XnlDocument {\n return value && Array.isArray((value as XnlDocument).nodes);\n}\n\nfunction isElement(value: XnlNode): value is ElementNode {\n return (\n typeof value === \"object\" &&\n value !== null &&\n ((value as DataElementNode).kind === \"DataElement\" || (value as TextElementNode).kind === \"TextElement\")\n );\n}\n\nfunction isComment(value: XnlNode): value is CommentNode {\n return typeof value === \"object\" && value !== null && (value as CommentNode).kind === \"Comment\";\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, XnlNode> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n const kind = (value as any).kind;\n return kind !== \"DataElement\" && kind !== \"TextElement\" && kind !== \"Comment\" && kind !== \"Word\";\n}\n\nfunction makeUlid(now = Date.now()): string {\n if (now > lastUlidTime) {\n lastUlidTime = now;\n lastUlidRandom = nextRandom();\n } else {\n lastUlidRandom = incrementRandom(lastUlidRandom);\n }\n return encodeTime(lastUlidTime, 10) + encodeRandom(lastUlidRandom);\n}\n\nfunction encodeTime(time: number, length: number): string {\n let out = \"\";\n for (let index = length - 1; index >= 0; index--) {\n out = ULID_ENCODING.charAt(time % 32) + out;\n time = Math.floor(time / 32);\n }\n return out;\n}\n\nfunction encodeRandom(values: number[]): string {\n return values.map((value) => ULID_ENCODING.charAt(value)).join(\"\");\n}\n\nfunction nextRandom(): number[] {\n return Array.from({ length: 16 }, () => (Math.random() * 32) | 0);\n}\n\nfunction incrementRandom(values: number[]): number[] {\n const next = [...values];\n for (let index = next.length - 1; index >= 0; index--) {\n if (next[index] < 31) {\n next[index] += 1;\n return next;\n }\n next[index] = 0;\n }\n return next;\n}\n","import {\n AttributeMap,\n DataElementNode,\n ElementNode,\n ExtendBody,\n TextElementNode,\n XnlDocument,\n XnlNode,\n isWord,\n wordToString,\n XnlWord,\n} from \"../types\";\n\nexport type PathItemType = \"UniqueName\" | \"MetadataSelector\" | \"InstanceProperty\" | \"MapKey\" | \"ListIndex\";\n\nexport interface PathItem {\n type: PathItemType;\n value: string;\n}\n\nexport type XnlPath = PathItem[];\n\nexport type MetadataSelectorMode = \"identity\" | \"metadata\";\n\nexport interface ResolveOptions {\n strict?: boolean;\n metadataIdMode?: MetadataSelectorMode;\n}\n\nexport interface SetOptions extends ResolveOptions {\n mode?: \"insert\" | \"replace\";\n}\n\nexport class XnlPathError extends Error {}\n\nexport function parsePath(input: string): XnlPath {\n if (!input) return [];\n const items: PathItem[] = [];\n let i = 0;\n while (i < input.length) {\n const c = input[i];\n const next = input[i + 1];\n if (c === \"#\") {\n i += 1;\n const { value, length } = readWordToken(input, i);\n items.push({ type: \"UniqueName\", value });\n i += length;\n continue;\n }\n if (c === \"<\") {\n const parsed = parseMetadataSelector(input, i);\n items.push(parsed.item);\n i = parsed.nextIndex;\n continue;\n }\n if (c === \":\" && next === \":\") {\n i += 2;\n if (input[i] === \"'\") {\n i += 1;\n const end = input.indexOf(\"'\", i);\n if (end === -1) throw new XnlPathError(\"Unterminated map key literal\");\n const key = input.slice(i, end);\n items.push({ type: \"MapKey\", value: key });\n i = end + 1;\n } else {\n const digits = readWhile(input, i, (ch) => /[0-9]/.test(ch));\n if (!digits) throw new XnlPathError(\"ListIndex must be numeric\");\n items.push({ type: \"ListIndex\", value: digits });\n i += digits.length;\n }\n continue;\n }\n if (c === \":\") {\n i += 1;\n const value = readUntilDelimiter(input, i);\n if (!value) throw new XnlPathError(\"InstanceProperty cannot be empty\");\n items.push({ type: \"InstanceProperty\", value });\n i += value.length;\n continue;\n }\n if (c === \".\") {\n throw new XnlPathError(\"Namespace/static segments are not supported for XNL paths\");\n }\n throw new XnlPathError(`Unexpected character '${c}' at position ${i}`);\n }\n return items;\n}\n\nexport function resolvePath(target: XnlDocument | XnlNode, path: string | XnlPath, options: ResolveOptions = {}): any {\n const { strict = true, metadataIdMode } = options;\n const parsed = Array.isArray(path) ? path : parsePath(path);\n let current: any = target;\n\n for (let i = 0; i < parsed.length; i++) {\n const item = parsed[i];\n if (item.type === \"UniqueName\") {\n const found = findByUniqueName(target, item.value);\n if (!found) {\n if (strict) throw new XnlPathError(`UniqueName '${item.value}' not found`);\n return undefined;\n }\n current = found;\n continue;\n }\n if (item.type === \"MetadataSelector\") {\n const isLast = i === parsed.length - 1;\n if (metadataIdMode === \"identity\") {\n const selector = parseMetadataSelectorValue(item.value);\n const found =\n selector.key === \"id\"\n ? findByUniqueName(target, selector.value) ?? findByMetadataSelector(target, item.value)\n : findByMetadataSelector(target, item.value);\n if (!found) {\n if (strict) throw new XnlPathError(`MetadataSelector '${item.value}' not found`);\n return undefined;\n }\n current = found;\n continue;\n }\n\n const allFound = findAllByMetadataSelector(target, item.value);\n if (allFound.length === 0) {\n if (strict) throw new XnlPathError(`MetadataSelector '${item.value}' not found`);\n return undefined;\n }\n\n // Preserve traversal semantics for non-terminal selectors while exposing all\n // matches when the selector is terminal.\n current = isLast ? allFound : allFound[0];\n continue;\n }\n\n if (item.type === \"InstanceProperty\") {\n if (current && isDataElement(current)) {\n current = (current as any)[item.value];\n } else if (current && isTextElement(current)) {\n current = (current as any)[item.value];\n } else if (isPlainObject(current) || isDocument(current)) {\n current = (current as any)[item.value];\n } else {\n if (strict) throw new XnlPathError(`InstanceProperty '${item.value}' not allowed on current node`);\n return undefined;\n }\n if (current === undefined && strict) {\n throw new XnlPathError(`InstanceProperty '${item.value}' not found`);\n }\n continue;\n }\n if (item.type === \"MapKey\") {\n if (isExtendBody(current)) {\n const child = current.children[item.value];\n if (!child && strict) throw new XnlPathError(`Extend child '${item.value}' not found`);\n current = child;\n continue;\n }\n if (!isPlainObject(current)) {\n if (strict) throw new XnlPathError(\"MapKey requires a map/object target\");\n return undefined;\n }\n if (!(item.value in (current as any)) && strict) {\n throw new XnlPathError(`Key '${item.value}' not found`);\n }\n current = (current as any)[item.value];\n continue;\n }\n if (item.type === \"ListIndex\") {\n const index = Number(item.value);\n if (isExtendBody(current)) {\n const tag = current.order[index];\n if (tag === undefined) {\n if (strict) throw new XnlPathError(`Extend index ${index} out of bounds`);\n return undefined;\n }\n current = current.children[tag];\n continue;\n }\n if (!Array.isArray(current)) {\n if (strict) throw new XnlPathError(\"ListIndex requires an array target\");\n return undefined;\n }\n if (index < 0 || index >= current.length) {\n if (strict) throw new XnlPathError(`Index ${index} out of bounds`);\n return undefined;\n }\n current = current[index];\n }\n }\n return current;\n}\n\nexport function setPathValue(\n target: XnlDocument | XnlNode,\n path: string | XnlPath,\n value: any,\n options: SetOptions = {}\n): any {\n const { mode = \"insert\", strict = true } = options;\n const parsed = Array.isArray(path) ? path : parsePath(path);\n if (parsed.length === 0) {\n return value;\n }\n const { parent, last } = getParentAndLast(target, parsed, { strict, createMissing: true });\n\n switch (last.type) {\n case \"InstanceProperty\":\n (parent as any)[last.value] = value;\n return target;\n case \"MapKey\":\n if (isExtendBody(parent)) {\n parent.children[last.value] = value;\n if (!parent.order.includes(last.value)) {\n parent.order.push(last.value);\n }\n return target;\n }\n ensureMap(parent, strict);\n (parent as any)[last.value] = value;\n return target;\n case \"ListIndex\": {\n const idx = Number(last.value);\n if (isExtendBody(parent)) {\n if (mode === \"insert\") {\n parent.order.splice(idx, 0, value.tag ?? String(idx));\n parent.children[value.tag ?? String(idx)] = value;\n } else {\n const tag = parent.order[idx];\n if (tag === undefined && strict) {\n throw new XnlPathError(`Extend index ${idx} out of bounds`);\n }\n const useTag = value?.tag ?? tag;\n parent.order[idx] = useTag;\n parent.children[useTag] = value;\n }\n return target;\n }\n if (!Array.isArray(parent)) {\n throw new XnlPathError(\"ListIndex requires an array target\");\n }\n if (mode === \"insert\") {\n const insertAt = idx < 0 ? 0 : idx > parent.length ? parent.length : idx;\n parent.splice(insertAt, 0, value);\n } else {\n if (idx < 0 || idx >= parent.length) {\n throw new XnlPathError(`Index ${idx} out of bounds for replace`);\n }\n parent[idx] = value;\n }\n return target;\n }\n default:\n throw new XnlPathError(`Unsupported path item ${last.type}`);\n }\n}\n\nexport function deleteAtPath(target: XnlDocument | XnlNode, path: string | XnlPath, options: ResolveOptions = {}): any {\n const { strict = true } = options;\n const parsed = Array.isArray(path) ? path : parsePath(path);\n if (parsed.length === 0) return undefined;\n const { parent, last } = getParentAndLast(target, parsed, { strict, createMissing: false });\n switch (last.type) {\n case \"InstanceProperty\":\n if (isPlainObject(parent) || isDataElement(parent) || isTextElement(parent) || isDocument(parent)) {\n if (!(last.value in (parent as any)) && strict) {\n throw new XnlPathError(`InstanceProperty '${last.value}' not found`);\n }\n delete (parent as any)[last.value];\n return target;\n }\n throw new XnlPathError(\"InstanceProperty delete requires an object-like target\");\n case \"MapKey\":\n if (isExtendBody(parent)) {\n if (!(last.value in parent.children) && strict) {\n throw new XnlPathError(`Extend child '${last.value}' not found`);\n }\n delete parent.children[last.value];\n parent.order = parent.order.filter((t) => t !== last.value);\n return target;\n }\n ensureMap(parent, strict);\n delete (parent as any)[last.value];\n return target;\n case \"ListIndex\": {\n const idx = Number(last.value);\n if (isExtendBody(parent)) {\n if (idx < 0 || idx >= parent.order.length) {\n if (strict) throw new XnlPathError(`Extend index ${idx} out of bounds`);\n return target;\n }\n const tag = parent.order[idx];\n parent.order.splice(idx, 1);\n delete parent.children[tag];\n return target;\n }\n if (!Array.isArray(parent)) throw new XnlPathError(\"ListIndex delete requires an array target\");\n if (idx < 0 || idx >= parent.length) {\n if (strict) throw new XnlPathError(`Index ${idx} out of bounds`);\n return target;\n }\n parent.splice(idx, 1);\n return target;\n }\n default:\n throw new XnlPathError(`Unsupported path item ${last.type}`);\n }\n}\n\nfunction getParentAndLast(\n target: XnlDocument | XnlNode,\n path: XnlPath,\n opts: ResolveOptions & { createMissing: boolean }\n): { parent: any; last: PathItem } {\n if (path.length === 0) throw new XnlPathError(\"Path is empty\");\n const { createMissing, strict = true } = opts;\n const parentPath = path.slice(0, -1);\n const last = path[path.length - 1];\n let current: any = target;\n for (const item of parentPath) {\n if (item.type === \"UniqueName\") {\n const found = findByUniqueName(target, item.value);\n if (!found) {\n if (strict) throw new XnlPathError(`UniqueName '${item.value}' not found`);\n return { parent: undefined, last };\n }\n current = found;\n continue;\n }\n if (item.type === \"MetadataSelector\") {\n const selector = parseMetadataSelectorValue(item.value);\n const found =\n selector.key === \"id\"\n ? findByUniqueName(target, selector.value) ?? findByMetadataSelector(target, item.value)\n : findByMetadataSelector(target, item.value);\n if (!found) {\n if (strict) throw new XnlPathError(`MetadataSelector '${item.value}' not found`);\n return { parent: undefined, last };\n }\n current = found;\n continue;\n }\n if (item.type === \"InstanceProperty\") {\n if (current && isDataElement(current)) {\n if ((current as any)[item.value] === undefined && createMissing) {\n if (item.value === \"metadata\" || item.value === \"attributes\") {\n (current as any)[item.value] = {};\n } else if (item.value === \"body\") {\n (current as any)[item.value] = [];\n } else if (item.value === \"extend\") {\n (current as any)[item.value] = { order: [], children: {} } as ExtendBody;\n }\n }\n current = (current as any)[item.value];\n } else if (current && isTextElement(current)) {\n current = (current as any)[item.value];\n } else if (isPlainObject(current) || isDocument(current)) {\n if ((current as any)[item.value] === undefined && createMissing && isPlainObject(current)) {\n (current as any)[item.value] = {};\n }\n current = (current as any)[item.value];\n } else {\n throw new XnlPathError(`InstanceProperty '${item.value}' not allowed on current node`);\n }\n if (current === undefined && strict) {\n throw new XnlPathError(`InstanceProperty '${item.value}' not found`);\n }\n continue;\n }\n if (item.type === \"MapKey\") {\n if (isExtendBody(current)) {\n const child = current.children[item.value];\n if (!child && createMissing) {\n current.children[item.value] = undefined as any;\n if (!current.order.includes(item.value)) {\n current.order.push(item.value);\n }\n }\n current = current.children[item.value];\n if (current === undefined && strict && !createMissing) {\n throw new XnlPathError(`Extend child '${item.value}' not found`);\n }\n continue;\n }\n ensureMap(current, strict);\n if (!(item.value in (current as any)) && createMissing) {\n (current as any)[item.value] = {};\n }\n current = (current as any)[item.value];\n if (current === undefined && strict && !createMissing) {\n throw new XnlPathError(`Key '${item.value}' not found`);\n }\n continue;\n }\n if (item.type === \"ListIndex\") {\n const idx = Number(item.value);\n if (isExtendBody(current)) {\n if (idx < 0 || idx > current.order.length) {\n throw new XnlPathError(`Extend index ${idx} out of bounds`);\n }\n const tag = current.order[idx];\n if (!tag && createMissing) {\n const placeholder = String(idx);\n current.order[idx] = placeholder;\n current.children[placeholder] = undefined as any;\n current = current.children[placeholder];\n } else {\n if (tag === undefined && strict) {\n throw new XnlPathError(`Extend index ${idx} out of bounds`);\n }\n current = current.children[tag];\n }\n continue;\n }\n if (!Array.isArray(current)) {\n if (!strict && !current) return { parent: undefined, last };\n throw new XnlPathError(\"ListIndex requires an array target\");\n }\n if (idx < 0 || idx > current.length) {\n throw new XnlPathError(`Index ${idx} out of bounds`);\n }\n if (createMissing && idx === current.length) {\n current.push(undefined as any);\n }\n current = current[idx];\n continue;\n }\n }\n return { parent: current, last };\n}\n\nfunction readUntilDelimiter(input: string, start: number): string {\n let i = start;\n let value = \"\";\n while (i < input.length) {\n const c = input[i];\n if (c === \":\" || c === \"#\" || c === \".\" || c === \"<\") break;\n value += c;\n i++;\n }\n return value;\n}\n\nfunction readWordToken(input: string, start: number): { value: string; length: number } {\n let i = start;\n let value = \"\";\n while (i < input.length) {\n const c = input[i];\n if (c === \":\" || c === \"#\") break;\n value += c;\n i++;\n }\n if (!value) throw new XnlPathError(\"UniqueName cannot be empty\");\n const segments = value.split(\".\");\n for (const segment of segments) {\n if (!/^[A-Za-z_][A-Za-z0-9_-]*$/.test(segment)) {\n throw new XnlPathError(\"UniqueName must use word identifiers (letters/digits/_/- with dots for namespace)\");\n }\n }\n return { value, length: value.length };\n}\n\nfunction readWhile(input: string, start: number, pred: (c: string) => boolean): string {\n let i = start;\n let out = \"\";\n while (i < input.length && pred(input[i])) {\n out += input[i];\n i++;\n }\n return out;\n}\n\nfunction findByUniqueName(target: XnlDocument | XnlNode, id: string): ElementNode | undefined {\n const roots: XnlNode[] = isDocument(target) ? target.nodes : [target as XnlNode];\n for (const root of roots) {\n const found = findInNode(root, id);\n if (found) return found;\n }\n return undefined;\n}\n\nfunction findByMetadataSelector(target: XnlDocument | XnlNode, selector: string): ElementNode | undefined {\n const parsed = parseMetadataSelectorValue(selector);\n const roots: XnlNode[] = isDocument(target) ? target.nodes : [target as XnlNode];\n for (const root of roots) {\n const found = findInNodeByMeta(root, parsed.key, parsed.value);\n if (found) return found;\n }\n return undefined;\n}\n\nfunction findAllByMetadataSelector(target: XnlDocument | XnlNode, selector: string): ElementNode[] {\n const parsed = parseMetadataSelectorValue(selector);\n const roots: XnlNode[] = isDocument(target) ? target.nodes : [target as XnlNode];\n const out: ElementNode[] = [];\n for (const root of roots) {\n collectInNodeByMeta(root, parsed.key, parsed.value, out);\n }\n return out;\n}\n\nfunction findInNodeByMeta(node: XnlNode, key: string, value: string): ElementNode | undefined {\n if (isElementNode(node)) {\n const meta = (node as any).metadata as AttributeMap | undefined;\n const raw = meta ? (meta as any)[key] : undefined;\n const rawStr = typeof raw === \"string\" ? raw : isWord(raw) ? wordToString(raw) : undefined;\n if (rawStr === value) return node;\n\n if (node.kind === \"DataElement\") {\n if (node.body) {\n for (const child of node.body) {\n const found = findInNodeByMeta(child, key, value);\n if (found) return found;\n }\n }\n if (node.extend) {\n for (const tag of node.extend.order) {\n const child = node.extend.children[tag];\n if (!child) continue;\n const found = findInNodeByMeta(child, key, value);\n if (found) return found;\n }\n }\n }\n\n return undefined;\n }\n\n if (Array.isArray(node)) {\n for (const child of node) {\n const found = findInNodeByMeta(child, key, value);\n if (found) return found;\n }\n } else if (isPlainObject(node)) {\n for (const k of Object.keys(node)) {\n const found = findInNodeByMeta((node as any)[k], key, value);\n if (found) return found;\n }\n }\n\n return undefined;\n}\n\nfunction collectInNodeByMeta(node: XnlNode, key: string, value: string, out: ElementNode[]): void {\n if (isElementNode(node)) {\n const meta = (node as any).metadata as AttributeMap | undefined;\n const raw = meta ? (meta as any)[key] : undefined;\n const rawStr = typeof raw === \"string\" ? raw : isWord(raw) ? wordToString(raw) : undefined;\n if (rawStr === value) out.push(node);\n\n if (node.kind === \"DataElement\") {\n if (node.body) {\n for (const child of node.body) {\n collectInNodeByMeta(child, key, value, out);\n }\n }\n if (node.extend) {\n for (const tag of node.extend.order) {\n const child = node.extend.children[tag];\n if (!child) continue;\n collectInNodeByMeta(child, key, value, out);\n }\n }\n }\n return;\n }\n\n if (Array.isArray(node)) {\n for (const child of node) {\n collectInNodeByMeta(child, key, value, out);\n }\n } else if (isPlainObject(node)) {\n for (const k of Object.keys(node)) {\n collectInNodeByMeta((node as any)[k], key, value, out);\n }\n }\n}\n\nexport function parseMetadataSelectorValue(selector: string): { key: string; value: string } {\n const m = selector.match(/^<([A-Za-z_][A-Za-z0-9_-]*)=(\"([^\"]*)\"|'([^']*)')>$/);\n if (!m) throw new XnlPathError(\"Invalid metadata selector\");\n const key = m[1];\n const value = m[3] ?? m[4] ?? \"\";\n return { key, value };\n}\n\nfunction parseMetadataSelector(input: string, start: number): { item: PathItem; nextIndex: number } {\n if (input[start] !== \"<\") throw new XnlPathError(\"Metadata selector must start with '<'\");\n const end = input.indexOf(\">\", start);\n if (end === -1) throw new XnlPathError(\"Unterminated metadata selector\");\n const raw = input.slice(start, end + 1);\n parseMetadataSelectorValue(raw);\n return { item: { type: \"MetadataSelector\", value: raw }, nextIndex: end + 1 };\n}\n\nfunction findInNode(node: XnlNode, id: string): ElementNode | undefined {\n if (isElementNode(node)) {\n if (readId(node) === id) return node;\n if (node.kind === \"DataElement\") {\n if (node.body) {\n for (const child of node.body) {\n const found = findInNode(child, id);\n if (found) return found;\n }\n }\n if (node.extend) {\n for (const tag of node.extend.order) {\n const child = node.extend.children[tag];\n if (!child) continue;\n const found = findInNode(child, id);\n if (found) return found;\n }\n }\n }\n return undefined;\n }\n if (Array.isArray(node)) {\n for (const child of node) {\n const found = findInNode(child, id);\n if (found) return found;\n }\n } else if (isPlainObject(node)) {\n for (const key of Object.keys(node)) {\n const found = findInNode((node as any)[key], id);\n if (found) return found;\n }\n }\n return undefined;\n}\n\nfunction isElementNode(node: any): node is ElementNode {\n return node && (node.kind === \"DataElement\" || node.kind === \"TextElement\");\n}\n\nfunction isDataElement(node: any): node is DataElementNode {\n return node && node.kind === \"DataElement\";\n}\n\nfunction isTextElement(node: any): node is TextElementNode {\n return node && node.kind === \"TextElement\";\n}\n\nfunction isExtendBody(value: any): value is ExtendBody {\n return value && typeof value === \"object\" && Array.isArray(value.order) && value.children;\n}\n\nfunction isDocument(value: any): value is XnlDocument {\n return value && typeof value === \"object\" && Array.isArray((value as any).nodes);\n}\n\nfunction isPlainObject(value: any): value is Record<string, any> {\n return (\n value !== null &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n !isElementNode(value) &&\n !isExtendBody(value) &&\n !isWord(value)\n );\n}\n\nfunction ensureMap(value: any, strict: boolean) {\n if (!isPlainObject(value)) {\n if (strict) throw new XnlPathError(\"Target is not a map/object\");\n }\n}\n\nfunction readId(node: ElementNode | undefined): string | undefined {\n if (!node) return undefined;\n const idValue = (node as any).id as XnlWord | undefined;\n const wordStr = wordToString(idValue);\n if (wordStr) return wordStr;\n const metaId = (node as any).metadata?.id;\n if (isWord(metaId)) return wordToString(metaId);\n if (typeof metaId === \"string\") return metaId;\n return undefined;\n}\n","import { deleteAtPath, parsePath, resolvePath, setPathValue, XnlPath, XnlPathError, PathItem } from \"../path\";\nimport { DataElementNode, TextElementNode, XnlNode, isWord, wordToString } from \"../types\";\n\nexport type MutationType =\n | \"TREE_ADD\"\n | \"TREE_DELETE\"\n | \"TREE_MOVE\"\n | \"TREE_UPDATE\"\n | \"TREE_MOVE_SAME_LEVEL\"\n | \"TREE_MOVE_CROSS_LEVEL\"\n | \"OBJECT_ADD\"\n | \"OBJECT_DELETE\"\n | \"OBJECT_UPDATE\";\n\nexport interface XnlMutation {\n type: MutationType;\n path: string | XnlPath;\n pathBefore?: string | XnlPath;\n valueBefore?: XnlNode;\n valueAfter?: XnlNode;\n metadata?: Record<string, unknown>;\n targetUniqueName?: string;\n parentUniqueNameBefore?: string;\n parentUniqueNameAfter?: string;\n}\n\nexport type MetadataIdMode = \"identity\" | \"metadata\";\n\nexport interface XnlMutationOptions {\n metadataIdMode?: MetadataIdMode;\n}\n\nfunction resolveMetaIdMode(opts: XnlMutationOptions): MetadataIdMode {\n return opts.metadataIdMode ?? \"identity\";\n}\n\nfunction isMetadataIdPath(path: XnlPath): boolean {\n const n = path.length;\n return (\n n >= 2 &&\n path[n - 2]?.type === \"InstanceProperty\" &&\n path[n - 2]?.value === \"metadata\" &&\n path[n - 1]?.type === \"MapKey\" &&\n path[n - 1]?.value === \"id\"\n );\n}\n\nfunction isMetadataMapPath(path: XnlPath): boolean {\n const last = path[path.length - 1];\n return last?.type === \"InstanceProperty\" && last.value === \"metadata\";\n}\n\nexport function applyMutations(root: XnlNode, mutations: XnlMutation[], opts: XnlMutationOptions = {}): XnlNode {\n let current = root;\n for (const mutation of mutations) {\n current = applySingle(current, mutation, opts);\n }\n return current;\n}\n\nexport function diffNodes(\n oldNode: XnlNode,\n newNode: XnlNode,\n basePath: string | XnlPath = [],\n opts: XnlMutationOptions = {}\n): XnlMutation[] {\n const pathItems = Array.isArray(basePath) ? basePath : parsePath(basePath);\n if (!sameKind(oldNode, newNode)) {\n throw new XnlPathError(\"Root kinds must match to diff\");\n }\n if (isValueLiteral(oldNode) || isComment(oldNode)) {\n return oldNode === newNode ? [] : [{ type: \"OBJECT_UPDATE\", path: pathItems, valueAfter: newNode }];\n }\n if (Array.isArray(oldNode) && Array.isArray(newNode)) {\n return diffArray(oldNode, newNode, pathItems, undefined, undefined, opts);\n }\n if (isPlainObject(oldNode) && isPlainObject(newNode)) {\n return diffMap(oldNode as Record<string, any>, newNode as Record<string, any>, pathItems, undefined, undefined, opts);\n }\n if (isTextElement(oldNode) && isTextElement(newNode)) {\n return diffTextElement(oldNode, newNode, pathItems, opts);\n }\n if (isDataElement(oldNode) && isDataElement(newNode)) {\n const mutations = diffDataElement(oldNode, newNode, pathItems, opts);\n return reconcileMoves(mutations);\n }\n return [];\n}\n\nfunction applySingle(root: XnlNode, mutation: XnlMutation, opts: XnlMutationOptions): XnlNode {\n const { type, path, valueAfter } = mutation;\n const pathItems = Array.isArray(path) ? path : parsePath(path);\n\n if (resolveMetaIdMode(opts) === \"identity\" && isMetadataIdPath(pathItems)) {\n return root;\n }\n\n if (type === \"TREE_MOVE\" || type === \"TREE_MOVE_SAME_LEVEL\" || type === \"TREE_MOVE_CROSS_LEVEL\") {\n if (!mutation.targetUniqueName && !mutation.pathBefore) {\n throw new XnlPathError(\"TREE_MOVE requires targetUniqueName or pathBefore\");\n }\n const fromPath = mutation.pathBefore\n ? Array.isArray(mutation.pathBefore)\n ? mutation.pathBefore\n : parsePath(mutation.pathBefore)\n : [];\n let moved = mutation.targetUniqueName ? extractByUniqueId(root, mutation.targetUniqueName) : undefined;\n if (moved === undefined && fromPath.length > 0) {\n try {\n const found = resolvePath(root, fromPath, { strict: false });\n if (moved === undefined) moved = found;\n deleteAtPath(root, fromPath, { strict: false });\n } catch {\n /* ignore */\n }\n }\n if (moved === undefined && mutation.targetUniqueName) {\n throw new XnlPathError(`TREE_MOVE could not find node '${mutation.targetUniqueName}' to move`);\n }\n return applySingle(root, { ...mutation, type: \"TREE_ADD\", path, valueAfter: moved }, opts);\n }\n\n switch (type) {\n case \"TREE_ADD\":\n setPathValue(root, pathItems, valueAfter, { mode: \"insert\" });\n return root;\n case \"TREE_DELETE\":\n deleteAtPath(root, pathItems);\n return root;\n case \"TREE_UPDATE\":\n setPathValue(root, pathItems, valueAfter, { mode: \"replace\" });\n return root;\n case \"OBJECT_ADD\":\n case \"OBJECT_UPDATE\":\n setPathValue(root, pathItems, valueAfter, { mode: \"replace\" });\n return root;\n case \"OBJECT_DELETE\":\n deleteAtPath(root, pathItems);\n return root;\n default:\n throw new XnlPathError(`Unknown mutation type ${type}`);\n }\n}\n\nfunction diffTextElement(\n oldNode: TextElementNode,\n newNode: TextElementNode,\n basePath: XnlPath,\n opts: XnlMutationOptions\n): XnlMutation[] {\n const mutations: XnlMutation[] = [];\n mutations.push(...diffMap(oldNode.metadata, newNode.metadata, [...basePath, ip(\"metadata\")], oldNode, newNode, opts));\n if (oldNode.attributes || newNode.attributes) {\n mutations.push(...diffMap(oldNode.attributes ?? {}, newNode.attributes ?? {}, [...basePath, ip(\"attributes\")], oldNode, newNode, opts));\n }\n if (oldNode.text !== newNode.text) {\n mutations.push({\n type: \"TREE_UPDATE\",\n path: [...basePath, ip(\"text\")],\n valueAfter: newNode.text,\n });\n }\n if (oldNode.textMarker !== newNode.textMarker) {\n mutations.push({\n type: \"TREE_UPDATE\",\n path: [...basePath, ip(\"textMarker\")],\n valueAfter: newNode.textMarker,\n });\n }\n return mutations;\n}\n\nfunction diffDataElement(\n oldNode: DataElementNode,\n newNode: DataElementNode,\n basePath: XnlPath,\n opts: XnlMutationOptions\n): XnlMutation[] {\n const mutations: XnlMutation[] = [];\n const metaPath = [...basePath, ip(\"metadata\")];\n mutations.push(...diffMap(oldNode.metadata, newNode.metadata, metaPath, oldNode, newNode, opts));\n const attrPath = [...basePath, ip(\"attributes\")];\n mutations.push(...diffMap(oldNode.attributes ?? {}, newNode.attributes ?? {}, attrPath, oldNode, newNode, opts));\n\n if (oldNode.body || newNode.body) {\n mutations.push(\n ...diffArray(oldNode.body ?? [], newNode.body ?? [], [...basePath, ip(\"body\")], oldNode, newNode, opts)\n );\n }\n if (oldNode.extend || newNode.extend) {\n mutations.push(...diffExtend(oldNode.extend, newNode.extend, [...basePath, ip(\"extend\")], oldNode, newNode, opts));\n }\n return mutations;\n}\n\nfunction diffArray(\n oldArr: XnlNode[],\n newArr: XnlNode[],\n basePath: XnlPath,\n parentBefore: any,\n parentAfter: any,\n opts: XnlMutationOptions\n): XnlMutation[] {\n const mutations: XnlMutation[] = [];\n\n const parentId =\n resolveMetaIdMode(opts) === \"identity\" ? readIdOrMetadaataId(parentBefore) ?? readIdOrMetadaataId(parentAfter) : undefined;\n\n const pathBase = parentId ? [ms(\"id\", parentId) as PathItem, ip(\"body\")] : basePath;\n const oldById: Record<string, { index: number; value: XnlNode }> = {};\n const newById: Record<string, { index: number; value: XnlNode }> = {};\n oldArr.forEach((item, idx) => {\n const id = readIdOrMetadaataId(item);\n if (id) oldById[id] = { index: idx, value: item };\n });\n newArr.forEach((item, idx) => {\n const id = readIdOrMetadaataId(item);\n if (id) newById[id] = { index: idx, value: item };\n });\n\n const max = Math.max(oldArr.length, newArr.length);\n for (let i = 0; i < max; i++) {\n const oldItem = oldArr[i];\n const newItem = newArr[i];\n const path = [...pathBase, li(i)];\n if (oldItem === undefined && newItem !== undefined) {\n const id = readIdOrMetadaataId(newItem);\n mutations.push({\n type: \"TREE_ADD\",\n path,\n valueAfter: newItem,\n targetUniqueName: id,\n parentUniqueNameAfter: readIdOrMetadaataId(parentAfter),\n });\n continue;\n }\n if (oldItem !== undefined && newItem === undefined) {\n const id = readIdOrMetadaataId(oldItem);\n mutations.push({\n type: \"TREE_DELETE\",\n path,\n valueBefore: oldItem,\n targetUniqueName: id,\n parentUniqueNameBefore: readIdOrMetadaataId(parentBefore),\n });\n continue;\n }\n if (oldItem !== undefined && newItem !== undefined) {\n const useIdentity = resolveMetaIdMode(opts) === \"identity\";\n\n const oldId = readIdOrMetadaataId(oldItem);\n const newId = readIdOrMetadaataId(newItem);\n\n if (useIdentity && oldId && newId && oldId !== newId) {\n mutations.push({\n type: \"TREE_DELETE\",\n path,\n valueBefore: oldItem,\n targetUniqueName: oldId,\n parentUniqueNameBefore: readIdOrMetadaataId(parentBefore),\n });\n mutations.push({\n type: \"TREE_ADD\",\n path,\n valueAfter: newItem,\n targetUniqueName: newId,\n parentUniqueNameAfter: readIdOrMetadaataId(parentAfter),\n });\n continue;\n }\n\n if (isEqual(oldItem, newItem)) {\n continue;\n }\n\n const nested = diffNodes(oldItem, newItem, path, opts);\n if (nested.length === 0) {\n if (!useIdentity) {\n mutations.push({ type: \"TREE_UPDATE\", path, valueAfter: newItem, targetUniqueName: readIdOrMetadaataId(newItem) });\n }\n } else {\n mutations.push(...nested);\n }\n }\n }\n\n if (resolveMetaIdMode(opts) === \"identity\") {\n const oldIds = oldArr.map(readIdOrMetadaataId).filter(Boolean) as string[];\n const newIds = newArr.map(readIdOrMetadaataId).filter(Boolean) as string[];\n if (oldIds.length && newIds.length) {\n for (const id of oldIds) {\n if (!(id in newById)) continue;\n const oldIdx = oldById[id]?.index ?? -1;\n const newIdx = newById[id]?.index ?? -1;\n if (oldIdx !== -1 && newIdx !== -1 && oldIdx !== newIdx) {\n mutations.push({\n type: \"TREE_MOVE_SAME_LEVEL\",\n pathBefore: [...pathBase, li(oldIdx)],\n path: [...pathBase, li(newIdx)],\n targetUniqueName: id,\n parentUniqueNameBefore: readIdOrMetadaataId(parentBefore),\n parentUniqueNameAfter: readIdOrMetadaataId(parentAfter),\n });\n }\n }\n }\n }\n return mutations;\n}\n\nfunction diffMap(\n oldMap: Record<string, any>,\n newMap: Record<string, any>,\n basePath: XnlPath,\n parentBefore: any,\n parentAfter: any,\n opts: XnlMutationOptions\n): XnlMutation[] {\n const mutations: XnlMutation[] = [];\n const keys = new Set([...Object.keys(oldMap || {}), ...Object.keys(newMap || {})]);\n for (const key of keys) {\n if (resolveMetaIdMode(opts) === \"identity\" && isMetadataMapPath(basePath) && key === \"id\") {\n continue;\n }\n const oldVal = (oldMap || {})[key];\n const newVal = (newMap || {})[key];\n const path = [...basePath, mk(key)];\n if (oldVal === undefined && newVal !== undefined) {\n mutations.push({\n type: \"OBJECT_ADD\",\n path,\n valueAfter: newVal,\n targetUniqueName: readIdOrMetadaataId(newVal),\n parentUniqueNameAfter: readIdOrMetadaataId(parentAfter),\n });\n continue;\n }\n if (oldVal !== undefined && newVal === undefined) {\n mutations.push({\n type: \"OBJECT_DELETE\",\n path,\n valueBefore: oldVal,\n targetUniqueName: readIdOrMetadaataId(oldVal),\n parentUniqueNameBefore: readIdOrMetadaataId(parentBefore),\n });\n continue;\n }\n if (!isEqual(oldVal, newVal)) {\n const nested = diffNodes(oldVal, newVal, path, opts);\n if (nested.length === 0) {\n mutations.push({ type: \"OBJECT_UPDATE\", path, valueAfter: newVal });\n } else {\n mutations.push(...nested);\n }\n }\n }\n return mutations;\n}\n\nfunction diffExtend(\n oldExtend: DataElementNode[\"extend\"] | undefined,\n newExtend: DataElementNode[\"extend\"] | undefined,\n basePath: XnlPath,\n parentBefore: any,\n parentAfter: any,\n opts: XnlMutationOptions\n): XnlMutation[] {\n const mutations: XnlMutation[] = [];\n\n const parentId =\n resolveMetaIdMode(opts) === \"identity\" ? readIdOrMetadaataId(parentBefore) ?? readIdOrMetadaataId(parentAfter) : undefined;\n\n const pathBase = parentId ? [ms(\"id\", parentId) as PathItem, ip(\"extend\")] : basePath;\n const oldChildren = oldExtend?.children ?? {};\n const newChildren = newExtend?.children ?? {};\n const allTags = new Set([...Object.keys(oldChildren), ...Object.keys(newChildren)]);\n for (const tag of allTags) {\n const oldChild = oldChildren[tag];\n const newChild = newChildren[tag];\n const childPath = [...pathBase, mk(tag)];\n if (!oldChild && newChild) {\n mutations.push({\n type: \"TREE_ADD\",\n path: childPath,\n valueAfter: newChild,\n targetUniqueName: readIdOrMetadaataId(newChild),\n parentUniqueNameAfter: readIdOrMetadaataId(parentAfter),\n });\n continue;\n }\n if (oldChild && !newChild) {\n mutations.push({\n type: \"TREE_DELETE\",\n path: childPath,\n valueBefore: oldChild,\n targetUniqueName: readIdOrMetadaataId(oldChild),\n parentUniqueNameBefore: readIdOrMetadaataId(parentBefore),\n });\n continue;\n }\n if (oldChild && newChild) {\n const nested = diffNodes(oldChild, newChild, childPath, opts);\n if (nested.length === 0) {\n if (!isEqual(oldChild, newChild)) {\n mutations.push({ type: \"TREE_UPDATE\", path: childPath, valueAfter: newChild });\n }\n } else {\n mutations.push(...nested);\n }\n }\n }\n\n const oldOrder = oldExtend?.order ?? [];\n const newOrder = newExtend?.order ?? [];\n if (!isEqual(oldOrder, newOrder)) {\n mutations.push({\n type: \"TREE_UPDATE\",\n path: [...basePath, ip(\"order\")],\n valueAfter: newOrder,\n });\n }\n return mutations;\n}\n\nfunction sameKind(a: XnlNode, b: XnlNode): boolean {\n if (isDataElement(a) && isDataElement(b)) return true;\n if (isTextElement(a) && isTextElement(b)) return true;\n if (Array.isArray(a) && Array.isArray(b)) return true;\n if (isPlainObject(a) && isPlainObject(b)) return true;\n if (isValueLiteral(a) && isValueLiteral(b)) return true;\n return typeof a === typeof b;\n}\n\nfunction isEqual(a: any, b: any): boolean {\n if (isWord(a) && isWord(b)) {\n return wordToString(a) === wordToString(b);\n }\n if (a === b) return true;\n if (typeof a !== typeof b) return false;\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((item, idx) => isEqual(item, b[idx]));\n }\n if (isPlainObject(a) && isPlainObject(b)) {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n return keysA.every((key) => isEqual(a[key], (b as any)[key]));\n }\n return false;\n}\n\nfunction isPlainObject(value: any): value is Record<string, any> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value) && !isDataElement(value) && !isTextElement(value) && !isWord(value);\n}\n\nfunction isDataElement(node: any): node is DataElementNode {\n return node && node.kind === \"DataElement\";\n}\n\nfunction isTextElement(node: any): node is TextElementNode {\n return node && node.kind === \"TextElement\";\n}\n\nfunction isValueLiteral(node: any): boolean {\n return (\n typeof node === \"string\" ||\n typeof node === \"number\" ||\n typeof node === \"boolean\" ||\n node === null ||\n isWord(node)\n );\n}\n\nfunction isComment(node: any): boolean {\n return node && node.kind === \"Comment\";\n}\n\nconst ip = (value: string): PathItem => ({ type: \"InstanceProperty\", value });\nconst mk = (value: string): PathItem => ({ type: \"MapKey\", value });\nconst li = (value: number | string): PathItem => ({ type: \"ListIndex\", value: String(value) });\n\nfunction ms(key: string, value: string): PathItem {\n return { type: \"MetadataSelector\", value: `<${key}=${JSON.stringify(value)}>` } as PathItem;\n}\n\nfunction readIdOrMetadaataId(node: any): string | undefined {\n if (isDataElement(node) || isTextElement(node)) {\n const nodeId = wordToString((node as any).id);\n if (nodeId) return nodeId;\n\n const metaId = (node as any).metadata?.id;\n if (typeof metaId === \"string\") return metaId;\n if (isWord(metaId)) return wordToString(metaId);\n }\n return undefined;\n}\n\nfunction extractByUniqueId(root: any, id: string): any {\n if (Array.isArray(root)) {\n const idx = root.findIndex((item) => readIdOrMetadaataId(item) === id);\n if (idx !== -1) {\n const [removed] = root.splice(idx, 1);\n return removed;\n }\n for (const item of root) {\n const found = extractByUniqueId(item, id);\n if (found !== undefined) return found;\n }\n } else if (isDataElement(root)) {\n if (root.body) {\n const idx = root.body.findIndex((item) => readIdOrMetadaataId(item) === id);\n if (idx !== -1) {\n const [removed] = root.body.splice(idx, 1);\n return removed;\n }\n for (const child of root.body) {\n const found = extractByUniqueId(child, id);\n if (found !== undefined) return found;\n }\n }\n if (root.extend) {\n const tags = [...root.extend.order];\n for (const tag of tags) {\n const child = root.extend.children[tag];\n if (readIdOrMetadaataId(child) === id) {\n delete root.extend.children[tag];\n root.extend.order = root.extend.order.filter((t) => t !== tag);\n return child;\n }\n const found = extractByUniqueId(child, id);\n if (found !== undefined) return found;\n }\n }\n }\n return undefined;\n}\n\nfunction reconcileMoves(mutations: XnlMutation[]): XnlMutation[] {\n const addsById: Record<string, XnlMutation[]> = {};\n const deletesById: Record<string, XnlMutation[]> = {};\n for (const m of mutations) {\n if (m.type === \"TREE_ADD\" && m.targetUniqueName) {\n addsById[m.targetUniqueName] = addsById[m.targetUniqueName] ?? [];\n addsById[m.targetUniqueName].push(m);\n }\n if (m.type === \"TREE_DELETE\" && m.targetUniqueName) {\n deletesById[m.targetUniqueName] = deletesById[m.targetUniqueName] ?? [];\n deletesById[m.targetUniqueName].push(m);\n }\n }\n\n const result: XnlMutation[] = [];\n const usedAdds = new Set<XnlMutation>();\n const usedDeletes = new Set<XnlMutation>();\n\n for (const [id, dels] of Object.entries(deletesById)) {\n const adds = addsById[id];\n if (!adds || adds.length === 0) continue;\n const del = dels[0];\n const add = adds[0];\n usedAdds.add(add);\n usedDeletes.add(del);\n const sameParent = add.parentUniqueNameAfter && del.parentUniqueNameBefore && add.parentUniqueNameAfter === del.parentUniqueNameBefore;\n const type: MutationType = sameParent ? \"TREE_MOVE_SAME_LEVEL\" : \"TREE_MOVE_CROSS_LEVEL\";\n const move: XnlMutation = {\n type,\n path: add.path,\n pathBefore: del.path,\n targetUniqueName: id,\n parentUniqueNameBefore: del.parentUniqueNameBefore,\n parentUniqueNameAfter: add.parentUniqueNameAfter,\n };\n result.push(move);\n }\n\n for (const m of mutations) {\n if (usedAdds.has(m) || usedDeletes.has(m)) continue;\n result.push(m);\n }\n\n const filtered: XnlMutation[] = [];\n const seenMoveKeys = new Set<string>();\n for (const m of result) {\n if ((m.type === \"TREE_MOVE_SAME_LEVEL\" || m.type === \"TREE_MOVE_CROSS_LEVEL\") && m.targetUniqueName) {\n const key = `${m.type}:${m.targetUniqueName}:${JSON.stringify(m.path)}:${JSON.stringify(m.pathBefore)}`;\n if (seenMoveKeys.has(key)) continue;\n seenMoveKeys.add(key);\n }\n filtered.push(m);\n }\n\n return filtered;\n}\n","import {\n AttributeMap,\n DataElementNode,\n ElementNode,\n ExtendBody,\n TextElementNode,\n XnlDocument,\n XnlNode,\n XnlWord,\n isWord,\n wordToString,\n} from \"../types\";\nimport { parseXnl } from \"../parser\";\n\nexport interface LoaderContext {\n prototypes: Record<string, Record<string, DataElementNode>>;\n}\n\nconst SYSTEM_FIELDS = {\n proto: \"proto\",\n extendType: \"extendType\",\n exportFlag: \"export\",\n remove: \"remove\",\n name: \"name\",\n id: \"id\",\n};\n\nexport function loadFromString(input: string): XnlDocument {\n const parsed = parseXnl(input);\n const ctx = buildPrototypeContext(parsed.nodes);\n const resolvedNodes = parsed.nodes.map((n) => (isDataElement(n) ? resolveNode(ctx, n, []) : n));\n return { nodes: resolvedNodes, warnings: parsed.warnings };\n}\n\nexport function resolveNode(\n ctx: LoaderContext,\n node: DataElementNode,\n scope: Record<string, Record<string, DataElementNode>>[]\n): DataElementNode {\n const protoName = readStringMeta(node.metadata, SYSTEM_FIELDS.proto);\n const extendType = readStringMeta(node.metadata, SYSTEM_FIELDS.extendType) ?? \"Override\";\n\n const localPrefabs = collectTypedPrefabs(node);\n const nextScope = [localPrefabs, ...scope];\n\n let resolved = cloneDataElement(node);\n if (protoName) {\n const proto = lookupPrototype(ctx, node.tag, protoName, nextScope);\n const merged = mergeNodes(ctx, proto, resolved, extendType, nextScope);\n resolved = merged;\n } else {\n resolved = resolveChildren(ctx, resolved, nextScope);\n }\n\n resolved.metadata = mergeMaps(ctx, {}, resolved.metadata, nextScope);\n resolved.attributes = mergeMaps(ctx, {}, resolved.attributes ?? {}, nextScope);\n stripControlMetadata(resolved.metadata);\n if (resolved.attributes) stripControlMetadata(resolved.attributes as AttributeMap);\n return resolved;\n}\n\nexport function batchLoad(batches: DataElementNode[][]): {\n resolved: DataElementNode[][];\n exports: Record<string, Record<string, DataElementNode>>;\n} {\n const allNodes = batches.flat();\n const ctx = buildPrototypeContext(allNodes);\n const exportsMap: Record<string, Record<string, DataElementNode>> = {};\n const resolved = batches.map((batch) =>\n batch.map((node) => {\n if (!isDataElement(node)) return node;\n const rawExportName = readExportName(node);\n let resolvedNode = resolveNode(ctx, node, []);\n resolvedNode = resolvePending(resolvedNode, ctx, []);\n const exportName = rawExportName ?? readExportName(resolvedNode);\n if (exportName) {\n exportsMap[resolvedNode.tag] = exportsMap[resolvedNode.tag] ?? {};\n exportsMap[resolvedNode.tag][exportName] = resolvedNode;\n }\n collectExportsFromPrefabs(resolvedNode, exportsMap);\n return resolvedNode;\n })\n );\n return { resolved, exports: exportsMap };\n}\n\nfunction buildPrototypeContext(nodes: XnlNode[]): LoaderContext {\n const prototypes: Record<string, Record<string, DataElementNode>> = {};\n for (const node of nodes) {\n if (!isDataElement(node)) continue;\n collectPrefabs(node, prototypes);\n }\n return { prototypes };\n}\n\nfunction collectPrefabs(node: DataElementNode, store: Record<string, Record<string, DataElementNode>>) {\n const typed = collectTypedPrefabs(node);\n for (const [type, prefabs] of Object.entries(typed)) {\n store[type] = store[type] ?? {};\n for (const [name, prefab] of Object.entries(prefabs)) {\n if (!store[type][name]) {\n store[type][name] = cloneDataElement(prefab);\n }\n }\n }\n if (node.body) {\n for (const child of node.body) {\n if (isDataElement(child)) collectPrefabs(child, store);\n }\n }\n if (node.extend) {\n for (const tag of node.extend.order) {\n const child = node.extend.children[tag];\n if (isDataElement(child)) collectPrefabs(child, store);\n }\n }\n}\n\nfunction collectExportsFromPrefabs(node: DataElementNode, exportsMap: Record<string, Record<string, DataElementNode>>) {\n if (!node.extend) return;\n const typed = collectTypedPrefabs(node);\n for (const [type, prefabs] of Object.entries(typed)) {\n for (const [name, prefab] of Object.entries(prefabs)) {\n exportsMap[type] = exportsMap[type] ?? {};\n exportsMap[type][name] = prefab;\n }\n }\n}\n\nfunction lookupPrototype(\n ctx: LoaderContext,\n type: string,\n name: string,\n scope: Record<string, Record<string, DataElementNode>>[]\n): DataElementNode {\n for (const prefabs of scope) {\n const foundScoped = prefabs[type]?.[name];\n if (foundScoped) return foundScoped;\n }\n const found = ctx.prototypes[type]?.[name];\n if (!found) {\n throw new Error(`Prototype not found for type '${type}' name '${name}'`);\n }\n return found;\n}\n\nfunction mergeNodes(\n ctx: LoaderContext,\n base: DataElementNode,\n override: DataElementNode,\n extendType: string,\n scope: Record<string, Record<string, DataElementNode>>[]\n): DataElementNode {\n if (extendType !== \"Override\") {\n throw new Error(`Unsupported extendType '${extendType}'`);\n }\n const merged: DataElementNode = cloneDataElement(base);\n merged.id = override.id ?? base.id;\n merged.metadata = mergeMaps(ctx, base.metadata, override.metadata, scope);\n merged.attributes = mergeMaps(ctx, base.attributes ?? {}, override.attributes ?? {}, scope);\n merged.body = mergeBody(ctx, base.body ?? [], override.body ?? [], scope);\n merged.extend = mergeExtend(ctx, base.extend, override.extend, scope);\n\n stripControlMetadata(merged.metadata);\n if (merged.attributes) stripControlMetadata(merged.attributes as AttributeMap);\n return merged;\n}\n\nfunction resolveChildren(\n ctx: LoaderContext,\n node: DataElementNode,\n scope: Record<string, Record<string, DataElementNode>>[]\n): DataElementNode {\n const copy = cloneDataElement(node);\n if (copy.body) {\n copy.body = copy.body.map((item) => resolveValue(ctx, item, scope));\n }\n if (copy.extend) {\n const nextChildren: Record<string, ElementNode> = {};\n for (const tag of copy.extend.order) {\n const child = copy.extend.children[tag];\n nextChildren[tag] = resolveValue(ctx, child, scope) as ElementNode;\n }\n copy.extend = { order: [...copy.extend.order], children: nextChildren };\n }\n return copy;\n}\n\nfunction mergeBody(\n ctx: LoaderContext,\n baseBody: XnlNode[],\n overrideBody: XnlNode[],\n scope: Record<string, Record<string, DataElementNode>>[]\n): XnlNode[] {\n const result: XnlNode[] = [];\n const baseById: Record<string, XnlNode> = {};\n for (const item of baseBody) {\n const id = readElementId(item);\n if (id) baseById[id] = item;\n result.push(resolveValue(ctx, item, scope));\n }\n for (const item of overrideBody) {\n if (isRemoveFlag(item) || isRemoveMarker(item)) {\n const id = readElementId(item);\n if (id && baseById[id]) {\n const index = result.findIndex((n) => readElementId(n) === id);\n if (index >= 0) {\n result.splice(index, 1);\n }\n }\n continue;\n }\n const id = readElementId(item);\n if (id && baseById[id] && isDataElement(baseById[id]) && isDataElement(item)) {\n const merged = mergeNodes(ctx, baseById[id] as DataElementNode, item, \"Override\", scope);\n const idx = result.findIndex((n) => readElementId(n) === id);\n if (idx >= 0) {\n result[idx] = merged;\n continue;\n }\n }\n result.push(resolveValue(ctx, item, scope));\n }\n return result;\n}\n\nfunction mergeExtend(\n ctx: LoaderContext,\n baseExtend: ExtendBody | undefined,\n overrideExtend: ExtendBody | undefined,\n scope: Record<string, Record<string, DataElementNode>>[]\n): ExtendBody | undefined {\n if (!baseExtend && !overrideExtend) return undefined;\n if (!baseExtend) return resolveExtend(ctx, overrideExtend, scope);\n if (!overrideExtend) return resolveExtend(ctx, baseExtend, scope);\n\n const order: string[] = [...baseExtend.order];\n const children: Record<string, ElementNode> = { ...baseExtend.children };\n\n for (const tag of overrideExtend.order) {\n const child = overrideExtend.children[tag];\n const existing = children[tag];\n if (isDataElement(child) && (isRemoveFlag(child) || isRemoveMarker(child))) {\n delete children[tag];\n const idx = order.indexOf(tag);\n if (idx >= 0) order.splice(idx, 1);\n continue;\n }\n if (existing && isDataElement(existing) && isDataElement(child)) {\n children[tag] = mergeNodes(ctx, existing, child, \"Override\", scope);\n } else {\n children[tag] = resolveValue(ctx, child, scope) as ElementNode;\n }\n if (!order.includes(tag)) order.push(tag);\n }\n return { order, children };\n}\n\nfunction resolveExtend(\n ctx: LoaderContext,\n extend: ExtendBody | undefined,\n scope: Record<string, Record<string, DataElementNode>>[]\n): ExtendBody | undefined {\n if (!extend) return undefined;\n const children: Record<string, ElementNode> = {};\n for (const tag of extend.order) {\n const child = extend.children[tag];\n children[tag] = resolveValue(ctx, child, scope) as ElementNode;\n }\n return { order: [...extend.order], children };\n}\n\nfunction cloneDataElement(node: DataElementNode): DataElementNode {\n return {\n kind: \"DataElement\",\n tag: node.tag,\n id: node.id ? cloneWord(node.id) : undefined,\n metadata: cloneMap(node.metadata),\n attributes: node.attributes ? cloneMap(node.attributes) : undefined,\n body: node.body ? node.body.map((n) => cloneNode(n)) : undefined,\n extend: node.extend ? cloneExtend(node.extend) : undefined,\n };\n}\n\nfunction cloneExtend(extend: ExtendBody): ExtendBody {\n const children: Record<string, ElementNode> = {};\n for (const tag of extend.order) {\n children[tag] = cloneNode(extend.children[tag]) as ElementNode;\n }\n return { order: [...extend.order], children };\n}\n\nfunction cloneNode<T extends XnlNode>(node: T): T {\n if (Array.isArray(node)) {\n return node.map((n) => cloneNode(n)) as unknown as T;\n }\n if (isWord(node)) {\n return cloneWord(node) as unknown as T;\n }\n if (isPlainObject(node)) {\n const out: Record<string, any> = {};\n for (const key of Object.keys(node)) {\n out[key] = cloneNode((node as any)[key]);\n }\n return out as T;\n }\n if (isDataElement(node)) return cloneDataElement(node) as unknown as T;\n return node;\n}\n\nfunction cloneMap(map: Record<string, any>): Record<string, any> {\n const out: Record<string, any> = {};\n for (const key of Object.keys(map || {})) {\n out[key] = cloneNode(map[key]);\n }\n return out;\n}\n\nfunction mergeMaps(\n ctx: LoaderContext,\n base: Record<string, any>,\n override: Record<string, any>,\n scope: Record<string, Record<string, DataElementNode>>[]\n): Record<string, any> {\n const result = cloneMap(base || {});\n for (const key of Object.keys(override || {})) {\n const value = override[key];\n if (isRemoveMarker(value)) {\n delete result[key];\n continue;\n }\n const resolvedValue = resolveValue(ctx, value, scope);\n if (isPlainObject(resolvedValue) && isPlainObject(result[key])) {\n result[key] = mergeMaps(ctx, result[key], resolvedValue, scope);\n } else if (Array.isArray(resolvedValue) && Array.isArray(result[key])) {\n result[key] = mergeArray(ctx, result[key], resolvedValue, scope);\n } else {\n result[key] = resolvedValue;\n }\n }\n return result;\n}\n\nfunction mergeArray(\n ctx: LoaderContext,\n baseArr: any[],\n overrideArr: any[],\n scope: Record<string, Record<string, DataElementNode>>[]\n): any[] {\n const result = baseArr.map((v) => resolveValue(ctx, v, scope));\n for (let i = 0; i < overrideArr.length; i++) {\n const value = overrideArr[i];\n if (isRemoveMarker(value)) {\n if (i < result.length) result.splice(i, 1);\n continue;\n }\n const resolved = resolveValue(ctx, value, scope);\n if (i < result.length) {\n const baseVal = result[i];\n if (isPlainObject(baseVal) && isPlainObject(resolved)) {\n result[i] = mergeMaps(ctx, baseVal, resolved, scope);\n } else if (Array.isArray(baseVal) && Array.isArray(resolved)) {\n result[i] = mergeArray(ctx, baseVal, resolved, scope);\n } else {\n result[i] = resolved;\n }\n } else {\n result.push(resolved);\n }\n }\n return result;\n}\n\nfunction stripControlMetadata(meta: AttributeMap) {\n delete (meta as any)[SYSTEM_FIELDS.proto];\n delete (meta as any)[SYSTEM_FIELDS.extendType];\n delete (meta as any)[SYSTEM_FIELDS.exportFlag];\n delete (meta as any)[SYSTEM_FIELDS.remove];\n}\n\nfunction readExportName(node: DataElementNode): string | undefined {\n const exported = node.metadata?.[SYSTEM_FIELDS.exportFlag];\n if (exported !== true && exported !== \"true\") return undefined;\n const id = wordToString(node.id);\n if (id) return id;\n const nameVal = (node.metadata as any)?.[SYSTEM_FIELDS.name];\n const name = asString(nameVal);\n return name;\n}\n\nfunction readElementId(node: XnlNode): string | undefined {\n if (isDataElement(node) || isTextElement(node)) {\n const idVal = (node as any).id as XnlWord | undefined;\n const id = wordToString(idVal);\n if (id) return id;\n const metaId = (node as any).metadata?.[SYSTEM_FIELDS.id];\n const metaIdStr = asString(metaId);\n if (metaIdStr) return metaIdStr;\n }\n return undefined;\n}\n\nfunction readStringMeta(meta: AttributeMap, key: string): string | undefined {\n const val = meta?.[key];\n return asString(val);\n}\n\nfunction isRemoveFlag(node: any): boolean {\n return !!(node && (node.metadata?.[SYSTEM_FIELDS.remove] === true || node.metadata?.[SYSTEM_FIELDS.remove] === \"true\"));\n}\n\nfunction isRemoveMarker(node: any): boolean {\n return isDataElement(node) && node.tag === \"delta\" && isRemoveFlag(node);\n}\n\nfunction isDataElement(node: any): node is DataElementNode {\n return node && node.kind === \"DataElement\";\n}\n\nfunction isTextElement(node: any): node is TextElementNode {\n return node && node.kind === \"TextElement\";\n}\n\nfunction isPlainObject(value: any): value is Record<string, any> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value) && !isDataElement(value) && !isWord(value);\n}\n\nfunction resolveValue(\n ctx: LoaderContext,\n value: XnlNode,\n scope: Record<string, Record<string, DataElementNode>>[]\n): XnlNode {\n if (isDataElement(value)) {\n const proto = readStringMeta(value.metadata, SYSTEM_FIELDS.proto);\n if (proto) {\n return resolveNode(ctx, value, scope);\n }\n const resolved = resolveChildren(ctx, value, scope);\n resolved.attributes = mergeMaps(ctx, {}, resolved.attributes ?? {}, scope);\n resolved.metadata = mergeMaps(ctx, {}, resolved.metadata ?? {}, scope);\n return resolved;\n }\n if (Array.isArray(value)) {\n return value.map((v) => resolveValue(ctx, v, scope));\n }\n if (isPlainObject(value)) {\n const out: Record<string, any> = {};\n for (const key of Object.keys(value)) {\n out[key] = resolveValue(ctx, (value as any)[key], scope);\n }\n return out;\n }\n return cloneNode(value);\n}\n\nfunction collectTypedPrefabs(node: DataElementNode): Record<string, Record<string, DataElementNode>> {\n const result: Record<string, Record<string, DataElementNode>> = {};\n if (!node.extend) return result;\n const suffix = \"Prefabs\";\n for (const tag of node.extend.order) {\n const child: ElementNode | undefined = node.extend.children[tag];\n if (!isDataElement(child) || !child.body) continue;\n if (tag === \"Prefabs\") {\n for (const prefab of child.body as XnlNode[]) {\n if (!isDataElement(prefab)) continue;\n const name = readExportName(prefab) ?? readElementId(prefab);\n if (!name) continue;\n const type = prefab.tag;\n result[type] = result[type] ?? {};\n result[type][name] = cloneDataElement(prefab);\n }\n continue;\n }\n if (tag.endsWith(suffix)) {\n const type = tag.slice(0, tag.length - suffix.length);\n for (const prefab of child.body as XnlNode[]) {\n if (!isDataElement(prefab)) continue;\n const name = readExportName(prefab) ?? readElementId(prefab);\n if (!name) continue;\n result[type] = result[type] ?? {};\n result[type][name] = cloneDataElement(prefab);\n }\n }\n }\n return result;\n}\n\nfunction resolvePending(\n node: DataElementNode,\n ctx: LoaderContext,\n scope: Record<string, Record<string, DataElementNode>>[]\n): DataElementNode {\n const resolved = resolveNode(ctx, node, scope);\n return resolved;\n}\n\nfunction cloneWord(word: XnlWord): XnlWord {\n return { kind: \"Word\", namespace: [...(word.namespace ?? [])], name: word.name };\n}\n\nfunction asString(value: any): string | undefined {\n if (isWord(value)) return wordToString(value) ?? undefined;\n if (typeof value === \"string\") return value;\n return undefined;\n}\n","import { XnlWord } from \"./types\";\n\nexport function GetWordFullName(word: XnlWord): string {\n const parts = [...(word.namespace ?? []), word.name].filter((part) => part.length > 0);\n return parts.join(\".\");\n}\n\nexport function MakeWord(wordStr: string, namespace = []): XnlWord {\n return {\n kind: \"Word\",\n namespace: namespace,\n name: wordStr\n }\n}","import * as Parser from \"./parser\";\nimport { stringify as xnlStringify } from \"./formatter\";\nimport { stringify as xnlLineBlockStringify } from \"./lineBlockFormatter\";\nimport { parsePath, resolvePath, setPathValue, deleteAtPath } from \"./path\";\nimport { applyMutations, diffNodes } from \"./mutation\";\nimport { loadFromString, resolveNode, batchLoad } from \"./loader\";\nexport { parseXnl } from \"./parser\";\nexport { parseXnlSingleNode, parseUniqueChildren } from \"./parser\";\nexport { XnlParseError } from \"./errors\";\nexport type { XnlErrorCode } from \"./errors\";\nexport type {\n AttributeMap,\n ValueLiteral,\n XnlDocument,\n XnlNode,\n CommentNode,\n ParseWarning,\n SingleNodeResult,\n UniqueChildrenResult,\n ExtendBody,\n ElementNode,\n DataElementNode,\n TextElementNode,\n ElementNodeKind,\n XnlWord,\n} from \"./types\";\nexport { isWord, wordToString } from \"./types\";\nexport type { PathItem, PathItemType, XnlPath } from \"./path\";\nexport { stringify as stringifyLineBlock } from \"./lineBlockFormatter\";\nexport type { XnlMutation, MutationType, XnlMutationOptions, MetadataIdMode } from \"./mutation\";\nexport {\n parsePath,\n resolvePath,\n setPathValue,\n deleteAtPath,\n XnlPathError,\n} from \"./path\";\nexport { applyMutations, diffNodes } from \"./mutation\";\nexport { loadFromString, resolveNode as loadNode, batchLoad } from \"./loader\";\nexport { GetWordFullName, MakeWord } from \"./NodeHelper\";\n\nexport const XNL = {\n parseMany: Parser.parseXnl,\n parseSingle: Parser.parseXnlSingleNode,\n parseUnique: Parser.parseUniqueChildren,\n stringify: xnlStringify,\n stringifyLineBlock: xnlLineBlockStringify,\n path: {\n parse: parsePath,\n resolve: resolvePath,\n set: setPathValue,\n delete: deleteAtPath,\n },\n mutation: {\n apply: applyMutations,\n diff: diffNodes,\n },\n loader: {\n loadFromString,\n loadNode: resolveNode,\n batchLoad,\n },\n};\n"]}