@loaders.gl/json 4.0.0-alpha.5 → 4.0.0-alpha.7
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/bundle.js +2 -2
- package/dist/dist.min.js +643 -92
- package/dist/es5/bundle.js +6 -0
- package/dist/es5/bundle.js.map +1 -0
- package/dist/es5/geojson-loader.js +157 -0
- package/dist/es5/geojson-loader.js.map +1 -0
- package/dist/es5/geojson-writer.js +27 -0
- package/dist/es5/geojson-writer.js.map +1 -0
- package/dist/es5/index.js +69 -0
- package/dist/es5/index.js.map +1 -0
- package/dist/es5/json-loader.js +67 -0
- package/dist/es5/json-loader.js.map +1 -0
- package/dist/es5/json-writer.js +42 -0
- package/dist/es5/json-writer.js.map +1 -0
- package/dist/es5/lib/clarinet/clarinet.js +446 -0
- package/dist/es5/lib/clarinet/clarinet.js.map +1 -0
- package/dist/es5/lib/encoders/encode-utils.js +42 -0
- package/dist/es5/lib/encoders/encode-utils.js.map +1 -0
- package/dist/es5/lib/encoders/geojson-encoder.js +178 -0
- package/dist/es5/lib/encoders/geojson-encoder.js.map +1 -0
- package/dist/es5/lib/encoders/json-encoder.js +30 -0
- package/dist/es5/lib/encoders/json-encoder.js.map +1 -0
- package/dist/es5/lib/encoders/utf8-encoder.js +54 -0
- package/dist/es5/lib/encoders/utf8-encoder.js.map +1 -0
- package/dist/es5/lib/json-parser/json-parser.js +140 -0
- package/dist/es5/lib/json-parser/json-parser.js.map +1 -0
- package/dist/es5/lib/json-parser/streaming-json-parser.js +123 -0
- package/dist/es5/lib/json-parser/streaming-json-parser.js.map +1 -0
- package/dist/es5/lib/jsonpath/jsonpath.js +119 -0
- package/dist/es5/lib/jsonpath/jsonpath.js.map +1 -0
- package/dist/es5/lib/parsers/parse-json-in-batches.js +206 -0
- package/dist/es5/lib/parsers/parse-json-in-batches.js.map +1 -0
- package/dist/es5/lib/parsers/parse-json.js +38 -0
- package/dist/es5/lib/parsers/parse-json.js.map +1 -0
- package/dist/es5/lib/parsers/parse-ndjson-in-batches.js +114 -0
- package/dist/es5/lib/parsers/parse-ndjson-in-batches.js.map +1 -0
- package/dist/es5/lib/parsers/parse-ndjson.js +19 -0
- package/dist/es5/lib/parsers/parse-ndjson.js.map +1 -0
- package/dist/es5/ndgeoson-loader.js +54 -0
- package/dist/es5/ndgeoson-loader.js.map +1 -0
- package/dist/es5/ndjson-loader.js +44 -0
- package/dist/es5/ndjson-loader.js.map +1 -0
- package/dist/es5/workers/geojson-worker.js +6 -0
- package/dist/es5/workers/geojson-worker.js.map +1 -0
- package/dist/esm/bundle.js +4 -0
- package/dist/esm/bundle.js.map +1 -0
- package/dist/esm/geojson-loader.js +79 -0
- package/dist/esm/geojson-loader.js.map +1 -0
- package/dist/esm/geojson-writer.js +18 -0
- package/dist/esm/geojson-writer.js.map +1 -0
- package/dist/esm/index.js +9 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/json-loader.js +48 -0
- package/dist/esm/json-loader.js.map +1 -0
- package/dist/esm/json-writer.js +14 -0
- package/dist/esm/json-writer.js.map +1 -0
- package/dist/esm/lib/clarinet/LICENSE +28 -0
- package/dist/esm/lib/clarinet/clarinet.js +415 -0
- package/dist/esm/lib/clarinet/clarinet.js.map +1 -0
- package/dist/esm/lib/encoders/encode-utils.js +31 -0
- package/dist/esm/lib/encoders/encode-utils.js.map +1 -0
- package/dist/esm/lib/encoders/geojson-encoder.js +98 -0
- package/dist/esm/lib/encoders/geojson-encoder.js.map +1 -0
- package/dist/esm/lib/encoders/json-encoder.js +12 -0
- package/dist/esm/lib/encoders/json-encoder.js.map +1 -0
- package/dist/esm/lib/encoders/utf8-encoder.js +32 -0
- package/dist/esm/lib/encoders/utf8-encoder.js.map +1 -0
- package/dist/{lib/parser → esm/lib/json-parser}/json-parser.js +4 -22
- package/dist/esm/lib/json-parser/json-parser.js.map +1 -0
- package/dist/{lib/parser → esm/lib/json-parser}/streaming-json-parser.js +2 -23
- package/dist/esm/lib/json-parser/streaming-json-parser.js.map +1 -0
- package/dist/esm/lib/jsonpath/jsonpath.js +67 -0
- package/dist/esm/lib/jsonpath/jsonpath.js.map +1 -0
- package/dist/{lib → esm/lib/parsers}/parse-json-in-batches.js +5 -18
- package/dist/esm/lib/parsers/parse-json-in-batches.js.map +1 -0
- package/dist/{lib → esm/lib/parsers}/parse-json.js +4 -9
- package/dist/esm/lib/parsers/parse-json.js.map +1 -0
- package/dist/{lib → esm/lib/parsers}/parse-ndjson-in-batches.js +3 -6
- package/dist/esm/lib/parsers/parse-ndjson-in-batches.js.map +1 -0
- package/dist/esm/lib/parsers/parse-ndjson.js +13 -0
- package/dist/esm/lib/parsers/parse-ndjson.js.map +1 -0
- package/dist/esm/ndgeoson-loader.js +27 -0
- package/dist/esm/ndgeoson-loader.js.map +1 -0
- package/dist/esm/ndjson-loader.js +18 -0
- package/dist/esm/ndjson-loader.js.map +1 -0
- package/dist/esm/workers/geojson-worker.js +4 -0
- package/dist/esm/workers/geojson-worker.js.map +1 -0
- package/dist/geojson-loader.d.ts +2 -2
- package/dist/geojson-loader.d.ts.map +1 -1
- package/dist/geojson-loader.js +65 -69
- package/dist/geojson-worker.js +251 -68
- package/dist/geojson-writer.d.ts +6 -0
- package/dist/geojson-writer.d.ts.map +1 -0
- package/dist/geojson-writer.js +22 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -7
- package/dist/json-loader.d.ts +10 -7
- package/dist/json-loader.d.ts.map +1 -1
- package/dist/json-loader.js +33 -38
- package/dist/json-writer.d.ts +6 -0
- package/dist/json-writer.d.ts.map +1 -0
- package/dist/json-writer.js +18 -0
- package/dist/lib/clarinet/clarinet.d.ts +3 -3
- package/dist/lib/clarinet/clarinet.d.ts.map +1 -1
- package/dist/lib/clarinet/clarinet.js +510 -493
- package/dist/lib/encoders/encode-utils.d.ts +19 -0
- package/dist/lib/encoders/encode-utils.d.ts.map +1 -0
- package/dist/lib/encoders/encode-utils.js +47 -0
- package/dist/lib/encoders/geojson-encoder.d.ts +14 -0
- package/dist/lib/encoders/geojson-encoder.d.ts.map +1 -0
- package/dist/lib/encoders/geojson-encoder.js +104 -0
- package/dist/lib/encoders/json-encoder.d.ts +16 -0
- package/dist/lib/encoders/json-encoder.d.ts.map +1 -0
- package/dist/lib/encoders/json-encoder.js +22 -0
- package/dist/lib/encoders/utf8-encoder.d.ts +12 -0
- package/dist/lib/encoders/utf8-encoder.d.ts.map +1 -0
- package/dist/lib/encoders/utf8-encoder.js +32 -0
- package/dist/lib/json-parser/json-parser.d.ts.map +1 -0
- package/dist/lib/json-parser/json-parser.js +98 -0
- package/dist/lib/json-parser/streaming-json-parser.d.ts.map +1 -0
- package/dist/lib/json-parser/streaming-json-parser.js +100 -0
- package/dist/lib/jsonpath/jsonpath.js +81 -78
- package/dist/lib/parsers/parse-json-in-batches.d.ts +5 -0
- package/dist/lib/parsers/parse-json-in-batches.d.ts.map +1 -0
- package/dist/lib/parsers/parse-json-in-batches.js +100 -0
- package/dist/lib/parsers/parse-json.d.ts +4 -0
- package/dist/lib/parsers/parse-json.d.ts.map +1 -0
- package/dist/lib/parsers/parse-json.js +32 -0
- package/dist/lib/{parse-ndjson-in-batches.d.ts → parsers/parse-ndjson-in-batches.d.ts} +1 -1
- package/dist/lib/parsers/parse-ndjson-in-batches.d.ts.map +1 -0
- package/dist/lib/parsers/parse-ndjson-in-batches.js +36 -0
- package/dist/lib/parsers/parse-ndjson.d.ts +3 -0
- package/dist/lib/parsers/parse-ndjson.d.ts.map +1 -0
- package/dist/lib/parsers/parse-ndjson.js +17 -0
- package/dist/ndgeoson-loader.d.ts +34 -0
- package/dist/ndgeoson-loader.d.ts.map +1 -0
- package/dist/ndgeoson-loader.js +37 -0
- package/dist/ndjson-loader.d.ts +3 -21
- package/dist/ndjson-loader.d.ts.map +1 -1
- package/dist/ndjson-loader.js +26 -31
- package/dist/workers/geojson-worker.js +5 -4
- package/package.json +7 -7
- package/src/geojson-loader.ts +10 -6
- package/src/geojson-writer.ts +27 -0
- package/src/index.ts +9 -1
- package/src/json-loader.ts +15 -24
- package/src/json-writer.ts +24 -0
- package/src/lib/encoders/encode-utils.ts +54 -0
- package/src/lib/encoders/geojson-encoder.ts +139 -0
- package/src/lib/encoders/json-encoder.ts +30 -0
- package/src/lib/encoders/utf8-encoder.ts +35 -0
- package/src/lib/{parse-json-in-batches.ts → parsers/parse-json-in-batches.ts} +8 -8
- package/src/lib/{parse-json.ts → parsers/parse-json.ts} +7 -3
- package/src/lib/{parse-ndjson-in-batches.ts → parsers/parse-ndjson-in-batches.ts} +1 -1
- package/src/lib/parsers/parse-ndjson.ts +15 -0
- package/src/ndgeoson-loader.ts +48 -0
- package/src/ndjson-loader.ts +20 -27
- package/dist/bundle.js.map +0 -1
- package/dist/geojson-loader.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/json-loader.js.map +0 -1
- package/dist/jsonl-loader.d.ts +0 -1
- package/dist/jsonl-loader.d.ts.map +0 -1
- package/dist/jsonl-loader.js +0 -2
- package/dist/jsonl-loader.js.map +0 -1
- package/dist/lib/clarinet/clarinet.js.map +0 -1
- package/dist/lib/jsonpath/jsonpath.js.map +0 -1
- package/dist/lib/parse-json-in-batches.d.ts +0 -5
- package/dist/lib/parse-json-in-batches.d.ts.map +0 -1
- package/dist/lib/parse-json-in-batches.js.map +0 -1
- package/dist/lib/parse-json.d.ts +0 -3
- package/dist/lib/parse-json.d.ts.map +0 -1
- package/dist/lib/parse-json.js.map +0 -1
- package/dist/lib/parse-ndjson-in-batches.d.ts.map +0 -1
- package/dist/lib/parse-ndjson-in-batches.js.map +0 -1
- package/dist/lib/parse-ndjson.d.ts +0 -2
- package/dist/lib/parse-ndjson.d.ts.map +0 -1
- package/dist/lib/parse-ndjson.js +0 -11
- package/dist/lib/parse-ndjson.js.map +0 -1
- package/dist/lib/parser/json-parser.d.ts.map +0 -1
- package/dist/lib/parser/json-parser.js.map +0 -1
- package/dist/lib/parser/streaming-json-parser.d.ts.map +0 -1
- package/dist/lib/parser/streaming-json-parser.js.map +0 -1
- package/dist/ndjson-loader.js.map +0 -1
- package/dist/workers/geojson-worker.js.map +0 -1
- package/src/jsonl-loader.ts +0 -53
- package/src/lib/parse-ndjson.ts +0 -10
- /package/dist/{lib → es5/lib}/clarinet/LICENSE +0 -0
- /package/dist/lib/{parser → json-parser}/json-parser.d.ts +0 -0
- /package/dist/lib/{parser → json-parser}/streaming-json-parser.d.ts +0 -0
- /package/src/lib/{parser → json-parser}/json-parser.ts +0 -0
- /package/src/lib/{parser → json-parser}/streaming-json-parser.ts +0 -0
package/dist/dist.min.js
CHANGED
|
@@ -13,43 +13,12 @@
|
|
|
13
13
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
// src/lib/
|
|
17
|
-
|
|
18
|
-
try {
|
|
19
|
-
const json = JSON.parse(jsonText);
|
|
20
|
-
if (options.json?.table) {
|
|
21
|
-
return getFirstArray(json) || json;
|
|
22
|
-
}
|
|
23
|
-
return json;
|
|
24
|
-
} catch (error) {
|
|
25
|
-
throw new Error("JSONLoader: failed to parse JSON");
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
function getFirstArray(json) {
|
|
29
|
-
if (Array.isArray(json)) {
|
|
30
|
-
return json;
|
|
31
|
-
}
|
|
32
|
-
if (json && typeof json === "object") {
|
|
33
|
-
for (const value of Object.values(json)) {
|
|
34
|
-
const array = getFirstArray(value);
|
|
35
|
-
if (array) {
|
|
36
|
-
return array;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return null;
|
|
41
|
-
}
|
|
42
|
-
var init_parse_json = __esm({
|
|
43
|
-
"src/lib/parse-json.ts"() {
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
// ../schema/src/lib/batches/base-table-batch-aggregator.ts
|
|
48
|
-
var DEFAULT_ROW_COUNT, RowTableBatchAggregator;
|
|
16
|
+
// ../schema/src/lib/table/batches/base-table-batch-aggregator.ts
|
|
17
|
+
var DEFAULT_ROW_COUNT, BaseTableBatchAggregator;
|
|
49
18
|
var init_base_table_batch_aggregator = __esm({
|
|
50
|
-
"../schema/src/lib/batches/base-table-batch-aggregator.ts"() {
|
|
19
|
+
"../schema/src/lib/table/batches/base-table-batch-aggregator.ts"() {
|
|
51
20
|
DEFAULT_ROW_COUNT = 100;
|
|
52
|
-
|
|
21
|
+
BaseTableBatchAggregator = class {
|
|
53
22
|
constructor(schema, options) {
|
|
54
23
|
this.length = 0;
|
|
55
24
|
this.rows = null;
|
|
@@ -104,7 +73,7 @@
|
|
|
104
73
|
}
|
|
105
74
|
});
|
|
106
75
|
|
|
107
|
-
// ../schema/src/lib/
|
|
76
|
+
// ../schema/src/lib/table/simple-table/row-utils.ts
|
|
108
77
|
function convertToObjectRow(arrayRow, headers) {
|
|
109
78
|
if (!arrayRow) {
|
|
110
79
|
throw new Error("null row");
|
|
@@ -132,17 +101,17 @@
|
|
|
132
101
|
return arrayRow;
|
|
133
102
|
}
|
|
134
103
|
var init_row_utils = __esm({
|
|
135
|
-
"../schema/src/lib/
|
|
104
|
+
"../schema/src/lib/table/simple-table/row-utils.ts"() {
|
|
136
105
|
}
|
|
137
106
|
});
|
|
138
107
|
|
|
139
|
-
// ../schema/src/lib/batches/row-table-batch-aggregator.ts
|
|
140
|
-
var DEFAULT_ROW_COUNT2,
|
|
108
|
+
// ../schema/src/lib/table/batches/row-table-batch-aggregator.ts
|
|
109
|
+
var DEFAULT_ROW_COUNT2, RowTableBatchAggregator;
|
|
141
110
|
var init_row_table_batch_aggregator = __esm({
|
|
142
|
-
"../schema/src/lib/batches/row-table-batch-aggregator.ts"() {
|
|
111
|
+
"../schema/src/lib/table/batches/row-table-batch-aggregator.ts"() {
|
|
143
112
|
init_row_utils();
|
|
144
113
|
DEFAULT_ROW_COUNT2 = 100;
|
|
145
|
-
|
|
114
|
+
RowTableBatchAggregator = class {
|
|
146
115
|
constructor(schema, options) {
|
|
147
116
|
this.length = 0;
|
|
148
117
|
this.objectRows = null;
|
|
@@ -214,10 +183,10 @@
|
|
|
214
183
|
}
|
|
215
184
|
});
|
|
216
185
|
|
|
217
|
-
// ../schema/src/lib/batches/columnar-table-batch-aggregator.ts
|
|
186
|
+
// ../schema/src/lib/table/batches/columnar-table-batch-aggregator.ts
|
|
218
187
|
var DEFAULT_ROW_COUNT3, ColumnarTableBatchAggregator;
|
|
219
188
|
var init_columnar_table_batch_aggregator = __esm({
|
|
220
|
-
"../schema/src/lib/batches/columnar-table-batch-aggregator.ts"() {
|
|
189
|
+
"../schema/src/lib/table/batches/columnar-table-batch-aggregator.ts"() {
|
|
221
190
|
DEFAULT_ROW_COUNT3 = 100;
|
|
222
191
|
ColumnarTableBatchAggregator = class {
|
|
223
192
|
constructor(schema, options) {
|
|
@@ -295,10 +264,10 @@
|
|
|
295
264
|
}
|
|
296
265
|
});
|
|
297
266
|
|
|
298
|
-
// ../schema/src/lib/batches/table-batch-builder.ts
|
|
267
|
+
// ../schema/src/lib/table/batches/table-batch-builder.ts
|
|
299
268
|
var DEFAULT_OPTIONS, ERR_MESSAGE, TableBatchBuilder;
|
|
300
269
|
var init_table_batch_builder = __esm({
|
|
301
|
-
"../schema/src/lib/batches/table-batch-builder.ts"() {
|
|
270
|
+
"../schema/src/lib/table/batches/table-batch-builder.ts"() {
|
|
302
271
|
init_base_table_batch_aggregator();
|
|
303
272
|
init_row_table_batch_aggregator();
|
|
304
273
|
init_columnar_table_batch_aggregator();
|
|
@@ -413,10 +382,10 @@
|
|
|
413
382
|
_getTableBatchType() {
|
|
414
383
|
switch (this.options.shape) {
|
|
415
384
|
case "row-table":
|
|
416
|
-
return
|
|
385
|
+
return BaseTableBatchAggregator;
|
|
417
386
|
case "array-row-table":
|
|
418
387
|
case "object-row-table":
|
|
419
|
-
return
|
|
388
|
+
return RowTableBatchAggregator;
|
|
420
389
|
case "columnar-table":
|
|
421
390
|
return ColumnarTableBatchAggregator;
|
|
422
391
|
case "arrow-table":
|
|
@@ -432,10 +401,359 @@
|
|
|
432
401
|
}
|
|
433
402
|
});
|
|
434
403
|
|
|
404
|
+
// ../schema/src/lib/table/simple-table/table-accessors.ts
|
|
405
|
+
function getTableLength(table) {
|
|
406
|
+
switch (table.shape) {
|
|
407
|
+
case "array-row-table":
|
|
408
|
+
case "object-row-table":
|
|
409
|
+
case "geojson-row-table":
|
|
410
|
+
return table.data.length;
|
|
411
|
+
case "arrow-table":
|
|
412
|
+
return table.data.numRows;
|
|
413
|
+
case "columnar-table":
|
|
414
|
+
for (const column of Object.values(table.data)) {
|
|
415
|
+
return column.length || 0;
|
|
416
|
+
}
|
|
417
|
+
return 0;
|
|
418
|
+
default:
|
|
419
|
+
throw new Error("table");
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
function getTableNumCols(table) {
|
|
423
|
+
if (table.schema) {
|
|
424
|
+
return table.schema.fields.length;
|
|
425
|
+
}
|
|
426
|
+
if (getTableLength(table) === 0) {
|
|
427
|
+
throw new Error("empty table");
|
|
428
|
+
}
|
|
429
|
+
switch (table.shape) {
|
|
430
|
+
case "array-row-table":
|
|
431
|
+
return table.data[0].length;
|
|
432
|
+
case "object-row-table":
|
|
433
|
+
case "geojson-row-table":
|
|
434
|
+
return Object.keys(table.data[0]).length;
|
|
435
|
+
case "columnar-table":
|
|
436
|
+
return Object.keys(table.data).length;
|
|
437
|
+
case "arrow-table":
|
|
438
|
+
return table.data.numCols;
|
|
439
|
+
default:
|
|
440
|
+
throw new Error("table");
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
function getTableRowAsObject(table, rowIndex, target, copy2) {
|
|
444
|
+
switch (table.shape) {
|
|
445
|
+
case "object-row-table":
|
|
446
|
+
return copy2 ? Object.fromEntries(Object.entries(table.data[rowIndex])) : table.data[rowIndex];
|
|
447
|
+
case "array-row-table":
|
|
448
|
+
case "geojson-row-table":
|
|
449
|
+
if (table.schema) {
|
|
450
|
+
const objectRow2 = target || {};
|
|
451
|
+
for (let i = 0; i < table.schema.fields.length; i++) {
|
|
452
|
+
objectRow2[table.schema.fields[i].name] = table.data[rowIndex][i];
|
|
453
|
+
}
|
|
454
|
+
return objectRow2;
|
|
455
|
+
}
|
|
456
|
+
throw new Error("no schema");
|
|
457
|
+
case "columnar-table":
|
|
458
|
+
if (table.schema) {
|
|
459
|
+
const objectRow2 = target || {};
|
|
460
|
+
for (let i = 0; i < table.schema.fields.length; i++) {
|
|
461
|
+
objectRow2[table.schema.fields[i].name] = table.data[table.schema.fields[i].name][rowIndex];
|
|
462
|
+
}
|
|
463
|
+
return objectRow2;
|
|
464
|
+
} else {
|
|
465
|
+
const objectRow2 = target || {};
|
|
466
|
+
for (const [name, column] of Object.entries(table.data)) {
|
|
467
|
+
objectRow2[name] = column[rowIndex];
|
|
468
|
+
}
|
|
469
|
+
return objectRow2;
|
|
470
|
+
}
|
|
471
|
+
case "arrow-table":
|
|
472
|
+
const objectRow = target || {};
|
|
473
|
+
const row = table.data.get(rowIndex);
|
|
474
|
+
const schema = table.data.schema;
|
|
475
|
+
for (let i = 0; i < schema.fields.length; i++) {
|
|
476
|
+
objectRow[schema.fields[i].name] = row?.[schema.fields[i].name];
|
|
477
|
+
}
|
|
478
|
+
return objectRow;
|
|
479
|
+
default:
|
|
480
|
+
throw new Error("shape");
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
function getTableRowAsArray(table, rowIndex, target, copy2) {
|
|
484
|
+
switch (table.shape) {
|
|
485
|
+
case "array-row-table":
|
|
486
|
+
return copy2 ? Array.from(table.data[rowIndex]) : table.data[rowIndex];
|
|
487
|
+
case "object-row-table":
|
|
488
|
+
case "geojson-row-table":
|
|
489
|
+
if (table.schema) {
|
|
490
|
+
const arrayRow2 = target || [];
|
|
491
|
+
for (let i = 0; i < table.schema.fields.length; i++) {
|
|
492
|
+
arrayRow2[i] = table.data[rowIndex][table.schema.fields[i].name];
|
|
493
|
+
}
|
|
494
|
+
return arrayRow2;
|
|
495
|
+
}
|
|
496
|
+
return Object.values(table.data[rowIndex]);
|
|
497
|
+
case "columnar-table":
|
|
498
|
+
if (table.schema) {
|
|
499
|
+
const arrayRow2 = target || [];
|
|
500
|
+
for (let i = 0; i < table.schema.fields.length; i++) {
|
|
501
|
+
arrayRow2[i] = table.data[table.schema.fields[i].name][rowIndex];
|
|
502
|
+
}
|
|
503
|
+
return arrayRow2;
|
|
504
|
+
} else {
|
|
505
|
+
const arrayRow2 = target || [];
|
|
506
|
+
let i = 0;
|
|
507
|
+
for (const column of Object.values(table.data)) {
|
|
508
|
+
arrayRow2[i] = column[rowIndex];
|
|
509
|
+
i++;
|
|
510
|
+
}
|
|
511
|
+
return arrayRow2;
|
|
512
|
+
}
|
|
513
|
+
case "arrow-table":
|
|
514
|
+
const arrayRow = target || [];
|
|
515
|
+
const row = table.data.get(rowIndex);
|
|
516
|
+
const schema = table.data.schema;
|
|
517
|
+
for (let i = 0; i < schema.fields.length; i++) {
|
|
518
|
+
arrayRow[i] = row?.[schema.fields[i].name];
|
|
519
|
+
}
|
|
520
|
+
return arrayRow;
|
|
521
|
+
default:
|
|
522
|
+
throw new Error("shape");
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
function* makeRowIterator(table, shape) {
|
|
526
|
+
switch (shape) {
|
|
527
|
+
case "array-row-table":
|
|
528
|
+
yield* makeArrayRowIterator(table);
|
|
529
|
+
break;
|
|
530
|
+
case "object-row-table":
|
|
531
|
+
yield* makeObjectRowIterator(table);
|
|
532
|
+
break;
|
|
533
|
+
default:
|
|
534
|
+
throw new Error(`Unknown row type ${shape}`);
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
function* makeArrayRowIterator(table, target = []) {
|
|
538
|
+
const length = getTableLength(table);
|
|
539
|
+
for (let rowIndex = 0; rowIndex < length; rowIndex++) {
|
|
540
|
+
yield getTableRowAsArray(table, rowIndex, target);
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
function* makeObjectRowIterator(table, target = {}) {
|
|
544
|
+
const length = getTableLength(table);
|
|
545
|
+
for (let rowIndex = 0; rowIndex < length; rowIndex++) {
|
|
546
|
+
yield getTableRowAsObject(table, rowIndex, target);
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
var init_table_accessors = __esm({
|
|
550
|
+
"../schema/src/lib/table/simple-table/table-accessors.ts"() {
|
|
551
|
+
}
|
|
552
|
+
});
|
|
553
|
+
|
|
554
|
+
// ../schema/src/lib/table/simple-table/data-type.ts
|
|
555
|
+
function getDataTypeFromValue(value, defaultNumberType = "float32") {
|
|
556
|
+
if (value instanceof Date) {
|
|
557
|
+
return "date-millisecond";
|
|
558
|
+
}
|
|
559
|
+
if (value instanceof Number) {
|
|
560
|
+
return defaultNumberType;
|
|
561
|
+
}
|
|
562
|
+
if (typeof value === "string") {
|
|
563
|
+
return "utf8";
|
|
564
|
+
}
|
|
565
|
+
if (value === null || value === "undefined") {
|
|
566
|
+
return "null";
|
|
567
|
+
}
|
|
568
|
+
return "null";
|
|
569
|
+
}
|
|
570
|
+
function getDataTypeFromArray(array) {
|
|
571
|
+
let type = getDataTypeFromTypedArray(array);
|
|
572
|
+
if (type !== "null") {
|
|
573
|
+
return { type, nullable: false };
|
|
574
|
+
}
|
|
575
|
+
if (array.length > 0) {
|
|
576
|
+
type = getDataTypeFromValue(array[0]);
|
|
577
|
+
return { type, nullable: true };
|
|
578
|
+
}
|
|
579
|
+
return { type: "null", nullable: true };
|
|
580
|
+
}
|
|
581
|
+
function getDataTypeFromTypedArray(array) {
|
|
582
|
+
switch (array.constructor) {
|
|
583
|
+
case Int8Array:
|
|
584
|
+
return "int8";
|
|
585
|
+
case Uint8Array:
|
|
586
|
+
case Uint8ClampedArray:
|
|
587
|
+
return "uint8";
|
|
588
|
+
case Int16Array:
|
|
589
|
+
return "int16";
|
|
590
|
+
case Uint16Array:
|
|
591
|
+
return "uint16";
|
|
592
|
+
case Int32Array:
|
|
593
|
+
return "int32";
|
|
594
|
+
case Uint32Array:
|
|
595
|
+
return "uint32";
|
|
596
|
+
case Float32Array:
|
|
597
|
+
return "float32";
|
|
598
|
+
case Float64Array:
|
|
599
|
+
return "float64";
|
|
600
|
+
default:
|
|
601
|
+
return "null";
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
var init_data_type = __esm({
|
|
605
|
+
"../schema/src/lib/table/simple-table/data-type.ts"() {
|
|
606
|
+
}
|
|
607
|
+
});
|
|
608
|
+
|
|
609
|
+
// ../schema/src/lib/table/simple-table/table-schema.ts
|
|
610
|
+
function deduceTableSchema(table) {
|
|
611
|
+
switch (table.shape) {
|
|
612
|
+
case "array-row-table":
|
|
613
|
+
case "object-row-table":
|
|
614
|
+
return deduceSchemaFromRows(table.data);
|
|
615
|
+
case "columnar-table":
|
|
616
|
+
return deduceSchemaFromColumns(table.data);
|
|
617
|
+
case "arrow-table":
|
|
618
|
+
default:
|
|
619
|
+
throw new Error("Deduce schema");
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
function deduceSchemaFromColumns(columnarTable) {
|
|
623
|
+
const fields = [];
|
|
624
|
+
for (const [columnName, column] of Object.entries(columnarTable)) {
|
|
625
|
+
const field = deduceFieldFromColumn(column, columnName);
|
|
626
|
+
fields.push(field);
|
|
627
|
+
}
|
|
628
|
+
return { fields, metadata: {} };
|
|
629
|
+
}
|
|
630
|
+
function deduceSchemaFromRows(rowTable) {
|
|
631
|
+
if (!rowTable.length) {
|
|
632
|
+
throw new Error("deduce from empty table");
|
|
633
|
+
}
|
|
634
|
+
const fields = [];
|
|
635
|
+
const row0 = rowTable[0];
|
|
636
|
+
for (const [columnName, value] of Object.entries(row0)) {
|
|
637
|
+
fields.push(deduceFieldFromValue(value, columnName));
|
|
638
|
+
}
|
|
639
|
+
return { fields, metadata: {} };
|
|
640
|
+
}
|
|
641
|
+
function deduceFieldFromColumn(column, name) {
|
|
642
|
+
if (ArrayBuffer.isView(column)) {
|
|
643
|
+
const type = getDataTypeFromArray(column);
|
|
644
|
+
return {
|
|
645
|
+
name,
|
|
646
|
+
type: type.type || "null",
|
|
647
|
+
nullable: type.nullable
|
|
648
|
+
};
|
|
649
|
+
}
|
|
650
|
+
if (Array.isArray(column) && column.length > 0) {
|
|
651
|
+
const value = column[0];
|
|
652
|
+
const type = getDataTypeFromValue(value);
|
|
653
|
+
return {
|
|
654
|
+
name,
|
|
655
|
+
type,
|
|
656
|
+
nullable: true
|
|
657
|
+
};
|
|
658
|
+
}
|
|
659
|
+
throw new Error("empty table");
|
|
660
|
+
}
|
|
661
|
+
function deduceFieldFromValue(value, name) {
|
|
662
|
+
const type = getDataTypeFromValue(value);
|
|
663
|
+
return {
|
|
664
|
+
name,
|
|
665
|
+
type,
|
|
666
|
+
nullable: true
|
|
667
|
+
};
|
|
668
|
+
}
|
|
669
|
+
var init_table_schema = __esm({
|
|
670
|
+
"../schema/src/lib/table/simple-table/table-schema.ts"() {
|
|
671
|
+
init_data_type();
|
|
672
|
+
}
|
|
673
|
+
});
|
|
674
|
+
|
|
675
|
+
// ../schema/src/lib/table/simple-table/make-table.ts
|
|
676
|
+
function makeTableFromData(data) {
|
|
677
|
+
let table;
|
|
678
|
+
switch (getTableShapeFromData(data)) {
|
|
679
|
+
case "array-row-table":
|
|
680
|
+
table = { shape: "array-row-table", data };
|
|
681
|
+
break;
|
|
682
|
+
case "object-row-table":
|
|
683
|
+
table = { shape: "object-row-table", data };
|
|
684
|
+
break;
|
|
685
|
+
case "columnar-table":
|
|
686
|
+
table = { shape: "columnar-table", data };
|
|
687
|
+
break;
|
|
688
|
+
default:
|
|
689
|
+
throw new Error("table");
|
|
690
|
+
}
|
|
691
|
+
const schema = deduceTableSchema(table);
|
|
692
|
+
return { ...table, schema };
|
|
693
|
+
}
|
|
694
|
+
function getTableShapeFromData(data) {
|
|
695
|
+
if (Array.isArray(data)) {
|
|
696
|
+
if (data.length === 0) {
|
|
697
|
+
throw new Error("cannot deduce type of empty table");
|
|
698
|
+
}
|
|
699
|
+
const firstRow = data[0];
|
|
700
|
+
if (Array.isArray(firstRow)) {
|
|
701
|
+
return "array-row-table";
|
|
702
|
+
}
|
|
703
|
+
if (firstRow && typeof firstRow === "object") {
|
|
704
|
+
return "object-row-table";
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
if (data && typeof data === "object") {
|
|
708
|
+
return "columnar-table";
|
|
709
|
+
}
|
|
710
|
+
throw new Error("invalid table");
|
|
711
|
+
}
|
|
712
|
+
var init_make_table = __esm({
|
|
713
|
+
"../schema/src/lib/table/simple-table/make-table.ts"() {
|
|
714
|
+
init_table_schema();
|
|
715
|
+
}
|
|
716
|
+
});
|
|
717
|
+
|
|
435
718
|
// ../schema/src/index.ts
|
|
436
719
|
var init_src = __esm({
|
|
437
720
|
"../schema/src/index.ts"() {
|
|
438
721
|
init_table_batch_builder();
|
|
722
|
+
init_table_accessors();
|
|
723
|
+
init_make_table();
|
|
724
|
+
}
|
|
725
|
+
});
|
|
726
|
+
|
|
727
|
+
// src/lib/parsers/parse-json.ts
|
|
728
|
+
function parseJSONSync(jsonText, options) {
|
|
729
|
+
try {
|
|
730
|
+
const json = JSON.parse(jsonText);
|
|
731
|
+
if (options.json?.table) {
|
|
732
|
+
const data = getFirstArray(json) || json;
|
|
733
|
+
return makeTableFromData(data);
|
|
734
|
+
}
|
|
735
|
+
return json;
|
|
736
|
+
} catch (error) {
|
|
737
|
+
throw new Error("JSONLoader: failed to parse JSON");
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
function getFirstArray(json) {
|
|
741
|
+
if (Array.isArray(json)) {
|
|
742
|
+
return json;
|
|
743
|
+
}
|
|
744
|
+
if (json && typeof json === "object") {
|
|
745
|
+
for (const value of Object.values(json)) {
|
|
746
|
+
const array = getFirstArray(value);
|
|
747
|
+
if (array) {
|
|
748
|
+
return array;
|
|
749
|
+
}
|
|
750
|
+
}
|
|
751
|
+
}
|
|
752
|
+
return null;
|
|
753
|
+
}
|
|
754
|
+
var init_parse_json = __esm({
|
|
755
|
+
"src/lib/parsers/parse-json.ts"() {
|
|
756
|
+
init_src();
|
|
439
757
|
}
|
|
440
758
|
});
|
|
441
759
|
|
|
@@ -484,6 +802,34 @@
|
|
|
484
802
|
}
|
|
485
803
|
});
|
|
486
804
|
|
|
805
|
+
// ../../node_modules/@babel/runtime/helpers/esm/typeof.js
|
|
806
|
+
var init_typeof = __esm({
|
|
807
|
+
"../../node_modules/@babel/runtime/helpers/esm/typeof.js"() {
|
|
808
|
+
}
|
|
809
|
+
});
|
|
810
|
+
|
|
811
|
+
// ../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js
|
|
812
|
+
var init_toPrimitive = __esm({
|
|
813
|
+
"../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js"() {
|
|
814
|
+
init_typeof();
|
|
815
|
+
}
|
|
816
|
+
});
|
|
817
|
+
|
|
818
|
+
// ../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js
|
|
819
|
+
var init_toPropertyKey = __esm({
|
|
820
|
+
"../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js"() {
|
|
821
|
+
init_typeof();
|
|
822
|
+
init_toPrimitive();
|
|
823
|
+
}
|
|
824
|
+
});
|
|
825
|
+
|
|
826
|
+
// ../../node_modules/@babel/runtime/helpers/esm/defineProperty.js
|
|
827
|
+
var init_defineProperty = __esm({
|
|
828
|
+
"../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"() {
|
|
829
|
+
init_toPropertyKey();
|
|
830
|
+
}
|
|
831
|
+
});
|
|
832
|
+
|
|
487
833
|
// ../loader-utils/src/index.ts
|
|
488
834
|
var init_src2 = __esm({
|
|
489
835
|
"../loader-utils/src/index.ts"() {
|
|
@@ -1057,10 +1403,10 @@ Char: ${this.c}`;
|
|
|
1057
1403
|
}
|
|
1058
1404
|
});
|
|
1059
1405
|
|
|
1060
|
-
// src/lib/parser/json-parser.ts
|
|
1406
|
+
// src/lib/json-parser/json-parser.ts
|
|
1061
1407
|
var JSONParser;
|
|
1062
1408
|
var init_json_parser = __esm({
|
|
1063
|
-
"src/lib/parser/json-parser.ts"() {
|
|
1409
|
+
"src/lib/json-parser/json-parser.ts"() {
|
|
1064
1410
|
init_clarinet();
|
|
1065
1411
|
init_jsonpath();
|
|
1066
1412
|
JSONParser = class {
|
|
@@ -1152,10 +1498,10 @@ Char: ${this.c}`;
|
|
|
1152
1498
|
}
|
|
1153
1499
|
});
|
|
1154
1500
|
|
|
1155
|
-
// src/lib/parser/streaming-json-parser.ts
|
|
1501
|
+
// src/lib/json-parser/streaming-json-parser.ts
|
|
1156
1502
|
var StreamingJSONParser;
|
|
1157
1503
|
var init_streaming_json_parser = __esm({
|
|
1158
|
-
"src/lib/parser/streaming-json-parser.ts"() {
|
|
1504
|
+
"src/lib/json-parser/streaming-json-parser.ts"() {
|
|
1159
1505
|
init_json_parser();
|
|
1160
1506
|
init_jsonpath();
|
|
1161
1507
|
StreamingJSONParser = class extends JSONParser {
|
|
@@ -1227,7 +1573,7 @@ Char: ${this.c}`;
|
|
|
1227
1573
|
}
|
|
1228
1574
|
});
|
|
1229
1575
|
|
|
1230
|
-
// src/lib/parse-json-in-batches.ts
|
|
1576
|
+
// src/lib/parsers/parse-json-in-batches.ts
|
|
1231
1577
|
async function* parseJSONInBatches(binaryAsyncIterator, options) {
|
|
1232
1578
|
const asyncIterator = makeTextDecoderIterator(binaryAsyncIterator);
|
|
1233
1579
|
const { metadata } = options;
|
|
@@ -1302,7 +1648,7 @@ Char: ${this.c}`;
|
|
|
1302
1648
|
return batch.container;
|
|
1303
1649
|
}
|
|
1304
1650
|
var init_parse_json_in_batches = __esm({
|
|
1305
|
-
"src/lib/parse-json-in-batches.ts"() {
|
|
1651
|
+
"src/lib/parsers/parse-json-in-batches.ts"() {
|
|
1306
1652
|
init_src();
|
|
1307
1653
|
init_src2();
|
|
1308
1654
|
init_streaming_json_parser();
|
|
@@ -1352,23 +1698,25 @@ Char: ${this.c}`;
|
|
|
1352
1698
|
}
|
|
1353
1699
|
});
|
|
1354
1700
|
|
|
1355
|
-
// src/lib/parse-ndjson.ts
|
|
1701
|
+
// src/lib/parsers/parse-ndjson.ts
|
|
1356
1702
|
function parseNDJSONSync(ndjsonText) {
|
|
1357
1703
|
const lines = ndjsonText.trim().split("\n");
|
|
1358
|
-
|
|
1704
|
+
const parsedLines = lines.map((line, counter) => {
|
|
1359
1705
|
try {
|
|
1360
1706
|
return JSON.parse(line);
|
|
1361
1707
|
} catch (error) {
|
|
1362
1708
|
throw new Error(`NDJSONLoader: failed to parse JSON on line ${counter + 1}`);
|
|
1363
1709
|
}
|
|
1364
1710
|
});
|
|
1711
|
+
return makeTableFromData(parsedLines);
|
|
1365
1712
|
}
|
|
1366
1713
|
var init_parse_ndjson = __esm({
|
|
1367
|
-
"src/lib/parse-ndjson.ts"() {
|
|
1714
|
+
"src/lib/parsers/parse-ndjson.ts"() {
|
|
1715
|
+
init_src();
|
|
1368
1716
|
}
|
|
1369
1717
|
});
|
|
1370
1718
|
|
|
1371
|
-
// src/lib/parse-ndjson-in-batches.ts
|
|
1719
|
+
// src/lib/parsers/parse-ndjson-in-batches.ts
|
|
1372
1720
|
async function* parseNDJSONInBatches(binaryAsyncIterator, options) {
|
|
1373
1721
|
const textIterator = makeTextDecoderIterator(binaryAsyncIterator);
|
|
1374
1722
|
const lineIterator = makeLineIterator(textIterator);
|
|
@@ -1398,22 +1746,13 @@ Char: ${this.c}`;
|
|
|
1398
1746
|
}
|
|
1399
1747
|
}
|
|
1400
1748
|
var init_parse_ndjson_in_batches = __esm({
|
|
1401
|
-
"src/lib/parse-ndjson-in-batches.ts"() {
|
|
1749
|
+
"src/lib/parsers/parse-ndjson-in-batches.ts"() {
|
|
1402
1750
|
init_src();
|
|
1403
1751
|
init_src2();
|
|
1404
1752
|
}
|
|
1405
1753
|
});
|
|
1406
1754
|
|
|
1407
1755
|
// src/ndjson-loader.ts
|
|
1408
|
-
async function parse2(arrayBuffer) {
|
|
1409
|
-
return parseTextSync2(new TextDecoder().decode(arrayBuffer));
|
|
1410
|
-
}
|
|
1411
|
-
function parseTextSync2(text) {
|
|
1412
|
-
return parseNDJSONSync(text);
|
|
1413
|
-
}
|
|
1414
|
-
function parseInBatches2(asyncIterator, options) {
|
|
1415
|
-
return parseNDJSONInBatches(asyncIterator, options);
|
|
1416
|
-
}
|
|
1417
1756
|
var VERSION2, NDJSONLoader;
|
|
1418
1757
|
var init_ndjson_loader = __esm({
|
|
1419
1758
|
"src/ndjson-loader.ts"() {
|
|
@@ -1425,18 +1764,58 @@ Char: ${this.c}`;
|
|
|
1425
1764
|
id: "ndjson",
|
|
1426
1765
|
module: "json",
|
|
1427
1766
|
version: VERSION2,
|
|
1428
|
-
extensions: ["ndjson"],
|
|
1429
|
-
mimeTypes: [
|
|
1767
|
+
extensions: ["ndjson", "jsonl"],
|
|
1768
|
+
mimeTypes: [
|
|
1769
|
+
"application/x-ndjson",
|
|
1770
|
+
"application/jsonlines",
|
|
1771
|
+
"application/json-seq"
|
|
1772
|
+
],
|
|
1430
1773
|
category: "table",
|
|
1431
1774
|
text: true,
|
|
1432
|
-
parse:
|
|
1433
|
-
parseTextSync:
|
|
1434
|
-
parseInBatches:
|
|
1775
|
+
parse: async (arrayBuffer) => parseNDJSONSync(new TextDecoder().decode(arrayBuffer)),
|
|
1776
|
+
parseTextSync: parseNDJSONSync,
|
|
1777
|
+
parseInBatches: parseNDJSONInBatches,
|
|
1435
1778
|
options: {}
|
|
1436
1779
|
};
|
|
1437
1780
|
}
|
|
1438
1781
|
});
|
|
1439
1782
|
|
|
1783
|
+
// src/lib/encoders/json-encoder.ts
|
|
1784
|
+
function encodeTableAsJSON(table, options = {}) {
|
|
1785
|
+
const shape = options.shape || "object-row-table";
|
|
1786
|
+
const strings = [];
|
|
1787
|
+
const rowIterator = makeRowIterator(table, shape);
|
|
1788
|
+
for (const row of rowIterator) {
|
|
1789
|
+
strings.push(JSON.stringify(row));
|
|
1790
|
+
}
|
|
1791
|
+
return `[${strings.join(",")}]`;
|
|
1792
|
+
}
|
|
1793
|
+
var init_json_encoder = __esm({
|
|
1794
|
+
"src/lib/encoders/json-encoder.ts"() {
|
|
1795
|
+
init_src();
|
|
1796
|
+
}
|
|
1797
|
+
});
|
|
1798
|
+
|
|
1799
|
+
// src/json-writer.ts
|
|
1800
|
+
var JSONWriter;
|
|
1801
|
+
var init_json_writer = __esm({
|
|
1802
|
+
"src/json-writer.ts"() {
|
|
1803
|
+
init_json_encoder();
|
|
1804
|
+
JSONWriter = {
|
|
1805
|
+
id: "json",
|
|
1806
|
+
version: "latest",
|
|
1807
|
+
module: "json",
|
|
1808
|
+
name: "JSON",
|
|
1809
|
+
extensions: ["json"],
|
|
1810
|
+
mimeTypes: ["application/json"],
|
|
1811
|
+
options: {},
|
|
1812
|
+
text: true,
|
|
1813
|
+
encode: async (table, options) => new TextEncoder().encode(encodeTableAsJSON(table, options)).buffer,
|
|
1814
|
+
encodeText: (table, options) => encodeTableAsJSON(table, options)
|
|
1815
|
+
};
|
|
1816
|
+
}
|
|
1817
|
+
});
|
|
1818
|
+
|
|
1440
1819
|
// ../../node_modules/@math.gl/polygon/dist/esm/polygon-utils.js
|
|
1441
1820
|
function getPolygonSignedArea(points, options = {}) {
|
|
1442
1821
|
const {
|
|
@@ -1459,16 +1838,16 @@ Char: ${this.c}`;
|
|
|
1459
1838
|
// ../../node_modules/@math.gl/polygon/dist/esm/polygon.js
|
|
1460
1839
|
var init_polygon = __esm({
|
|
1461
1840
|
"../../node_modules/@math.gl/polygon/dist/esm/polygon.js"() {
|
|
1841
|
+
init_defineProperty();
|
|
1462
1842
|
init_polygon_utils();
|
|
1463
1843
|
}
|
|
1464
1844
|
});
|
|
1465
1845
|
|
|
1466
1846
|
// ../../node_modules/@math.gl/polygon/dist/esm/earcut.js
|
|
1467
|
-
function earcut(
|
|
1468
|
-
dim = dim || 2;
|
|
1847
|
+
function earcut(positions, holeIndices, dim = 2, areas) {
|
|
1469
1848
|
const hasHoles = holeIndices && holeIndices.length;
|
|
1470
|
-
const outerLen = hasHoles ? holeIndices[0] * dim :
|
|
1471
|
-
let outerNode = linkedList(
|
|
1849
|
+
const outerLen = hasHoles ? holeIndices[0] * dim : positions.length;
|
|
1850
|
+
let outerNode = linkedList(positions, 0, outerLen, dim, true, areas && areas[0]);
|
|
1472
1851
|
const triangles = [];
|
|
1473
1852
|
if (!outerNode || outerNode.next === outerNode.prev)
|
|
1474
1853
|
return triangles;
|
|
@@ -1480,13 +1859,13 @@ Char: ${this.c}`;
|
|
|
1480
1859
|
let x;
|
|
1481
1860
|
let y;
|
|
1482
1861
|
if (hasHoles)
|
|
1483
|
-
outerNode = eliminateHoles(
|
|
1484
|
-
if (
|
|
1485
|
-
minX = maxX =
|
|
1486
|
-
minY = maxY =
|
|
1862
|
+
outerNode = eliminateHoles(positions, holeIndices, outerNode, dim, areas);
|
|
1863
|
+
if (positions.length > 80 * dim) {
|
|
1864
|
+
minX = maxX = positions[0];
|
|
1865
|
+
minY = maxY = positions[1];
|
|
1487
1866
|
for (let i = dim; i < outerLen; i += dim) {
|
|
1488
|
-
x =
|
|
1489
|
-
y =
|
|
1867
|
+
x = positions[i];
|
|
1868
|
+
y = positions[i + 1];
|
|
1490
1869
|
if (x < minX)
|
|
1491
1870
|
minX = x;
|
|
1492
1871
|
if (y < minY)
|
|
@@ -2438,22 +2817,23 @@ Char: ${this.c}`;
|
|
|
2438
2817
|
});
|
|
2439
2818
|
|
|
2440
2819
|
// src/geojson-loader.ts
|
|
2441
|
-
async function
|
|
2442
|
-
return
|
|
2820
|
+
async function parse2(arrayBuffer, options) {
|
|
2821
|
+
return parseTextSync2(new TextDecoder().decode(arrayBuffer), options);
|
|
2443
2822
|
}
|
|
2444
|
-
function
|
|
2823
|
+
function parseTextSync2(text, options) {
|
|
2445
2824
|
options = { ...DEFAULT_GEOJSON_LOADER_OPTIONS, ...options };
|
|
2446
2825
|
options.json = { ...DEFAULT_GEOJSON_LOADER_OPTIONS.geojson, ...options.geojson };
|
|
2447
2826
|
options.gis = options.gis || {};
|
|
2448
|
-
const
|
|
2827
|
+
const table = parseJSONSync(text, options);
|
|
2828
|
+
table.shape = "geojson-row-table";
|
|
2449
2829
|
switch (options.gis.format) {
|
|
2450
2830
|
case "binary":
|
|
2451
|
-
return geojsonToBinary(
|
|
2831
|
+
return geojsonToBinary(table.data);
|
|
2452
2832
|
default:
|
|
2453
|
-
return
|
|
2833
|
+
return table;
|
|
2454
2834
|
}
|
|
2455
2835
|
}
|
|
2456
|
-
function
|
|
2836
|
+
function parseInBatches2(asyncIterator, options) {
|
|
2457
2837
|
options = { ...DEFAULT_GEOJSON_LOADER_OPTIONS, ...options };
|
|
2458
2838
|
options.json = { ...DEFAULT_GEOJSON_LOADER_OPTIONS.geojson, ...options.geojson };
|
|
2459
2839
|
const geojsonIterator = parseJSONInBatches(asyncIterator, options);
|
|
@@ -2502,9 +2882,176 @@ Char: ${this.c}`;
|
|
|
2502
2882
|
};
|
|
2503
2883
|
GeoJSONLoader = {
|
|
2504
2884
|
...GeoJSONWorkerLoader,
|
|
2505
|
-
parse:
|
|
2506
|
-
parseTextSync:
|
|
2507
|
-
parseInBatches:
|
|
2885
|
+
parse: parse2,
|
|
2886
|
+
parseTextSync: parseTextSync2,
|
|
2887
|
+
parseInBatches: parseInBatches2
|
|
2888
|
+
};
|
|
2889
|
+
}
|
|
2890
|
+
});
|
|
2891
|
+
|
|
2892
|
+
// src/lib/encoders/encode-utils.ts
|
|
2893
|
+
function detectGeometryColumnIndex(table) {
|
|
2894
|
+
const geometryIndex = table.schema?.fields.findIndex((field) => field.name === "geometry") ?? -1;
|
|
2895
|
+
if (geometryIndex > -1) {
|
|
2896
|
+
return geometryIndex;
|
|
2897
|
+
}
|
|
2898
|
+
if (getTableLength(table) > 0) {
|
|
2899
|
+
const row = getTableRowAsArray(table, 0);
|
|
2900
|
+
for (let columnIndex = 0; columnIndex < getTableNumCols(table); columnIndex++) {
|
|
2901
|
+
const value = row?.[columnIndex];
|
|
2902
|
+
if (value && typeof value === "object") {
|
|
2903
|
+
return columnIndex;
|
|
2904
|
+
}
|
|
2905
|
+
}
|
|
2906
|
+
}
|
|
2907
|
+
throw new Error("Failed to detect geometry column");
|
|
2908
|
+
}
|
|
2909
|
+
function getRowPropertyObject(table, row, excludeColumnIndices = []) {
|
|
2910
|
+
const properties = {};
|
|
2911
|
+
for (let columnIndex = 0; columnIndex < getTableNumCols(table); ++columnIndex) {
|
|
2912
|
+
const columnName = table.schema?.fields[columnIndex].name;
|
|
2913
|
+
if (columnName && !excludeColumnIndices.includes(columnIndex)) {
|
|
2914
|
+
properties[columnName] = row[columnName];
|
|
2915
|
+
}
|
|
2916
|
+
}
|
|
2917
|
+
return properties;
|
|
2918
|
+
}
|
|
2919
|
+
var init_encode_utils = __esm({
|
|
2920
|
+
"src/lib/encoders/encode-utils.ts"() {
|
|
2921
|
+
init_src();
|
|
2922
|
+
}
|
|
2923
|
+
});
|
|
2924
|
+
|
|
2925
|
+
// src/lib/encoders/utf8-encoder.ts
|
|
2926
|
+
var Utf8ArrayBufferEncoder;
|
|
2927
|
+
var init_utf8_encoder = __esm({
|
|
2928
|
+
"src/lib/encoders/utf8-encoder.ts"() {
|
|
2929
|
+
Utf8ArrayBufferEncoder = class {
|
|
2930
|
+
constructor(chunkSize) {
|
|
2931
|
+
this.strings = [];
|
|
2932
|
+
this.totalLength = 0;
|
|
2933
|
+
this.textEncoder = new TextEncoder();
|
|
2934
|
+
this.chunkSize = chunkSize;
|
|
2935
|
+
}
|
|
2936
|
+
push(...strings) {
|
|
2937
|
+
for (const string of strings) {
|
|
2938
|
+
this.strings.push(string);
|
|
2939
|
+
this.totalLength += string.length;
|
|
2940
|
+
}
|
|
2941
|
+
}
|
|
2942
|
+
isFull() {
|
|
2943
|
+
return this.totalLength >= this.chunkSize;
|
|
2944
|
+
}
|
|
2945
|
+
getArrayBufferBatch() {
|
|
2946
|
+
return this.textEncoder.encode(this.getStringBatch()).buffer;
|
|
2947
|
+
}
|
|
2948
|
+
getStringBatch() {
|
|
2949
|
+
const stringChunk = this.strings.join("");
|
|
2950
|
+
this.strings = [];
|
|
2951
|
+
this.totalLength = 0;
|
|
2952
|
+
return stringChunk;
|
|
2953
|
+
}
|
|
2954
|
+
};
|
|
2955
|
+
}
|
|
2956
|
+
});
|
|
2957
|
+
|
|
2958
|
+
// src/lib/encoders/geojson-encoder.ts
|
|
2959
|
+
async function* encodeTableAsGeojsonInBatches(batchIterator, inputOpts = {}) {
|
|
2960
|
+
const options = { geojson: {}, chunkSize: 1e4, ...inputOpts };
|
|
2961
|
+
const utf8Encoder = new Utf8ArrayBufferEncoder(options.chunkSize);
|
|
2962
|
+
if (!options.geojson.featureArray) {
|
|
2963
|
+
utf8Encoder.push("{\n", '"type": "FeatureCollection",\n', '"features":\n');
|
|
2964
|
+
}
|
|
2965
|
+
utf8Encoder.push("[");
|
|
2966
|
+
let geometryColumn = options.geojson.geometryColumn;
|
|
2967
|
+
let isFirstLine = true;
|
|
2968
|
+
for await (const batch of batchIterator) {
|
|
2969
|
+
const { table, start, end = getTableLength(batch.table) - start } = batch;
|
|
2970
|
+
if (!geometryColumn) {
|
|
2971
|
+
geometryColumn = geometryColumn || detectGeometryColumnIndex(table);
|
|
2972
|
+
}
|
|
2973
|
+
for (let rowIndex = start; rowIndex < end; ++rowIndex) {
|
|
2974
|
+
if (!isFirstLine) {
|
|
2975
|
+
utf8Encoder.push(",");
|
|
2976
|
+
}
|
|
2977
|
+
utf8Encoder.push("\n");
|
|
2978
|
+
isFirstLine = false;
|
|
2979
|
+
encodeRow(table, rowIndex, geometryColumn, utf8Encoder);
|
|
2980
|
+
if (utf8Encoder.isFull()) {
|
|
2981
|
+
yield utf8Encoder.getArrayBufferBatch();
|
|
2982
|
+
}
|
|
2983
|
+
}
|
|
2984
|
+
const arrayBufferBatch = utf8Encoder.getArrayBufferBatch();
|
|
2985
|
+
if (arrayBufferBatch.byteLength > 0) {
|
|
2986
|
+
yield arrayBufferBatch;
|
|
2987
|
+
}
|
|
2988
|
+
}
|
|
2989
|
+
utf8Encoder.push("\n");
|
|
2990
|
+
utf8Encoder.push("]\n");
|
|
2991
|
+
if (!options.geojson.featureArray) {
|
|
2992
|
+
utf8Encoder.push("}");
|
|
2993
|
+
}
|
|
2994
|
+
yield utf8Encoder.getArrayBufferBatch();
|
|
2995
|
+
}
|
|
2996
|
+
function encodeRow(table, rowIndex, geometryColumnIndex, utf8Encoder) {
|
|
2997
|
+
const row = getTableRowAsObject(table, rowIndex);
|
|
2998
|
+
if (!row)
|
|
2999
|
+
return;
|
|
3000
|
+
const featureWithProperties = getFeatureFromRow(table, row, geometryColumnIndex);
|
|
3001
|
+
const featureString = JSON.stringify(featureWithProperties);
|
|
3002
|
+
utf8Encoder.push(featureString);
|
|
3003
|
+
}
|
|
3004
|
+
function getFeatureFromRow(table, row, geometryColumnIndex) {
|
|
3005
|
+
const properties = getRowPropertyObject(table, row, [geometryColumnIndex]);
|
|
3006
|
+
const columnName = table.schema?.fields[geometryColumnIndex].name;
|
|
3007
|
+
let featureOrGeometry = columnName && row[columnName];
|
|
3008
|
+
if (!featureOrGeometry) {
|
|
3009
|
+
return { type: "Feature", geometry: null, properties };
|
|
3010
|
+
}
|
|
3011
|
+
if (typeof featureOrGeometry === "string") {
|
|
3012
|
+
try {
|
|
3013
|
+
featureOrGeometry = JSON.parse(featureOrGeometry);
|
|
3014
|
+
} catch (err) {
|
|
3015
|
+
throw new Error("Invalid string geometry");
|
|
3016
|
+
}
|
|
3017
|
+
}
|
|
3018
|
+
if (typeof featureOrGeometry !== "object" || typeof featureOrGeometry?.type !== "string") {
|
|
3019
|
+
throw new Error("invalid geometry column value");
|
|
3020
|
+
}
|
|
3021
|
+
if (featureOrGeometry?.type === "Feature") {
|
|
3022
|
+
return { ...featureOrGeometry, properties };
|
|
3023
|
+
}
|
|
3024
|
+
return { type: "Feature", geometry: featureOrGeometry, properties };
|
|
3025
|
+
}
|
|
3026
|
+
var init_geojson_encoder = __esm({
|
|
3027
|
+
"src/lib/encoders/geojson-encoder.ts"() {
|
|
3028
|
+
init_src();
|
|
3029
|
+
init_src();
|
|
3030
|
+
init_encode_utils();
|
|
3031
|
+
init_utf8_encoder();
|
|
3032
|
+
}
|
|
3033
|
+
});
|
|
3034
|
+
|
|
3035
|
+
// src/geojson-writer.ts
|
|
3036
|
+
var GeoJSONWriter;
|
|
3037
|
+
var init_geojson_writer = __esm({
|
|
3038
|
+
"src/geojson-writer.ts"() {
|
|
3039
|
+
init_geojson_encoder();
|
|
3040
|
+
GeoJSONWriter = {
|
|
3041
|
+
id: "geojson",
|
|
3042
|
+
version: "latest",
|
|
3043
|
+
module: "geojson",
|
|
3044
|
+
name: "GeoJSON",
|
|
3045
|
+
extensions: ["geojson"],
|
|
3046
|
+
mimeTypes: ["application/geo+json"],
|
|
3047
|
+
options: {
|
|
3048
|
+
geojson: {
|
|
3049
|
+
featureArray: false,
|
|
3050
|
+
geometryColumn: null
|
|
3051
|
+
}
|
|
3052
|
+
},
|
|
3053
|
+
text: true,
|
|
3054
|
+
encodeInBatches: (tableIterator, options) => encodeTableAsGeojsonInBatches(tableIterator, options)
|
|
2508
3055
|
};
|
|
2509
3056
|
}
|
|
2510
3057
|
});
|
|
@@ -2513,10 +3060,12 @@ Char: ${this.c}`;
|
|
|
2513
3060
|
var src_exports = {};
|
|
2514
3061
|
__export(src_exports, {
|
|
2515
3062
|
JSONLoader: () => JSONLoader,
|
|
3063
|
+
JSONWriter: () => JSONWriter,
|
|
2516
3064
|
NDJSONLoader: () => NDJSONLoader,
|
|
2517
3065
|
_ClarinetParser: () => ClarinetParser,
|
|
2518
3066
|
_GeoJSONLoader: () => GeoJSONLoader,
|
|
2519
3067
|
_GeoJSONWorkerLoader: () => GeoJSONWorkerLoader,
|
|
3068
|
+
_GeoJSONWriter: () => GeoJSONWriter,
|
|
2520
3069
|
_JSONPath: () => JSONPath,
|
|
2521
3070
|
_rebuildJsonObject: () => rebuildJsonObject
|
|
2522
3071
|
});
|
|
@@ -2524,7 +3073,9 @@ Char: ${this.c}`;
|
|
|
2524
3073
|
"src/index.ts"() {
|
|
2525
3074
|
init_json_loader();
|
|
2526
3075
|
init_ndjson_loader();
|
|
3076
|
+
init_json_writer();
|
|
2527
3077
|
init_geojson_loader();
|
|
3078
|
+
init_geojson_writer();
|
|
2528
3079
|
init_jsonpath();
|
|
2529
3080
|
init_clarinet();
|
|
2530
3081
|
init_parse_json_in_batches();
|