@distilled.cloud/core 1.0.0-rc.12 → 1.0.0-rc.13

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.
Files changed (149) hide show
  1. package/lib/api.d.ts +4 -4
  2. package/lib/api.d.ts.map +1 -1
  3. package/lib/api.js +1 -1
  4. package/lib/api.js.map +1 -1
  5. package/lib/category.js +1 -1
  6. package/lib/category.js.map +1 -1
  7. package/lib/codegen/boolean-string-enums.d.ts +8 -8
  8. package/lib/codegen/boolean-string-enums.d.ts.map +1 -1
  9. package/lib/codegen/boolean-string-enums.js +84 -27
  10. package/lib/codegen/boolean-string-enums.js.map +1 -1
  11. package/lib/codegen/boolean-string-enums.test.js +130 -0
  12. package/lib/codegen/boolean-string-enums.test.js.map +1 -1
  13. package/lib/codegen/cli.js +2 -2
  14. package/lib/codegen/cli.js.map +1 -1
  15. package/lib/codegen/generator.d.ts +20 -3
  16. package/lib/codegen/generator.d.ts.map +1 -1
  17. package/lib/codegen/generator.js +36 -9
  18. package/lib/codegen/generator.js.map +1 -1
  19. package/lib/codegen/generator.test.d.ts +2 -0
  20. package/lib/codegen/generator.test.d.ts.map +1 -0
  21. package/lib/codegen/generator.test.js +126 -0
  22. package/lib/codegen/generator.test.js.map +1 -0
  23. package/lib/codegen/graphql-client.d.ts +7 -1
  24. package/lib/codegen/graphql-client.d.ts.map +1 -1
  25. package/lib/codegen/graphql-client.js +262 -125
  26. package/lib/codegen/graphql-client.js.map +1 -1
  27. package/lib/codegen/graphql-client.test.js +104 -236
  28. package/lib/codegen/graphql-client.test.js.map +1 -1
  29. package/lib/codegen/openapi-binary.test.d.ts +2 -0
  30. package/lib/codegen/openapi-binary.test.d.ts.map +1 -0
  31. package/lib/codegen/openapi-binary.test.js +67 -0
  32. package/lib/codegen/openapi-binary.test.js.map +1 -0
  33. package/lib/codegen/openapi.d.ts +7 -1
  34. package/lib/codegen/openapi.d.ts.map +1 -1
  35. package/lib/codegen/openapi.js +15 -4
  36. package/lib/codegen/openapi.js.map +1 -1
  37. package/lib/codegen/patches.d.ts +16 -1
  38. package/lib/codegen/patches.d.ts.map +1 -1
  39. package/lib/codegen/patches.js +70 -4
  40. package/lib/codegen/patches.js.map +1 -1
  41. package/lib/codegen/patches.test.js +48 -2
  42. package/lib/codegen/patches.test.js.map +1 -1
  43. package/lib/codegen/untagged-unions.test.d.ts +2 -0
  44. package/lib/codegen/untagged-unions.test.d.ts.map +1 -0
  45. package/lib/codegen/untagged-unions.test.js +80 -0
  46. package/lib/codegen/untagged-unions.test.js.map +1 -0
  47. package/lib/errors.d.ts +2 -1
  48. package/lib/errors.d.ts.map +1 -1
  49. package/lib/errors.js +5 -2
  50. package/lib/errors.js.map +1 -1
  51. package/lib/fixtures/xml/upstream-validator.json +397 -0
  52. package/lib/graphql.d.ts +296 -205
  53. package/lib/graphql.d.ts.map +1 -1
  54. package/lib/graphql.js +968 -631
  55. package/lib/graphql.js.map +1 -1
  56. package/lib/graphql.test.js +134 -763
  57. package/lib/graphql.test.js.map +1 -1
  58. package/lib/graphql.types.d.ts +10 -0
  59. package/lib/graphql.types.d.ts.map +1 -1
  60. package/lib/graphql.types.js +4 -44
  61. package/lib/graphql.types.js.map +1 -1
  62. package/lib/index.d.ts +27 -0
  63. package/lib/index.d.ts.map +1 -0
  64. package/lib/index.js +27 -0
  65. package/lib/index.js.map +1 -0
  66. package/lib/pagination.d.ts +2 -1
  67. package/lib/pagination.d.ts.map +1 -1
  68. package/lib/pagination.js +24 -16
  69. package/lib/pagination.js.map +1 -1
  70. package/lib/pagination.test.d.ts +2 -0
  71. package/lib/pagination.test.d.ts.map +1 -0
  72. package/lib/pagination.test.js +134 -0
  73. package/lib/pagination.test.js.map +1 -0
  74. package/lib/protocol-http.d.ts +12 -17
  75. package/lib/protocol-http.d.ts.map +1 -1
  76. package/lib/protocol-http.js +100 -45
  77. package/lib/protocol-http.js.map +1 -1
  78. package/lib/protocol-http.test.js +130 -0
  79. package/lib/protocol-http.test.js.map +1 -1
  80. package/lib/protocol-rest.d.ts +18 -1
  81. package/lib/protocol-rest.d.ts.map +1 -1
  82. package/lib/protocol-rest.js +24 -4
  83. package/lib/protocol-rest.js.map +1 -1
  84. package/lib/query.d.ts +29 -0
  85. package/lib/query.d.ts.map +1 -0
  86. package/lib/query.js +27 -0
  87. package/lib/query.js.map +1 -0
  88. package/lib/response-validation.d.ts +67 -0
  89. package/lib/response-validation.d.ts.map +1 -0
  90. package/lib/response-validation.js +76 -0
  91. package/lib/response-validation.js.map +1 -0
  92. package/lib/response-validation.test.d.ts +2 -0
  93. package/lib/response-validation.test.d.ts.map +1 -0
  94. package/lib/response-validation.test.js +67 -0
  95. package/lib/response-validation.test.js.map +1 -0
  96. package/lib/testing.d.ts +39 -0
  97. package/lib/testing.d.ts.map +1 -0
  98. package/lib/testing.js +41 -0
  99. package/lib/testing.js.map +1 -0
  100. package/lib/trait.d.ts +29 -9
  101. package/lib/trait.d.ts.map +1 -1
  102. package/lib/trait.js +8 -0
  103. package/lib/trait.js.map +1 -1
  104. package/lib/xml.d.ts +44 -0
  105. package/lib/xml.d.ts.map +1 -0
  106. package/lib/xml.js +315 -0
  107. package/lib/xml.js.map +1 -0
  108. package/lib/xml.test.d.ts +2 -0
  109. package/lib/xml.test.d.ts.map +1 -0
  110. package/lib/xml.test.js +211 -0
  111. package/lib/xml.test.js.map +1 -0
  112. package/package.json +4 -4
  113. package/src/api.ts +4 -4
  114. package/src/category.ts +1 -1
  115. package/src/codegen/boolean-string-enums.test.ts +147 -0
  116. package/src/codegen/boolean-string-enums.ts +84 -27
  117. package/src/codegen/cli.ts +2 -2
  118. package/src/codegen/generator.test.ts +151 -0
  119. package/src/codegen/generator.ts +70 -12
  120. package/src/codegen/graphql-client.test.ts +116 -283
  121. package/src/codegen/graphql-client.ts +326 -169
  122. package/src/codegen/openapi-binary.test.ts +98 -0
  123. package/src/codegen/openapi.ts +26 -4
  124. package/src/codegen/patches.test.ts +66 -1
  125. package/src/codegen/patches.ts +84 -4
  126. package/src/codegen/untagged-unions.test.ts +89 -0
  127. package/src/errors.ts +5 -2
  128. package/src/fixtures/xml/upstream-validator.json +397 -0
  129. package/src/graphql.test.ts +174 -948
  130. package/src/graphql.ts +1592 -1167
  131. package/src/graphql.types.ts +92 -163
  132. package/src/index.ts +26 -0
  133. package/src/pagination.test.ts +191 -0
  134. package/src/pagination.ts +35 -25
  135. package/src/protocol-http.test.ts +163 -0
  136. package/src/protocol-http.ts +122 -46
  137. package/src/protocol-rest.ts +62 -13
  138. package/src/query.ts +39 -0
  139. package/src/response-validation.test.ts +95 -0
  140. package/src/response-validation.ts +116 -0
  141. package/src/testing.ts +78 -0
  142. package/src/trait.ts +39 -8
  143. package/src/xml.test.ts +269 -0
  144. package/src/xml.ts +339 -0
  145. package/lib/graphql.fixture.d.ts +0 -249
  146. package/lib/graphql.fixture.d.ts.map +0 -1
  147. package/lib/graphql.fixture.js +0 -240
  148. package/lib/graphql.fixture.js.map +0 -1
  149. package/src/graphql.fixture.ts +0 -371
package/lib/trait.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"trait.js","sourceRoot":"","sources":["../src/trait.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trait.js","sourceRoot":"","sources":["../src/trait.ts"],"names":[],"mappings":"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"}
package/lib/xml.d.ts ADDED
@@ -0,0 +1,44 @@
1
+ import * as Effect from "effect/Effect";
2
+ export type XmlValue = string | XmlObject | XmlValue[];
3
+ export interface XmlObject {
4
+ [name: string]: XmlValue;
5
+ }
6
+ declare const XmlParseError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
7
+ readonly _tag: "XmlParseError";
8
+ } & Readonly<A>;
9
+ export declare class XmlParseError extends XmlParseError_base<{
10
+ readonly message: string;
11
+ /** UTF-16 offset in the original input; line and column are one-based. */
12
+ readonly offset: number;
13
+ readonly line: number;
14
+ readonly column: number;
15
+ }> {
16
+ }
17
+ export interface XmlParseOptions {
18
+ /** Maximum open elements, including the root. Defaults to 256. */
19
+ readonly maxDepth?: number;
20
+ /** Maximum input length in UTF-16 code units. Defaults to 64 Mi. */
21
+ readonly maxLength?: number;
22
+ }
23
+ /**
24
+ * Parse DTD-free XML 1.0. Values remain strings;
25
+ * repeated children become arrays, attributes use @_ and mixed text uses #text.
26
+ * Names are preserved verbatim (no namespace resolution). Comments and PIs are
27
+ * ignored. Text whitespace is preserved, except layout-only text in containers.
28
+ * Empty HTTP bodies produce {}. This is not a DOM or a validating DTD processor.
29
+ * Throws XmlParseError for malformed input or exceeded limits.
30
+ * The iterative scanner allocates no Effects while traversing the document.
31
+ */
32
+ export declare function parseXmlSync(xml: string, options?: XmlParseOptions): XmlObject;
33
+ /** Parse XML lazily, reporting malformed documents in the typed error channel. */
34
+ export declare const parseXml: (xml: string, options?: XmlParseOptions) => Effect.Effect<XmlObject, XmlParseError>;
35
+ /**
36
+ * Escape special XML characters in a string.
37
+ */
38
+ export declare const escapeXml: (s: string) => string;
39
+ /**
40
+ * Wrap content in an XML tag with optional xmlns attribute.
41
+ */
42
+ export declare const wrapTag: (tag: string, content: string, xmlns?: string) => string;
43
+ export {};
44
+ //# sourceMappingURL=xml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml.d.ts","sourceRoot":"","sources":["../src/xml.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,EAAE,CAAC;AACvD,MAAM,WAAW,SAAS;IACxB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC1B;;;;AAED,qBAAa,aAAc,SAAQ,mBAAkC;IACnE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;CAAG;AAEL,MAAM,WAAW,eAAe;IAC9B,kEAAkE;IAClE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,oEAAoE;IACpE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAwBD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,eAAoB,GAC5B,SAAS,CAmPX;AAED,kFAAkF;AAClF,eAAO,MAAM,QAAQ,QACd,MAAM,YACD,eAAe,KACxB,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,CAQrC,CAAC;AAUL;;GAEG;AACH,eAAO,MAAM,SAAS,MAAO,MAAM,KAAG,MACO,CAAC;AAM9C;;GAEG;AACH,eAAO,MAAM,OAAO,QAAS,MAAM,WAAW,MAAM,UAAU,MAAM,KAAG,MACM,CAAC"}
package/lib/xml.js ADDED
@@ -0,0 +1,315 @@
1
+ import * as Data from "effect/Data";
2
+ import * as Effect from "effect/Effect";
3
+ export class XmlParseError extends Data.TaggedError("XmlParseError") {
4
+ }
5
+ // XML 1.0 (Fifth Edition) NameStartChar / NameChar, including astral names.
6
+ const namePattern =
7
+ // XML NameChar explicitly includes combining marks as individual code points.
8
+ // eslint-disable-next-line no-misleading-character-class
9
+ /[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u{10000}-\u{EFFFF}][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u{10000}-\u{EFFFF}.\-0-9\u00B7\u0300-\u036F\u203F-\u2040]*/uy;
10
+ const invalidCharacter =
11
+ // XML 1.0 forbids these literal controls and unpaired surrogates.
12
+ // eslint-disable-next-line no-control-regex
13
+ /[\u0000-\u0008\u000B\u000C\u000E-\u001F\uD800-\uDFFF\uFFFE\uFFFF]/u;
14
+ const xmlSpace = /^[\t\n\r ]*$/;
15
+ const declarationPattern = /^xml[\t\n\r ]+version[\t\n\r ]*=[\t\n\r ]*(?:"1\.0"|'1\.0')(?:[\t\n\r ]+encoding[\t\n\r ]*=[\t\n\r ]*(?:"[A-Za-z][A-Za-z0-9._-]*"|'[A-Za-z][A-Za-z0-9._-]*'))?(?:[\t\n\r ]+standalone[\t\n\r ]*=[\t\n\r ]*(?:"(?:yes|no)"|'(?:yes|no)'))?[\t\n\r ]*$/;
16
+ /**
17
+ * Parse DTD-free XML 1.0. Values remain strings;
18
+ * repeated children become arrays, attributes use @_ and mixed text uses #text.
19
+ * Names are preserved verbatim (no namespace resolution). Comments and PIs are
20
+ * ignored. Text whitespace is preserved, except layout-only text in containers.
21
+ * Empty HTTP bodies produce {}. This is not a DOM or a validating DTD processor.
22
+ * Throws XmlParseError for malformed input or exceeded limits.
23
+ * The iterative scanner allocates no Effects while traversing the document.
24
+ */
25
+ export function parseXmlSync(xml, options = {}) {
26
+ let pos = xml.charCodeAt(0) === 0xfeff ? 1 : 0;
27
+ const start = pos;
28
+ const maxDepth = options.maxDepth ?? 256;
29
+ const maxLength = options.maxLength ?? 64 * 1024 * 1024;
30
+ const stack = [];
31
+ const document = Object.create(null);
32
+ let hasRoot = false;
33
+ function fail(message, offset = pos) {
34
+ offset = Math.min(offset, xml.length);
35
+ const lines = xml.slice(0, offset).split(/\r\n|[\r\n]/);
36
+ const line = lines.length;
37
+ const column = lines[line - 1].length + 1;
38
+ throw new XmlParseError({
39
+ message: `${message} at ${line}:${column}`,
40
+ offset,
41
+ line,
42
+ column,
43
+ });
44
+ }
45
+ if (!Number.isSafeInteger(maxDepth) || maxDepth < 1)
46
+ fail("Invalid maxDepth");
47
+ if (!Number.isSafeInteger(maxLength) || maxLength < 0)
48
+ fail("Invalid maxLength");
49
+ if (xml.length > maxLength)
50
+ fail("XML input length limit exceeded", 0);
51
+ const invalid = invalidCharacter.exec(xml);
52
+ if (invalid)
53
+ fail("Invalid XML character", invalid.index);
54
+ if (xmlSpace.test(xml.slice(start)))
55
+ return document;
56
+ function skipSpace() {
57
+ const before = pos;
58
+ while (pos < xml.length) {
59
+ const c = xml.charCodeAt(pos);
60
+ if (c !== 32 && c !== 9 && c !== 10 && c !== 13)
61
+ break;
62
+ pos++;
63
+ }
64
+ return pos !== before;
65
+ }
66
+ function readName() {
67
+ namePattern.lastIndex = pos;
68
+ const match = namePattern.exec(xml);
69
+ if (!match)
70
+ fail("Expected XML name");
71
+ pos = namePattern.lastIndex;
72
+ return match[0];
73
+ }
74
+ function decode(raw, offset, attribute = false) {
75
+ const parts = [];
76
+ let from = 0;
77
+ while (from < raw.length) {
78
+ const amp = raw.indexOf("&", from);
79
+ const end = amp < 0 ? raw.length : amp;
80
+ const literal = raw.slice(from, end);
81
+ parts.push(attribute
82
+ ? literal.replace(/\r\n|[\t\r\n]/g, " ")
83
+ : literal.replace(/\r\n?/g, "\n"));
84
+ if (amp < 0)
85
+ break;
86
+ const semi = raw.indexOf(";", amp + 1);
87
+ if (semi < 0)
88
+ fail("Unterminated entity reference", offset + amp);
89
+ const entity = raw.slice(amp + 1, semi);
90
+ switch (entity) {
91
+ case "amp":
92
+ parts.push("&");
93
+ break;
94
+ case "lt":
95
+ parts.push("<");
96
+ break;
97
+ case "gt":
98
+ parts.push(">");
99
+ break;
100
+ case "quot":
101
+ parts.push('"');
102
+ break;
103
+ case "apos":
104
+ parts.push("'");
105
+ break;
106
+ default: {
107
+ if (!/^#(?:[0-9]+|x[0-9a-fA-F]+)$/.test(entity)) {
108
+ fail("Unknown or invalid entity reference", offset + amp);
109
+ }
110
+ const code = entity[1] === "x"
111
+ ? Number.parseInt(entity.slice(2), 16)
112
+ : Number.parseInt(entity.slice(1), 10);
113
+ if (!(code === 9 ||
114
+ code === 10 ||
115
+ code === 13 ||
116
+ (code >= 0x20 && code <= 0xd7ff) ||
117
+ (code >= 0xe000 && code <= 0xfffd) ||
118
+ (code >= 0x10000 && code <= 0x10ffff))) {
119
+ fail("Invalid character reference", offset + amp);
120
+ }
121
+ parts.push(String.fromCodePoint(code));
122
+ }
123
+ }
124
+ from = semi + 1;
125
+ }
126
+ return parts.join("");
127
+ }
128
+ function finish(element) {
129
+ const text = element.text.join("");
130
+ let value;
131
+ if (!element.hasChildren && !element.hasAttributes) {
132
+ value = text;
133
+ }
134
+ else {
135
+ if (text &&
136
+ (!element.hasChildren || element.hasCdata || !xmlSpace.test(text))) {
137
+ element.object["#text"] = text;
138
+ }
139
+ value = element.object;
140
+ }
141
+ const parent = stack[stack.length - 1];
142
+ const target = parent ? parent.object : document;
143
+ if (parent)
144
+ parent.hasChildren = true;
145
+ if (!Object.hasOwn(target, element.name))
146
+ target[element.name] = value;
147
+ else {
148
+ const previous = target[element.name];
149
+ if (Array.isArray(previous))
150
+ previous.push(value);
151
+ else
152
+ target[element.name] = [previous, value];
153
+ }
154
+ }
155
+ while (pos < xml.length) {
156
+ if (xml[pos] !== "<") {
157
+ const offset = pos;
158
+ const next = xml.indexOf("<", pos);
159
+ pos = next < 0 ? xml.length : next;
160
+ const raw = xml.slice(offset, pos);
161
+ const element = stack[stack.length - 1];
162
+ if (!element) {
163
+ if (!xmlSpace.test(raw))
164
+ fail("Text outside root element", offset);
165
+ }
166
+ else {
167
+ const cdataEnd = raw.indexOf("]]>");
168
+ if (cdataEnd >= 0)
169
+ fail("Unexpected CDATA terminator", offset + cdataEnd);
170
+ element.text.push(decode(raw, offset));
171
+ }
172
+ continue;
173
+ }
174
+ if (xml.startsWith("<!--", pos)) {
175
+ const end = xml.indexOf("-->", pos + 4);
176
+ if (end < 0)
177
+ fail("Unterminated comment");
178
+ const comment = xml.slice(pos + 4, end);
179
+ if (comment.includes("--") || comment.endsWith("-"))
180
+ fail("Invalid comment");
181
+ pos = end + 3;
182
+ }
183
+ else if (xml.startsWith("<![CDATA[", pos)) {
184
+ const element = stack[stack.length - 1];
185
+ if (!element)
186
+ fail("CDATA outside root element");
187
+ const end = xml.indexOf("]]>", pos + 9);
188
+ if (end < 0)
189
+ fail("Unterminated CDATA");
190
+ element.text.push(xml.slice(pos + 9, end).replace(/\r\n?/g, "\n"));
191
+ element.hasCdata = true;
192
+ pos = end + 3;
193
+ }
194
+ else if (xml.startsWith("<?", pos)) {
195
+ const offset = pos;
196
+ pos += 2;
197
+ const target = readName();
198
+ if (!xml.startsWith("?>", pos) && !skipSpace())
199
+ fail("Expected PI whitespace");
200
+ const end = xml.indexOf("?>", pos);
201
+ if (end < 0)
202
+ fail("Unterminated processing instruction", offset);
203
+ if (target.toLowerCase() === "xml") {
204
+ if (offset !== start ||
205
+ !declarationPattern.test(xml.slice(offset + 2, end))) {
206
+ fail("Invalid or misplaced XML declaration", offset);
207
+ }
208
+ }
209
+ pos = end + 2;
210
+ }
211
+ else if (xml.startsWith("<!", pos)) {
212
+ fail("DTDs and markup declarations are not supported");
213
+ }
214
+ else if (xml.startsWith("</", pos)) {
215
+ pos += 2;
216
+ const name = readName();
217
+ skipSpace();
218
+ if (xml[pos] !== ">")
219
+ fail("Expected closing tag terminator");
220
+ const element = stack.pop();
221
+ if (!element || element.name !== name)
222
+ fail("Mismatched closing tag");
223
+ pos++;
224
+ finish(element);
225
+ }
226
+ else {
227
+ if (stack.length >= maxDepth)
228
+ fail("XML depth limit exceeded");
229
+ if (stack.length === 0) {
230
+ if (hasRoot)
231
+ fail("Multiple root elements");
232
+ hasRoot = true;
233
+ }
234
+ pos++;
235
+ const element = {
236
+ name: readName(),
237
+ object: Object.create(null),
238
+ text: [],
239
+ hasChildren: false,
240
+ hasAttributes: false,
241
+ hasCdata: false,
242
+ };
243
+ while (true) {
244
+ const spaced = skipSpace();
245
+ if (xml.startsWith("/>", pos)) {
246
+ pos += 2;
247
+ finish(element);
248
+ break;
249
+ }
250
+ if (xml[pos] === ">") {
251
+ pos++;
252
+ stack.push(element);
253
+ break;
254
+ }
255
+ if (!spaced)
256
+ fail("Expected whitespace or tag terminator");
257
+ const name = readName();
258
+ const key = `@_${name}`;
259
+ if (Object.hasOwn(element.object, key))
260
+ fail("Duplicate attribute");
261
+ skipSpace();
262
+ if (xml[pos++] !== "=")
263
+ fail("Expected attribute equals sign");
264
+ skipSpace();
265
+ const quote = xml[pos++];
266
+ if (quote !== '"' && quote !== "'")
267
+ fail("Expected quoted attribute");
268
+ const end = xml.indexOf(quote, pos);
269
+ if (end < 0)
270
+ fail("Unterminated attribute");
271
+ const raw = xml.slice(pos, end);
272
+ if (raw.includes("<"))
273
+ fail("Unescaped '<' in attribute");
274
+ element.object[key] = decode(raw, pos, true);
275
+ element.hasAttributes = true;
276
+ pos = end + 1;
277
+ }
278
+ }
279
+ }
280
+ if (stack.length)
281
+ fail("Unclosed element");
282
+ if (!hasRoot)
283
+ fail("Missing root element");
284
+ return document;
285
+ }
286
+ /** Parse XML lazily, reporting malformed documents in the typed error channel. */
287
+ export const parseXml = (xml, options) => Effect.suspend(() => {
288
+ try {
289
+ return Effect.succeed(parseXmlSync(xml, options));
290
+ }
291
+ catch (error) {
292
+ if (error instanceof XmlParseError)
293
+ return Effect.fail(error);
294
+ throw error;
295
+ }
296
+ });
297
+ const xmlEscapes = {
298
+ "&": "&amp;",
299
+ "<": "&lt;",
300
+ ">": "&gt;",
301
+ '"': "&quot;",
302
+ "'": "&apos;",
303
+ };
304
+ /**
305
+ * Escape special XML characters in a string.
306
+ */
307
+ export const escapeXml = (s) => s.replace(/[&<>"']/g, (c) => xmlEscapes[c]);
308
+ // =============================================================================
309
+ // XML Tag Helpers
310
+ // =============================================================================
311
+ /**
312
+ * Wrap content in an XML tag with optional xmlns attribute.
313
+ */
314
+ export const wrapTag = (tag, content, xmlns) => `<${tag}${xmlns ? ` xmlns="${escapeXml(xmlns)}"` : ""}>${content}</${tag}>`;
315
+ //# sourceMappingURL=xml.js.map
package/lib/xml.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml.js","sourceRoot":"","sources":["../src/xml.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAOxC,MAAM,OAAO,aAAc,SAAQ,IAAI,CAAC,WAAW,CAAC,eAAe,CAMjE;CAAG;AASL,4EAA4E;AAC5E,MAAM,WAAW;AACf,8EAA8E;AAC9E,yDAAyD;AACzD,mYAAmY,CAAC;AACtY,MAAM,gBAAgB;AACpB,kEAAkE;AAClE,4CAA4C;AAC5C,oEAAoE,CAAC;AACvE,MAAM,QAAQ,GAAG,cAAc,CAAC;AAChC,MAAM,kBAAkB,GACtB,sPAAsP,CAAC;AAWzP;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAC1B,GAAW,EACX,OAAO,GAAoB,EAAE;IAE7B,IAAI,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,GAAG,CAAC;IAClB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,GAAG,CAAC;IACzC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;IACxD,MAAM,KAAK,GAAc,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAc,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,SAAS,IAAI,CAAC,OAAe,EAAE,MAAM,GAAG,GAAG;QACzC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;QAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1C,MAAM,IAAI,aAAa,CAAC;YACtB,OAAO,EAAE,GAAG,OAAO,OAAO,IAAI,IAAI,MAAM,EAAE;YAC1C,MAAM;YACN,IAAI;YACJ,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC;QAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC9E,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC;QACnD,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC5B,IAAI,GAAG,CAAC,MAAM,GAAG,SAAS;QAAE,IAAI,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,OAAO;QAAE,IAAI,CAAC,uBAAuB,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1D,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC;IAErD,SAAS,SAAS;QAChB,MAAM,MAAM,GAAG,GAAG,CAAC;QACnB,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;gBAAE,MAAM;YACvD,GAAG,EAAE,CAAC;QACR,CAAC;QACD,OAAO,GAAG,KAAK,MAAM,CAAC;IACxB,CAAC;IAED,SAAS,QAAQ;QACf,WAAW,CAAC,SAAS,GAAG,GAAG,CAAC;QAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACtC,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC;QAC5B,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,SAAS,MAAM,CAAC,GAAW,EAAE,MAAc,EAAE,SAAS,GAAG,KAAK;QAC5D,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,OAAO,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACnC,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;YACvC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACrC,KAAK,CAAC,IAAI,CACR,SAAS;gBACP,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;gBACxC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CACpC,CAAC;YACF,IAAI,GAAG,GAAG,CAAC;gBAAE,MAAM;YACnB,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;YACvC,IAAI,IAAI,GAAG,CAAC;gBAAE,IAAI,CAAC,+BAA+B,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;YACxC,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,KAAK;oBACR,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAChB,MAAM;gBACR,KAAK,IAAI;oBACP,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAChB,MAAM;gBACR,KAAK,IAAI;oBACP,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAChB,MAAM;gBACR,KAAK,MAAM;oBACT,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAChB,MAAM;gBACR,KAAK,MAAM;oBACT,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAChB,MAAM;gBACR,SAAS,CAAC;oBACR,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;wBAChD,IAAI,CAAC,qCAAqC,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;oBAC5D,CAAC;oBACD,MAAM,IAAI,GACR,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;wBACf,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;wBACtC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC3C,IACE,CAAC,CACC,IAAI,KAAK,CAAC;wBACV,IAAI,KAAK,EAAE;wBACX,IAAI,KAAK,EAAE;wBACX,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC;wBAChC,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC;wBAClC,CAAC,IAAI,IAAI,OAAO,IAAI,IAAI,IAAI,QAAQ,CAAC,CACtC,EACD,CAAC;wBACD,IAAI,CAAC,6BAA6B,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;oBACpD,CAAC;oBACD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;YACD,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,SAAS,MAAM,CAAC,OAAgB;QAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,KAAe,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YACnD,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;aAAM,CAAC;YACN,IACE,IAAI;gBACJ,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAClE,CAAC;gBACD,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;YACjC,CAAC;YACD,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;QACzB,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;QACjD,IAAI,MAAM;YAAE,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;aAClE,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;gBAC7C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QACxB,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,GAAG,CAAC;YACnB,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACnC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YACnC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACnC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;oBAAE,IAAI,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC;YACrE,CAAC;iBAAM,CAAC;gBACN,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACpC,IAAI,QAAQ,IAAI,CAAC;oBACf,IAAI,CAAC,6BAA6B,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC;gBACzD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;YACzC,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;YACxC,IAAI,GAAG,GAAG,CAAC;gBAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YACxC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;gBACjD,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC1B,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;QAChB,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO;gBAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC;YACjD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;YACxC,IAAI,GAAG,GAAG,CAAC;gBAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;YACxB,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;QAChB,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,GAAG,CAAC;YACnB,GAAG,IAAI,CAAC,CAAC;YACT,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE;gBAC5C,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACjC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACnC,IAAI,GAAG,GAAG,CAAC;gBAAE,IAAI,CAAC,qCAAqC,EAAE,MAAM,CAAC,CAAC;YACjE,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;gBACnC,IACE,MAAM,KAAK,KAAK;oBAChB,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EACpD,CAAC;oBACD,IAAI,CAAC,sCAAsC,EAAE,MAAM,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;YACD,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;QAChB,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QACzD,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACrC,GAAG,IAAI,CAAC,CAAC;YACT,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;YACxB,SAAS,EAAE,CAAC;YACZ,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG;gBAAE,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI;gBAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACtE,GAAG,EAAE,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ;gBAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAC/D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,IAAI,OAAO;oBAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;gBAC5C,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,GAAG,EAAE,CAAC;YACN,MAAM,OAAO,GAAY;gBACvB,IAAI,EAAE,QAAQ,EAAE;gBAChB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;gBAC3B,IAAI,EAAE,EAAE;gBACR,WAAW,EAAE,KAAK;gBAClB,aAAa,EAAE,KAAK;gBACpB,QAAQ,EAAE,KAAK;aAChB,CAAC;YACF,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;gBAC3B,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;oBAC9B,GAAG,IAAI,CAAC,CAAC;oBACT,MAAM,CAAC,OAAO,CAAC,CAAC;oBAChB,MAAM;gBACR,CAAC;gBACD,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;oBACrB,GAAG,EAAE,CAAC;oBACN,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACpB,MAAM;gBACR,CAAC;gBACD,IAAI,CAAC,MAAM;oBAAE,IAAI,CAAC,uCAAuC,CAAC,CAAC;gBAC3D,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE,CAAC;gBACxB,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;oBAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBACpE,SAAS,EAAE,CAAC;gBACZ,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG;oBAAE,IAAI,CAAC,gCAAgC,CAAC,CAAC;gBAC/D,SAAS,EAAE,CAAC;gBACZ,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;gBACzB,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG;oBAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;gBACtE,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBACpC,IAAI,GAAG,GAAG,CAAC;oBAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;gBAC5C,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAChC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC;gBAC1D,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC7C,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC7B,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,MAAM;QAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC3C,IAAI,CAAC,OAAO;QAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC3C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,GAAW,EACX,OAAyB,EACgB,EAAE,CAC3C,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;IAClB,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,aAAa;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,MAAM,UAAU,GAA2B;IACzC,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;CACd,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAS,EAAU,EAAE,CAC7C,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9C,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,OAAe,EAAE,KAAc,EAAU,EAAE,CAC9E,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,WAAW,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,OAAO,KAAK,GAAG,GAAG,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=xml.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml.test.d.ts","sourceRoot":"","sources":["../src/xml.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,211 @@
1
+ import assert from "node:assert/strict";
2
+ import { describe, it } from "node:test";
3
+ import * as Effect from "effect/Effect";
4
+ import fixtures from "./fixtures/xml/upstream-validator.json" with { type: "json" };
5
+ import { escapeXml, parseXml, parseXmlSync, XmlParseError } from "./xml.js";
6
+ function parse(xml) {
7
+ // Compare the wire values independently of the null prototypes used for safety.
8
+ return JSON.parse(JSON.stringify(parseXmlSync(xml)));
9
+ }
10
+ describe("upstream fast-xml-parser validation corpus", () => {
11
+ for (const [index, fixture] of fixtures.entries()) {
12
+ it(`${index}: ${fixture.name}`, () => {
13
+ if (fixture.parserValid ?? fixture.valid) {
14
+ assert.doesNotThrow(() => parseXmlSync(fixture.xml));
15
+ }
16
+ else {
17
+ assert.throws(() => parseXmlSync(fixture.xml), XmlParseError);
18
+ }
19
+ });
20
+ }
21
+ });
22
+ describe("XML object format", () => {
23
+ it("keeps primitives as strings and groups repeated children", () => {
24
+ assert.deepEqual(parse("<R><x>001</x><x>false</x><x>1e3</x><empty/><empty></empty></R>"), { R: { x: ["001", "false", "1e3"], empty: ["", ""] } });
25
+ });
26
+ it("preserves namespace names, attributes, and text with attributes", () => {
27
+ assert.deepEqual(parse('<ns:R xmlns:ns="urn:r"><ns:x ns:id="01">value</ns:x><empty a=""/></ns:R>'), {
28
+ "ns:R": {
29
+ "@_xmlns:ns": "urn:r",
30
+ "ns:x": { "@_ns:id": "01", "#text": "value" },
31
+ empty: { "@_a": "" },
32
+ },
33
+ });
34
+ });
35
+ it("preserves string whitespace, including attribute and CDATA values", () => {
36
+ assert.deepEqual(parse('<R><Key> key </Key><blank> \t </blank><x a=" b "> text </x><c><![CDATA[ c ]]></c></R>'), {
37
+ R: {
38
+ Key: " key ",
39
+ blank: " \t ",
40
+ x: { "@_a": " b ", "#text": " text " },
41
+ c: " c ",
42
+ },
43
+ });
44
+ });
45
+ it("discards layout-only container text but preserves mixed content", () => {
46
+ assert.deepEqual(parse("<R>\n <x/>\n <y/>\n</R>"), {
47
+ R: { x: "", y: "" },
48
+ });
49
+ assert.deepEqual(parse("<R>Hello <b>world</b> !</R>"), {
50
+ R: { b: "world", "#text": "Hello !" },
51
+ });
52
+ assert.deepEqual(parse("<R><![CDATA[ ]]><b/></R>"), {
53
+ R: { b: "", "#text": " " },
54
+ });
55
+ });
56
+ it("decodes predefined and numeric entities exactly once", () => {
57
+ assert.deepEqual(parse('<R a="&quot;&apos;&#9;">&amp;&lt;&gt;&#65;&#x1F600;&amp;lt;</R>'), { R: { "@_a": "\"'\t", "#text": "&<>A😀&lt;" } });
58
+ });
59
+ it("normalizes literal line endings and attribute whitespace, not character references", () => {
60
+ assert.deepEqual(parse('<R a="x\r\ny\tz\r&#13;&#10;&#9;">a\r\nb\rc&#13;</R>'), { R: { "@_a": "x y z \r\n\t", "#text": "a\nb\nc\r" } });
61
+ });
62
+ it("joins CDATA and text without decoding CDATA entities", () => {
63
+ assert.deepEqual(parse("<R>a<![CDATA[<b>&amp;]]><![CDATA[c]]>d&amp;</R>"), {
64
+ R: "a<b>&amp;cd&",
65
+ });
66
+ assert.deepEqual(parse("<R><![CDATA[]]></R>"), { R: "" });
67
+ });
68
+ it("ignores declarations, comments and processing instructions", () => {
69
+ assert.deepEqual(parse('\uFEFF<?xml version="1.0" encoding="UTF-8" standalone="yes"?><!--before--><?before a?><R>a<!--ignored--><?in x?>b</R><?after?><!--after-->'), { R: "ab" });
70
+ });
71
+ it("supports XML Unicode names", () => {
72
+ assert.deepEqual(parse('<根 é="oui"><𐀀>😀</𐀀><á/></根>'), {
73
+ 根: { "@_é": "oui", 𐀀: "😀", á: "" },
74
+ });
75
+ });
76
+ it("accepts empty HTTP bodies", () => {
77
+ for (const xml of ["", " \r\n\t", "\uFEFF"])
78
+ assert.deepEqual(parse(xml), {});
79
+ });
80
+ it("stores prototype-related names as own data properties", () => {
81
+ const result = parseXmlSync("<__proto__><constructor>one</constructor><constructor>two</constructor><__proto__>safe</__proto__><toString/></__proto__>");
82
+ const root = result.__proto__;
83
+ assert.equal(Object.getPrototypeOf(result), null);
84
+ assert.equal(Object.getPrototypeOf(root), null);
85
+ assert.deepEqual(JSON.parse(JSON.stringify(root)), JSON.parse('{"constructor":["one","two"],"__proto__":"safe","toString":""}'));
86
+ assert.equal(Object.hasOwn(Object.prototype, "safe"), false);
87
+ });
88
+ it("round trips escaped strings", () => {
89
+ for (const text of [
90
+ ' <tag a="x">&\'😀 ',
91
+ "",
92
+ "false",
93
+ "001",
94
+ "&#13;",
95
+ "\t\n",
96
+ ]) {
97
+ assert.deepEqual(parse(`<R>${escapeXml(text)}</R>`), { R: text });
98
+ }
99
+ });
100
+ it("handles large lists without recursion", () => {
101
+ const result = parse(`<R>${'<item a="1">value</item>'.repeat(10_000)}</R>`);
102
+ assert.equal(result.R.item.length, 10_000);
103
+ assert.deepEqual(result.R.item[9_999], { "@_a": "1", "#text": "value" });
104
+ });
105
+ });
106
+ describe("malformed and unsupported XML", () => {
107
+ const invalid = [
108
+ '<R a="1"a="2"/>',
109
+ '<R a="<"/>',
110
+ '<R a="&bad;"/>',
111
+ "<R a=1/>",
112
+ '<R a="1" a="2"/>',
113
+ "<R/ >",
114
+ "< R/>",
115
+ "<R></ R>",
116
+ "<R></R x>",
117
+ "<R>]]></R>",
118
+ "<R>&</R>",
119
+ "<R>&amp</R>",
120
+ "<R>&nope;</R>",
121
+ "<R>&#0;</R>",
122
+ "<R>&#xD800;</R>",
123
+ "<R>&#x110000;</R>",
124
+ "<R>&#xFFFE;</R>",
125
+ "<R>&#-1;</R>",
126
+ "<R>&#X41;</R>",
127
+ "<R>&#x;</R>",
128
+ "<R>&#;</R>",
129
+ "<R>\u0000</R>",
130
+ "<R>\u000B</R>",
131
+ "<R>\uD800</R>",
132
+ "<R>\uDC00</R>",
133
+ "<R>\uFFFE</R>",
134
+ "<R>\uFFFF</R>",
135
+ "<R><!--a--b--></R>",
136
+ "<R><!--a---></R>",
137
+ "<R><!--",
138
+ "<R><![CDATA[",
139
+ "<![CDATA[x]]><R/>",
140
+ "<R/><![CDATA[x]]>",
141
+ "<R><?pi",
142
+ "<R><?1bad?></R>",
143
+ "<R><?pi!?></R>",
144
+ '<?XML version="1.0"?><R/>',
145
+ "<?xml?><R/>",
146
+ '<?xml version="1.1"?><R/>',
147
+ '<?xml encoding="UTF-8"?><R/>',
148
+ '<?xml version="1.0" junk="x"?><R/>',
149
+ '<R><?xml version="1.0"?></R>',
150
+ '<!--x--><?xml version="1.0"?><R/>',
151
+ '<?xml version="1.0"?>',
152
+ "<!--only-->",
153
+ "<!DOCTYPE R><R/>",
154
+ '<!DOCTYPE R SYSTEM "file:///etc/passwd"><R/>',
155
+ '<!DOCTYPE R [<!ENTITY a "&a;">]><R>&a;</R>',
156
+ "<R/><R/>",
157
+ "before<R/>",
158
+ "<R/>after",
159
+ "<R><x></R>",
160
+ "<R>",
161
+ "<",
162
+ '<R a="',
163
+ "<R a",
164
+ "<R a=",
165
+ "<R ",
166
+ "</R>",
167
+ "<1bad/>",
168
+ '<R\u00A0a="x"/>',
169
+ ];
170
+ for (const xml of invalid) {
171
+ it(`rejects ${JSON.stringify(xml)}`, () => {
172
+ assert.throws(() => parseXmlSync(xml), (error) => {
173
+ assert.ok(error instanceof XmlParseError);
174
+ assert.ok(error.offset >= 0 && error.offset <= xml.length);
175
+ return true;
176
+ });
177
+ });
178
+ }
179
+ it("reports original input offsets and CRLF-aware line numbers", () => {
180
+ const xml = "<R>\r\n&bad;</R>";
181
+ assert.throws(() => parseXmlSync(xml), (error) => {
182
+ assert.ok(error instanceof XmlParseError);
183
+ assert.equal(error.offset, 5);
184
+ assert.equal(error.line, 2);
185
+ assert.equal(error.column, 1);
186
+ return true;
187
+ });
188
+ });
189
+ it("enforces depth and input length limits", () => {
190
+ assert.doesNotThrow(() => parseXmlSync("<a><b/></a>", { maxDepth: 2 }));
191
+ assert.throws(() => parseXmlSync("<a><b/></a>", { maxDepth: 1 }), XmlParseError);
192
+ assert.doesNotThrow(() => parseXmlSync("<a/>", { maxLength: 4 }));
193
+ assert.throws(() => parseXmlSync("<a/>", { maxLength: 3 }), XmlParseError);
194
+ assert.throws(() => parseXmlSync("<a/>", { maxDepth: NaN }), XmlParseError);
195
+ assert.throws(() => parseXmlSync("<a/>", { maxLength: -1 }), XmlParseError);
196
+ const nested = "<a>".repeat(2_000) + "</a>".repeat(2_000);
197
+ assert.throws(() => parseXmlSync(nested), XmlParseError);
198
+ assert.doesNotThrow(() => parseXmlSync(nested, { maxDepth: 2_000 }));
199
+ });
200
+ it("exposes parser failures through Effect's typed channel", () => {
201
+ const result = Effect.runSync(Effect.flip(parseXml("<R>")));
202
+ assert.ok(result instanceof XmlParseError);
203
+ assert.match(result.message, /Unclosed element/);
204
+ });
205
+ it("can execute the same lazy Effect repeatedly", () => {
206
+ const effect = parseXml("<R>ok</R>");
207
+ assert.equal(Effect.runSync(effect).R, "ok");
208
+ assert.equal(Effect.runSync(effect).R, "ok");
209
+ });
210
+ });
211
+ //# sourceMappingURL=xml.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml.test.js","sourceRoot":"","sources":["../src/xml.test.ts"],"names":[],"mappings":"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"}