xml-sax-ts 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +5 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/package.json +13 -1
package/dist/index.cjs
CHANGED
|
@@ -688,6 +688,11 @@ function serializeNode(node, options, depth) {
|
|
|
688
688
|
return `${tagOpen}${inner2}${tagClose}`;
|
|
689
689
|
}
|
|
690
690
|
const indent = options.indent.repeat(depth);
|
|
691
|
+
const hasOnlyTextChildren = children.every((child) => typeof child === "string");
|
|
692
|
+
if (hasOnlyTextChildren) {
|
|
693
|
+
const inlineText = children.map((child) => escapeText(child)).join("");
|
|
694
|
+
return `${indent}${tagOpen}${inlineText}${tagClose}`;
|
|
695
|
+
}
|
|
691
696
|
const innerIndent = options.indent.repeat(depth + 1);
|
|
692
697
|
const prettyOpen = `${indent}${tagOpen}`;
|
|
693
698
|
const prettyClose = `${indent}${tagClose}`;
|
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"],"names":["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\nconst NAMED_ENTITIES: Record<string, string> = {\n lt: \"<\",\n gt: \">\",\n amp: \"&\",\n quot: \"\\\"\",\n apos: \"'\"\n};\n\nexport function decodeEntities(input: string, onError?: (error: Error) => void): string {\n let output = \"\";\n let i = 0;\n\n while (i < input.length) {\n const ch = input[i];\n if (ch !== \"&\") {\n output += ch;\n i += 1;\n continue;\n }\n\n const semi = input.indexOf(\";\", i + 1);\n if (semi === -1) {\n const err = new XmlSaxError(\"Unterminated entity\", i, 0, 0);\n onError?.(err);\n throw err;\n }\n\n const entity = input.slice(i + 1, semi);\n let decoded: string | undefined;\n\n if (entity.startsWith(\"#x\") || entity.startsWith(\"#X\")) {\n const codePoint = Number.parseInt(entity.slice(2), 16);\n decoded = decodeCodePoint(codePoint);\n } else if (entity.startsWith(\"#\")) {\n const codePoint = Number.parseInt(entity.slice(1), 10);\n decoded = decodeCodePoint(codePoint);\n } else {\n decoded = NAMED_ENTITIES[entity];\n }\n\n if (decoded === undefined) {\n const err = new XmlSaxError(`Unknown entity: &${entity};`, i, 0, 0);\n onError?.(err);\n throw err;\n }\n\n output += decoded;\n i = semi + 1;\n }\n\n return output;\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 const nextSemi = text.indexOf(\";\", lastAmp + 1);\n if (nextSemi === -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 resolved: ResolvedName;\n ns: NamespaceMap;\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<Pick<ParserOptions, \"xmlns\" | \"includeNamespaceAttributes\" | \"allowDoctype\">> = {\n xmlns: true,\n includeNamespaceAttributes: false,\n allowDoctype: true\n};\n\nconst XML_NAMESPACE_URI = \"http://www.w3.org/XML/1998/namespace\";\nconst XMLNS_NAMESPACE_URI = \"http://www.w3.org/2000/xmlns/\";\n\nexport class XmlSaxParser {\n private options: ParserOptions;\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\n constructor(options: ParserOptions = {}) {\n this.options = { ...DEFAULT_OPTIONS, ...options };\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 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 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\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 const markup = this.buffer.slice(lt, lt + consumed);\n this._advance(markup);\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 this._flushPendingCR();\n\n if (this.buffer.startsWith(\"<!--\", start)) {\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.options.onComment?.(comment);\n return end + 3 - start;\n }\n\n if (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.options.onCdata?.(normalized);\n }\n return end + 3 - start;\n }\n\n if (this.buffer.startsWith(\"<?\", start)) {\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(/\\s/);\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.options.onProcessingInstruction?.(pi);\n return end + 2 - start;\n }\n\n if (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.options.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.options.onDoctype?.(doctype);\n return end + 1 - start;\n }\n\n if (this.buffer.startsWith(\"</\", start)) {\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 const raw = this.buffer.slice(start + 2, end).trim();\n const parsed = this._parseName(raw, 0, raw.length);\n if (raw.slice(parsed.end).trim().length > 0) {\n this._error(\"Invalid closing tag\");\n }\n this._handleCloseTag(parsed.name);\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 const content = this.buffer.slice(start + 1, tagEnd);\n this._handleStartTag(content);\n return tagEnd + 1 - start;\n }\n\n private _handleStartTag(content: string): void {\n const trimmed = content.trim();\n const selfClosing = trimmed.endsWith(\"/\");\n const body = selfClosing ? trimmed.slice(0, -1).trim() : trimmed;\n const parsed = this._parseTagBody(body);\n\n let ns = this._currentNs();\n if (this.options.xmlns) {\n ns = Object.create(ns) as NamespaceMap;\n for (const attr of parsed.attributes) {\n if (attr.name === \"xmlns\") {\n ns[\"\"] = attr.value;\n } else if (attr.name.startsWith(\"xmlns:\")) {\n ns[attr.name.slice(6)] = attr.value;\n }\n }\n }\n\n const resolvedName = this._resolveName(parsed.name, ns);\n const attributes: Record<string, XmlAttribute> = {};\n\n for (const attr of parsed.attributes) {\n if (this.options.xmlns && !this.options.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.options.onOpenTag?.(tag);\n\n if (selfClosing) {\n const closeTag: CloseTag = {\n name: resolvedName.name,\n prefix: resolvedName.prefix,\n local: resolvedName.local,\n uri: resolvedName.uri\n };\n this.options.onCloseTag?.(closeTag);\n return;\n }\n\n this.elementStack.push({ rawName: parsed.name, resolved: resolvedName, ns });\n this.nsStack.push(ns);\n }\n\n private _handleCloseTag(rawName: string): void {\n const entry = this.elementStack.pop();\n const ns = this.nsStack.pop();\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 const closeTag: CloseTag = {\n name: entry.resolved.name,\n prefix: entry.resolved.prefix,\n local: entry.resolved.local,\n uri: entry.resolved.uri\n };\n\n this.options.onCloseTag?.(closeTag);\n }\n\n private _parseTagBody(body: string): { name: string; attributes: RawAttribute[] } {\n let i = 0;\n const length = body.length;\n\n i = this._skipWhitespace(body, i, length);\n const parsedName = this._parseName(body, i, length);\n i = parsedName.end;\n\n const attributes: RawAttribute[] = [];\n\n while (i < length) {\n i = this._skipWhitespace(body, i, length);\n if (i >= length) {\n break;\n }\n\n const attrName = this._parseName(body, i, length);\n i = attrName.end;\n i = this._skipWhitespace(body, i, length);\n\n if (body[i] !== \"=\") {\n this._error(\"Attribute without '='\");\n }\n i += 1;\n i = this._skipWhitespace(body, i, length);\n\n const quote = body[i];\n if (quote !== \"\\\"\" && quote !== \"'\") {\n this._error(\"Attribute value must be quoted\");\n }\n i += 1;\n\n const valueEnd = body.indexOf(quote, i);\n if (valueEnd === -1) {\n this._error(\"Unterminated attribute value\");\n }\n const rawValue = body.slice(i, valueEnd);\n const normalized = rawValue.replace(/\\r\\n?/g, \"\\n\");\n const value = decodeEntities(normalized, this.options.onError);\n attributes.push({ name: attrName.name, value });\n i = valueEnd + 1;\n }\n\n return { name: parsedName.name, attributes };\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 const decoded = decodeEntities(normalized, this.options.onError);\n if (decoded.length > 0) {\n this.options.onText?.(decoded);\n }\n }\n\n private _resolveName(rawName: string, ns: NamespaceMap): ResolvedName {\n if (!this.options.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.options.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 let quote: string | null = null;\n for (let i = start; i < this.buffer.length; i += 1) {\n const ch = this.buffer[i];\n if (quote) {\n if (ch === quote) {\n quote = null;\n }\n continue;\n }\n if (ch === \"\\\"\" || ch === \"'\") {\n quote = ch;\n continue;\n }\n if (ch === \">\") {\n return i;\n }\n }\n return -1;\n }\n\n private _findDoctypeEnd(start: number): number {\n let quote: string | null = null;\n let bracketDepth = 0;\n\n for (let i = start; i < this.buffer.length; i += 1) {\n const ch = this.buffer[i];\n if (quote) {\n if (ch === quote) {\n quote = null;\n }\n continue;\n }\n if (ch === \"\\\"\" || ch === \"'\") {\n quote = ch;\n continue;\n }\n if (ch === \"[\") {\n bracketDepth += 1;\n continue;\n }\n if (ch === \"]\") {\n bracketDepth = Math.max(0, bracketDepth - 1);\n continue;\n }\n if (ch === \">\" && 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 first = input[start];\n if (first === undefined) {\n this._error(\"Expected name\");\n }\n if (!this._isNameStart(first)) {\n this._error(`Invalid name start: '${first}'`);\n }\n\n let i = start + 1;\n while (i < end) {\n const ch = input[i];\n if (ch === undefined || !this._isNameChar(ch)) {\n break;\n }\n i += 1;\n }\n\n return { name: input.slice(start, i), end: i };\n }\n\n private _isNameStart(ch: string): boolean {\n return /[A-Za-z_]/.test(ch);\n }\n\n private _isNameChar(ch: string): boolean {\n return /[A-Za-z0-9_:\\-.]/.test(ch);\n }\n\n private _skipWhitespace(input: string, start: number, end: number): number {\n let i = start;\n while (i < end) {\n const ch = input[i];\n if (ch === undefined || !/\\s/.test(ch)) {\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 const lastNewline = text.lastIndexOf(\"\\n\");\n if (lastNewline === -1) {\n this.column += text.length;\n return;\n }\n\n const newlineCount = text.split(\"\\n\").length - 1;\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 let value = text;\n let prefix = \"\";\n\n if (this.pendingCR) {\n prefix = \"\\n\";\n if (value.startsWith(\"\\n\")) {\n value = value.slice(1);\n }\n this.pendingCR = false;\n }\n\n if (allowPendingCR && value.endsWith(\"\\r\")) {\n this.pendingCR = true;\n value = value.slice(0, -1);\n }\n\n const normalized = value.replace(/\\r\\n?/g, \"\\n\");\n return `${prefix}${normalized}`;\n }\n\n private _flushPendingCR(): void {\n if (!this.pendingCR) {\n return;\n }\n this.pendingCR = false;\n this.options.onText?.(\"\\n\");\n }\n\n private _error(message: string): never {\n const error = new XmlSaxError(message, this.offset, this.line, this.column);\n this.options.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 }> }): void => {\n const node: XmlNode = {\n name: tag.name,\n attributes: Object.fromEntries(\n Object.entries(tag.attributes).map(([key, attr]) => [key, 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 const body = serializeNode(node, settings, 0);\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 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"]}
|
|
1
|
+
{"version":3,"sources":["../src/assert.ts","../src/errors.ts","../src/entities.ts","../src/parser.ts","../src/tree.ts","../src/serializer.ts"],"names":["split","DEFAULT_OPTIONS","indent","inner"],"mappings":";;;AAAA,IAAM,MAAM,OAAO,OAAA,KAAY,cAAc,OAAA,CAAQ,GAAA,CAAI,aAAa,YAAA,GAAe,IAAA;AAE9E,SAAS,MAAA,CAAO,WAAoB,OAAA,EAAuB;AAChE,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA;AAAA,EACF;AACA,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,OAAO,CAAA,CAAE,CAAA;AAAA,EAChD;AACF;;;ACTO,IAAM,WAAA,GAAN,cAA0B,KAAA,CAAM;AAAA,EAKrC,WAAA,CAAY,OAAA,EAAiB,MAAA,EAAgB,IAAA,EAAc,MAAA,EAAgB;AACzE,IAAA,KAAA,CAAM,GAAG,OAAO,CAAA,IAAA,EAAO,IAAI,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAA;AACvC,IAAA,IAAA,CAAK,IAAA,GAAO,aAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AACF;;;ACVA,IAAM,cAAA,GAAyC;AAAA,EAC7C,EAAA,EAAI,GAAA;AAAA,EACJ,EAAA,EAAI,GAAA;AAAA,EACJ,GAAA,EAAK,GAAA;AAAA,EACL,IAAA,EAAM,GAAA;AAAA,EACN,IAAA,EAAM;AACR,CAAA;AAEO,SAAS,cAAA,CAAe,OAAe,OAAA,EAA0C;AACtF,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,IAAI,CAAA,GAAI,CAAA;AAER,EAAA,OAAO,CAAA,GAAI,MAAM,MAAA,EAAQ;AACvB,IAAA,MAAM,EAAA,GAAK,MAAM,CAAC,CAAA;AAClB,IAAA,IAAI,OAAO,GAAA,EAAK;AACd,MAAA,MAAA,IAAU,EAAA;AACV,MAAA,CAAA,IAAK,CAAA;AACL,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,OAAA,CAAQ,GAAA,EAAK,IAAI,CAAC,CAAA;AACrC,IAAA,IAAI,SAAS,EAAA,EAAI;AACf,MAAA,MAAM,MAAM,IAAI,WAAA,CAAY,qBAAA,EAAuB,CAAA,EAAG,GAAG,CAAC,CAAA;AAC1D,MAAA,OAAA,GAAU,GAAG,CAAA;AACb,MAAA,MAAM,GAAA;AAAA,IACR;AAEA,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,CAAA,GAAI,GAAG,IAAI,CAAA;AACtC,IAAA,IAAI,OAAA;AAEJ,IAAA,IAAI,OAAO,UAAA,CAAW,IAAI,KAAK,MAAA,CAAO,UAAA,CAAW,IAAI,CAAA,EAAG;AACtD,MAAA,MAAM,YAAY,MAAA,CAAO,QAAA,CAAS,OAAO,KAAA,CAAM,CAAC,GAAG,EAAE,CAAA;AACrD,MAAA,OAAA,GAAU,gBAAgB,SAAS,CAAA;AAAA,IACrC,CAAA,MAAA,IAAW,MAAA,CAAO,UAAA,CAAW,GAAG,CAAA,EAAG;AACjC,MAAA,MAAM,YAAY,MAAA,CAAO,QAAA,CAAS,OAAO,KAAA,CAAM,CAAC,GAAG,EAAE,CAAA;AACrD,MAAA,OAAA,GAAU,gBAAgB,SAAS,CAAA;AAAA,IACrC,CAAA,MAAO;AACL,MAAA,OAAA,GAAU,eAAe,MAAM,CAAA;AAAA,IACjC;AAEA,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,MAAM,GAAA,GAAM,IAAI,WAAA,CAAY,CAAA,iBAAA,EAAoB,MAAM,CAAA,CAAA,CAAA,EAAK,CAAA,EAAG,GAAG,CAAC,CAAA;AAClE,MAAA,OAAA,GAAU,GAAG,CAAA;AACb,MAAA,MAAM,GAAA;AAAA,IACR;AAEA,IAAA,MAAA,IAAU,OAAA;AACV,IAAA,CAAA,GAAI,IAAA,GAAO,CAAA;AAAA,EACb;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,gBAAgB,SAAA,EAAuC;AAC9D,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,SAAS,CAAA,EAAG;AAC/B,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,SAAA,GAAY,CAAA,IAAK,SAAA,GAAY,OAAA,EAAU;AACzC,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,SAAA,IAAa,KAAA,IAAU,SAAA,IAAa,KAAA,EAAQ;AAC9C,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA,CAAO,cAAc,SAAS,CAAA;AACvC;AAEO,SAAS,qBAAqB,IAAA,EAA+C;AAClF,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA;AACpC,EAAA,IAAI,YAAY,EAAA,EAAI;AAClB,IAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,EAAA,EAAG;AAAA,EACjC;AAEA,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,UAAU,CAAC,CAAA;AAC9C,EAAA,IAAI,aAAa,EAAA,EAAI;AACnB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA;AAAA,MAC3B,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,OAAO;AAAA,KAC3B;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,EAAA,EAAG;AACjC;;;ACnDA,IAAM,eAAA,GAA0G;AAAA,EAC9G,KAAA,EAAO,IAAA;AAAA,EACP,0BAAA,EAA4B,KAAA;AAAA,EAC5B,YAAA,EAAc;AAChB,CAAA;AAEA,IAAM,iBAAA,GAAoB,sCAAA;AAC1B,IAAM,mBAAA,GAAsB,+BAAA;AAErB,IAAM,eAAN,MAAmB;AAAA,EAgBxB,WAAA,CAAY,OAAA,GAAyB,EAAC,EAAG;AAdzC,IAAA,IAAA,CAAQ,MAAA,GAAS,EAAA;AACjB,IAAA,IAAA,CAAQ,MAAA,GAAS,CAAA;AACjB,IAAA,IAAA,CAAQ,IAAA,GAAO,CAAA;AACf,IAAA,IAAA,CAAQ,MAAA,GAAS,CAAA;AACjB,IAAA,IAAA,CAAQ,eAA6B,EAAC;AACtC,IAAA,IAAA,CAAQ,OAAA,GAA0B;AAAA,MAChC,MAAA,CAAO,MAAA,iBAAO,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,EAAmB;AAAA,QACjD,GAAA,EAAK,iBAAA;AAAA,QACL,KAAA,EAAO;AAAA,OACR;AAAA,KACH;AACA,IAAA,IAAA,CAAQ,MAAA,GAAS,KAAA;AACjB,IAAA,IAAA,CAAQ,SAAA,GAAY,KAAA;AAGlB,IAAA,IAAA,CAAK,OAAA,GAAU,EAAE,GAAG,eAAA,EAAiB,GAAG,OAAA,EAAQ;AAAA,EAClD;AAAA,EAEA,KAAK,KAAA,EAAqB;AACxB,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,IAAA,CAAK,OAAO,kBAAkB,CAAA;AAAA,IAChC;AACA,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,MAAA,IAAU,KAAA;AACf,IAAA,IAAA,CAAK,aAAa,KAAK,CAAA;AAAA,EACzB;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,aAAa,IAAI,CAAA;AACtB,IAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC1B,MAAA,IAAA,CAAK,OAAO,yBAAyB,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG;AAChC,MAAA,IAAA,CAAK,OAAO,2BAA2B,CAAA;AAAA,IACzC;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAAA,EAChB;AAAA,EAEQ,aAAa,KAAA,EAAsB;AACzC,IAAA,IAAI,CAAA,GAAI,CAAA;AAER,IAAA,OAAO,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ;AAC7B,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAC,CAAA;AACrC,MAAA,IAAI,OAAO,EAAA,EAAI;AACb,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAChC,QAAA,MAAM,KAAA,GAAQ,qBAAqB,IAAI,CAAA;AACvC,QAAA,IAAI,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AACzB,UAAA,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAC/B,UAAA,IAAA,CAAK,QAAA,CAAS,MAAM,IAAI,CAAA;AAAA,QAC1B;AACA,QAAA,IAAA,CAAK,SAAS,KAAA,CAAM,KAAA;AACpB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,KAAK,CAAA,EAAG;AACV,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,GAAG,EAAE,CAAA;AACpC,QAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,UAAA,IAAA,CAAK,SAAA,CAAU,MAAM,KAAK,CAAA;AAC1B,UAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AAAA,QACpB;AACA,QAAA,CAAA,GAAI,EAAA;AAAA,MACN;AAEA,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,CAAiB,EAAA,EAAI,KAAK,CAAA;AAChD,MAAA,IAAI,aAAa,IAAA,EAAM;AACrB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,SAAS,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,EAAA,EAAI,KAAK,QAAQ,CAAA;AAClD,MAAA,IAAA,CAAK,SAAS,MAAM,CAAA;AACpB,MAAA,CAAA,GAAI,EAAA,GAAK,QAAA;AAAA,IACX;AAEA,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAEjC,IAAA,IAAI,KAAA,IAAS,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AACnC,MAAA,IAAA,CAAK,OAAO,yBAAyB,CAAA;AAAA,IACvC;AAAA,EACF;AAAA,EAEQ,gBAAA,CAAiB,OAAe,KAAA,EAA+B;AACrE,IAAA,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,KAAM,KAAK,4BAA4B,CAAA;AAE/D,IAAA,IAAA,CAAK,eAAA,EAAgB;AAErB,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,MAAA,EAAQ,KAAK,CAAA,EAAG;AACzC,MAAA,MAAM,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,KAAA,EAAO,QAAQ,CAAC,CAAA;AAChD,MAAA,IAAI,QAAQ,EAAA,EAAI;AACd,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,IAAA,CAAK,OAAO,sBAAsB,CAAA;AAAA,QACpC;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,UAAU,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,KAAA,GAAQ,GAAG,GAAG,CAAA;AAChD,MAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,OAAO,CAAA;AAChC,MAAA,OAAO,MAAM,CAAA,GAAI,KAAA;AAAA,IACnB;AAEA,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,WAAA,EAAa,KAAK,CAAA,EAAG;AAC9C,MAAA,MAAM,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,KAAA,EAAO,QAAQ,CAAC,CAAA;AAChD,MAAA,IAAI,QAAQ,EAAA,EAAI;AACd,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,IAAA,CAAK,OAAO,4BAA4B,CAAA;AAAA,QAC1C;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,QAAQ,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,KAAA,GAAQ,GAAG,GAAG,CAAA;AAC9C,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,KAAA,EAAO,KAAK,CAAA;AACnD,MAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,QAAA,IAAA,CAAK,OAAA,CAAQ,UAAU,UAAU,CAAA;AAAA,MACnC;AACA,MAAA,OAAO,MAAM,CAAA,GAAI,KAAA;AAAA,IACnB;AAEA,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAA,EAAM,KAAK,CAAA,EAAG;AACvC,MAAA,MAAM,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAM,QAAQ,CAAC,CAAA;AAC/C,MAAA,IAAI,QAAQ,EAAA,EAAI;AACd,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,IAAA,CAAK,OAAO,qCAAqC,CAAA;AAAA,QACnD;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,IAAA,GAAO,KAAK,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA,EAAG,GAAG,EAAE,IAAA,EAAK;AACpD,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA;AAC9B,MAAA,MAAM,SAAS,KAAA,KAAU,EAAA,GAAK,OAAO,IAAA,CAAK,KAAA,CAAM,GAAG,KAAK,CAAA;AACxD,MAAA,MAAM,IAAA,GAAO,UAAU,EAAA,GAAK,EAAA,GAAK,KAAK,KAAA,CAAM,KAAK,EAAE,IAAA,EAAK;AACxD,MAAA,MAAM,EAAA,GAA4B,EAAE,MAAA,EAAQ,IAAA,EAAM,IAAA,EAAK;AACvD,MAAA,IAAA,CAAK,OAAA,CAAQ,0BAA0B,EAAE,CAAA;AACzC,MAAA,OAAO,MAAM,CAAA,GAAI,KAAA;AAAA,IACnB;AAEA,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,WAAA,EAAa,KAAK,CAAA,EAAG;AAC9C,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,eAAA,CAAgB,KAAA,GAAQ,CAAC,CAAA;AAC1C,MAAA,IAAI,QAAQ,EAAA,EAAI;AACd,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,IAAA,CAAK,OAAO,kCAAkC,CAAA;AAAA,QAChD;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,YAAA,EAAc;AAC9B,QAAA,IAAA,CAAK,OAAO,wBAAwB,CAAA;AAAA,MACtC;AACA,MAAA,MAAM,GAAA,GAAM,KAAK,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA,EAAG,GAAG,EAAE,IAAA,EAAK;AACnD,MAAA,MAAM,OAAA,GAAmB,EAAE,GAAA,EAAI;AAC/B,MAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,OAAO,CAAA;AAChC,MAAA,OAAO,MAAM,CAAA,GAAI,KAAA;AAAA,IACnB;AAEA,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAA,EAAM,KAAK,CAAA,EAAG;AACvC,MAAA,MAAM,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,GAAA,EAAK,QAAQ,CAAC,CAAA;AAC9C,MAAA,IAAI,QAAQ,EAAA,EAAI;AACd,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,IAAA,CAAK,OAAO,0BAA0B,CAAA;AAAA,QACxC;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,GAAA,GAAM,KAAK,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA,EAAG,GAAG,EAAE,IAAA,EAAK;AACnD,MAAA,MAAM,SAAS,IAAA,CAAK,UAAA,CAAW,GAAA,EAAK,CAAA,EAAG,IAAI,MAAM,CAAA;AACjD,MAAA,IAAI,GAAA,CAAI,MAAM,MAAA,CAAO,GAAG,EAAE,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG;AAC3C,QAAA,IAAA,CAAK,OAAO,qBAAqB,CAAA;AAAA,MACnC;AACA,MAAA,IAAA,CAAK,eAAA,CAAgB,OAAO,IAAI,CAAA;AAChC,MAAA,OAAO,MAAM,CAAA,GAAI,KAAA;AAAA,IACnB;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,WAAA,CAAY,KAAA,GAAQ,CAAC,CAAA;AACzC,IAAA,IAAI,WAAW,EAAA,EAAI;AACjB,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAA,CAAK,OAAO,wBAAwB,CAAA;AAAA,MACtC;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,UAAU,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,KAAA,GAAQ,GAAG,MAAM,CAAA;AACnD,IAAA,IAAA,CAAK,gBAAgB,OAAO,CAAA;AAC5B,IAAA,OAAO,SAAS,CAAA,GAAI,KAAA;AAAA,EACtB;AAAA,EAEQ,gBAAgB,OAAA,EAAuB;AAC7C,IAAA,MAAM,OAAA,GAAU,QAAQ,IAAA,EAAK;AAC7B,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA;AACxC,IAAA,MAAM,IAAA,GAAO,cAAc,OAAA,CAAQ,KAAA,CAAM,GAAG,EAAE,CAAA,CAAE,MAAK,GAAI,OAAA;AACzD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,aAAA,CAAc,IAAI,CAAA;AAEtC,IAAA,IAAI,EAAA,GAAK,KAAK,UAAA,EAAW;AACzB,IAAA,IAAI,IAAA,CAAK,QAAQ,KAAA,EAAO;AACtB,MAAA,EAAA,GAAK,MAAA,CAAO,OAAO,EAAE,CAAA;AACrB,MAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,UAAA,EAAY;AACpC,QAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,UAAA,EAAA,CAAG,EAAE,IAAI,IAAA,CAAK,KAAA;AAAA,QAChB,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AACzC,UAAA,EAAA,CAAG,KAAK,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,IAAI,IAAA,CAAK,KAAA;AAAA,QAChC;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,MAAM,EAAE,CAAA;AACtD,IAAA,MAAM,aAA2C,EAAC;AAElD,IAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,UAAA,EAAY;AACpC,MAAA,IAAI,KAAK,OAAA,CAAQ,KAAA,IAAS,CAAC,IAAA,CAAK,QAAQ,0BAAA,EAA4B;AAClE,QAAA,IAAI,KAAK,IAAA,KAAS,OAAA,IAAW,KAAK,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3D,UAAA;AAAA,QACF;AAAA,MACF;AACA,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,qBAAA,CAAsB,IAAA,CAAK,MAAM,EAAE,CAAA;AAC7D,MAAA,UAAA,CAAW,YAAA,CAAa,IAAI,CAAA,GAAI;AAAA,QAC9B,MAAM,YAAA,CAAa,IAAA;AAAA,QACnB,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,QAAQ,YAAA,CAAa,MAAA;AAAA,QACrB,OAAO,YAAA,CAAa,KAAA;AAAA,QACpB,KAAK,YAAA,CAAa;AAAA,OACpB;AAAA,IACF;AAEA,IAAA,MAAM,GAAA,GAAe;AAAA,MACnB,MAAM,YAAA,CAAa,IAAA;AAAA,MACnB,QAAQ,YAAA,CAAa,MAAA;AAAA,MACrB,OAAO,YAAA,CAAa,KAAA;AAAA,MACpB,KAAK,YAAA,CAAa,GAAA;AAAA,MAClB,UAAA;AAAA,MACA,aAAA,EAAe;AAAA,KACjB;AAEA,IAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,GAAG,CAAA;AAE5B,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,MAAM,QAAA,GAAqB;AAAA,QACzB,MAAM,YAAA,CAAa,IAAA;AAAA,QACnB,QAAQ,YAAA,CAAa,MAAA;AAAA,QACrB,OAAO,YAAA,CAAa,KAAA;AAAA,QACpB,KAAK,YAAA,CAAa;AAAA,OACpB;AACA,MAAA,IAAA,CAAK,OAAA,CAAQ,aAAa,QAAQ,CAAA;AAClC,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,YAAA,CAAa,KAAK,EAAE,OAAA,EAAS,OAAO,IAAA,EAAM,QAAA,EAAU,YAAA,EAAc,EAAA,EAAI,CAAA;AAC3E,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,EAAE,CAAA;AAAA,EACtB;AAAA,EAEQ,gBAAgB,OAAA,EAAuB;AAC7C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,GAAA,EAAI;AACpC,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAI;AAE5B,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,EAAA,EAAI;AACjB,MAAA,IAAA,CAAK,OAAO,wCAAwC,CAAA;AAAA,IACtD;AAEA,IAAA,IAAI,KAAA,CAAM,YAAY,OAAA,EAAS;AAC7B,MAAA,IAAA,CAAK,MAAA,CAAO,CAAA,mCAAA,EAAsC,KAAA,CAAM,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,IACpE;AAEA,IAAA,MAAM,QAAA,GAAqB;AAAA,MACzB,IAAA,EAAM,MAAM,QAAA,CAAS,IAAA;AAAA,MACrB,MAAA,EAAQ,MAAM,QAAA,CAAS,MAAA;AAAA,MACvB,KAAA,EAAO,MAAM,QAAA,CAAS,KAAA;AAAA,MACtB,GAAA,EAAK,MAAM,QAAA,CAAS;AAAA,KACtB;AAEA,IAAA,IAAA,CAAK,OAAA,CAAQ,aAAa,QAAQ,CAAA;AAAA,EACpC;AAAA,EAEQ,cAAc,IAAA,EAA4D;AAChF,IAAA,IAAI,CAAA,GAAI,CAAA;AACR,IAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AAEpB,IAAA,CAAA,GAAI,IAAA,CAAK,eAAA,CAAgB,IAAA,EAAM,CAAA,EAAG,MAAM,CAAA;AACxC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,UAAA,CAAW,IAAA,EAAM,GAAG,MAAM,CAAA;AAClD,IAAA,CAAA,GAAI,UAAA,CAAW,GAAA;AAEf,IAAA,MAAM,aAA6B,EAAC;AAEpC,IAAA,OAAO,IAAI,MAAA,EAAQ;AACjB,MAAA,CAAA,GAAI,IAAA,CAAK,eAAA,CAAgB,IAAA,EAAM,CAAA,EAAG,MAAM,CAAA;AACxC,MAAA,IAAI,KAAK,MAAA,EAAQ;AACf,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,UAAA,CAAW,IAAA,EAAM,GAAG,MAAM,CAAA;AAChD,MAAA,CAAA,GAAI,QAAA,CAAS,GAAA;AACb,MAAA,CAAA,GAAI,IAAA,CAAK,eAAA,CAAgB,IAAA,EAAM,CAAA,EAAG,MAAM,CAAA;AAExC,MAAA,IAAI,IAAA,CAAK,CAAC,CAAA,KAAM,GAAA,EAAK;AACnB,QAAA,IAAA,CAAK,OAAO,uBAAuB,CAAA;AAAA,MACrC;AACA,MAAA,CAAA,IAAK,CAAA;AACL,MAAA,CAAA,GAAI,IAAA,CAAK,eAAA,CAAgB,IAAA,EAAM,CAAA,EAAG,MAAM,CAAA;AAExC,MAAA,MAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;AACpB,MAAA,IAAI,KAAA,KAAU,GAAA,IAAQ,KAAA,KAAU,GAAA,EAAK;AACnC,QAAA,IAAA,CAAK,OAAO,gCAAgC,CAAA;AAAA,MAC9C;AACA,MAAA,CAAA,IAAK,CAAA;AAEL,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,CAAC,CAAA;AACtC,MAAA,IAAI,aAAa,EAAA,EAAI;AACnB,QAAA,IAAA,CAAK,OAAO,8BAA8B,CAAA;AAAA,MAC5C;AACA,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA;AACvC,MAAA,MAAM,UAAA,GAAa,QAAA,CAAS,OAAA,CAAQ,QAAA,EAAU,IAAI,CAAA;AAClD,MAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,UAAA,EAAY,IAAA,CAAK,QAAQ,OAAO,CAAA;AAC7D,MAAA,UAAA,CAAW,KAAK,EAAE,IAAA,EAAM,QAAA,CAAS,IAAA,EAAM,OAAO,CAAA;AAC9C,MAAA,CAAA,GAAI,QAAA,GAAW,CAAA;AAAA,IACjB;AAEA,IAAA,OAAO,EAAE,IAAA,EAAM,UAAA,CAAW,IAAA,EAAM,UAAA,EAAW;AAAA,EAC7C;AAAA,EAEQ,SAAA,CAAU,MAAc,cAAA,EAA+B;AAC7D,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,IAAA,EAAM,cAAc,CAAA;AAC3D,IAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,MAAA;AAAA,IACF;AACA,IAAA,MAAM,OAAA,GAAU,cAAA,CAAe,UAAA,EAAY,IAAA,CAAK,QAAQ,OAAO,CAAA;AAC/D,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,MAAA,IAAA,CAAK,OAAA,CAAQ,SAAS,OAAO,CAAA;AAAA,IAC/B;AAAA,EACF;AAAA,EAEQ,YAAA,CAAa,SAAiB,EAAA,EAAgC;AACpE,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO;AACvB,MAAA,MAAMA,MAAAA,GAAQ,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AACjC,MAAA,IAAIA,WAAU,EAAA,EAAI;AAChB,QAAA,OAAO,EAAE,MAAM,OAAA,EAAS,MAAA,EAAQ,IAAI,KAAA,EAAO,OAAA,EAAS,KAAK,EAAA,EAAG;AAAA,MAC9D;AACA,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,OAAA;AAAA,QACN,MAAA,EAAQ,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAGA,MAAK,CAAA;AAAA,QAC9B,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAMA,MAAAA,GAAQ,CAAC,CAAA;AAAA,QAC9B,GAAA,EAAK;AAAA,OACP;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AACjC,IAAA,IAAI,UAAU,EAAA,EAAI;AAChB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,OAAA;AAAA,QACN,MAAA,EAAQ,EAAA;AAAA,QACR,KAAA,EAAO,OAAA;AAAA,QACP,GAAA,EAAK,EAAA,CAAG,EAAE,CAAA,IAAK;AAAA,OACjB;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AACrC,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA;AACrC,IAAA,MAAM,GAAA,GAAM,GAAG,MAAM,CAAA;AACrB,IAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,MAAA,IAAA,CAAK,MAAA,CAAO,CAAA,6BAAA,EAAgC,MAAM,CAAA,CAAE,CAAA;AAAA,IACtD;AACA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,MAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEQ,qBAAA,CAAsB,SAAiB,EAAA,EAAgC;AAC7E,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO;AACvB,MAAA,OAAO,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS,EAAE,CAAA;AAAA,IACtC;AAEA,IAAA,IAAI,YAAY,OAAA,EAAS;AACvB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,OAAA;AAAA,QACN,MAAA,EAAQ,EAAA;AAAA,QACR,KAAA,EAAO,OAAA;AAAA,QACP,GAAA,EAAK,GAAG,KAAA,IAAS;AAAA,OACnB;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AACjC,IAAA,IAAI,UAAU,EAAA,EAAI;AAChB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,OAAA;AAAA,QACN,MAAA,EAAQ,EAAA;AAAA,QACR,KAAA,EAAO,OAAA;AAAA,QACP,GAAA,EAAK;AAAA,OACP;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AACrC,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA;AACrC,IAAA,MAAM,GAAA,GAAM,GAAG,MAAM,CAAA;AACrB,IAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,MAAA,IAAA,CAAK,MAAA,CAAO,CAAA,6BAAA,EAAgC,MAAM,CAAA,CAAE,CAAA;AAAA,IACtD;AAEA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,MAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEQ,YAAY,KAAA,EAAuB;AACzC,IAAA,IAAI,KAAA,GAAuB,IAAA;AAC3B,IAAA,KAAA,IAAS,IAAI,KAAA,EAAO,CAAA,GAAI,KAAK,MAAA,CAAO,MAAA,EAAQ,KAAK,CAAA,EAAG;AAClD,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA;AACxB,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAI,OAAO,KAAA,EAAO;AAChB,UAAA,KAAA,GAAQ,IAAA;AAAA,QACV;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAI,EAAA,KAAO,GAAA,IAAQ,EAAA,KAAO,GAAA,EAAK;AAC7B,QAAA,KAAA,GAAQ,EAAA;AACR,QAAA;AAAA,MACF;AACA,MAAA,IAAI,OAAO,GAAA,EAAK;AACd,QAAA,OAAO,CAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,EAAA;AAAA,EACT;AAAA,EAEQ,gBAAgB,KAAA,EAAuB;AAC7C,IAAA,IAAI,KAAA,GAAuB,IAAA;AAC3B,IAAA,IAAI,YAAA,GAAe,CAAA;AAEnB,IAAA,KAAA,IAAS,IAAI,KAAA,EAAO,CAAA,GAAI,KAAK,MAAA,CAAO,MAAA,EAAQ,KAAK,CAAA,EAAG;AAClD,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA;AACxB,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAI,OAAO,KAAA,EAAO;AAChB,UAAA,KAAA,GAAQ,IAAA;AAAA,QACV;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAI,EAAA,KAAO,GAAA,IAAQ,EAAA,KAAO,GAAA,EAAK;AAC7B,QAAA,KAAA,GAAQ,EAAA;AACR,QAAA;AAAA,MACF;AACA,MAAA,IAAI,OAAO,GAAA,EAAK;AACd,QAAA,YAAA,IAAgB,CAAA;AAChB,QAAA;AAAA,MACF;AACA,MAAA,IAAI,OAAO,GAAA,EAAK;AACd,QAAA,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,YAAA,GAAe,CAAC,CAAA;AAC3C,QAAA;AAAA,MACF;AACA,MAAA,IAAI,EAAA,KAAO,GAAA,IAAO,YAAA,KAAiB,CAAA,EAAG;AACpC,QAAA,OAAO,CAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,EAAA;AAAA,EACT;AAAA,EAEQ,UAAA,CAAW,KAAA,EAAe,KAAA,EAAe,GAAA,EAA4C;AAC3F,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,IAAA,CAAK,OAAO,eAAe,CAAA;AAAA,IAC7B;AAEA,IAAA,MAAM,KAAA,GAAQ,MAAM,KAAK,CAAA;AACzB,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,IAAA,CAAK,OAAO,eAAe,CAAA;AAAA,IAC7B;AACA,IAAA,IAAI,CAAC,IAAA,CAAK,YAAA,CAAa,KAAK,CAAA,EAAG;AAC7B,MAAA,IAAA,CAAK,MAAA,CAAO,CAAA,qBAAA,EAAwB,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,IAC9C;AAEA,IAAA,IAAI,IAAI,KAAA,GAAQ,CAAA;AAChB,IAAA,OAAO,IAAI,GAAA,EAAK;AACd,MAAA,MAAM,EAAA,GAAK,MAAM,CAAC,CAAA;AAClB,MAAA,IAAI,OAAO,MAAA,IAAa,CAAC,IAAA,CAAK,WAAA,CAAY,EAAE,CAAA,EAAG;AAC7C,QAAA;AAAA,MACF;AACA,MAAA,CAAA,IAAK,CAAA;AAAA,IACP;AAEA,IAAA,OAAO,EAAE,MAAM,KAAA,CAAM,KAAA,CAAM,OAAO,CAAC,CAAA,EAAG,KAAK,CAAA,EAAE;AAAA,EAC/C;AAAA,EAEQ,aAAa,EAAA,EAAqB;AACxC,IAAA,OAAO,WAAA,CAAY,KAAK,EAAE,CAAA;AAAA,EAC5B;AAAA,EAEQ,YAAY,EAAA,EAAqB;AACvC,IAAA,OAAO,kBAAA,CAAmB,KAAK,EAAE,CAAA;AAAA,EACnC;AAAA,EAEQ,eAAA,CAAgB,KAAA,EAAe,KAAA,EAAe,GAAA,EAAqB;AACzE,IAAA,IAAI,CAAA,GAAI,KAAA;AACR,IAAA,OAAO,IAAI,GAAA,EAAK;AACd,MAAA,MAAM,EAAA,GAAK,MAAM,CAAC,CAAA;AAClB,MAAA,IAAI,OAAO,MAAA,IAAa,CAAC,IAAA,CAAK,IAAA,CAAK,EAAE,CAAA,EAAG;AACtC,QAAA;AAAA,MACF;AACA,MAAA,CAAA,IAAK,CAAA;AAAA,IACP;AACA,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEQ,UAAA,GAA2B;AACjC,IAAA,OAAO,IAAA,CAAK,QAAQ,IAAA,CAAK,OAAA,CAAQ,SAAS,CAAC,CAAA,oBAAM,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAAA,EACrE;AAAA,EAEQ,SAAS,IAAA,EAAoB;AACnC,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK,MAAA;AACpB,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AACzC,IAAA,IAAI,gBAAgB,EAAA,EAAI;AACtB,MAAA,IAAA,CAAK,UAAU,IAAA,CAAK,MAAA;AACpB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,KAAA,CAAM,IAAI,EAAE,MAAA,GAAS,CAAA;AAC/C,IAAA,IAAA,CAAK,IAAA,IAAQ,YAAA;AACb,IAAA,IAAA,CAAK,MAAA,GAAS,KAAK,MAAA,GAAS,WAAA;AAAA,EAC9B;AAAA,EAEQ,cAAA,CAAe,MAAc,cAAA,EAAiC;AACpE,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAA,IAAI,KAAA,GAAQ,IAAA;AACZ,IAAA,IAAI,MAAA,GAAS,EAAA;AAEb,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,MAAA,GAAS,IAAA;AACT,MAAA,IAAI,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA,EAAG;AAC1B,QAAA,KAAA,GAAQ,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,MACvB;AACA,MAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AAAA,IACnB;AAEA,IAAA,IAAI,cAAA,IAAkB,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA,EAAG;AAC1C,MAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,MAAA,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,IAC3B;AAEA,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,IAAI,CAAA;AAC/C,IAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,UAAU,CAAA,CAAA;AAAA,EAC/B;AAAA,EAEQ,eAAA,GAAwB;AAC9B,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,IAAA,IAAA,CAAK,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EAC5B;AAAA,EAEQ,OAAO,OAAA,EAAwB;AACrC,IAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY,OAAA,EAAS,KAAK,MAAA,EAAQ,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,MAAM,CAAA;AAC1E,IAAA,IAAA,CAAK,OAAA,CAAQ,UAAU,KAAK,CAAA;AAC5B,IAAA,MAAM,KAAA;AAAA,EACR;AACF;;;ACplBO,IAAM,cAAN,MAAkB;AAAA,EAAlB,WAAA,GAAA;AACL,IAAA,IAAA,CAAQ,QAAmB,EAAC;AAC5B,IAAA,IAAA,CAAQ,IAAA,GAAuB,IAAA;AAE/B,IAAA,IAAA,CAAA,SAAA,GAAY,CAAC,GAAA,KAA+E;AAC1F,MAAA,MAAM,IAAA,GAAgB;AAAA,QACpB,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,YAAY,MAAA,CAAO,WAAA;AAAA,UACjB,MAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,UAAU,EAAE,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,IAAI,CAAA,KAAM,CAAC,GAAA,EAAK,IAAA,CAAK,KAAK,CAAC;AAAA,SACvE;AAAA,QACA,UAAU;AAAC,OACb;AAEA,MAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,SAAS,CAAC,CAAA;AAC/C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,QAAA,EAAU,KAAK,IAAI,CAAA;AAAA,MAC5B,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,MACd;AAEA,MAAA,IAAA,CAAK,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,IACtB,CAAA;AAEA,IAAA,IAAA,CAAA,MAAA,GAAS,CAAC,IAAA,KAAuB;AAC/B,MAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ;AACtB,QAAA;AAAA,MACF;AACA,MAAA,MAAM,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,SAAS,CAAC,CAAA;AAC7C,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA;AAAA,MACF;AACA,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,IAAY,EAAC;AACnC,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AACzC,MAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,QAAA,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA,GAAI,IAAA,GAAO,IAAA;AAAA,MACzC,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,MACpB;AACA,MAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,IAClB,CAAA;AAEA,IAAA,IAAA,CAAA,OAAA,GAAU,CAAC,IAAA,KAAuB;AAChC,MAAA,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA,IAClB,CAAA;AAEA,IAAA,IAAA,CAAA,UAAA,GAAa,MAAY;AACvB,MAAA,IAAA,CAAK,MAAM,GAAA,EAAI;AAAA,IACjB,CAAA;AAAA,EAAA;AAAA,EAEA,OAAA,GAAmB;AACjB,IAAA,IAAI,CAAC,KAAK,IAAA,EAAM;AACd,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AACA,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AACF;AAEO,SAAS,cAAA,CAAe,GAAA,EAAa,OAAA,GAAyB,EAAC,EAAY;AAChF,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,EAAA,MAAM,MAAA,GAAS,IAAI,YAAA,CAAa;AAAA,IAC9B,GAAG,OAAA;AAAA,IACH,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,YAAY,OAAA,CAAQ;AAAA,GACrB,CAAA;AAED,EAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AACf,EAAA,MAAA,CAAO,KAAA,EAAM;AACb,EAAA,OAAO,QAAQ,OAAA,EAAQ;AACzB;;;ACvEA,IAAMC,gBAAAA,GAAwG;AAAA,EAC5G,MAAA,EAAQ,KAAA;AAAA,EACR,MAAA,EAAQ,IAAA;AAAA,EACR,OAAA,EAAS,IAAA;AAAA,EACT,cAAA,EAAgB;AAClB,CAAA;AAEO,SAAS,YAAA,CAAa,IAAA,EAAe,OAAA,GAA4B,EAAC,EAAW;AAClF,EAAA,MAAM,QAAA,GAAW,EAAE,GAAGA,gBAAAA,EAAiB,GAAG,OAAA,EAAQ;AAClD,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,IAAA,EAAM,QAAA,EAAU,CAAC,CAAA;AAC5C,EAAA,IAAI,CAAC,SAAS,cAAA,EAAgB;AAC5B,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,CAAA,sCAAA,EAAyC,QAAA,CAAS,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA;AACzE;AAEA,SAAS,aAAA,CAAc,IAAA,EAAe,OAAA,EAAqC,KAAA,EAAuB;AAChG,EAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,IAAA,CAAK,UAAU,CAAA;AACjD,EAAA,MAAM,OAAA,GAAU,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,GAAG,KAAK,CAAA,CAAA,CAAA;AACrC,EAAA,MAAM,QAAA,GAAW,CAAA,EAAA,EAAK,IAAA,CAAK,IAAI,CAAA,CAAA,CAAA;AAE/B,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,IAAY,EAAC;AACnC,EAAA,IAAI,CAAC,SAAS,MAAA,EAAQ;AACpB,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACnB,MAAA,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA;AAAA,IAC9B;AACA,IAAA,MAAMC,OAAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA;AAC1C,IAAA,OAAO,GAAGA,OAAM,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,GAAG,KAAK,CAAA,EAAA,CAAA;AAAA,EACvC;AAEA,EAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACnB,IAAA,MAAMC,MAAAA,GAAQ,QAAA,CAAS,GAAA,CAAI,CAAC,KAAA,KAAU,cAAA,CAAe,KAAA,EAAO,OAAA,EAAS,KAAA,GAAQ,CAAC,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AACxF,IAAA,OAAO,CAAA,EAAG,OAAO,CAAA,EAAGA,MAAK,GAAG,QAAQ,CAAA,CAAA;AAAA,EACtC;AAEA,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA;AAC1C,EAAA,MAAM,sBAAsB,QAAA,CAAS,KAAA,CAAM,CAAC,KAAA,KAAU,OAAO,UAAU,QAAQ,CAAA;AAC/E,EAAA,IAAI,mBAAA,EAAqB;AACvB,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,GAAA,CAAI,CAAC,KAAA,KAAU,WAAW,KAAK,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AACrE,IAAA,OAAO,GAAG,MAAM,CAAA,EAAG,OAAO,CAAA,EAAG,UAAU,GAAG,QAAQ,CAAA,CAAA;AAAA,EACpD;AACA,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAC,CAAA;AACnD,EAAA,MAAM,UAAA,GAAa,CAAA,EAAG,MAAM,CAAA,EAAG,OAAO,CAAA,CAAA;AACtC,EAAA,MAAM,WAAA,GAAc,CAAA,EAAG,MAAM,CAAA,EAAG,QAAQ,CAAA,CAAA;AACxC,EAAA,MAAM,QAAQ,QAAA,CACX,GAAA;AAAA,IAAI,CAAC,KAAA,KACJ,OAAO,KAAA,KAAU,QAAA,GACb,GAAG,WAAW,CAAA,EAAG,UAAA,CAAW,KAAK,CAAC,CAAA,CAAA,GAClC,aAAA,CAAc,KAAA,EAAO,OAAA,EAAS,QAAQ,CAAC;AAAA,GAC7C,CACC,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAA;AAEvB,EAAA,OAAO,CAAA,EAAG,UAAU,CAAA,EAAG,OAAA,CAAQ,OAAO,CAAA,EAAG,KAAK,CAAA,EAAG,OAAA,CAAQ,OAAO,CAAA,EAAG,WAAW,CAAA,CAAA;AAChF;AAEA,SAAS,cAAA,CAAe,KAAA,EAAiB,OAAA,EAAqC,KAAA,EAAuB;AACnG,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,WAAW,KAAK,CAAA;AAAA,EACzB;AACA,EAAA,OAAO,aAAA,CAAc,KAAA,EAAO,OAAA,EAAS,KAAK,CAAA;AAC5C;AAEA,SAAS,oBAAoB,KAAA,EAAwC;AACnE,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAO,OAAA,CAAQ,KAAK,EACxB,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,MAAM,CAAA,CAAA,EAAI,GAAG,KAAK,eAAA,CAAgB,KAAK,CAAC,CAAA,CAAA,CAAG,CAAA,CAC3D,KAAK,EAAE,CAAA;AACZ;AAEA,SAAS,WAAW,KAAA,EAAuB;AACzC,EAAA,OAAO,KAAA,CACJ,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA,CACrB,OAAA,CAAQ,IAAA,EAAM,MAAM,CAAA,CACpB,OAAA,CAAQ,IAAA,EAAM,MAAM,CAAA;AACzB;AAEA,SAAS,gBAAgB,KAAA,EAAuB;AAC9C,EAAA,OAAO,UAAA,CAAW,KAAK,CAAA,CAAE,OAAA,CAAQ,MAAM,QAAQ,CAAA;AACjD","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\nconst NAMED_ENTITIES: Record<string, string> = {\n lt: \"<\",\n gt: \">\",\n amp: \"&\",\n quot: \"\\\"\",\n apos: \"'\"\n};\n\nexport function decodeEntities(input: string, onError?: (error: Error) => void): string {\n let output = \"\";\n let i = 0;\n\n while (i < input.length) {\n const ch = input[i];\n if (ch !== \"&\") {\n output += ch;\n i += 1;\n continue;\n }\n\n const semi = input.indexOf(\";\", i + 1);\n if (semi === -1) {\n const err = new XmlSaxError(\"Unterminated entity\", i, 0, 0);\n onError?.(err);\n throw err;\n }\n\n const entity = input.slice(i + 1, semi);\n let decoded: string | undefined;\n\n if (entity.startsWith(\"#x\") || entity.startsWith(\"#X\")) {\n const codePoint = Number.parseInt(entity.slice(2), 16);\n decoded = decodeCodePoint(codePoint);\n } else if (entity.startsWith(\"#\")) {\n const codePoint = Number.parseInt(entity.slice(1), 10);\n decoded = decodeCodePoint(codePoint);\n } else {\n decoded = NAMED_ENTITIES[entity];\n }\n\n if (decoded === undefined) {\n const err = new XmlSaxError(`Unknown entity: &${entity};`, i, 0, 0);\n onError?.(err);\n throw err;\n }\n\n output += decoded;\n i = semi + 1;\n }\n\n return output;\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 const nextSemi = text.indexOf(\";\", lastAmp + 1);\n if (nextSemi === -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 resolved: ResolvedName;\n ns: NamespaceMap;\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<Pick<ParserOptions, \"xmlns\" | \"includeNamespaceAttributes\" | \"allowDoctype\">> = {\n xmlns: true,\n includeNamespaceAttributes: false,\n allowDoctype: true\n};\n\nconst XML_NAMESPACE_URI = \"http://www.w3.org/XML/1998/namespace\";\nconst XMLNS_NAMESPACE_URI = \"http://www.w3.org/2000/xmlns/\";\n\nexport class XmlSaxParser {\n private options: ParserOptions;\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\n constructor(options: ParserOptions = {}) {\n this.options = { ...DEFAULT_OPTIONS, ...options };\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 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 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\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 const markup = this.buffer.slice(lt, lt + consumed);\n this._advance(markup);\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 this._flushPendingCR();\n\n if (this.buffer.startsWith(\"<!--\", start)) {\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.options.onComment?.(comment);\n return end + 3 - start;\n }\n\n if (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.options.onCdata?.(normalized);\n }\n return end + 3 - start;\n }\n\n if (this.buffer.startsWith(\"<?\", start)) {\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(/\\s/);\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.options.onProcessingInstruction?.(pi);\n return end + 2 - start;\n }\n\n if (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.options.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.options.onDoctype?.(doctype);\n return end + 1 - start;\n }\n\n if (this.buffer.startsWith(\"</\", start)) {\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 const raw = this.buffer.slice(start + 2, end).trim();\n const parsed = this._parseName(raw, 0, raw.length);\n if (raw.slice(parsed.end).trim().length > 0) {\n this._error(\"Invalid closing tag\");\n }\n this._handleCloseTag(parsed.name);\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 const content = this.buffer.slice(start + 1, tagEnd);\n this._handleStartTag(content);\n return tagEnd + 1 - start;\n }\n\n private _handleStartTag(content: string): void {\n const trimmed = content.trim();\n const selfClosing = trimmed.endsWith(\"/\");\n const body = selfClosing ? trimmed.slice(0, -1).trim() : trimmed;\n const parsed = this._parseTagBody(body);\n\n let ns = this._currentNs();\n if (this.options.xmlns) {\n ns = Object.create(ns) as NamespaceMap;\n for (const attr of parsed.attributes) {\n if (attr.name === \"xmlns\") {\n ns[\"\"] = attr.value;\n } else if (attr.name.startsWith(\"xmlns:\")) {\n ns[attr.name.slice(6)] = attr.value;\n }\n }\n }\n\n const resolvedName = this._resolveName(parsed.name, ns);\n const attributes: Record<string, XmlAttribute> = {};\n\n for (const attr of parsed.attributes) {\n if (this.options.xmlns && !this.options.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.options.onOpenTag?.(tag);\n\n if (selfClosing) {\n const closeTag: CloseTag = {\n name: resolvedName.name,\n prefix: resolvedName.prefix,\n local: resolvedName.local,\n uri: resolvedName.uri\n };\n this.options.onCloseTag?.(closeTag);\n return;\n }\n\n this.elementStack.push({ rawName: parsed.name, resolved: resolvedName, ns });\n this.nsStack.push(ns);\n }\n\n private _handleCloseTag(rawName: string): void {\n const entry = this.elementStack.pop();\n const ns = this.nsStack.pop();\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 const closeTag: CloseTag = {\n name: entry.resolved.name,\n prefix: entry.resolved.prefix,\n local: entry.resolved.local,\n uri: entry.resolved.uri\n };\n\n this.options.onCloseTag?.(closeTag);\n }\n\n private _parseTagBody(body: string): { name: string; attributes: RawAttribute[] } {\n let i = 0;\n const length = body.length;\n\n i = this._skipWhitespace(body, i, length);\n const parsedName = this._parseName(body, i, length);\n i = parsedName.end;\n\n const attributes: RawAttribute[] = [];\n\n while (i < length) {\n i = this._skipWhitespace(body, i, length);\n if (i >= length) {\n break;\n }\n\n const attrName = this._parseName(body, i, length);\n i = attrName.end;\n i = this._skipWhitespace(body, i, length);\n\n if (body[i] !== \"=\") {\n this._error(\"Attribute without '='\");\n }\n i += 1;\n i = this._skipWhitespace(body, i, length);\n\n const quote = body[i];\n if (quote !== \"\\\"\" && quote !== \"'\") {\n this._error(\"Attribute value must be quoted\");\n }\n i += 1;\n\n const valueEnd = body.indexOf(quote, i);\n if (valueEnd === -1) {\n this._error(\"Unterminated attribute value\");\n }\n const rawValue = body.slice(i, valueEnd);\n const normalized = rawValue.replace(/\\r\\n?/g, \"\\n\");\n const value = decodeEntities(normalized, this.options.onError);\n attributes.push({ name: attrName.name, value });\n i = valueEnd + 1;\n }\n\n return { name: parsedName.name, attributes };\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 const decoded = decodeEntities(normalized, this.options.onError);\n if (decoded.length > 0) {\n this.options.onText?.(decoded);\n }\n }\n\n private _resolveName(rawName: string, ns: NamespaceMap): ResolvedName {\n if (!this.options.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.options.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 let quote: string | null = null;\n for (let i = start; i < this.buffer.length; i += 1) {\n const ch = this.buffer[i];\n if (quote) {\n if (ch === quote) {\n quote = null;\n }\n continue;\n }\n if (ch === \"\\\"\" || ch === \"'\") {\n quote = ch;\n continue;\n }\n if (ch === \">\") {\n return i;\n }\n }\n return -1;\n }\n\n private _findDoctypeEnd(start: number): number {\n let quote: string | null = null;\n let bracketDepth = 0;\n\n for (let i = start; i < this.buffer.length; i += 1) {\n const ch = this.buffer[i];\n if (quote) {\n if (ch === quote) {\n quote = null;\n }\n continue;\n }\n if (ch === \"\\\"\" || ch === \"'\") {\n quote = ch;\n continue;\n }\n if (ch === \"[\") {\n bracketDepth += 1;\n continue;\n }\n if (ch === \"]\") {\n bracketDepth = Math.max(0, bracketDepth - 1);\n continue;\n }\n if (ch === \">\" && 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 first = input[start];\n if (first === undefined) {\n this._error(\"Expected name\");\n }\n if (!this._isNameStart(first)) {\n this._error(`Invalid name start: '${first}'`);\n }\n\n let i = start + 1;\n while (i < end) {\n const ch = input[i];\n if (ch === undefined || !this._isNameChar(ch)) {\n break;\n }\n i += 1;\n }\n\n return { name: input.slice(start, i), end: i };\n }\n\n private _isNameStart(ch: string): boolean {\n return /[A-Za-z_]/.test(ch);\n }\n\n private _isNameChar(ch: string): boolean {\n return /[A-Za-z0-9_:\\-.]/.test(ch);\n }\n\n private _skipWhitespace(input: string, start: number, end: number): number {\n let i = start;\n while (i < end) {\n const ch = input[i];\n if (ch === undefined || !/\\s/.test(ch)) {\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 const lastNewline = text.lastIndexOf(\"\\n\");\n if (lastNewline === -1) {\n this.column += text.length;\n return;\n }\n\n const newlineCount = text.split(\"\\n\").length - 1;\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 let value = text;\n let prefix = \"\";\n\n if (this.pendingCR) {\n prefix = \"\\n\";\n if (value.startsWith(\"\\n\")) {\n value = value.slice(1);\n }\n this.pendingCR = false;\n }\n\n if (allowPendingCR && value.endsWith(\"\\r\")) {\n this.pendingCR = true;\n value = value.slice(0, -1);\n }\n\n const normalized = value.replace(/\\r\\n?/g, \"\\n\");\n return `${prefix}${normalized}`;\n }\n\n private _flushPendingCR(): void {\n if (!this.pendingCR) {\n return;\n }\n this.pendingCR = false;\n this.options.onText?.(\"\\n\");\n }\n\n private _error(message: string): never {\n const error = new XmlSaxError(message, this.offset, this.line, this.column);\n this.options.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 }> }): void => {\n const node: XmlNode = {\n name: tag.name,\n attributes: Object.fromEntries(\n Object.entries(tag.attributes).map(([key, attr]) => [key, 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 const body = serializeNode(node, settings, 0);\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"]}
|
package/dist/index.js
CHANGED
|
@@ -686,6 +686,11 @@ function serializeNode(node, options, depth) {
|
|
|
686
686
|
return `${tagOpen}${inner2}${tagClose}`;
|
|
687
687
|
}
|
|
688
688
|
const indent = options.indent.repeat(depth);
|
|
689
|
+
const hasOnlyTextChildren = children.every((child) => typeof child === "string");
|
|
690
|
+
if (hasOnlyTextChildren) {
|
|
691
|
+
const inlineText = children.map((child) => escapeText(child)).join("");
|
|
692
|
+
return `${indent}${tagOpen}${inlineText}${tagClose}`;
|
|
693
|
+
}
|
|
689
694
|
const innerIndent = options.indent.repeat(depth + 1);
|
|
690
695
|
const prettyOpen = `${indent}${tagOpen}`;
|
|
691
696
|
const prettyClose = `${indent}${tagClose}`;
|
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"],"names":["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\nconst NAMED_ENTITIES: Record<string, string> = {\n lt: \"<\",\n gt: \">\",\n amp: \"&\",\n quot: \"\\\"\",\n apos: \"'\"\n};\n\nexport function decodeEntities(input: string, onError?: (error: Error) => void): string {\n let output = \"\";\n let i = 0;\n\n while (i < input.length) {\n const ch = input[i];\n if (ch !== \"&\") {\n output += ch;\n i += 1;\n continue;\n }\n\n const semi = input.indexOf(\";\", i + 1);\n if (semi === -1) {\n const err = new XmlSaxError(\"Unterminated entity\", i, 0, 0);\n onError?.(err);\n throw err;\n }\n\n const entity = input.slice(i + 1, semi);\n let decoded: string | undefined;\n\n if (entity.startsWith(\"#x\") || entity.startsWith(\"#X\")) {\n const codePoint = Number.parseInt(entity.slice(2), 16);\n decoded = decodeCodePoint(codePoint);\n } else if (entity.startsWith(\"#\")) {\n const codePoint = Number.parseInt(entity.slice(1), 10);\n decoded = decodeCodePoint(codePoint);\n } else {\n decoded = NAMED_ENTITIES[entity];\n }\n\n if (decoded === undefined) {\n const err = new XmlSaxError(`Unknown entity: &${entity};`, i, 0, 0);\n onError?.(err);\n throw err;\n }\n\n output += decoded;\n i = semi + 1;\n }\n\n return output;\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 const nextSemi = text.indexOf(\";\", lastAmp + 1);\n if (nextSemi === -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 resolved: ResolvedName;\n ns: NamespaceMap;\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<Pick<ParserOptions, \"xmlns\" | \"includeNamespaceAttributes\" | \"allowDoctype\">> = {\n xmlns: true,\n includeNamespaceAttributes: false,\n allowDoctype: true\n};\n\nconst XML_NAMESPACE_URI = \"http://www.w3.org/XML/1998/namespace\";\nconst XMLNS_NAMESPACE_URI = \"http://www.w3.org/2000/xmlns/\";\n\nexport class XmlSaxParser {\n private options: ParserOptions;\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\n constructor(options: ParserOptions = {}) {\n this.options = { ...DEFAULT_OPTIONS, ...options };\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 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 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\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 const markup = this.buffer.slice(lt, lt + consumed);\n this._advance(markup);\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 this._flushPendingCR();\n\n if (this.buffer.startsWith(\"<!--\", start)) {\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.options.onComment?.(comment);\n return end + 3 - start;\n }\n\n if (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.options.onCdata?.(normalized);\n }\n return end + 3 - start;\n }\n\n if (this.buffer.startsWith(\"<?\", start)) {\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(/\\s/);\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.options.onProcessingInstruction?.(pi);\n return end + 2 - start;\n }\n\n if (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.options.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.options.onDoctype?.(doctype);\n return end + 1 - start;\n }\n\n if (this.buffer.startsWith(\"</\", start)) {\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 const raw = this.buffer.slice(start + 2, end).trim();\n const parsed = this._parseName(raw, 0, raw.length);\n if (raw.slice(parsed.end).trim().length > 0) {\n this._error(\"Invalid closing tag\");\n }\n this._handleCloseTag(parsed.name);\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 const content = this.buffer.slice(start + 1, tagEnd);\n this._handleStartTag(content);\n return tagEnd + 1 - start;\n }\n\n private _handleStartTag(content: string): void {\n const trimmed = content.trim();\n const selfClosing = trimmed.endsWith(\"/\");\n const body = selfClosing ? trimmed.slice(0, -1).trim() : trimmed;\n const parsed = this._parseTagBody(body);\n\n let ns = this._currentNs();\n if (this.options.xmlns) {\n ns = Object.create(ns) as NamespaceMap;\n for (const attr of parsed.attributes) {\n if (attr.name === \"xmlns\") {\n ns[\"\"] = attr.value;\n } else if (attr.name.startsWith(\"xmlns:\")) {\n ns[attr.name.slice(6)] = attr.value;\n }\n }\n }\n\n const resolvedName = this._resolveName(parsed.name, ns);\n const attributes: Record<string, XmlAttribute> = {};\n\n for (const attr of parsed.attributes) {\n if (this.options.xmlns && !this.options.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.options.onOpenTag?.(tag);\n\n if (selfClosing) {\n const closeTag: CloseTag = {\n name: resolvedName.name,\n prefix: resolvedName.prefix,\n local: resolvedName.local,\n uri: resolvedName.uri\n };\n this.options.onCloseTag?.(closeTag);\n return;\n }\n\n this.elementStack.push({ rawName: parsed.name, resolved: resolvedName, ns });\n this.nsStack.push(ns);\n }\n\n private _handleCloseTag(rawName: string): void {\n const entry = this.elementStack.pop();\n const ns = this.nsStack.pop();\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 const closeTag: CloseTag = {\n name: entry.resolved.name,\n prefix: entry.resolved.prefix,\n local: entry.resolved.local,\n uri: entry.resolved.uri\n };\n\n this.options.onCloseTag?.(closeTag);\n }\n\n private _parseTagBody(body: string): { name: string; attributes: RawAttribute[] } {\n let i = 0;\n const length = body.length;\n\n i = this._skipWhitespace(body, i, length);\n const parsedName = this._parseName(body, i, length);\n i = parsedName.end;\n\n const attributes: RawAttribute[] = [];\n\n while (i < length) {\n i = this._skipWhitespace(body, i, length);\n if (i >= length) {\n break;\n }\n\n const attrName = this._parseName(body, i, length);\n i = attrName.end;\n i = this._skipWhitespace(body, i, length);\n\n if (body[i] !== \"=\") {\n this._error(\"Attribute without '='\");\n }\n i += 1;\n i = this._skipWhitespace(body, i, length);\n\n const quote = body[i];\n if (quote !== \"\\\"\" && quote !== \"'\") {\n this._error(\"Attribute value must be quoted\");\n }\n i += 1;\n\n const valueEnd = body.indexOf(quote, i);\n if (valueEnd === -1) {\n this._error(\"Unterminated attribute value\");\n }\n const rawValue = body.slice(i, valueEnd);\n const normalized = rawValue.replace(/\\r\\n?/g, \"\\n\");\n const value = decodeEntities(normalized, this.options.onError);\n attributes.push({ name: attrName.name, value });\n i = valueEnd + 1;\n }\n\n return { name: parsedName.name, attributes };\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 const decoded = decodeEntities(normalized, this.options.onError);\n if (decoded.length > 0) {\n this.options.onText?.(decoded);\n }\n }\n\n private _resolveName(rawName: string, ns: NamespaceMap): ResolvedName {\n if (!this.options.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.options.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 let quote: string | null = null;\n for (let i = start; i < this.buffer.length; i += 1) {\n const ch = this.buffer[i];\n if (quote) {\n if (ch === quote) {\n quote = null;\n }\n continue;\n }\n if (ch === \"\\\"\" || ch === \"'\") {\n quote = ch;\n continue;\n }\n if (ch === \">\") {\n return i;\n }\n }\n return -1;\n }\n\n private _findDoctypeEnd(start: number): number {\n let quote: string | null = null;\n let bracketDepth = 0;\n\n for (let i = start; i < this.buffer.length; i += 1) {\n const ch = this.buffer[i];\n if (quote) {\n if (ch === quote) {\n quote = null;\n }\n continue;\n }\n if (ch === \"\\\"\" || ch === \"'\") {\n quote = ch;\n continue;\n }\n if (ch === \"[\") {\n bracketDepth += 1;\n continue;\n }\n if (ch === \"]\") {\n bracketDepth = Math.max(0, bracketDepth - 1);\n continue;\n }\n if (ch === \">\" && 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 first = input[start];\n if (first === undefined) {\n this._error(\"Expected name\");\n }\n if (!this._isNameStart(first)) {\n this._error(`Invalid name start: '${first}'`);\n }\n\n let i = start + 1;\n while (i < end) {\n const ch = input[i];\n if (ch === undefined || !this._isNameChar(ch)) {\n break;\n }\n i += 1;\n }\n\n return { name: input.slice(start, i), end: i };\n }\n\n private _isNameStart(ch: string): boolean {\n return /[A-Za-z_]/.test(ch);\n }\n\n private _isNameChar(ch: string): boolean {\n return /[A-Za-z0-9_:\\-.]/.test(ch);\n }\n\n private _skipWhitespace(input: string, start: number, end: number): number {\n let i = start;\n while (i < end) {\n const ch = input[i];\n if (ch === undefined || !/\\s/.test(ch)) {\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 const lastNewline = text.lastIndexOf(\"\\n\");\n if (lastNewline === -1) {\n this.column += text.length;\n return;\n }\n\n const newlineCount = text.split(\"\\n\").length - 1;\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 let value = text;\n let prefix = \"\";\n\n if (this.pendingCR) {\n prefix = \"\\n\";\n if (value.startsWith(\"\\n\")) {\n value = value.slice(1);\n }\n this.pendingCR = false;\n }\n\n if (allowPendingCR && value.endsWith(\"\\r\")) {\n this.pendingCR = true;\n value = value.slice(0, -1);\n }\n\n const normalized = value.replace(/\\r\\n?/g, \"\\n\");\n return `${prefix}${normalized}`;\n }\n\n private _flushPendingCR(): void {\n if (!this.pendingCR) {\n return;\n }\n this.pendingCR = false;\n this.options.onText?.(\"\\n\");\n }\n\n private _error(message: string): never {\n const error = new XmlSaxError(message, this.offset, this.line, this.column);\n this.options.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 }> }): void => {\n const node: XmlNode = {\n name: tag.name,\n attributes: Object.fromEntries(\n Object.entries(tag.attributes).map(([key, attr]) => [key, 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 const body = serializeNode(node, settings, 0);\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 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"]}
|
|
1
|
+
{"version":3,"sources":["../src/assert.ts","../src/errors.ts","../src/entities.ts","../src/parser.ts","../src/tree.ts","../src/serializer.ts"],"names":["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\nconst NAMED_ENTITIES: Record<string, string> = {\n lt: \"<\",\n gt: \">\",\n amp: \"&\",\n quot: \"\\\"\",\n apos: \"'\"\n};\n\nexport function decodeEntities(input: string, onError?: (error: Error) => void): string {\n let output = \"\";\n let i = 0;\n\n while (i < input.length) {\n const ch = input[i];\n if (ch !== \"&\") {\n output += ch;\n i += 1;\n continue;\n }\n\n const semi = input.indexOf(\";\", i + 1);\n if (semi === -1) {\n const err = new XmlSaxError(\"Unterminated entity\", i, 0, 0);\n onError?.(err);\n throw err;\n }\n\n const entity = input.slice(i + 1, semi);\n let decoded: string | undefined;\n\n if (entity.startsWith(\"#x\") || entity.startsWith(\"#X\")) {\n const codePoint = Number.parseInt(entity.slice(2), 16);\n decoded = decodeCodePoint(codePoint);\n } else if (entity.startsWith(\"#\")) {\n const codePoint = Number.parseInt(entity.slice(1), 10);\n decoded = decodeCodePoint(codePoint);\n } else {\n decoded = NAMED_ENTITIES[entity];\n }\n\n if (decoded === undefined) {\n const err = new XmlSaxError(`Unknown entity: &${entity};`, i, 0, 0);\n onError?.(err);\n throw err;\n }\n\n output += decoded;\n i = semi + 1;\n }\n\n return output;\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 const nextSemi = text.indexOf(\";\", lastAmp + 1);\n if (nextSemi === -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 resolved: ResolvedName;\n ns: NamespaceMap;\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<Pick<ParserOptions, \"xmlns\" | \"includeNamespaceAttributes\" | \"allowDoctype\">> = {\n xmlns: true,\n includeNamespaceAttributes: false,\n allowDoctype: true\n};\n\nconst XML_NAMESPACE_URI = \"http://www.w3.org/XML/1998/namespace\";\nconst XMLNS_NAMESPACE_URI = \"http://www.w3.org/2000/xmlns/\";\n\nexport class XmlSaxParser {\n private options: ParserOptions;\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\n constructor(options: ParserOptions = {}) {\n this.options = { ...DEFAULT_OPTIONS, ...options };\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 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 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\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 const markup = this.buffer.slice(lt, lt + consumed);\n this._advance(markup);\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 this._flushPendingCR();\n\n if (this.buffer.startsWith(\"<!--\", start)) {\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.options.onComment?.(comment);\n return end + 3 - start;\n }\n\n if (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.options.onCdata?.(normalized);\n }\n return end + 3 - start;\n }\n\n if (this.buffer.startsWith(\"<?\", start)) {\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(/\\s/);\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.options.onProcessingInstruction?.(pi);\n return end + 2 - start;\n }\n\n if (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.options.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.options.onDoctype?.(doctype);\n return end + 1 - start;\n }\n\n if (this.buffer.startsWith(\"</\", start)) {\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 const raw = this.buffer.slice(start + 2, end).trim();\n const parsed = this._parseName(raw, 0, raw.length);\n if (raw.slice(parsed.end).trim().length > 0) {\n this._error(\"Invalid closing tag\");\n }\n this._handleCloseTag(parsed.name);\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 const content = this.buffer.slice(start + 1, tagEnd);\n this._handleStartTag(content);\n return tagEnd + 1 - start;\n }\n\n private _handleStartTag(content: string): void {\n const trimmed = content.trim();\n const selfClosing = trimmed.endsWith(\"/\");\n const body = selfClosing ? trimmed.slice(0, -1).trim() : trimmed;\n const parsed = this._parseTagBody(body);\n\n let ns = this._currentNs();\n if (this.options.xmlns) {\n ns = Object.create(ns) as NamespaceMap;\n for (const attr of parsed.attributes) {\n if (attr.name === \"xmlns\") {\n ns[\"\"] = attr.value;\n } else if (attr.name.startsWith(\"xmlns:\")) {\n ns[attr.name.slice(6)] = attr.value;\n }\n }\n }\n\n const resolvedName = this._resolveName(parsed.name, ns);\n const attributes: Record<string, XmlAttribute> = {};\n\n for (const attr of parsed.attributes) {\n if (this.options.xmlns && !this.options.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.options.onOpenTag?.(tag);\n\n if (selfClosing) {\n const closeTag: CloseTag = {\n name: resolvedName.name,\n prefix: resolvedName.prefix,\n local: resolvedName.local,\n uri: resolvedName.uri\n };\n this.options.onCloseTag?.(closeTag);\n return;\n }\n\n this.elementStack.push({ rawName: parsed.name, resolved: resolvedName, ns });\n this.nsStack.push(ns);\n }\n\n private _handleCloseTag(rawName: string): void {\n const entry = this.elementStack.pop();\n const ns = this.nsStack.pop();\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 const closeTag: CloseTag = {\n name: entry.resolved.name,\n prefix: entry.resolved.prefix,\n local: entry.resolved.local,\n uri: entry.resolved.uri\n };\n\n this.options.onCloseTag?.(closeTag);\n }\n\n private _parseTagBody(body: string): { name: string; attributes: RawAttribute[] } {\n let i = 0;\n const length = body.length;\n\n i = this._skipWhitespace(body, i, length);\n const parsedName = this._parseName(body, i, length);\n i = parsedName.end;\n\n const attributes: RawAttribute[] = [];\n\n while (i < length) {\n i = this._skipWhitespace(body, i, length);\n if (i >= length) {\n break;\n }\n\n const attrName = this._parseName(body, i, length);\n i = attrName.end;\n i = this._skipWhitespace(body, i, length);\n\n if (body[i] !== \"=\") {\n this._error(\"Attribute without '='\");\n }\n i += 1;\n i = this._skipWhitespace(body, i, length);\n\n const quote = body[i];\n if (quote !== \"\\\"\" && quote !== \"'\") {\n this._error(\"Attribute value must be quoted\");\n }\n i += 1;\n\n const valueEnd = body.indexOf(quote, i);\n if (valueEnd === -1) {\n this._error(\"Unterminated attribute value\");\n }\n const rawValue = body.slice(i, valueEnd);\n const normalized = rawValue.replace(/\\r\\n?/g, \"\\n\");\n const value = decodeEntities(normalized, this.options.onError);\n attributes.push({ name: attrName.name, value });\n i = valueEnd + 1;\n }\n\n return { name: parsedName.name, attributes };\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 const decoded = decodeEntities(normalized, this.options.onError);\n if (decoded.length > 0) {\n this.options.onText?.(decoded);\n }\n }\n\n private _resolveName(rawName: string, ns: NamespaceMap): ResolvedName {\n if (!this.options.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.options.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 let quote: string | null = null;\n for (let i = start; i < this.buffer.length; i += 1) {\n const ch = this.buffer[i];\n if (quote) {\n if (ch === quote) {\n quote = null;\n }\n continue;\n }\n if (ch === \"\\\"\" || ch === \"'\") {\n quote = ch;\n continue;\n }\n if (ch === \">\") {\n return i;\n }\n }\n return -1;\n }\n\n private _findDoctypeEnd(start: number): number {\n let quote: string | null = null;\n let bracketDepth = 0;\n\n for (let i = start; i < this.buffer.length; i += 1) {\n const ch = this.buffer[i];\n if (quote) {\n if (ch === quote) {\n quote = null;\n }\n continue;\n }\n if (ch === \"\\\"\" || ch === \"'\") {\n quote = ch;\n continue;\n }\n if (ch === \"[\") {\n bracketDepth += 1;\n continue;\n }\n if (ch === \"]\") {\n bracketDepth = Math.max(0, bracketDepth - 1);\n continue;\n }\n if (ch === \">\" && 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 first = input[start];\n if (first === undefined) {\n this._error(\"Expected name\");\n }\n if (!this._isNameStart(first)) {\n this._error(`Invalid name start: '${first}'`);\n }\n\n let i = start + 1;\n while (i < end) {\n const ch = input[i];\n if (ch === undefined || !this._isNameChar(ch)) {\n break;\n }\n i += 1;\n }\n\n return { name: input.slice(start, i), end: i };\n }\n\n private _isNameStart(ch: string): boolean {\n return /[A-Za-z_]/.test(ch);\n }\n\n private _isNameChar(ch: string): boolean {\n return /[A-Za-z0-9_:\\-.]/.test(ch);\n }\n\n private _skipWhitespace(input: string, start: number, end: number): number {\n let i = start;\n while (i < end) {\n const ch = input[i];\n if (ch === undefined || !/\\s/.test(ch)) {\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 const lastNewline = text.lastIndexOf(\"\\n\");\n if (lastNewline === -1) {\n this.column += text.length;\n return;\n }\n\n const newlineCount = text.split(\"\\n\").length - 1;\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 let value = text;\n let prefix = \"\";\n\n if (this.pendingCR) {\n prefix = \"\\n\";\n if (value.startsWith(\"\\n\")) {\n value = value.slice(1);\n }\n this.pendingCR = false;\n }\n\n if (allowPendingCR && value.endsWith(\"\\r\")) {\n this.pendingCR = true;\n value = value.slice(0, -1);\n }\n\n const normalized = value.replace(/\\r\\n?/g, \"\\n\");\n return `${prefix}${normalized}`;\n }\n\n private _flushPendingCR(): void {\n if (!this.pendingCR) {\n return;\n }\n this.pendingCR = false;\n this.options.onText?.(\"\\n\");\n }\n\n private _error(message: string): never {\n const error = new XmlSaxError(message, this.offset, this.line, this.column);\n this.options.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 }> }): void => {\n const node: XmlNode = {\n name: tag.name,\n attributes: Object.fromEntries(\n Object.entries(tag.attributes).map(([key, attr]) => [key, 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 const body = serializeNode(node, settings, 0);\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"]}
|
package/package.json
CHANGED
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xml-sax-ts",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "One-pass, streaming (SAX-style) XML parser for TypeScript (Node.js & browsers)",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"xml",
|
|
7
|
+
"sax",
|
|
8
|
+
"parser",
|
|
9
|
+
"streaming",
|
|
10
|
+
"typescript",
|
|
11
|
+
"one-pass"
|
|
12
|
+
],
|
|
5
13
|
"license": "MIT",
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "https://github.com/aaronzi/xml-sax-ts"
|
|
17
|
+
},
|
|
6
18
|
"type": "module",
|
|
7
19
|
"main": "./dist/index.cjs",
|
|
8
20
|
"module": "./dist/index.js",
|