kassza 0.12.0 → 0.14.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.
Files changed (177) hide show
  1. package/README.en.md +48 -0
  2. package/README.md +427 -32
  3. package/agents/README.md +26 -6
  4. package/agents/api.md +218 -3
  5. package/agents/pitfalls.md +27 -3
  6. package/agents/recipes.md +280 -51
  7. package/agents/skills/kassza/SKILL.md +14 -8
  8. package/agents/skills/migrate-from-szamlazz-js/SKILL.md +39 -0
  9. package/dist/batch/index.cjs +346 -0
  10. package/dist/batch/index.d.cts +91 -0
  11. package/dist/batch/index.d.ts +91 -0
  12. package/dist/batch/index.js +339 -0
  13. package/dist/cli.cjs +643 -0
  14. package/dist/cli.d.cts +1 -0
  15. package/dist/cli.d.ts +1 -0
  16. package/dist/cli.js +643 -0
  17. package/dist/client-CLFvJCVW.cjs +1452 -0
  18. package/dist/{client-CL3fuH6A.js → client-Cvf-hTz_.js} +306 -515
  19. package/dist/client-DeWWQ-RZ.d.ts +341 -0
  20. package/dist/client-SVZu25MB.d.cts +341 -0
  21. package/dist/context-CFNKzStE.d.cts +449 -0
  22. package/dist/context-kb33TgzE.d.ts +449 -0
  23. package/dist/cookie-stores/index.cjs +21 -150
  24. package/dist/cookie-stores/index.d.cts +4 -63
  25. package/dist/cookie-stores/index.d.ts +4 -63
  26. package/dist/cookie-stores/index.js +3 -144
  27. package/dist/create-CflXrPip.js +204 -0
  28. package/dist/create-CvUvLUaT.cjs +257 -0
  29. package/dist/{create-once-D0pwuenl.cjs → create-once-9yxR_Er_.cjs} +291 -33
  30. package/dist/create-once-Bh6fOWkW.d.cts +20 -0
  31. package/dist/{create-once-CqdYmQD8.js → create-once-Ca2gMk1h.js} +250 -34
  32. package/dist/create-once-VKp0tVow.d.ts +20 -0
  33. package/dist/{crypto-B8lERvR1.cjs → crypto-Dpn4FHQ6.cjs} +9 -0
  34. package/dist/{crypto-DK_osBVy.js → crypto-usDg8L2K.js} +4 -1
  35. package/dist/data-link/index.cjs +232 -0
  36. package/dist/data-link/index.d.cts +29 -0
  37. package/dist/data-link/index.d.ts +29 -0
  38. package/dist/data-link/index.js +224 -0
  39. package/dist/delegation/index.cjs +35 -34
  40. package/dist/delegation/index.d.cts +2 -1
  41. package/dist/delegation/index.d.ts +2 -1
  42. package/dist/delegation/index.js +4 -3
  43. package/dist/{errors-DLrb0g64.js → errors-DtN4g5Z9.js} +9 -1
  44. package/dist/{errors-DxeuTslP.cjs → errors-EE96_6D_.cjs} +20 -0
  45. package/dist/get-BdMTseh4.cjs +271 -0
  46. package/dist/get-Byc9T5WO.d.cts +151 -0
  47. package/dist/get-Byc9T5WO.d.ts +151 -0
  48. package/dist/get-CZEShCcj.js +260 -0
  49. package/dist/index-BhUPY_EH.d.cts +109 -0
  50. package/dist/index-BqGgQ4t3.d.ts +109 -0
  51. package/dist/{index-CYAGCdKJ.d.cts → index-C-7yWV7L.d.cts} +24 -1
  52. package/dist/{index-CYAGCdKJ.d.ts → index-C-7yWV7L.d.ts} +24 -1
  53. package/dist/index.cjs +19 -5
  54. package/dist/index.d.cts +11 -19
  55. package/dist/index.d.ts +11 -19
  56. package/dist/index.js +6 -6
  57. package/dist/ipn/index.cjs +26 -5
  58. package/dist/ipn/index.d.cts +12 -1
  59. package/dist/ipn/index.d.ts +12 -1
  60. package/dist/ipn/index.js +26 -6
  61. package/dist/issue-Bin4tKD_.cjs +988 -0
  62. package/dist/issue-DMA1Nbr1.js +905 -0
  63. package/dist/journal/index.cjs +454 -0
  64. package/dist/journal/index.d.cts +18 -0
  65. package/dist/journal/index.d.ts +18 -0
  66. package/dist/journal/index.js +445 -0
  67. package/dist/journal-DvI81Kt7.d.cts +114 -0
  68. package/dist/journal-Y9qrIB8G.d.ts +114 -0
  69. package/dist/mcp/index.cjs +10 -0
  70. package/dist/mcp/index.d.cts +71 -0
  71. package/dist/mcp/index.d.ts +71 -0
  72. package/dist/mcp/index.js +2 -0
  73. package/dist/money/index.cjs +2 -1
  74. package/dist/money/index.d.cts +2 -2
  75. package/dist/money/index.d.ts +2 -2
  76. package/dist/money/index.js +2 -2
  77. package/dist/{money-DAA7OwiO.js → money-Cw457SD6.js} +120 -12
  78. package/dist/{money-DrhGkWHW.cjs → money-K9j0wPit.cjs} +124 -10
  79. package/dist/nav/index.cjs +1046 -0
  80. package/dist/nav/index.d.cts +247 -0
  81. package/dist/nav/index.d.ts +247 -0
  82. package/dist/nav/index.js +1012 -0
  83. package/dist/nav-BNbc8U0R.cjs +203 -0
  84. package/dist/nav-BcCerwWS.js +156 -0
  85. package/dist/node/index.cjs +124 -0
  86. package/dist/node/index.d.cts +35 -0
  87. package/dist/node/index.d.ts +35 -0
  88. package/dist/node/index.js +120 -0
  89. package/dist/observe/index.cjs +311 -0
  90. package/dist/observe/index.d.cts +53 -0
  91. package/dist/observe/index.d.ts +53 -0
  92. package/dist/observe/index.js +303 -0
  93. package/dist/once-BN_3B5OF.cjs +103 -0
  94. package/dist/once-CqqZxsXG.js +74 -0
  95. package/dist/parse-Cr7yQ3_z.js +291 -0
  96. package/dist/parse-DOA2XQ3e.cjs +380 -0
  97. package/dist/payments/barion.cjs +26 -2
  98. package/dist/payments/barion.d.cts +2 -2
  99. package/dist/payments/barion.d.ts +2 -2
  100. package/dist/payments/barion.js +26 -2
  101. package/dist/payments/index.cjs +7 -2
  102. package/dist/payments/index.d.cts +4 -4
  103. package/dist/payments/index.d.ts +4 -4
  104. package/dist/payments/index.js +3 -3
  105. package/dist/payments/paypal.cjs +16 -2
  106. package/dist/payments/paypal.d.cts +2 -2
  107. package/dist/payments/paypal.d.ts +2 -2
  108. package/dist/payments/paypal.js +16 -2
  109. package/dist/payments/revolut.cjs +17 -3
  110. package/dist/payments/revolut.d.cts +2 -2
  111. package/dist/payments/revolut.d.ts +2 -2
  112. package/dist/payments/revolut.js +17 -3
  113. package/dist/payments/simplepay.cjs +37 -5
  114. package/dist/payments/simplepay.d.cts +2 -2
  115. package/dist/payments/simplepay.d.ts +2 -2
  116. package/dist/payments/simplepay.js +37 -5
  117. package/dist/payments/stripe.cjs +20 -3
  118. package/dist/payments/stripe.d.cts +2 -2
  119. package/dist/payments/stripe.d.ts +2 -2
  120. package/dist/payments/stripe.js +20 -3
  121. package/dist/push-BXj0Sf0Z.d.ts +52 -0
  122. package/dist/push-D4nNbCNV.d.cts +52 -0
  123. package/dist/reference-B5TATqb5.js +124 -0
  124. package/dist/reference-BIdYMK0t.cjs +183 -0
  125. package/dist/reports/index.cjs +11 -164
  126. package/dist/reports/index.d.cts +1 -1
  127. package/dist/reports/index.d.ts +1 -1
  128. package/dist/reports/index.js +1 -154
  129. package/dist/request-body-CH6ZGOrq.cjs +34 -0
  130. package/dist/request-body-uZHMRlQr.js +29 -0
  131. package/dist/serialize-B2eFh3D-.js +219 -0
  132. package/dist/serialize-CquIsxA-.cjs +290 -0
  133. package/dist/server-BrJUbXs7.js +1505 -0
  134. package/dist/server-Dw9j8Mnd.cjs +1558 -0
  135. package/dist/session-Ckl5eJhV.d.ts +7 -0
  136. package/dist/{session-CKOuE6Jc.cjs → session-DeM5vjvC.cjs} +69 -13
  137. package/dist/{session-rMKaJcmq.js → session-SaEEXu2N.js} +58 -14
  138. package/dist/session-YbChChx7.d.cts +7 -0
  139. package/dist/storage/fs.cjs +1 -1
  140. package/dist/storage/fs.js +1 -1
  141. package/dist/storage/index.cjs +1 -1
  142. package/dist/storage/index.js +1 -1
  143. package/dist/store-C1rHd9DB.d.cts +19 -0
  144. package/dist/store-C1rHd9DB.d.ts +19 -0
  145. package/dist/stores/index.cjs +24 -0
  146. package/dist/stores/index.d.cts +4 -0
  147. package/dist/stores/index.d.ts +4 -0
  148. package/dist/stores/index.js +3 -0
  149. package/dist/stores-BNrS0dWl.cjs +506 -0
  150. package/dist/stores-DhjGBrl_.js +441 -0
  151. package/dist/testing/index.cjs +1500 -15
  152. package/dist/testing/index.d.cts +198 -3
  153. package/dist/testing/index.d.ts +198 -3
  154. package/dist/testing/index.js +1498 -15
  155. package/dist/{types-COf1LAD-.d.ts → types-B1A8mUIE.d.cts} +14 -2
  156. package/dist/{types-COf1LAD-.d.cts → types-ByAEvGsZ.d.ts} +14 -2
  157. package/dist/{types-k--zHf4l.d.ts → types-D1zDOH_F.d.ts} +1 -1
  158. package/dist/{types-DH8QoNZK.d.cts → types-lnKkQdot.d.cts} +1 -1
  159. package/dist/warnings-B3DXnveC.d.cts +31 -0
  160. package/dist/warnings-B3DXnveC.d.ts +31 -0
  161. package/dist/warnings-DeIw5RFj.cjs +20 -0
  162. package/dist/warnings-DwTl5J-2.js +15 -0
  163. package/dist/{webhook-D4lvtex1.js → webhook-CQVShAfI.js} +47 -26
  164. package/dist/{webhook-C76bV-4R.cjs → webhook-Ckj-_hPD.cjs} +70 -25
  165. package/dist/webhook-CmdhGiH5.d.cts +11 -0
  166. package/dist/webhook-D6lEejob.d.ts +11 -0
  167. package/llms.txt +6 -5
  168. package/package.json +134 -4
  169. package/dist/client-CickRRFr.d.ts +0 -838
  170. package/dist/client-CsmGIFRS.cjs +0 -1637
  171. package/dist/client-DvWZoX_E.d.cts +0 -838
  172. package/dist/issue-BsyYdrIG.cjs +0 -1531
  173. package/dist/issue-C6Fcjvln.js +0 -1274
  174. package/dist/session-Dm_45x8K.d.cts +0 -11
  175. package/dist/session-Dm_45x8K.d.ts +0 -11
  176. package/dist/webhook-CfaDgcL0.d.cts +0 -6
  177. package/dist/webhook-q2OzNwd7.d.ts +0 -6
@@ -0,0 +1,290 @@
1
+ //#region src/core/xml/parse.ts
2
+ var XmlParseError = class extends Error {
3
+ name = "XmlParseError";
4
+ };
5
+ const NAMED_ENTITIES = {
6
+ amp: "&",
7
+ lt: "<",
8
+ gt: ">",
9
+ quot: "\"",
10
+ apos: "'"
11
+ };
12
+ const MAX_CODE_POINT = 1114111;
13
+ const MIN_SURROGATE = 55296;
14
+ const MAX_SURROGATE = 57343;
15
+ function codePointToString(codePoint, fallback) {
16
+ return Number.isInteger(codePoint) && codePoint >= 0 && codePoint <= MAX_CODE_POINT && (codePoint < MIN_SURROGATE || codePoint > MAX_SURROGATE) ? String.fromCodePoint(codePoint) : fallback;
17
+ }
18
+ function decodeEntities(value) {
19
+ return value.replace(/&(#x[0-9a-fA-F]+|#\d+|[a-zA-Z]+);/g, (match, entity) => {
20
+ if (entity.startsWith("#x")) return codePointToString(Number.parseInt(entity.slice(2), 16), match);
21
+ if (entity.startsWith("#")) return codePointToString(Number.parseInt(entity.slice(1), 10), match);
22
+ return NAMED_ENTITIES[entity] ?? match;
23
+ });
24
+ }
25
+ function localName(qualifiedName) {
26
+ const colon = qualifiedName.indexOf(":");
27
+ return colon === -1 ? qualifiedName : qualifiedName.slice(colon + 1);
28
+ }
29
+ const ATTRIBUTE_PATTERN = /([^\s=/>]+)\s*=\s*("([^"]*)"|'([^']*)')/g;
30
+ function parseAttributes(source) {
31
+ const attributes = {};
32
+ for (const match of source.matchAll(ATTRIBUTE_PATTERN)) {
33
+ const [, name, , doubleQuoted, singleQuoted] = match;
34
+ if (name === void 0) continue;
35
+ attributes[name] = decodeEntities(doubleQuoted ?? singleQuoted ?? "");
36
+ }
37
+ return attributes;
38
+ }
39
+ function findTagEnd(xml, from) {
40
+ let quote;
41
+ for (let index = from; index < xml.length; index++) {
42
+ const char = xml[index];
43
+ if (quote !== void 0) {
44
+ if (char === quote) quote = void 0;
45
+ } else if (char === "\"" || char === "'") quote = char;
46
+ else if (char === ">") return index;
47
+ }
48
+ return -1;
49
+ }
50
+ function skipUntil(xml, from, terminator) {
51
+ const end = xml.indexOf(terminator, from);
52
+ if (end === -1) throw new XmlParseError(`Lezáratlan szerkezet, hiányzik: ${terminator}`);
53
+ return end + terminator.length;
54
+ }
55
+ function parseXml(xml) {
56
+ const stack = [];
57
+ let root;
58
+ let position = xml.charCodeAt(0) === 65279 ? 1 : 0;
59
+ const appendText = (value) => {
60
+ const current = stack.at(-1);
61
+ if (current) current.text += value;
62
+ };
63
+ while (position < xml.length) {
64
+ const tagStart = xml.indexOf("<", position);
65
+ if (tagStart === -1) {
66
+ appendText(decodeEntities(xml.slice(position)));
67
+ break;
68
+ }
69
+ if (tagStart > position) appendText(decodeEntities(xml.slice(position, tagStart)));
70
+ if (xml.startsWith("<!--", tagStart)) {
71
+ position = skipUntil(xml, tagStart + 4, "-->");
72
+ continue;
73
+ }
74
+ if (xml.startsWith("<![CDATA[", tagStart)) {
75
+ const end = xml.indexOf("]]>", tagStart + 9);
76
+ if (end === -1) throw new XmlParseError("Lezáratlan CDATA szakasz");
77
+ appendText(xml.slice(tagStart + 9, end));
78
+ position = end + 3;
79
+ continue;
80
+ }
81
+ if (xml.startsWith("<?", tagStart)) {
82
+ position = skipUntil(xml, tagStart + 2, "?>");
83
+ continue;
84
+ }
85
+ if (xml.startsWith("<!", tagStart)) {
86
+ position = skipUntil(xml, tagStart + 2, ">");
87
+ continue;
88
+ }
89
+ const tagEnd = findTagEnd(xml, tagStart + 1);
90
+ if (tagEnd === -1) throw new XmlParseError("Lezáratlan XML tag");
91
+ const rawTag = xml.slice(tagStart + 1, tagEnd);
92
+ position = tagEnd + 1;
93
+ if (rawTag.startsWith("/")) {
94
+ const closingName = localName(rawTag.slice(1).trim());
95
+ const current = stack.pop();
96
+ if (!current || current.name !== closingName) throw new XmlParseError(`Váratlan záró tag: ${closingName}`);
97
+ continue;
98
+ }
99
+ const selfClosing = rawTag.endsWith("/");
100
+ const tagBody = selfClosing ? rawTag.slice(0, -1) : rawTag;
101
+ const nameMatch = /^\s*([^\s/>]+)/.exec(tagBody);
102
+ if (!nameMatch?.[1]) throw new XmlParseError("Érvénytelen XML tag");
103
+ const element = {
104
+ name: localName(nameMatch[1]),
105
+ attributes: parseAttributes(tagBody.slice(nameMatch[0].length)),
106
+ children: [],
107
+ text: ""
108
+ };
109
+ const parent = stack.at(-1);
110
+ if (parent) parent.children.push(element);
111
+ else if (root) throw new XmlParseError("Az XML-nek csak egy gyökéreleme lehet");
112
+ else root = element;
113
+ if (!selfClosing) {
114
+ if (stack.length >= 256) throw new XmlParseError(`Az XML túl mélyen ágyazott (legfeljebb 256 szint).`);
115
+ stack.push(element);
116
+ }
117
+ }
118
+ if (stack.length > 0) throw new XmlParseError(`Lezáratlan elem: ${stack.at(-1)?.name}`);
119
+ if (!root) throw new XmlParseError("Üres XML dokumentum");
120
+ return root;
121
+ }
122
+ function findChild(element, name) {
123
+ return element?.children.find((child) => child.name === name);
124
+ }
125
+ function findChildren(element, name) {
126
+ return element?.children.filter((child) => child.name === name) ?? [];
127
+ }
128
+ function childText(element, name) {
129
+ const child = findChild(element, name);
130
+ if (!child) return void 0;
131
+ const value = child.text.trim();
132
+ return value === "" ? void 0 : value;
133
+ }
134
+ function childNumber(element, name) {
135
+ const value = childText(element, name);
136
+ if (value === void 0) return void 0;
137
+ const parsed = Number(value.replace(",", "."));
138
+ return Number.isFinite(parsed) ? parsed : void 0;
139
+ }
140
+ function childBoolean(element, name) {
141
+ const value = childText(element, name)?.toLowerCase();
142
+ if (value === "true" || value === "1") return true;
143
+ if (value === "false" || value === "0") return false;
144
+ }
145
+ //#endregion
146
+ //#region src/core/xml/serialize.ts
147
+ function el(name, content, attributes) {
148
+ return attributes === void 0 ? {
149
+ name,
150
+ content
151
+ } : {
152
+ name,
153
+ content,
154
+ attributes
155
+ };
156
+ }
157
+ function optionalEl(name, content) {
158
+ if (content === void 0 || content === null) return void 0;
159
+ if (Array.isArray(content) && !content.some(Boolean)) return void 0;
160
+ return {
161
+ name,
162
+ content
163
+ };
164
+ }
165
+ function isAllowedXmlChar(codePoint) {
166
+ if (codePoint === 9 || codePoint === 10 || codePoint === 13) return true;
167
+ if (codePoint < 32) return false;
168
+ if (codePoint >= 55296 && codePoint <= 57343) return false;
169
+ return codePoint !== 65534 && codePoint !== 65535;
170
+ }
171
+ function stripInvalidXmlChars(value) {
172
+ let result = "";
173
+ for (const char of value) if (isAllowedXmlChar(char.codePointAt(0) ?? 0)) result += char;
174
+ return result;
175
+ }
176
+ function escapeXml(value) {
177
+ return stripInvalidXmlChars(value).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");
178
+ }
179
+ function formatXmlNumber(value) {
180
+ if (!Number.isFinite(value)) throw new RangeError(`Az XML-be csak véges szám írható, kapott: ${value}`);
181
+ if (Math.abs(value) > Number.MAX_SAFE_INTEGER) throw new RangeError(`Az XML-be írható szám abszolút értéke legfeljebb 2^53 - 1 lehet, kapott: ${value}`);
182
+ if (Number.isInteger(value)) return value.toString();
183
+ const fixed = value.toFixed(10).replace(/0+$/, "").replace(/\.$/, "");
184
+ return fixed === "-0" ? "0" : fixed;
185
+ }
186
+ function formatScalar(value) {
187
+ if (typeof value === "boolean") return value ? "true" : "false";
188
+ if (typeof value === "number") return formatXmlNumber(value);
189
+ return escapeXml(value);
190
+ }
191
+ function isPresent(child) {
192
+ return Boolean(child);
193
+ }
194
+ function renderAttributes(attributes) {
195
+ if (attributes === void 0) return "";
196
+ return Object.entries(attributes).map(([key, value]) => ` ${key}="${escapeXml(value)}"`).join("");
197
+ }
198
+ function renderNode(node, depth) {
199
+ const indent = " ".repeat(depth);
200
+ const { name, content } = node;
201
+ const open = `${name}${renderAttributes(node.attributes)}`;
202
+ if (content === void 0 || content === null) return `${indent}<${open}></${name}>`;
203
+ if (!Array.isArray(content)) return `${indent}<${open}>${formatScalar(content)}</${name}>`;
204
+ const children = content.filter(isPresent);
205
+ if (children.length === 0) return `${indent}<${open}></${name}>`;
206
+ return `${indent}<${open}>\n${children.map((child) => renderNode(child, depth + 1)).join("\n")}\n${indent}</${name}>`;
207
+ }
208
+ const XSI_NAMESPACE = "http://www.w3.org/2001/XMLSchema-instance";
209
+ function buildXmlDocument(options) {
210
+ const declarations = /* @__PURE__ */ new Map([["xmlns", options.namespace]]);
211
+ for (const [prefix, uri] of Object.entries(options.namespaces ?? {})) declarations.set(`xmlns:${prefix}`, uri);
212
+ if (options.schemaLocation !== void 0) declarations.set("xmlns:xsi", XSI_NAMESPACE);
213
+ const attributes = [...declarations].map(([name, value]) => `${name}="${escapeXml(value)}"`);
214
+ if (options.schemaLocation !== void 0) attributes.push(`xsi:schemaLocation="${options.namespace} ${options.schemaLocation}"`);
215
+ const body = options.children.filter(isPresent).map((child) => renderNode(child, 1)).join("\n");
216
+ return `<?xml version="1.0" encoding="UTF-8"?>\n<${options.root} ${attributes.join(" ")}>\n${body}\n</${options.root}>\n`;
217
+ }
218
+ //#endregion
219
+ Object.defineProperty(exports, "XSI_NAMESPACE", {
220
+ enumerable: true,
221
+ get: function() {
222
+ return XSI_NAMESPACE;
223
+ }
224
+ });
225
+ Object.defineProperty(exports, "XmlParseError", {
226
+ enumerable: true,
227
+ get: function() {
228
+ return XmlParseError;
229
+ }
230
+ });
231
+ Object.defineProperty(exports, "buildXmlDocument", {
232
+ enumerable: true,
233
+ get: function() {
234
+ return buildXmlDocument;
235
+ }
236
+ });
237
+ Object.defineProperty(exports, "childBoolean", {
238
+ enumerable: true,
239
+ get: function() {
240
+ return childBoolean;
241
+ }
242
+ });
243
+ Object.defineProperty(exports, "childNumber", {
244
+ enumerable: true,
245
+ get: function() {
246
+ return childNumber;
247
+ }
248
+ });
249
+ Object.defineProperty(exports, "childText", {
250
+ enumerable: true,
251
+ get: function() {
252
+ return childText;
253
+ }
254
+ });
255
+ Object.defineProperty(exports, "el", {
256
+ enumerable: true,
257
+ get: function() {
258
+ return el;
259
+ }
260
+ });
261
+ Object.defineProperty(exports, "findChild", {
262
+ enumerable: true,
263
+ get: function() {
264
+ return findChild;
265
+ }
266
+ });
267
+ Object.defineProperty(exports, "findChildren", {
268
+ enumerable: true,
269
+ get: function() {
270
+ return findChildren;
271
+ }
272
+ });
273
+ Object.defineProperty(exports, "formatXmlNumber", {
274
+ enumerable: true,
275
+ get: function() {
276
+ return formatXmlNumber;
277
+ }
278
+ });
279
+ Object.defineProperty(exports, "optionalEl", {
280
+ enumerable: true,
281
+ get: function() {
282
+ return optionalEl;
283
+ }
284
+ });
285
+ Object.defineProperty(exports, "parseXml", {
286
+ enumerable: true,
287
+ get: function() {
288
+ return parseXml;
289
+ }
290
+ });