@loaders.gl/json 3.3.0-alpha.5 → 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.
- package/dist/dist.min.js +16 -10
- package/dist/es5/bundle.js +0 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/geojson-loader.js +34 -82
- package/dist/es5/geojson-loader.js.map +1 -1
- package/dist/es5/index.js +6 -13
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/json-loader.js +4 -18
- package/dist/es5/json-loader.js.map +1 -1
- package/dist/es5/lib/clarinet/clarinet.js +19 -91
- package/dist/es5/lib/clarinet/clarinet.js.map +1 -1
- package/dist/es5/lib/jsonpath/jsonpath.js +8 -28
- package/dist/es5/lib/jsonpath/jsonpath.js.map +1 -1
- package/dist/es5/lib/parse-json-in-batches.js +59 -126
- package/dist/es5/lib/parse-json-in-batches.js.map +1 -1
- package/dist/es5/lib/parse-json.js +0 -10
- package/dist/es5/lib/parse-json.js.map +1 -1
- package/dist/es5/lib/parse-ndjson-in-batches.js +41 -83
- package/dist/es5/lib/parse-ndjson-in-batches.js.map +1 -1
- package/dist/es5/lib/parse-ndjson.js +0 -1
- package/dist/es5/lib/parse-ndjson.js.map +1 -1
- package/dist/es5/lib/parser/json-parser.js +8 -24
- package/dist/es5/lib/parser/json-parser.js.map +1 -1
- package/dist/es5/lib/parser/streaming-json-parser.js +10 -37
- package/dist/es5/lib/parser/streaming-json-parser.js.map +1 -1
- package/dist/es5/ndjgeoson-loader.js +3 -11
- package/dist/es5/ndjgeoson-loader.js.map +1 -1
- package/dist/es5/ndjson-loader.js +3 -11
- package/dist/es5/ndjson-loader.js.map +1 -1
- package/dist/es5/workers/geojson-worker.js +0 -2
- package/dist/es5/workers/geojson-worker.js.map +1 -1
- package/dist/esm/bundle.js +1 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/geojson-loader.js +13 -14
- package/dist/esm/geojson-loader.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/json-loader.js +12 -8
- package/dist/esm/json-loader.js.map +1 -1
- package/dist/esm/lib/clarinet/clarinet.js +19 -108
- package/dist/esm/lib/clarinet/clarinet.js.map +1 -1
- package/dist/esm/lib/jsonpath/jsonpath.js +2 -18
- package/dist/esm/lib/jsonpath/jsonpath.js.map +1 -1
- package/dist/esm/lib/parse-json-in-batches.js +5 -10
- package/dist/esm/lib/parse-json-in-batches.js.map +1 -1
- package/dist/esm/lib/parse-json.js +0 -7
- package/dist/esm/lib/parse-json.js.map +1 -1
- package/dist/esm/lib/parse-ndjson-in-batches.js +2 -5
- package/dist/esm/lib/parse-ndjson-in-batches.js.map +1 -1
- package/dist/esm/lib/parse-ndjson.js.map +1 -1
- package/dist/esm/lib/parser/json-parser.js +6 -21
- package/dist/esm/lib/parser/json-parser.js.map +1 -1
- package/dist/esm/lib/parser/streaming-json-parser.js +3 -19
- package/dist/esm/lib/parser/streaming-json-parser.js.map +1 -1
- package/dist/esm/ndjgeoson-loader.js +4 -2
- package/dist/esm/ndjgeoson-loader.js.map +1 -1
- package/dist/esm/ndjson-loader.js +4 -2
- package/dist/esm/ndjson-loader.js.map +1 -1
- package/dist/esm/workers/geojson-worker.js.map +1 -1
- package/dist/geojson-worker.js +10 -11
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":"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"}
|