xml-tokenizer 0.0.32 → 0.0.34

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 (123) hide show
  1. package/dist/cjs/config.js +1 -43
  2. package/dist/cjs/get-q-name.js +1 -8
  3. package/dist/cjs/index.js +1 -80
  4. package/dist/cjs/processor/process.js +1 -0
  5. package/dist/cjs/processor/processors/path-tracker.js +1 -0
  6. package/dist/cjs/processor/validate-processor-order.js +5 -0
  7. package/dist/cjs/selector/TokenSelectState.js +1 -107
  8. package/dist/cjs/selector/TokenSelectStateMachine.js +1 -151
  9. package/dist/cjs/selector/TokenSelector.js +1 -140
  10. package/dist/cjs/selector/match-string.js +1 -22
  11. package/dist/cjs/selector/select.js +1 -20
  12. package/dist/cjs/token-to-xml.js +1 -45
  13. package/dist/cjs/tokenizer/XmlError.js +1 -97
  14. package/dist/cjs/tokenizer/XmlStream.js +1 -479
  15. package/dist/cjs/tokenizer/ascii-constants.js +1 -70
  16. package/dist/cjs/tokenizer/tokenize.js +2 -420
  17. package/dist/cjs/tokenizer/utils.js +1 -48
  18. package/dist/cjs/tokens-to-xml.js +1 -14
  19. package/dist/cjs/xml-to-object.js +1 -70
  20. package/dist/cjs/xml-to-simplified-object.js +1 -87
  21. package/dist/esm/config.js +1 -39
  22. package/dist/esm/get-q-name.js +1 -6
  23. package/dist/esm/index.js +1 -16
  24. package/dist/esm/processor/process.js +1 -0
  25. package/dist/esm/processor/processors/path-tracker.js +1 -0
  26. package/dist/esm/processor/validate-processor-order.js +5 -0
  27. package/dist/esm/selector/TokenSelectState.js +1 -103
  28. package/dist/esm/selector/TokenSelectStateMachine.js +1 -149
  29. package/dist/esm/selector/TokenSelector.js +1 -138
  30. package/dist/esm/selector/match-string.js +1 -20
  31. package/dist/esm/selector/select.js +1 -18
  32. package/dist/esm/token-to-xml.js +1 -43
  33. package/dist/esm/tokenizer/XmlError.js +1 -95
  34. package/dist/esm/tokenizer/XmlStream.js +1 -477
  35. package/dist/esm/tokenizer/ascii-constants.js +1 -36
  36. package/dist/esm/tokenizer/tokenize.js +2 -417
  37. package/dist/esm/tokenizer/utils.js +1 -41
  38. package/dist/esm/tokens-to-xml.js +1 -12
  39. package/dist/esm/xml-to-object.js +1 -67
  40. package/dist/esm/xml-to-simplified-object.js +1 -84
  41. package/dist/types/config.d.ts +0 -1
  42. package/dist/types/get-q-name.d.ts +0 -1
  43. package/dist/types/index.d.ts +1 -1
  44. package/dist/types/processor/index.d.ts +4 -0
  45. package/dist/types/processor/process.d.ts +3 -0
  46. package/dist/types/processor/processors/index.d.ts +1 -0
  47. package/dist/types/processor/processors/path-tracker.d.ts +5 -0
  48. package/dist/types/processor/types.d.ts +10 -0
  49. package/dist/types/processor/validate-processor-order.d.ts +2 -0
  50. package/dist/types/selector/TokenSelectState.d.ts +0 -1
  51. package/dist/types/selector/TokenSelectStateMachine.d.ts +0 -1
  52. package/dist/types/selector/TokenSelector.d.ts +0 -1
  53. package/dist/types/selector/index.d.ts +0 -1
  54. package/dist/types/selector/match-string.d.ts +0 -1
  55. package/dist/types/selector/select.d.ts +0 -1
  56. package/dist/types/selector/types.d.ts +0 -1
  57. package/dist/types/token-to-xml.d.ts +0 -1
  58. package/dist/types/tokenizer/XmlError.d.ts +0 -1
  59. package/dist/types/tokenizer/XmlStream.d.ts +20 -1
  60. package/dist/types/tokenizer/ascii-constants.d.ts +0 -1
  61. package/dist/types/tokenizer/index.d.ts +0 -1
  62. package/dist/types/tokenizer/tokenize.d.ts +0 -1
  63. package/dist/types/tokenizer/types.d.ts +0 -1
  64. package/dist/types/tokenizer/utils.d.ts +0 -1
  65. package/dist/types/tokens-to-xml.d.ts +0 -1
  66. package/dist/types/xml-to-object.d.ts +0 -1
  67. package/dist/types/xml-to-simplified-object.d.ts +0 -1
  68. package/package.json +6 -6
  69. package/dist/cjs/config.js.map +0 -1
  70. package/dist/cjs/get-q-name.js.map +0 -1
  71. package/dist/cjs/index.js.map +0 -1
  72. package/dist/cjs/selector/TokenSelectState.js.map +0 -1
  73. package/dist/cjs/selector/TokenSelectStateMachine.js.map +0 -1
  74. package/dist/cjs/selector/TokenSelector.js.map +0 -1
  75. package/dist/cjs/selector/match-string.js.map +0 -1
  76. package/dist/cjs/selector/select.js.map +0 -1
  77. package/dist/cjs/token-to-xml.js.map +0 -1
  78. package/dist/cjs/tokenizer/XmlError.js.map +0 -1
  79. package/dist/cjs/tokenizer/XmlStream.js.map +0 -1
  80. package/dist/cjs/tokenizer/ascii-constants.js.map +0 -1
  81. package/dist/cjs/tokenizer/tokenize.js.map +0 -1
  82. package/dist/cjs/tokenizer/utils.js.map +0 -1
  83. package/dist/cjs/tokens-to-xml.js.map +0 -1
  84. package/dist/cjs/xml-to-object.js.map +0 -1
  85. package/dist/cjs/xml-to-simplified-object.js.map +0 -1
  86. package/dist/esm/config.js.map +0 -1
  87. package/dist/esm/get-q-name.js.map +0 -1
  88. package/dist/esm/index.js.map +0 -1
  89. package/dist/esm/selector/TokenSelectState.js.map +0 -1
  90. package/dist/esm/selector/TokenSelectStateMachine.js.map +0 -1
  91. package/dist/esm/selector/TokenSelector.js.map +0 -1
  92. package/dist/esm/selector/match-string.js.map +0 -1
  93. package/dist/esm/selector/select.js.map +0 -1
  94. package/dist/esm/token-to-xml.js.map +0 -1
  95. package/dist/esm/tokenizer/XmlError.js.map +0 -1
  96. package/dist/esm/tokenizer/XmlStream.js.map +0 -1
  97. package/dist/esm/tokenizer/ascii-constants.js.map +0 -1
  98. package/dist/esm/tokenizer/tokenize.js.map +0 -1
  99. package/dist/esm/tokenizer/utils.js.map +0 -1
  100. package/dist/esm/tokens-to-xml.js.map +0 -1
  101. package/dist/esm/xml-to-object.js.map +0 -1
  102. package/dist/esm/xml-to-simplified-object.js.map +0 -1
  103. package/dist/types/config.d.ts.map +0 -1
  104. package/dist/types/get-q-name.d.ts.map +0 -1
  105. package/dist/types/index.d.ts.map +0 -1
  106. package/dist/types/selector/TokenSelectState.d.ts.map +0 -1
  107. package/dist/types/selector/TokenSelectStateMachine.d.ts.map +0 -1
  108. package/dist/types/selector/TokenSelector.d.ts.map +0 -1
  109. package/dist/types/selector/index.d.ts.map +0 -1
  110. package/dist/types/selector/match-string.d.ts.map +0 -1
  111. package/dist/types/selector/select.d.ts.map +0 -1
  112. package/dist/types/selector/types.d.ts.map +0 -1
  113. package/dist/types/token-to-xml.d.ts.map +0 -1
  114. package/dist/types/tokenizer/XmlError.d.ts.map +0 -1
  115. package/dist/types/tokenizer/XmlStream.d.ts.map +0 -1
  116. package/dist/types/tokenizer/ascii-constants.d.ts.map +0 -1
  117. package/dist/types/tokenizer/index.d.ts.map +0 -1
  118. package/dist/types/tokenizer/tokenize.d.ts.map +0 -1
  119. package/dist/types/tokenizer/types.d.ts.map +0 -1
  120. package/dist/types/tokenizer/utils.d.ts.map +0 -1
  121. package/dist/types/tokens-to-xml.d.ts.map +0 -1
  122. package/dist/types/xml-to-object.d.ts.map +0 -1
  123. package/dist/types/xml-to-simplified-object.d.ts.map +0 -1
@@ -1,420 +1,2 @@
1
- 'use strict';
2
-
3
- var getQName = require('../get-q-name.js');
4
- var asciiConstants = require('./ascii-constants.js');
5
- var utils = require('./utils.js');
6
- var XmlError = require('./XmlError.js');
7
- var XmlStream = require('./XmlStream.js');
8
-
9
- const BOM = "\uFEFF";
10
- const XML_DECLARATION_START = "<?xml ";
11
- const XML_DECLARATION_END = "?>";
12
- const ENTITY_DECLARATION_START = "<!ENTITY";
13
- const ELEMENT_DECLARATION_START = "<!ELEMENT";
14
- const ATTLIST_DECLARATION_START = "<!ATTLIST";
15
- const NOTATION_DECLARATION_START = "<!NOTATION";
16
- const DOCTYPE_START = "<!DOCTYPE";
17
- const PI_START = "<?";
18
- const PI_END = "?>";
19
- const COMMENT_START = "<!--";
20
- const COMMENT_END = "-->";
21
- const CDATA_START = "<![CDATA[";
22
- const CDATA_END = "]]>";
23
- const NDATA = "NDATA";
24
- const PUBLIC = "PUBLIC";
25
- const SYSTEM = "SYSTEM";
26
- const VERSION = "version";
27
- const ENCODING = "encoding";
28
- const STANDALONE = "standalone";
29
- function tokenize(xmlString, tokenCallback, options = {}) {
30
- tokenizeXmlStream(new XmlStream.XmlStream(xmlString, options), tokenCallback);
31
- }
32
- function tokenizeXmlStream(s, tokenCallback) {
33
- if (s.startsWith(BOM)) {
34
- s.advance(1);
35
- }
36
- if (s.startsWith(XML_DECLARATION_START)) {
37
- parseDeclaration(s);
38
- }
39
- parseMisc(s, tokenCallback);
40
- s.skipSpaces();
41
- if (s.startsWith(DOCTYPE_START) || s.startsWith(DOCTYPE_START.toLowerCase())) {
42
- if (!s.config.allowDtd) {
43
- throw new XmlError.XmlError({ type: "DtdDetected" });
44
- }
45
- parseDoctype(s, tokenCallback);
46
- parseMisc(s, tokenCallback);
47
- }
48
- s.skipSpaces();
49
- if (s.config.strictDocument) {
50
- if (!s.atEnd() && s.currCodeUnit() === asciiConstants.LESS_THAN) {
51
- parseElement(s, tokenCallback);
52
- }
53
- parseMisc(s, tokenCallback);
54
- if (!s.atEnd()) {
55
- throw new XmlError.XmlError({ type: "UnknownToken", message: "Not at end" }, s.genTextPos());
56
- }
57
- } else {
58
- while (!s.atEnd()) {
59
- if (s.currCodeUnit() === asciiConstants.LESS_THAN) {
60
- parseElement(s, tokenCallback);
61
- } else {
62
- parseText(s, tokenCallback);
63
- }
64
- parseMisc(s, tokenCallback);
65
- }
66
- }
67
- }
68
- function parseMisc(s, tokenCallback) {
69
- while (!s.atEnd()) {
70
- s.skipSpaces();
71
- if (s.startsWith(COMMENT_START)) {
72
- parseComment(s, tokenCallback);
73
- } else if (s.startsWith(PI_START)) {
74
- parsePi(s, tokenCallback);
75
- } else {
76
- break;
77
- }
78
- }
79
- }
80
- function parseDeclaration(s) {
81
- function consumeSpaces(_s) {
82
- if (_s.startsWithSpace()) {
83
- _s.skipSpaces();
84
- } else if (!_s.startsWith(XML_DECLARATION_END) && !_s.atEnd()) {
85
- throw new XmlError.XmlError(
86
- { type: "InvalidChar", expected: "a whitespace", actual: _s.currCodeUnitUnchecked() },
87
- _s.genTextPos()
88
- );
89
- }
90
- }
91
- s.advance(5);
92
- consumeSpaces(s);
93
- if (!s.startsWith(VERSION)) {
94
- throw new XmlError.XmlError({ type: "InvalidString", expected: "version" }, s.genTextPos());
95
- }
96
- parseAttribute(s);
97
- consumeSpaces(s);
98
- if (s.startsWith(ENCODING)) {
99
- parseAttribute(s);
100
- consumeSpaces(s);
101
- }
102
- if (s.startsWith(STANDALONE)) {
103
- parseAttribute(s);
104
- }
105
- s.skipSpaces();
106
- s.skipString(XML_DECLARATION_END);
107
- }
108
- function parseComment(s, tokenCallback) {
109
- const start = s.getPos();
110
- s.advance(4);
111
- const text = s.consumeCodeUnitsWhile((c, _s) => !(c === asciiConstants.HYPHEN && _s.startsWith(COMMENT_END)));
112
- s.skipString(COMMENT_END);
113
- if (text.includes("--") || text.endsWith("-")) {
114
- throw new XmlError.XmlError({ type: "InvalidComment" }, s.genTextPosFrom(start));
115
- }
116
- tokenCallback({ type: "Comment", text, range: s.rangeFrom(start) }, s);
117
- }
118
- function parsePi(s, tokenCallback) {
119
- if (s.startsWith(XML_DECLARATION_START)) {
120
- throw new XmlError.XmlError({ type: "UnexpectedDeclaration" }, s.genTextPos());
121
- }
122
- const start = s.getPos();
123
- s.advance(2);
124
- const target = s.consumeName();
125
- s.skipSpaces();
126
- const content = s.consumeCodeUnitsWhile(
127
- (c, _s) => !(c === asciiConstants.QUESTION_MARK && _s.startsWith(PI_END))
128
- );
129
- s.skipString(PI_END);
130
- tokenCallback(
131
- {
132
- type: "ProcessingInstruction",
133
- target,
134
- content: content.length === 0 ? void 0 : content,
135
- range: s.rangeFrom(start)
136
- },
137
- s
138
- );
139
- }
140
- function parseDoctype(s, tokenCallback) {
141
- const start = s.getPos();
142
- parseDoctypeStart(s);
143
- s.skipSpaces();
144
- if (s.currCodeUnit() === asciiConstants.GREATER_THAN) {
145
- s.advance(1);
146
- return;
147
- }
148
- s.advance(1);
149
- while (!s.atEnd()) {
150
- s.skipSpaces();
151
- if (s.startsWith(ENTITY_DECLARATION_START)) {
152
- parseEntityDecl(s, tokenCallback);
153
- } else if (s.startsWith(COMMENT_START)) {
154
- parseComment(s, tokenCallback);
155
- } else if (s.startsWith(PI_START)) {
156
- parsePi(s, tokenCallback);
157
- } else if (s.startsWith("]")) {
158
- s.advance(1);
159
- s.skipSpaces();
160
- if (s.currCodeUnit() === asciiConstants.GREATER_THAN) {
161
- s.advance(1);
162
- break;
163
- } else {
164
- throw new XmlError.XmlError(
165
- { type: "InvalidChar", expected: "'>'", actual: s.currCodeUnitUnchecked() },
166
- s.genTextPos()
167
- );
168
- }
169
- } else if (s.startsWith(ELEMENT_DECLARATION_START) || s.startsWith(ATTLIST_DECLARATION_START) || s.startsWith(NOTATION_DECLARATION_START)) {
170
- try {
171
- consumeDecl(s);
172
- } catch (e) {
173
- throw new XmlError.XmlError(
174
- { type: "UnknownToken", message: "Failed to consume declaration" },
175
- s.genTextPosFrom(start)
176
- );
177
- }
178
- } else {
179
- throw new XmlError.XmlError(
180
- { type: "UnknownToken", message: "Failed to parse doctype" },
181
- s.genTextPos()
182
- );
183
- }
184
- }
185
- }
186
- function parseDoctypeStart(s) {
187
- s.advance(9);
188
- s.consumeSpaces();
189
- s.skipName();
190
- s.skipSpaces();
191
- parseExternalId(s);
192
- s.skipSpaces();
193
- const currCodeUnit = s.currCodeUnit();
194
- if (currCodeUnit !== asciiConstants.OPEN_SQUARE_BRACKET && currCodeUnit !== asciiConstants.GREATER_THAN) {
195
- throw new XmlError.XmlError(
196
- { type: "InvalidChar", expected: "'[' or '>'", actual: currCodeUnit },
197
- s.genTextPos()
198
- );
199
- }
200
- }
201
- function parseExternalId(s) {
202
- if (s.startsWith(SYSTEM) || s.startsWith(PUBLIC)) {
203
- const start = s.getPos();
204
- s.advance(6);
205
- const id = s.sliceBack(start);
206
- s.consumeSpaces();
207
- const quote = s.consumeQuote();
208
- s.consumeCodeUnitsWhile((c) => c !== quote);
209
- s.consumeCodeUnit(quote);
210
- if (id === PUBLIC) {
211
- s.consumeSpaces();
212
- const _quote = s.consumeQuote();
213
- s.consumeCodeUnitsWhile((c) => c !== _quote);
214
- s.consumeCodeUnit(_quote);
215
- }
216
- return true;
217
- }
218
- return false;
219
- }
220
- function parseEntityDecl(s, tokenCallback) {
221
- s.advance(8);
222
- s.consumeSpaces();
223
- const isGe = !s.tryConsumeCodeUnit(asciiConstants.PERCENT);
224
- if (!isGe) {
225
- s.consumeSpaces();
226
- }
227
- const name = s.consumeName();
228
- s.consumeSpaces();
229
- const definition = parseEntityDef(s, isGe);
230
- if (definition !== null) {
231
- tokenCallback({ type: "EntityDeclaration", name, definition }, s);
232
- }
233
- s.skipSpaces();
234
- s.consumeCodeUnit(asciiConstants.GREATER_THAN);
235
- }
236
- function parseEntityDef(s, isGe) {
237
- const currCodeUnit = s.currCodeUnit();
238
- if (currCodeUnit === asciiConstants.DOUBLE_QUOTE || currCodeUnit === asciiConstants.SINGLE_QUOTE) {
239
- const quote = s.consumeQuote();
240
- const start = s.getPos();
241
- s.skipCodeUnitsWhile((c) => c !== quote);
242
- const value = s.sliceBack(start);
243
- s.consumeCodeUnit(quote);
244
- return value;
245
- } else if (currCodeUnit === asciiConstants.UPPERCASE_S || currCodeUnit === asciiConstants.UPPERCASE_P) {
246
- if (parseExternalId(s)) {
247
- if (isGe) {
248
- s.skipSpaces();
249
- if (s.startsWith(NDATA)) {
250
- s.advance(5);
251
- s.consumeSpaces();
252
- s.skipName();
253
- }
254
- }
255
- return null;
256
- }
257
- throw new XmlError.XmlError({ type: "InvalidExternalID" }, s.genTextPos());
258
- } else {
259
- throw new XmlError.XmlError(
260
- { type: "InvalidChar", expected: "a quote, SYSTEM or PUBLIC", actual: currCodeUnit },
261
- s.genTextPos()
262
- );
263
- }
264
- }
265
- function consumeDecl(s) {
266
- s.skipCodeUnitsWhile((c) => c !== asciiConstants.GREATER_THAN);
267
- s.consumeCodeUnit(asciiConstants.GREATER_THAN);
268
- }
269
- function parseElement(s, tokenCallback) {
270
- const start = s.getPos();
271
- s.advance(1);
272
- const [prefix, local] = s.consumeQName();
273
- tokenCallback({ type: "ElementStart", prefix, local, start }, s);
274
- let open = false;
275
- while (!s.atEnd()) {
276
- const hasSpace = s.startsWithSpace();
277
- s.skipSpaces();
278
- const _start = s.getPos();
279
- const currCodeUnit = s.currCodeUnit();
280
- if (currCodeUnit === asciiConstants.SLASH) {
281
- s.advance(1);
282
- s.consumeCodeUnit(asciiConstants.GREATER_THAN);
283
- const range = s.rangeFrom(_start);
284
- tokenCallback({ type: "ElementEnd", end: { type: "Empty" }, range }, s);
285
- break;
286
- } else if (currCodeUnit === asciiConstants.GREATER_THAN) {
287
- s.advance(1);
288
- const range = s.rangeFrom(_start);
289
- if (s.config.implicitSelfClosingElements != null && s.config.implicitSelfClosingElements.includes(getQName.getQName(local, prefix))) {
290
- tokenCallback({ type: "ElementEnd", end: { type: "Empty" }, range }, s);
291
- break;
292
- } else {
293
- tokenCallback({ type: "ElementEnd", end: { type: "Open" }, range }, s);
294
- open = true;
295
- break;
296
- }
297
- } else {
298
- if (!hasSpace) {
299
- throw new XmlError.XmlError(
300
- { type: "InvalidChar", expected: "a whitespace", actual: s.currCodeUnitUnchecked() },
301
- s.genTextPos()
302
- );
303
- }
304
- const [_prefix, _local, value] = parseAttribute(s);
305
- const end = s.getPos();
306
- tokenCallback(
307
- {
308
- type: "Attribute",
309
- range: { start: _start, end },
310
- prefix: _prefix,
311
- local: _local,
312
- value
313
- },
314
- s
315
- );
316
- }
317
- }
318
- if (open) {
319
- if (s.config.rawTextElements != null) {
320
- const qName = getQName.getQName(local, prefix);
321
- if (s.config.rawTextElements.includes(qName)) {
322
- parseContent(s, tokenCallback, `</${qName}>`);
323
- return;
324
- }
325
- }
326
- parseContent(s, tokenCallback);
327
- }
328
- }
329
- function parseAttribute(s) {
330
- const [prefix, local] = s.consumeQName();
331
- let value;
332
- const start = s.getPos();
333
- s.skipSpaces();
334
- if (s.tryConsumeCodeUnit(asciiConstants.EQUALS)) {
335
- s.skipSpaces();
336
- const currCodeUnit = s.currCodeUnit();
337
- if (currCodeUnit === asciiConstants.SINGLE_QUOTE || currCodeUnit === asciiConstants.DOUBLE_QUOTE) {
338
- const quote = s.consumeQuote();
339
- value = s.consumeCodeUnitsWhile((c) => c !== quote && c !== asciiConstants.LESS_THAN);
340
- s.consumeCodeUnit(quote);
341
- } else if (!s.config.strictDocument) {
342
- value = s.consumeCodeUnitsWhile(
343
- (c) => !utils.isXmlSpaceByte(c) && c !== asciiConstants.GREATER_THAN && c !== asciiConstants.SLASH && c !== asciiConstants.LESS_THAN
344
- );
345
- } else {
346
- throw new XmlError.XmlError(
347
- { type: "InvalidChar", expected: "a quote", actual: currCodeUnit },
348
- s.genTextPos()
349
- );
350
- }
351
- } else if (!s.config.strictDocument) {
352
- s.goTo(start);
353
- value = "true";
354
- } else {
355
- throw new XmlError.XmlError(
356
- { type: "InvalidChar", expected: asciiConstants.EQUALS, actual: s.currCodeUnit() },
357
- s.genTextPos()
358
- );
359
- }
360
- return [prefix, local, value];
361
- }
362
- function parseContent(s, tokenCallback, parseContentUntil = asciiConstants.LESS_THAN) {
363
- while (!s.atEnd()) {
364
- if (typeof parseContentUntil === "number" ? s.currCodeUnit() === parseContentUntil : s.startsWith(parseContentUntil)) {
365
- const nextCodeUnit = s.nextCodeUnit();
366
- if (nextCodeUnit === asciiConstants.EXCLAMATION_MARK) {
367
- if (s.startsWith(COMMENT_START)) {
368
- parseComment(s, tokenCallback);
369
- } else if (s.startsWith(CDATA_START)) {
370
- parseCdata(s, tokenCallback);
371
- } else {
372
- throw new XmlError.XmlError(
373
- { type: "UnknownToken", message: "Failed to parse content" },
374
- s.genTextPos()
375
- );
376
- }
377
- } else if (nextCodeUnit === asciiConstants.QUESTION_MARK) {
378
- parsePi(s, tokenCallback);
379
- } else if (nextCodeUnit === asciiConstants.SLASH) {
380
- parseCloseElement(s, tokenCallback);
381
- break;
382
- } else {
383
- parseElement(s, tokenCallback);
384
- }
385
- } else {
386
- parseText(s, tokenCallback, parseContentUntil);
387
- }
388
- }
389
- }
390
- function parseCdata(s, tokenCallback) {
391
- const start = s.getPos();
392
- s.advance(9);
393
- const text = s.consumeCodeUnitsWhile(
394
- (c, _s) => !(c === asciiConstants.CLOSE_SQUARE_BRACKET && _s.startsWith(CDATA_END))
395
- );
396
- s.skipString(CDATA_END);
397
- const range = s.rangeFrom(start);
398
- tokenCallback({ type: "Cdata", text, range }, s);
399
- }
400
- function parseCloseElement(s, tokenCallback) {
401
- const start = s.getPos();
402
- s.advance(2);
403
- const [prefix, local] = s.consumeQName();
404
- s.skipSpaces();
405
- s.consumeCodeUnit(asciiConstants.GREATER_THAN);
406
- const range = s.rangeFrom(start);
407
- tokenCallback({ type: "ElementEnd", end: { type: "Close", prefix, local }, range }, s);
408
- }
409
- function parseText(s, tokenCallback, parseTextUntil = asciiConstants.LESS_THAN) {
410
- const start = s.getPos();
411
- const text = typeof parseTextUntil === "number" ? s.consumeCodeUnitsWhile((c) => c !== parseTextUntil) : s.consumeCodeUnitsWhile((_, _s) => !_s.startsWith(parseTextUntil));
412
- if (text.includes(CDATA_END)) {
413
- throw new XmlError.XmlError({ type: "InvalidCharacterData" }, s.genTextPos());
414
- }
415
- tokenCallback({ type: "Text", text, range: s.rangeFrom(start) }, s);
416
- }
417
-
418
- exports.tokenize = tokenize;
419
- exports.tokenizeXmlStream = tokenizeXmlStream;
420
- //# sourceMappingURL=tokenize.js.map
1
+ "use strict";var k=require("../get-q-name.js"),s=require("./ascii-constants.js"),I=require("./utils.js"),a=require("./XmlError.js"),D=require("./XmlStream.js");const H="\uFEFF",U="<?xml ",y="?>",Q="<!ENTITY",F="<!ELEMENT",O="<!ATTLIST",b="<!NOTATION",m="<!DOCTYPE",A="<?",w="?>",f="<!--",P="-->",G="<![CDATA[",g="]]>",B="NDATA",x="PUBLIC",M="SYSTEM",q="version",z="encoding",K="standalone";function Y(t,n,e={}){N(new D.XmlStream(t,e),n)}function N(t,n){var e;t.debugLog("tokenizeXmlStream started",JSON.stringify({strictDocument:t.config.strictDocument,textLength:t.getPos()===0?"full":"partial",platform:typeof process!="undefined"?process.arch:"unknown",nodeVersion:typeof process!="undefined"?process.version:"unknown"},null,2));try{if(t.startsWith(H)&&t.advance(1),t.startsWith(U)&&J(t),p(t,n),t.config.strictDocument){if(t.skipSpaces(),t.startsWithIgnoreCase(m)&&(S(t,n),p(t,n)),t.skipSpaces(),!t.atEnd()&&t.currCodeUnit()===s.LESS_THAN&&T(t,n),p(t,n),!t.atEnd())throw new a.XmlError({type:"UnknownToken",message:"Not at end"},t.genTextPos())}else for(;!t.atEnd();)t.currCodeUnit()===s.LESS_THAN?T(t,n):L(t,n),p(t,n);t.debugLog("tokenizeXmlStream completed successfully")}catch(o){throw t.debugLog("tokenizeXmlStream FAILED",{error:o instanceof Error?o.message:String(o),errorType:o instanceof a.XmlError?o.variant.type:"unknown",position:t.getPos(),context:t.getTextAround(t.getPos(),50),textPos:t.genTextPosFrom(t.getPos()),platform:typeof process!="undefined"?process.arch:"unknown",stackTrace:o instanceof Error?(e=o.stack)==null?void 0:e.split(`
2
+ `).slice(0,10):void 0}),o}}function p(t,n){for(;!t.atEnd();)if(t.skipSpaces(),t.startsWith(f))E(t,n);else if(!t.config.strictDocument&&t.startsWithIgnoreCase(m))S(t,n);else if(t.startsWith(A))h(t,n);else break}function J(t){function n(e){if(e.startsWithSpace())e.skipSpaces();else if(!e.startsWith(y)&&!e.atEnd())throw new a.XmlError({type:"InvalidChar",expected:"a whitespace",actual:e.currCodeUnitUnchecked()},e.genTextPos())}if(t.advance(5),n(t),!t.startsWith(q))throw new a.XmlError({type:"InvalidString",expected:"version"},t.genTextPos());d(t),n(t),t.startsWith(z)&&(d(t),n(t)),t.startsWith(K)&&d(t),t.skipSpaces(),t.skipString(y)}function E(t,n){const e=t.getPos();t.advance(4);const o=t.consumeCodeUnitsWhile((i,c)=>!(i===s.HYPHEN&&c.startsWith(P)));if(t.skipString(P),o.includes("--")||o.endsWith("-"))throw new a.XmlError({type:"InvalidComment"},t.genTextPosFrom(e));n({type:"Comment",text:o,range:t.rangeFrom(e)},t)}function h(t,n){if(t.startsWith(U))throw new a.XmlError({type:"UnexpectedDeclaration"},t.genTextPos());const e=t.getPos();t.advance(2);const o=t.consumeName();t.skipSpaces();const i=t.consumeCodeUnitsWhile((c,r)=>!(c===s.QUESTION_MARK&&r.startsWith(w)));t.skipString(w),n({type:"ProcessingInstruction",target:o,content:i.length===0?void 0:i,range:t.rangeFrom(e)},t)}function S(t,n){if(!t.config.allowDtd)throw new a.XmlError({type:"DtdDetected"});const e=t.getPos();if(V(t),t.skipSpaces(),t.currCodeUnit()===s.GREATER_THAN){t.advance(1);return}for(t.advance(1);!t.atEnd();)if(t.skipSpaces(),t.startsWith(Q))$(t,n);else if(t.startsWith(f))E(t,n);else if(t.startsWith(A))h(t,n);else if(t.startsWith("]"))if(t.advance(1),t.skipSpaces(),t.currCodeUnit()===s.GREATER_THAN){t.advance(1);break}else throw new a.XmlError({type:"InvalidChar",expected:"'>'",actual:t.currCodeUnitUnchecked()},t.genTextPos());else if(t.startsWith(F)||t.startsWith(O)||t.startsWith(b))try{Z(t)}catch(o){throw new a.XmlError({type:"UnknownToken",message:"Failed to consume declaration"},t.genTextPosFrom(e))}else throw new a.XmlError({type:"UnknownToken",message:"Failed to parse doctype"},t.genTextPos())}function V(t){t.advance(9),t.consumeSpaces(),t.skipName(),t.skipSpaces(),v(t),t.skipSpaces();const n=t.currCodeUnit();if(n!==s.OPEN_SQUARE_BRACKET&&n!==s.GREATER_THAN)throw new a.XmlError({type:"InvalidChar",expected:"'[' or '>'",actual:n},t.genTextPos())}function v(t){if(t.startsWith(M)||t.startsWith(x)){const n=t.getPos();t.advance(6);const e=t.sliceBack(n);t.consumeSpaces();const o=t.consumeQuote();if(t.consumeCodeUnitsWhile(i=>i!==o),t.consumeCodeUnit(o),e===x){t.consumeSpaces();const i=t.consumeQuote();t.consumeCodeUnitsWhile(c=>c!==i),t.consumeCodeUnit(i)}return!0}return!1}function $(t,n){t.advance(8),t.consumeSpaces();const e=!t.tryConsumeCodeUnit(s.PERCENT);e||t.consumeSpaces();const o=t.consumeName();t.consumeSpaces();const i=j(t,e);i!==null&&n({type:"EntityDeclaration",name:o,definition:i},t),t.skipSpaces(),t.consumeCodeUnit(s.GREATER_THAN)}function j(t,n){const e=t.currCodeUnit();if(e===s.DOUBLE_QUOTE||e===s.SINGLE_QUOTE){const o=t.consumeQuote(),i=t.getPos();t.skipCodeUnitsWhile(r=>r!==o);const c=t.sliceBack(i);return t.consumeCodeUnit(o),c}else if(e===s.UPPERCASE_S||e===s.UPPERCASE_P){if(v(t))return n&&(t.skipSpaces(),t.startsWith(B)&&(t.advance(5),t.consumeSpaces(),t.skipName())),null;throw new a.XmlError({type:"InvalidExternalID"},t.genTextPos())}else throw new a.XmlError({type:"InvalidChar",expected:"a quote, SYSTEM or PUBLIC",actual:e},t.genTextPos())}function Z(t){t.skipCodeUnitsWhile(n=>n!==s.GREATER_THAN),t.consumeCodeUnit(s.GREATER_THAN)}function T(t,n){const e=t.getPos();if(t.config.debug){const r=t.currCodeUnit();t.debugLog("parseElement started",JSON.stringify({position:e,character:String.fromCharCode(r),charCode:r,charHex:"0x"+r.toString(16),context:t.getTextAround(e,30),textPos:t.genTextPosFrom(e),platform:typeof process!="undefined"?process.arch:"unknown"},null,2))}t.advance(1);let o,i;try{[o,i]=t.consumeQName(),t.debugLog("parseElement consumeQName succeeded",JSON.stringify({prefix:o,local:i,position:t.getPos()},null,2)),n({type:"ElementStart",prefix:o,local:i,start:e},t)}catch(r){throw t.debugLog("parseElement consumeQName FAILED",JSON.stringify({error:r instanceof Error?r.message:String(r),errorType:r instanceof a.XmlError?r.variant.type:"unknown",position:t.getPos(),startPosition:e,context:t.getTextAround(t.getPos(),50),platform:typeof process!="undefined"?process.arch:"unknown",stackTrace:r instanceof Error?r.stack:void 0},null,2)),r}let c=!1;for(;!t.atEnd();){const r=t.startsWithSpace();t.skipSpaces();const l=t.getPos(),C=t.currCodeUnit();if(C===s.SLASH){t.advance(1),t.consumeCodeUnit(s.GREATER_THAN);const u=t.rangeFrom(l);n({type:"ElementEnd",end:{type:"Empty"},range:u},t);break}else if(C===s.GREATER_THAN){t.advance(1);const u=t.rangeFrom(l);if(t.config.implicitSelfClosingElements!=null&&t.config.implicitSelfClosingElements.includes(k.getQName(i,o))){n({type:"ElementEnd",end:{type:"Empty"},range:u},t);break}else{n({type:"ElementEnd",end:{type:"Open"},range:u},t),c=!0;break}}else{if(!r)throw new a.XmlError({type:"InvalidChar",expected:"a whitespace",actual:t.currCodeUnitUnchecked()},t.genTextPos());const[u,R,X]=d(t),_=t.getPos();n({type:"Attribute",range:{start:l,end:_},prefix:u,local:R,value:X},t)}}if(c){if(t.config.rawTextElements!=null){const r=k.getQName(i,o);if(t.config.rawTextElements.includes(r)){W(t,n,`</${r}>`);return}}W(t,n)}}function d(t){const[n,e]=t.consumeQName();let o;const i=t.getPos();if(t.skipSpaces(),t.tryConsumeCodeUnit(s.EQUALS)){t.skipSpaces();const c=t.currCodeUnit();if(c===s.SINGLE_QUOTE||c===s.DOUBLE_QUOTE){const r=t.consumeQuote();o=t.consumeCodeUnitsWhile(l=>l!==r&&l!==s.LESS_THAN),t.consumeCodeUnit(r)}else if(!t.config.strictDocument)o=t.consumeCodeUnitsWhile(r=>!I.isXmlSpaceByte(r)&&r!==s.GREATER_THAN&&r!==s.SLASH&&r!==s.LESS_THAN);else throw new a.XmlError({type:"InvalidChar",expected:"a quote",actual:c},t.genTextPos())}else if(!t.config.strictDocument)t.goTo(i),o="true";else throw new a.XmlError({type:"InvalidChar",expected:s.EQUALS,actual:t.currCodeUnit()},t.genTextPos());return[n,e,o]}function W(t,n,e=s.LESS_THAN){for(;!t.atEnd();)if(typeof e=="number"?t.currCodeUnit()===e:t.startsWith(e)){const o=t.nextCodeUnit();if(o===s.EXCLAMATION_MARK)if(t.startsWith(f))E(t,n);else if(t.startsWith(G))tt(t,n);else if(!t.config.strictDocument&&t.startsWithIgnoreCase(m))S(t,n);else throw new a.XmlError({type:"UnknownToken",message:"Failed to parse content"},t.genTextPos());else if(o===s.QUESTION_MARK)h(t,n);else if(o===s.SLASH){nt(t,n);break}else T(t,n)}else L(t,n,e)}function tt(t,n){const e=t.getPos();t.advance(9);const o=t.consumeCodeUnitsWhile((c,r)=>!(c===s.CLOSE_SQUARE_BRACKET&&r.startsWith(g)));t.skipString(g);const i=t.rangeFrom(e);n({type:"Cdata",text:o,range:i},t)}function nt(t,n){const e=t.getPos();t.advance(2);const[o,i]=t.consumeQName();t.skipSpaces(),t.consumeCodeUnit(s.GREATER_THAN);const c=t.rangeFrom(e);n({type:"ElementEnd",end:{type:"Close",prefix:o,local:i},range:c},t)}function L(t,n,e=s.LESS_THAN){const o=t.getPos(),i=typeof e=="number"?t.consumeCodeUnitsWhile(c=>c!==e):t.consumeCodeUnitsWhile((c,r)=>!r.startsWith(e));if(t.config.strictDocument&&i.includes(g))throw new a.XmlError({type:"InvalidCharacterData"},t.genTextPos());n({type:"Text",text:i,range:t.rangeFrom(o)},t)}exports.tokenize=Y,exports.tokenizeXmlStream=N;
@@ -1,48 +1 @@
1
- 'use strict';
2
-
3
- var asciiConstants = require('./ascii-constants.js');
4
-
5
- function isAsciiDigit(byte) {
6
- return byte >= asciiConstants.ZERO && byte <= asciiConstants.NINE;
7
- }
8
- function isXmlNameStart(codePoint) {
9
- if (codePoint == null) {
10
- return false;
11
- }
12
- if (codePoint <= 128) {
13
- return codePoint >= asciiConstants.UPPERCASE_A && codePoint <= asciiConstants.UPPERCASE_Z || codePoint >= asciiConstants.LOWERCASE_A && codePoint <= asciiConstants.LOWERCASE_Z || codePoint === asciiConstants.COLON || codePoint === asciiConstants.UNDERSCORE;
14
- }
15
- return codePoint >= 192 && codePoint <= 214 || codePoint >= 216 && codePoint <= 246 || codePoint >= 248 && codePoint <= 767 || codePoint >= 880 && codePoint <= 893 || codePoint >= 895 && codePoint <= 8191 || codePoint >= 8204 && codePoint <= 8205 || codePoint >= 8304 && codePoint <= 8591 || codePoint >= 11264 && codePoint <= 12271 || codePoint >= 12289 && codePoint <= 55295 || codePoint >= 63744 && codePoint <= 64975 || codePoint >= 65008 && codePoint <= 65533 || codePoint >= 65536 && codePoint <= 983039;
16
- }
17
- function isXmlName(codePoint) {
18
- if (codePoint == null) {
19
- return false;
20
- }
21
- if (codePoint <= 128) {
22
- return isXmlNameByte(codePoint);
23
- }
24
- return codePoint === 183 || codePoint >= 192 && codePoint <= 214 || codePoint >= 216 && codePoint <= 246 || codePoint >= 248 && codePoint <= 767 || codePoint >= 768 && codePoint <= 879 || codePoint >= 880 && codePoint <= 893 || codePoint >= 895 && codePoint <= 8191 || codePoint >= 8204 && codePoint <= 8205 || codePoint >= 8255 && codePoint <= 8256 || codePoint >= 8304 && codePoint <= 8591 || codePoint >= 11264 && codePoint <= 12271 || codePoint >= 12289 && codePoint <= 55295 || codePoint >= 63744 && codePoint <= 64975 || codePoint >= 65008 && codePoint <= 65533 || codePoint >= 65536 && codePoint <= 983039;
25
- }
26
- function isXmlChar(codePoint) {
27
- if (codePoint == null) {
28
- return false;
29
- }
30
- if (codePoint < 32) {
31
- return isXmlSpaceByte(codePoint);
32
- }
33
- return codePoint !== 65535 && codePoint !== 65534;
34
- }
35
- function isXmlSpaceByte(byte) {
36
- return byte === asciiConstants.SPACE || byte === asciiConstants.HORIZONTAL_TAB || byte === asciiConstants.LINE_FEED || byte === asciiConstants.CARRIAGE_RETURN;
37
- }
38
- function isXmlNameByte(byte) {
39
- return byte >= asciiConstants.ZERO && byte <= asciiConstants.NINE || byte >= asciiConstants.UPPERCASE_A && byte <= asciiConstants.UPPERCASE_Z || byte >= asciiConstants.LOWERCASE_A && byte <= asciiConstants.LOWERCASE_Z || byte === asciiConstants.COLON || byte === asciiConstants.UNDERSCORE || byte === asciiConstants.HYPHEN || byte === asciiConstants.PERIOD;
40
- }
41
-
42
- exports.isAsciiDigit = isAsciiDigit;
43
- exports.isXmlChar = isXmlChar;
44
- exports.isXmlName = isXmlName;
45
- exports.isXmlNameByte = isXmlNameByte;
46
- exports.isXmlNameStart = isXmlNameStart;
47
- exports.isXmlSpaceByte = isXmlSpaceByte;
48
- //# sourceMappingURL=utils.js.map
1
+ "use strict";var i=require("./ascii-constants.js");function n(E){return E>=i.ZERO&&E<=i.NINE}function s(E){return E==null?!1:E<=128?E>=i.UPPERCASE_A&&E<=i.UPPERCASE_Z||E>=i.LOWERCASE_A&&E<=i.LOWERCASE_Z||E===i.COLON||E===i.UNDERSCORE:E>=192&&E<=214||E>=216&&E<=246||E>=248&&E<=767||E>=880&&E<=893||E>=895&&E<=8191||E>=8204&&E<=8205||E>=8304&&E<=8591||E>=11264&&E<=12271||E>=12289&&E<=55295||E>=63744&&E<=64975||E>=65008&&E<=65533||E>=65536&&E<=983039}function r(E){return E==null?!1:E<=128?e(E):E===183||E>=192&&E<=214||E>=216&&E<=246||E>=248&&E<=767||E>=768&&E<=879||E>=880&&E<=893||E>=895&&E<=8191||E>=8204&&E<=8205||E>=8255&&E<=8256||E>=8304&&E<=8591||E>=11264&&E<=12271||E>=12289&&E<=55295||E>=63744&&E<=64975||E>=65008&&E<=65533||E>=65536&&E<=983039}function R(E){return E==null?!1:E<32?t(E):E!==65535&&E!==65534}function t(E){return E===i.SPACE||E===i.HORIZONTAL_TAB||E===i.LINE_FEED||E===i.CARRIAGE_RETURN}function e(E){return E>=i.ZERO&&E<=i.NINE||E>=i.UPPERCASE_A&&E<=i.UPPERCASE_Z||E>=i.LOWERCASE_A&&E<=i.LOWERCASE_Z||E===i.COLON||E===i.UNDERSCORE||E===i.HYPHEN||E===i.PERIOD}exports.isAsciiDigit=n,exports.isXmlChar=R,exports.isXmlName=r,exports.isXmlNameByte=e,exports.isXmlNameStart=s,exports.isXmlSpaceByte=t;
@@ -1,14 +1 @@
1
- 'use strict';
2
-
3
- var tokenToXml = require('./token-to-xml.js');
4
-
5
- function tokensToXml(tokens) {
6
- let xmlString = "";
7
- tokens.forEach((token) => {
8
- xmlString += tokenToXml.tokenToXml(token);
9
- });
10
- return xmlString;
11
- }
12
-
13
- exports.tokensToXml = tokensToXml;
14
- //# sourceMappingURL=tokens-to-xml.js.map
1
+ "use strict";var n=require("./token-to-xml.js");function r(e){let o="";return e.forEach(t=>{o+=n.tokenToXml(t)}),o}exports.tokensToXml=r;
@@ -1,70 +1 @@
1
- 'use strict';
2
-
3
- var tokenize = require('./tokenizer/tokenize.js');
4
-
5
- function xmlToObject(xmlString, options = {}) {
6
- const root = {
7
- local: "root",
8
- attributes: [],
9
- content: []
10
- };
11
- const stack = [root];
12
- tokenize.tokenize(
13
- xmlString,
14
- (token) => {
15
- processTokenForObject(token, stack);
16
- },
17
- options
18
- );
19
- return root.content[0];
20
- }
21
- function processTokenForObject(token, stack) {
22
- switch (token.type) {
23
- case "ElementStart": {
24
- const newNode = {
25
- local: token.local,
26
- prefix: token.prefix.length > 0 ? token.prefix : void 0,
27
- attributes: [],
28
- content: []
29
- };
30
- const currentNode = stack[stack.length - 1];
31
- if (currentNode != null) {
32
- currentNode.content.push(newNode);
33
- }
34
- stack.push(newNode);
35
- break;
36
- }
37
- case "ElementEnd": {
38
- if (token.end.type === "Close" || token.end.type === "Empty") {
39
- stack.pop();
40
- }
41
- break;
42
- }
43
- case "Attribute": {
44
- const currentNode = stack[stack.length - 1];
45
- if (currentNode != null) {
46
- currentNode.attributes.push({
47
- local: token.local,
48
- prefix: token.prefix.length > 0 ? token.prefix : void 0,
49
- value: token.value
50
- });
51
- }
52
- break;
53
- }
54
- case "Text":
55
- case "Cdata": {
56
- const currentNode = stack[stack.length - 1];
57
- if (currentNode != null) {
58
- const trimmedText = token.text.trim();
59
- if (trimmedText.length > 0) {
60
- currentNode.content.push(token.text);
61
- }
62
- }
63
- break;
64
- }
65
- }
66
- }
67
-
68
- exports.processTokenForObject = processTokenForObject;
69
- exports.xmlToObject = xmlToObject;
70
- //# sourceMappingURL=xml-to-object.js.map
1
+ "use strict";var r=require("./tokenizer/tokenize.js");function s(t,o={}){const e={local:"root",attributes:[],content:[]},n=[e];return r.tokenize(t,l=>{c(l,n)},o),e.content[0]}function c(t,o){switch(t.type){case"ElementStart":{const e={local:t.local,prefix:t.prefix.length>0?t.prefix:void 0,attributes:[],content:[]},n=o[o.length-1];n!=null&&n.content.push(e),o.push(e);break}case"ElementEnd":{(t.end.type==="Close"||t.end.type==="Empty")&&o.pop();break}case"Attribute":{const e=o[o.length-1];e!=null&&e.attributes.push({local:t.local,prefix:t.prefix.length>0?t.prefix:void 0,value:t.value});break}case"Text":case"Cdata":{const e=o[o.length-1];e!=null&&t.text.trim().length>0&&e.content.push(t.text);break}}}exports.processTokenForObject=c,exports.xmlToObject=s;
@@ -1,87 +1 @@
1
- 'use strict';
2
-
3
- var getQName = require('./get-q-name.js');
4
- var tokenize = require('./tokenizer/tokenize.js');
5
-
6
- function xmlToSimplifiedObject(xmlString, options = {}) {
7
- const result = {};
8
- const stack = [result];
9
- tokenize.tokenize(
10
- xmlString,
11
- (token) => {
12
- processTokenForSimplifiedObject(token, stack);
13
- },
14
- options
15
- );
16
- return result;
17
- }
18
- function processTokenForSimplifiedObject(token, stack) {
19
- switch (token.type) {
20
- case "ElementStart": {
21
- const tagName = getQName.getQName(token.local, token.prefix);
22
- const tagNameWithPrefix = `_${tagName}`;
23
- const newNode = {};
24
- const currentNode = stack[stack.length - 1];
25
- if (currentNode != null) {
26
- if (currentNode.content != null) {
27
- newNode.tag = tagName;
28
- currentNode.content.push(newNode);
29
- } else if (currentNode.text != null) {
30
- newNode.tag = tagName;
31
- currentNode.content = [currentNode.text, newNode];
32
- delete currentNode.text;
33
- } else if (currentNode[tagNameWithPrefix] == null) {
34
- currentNode[tagNameWithPrefix] = [newNode];
35
- } else if (Array.isArray(currentNode[tagNameWithPrefix])) {
36
- currentNode[tagNameWithPrefix].push(newNode);
37
- } else {
38
- currentNode[tagNameWithPrefix] = [currentNode[tagNameWithPrefix], newNode];
39
- }
40
- }
41
- stack.push(newNode);
42
- break;
43
- }
44
- case "ElementEnd": {
45
- if (token.end.type === "Close" || token.end.type === "Empty") {
46
- stack.pop();
47
- }
48
- break;
49
- }
50
- case "Attribute": {
51
- const currentNode = stack[stack.length - 1];
52
- if (currentNode != null) {
53
- const attrName = getQName.getQName(token.local, token.prefix);
54
- if (currentNode.attributes != null) {
55
- currentNode.attributes[attrName] = token.value;
56
- } else {
57
- currentNode.attributes = {
58
- [attrName]: token.value
59
- };
60
- }
61
- }
62
- break;
63
- }
64
- case "Text":
65
- case "Cdata": {
66
- const currentNode = stack[stack.length - 1];
67
- if (currentNode != null) {
68
- const trimmedText = token.text.trim();
69
- if (trimmedText.length > 0) {
70
- if (currentNode.content != null) {
71
- currentNode.content.push(trimmedText);
72
- } else if (currentNode.text != null) {
73
- currentNode.content = [currentNode.text, trimmedText];
74
- delete currentNode.text;
75
- } else {
76
- currentNode.text = trimmedText;
77
- }
78
- }
79
- }
80
- break;
81
- }
82
- }
83
- }
84
-
85
- exports.processTokenForSimplifiedObject = processTokenForSimplifiedObject;
86
- exports.xmlToSimplifiedObject = xmlToSimplifiedObject;
87
- //# sourceMappingURL=xml-to-simplified-object.js.map
1
+ "use strict";var c=require("./get-q-name.js"),o=require("./tokenizer/tokenize.js");function s(i,l={}){const e={},t=[e];return o.tokenize(i,r=>{a(r,t)},l),e}function a(i,l){switch(i.type){case"ElementStart":{const e=c.getQName(i.local,i.prefix),t=`_${e}`,r={},n=l[l.length-1];n!=null&&(n.content!=null?(r.tag=e,n.content.push(r)):n.text!=null?(r.tag=e,n.content=[n.text,r],delete n.text):n[t]==null?n[t]=[r]:Array.isArray(n[t])?n[t].push(r):n[t]=[n[t],r]),l.push(r);break}case"ElementEnd":{(i.end.type==="Close"||i.end.type==="Empty")&&l.pop();break}case"Attribute":{const e=l[l.length-1];if(e!=null){const t=c.getQName(i.local,i.prefix);e.attributes!=null?e.attributes[t]=i.value:e.attributes={[t]:i.value}}break}case"Text":case"Cdata":{const e=l[l.length-1];if(e!=null){const t=i.text.trim();t.length>0&&(e.content!=null?e.content.push(t):e.text!=null?(e.content=[e.text,t],delete e.text):e.text=t)}break}}}exports.processTokenForSimplifiedObject=a,exports.xmlToSimplifiedObject=s;