xml-sax-ts 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -82,6 +82,31 @@ const obj = builder.getResult();
82
82
  // { item: ["1", "2"] }
83
83
  ```
84
84
 
85
+ ### Object to XML
86
+
87
+ ```ts
88
+ import { objectToXml } from "xml-sax-ts";
89
+
90
+ const xml = objectToXml({
91
+ root: {
92
+ "@_id": "1",
93
+ item: ["1", "2"],
94
+ }
95
+ });
96
+
97
+ // <root id="1"><item>1</item><item>2</item></root>
98
+ ```
99
+
100
+ ```ts
101
+ import { buildObject, objectToXml, parseXmlString } from "xml-sax-ts";
102
+
103
+ const root = parseXmlString("<root id='1'><item>1</item></root>");
104
+ const obj = buildObject(root);
105
+ const xml = objectToXml(obj, { rootName: "root" });
106
+
107
+ // <root id="1"><item>1</item></root>
108
+ ```
109
+
85
110
  ### Serialize to XML
86
111
 
87
112
  ```ts
@@ -157,6 +182,24 @@ Streaming builder that produces the same object shape as `buildObject` without b
157
182
  | `arrayElements` | `Set\<string\> \| (name: string, path: string[]) => boolean` | — | Force specific elements to always be arrays |
158
183
  | `coalesceText` | `boolean` | `true` | Merge adjacent text nodes into a single string |
159
184
 
185
+ ### `buildXmlNode(obj, options?)`
186
+
187
+ Converts a plain object into an `XmlNode` tree using the same attribute/text conventions as `buildObject`.
188
+
189
+ ### `objectToXml(obj, options?)`
190
+
191
+ Builds an `XmlNode` with `buildXmlNode` and serializes it with `serializeXml`.
192
+
193
+ #### `XmlBuilderOptions`
194
+
195
+ | Option | Type | Default | Description |
196
+ | ------------------ | ------------------------------------------------------------ | --------- | ---------------------------------------------- |
197
+ | `attributePrefix` | `string` | `"@_"` | Prefix for attribute keys |
198
+ | `textKey` | `string` | `"#text"` | Key used for text nodes |
199
+ | `stripNamespaces` | `boolean` | `false` | Strip namespace prefixes from names |
200
+ | `arrayElements` | `Set\<string\> \| (name: string, path: string[]) => boolean` | — | Force specific elements to always be arrays |
201
+ | `rootName` | `string` | — | Root element name when object has multiple keys |
202
+
160
203
  ### `serializeXml(node, options?)`
161
204
 
162
205
  Serializes an `XmlNode` back to an XML string.
@@ -176,7 +219,7 @@ Custom error class thrown on parse errors. Includes `offset`, `line`, and `colum
176
219
 
177
220
  ### Exported types
178
221
 
179
- `OpenTag` · `CloseTag` · `XmlAttribute` · `ProcessingInstruction` · `Doctype` · `XmlNode` · `XmlChild` · `XmlPosition` · `ParserOptions` · `SerializeOptions` · `ObjectBuilderOptions` · `ArrayElementSelector` · `XmlObjectMap` · `XmlObjectValue`
222
+ `OpenTag` · `CloseTag` · `XmlAttribute` · `ProcessingInstruction` · `Doctype` · `XmlNode` · `XmlChild` · `XmlPosition` · `ParserOptions` · `SerializeOptions` · `ObjectBuilderOptions` · `ArrayElementSelector` · `XmlObjectMap` · `XmlObjectValue` · `XmlBuilderOptions` · `XmlInputObject` · `XmlInputValue` · `ObjectToXmlOptions`
180
223
 
181
224
  ## Features
182
225
 
package/dist/index.cjs CHANGED
@@ -761,6 +761,16 @@ function buildObject(root, options = {}) {
761
761
  const settings = buildSettings(options);
762
762
  return buildNode(root, settings, []);
763
763
  }
764
+ function buildXmlNode(obj, options = {}) {
765
+ const settings = buildXmlSettings(options);
766
+ const root = resolveRoot(obj, settings);
767
+ const rootName = normalizeName(root.name, settings);
768
+ return buildElement(rootName, root.value, settings, []);
769
+ }
770
+ function objectToXml(obj, options = {}) {
771
+ const node = buildXmlNode(obj, options);
772
+ return serializeXml(node, options);
773
+ }
764
774
  var ObjectBuilder = class {
765
775
  constructor(options = {}) {
766
776
  this.stack = [];
@@ -823,6 +833,9 @@ var ObjectBuilder = class {
823
833
  function buildSettings(options) {
824
834
  return { ...DEFAULT_OBJECT_OPTIONS, ...options };
825
835
  }
836
+ function buildXmlSettings(options) {
837
+ return { ...DEFAULT_OBJECT_OPTIONS, ...options };
838
+ }
826
839
  function buildNode(node, options, path) {
827
840
  const name = normalizeName(node.name, options);
828
841
  const attributes = normalizeAttributeMap(node.attributes ?? {}, options);
@@ -851,6 +864,12 @@ function normalizeName(name, options) {
851
864
  }
852
865
  return name;
853
866
  }
867
+ function normalizeXmlName(name, options) {
868
+ if (options.stripNamespaces) {
869
+ return stripNamespace(name);
870
+ }
871
+ return name;
872
+ }
854
873
  function normalizeAttributes(attributes, options) {
855
874
  const result = /* @__PURE__ */ Object.create(null);
856
875
  for (const [key, attr] of Object.entries(attributes)) {
@@ -890,6 +909,151 @@ function shouldForceArray(name, path, options) {
890
909
  }
891
910
  return rule(name, path);
892
911
  }
912
+ function resolveRoot(obj, options) {
913
+ if (isRecord(obj)) {
914
+ const keys = Object.keys(obj);
915
+ if (keys.length === 1) {
916
+ const name = keys[0] ?? "";
917
+ return { name, value: obj[name] };
918
+ }
919
+ }
920
+ if (!options.rootName) {
921
+ throw new Error("Root element name is required when object has multiple keys");
922
+ }
923
+ return { name: options.rootName, value: obj };
924
+ }
925
+ function buildElement(name, value, options, path) {
926
+ const attributes = /* @__PURE__ */ Object.create(null);
927
+ const children = [];
928
+ const nextPath = [...path, name];
929
+ if (Array.isArray(value)) {
930
+ for (const item of value) {
931
+ appendContent(children, item, options, nextPath);
932
+ }
933
+ return finalizeNode(name, attributes, children);
934
+ }
935
+ if (isPrimitive(value)) {
936
+ const text = coerceText(value);
937
+ if (text !== null) {
938
+ children.push(text);
939
+ }
940
+ return finalizeNode(name, attributes, children);
941
+ }
942
+ if (isRecord(value)) {
943
+ for (const [key, entryValue] of Object.entries(value)) {
944
+ if (isAttributeKey(key, options)) {
945
+ const attrName = normalizeXmlName(key.slice(options.attributePrefix.length), options);
946
+ const attrValue = coerceText(entryValue);
947
+ if (attrValue !== null) {
948
+ attributes[attrName] = attrValue;
949
+ }
950
+ continue;
951
+ }
952
+ if (key === options.textKey) {
953
+ appendText(children, entryValue, options);
954
+ continue;
955
+ }
956
+ const childName = normalizeXmlName(key, options);
957
+ addChildElements(children, childName, entryValue, options, nextPath);
958
+ }
959
+ }
960
+ return finalizeNode(name, attributes, children);
961
+ }
962
+ function addChildElements(children, name, value, options, path) {
963
+ const forcedArray = shouldForceArray(name, path, options);
964
+ const items = Array.isArray(value) ? value : forcedArray ? [value] : [value];
965
+ for (const item of items) {
966
+ if (item === void 0 || item === null) {
967
+ children.push({ name });
968
+ continue;
969
+ }
970
+ children.push(buildElement(name, item, options, path));
971
+ }
972
+ }
973
+ function appendContent(children, value, options, path) {
974
+ if (value === void 0 || value === null) {
975
+ return;
976
+ }
977
+ if (Array.isArray(value)) {
978
+ for (const item of value) {
979
+ appendContent(children, item, options, path);
980
+ }
981
+ return;
982
+ }
983
+ if (isPrimitive(value)) {
984
+ const text = coerceText(value);
985
+ if (text !== null) {
986
+ children.push(text);
987
+ }
988
+ return;
989
+ }
990
+ if (isRecord(value)) {
991
+ for (const [key, entryValue] of Object.entries(value)) {
992
+ const childName = normalizeXmlName(key, options);
993
+ addChildElements(children, childName, entryValue, options, path);
994
+ }
995
+ }
996
+ }
997
+ function appendText(children, value, options) {
998
+ if (value === void 0 || value === null) {
999
+ return;
1000
+ }
1001
+ if (Array.isArray(value)) {
1002
+ const parts = value.map((item) => coerceText(item)).filter((item) => item !== null);
1003
+ if (parts.length === 0) {
1004
+ return;
1005
+ }
1006
+ if (options.coalesceText) {
1007
+ children.push(parts.join(""));
1008
+ return;
1009
+ }
1010
+ for (const part of parts) {
1011
+ children.push(part);
1012
+ }
1013
+ return;
1014
+ }
1015
+ const text = coerceText(value);
1016
+ if (text !== null) {
1017
+ children.push(text);
1018
+ }
1019
+ }
1020
+ function finalizeNode(name, attributes, children) {
1021
+ const node = { name };
1022
+ if (Object.keys(attributes).length > 0) {
1023
+ node.attributes = attributes;
1024
+ }
1025
+ if (children.length > 0) {
1026
+ node.children = children;
1027
+ }
1028
+ return node;
1029
+ }
1030
+ function isAttributeKey(key, options) {
1031
+ if (!options.attributePrefix) {
1032
+ return false;
1033
+ }
1034
+ return key.startsWith(options.attributePrefix) && key.length > options.attributePrefix.length;
1035
+ }
1036
+ function isRecord(value) {
1037
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1038
+ }
1039
+ function isPrimitive(value) {
1040
+ return typeof value === "string" || typeof value === "number" || typeof value === "boolean";
1041
+ }
1042
+ function coerceText(value) {
1043
+ if (value === void 0 || value === null) {
1044
+ return null;
1045
+ }
1046
+ if (typeof value === "string") {
1047
+ return value;
1048
+ }
1049
+ if (typeof value === "number" || typeof value === "boolean") {
1050
+ return String(value);
1051
+ }
1052
+ if (value instanceof Date) {
1053
+ return value.toISOString();
1054
+ }
1055
+ return null;
1056
+ }
893
1057
  function finalizeElement(state, options) {
894
1058
  const hasAttributes = Object.keys(state.attributes).length > 0;
895
1059
  const hasChildren = Object.keys(state.children).length > 0;
@@ -919,6 +1083,8 @@ exports.TreeBuilder = TreeBuilder;
919
1083
  exports.XmlSaxError = XmlSaxError;
920
1084
  exports.XmlSaxParser = XmlSaxParser;
921
1085
  exports.buildObject = buildObject;
1086
+ exports.buildXmlNode = buildXmlNode;
1087
+ exports.objectToXml = objectToXml;
922
1088
  exports.parseXmlString = parseXmlString;
923
1089
  exports.resolveName = resolveName;
924
1090
  exports.serializeXml = serializeXml;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/assert.ts","../src/errors.ts","../src/entities.ts","../src/parser.ts","../src/tree.ts","../src/serializer.ts","../src/object.ts"],"names":["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 let body = serializeNode(node, settings, 0);\n if (settings.pretty && !body.endsWith(settings.newline)) {\n body = `${body}${settings.newline}`;\n }\n if (!settings.xmlDeclaration) {\n return body;\n }\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>${settings.newline}${body}`;\n}\n\nfunction serializeNode(node: XmlNode, options: Required<SerializeOptions>, depth: number): string {\n const attrs = serializeAttributes(node.attributes);\n const tagOpen = `<${node.name}${attrs}>`;\n const tagClose = `</${node.name}>`;\n\n const children = node.children ?? [];\n if (!children.length) {\n if (!options.pretty) {\n return `<${node.name}${attrs}/>`;\n }\n const indent = options.indent.repeat(depth);\n return `${indent}<${node.name}${attrs}/>`;\n }\n\n if (!options.pretty) {\n const inner = children.map((child) => serializeChild(child, options, depth + 1)).join(\"\");\n return `${tagOpen}${inner}${tagClose}`;\n }\n\n const indent = options.indent.repeat(depth);\n const hasOnlyTextChildren = children.every((child) => typeof child === \"string\");\n if (hasOnlyTextChildren) {\n const inlineText = children.map((child) => escapeText(child)).join(\"\");\n return `${indent}${tagOpen}${inlineText}${tagClose}`;\n }\n const innerIndent = options.indent.repeat(depth + 1);\n const prettyOpen = `${indent}${tagOpen}`;\n const prettyClose = `${indent}${tagClose}`;\n const inner = children\n .map((child) =>\n typeof child === \"string\"\n ? `${innerIndent}${escapeText(child)}`\n : serializeNode(child, options, depth + 1)\n )\n .join(options.newline);\n\n return `${prettyOpen}${options.newline}${inner}${options.newline}${prettyClose}`;\n}\n\nfunction serializeChild(child: XmlChild, options: Required<SerializeOptions>, depth: number): string {\n if (typeof child === \"string\") {\n return escapeText(child);\n }\n return serializeNode(child, options, depth);\n}\n\nfunction serializeAttributes(attrs?: Record<string, string>): string {\n if (!attrs) {\n return \"\";\n }\n return Object.entries(attrs)\n .map(([key, value]) => ` ${key}=\"${escapeAttribute(value)}\"`)\n .join(\"\");\n}\n\nfunction escapeText(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction escapeAttribute(value: string): string {\n return escapeText(value).replace(/\"/g, \"&quot;\");\n}\n","import type {\n ObjectBuilderOptions,\n OpenTag,\n XmlAttribute,\n XmlNode,\n XmlObjectMap,\n XmlObjectValue\n} from \"./types\";\n\ninterface ElementState {\n name: string;\n attributes: Record<string, string>;\n textParts: string[];\n children: Record<string, XmlObjectValue | XmlObjectValue[]>;\n}\n\nconst DEFAULT_OBJECT_OPTIONS: Required<Omit<ObjectBuilderOptions, \"arrayElements\">> = {\n attributePrefix: \"@_\",\n textKey: \"#text\",\n stripNamespaces: false,\n coalesceText: true\n};\n\ntype ObjectBuilderSettings = Required<Omit<ObjectBuilderOptions, \"arrayElements\">> &\n Pick<ObjectBuilderOptions, \"arrayElements\">;\n\nexport function stripNamespace(name: string): string {\n const index = name.indexOf(\":\");\n if (index === -1) {\n return name;\n }\n return name.slice(index + 1);\n}\n\nexport function resolveName(\n value: string | Pick<OpenTag, \"name\" | \"prefix\" | \"local\" | \"uri\">\n): { name: string; localName: string; prefix: string; uri: string } {\n if (typeof value !== \"string\") {\n return {\n name: value.name,\n localName: value.local,\n prefix: value.prefix,\n uri: value.uri\n };\n }\n\n const index = value.indexOf(\":\");\n if (index === -1) {\n return { name: value, localName: value, prefix: \"\", uri: \"\" };\n }\n\n return {\n name: value,\n localName: value.slice(index + 1),\n prefix: value.slice(0, index),\n uri: \"\"\n };\n}\n\nexport function buildObject(root: XmlNode, options: ObjectBuilderOptions = {}): XmlObjectValue {\n const settings = buildSettings(options);\n return buildNode(root, settings, []);\n}\n\nexport class ObjectBuilder {\n private options: ObjectBuilderSettings;\n private stack: ElementState[] = [];\n private root: XmlObjectValue | null = null;\n private rootName: string | null = null;\n\n constructor(options: ObjectBuilderOptions = {}) {\n this.options = buildSettings(options);\n }\n\n onOpenTag = (tag: OpenTag): void => {\n const name = normalizeName(tag.name, this.options);\n const attributes = normalizeAttributes(tag.attributes, this.options);\n const state: ElementState = {\n name,\n attributes,\n textParts: [],\n children: Object.create(null) as Record<string, XmlObjectValue | XmlObjectValue[]>\n };\n\n this.rootName ??= name;\n\n this.stack.push(state);\n };\n\n onText = (text: string): void => {\n if (!text) {\n return;\n }\n const current = this.stack[this.stack.length - 1];\n if (!current) {\n return;\n }\n current.textParts.push(text);\n };\n\n onCdata = (text: string): void => {\n this.onText(text);\n };\n\n onCloseTag = (): void => {\n const state = this.stack.pop();\n if (!state) {\n return;\n }\n\n const value = finalizeElement(state, this.options);\n const parent = this.stack[this.stack.length - 1];\n\n if (!parent) {\n this.root = value;\n return;\n }\n\n const path = this.stack.map((entry) => entry.name);\n addChild(parent.children, state.name, value, this.options, path);\n };\n\n getResult(): XmlObjectValue {\n if (this.root === null) {\n throw new Error(\"No root element found\");\n }\n return this.root;\n }\n\n getRootName(): string {\n if (!this.rootName) {\n throw new Error(\"No root element found\");\n }\n return this.rootName;\n }\n}\n\nfunction buildSettings(options: ObjectBuilderOptions): ObjectBuilderSettings {\n return { ...DEFAULT_OBJECT_OPTIONS, ...options };\n}\n\nfunction buildNode(node: XmlNode, options: ObjectBuilderSettings, path: string[]): XmlObjectValue {\n const name = normalizeName(node.name, options);\n const attributes = normalizeAttributeMap(node.attributes ?? {}, options);\n const state: ElementState = {\n name,\n attributes,\n textParts: [],\n children: Object.create(null) as Record<string, XmlObjectValue | XmlObjectValue[]>\n };\n\n const children = node.children ?? [];\n for (const child of children) {\n if (typeof child === \"string\") {\n if (child) {\n state.textParts.push(child);\n }\n continue;\n }\n\n const value = buildNode(child, options, [...path, name]);\n const childName = normalizeName(child.name, options);\n addChild(state.children, childName, value, options, [...path, name]);\n }\n\n return finalizeElement(state, options);\n}\n\nfunction normalizeName(name: string, options: ObjectBuilderSettings): string {\n if (options.stripNamespaces) {\n return stripNamespace(name);\n }\n return name;\n}\n\nfunction normalizeAttributes(\n attributes: Record<string, XmlAttribute>,\n options: ObjectBuilderSettings\n): Record<string, string> {\n const result: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const [key, attr] of Object.entries(attributes)) {\n const name = normalizeName(key, options);\n result[name] = attr.value;\n }\n return result;\n}\n\nfunction normalizeAttributeMap(\n attributes: Record<string, string>,\n options: ObjectBuilderSettings\n): Record<string, string> {\n const result: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const [key, value] of Object.entries(attributes)) {\n const name = normalizeName(key, options);\n result[name] = value;\n }\n return result;\n}\n\nfunction addChild(\n target: Record<string, XmlObjectValue | XmlObjectValue[]>,\n name: string,\n value: XmlObjectValue,\n options: ObjectBuilderSettings,\n path: string[]\n): void {\n const forcedArray = shouldForceArray(name, path, options);\n const existing = target[name];\n\n if (existing === undefined) {\n target[name] = forcedArray ? [value] : value;\n return;\n }\n\n if (Array.isArray(existing)) {\n existing.push(value);\n return;\n }\n\n target[name] = [existing, value];\n}\n\nfunction shouldForceArray(name: string, path: string[], options: ObjectBuilderSettings): boolean {\n const rule = options.arrayElements;\n if (!rule) {\n return false;\n }\n if (rule instanceof Set) {\n return rule.has(name);\n }\n return rule(name, path);\n}\n\nfunction finalizeElement(state: ElementState, options: ObjectBuilderSettings): XmlObjectValue {\n const hasAttributes = Object.keys(state.attributes).length > 0;\n const hasChildren = Object.keys(state.children).length > 0;\n const hasText = state.textParts.length > 0;\n\n const textValue = options.coalesceText\n ? state.textParts.join(\"\")\n : state.textParts.length <= 1\n ? state.textParts[0] ?? \"\"\n : state.textParts.slice();\n\n if (!hasAttributes && !hasChildren) {\n if (!hasText) {\n return \"\";\n }\n return textValue as XmlObjectValue;\n }\n\n const result: XmlObjectMap = Object.create(null) as XmlObjectMap;\n\n for (const [key, value] of Object.entries(state.attributes)) {\n result[`${options.attributePrefix}${key}`] = value;\n }\n\n for (const [key, value] of Object.entries(state.children)) {\n result[key] = value;\n }\n\n if (hasText) {\n result[options.textKey] = textValue as XmlObjectValue;\n }\n\n return result;\n}\n"]}
1
+ {"version":3,"sources":["../src/assert.ts","../src/errors.ts","../src/entities.ts","../src/parser.ts","../src/tree.ts","../src/serializer.ts","../src/object.ts"],"names":["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 let body = serializeNode(node, settings, 0);\n if (settings.pretty && !body.endsWith(settings.newline)) {\n body = `${body}${settings.newline}`;\n }\n if (!settings.xmlDeclaration) {\n return body;\n }\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>${settings.newline}${body}`;\n}\n\nfunction serializeNode(node: XmlNode, options: Required<SerializeOptions>, depth: number): string {\n const attrs = serializeAttributes(node.attributes);\n const tagOpen = `<${node.name}${attrs}>`;\n const tagClose = `</${node.name}>`;\n\n const children = node.children ?? [];\n if (!children.length) {\n if (!options.pretty) {\n return `<${node.name}${attrs}/>`;\n }\n const indent = options.indent.repeat(depth);\n return `${indent}<${node.name}${attrs}/>`;\n }\n\n if (!options.pretty) {\n const inner = children.map((child) => serializeChild(child, options, depth + 1)).join(\"\");\n return `${tagOpen}${inner}${tagClose}`;\n }\n\n const indent = options.indent.repeat(depth);\n const hasOnlyTextChildren = children.every((child) => typeof child === \"string\");\n if (hasOnlyTextChildren) {\n const inlineText = children.map((child) => escapeText(child)).join(\"\");\n return `${indent}${tagOpen}${inlineText}${tagClose}`;\n }\n const innerIndent = options.indent.repeat(depth + 1);\n const prettyOpen = `${indent}${tagOpen}`;\n const prettyClose = `${indent}${tagClose}`;\n const inner = children\n .map((child) =>\n typeof child === \"string\"\n ? `${innerIndent}${escapeText(child)}`\n : serializeNode(child, options, depth + 1)\n )\n .join(options.newline);\n\n return `${prettyOpen}${options.newline}${inner}${options.newline}${prettyClose}`;\n}\n\nfunction serializeChild(child: XmlChild, options: Required<SerializeOptions>, depth: number): string {\n if (typeof child === \"string\") {\n return escapeText(child);\n }\n return serializeNode(child, options, depth);\n}\n\nfunction serializeAttributes(attrs?: Record<string, string>): string {\n if (!attrs) {\n return \"\";\n }\n return Object.entries(attrs)\n .map(([key, value]) => ` ${key}=\"${escapeAttribute(value)}\"`)\n .join(\"\");\n}\n\nfunction escapeText(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction escapeAttribute(value: string): string {\n return escapeText(value).replace(/\"/g, \"&quot;\");\n}\n","import { serializeXml } from \"./serializer\";\nimport type {\n ObjectBuilderOptions,\n ObjectToXmlOptions,\n OpenTag,\n XmlAttribute,\n XmlBuilderOptions,\n XmlInputObject,\n XmlInputValue,\n XmlNode,\n XmlObjectMap,\n XmlObjectValue\n} from \"./types\";\n\ninterface ElementState {\n name: string;\n attributes: Record<string, string>;\n textParts: string[];\n children: Record<string, XmlObjectValue | XmlObjectValue[]>;\n}\n\nconst DEFAULT_OBJECT_OPTIONS: Required<Omit<ObjectBuilderOptions, \"arrayElements\">> = {\n attributePrefix: \"@_\",\n textKey: \"#text\",\n stripNamespaces: false,\n coalesceText: true\n};\n\ntype ObjectBuilderSettings = Required<Omit<ObjectBuilderOptions, \"arrayElements\">> &\n Pick<ObjectBuilderOptions, \"arrayElements\">;\n\ntype XmlBuilderSettings = Required<Omit<XmlBuilderOptions, \"arrayElements\" | \"rootName\">> &\n Pick<XmlBuilderOptions, \"arrayElements\" | \"rootName\">;\n\nexport function stripNamespace(name: string): string {\n const index = name.indexOf(\":\");\n if (index === -1) {\n return name;\n }\n return name.slice(index + 1);\n}\n\nexport function resolveName(\n value: string | Pick<OpenTag, \"name\" | \"prefix\" | \"local\" | \"uri\">\n): { name: string; localName: string; prefix: string; uri: string } {\n if (typeof value !== \"string\") {\n return {\n name: value.name,\n localName: value.local,\n prefix: value.prefix,\n uri: value.uri\n };\n }\n\n const index = value.indexOf(\":\");\n if (index === -1) {\n return { name: value, localName: value, prefix: \"\", uri: \"\" };\n }\n\n return {\n name: value,\n localName: value.slice(index + 1),\n prefix: value.slice(0, index),\n uri: \"\"\n };\n}\n\nexport function buildObject(root: XmlNode, options: ObjectBuilderOptions = {}): XmlObjectValue {\n const settings = buildSettings(options);\n return buildNode(root, settings, []);\n}\n\nexport function buildXmlNode(obj: XmlInputValue, options: XmlBuilderOptions = {}): XmlNode {\n const settings = buildXmlSettings(options);\n const root = resolveRoot(obj, settings);\n const rootName = normalizeName(root.name, settings);\n return buildElement(rootName, root.value, settings, []);\n}\n\nexport function objectToXml(obj: XmlInputValue, options: ObjectToXmlOptions = {}): string {\n const node = buildXmlNode(obj, options);\n return serializeXml(node, options);\n}\n\nexport class ObjectBuilder {\n private options: ObjectBuilderSettings;\n private stack: ElementState[] = [];\n private root: XmlObjectValue | null = null;\n private rootName: string | null = null;\n\n constructor(options: ObjectBuilderOptions = {}) {\n this.options = buildSettings(options);\n }\n\n onOpenTag = (tag: OpenTag): void => {\n const name = normalizeName(tag.name, this.options);\n const attributes = normalizeAttributes(tag.attributes, this.options);\n const state: ElementState = {\n name,\n attributes,\n textParts: [],\n children: Object.create(null) as Record<string, XmlObjectValue | XmlObjectValue[]>\n };\n\n this.rootName ??= name;\n\n this.stack.push(state);\n };\n\n onText = (text: string): void => {\n if (!text) {\n return;\n }\n const current = this.stack[this.stack.length - 1];\n if (!current) {\n return;\n }\n current.textParts.push(text);\n };\n\n onCdata = (text: string): void => {\n this.onText(text);\n };\n\n onCloseTag = (): void => {\n const state = this.stack.pop();\n if (!state) {\n return;\n }\n\n const value = finalizeElement(state, this.options);\n const parent = this.stack[this.stack.length - 1];\n\n if (!parent) {\n this.root = value;\n return;\n }\n\n const path = this.stack.map((entry) => entry.name);\n addChild(parent.children, state.name, value, this.options, path);\n };\n\n getResult(): XmlObjectValue {\n if (this.root === null) {\n throw new Error(\"No root element found\");\n }\n return this.root;\n }\n\n getRootName(): string {\n if (!this.rootName) {\n throw new Error(\"No root element found\");\n }\n return this.rootName;\n }\n}\n\nfunction buildSettings(options: ObjectBuilderOptions): ObjectBuilderSettings {\n return { ...DEFAULT_OBJECT_OPTIONS, ...options };\n}\n\nfunction buildXmlSettings(options: XmlBuilderOptions): XmlBuilderSettings {\n return { ...DEFAULT_OBJECT_OPTIONS, ...options };\n}\n\nfunction buildNode(node: XmlNode, options: ObjectBuilderSettings, path: string[]): XmlObjectValue {\n const name = normalizeName(node.name, options);\n const attributes = normalizeAttributeMap(node.attributes ?? {}, options);\n const state: ElementState = {\n name,\n attributes,\n textParts: [],\n children: Object.create(null) as Record<string, XmlObjectValue | XmlObjectValue[]>\n };\n\n const children = node.children ?? [];\n for (const child of children) {\n if (typeof child === \"string\") {\n if (child) {\n state.textParts.push(child);\n }\n continue;\n }\n\n const value = buildNode(child, options, [...path, name]);\n const childName = normalizeName(child.name, options);\n addChild(state.children, childName, value, options, [...path, name]);\n }\n\n return finalizeElement(state, options);\n}\n\nfunction normalizeName(name: string, options: ObjectBuilderSettings): string {\n if (options.stripNamespaces) {\n return stripNamespace(name);\n }\n return name;\n}\n\nfunction normalizeXmlName(name: string, options: XmlBuilderSettings): string {\n if (options.stripNamespaces) {\n return stripNamespace(name);\n }\n return name;\n}\n\nfunction normalizeAttributes(\n attributes: Record<string, XmlAttribute>,\n options: ObjectBuilderSettings\n): Record<string, string> {\n const result: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const [key, attr] of Object.entries(attributes)) {\n const name = normalizeName(key, options);\n result[name] = attr.value;\n }\n return result;\n}\n\nfunction normalizeAttributeMap(\n attributes: Record<string, string>,\n options: ObjectBuilderSettings\n): Record<string, string> {\n const result: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const [key, value] of Object.entries(attributes)) {\n const name = normalizeName(key, options);\n result[name] = value;\n }\n return result;\n}\n\nfunction addChild(\n target: Record<string, XmlObjectValue | XmlObjectValue[]>,\n name: string,\n value: XmlObjectValue,\n options: ObjectBuilderSettings,\n path: string[]\n): void {\n const forcedArray = shouldForceArray(name, path, options);\n const existing = target[name];\n\n if (existing === undefined) {\n target[name] = forcedArray ? [value] : value;\n return;\n }\n\n if (Array.isArray(existing)) {\n existing.push(value);\n return;\n }\n\n target[name] = [existing, value];\n}\n\nfunction shouldForceArray(name: string, path: string[], options: ObjectBuilderSettings): boolean {\n const rule = options.arrayElements;\n if (!rule) {\n return false;\n }\n if (rule instanceof Set) {\n return rule.has(name);\n }\n return rule(name, path);\n}\n\nfunction resolveRoot(obj: XmlInputValue, options: XmlBuilderSettings): { name: string; value: XmlInputValue } {\n if (isRecord(obj)) {\n const keys = Object.keys(obj);\n if (keys.length === 1) {\n const name = keys[0] ?? \"\";\n return { name, value: obj[name] };\n }\n }\n\n if (!options.rootName) {\n throw new Error(\"Root element name is required when object has multiple keys\");\n }\n\n return { name: options.rootName, value: obj };\n}\n\nfunction buildElement(\n name: string,\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): XmlNode {\n const attributes: Record<string, string> = Object.create(null) as Record<string, string>;\n const children: (XmlNode | string)[] = [];\n const nextPath = [...path, name];\n\n if (Array.isArray(value)) {\n for (const item of value) {\n appendContent(children, item, options, nextPath);\n }\n return finalizeNode(name, attributes, children);\n }\n\n if (isPrimitive(value)) {\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n return finalizeNode(name, attributes, children);\n }\n\n if (isRecord(value)) {\n for (const [key, entryValue] of Object.entries(value)) {\n if (isAttributeKey(key, options)) {\n const attrName = normalizeXmlName(key.slice(options.attributePrefix.length), options);\n const attrValue = coerceText(entryValue);\n if (attrValue !== null) {\n attributes[attrName] = attrValue;\n }\n continue;\n }\n\n if (key === options.textKey) {\n appendText(children, entryValue, options);\n continue;\n }\n\n const childName = normalizeXmlName(key, options);\n addChildElements(children, childName, entryValue, options, nextPath);\n }\n }\n\n return finalizeNode(name, attributes, children);\n}\n\nfunction addChildElements(\n children: (XmlNode | string)[],\n name: string,\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): void {\n const forcedArray = shouldForceArray(name, path, options);\n const items = Array.isArray(value) ? value : forcedArray ? [value] : [value];\n\n for (const item of items) {\n if (item === undefined || item === null) {\n children.push({ name });\n continue;\n }\n children.push(buildElement(name, item, options, path));\n }\n}\n\nfunction appendContent(\n children: (XmlNode | string)[],\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): void {\n if (value === undefined || value === null) {\n return;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n appendContent(children, item, options, path);\n }\n return;\n }\n\n if (isPrimitive(value)) {\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n return;\n }\n\n if (isRecord(value)) {\n for (const [key, entryValue] of Object.entries(value)) {\n const childName = normalizeXmlName(key, options);\n addChildElements(children, childName, entryValue, options, path);\n }\n }\n}\n\nfunction appendText(\n children: (XmlNode | string)[],\n value: XmlInputValue,\n options: XmlBuilderSettings\n): void {\n if (value === undefined || value === null) {\n return;\n }\n\n if (Array.isArray(value)) {\n const parts = value\n .map((item) => coerceText(item))\n .filter((item): item is string => item !== null);\n if (parts.length === 0) {\n return;\n }\n if (options.coalesceText) {\n children.push(parts.join(\"\"));\n return;\n }\n for (const part of parts) {\n children.push(part);\n }\n return;\n }\n\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n}\n\nfunction finalizeNode(\n name: string,\n attributes: Record<string, string>,\n children: (XmlNode | string)[]\n): XmlNode {\n const node: XmlNode = { name };\n if (Object.keys(attributes).length > 0) {\n node.attributes = attributes;\n }\n if (children.length > 0) {\n node.children = children;\n }\n return node;\n}\n\nfunction isAttributeKey(key: string, options: XmlBuilderSettings): boolean {\n if (!options.attributePrefix) {\n return false;\n }\n return key.startsWith(options.attributePrefix) && key.length > options.attributePrefix.length;\n}\n\nfunction isRecord(value: XmlInputValue): value is XmlInputObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isPrimitive(value: XmlInputValue): value is string | number | boolean {\n return typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\";\n}\n\nfunction coerceText(value: XmlInputValue): string | null {\n if (value === undefined || value === null) {\n return null;\n }\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (value instanceof Date) {\n return value.toISOString();\n }\n return null;\n}\n\nfunction finalizeElement(state: ElementState, options: ObjectBuilderSettings): XmlObjectValue {\n const hasAttributes = Object.keys(state.attributes).length > 0;\n const hasChildren = Object.keys(state.children).length > 0;\n const hasText = state.textParts.length > 0;\n\n const textValue = options.coalesceText\n ? state.textParts.join(\"\")\n : state.textParts.length <= 1\n ? state.textParts[0] ?? \"\"\n : state.textParts.slice();\n\n if (!hasAttributes && !hasChildren) {\n if (!hasText) {\n return \"\";\n }\n return textValue as XmlObjectValue;\n }\n\n const result: XmlObjectMap = Object.create(null) as XmlObjectMap;\n\n for (const [key, value] of Object.entries(state.attributes)) {\n result[`${options.attributePrefix}${key}`] = value;\n }\n\n for (const [key, value] of Object.entries(state.children)) {\n result[key] = value;\n }\n\n if (hasText) {\n result[options.textKey] = textValue as XmlObjectValue;\n }\n\n return result;\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -64,10 +64,19 @@ interface ObjectBuilderOptions {
64
64
  arrayElements?: ArrayElementSelector;
65
65
  coalesceText?: boolean;
66
66
  }
67
+ interface XmlBuilderOptions extends ObjectBuilderOptions {
68
+ rootName?: string;
69
+ }
67
70
  type XmlObjectValue = string | XmlObjectMap | XmlObjectValue[];
68
71
  interface XmlObjectMap {
69
72
  [key: string]: XmlObjectValue;
70
73
  }
74
+ type XmlInputValue = string | number | boolean | null | undefined | XmlInputObject | XmlInputValue[];
75
+ interface XmlInputObject {
76
+ [key: string]: XmlInputValue;
77
+ }
78
+ interface ObjectToXmlOptions extends XmlBuilderOptions, SerializeOptions {
79
+ }
71
80
 
72
81
  declare class XmlSaxParser {
73
82
  private options;
@@ -136,6 +145,8 @@ declare function resolveName(value: string | Pick<OpenTag, "name" | "prefix" | "
136
145
  uri: string;
137
146
  };
138
147
  declare function buildObject(root: XmlNode, options?: ObjectBuilderOptions): XmlObjectValue;
148
+ declare function buildXmlNode(obj: XmlInputValue, options?: XmlBuilderOptions): XmlNode;
149
+ declare function objectToXml(obj: XmlInputValue, options?: ObjectToXmlOptions): string;
139
150
  declare class ObjectBuilder {
140
151
  private options;
141
152
  private stack;
@@ -150,4 +161,4 @@ declare class ObjectBuilder {
150
161
  getRootName(): string;
151
162
  }
152
163
 
153
- export { type ArrayElementSelector, type CloseTag, type Doctype, ObjectBuilder, type ObjectBuilderOptions, type OpenTag, type ParserOptions, type ProcessingInstruction, type SerializeOptions, TreeBuilder, type XmlAttribute, type XmlChild, type XmlNode, type XmlObjectMap, type XmlObjectValue, type XmlPosition, XmlSaxError, XmlSaxParser, buildObject, parseXmlString, resolveName, serializeXml, stripNamespace };
164
+ export { type ArrayElementSelector, type CloseTag, type Doctype, ObjectBuilder, type ObjectBuilderOptions, type ObjectToXmlOptions, type OpenTag, type ParserOptions, type ProcessingInstruction, type SerializeOptions, TreeBuilder, type XmlAttribute, type XmlBuilderOptions, type XmlChild, type XmlInputObject, type XmlInputValue, type XmlNode, type XmlObjectMap, type XmlObjectValue, type XmlPosition, XmlSaxError, XmlSaxParser, buildObject, buildXmlNode, objectToXml, parseXmlString, resolveName, serializeXml, stripNamespace };
package/dist/index.d.ts CHANGED
@@ -64,10 +64,19 @@ interface ObjectBuilderOptions {
64
64
  arrayElements?: ArrayElementSelector;
65
65
  coalesceText?: boolean;
66
66
  }
67
+ interface XmlBuilderOptions extends ObjectBuilderOptions {
68
+ rootName?: string;
69
+ }
67
70
  type XmlObjectValue = string | XmlObjectMap | XmlObjectValue[];
68
71
  interface XmlObjectMap {
69
72
  [key: string]: XmlObjectValue;
70
73
  }
74
+ type XmlInputValue = string | number | boolean | null | undefined | XmlInputObject | XmlInputValue[];
75
+ interface XmlInputObject {
76
+ [key: string]: XmlInputValue;
77
+ }
78
+ interface ObjectToXmlOptions extends XmlBuilderOptions, SerializeOptions {
79
+ }
71
80
 
72
81
  declare class XmlSaxParser {
73
82
  private options;
@@ -136,6 +145,8 @@ declare function resolveName(value: string | Pick<OpenTag, "name" | "prefix" | "
136
145
  uri: string;
137
146
  };
138
147
  declare function buildObject(root: XmlNode, options?: ObjectBuilderOptions): XmlObjectValue;
148
+ declare function buildXmlNode(obj: XmlInputValue, options?: XmlBuilderOptions): XmlNode;
149
+ declare function objectToXml(obj: XmlInputValue, options?: ObjectToXmlOptions): string;
139
150
  declare class ObjectBuilder {
140
151
  private options;
141
152
  private stack;
@@ -150,4 +161,4 @@ declare class ObjectBuilder {
150
161
  getRootName(): string;
151
162
  }
152
163
 
153
- export { type ArrayElementSelector, type CloseTag, type Doctype, ObjectBuilder, type ObjectBuilderOptions, type OpenTag, type ParserOptions, type ProcessingInstruction, type SerializeOptions, TreeBuilder, type XmlAttribute, type XmlChild, type XmlNode, type XmlObjectMap, type XmlObjectValue, type XmlPosition, XmlSaxError, XmlSaxParser, buildObject, parseXmlString, resolveName, serializeXml, stripNamespace };
164
+ export { type ArrayElementSelector, type CloseTag, type Doctype, ObjectBuilder, type ObjectBuilderOptions, type ObjectToXmlOptions, type OpenTag, type ParserOptions, type ProcessingInstruction, type SerializeOptions, TreeBuilder, type XmlAttribute, type XmlBuilderOptions, type XmlChild, type XmlInputObject, type XmlInputValue, type XmlNode, type XmlObjectMap, type XmlObjectValue, type XmlPosition, XmlSaxError, XmlSaxParser, buildObject, buildXmlNode, objectToXml, parseXmlString, resolveName, serializeXml, stripNamespace };
package/dist/index.js CHANGED
@@ -759,6 +759,16 @@ function buildObject(root, options = {}) {
759
759
  const settings = buildSettings(options);
760
760
  return buildNode(root, settings, []);
761
761
  }
762
+ function buildXmlNode(obj, options = {}) {
763
+ const settings = buildXmlSettings(options);
764
+ const root = resolveRoot(obj, settings);
765
+ const rootName = normalizeName(root.name, settings);
766
+ return buildElement(rootName, root.value, settings, []);
767
+ }
768
+ function objectToXml(obj, options = {}) {
769
+ const node = buildXmlNode(obj, options);
770
+ return serializeXml(node, options);
771
+ }
762
772
  var ObjectBuilder = class {
763
773
  constructor(options = {}) {
764
774
  this.stack = [];
@@ -821,6 +831,9 @@ var ObjectBuilder = class {
821
831
  function buildSettings(options) {
822
832
  return { ...DEFAULT_OBJECT_OPTIONS, ...options };
823
833
  }
834
+ function buildXmlSettings(options) {
835
+ return { ...DEFAULT_OBJECT_OPTIONS, ...options };
836
+ }
824
837
  function buildNode(node, options, path) {
825
838
  const name = normalizeName(node.name, options);
826
839
  const attributes = normalizeAttributeMap(node.attributes ?? {}, options);
@@ -849,6 +862,12 @@ function normalizeName(name, options) {
849
862
  }
850
863
  return name;
851
864
  }
865
+ function normalizeXmlName(name, options) {
866
+ if (options.stripNamespaces) {
867
+ return stripNamespace(name);
868
+ }
869
+ return name;
870
+ }
852
871
  function normalizeAttributes(attributes, options) {
853
872
  const result = /* @__PURE__ */ Object.create(null);
854
873
  for (const [key, attr] of Object.entries(attributes)) {
@@ -888,6 +907,151 @@ function shouldForceArray(name, path, options) {
888
907
  }
889
908
  return rule(name, path);
890
909
  }
910
+ function resolveRoot(obj, options) {
911
+ if (isRecord(obj)) {
912
+ const keys = Object.keys(obj);
913
+ if (keys.length === 1) {
914
+ const name = keys[0] ?? "";
915
+ return { name, value: obj[name] };
916
+ }
917
+ }
918
+ if (!options.rootName) {
919
+ throw new Error("Root element name is required when object has multiple keys");
920
+ }
921
+ return { name: options.rootName, value: obj };
922
+ }
923
+ function buildElement(name, value, options, path) {
924
+ const attributes = /* @__PURE__ */ Object.create(null);
925
+ const children = [];
926
+ const nextPath = [...path, name];
927
+ if (Array.isArray(value)) {
928
+ for (const item of value) {
929
+ appendContent(children, item, options, nextPath);
930
+ }
931
+ return finalizeNode(name, attributes, children);
932
+ }
933
+ if (isPrimitive(value)) {
934
+ const text = coerceText(value);
935
+ if (text !== null) {
936
+ children.push(text);
937
+ }
938
+ return finalizeNode(name, attributes, children);
939
+ }
940
+ if (isRecord(value)) {
941
+ for (const [key, entryValue] of Object.entries(value)) {
942
+ if (isAttributeKey(key, options)) {
943
+ const attrName = normalizeXmlName(key.slice(options.attributePrefix.length), options);
944
+ const attrValue = coerceText(entryValue);
945
+ if (attrValue !== null) {
946
+ attributes[attrName] = attrValue;
947
+ }
948
+ continue;
949
+ }
950
+ if (key === options.textKey) {
951
+ appendText(children, entryValue, options);
952
+ continue;
953
+ }
954
+ const childName = normalizeXmlName(key, options);
955
+ addChildElements(children, childName, entryValue, options, nextPath);
956
+ }
957
+ }
958
+ return finalizeNode(name, attributes, children);
959
+ }
960
+ function addChildElements(children, name, value, options, path) {
961
+ const forcedArray = shouldForceArray(name, path, options);
962
+ const items = Array.isArray(value) ? value : forcedArray ? [value] : [value];
963
+ for (const item of items) {
964
+ if (item === void 0 || item === null) {
965
+ children.push({ name });
966
+ continue;
967
+ }
968
+ children.push(buildElement(name, item, options, path));
969
+ }
970
+ }
971
+ function appendContent(children, value, options, path) {
972
+ if (value === void 0 || value === null) {
973
+ return;
974
+ }
975
+ if (Array.isArray(value)) {
976
+ for (const item of value) {
977
+ appendContent(children, item, options, path);
978
+ }
979
+ return;
980
+ }
981
+ if (isPrimitive(value)) {
982
+ const text = coerceText(value);
983
+ if (text !== null) {
984
+ children.push(text);
985
+ }
986
+ return;
987
+ }
988
+ if (isRecord(value)) {
989
+ for (const [key, entryValue] of Object.entries(value)) {
990
+ const childName = normalizeXmlName(key, options);
991
+ addChildElements(children, childName, entryValue, options, path);
992
+ }
993
+ }
994
+ }
995
+ function appendText(children, value, options) {
996
+ if (value === void 0 || value === null) {
997
+ return;
998
+ }
999
+ if (Array.isArray(value)) {
1000
+ const parts = value.map((item) => coerceText(item)).filter((item) => item !== null);
1001
+ if (parts.length === 0) {
1002
+ return;
1003
+ }
1004
+ if (options.coalesceText) {
1005
+ children.push(parts.join(""));
1006
+ return;
1007
+ }
1008
+ for (const part of parts) {
1009
+ children.push(part);
1010
+ }
1011
+ return;
1012
+ }
1013
+ const text = coerceText(value);
1014
+ if (text !== null) {
1015
+ children.push(text);
1016
+ }
1017
+ }
1018
+ function finalizeNode(name, attributes, children) {
1019
+ const node = { name };
1020
+ if (Object.keys(attributes).length > 0) {
1021
+ node.attributes = attributes;
1022
+ }
1023
+ if (children.length > 0) {
1024
+ node.children = children;
1025
+ }
1026
+ return node;
1027
+ }
1028
+ function isAttributeKey(key, options) {
1029
+ if (!options.attributePrefix) {
1030
+ return false;
1031
+ }
1032
+ return key.startsWith(options.attributePrefix) && key.length > options.attributePrefix.length;
1033
+ }
1034
+ function isRecord(value) {
1035
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1036
+ }
1037
+ function isPrimitive(value) {
1038
+ return typeof value === "string" || typeof value === "number" || typeof value === "boolean";
1039
+ }
1040
+ function coerceText(value) {
1041
+ if (value === void 0 || value === null) {
1042
+ return null;
1043
+ }
1044
+ if (typeof value === "string") {
1045
+ return value;
1046
+ }
1047
+ if (typeof value === "number" || typeof value === "boolean") {
1048
+ return String(value);
1049
+ }
1050
+ if (value instanceof Date) {
1051
+ return value.toISOString();
1052
+ }
1053
+ return null;
1054
+ }
891
1055
  function finalizeElement(state, options) {
892
1056
  const hasAttributes = Object.keys(state.attributes).length > 0;
893
1057
  const hasChildren = Object.keys(state.children).length > 0;
@@ -912,6 +1076,6 @@ function finalizeElement(state, options) {
912
1076
  return result;
913
1077
  }
914
1078
 
915
- export { ObjectBuilder, TreeBuilder, XmlSaxError, XmlSaxParser, buildObject, parseXmlString, resolveName, serializeXml, stripNamespace };
1079
+ export { ObjectBuilder, TreeBuilder, XmlSaxError, XmlSaxParser, buildObject, buildXmlNode, objectToXml, parseXmlString, resolveName, serializeXml, stripNamespace };
916
1080
  //# sourceMappingURL=index.js.map
917
1081
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/assert.ts","../src/errors.ts","../src/entities.ts","../src/parser.ts","../src/tree.ts","../src/serializer.ts","../src/object.ts"],"names":["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 let body = serializeNode(node, settings, 0);\n if (settings.pretty && !body.endsWith(settings.newline)) {\n body = `${body}${settings.newline}`;\n }\n if (!settings.xmlDeclaration) {\n return body;\n }\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>${settings.newline}${body}`;\n}\n\nfunction serializeNode(node: XmlNode, options: Required<SerializeOptions>, depth: number): string {\n const attrs = serializeAttributes(node.attributes);\n const tagOpen = `<${node.name}${attrs}>`;\n const tagClose = `</${node.name}>`;\n\n const children = node.children ?? [];\n if (!children.length) {\n if (!options.pretty) {\n return `<${node.name}${attrs}/>`;\n }\n const indent = options.indent.repeat(depth);\n return `${indent}<${node.name}${attrs}/>`;\n }\n\n if (!options.pretty) {\n const inner = children.map((child) => serializeChild(child, options, depth + 1)).join(\"\");\n return `${tagOpen}${inner}${tagClose}`;\n }\n\n const indent = options.indent.repeat(depth);\n const hasOnlyTextChildren = children.every((child) => typeof child === \"string\");\n if (hasOnlyTextChildren) {\n const inlineText = children.map((child) => escapeText(child)).join(\"\");\n return `${indent}${tagOpen}${inlineText}${tagClose}`;\n }\n const innerIndent = options.indent.repeat(depth + 1);\n const prettyOpen = `${indent}${tagOpen}`;\n const prettyClose = `${indent}${tagClose}`;\n const inner = children\n .map((child) =>\n typeof child === \"string\"\n ? `${innerIndent}${escapeText(child)}`\n : serializeNode(child, options, depth + 1)\n )\n .join(options.newline);\n\n return `${prettyOpen}${options.newline}${inner}${options.newline}${prettyClose}`;\n}\n\nfunction serializeChild(child: XmlChild, options: Required<SerializeOptions>, depth: number): string {\n if (typeof child === \"string\") {\n return escapeText(child);\n }\n return serializeNode(child, options, depth);\n}\n\nfunction serializeAttributes(attrs?: Record<string, string>): string {\n if (!attrs) {\n return \"\";\n }\n return Object.entries(attrs)\n .map(([key, value]) => ` ${key}=\"${escapeAttribute(value)}\"`)\n .join(\"\");\n}\n\nfunction escapeText(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction escapeAttribute(value: string): string {\n return escapeText(value).replace(/\"/g, \"&quot;\");\n}\n","import type {\n ObjectBuilderOptions,\n OpenTag,\n XmlAttribute,\n XmlNode,\n XmlObjectMap,\n XmlObjectValue\n} from \"./types\";\n\ninterface ElementState {\n name: string;\n attributes: Record<string, string>;\n textParts: string[];\n children: Record<string, XmlObjectValue | XmlObjectValue[]>;\n}\n\nconst DEFAULT_OBJECT_OPTIONS: Required<Omit<ObjectBuilderOptions, \"arrayElements\">> = {\n attributePrefix: \"@_\",\n textKey: \"#text\",\n stripNamespaces: false,\n coalesceText: true\n};\n\ntype ObjectBuilderSettings = Required<Omit<ObjectBuilderOptions, \"arrayElements\">> &\n Pick<ObjectBuilderOptions, \"arrayElements\">;\n\nexport function stripNamespace(name: string): string {\n const index = name.indexOf(\":\");\n if (index === -1) {\n return name;\n }\n return name.slice(index + 1);\n}\n\nexport function resolveName(\n value: string | Pick<OpenTag, \"name\" | \"prefix\" | \"local\" | \"uri\">\n): { name: string; localName: string; prefix: string; uri: string } {\n if (typeof value !== \"string\") {\n return {\n name: value.name,\n localName: value.local,\n prefix: value.prefix,\n uri: value.uri\n };\n }\n\n const index = value.indexOf(\":\");\n if (index === -1) {\n return { name: value, localName: value, prefix: \"\", uri: \"\" };\n }\n\n return {\n name: value,\n localName: value.slice(index + 1),\n prefix: value.slice(0, index),\n uri: \"\"\n };\n}\n\nexport function buildObject(root: XmlNode, options: ObjectBuilderOptions = {}): XmlObjectValue {\n const settings = buildSettings(options);\n return buildNode(root, settings, []);\n}\n\nexport class ObjectBuilder {\n private options: ObjectBuilderSettings;\n private stack: ElementState[] = [];\n private root: XmlObjectValue | null = null;\n private rootName: string | null = null;\n\n constructor(options: ObjectBuilderOptions = {}) {\n this.options = buildSettings(options);\n }\n\n onOpenTag = (tag: OpenTag): void => {\n const name = normalizeName(tag.name, this.options);\n const attributes = normalizeAttributes(tag.attributes, this.options);\n const state: ElementState = {\n name,\n attributes,\n textParts: [],\n children: Object.create(null) as Record<string, XmlObjectValue | XmlObjectValue[]>\n };\n\n this.rootName ??= name;\n\n this.stack.push(state);\n };\n\n onText = (text: string): void => {\n if (!text) {\n return;\n }\n const current = this.stack[this.stack.length - 1];\n if (!current) {\n return;\n }\n current.textParts.push(text);\n };\n\n onCdata = (text: string): void => {\n this.onText(text);\n };\n\n onCloseTag = (): void => {\n const state = this.stack.pop();\n if (!state) {\n return;\n }\n\n const value = finalizeElement(state, this.options);\n const parent = this.stack[this.stack.length - 1];\n\n if (!parent) {\n this.root = value;\n return;\n }\n\n const path = this.stack.map((entry) => entry.name);\n addChild(parent.children, state.name, value, this.options, path);\n };\n\n getResult(): XmlObjectValue {\n if (this.root === null) {\n throw new Error(\"No root element found\");\n }\n return this.root;\n }\n\n getRootName(): string {\n if (!this.rootName) {\n throw new Error(\"No root element found\");\n }\n return this.rootName;\n }\n}\n\nfunction buildSettings(options: ObjectBuilderOptions): ObjectBuilderSettings {\n return { ...DEFAULT_OBJECT_OPTIONS, ...options };\n}\n\nfunction buildNode(node: XmlNode, options: ObjectBuilderSettings, path: string[]): XmlObjectValue {\n const name = normalizeName(node.name, options);\n const attributes = normalizeAttributeMap(node.attributes ?? {}, options);\n const state: ElementState = {\n name,\n attributes,\n textParts: [],\n children: Object.create(null) as Record<string, XmlObjectValue | XmlObjectValue[]>\n };\n\n const children = node.children ?? [];\n for (const child of children) {\n if (typeof child === \"string\") {\n if (child) {\n state.textParts.push(child);\n }\n continue;\n }\n\n const value = buildNode(child, options, [...path, name]);\n const childName = normalizeName(child.name, options);\n addChild(state.children, childName, value, options, [...path, name]);\n }\n\n return finalizeElement(state, options);\n}\n\nfunction normalizeName(name: string, options: ObjectBuilderSettings): string {\n if (options.stripNamespaces) {\n return stripNamespace(name);\n }\n return name;\n}\n\nfunction normalizeAttributes(\n attributes: Record<string, XmlAttribute>,\n options: ObjectBuilderSettings\n): Record<string, string> {\n const result: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const [key, attr] of Object.entries(attributes)) {\n const name = normalizeName(key, options);\n result[name] = attr.value;\n }\n return result;\n}\n\nfunction normalizeAttributeMap(\n attributes: Record<string, string>,\n options: ObjectBuilderSettings\n): Record<string, string> {\n const result: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const [key, value] of Object.entries(attributes)) {\n const name = normalizeName(key, options);\n result[name] = value;\n }\n return result;\n}\n\nfunction addChild(\n target: Record<string, XmlObjectValue | XmlObjectValue[]>,\n name: string,\n value: XmlObjectValue,\n options: ObjectBuilderSettings,\n path: string[]\n): void {\n const forcedArray = shouldForceArray(name, path, options);\n const existing = target[name];\n\n if (existing === undefined) {\n target[name] = forcedArray ? [value] : value;\n return;\n }\n\n if (Array.isArray(existing)) {\n existing.push(value);\n return;\n }\n\n target[name] = [existing, value];\n}\n\nfunction shouldForceArray(name: string, path: string[], options: ObjectBuilderSettings): boolean {\n const rule = options.arrayElements;\n if (!rule) {\n return false;\n }\n if (rule instanceof Set) {\n return rule.has(name);\n }\n return rule(name, path);\n}\n\nfunction finalizeElement(state: ElementState, options: ObjectBuilderSettings): XmlObjectValue {\n const hasAttributes = Object.keys(state.attributes).length > 0;\n const hasChildren = Object.keys(state.children).length > 0;\n const hasText = state.textParts.length > 0;\n\n const textValue = options.coalesceText\n ? state.textParts.join(\"\")\n : state.textParts.length <= 1\n ? state.textParts[0] ?? \"\"\n : state.textParts.slice();\n\n if (!hasAttributes && !hasChildren) {\n if (!hasText) {\n return \"\";\n }\n return textValue as XmlObjectValue;\n }\n\n const result: XmlObjectMap = Object.create(null) as XmlObjectMap;\n\n for (const [key, value] of Object.entries(state.attributes)) {\n result[`${options.attributePrefix}${key}`] = value;\n }\n\n for (const [key, value] of Object.entries(state.children)) {\n result[key] = value;\n }\n\n if (hasText) {\n result[options.textKey] = textValue as XmlObjectValue;\n }\n\n return result;\n}\n"]}
1
+ {"version":3,"sources":["../src/assert.ts","../src/errors.ts","../src/entities.ts","../src/parser.ts","../src/tree.ts","../src/serializer.ts","../src/object.ts"],"names":["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 let body = serializeNode(node, settings, 0);\n if (settings.pretty && !body.endsWith(settings.newline)) {\n body = `${body}${settings.newline}`;\n }\n if (!settings.xmlDeclaration) {\n return body;\n }\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>${settings.newline}${body}`;\n}\n\nfunction serializeNode(node: XmlNode, options: Required<SerializeOptions>, depth: number): string {\n const attrs = serializeAttributes(node.attributes);\n const tagOpen = `<${node.name}${attrs}>`;\n const tagClose = `</${node.name}>`;\n\n const children = node.children ?? [];\n if (!children.length) {\n if (!options.pretty) {\n return `<${node.name}${attrs}/>`;\n }\n const indent = options.indent.repeat(depth);\n return `${indent}<${node.name}${attrs}/>`;\n }\n\n if (!options.pretty) {\n const inner = children.map((child) => serializeChild(child, options, depth + 1)).join(\"\");\n return `${tagOpen}${inner}${tagClose}`;\n }\n\n const indent = options.indent.repeat(depth);\n const hasOnlyTextChildren = children.every((child) => typeof child === \"string\");\n if (hasOnlyTextChildren) {\n const inlineText = children.map((child) => escapeText(child)).join(\"\");\n return `${indent}${tagOpen}${inlineText}${tagClose}`;\n }\n const innerIndent = options.indent.repeat(depth + 1);\n const prettyOpen = `${indent}${tagOpen}`;\n const prettyClose = `${indent}${tagClose}`;\n const inner = children\n .map((child) =>\n typeof child === \"string\"\n ? `${innerIndent}${escapeText(child)}`\n : serializeNode(child, options, depth + 1)\n )\n .join(options.newline);\n\n return `${prettyOpen}${options.newline}${inner}${options.newline}${prettyClose}`;\n}\n\nfunction serializeChild(child: XmlChild, options: Required<SerializeOptions>, depth: number): string {\n if (typeof child === \"string\") {\n return escapeText(child);\n }\n return serializeNode(child, options, depth);\n}\n\nfunction serializeAttributes(attrs?: Record<string, string>): string {\n if (!attrs) {\n return \"\";\n }\n return Object.entries(attrs)\n .map(([key, value]) => ` ${key}=\"${escapeAttribute(value)}\"`)\n .join(\"\");\n}\n\nfunction escapeText(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction escapeAttribute(value: string): string {\n return escapeText(value).replace(/\"/g, \"&quot;\");\n}\n","import { serializeXml } from \"./serializer\";\nimport type {\n ObjectBuilderOptions,\n ObjectToXmlOptions,\n OpenTag,\n XmlAttribute,\n XmlBuilderOptions,\n XmlInputObject,\n XmlInputValue,\n XmlNode,\n XmlObjectMap,\n XmlObjectValue\n} from \"./types\";\n\ninterface ElementState {\n name: string;\n attributes: Record<string, string>;\n textParts: string[];\n children: Record<string, XmlObjectValue | XmlObjectValue[]>;\n}\n\nconst DEFAULT_OBJECT_OPTIONS: Required<Omit<ObjectBuilderOptions, \"arrayElements\">> = {\n attributePrefix: \"@_\",\n textKey: \"#text\",\n stripNamespaces: false,\n coalesceText: true\n};\n\ntype ObjectBuilderSettings = Required<Omit<ObjectBuilderOptions, \"arrayElements\">> &\n Pick<ObjectBuilderOptions, \"arrayElements\">;\n\ntype XmlBuilderSettings = Required<Omit<XmlBuilderOptions, \"arrayElements\" | \"rootName\">> &\n Pick<XmlBuilderOptions, \"arrayElements\" | \"rootName\">;\n\nexport function stripNamespace(name: string): string {\n const index = name.indexOf(\":\");\n if (index === -1) {\n return name;\n }\n return name.slice(index + 1);\n}\n\nexport function resolveName(\n value: string | Pick<OpenTag, \"name\" | \"prefix\" | \"local\" | \"uri\">\n): { name: string; localName: string; prefix: string; uri: string } {\n if (typeof value !== \"string\") {\n return {\n name: value.name,\n localName: value.local,\n prefix: value.prefix,\n uri: value.uri\n };\n }\n\n const index = value.indexOf(\":\");\n if (index === -1) {\n return { name: value, localName: value, prefix: \"\", uri: \"\" };\n }\n\n return {\n name: value,\n localName: value.slice(index + 1),\n prefix: value.slice(0, index),\n uri: \"\"\n };\n}\n\nexport function buildObject(root: XmlNode, options: ObjectBuilderOptions = {}): XmlObjectValue {\n const settings = buildSettings(options);\n return buildNode(root, settings, []);\n}\n\nexport function buildXmlNode(obj: XmlInputValue, options: XmlBuilderOptions = {}): XmlNode {\n const settings = buildXmlSettings(options);\n const root = resolveRoot(obj, settings);\n const rootName = normalizeName(root.name, settings);\n return buildElement(rootName, root.value, settings, []);\n}\n\nexport function objectToXml(obj: XmlInputValue, options: ObjectToXmlOptions = {}): string {\n const node = buildXmlNode(obj, options);\n return serializeXml(node, options);\n}\n\nexport class ObjectBuilder {\n private options: ObjectBuilderSettings;\n private stack: ElementState[] = [];\n private root: XmlObjectValue | null = null;\n private rootName: string | null = null;\n\n constructor(options: ObjectBuilderOptions = {}) {\n this.options = buildSettings(options);\n }\n\n onOpenTag = (tag: OpenTag): void => {\n const name = normalizeName(tag.name, this.options);\n const attributes = normalizeAttributes(tag.attributes, this.options);\n const state: ElementState = {\n name,\n attributes,\n textParts: [],\n children: Object.create(null) as Record<string, XmlObjectValue | XmlObjectValue[]>\n };\n\n this.rootName ??= name;\n\n this.stack.push(state);\n };\n\n onText = (text: string): void => {\n if (!text) {\n return;\n }\n const current = this.stack[this.stack.length - 1];\n if (!current) {\n return;\n }\n current.textParts.push(text);\n };\n\n onCdata = (text: string): void => {\n this.onText(text);\n };\n\n onCloseTag = (): void => {\n const state = this.stack.pop();\n if (!state) {\n return;\n }\n\n const value = finalizeElement(state, this.options);\n const parent = this.stack[this.stack.length - 1];\n\n if (!parent) {\n this.root = value;\n return;\n }\n\n const path = this.stack.map((entry) => entry.name);\n addChild(parent.children, state.name, value, this.options, path);\n };\n\n getResult(): XmlObjectValue {\n if (this.root === null) {\n throw new Error(\"No root element found\");\n }\n return this.root;\n }\n\n getRootName(): string {\n if (!this.rootName) {\n throw new Error(\"No root element found\");\n }\n return this.rootName;\n }\n}\n\nfunction buildSettings(options: ObjectBuilderOptions): ObjectBuilderSettings {\n return { ...DEFAULT_OBJECT_OPTIONS, ...options };\n}\n\nfunction buildXmlSettings(options: XmlBuilderOptions): XmlBuilderSettings {\n return { ...DEFAULT_OBJECT_OPTIONS, ...options };\n}\n\nfunction buildNode(node: XmlNode, options: ObjectBuilderSettings, path: string[]): XmlObjectValue {\n const name = normalizeName(node.name, options);\n const attributes = normalizeAttributeMap(node.attributes ?? {}, options);\n const state: ElementState = {\n name,\n attributes,\n textParts: [],\n children: Object.create(null) as Record<string, XmlObjectValue | XmlObjectValue[]>\n };\n\n const children = node.children ?? [];\n for (const child of children) {\n if (typeof child === \"string\") {\n if (child) {\n state.textParts.push(child);\n }\n continue;\n }\n\n const value = buildNode(child, options, [...path, name]);\n const childName = normalizeName(child.name, options);\n addChild(state.children, childName, value, options, [...path, name]);\n }\n\n return finalizeElement(state, options);\n}\n\nfunction normalizeName(name: string, options: ObjectBuilderSettings): string {\n if (options.stripNamespaces) {\n return stripNamespace(name);\n }\n return name;\n}\n\nfunction normalizeXmlName(name: string, options: XmlBuilderSettings): string {\n if (options.stripNamespaces) {\n return stripNamespace(name);\n }\n return name;\n}\n\nfunction normalizeAttributes(\n attributes: Record<string, XmlAttribute>,\n options: ObjectBuilderSettings\n): Record<string, string> {\n const result: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const [key, attr] of Object.entries(attributes)) {\n const name = normalizeName(key, options);\n result[name] = attr.value;\n }\n return result;\n}\n\nfunction normalizeAttributeMap(\n attributes: Record<string, string>,\n options: ObjectBuilderSettings\n): Record<string, string> {\n const result: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const [key, value] of Object.entries(attributes)) {\n const name = normalizeName(key, options);\n result[name] = value;\n }\n return result;\n}\n\nfunction addChild(\n target: Record<string, XmlObjectValue | XmlObjectValue[]>,\n name: string,\n value: XmlObjectValue,\n options: ObjectBuilderSettings,\n path: string[]\n): void {\n const forcedArray = shouldForceArray(name, path, options);\n const existing = target[name];\n\n if (existing === undefined) {\n target[name] = forcedArray ? [value] : value;\n return;\n }\n\n if (Array.isArray(existing)) {\n existing.push(value);\n return;\n }\n\n target[name] = [existing, value];\n}\n\nfunction shouldForceArray(name: string, path: string[], options: ObjectBuilderSettings): boolean {\n const rule = options.arrayElements;\n if (!rule) {\n return false;\n }\n if (rule instanceof Set) {\n return rule.has(name);\n }\n return rule(name, path);\n}\n\nfunction resolveRoot(obj: XmlInputValue, options: XmlBuilderSettings): { name: string; value: XmlInputValue } {\n if (isRecord(obj)) {\n const keys = Object.keys(obj);\n if (keys.length === 1) {\n const name = keys[0] ?? \"\";\n return { name, value: obj[name] };\n }\n }\n\n if (!options.rootName) {\n throw new Error(\"Root element name is required when object has multiple keys\");\n }\n\n return { name: options.rootName, value: obj };\n}\n\nfunction buildElement(\n name: string,\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): XmlNode {\n const attributes: Record<string, string> = Object.create(null) as Record<string, string>;\n const children: (XmlNode | string)[] = [];\n const nextPath = [...path, name];\n\n if (Array.isArray(value)) {\n for (const item of value) {\n appendContent(children, item, options, nextPath);\n }\n return finalizeNode(name, attributes, children);\n }\n\n if (isPrimitive(value)) {\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n return finalizeNode(name, attributes, children);\n }\n\n if (isRecord(value)) {\n for (const [key, entryValue] of Object.entries(value)) {\n if (isAttributeKey(key, options)) {\n const attrName = normalizeXmlName(key.slice(options.attributePrefix.length), options);\n const attrValue = coerceText(entryValue);\n if (attrValue !== null) {\n attributes[attrName] = attrValue;\n }\n continue;\n }\n\n if (key === options.textKey) {\n appendText(children, entryValue, options);\n continue;\n }\n\n const childName = normalizeXmlName(key, options);\n addChildElements(children, childName, entryValue, options, nextPath);\n }\n }\n\n return finalizeNode(name, attributes, children);\n}\n\nfunction addChildElements(\n children: (XmlNode | string)[],\n name: string,\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): void {\n const forcedArray = shouldForceArray(name, path, options);\n const items = Array.isArray(value) ? value : forcedArray ? [value] : [value];\n\n for (const item of items) {\n if (item === undefined || item === null) {\n children.push({ name });\n continue;\n }\n children.push(buildElement(name, item, options, path));\n }\n}\n\nfunction appendContent(\n children: (XmlNode | string)[],\n value: XmlInputValue,\n options: XmlBuilderSettings,\n path: string[]\n): void {\n if (value === undefined || value === null) {\n return;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n appendContent(children, item, options, path);\n }\n return;\n }\n\n if (isPrimitive(value)) {\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n return;\n }\n\n if (isRecord(value)) {\n for (const [key, entryValue] of Object.entries(value)) {\n const childName = normalizeXmlName(key, options);\n addChildElements(children, childName, entryValue, options, path);\n }\n }\n}\n\nfunction appendText(\n children: (XmlNode | string)[],\n value: XmlInputValue,\n options: XmlBuilderSettings\n): void {\n if (value === undefined || value === null) {\n return;\n }\n\n if (Array.isArray(value)) {\n const parts = value\n .map((item) => coerceText(item))\n .filter((item): item is string => item !== null);\n if (parts.length === 0) {\n return;\n }\n if (options.coalesceText) {\n children.push(parts.join(\"\"));\n return;\n }\n for (const part of parts) {\n children.push(part);\n }\n return;\n }\n\n const text = coerceText(value);\n if (text !== null) {\n children.push(text);\n }\n}\n\nfunction finalizeNode(\n name: string,\n attributes: Record<string, string>,\n children: (XmlNode | string)[]\n): XmlNode {\n const node: XmlNode = { name };\n if (Object.keys(attributes).length > 0) {\n node.attributes = attributes;\n }\n if (children.length > 0) {\n node.children = children;\n }\n return node;\n}\n\nfunction isAttributeKey(key: string, options: XmlBuilderSettings): boolean {\n if (!options.attributePrefix) {\n return false;\n }\n return key.startsWith(options.attributePrefix) && key.length > options.attributePrefix.length;\n}\n\nfunction isRecord(value: XmlInputValue): value is XmlInputObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isPrimitive(value: XmlInputValue): value is string | number | boolean {\n return typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\";\n}\n\nfunction coerceText(value: XmlInputValue): string | null {\n if (value === undefined || value === null) {\n return null;\n }\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (value instanceof Date) {\n return value.toISOString();\n }\n return null;\n}\n\nfunction finalizeElement(state: ElementState, options: ObjectBuilderSettings): XmlObjectValue {\n const hasAttributes = Object.keys(state.attributes).length > 0;\n const hasChildren = Object.keys(state.children).length > 0;\n const hasText = state.textParts.length > 0;\n\n const textValue = options.coalesceText\n ? state.textParts.join(\"\")\n : state.textParts.length <= 1\n ? state.textParts[0] ?? \"\"\n : state.textParts.slice();\n\n if (!hasAttributes && !hasChildren) {\n if (!hasText) {\n return \"\";\n }\n return textValue as XmlObjectValue;\n }\n\n const result: XmlObjectMap = Object.create(null) as XmlObjectMap;\n\n for (const [key, value] of Object.entries(state.attributes)) {\n result[`${options.attributePrefix}${key}`] = value;\n }\n\n for (const [key, value] of Object.entries(state.children)) {\n result[key] = value;\n }\n\n if (hasText) {\n result[options.textKey] = textValue as XmlObjectValue;\n }\n\n return result;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xml-sax-ts",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "One-pass, streaming (SAX-style) XML parser for TypeScript (Node.js & browsers)",
5
5
  "keywords": [
6
6
  "xml",