xml-sax-ts 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -261,7 +261,7 @@ new XmlSaxParser(options?: ParserOptions)
|
|
|
261
261
|
| `xmlns` | `boolean` | `true` | Enable namespace resolution |
|
|
262
262
|
| `includeNamespaceAttributes` | `boolean` | `false` | Include `xmlns:*` attributes in tag output |
|
|
263
263
|
| `allowDoctype` | `boolean` | `true` | Allow `<!DOCTYPE …>` declarations |
|
|
264
|
-
| `coalesceText` | `boolean` | `
|
|
264
|
+
| `coalesceText` | `boolean` | `true` | Merge adjacent text callbacks into one event |
|
|
265
265
|
| `trackPosition` | `boolean` | `true` | Track line/column; disable for faster parsing |
|
|
266
266
|
| `onOpenTag` | `function` | — | Called for each opening / self-closing tag |
|
|
267
267
|
| `onCloseTag` | `function` | — | Called for each closing tag |
|
|
@@ -272,7 +272,7 @@ new XmlSaxParser(options?: ParserOptions)
|
|
|
272
272
|
| `onDoctype` | `function` | — | Called for DOCTYPE declarations |
|
|
273
273
|
| `onError` | `function` | — | Called on parse errors |
|
|
274
274
|
|
|
275
|
-
By default (`coalesceText:
|
|
275
|
+
By default (`coalesceText: true`), adjacent text chunks are merged and emitted as one `onText` callback per structural boundary. Set `coalesceText: false` to receive text callbacks exactly as chunk boundaries are parsed.
|
|
276
276
|
|
|
277
277
|
`trackPosition` controls line/column tracking for parser errors. When set to `false`, parsing is faster and `XmlSaxError` still reports `offset`, while `line` and `column` are set to `0`.
|
|
278
278
|
|
package/dist/index.cjs
CHANGED
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/assert.ts","../src/errors.ts","../src/entities.ts","../src/parser.ts","../src/tree.ts","../src/serializer.ts","../src/object.ts"],"names":["attributes","tag","split","DEFAULT_OPTIONS","indent","inner"],"mappings":"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","file":"index.cjs","sourcesContent":["const DEV = typeof process !== \"undefined\" ? process.env.NODE_ENV !== \"production\" : true;\n\nexport function assert(condition: boolean, message: string): void {\n if (!DEV) {\n return;\n }\n if (!condition) {\n throw new Error(`Invariant failed: ${message}`);\n }\n}\n","export class XmlSaxError extends Error {\n readonly offset: number;\n readonly line: number;\n readonly column: number;\n\n constructor(message: string, offset: number, line: number, column: number) {\n super(`${message} at ${line}:${column}`);\n this.name = \"XmlSaxError\";\n this.offset = offset;\n this.line = line;\n this.column = column;\n }\n}\n","import { XmlSaxError } from \"./errors\";\n\nexport function decodeEntities(input: string, onError?: (error: Error) => void): string {\n const firstAmp = input.indexOf(\"&\");\n if (firstAmp === -1) {\n return input;\n }\n\n let result = \"\";\n let i = 0;\n\n while (i < input.length) {\n const amp = input.indexOf(\"&\", i);\n if (amp === -1) {\n if (i === 0) {\n return input;\n }\n return i < input.length ? result + input.slice(i) : result;\n }\n\n if (amp > i) {\n result += input.slice(i, amp);\n }\n\n const semi = input.indexOf(\";\", amp + 1);\n if (semi === -1) {\n const err = new XmlSaxError(\"Unterminated entity\", amp, 0, 0);\n onError?.(err);\n throw err;\n }\n\n let decoded: string | undefined;\n const marker = input[amp + 1];\n\n if (marker === \"#\") {\n const numeric = parseNumericEntity(input, amp + 2, semi);\n decoded = numeric === undefined ? undefined : decodeCodePoint(numeric);\n } else {\n decoded = decodeNamedEntity(input, amp + 1, semi);\n }\n\n if (decoded === undefined) {\n const entity = input.slice(amp + 1, semi);\n const err = new XmlSaxError(`Unknown entity: &${entity};`, amp, 0, 0);\n onError?.(err);\n throw err;\n }\n\n result += decoded;\n i = semi + 1;\n }\n\n return result;\n}\n\nfunction decodeNamedEntity(input: string, start: number, end: number): string | undefined {\n const len = end - start;\n if (len === 2) {\n if (input[start] === \"l\" && input[start + 1] === \"t\") {\n return \"<\";\n }\n if (input[start] === \"g\" && input[start + 1] === \"t\") {\n return \">\";\n }\n return undefined;\n }\n\n if (len === 3) {\n if (input[start] === \"a\" && input[start + 1] === \"m\" && input[start + 2] === \"p\") {\n return \"&\";\n }\n return undefined;\n }\n\n if (len === 4) {\n const maybeQuot =\n input[start] === \"q\" && input[start + 1] === \"u\" && input[start + 2] === \"o\" && input[start + 3] === \"t\";\n if (maybeQuot) {\n return \"\\\"\";\n }\n\n const maybeApos =\n input[start] === \"a\" && input[start + 1] === \"p\" && input[start + 2] === \"o\" && input[start + 3] === \"s\";\n if (maybeApos) {\n return \"'\";\n }\n }\n\n return undefined;\n}\n\nfunction parseNumericEntity(input: string, start: number, end: number): number | undefined {\n if (start >= end) {\n return undefined;\n }\n\n let i = start;\n let radix = 10;\n\n const marker = input[i];\n if (marker === \"x\" || marker === \"X\") {\n radix = 16;\n i += 1;\n }\n\n if (i >= end) {\n return undefined;\n }\n\n let value = 0;\n for (; i < end; i += 1) {\n const ch = input[i];\n if (ch === undefined) {\n return undefined;\n }\n\n const digit = radix === 16 ? hexDigit(ch) : decimalDigit(ch);\n if (digit === -1) {\n return undefined;\n }\n\n value = value * radix + digit;\n }\n\n return value;\n}\n\nfunction decimalDigit(ch: string): number {\n const code = ch.charCodeAt(0) - 48;\n if (code < 0 || code > 9) {\n return -1;\n }\n return code;\n}\n\nfunction hexDigit(ch: string): number {\n const code = ch.charCodeAt(0);\n if (code >= 48 && code <= 57) {\n return code - 48;\n }\n if (code >= 65 && code <= 70) {\n return code - 55;\n }\n if (code >= 97 && code <= 102) {\n return code - 87;\n }\n return -1;\n}\n\nfunction decodeCodePoint(codePoint: number): string | undefined {\n if (!Number.isFinite(codePoint)) {\n return undefined;\n }\n if (codePoint < 0 || codePoint > 0x10ffff) {\n return undefined;\n }\n if (codePoint >= 0xd800 && codePoint <= 0xdfff) {\n return undefined;\n }\n return String.fromCodePoint(codePoint);\n}\n\nexport function splitTextForEntities(text: string): { emit: string; carry: string } {\n const lastAmp = text.lastIndexOf(\"&\");\n if (lastAmp === -1) {\n return { emit: text, carry: \"\" };\n }\n\n if (!text.includes(\";\", lastAmp + 1)) {\n return {\n emit: text.slice(0, lastAmp),\n carry: text.slice(lastAmp)\n };\n }\n\n return { emit: text, carry: \"\" };\n}\n","import { assert } from \"./assert\";\nimport { decodeEntities, splitTextForEntities } from \"./entities\";\nimport { XmlSaxError } from \"./errors\";\nimport type {\n CloseTag,\n Doctype,\n OpenTag,\n ParserOptions,\n ProcessingInstruction,\n XmlAttribute\n} from \"./types\";\n\ntype NamespaceMap = Record<string, string>;\n\ninterface StackEntry {\n rawName: string;\n closeTag: CloseTag;\n}\n\ninterface RawAttribute {\n name: string;\n value: string;\n}\n\ninterface ResolvedName {\n name: string;\n prefix: string;\n local: string;\n uri: string;\n}\n\nconst DEFAULT_OPTIONS: Required<\n Pick<ParserOptions, \"xmlns\" | \"includeNamespaceAttributes\" | \"allowDoctype\" | \"coalesceText\" | \"trackPosition\">\n> = {\n xmlns: true,\n includeNamespaceAttributes: false,\n allowDoctype: true,\n coalesceText: false,\n trackPosition: true\n};\n\nconst XML_NAMESPACE_URI = \"http://www.w3.org/XML/1998/namespace\";\nconst XMLNS_NAMESPACE_URI = \"http://www.w3.org/2000/xmlns/\";\nconst WHITESPACE_RE = /\\s/;\nconst CRLF_RE = /\\r\\n?/g;\n\nconst NAME_START_TABLE = new Uint8Array(128);\nconst NAME_CHAR_TABLE = new Uint8Array(128);\n\nfor (let code = 65; code <= 90; code += 1) {\n NAME_START_TABLE[code] = 1;\n NAME_CHAR_TABLE[code] = 1;\n}\nfor (let code = 97; code <= 122; code += 1) {\n NAME_START_TABLE[code] = 1;\n NAME_CHAR_TABLE[code] = 1;\n}\nfor (let code = 48; code <= 57; code += 1) {\n NAME_CHAR_TABLE[code] = 1;\n}\nNAME_START_TABLE[95] = 1;\nNAME_CHAR_TABLE[95] = 1;\nNAME_CHAR_TABLE[58] = 1;\nNAME_CHAR_TABLE[45] = 1;\nNAME_CHAR_TABLE[46] = 1;\n\nexport class XmlSaxParser {\n private readonly xmlns: boolean;\n private readonly includeNamespaceAttributes: boolean;\n private readonly allowDoctype: boolean;\n private readonly coalesceText: boolean;\n private readonly trackPosition: boolean;\n private readonly onOpenTag: ((tag: OpenTag) => void) | undefined;\n private readonly onCloseTag: ((tag: CloseTag) => void) | undefined;\n private readonly onText: ((text: string) => void) | undefined;\n private readonly onCdata: ((text: string) => void) | undefined;\n private readonly onComment: ((text: string) => void) | undefined;\n private readonly onProcessingInstruction: ((pi: ProcessingInstruction) => void) | undefined;\n private readonly onDoctype: ((doctype: Doctype) => void) | undefined;\n private readonly onError: ((error: Error) => void) | undefined;\n private buffer = \"\";\n private offset = 0;\n private line = 1;\n private column = 1;\n private elementStack: StackEntry[] = [];\n private nsStack: NamespaceMap[] = [\n Object.assign(Object.create(null) as NamespaceMap, {\n xml: XML_NAMESPACE_URI,\n xmlns: XMLNS_NAMESPACE_URI\n })\n ];\n private closed = false;\n private pendingCR = false;\n private readonly pendingTextParts: string[] = [];\n private readonly _rawAttrs: RawAttribute[] = [];\n\n constructor(options: ParserOptions = {}) {\n const resolved = { ...DEFAULT_OPTIONS, ...options };\n this.xmlns = resolved.xmlns;\n this.includeNamespaceAttributes = resolved.includeNamespaceAttributes;\n this.allowDoctype = resolved.allowDoctype;\n this.coalesceText = resolved.coalesceText;\n this.trackPosition = resolved.trackPosition;\n this.onOpenTag = resolved.onOpenTag;\n this.onCloseTag = resolved.onCloseTag;\n this.onText = resolved.onText;\n this.onCdata = resolved.onCdata;\n this.onComment = resolved.onComment;\n this.onProcessingInstruction = resolved.onProcessingInstruction;\n this.onDoctype = resolved.onDoctype;\n this.onError = resolved.onError;\n }\n\n feed(chunk: string): void {\n if (this.closed) {\n this._error(\"Parser is closed\");\n }\n if (!chunk) {\n return;\n }\n this.buffer += chunk;\n this._parseBuffer(false);\n }\n\n close(): void {\n if (this.closed) {\n return;\n }\n this._parseBuffer(true);\n this._flushPendingCR();\n this._flushTextBuffer();\n if (this.buffer.length > 0) {\n this._error(\"Unexpected end of input\");\n }\n if (this.elementStack.length > 0) {\n this._error(\"Unclosed tag(s) remaining\");\n }\n this.closed = true;\n }\n\n private _parseBuffer(final: boolean): void {\n let i = 0;\n\n while (i < this.buffer.length) {\n const lt = this.buffer.indexOf(\"<\", i);\n if (lt === -1) {\n const tail = this.buffer.slice(i);\n if (!tail.includes(\"&\")) {\n if (tail.length > 0) {\n this._emitText(tail, true);\n this._advance(tail);\n }\n } else {\n const split = splitTextForEntities(tail);\n if (split.emit.length > 0) {\n this._emitText(split.emit, true);\n this._advance(split.emit);\n }\n this.buffer = split.carry;\n return;\n }\n this.buffer = \"\";\n return;\n }\n\n if (lt > i) {\n const text = this.buffer.slice(i, lt);\n if (text.length > 0) {\n this._emitText(text, false);\n this._advance(text);\n }\n i = lt;\n }\n\n const consumed = this._parseMarkupFrom(lt, final);\n if (consumed === null) {\n break;\n }\n\n this._advanceSpan(lt, lt + consumed);\n i = lt + consumed;\n }\n\n this.buffer = this.buffer.slice(i);\n\n if (final && this.buffer.length > 0) {\n this._error(\"Unexpected end of input\");\n }\n }\n\n private _parseMarkupFrom(start: number, final: boolean): number | null {\n assert(this.buffer[start] === \"<\", \"Markup must start with '<'\");\n\n if (this.pendingCR) this._flushPendingCR();\n\n const secondCode = this.buffer.charCodeAt(start + 1);\n\n if (secondCode === 63) {\n const end = this.buffer.indexOf(\"?>\", start + 2);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated processing instruction\");\n }\n return null;\n }\n const body = this.buffer.slice(start + 2, end).trim();\n const split = body.search(WHITESPACE_RE);\n const target = split === -1 ? body : body.slice(0, split);\n const data = split === -1 ? \"\" : body.slice(split).trim();\n const pi: ProcessingInstruction = { target, body: data };\n this._flushTextBuffer();\n this.onProcessingInstruction?.(pi);\n return end + 2 - start;\n }\n\n if (secondCode === 33) {\n const thirdCode = this.buffer.charCodeAt(start + 2);\n\n if (thirdCode === 45 && this.buffer.charCodeAt(start + 3) === 45) {\n const end = this.buffer.indexOf(\"-->\", start + 4);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated comment\");\n }\n return null;\n }\n const comment = this.buffer.slice(start + 4, end);\n this._flushTextBuffer();\n this.onComment?.(comment);\n return end + 3 - start;\n }\n\n if (thirdCode === 91 && this.buffer.startsWith(\"<![CDATA[\", start)) {\n const end = this.buffer.indexOf(\"]]>\", start + 9);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated CDATA section\");\n }\n return null;\n }\n const cdata = this.buffer.slice(start + 9, end);\n const normalized = this._normalizeText(cdata, false);\n if (normalized.length > 0) {\n this._flushTextBuffer();\n this.onCdata?.(normalized);\n }\n return end + 3 - start;\n }\n\n if (thirdCode === 68 && this.buffer.startsWith(\"<!DOCTYPE\", start)) {\n const end = this._findDoctypeEnd(start + 9);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated doctype declaration\");\n }\n return null;\n }\n if (!this.allowDoctype) {\n this._error(\"Doctype is not allowed\");\n }\n const raw = this.buffer.slice(start + 9, end).trim();\n const doctype: Doctype = { raw };\n this._flushTextBuffer();\n this.onDoctype?.(doctype);\n return end + 1 - start;\n }\n }\n\n if (secondCode === 47) {\n const end = this.buffer.indexOf(\">\", start + 2);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated closing tag\");\n }\n return null;\n }\n\n let i = this._skipWhitespace(this.buffer, start + 2, end);\n const parsed = this._parseName(this.buffer, i, end);\n i = this._skipWhitespace(this.buffer, parsed.end, end);\n if (i !== end) {\n this._error(\"Invalid closing tag\");\n }\n\n this._handleCloseTag(parsed.name, parsed.end);\n return end + 1 - start;\n }\n\n const tagEnd = this._findTagEnd(start + 1);\n if (tagEnd === -1) {\n if (final) {\n this._error(\"Unterminated start tag\");\n }\n return null;\n }\n\n this._handleStartTagRange(start + 1, tagEnd);\n return tagEnd + 1 - start;\n }\n\n private _handleStartTagRange(start: number, end: number): void {\n this._flushTextBuffer();\n\n const parsed = this._parseStartTagRange(start, end);\n const selfClosing = parsed.selfClosing;\n\n if (!this.xmlns) {\n const plainName = parsed.name;\n const attributes: Record<string, XmlAttribute | string> = Object.create(null) as Record<\n string,\n XmlAttribute | string\n >;\n\n for (const attr of parsed.attributes) {\n attributes[attr.name] = attr.value;\n }\n\n const tag: OpenTag = {\n name: plainName,\n attributes,\n isSelfClosing: selfClosing\n };\n\n this.onOpenTag?.(tag);\n\n if (selfClosing) {\n this.onCloseTag?.({ name: plainName });\n return;\n }\n\n this.elementStack.push({\n rawName: parsed.name,\n closeTag: { name: plainName }\n });\n return;\n }\n\n const parentNs = this._currentNs();\n let ns = parentNs;\n for (const attr of parsed.attributes) {\n if (attr.name === \"xmlns\") {\n if (ns === parentNs) {\n ns = Object.create(parentNs) as NamespaceMap;\n }\n ns[\"\"] = attr.value;\n } else if (attr.name.startsWith(\"xmlns:\")) {\n if (ns === parentNs) {\n ns = Object.create(parentNs) as NamespaceMap;\n }\n ns[attr.name.slice(6)] = attr.value;\n }\n }\n\n const resolvedName = this._resolveName(parsed.name, ns);\n const attributes: Record<string, XmlAttribute> = Object.create(null) as Record<string, XmlAttribute>;\n\n for (const attr of parsed.attributes) {\n if (!this.includeNamespaceAttributes) {\n if (attr.name === \"xmlns\" || attr.name.startsWith(\"xmlns:\")) {\n continue;\n }\n }\n const resolvedAttr = this._resolveAttributeName(attr.name, ns);\n attributes[resolvedAttr.name] = {\n name: resolvedAttr.name,\n value: attr.value,\n prefix: resolvedAttr.prefix,\n local: resolvedAttr.local,\n uri: resolvedAttr.uri\n };\n }\n\n const tag: OpenTag = {\n name: resolvedName.name,\n prefix: resolvedName.prefix,\n local: resolvedName.local,\n uri: resolvedName.uri,\n attributes,\n isSelfClosing: selfClosing\n };\n\n this.onOpenTag?.(tag);\n\n if (selfClosing) {\n this.onCloseTag?.({\n name: resolvedName.name,\n prefix: resolvedName.prefix,\n local: resolvedName.local,\n uri: resolvedName.uri\n });\n return;\n }\n\n this.elementStack.push({\n rawName: parsed.name,\n closeTag: {\n name: resolvedName.name,\n prefix: resolvedName.prefix,\n local: resolvedName.local,\n uri: resolvedName.uri\n }\n });\n this.nsStack.push(ns);\n }\n\n private _parseStartTagRange(\n start: number,\n end: number\n ): { name: string; attributes: RawAttribute[]; selfClosing: boolean } {\n let i = this._skipWhitespace(this.buffer, start, end);\n const parsedName = this._parseName(this.buffer, i, end);\n i = parsedName.end;\n\n const attributes = this._rawAttrs;\n attributes.length = 0;\n let selfClosing = false;\n\n while (i < end) {\n i = this._skipWhitespace(this.buffer, i, end);\n if (i >= end) {\n break;\n }\n\n if (this.buffer.charCodeAt(i) === 47) {\n i += 1;\n i = this._skipWhitespace(this.buffer, i, end);\n if (i !== end) {\n this._error(\"Invalid self-closing tag\");\n }\n selfClosing = true;\n break;\n }\n\n const attrName = this._parseName(this.buffer, i, end);\n i = attrName.end;\n i = this._skipWhitespace(this.buffer, i, end);\n\n if (this.buffer.charCodeAt(i) !== 61) {\n this._error(\"Attribute without '='\");\n }\n\n i += 1;\n i = this._skipWhitespace(this.buffer, i, end);\n\n const quoteCode = this.buffer.charCodeAt(i);\n if (quoteCode !== 34 && quoteCode !== 39) {\n this._error(\"Attribute value must be quoted\");\n }\n\n const quote = String.fromCharCode(quoteCode);\n i += 1;\n\n const valueEnd = this.buffer.indexOf(quote, i);\n if (valueEnd === -1 || valueEnd >= end) {\n this._error(\"Unterminated attribute value\");\n }\n\n const rawValue = this.buffer.slice(i, valueEnd);\n const normalized = rawValue.includes(\"\\r\") ? rawValue.replace(CRLF_RE, \"\\n\") : rawValue;\n const value = !normalized.includes(\"&\") ? normalized : decodeEntities(normalized, this.onError);\n attributes.push({ name: attrName.name, value });\n i = valueEnd + 1;\n }\n\n return { name: parsedName.name, attributes, selfClosing };\n }\n\n private _handleCloseTag(rawName: string, _nameEnd?: number): void {\n this._flushTextBuffer();\n\n const entry = this.elementStack.pop();\n const ns = this.xmlns ? this.nsStack.pop() : this._currentNs();\n\n if (!entry || !ns) {\n this._error(\"Closing tag without matching start tag\");\n }\n\n if (entry.rawName !== rawName) {\n this._error(`Mismatched closing tag: expected </${entry.rawName}>`);\n }\n\n this.onCloseTag?.(entry.closeTag);\n }\n\n private _emitText(text: string, allowPendingCR: boolean): void {\n const normalized = this._normalizeText(text, allowPendingCR);\n if (normalized.length === 0) {\n return;\n }\n\n if (!normalized.includes(\"&\")) {\n this._emitDecodedText(normalized);\n return;\n }\n\n const decoded = decodeEntities(normalized, this.onError);\n if (decoded.length > 0) {\n this._emitDecodedText(decoded);\n }\n }\n\n private _emitDecodedText(text: string): void {\n if (!this.coalesceText) {\n this.onText?.(text);\n return;\n }\n this.pendingTextParts.push(text);\n }\n\n private _flushTextBuffer(): void {\n if (!this.coalesceText || this.pendingTextParts.length === 0) {\n return;\n }\n const first = this.pendingTextParts[0];\n const text = this.pendingTextParts.length === 1 && first !== undefined ? first : this.pendingTextParts.join(\"\");\n this.pendingTextParts.length = 0;\n this.onText?.(text);\n }\n\n private _resolveName(rawName: string, ns: NamespaceMap): ResolvedName {\n if (!this.xmlns) {\n const split = rawName.indexOf(\":\");\n if (split === -1) {\n return { name: rawName, prefix: \"\", local: rawName, uri: \"\" };\n }\n return {\n name: rawName,\n prefix: rawName.slice(0, split),\n local: rawName.slice(split + 1),\n uri: \"\"\n };\n }\n\n const split = rawName.indexOf(\":\");\n if (split === -1) {\n return {\n name: rawName,\n prefix: \"\",\n local: rawName,\n uri: ns[\"\"] ?? \"\"\n };\n }\n\n const prefix = rawName.slice(0, split);\n const local = rawName.slice(split + 1);\n const uri = ns[prefix];\n if (uri === undefined) {\n this._error(`Undeclared namespace prefix: ${prefix}`);\n }\n return {\n name: rawName,\n prefix,\n local,\n uri\n };\n }\n\n private _resolveAttributeName(rawName: string, ns: NamespaceMap): ResolvedName {\n if (!this.xmlns) {\n return this._resolveName(rawName, ns);\n }\n\n if (rawName === \"xmlns\") {\n return {\n name: rawName,\n prefix: \"\",\n local: rawName,\n uri: ns.xmlns ?? XMLNS_NAMESPACE_URI\n };\n }\n\n const split = rawName.indexOf(\":\");\n if (split === -1) {\n return {\n name: rawName,\n prefix: \"\",\n local: rawName,\n uri: \"\"\n };\n }\n\n const prefix = rawName.slice(0, split);\n const local = rawName.slice(split + 1);\n const uri = ns[prefix];\n if (uri === undefined) {\n this._error(`Undeclared namespace prefix: ${prefix}`);\n }\n\n return {\n name: rawName,\n prefix,\n local,\n uri\n };\n }\n\n private _findTagEnd(start: number): number {\n const quickEnd = this.buffer.indexOf(\">\", start);\n if (quickEnd === -1) {\n return -1;\n }\n\n const firstDoubleQuote = this.buffer.indexOf(\"\\\"\", start);\n const firstSingleQuote = this.buffer.indexOf(\"'\", start);\n const firstQuote =\n firstDoubleQuote === -1\n ? firstSingleQuote\n : firstSingleQuote === -1\n ? firstDoubleQuote\n : Math.min(firstDoubleQuote, firstSingleQuote);\n\n if (firstQuote === -1 || firstQuote > quickEnd) {\n return quickEnd;\n }\n\n let quoteCode = 0;\n for (let i = start; i < this.buffer.length; i += 1) {\n const code = this.buffer.charCodeAt(i);\n if (quoteCode) {\n if (code === quoteCode) {\n quoteCode = 0;\n }\n continue;\n }\n if (code === 34 || code === 39) {\n quoteCode = code;\n continue;\n }\n if (code === 62) {\n return i;\n }\n }\n return -1;\n }\n\n private _findDoctypeEnd(start: number): number {\n let quoteCode = 0;\n let bracketDepth = 0;\n\n for (let i = start; i < this.buffer.length; i += 1) {\n const code = this.buffer.charCodeAt(i);\n if (quoteCode) {\n if (code === quoteCode) {\n quoteCode = 0;\n }\n continue;\n }\n if (code === 34 || code === 39) {\n quoteCode = code;\n continue;\n }\n if (code === 91) {\n bracketDepth += 1;\n continue;\n }\n if (code === 93) {\n bracketDepth = Math.max(0, bracketDepth - 1);\n continue;\n }\n if (code === 62 && bracketDepth === 0) {\n return i;\n }\n }\n\n return -1;\n }\n\n private _parseName(input: string, start: number, end: number): { name: string; end: number } {\n if (start >= end) {\n this._error(\"Expected name\");\n }\n\n const firstCode = input.charCodeAt(start);\n if (firstCode !== firstCode || firstCode >= 128 || NAME_START_TABLE[firstCode] === 0) {\n this._error(`Invalid name start: '${input[start] ?? \"\"}'`);\n }\n\n let i = start + 1;\n while (i < end) {\n const code = input.charCodeAt(i);\n if (code >= 128 || NAME_CHAR_TABLE[code] === 0) {\n break;\n }\n i += 1;\n }\n\n return { name: input.slice(start, i), end: i };\n }\n\n private _skipWhitespace(input: string, start: number, end: number): number {\n let i = start;\n while (i < end) {\n const code = input.charCodeAt(i);\n if (code !== 32 && code !== 9 && code !== 10 && code !== 13) {\n break;\n }\n i += 1;\n }\n return i;\n }\n\n private _currentNs(): NamespaceMap {\n return this.nsStack[this.nsStack.length - 1] ?? (Object.create(null) as NamespaceMap);\n }\n\n private _advance(text: string): void {\n this.offset += text.length;\n if (!this.trackPosition) {\n return;\n }\n\n let pos = text.indexOf(\"\\n\");\n if (pos === -1) {\n this.column += text.length;\n return;\n }\n\n let newlineCount = 0;\n let lastNewline = -1;\n while (pos !== -1) {\n newlineCount += 1;\n lastNewline = pos;\n pos = text.indexOf(\"\\n\", pos + 1);\n }\n\n this.line += newlineCount;\n this.column = text.length - lastNewline;\n }\n\n private _normalizeText(text: string, allowPendingCR: boolean): string {\n if (!text) {\n return \"\";\n }\n\n // Fast path for common chunks: no CR handling and no pending state.\n if (!this.pendingCR && !text.includes(\"\\r\")) {\n return text;\n }\n\n let value = text;\n let prefix = \"\";\n\n if (this.pendingCR) {\n prefix = \"\\n\";\n if (value.charCodeAt(0) === 10) {\n value = value.slice(1);\n }\n this.pendingCR = false;\n }\n\n if (allowPendingCR && value.charCodeAt(value.length - 1) === 13) {\n this.pendingCR = true;\n value = value.slice(0, -1);\n }\n\n const normalized = !value.includes(\"\\r\") ? value : value.replace(CRLF_RE, \"\\n\");\n return prefix ? `${prefix}${normalized}` : normalized;\n }\n\n private _advanceSpan(start: number, end: number): void {\n const length = end - start;\n this.offset += length;\n if (!this.trackPosition) {\n return;\n }\n\n let pos = this.buffer.indexOf(\"\\n\", start);\n if (pos === -1 || pos >= end) {\n this.column += length;\n return;\n }\n\n let newlineCount = 0;\n let lastNewline = -1;\n while (pos !== -1 && pos < end) {\n newlineCount += 1;\n lastNewline = pos;\n pos = this.buffer.indexOf(\"\\n\", pos + 1);\n }\n\n this.line += newlineCount;\n this.column = end - lastNewline;\n }\n\n private _flushPendingCR(): void {\n if (!this.pendingCR) {\n return;\n }\n this.pendingCR = false;\n this._emitDecodedText(\"\\n\");\n }\n\n private _error(message: string): never {\n const line = this.trackPosition ? this.line : 0;\n const column = this.trackPosition ? this.column : 0;\n const error = new XmlSaxError(message, this.offset, line, column);\n this.onError?.(error);\n throw error;\n }\n}\n","import { XmlSaxParser } from \"./parser\";\nimport type { ParserOptions, XmlNode } from \"./types\";\n\nexport class TreeBuilder {\n private stack: XmlNode[] = [];\n private root: XmlNode | null = null;\n\n onOpenTag = (tag: { name: string; attributes: Record<string, { value: string } | string> }): void => {\n const node: XmlNode = {\n name: tag.name,\n attributes: Object.fromEntries(\n Object.entries(tag.attributes).map(([key, attr]) => [key, typeof attr === \"string\" ? attr : attr.value])\n ),\n children: []\n };\n\n const parent = this.stack[this.stack.length - 1];\n if (parent) {\n parent.children?.push(node);\n } else {\n this.root = node;\n }\n\n this.stack.push(node);\n };\n\n onText = (text: string): void => {\n if (!this.stack.length) {\n return;\n }\n const node = this.stack[this.stack.length - 1];\n if (!node) {\n return;\n }\n const children = node.children ?? [];\n const last = children[children.length - 1];\n if (typeof last === \"string\") {\n children[children.length - 1] = last + text;\n } else {\n children.push(text);\n }\n node.children = children;\n };\n\n onCdata = (text: string): void => {\n this.onText(text);\n };\n\n onCloseTag = (): void => {\n this.stack.pop();\n };\n\n getRoot(): XmlNode {\n if (!this.root) {\n throw new Error(\"No root element found\");\n }\n return this.root;\n }\n}\n\nexport function parseXmlString(xml: string, options: ParserOptions = {}): XmlNode {\n const builder = new TreeBuilder();\n const parser = new XmlSaxParser({\n ...options,\n onOpenTag: builder.onOpenTag,\n onText: builder.onText,\n onCdata: builder.onCdata,\n onCloseTag: builder.onCloseTag\n });\n\n parser.feed(xml);\n parser.close();\n return builder.getRoot();\n}\n","import type { SerializeOptions, XmlChild, XmlNode } from \"./types\";\n\nconst DEFAULT_OPTIONS: Required<Pick<SerializeOptions, \"pretty\" | \"indent\" | \"newline\" | \"xmlDeclaration\">> = {\n pretty: false,\n indent: \" \",\n newline: \"\\n\",\n xmlDeclaration: false\n};\n\nexport function serializeXml(node: XmlNode, options: SerializeOptions = {}): string {\n const settings = { ...DEFAULT_OPTIONS, ...options };\n let body = serializeNode(node, settings, 0);\n if (settings.pretty && !body.endsWith(settings.newline)) {\n body = `${body}${settings.newline}`;\n }\n if (!settings.xmlDeclaration) {\n return body;\n }\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>${settings.newline}${body}`;\n}\n\nfunction serializeNode(node: XmlNode, options: Required<SerializeOptions>, depth: number): string {\n const attrs = serializeAttributes(node.attributes);\n const tagOpen = `<${node.name}${attrs}>`;\n const tagClose = `</${node.name}>`;\n\n const children = node.children ?? [];\n if (!children.length) {\n if (!options.pretty) {\n return `<${node.name}${attrs}/>`;\n }\n const indent = options.indent.repeat(depth);\n return `${indent}<${node.name}${attrs}/>`;\n }\n\n if (!options.pretty) {\n const inner = children.map((child) => serializeChild(child, options, depth + 1)).join(\"\");\n return `${tagOpen}${inner}${tagClose}`;\n }\n\n const indent = options.indent.repeat(depth);\n const hasOnlyTextChildren = children.every((child) => typeof child === \"string\");\n if (hasOnlyTextChildren) {\n const inlineText = children.map((child) => escapeText(child)).join(\"\");\n return `${indent}${tagOpen}${inlineText}${tagClose}`;\n }\n const innerIndent = options.indent.repeat(depth + 1);\n const prettyOpen = `${indent}${tagOpen}`;\n const prettyClose = `${indent}${tagClose}`;\n const inner = children\n .map((child) =>\n typeof child === \"string\"\n ? `${innerIndent}${escapeText(child)}`\n : serializeNode(child, options, depth + 1)\n )\n .join(options.newline);\n\n return `${prettyOpen}${options.newline}${inner}${options.newline}${prettyClose}`;\n}\n\nfunction serializeChild(child: XmlChild, options: Required<SerializeOptions>, depth: number): string {\n if (typeof child === \"string\") {\n return escapeText(child);\n }\n return serializeNode(child, options, depth);\n}\n\nfunction serializeAttributes(attrs?: Record<string, string>): string {\n if (!attrs) {\n return \"\";\n }\n return Object.entries(attrs)\n .map(([key, value]) => ` ${key}=\"${escapeAttribute(value)}\"`)\n .join(\"\");\n}\n\nfunction escapeText(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\");\n}\n\nfunction escapeAttribute(value: string): string {\n return escapeText(value).replace(/\"/g, \""\");\n}\n","import { serializeXml } from \"./serializer\";\nimport type {\n ObjectBuilderOptions,\n ObjectToXmlOptions,\n OpenTag,\n XmlAttribute,\n XmlBuilderOptions,\n XmlInputObject,\n XmlInputValue,\n XmlNode,\n XmlObjectMap,\n XmlObjectValue\n} from \"./types\";\n\ninterface ElementState {\n name: string;\n attributes: Record<string, string>;\n textParts: string[];\n children: Record<string, XmlObjectValue | XmlObjectValue[]>;\n}\n\nconst DEFAULT_OBJECT_OPTIONS: Required<Omit<ObjectBuilderOptions, \"arrayElements\">> = {\n attributePrefix: \"@_\",\n textKey: \"#text\",\n stripNamespaces: false,\n coalesceText: true\n};\n\ntype ObjectBuilderSettings = Required<Omit<ObjectBuilderOptions, \"arrayElements\">> &\n Pick<ObjectBuilderOptions, \"arrayElements\">;\n\ntype XmlBuilderSettings = Required<Omit<XmlBuilderOptions, \"arrayElements\" | \"rootName\">> &\n Pick<XmlBuilderOptions, \"arrayElements\" | \"rootName\">;\n\nexport function stripNamespace(name: string): string {\n const index = name.indexOf(\":\");\n if (index === -1) {\n return name;\n }\n return name.slice(index + 1);\n}\n\nexport function resolveName(\n value: string | Pick<OpenTag, \"name\" | \"prefix\" | \"local\" | \"uri\">\n): { name: string; localName: string; prefix: string; uri: string } {\n if (typeof value !== \"string\") {\n const prefix = value.prefix ?? \"\";\n const local = value.local ?? (prefix ? value.name.slice(prefix.length + 1) : value.name);\n return {\n name: value.name,\n localName: local,\n prefix,\n uri: value.uri ?? \"\"\n };\n }\n\n const index = value.indexOf(\":\");\n if (index === -1) {\n return { name: value, localName: value, prefix: \"\", uri: \"\" };\n }\n\n return {\n name: value,\n localName: value.slice(index + 1),\n prefix: value.slice(0, index),\n uri: \"\"\n };\n}\n\nexport function buildObject(root: XmlNode, options: ObjectBuilderOptions = {}): XmlObjectValue {\n const settings = buildSettings(options);\n return buildNode(root, settings, []);\n}\n\nexport function buildXmlNode(obj: XmlInputValue, options: XmlBuilderOptions = {}): XmlNode {\n const settings = buildXmlSettings(options);\n const root = resolveRoot(obj, settings);\n const rootName = normalizeName(root.name, settings);\n return buildElement(rootName, root.value, settings, []);\n}\n\nexport function objectToXml(obj: XmlInputValue, options: ObjectToXmlOptions = {}): string {\n const node = buildXmlNode(obj, options);\n return serializeXml(node, options);\n}\n\nexport class ObjectBuilder {\n private options: ObjectBuilderSettings;\n private stack: ElementState[] = [];\n private root: XmlObjectValue | null = null;\n private rootName: string | null = null;\n\n constructor(options: ObjectBuilderOptions = {}) {\n this.options = buildSettings(options);\n }\n\n onOpenTag = (tag: OpenTag): void => {\n const name = normalizeName(tag.name, this.options);\n const attributes = normalizeAttributes(tag.attributes, this.options);\n const state: ElementState = {\n name,\n attributes,\n textParts: [],\n children: Object.create(null) as Record<string, XmlObjectValue | XmlObjectValue[]>\n };\n\n this.rootName ??= name;\n\n this.stack.push(state);\n };\n\n onText = (text: string): void => {\n if (!text) {\n return;\n }\n const current = this.stack[this.stack.length - 1];\n if (!current) {\n return;\n }\n current.textParts.push(text);\n };\n\n onCdata = (text: string): void => {\n this.onText(text);\n };\n\n onCloseTag = (): void => {\n const state = this.stack.pop();\n if (!state) {\n return;\n }\n\n const value = finalizeElement(state, this.options);\n const parent = this.stack[this.stack.length - 1];\n\n if (!parent) {\n this.root = value;\n return;\n }\n\n const path = this.stack.map((entry) => entry.name);\n addChild(parent.children, state.name, value, this.options, path);\n };\n\n getResult(): XmlObjectValue {\n if (this.root === null) {\n throw new Error(\"No root element found\");\n }\n return this.root;\n }\n\n getRootName(): string {\n if (!this.rootName) {\n throw new Error(\"No root element found\");\n }\n return this.rootName;\n }\n}\n\nfunction buildSettings(options: ObjectBuilderOptions): ObjectBuilderSettings {\n return { ...DEFAULT_OBJECT_OPTIONS, ...options };\n}\n\nfunction buildXmlSettings(options: XmlBuilderOptions): XmlBuilderSettings {\n return { ...DEFAULT_OBJECT_OPTIONS, ...options };\n}\n\nfunction buildNode(node: XmlNode, options: ObjectBuilderSettings, path: string[]): XmlObjectValue {\n const name = normalizeName(node.name, options);\n const attributes = normalizeAttributeMap(node.attributes ?? {}, options);\n const state: ElementState = {\n name,\n attributes,\n textParts: [],\n children: Object.create(null) as Record<string, XmlObjectValue | XmlObjectValue[]>\n };\n\n const children = node.children ?? [];\n for (const child of children) {\n if (typeof child === \"string\") {\n if (child) {\n state.textParts.push(child);\n }\n continue;\n }\n\n const value = buildNode(child, options, [...path, name]);\n const childName = normalizeName(child.name, options);\n addChild(state.children, childName, value, options, [...path, name]);\n }\n\n return finalizeElement(state, options);\n}\n\nfunction normalizeName(name: string, options: ObjectBuilderSettings): string {\n if (options.stripNamespaces) {\n return stripNamespace(name);\n }\n return name;\n}\n\nfunction normalizeXmlName(name: string, options: XmlBuilderSettings): string {\n if (options.stripNamespaces) {\n return stripNamespace(name);\n }\n return name;\n}\n\nfunction normalizeAttributes(\n attributes: Record<string, XmlAttribute | string>,\n options: ObjectBuilderSettings\n): Record<string, string> {\n const result: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const [key, attr] of Object.entries(attributes)) {\n const name = normalizeName(key, options);\n result[name] = typeof attr === \"string\" ? attr : attr.value;\n }\n return result;\n}\n\nfunction normalizeAttributeMap(\n attributes: Record<string, string>,\n options: ObjectBuilderSettings\n): Record<string, string> {\n const result: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const [key, value] of Object.entries(attributes)) {\n const name = normalizeName(key, options);\n result[name] = value;\n }\n return result;\n}\n\nfunction addChild(\n target: Record<string, XmlObjectValue | XmlObjectValue[]>,\n name: string,\n value: XmlObjectValue,\n options: ObjectBuilderSettings,\n path: string[]\n): void {\n const forcedArray = shouldForceArray(name, path, options);\n const existing = target[name];\n\n if (existing === undefined) {\n target[name] = forcedArray ? [value] : value;\n return;\n }\n\n if (Array.isArray(existing)) {\n existing.push(value);\n return;\n }\n\n target[name] = [existing, value];\n}\n\nfunction shouldForceArray(name: string, path: string[], options: ObjectBuilderSettings): boolean {\n const rule = options.arrayElements;\n if (!rule) {\n return false;\n }\n if (rule instanceof Set) {\n return rule.has(name);\n }\n return rule(name, path);\n}\n\nfunction resolveRoot(obj: XmlInputValue, options: XmlBuilderSettings): { name: string; value: XmlInputValue } {\n if (isRecord(obj)) {\n const keys = Object.keys(obj);\n if (keys.length === 1) {\n const name = keys[0] ?? \"\";\n return { name, value: obj[name] };\n }\n }\n\n if (!options.rootName) {\n throw new Error(\"Root element name is required when object has multiple keys\");\n }\n\n return { name: options.rootName, value: obj };\n}\n\nfunction buildElement(\n name: string,\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): XmlNode {\n const attributes: Record<string, string> = Object.create(null) as Record<string, string>;\n const children: (XmlNode | string)[] = [];\n const nextPath = [...path, name];\n\n if (Array.isArray(value)) {\n for (const item of value) {\n appendContent(children, item, options, nextPath);\n }\n return finalizeNode(name, attributes, children);\n }\n\n if (isPrimitive(value)) {\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n return finalizeNode(name, attributes, children);\n }\n\n if (isRecord(value)) {\n for (const [key, entryValue] of Object.entries(value)) {\n if (isAttributeKey(key, options)) {\n const attrName = normalizeXmlName(key.slice(options.attributePrefix.length), options);\n const attrValue = coerceText(entryValue);\n if (attrValue !== null) {\n attributes[attrName] = attrValue;\n }\n continue;\n }\n\n if (key === options.textKey) {\n appendText(children, entryValue, options);\n continue;\n }\n\n const childName = normalizeXmlName(key, options);\n addChildElements(children, childName, entryValue, options, nextPath);\n }\n }\n\n return finalizeNode(name, attributes, children);\n}\n\nfunction addChildElements(\n children: (XmlNode | string)[],\n name: string,\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): void {\n const forcedArray = shouldForceArray(name, path, options);\n const items = Array.isArray(value) ? value : forcedArray ? [value] : [value];\n\n for (const item of items) {\n if (item === undefined || item === null) {\n children.push({ name });\n continue;\n }\n children.push(buildElement(name, item, options, path));\n }\n}\n\nfunction appendContent(\n children: (XmlNode | string)[],\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): void {\n if (value === undefined || value === null) {\n return;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n appendContent(children, item, options, path);\n }\n return;\n }\n\n if (isPrimitive(value)) {\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n return;\n }\n\n if (isRecord(value)) {\n for (const [key, entryValue] of Object.entries(value)) {\n const childName = normalizeXmlName(key, options);\n addChildElements(children, childName, entryValue, options, path);\n }\n }\n}\n\nfunction appendText(\n children: (XmlNode | string)[],\n value: XmlInputValue,\n options: XmlBuilderSettings\n): void {\n if (value === undefined || value === null) {\n return;\n }\n\n if (Array.isArray(value)) {\n const parts = value\n .map((item) => coerceText(item))\n .filter((item): item is string => item !== null);\n if (parts.length === 0) {\n return;\n }\n if (options.coalesceText) {\n children.push(parts.join(\"\"));\n return;\n }\n for (const part of parts) {\n children.push(part);\n }\n return;\n }\n\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n}\n\nfunction finalizeNode(\n name: string,\n attributes: Record<string, string>,\n children: (XmlNode | string)[]\n): XmlNode {\n const node: XmlNode = { name };\n if (Object.keys(attributes).length > 0) {\n node.attributes = attributes;\n }\n if (children.length > 0) {\n node.children = children;\n }\n return node;\n}\n\nfunction isAttributeKey(key: string, options: XmlBuilderSettings): boolean {\n if (!options.attributePrefix) {\n return false;\n }\n return key.startsWith(options.attributePrefix) && key.length > options.attributePrefix.length;\n}\n\nfunction isRecord(value: XmlInputValue): value is XmlInputObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isPrimitive(value: XmlInputValue): value is string | number | boolean {\n return typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\";\n}\n\nfunction coerceText(value: XmlInputValue): string | null {\n if (value === undefined || value === null) {\n return null;\n }\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (value instanceof Date) {\n return value.toISOString();\n }\n return null;\n}\n\nfunction finalizeElement(state: ElementState, options: ObjectBuilderSettings): XmlObjectValue {\n const hasAttributes = Object.keys(state.attributes).length > 0;\n const hasChildren = Object.keys(state.children).length > 0;\n const hasText = state.textParts.length > 0;\n\n const textValue = options.coalesceText\n ? state.textParts.join(\"\")\n : state.textParts.length <= 1\n ? state.textParts[0] ?? \"\"\n : state.textParts.slice();\n\n if (!hasAttributes && !hasChildren) {\n if (!hasText) {\n return \"\";\n }\n return textValue as XmlObjectValue;\n }\n\n const result: XmlObjectMap = Object.create(null) as XmlObjectMap;\n\n for (const [key, value] of Object.entries(state.attributes)) {\n result[`${options.attributePrefix}${key}`] = value;\n }\n\n for (const [key, value] of Object.entries(state.children)) {\n result[key] = value;\n }\n\n if (hasText) {\n result[options.textKey] = textValue as XmlObjectValue;\n }\n\n return result;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/assert.ts","../src/errors.ts","../src/entities.ts","../src/parser.ts","../src/tree.ts","../src/serializer.ts","../src/object.ts"],"names":["attributes","tag","split","DEFAULT_OPTIONS","indent","inner"],"mappings":"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","file":"index.cjs","sourcesContent":["const DEV = typeof process !== \"undefined\" ? process.env.NODE_ENV !== \"production\" : true;\n\nexport function assert(condition: boolean, message: string): void {\n if (!DEV) {\n return;\n }\n if (!condition) {\n throw new Error(`Invariant failed: ${message}`);\n }\n}\n","export class XmlSaxError extends Error {\n readonly offset: number;\n readonly line: number;\n readonly column: number;\n\n constructor(message: string, offset: number, line: number, column: number) {\n super(`${message} at ${line}:${column}`);\n this.name = \"XmlSaxError\";\n this.offset = offset;\n this.line = line;\n this.column = column;\n }\n}\n","import { XmlSaxError } from \"./errors\";\n\nexport function decodeEntities(input: string, onError?: (error: Error) => void): string {\n const firstAmp = input.indexOf(\"&\");\n if (firstAmp === -1) {\n return input;\n }\n\n let result = \"\";\n let i = 0;\n\n while (i < input.length) {\n const amp = input.indexOf(\"&\", i);\n if (amp === -1) {\n if (i === 0) {\n return input;\n }\n return i < input.length ? result + input.slice(i) : result;\n }\n\n if (amp > i) {\n result += input.slice(i, amp);\n }\n\n const semi = input.indexOf(\";\", amp + 1);\n if (semi === -1) {\n const err = new XmlSaxError(\"Unterminated entity\", amp, 0, 0);\n onError?.(err);\n throw err;\n }\n\n let decoded: string | undefined;\n const marker = input[amp + 1];\n\n if (marker === \"#\") {\n const numeric = parseNumericEntity(input, amp + 2, semi);\n decoded = numeric === undefined ? undefined : decodeCodePoint(numeric);\n } else {\n decoded = decodeNamedEntity(input, amp + 1, semi);\n }\n\n if (decoded === undefined) {\n const entity = input.slice(amp + 1, semi);\n const err = new XmlSaxError(`Unknown entity: &${entity};`, amp, 0, 0);\n onError?.(err);\n throw err;\n }\n\n result += decoded;\n i = semi + 1;\n }\n\n return result;\n}\n\nfunction decodeNamedEntity(input: string, start: number, end: number): string | undefined {\n const len = end - start;\n if (len === 2) {\n if (input[start] === \"l\" && input[start + 1] === \"t\") {\n return \"<\";\n }\n if (input[start] === \"g\" && input[start + 1] === \"t\") {\n return \">\";\n }\n return undefined;\n }\n\n if (len === 3) {\n if (input[start] === \"a\" && input[start + 1] === \"m\" && input[start + 2] === \"p\") {\n return \"&\";\n }\n return undefined;\n }\n\n if (len === 4) {\n const maybeQuot =\n input[start] === \"q\" && input[start + 1] === \"u\" && input[start + 2] === \"o\" && input[start + 3] === \"t\";\n if (maybeQuot) {\n return \"\\\"\";\n }\n\n const maybeApos =\n input[start] === \"a\" && input[start + 1] === \"p\" && input[start + 2] === \"o\" && input[start + 3] === \"s\";\n if (maybeApos) {\n return \"'\";\n }\n }\n\n return undefined;\n}\n\nfunction parseNumericEntity(input: string, start: number, end: number): number | undefined {\n if (start >= end) {\n return undefined;\n }\n\n let i = start;\n let radix = 10;\n\n const marker = input[i];\n if (marker === \"x\" || marker === \"X\") {\n radix = 16;\n i += 1;\n }\n\n if (i >= end) {\n return undefined;\n }\n\n let value = 0;\n for (; i < end; i += 1) {\n const ch = input[i];\n if (ch === undefined) {\n return undefined;\n }\n\n const digit = radix === 16 ? hexDigit(ch) : decimalDigit(ch);\n if (digit === -1) {\n return undefined;\n }\n\n value = value * radix + digit;\n }\n\n return value;\n}\n\nfunction decimalDigit(ch: string): number {\n const code = ch.charCodeAt(0) - 48;\n if (code < 0 || code > 9) {\n return -1;\n }\n return code;\n}\n\nfunction hexDigit(ch: string): number {\n const code = ch.charCodeAt(0);\n if (code >= 48 && code <= 57) {\n return code - 48;\n }\n if (code >= 65 && code <= 70) {\n return code - 55;\n }\n if (code >= 97 && code <= 102) {\n return code - 87;\n }\n return -1;\n}\n\nfunction decodeCodePoint(codePoint: number): string | undefined {\n if (!Number.isFinite(codePoint)) {\n return undefined;\n }\n if (codePoint < 0 || codePoint > 0x10ffff) {\n return undefined;\n }\n if (codePoint >= 0xd800 && codePoint <= 0xdfff) {\n return undefined;\n }\n return String.fromCodePoint(codePoint);\n}\n\nexport function splitTextForEntities(text: string): { emit: string; carry: string } {\n const lastAmp = text.lastIndexOf(\"&\");\n if (lastAmp === -1) {\n return { emit: text, carry: \"\" };\n }\n\n if (!text.includes(\";\", lastAmp + 1)) {\n return {\n emit: text.slice(0, lastAmp),\n carry: text.slice(lastAmp)\n };\n }\n\n return { emit: text, carry: \"\" };\n}\n","import { assert } from \"./assert\";\nimport { decodeEntities, splitTextForEntities } from \"./entities\";\nimport { XmlSaxError } from \"./errors\";\nimport type {\n CloseTag,\n Doctype,\n OpenTag,\n ParserOptions,\n ProcessingInstruction,\n XmlAttribute\n} from \"./types\";\n\ntype NamespaceMap = Record<string, string>;\n\ninterface StackEntry {\n rawName: string;\n closeTag: CloseTag;\n}\n\ninterface RawAttribute {\n name: string;\n value: string;\n}\n\ninterface ResolvedName {\n name: string;\n prefix: string;\n local: string;\n uri: string;\n}\n\nconst DEFAULT_OPTIONS: Required<\n Pick<ParserOptions, \"xmlns\" | \"includeNamespaceAttributes\" | \"allowDoctype\" | \"coalesceText\" | \"trackPosition\">\n> = {\n xmlns: true,\n includeNamespaceAttributes: false,\n allowDoctype: true,\n coalesceText: true,\n trackPosition: true\n};\n\nconst XML_NAMESPACE_URI = \"http://www.w3.org/XML/1998/namespace\";\nconst XMLNS_NAMESPACE_URI = \"http://www.w3.org/2000/xmlns/\";\nconst WHITESPACE_RE = /\\s/;\nconst CRLF_RE = /\\r\\n?/g;\n\nconst NAME_START_TABLE = new Uint8Array(128);\nconst NAME_CHAR_TABLE = new Uint8Array(128);\n\nfor (let code = 65; code <= 90; code += 1) {\n NAME_START_TABLE[code] = 1;\n NAME_CHAR_TABLE[code] = 1;\n}\nfor (let code = 97; code <= 122; code += 1) {\n NAME_START_TABLE[code] = 1;\n NAME_CHAR_TABLE[code] = 1;\n}\nfor (let code = 48; code <= 57; code += 1) {\n NAME_CHAR_TABLE[code] = 1;\n}\nNAME_START_TABLE[95] = 1;\nNAME_CHAR_TABLE[95] = 1;\nNAME_CHAR_TABLE[58] = 1;\nNAME_CHAR_TABLE[45] = 1;\nNAME_CHAR_TABLE[46] = 1;\n\nexport class XmlSaxParser {\n private readonly xmlns: boolean;\n private readonly includeNamespaceAttributes: boolean;\n private readonly allowDoctype: boolean;\n private readonly coalesceText: boolean;\n private readonly trackPosition: boolean;\n private readonly onOpenTag: ((tag: OpenTag) => void) | undefined;\n private readonly onCloseTag: ((tag: CloseTag) => void) | undefined;\n private readonly onText: ((text: string) => void) | undefined;\n private readonly onCdata: ((text: string) => void) | undefined;\n private readonly onComment: ((text: string) => void) | undefined;\n private readonly onProcessingInstruction: ((pi: ProcessingInstruction) => void) | undefined;\n private readonly onDoctype: ((doctype: Doctype) => void) | undefined;\n private readonly onError: ((error: Error) => void) | undefined;\n private buffer = \"\";\n private offset = 0;\n private line = 1;\n private column = 1;\n private elementStack: StackEntry[] = [];\n private nsStack: NamespaceMap[] = [\n Object.assign(Object.create(null) as NamespaceMap, {\n xml: XML_NAMESPACE_URI,\n xmlns: XMLNS_NAMESPACE_URI\n })\n ];\n private closed = false;\n private pendingCR = false;\n private readonly pendingTextParts: string[] = [];\n private readonly _rawAttrs: RawAttribute[] = [];\n\n constructor(options: ParserOptions = {}) {\n const resolved = { ...DEFAULT_OPTIONS, ...options };\n this.xmlns = resolved.xmlns;\n this.includeNamespaceAttributes = resolved.includeNamespaceAttributes;\n this.allowDoctype = resolved.allowDoctype;\n this.coalesceText = resolved.coalesceText;\n this.trackPosition = resolved.trackPosition;\n this.onOpenTag = resolved.onOpenTag;\n this.onCloseTag = resolved.onCloseTag;\n this.onText = resolved.onText;\n this.onCdata = resolved.onCdata;\n this.onComment = resolved.onComment;\n this.onProcessingInstruction = resolved.onProcessingInstruction;\n this.onDoctype = resolved.onDoctype;\n this.onError = resolved.onError;\n }\n\n feed(chunk: string): void {\n if (this.closed) {\n this._error(\"Parser is closed\");\n }\n if (!chunk) {\n return;\n }\n this.buffer += chunk;\n this._parseBuffer(false);\n }\n\n close(): void {\n if (this.closed) {\n return;\n }\n this._parseBuffer(true);\n this._flushPendingCR();\n this._flushTextBuffer();\n if (this.buffer.length > 0) {\n this._error(\"Unexpected end of input\");\n }\n if (this.elementStack.length > 0) {\n this._error(\"Unclosed tag(s) remaining\");\n }\n this.closed = true;\n }\n\n private _parseBuffer(final: boolean): void {\n let i = 0;\n\n while (i < this.buffer.length) {\n const lt = this.buffer.indexOf(\"<\", i);\n if (lt === -1) {\n const tail = this.buffer.slice(i);\n if (!tail.includes(\"&\")) {\n if (tail.length > 0) {\n this._emitText(tail, true);\n this._advance(tail);\n }\n } else {\n const split = splitTextForEntities(tail);\n if (split.emit.length > 0) {\n this._emitText(split.emit, true);\n this._advance(split.emit);\n }\n this.buffer = split.carry;\n return;\n }\n this.buffer = \"\";\n return;\n }\n\n if (lt > i) {\n const text = this.buffer.slice(i, lt);\n if (text.length > 0) {\n this._emitText(text, false);\n this._advance(text);\n }\n i = lt;\n }\n\n const consumed = this._parseMarkupFrom(lt, final);\n if (consumed === null) {\n break;\n }\n\n this._advanceSpan(lt, lt + consumed);\n i = lt + consumed;\n }\n\n this.buffer = this.buffer.slice(i);\n\n if (final && this.buffer.length > 0) {\n this._error(\"Unexpected end of input\");\n }\n }\n\n private _parseMarkupFrom(start: number, final: boolean): number | null {\n assert(this.buffer[start] === \"<\", \"Markup must start with '<'\");\n\n if (this.pendingCR) this._flushPendingCR();\n\n const secondCode = this.buffer.charCodeAt(start + 1);\n\n if (secondCode === 63) {\n const end = this.buffer.indexOf(\"?>\", start + 2);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated processing instruction\");\n }\n return null;\n }\n const body = this.buffer.slice(start + 2, end).trim();\n const split = body.search(WHITESPACE_RE);\n const target = split === -1 ? body : body.slice(0, split);\n const data = split === -1 ? \"\" : body.slice(split).trim();\n const pi: ProcessingInstruction = { target, body: data };\n this._flushTextBuffer();\n this.onProcessingInstruction?.(pi);\n return end + 2 - start;\n }\n\n if (secondCode === 33) {\n const thirdCode = this.buffer.charCodeAt(start + 2);\n\n if (thirdCode === 45 && this.buffer.charCodeAt(start + 3) === 45) {\n const end = this.buffer.indexOf(\"-->\", start + 4);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated comment\");\n }\n return null;\n }\n const comment = this.buffer.slice(start + 4, end);\n this._flushTextBuffer();\n this.onComment?.(comment);\n return end + 3 - start;\n }\n\n if (thirdCode === 91 && this.buffer.startsWith(\"<![CDATA[\", start)) {\n const end = this.buffer.indexOf(\"]]>\", start + 9);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated CDATA section\");\n }\n return null;\n }\n const cdata = this.buffer.slice(start + 9, end);\n const normalized = this._normalizeText(cdata, false);\n if (normalized.length > 0) {\n this._flushTextBuffer();\n this.onCdata?.(normalized);\n }\n return end + 3 - start;\n }\n\n if (thirdCode === 68 && this.buffer.startsWith(\"<!DOCTYPE\", start)) {\n const end = this._findDoctypeEnd(start + 9);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated doctype declaration\");\n }\n return null;\n }\n if (!this.allowDoctype) {\n this._error(\"Doctype is not allowed\");\n }\n const raw = this.buffer.slice(start + 9, end).trim();\n const doctype: Doctype = { raw };\n this._flushTextBuffer();\n this.onDoctype?.(doctype);\n return end + 1 - start;\n }\n }\n\n if (secondCode === 47) {\n const end = this.buffer.indexOf(\">\", start + 2);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated closing tag\");\n }\n return null;\n }\n\n let i = this._skipWhitespace(this.buffer, start + 2, end);\n const parsed = this._parseName(this.buffer, i, end);\n i = this._skipWhitespace(this.buffer, parsed.end, end);\n if (i !== end) {\n this._error(\"Invalid closing tag\");\n }\n\n this._handleCloseTag(parsed.name, parsed.end);\n return end + 1 - start;\n }\n\n const tagEnd = this._findTagEnd(start + 1);\n if (tagEnd === -1) {\n if (final) {\n this._error(\"Unterminated start tag\");\n }\n return null;\n }\n\n this._handleStartTagRange(start + 1, tagEnd);\n return tagEnd + 1 - start;\n }\n\n private _handleStartTagRange(start: number, end: number): void {\n this._flushTextBuffer();\n\n const parsed = this._parseStartTagRange(start, end);\n const selfClosing = parsed.selfClosing;\n\n if (!this.xmlns) {\n const plainName = parsed.name;\n const attributes: Record<string, XmlAttribute | string> = Object.create(null) as Record<\n string,\n XmlAttribute | string\n >;\n\n for (const attr of parsed.attributes) {\n attributes[attr.name] = attr.value;\n }\n\n const tag: OpenTag = {\n name: plainName,\n attributes,\n isSelfClosing: selfClosing\n };\n\n this.onOpenTag?.(tag);\n\n if (selfClosing) {\n this.onCloseTag?.({ name: plainName });\n return;\n }\n\n this.elementStack.push({\n rawName: parsed.name,\n closeTag: { name: plainName }\n });\n return;\n }\n\n const parentNs = this._currentNs();\n let ns = parentNs;\n for (const attr of parsed.attributes) {\n if (attr.name === \"xmlns\") {\n if (ns === parentNs) {\n ns = Object.create(parentNs) as NamespaceMap;\n }\n ns[\"\"] = attr.value;\n } else if (attr.name.startsWith(\"xmlns:\")) {\n if (ns === parentNs) {\n ns = Object.create(parentNs) as NamespaceMap;\n }\n ns[attr.name.slice(6)] = attr.value;\n }\n }\n\n const resolvedName = this._resolveName(parsed.name, ns);\n const attributes: Record<string, XmlAttribute> = Object.create(null) as Record<string, XmlAttribute>;\n\n for (const attr of parsed.attributes) {\n if (!this.includeNamespaceAttributes) {\n if (attr.name === \"xmlns\" || attr.name.startsWith(\"xmlns:\")) {\n continue;\n }\n }\n const resolvedAttr = this._resolveAttributeName(attr.name, ns);\n attributes[resolvedAttr.name] = {\n name: resolvedAttr.name,\n value: attr.value,\n prefix: resolvedAttr.prefix,\n local: resolvedAttr.local,\n uri: resolvedAttr.uri\n };\n }\n\n const tag: OpenTag = {\n name: resolvedName.name,\n prefix: resolvedName.prefix,\n local: resolvedName.local,\n uri: resolvedName.uri,\n attributes,\n isSelfClosing: selfClosing\n };\n\n this.onOpenTag?.(tag);\n\n if (selfClosing) {\n this.onCloseTag?.({\n name: resolvedName.name,\n prefix: resolvedName.prefix,\n local: resolvedName.local,\n uri: resolvedName.uri\n });\n return;\n }\n\n this.elementStack.push({\n rawName: parsed.name,\n closeTag: {\n name: resolvedName.name,\n prefix: resolvedName.prefix,\n local: resolvedName.local,\n uri: resolvedName.uri\n }\n });\n this.nsStack.push(ns);\n }\n\n private _parseStartTagRange(\n start: number,\n end: number\n ): { name: string; attributes: RawAttribute[]; selfClosing: boolean } {\n let i = this._skipWhitespace(this.buffer, start, end);\n const parsedName = this._parseName(this.buffer, i, end);\n i = parsedName.end;\n\n const attributes = this._rawAttrs;\n attributes.length = 0;\n let selfClosing = false;\n\n while (i < end) {\n i = this._skipWhitespace(this.buffer, i, end);\n if (i >= end) {\n break;\n }\n\n if (this.buffer.charCodeAt(i) === 47) {\n i += 1;\n i = this._skipWhitespace(this.buffer, i, end);\n if (i !== end) {\n this._error(\"Invalid self-closing tag\");\n }\n selfClosing = true;\n break;\n }\n\n const attrName = this._parseName(this.buffer, i, end);\n i = attrName.end;\n i = this._skipWhitespace(this.buffer, i, end);\n\n if (this.buffer.charCodeAt(i) !== 61) {\n this._error(\"Attribute without '='\");\n }\n\n i += 1;\n i = this._skipWhitespace(this.buffer, i, end);\n\n const quoteCode = this.buffer.charCodeAt(i);\n if (quoteCode !== 34 && quoteCode !== 39) {\n this._error(\"Attribute value must be quoted\");\n }\n\n const quote = String.fromCharCode(quoteCode);\n i += 1;\n\n const valueEnd = this.buffer.indexOf(quote, i);\n if (valueEnd === -1 || valueEnd >= end) {\n this._error(\"Unterminated attribute value\");\n }\n\n const rawValue = this.buffer.slice(i, valueEnd);\n const normalized = rawValue.includes(\"\\r\") ? rawValue.replace(CRLF_RE, \"\\n\") : rawValue;\n const value = !normalized.includes(\"&\") ? normalized : decodeEntities(normalized, this.onError);\n attributes.push({ name: attrName.name, value });\n i = valueEnd + 1;\n }\n\n return { name: parsedName.name, attributes, selfClosing };\n }\n\n private _handleCloseTag(rawName: string, _nameEnd?: number): void {\n this._flushTextBuffer();\n\n const entry = this.elementStack.pop();\n const ns = this.xmlns ? this.nsStack.pop() : this._currentNs();\n\n if (!entry || !ns) {\n this._error(\"Closing tag without matching start tag\");\n }\n\n if (entry.rawName !== rawName) {\n this._error(`Mismatched closing tag: expected </${entry.rawName}>`);\n }\n\n this.onCloseTag?.(entry.closeTag);\n }\n\n private _emitText(text: string, allowPendingCR: boolean): void {\n const normalized = this._normalizeText(text, allowPendingCR);\n if (normalized.length === 0) {\n return;\n }\n\n if (!normalized.includes(\"&\")) {\n this._emitDecodedText(normalized);\n return;\n }\n\n const decoded = decodeEntities(normalized, this.onError);\n if (decoded.length > 0) {\n this._emitDecodedText(decoded);\n }\n }\n\n private _emitDecodedText(text: string): void {\n if (!this.coalesceText) {\n this.onText?.(text);\n return;\n }\n this.pendingTextParts.push(text);\n }\n\n private _flushTextBuffer(): void {\n if (!this.coalesceText || this.pendingTextParts.length === 0) {\n return;\n }\n const first = this.pendingTextParts[0];\n const text = this.pendingTextParts.length === 1 && first !== undefined ? first : this.pendingTextParts.join(\"\");\n this.pendingTextParts.length = 0;\n this.onText?.(text);\n }\n\n private _resolveName(rawName: string, ns: NamespaceMap): ResolvedName {\n if (!this.xmlns) {\n const split = rawName.indexOf(\":\");\n if (split === -1) {\n return { name: rawName, prefix: \"\", local: rawName, uri: \"\" };\n }\n return {\n name: rawName,\n prefix: rawName.slice(0, split),\n local: rawName.slice(split + 1),\n uri: \"\"\n };\n }\n\n const split = rawName.indexOf(\":\");\n if (split === -1) {\n return {\n name: rawName,\n prefix: \"\",\n local: rawName,\n uri: ns[\"\"] ?? \"\"\n };\n }\n\n const prefix = rawName.slice(0, split);\n const local = rawName.slice(split + 1);\n const uri = ns[prefix];\n if (uri === undefined) {\n this._error(`Undeclared namespace prefix: ${prefix}`);\n }\n return {\n name: rawName,\n prefix,\n local,\n uri\n };\n }\n\n private _resolveAttributeName(rawName: string, ns: NamespaceMap): ResolvedName {\n if (!this.xmlns) {\n return this._resolveName(rawName, ns);\n }\n\n if (rawName === \"xmlns\") {\n return {\n name: rawName,\n prefix: \"\",\n local: rawName,\n uri: ns.xmlns ?? XMLNS_NAMESPACE_URI\n };\n }\n\n const split = rawName.indexOf(\":\");\n if (split === -1) {\n return {\n name: rawName,\n prefix: \"\",\n local: rawName,\n uri: \"\"\n };\n }\n\n const prefix = rawName.slice(0, split);\n const local = rawName.slice(split + 1);\n const uri = ns[prefix];\n if (uri === undefined) {\n this._error(`Undeclared namespace prefix: ${prefix}`);\n }\n\n return {\n name: rawName,\n prefix,\n local,\n uri\n };\n }\n\n private _findTagEnd(start: number): number {\n const quickEnd = this.buffer.indexOf(\">\", start);\n if (quickEnd === -1) {\n return -1;\n }\n\n const firstDoubleQuote = this.buffer.indexOf(\"\\\"\", start);\n const firstSingleQuote = this.buffer.indexOf(\"'\", start);\n const firstQuote =\n firstDoubleQuote === -1\n ? firstSingleQuote\n : firstSingleQuote === -1\n ? firstDoubleQuote\n : Math.min(firstDoubleQuote, firstSingleQuote);\n\n if (firstQuote === -1 || firstQuote > quickEnd) {\n return quickEnd;\n }\n\n let quoteCode = 0;\n for (let i = start; i < this.buffer.length; i += 1) {\n const code = this.buffer.charCodeAt(i);\n if (quoteCode) {\n if (code === quoteCode) {\n quoteCode = 0;\n }\n continue;\n }\n if (code === 34 || code === 39) {\n quoteCode = code;\n continue;\n }\n if (code === 62) {\n return i;\n }\n }\n return -1;\n }\n\n private _findDoctypeEnd(start: number): number {\n let quoteCode = 0;\n let bracketDepth = 0;\n\n for (let i = start; i < this.buffer.length; i += 1) {\n const code = this.buffer.charCodeAt(i);\n if (quoteCode) {\n if (code === quoteCode) {\n quoteCode = 0;\n }\n continue;\n }\n if (code === 34 || code === 39) {\n quoteCode = code;\n continue;\n }\n if (code === 91) {\n bracketDepth += 1;\n continue;\n }\n if (code === 93) {\n bracketDepth = Math.max(0, bracketDepth - 1);\n continue;\n }\n if (code === 62 && bracketDepth === 0) {\n return i;\n }\n }\n\n return -1;\n }\n\n private _parseName(input: string, start: number, end: number): { name: string; end: number } {\n if (start >= end) {\n this._error(\"Expected name\");\n }\n\n const firstCode = input.charCodeAt(start);\n if (firstCode !== firstCode || firstCode >= 128 || NAME_START_TABLE[firstCode] === 0) {\n this._error(`Invalid name start: '${input[start] ?? \"\"}'`);\n }\n\n let i = start + 1;\n while (i < end) {\n const code = input.charCodeAt(i);\n if (code >= 128 || NAME_CHAR_TABLE[code] === 0) {\n break;\n }\n i += 1;\n }\n\n return { name: input.slice(start, i), end: i };\n }\n\n private _skipWhitespace(input: string, start: number, end: number): number {\n let i = start;\n while (i < end) {\n const code = input.charCodeAt(i);\n if (code !== 32 && code !== 9 && code !== 10 && code !== 13) {\n break;\n }\n i += 1;\n }\n return i;\n }\n\n private _currentNs(): NamespaceMap {\n return this.nsStack[this.nsStack.length - 1] ?? (Object.create(null) as NamespaceMap);\n }\n\n private _advance(text: string): void {\n this.offset += text.length;\n if (!this.trackPosition) {\n return;\n }\n\n let pos = text.indexOf(\"\\n\");\n if (pos === -1) {\n this.column += text.length;\n return;\n }\n\n let newlineCount = 0;\n let lastNewline = -1;\n while (pos !== -1) {\n newlineCount += 1;\n lastNewline = pos;\n pos = text.indexOf(\"\\n\", pos + 1);\n }\n\n this.line += newlineCount;\n this.column = text.length - lastNewline;\n }\n\n private _normalizeText(text: string, allowPendingCR: boolean): string {\n if (!text) {\n return \"\";\n }\n\n // Fast path for common chunks: no CR handling and no pending state.\n if (!this.pendingCR && !text.includes(\"\\r\")) {\n return text;\n }\n\n let value = text;\n let prefix = \"\";\n\n if (this.pendingCR) {\n prefix = \"\\n\";\n if (value.charCodeAt(0) === 10) {\n value = value.slice(1);\n }\n this.pendingCR = false;\n }\n\n if (allowPendingCR && value.charCodeAt(value.length - 1) === 13) {\n this.pendingCR = true;\n value = value.slice(0, -1);\n }\n\n const normalized = !value.includes(\"\\r\") ? value : value.replace(CRLF_RE, \"\\n\");\n return prefix ? `${prefix}${normalized}` : normalized;\n }\n\n private _advanceSpan(start: number, end: number): void {\n const length = end - start;\n this.offset += length;\n if (!this.trackPosition) {\n return;\n }\n\n let pos = this.buffer.indexOf(\"\\n\", start);\n if (pos === -1 || pos >= end) {\n this.column += length;\n return;\n }\n\n let newlineCount = 0;\n let lastNewline = -1;\n while (pos !== -1 && pos < end) {\n newlineCount += 1;\n lastNewline = pos;\n pos = this.buffer.indexOf(\"\\n\", pos + 1);\n }\n\n this.line += newlineCount;\n this.column = end - lastNewline;\n }\n\n private _flushPendingCR(): void {\n if (!this.pendingCR) {\n return;\n }\n this.pendingCR = false;\n this._emitDecodedText(\"\\n\");\n }\n\n private _error(message: string): never {\n const line = this.trackPosition ? this.line : 0;\n const column = this.trackPosition ? this.column : 0;\n const error = new XmlSaxError(message, this.offset, line, column);\n this.onError?.(error);\n throw error;\n }\n}\n","import { XmlSaxParser } from \"./parser\";\nimport type { ParserOptions, XmlNode } from \"./types\";\n\nexport class TreeBuilder {\n private stack: XmlNode[] = [];\n private root: XmlNode | null = null;\n\n onOpenTag = (tag: { name: string; attributes: Record<string, { value: string } | string> }): void => {\n const node: XmlNode = {\n name: tag.name,\n attributes: Object.fromEntries(\n Object.entries(tag.attributes).map(([key, attr]) => [key, typeof attr === \"string\" ? attr : attr.value])\n ),\n children: []\n };\n\n const parent = this.stack[this.stack.length - 1];\n if (parent) {\n parent.children?.push(node);\n } else {\n this.root = node;\n }\n\n this.stack.push(node);\n };\n\n onText = (text: string): void => {\n if (!this.stack.length) {\n return;\n }\n const node = this.stack[this.stack.length - 1];\n if (!node) {\n return;\n }\n const children = node.children ?? [];\n const last = children[children.length - 1];\n if (typeof last === \"string\") {\n children[children.length - 1] = last + text;\n } else {\n children.push(text);\n }\n node.children = children;\n };\n\n onCdata = (text: string): void => {\n this.onText(text);\n };\n\n onCloseTag = (): void => {\n this.stack.pop();\n };\n\n getRoot(): XmlNode {\n if (!this.root) {\n throw new Error(\"No root element found\");\n }\n return this.root;\n }\n}\n\nexport function parseXmlString(xml: string, options: ParserOptions = {}): XmlNode {\n const builder = new TreeBuilder();\n const parser = new XmlSaxParser({\n ...options,\n onOpenTag: builder.onOpenTag,\n onText: builder.onText,\n onCdata: builder.onCdata,\n onCloseTag: builder.onCloseTag\n });\n\n parser.feed(xml);\n parser.close();\n return builder.getRoot();\n}\n","import type { SerializeOptions, XmlChild, XmlNode } from \"./types\";\n\nconst DEFAULT_OPTIONS: Required<Pick<SerializeOptions, \"pretty\" | \"indent\" | \"newline\" | \"xmlDeclaration\">> = {\n pretty: false,\n indent: \" \",\n newline: \"\\n\",\n xmlDeclaration: false\n};\n\nexport function serializeXml(node: XmlNode, options: SerializeOptions = {}): string {\n const settings = { ...DEFAULT_OPTIONS, ...options };\n let body = serializeNode(node, settings, 0);\n if (settings.pretty && !body.endsWith(settings.newline)) {\n body = `${body}${settings.newline}`;\n }\n if (!settings.xmlDeclaration) {\n return body;\n }\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>${settings.newline}${body}`;\n}\n\nfunction serializeNode(node: XmlNode, options: Required<SerializeOptions>, depth: number): string {\n const attrs = serializeAttributes(node.attributes);\n const tagOpen = `<${node.name}${attrs}>`;\n const tagClose = `</${node.name}>`;\n\n const children = node.children ?? [];\n if (!children.length) {\n if (!options.pretty) {\n return `<${node.name}${attrs}/>`;\n }\n const indent = options.indent.repeat(depth);\n return `${indent}<${node.name}${attrs}/>`;\n }\n\n if (!options.pretty) {\n const inner = children.map((child) => serializeChild(child, options, depth + 1)).join(\"\");\n return `${tagOpen}${inner}${tagClose}`;\n }\n\n const indent = options.indent.repeat(depth);\n const hasOnlyTextChildren = children.every((child) => typeof child === \"string\");\n if (hasOnlyTextChildren) {\n const inlineText = children.map((child) => escapeText(child)).join(\"\");\n return `${indent}${tagOpen}${inlineText}${tagClose}`;\n }\n const innerIndent = options.indent.repeat(depth + 1);\n const prettyOpen = `${indent}${tagOpen}`;\n const prettyClose = `${indent}${tagClose}`;\n const inner = children\n .map((child) =>\n typeof child === \"string\"\n ? `${innerIndent}${escapeText(child)}`\n : serializeNode(child, options, depth + 1)\n )\n .join(options.newline);\n\n return `${prettyOpen}${options.newline}${inner}${options.newline}${prettyClose}`;\n}\n\nfunction serializeChild(child: XmlChild, options: Required<SerializeOptions>, depth: number): string {\n if (typeof child === \"string\") {\n return escapeText(child);\n }\n return serializeNode(child, options, depth);\n}\n\nfunction serializeAttributes(attrs?: Record<string, string>): string {\n if (!attrs) {\n return \"\";\n }\n return Object.entries(attrs)\n .map(([key, value]) => ` ${key}=\"${escapeAttribute(value)}\"`)\n .join(\"\");\n}\n\nfunction escapeText(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\");\n}\n\nfunction escapeAttribute(value: string): string {\n return escapeText(value).replace(/\"/g, \""\");\n}\n","import { serializeXml } from \"./serializer\";\nimport type {\n ObjectBuilderOptions,\n ObjectToXmlOptions,\n OpenTag,\n XmlAttribute,\n XmlBuilderOptions,\n XmlInputObject,\n XmlInputValue,\n XmlNode,\n XmlObjectMap,\n XmlObjectValue\n} from \"./types\";\n\ninterface ElementState {\n name: string;\n attributes: Record<string, string>;\n textParts: string[];\n children: Record<string, XmlObjectValue | XmlObjectValue[]>;\n}\n\nconst DEFAULT_OBJECT_OPTIONS: Required<Omit<ObjectBuilderOptions, \"arrayElements\">> = {\n attributePrefix: \"@_\",\n textKey: \"#text\",\n stripNamespaces: false,\n coalesceText: true\n};\n\ntype ObjectBuilderSettings = Required<Omit<ObjectBuilderOptions, \"arrayElements\">> &\n Pick<ObjectBuilderOptions, \"arrayElements\">;\n\ntype XmlBuilderSettings = Required<Omit<XmlBuilderOptions, \"arrayElements\" | \"rootName\">> &\n Pick<XmlBuilderOptions, \"arrayElements\" | \"rootName\">;\n\nexport function stripNamespace(name: string): string {\n const index = name.indexOf(\":\");\n if (index === -1) {\n return name;\n }\n return name.slice(index + 1);\n}\n\nexport function resolveName(\n value: string | Pick<OpenTag, \"name\" | \"prefix\" | \"local\" | \"uri\">\n): { name: string; localName: string; prefix: string; uri: string } {\n if (typeof value !== \"string\") {\n const prefix = value.prefix ?? \"\";\n const local = value.local ?? (prefix ? value.name.slice(prefix.length + 1) : value.name);\n return {\n name: value.name,\n localName: local,\n prefix,\n uri: value.uri ?? \"\"\n };\n }\n\n const index = value.indexOf(\":\");\n if (index === -1) {\n return { name: value, localName: value, prefix: \"\", uri: \"\" };\n }\n\n return {\n name: value,\n localName: value.slice(index + 1),\n prefix: value.slice(0, index),\n uri: \"\"\n };\n}\n\nexport function buildObject(root: XmlNode, options: ObjectBuilderOptions = {}): XmlObjectValue {\n const settings = buildSettings(options);\n return buildNode(root, settings, []);\n}\n\nexport function buildXmlNode(obj: XmlInputValue, options: XmlBuilderOptions = {}): XmlNode {\n const settings = buildXmlSettings(options);\n const root = resolveRoot(obj, settings);\n const rootName = normalizeName(root.name, settings);\n return buildElement(rootName, root.value, settings, []);\n}\n\nexport function objectToXml(obj: XmlInputValue, options: ObjectToXmlOptions = {}): string {\n const node = buildXmlNode(obj, options);\n return serializeXml(node, options);\n}\n\nexport class ObjectBuilder {\n private options: ObjectBuilderSettings;\n private stack: ElementState[] = [];\n private root: XmlObjectValue | null = null;\n private rootName: string | null = null;\n\n constructor(options: ObjectBuilderOptions = {}) {\n this.options = buildSettings(options);\n }\n\n onOpenTag = (tag: OpenTag): void => {\n const name = normalizeName(tag.name, this.options);\n const attributes = normalizeAttributes(tag.attributes, this.options);\n const state: ElementState = {\n name,\n attributes,\n textParts: [],\n children: Object.create(null) as Record<string, XmlObjectValue | XmlObjectValue[]>\n };\n\n this.rootName ??= name;\n\n this.stack.push(state);\n };\n\n onText = (text: string): void => {\n if (!text) {\n return;\n }\n const current = this.stack[this.stack.length - 1];\n if (!current) {\n return;\n }\n current.textParts.push(text);\n };\n\n onCdata = (text: string): void => {\n this.onText(text);\n };\n\n onCloseTag = (): void => {\n const state = this.stack.pop();\n if (!state) {\n return;\n }\n\n const value = finalizeElement(state, this.options);\n const parent = this.stack[this.stack.length - 1];\n\n if (!parent) {\n this.root = value;\n return;\n }\n\n const path = this.stack.map((entry) => entry.name);\n addChild(parent.children, state.name, value, this.options, path);\n };\n\n getResult(): XmlObjectValue {\n if (this.root === null) {\n throw new Error(\"No root element found\");\n }\n return this.root;\n }\n\n getRootName(): string {\n if (!this.rootName) {\n throw new Error(\"No root element found\");\n }\n return this.rootName;\n }\n}\n\nfunction buildSettings(options: ObjectBuilderOptions): ObjectBuilderSettings {\n return { ...DEFAULT_OBJECT_OPTIONS, ...options };\n}\n\nfunction buildXmlSettings(options: XmlBuilderOptions): XmlBuilderSettings {\n return { ...DEFAULT_OBJECT_OPTIONS, ...options };\n}\n\nfunction buildNode(node: XmlNode, options: ObjectBuilderSettings, path: string[]): XmlObjectValue {\n const name = normalizeName(node.name, options);\n const attributes = normalizeAttributeMap(node.attributes ?? {}, options);\n const state: ElementState = {\n name,\n attributes,\n textParts: [],\n children: Object.create(null) as Record<string, XmlObjectValue | XmlObjectValue[]>\n };\n\n const children = node.children ?? [];\n for (const child of children) {\n if (typeof child === \"string\") {\n if (child) {\n state.textParts.push(child);\n }\n continue;\n }\n\n const value = buildNode(child, options, [...path, name]);\n const childName = normalizeName(child.name, options);\n addChild(state.children, childName, value, options, [...path, name]);\n }\n\n return finalizeElement(state, options);\n}\n\nfunction normalizeName(name: string, options: ObjectBuilderSettings): string {\n if (options.stripNamespaces) {\n return stripNamespace(name);\n }\n return name;\n}\n\nfunction normalizeXmlName(name: string, options: XmlBuilderSettings): string {\n if (options.stripNamespaces) {\n return stripNamespace(name);\n }\n return name;\n}\n\nfunction normalizeAttributes(\n attributes: Record<string, XmlAttribute | string>,\n options: ObjectBuilderSettings\n): Record<string, string> {\n const result: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const [key, attr] of Object.entries(attributes)) {\n const name = normalizeName(key, options);\n result[name] = typeof attr === \"string\" ? attr : attr.value;\n }\n return result;\n}\n\nfunction normalizeAttributeMap(\n attributes: Record<string, string>,\n options: ObjectBuilderSettings\n): Record<string, string> {\n const result: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const [key, value] of Object.entries(attributes)) {\n const name = normalizeName(key, options);\n result[name] = value;\n }\n return result;\n}\n\nfunction addChild(\n target: Record<string, XmlObjectValue | XmlObjectValue[]>,\n name: string,\n value: XmlObjectValue,\n options: ObjectBuilderSettings,\n path: string[]\n): void {\n const forcedArray = shouldForceArray(name, path, options);\n const existing = target[name];\n\n if (existing === undefined) {\n target[name] = forcedArray ? [value] : value;\n return;\n }\n\n if (Array.isArray(existing)) {\n existing.push(value);\n return;\n }\n\n target[name] = [existing, value];\n}\n\nfunction shouldForceArray(name: string, path: string[], options: ObjectBuilderSettings): boolean {\n const rule = options.arrayElements;\n if (!rule) {\n return false;\n }\n if (rule instanceof Set) {\n return rule.has(name);\n }\n return rule(name, path);\n}\n\nfunction resolveRoot(obj: XmlInputValue, options: XmlBuilderSettings): { name: string; value: XmlInputValue } {\n if (isRecord(obj)) {\n const keys = Object.keys(obj);\n if (keys.length === 1) {\n const name = keys[0] ?? \"\";\n return { name, value: obj[name] };\n }\n }\n\n if (!options.rootName) {\n throw new Error(\"Root element name is required when object has multiple keys\");\n }\n\n return { name: options.rootName, value: obj };\n}\n\nfunction buildElement(\n name: string,\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): XmlNode {\n const attributes: Record<string, string> = Object.create(null) as Record<string, string>;\n const children: (XmlNode | string)[] = [];\n const nextPath = [...path, name];\n\n if (Array.isArray(value)) {\n for (const item of value) {\n appendContent(children, item, options, nextPath);\n }\n return finalizeNode(name, attributes, children);\n }\n\n if (isPrimitive(value)) {\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n return finalizeNode(name, attributes, children);\n }\n\n if (isRecord(value)) {\n for (const [key, entryValue] of Object.entries(value)) {\n if (isAttributeKey(key, options)) {\n const attrName = normalizeXmlName(key.slice(options.attributePrefix.length), options);\n const attrValue = coerceText(entryValue);\n if (attrValue !== null) {\n attributes[attrName] = attrValue;\n }\n continue;\n }\n\n if (key === options.textKey) {\n appendText(children, entryValue, options);\n continue;\n }\n\n const childName = normalizeXmlName(key, options);\n addChildElements(children, childName, entryValue, options, nextPath);\n }\n }\n\n return finalizeNode(name, attributes, children);\n}\n\nfunction addChildElements(\n children: (XmlNode | string)[],\n name: string,\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): void {\n const forcedArray = shouldForceArray(name, path, options);\n const items = Array.isArray(value) ? value : forcedArray ? [value] : [value];\n\n for (const item of items) {\n if (item === undefined || item === null) {\n children.push({ name });\n continue;\n }\n children.push(buildElement(name, item, options, path));\n }\n}\n\nfunction appendContent(\n children: (XmlNode | string)[],\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): void {\n if (value === undefined || value === null) {\n return;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n appendContent(children, item, options, path);\n }\n return;\n }\n\n if (isPrimitive(value)) {\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n return;\n }\n\n if (isRecord(value)) {\n for (const [key, entryValue] of Object.entries(value)) {\n const childName = normalizeXmlName(key, options);\n addChildElements(children, childName, entryValue, options, path);\n }\n }\n}\n\nfunction appendText(\n children: (XmlNode | string)[],\n value: XmlInputValue,\n options: XmlBuilderSettings\n): void {\n if (value === undefined || value === null) {\n return;\n }\n\n if (Array.isArray(value)) {\n const parts = value\n .map((item) => coerceText(item))\n .filter((item): item is string => item !== null);\n if (parts.length === 0) {\n return;\n }\n if (options.coalesceText) {\n children.push(parts.join(\"\"));\n return;\n }\n for (const part of parts) {\n children.push(part);\n }\n return;\n }\n\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n}\n\nfunction finalizeNode(\n name: string,\n attributes: Record<string, string>,\n children: (XmlNode | string)[]\n): XmlNode {\n const node: XmlNode = { name };\n if (Object.keys(attributes).length > 0) {\n node.attributes = attributes;\n }\n if (children.length > 0) {\n node.children = children;\n }\n return node;\n}\n\nfunction isAttributeKey(key: string, options: XmlBuilderSettings): boolean {\n if (!options.attributePrefix) {\n return false;\n }\n return key.startsWith(options.attributePrefix) && key.length > options.attributePrefix.length;\n}\n\nfunction isRecord(value: XmlInputValue): value is XmlInputObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isPrimitive(value: XmlInputValue): value is string | number | boolean {\n return typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\";\n}\n\nfunction coerceText(value: XmlInputValue): string | null {\n if (value === undefined || value === null) {\n return null;\n }\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (value instanceof Date) {\n return value.toISOString();\n }\n return null;\n}\n\nfunction finalizeElement(state: ElementState, options: ObjectBuilderSettings): XmlObjectValue {\n const hasAttributes = Object.keys(state.attributes).length > 0;\n const hasChildren = Object.keys(state.children).length > 0;\n const hasText = state.textParts.length > 0;\n\n const textValue = options.coalesceText\n ? state.textParts.join(\"\")\n : state.textParts.length <= 1\n ? state.textParts[0] ?? \"\"\n : state.textParts.slice();\n\n if (!hasAttributes && !hasChildren) {\n if (!hasText) {\n return \"\";\n }\n return textValue as XmlObjectValue;\n }\n\n const result: XmlObjectMap = Object.create(null) as XmlObjectMap;\n\n for (const [key, value] of Object.entries(state.attributes)) {\n result[`${options.attributePrefix}${key}`] = value;\n }\n\n for (const [key, value] of Object.entries(state.children)) {\n result[key] = value;\n }\n\n if (hasText) {\n result[options.textKey] = textValue as XmlObjectValue;\n }\n\n return result;\n}\n"]}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/assert.ts","../src/errors.ts","../src/entities.ts","../src/parser.ts","../src/tree.ts","../src/serializer.ts","../src/object.ts"],"names":["attributes","tag","split","DEFAULT_OPTIONS","indent","inner"],"mappings":"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","file":"index.js","sourcesContent":["const DEV = typeof process !== \"undefined\" ? process.env.NODE_ENV !== \"production\" : true;\n\nexport function assert(condition: boolean, message: string): void {\n if (!DEV) {\n return;\n }\n if (!condition) {\n throw new Error(`Invariant failed: ${message}`);\n }\n}\n","export class XmlSaxError extends Error {\n readonly offset: number;\n readonly line: number;\n readonly column: number;\n\n constructor(message: string, offset: number, line: number, column: number) {\n super(`${message} at ${line}:${column}`);\n this.name = \"XmlSaxError\";\n this.offset = offset;\n this.line = line;\n this.column = column;\n }\n}\n","import { XmlSaxError } from \"./errors\";\n\nexport function decodeEntities(input: string, onError?: (error: Error) => void): string {\n const firstAmp = input.indexOf(\"&\");\n if (firstAmp === -1) {\n return input;\n }\n\n let result = \"\";\n let i = 0;\n\n while (i < input.length) {\n const amp = input.indexOf(\"&\", i);\n if (amp === -1) {\n if (i === 0) {\n return input;\n }\n return i < input.length ? result + input.slice(i) : result;\n }\n\n if (amp > i) {\n result += input.slice(i, amp);\n }\n\n const semi = input.indexOf(\";\", amp + 1);\n if (semi === -1) {\n const err = new XmlSaxError(\"Unterminated entity\", amp, 0, 0);\n onError?.(err);\n throw err;\n }\n\n let decoded: string | undefined;\n const marker = input[amp + 1];\n\n if (marker === \"#\") {\n const numeric = parseNumericEntity(input, amp + 2, semi);\n decoded = numeric === undefined ? undefined : decodeCodePoint(numeric);\n } else {\n decoded = decodeNamedEntity(input, amp + 1, semi);\n }\n\n if (decoded === undefined) {\n const entity = input.slice(amp + 1, semi);\n const err = new XmlSaxError(`Unknown entity: &${entity};`, amp, 0, 0);\n onError?.(err);\n throw err;\n }\n\n result += decoded;\n i = semi + 1;\n }\n\n return result;\n}\n\nfunction decodeNamedEntity(input: string, start: number, end: number): string | undefined {\n const len = end - start;\n if (len === 2) {\n if (input[start] === \"l\" && input[start + 1] === \"t\") {\n return \"<\";\n }\n if (input[start] === \"g\" && input[start + 1] === \"t\") {\n return \">\";\n }\n return undefined;\n }\n\n if (len === 3) {\n if (input[start] === \"a\" && input[start + 1] === \"m\" && input[start + 2] === \"p\") {\n return \"&\";\n }\n return undefined;\n }\n\n if (len === 4) {\n const maybeQuot =\n input[start] === \"q\" && input[start + 1] === \"u\" && input[start + 2] === \"o\" && input[start + 3] === \"t\";\n if (maybeQuot) {\n return \"\\\"\";\n }\n\n const maybeApos =\n input[start] === \"a\" && input[start + 1] === \"p\" && input[start + 2] === \"o\" && input[start + 3] === \"s\";\n if (maybeApos) {\n return \"'\";\n }\n }\n\n return undefined;\n}\n\nfunction parseNumericEntity(input: string, start: number, end: number): number | undefined {\n if (start >= end) {\n return undefined;\n }\n\n let i = start;\n let radix = 10;\n\n const marker = input[i];\n if (marker === \"x\" || marker === \"X\") {\n radix = 16;\n i += 1;\n }\n\n if (i >= end) {\n return undefined;\n }\n\n let value = 0;\n for (; i < end; i += 1) {\n const ch = input[i];\n if (ch === undefined) {\n return undefined;\n }\n\n const digit = radix === 16 ? hexDigit(ch) : decimalDigit(ch);\n if (digit === -1) {\n return undefined;\n }\n\n value = value * radix + digit;\n }\n\n return value;\n}\n\nfunction decimalDigit(ch: string): number {\n const code = ch.charCodeAt(0) - 48;\n if (code < 0 || code > 9) {\n return -1;\n }\n return code;\n}\n\nfunction hexDigit(ch: string): number {\n const code = ch.charCodeAt(0);\n if (code >= 48 && code <= 57) {\n return code - 48;\n }\n if (code >= 65 && code <= 70) {\n return code - 55;\n }\n if (code >= 97 && code <= 102) {\n return code - 87;\n }\n return -1;\n}\n\nfunction decodeCodePoint(codePoint: number): string | undefined {\n if (!Number.isFinite(codePoint)) {\n return undefined;\n }\n if (codePoint < 0 || codePoint > 0x10ffff) {\n return undefined;\n }\n if (codePoint >= 0xd800 && codePoint <= 0xdfff) {\n return undefined;\n }\n return String.fromCodePoint(codePoint);\n}\n\nexport function splitTextForEntities(text: string): { emit: string; carry: string } {\n const lastAmp = text.lastIndexOf(\"&\");\n if (lastAmp === -1) {\n return { emit: text, carry: \"\" };\n }\n\n if (!text.includes(\";\", lastAmp + 1)) {\n return {\n emit: text.slice(0, lastAmp),\n carry: text.slice(lastAmp)\n };\n }\n\n return { emit: text, carry: \"\" };\n}\n","import { assert } from \"./assert\";\nimport { decodeEntities, splitTextForEntities } from \"./entities\";\nimport { XmlSaxError } from \"./errors\";\nimport type {\n CloseTag,\n Doctype,\n OpenTag,\n ParserOptions,\n ProcessingInstruction,\n XmlAttribute\n} from \"./types\";\n\ntype NamespaceMap = Record<string, string>;\n\ninterface StackEntry {\n rawName: string;\n closeTag: CloseTag;\n}\n\ninterface RawAttribute {\n name: string;\n value: string;\n}\n\ninterface ResolvedName {\n name: string;\n prefix: string;\n local: string;\n uri: string;\n}\n\nconst DEFAULT_OPTIONS: Required<\n Pick<ParserOptions, \"xmlns\" | \"includeNamespaceAttributes\" | \"allowDoctype\" | \"coalesceText\" | \"trackPosition\">\n> = {\n xmlns: true,\n includeNamespaceAttributes: false,\n allowDoctype: true,\n coalesceText: false,\n trackPosition: true\n};\n\nconst XML_NAMESPACE_URI = \"http://www.w3.org/XML/1998/namespace\";\nconst XMLNS_NAMESPACE_URI = \"http://www.w3.org/2000/xmlns/\";\nconst WHITESPACE_RE = /\\s/;\nconst CRLF_RE = /\\r\\n?/g;\n\nconst NAME_START_TABLE = new Uint8Array(128);\nconst NAME_CHAR_TABLE = new Uint8Array(128);\n\nfor (let code = 65; code <= 90; code += 1) {\n NAME_START_TABLE[code] = 1;\n NAME_CHAR_TABLE[code] = 1;\n}\nfor (let code = 97; code <= 122; code += 1) {\n NAME_START_TABLE[code] = 1;\n NAME_CHAR_TABLE[code] = 1;\n}\nfor (let code = 48; code <= 57; code += 1) {\n NAME_CHAR_TABLE[code] = 1;\n}\nNAME_START_TABLE[95] = 1;\nNAME_CHAR_TABLE[95] = 1;\nNAME_CHAR_TABLE[58] = 1;\nNAME_CHAR_TABLE[45] = 1;\nNAME_CHAR_TABLE[46] = 1;\n\nexport class XmlSaxParser {\n private readonly xmlns: boolean;\n private readonly includeNamespaceAttributes: boolean;\n private readonly allowDoctype: boolean;\n private readonly coalesceText: boolean;\n private readonly trackPosition: boolean;\n private readonly onOpenTag: ((tag: OpenTag) => void) | undefined;\n private readonly onCloseTag: ((tag: CloseTag) => void) | undefined;\n private readonly onText: ((text: string) => void) | undefined;\n private readonly onCdata: ((text: string) => void) | undefined;\n private readonly onComment: ((text: string) => void) | undefined;\n private readonly onProcessingInstruction: ((pi: ProcessingInstruction) => void) | undefined;\n private readonly onDoctype: ((doctype: Doctype) => void) | undefined;\n private readonly onError: ((error: Error) => void) | undefined;\n private buffer = \"\";\n private offset = 0;\n private line = 1;\n private column = 1;\n private elementStack: StackEntry[] = [];\n private nsStack: NamespaceMap[] = [\n Object.assign(Object.create(null) as NamespaceMap, {\n xml: XML_NAMESPACE_URI,\n xmlns: XMLNS_NAMESPACE_URI\n })\n ];\n private closed = false;\n private pendingCR = false;\n private readonly pendingTextParts: string[] = [];\n private readonly _rawAttrs: RawAttribute[] = [];\n\n constructor(options: ParserOptions = {}) {\n const resolved = { ...DEFAULT_OPTIONS, ...options };\n this.xmlns = resolved.xmlns;\n this.includeNamespaceAttributes = resolved.includeNamespaceAttributes;\n this.allowDoctype = resolved.allowDoctype;\n this.coalesceText = resolved.coalesceText;\n this.trackPosition = resolved.trackPosition;\n this.onOpenTag = resolved.onOpenTag;\n this.onCloseTag = resolved.onCloseTag;\n this.onText = resolved.onText;\n this.onCdata = resolved.onCdata;\n this.onComment = resolved.onComment;\n this.onProcessingInstruction = resolved.onProcessingInstruction;\n this.onDoctype = resolved.onDoctype;\n this.onError = resolved.onError;\n }\n\n feed(chunk: string): void {\n if (this.closed) {\n this._error(\"Parser is closed\");\n }\n if (!chunk) {\n return;\n }\n this.buffer += chunk;\n this._parseBuffer(false);\n }\n\n close(): void {\n if (this.closed) {\n return;\n }\n this._parseBuffer(true);\n this._flushPendingCR();\n this._flushTextBuffer();\n if (this.buffer.length > 0) {\n this._error(\"Unexpected end of input\");\n }\n if (this.elementStack.length > 0) {\n this._error(\"Unclosed tag(s) remaining\");\n }\n this.closed = true;\n }\n\n private _parseBuffer(final: boolean): void {\n let i = 0;\n\n while (i < this.buffer.length) {\n const lt = this.buffer.indexOf(\"<\", i);\n if (lt === -1) {\n const tail = this.buffer.slice(i);\n if (!tail.includes(\"&\")) {\n if (tail.length > 0) {\n this._emitText(tail, true);\n this._advance(tail);\n }\n } else {\n const split = splitTextForEntities(tail);\n if (split.emit.length > 0) {\n this._emitText(split.emit, true);\n this._advance(split.emit);\n }\n this.buffer = split.carry;\n return;\n }\n this.buffer = \"\";\n return;\n }\n\n if (lt > i) {\n const text = this.buffer.slice(i, lt);\n if (text.length > 0) {\n this._emitText(text, false);\n this._advance(text);\n }\n i = lt;\n }\n\n const consumed = this._parseMarkupFrom(lt, final);\n if (consumed === null) {\n break;\n }\n\n this._advanceSpan(lt, lt + consumed);\n i = lt + consumed;\n }\n\n this.buffer = this.buffer.slice(i);\n\n if (final && this.buffer.length > 0) {\n this._error(\"Unexpected end of input\");\n }\n }\n\n private _parseMarkupFrom(start: number, final: boolean): number | null {\n assert(this.buffer[start] === \"<\", \"Markup must start with '<'\");\n\n if (this.pendingCR) this._flushPendingCR();\n\n const secondCode = this.buffer.charCodeAt(start + 1);\n\n if (secondCode === 63) {\n const end = this.buffer.indexOf(\"?>\", start + 2);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated processing instruction\");\n }\n return null;\n }\n const body = this.buffer.slice(start + 2, end).trim();\n const split = body.search(WHITESPACE_RE);\n const target = split === -1 ? body : body.slice(0, split);\n const data = split === -1 ? \"\" : body.slice(split).trim();\n const pi: ProcessingInstruction = { target, body: data };\n this._flushTextBuffer();\n this.onProcessingInstruction?.(pi);\n return end + 2 - start;\n }\n\n if (secondCode === 33) {\n const thirdCode = this.buffer.charCodeAt(start + 2);\n\n if (thirdCode === 45 && this.buffer.charCodeAt(start + 3) === 45) {\n const end = this.buffer.indexOf(\"-->\", start + 4);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated comment\");\n }\n return null;\n }\n const comment = this.buffer.slice(start + 4, end);\n this._flushTextBuffer();\n this.onComment?.(comment);\n return end + 3 - start;\n }\n\n if (thirdCode === 91 && this.buffer.startsWith(\"<![CDATA[\", start)) {\n const end = this.buffer.indexOf(\"]]>\", start + 9);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated CDATA section\");\n }\n return null;\n }\n const cdata = this.buffer.slice(start + 9, end);\n const normalized = this._normalizeText(cdata, false);\n if (normalized.length > 0) {\n this._flushTextBuffer();\n this.onCdata?.(normalized);\n }\n return end + 3 - start;\n }\n\n if (thirdCode === 68 && this.buffer.startsWith(\"<!DOCTYPE\", start)) {\n const end = this._findDoctypeEnd(start + 9);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated doctype declaration\");\n }\n return null;\n }\n if (!this.allowDoctype) {\n this._error(\"Doctype is not allowed\");\n }\n const raw = this.buffer.slice(start + 9, end).trim();\n const doctype: Doctype = { raw };\n this._flushTextBuffer();\n this.onDoctype?.(doctype);\n return end + 1 - start;\n }\n }\n\n if (secondCode === 47) {\n const end = this.buffer.indexOf(\">\", start + 2);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated closing tag\");\n }\n return null;\n }\n\n let i = this._skipWhitespace(this.buffer, start + 2, end);\n const parsed = this._parseName(this.buffer, i, end);\n i = this._skipWhitespace(this.buffer, parsed.end, end);\n if (i !== end) {\n this._error(\"Invalid closing tag\");\n }\n\n this._handleCloseTag(parsed.name, parsed.end);\n return end + 1 - start;\n }\n\n const tagEnd = this._findTagEnd(start + 1);\n if (tagEnd === -1) {\n if (final) {\n this._error(\"Unterminated start tag\");\n }\n return null;\n }\n\n this._handleStartTagRange(start + 1, tagEnd);\n return tagEnd + 1 - start;\n }\n\n private _handleStartTagRange(start: number, end: number): void {\n this._flushTextBuffer();\n\n const parsed = this._parseStartTagRange(start, end);\n const selfClosing = parsed.selfClosing;\n\n if (!this.xmlns) {\n const plainName = parsed.name;\n const attributes: Record<string, XmlAttribute | string> = Object.create(null) as Record<\n string,\n XmlAttribute | string\n >;\n\n for (const attr of parsed.attributes) {\n attributes[attr.name] = attr.value;\n }\n\n const tag: OpenTag = {\n name: plainName,\n attributes,\n isSelfClosing: selfClosing\n };\n\n this.onOpenTag?.(tag);\n\n if (selfClosing) {\n this.onCloseTag?.({ name: plainName });\n return;\n }\n\n this.elementStack.push({\n rawName: parsed.name,\n closeTag: { name: plainName }\n });\n return;\n }\n\n const parentNs = this._currentNs();\n let ns = parentNs;\n for (const attr of parsed.attributes) {\n if (attr.name === \"xmlns\") {\n if (ns === parentNs) {\n ns = Object.create(parentNs) as NamespaceMap;\n }\n ns[\"\"] = attr.value;\n } else if (attr.name.startsWith(\"xmlns:\")) {\n if (ns === parentNs) {\n ns = Object.create(parentNs) as NamespaceMap;\n }\n ns[attr.name.slice(6)] = attr.value;\n }\n }\n\n const resolvedName = this._resolveName(parsed.name, ns);\n const attributes: Record<string, XmlAttribute> = Object.create(null) as Record<string, XmlAttribute>;\n\n for (const attr of parsed.attributes) {\n if (!this.includeNamespaceAttributes) {\n if (attr.name === \"xmlns\" || attr.name.startsWith(\"xmlns:\")) {\n continue;\n }\n }\n const resolvedAttr = this._resolveAttributeName(attr.name, ns);\n attributes[resolvedAttr.name] = {\n name: resolvedAttr.name,\n value: attr.value,\n prefix: resolvedAttr.prefix,\n local: resolvedAttr.local,\n uri: resolvedAttr.uri\n };\n }\n\n const tag: OpenTag = {\n name: resolvedName.name,\n prefix: resolvedName.prefix,\n local: resolvedName.local,\n uri: resolvedName.uri,\n attributes,\n isSelfClosing: selfClosing\n };\n\n this.onOpenTag?.(tag);\n\n if (selfClosing) {\n this.onCloseTag?.({\n name: resolvedName.name,\n prefix: resolvedName.prefix,\n local: resolvedName.local,\n uri: resolvedName.uri\n });\n return;\n }\n\n this.elementStack.push({\n rawName: parsed.name,\n closeTag: {\n name: resolvedName.name,\n prefix: resolvedName.prefix,\n local: resolvedName.local,\n uri: resolvedName.uri\n }\n });\n this.nsStack.push(ns);\n }\n\n private _parseStartTagRange(\n start: number,\n end: number\n ): { name: string; attributes: RawAttribute[]; selfClosing: boolean } {\n let i = this._skipWhitespace(this.buffer, start, end);\n const parsedName = this._parseName(this.buffer, i, end);\n i = parsedName.end;\n\n const attributes = this._rawAttrs;\n attributes.length = 0;\n let selfClosing = false;\n\n while (i < end) {\n i = this._skipWhitespace(this.buffer, i, end);\n if (i >= end) {\n break;\n }\n\n if (this.buffer.charCodeAt(i) === 47) {\n i += 1;\n i = this._skipWhitespace(this.buffer, i, end);\n if (i !== end) {\n this._error(\"Invalid self-closing tag\");\n }\n selfClosing = true;\n break;\n }\n\n const attrName = this._parseName(this.buffer, i, end);\n i = attrName.end;\n i = this._skipWhitespace(this.buffer, i, end);\n\n if (this.buffer.charCodeAt(i) !== 61) {\n this._error(\"Attribute without '='\");\n }\n\n i += 1;\n i = this._skipWhitespace(this.buffer, i, end);\n\n const quoteCode = this.buffer.charCodeAt(i);\n if (quoteCode !== 34 && quoteCode !== 39) {\n this._error(\"Attribute value must be quoted\");\n }\n\n const quote = String.fromCharCode(quoteCode);\n i += 1;\n\n const valueEnd = this.buffer.indexOf(quote, i);\n if (valueEnd === -1 || valueEnd >= end) {\n this._error(\"Unterminated attribute value\");\n }\n\n const rawValue = this.buffer.slice(i, valueEnd);\n const normalized = rawValue.includes(\"\\r\") ? rawValue.replace(CRLF_RE, \"\\n\") : rawValue;\n const value = !normalized.includes(\"&\") ? normalized : decodeEntities(normalized, this.onError);\n attributes.push({ name: attrName.name, value });\n i = valueEnd + 1;\n }\n\n return { name: parsedName.name, attributes, selfClosing };\n }\n\n private _handleCloseTag(rawName: string, _nameEnd?: number): void {\n this._flushTextBuffer();\n\n const entry = this.elementStack.pop();\n const ns = this.xmlns ? this.nsStack.pop() : this._currentNs();\n\n if (!entry || !ns) {\n this._error(\"Closing tag without matching start tag\");\n }\n\n if (entry.rawName !== rawName) {\n this._error(`Mismatched closing tag: expected </${entry.rawName}>`);\n }\n\n this.onCloseTag?.(entry.closeTag);\n }\n\n private _emitText(text: string, allowPendingCR: boolean): void {\n const normalized = this._normalizeText(text, allowPendingCR);\n if (normalized.length === 0) {\n return;\n }\n\n if (!normalized.includes(\"&\")) {\n this._emitDecodedText(normalized);\n return;\n }\n\n const decoded = decodeEntities(normalized, this.onError);\n if (decoded.length > 0) {\n this._emitDecodedText(decoded);\n }\n }\n\n private _emitDecodedText(text: string): void {\n if (!this.coalesceText) {\n this.onText?.(text);\n return;\n }\n this.pendingTextParts.push(text);\n }\n\n private _flushTextBuffer(): void {\n if (!this.coalesceText || this.pendingTextParts.length === 0) {\n return;\n }\n const first = this.pendingTextParts[0];\n const text = this.pendingTextParts.length === 1 && first !== undefined ? first : this.pendingTextParts.join(\"\");\n this.pendingTextParts.length = 0;\n this.onText?.(text);\n }\n\n private _resolveName(rawName: string, ns: NamespaceMap): ResolvedName {\n if (!this.xmlns) {\n const split = rawName.indexOf(\":\");\n if (split === -1) {\n return { name: rawName, prefix: \"\", local: rawName, uri: \"\" };\n }\n return {\n name: rawName,\n prefix: rawName.slice(0, split),\n local: rawName.slice(split + 1),\n uri: \"\"\n };\n }\n\n const split = rawName.indexOf(\":\");\n if (split === -1) {\n return {\n name: rawName,\n prefix: \"\",\n local: rawName,\n uri: ns[\"\"] ?? \"\"\n };\n }\n\n const prefix = rawName.slice(0, split);\n const local = rawName.slice(split + 1);\n const uri = ns[prefix];\n if (uri === undefined) {\n this._error(`Undeclared namespace prefix: ${prefix}`);\n }\n return {\n name: rawName,\n prefix,\n local,\n uri\n };\n }\n\n private _resolveAttributeName(rawName: string, ns: NamespaceMap): ResolvedName {\n if (!this.xmlns) {\n return this._resolveName(rawName, ns);\n }\n\n if (rawName === \"xmlns\") {\n return {\n name: rawName,\n prefix: \"\",\n local: rawName,\n uri: ns.xmlns ?? XMLNS_NAMESPACE_URI\n };\n }\n\n const split = rawName.indexOf(\":\");\n if (split === -1) {\n return {\n name: rawName,\n prefix: \"\",\n local: rawName,\n uri: \"\"\n };\n }\n\n const prefix = rawName.slice(0, split);\n const local = rawName.slice(split + 1);\n const uri = ns[prefix];\n if (uri === undefined) {\n this._error(`Undeclared namespace prefix: ${prefix}`);\n }\n\n return {\n name: rawName,\n prefix,\n local,\n uri\n };\n }\n\n private _findTagEnd(start: number): number {\n const quickEnd = this.buffer.indexOf(\">\", start);\n if (quickEnd === -1) {\n return -1;\n }\n\n const firstDoubleQuote = this.buffer.indexOf(\"\\\"\", start);\n const firstSingleQuote = this.buffer.indexOf(\"'\", start);\n const firstQuote =\n firstDoubleQuote === -1\n ? firstSingleQuote\n : firstSingleQuote === -1\n ? firstDoubleQuote\n : Math.min(firstDoubleQuote, firstSingleQuote);\n\n if (firstQuote === -1 || firstQuote > quickEnd) {\n return quickEnd;\n }\n\n let quoteCode = 0;\n for (let i = start; i < this.buffer.length; i += 1) {\n const code = this.buffer.charCodeAt(i);\n if (quoteCode) {\n if (code === quoteCode) {\n quoteCode = 0;\n }\n continue;\n }\n if (code === 34 || code === 39) {\n quoteCode = code;\n continue;\n }\n if (code === 62) {\n return i;\n }\n }\n return -1;\n }\n\n private _findDoctypeEnd(start: number): number {\n let quoteCode = 0;\n let bracketDepth = 0;\n\n for (let i = start; i < this.buffer.length; i += 1) {\n const code = this.buffer.charCodeAt(i);\n if (quoteCode) {\n if (code === quoteCode) {\n quoteCode = 0;\n }\n continue;\n }\n if (code === 34 || code === 39) {\n quoteCode = code;\n continue;\n }\n if (code === 91) {\n bracketDepth += 1;\n continue;\n }\n if (code === 93) {\n bracketDepth = Math.max(0, bracketDepth - 1);\n continue;\n }\n if (code === 62 && bracketDepth === 0) {\n return i;\n }\n }\n\n return -1;\n }\n\n private _parseName(input: string, start: number, end: number): { name: string; end: number } {\n if (start >= end) {\n this._error(\"Expected name\");\n }\n\n const firstCode = input.charCodeAt(start);\n if (firstCode !== firstCode || firstCode >= 128 || NAME_START_TABLE[firstCode] === 0) {\n this._error(`Invalid name start: '${input[start] ?? \"\"}'`);\n }\n\n let i = start + 1;\n while (i < end) {\n const code = input.charCodeAt(i);\n if (code >= 128 || NAME_CHAR_TABLE[code] === 0) {\n break;\n }\n i += 1;\n }\n\n return { name: input.slice(start, i), end: i };\n }\n\n private _skipWhitespace(input: string, start: number, end: number): number {\n let i = start;\n while (i < end) {\n const code = input.charCodeAt(i);\n if (code !== 32 && code !== 9 && code !== 10 && code !== 13) {\n break;\n }\n i += 1;\n }\n return i;\n }\n\n private _currentNs(): NamespaceMap {\n return this.nsStack[this.nsStack.length - 1] ?? (Object.create(null) as NamespaceMap);\n }\n\n private _advance(text: string): void {\n this.offset += text.length;\n if (!this.trackPosition) {\n return;\n }\n\n let pos = text.indexOf(\"\\n\");\n if (pos === -1) {\n this.column += text.length;\n return;\n }\n\n let newlineCount = 0;\n let lastNewline = -1;\n while (pos !== -1) {\n newlineCount += 1;\n lastNewline = pos;\n pos = text.indexOf(\"\\n\", pos + 1);\n }\n\n this.line += newlineCount;\n this.column = text.length - lastNewline;\n }\n\n private _normalizeText(text: string, allowPendingCR: boolean): string {\n if (!text) {\n return \"\";\n }\n\n // Fast path for common chunks: no CR handling and no pending state.\n if (!this.pendingCR && !text.includes(\"\\r\")) {\n return text;\n }\n\n let value = text;\n let prefix = \"\";\n\n if (this.pendingCR) {\n prefix = \"\\n\";\n if (value.charCodeAt(0) === 10) {\n value = value.slice(1);\n }\n this.pendingCR = false;\n }\n\n if (allowPendingCR && value.charCodeAt(value.length - 1) === 13) {\n this.pendingCR = true;\n value = value.slice(0, -1);\n }\n\n const normalized = !value.includes(\"\\r\") ? value : value.replace(CRLF_RE, \"\\n\");\n return prefix ? `${prefix}${normalized}` : normalized;\n }\n\n private _advanceSpan(start: number, end: number): void {\n const length = end - start;\n this.offset += length;\n if (!this.trackPosition) {\n return;\n }\n\n let pos = this.buffer.indexOf(\"\\n\", start);\n if (pos === -1 || pos >= end) {\n this.column += length;\n return;\n }\n\n let newlineCount = 0;\n let lastNewline = -1;\n while (pos !== -1 && pos < end) {\n newlineCount += 1;\n lastNewline = pos;\n pos = this.buffer.indexOf(\"\\n\", pos + 1);\n }\n\n this.line += newlineCount;\n this.column = end - lastNewline;\n }\n\n private _flushPendingCR(): void {\n if (!this.pendingCR) {\n return;\n }\n this.pendingCR = false;\n this._emitDecodedText(\"\\n\");\n }\n\n private _error(message: string): never {\n const line = this.trackPosition ? this.line : 0;\n const column = this.trackPosition ? this.column : 0;\n const error = new XmlSaxError(message, this.offset, line, column);\n this.onError?.(error);\n throw error;\n }\n}\n","import { XmlSaxParser } from \"./parser\";\nimport type { ParserOptions, XmlNode } from \"./types\";\n\nexport class TreeBuilder {\n private stack: XmlNode[] = [];\n private root: XmlNode | null = null;\n\n onOpenTag = (tag: { name: string; attributes: Record<string, { value: string } | string> }): void => {\n const node: XmlNode = {\n name: tag.name,\n attributes: Object.fromEntries(\n Object.entries(tag.attributes).map(([key, attr]) => [key, typeof attr === \"string\" ? attr : attr.value])\n ),\n children: []\n };\n\n const parent = this.stack[this.stack.length - 1];\n if (parent) {\n parent.children?.push(node);\n } else {\n this.root = node;\n }\n\n this.stack.push(node);\n };\n\n onText = (text: string): void => {\n if (!this.stack.length) {\n return;\n }\n const node = this.stack[this.stack.length - 1];\n if (!node) {\n return;\n }\n const children = node.children ?? [];\n const last = children[children.length - 1];\n if (typeof last === \"string\") {\n children[children.length - 1] = last + text;\n } else {\n children.push(text);\n }\n node.children = children;\n };\n\n onCdata = (text: string): void => {\n this.onText(text);\n };\n\n onCloseTag = (): void => {\n this.stack.pop();\n };\n\n getRoot(): XmlNode {\n if (!this.root) {\n throw new Error(\"No root element found\");\n }\n return this.root;\n }\n}\n\nexport function parseXmlString(xml: string, options: ParserOptions = {}): XmlNode {\n const builder = new TreeBuilder();\n const parser = new XmlSaxParser({\n ...options,\n onOpenTag: builder.onOpenTag,\n onText: builder.onText,\n onCdata: builder.onCdata,\n onCloseTag: builder.onCloseTag\n });\n\n parser.feed(xml);\n parser.close();\n return builder.getRoot();\n}\n","import type { SerializeOptions, XmlChild, XmlNode } from \"./types\";\n\nconst DEFAULT_OPTIONS: Required<Pick<SerializeOptions, \"pretty\" | \"indent\" | \"newline\" | \"xmlDeclaration\">> = {\n pretty: false,\n indent: \" \",\n newline: \"\\n\",\n xmlDeclaration: false\n};\n\nexport function serializeXml(node: XmlNode, options: SerializeOptions = {}): string {\n const settings = { ...DEFAULT_OPTIONS, ...options };\n let body = serializeNode(node, settings, 0);\n if (settings.pretty && !body.endsWith(settings.newline)) {\n body = `${body}${settings.newline}`;\n }\n if (!settings.xmlDeclaration) {\n return body;\n }\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>${settings.newline}${body}`;\n}\n\nfunction serializeNode(node: XmlNode, options: Required<SerializeOptions>, depth: number): string {\n const attrs = serializeAttributes(node.attributes);\n const tagOpen = `<${node.name}${attrs}>`;\n const tagClose = `</${node.name}>`;\n\n const children = node.children ?? [];\n if (!children.length) {\n if (!options.pretty) {\n return `<${node.name}${attrs}/>`;\n }\n const indent = options.indent.repeat(depth);\n return `${indent}<${node.name}${attrs}/>`;\n }\n\n if (!options.pretty) {\n const inner = children.map((child) => serializeChild(child, options, depth + 1)).join(\"\");\n return `${tagOpen}${inner}${tagClose}`;\n }\n\n const indent = options.indent.repeat(depth);\n const hasOnlyTextChildren = children.every((child) => typeof child === \"string\");\n if (hasOnlyTextChildren) {\n const inlineText = children.map((child) => escapeText(child)).join(\"\");\n return `${indent}${tagOpen}${inlineText}${tagClose}`;\n }\n const innerIndent = options.indent.repeat(depth + 1);\n const prettyOpen = `${indent}${tagOpen}`;\n const prettyClose = `${indent}${tagClose}`;\n const inner = children\n .map((child) =>\n typeof child === \"string\"\n ? `${innerIndent}${escapeText(child)}`\n : serializeNode(child, options, depth + 1)\n )\n .join(options.newline);\n\n return `${prettyOpen}${options.newline}${inner}${options.newline}${prettyClose}`;\n}\n\nfunction serializeChild(child: XmlChild, options: Required<SerializeOptions>, depth: number): string {\n if (typeof child === \"string\") {\n return escapeText(child);\n }\n return serializeNode(child, options, depth);\n}\n\nfunction serializeAttributes(attrs?: Record<string, string>): string {\n if (!attrs) {\n return \"\";\n }\n return Object.entries(attrs)\n .map(([key, value]) => ` ${key}=\"${escapeAttribute(value)}\"`)\n .join(\"\");\n}\n\nfunction escapeText(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\");\n}\n\nfunction escapeAttribute(value: string): string {\n return escapeText(value).replace(/\"/g, \""\");\n}\n","import { serializeXml } from \"./serializer\";\nimport type {\n ObjectBuilderOptions,\n ObjectToXmlOptions,\n OpenTag,\n XmlAttribute,\n XmlBuilderOptions,\n XmlInputObject,\n XmlInputValue,\n XmlNode,\n XmlObjectMap,\n XmlObjectValue\n} from \"./types\";\n\ninterface ElementState {\n name: string;\n attributes: Record<string, string>;\n textParts: string[];\n children: Record<string, XmlObjectValue | XmlObjectValue[]>;\n}\n\nconst DEFAULT_OBJECT_OPTIONS: Required<Omit<ObjectBuilderOptions, \"arrayElements\">> = {\n attributePrefix: \"@_\",\n textKey: \"#text\",\n stripNamespaces: false,\n coalesceText: true\n};\n\ntype ObjectBuilderSettings = Required<Omit<ObjectBuilderOptions, \"arrayElements\">> &\n Pick<ObjectBuilderOptions, \"arrayElements\">;\n\ntype XmlBuilderSettings = Required<Omit<XmlBuilderOptions, \"arrayElements\" | \"rootName\">> &\n Pick<XmlBuilderOptions, \"arrayElements\" | \"rootName\">;\n\nexport function stripNamespace(name: string): string {\n const index = name.indexOf(\":\");\n if (index === -1) {\n return name;\n }\n return name.slice(index + 1);\n}\n\nexport function resolveName(\n value: string | Pick<OpenTag, \"name\" | \"prefix\" | \"local\" | \"uri\">\n): { name: string; localName: string; prefix: string; uri: string } {\n if (typeof value !== \"string\") {\n const prefix = value.prefix ?? \"\";\n const local = value.local ?? (prefix ? value.name.slice(prefix.length + 1) : value.name);\n return {\n name: value.name,\n localName: local,\n prefix,\n uri: value.uri ?? \"\"\n };\n }\n\n const index = value.indexOf(\":\");\n if (index === -1) {\n return { name: value, localName: value, prefix: \"\", uri: \"\" };\n }\n\n return {\n name: value,\n localName: value.slice(index + 1),\n prefix: value.slice(0, index),\n uri: \"\"\n };\n}\n\nexport function buildObject(root: XmlNode, options: ObjectBuilderOptions = {}): XmlObjectValue {\n const settings = buildSettings(options);\n return buildNode(root, settings, []);\n}\n\nexport function buildXmlNode(obj: XmlInputValue, options: XmlBuilderOptions = {}): XmlNode {\n const settings = buildXmlSettings(options);\n const root = resolveRoot(obj, settings);\n const rootName = normalizeName(root.name, settings);\n return buildElement(rootName, root.value, settings, []);\n}\n\nexport function objectToXml(obj: XmlInputValue, options: ObjectToXmlOptions = {}): string {\n const node = buildXmlNode(obj, options);\n return serializeXml(node, options);\n}\n\nexport class ObjectBuilder {\n private options: ObjectBuilderSettings;\n private stack: ElementState[] = [];\n private root: XmlObjectValue | null = null;\n private rootName: string | null = null;\n\n constructor(options: ObjectBuilderOptions = {}) {\n this.options = buildSettings(options);\n }\n\n onOpenTag = (tag: OpenTag): void => {\n const name = normalizeName(tag.name, this.options);\n const attributes = normalizeAttributes(tag.attributes, this.options);\n const state: ElementState = {\n name,\n attributes,\n textParts: [],\n children: Object.create(null) as Record<string, XmlObjectValue | XmlObjectValue[]>\n };\n\n this.rootName ??= name;\n\n this.stack.push(state);\n };\n\n onText = (text: string): void => {\n if (!text) {\n return;\n }\n const current = this.stack[this.stack.length - 1];\n if (!current) {\n return;\n }\n current.textParts.push(text);\n };\n\n onCdata = (text: string): void => {\n this.onText(text);\n };\n\n onCloseTag = (): void => {\n const state = this.stack.pop();\n if (!state) {\n return;\n }\n\n const value = finalizeElement(state, this.options);\n const parent = this.stack[this.stack.length - 1];\n\n if (!parent) {\n this.root = value;\n return;\n }\n\n const path = this.stack.map((entry) => entry.name);\n addChild(parent.children, state.name, value, this.options, path);\n };\n\n getResult(): XmlObjectValue {\n if (this.root === null) {\n throw new Error(\"No root element found\");\n }\n return this.root;\n }\n\n getRootName(): string {\n if (!this.rootName) {\n throw new Error(\"No root element found\");\n }\n return this.rootName;\n }\n}\n\nfunction buildSettings(options: ObjectBuilderOptions): ObjectBuilderSettings {\n return { ...DEFAULT_OBJECT_OPTIONS, ...options };\n}\n\nfunction buildXmlSettings(options: XmlBuilderOptions): XmlBuilderSettings {\n return { ...DEFAULT_OBJECT_OPTIONS, ...options };\n}\n\nfunction buildNode(node: XmlNode, options: ObjectBuilderSettings, path: string[]): XmlObjectValue {\n const name = normalizeName(node.name, options);\n const attributes = normalizeAttributeMap(node.attributes ?? {}, options);\n const state: ElementState = {\n name,\n attributes,\n textParts: [],\n children: Object.create(null) as Record<string, XmlObjectValue | XmlObjectValue[]>\n };\n\n const children = node.children ?? [];\n for (const child of children) {\n if (typeof child === \"string\") {\n if (child) {\n state.textParts.push(child);\n }\n continue;\n }\n\n const value = buildNode(child, options, [...path, name]);\n const childName = normalizeName(child.name, options);\n addChild(state.children, childName, value, options, [...path, name]);\n }\n\n return finalizeElement(state, options);\n}\n\nfunction normalizeName(name: string, options: ObjectBuilderSettings): string {\n if (options.stripNamespaces) {\n return stripNamespace(name);\n }\n return name;\n}\n\nfunction normalizeXmlName(name: string, options: XmlBuilderSettings): string {\n if (options.stripNamespaces) {\n return stripNamespace(name);\n }\n return name;\n}\n\nfunction normalizeAttributes(\n attributes: Record<string, XmlAttribute | string>,\n options: ObjectBuilderSettings\n): Record<string, string> {\n const result: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const [key, attr] of Object.entries(attributes)) {\n const name = normalizeName(key, options);\n result[name] = typeof attr === \"string\" ? attr : attr.value;\n }\n return result;\n}\n\nfunction normalizeAttributeMap(\n attributes: Record<string, string>,\n options: ObjectBuilderSettings\n): Record<string, string> {\n const result: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const [key, value] of Object.entries(attributes)) {\n const name = normalizeName(key, options);\n result[name] = value;\n }\n return result;\n}\n\nfunction addChild(\n target: Record<string, XmlObjectValue | XmlObjectValue[]>,\n name: string,\n value: XmlObjectValue,\n options: ObjectBuilderSettings,\n path: string[]\n): void {\n const forcedArray = shouldForceArray(name, path, options);\n const existing = target[name];\n\n if (existing === undefined) {\n target[name] = forcedArray ? [value] : value;\n return;\n }\n\n if (Array.isArray(existing)) {\n existing.push(value);\n return;\n }\n\n target[name] = [existing, value];\n}\n\nfunction shouldForceArray(name: string, path: string[], options: ObjectBuilderSettings): boolean {\n const rule = options.arrayElements;\n if (!rule) {\n return false;\n }\n if (rule instanceof Set) {\n return rule.has(name);\n }\n return rule(name, path);\n}\n\nfunction resolveRoot(obj: XmlInputValue, options: XmlBuilderSettings): { name: string; value: XmlInputValue } {\n if (isRecord(obj)) {\n const keys = Object.keys(obj);\n if (keys.length === 1) {\n const name = keys[0] ?? \"\";\n return { name, value: obj[name] };\n }\n }\n\n if (!options.rootName) {\n throw new Error(\"Root element name is required when object has multiple keys\");\n }\n\n return { name: options.rootName, value: obj };\n}\n\nfunction buildElement(\n name: string,\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): XmlNode {\n const attributes: Record<string, string> = Object.create(null) as Record<string, string>;\n const children: (XmlNode | string)[] = [];\n const nextPath = [...path, name];\n\n if (Array.isArray(value)) {\n for (const item of value) {\n appendContent(children, item, options, nextPath);\n }\n return finalizeNode(name, attributes, children);\n }\n\n if (isPrimitive(value)) {\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n return finalizeNode(name, attributes, children);\n }\n\n if (isRecord(value)) {\n for (const [key, entryValue] of Object.entries(value)) {\n if (isAttributeKey(key, options)) {\n const attrName = normalizeXmlName(key.slice(options.attributePrefix.length), options);\n const attrValue = coerceText(entryValue);\n if (attrValue !== null) {\n attributes[attrName] = attrValue;\n }\n continue;\n }\n\n if (key === options.textKey) {\n appendText(children, entryValue, options);\n continue;\n }\n\n const childName = normalizeXmlName(key, options);\n addChildElements(children, childName, entryValue, options, nextPath);\n }\n }\n\n return finalizeNode(name, attributes, children);\n}\n\nfunction addChildElements(\n children: (XmlNode | string)[],\n name: string,\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): void {\n const forcedArray = shouldForceArray(name, path, options);\n const items = Array.isArray(value) ? value : forcedArray ? [value] : [value];\n\n for (const item of items) {\n if (item === undefined || item === null) {\n children.push({ name });\n continue;\n }\n children.push(buildElement(name, item, options, path));\n }\n}\n\nfunction appendContent(\n children: (XmlNode | string)[],\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): void {\n if (value === undefined || value === null) {\n return;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n appendContent(children, item, options, path);\n }\n return;\n }\n\n if (isPrimitive(value)) {\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n return;\n }\n\n if (isRecord(value)) {\n for (const [key, entryValue] of Object.entries(value)) {\n const childName = normalizeXmlName(key, options);\n addChildElements(children, childName, entryValue, options, path);\n }\n }\n}\n\nfunction appendText(\n children: (XmlNode | string)[],\n value: XmlInputValue,\n options: XmlBuilderSettings\n): void {\n if (value === undefined || value === null) {\n return;\n }\n\n if (Array.isArray(value)) {\n const parts = value\n .map((item) => coerceText(item))\n .filter((item): item is string => item !== null);\n if (parts.length === 0) {\n return;\n }\n if (options.coalesceText) {\n children.push(parts.join(\"\"));\n return;\n }\n for (const part of parts) {\n children.push(part);\n }\n return;\n }\n\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n}\n\nfunction finalizeNode(\n name: string,\n attributes: Record<string, string>,\n children: (XmlNode | string)[]\n): XmlNode {\n const node: XmlNode = { name };\n if (Object.keys(attributes).length > 0) {\n node.attributes = attributes;\n }\n if (children.length > 0) {\n node.children = children;\n }\n return node;\n}\n\nfunction isAttributeKey(key: string, options: XmlBuilderSettings): boolean {\n if (!options.attributePrefix) {\n return false;\n }\n return key.startsWith(options.attributePrefix) && key.length > options.attributePrefix.length;\n}\n\nfunction isRecord(value: XmlInputValue): value is XmlInputObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isPrimitive(value: XmlInputValue): value is string | number | boolean {\n return typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\";\n}\n\nfunction coerceText(value: XmlInputValue): string | null {\n if (value === undefined || value === null) {\n return null;\n }\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (value instanceof Date) {\n return value.toISOString();\n }\n return null;\n}\n\nfunction finalizeElement(state: ElementState, options: ObjectBuilderSettings): XmlObjectValue {\n const hasAttributes = Object.keys(state.attributes).length > 0;\n const hasChildren = Object.keys(state.children).length > 0;\n const hasText = state.textParts.length > 0;\n\n const textValue = options.coalesceText\n ? state.textParts.join(\"\")\n : state.textParts.length <= 1\n ? state.textParts[0] ?? \"\"\n : state.textParts.slice();\n\n if (!hasAttributes && !hasChildren) {\n if (!hasText) {\n return \"\";\n }\n return textValue as XmlObjectValue;\n }\n\n const result: XmlObjectMap = Object.create(null) as XmlObjectMap;\n\n for (const [key, value] of Object.entries(state.attributes)) {\n result[`${options.attributePrefix}${key}`] = value;\n }\n\n for (const [key, value] of Object.entries(state.children)) {\n result[key] = value;\n }\n\n if (hasText) {\n result[options.textKey] = textValue as XmlObjectValue;\n }\n\n return result;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/assert.ts","../src/errors.ts","../src/entities.ts","../src/parser.ts","../src/tree.ts","../src/serializer.ts","../src/object.ts"],"names":["attributes","tag","split","DEFAULT_OPTIONS","indent","inner"],"mappings":"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","file":"index.js","sourcesContent":["const DEV = typeof process !== \"undefined\" ? process.env.NODE_ENV !== \"production\" : true;\n\nexport function assert(condition: boolean, message: string): void {\n if (!DEV) {\n return;\n }\n if (!condition) {\n throw new Error(`Invariant failed: ${message}`);\n }\n}\n","export class XmlSaxError extends Error {\n readonly offset: number;\n readonly line: number;\n readonly column: number;\n\n constructor(message: string, offset: number, line: number, column: number) {\n super(`${message} at ${line}:${column}`);\n this.name = \"XmlSaxError\";\n this.offset = offset;\n this.line = line;\n this.column = column;\n }\n}\n","import { XmlSaxError } from \"./errors\";\n\nexport function decodeEntities(input: string, onError?: (error: Error) => void): string {\n const firstAmp = input.indexOf(\"&\");\n if (firstAmp === -1) {\n return input;\n }\n\n let result = \"\";\n let i = 0;\n\n while (i < input.length) {\n const amp = input.indexOf(\"&\", i);\n if (amp === -1) {\n if (i === 0) {\n return input;\n }\n return i < input.length ? result + input.slice(i) : result;\n }\n\n if (amp > i) {\n result += input.slice(i, amp);\n }\n\n const semi = input.indexOf(\";\", amp + 1);\n if (semi === -1) {\n const err = new XmlSaxError(\"Unterminated entity\", amp, 0, 0);\n onError?.(err);\n throw err;\n }\n\n let decoded: string | undefined;\n const marker = input[amp + 1];\n\n if (marker === \"#\") {\n const numeric = parseNumericEntity(input, amp + 2, semi);\n decoded = numeric === undefined ? undefined : decodeCodePoint(numeric);\n } else {\n decoded = decodeNamedEntity(input, amp + 1, semi);\n }\n\n if (decoded === undefined) {\n const entity = input.slice(amp + 1, semi);\n const err = new XmlSaxError(`Unknown entity: &${entity};`, amp, 0, 0);\n onError?.(err);\n throw err;\n }\n\n result += decoded;\n i = semi + 1;\n }\n\n return result;\n}\n\nfunction decodeNamedEntity(input: string, start: number, end: number): string | undefined {\n const len = end - start;\n if (len === 2) {\n if (input[start] === \"l\" && input[start + 1] === \"t\") {\n return \"<\";\n }\n if (input[start] === \"g\" && input[start + 1] === \"t\") {\n return \">\";\n }\n return undefined;\n }\n\n if (len === 3) {\n if (input[start] === \"a\" && input[start + 1] === \"m\" && input[start + 2] === \"p\") {\n return \"&\";\n }\n return undefined;\n }\n\n if (len === 4) {\n const maybeQuot =\n input[start] === \"q\" && input[start + 1] === \"u\" && input[start + 2] === \"o\" && input[start + 3] === \"t\";\n if (maybeQuot) {\n return \"\\\"\";\n }\n\n const maybeApos =\n input[start] === \"a\" && input[start + 1] === \"p\" && input[start + 2] === \"o\" && input[start + 3] === \"s\";\n if (maybeApos) {\n return \"'\";\n }\n }\n\n return undefined;\n}\n\nfunction parseNumericEntity(input: string, start: number, end: number): number | undefined {\n if (start >= end) {\n return undefined;\n }\n\n let i = start;\n let radix = 10;\n\n const marker = input[i];\n if (marker === \"x\" || marker === \"X\") {\n radix = 16;\n i += 1;\n }\n\n if (i >= end) {\n return undefined;\n }\n\n let value = 0;\n for (; i < end; i += 1) {\n const ch = input[i];\n if (ch === undefined) {\n return undefined;\n }\n\n const digit = radix === 16 ? hexDigit(ch) : decimalDigit(ch);\n if (digit === -1) {\n return undefined;\n }\n\n value = value * radix + digit;\n }\n\n return value;\n}\n\nfunction decimalDigit(ch: string): number {\n const code = ch.charCodeAt(0) - 48;\n if (code < 0 || code > 9) {\n return -1;\n }\n return code;\n}\n\nfunction hexDigit(ch: string): number {\n const code = ch.charCodeAt(0);\n if (code >= 48 && code <= 57) {\n return code - 48;\n }\n if (code >= 65 && code <= 70) {\n return code - 55;\n }\n if (code >= 97 && code <= 102) {\n return code - 87;\n }\n return -1;\n}\n\nfunction decodeCodePoint(codePoint: number): string | undefined {\n if (!Number.isFinite(codePoint)) {\n return undefined;\n }\n if (codePoint < 0 || codePoint > 0x10ffff) {\n return undefined;\n }\n if (codePoint >= 0xd800 && codePoint <= 0xdfff) {\n return undefined;\n }\n return String.fromCodePoint(codePoint);\n}\n\nexport function splitTextForEntities(text: string): { emit: string; carry: string } {\n const lastAmp = text.lastIndexOf(\"&\");\n if (lastAmp === -1) {\n return { emit: text, carry: \"\" };\n }\n\n if (!text.includes(\";\", lastAmp + 1)) {\n return {\n emit: text.slice(0, lastAmp),\n carry: text.slice(lastAmp)\n };\n }\n\n return { emit: text, carry: \"\" };\n}\n","import { assert } from \"./assert\";\nimport { decodeEntities, splitTextForEntities } from \"./entities\";\nimport { XmlSaxError } from \"./errors\";\nimport type {\n CloseTag,\n Doctype,\n OpenTag,\n ParserOptions,\n ProcessingInstruction,\n XmlAttribute\n} from \"./types\";\n\ntype NamespaceMap = Record<string, string>;\n\ninterface StackEntry {\n rawName: string;\n closeTag: CloseTag;\n}\n\ninterface RawAttribute {\n name: string;\n value: string;\n}\n\ninterface ResolvedName {\n name: string;\n prefix: string;\n local: string;\n uri: string;\n}\n\nconst DEFAULT_OPTIONS: Required<\n Pick<ParserOptions, \"xmlns\" | \"includeNamespaceAttributes\" | \"allowDoctype\" | \"coalesceText\" | \"trackPosition\">\n> = {\n xmlns: true,\n includeNamespaceAttributes: false,\n allowDoctype: true,\n coalesceText: true,\n trackPosition: true\n};\n\nconst XML_NAMESPACE_URI = \"http://www.w3.org/XML/1998/namespace\";\nconst XMLNS_NAMESPACE_URI = \"http://www.w3.org/2000/xmlns/\";\nconst WHITESPACE_RE = /\\s/;\nconst CRLF_RE = /\\r\\n?/g;\n\nconst NAME_START_TABLE = new Uint8Array(128);\nconst NAME_CHAR_TABLE = new Uint8Array(128);\n\nfor (let code = 65; code <= 90; code += 1) {\n NAME_START_TABLE[code] = 1;\n NAME_CHAR_TABLE[code] = 1;\n}\nfor (let code = 97; code <= 122; code += 1) {\n NAME_START_TABLE[code] = 1;\n NAME_CHAR_TABLE[code] = 1;\n}\nfor (let code = 48; code <= 57; code += 1) {\n NAME_CHAR_TABLE[code] = 1;\n}\nNAME_START_TABLE[95] = 1;\nNAME_CHAR_TABLE[95] = 1;\nNAME_CHAR_TABLE[58] = 1;\nNAME_CHAR_TABLE[45] = 1;\nNAME_CHAR_TABLE[46] = 1;\n\nexport class XmlSaxParser {\n private readonly xmlns: boolean;\n private readonly includeNamespaceAttributes: boolean;\n private readonly allowDoctype: boolean;\n private readonly coalesceText: boolean;\n private readonly trackPosition: boolean;\n private readonly onOpenTag: ((tag: OpenTag) => void) | undefined;\n private readonly onCloseTag: ((tag: CloseTag) => void) | undefined;\n private readonly onText: ((text: string) => void) | undefined;\n private readonly onCdata: ((text: string) => void) | undefined;\n private readonly onComment: ((text: string) => void) | undefined;\n private readonly onProcessingInstruction: ((pi: ProcessingInstruction) => void) | undefined;\n private readonly onDoctype: ((doctype: Doctype) => void) | undefined;\n private readonly onError: ((error: Error) => void) | undefined;\n private buffer = \"\";\n private offset = 0;\n private line = 1;\n private column = 1;\n private elementStack: StackEntry[] = [];\n private nsStack: NamespaceMap[] = [\n Object.assign(Object.create(null) as NamespaceMap, {\n xml: XML_NAMESPACE_URI,\n xmlns: XMLNS_NAMESPACE_URI\n })\n ];\n private closed = false;\n private pendingCR = false;\n private readonly pendingTextParts: string[] = [];\n private readonly _rawAttrs: RawAttribute[] = [];\n\n constructor(options: ParserOptions = {}) {\n const resolved = { ...DEFAULT_OPTIONS, ...options };\n this.xmlns = resolved.xmlns;\n this.includeNamespaceAttributes = resolved.includeNamespaceAttributes;\n this.allowDoctype = resolved.allowDoctype;\n this.coalesceText = resolved.coalesceText;\n this.trackPosition = resolved.trackPosition;\n this.onOpenTag = resolved.onOpenTag;\n this.onCloseTag = resolved.onCloseTag;\n this.onText = resolved.onText;\n this.onCdata = resolved.onCdata;\n this.onComment = resolved.onComment;\n this.onProcessingInstruction = resolved.onProcessingInstruction;\n this.onDoctype = resolved.onDoctype;\n this.onError = resolved.onError;\n }\n\n feed(chunk: string): void {\n if (this.closed) {\n this._error(\"Parser is closed\");\n }\n if (!chunk) {\n return;\n }\n this.buffer += chunk;\n this._parseBuffer(false);\n }\n\n close(): void {\n if (this.closed) {\n return;\n }\n this._parseBuffer(true);\n this._flushPendingCR();\n this._flushTextBuffer();\n if (this.buffer.length > 0) {\n this._error(\"Unexpected end of input\");\n }\n if (this.elementStack.length > 0) {\n this._error(\"Unclosed tag(s) remaining\");\n }\n this.closed = true;\n }\n\n private _parseBuffer(final: boolean): void {\n let i = 0;\n\n while (i < this.buffer.length) {\n const lt = this.buffer.indexOf(\"<\", i);\n if (lt === -1) {\n const tail = this.buffer.slice(i);\n if (!tail.includes(\"&\")) {\n if (tail.length > 0) {\n this._emitText(tail, true);\n this._advance(tail);\n }\n } else {\n const split = splitTextForEntities(tail);\n if (split.emit.length > 0) {\n this._emitText(split.emit, true);\n this._advance(split.emit);\n }\n this.buffer = split.carry;\n return;\n }\n this.buffer = \"\";\n return;\n }\n\n if (lt > i) {\n const text = this.buffer.slice(i, lt);\n if (text.length > 0) {\n this._emitText(text, false);\n this._advance(text);\n }\n i = lt;\n }\n\n const consumed = this._parseMarkupFrom(lt, final);\n if (consumed === null) {\n break;\n }\n\n this._advanceSpan(lt, lt + consumed);\n i = lt + consumed;\n }\n\n this.buffer = this.buffer.slice(i);\n\n if (final && this.buffer.length > 0) {\n this._error(\"Unexpected end of input\");\n }\n }\n\n private _parseMarkupFrom(start: number, final: boolean): number | null {\n assert(this.buffer[start] === \"<\", \"Markup must start with '<'\");\n\n if (this.pendingCR) this._flushPendingCR();\n\n const secondCode = this.buffer.charCodeAt(start + 1);\n\n if (secondCode === 63) {\n const end = this.buffer.indexOf(\"?>\", start + 2);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated processing instruction\");\n }\n return null;\n }\n const body = this.buffer.slice(start + 2, end).trim();\n const split = body.search(WHITESPACE_RE);\n const target = split === -1 ? body : body.slice(0, split);\n const data = split === -1 ? \"\" : body.slice(split).trim();\n const pi: ProcessingInstruction = { target, body: data };\n this._flushTextBuffer();\n this.onProcessingInstruction?.(pi);\n return end + 2 - start;\n }\n\n if (secondCode === 33) {\n const thirdCode = this.buffer.charCodeAt(start + 2);\n\n if (thirdCode === 45 && this.buffer.charCodeAt(start + 3) === 45) {\n const end = this.buffer.indexOf(\"-->\", start + 4);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated comment\");\n }\n return null;\n }\n const comment = this.buffer.slice(start + 4, end);\n this._flushTextBuffer();\n this.onComment?.(comment);\n return end + 3 - start;\n }\n\n if (thirdCode === 91 && this.buffer.startsWith(\"<![CDATA[\", start)) {\n const end = this.buffer.indexOf(\"]]>\", start + 9);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated CDATA section\");\n }\n return null;\n }\n const cdata = this.buffer.slice(start + 9, end);\n const normalized = this._normalizeText(cdata, false);\n if (normalized.length > 0) {\n this._flushTextBuffer();\n this.onCdata?.(normalized);\n }\n return end + 3 - start;\n }\n\n if (thirdCode === 68 && this.buffer.startsWith(\"<!DOCTYPE\", start)) {\n const end = this._findDoctypeEnd(start + 9);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated doctype declaration\");\n }\n return null;\n }\n if (!this.allowDoctype) {\n this._error(\"Doctype is not allowed\");\n }\n const raw = this.buffer.slice(start + 9, end).trim();\n const doctype: Doctype = { raw };\n this._flushTextBuffer();\n this.onDoctype?.(doctype);\n return end + 1 - start;\n }\n }\n\n if (secondCode === 47) {\n const end = this.buffer.indexOf(\">\", start + 2);\n if (end === -1) {\n if (final) {\n this._error(\"Unterminated closing tag\");\n }\n return null;\n }\n\n let i = this._skipWhitespace(this.buffer, start + 2, end);\n const parsed = this._parseName(this.buffer, i, end);\n i = this._skipWhitespace(this.buffer, parsed.end, end);\n if (i !== end) {\n this._error(\"Invalid closing tag\");\n }\n\n this._handleCloseTag(parsed.name, parsed.end);\n return end + 1 - start;\n }\n\n const tagEnd = this._findTagEnd(start + 1);\n if (tagEnd === -1) {\n if (final) {\n this._error(\"Unterminated start tag\");\n }\n return null;\n }\n\n this._handleStartTagRange(start + 1, tagEnd);\n return tagEnd + 1 - start;\n }\n\n private _handleStartTagRange(start: number, end: number): void {\n this._flushTextBuffer();\n\n const parsed = this._parseStartTagRange(start, end);\n const selfClosing = parsed.selfClosing;\n\n if (!this.xmlns) {\n const plainName = parsed.name;\n const attributes: Record<string, XmlAttribute | string> = Object.create(null) as Record<\n string,\n XmlAttribute | string\n >;\n\n for (const attr of parsed.attributes) {\n attributes[attr.name] = attr.value;\n }\n\n const tag: OpenTag = {\n name: plainName,\n attributes,\n isSelfClosing: selfClosing\n };\n\n this.onOpenTag?.(tag);\n\n if (selfClosing) {\n this.onCloseTag?.({ name: plainName });\n return;\n }\n\n this.elementStack.push({\n rawName: parsed.name,\n closeTag: { name: plainName }\n });\n return;\n }\n\n const parentNs = this._currentNs();\n let ns = parentNs;\n for (const attr of parsed.attributes) {\n if (attr.name === \"xmlns\") {\n if (ns === parentNs) {\n ns = Object.create(parentNs) as NamespaceMap;\n }\n ns[\"\"] = attr.value;\n } else if (attr.name.startsWith(\"xmlns:\")) {\n if (ns === parentNs) {\n ns = Object.create(parentNs) as NamespaceMap;\n }\n ns[attr.name.slice(6)] = attr.value;\n }\n }\n\n const resolvedName = this._resolveName(parsed.name, ns);\n const attributes: Record<string, XmlAttribute> = Object.create(null) as Record<string, XmlAttribute>;\n\n for (const attr of parsed.attributes) {\n if (!this.includeNamespaceAttributes) {\n if (attr.name === \"xmlns\" || attr.name.startsWith(\"xmlns:\")) {\n continue;\n }\n }\n const resolvedAttr = this._resolveAttributeName(attr.name, ns);\n attributes[resolvedAttr.name] = {\n name: resolvedAttr.name,\n value: attr.value,\n prefix: resolvedAttr.prefix,\n local: resolvedAttr.local,\n uri: resolvedAttr.uri\n };\n }\n\n const tag: OpenTag = {\n name: resolvedName.name,\n prefix: resolvedName.prefix,\n local: resolvedName.local,\n uri: resolvedName.uri,\n attributes,\n isSelfClosing: selfClosing\n };\n\n this.onOpenTag?.(tag);\n\n if (selfClosing) {\n this.onCloseTag?.({\n name: resolvedName.name,\n prefix: resolvedName.prefix,\n local: resolvedName.local,\n uri: resolvedName.uri\n });\n return;\n }\n\n this.elementStack.push({\n rawName: parsed.name,\n closeTag: {\n name: resolvedName.name,\n prefix: resolvedName.prefix,\n local: resolvedName.local,\n uri: resolvedName.uri\n }\n });\n this.nsStack.push(ns);\n }\n\n private _parseStartTagRange(\n start: number,\n end: number\n ): { name: string; attributes: RawAttribute[]; selfClosing: boolean } {\n let i = this._skipWhitespace(this.buffer, start, end);\n const parsedName = this._parseName(this.buffer, i, end);\n i = parsedName.end;\n\n const attributes = this._rawAttrs;\n attributes.length = 0;\n let selfClosing = false;\n\n while (i < end) {\n i = this._skipWhitespace(this.buffer, i, end);\n if (i >= end) {\n break;\n }\n\n if (this.buffer.charCodeAt(i) === 47) {\n i += 1;\n i = this._skipWhitespace(this.buffer, i, end);\n if (i !== end) {\n this._error(\"Invalid self-closing tag\");\n }\n selfClosing = true;\n break;\n }\n\n const attrName = this._parseName(this.buffer, i, end);\n i = attrName.end;\n i = this._skipWhitespace(this.buffer, i, end);\n\n if (this.buffer.charCodeAt(i) !== 61) {\n this._error(\"Attribute without '='\");\n }\n\n i += 1;\n i = this._skipWhitespace(this.buffer, i, end);\n\n const quoteCode = this.buffer.charCodeAt(i);\n if (quoteCode !== 34 && quoteCode !== 39) {\n this._error(\"Attribute value must be quoted\");\n }\n\n const quote = String.fromCharCode(quoteCode);\n i += 1;\n\n const valueEnd = this.buffer.indexOf(quote, i);\n if (valueEnd === -1 || valueEnd >= end) {\n this._error(\"Unterminated attribute value\");\n }\n\n const rawValue = this.buffer.slice(i, valueEnd);\n const normalized = rawValue.includes(\"\\r\") ? rawValue.replace(CRLF_RE, \"\\n\") : rawValue;\n const value = !normalized.includes(\"&\") ? normalized : decodeEntities(normalized, this.onError);\n attributes.push({ name: attrName.name, value });\n i = valueEnd + 1;\n }\n\n return { name: parsedName.name, attributes, selfClosing };\n }\n\n private _handleCloseTag(rawName: string, _nameEnd?: number): void {\n this._flushTextBuffer();\n\n const entry = this.elementStack.pop();\n const ns = this.xmlns ? this.nsStack.pop() : this._currentNs();\n\n if (!entry || !ns) {\n this._error(\"Closing tag without matching start tag\");\n }\n\n if (entry.rawName !== rawName) {\n this._error(`Mismatched closing tag: expected </${entry.rawName}>`);\n }\n\n this.onCloseTag?.(entry.closeTag);\n }\n\n private _emitText(text: string, allowPendingCR: boolean): void {\n const normalized = this._normalizeText(text, allowPendingCR);\n if (normalized.length === 0) {\n return;\n }\n\n if (!normalized.includes(\"&\")) {\n this._emitDecodedText(normalized);\n return;\n }\n\n const decoded = decodeEntities(normalized, this.onError);\n if (decoded.length > 0) {\n this._emitDecodedText(decoded);\n }\n }\n\n private _emitDecodedText(text: string): void {\n if (!this.coalesceText) {\n this.onText?.(text);\n return;\n }\n this.pendingTextParts.push(text);\n }\n\n private _flushTextBuffer(): void {\n if (!this.coalesceText || this.pendingTextParts.length === 0) {\n return;\n }\n const first = this.pendingTextParts[0];\n const text = this.pendingTextParts.length === 1 && first !== undefined ? first : this.pendingTextParts.join(\"\");\n this.pendingTextParts.length = 0;\n this.onText?.(text);\n }\n\n private _resolveName(rawName: string, ns: NamespaceMap): ResolvedName {\n if (!this.xmlns) {\n const split = rawName.indexOf(\":\");\n if (split === -1) {\n return { name: rawName, prefix: \"\", local: rawName, uri: \"\" };\n }\n return {\n name: rawName,\n prefix: rawName.slice(0, split),\n local: rawName.slice(split + 1),\n uri: \"\"\n };\n }\n\n const split = rawName.indexOf(\":\");\n if (split === -1) {\n return {\n name: rawName,\n prefix: \"\",\n local: rawName,\n uri: ns[\"\"] ?? \"\"\n };\n }\n\n const prefix = rawName.slice(0, split);\n const local = rawName.slice(split + 1);\n const uri = ns[prefix];\n if (uri === undefined) {\n this._error(`Undeclared namespace prefix: ${prefix}`);\n }\n return {\n name: rawName,\n prefix,\n local,\n uri\n };\n }\n\n private _resolveAttributeName(rawName: string, ns: NamespaceMap): ResolvedName {\n if (!this.xmlns) {\n return this._resolveName(rawName, ns);\n }\n\n if (rawName === \"xmlns\") {\n return {\n name: rawName,\n prefix: \"\",\n local: rawName,\n uri: ns.xmlns ?? XMLNS_NAMESPACE_URI\n };\n }\n\n const split = rawName.indexOf(\":\");\n if (split === -1) {\n return {\n name: rawName,\n prefix: \"\",\n local: rawName,\n uri: \"\"\n };\n }\n\n const prefix = rawName.slice(0, split);\n const local = rawName.slice(split + 1);\n const uri = ns[prefix];\n if (uri === undefined) {\n this._error(`Undeclared namespace prefix: ${prefix}`);\n }\n\n return {\n name: rawName,\n prefix,\n local,\n uri\n };\n }\n\n private _findTagEnd(start: number): number {\n const quickEnd = this.buffer.indexOf(\">\", start);\n if (quickEnd === -1) {\n return -1;\n }\n\n const firstDoubleQuote = this.buffer.indexOf(\"\\\"\", start);\n const firstSingleQuote = this.buffer.indexOf(\"'\", start);\n const firstQuote =\n firstDoubleQuote === -1\n ? firstSingleQuote\n : firstSingleQuote === -1\n ? firstDoubleQuote\n : Math.min(firstDoubleQuote, firstSingleQuote);\n\n if (firstQuote === -1 || firstQuote > quickEnd) {\n return quickEnd;\n }\n\n let quoteCode = 0;\n for (let i = start; i < this.buffer.length; i += 1) {\n const code = this.buffer.charCodeAt(i);\n if (quoteCode) {\n if (code === quoteCode) {\n quoteCode = 0;\n }\n continue;\n }\n if (code === 34 || code === 39) {\n quoteCode = code;\n continue;\n }\n if (code === 62) {\n return i;\n }\n }\n return -1;\n }\n\n private _findDoctypeEnd(start: number): number {\n let quoteCode = 0;\n let bracketDepth = 0;\n\n for (let i = start; i < this.buffer.length; i += 1) {\n const code = this.buffer.charCodeAt(i);\n if (quoteCode) {\n if (code === quoteCode) {\n quoteCode = 0;\n }\n continue;\n }\n if (code === 34 || code === 39) {\n quoteCode = code;\n continue;\n }\n if (code === 91) {\n bracketDepth += 1;\n continue;\n }\n if (code === 93) {\n bracketDepth = Math.max(0, bracketDepth - 1);\n continue;\n }\n if (code === 62 && bracketDepth === 0) {\n return i;\n }\n }\n\n return -1;\n }\n\n private _parseName(input: string, start: number, end: number): { name: string; end: number } {\n if (start >= end) {\n this._error(\"Expected name\");\n }\n\n const firstCode = input.charCodeAt(start);\n if (firstCode !== firstCode || firstCode >= 128 || NAME_START_TABLE[firstCode] === 0) {\n this._error(`Invalid name start: '${input[start] ?? \"\"}'`);\n }\n\n let i = start + 1;\n while (i < end) {\n const code = input.charCodeAt(i);\n if (code >= 128 || NAME_CHAR_TABLE[code] === 0) {\n break;\n }\n i += 1;\n }\n\n return { name: input.slice(start, i), end: i };\n }\n\n private _skipWhitespace(input: string, start: number, end: number): number {\n let i = start;\n while (i < end) {\n const code = input.charCodeAt(i);\n if (code !== 32 && code !== 9 && code !== 10 && code !== 13) {\n break;\n }\n i += 1;\n }\n return i;\n }\n\n private _currentNs(): NamespaceMap {\n return this.nsStack[this.nsStack.length - 1] ?? (Object.create(null) as NamespaceMap);\n }\n\n private _advance(text: string): void {\n this.offset += text.length;\n if (!this.trackPosition) {\n return;\n }\n\n let pos = text.indexOf(\"\\n\");\n if (pos === -1) {\n this.column += text.length;\n return;\n }\n\n let newlineCount = 0;\n let lastNewline = -1;\n while (pos !== -1) {\n newlineCount += 1;\n lastNewline = pos;\n pos = text.indexOf(\"\\n\", pos + 1);\n }\n\n this.line += newlineCount;\n this.column = text.length - lastNewline;\n }\n\n private _normalizeText(text: string, allowPendingCR: boolean): string {\n if (!text) {\n return \"\";\n }\n\n // Fast path for common chunks: no CR handling and no pending state.\n if (!this.pendingCR && !text.includes(\"\\r\")) {\n return text;\n }\n\n let value = text;\n let prefix = \"\";\n\n if (this.pendingCR) {\n prefix = \"\\n\";\n if (value.charCodeAt(0) === 10) {\n value = value.slice(1);\n }\n this.pendingCR = false;\n }\n\n if (allowPendingCR && value.charCodeAt(value.length - 1) === 13) {\n this.pendingCR = true;\n value = value.slice(0, -1);\n }\n\n const normalized = !value.includes(\"\\r\") ? value : value.replace(CRLF_RE, \"\\n\");\n return prefix ? `${prefix}${normalized}` : normalized;\n }\n\n private _advanceSpan(start: number, end: number): void {\n const length = end - start;\n this.offset += length;\n if (!this.trackPosition) {\n return;\n }\n\n let pos = this.buffer.indexOf(\"\\n\", start);\n if (pos === -1 || pos >= end) {\n this.column += length;\n return;\n }\n\n let newlineCount = 0;\n let lastNewline = -1;\n while (pos !== -1 && pos < end) {\n newlineCount += 1;\n lastNewline = pos;\n pos = this.buffer.indexOf(\"\\n\", pos + 1);\n }\n\n this.line += newlineCount;\n this.column = end - lastNewline;\n }\n\n private _flushPendingCR(): void {\n if (!this.pendingCR) {\n return;\n }\n this.pendingCR = false;\n this._emitDecodedText(\"\\n\");\n }\n\n private _error(message: string): never {\n const line = this.trackPosition ? this.line : 0;\n const column = this.trackPosition ? this.column : 0;\n const error = new XmlSaxError(message, this.offset, line, column);\n this.onError?.(error);\n throw error;\n }\n}\n","import { XmlSaxParser } from \"./parser\";\nimport type { ParserOptions, XmlNode } from \"./types\";\n\nexport class TreeBuilder {\n private stack: XmlNode[] = [];\n private root: XmlNode | null = null;\n\n onOpenTag = (tag: { name: string; attributes: Record<string, { value: string } | string> }): void => {\n const node: XmlNode = {\n name: tag.name,\n attributes: Object.fromEntries(\n Object.entries(tag.attributes).map(([key, attr]) => [key, typeof attr === \"string\" ? attr : attr.value])\n ),\n children: []\n };\n\n const parent = this.stack[this.stack.length - 1];\n if (parent) {\n parent.children?.push(node);\n } else {\n this.root = node;\n }\n\n this.stack.push(node);\n };\n\n onText = (text: string): void => {\n if (!this.stack.length) {\n return;\n }\n const node = this.stack[this.stack.length - 1];\n if (!node) {\n return;\n }\n const children = node.children ?? [];\n const last = children[children.length - 1];\n if (typeof last === \"string\") {\n children[children.length - 1] = last + text;\n } else {\n children.push(text);\n }\n node.children = children;\n };\n\n onCdata = (text: string): void => {\n this.onText(text);\n };\n\n onCloseTag = (): void => {\n this.stack.pop();\n };\n\n getRoot(): XmlNode {\n if (!this.root) {\n throw new Error(\"No root element found\");\n }\n return this.root;\n }\n}\n\nexport function parseXmlString(xml: string, options: ParserOptions = {}): XmlNode {\n const builder = new TreeBuilder();\n const parser = new XmlSaxParser({\n ...options,\n onOpenTag: builder.onOpenTag,\n onText: builder.onText,\n onCdata: builder.onCdata,\n onCloseTag: builder.onCloseTag\n });\n\n parser.feed(xml);\n parser.close();\n return builder.getRoot();\n}\n","import type { SerializeOptions, XmlChild, XmlNode } from \"./types\";\n\nconst DEFAULT_OPTIONS: Required<Pick<SerializeOptions, \"pretty\" | \"indent\" | \"newline\" | \"xmlDeclaration\">> = {\n pretty: false,\n indent: \" \",\n newline: \"\\n\",\n xmlDeclaration: false\n};\n\nexport function serializeXml(node: XmlNode, options: SerializeOptions = {}): string {\n const settings = { ...DEFAULT_OPTIONS, ...options };\n let body = serializeNode(node, settings, 0);\n if (settings.pretty && !body.endsWith(settings.newline)) {\n body = `${body}${settings.newline}`;\n }\n if (!settings.xmlDeclaration) {\n return body;\n }\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>${settings.newline}${body}`;\n}\n\nfunction serializeNode(node: XmlNode, options: Required<SerializeOptions>, depth: number): string {\n const attrs = serializeAttributes(node.attributes);\n const tagOpen = `<${node.name}${attrs}>`;\n const tagClose = `</${node.name}>`;\n\n const children = node.children ?? [];\n if (!children.length) {\n if (!options.pretty) {\n return `<${node.name}${attrs}/>`;\n }\n const indent = options.indent.repeat(depth);\n return `${indent}<${node.name}${attrs}/>`;\n }\n\n if (!options.pretty) {\n const inner = children.map((child) => serializeChild(child, options, depth + 1)).join(\"\");\n return `${tagOpen}${inner}${tagClose}`;\n }\n\n const indent = options.indent.repeat(depth);\n const hasOnlyTextChildren = children.every((child) => typeof child === \"string\");\n if (hasOnlyTextChildren) {\n const inlineText = children.map((child) => escapeText(child)).join(\"\");\n return `${indent}${tagOpen}${inlineText}${tagClose}`;\n }\n const innerIndent = options.indent.repeat(depth + 1);\n const prettyOpen = `${indent}${tagOpen}`;\n const prettyClose = `${indent}${tagClose}`;\n const inner = children\n .map((child) =>\n typeof child === \"string\"\n ? `${innerIndent}${escapeText(child)}`\n : serializeNode(child, options, depth + 1)\n )\n .join(options.newline);\n\n return `${prettyOpen}${options.newline}${inner}${options.newline}${prettyClose}`;\n}\n\nfunction serializeChild(child: XmlChild, options: Required<SerializeOptions>, depth: number): string {\n if (typeof child === \"string\") {\n return escapeText(child);\n }\n return serializeNode(child, options, depth);\n}\n\nfunction serializeAttributes(attrs?: Record<string, string>): string {\n if (!attrs) {\n return \"\";\n }\n return Object.entries(attrs)\n .map(([key, value]) => ` ${key}=\"${escapeAttribute(value)}\"`)\n .join(\"\");\n}\n\nfunction escapeText(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\");\n}\n\nfunction escapeAttribute(value: string): string {\n return escapeText(value).replace(/\"/g, \""\");\n}\n","import { serializeXml } from \"./serializer\";\nimport type {\n ObjectBuilderOptions,\n ObjectToXmlOptions,\n OpenTag,\n XmlAttribute,\n XmlBuilderOptions,\n XmlInputObject,\n XmlInputValue,\n XmlNode,\n XmlObjectMap,\n XmlObjectValue\n} from \"./types\";\n\ninterface ElementState {\n name: string;\n attributes: Record<string, string>;\n textParts: string[];\n children: Record<string, XmlObjectValue | XmlObjectValue[]>;\n}\n\nconst DEFAULT_OBJECT_OPTIONS: Required<Omit<ObjectBuilderOptions, \"arrayElements\">> = {\n attributePrefix: \"@_\",\n textKey: \"#text\",\n stripNamespaces: false,\n coalesceText: true\n};\n\ntype ObjectBuilderSettings = Required<Omit<ObjectBuilderOptions, \"arrayElements\">> &\n Pick<ObjectBuilderOptions, \"arrayElements\">;\n\ntype XmlBuilderSettings = Required<Omit<XmlBuilderOptions, \"arrayElements\" | \"rootName\">> &\n Pick<XmlBuilderOptions, \"arrayElements\" | \"rootName\">;\n\nexport function stripNamespace(name: string): string {\n const index = name.indexOf(\":\");\n if (index === -1) {\n return name;\n }\n return name.slice(index + 1);\n}\n\nexport function resolveName(\n value: string | Pick<OpenTag, \"name\" | \"prefix\" | \"local\" | \"uri\">\n): { name: string; localName: string; prefix: string; uri: string } {\n if (typeof value !== \"string\") {\n const prefix = value.prefix ?? \"\";\n const local = value.local ?? (prefix ? value.name.slice(prefix.length + 1) : value.name);\n return {\n name: value.name,\n localName: local,\n prefix,\n uri: value.uri ?? \"\"\n };\n }\n\n const index = value.indexOf(\":\");\n if (index === -1) {\n return { name: value, localName: value, prefix: \"\", uri: \"\" };\n }\n\n return {\n name: value,\n localName: value.slice(index + 1),\n prefix: value.slice(0, index),\n uri: \"\"\n };\n}\n\nexport function buildObject(root: XmlNode, options: ObjectBuilderOptions = {}): XmlObjectValue {\n const settings = buildSettings(options);\n return buildNode(root, settings, []);\n}\n\nexport function buildXmlNode(obj: XmlInputValue, options: XmlBuilderOptions = {}): XmlNode {\n const settings = buildXmlSettings(options);\n const root = resolveRoot(obj, settings);\n const rootName = normalizeName(root.name, settings);\n return buildElement(rootName, root.value, settings, []);\n}\n\nexport function objectToXml(obj: XmlInputValue, options: ObjectToXmlOptions = {}): string {\n const node = buildXmlNode(obj, options);\n return serializeXml(node, options);\n}\n\nexport class ObjectBuilder {\n private options: ObjectBuilderSettings;\n private stack: ElementState[] = [];\n private root: XmlObjectValue | null = null;\n private rootName: string | null = null;\n\n constructor(options: ObjectBuilderOptions = {}) {\n this.options = buildSettings(options);\n }\n\n onOpenTag = (tag: OpenTag): void => {\n const name = normalizeName(tag.name, this.options);\n const attributes = normalizeAttributes(tag.attributes, this.options);\n const state: ElementState = {\n name,\n attributes,\n textParts: [],\n children: Object.create(null) as Record<string, XmlObjectValue | XmlObjectValue[]>\n };\n\n this.rootName ??= name;\n\n this.stack.push(state);\n };\n\n onText = (text: string): void => {\n if (!text) {\n return;\n }\n const current = this.stack[this.stack.length - 1];\n if (!current) {\n return;\n }\n current.textParts.push(text);\n };\n\n onCdata = (text: string): void => {\n this.onText(text);\n };\n\n onCloseTag = (): void => {\n const state = this.stack.pop();\n if (!state) {\n return;\n }\n\n const value = finalizeElement(state, this.options);\n const parent = this.stack[this.stack.length - 1];\n\n if (!parent) {\n this.root = value;\n return;\n }\n\n const path = this.stack.map((entry) => entry.name);\n addChild(parent.children, state.name, value, this.options, path);\n };\n\n getResult(): XmlObjectValue {\n if (this.root === null) {\n throw new Error(\"No root element found\");\n }\n return this.root;\n }\n\n getRootName(): string {\n if (!this.rootName) {\n throw new Error(\"No root element found\");\n }\n return this.rootName;\n }\n}\n\nfunction buildSettings(options: ObjectBuilderOptions): ObjectBuilderSettings {\n return { ...DEFAULT_OBJECT_OPTIONS, ...options };\n}\n\nfunction buildXmlSettings(options: XmlBuilderOptions): XmlBuilderSettings {\n return { ...DEFAULT_OBJECT_OPTIONS, ...options };\n}\n\nfunction buildNode(node: XmlNode, options: ObjectBuilderSettings, path: string[]): XmlObjectValue {\n const name = normalizeName(node.name, options);\n const attributes = normalizeAttributeMap(node.attributes ?? {}, options);\n const state: ElementState = {\n name,\n attributes,\n textParts: [],\n children: Object.create(null) as Record<string, XmlObjectValue | XmlObjectValue[]>\n };\n\n const children = node.children ?? [];\n for (const child of children) {\n if (typeof child === \"string\") {\n if (child) {\n state.textParts.push(child);\n }\n continue;\n }\n\n const value = buildNode(child, options, [...path, name]);\n const childName = normalizeName(child.name, options);\n addChild(state.children, childName, value, options, [...path, name]);\n }\n\n return finalizeElement(state, options);\n}\n\nfunction normalizeName(name: string, options: ObjectBuilderSettings): string {\n if (options.stripNamespaces) {\n return stripNamespace(name);\n }\n return name;\n}\n\nfunction normalizeXmlName(name: string, options: XmlBuilderSettings): string {\n if (options.stripNamespaces) {\n return stripNamespace(name);\n }\n return name;\n}\n\nfunction normalizeAttributes(\n attributes: Record<string, XmlAttribute | string>,\n options: ObjectBuilderSettings\n): Record<string, string> {\n const result: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const [key, attr] of Object.entries(attributes)) {\n const name = normalizeName(key, options);\n result[name] = typeof attr === \"string\" ? attr : attr.value;\n }\n return result;\n}\n\nfunction normalizeAttributeMap(\n attributes: Record<string, string>,\n options: ObjectBuilderSettings\n): Record<string, string> {\n const result: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const [key, value] of Object.entries(attributes)) {\n const name = normalizeName(key, options);\n result[name] = value;\n }\n return result;\n}\n\nfunction addChild(\n target: Record<string, XmlObjectValue | XmlObjectValue[]>,\n name: string,\n value: XmlObjectValue,\n options: ObjectBuilderSettings,\n path: string[]\n): void {\n const forcedArray = shouldForceArray(name, path, options);\n const existing = target[name];\n\n if (existing === undefined) {\n target[name] = forcedArray ? [value] : value;\n return;\n }\n\n if (Array.isArray(existing)) {\n existing.push(value);\n return;\n }\n\n target[name] = [existing, value];\n}\n\nfunction shouldForceArray(name: string, path: string[], options: ObjectBuilderSettings): boolean {\n const rule = options.arrayElements;\n if (!rule) {\n return false;\n }\n if (rule instanceof Set) {\n return rule.has(name);\n }\n return rule(name, path);\n}\n\nfunction resolveRoot(obj: XmlInputValue, options: XmlBuilderSettings): { name: string; value: XmlInputValue } {\n if (isRecord(obj)) {\n const keys = Object.keys(obj);\n if (keys.length === 1) {\n const name = keys[0] ?? \"\";\n return { name, value: obj[name] };\n }\n }\n\n if (!options.rootName) {\n throw new Error(\"Root element name is required when object has multiple keys\");\n }\n\n return { name: options.rootName, value: obj };\n}\n\nfunction buildElement(\n name: string,\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): XmlNode {\n const attributes: Record<string, string> = Object.create(null) as Record<string, string>;\n const children: (XmlNode | string)[] = [];\n const nextPath = [...path, name];\n\n if (Array.isArray(value)) {\n for (const item of value) {\n appendContent(children, item, options, nextPath);\n }\n return finalizeNode(name, attributes, children);\n }\n\n if (isPrimitive(value)) {\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n return finalizeNode(name, attributes, children);\n }\n\n if (isRecord(value)) {\n for (const [key, entryValue] of Object.entries(value)) {\n if (isAttributeKey(key, options)) {\n const attrName = normalizeXmlName(key.slice(options.attributePrefix.length), options);\n const attrValue = coerceText(entryValue);\n if (attrValue !== null) {\n attributes[attrName] = attrValue;\n }\n continue;\n }\n\n if (key === options.textKey) {\n appendText(children, entryValue, options);\n continue;\n }\n\n const childName = normalizeXmlName(key, options);\n addChildElements(children, childName, entryValue, options, nextPath);\n }\n }\n\n return finalizeNode(name, attributes, children);\n}\n\nfunction addChildElements(\n children: (XmlNode | string)[],\n name: string,\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): void {\n const forcedArray = shouldForceArray(name, path, options);\n const items = Array.isArray(value) ? value : forcedArray ? [value] : [value];\n\n for (const item of items) {\n if (item === undefined || item === null) {\n children.push({ name });\n continue;\n }\n children.push(buildElement(name, item, options, path));\n }\n}\n\nfunction appendContent(\n children: (XmlNode | string)[],\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): void {\n if (value === undefined || value === null) {\n return;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n appendContent(children, item, options, path);\n }\n return;\n }\n\n if (isPrimitive(value)) {\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n return;\n }\n\n if (isRecord(value)) {\n for (const [key, entryValue] of Object.entries(value)) {\n const childName = normalizeXmlName(key, options);\n addChildElements(children, childName, entryValue, options, path);\n }\n }\n}\n\nfunction appendText(\n children: (XmlNode | string)[],\n value: XmlInputValue,\n options: XmlBuilderSettings\n): void {\n if (value === undefined || value === null) {\n return;\n }\n\n if (Array.isArray(value)) {\n const parts = value\n .map((item) => coerceText(item))\n .filter((item): item is string => item !== null);\n if (parts.length === 0) {\n return;\n }\n if (options.coalesceText) {\n children.push(parts.join(\"\"));\n return;\n }\n for (const part of parts) {\n children.push(part);\n }\n return;\n }\n\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n}\n\nfunction finalizeNode(\n name: string,\n attributes: Record<string, string>,\n children: (XmlNode | string)[]\n): XmlNode {\n const node: XmlNode = { name };\n if (Object.keys(attributes).length > 0) {\n node.attributes = attributes;\n }\n if (children.length > 0) {\n node.children = children;\n }\n return node;\n}\n\nfunction isAttributeKey(key: string, options: XmlBuilderSettings): boolean {\n if (!options.attributePrefix) {\n return false;\n }\n return key.startsWith(options.attributePrefix) && key.length > options.attributePrefix.length;\n}\n\nfunction isRecord(value: XmlInputValue): value is XmlInputObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isPrimitive(value: XmlInputValue): value is string | number | boolean {\n return typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\";\n}\n\nfunction coerceText(value: XmlInputValue): string | null {\n if (value === undefined || value === null) {\n return null;\n }\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (value instanceof Date) {\n return value.toISOString();\n }\n return null;\n}\n\nfunction finalizeElement(state: ElementState, options: ObjectBuilderSettings): XmlObjectValue {\n const hasAttributes = Object.keys(state.attributes).length > 0;\n const hasChildren = Object.keys(state.children).length > 0;\n const hasText = state.textParts.length > 0;\n\n const textValue = options.coalesceText\n ? state.textParts.join(\"\")\n : state.textParts.length <= 1\n ? state.textParts[0] ?? \"\"\n : state.textParts.slice();\n\n if (!hasAttributes && !hasChildren) {\n if (!hasText) {\n return \"\";\n }\n return textValue as XmlObjectValue;\n }\n\n const result: XmlObjectMap = Object.create(null) as XmlObjectMap;\n\n for (const [key, value] of Object.entries(state.attributes)) {\n result[`${options.attributePrefix}${key}`] = value;\n }\n\n for (const [key, value] of Object.entries(state.children)) {\n result[key] = value;\n }\n\n if (hasText) {\n result[options.textKey] = textValue as XmlObjectValue;\n }\n\n return result;\n}\n"]}
|