@loaders.gl/json 3.3.0-alpha.4 → 3.3.0-alpha.6

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 (61) hide show
  1. package/dist/dist.min.js +16 -10
  2. package/dist/es5/bundle.js +0 -1
  3. package/dist/es5/bundle.js.map +1 -1
  4. package/dist/es5/geojson-loader.js +34 -82
  5. package/dist/es5/geojson-loader.js.map +1 -1
  6. package/dist/es5/index.js +6 -13
  7. package/dist/es5/index.js.map +1 -1
  8. package/dist/es5/json-loader.js +4 -18
  9. package/dist/es5/json-loader.js.map +1 -1
  10. package/dist/es5/lib/clarinet/clarinet.js +19 -91
  11. package/dist/es5/lib/clarinet/clarinet.js.map +1 -1
  12. package/dist/es5/lib/jsonpath/jsonpath.js +8 -28
  13. package/dist/es5/lib/jsonpath/jsonpath.js.map +1 -1
  14. package/dist/es5/lib/parse-json-in-batches.js +59 -126
  15. package/dist/es5/lib/parse-json-in-batches.js.map +1 -1
  16. package/dist/es5/lib/parse-json.js +0 -10
  17. package/dist/es5/lib/parse-json.js.map +1 -1
  18. package/dist/es5/lib/parse-ndjson-in-batches.js +41 -83
  19. package/dist/es5/lib/parse-ndjson-in-batches.js.map +1 -1
  20. package/dist/es5/lib/parse-ndjson.js +0 -1
  21. package/dist/es5/lib/parse-ndjson.js.map +1 -1
  22. package/dist/es5/lib/parser/json-parser.js +8 -24
  23. package/dist/es5/lib/parser/json-parser.js.map +1 -1
  24. package/dist/es5/lib/parser/streaming-json-parser.js +10 -37
  25. package/dist/es5/lib/parser/streaming-json-parser.js.map +1 -1
  26. package/dist/es5/ndjgeoson-loader.js +3 -11
  27. package/dist/es5/ndjgeoson-loader.js.map +1 -1
  28. package/dist/es5/ndjson-loader.js +3 -11
  29. package/dist/es5/ndjson-loader.js.map +1 -1
  30. package/dist/es5/workers/geojson-worker.js +0 -2
  31. package/dist/es5/workers/geojson-worker.js.map +1 -1
  32. package/dist/esm/bundle.js +1 -1
  33. package/dist/esm/bundle.js.map +1 -1
  34. package/dist/esm/geojson-loader.js +13 -14
  35. package/dist/esm/geojson-loader.js.map +1 -1
  36. package/dist/esm/index.js +1 -0
  37. package/dist/esm/index.js.map +1 -1
  38. package/dist/esm/json-loader.js +12 -8
  39. package/dist/esm/json-loader.js.map +1 -1
  40. package/dist/esm/lib/clarinet/clarinet.js +19 -108
  41. package/dist/esm/lib/clarinet/clarinet.js.map +1 -1
  42. package/dist/esm/lib/jsonpath/jsonpath.js +2 -18
  43. package/dist/esm/lib/jsonpath/jsonpath.js.map +1 -1
  44. package/dist/esm/lib/parse-json-in-batches.js +5 -10
  45. package/dist/esm/lib/parse-json-in-batches.js.map +1 -1
  46. package/dist/esm/lib/parse-json.js +0 -7
  47. package/dist/esm/lib/parse-json.js.map +1 -1
  48. package/dist/esm/lib/parse-ndjson-in-batches.js +2 -5
  49. package/dist/esm/lib/parse-ndjson-in-batches.js.map +1 -1
  50. package/dist/esm/lib/parse-ndjson.js.map +1 -1
  51. package/dist/esm/lib/parser/json-parser.js +6 -21
  52. package/dist/esm/lib/parser/json-parser.js.map +1 -1
  53. package/dist/esm/lib/parser/streaming-json-parser.js +3 -19
  54. package/dist/esm/lib/parser/streaming-json-parser.js.map +1 -1
  55. package/dist/esm/ndjgeoson-loader.js +4 -2
  56. package/dist/esm/ndjgeoson-loader.js.map +1 -1
  57. package/dist/esm/ndjson-loader.js +4 -2
  58. package/dist/esm/ndjson-loader.js.map +1 -1
  59. package/dist/esm/workers/geojson-worker.js.map +1 -1
  60. package/dist/geojson-worker.js +10 -11
  61. package/package.json +5 -5
@@ -1,7 +1,7 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+
2
3
  const MAX_BUFFER_LENGTH = Number.MAX_SAFE_INTEGER;
3
4
  var STATE;
4
-
5
5
  (function (STATE) {
6
6
  STATE[STATE["BEGIN"] = 0] = "BEGIN";
7
7
  STATE[STATE["VALUE"] = 1] = "VALUE";
@@ -28,24 +28,29 @@ var STATE;
28
28
  STATE[STATE["NUMBER_DECIMAL_POINT"] = 22] = "NUMBER_DECIMAL_POINT";
29
29
  STATE[STATE["NUMBER_DIGIT"] = 23] = "NUMBER_DIGIT";
30
30
  })(STATE || (STATE = {}));
31
-
32
31
  const Char = {
33
32
  tab: 0x09,
34
33
  lineFeed: 0x0a,
35
34
  carriageReturn: 0x0d,
36
35
  space: 0x20,
36
+
37
37
  doubleQuote: 0x22,
38
38
  plus: 0x2b,
39
39
  comma: 0x2c,
40
40
  minus: 0x2d,
41
41
  period: 0x2e,
42
+
42
43
  _0: 0x30,
43
44
  _9: 0x39,
45
+
44
46
  colon: 0x3a,
47
+
45
48
  E: 0x45,
49
+
46
50
  openBracket: 0x5b,
47
51
  backslash: 0x5c,
48
52
  closeBracket: 0x5d,
53
+
49
54
  a: 0x61,
50
55
  b: 0x62,
51
56
  e: 0x65,
@@ -56,9 +61,11 @@ const Char = {
56
61
  s: 0x73,
57
62
  t: 0x74,
58
63
  u: 0x75,
64
+
59
65
  openBrace: 0x7b,
60
66
  closeBrace: 0x7d
61
67
  };
68
+
62
69
  const stringTokenPattern = /[\\"\n]/g;
63
70
  const DEFAULT_OPTIONS = {
64
71
  onready: () => {},
@@ -73,84 +80,59 @@ const DEFAULT_OPTIONS = {
73
80
  onchunkparsed: () => {}
74
81
  };
75
82
  export default class ClarinetParser {
76
- constructor(options = {}) {
77
- _defineProperty(this, "options", DEFAULT_OPTIONS);
78
83
 
84
+ constructor() {
85
+ let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
86
+ _defineProperty(this, "options", DEFAULT_OPTIONS);
79
87
  _defineProperty(this, "bufferCheckPosition", MAX_BUFFER_LENGTH);
80
-
81
88
  _defineProperty(this, "q", '');
82
-
83
89
  _defineProperty(this, "c", '');
84
-
85
90
  _defineProperty(this, "p", '');
86
-
87
91
  _defineProperty(this, "closed", false);
88
-
89
92
  _defineProperty(this, "closedRoot", false);
90
-
91
93
  _defineProperty(this, "sawRoot", false);
92
-
93
94
  _defineProperty(this, "error", null);
94
-
95
95
  _defineProperty(this, "state", STATE.BEGIN);
96
-
97
96
  _defineProperty(this, "stack", []);
98
-
99
97
  _defineProperty(this, "position", 0);
100
-
101
98
  _defineProperty(this, "column", 0);
102
-
103
99
  _defineProperty(this, "line", 1);
104
-
105
100
  _defineProperty(this, "slashed", false);
106
-
107
101
  _defineProperty(this, "unicodeI", 0);
108
-
109
102
  _defineProperty(this, "unicodeS", null);
110
-
111
103
  _defineProperty(this, "depth", 0);
112
-
113
104
  _defineProperty(this, "textNode", void 0);
114
-
115
105
  _defineProperty(this, "numberNode", void 0);
116
-
117
- this.options = { ...DEFAULT_OPTIONS,
106
+ this.options = {
107
+ ...DEFAULT_OPTIONS,
118
108
  ...options
119
109
  };
120
110
  this.textNode = undefined;
121
111
  this.numberNode = '';
122
112
  this.emit('onready');
123
113
  }
124
-
125
114
  end() {
126
115
  if (this.state !== STATE.VALUE || this.depth !== 0) this._error('Unexpected end');
127
-
128
116
  this._closeValue();
129
-
130
117
  this.c = '';
131
118
  this.closed = true;
132
119
  this.emit('onend');
133
120
  return this;
134
121
  }
135
-
136
122
  resume() {
137
123
  this.error = null;
138
124
  return this;
139
125
  }
140
-
141
126
  close() {
142
127
  return this.write(null);
143
128
  }
144
129
 
145
130
  emit(event, data) {
146
131
  var _this$options$event, _this$options;
147
-
148
132
  (_this$options$event = (_this$options = this.options)[event]) === null || _this$options$event === void 0 ? void 0 : _this$options$event.call(_this$options, data, this);
149
133
  }
150
-
151
134
  emitNode(event, data) {
152
135
  this._closeValue();
153
-
154
136
  this.emit(event, data);
155
137
  }
156
138
 
@@ -158,44 +140,36 @@ export default class ClarinetParser {
158
140
  if (this.error) {
159
141
  throw this.error;
160
142
  }
161
-
162
143
  if (this.closed) {
163
144
  return this._error('Cannot write after close. Assign an onready handler.');
164
145
  }
165
-
166
146
  if (chunk === null) {
167
147
  return this.end();
168
148
  }
169
-
170
149
  let i = 0;
171
150
  let c = chunk.charCodeAt(0);
172
151
  let p = this.p;
173
-
174
152
  while (c) {
175
153
  p = c;
176
154
  this.c = c = chunk.charCodeAt(i++);
177
-
178
155
  if (p !== c) {
179
156
  this.p = p;
180
157
  } else {
181
158
  p = this.p;
182
159
  }
183
-
184
160
  if (!c) break;
185
- this.position++;
186
161
 
162
+ this.position++;
187
163
  if (c === Char.lineFeed) {
188
164
  this.line++;
189
165
  this.column = 0;
190
166
  } else this.column++;
191
-
192
167
  switch (this.state) {
193
168
  case STATE.BEGIN:
194
169
  if (c === Char.openBrace) this.state = STATE.OPEN_OBJECT;else if (c === Char.openBracket) this.state = STATE.OPEN_ARRAY;else if (!isWhitespace(c)) {
195
170
  this._error('Non-whitespace before {[.');
196
171
  }
197
172
  continue;
198
-
199
173
  case STATE.OPEN_KEY:
200
174
  case STATE.OPEN_OBJECT:
201
175
  if (isWhitespace(c)) continue;
@@ -209,20 +183,15 @@ export default class ClarinetParser {
209
183
  } else this.stack.push(STATE.CLOSE_OBJECT);
210
184
  if (c === Char.doubleQuote) this.state = STATE.STRING;else this._error('Malformed object key should start with "');
211
185
  continue;
212
-
213
186
  case STATE.CLOSE_KEY:
214
187
  case STATE.CLOSE_OBJECT:
215
188
  if (isWhitespace(c)) continue;
216
-
217
189
  if (c === Char.colon) {
218
190
  if (this.state === STATE.CLOSE_OBJECT) {
219
191
  this.stack.push(STATE.CLOSE_OBJECT);
220
-
221
192
  this._closeValue('onopenobject');
222
-
223
193
  this.depth++;
224
194
  } else this._closeValue('onkey');
225
-
226
195
  this.state = STATE.VALUE;
227
196
  } else if (c === Char.closeBrace) {
228
197
  this.emitNode('oncloseobject');
@@ -230,23 +199,17 @@ export default class ClarinetParser {
230
199
  this.state = this.stack.pop() || STATE.VALUE;
231
200
  } else if (c === Char.comma) {
232
201
  if (this.state === STATE.CLOSE_OBJECT) this.stack.push(STATE.CLOSE_OBJECT);
233
-
234
202
  this._closeValue();
235
-
236
203
  this.state = STATE.OPEN_KEY;
237
204
  } else this._error('Bad object');
238
-
239
205
  continue;
240
-
241
206
  case STATE.OPEN_ARRAY:
242
207
  case STATE.VALUE:
243
208
  if (isWhitespace(c)) continue;
244
-
245
209
  if (this.state === STATE.OPEN_ARRAY) {
246
210
  this.emit('onopenarray');
247
211
  this.depth++;
248
212
  this.state = STATE.VALUE;
249
-
250
213
  if (c === Char.closeBracket) {
251
214
  this.emit('onclosearray');
252
215
  this.depth--;
@@ -256,7 +219,6 @@ export default class ClarinetParser {
256
219
  this.stack.push(STATE.CLOSE_ARRAY);
257
220
  }
258
221
  }
259
-
260
222
  if (c === Char.doubleQuote) this.state = STATE.STRING;else if (c === Char.openBrace) this.state = STATE.OPEN_OBJECT;else if (c === Char.openBracket) this.state = STATE.OPEN_ARRAY;else if (c === Char.t) this.state = STATE.TRUE;else if (c === Char.f) this.state = STATE.FALSE;else if (c === Char.n) this.state = STATE.NULL;else if (c === Char.minus) {
261
223
  this.numberNode += '-';
262
224
  } else if (Char._0 <= c && c <= Char._9) {
@@ -264,22 +226,17 @@ export default class ClarinetParser {
264
226
  this.state = STATE.NUMBER_DIGIT;
265
227
  } else this._error('Bad value');
266
228
  continue;
267
-
268
229
  case STATE.CLOSE_ARRAY:
269
230
  if (c === Char.comma) {
270
231
  this.stack.push(STATE.CLOSE_ARRAY);
271
-
272
232
  this._closeValue('onvalue');
273
-
274
233
  this.state = STATE.VALUE;
275
234
  } else if (c === Char.closeBracket) {
276
235
  this.emitNode('onclosearray');
277
236
  this.depth--;
278
237
  this.state = this.stack.pop() || STATE.VALUE;
279
238
  } else if (isWhitespace(c)) continue;else this._error('Bad array');
280
-
281
239
  continue;
282
-
283
240
  case STATE.STRING:
284
241
  if (this.textNode === undefined) {
285
242
  this.textNode = '';
@@ -288,13 +245,11 @@ export default class ClarinetParser {
288
245
  let starti = i - 1;
289
246
  let slashed = this.slashed;
290
247
  let unicodeI = this.unicodeI;
291
-
292
248
  STRING_BIGLOOP: while (true) {
293
249
  while (unicodeI > 0) {
294
250
  this.unicodeS += String.fromCharCode(c);
295
251
  c = chunk.charCodeAt(i++);
296
252
  this.position++;
297
-
298
253
  if (unicodeI === 4) {
299
254
  this.textNode += String.fromCharCode(parseInt(this.unicodeS, 16));
300
255
  unicodeI = 0;
@@ -302,17 +257,14 @@ export default class ClarinetParser {
302
257
  } else {
303
258
  unicodeI++;
304
259
  }
305
-
306
260
  if (!c) break STRING_BIGLOOP;
307
261
  }
308
-
309
262
  if (c === Char.doubleQuote && !slashed) {
310
263
  this.state = this.stack.pop() || STATE.VALUE;
311
264
  this.textNode += chunk.substring(starti, i - 1);
312
265
  this.position += i - 1 - starti;
313
266
  break;
314
267
  }
315
-
316
268
  if (c === Char.backslash && !slashed) {
317
269
  slashed = true;
318
270
  this.textNode += chunk.substring(starti, i - 1);
@@ -321,10 +273,8 @@ export default class ClarinetParser {
321
273
  this.position++;
322
274
  if (!c) break;
323
275
  }
324
-
325
276
  if (slashed) {
326
277
  slashed = false;
327
-
328
278
  if (c === Char.n) {
329
279
  this.textNode += '\n';
330
280
  } else if (c === Char.r) {
@@ -341,97 +291,75 @@ export default class ClarinetParser {
341
291
  } else {
342
292
  this.textNode += String.fromCharCode(c);
343
293
  }
344
-
345
294
  c = chunk.charCodeAt(i++);
346
295
  this.position++;
347
296
  starti = i - 1;
348
297
  if (!c) break;else continue;
349
298
  }
350
-
351
299
  stringTokenPattern.lastIndex = i;
352
300
  const reResult = stringTokenPattern.exec(chunk);
353
-
354
301
  if (reResult === null) {
355
302
  i = chunk.length + 1;
356
303
  this.textNode += chunk.substring(starti, i - 1);
357
304
  this.position += i - 1 - starti;
358
305
  break;
359
306
  }
360
-
361
307
  i = reResult.index + 1;
362
308
  c = chunk.charCodeAt(reResult.index);
363
-
364
309
  if (!c) {
365
310
  this.textNode += chunk.substring(starti, i - 1);
366
311
  this.position += i - 1 - starti;
367
312
  break;
368
313
  }
369
314
  }
370
-
371
315
  this.slashed = slashed;
372
316
  this.unicodeI = unicodeI;
373
317
  continue;
374
-
375
318
  case STATE.TRUE:
376
319
  if (c === Char.r) this.state = STATE.TRUE2;else this._error("Invalid true started with t".concat(c));
377
320
  continue;
378
-
379
321
  case STATE.TRUE2:
380
322
  if (c === Char.u) this.state = STATE.TRUE3;else this._error("Invalid true started with tr".concat(c));
381
323
  continue;
382
-
383
324
  case STATE.TRUE3:
384
325
  if (c === Char.e) {
385
326
  this.emit('onvalue', true);
386
327
  this.state = this.stack.pop() || STATE.VALUE;
387
328
  } else this._error("Invalid true started with tru".concat(c));
388
-
389
329
  continue;
390
-
391
330
  case STATE.FALSE:
392
331
  if (c === Char.a) this.state = STATE.FALSE2;else this._error("Invalid false started with f".concat(c));
393
332
  continue;
394
-
395
333
  case STATE.FALSE2:
396
334
  if (c === Char.l) this.state = STATE.FALSE3;else this._error("Invalid false started with fa".concat(c));
397
335
  continue;
398
-
399
336
  case STATE.FALSE3:
400
337
  if (c === Char.s) this.state = STATE.FALSE4;else this._error("Invalid false started with fal".concat(c));
401
338
  continue;
402
-
403
339
  case STATE.FALSE4:
404
340
  if (c === Char.e) {
405
341
  this.emit('onvalue', false);
406
342
  this.state = this.stack.pop() || STATE.VALUE;
407
343
  } else this._error("Invalid false started with fals".concat(c));
408
-
409
344
  continue;
410
-
411
345
  case STATE.NULL:
412
346
  if (c === Char.u) this.state = STATE.NULL2;else this._error("Invalid null started with n".concat(c));
413
347
  continue;
414
-
415
348
  case STATE.NULL2:
416
349
  if (c === Char.l) this.state = STATE.NULL3;else this._error("Invalid null started with nu".concat(c));
417
350
  continue;
418
-
419
351
  case STATE.NULL3:
420
352
  if (c === Char.l) {
421
353
  this.emit('onvalue', null);
422
354
  this.state = this.stack.pop() || STATE.VALUE;
423
355
  } else this._error("Invalid null started with nul".concat(c));
424
-
425
356
  continue;
426
-
427
357
  case STATE.NUMBER_DECIMAL_POINT:
428
358
  if (c === Char.period) {
429
359
  this.numberNode += '.';
430
360
  this.state = STATE.NUMBER_DIGIT;
431
361
  } else this._error('Leading zero not followed by .');
432
-
433
362
  continue;
434
-
435
363
  case STATE.NUMBER_DIGIT:
436
364
  if (Char._0 <= c && c <= Char._9) this.numberNode += String.fromCharCode(c);else if (c === Char.period) {
437
365
  if (this.numberNode.indexOf('.') !== -1) this._error('Invalid number has two dots');
@@ -444,75 +372,58 @@ export default class ClarinetParser {
444
372
  this.numberNode += String.fromCharCode(c);
445
373
  } else {
446
374
  this._closeNumber();
447
-
448
375
  i--;
449
376
  this.state = this.stack.pop() || STATE.VALUE;
450
377
  }
451
378
  continue;
452
-
453
379
  default:
454
380
  this._error("Unknown state: ".concat(this.state));
455
-
456
381
  }
457
382
  }
458
-
459
383
  if (this.position >= this.bufferCheckPosition) {
460
384
  checkBufferLength(this);
461
385
  }
462
-
463
386
  this.emit('onchunkparsed');
464
387
  return this;
465
388
  }
466
-
467
- _closeValue(event = 'onvalue') {
389
+ _closeValue() {
390
+ let event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'onvalue';
468
391
  if (this.textNode !== undefined) {
469
392
  this.emit(event, this.textNode);
470
393
  }
471
-
472
394
  this.textNode = undefined;
473
395
  }
474
-
475
396
  _closeNumber() {
476
397
  if (this.numberNode) this.emit('onvalue', parseFloat(this.numberNode));
477
398
  this.numberNode = '';
478
399
  }
479
-
480
- _error(message = '') {
400
+ _error() {
401
+ let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
481
402
  this._closeValue();
482
-
483
403
  message += "\nLine: ".concat(this.line, "\nColumn: ").concat(this.column, "\nChar: ").concat(this.c);
484
404
  const error = new Error(message);
485
405
  this.error = error;
486
406
  this.emit('onerror', error);
487
407
  }
488
-
489
408
  }
490
-
491
409
  function isWhitespace(c) {
492
410
  return c === Char.carriageReturn || c === Char.lineFeed || c === Char.space || c === Char.tab;
493
411
  }
494
-
495
412
  function checkBufferLength(parser) {
496
413
  const maxAllowed = Math.max(MAX_BUFFER_LENGTH, 10);
497
414
  let maxActual = 0;
498
-
499
415
  for (const buffer of ['textNode', 'numberNode']) {
500
416
  const len = parser[buffer] === undefined ? 0 : parser[buffer].length;
501
-
502
417
  if (len > maxAllowed) {
503
418
  switch (buffer) {
504
419
  case 'text':
505
420
  break;
506
-
507
421
  default:
508
422
  parser._error("Max buffer length exceeded: ".concat(buffer));
509
-
510
423
  }
511
424
  }
512
-
513
425
  maxActual = Math.max(maxActual, len);
514
426
  }
515
-
516
427
  parser.bufferCheckPosition = MAX_BUFFER_LENGTH - maxActual + parser.position;
517
428
  }
518
429
  //# sourceMappingURL=clarinet.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/clarinet/clarinet.ts"],"names":["MAX_BUFFER_LENGTH","Number","MAX_SAFE_INTEGER","STATE","Char","tab","lineFeed","carriageReturn","space","doubleQuote","plus","comma","minus","period","_0","_9","colon","E","openBracket","backslash","closeBracket","a","b","e","f","l","n","r","s","t","u","openBrace","closeBrace","stringTokenPattern","DEFAULT_OPTIONS","onready","onopenobject","onkey","oncloseobject","onopenarray","onclosearray","onvalue","onerror","onend","onchunkparsed","ClarinetParser","constructor","options","BEGIN","textNode","undefined","numberNode","emit","end","state","VALUE","depth","_error","_closeValue","c","closed","resume","error","close","write","event","data","emitNode","chunk","i","charCodeAt","p","position","line","column","OPEN_OBJECT","OPEN_ARRAY","isWhitespace","OPEN_KEY","stack","push","CLOSE_KEY","pop","CLOSE_OBJECT","STRING","CLOSE_ARRAY","TRUE","FALSE","NULL","String","fromCharCode","NUMBER_DIGIT","starti","slashed","unicodeI","STRING_BIGLOOP","unicodeS","parseInt","substring","lastIndex","reResult","exec","length","index","TRUE2","TRUE3","FALSE2","FALSE3","FALSE4","NULL2","NULL3","NUMBER_DECIMAL_POINT","indexOf","_closeNumber","bufferCheckPosition","checkBufferLength","parseFloat","message","Error","parser","maxAllowed","Math","max","maxActual","buffer","len"],"mappings":"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","sourcesContent":["// loaders.gl, MIT license\n// This is a fork of the clarinet library, originally BSD license (see LICENSE file)\n// loaders.gl changes:\n// - typescript port\n\nexport type ClarinetEvent =\n | 'onvalue'\n | 'onstring'\n | 'onkey'\n | 'onopenobject'\n | 'oncloseobject'\n | 'onopenarray'\n | 'onclosearray'\n | 'onerror'\n | 'onend'\n | 'onready';\n\n// Removes the MAX_BUFFER_LENGTH, originally set to 64 * 1024\nconst MAX_BUFFER_LENGTH = Number.MAX_SAFE_INTEGER;\n// const DEBUG = false;\n\nenum STATE {\n BEGIN = 0,\n VALUE, // general stuff\n OPEN_OBJECT, // {\n CLOSE_OBJECT, // }\n OPEN_ARRAY, // [\n CLOSE_ARRAY, // ]\n TEXT_ESCAPE, // \\ stuff\n STRING, // \"\"\n BACKSLASH,\n END, // No more stack\n OPEN_KEY, // , \"a\"\n CLOSE_KEY, // :\n TRUE, // r\n TRUE2, // u\n TRUE3, // e\n FALSE, // a\n FALSE2, // l\n FALSE3, // s\n FALSE4, // e\n NULL, // u\n NULL2, // l\n NULL3, // l\n NUMBER_DECIMAL_POINT, // .\n NUMBER_DIGIT // [0-9]\n}\n\nconst Char = {\n tab: 0x09, // \\t\n lineFeed: 0x0a, // \\n\n carriageReturn: 0x0d, // \\r\n space: 0x20, // \" \"\n\n doubleQuote: 0x22, // \"\n plus: 0x2b, // +\n comma: 0x2c, // ,\n minus: 0x2d, // -\n period: 0x2e, // .\n\n _0: 0x30, // 0\n _9: 0x39, // 9\n\n colon: 0x3a, // :\n\n E: 0x45, // E\n\n openBracket: 0x5b, // [\n backslash: 0x5c, // \\\n closeBracket: 0x5d, // ]\n\n a: 0x61, // a\n b: 0x62, // b\n e: 0x65, // e\n f: 0x66, // f\n l: 0x6c, // l\n n: 0x6e, // n\n r: 0x72, // r\n s: 0x73, // s\n t: 0x74, // t\n u: 0x75, // u\n\n openBrace: 0x7b, // {\n closeBrace: 0x7d // }\n};\n\nconst stringTokenPattern = /[\\\\\"\\n]/g;\n\ntype ParserEvent = (parser: ClarinetParser, event: string, data?: any) => void;\n\nexport type ClarinetParserOptions = {\n onready?: ParserEvent;\n onopenobject?: ParserEvent;\n onkey?: ParserEvent;\n oncloseobject?: ParserEvent;\n onopenarray?: ParserEvent;\n onclosearray?: ParserEvent;\n onvalue?: ParserEvent;\n onerror?: ParserEvent;\n onend?: ParserEvent;\n onchunkparsed?: ParserEvent;\n};\n\nconst DEFAULT_OPTIONS: Required<ClarinetParserOptions> = {\n onready: () => {},\n onopenobject: () => {},\n onkey: () => {},\n oncloseobject: () => {},\n onopenarray: () => {},\n onclosearray: () => {},\n onvalue: () => {},\n onerror: () => {},\n onend: () => {},\n onchunkparsed: () => {}\n};\nexport default class ClarinetParser {\n protected options: Required<ClarinetParserOptions> = DEFAULT_OPTIONS;\n\n bufferCheckPosition = MAX_BUFFER_LENGTH;\n q = '';\n c = '';\n p = '';\n closed = false;\n closedRoot = false;\n sawRoot = false;\n // tag = null;\n error: Error | null = null;\n state = STATE.BEGIN;\n stack: STATE[] = [];\n // mostly just for error reporting\n position: number = 0;\n column: number = 0;\n line: number = 1;\n slashed: boolean = false;\n unicodeI: number = 0;\n unicodeS: string | null = null;\n depth: number = 0;\n\n textNode;\n numberNode;\n\n constructor(options: ClarinetParserOptions = {}) {\n this.options = {...DEFAULT_OPTIONS, ...options};\n this.textNode = undefined;\n this.numberNode = '';\n this.emit('onready');\n }\n\n end() {\n if (this.state !== STATE.VALUE || this.depth !== 0) this._error('Unexpected end');\n\n this._closeValue();\n this.c = '';\n this.closed = true;\n this.emit('onend');\n return this;\n }\n\n resume() {\n this.error = null;\n return this;\n }\n\n close() {\n return this.write(null);\n }\n\n // protected\n\n emit(event: string, data?: any): void {\n // if (DEBUG) console.log('-- emit', event, data);\n this.options[event]?.(data, this);\n }\n\n emitNode(event: string, data?: any): void {\n this._closeValue();\n this.emit(event, data);\n }\n\n /* eslint-disable no-continue */\n // eslint-disable-next-line complexity, max-statements\n write(chunk) {\n if (this.error) {\n throw this.error;\n }\n if (this.closed) {\n return this._error('Cannot write after close. Assign an onready handler.');\n }\n if (chunk === null) {\n return this.end();\n }\n let i = 0;\n let c = chunk.charCodeAt(0);\n let p = this.p;\n // if (DEBUG) console.log(`write -> [${ chunk }]`);\n while (c) {\n p = c;\n this.c = c = chunk.charCodeAt(i++);\n // if chunk doesnt have next, like streaming char by char\n // this way we need to check if previous is really previous\n // if not we need to reset to what the this says is the previous\n // from buffer\n if (p !== c) {\n this.p = p;\n } else {\n p = this.p;\n }\n\n if (!c) break;\n\n // if (DEBUG) console.log(i, c, STATE[this.state]);\n this.position++;\n if (c === Char.lineFeed) {\n this.line++;\n this.column = 0;\n } else this.column++;\n\n switch (this.state) {\n case STATE.BEGIN:\n if (c === Char.openBrace) this.state = STATE.OPEN_OBJECT;\n else if (c === Char.openBracket) this.state = STATE.OPEN_ARRAY;\n else if (!isWhitespace(c)) {\n this._error('Non-whitespace before {[.');\n }\n continue;\n\n case STATE.OPEN_KEY:\n case STATE.OPEN_OBJECT:\n if (isWhitespace(c)) continue;\n if (this.state === STATE.OPEN_KEY) this.stack.push(STATE.CLOSE_KEY);\n else if (c === Char.closeBrace) {\n this.emit('onopenobject');\n this.depth++;\n this.emit('oncloseobject');\n this.depth--;\n this.state = this.stack.pop() || STATE.VALUE;\n continue;\n } else this.stack.push(STATE.CLOSE_OBJECT);\n if (c === Char.doubleQuote) this.state = STATE.STRING;\n else this._error('Malformed object key should start with \"');\n continue;\n\n case STATE.CLOSE_KEY:\n case STATE.CLOSE_OBJECT:\n if (isWhitespace(c)) continue;\n // let event = this.state === STATE.CLOSE_KEY ? 'key' : 'object';\n if (c === Char.colon) {\n if (this.state === STATE.CLOSE_OBJECT) {\n this.stack.push(STATE.CLOSE_OBJECT);\n this._closeValue('onopenobject');\n this.depth++;\n } else this._closeValue('onkey');\n this.state = STATE.VALUE;\n } else if (c === Char.closeBrace) {\n this.emitNode('oncloseobject');\n this.depth--;\n this.state = this.stack.pop() || STATE.VALUE;\n } else if (c === Char.comma) {\n if (this.state === STATE.CLOSE_OBJECT) this.stack.push(STATE.CLOSE_OBJECT);\n this._closeValue();\n this.state = STATE.OPEN_KEY;\n } else this._error('Bad object');\n continue;\n\n case STATE.OPEN_ARRAY: // after an array there always a value\n case STATE.VALUE:\n if (isWhitespace(c)) continue;\n if (this.state === STATE.OPEN_ARRAY) {\n this.emit('onopenarray');\n this.depth++;\n this.state = STATE.VALUE;\n if (c === Char.closeBracket) {\n this.emit('onclosearray');\n this.depth--;\n this.state = this.stack.pop() || STATE.VALUE;\n continue;\n } else {\n this.stack.push(STATE.CLOSE_ARRAY);\n }\n }\n if (c === Char.doubleQuote) this.state = STATE.STRING;\n else if (c === Char.openBrace) this.state = STATE.OPEN_OBJECT;\n else if (c === Char.openBracket) this.state = STATE.OPEN_ARRAY;\n else if (c === Char.t) this.state = STATE.TRUE;\n else if (c === Char.f) this.state = STATE.FALSE;\n else if (c === Char.n) this.state = STATE.NULL;\n else if (c === Char.minus) {\n // keep and continue\n this.numberNode += '-';\n } else if (Char._0 <= c && c <= Char._9) {\n this.numberNode += String.fromCharCode(c);\n this.state = STATE.NUMBER_DIGIT;\n } else this._error('Bad value');\n continue;\n\n case STATE.CLOSE_ARRAY:\n if (c === Char.comma) {\n this.stack.push(STATE.CLOSE_ARRAY);\n this._closeValue('onvalue');\n this.state = STATE.VALUE;\n } else if (c === Char.closeBracket) {\n this.emitNode('onclosearray');\n this.depth--;\n this.state = this.stack.pop() || STATE.VALUE;\n } else if (isWhitespace(c)) continue;\n else this._error('Bad array');\n continue;\n\n case STATE.STRING:\n if (this.textNode === undefined) {\n this.textNode = '';\n }\n\n // thanks thejh, this is an about 50% performance improvement.\n let starti = i - 1;\n let slashed = this.slashed;\n let unicodeI = this.unicodeI;\n // eslint-disable-next-line no-constant-condition, no-labels\n STRING_BIGLOOP: while (true) {\n // if (DEBUG) console.log(i, c, STATE[this.state], slashed);\n // zero means \"no unicode active\". 1-4 mean \"parse some more\". end after 4.\n while (unicodeI > 0) {\n this.unicodeS += String.fromCharCode(c);\n c = chunk.charCodeAt(i++);\n this.position++;\n if (unicodeI === 4) {\n // TODO this might be slow? well, probably not used too often anyway\n this.textNode += String.fromCharCode(parseInt(this.unicodeS as string, 16));\n unicodeI = 0;\n starti = i - 1;\n } else {\n unicodeI++;\n }\n // we can just break here: no stuff we skipped that still has to be sliced out or so\n // eslint-disable-next-line no-labels\n if (!c) break STRING_BIGLOOP;\n }\n if (c === Char.doubleQuote && !slashed) {\n this.state = this.stack.pop() || STATE.VALUE;\n this.textNode += chunk.substring(starti, i - 1);\n this.position += i - 1 - starti;\n break;\n }\n if (c === Char.backslash && !slashed) {\n slashed = true;\n this.textNode += chunk.substring(starti, i - 1);\n this.position += i - 1 - starti;\n c = chunk.charCodeAt(i++);\n this.position++;\n if (!c) break;\n }\n if (slashed) {\n slashed = false;\n if (c === Char.n) {\n this.textNode += '\\n';\n } else if (c === Char.r) {\n this.textNode += '\\r';\n } else if (c === Char.t) {\n this.textNode += '\\t';\n } else if (c === Char.f) {\n this.textNode += '\\f';\n } else if (c === Char.b) {\n this.textNode += '\\b';\n } else if (c === Char.u) {\n // \\uxxxx. meh!\n unicodeI = 1;\n this.unicodeS = '';\n } else {\n this.textNode += String.fromCharCode(c);\n }\n c = chunk.charCodeAt(i++);\n this.position++;\n starti = i - 1;\n if (!c) break;\n else continue;\n }\n\n stringTokenPattern.lastIndex = i;\n const reResult = stringTokenPattern.exec(chunk);\n if (reResult === null) {\n i = chunk.length + 1;\n this.textNode += chunk.substring(starti, i - 1);\n this.position += i - 1 - starti;\n break;\n }\n i = reResult.index + 1;\n c = chunk.charCodeAt(reResult.index);\n if (!c) {\n this.textNode += chunk.substring(starti, i - 1);\n this.position += i - 1 - starti;\n break;\n }\n }\n this.slashed = slashed;\n this.unicodeI = unicodeI;\n continue;\n\n case STATE.TRUE:\n if (c === Char.r) this.state = STATE.TRUE2;\n else this._error(`Invalid true started with t${c}`);\n continue;\n\n case STATE.TRUE2:\n if (c === Char.u) this.state = STATE.TRUE3;\n else this._error(`Invalid true started with tr${c}`);\n continue;\n\n case STATE.TRUE3:\n if (c === Char.e) {\n this.emit('onvalue', true);\n this.state = this.stack.pop() || STATE.VALUE;\n } else this._error(`Invalid true started with tru${c}`);\n continue;\n\n case STATE.FALSE:\n if (c === Char.a) this.state = STATE.FALSE2;\n else this._error(`Invalid false started with f${c}`);\n continue;\n\n case STATE.FALSE2:\n if (c === Char.l) this.state = STATE.FALSE3;\n else this._error(`Invalid false started with fa${c}`);\n continue;\n\n case STATE.FALSE3:\n if (c === Char.s) this.state = STATE.FALSE4;\n else this._error(`Invalid false started with fal${c}`);\n continue;\n\n case STATE.FALSE4:\n if (c === Char.e) {\n this.emit('onvalue', false);\n this.state = this.stack.pop() || STATE.VALUE;\n } else this._error(`Invalid false started with fals${c}`);\n continue;\n\n case STATE.NULL:\n if (c === Char.u) this.state = STATE.NULL2;\n else this._error(`Invalid null started with n${c}`);\n continue;\n\n case STATE.NULL2:\n if (c === Char.l) this.state = STATE.NULL3;\n else this._error(`Invalid null started with nu${c}`);\n continue;\n\n case STATE.NULL3:\n if (c === Char.l) {\n this.emit('onvalue', null);\n this.state = this.stack.pop() || STATE.VALUE;\n } else this._error(`Invalid null started with nul${c}`);\n continue;\n\n case STATE.NUMBER_DECIMAL_POINT:\n if (c === Char.period) {\n this.numberNode += '.';\n this.state = STATE.NUMBER_DIGIT;\n } else this._error('Leading zero not followed by .');\n continue;\n\n case STATE.NUMBER_DIGIT:\n if (Char._0 <= c && c <= Char._9) this.numberNode += String.fromCharCode(c);\n else if (c === Char.period) {\n if (this.numberNode.indexOf('.') !== -1) this._error('Invalid number has two dots');\n this.numberNode += '.';\n } else if (c === Char.e || c === Char.E) {\n if (this.numberNode.indexOf('e') !== -1 || this.numberNode.indexOf('E') !== -1)\n this._error('Invalid number has two exponential');\n this.numberNode += 'e';\n } else if (c === Char.plus || c === Char.minus) {\n // @ts-expect-error\n if (!(p === Char.e || p === Char.E)) this._error('Invalid symbol in number');\n this.numberNode += String.fromCharCode(c);\n } else {\n this._closeNumber();\n i--; // go back one\n this.state = this.stack.pop() || STATE.VALUE;\n }\n continue;\n\n default:\n this._error(`Unknown state: ${this.state}`);\n }\n }\n if (this.position >= this.bufferCheckPosition) {\n checkBufferLength(this);\n }\n\n this.emit('onchunkparsed');\n\n return this;\n }\n\n _closeValue(event: string = 'onvalue'): void {\n if (this.textNode !== undefined) {\n this.emit(event, this.textNode);\n }\n this.textNode = undefined;\n }\n\n _closeNumber(): void {\n if (this.numberNode) this.emit('onvalue', parseFloat(this.numberNode));\n this.numberNode = '';\n }\n\n _error(message: string = ''): void {\n this._closeValue();\n message += `\\nLine: ${this.line}\\nColumn: ${this.column}\\nChar: ${this.c}`;\n const error = new Error(message);\n this.error = error;\n this.emit('onerror', error);\n }\n}\n\nfunction isWhitespace(c): boolean {\n return c === Char.carriageReturn || c === Char.lineFeed || c === Char.space || c === Char.tab;\n}\n\nfunction checkBufferLength(parser) {\n const maxAllowed = Math.max(MAX_BUFFER_LENGTH, 10);\n let maxActual = 0;\n\n for (const buffer of ['textNode', 'numberNode']) {\n const len = parser[buffer] === undefined ? 0 : parser[buffer].length;\n if (len > maxAllowed) {\n switch (buffer) {\n case 'text':\n // TODO - should this be closeValue?\n // closeText(parser);\n break;\n\n default:\n parser._error(`Max buffer length exceeded: ${buffer}`);\n }\n }\n maxActual = Math.max(maxActual, len);\n }\n parser.bufferCheckPosition = MAX_BUFFER_LENGTH - maxActual + parser.position;\n}\n"],"file":"clarinet.js"}
1
+ {"version":3,"file":"clarinet.js","names":["MAX_BUFFER_LENGTH","Number","MAX_SAFE_INTEGER","STATE","Char","tab","lineFeed","carriageReturn","space","doubleQuote","plus","comma","minus","period","_0","_9","colon","E","openBracket","backslash","closeBracket","a","b","e","f","l","n","r","s","t","u","openBrace","closeBrace","stringTokenPattern","DEFAULT_OPTIONS","onready","onopenobject","onkey","oncloseobject","onopenarray","onclosearray","onvalue","onerror","onend","onchunkparsed","ClarinetParser","constructor","options","BEGIN","textNode","undefined","numberNode","emit","end","state","VALUE","depth","_error","_closeValue","c","closed","resume","error","close","write","event","data","emitNode","chunk","i","charCodeAt","p","position","line","column","OPEN_OBJECT","OPEN_ARRAY","isWhitespace","OPEN_KEY","stack","push","CLOSE_KEY","pop","CLOSE_OBJECT","STRING","CLOSE_ARRAY","TRUE","FALSE","NULL","String","fromCharCode","NUMBER_DIGIT","starti","slashed","unicodeI","STRING_BIGLOOP","unicodeS","parseInt","substring","lastIndex","reResult","exec","length","index","TRUE2","TRUE3","FALSE2","FALSE3","FALSE4","NULL2","NULL3","NUMBER_DECIMAL_POINT","indexOf","_closeNumber","bufferCheckPosition","checkBufferLength","parseFloat","message","Error","parser","maxAllowed","Math","max","maxActual","buffer","len"],"sources":["../../../../src/lib/clarinet/clarinet.ts"],"sourcesContent":["// loaders.gl, MIT license\n// This is a fork of the clarinet library, originally BSD license (see LICENSE file)\n// loaders.gl changes:\n// - typescript port\n\nexport type ClarinetEvent =\n | 'onvalue'\n | 'onstring'\n | 'onkey'\n | 'onopenobject'\n | 'oncloseobject'\n | 'onopenarray'\n | 'onclosearray'\n | 'onerror'\n | 'onend'\n | 'onready';\n\n// Removes the MAX_BUFFER_LENGTH, originally set to 64 * 1024\nconst MAX_BUFFER_LENGTH = Number.MAX_SAFE_INTEGER;\n// const DEBUG = false;\n\nenum STATE {\n BEGIN = 0,\n VALUE, // general stuff\n OPEN_OBJECT, // {\n CLOSE_OBJECT, // }\n OPEN_ARRAY, // [\n CLOSE_ARRAY, // ]\n TEXT_ESCAPE, // \\ stuff\n STRING, // \"\"\n BACKSLASH,\n END, // No more stack\n OPEN_KEY, // , \"a\"\n CLOSE_KEY, // :\n TRUE, // r\n TRUE2, // u\n TRUE3, // e\n FALSE, // a\n FALSE2, // l\n FALSE3, // s\n FALSE4, // e\n NULL, // u\n NULL2, // l\n NULL3, // l\n NUMBER_DECIMAL_POINT, // .\n NUMBER_DIGIT // [0-9]\n}\n\nconst Char = {\n tab: 0x09, // \\t\n lineFeed: 0x0a, // \\n\n carriageReturn: 0x0d, // \\r\n space: 0x20, // \" \"\n\n doubleQuote: 0x22, // \"\n plus: 0x2b, // +\n comma: 0x2c, // ,\n minus: 0x2d, // -\n period: 0x2e, // .\n\n _0: 0x30, // 0\n _9: 0x39, // 9\n\n colon: 0x3a, // :\n\n E: 0x45, // E\n\n openBracket: 0x5b, // [\n backslash: 0x5c, // \\\n closeBracket: 0x5d, // ]\n\n a: 0x61, // a\n b: 0x62, // b\n e: 0x65, // e\n f: 0x66, // f\n l: 0x6c, // l\n n: 0x6e, // n\n r: 0x72, // r\n s: 0x73, // s\n t: 0x74, // t\n u: 0x75, // u\n\n openBrace: 0x7b, // {\n closeBrace: 0x7d // }\n};\n\nconst stringTokenPattern = /[\\\\\"\\n]/g;\n\ntype ParserEvent = (parser: ClarinetParser, event: string, data?: any) => void;\n\nexport type ClarinetParserOptions = {\n onready?: ParserEvent;\n onopenobject?: ParserEvent;\n onkey?: ParserEvent;\n oncloseobject?: ParserEvent;\n onopenarray?: ParserEvent;\n onclosearray?: ParserEvent;\n onvalue?: ParserEvent;\n onerror?: ParserEvent;\n onend?: ParserEvent;\n onchunkparsed?: ParserEvent;\n};\n\nconst DEFAULT_OPTIONS: Required<ClarinetParserOptions> = {\n onready: () => {},\n onopenobject: () => {},\n onkey: () => {},\n oncloseobject: () => {},\n onopenarray: () => {},\n onclosearray: () => {},\n onvalue: () => {},\n onerror: () => {},\n onend: () => {},\n onchunkparsed: () => {}\n};\nexport default class ClarinetParser {\n protected options: Required<ClarinetParserOptions> = DEFAULT_OPTIONS;\n\n bufferCheckPosition = MAX_BUFFER_LENGTH;\n q = '';\n c = '';\n p = '';\n closed = false;\n closedRoot = false;\n sawRoot = false;\n // tag = null;\n error: Error | null = null;\n state = STATE.BEGIN;\n stack: STATE[] = [];\n // mostly just for error reporting\n position: number = 0;\n column: number = 0;\n line: number = 1;\n slashed: boolean = false;\n unicodeI: number = 0;\n unicodeS: string | null = null;\n depth: number = 0;\n\n textNode;\n numberNode;\n\n constructor(options: ClarinetParserOptions = {}) {\n this.options = {...DEFAULT_OPTIONS, ...options};\n this.textNode = undefined;\n this.numberNode = '';\n this.emit('onready');\n }\n\n end() {\n if (this.state !== STATE.VALUE || this.depth !== 0) this._error('Unexpected end');\n\n this._closeValue();\n this.c = '';\n this.closed = true;\n this.emit('onend');\n return this;\n }\n\n resume() {\n this.error = null;\n return this;\n }\n\n close() {\n return this.write(null);\n }\n\n // protected\n\n emit(event: string, data?: any): void {\n // if (DEBUG) console.log('-- emit', event, data);\n this.options[event]?.(data, this);\n }\n\n emitNode(event: string, data?: any): void {\n this._closeValue();\n this.emit(event, data);\n }\n\n /* eslint-disable no-continue */\n // eslint-disable-next-line complexity, max-statements\n write(chunk) {\n if (this.error) {\n throw this.error;\n }\n if (this.closed) {\n return this._error('Cannot write after close. Assign an onready handler.');\n }\n if (chunk === null) {\n return this.end();\n }\n let i = 0;\n let c = chunk.charCodeAt(0);\n let p = this.p;\n // if (DEBUG) console.log(`write -> [${ chunk }]`);\n while (c) {\n p = c;\n this.c = c = chunk.charCodeAt(i++);\n // if chunk doesnt have next, like streaming char by char\n // this way we need to check if previous is really previous\n // if not we need to reset to what the this says is the previous\n // from buffer\n if (p !== c) {\n this.p = p;\n } else {\n p = this.p;\n }\n\n if (!c) break;\n\n // if (DEBUG) console.log(i, c, STATE[this.state]);\n this.position++;\n if (c === Char.lineFeed) {\n this.line++;\n this.column = 0;\n } else this.column++;\n\n switch (this.state) {\n case STATE.BEGIN:\n if (c === Char.openBrace) this.state = STATE.OPEN_OBJECT;\n else if (c === Char.openBracket) this.state = STATE.OPEN_ARRAY;\n else if (!isWhitespace(c)) {\n this._error('Non-whitespace before {[.');\n }\n continue;\n\n case STATE.OPEN_KEY:\n case STATE.OPEN_OBJECT:\n if (isWhitespace(c)) continue;\n if (this.state === STATE.OPEN_KEY) this.stack.push(STATE.CLOSE_KEY);\n else if (c === Char.closeBrace) {\n this.emit('onopenobject');\n this.depth++;\n this.emit('oncloseobject');\n this.depth--;\n this.state = this.stack.pop() || STATE.VALUE;\n continue;\n } else this.stack.push(STATE.CLOSE_OBJECT);\n if (c === Char.doubleQuote) this.state = STATE.STRING;\n else this._error('Malformed object key should start with \"');\n continue;\n\n case STATE.CLOSE_KEY:\n case STATE.CLOSE_OBJECT:\n if (isWhitespace(c)) continue;\n // let event = this.state === STATE.CLOSE_KEY ? 'key' : 'object';\n if (c === Char.colon) {\n if (this.state === STATE.CLOSE_OBJECT) {\n this.stack.push(STATE.CLOSE_OBJECT);\n this._closeValue('onopenobject');\n this.depth++;\n } else this._closeValue('onkey');\n this.state = STATE.VALUE;\n } else if (c === Char.closeBrace) {\n this.emitNode('oncloseobject');\n this.depth--;\n this.state = this.stack.pop() || STATE.VALUE;\n } else if (c === Char.comma) {\n if (this.state === STATE.CLOSE_OBJECT) this.stack.push(STATE.CLOSE_OBJECT);\n this._closeValue();\n this.state = STATE.OPEN_KEY;\n } else this._error('Bad object');\n continue;\n\n case STATE.OPEN_ARRAY: // after an array there always a value\n case STATE.VALUE:\n if (isWhitespace(c)) continue;\n if (this.state === STATE.OPEN_ARRAY) {\n this.emit('onopenarray');\n this.depth++;\n this.state = STATE.VALUE;\n if (c === Char.closeBracket) {\n this.emit('onclosearray');\n this.depth--;\n this.state = this.stack.pop() || STATE.VALUE;\n continue;\n } else {\n this.stack.push(STATE.CLOSE_ARRAY);\n }\n }\n if (c === Char.doubleQuote) this.state = STATE.STRING;\n else if (c === Char.openBrace) this.state = STATE.OPEN_OBJECT;\n else if (c === Char.openBracket) this.state = STATE.OPEN_ARRAY;\n else if (c === Char.t) this.state = STATE.TRUE;\n else if (c === Char.f) this.state = STATE.FALSE;\n else if (c === Char.n) this.state = STATE.NULL;\n else if (c === Char.minus) {\n // keep and continue\n this.numberNode += '-';\n } else if (Char._0 <= c && c <= Char._9) {\n this.numberNode += String.fromCharCode(c);\n this.state = STATE.NUMBER_DIGIT;\n } else this._error('Bad value');\n continue;\n\n case STATE.CLOSE_ARRAY:\n if (c === Char.comma) {\n this.stack.push(STATE.CLOSE_ARRAY);\n this._closeValue('onvalue');\n this.state = STATE.VALUE;\n } else if (c === Char.closeBracket) {\n this.emitNode('onclosearray');\n this.depth--;\n this.state = this.stack.pop() || STATE.VALUE;\n } else if (isWhitespace(c)) continue;\n else this._error('Bad array');\n continue;\n\n case STATE.STRING:\n if (this.textNode === undefined) {\n this.textNode = '';\n }\n\n // thanks thejh, this is an about 50% performance improvement.\n let starti = i - 1;\n let slashed = this.slashed;\n let unicodeI = this.unicodeI;\n // eslint-disable-next-line no-constant-condition, no-labels\n STRING_BIGLOOP: while (true) {\n // if (DEBUG) console.log(i, c, STATE[this.state], slashed);\n // zero means \"no unicode active\". 1-4 mean \"parse some more\". end after 4.\n while (unicodeI > 0) {\n this.unicodeS += String.fromCharCode(c);\n c = chunk.charCodeAt(i++);\n this.position++;\n if (unicodeI === 4) {\n // TODO this might be slow? well, probably not used too often anyway\n this.textNode += String.fromCharCode(parseInt(this.unicodeS as string, 16));\n unicodeI = 0;\n starti = i - 1;\n } else {\n unicodeI++;\n }\n // we can just break here: no stuff we skipped that still has to be sliced out or so\n // eslint-disable-next-line no-labels\n if (!c) break STRING_BIGLOOP;\n }\n if (c === Char.doubleQuote && !slashed) {\n this.state = this.stack.pop() || STATE.VALUE;\n this.textNode += chunk.substring(starti, i - 1);\n this.position += i - 1 - starti;\n break;\n }\n if (c === Char.backslash && !slashed) {\n slashed = true;\n this.textNode += chunk.substring(starti, i - 1);\n this.position += i - 1 - starti;\n c = chunk.charCodeAt(i++);\n this.position++;\n if (!c) break;\n }\n if (slashed) {\n slashed = false;\n if (c === Char.n) {\n this.textNode += '\\n';\n } else if (c === Char.r) {\n this.textNode += '\\r';\n } else if (c === Char.t) {\n this.textNode += '\\t';\n } else if (c === Char.f) {\n this.textNode += '\\f';\n } else if (c === Char.b) {\n this.textNode += '\\b';\n } else if (c === Char.u) {\n // \\uxxxx. meh!\n unicodeI = 1;\n this.unicodeS = '';\n } else {\n this.textNode += String.fromCharCode(c);\n }\n c = chunk.charCodeAt(i++);\n this.position++;\n starti = i - 1;\n if (!c) break;\n else continue;\n }\n\n stringTokenPattern.lastIndex = i;\n const reResult = stringTokenPattern.exec(chunk);\n if (reResult === null) {\n i = chunk.length + 1;\n this.textNode += chunk.substring(starti, i - 1);\n this.position += i - 1 - starti;\n break;\n }\n i = reResult.index + 1;\n c = chunk.charCodeAt(reResult.index);\n if (!c) {\n this.textNode += chunk.substring(starti, i - 1);\n this.position += i - 1 - starti;\n break;\n }\n }\n this.slashed = slashed;\n this.unicodeI = unicodeI;\n continue;\n\n case STATE.TRUE:\n if (c === Char.r) this.state = STATE.TRUE2;\n else this._error(`Invalid true started with t${c}`);\n continue;\n\n case STATE.TRUE2:\n if (c === Char.u) this.state = STATE.TRUE3;\n else this._error(`Invalid true started with tr${c}`);\n continue;\n\n case STATE.TRUE3:\n if (c === Char.e) {\n this.emit('onvalue', true);\n this.state = this.stack.pop() || STATE.VALUE;\n } else this._error(`Invalid true started with tru${c}`);\n continue;\n\n case STATE.FALSE:\n if (c === Char.a) this.state = STATE.FALSE2;\n else this._error(`Invalid false started with f${c}`);\n continue;\n\n case STATE.FALSE2:\n if (c === Char.l) this.state = STATE.FALSE3;\n else this._error(`Invalid false started with fa${c}`);\n continue;\n\n case STATE.FALSE3:\n if (c === Char.s) this.state = STATE.FALSE4;\n else this._error(`Invalid false started with fal${c}`);\n continue;\n\n case STATE.FALSE4:\n if (c === Char.e) {\n this.emit('onvalue', false);\n this.state = this.stack.pop() || STATE.VALUE;\n } else this._error(`Invalid false started with fals${c}`);\n continue;\n\n case STATE.NULL:\n if (c === Char.u) this.state = STATE.NULL2;\n else this._error(`Invalid null started with n${c}`);\n continue;\n\n case STATE.NULL2:\n if (c === Char.l) this.state = STATE.NULL3;\n else this._error(`Invalid null started with nu${c}`);\n continue;\n\n case STATE.NULL3:\n if (c === Char.l) {\n this.emit('onvalue', null);\n this.state = this.stack.pop() || STATE.VALUE;\n } else this._error(`Invalid null started with nul${c}`);\n continue;\n\n case STATE.NUMBER_DECIMAL_POINT:\n if (c === Char.period) {\n this.numberNode += '.';\n this.state = STATE.NUMBER_DIGIT;\n } else this._error('Leading zero not followed by .');\n continue;\n\n case STATE.NUMBER_DIGIT:\n if (Char._0 <= c && c <= Char._9) this.numberNode += String.fromCharCode(c);\n else if (c === Char.period) {\n if (this.numberNode.indexOf('.') !== -1) this._error('Invalid number has two dots');\n this.numberNode += '.';\n } else if (c === Char.e || c === Char.E) {\n if (this.numberNode.indexOf('e') !== -1 || this.numberNode.indexOf('E') !== -1)\n this._error('Invalid number has two exponential');\n this.numberNode += 'e';\n } else if (c === Char.plus || c === Char.minus) {\n // @ts-expect-error\n if (!(p === Char.e || p === Char.E)) this._error('Invalid symbol in number');\n this.numberNode += String.fromCharCode(c);\n } else {\n this._closeNumber();\n i--; // go back one\n this.state = this.stack.pop() || STATE.VALUE;\n }\n continue;\n\n default:\n this._error(`Unknown state: ${this.state}`);\n }\n }\n if (this.position >= this.bufferCheckPosition) {\n checkBufferLength(this);\n }\n\n this.emit('onchunkparsed');\n\n return this;\n }\n\n _closeValue(event: string = 'onvalue'): void {\n if (this.textNode !== undefined) {\n this.emit(event, this.textNode);\n }\n this.textNode = undefined;\n }\n\n _closeNumber(): void {\n if (this.numberNode) this.emit('onvalue', parseFloat(this.numberNode));\n this.numberNode = '';\n }\n\n _error(message: string = ''): void {\n this._closeValue();\n message += `\\nLine: ${this.line}\\nColumn: ${this.column}\\nChar: ${this.c}`;\n const error = new Error(message);\n this.error = error;\n this.emit('onerror', error);\n }\n}\n\nfunction isWhitespace(c): boolean {\n return c === Char.carriageReturn || c === Char.lineFeed || c === Char.space || c === Char.tab;\n}\n\nfunction checkBufferLength(parser) {\n const maxAllowed = Math.max(MAX_BUFFER_LENGTH, 10);\n let maxActual = 0;\n\n for (const buffer of ['textNode', 'numberNode']) {\n const len = parser[buffer] === undefined ? 0 : parser[buffer].length;\n if (len > maxAllowed) {\n switch (buffer) {\n case 'text':\n // TODO - should this be closeValue?\n // closeText(parser);\n break;\n\n default:\n parser._error(`Max buffer length exceeded: ${buffer}`);\n }\n }\n maxActual = Math.max(maxActual, len);\n }\n parser.bufferCheckPosition = MAX_BUFFER_LENGTH - maxActual + parser.position;\n}\n"],"mappings":";;AAkBA,MAAMA,iBAAiB,GAAGC,MAAM,CAACC,gBAAgB;AAAC,IAG7CC,KAAK;AAAA,WAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;AAAA,GAALA,KAAK,KAALA,KAAK;AA2BV,MAAMC,IAAI,GAAG;EACXC,GAAG,EAAE,IAAI;EACTC,QAAQ,EAAE,IAAI;EACdC,cAAc,EAAE,IAAI;EACpBC,KAAK,EAAE,IAAI;;EAEXC,WAAW,EAAE,IAAI;EACjBC,IAAI,EAAE,IAAI;EACVC,KAAK,EAAE,IAAI;EACXC,KAAK,EAAE,IAAI;EACXC,MAAM,EAAE,IAAI;;EAEZC,EAAE,EAAE,IAAI;EACRC,EAAE,EAAE,IAAI;;EAERC,KAAK,EAAE,IAAI;;EAEXC,CAAC,EAAE,IAAI;;EAEPC,WAAW,EAAE,IAAI;EACjBC,SAAS,EAAE,IAAI;EACfC,YAAY,EAAE,IAAI;;EAElBC,CAAC,EAAE,IAAI;EACPC,CAAC,EAAE,IAAI;EACPC,CAAC,EAAE,IAAI;EACPC,CAAC,EAAE,IAAI;EACPC,CAAC,EAAE,IAAI;EACPC,CAAC,EAAE,IAAI;EACPC,CAAC,EAAE,IAAI;EACPC,CAAC,EAAE,IAAI;EACPC,CAAC,EAAE,IAAI;EACPC,CAAC,EAAE,IAAI;;EAEPC,SAAS,EAAE,IAAI;EACfC,UAAU,EAAE;AACd,CAAC;;AAED,MAAMC,kBAAkB,GAAG,UAAU;AAiBrC,MAAMC,eAAgD,GAAG;EACvDC,OAAO,EAAE,MAAM,CAAC,CAAC;EACjBC,YAAY,EAAE,MAAM,CAAC,CAAC;EACtBC,KAAK,EAAE,MAAM,CAAC,CAAC;EACfC,aAAa,EAAE,MAAM,CAAC,CAAC;EACvBC,WAAW,EAAE,MAAM,CAAC,CAAC;EACrBC,YAAY,EAAE,MAAM,CAAC,CAAC;EACtBC,OAAO,EAAE,MAAM,CAAC,CAAC;EACjBC,OAAO,EAAE,MAAM,CAAC,CAAC;EACjBC,KAAK,EAAE,MAAM,CAAC,CAAC;EACfC,aAAa,EAAE,MAAM,CAAC;AACxB,CAAC;AACD,eAAe,MAAMC,cAAc,CAAC;;EA0BlCC,WAAW,GAAsC;IAAA,IAArCC,OAA8B,uEAAG,CAAC,CAAC;IAAA,iCAzBMb,eAAe;IAAA,6CAE9ClC,iBAAiB;IAAA,2BACnC,EAAE;IAAA,2BACF,EAAE;IAAA,2BACF,EAAE;IAAA,gCACG,KAAK;IAAA,oCACD,KAAK;IAAA,iCACR,KAAK;IAAA,+BAEO,IAAI;IAAA,+BAClBG,KAAK,CAAC6C,KAAK;IAAA,+BACF,EAAE;IAAA,kCAEA,CAAC;IAAA,gCACH,CAAC;IAAA,8BACH,CAAC;IAAA,iCACG,KAAK;IAAA,kCACL,CAAC;IAAA,kCACM,IAAI;IAAA,+BACd,CAAC;IAAA;IAAA;IAMf,IAAI,CAACD,OAAO,GAAG;MAAC,GAAGb,eAAe;MAAE,GAAGa;IAAO,CAAC;IAC/C,IAAI,CAACE,QAAQ,GAAGC,SAAS;IACzB,IAAI,CAACC,UAAU,GAAG,EAAE;IACpB,IAAI,CAACC,IAAI,CAAC,SAAS,CAAC;EACtB;EAEAC,GAAG,GAAG;IACJ,IAAI,IAAI,CAACC,KAAK,KAAKnD,KAAK,CAACoD,KAAK,IAAI,IAAI,CAACC,KAAK,KAAK,CAAC,EAAE,IAAI,CAACC,MAAM,CAAC,gBAAgB,CAAC;IAEjF,IAAI,CAACC,WAAW,EAAE;IAClB,IAAI,CAACC,CAAC,GAAG,EAAE;IACX,IAAI,CAACC,MAAM,GAAG,IAAI;IAClB,IAAI,CAACR,IAAI,CAAC,OAAO,CAAC;IAClB,OAAO,IAAI;EACb;EAEAS,MAAM,GAAG;IACP,IAAI,CAACC,KAAK,GAAG,IAAI;IACjB,OAAO,IAAI;EACb;EAEAC,KAAK,GAAG;IACN,OAAO,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC;EACzB;;EAIAZ,IAAI,CAACa,KAAa,EAAEC,IAAU,EAAQ;IAAA;IAEpC,4CAAI,CAACnB,OAAO,EAACkB,KAAK,CAAC,wDAAnB,wCAAsBC,IAAI,EAAE,IAAI,CAAC;EACnC;EAEAC,QAAQ,CAACF,KAAa,EAAEC,IAAU,EAAQ;IACxC,IAAI,CAACR,WAAW,EAAE;IAClB,IAAI,CAACN,IAAI,CAACa,KAAK,EAAEC,IAAI,CAAC;EACxB;;EAIAF,KAAK,CAACI,KAAK,EAAE;IACX,IAAI,IAAI,CAACN,KAAK,EAAE;MACd,MAAM,IAAI,CAACA,KAAK;IAClB;IACA,IAAI,IAAI,CAACF,MAAM,EAAE;MACf,OAAO,IAAI,CAACH,MAAM,CAAC,sDAAsD,CAAC;IAC5E;IACA,IAAIW,KAAK,KAAK,IAAI,EAAE;MAClB,OAAO,IAAI,CAACf,GAAG,EAAE;IACnB;IACA,IAAIgB,CAAC,GAAG,CAAC;IACT,IAAIV,CAAC,GAAGS,KAAK,CAACE,UAAU,CAAC,CAAC,CAAC;IAC3B,IAAIC,CAAC,GAAG,IAAI,CAACA,CAAC;IAEd,OAAOZ,CAAC,EAAE;MACRY,CAAC,GAAGZ,CAAC;MACL,IAAI,CAACA,CAAC,GAAGA,CAAC,GAAGS,KAAK,CAACE,UAAU,CAACD,CAAC,EAAE,CAAC;MAKlC,IAAIE,CAAC,KAAKZ,CAAC,EAAE;QACX,IAAI,CAACY,CAAC,GAAGA,CAAC;MACZ,CAAC,MAAM;QACLA,CAAC,GAAG,IAAI,CAACA,CAAC;MACZ;MAEA,IAAI,CAACZ,CAAC,EAAE;;MAGR,IAAI,CAACa,QAAQ,EAAE;MACf,IAAIb,CAAC,KAAKvD,IAAI,CAACE,QAAQ,EAAE;QACvB,IAAI,CAACmE,IAAI,EAAE;QACX,IAAI,CAACC,MAAM,GAAG,CAAC;MACjB,CAAC,MAAM,IAAI,CAACA,MAAM,EAAE;MAEpB,QAAQ,IAAI,CAACpB,KAAK;QAChB,KAAKnD,KAAK,CAAC6C,KAAK;UACd,IAAIW,CAAC,KAAKvD,IAAI,CAAC2B,SAAS,EAAE,IAAI,CAACuB,KAAK,GAAGnD,KAAK,CAACwE,WAAW,CAAC,KACpD,IAAIhB,CAAC,KAAKvD,IAAI,CAACc,WAAW,EAAE,IAAI,CAACoC,KAAK,GAAGnD,KAAK,CAACyE,UAAU,CAAC,KAC1D,IAAI,CAACC,YAAY,CAAClB,CAAC,CAAC,EAAE;YACzB,IAAI,CAACF,MAAM,CAAC,2BAA2B,CAAC;UAC1C;UACA;QAEF,KAAKtD,KAAK,CAAC2E,QAAQ;QACnB,KAAK3E,KAAK,CAACwE,WAAW;UACpB,IAAIE,YAAY,CAAClB,CAAC,CAAC,EAAE;UACrB,IAAI,IAAI,CAACL,KAAK,KAAKnD,KAAK,CAAC2E,QAAQ,EAAE,IAAI,CAACC,KAAK,CAACC,IAAI,CAAC7E,KAAK,CAAC8E,SAAS,CAAC,CAAC,KAC/D,IAAItB,CAAC,KAAKvD,IAAI,CAAC4B,UAAU,EAAE;YAC9B,IAAI,CAACoB,IAAI,CAAC,cAAc,CAAC;YACzB,IAAI,CAACI,KAAK,EAAE;YACZ,IAAI,CAACJ,IAAI,CAAC,eAAe,CAAC;YAC1B,IAAI,CAACI,KAAK,EAAE;YACZ,IAAI,CAACF,KAAK,GAAG,IAAI,CAACyB,KAAK,CAACG,GAAG,EAAE,IAAI/E,KAAK,CAACoD,KAAK;YAC5C;UACF,CAAC,MAAM,IAAI,CAACwB,KAAK,CAACC,IAAI,CAAC7E,KAAK,CAACgF,YAAY,CAAC;UAC1C,IAAIxB,CAAC,KAAKvD,IAAI,CAACK,WAAW,EAAE,IAAI,CAAC6C,KAAK,GAAGnD,KAAK,CAACiF,MAAM,CAAC,KACjD,IAAI,CAAC3B,MAAM,CAAC,0CAA0C,CAAC;UAC5D;QAEF,KAAKtD,KAAK,CAAC8E,SAAS;QACpB,KAAK9E,KAAK,CAACgF,YAAY;UACrB,IAAIN,YAAY,CAAClB,CAAC,CAAC,EAAE;UAErB,IAAIA,CAAC,KAAKvD,IAAI,CAACY,KAAK,EAAE;YACpB,IAAI,IAAI,CAACsC,KAAK,KAAKnD,KAAK,CAACgF,YAAY,EAAE;cACrC,IAAI,CAACJ,KAAK,CAACC,IAAI,CAAC7E,KAAK,CAACgF,YAAY,CAAC;cACnC,IAAI,CAACzB,WAAW,CAAC,cAAc,CAAC;cAChC,IAAI,CAACF,KAAK,EAAE;YACd,CAAC,MAAM,IAAI,CAACE,WAAW,CAAC,OAAO,CAAC;YAChC,IAAI,CAACJ,KAAK,GAAGnD,KAAK,CAACoD,KAAK;UAC1B,CAAC,MAAM,IAAII,CAAC,KAAKvD,IAAI,CAAC4B,UAAU,EAAE;YAChC,IAAI,CAACmC,QAAQ,CAAC,eAAe,CAAC;YAC9B,IAAI,CAACX,KAAK,EAAE;YACZ,IAAI,CAACF,KAAK,GAAG,IAAI,CAACyB,KAAK,CAACG,GAAG,EAAE,IAAI/E,KAAK,CAACoD,KAAK;UAC9C,CAAC,MAAM,IAAII,CAAC,KAAKvD,IAAI,CAACO,KAAK,EAAE;YAC3B,IAAI,IAAI,CAAC2C,KAAK,KAAKnD,KAAK,CAACgF,YAAY,EAAE,IAAI,CAACJ,KAAK,CAACC,IAAI,CAAC7E,KAAK,CAACgF,YAAY,CAAC;YAC1E,IAAI,CAACzB,WAAW,EAAE;YAClB,IAAI,CAACJ,KAAK,GAAGnD,KAAK,CAAC2E,QAAQ;UAC7B,CAAC,MAAM,IAAI,CAACrB,MAAM,CAAC,YAAY,CAAC;UAChC;QAEF,KAAKtD,KAAK,CAACyE,UAAU;QACrB,KAAKzE,KAAK,CAACoD,KAAK;UACd,IAAIsB,YAAY,CAAClB,CAAC,CAAC,EAAE;UACrB,IAAI,IAAI,CAACL,KAAK,KAAKnD,KAAK,CAACyE,UAAU,EAAE;YACnC,IAAI,CAACxB,IAAI,CAAC,aAAa,CAAC;YACxB,IAAI,CAACI,KAAK,EAAE;YACZ,IAAI,CAACF,KAAK,GAAGnD,KAAK,CAACoD,KAAK;YACxB,IAAII,CAAC,KAAKvD,IAAI,CAACgB,YAAY,EAAE;cAC3B,IAAI,CAACgC,IAAI,CAAC,cAAc,CAAC;cACzB,IAAI,CAACI,KAAK,EAAE;cACZ,IAAI,CAACF,KAAK,GAAG,IAAI,CAACyB,KAAK,CAACG,GAAG,EAAE,IAAI/E,KAAK,CAACoD,KAAK;cAC5C;YACF,CAAC,MAAM;cACL,IAAI,CAACwB,KAAK,CAACC,IAAI,CAAC7E,KAAK,CAACkF,WAAW,CAAC;YACpC;UACF;UACA,IAAI1B,CAAC,KAAKvD,IAAI,CAACK,WAAW,EAAE,IAAI,CAAC6C,KAAK,GAAGnD,KAAK,CAACiF,MAAM,CAAC,KACjD,IAAIzB,CAAC,KAAKvD,IAAI,CAAC2B,SAAS,EAAE,IAAI,CAACuB,KAAK,GAAGnD,KAAK,CAACwE,WAAW,CAAC,KACzD,IAAIhB,CAAC,KAAKvD,IAAI,CAACc,WAAW,EAAE,IAAI,CAACoC,KAAK,GAAGnD,KAAK,CAACyE,UAAU,CAAC,KAC1D,IAAIjB,CAAC,KAAKvD,IAAI,CAACyB,CAAC,EAAE,IAAI,CAACyB,KAAK,GAAGnD,KAAK,CAACmF,IAAI,CAAC,KAC1C,IAAI3B,CAAC,KAAKvD,IAAI,CAACoB,CAAC,EAAE,IAAI,CAAC8B,KAAK,GAAGnD,KAAK,CAACoF,KAAK,CAAC,KAC3C,IAAI5B,CAAC,KAAKvD,IAAI,CAACsB,CAAC,EAAE,IAAI,CAAC4B,KAAK,GAAGnD,KAAK,CAACqF,IAAI,CAAC,KAC1C,IAAI7B,CAAC,KAAKvD,IAAI,CAACQ,KAAK,EAAE;YAEzB,IAAI,CAACuC,UAAU,IAAI,GAAG;UACxB,CAAC,MAAM,IAAI/C,IAAI,CAACU,EAAE,IAAI6C,CAAC,IAAIA,CAAC,IAAIvD,IAAI,CAACW,EAAE,EAAE;YACvC,IAAI,CAACoC,UAAU,IAAIsC,MAAM,CAACC,YAAY,CAAC/B,CAAC,CAAC;YACzC,IAAI,CAACL,KAAK,GAAGnD,KAAK,CAACwF,YAAY;UACjC,CAAC,MAAM,IAAI,CAAClC,MAAM,CAAC,WAAW,CAAC;UAC/B;QAEF,KAAKtD,KAAK,CAACkF,WAAW;UACpB,IAAI1B,CAAC,KAAKvD,IAAI,CAACO,KAAK,EAAE;YACpB,IAAI,CAACoE,KAAK,CAACC,IAAI,CAAC7E,KAAK,CAACkF,WAAW,CAAC;YAClC,IAAI,CAAC3B,WAAW,CAAC,SAAS,CAAC;YAC3B,IAAI,CAACJ,KAAK,GAAGnD,KAAK,CAACoD,KAAK;UAC1B,CAAC,MAAM,IAAII,CAAC,KAAKvD,IAAI,CAACgB,YAAY,EAAE;YAClC,IAAI,CAAC+C,QAAQ,CAAC,cAAc,CAAC;YAC7B,IAAI,CAACX,KAAK,EAAE;YACZ,IAAI,CAACF,KAAK,GAAG,IAAI,CAACyB,KAAK,CAACG,GAAG,EAAE,IAAI/E,KAAK,CAACoD,KAAK;UAC9C,CAAC,MAAM,IAAIsB,YAAY,CAAClB,CAAC,CAAC,EAAE,SAAS,KAChC,IAAI,CAACF,MAAM,CAAC,WAAW,CAAC;UAC7B;QAEF,KAAKtD,KAAK,CAACiF,MAAM;UACf,IAAI,IAAI,CAACnC,QAAQ,KAAKC,SAAS,EAAE;YAC/B,IAAI,CAACD,QAAQ,GAAG,EAAE;UACpB;;UAGA,IAAI2C,MAAM,GAAGvB,CAAC,GAAG,CAAC;UAClB,IAAIwB,OAAO,GAAG,IAAI,CAACA,OAAO;UAC1B,IAAIC,QAAQ,GAAG,IAAI,CAACA,QAAQ;UAE5BC,cAAc,EAAE,OAAO,IAAI,EAAE;YAG3B,OAAOD,QAAQ,GAAG,CAAC,EAAE;cACnB,IAAI,CAACE,QAAQ,IAAIP,MAAM,CAACC,YAAY,CAAC/B,CAAC,CAAC;cACvCA,CAAC,GAAGS,KAAK,CAACE,UAAU,CAACD,CAAC,EAAE,CAAC;cACzB,IAAI,CAACG,QAAQ,EAAE;cACf,IAAIsB,QAAQ,KAAK,CAAC,EAAE;gBAElB,IAAI,CAAC7C,QAAQ,IAAIwC,MAAM,CAACC,YAAY,CAACO,QAAQ,CAAC,IAAI,CAACD,QAAQ,EAAY,EAAE,CAAC,CAAC;gBAC3EF,QAAQ,GAAG,CAAC;gBACZF,MAAM,GAAGvB,CAAC,GAAG,CAAC;cAChB,CAAC,MAAM;gBACLyB,QAAQ,EAAE;cACZ;cAGA,IAAI,CAACnC,CAAC,EAAE,MAAMoC,cAAc;YAC9B;YACA,IAAIpC,CAAC,KAAKvD,IAAI,CAACK,WAAW,IAAI,CAACoF,OAAO,EAAE;cACtC,IAAI,CAACvC,KAAK,GAAG,IAAI,CAACyB,KAAK,CAACG,GAAG,EAAE,IAAI/E,KAAK,CAACoD,KAAK;cAC5C,IAAI,CAACN,QAAQ,IAAImB,KAAK,CAAC8B,SAAS,CAACN,MAAM,EAAEvB,CAAC,GAAG,CAAC,CAAC;cAC/C,IAAI,CAACG,QAAQ,IAAIH,CAAC,GAAG,CAAC,GAAGuB,MAAM;cAC/B;YACF;YACA,IAAIjC,CAAC,KAAKvD,IAAI,CAACe,SAAS,IAAI,CAAC0E,OAAO,EAAE;cACpCA,OAAO,GAAG,IAAI;cACd,IAAI,CAAC5C,QAAQ,IAAImB,KAAK,CAAC8B,SAAS,CAACN,MAAM,EAAEvB,CAAC,GAAG,CAAC,CAAC;cAC/C,IAAI,CAACG,QAAQ,IAAIH,CAAC,GAAG,CAAC,GAAGuB,MAAM;cAC/BjC,CAAC,GAAGS,KAAK,CAACE,UAAU,CAACD,CAAC,EAAE,CAAC;cACzB,IAAI,CAACG,QAAQ,EAAE;cACf,IAAI,CAACb,CAAC,EAAE;YACV;YACA,IAAIkC,OAAO,EAAE;cACXA,OAAO,GAAG,KAAK;cACf,IAAIlC,CAAC,KAAKvD,IAAI,CAACsB,CAAC,EAAE;gBAChB,IAAI,CAACuB,QAAQ,IAAI,IAAI;cACvB,CAAC,MAAM,IAAIU,CAAC,KAAKvD,IAAI,CAACuB,CAAC,EAAE;gBACvB,IAAI,CAACsB,QAAQ,IAAI,IAAI;cACvB,CAAC,MAAM,IAAIU,CAAC,KAAKvD,IAAI,CAACyB,CAAC,EAAE;gBACvB,IAAI,CAACoB,QAAQ,IAAI,IAAI;cACvB,CAAC,MAAM,IAAIU,CAAC,KAAKvD,IAAI,CAACoB,CAAC,EAAE;gBACvB,IAAI,CAACyB,QAAQ,IAAI,IAAI;cACvB,CAAC,MAAM,IAAIU,CAAC,KAAKvD,IAAI,CAACkB,CAAC,EAAE;gBACvB,IAAI,CAAC2B,QAAQ,IAAI,IAAI;cACvB,CAAC,MAAM,IAAIU,CAAC,KAAKvD,IAAI,CAAC0B,CAAC,EAAE;gBAEvBgE,QAAQ,GAAG,CAAC;gBACZ,IAAI,CAACE,QAAQ,GAAG,EAAE;cACpB,CAAC,MAAM;gBACL,IAAI,CAAC/C,QAAQ,IAAIwC,MAAM,CAACC,YAAY,CAAC/B,CAAC,CAAC;cACzC;cACAA,CAAC,GAAGS,KAAK,CAACE,UAAU,CAACD,CAAC,EAAE,CAAC;cACzB,IAAI,CAACG,QAAQ,EAAE;cACfoB,MAAM,GAAGvB,CAAC,GAAG,CAAC;cACd,IAAI,CAACV,CAAC,EAAE,MAAM,KACT;YACP;YAEA1B,kBAAkB,CAACkE,SAAS,GAAG9B,CAAC;YAChC,MAAM+B,QAAQ,GAAGnE,kBAAkB,CAACoE,IAAI,CAACjC,KAAK,CAAC;YAC/C,IAAIgC,QAAQ,KAAK,IAAI,EAAE;cACrB/B,CAAC,GAAGD,KAAK,CAACkC,MAAM,GAAG,CAAC;cACpB,IAAI,CAACrD,QAAQ,IAAImB,KAAK,CAAC8B,SAAS,CAACN,MAAM,EAAEvB,CAAC,GAAG,CAAC,CAAC;cAC/C,IAAI,CAACG,QAAQ,IAAIH,CAAC,GAAG,CAAC,GAAGuB,MAAM;cAC/B;YACF;YACAvB,CAAC,GAAG+B,QAAQ,CAACG,KAAK,GAAG,CAAC;YACtB5C,CAAC,GAAGS,KAAK,CAACE,UAAU,CAAC8B,QAAQ,CAACG,KAAK,CAAC;YACpC,IAAI,CAAC5C,CAAC,EAAE;cACN,IAAI,CAACV,QAAQ,IAAImB,KAAK,CAAC8B,SAAS,CAACN,MAAM,EAAEvB,CAAC,GAAG,CAAC,CAAC;cAC/C,IAAI,CAACG,QAAQ,IAAIH,CAAC,GAAG,CAAC,GAAGuB,MAAM;cAC/B;YACF;UACF;UACA,IAAI,CAACC,OAAO,GAAGA,OAAO;UACtB,IAAI,CAACC,QAAQ,GAAGA,QAAQ;UACxB;QAEF,KAAK3F,KAAK,CAACmF,IAAI;UACb,IAAI3B,CAAC,KAAKvD,IAAI,CAACuB,CAAC,EAAE,IAAI,CAAC2B,KAAK,GAAGnD,KAAK,CAACqG,KAAK,CAAC,KACtC,IAAI,CAAC/C,MAAM,sCAA+BE,CAAC,EAAG;UACnD;QAEF,KAAKxD,KAAK,CAACqG,KAAK;UACd,IAAI7C,CAAC,KAAKvD,IAAI,CAAC0B,CAAC,EAAE,IAAI,CAACwB,KAAK,GAAGnD,KAAK,CAACsG,KAAK,CAAC,KACtC,IAAI,CAAChD,MAAM,uCAAgCE,CAAC,EAAG;UACpD;QAEF,KAAKxD,KAAK,CAACsG,KAAK;UACd,IAAI9C,CAAC,KAAKvD,IAAI,CAACmB,CAAC,EAAE;YAChB,IAAI,CAAC6B,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;YAC1B,IAAI,CAACE,KAAK,GAAG,IAAI,CAACyB,KAAK,CAACG,GAAG,EAAE,IAAI/E,KAAK,CAACoD,KAAK;UAC9C,CAAC,MAAM,IAAI,CAACE,MAAM,wCAAiCE,CAAC,EAAG;UACvD;QAEF,KAAKxD,KAAK,CAACoF,KAAK;UACd,IAAI5B,CAAC,KAAKvD,IAAI,CAACiB,CAAC,EAAE,IAAI,CAACiC,KAAK,GAAGnD,KAAK,CAACuG,MAAM,CAAC,KACvC,IAAI,CAACjD,MAAM,uCAAgCE,CAAC,EAAG;UACpD;QAEF,KAAKxD,KAAK,CAACuG,MAAM;UACf,IAAI/C,CAAC,KAAKvD,IAAI,CAACqB,CAAC,EAAE,IAAI,CAAC6B,KAAK,GAAGnD,KAAK,CAACwG,MAAM,CAAC,KACvC,IAAI,CAAClD,MAAM,wCAAiCE,CAAC,EAAG;UACrD;QAEF,KAAKxD,KAAK,CAACwG,MAAM;UACf,IAAIhD,CAAC,KAAKvD,IAAI,CAACwB,CAAC,EAAE,IAAI,CAAC0B,KAAK,GAAGnD,KAAK,CAACyG,MAAM,CAAC,KACvC,IAAI,CAACnD,MAAM,yCAAkCE,CAAC,EAAG;UACtD;QAEF,KAAKxD,KAAK,CAACyG,MAAM;UACf,IAAIjD,CAAC,KAAKvD,IAAI,CAACmB,CAAC,EAAE;YAChB,IAAI,CAAC6B,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;YAC3B,IAAI,CAACE,KAAK,GAAG,IAAI,CAACyB,KAAK,CAACG,GAAG,EAAE,IAAI/E,KAAK,CAACoD,KAAK;UAC9C,CAAC,MAAM,IAAI,CAACE,MAAM,0CAAmCE,CAAC,EAAG;UACzD;QAEF,KAAKxD,KAAK,CAACqF,IAAI;UACb,IAAI7B,CAAC,KAAKvD,IAAI,CAAC0B,CAAC,EAAE,IAAI,CAACwB,KAAK,GAAGnD,KAAK,CAAC0G,KAAK,CAAC,KACtC,IAAI,CAACpD,MAAM,sCAA+BE,CAAC,EAAG;UACnD;QAEF,KAAKxD,KAAK,CAAC0G,KAAK;UACd,IAAIlD,CAAC,KAAKvD,IAAI,CAACqB,CAAC,EAAE,IAAI,CAAC6B,KAAK,GAAGnD,KAAK,CAAC2G,KAAK,CAAC,KACtC,IAAI,CAACrD,MAAM,uCAAgCE,CAAC,EAAG;UACpD;QAEF,KAAKxD,KAAK,CAAC2G,KAAK;UACd,IAAInD,CAAC,KAAKvD,IAAI,CAACqB,CAAC,EAAE;YAChB,IAAI,CAAC2B,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;YAC1B,IAAI,CAACE,KAAK,GAAG,IAAI,CAACyB,KAAK,CAACG,GAAG,EAAE,IAAI/E,KAAK,CAACoD,KAAK;UAC9C,CAAC,MAAM,IAAI,CAACE,MAAM,wCAAiCE,CAAC,EAAG;UACvD;QAEF,KAAKxD,KAAK,CAAC4G,oBAAoB;UAC7B,IAAIpD,CAAC,KAAKvD,IAAI,CAACS,MAAM,EAAE;YACrB,IAAI,CAACsC,UAAU,IAAI,GAAG;YACtB,IAAI,CAACG,KAAK,GAAGnD,KAAK,CAACwF,YAAY;UACjC,CAAC,MAAM,IAAI,CAAClC,MAAM,CAAC,gCAAgC,CAAC;UACpD;QAEF,KAAKtD,KAAK,CAACwF,YAAY;UACrB,IAAIvF,IAAI,CAACU,EAAE,IAAI6C,CAAC,IAAIA,CAAC,IAAIvD,IAAI,CAACW,EAAE,EAAE,IAAI,CAACoC,UAAU,IAAIsC,MAAM,CAACC,YAAY,CAAC/B,CAAC,CAAC,CAAC,KACvE,IAAIA,CAAC,KAAKvD,IAAI,CAACS,MAAM,EAAE;YAC1B,IAAI,IAAI,CAACsC,UAAU,CAAC6D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAACvD,MAAM,CAAC,6BAA6B,CAAC;YACnF,IAAI,CAACN,UAAU,IAAI,GAAG;UACxB,CAAC,MAAM,IAAIQ,CAAC,KAAKvD,IAAI,CAACmB,CAAC,IAAIoC,CAAC,KAAKvD,IAAI,CAACa,CAAC,EAAE;YACvC,IAAI,IAAI,CAACkC,UAAU,CAAC6D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC7D,UAAU,CAAC6D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAC5E,IAAI,CAACvD,MAAM,CAAC,oCAAoC,CAAC;YACnD,IAAI,CAACN,UAAU,IAAI,GAAG;UACxB,CAAC,MAAM,IAAIQ,CAAC,KAAKvD,IAAI,CAACM,IAAI,IAAIiD,CAAC,KAAKvD,IAAI,CAACQ,KAAK,EAAE;YAE9C,IAAI,EAAE2D,CAAC,KAAKnE,IAAI,CAACmB,CAAC,IAAIgD,CAAC,KAAKnE,IAAI,CAACa,CAAC,CAAC,EAAE,IAAI,CAACwC,MAAM,CAAC,0BAA0B,CAAC;YAC5E,IAAI,CAACN,UAAU,IAAIsC,MAAM,CAACC,YAAY,CAAC/B,CAAC,CAAC;UAC3C,CAAC,MAAM;YACL,IAAI,CAACsD,YAAY,EAAE;YACnB5C,CAAC,EAAE;YACH,IAAI,CAACf,KAAK,GAAG,IAAI,CAACyB,KAAK,CAACG,GAAG,EAAE,IAAI/E,KAAK,CAACoD,KAAK;UAC9C;UACA;QAEF;UACE,IAAI,CAACE,MAAM,0BAAmB,IAAI,CAACH,KAAK,EAAG;MAAC;IAElD;IACA,IAAI,IAAI,CAACkB,QAAQ,IAAI,IAAI,CAAC0C,mBAAmB,EAAE;MAC7CC,iBAAiB,CAAC,IAAI,CAAC;IACzB;IAEA,IAAI,CAAC/D,IAAI,CAAC,eAAe,CAAC;IAE1B,OAAO,IAAI;EACb;EAEAM,WAAW,GAAkC;IAAA,IAAjCO,KAAa,uEAAG,SAAS;IACnC,IAAI,IAAI,CAAChB,QAAQ,KAAKC,SAAS,EAAE;MAC/B,IAAI,CAACE,IAAI,CAACa,KAAK,EAAE,IAAI,CAAChB,QAAQ,CAAC;IACjC;IACA,IAAI,CAACA,QAAQ,GAAGC,SAAS;EAC3B;EAEA+D,YAAY,GAAS;IACnB,IAAI,IAAI,CAAC9D,UAAU,EAAE,IAAI,CAACC,IAAI,CAAC,SAAS,EAAEgE,UAAU,CAAC,IAAI,CAACjE,UAAU,CAAC,CAAC;IACtE,IAAI,CAACA,UAAU,GAAG,EAAE;EACtB;EAEAM,MAAM,GAA6B;IAAA,IAA5B4D,OAAe,uEAAG,EAAE;IACzB,IAAI,CAAC3D,WAAW,EAAE;IAClB2D,OAAO,sBAAe,IAAI,CAAC5C,IAAI,uBAAa,IAAI,CAACC,MAAM,qBAAW,IAAI,CAACf,CAAC,CAAE;IAC1E,MAAMG,KAAK,GAAG,IAAIwD,KAAK,CAACD,OAAO,CAAC;IAChC,IAAI,CAACvD,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACV,IAAI,CAAC,SAAS,EAAEU,KAAK,CAAC;EAC7B;AACF;AAEA,SAASe,YAAY,CAAClB,CAAC,EAAW;EAChC,OAAOA,CAAC,KAAKvD,IAAI,CAACG,cAAc,IAAIoD,CAAC,KAAKvD,IAAI,CAACE,QAAQ,IAAIqD,CAAC,KAAKvD,IAAI,CAACI,KAAK,IAAImD,CAAC,KAAKvD,IAAI,CAACC,GAAG;AAC/F;AAEA,SAAS8G,iBAAiB,CAACI,MAAM,EAAE;EACjC,MAAMC,UAAU,GAAGC,IAAI,CAACC,GAAG,CAAC1H,iBAAiB,EAAE,EAAE,CAAC;EAClD,IAAI2H,SAAS,GAAG,CAAC;EAEjB,KAAK,MAAMC,MAAM,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE;IAC/C,MAAMC,GAAG,GAAGN,MAAM,CAACK,MAAM,CAAC,KAAK1E,SAAS,GAAG,CAAC,GAAGqE,MAAM,CAACK,MAAM,CAAC,CAACtB,MAAM;IACpE,IAAIuB,GAAG,GAAGL,UAAU,EAAE;MACpB,QAAQI,MAAM;QACZ,KAAK,MAAM;UAGT;QAEF;UACEL,MAAM,CAAC9D,MAAM,uCAAgCmE,MAAM,EAAG;MAAC;IAE7D;IACAD,SAAS,GAAGF,IAAI,CAACC,GAAG,CAACC,SAAS,EAAEE,GAAG,CAAC;EACtC;EACAN,MAAM,CAACL,mBAAmB,GAAGlH,iBAAiB,GAAG2H,SAAS,GAAGJ,MAAM,CAAC/C,QAAQ;AAC9E"}