@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,25 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.default = void 0;
|
|
9
|
-
|
|
10
8
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
-
|
|
12
9
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
-
|
|
14
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
-
|
|
16
|
-
function
|
|
17
|
-
|
|
18
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
11
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
12
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
19
13
|
|
|
20
14
|
var MAX_BUFFER_LENGTH = Number.MAX_SAFE_INTEGER;
|
|
21
15
|
var STATE;
|
|
22
|
-
|
|
23
16
|
(function (STATE) {
|
|
24
17
|
STATE[STATE["BEGIN"] = 0] = "BEGIN";
|
|
25
18
|
STATE[STATE["VALUE"] = 1] = "VALUE";
|
|
@@ -46,24 +39,29 @@ var STATE;
|
|
|
46
39
|
STATE[STATE["NUMBER_DECIMAL_POINT"] = 22] = "NUMBER_DECIMAL_POINT";
|
|
47
40
|
STATE[STATE["NUMBER_DIGIT"] = 23] = "NUMBER_DIGIT";
|
|
48
41
|
})(STATE || (STATE = {}));
|
|
49
|
-
|
|
50
42
|
var Char = {
|
|
51
43
|
tab: 0x09,
|
|
52
44
|
lineFeed: 0x0a,
|
|
53
45
|
carriageReturn: 0x0d,
|
|
54
46
|
space: 0x20,
|
|
47
|
+
|
|
55
48
|
doubleQuote: 0x22,
|
|
56
49
|
plus: 0x2b,
|
|
57
50
|
comma: 0x2c,
|
|
58
51
|
minus: 0x2d,
|
|
59
52
|
period: 0x2e,
|
|
53
|
+
|
|
60
54
|
_0: 0x30,
|
|
61
55
|
_9: 0x39,
|
|
56
|
+
|
|
62
57
|
colon: 0x3a,
|
|
58
|
+
|
|
63
59
|
E: 0x45,
|
|
60
|
+
|
|
64
61
|
openBracket: 0x5b,
|
|
65
62
|
backslash: 0x5c,
|
|
66
63
|
closeBracket: 0x5d,
|
|
64
|
+
|
|
67
65
|
a: 0x61,
|
|
68
66
|
b: 0x62,
|
|
69
67
|
e: 0x65,
|
|
@@ -74,9 +72,11 @@ var Char = {
|
|
|
74
72
|
s: 0x73,
|
|
75
73
|
t: 0x74,
|
|
76
74
|
u: 0x75,
|
|
75
|
+
|
|
77
76
|
openBrace: 0x7b,
|
|
78
77
|
closeBrace: 0x7d
|
|
79
78
|
};
|
|
79
|
+
|
|
80
80
|
var stringTokenPattern = /[\\"\n]/g;
|
|
81
81
|
var DEFAULT_OPTIONS = {
|
|
82
82
|
onready: function onready() {},
|
|
@@ -90,8 +90,8 @@ var DEFAULT_OPTIONS = {
|
|
|
90
90
|
onend: function onend() {},
|
|
91
91
|
onchunkparsed: function onchunkparsed() {}
|
|
92
92
|
};
|
|
93
|
-
|
|
94
93
|
var ClarinetParser = function () {
|
|
94
|
+
|
|
95
95
|
function ClarinetParser() {
|
|
96
96
|
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
97
97
|
(0, _classCallCheck2.default)(this, ClarinetParser);
|
|
@@ -120,14 +120,11 @@ var ClarinetParser = function () {
|
|
|
120
120
|
this.numberNode = '';
|
|
121
121
|
this.emit('onready');
|
|
122
122
|
}
|
|
123
|
-
|
|
124
123
|
(0, _createClass2.default)(ClarinetParser, [{
|
|
125
124
|
key: "end",
|
|
126
125
|
value: function end() {
|
|
127
126
|
if (this.state !== STATE.VALUE || this.depth !== 0) this._error('Unexpected end');
|
|
128
|
-
|
|
129
127
|
this._closeValue();
|
|
130
|
-
|
|
131
128
|
this.c = '';
|
|
132
129
|
this.closed = true;
|
|
133
130
|
this.emit('onend');
|
|
@@ -144,64 +141,59 @@ var ClarinetParser = function () {
|
|
|
144
141
|
value: function close() {
|
|
145
142
|
return this.write(null);
|
|
146
143
|
}
|
|
144
|
+
|
|
147
145
|
}, {
|
|
148
146
|
key: "emit",
|
|
149
|
-
value:
|
|
150
|
-
var _this$options$event, _this$options;
|
|
147
|
+
value:
|
|
151
148
|
|
|
149
|
+
function emit(event, data) {
|
|
150
|
+
var _this$options$event, _this$options;
|
|
152
151
|
(_this$options$event = (_this$options = this.options)[event]) === null || _this$options$event === void 0 ? void 0 : _this$options$event.call(_this$options, data, this);
|
|
153
152
|
}
|
|
154
153
|
}, {
|
|
155
154
|
key: "emitNode",
|
|
156
155
|
value: function emitNode(event, data) {
|
|
157
156
|
this._closeValue();
|
|
158
|
-
|
|
159
157
|
this.emit(event, data);
|
|
160
158
|
}
|
|
159
|
+
|
|
161
160
|
}, {
|
|
162
161
|
key: "write",
|
|
163
|
-
value:
|
|
162
|
+
value:
|
|
163
|
+
function write(chunk) {
|
|
164
164
|
if (this.error) {
|
|
165
165
|
throw this.error;
|
|
166
166
|
}
|
|
167
|
-
|
|
168
167
|
if (this.closed) {
|
|
169
168
|
return this._error('Cannot write after close. Assign an onready handler.');
|
|
170
169
|
}
|
|
171
|
-
|
|
172
170
|
if (chunk === null) {
|
|
173
171
|
return this.end();
|
|
174
172
|
}
|
|
175
|
-
|
|
176
173
|
var i = 0;
|
|
177
174
|
var c = chunk.charCodeAt(0);
|
|
178
175
|
var p = this.p;
|
|
179
|
-
|
|
180
176
|
while (c) {
|
|
181
177
|
p = c;
|
|
182
178
|
this.c = c = chunk.charCodeAt(i++);
|
|
183
|
-
|
|
184
179
|
if (p !== c) {
|
|
185
180
|
this.p = p;
|
|
186
181
|
} else {
|
|
187
182
|
p = this.p;
|
|
188
183
|
}
|
|
189
|
-
|
|
190
184
|
if (!c) break;
|
|
191
|
-
this.position++;
|
|
192
185
|
|
|
186
|
+
this.position++;
|
|
193
187
|
if (c === Char.lineFeed) {
|
|
194
188
|
this.line++;
|
|
195
189
|
this.column = 0;
|
|
196
190
|
} else this.column++;
|
|
197
|
-
|
|
198
191
|
switch (this.state) {
|
|
199
192
|
case STATE.BEGIN:
|
|
200
193
|
if (c === Char.openBrace) this.state = STATE.OPEN_OBJECT;else if (c === Char.openBracket) this.state = STATE.OPEN_ARRAY;else if (!isWhitespace(c)) {
|
|
201
194
|
this._error('Non-whitespace before {[.');
|
|
202
195
|
}
|
|
203
196
|
continue;
|
|
204
|
-
|
|
205
197
|
case STATE.OPEN_KEY:
|
|
206
198
|
case STATE.OPEN_OBJECT:
|
|
207
199
|
if (isWhitespace(c)) continue;
|
|
@@ -215,20 +207,15 @@ var ClarinetParser = function () {
|
|
|
215
207
|
} else this.stack.push(STATE.CLOSE_OBJECT);
|
|
216
208
|
if (c === Char.doubleQuote) this.state = STATE.STRING;else this._error('Malformed object key should start with "');
|
|
217
209
|
continue;
|
|
218
|
-
|
|
219
210
|
case STATE.CLOSE_KEY:
|
|
220
211
|
case STATE.CLOSE_OBJECT:
|
|
221
212
|
if (isWhitespace(c)) continue;
|
|
222
|
-
|
|
223
213
|
if (c === Char.colon) {
|
|
224
214
|
if (this.state === STATE.CLOSE_OBJECT) {
|
|
225
215
|
this.stack.push(STATE.CLOSE_OBJECT);
|
|
226
|
-
|
|
227
216
|
this._closeValue('onopenobject');
|
|
228
|
-
|
|
229
217
|
this.depth++;
|
|
230
218
|
} else this._closeValue('onkey');
|
|
231
|
-
|
|
232
219
|
this.state = STATE.VALUE;
|
|
233
220
|
} else if (c === Char.closeBrace) {
|
|
234
221
|
this.emitNode('oncloseobject');
|
|
@@ -236,23 +223,17 @@ var ClarinetParser = function () {
|
|
|
236
223
|
this.state = this.stack.pop() || STATE.VALUE;
|
|
237
224
|
} else if (c === Char.comma) {
|
|
238
225
|
if (this.state === STATE.CLOSE_OBJECT) this.stack.push(STATE.CLOSE_OBJECT);
|
|
239
|
-
|
|
240
226
|
this._closeValue();
|
|
241
|
-
|
|
242
227
|
this.state = STATE.OPEN_KEY;
|
|
243
228
|
} else this._error('Bad object');
|
|
244
|
-
|
|
245
229
|
continue;
|
|
246
|
-
|
|
247
230
|
case STATE.OPEN_ARRAY:
|
|
248
231
|
case STATE.VALUE:
|
|
249
232
|
if (isWhitespace(c)) continue;
|
|
250
|
-
|
|
251
233
|
if (this.state === STATE.OPEN_ARRAY) {
|
|
252
234
|
this.emit('onopenarray');
|
|
253
235
|
this.depth++;
|
|
254
236
|
this.state = STATE.VALUE;
|
|
255
|
-
|
|
256
237
|
if (c === Char.closeBracket) {
|
|
257
238
|
this.emit('onclosearray');
|
|
258
239
|
this.depth--;
|
|
@@ -262,7 +243,6 @@ var ClarinetParser = function () {
|
|
|
262
243
|
this.stack.push(STATE.CLOSE_ARRAY);
|
|
263
244
|
}
|
|
264
245
|
}
|
|
265
|
-
|
|
266
246
|
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) {
|
|
267
247
|
this.numberNode += '-';
|
|
268
248
|
} else if (Char._0 <= c && c <= Char._9) {
|
|
@@ -270,22 +250,17 @@ var ClarinetParser = function () {
|
|
|
270
250
|
this.state = STATE.NUMBER_DIGIT;
|
|
271
251
|
} else this._error('Bad value');
|
|
272
252
|
continue;
|
|
273
|
-
|
|
274
253
|
case STATE.CLOSE_ARRAY:
|
|
275
254
|
if (c === Char.comma) {
|
|
276
255
|
this.stack.push(STATE.CLOSE_ARRAY);
|
|
277
|
-
|
|
278
256
|
this._closeValue('onvalue');
|
|
279
|
-
|
|
280
257
|
this.state = STATE.VALUE;
|
|
281
258
|
} else if (c === Char.closeBracket) {
|
|
282
259
|
this.emitNode('onclosearray');
|
|
283
260
|
this.depth--;
|
|
284
261
|
this.state = this.stack.pop() || STATE.VALUE;
|
|
285
262
|
} else if (isWhitespace(c)) continue;else this._error('Bad array');
|
|
286
|
-
|
|
287
263
|
continue;
|
|
288
|
-
|
|
289
264
|
case STATE.STRING:
|
|
290
265
|
if (this.textNode === undefined) {
|
|
291
266
|
this.textNode = '';
|
|
@@ -294,13 +269,11 @@ var ClarinetParser = function () {
|
|
|
294
269
|
var starti = i - 1;
|
|
295
270
|
var slashed = this.slashed;
|
|
296
271
|
var unicodeI = this.unicodeI;
|
|
297
|
-
|
|
298
272
|
STRING_BIGLOOP: while (true) {
|
|
299
273
|
while (unicodeI > 0) {
|
|
300
274
|
this.unicodeS += String.fromCharCode(c);
|
|
301
275
|
c = chunk.charCodeAt(i++);
|
|
302
276
|
this.position++;
|
|
303
|
-
|
|
304
277
|
if (unicodeI === 4) {
|
|
305
278
|
this.textNode += String.fromCharCode(parseInt(this.unicodeS, 16));
|
|
306
279
|
unicodeI = 0;
|
|
@@ -308,17 +281,14 @@ var ClarinetParser = function () {
|
|
|
308
281
|
} else {
|
|
309
282
|
unicodeI++;
|
|
310
283
|
}
|
|
311
|
-
|
|
312
284
|
if (!c) break STRING_BIGLOOP;
|
|
313
285
|
}
|
|
314
|
-
|
|
315
286
|
if (c === Char.doubleQuote && !slashed) {
|
|
316
287
|
this.state = this.stack.pop() || STATE.VALUE;
|
|
317
288
|
this.textNode += chunk.substring(starti, i - 1);
|
|
318
289
|
this.position += i - 1 - starti;
|
|
319
290
|
break;
|
|
320
291
|
}
|
|
321
|
-
|
|
322
292
|
if (c === Char.backslash && !slashed) {
|
|
323
293
|
slashed = true;
|
|
324
294
|
this.textNode += chunk.substring(starti, i - 1);
|
|
@@ -327,10 +297,8 @@ var ClarinetParser = function () {
|
|
|
327
297
|
this.position++;
|
|
328
298
|
if (!c) break;
|
|
329
299
|
}
|
|
330
|
-
|
|
331
300
|
if (slashed) {
|
|
332
301
|
slashed = false;
|
|
333
|
-
|
|
334
302
|
if (c === Char.n) {
|
|
335
303
|
this.textNode += '\n';
|
|
336
304
|
} else if (c === Char.r) {
|
|
@@ -347,97 +315,75 @@ var ClarinetParser = function () {
|
|
|
347
315
|
} else {
|
|
348
316
|
this.textNode += String.fromCharCode(c);
|
|
349
317
|
}
|
|
350
|
-
|
|
351
318
|
c = chunk.charCodeAt(i++);
|
|
352
319
|
this.position++;
|
|
353
320
|
starti = i - 1;
|
|
354
321
|
if (!c) break;else continue;
|
|
355
322
|
}
|
|
356
|
-
|
|
357
323
|
stringTokenPattern.lastIndex = i;
|
|
358
324
|
var reResult = stringTokenPattern.exec(chunk);
|
|
359
|
-
|
|
360
325
|
if (reResult === null) {
|
|
361
326
|
i = chunk.length + 1;
|
|
362
327
|
this.textNode += chunk.substring(starti, i - 1);
|
|
363
328
|
this.position += i - 1 - starti;
|
|
364
329
|
break;
|
|
365
330
|
}
|
|
366
|
-
|
|
367
331
|
i = reResult.index + 1;
|
|
368
332
|
c = chunk.charCodeAt(reResult.index);
|
|
369
|
-
|
|
370
333
|
if (!c) {
|
|
371
334
|
this.textNode += chunk.substring(starti, i - 1);
|
|
372
335
|
this.position += i - 1 - starti;
|
|
373
336
|
break;
|
|
374
337
|
}
|
|
375
338
|
}
|
|
376
|
-
|
|
377
339
|
this.slashed = slashed;
|
|
378
340
|
this.unicodeI = unicodeI;
|
|
379
341
|
continue;
|
|
380
|
-
|
|
381
342
|
case STATE.TRUE:
|
|
382
343
|
if (c === Char.r) this.state = STATE.TRUE2;else this._error("Invalid true started with t".concat(c));
|
|
383
344
|
continue;
|
|
384
|
-
|
|
385
345
|
case STATE.TRUE2:
|
|
386
346
|
if (c === Char.u) this.state = STATE.TRUE3;else this._error("Invalid true started with tr".concat(c));
|
|
387
347
|
continue;
|
|
388
|
-
|
|
389
348
|
case STATE.TRUE3:
|
|
390
349
|
if (c === Char.e) {
|
|
391
350
|
this.emit('onvalue', true);
|
|
392
351
|
this.state = this.stack.pop() || STATE.VALUE;
|
|
393
352
|
} else this._error("Invalid true started with tru".concat(c));
|
|
394
|
-
|
|
395
353
|
continue;
|
|
396
|
-
|
|
397
354
|
case STATE.FALSE:
|
|
398
355
|
if (c === Char.a) this.state = STATE.FALSE2;else this._error("Invalid false started with f".concat(c));
|
|
399
356
|
continue;
|
|
400
|
-
|
|
401
357
|
case STATE.FALSE2:
|
|
402
358
|
if (c === Char.l) this.state = STATE.FALSE3;else this._error("Invalid false started with fa".concat(c));
|
|
403
359
|
continue;
|
|
404
|
-
|
|
405
360
|
case STATE.FALSE3:
|
|
406
361
|
if (c === Char.s) this.state = STATE.FALSE4;else this._error("Invalid false started with fal".concat(c));
|
|
407
362
|
continue;
|
|
408
|
-
|
|
409
363
|
case STATE.FALSE4:
|
|
410
364
|
if (c === Char.e) {
|
|
411
365
|
this.emit('onvalue', false);
|
|
412
366
|
this.state = this.stack.pop() || STATE.VALUE;
|
|
413
367
|
} else this._error("Invalid false started with fals".concat(c));
|
|
414
|
-
|
|
415
368
|
continue;
|
|
416
|
-
|
|
417
369
|
case STATE.NULL:
|
|
418
370
|
if (c === Char.u) this.state = STATE.NULL2;else this._error("Invalid null started with n".concat(c));
|
|
419
371
|
continue;
|
|
420
|
-
|
|
421
372
|
case STATE.NULL2:
|
|
422
373
|
if (c === Char.l) this.state = STATE.NULL3;else this._error("Invalid null started with nu".concat(c));
|
|
423
374
|
continue;
|
|
424
|
-
|
|
425
375
|
case STATE.NULL3:
|
|
426
376
|
if (c === Char.l) {
|
|
427
377
|
this.emit('onvalue', null);
|
|
428
378
|
this.state = this.stack.pop() || STATE.VALUE;
|
|
429
379
|
} else this._error("Invalid null started with nul".concat(c));
|
|
430
|
-
|
|
431
380
|
continue;
|
|
432
|
-
|
|
433
381
|
case STATE.NUMBER_DECIMAL_POINT:
|
|
434
382
|
if (c === Char.period) {
|
|
435
383
|
this.numberNode += '.';
|
|
436
384
|
this.state = STATE.NUMBER_DIGIT;
|
|
437
385
|
} else this._error('Leading zero not followed by .');
|
|
438
|
-
|
|
439
386
|
continue;
|
|
440
|
-
|
|
441
387
|
case STATE.NUMBER_DIGIT:
|
|
442
388
|
if (Char._0 <= c && c <= Char._9) this.numberNode += String.fromCharCode(c);else if (c === Char.period) {
|
|
443
389
|
if (this.numberNode.indexOf('.') !== -1) this._error('Invalid number has two dots');
|
|
@@ -450,22 +396,17 @@ var ClarinetParser = function () {
|
|
|
450
396
|
this.numberNode += String.fromCharCode(c);
|
|
451
397
|
} else {
|
|
452
398
|
this._closeNumber();
|
|
453
|
-
|
|
454
399
|
i--;
|
|
455
400
|
this.state = this.stack.pop() || STATE.VALUE;
|
|
456
401
|
}
|
|
457
402
|
continue;
|
|
458
|
-
|
|
459
403
|
default:
|
|
460
404
|
this._error("Unknown state: ".concat(this.state));
|
|
461
|
-
|
|
462
405
|
}
|
|
463
406
|
}
|
|
464
|
-
|
|
465
407
|
if (this.position >= this.bufferCheckPosition) {
|
|
466
408
|
checkBufferLength(this);
|
|
467
409
|
}
|
|
468
|
-
|
|
469
410
|
this.emit('onchunkparsed');
|
|
470
411
|
return this;
|
|
471
412
|
}
|
|
@@ -473,11 +414,9 @@ var ClarinetParser = function () {
|
|
|
473
414
|
key: "_closeValue",
|
|
474
415
|
value: function _closeValue() {
|
|
475
416
|
var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'onvalue';
|
|
476
|
-
|
|
477
417
|
if (this.textNode !== undefined) {
|
|
478
418
|
this.emit(event, this.textNode);
|
|
479
419
|
}
|
|
480
|
-
|
|
481
420
|
this.textNode = undefined;
|
|
482
421
|
}
|
|
483
422
|
}, {
|
|
@@ -490,9 +429,7 @@ var ClarinetParser = function () {
|
|
|
490
429
|
key: "_error",
|
|
491
430
|
value: function _error() {
|
|
492
431
|
var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
493
|
-
|
|
494
432
|
this._closeValue();
|
|
495
|
-
|
|
496
433
|
message += "\nLine: ".concat(this.line, "\nColumn: ").concat(this.column, "\nChar: ").concat(this.c);
|
|
497
434
|
var error = new Error(message);
|
|
498
435
|
this.error = error;
|
|
@@ -501,35 +438,26 @@ var ClarinetParser = function () {
|
|
|
501
438
|
}]);
|
|
502
439
|
return ClarinetParser;
|
|
503
440
|
}();
|
|
504
|
-
|
|
505
441
|
exports.default = ClarinetParser;
|
|
506
|
-
|
|
507
442
|
function isWhitespace(c) {
|
|
508
443
|
return c === Char.carriageReturn || c === Char.lineFeed || c === Char.space || c === Char.tab;
|
|
509
444
|
}
|
|
510
|
-
|
|
511
445
|
function checkBufferLength(parser) {
|
|
512
446
|
var maxAllowed = Math.max(MAX_BUFFER_LENGTH, 10);
|
|
513
447
|
var maxActual = 0;
|
|
514
|
-
|
|
515
448
|
for (var _i = 0, _arr = ['textNode', 'numberNode']; _i < _arr.length; _i++) {
|
|
516
449
|
var buffer = _arr[_i];
|
|
517
450
|
var len = parser[buffer] === undefined ? 0 : parser[buffer].length;
|
|
518
|
-
|
|
519
451
|
if (len > maxAllowed) {
|
|
520
452
|
switch (buffer) {
|
|
521
453
|
case 'text':
|
|
522
454
|
break;
|
|
523
|
-
|
|
524
455
|
default:
|
|
525
456
|
parser._error("Max buffer length exceeded: ".concat(buffer));
|
|
526
|
-
|
|
527
457
|
}
|
|
528
458
|
}
|
|
529
|
-
|
|
530
459
|
maxActual = Math.max(maxActual, len);
|
|
531
460
|
}
|
|
532
|
-
|
|
533
461
|
parser.bufferCheckPosition = MAX_BUFFER_LENGTH - maxActual + parser.position;
|
|
534
462
|
}
|
|
535
463
|
//# 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","options","BEGIN","textNode","undefined","numberNode","emit","state","VALUE","depth","_error","_closeValue","c","closed","error","write","event","data","chunk","end","i","charCodeAt","p","position","line","column","OPEN_OBJECT","OPEN_ARRAY","isWhitespace","OPEN_KEY","stack","push","CLOSE_KEY","pop","CLOSE_OBJECT","STRING","emitNode","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","options","BEGIN","textNode","undefined","numberNode","emit","state","VALUE","depth","_error","_closeValue","c","closed","error","write","event","data","chunk","end","i","charCodeAt","p","position","line","column","OPEN_OBJECT","OPEN_ARRAY","isWhitespace","OPEN_KEY","stack","push","CLOSE_KEY","pop","CLOSE_OBJECT","STRING","emitNode","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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"}
|