@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.
Files changed (193) hide show
  1. package/dist/bundle.js +2 -2
  2. package/dist/dist.min.js +643 -92
  3. package/dist/es5/bundle.js +6 -0
  4. package/dist/es5/bundle.js.map +1 -0
  5. package/dist/es5/geojson-loader.js +157 -0
  6. package/dist/es5/geojson-loader.js.map +1 -0
  7. package/dist/es5/geojson-writer.js +27 -0
  8. package/dist/es5/geojson-writer.js.map +1 -0
  9. package/dist/es5/index.js +69 -0
  10. package/dist/es5/index.js.map +1 -0
  11. package/dist/es5/json-loader.js +67 -0
  12. package/dist/es5/json-loader.js.map +1 -0
  13. package/dist/es5/json-writer.js +42 -0
  14. package/dist/es5/json-writer.js.map +1 -0
  15. package/dist/es5/lib/clarinet/clarinet.js +446 -0
  16. package/dist/es5/lib/clarinet/clarinet.js.map +1 -0
  17. package/dist/es5/lib/encoders/encode-utils.js +42 -0
  18. package/dist/es5/lib/encoders/encode-utils.js.map +1 -0
  19. package/dist/es5/lib/encoders/geojson-encoder.js +178 -0
  20. package/dist/es5/lib/encoders/geojson-encoder.js.map +1 -0
  21. package/dist/es5/lib/encoders/json-encoder.js +30 -0
  22. package/dist/es5/lib/encoders/json-encoder.js.map +1 -0
  23. package/dist/es5/lib/encoders/utf8-encoder.js +54 -0
  24. package/dist/es5/lib/encoders/utf8-encoder.js.map +1 -0
  25. package/dist/es5/lib/json-parser/json-parser.js +140 -0
  26. package/dist/es5/lib/json-parser/json-parser.js.map +1 -0
  27. package/dist/es5/lib/json-parser/streaming-json-parser.js +123 -0
  28. package/dist/es5/lib/json-parser/streaming-json-parser.js.map +1 -0
  29. package/dist/es5/lib/jsonpath/jsonpath.js +119 -0
  30. package/dist/es5/lib/jsonpath/jsonpath.js.map +1 -0
  31. package/dist/es5/lib/parsers/parse-json-in-batches.js +206 -0
  32. package/dist/es5/lib/parsers/parse-json-in-batches.js.map +1 -0
  33. package/dist/es5/lib/parsers/parse-json.js +38 -0
  34. package/dist/es5/lib/parsers/parse-json.js.map +1 -0
  35. package/dist/es5/lib/parsers/parse-ndjson-in-batches.js +114 -0
  36. package/dist/es5/lib/parsers/parse-ndjson-in-batches.js.map +1 -0
  37. package/dist/es5/lib/parsers/parse-ndjson.js +19 -0
  38. package/dist/es5/lib/parsers/parse-ndjson.js.map +1 -0
  39. package/dist/es5/ndgeoson-loader.js +54 -0
  40. package/dist/es5/ndgeoson-loader.js.map +1 -0
  41. package/dist/es5/ndjson-loader.js +44 -0
  42. package/dist/es5/ndjson-loader.js.map +1 -0
  43. package/dist/es5/workers/geojson-worker.js +6 -0
  44. package/dist/es5/workers/geojson-worker.js.map +1 -0
  45. package/dist/esm/bundle.js +4 -0
  46. package/dist/esm/bundle.js.map +1 -0
  47. package/dist/esm/geojson-loader.js +79 -0
  48. package/dist/esm/geojson-loader.js.map +1 -0
  49. package/dist/esm/geojson-writer.js +18 -0
  50. package/dist/esm/geojson-writer.js.map +1 -0
  51. package/dist/esm/index.js +9 -0
  52. package/dist/esm/index.js.map +1 -0
  53. package/dist/esm/json-loader.js +48 -0
  54. package/dist/esm/json-loader.js.map +1 -0
  55. package/dist/esm/json-writer.js +14 -0
  56. package/dist/esm/json-writer.js.map +1 -0
  57. package/dist/esm/lib/clarinet/LICENSE +28 -0
  58. package/dist/esm/lib/clarinet/clarinet.js +415 -0
  59. package/dist/esm/lib/clarinet/clarinet.js.map +1 -0
  60. package/dist/esm/lib/encoders/encode-utils.js +31 -0
  61. package/dist/esm/lib/encoders/encode-utils.js.map +1 -0
  62. package/dist/esm/lib/encoders/geojson-encoder.js +98 -0
  63. package/dist/esm/lib/encoders/geojson-encoder.js.map +1 -0
  64. package/dist/esm/lib/encoders/json-encoder.js +12 -0
  65. package/dist/esm/lib/encoders/json-encoder.js.map +1 -0
  66. package/dist/esm/lib/encoders/utf8-encoder.js +32 -0
  67. package/dist/esm/lib/encoders/utf8-encoder.js.map +1 -0
  68. package/dist/{lib/parser → esm/lib/json-parser}/json-parser.js +4 -22
  69. package/dist/esm/lib/json-parser/json-parser.js.map +1 -0
  70. package/dist/{lib/parser → esm/lib/json-parser}/streaming-json-parser.js +2 -23
  71. package/dist/esm/lib/json-parser/streaming-json-parser.js.map +1 -0
  72. package/dist/esm/lib/jsonpath/jsonpath.js +67 -0
  73. package/dist/esm/lib/jsonpath/jsonpath.js.map +1 -0
  74. package/dist/{lib → esm/lib/parsers}/parse-json-in-batches.js +5 -18
  75. package/dist/esm/lib/parsers/parse-json-in-batches.js.map +1 -0
  76. package/dist/{lib → esm/lib/parsers}/parse-json.js +4 -9
  77. package/dist/esm/lib/parsers/parse-json.js.map +1 -0
  78. package/dist/{lib → esm/lib/parsers}/parse-ndjson-in-batches.js +3 -6
  79. package/dist/esm/lib/parsers/parse-ndjson-in-batches.js.map +1 -0
  80. package/dist/esm/lib/parsers/parse-ndjson.js +13 -0
  81. package/dist/esm/lib/parsers/parse-ndjson.js.map +1 -0
  82. package/dist/esm/ndgeoson-loader.js +27 -0
  83. package/dist/esm/ndgeoson-loader.js.map +1 -0
  84. package/dist/esm/ndjson-loader.js +18 -0
  85. package/dist/esm/ndjson-loader.js.map +1 -0
  86. package/dist/esm/workers/geojson-worker.js +4 -0
  87. package/dist/esm/workers/geojson-worker.js.map +1 -0
  88. package/dist/geojson-loader.d.ts +2 -2
  89. package/dist/geojson-loader.d.ts.map +1 -1
  90. package/dist/geojson-loader.js +65 -69
  91. package/dist/geojson-worker.js +251 -68
  92. package/dist/geojson-writer.d.ts +6 -0
  93. package/dist/geojson-writer.d.ts.map +1 -0
  94. package/dist/geojson-writer.js +22 -0
  95. package/dist/index.d.ts +5 -1
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +24 -7
  98. package/dist/json-loader.d.ts +10 -7
  99. package/dist/json-loader.d.ts.map +1 -1
  100. package/dist/json-loader.js +33 -38
  101. package/dist/json-writer.d.ts +6 -0
  102. package/dist/json-writer.d.ts.map +1 -0
  103. package/dist/json-writer.js +18 -0
  104. package/dist/lib/clarinet/clarinet.d.ts +3 -3
  105. package/dist/lib/clarinet/clarinet.d.ts.map +1 -1
  106. package/dist/lib/clarinet/clarinet.js +510 -493
  107. package/dist/lib/encoders/encode-utils.d.ts +19 -0
  108. package/dist/lib/encoders/encode-utils.d.ts.map +1 -0
  109. package/dist/lib/encoders/encode-utils.js +47 -0
  110. package/dist/lib/encoders/geojson-encoder.d.ts +14 -0
  111. package/dist/lib/encoders/geojson-encoder.d.ts.map +1 -0
  112. package/dist/lib/encoders/geojson-encoder.js +104 -0
  113. package/dist/lib/encoders/json-encoder.d.ts +16 -0
  114. package/dist/lib/encoders/json-encoder.d.ts.map +1 -0
  115. package/dist/lib/encoders/json-encoder.js +22 -0
  116. package/dist/lib/encoders/utf8-encoder.d.ts +12 -0
  117. package/dist/lib/encoders/utf8-encoder.d.ts.map +1 -0
  118. package/dist/lib/encoders/utf8-encoder.js +32 -0
  119. package/dist/lib/json-parser/json-parser.d.ts.map +1 -0
  120. package/dist/lib/json-parser/json-parser.js +98 -0
  121. package/dist/lib/json-parser/streaming-json-parser.d.ts.map +1 -0
  122. package/dist/lib/json-parser/streaming-json-parser.js +100 -0
  123. package/dist/lib/jsonpath/jsonpath.js +81 -78
  124. package/dist/lib/parsers/parse-json-in-batches.d.ts +5 -0
  125. package/dist/lib/parsers/parse-json-in-batches.d.ts.map +1 -0
  126. package/dist/lib/parsers/parse-json-in-batches.js +100 -0
  127. package/dist/lib/parsers/parse-json.d.ts +4 -0
  128. package/dist/lib/parsers/parse-json.d.ts.map +1 -0
  129. package/dist/lib/parsers/parse-json.js +32 -0
  130. package/dist/lib/{parse-ndjson-in-batches.d.ts → parsers/parse-ndjson-in-batches.d.ts} +1 -1
  131. package/dist/lib/parsers/parse-ndjson-in-batches.d.ts.map +1 -0
  132. package/dist/lib/parsers/parse-ndjson-in-batches.js +36 -0
  133. package/dist/lib/parsers/parse-ndjson.d.ts +3 -0
  134. package/dist/lib/parsers/parse-ndjson.d.ts.map +1 -0
  135. package/dist/lib/parsers/parse-ndjson.js +17 -0
  136. package/dist/ndgeoson-loader.d.ts +34 -0
  137. package/dist/ndgeoson-loader.d.ts.map +1 -0
  138. package/dist/ndgeoson-loader.js +37 -0
  139. package/dist/ndjson-loader.d.ts +3 -21
  140. package/dist/ndjson-loader.d.ts.map +1 -1
  141. package/dist/ndjson-loader.js +26 -31
  142. package/dist/workers/geojson-worker.js +5 -4
  143. package/package.json +7 -7
  144. package/src/geojson-loader.ts +10 -6
  145. package/src/geojson-writer.ts +27 -0
  146. package/src/index.ts +9 -1
  147. package/src/json-loader.ts +15 -24
  148. package/src/json-writer.ts +24 -0
  149. package/src/lib/encoders/encode-utils.ts +54 -0
  150. package/src/lib/encoders/geojson-encoder.ts +139 -0
  151. package/src/lib/encoders/json-encoder.ts +30 -0
  152. package/src/lib/encoders/utf8-encoder.ts +35 -0
  153. package/src/lib/{parse-json-in-batches.ts → parsers/parse-json-in-batches.ts} +8 -8
  154. package/src/lib/{parse-json.ts → parsers/parse-json.ts} +7 -3
  155. package/src/lib/{parse-ndjson-in-batches.ts → parsers/parse-ndjson-in-batches.ts} +1 -1
  156. package/src/lib/parsers/parse-ndjson.ts +15 -0
  157. package/src/ndgeoson-loader.ts +48 -0
  158. package/src/ndjson-loader.ts +20 -27
  159. package/dist/bundle.js.map +0 -1
  160. package/dist/geojson-loader.js.map +0 -1
  161. package/dist/index.js.map +0 -1
  162. package/dist/json-loader.js.map +0 -1
  163. package/dist/jsonl-loader.d.ts +0 -1
  164. package/dist/jsonl-loader.d.ts.map +0 -1
  165. package/dist/jsonl-loader.js +0 -2
  166. package/dist/jsonl-loader.js.map +0 -1
  167. package/dist/lib/clarinet/clarinet.js.map +0 -1
  168. package/dist/lib/jsonpath/jsonpath.js.map +0 -1
  169. package/dist/lib/parse-json-in-batches.d.ts +0 -5
  170. package/dist/lib/parse-json-in-batches.d.ts.map +0 -1
  171. package/dist/lib/parse-json-in-batches.js.map +0 -1
  172. package/dist/lib/parse-json.d.ts +0 -3
  173. package/dist/lib/parse-json.d.ts.map +0 -1
  174. package/dist/lib/parse-json.js.map +0 -1
  175. package/dist/lib/parse-ndjson-in-batches.d.ts.map +0 -1
  176. package/dist/lib/parse-ndjson-in-batches.js.map +0 -1
  177. package/dist/lib/parse-ndjson.d.ts +0 -2
  178. package/dist/lib/parse-ndjson.d.ts.map +0 -1
  179. package/dist/lib/parse-ndjson.js +0 -11
  180. package/dist/lib/parse-ndjson.js.map +0 -1
  181. package/dist/lib/parser/json-parser.d.ts.map +0 -1
  182. package/dist/lib/parser/json-parser.js.map +0 -1
  183. package/dist/lib/parser/streaming-json-parser.d.ts.map +0 -1
  184. package/dist/lib/parser/streaming-json-parser.js.map +0 -1
  185. package/dist/ndjson-loader.js.map +0 -1
  186. package/dist/workers/geojson-worker.js.map +0 -1
  187. package/src/jsonl-loader.ts +0 -53
  188. package/src/lib/parse-ndjson.ts +0 -10
  189. /package/dist/{lib → es5/lib}/clarinet/LICENSE +0 -0
  190. /package/dist/lib/{parser → json-parser}/json-parser.d.ts +0 -0
  191. /package/dist/lib/{parser → json-parser}/streaming-json-parser.d.ts +0 -0
  192. /package/src/lib/{parser → json-parser}/json-parser.ts +0 -0
  193. /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/parse-json.ts
17
- function parseJSONSync(jsonText, options) {
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
- RowTableBatchAggregator = class {
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/utils/row-utils.ts
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/utils/row-utils.ts"() {
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, RowTableBatchAggregator2;
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
- RowTableBatchAggregator2 = class {
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 RowTableBatchAggregator;
385
+ return BaseTableBatchAggregator;
417
386
  case "array-row-table":
418
387
  case "object-row-table":
419
- return RowTableBatchAggregator2;
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
- return lines.map((line, counter) => {
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: ["application/x-ndjson"],
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: parse2,
1433
- parseTextSync: parseTextSync2,
1434
- parseInBatches: parseInBatches2,
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(data, holeIndices, dim, areas) {
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 : data.length;
1471
- let outerNode = linkedList(data, 0, outerLen, dim, true, areas && areas[0]);
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(data, holeIndices, outerNode, dim, areas);
1484
- if (data.length > 80 * dim) {
1485
- minX = maxX = data[0];
1486
- minY = maxY = data[1];
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 = data[i];
1489
- y = data[i + 1];
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 parse3(arrayBuffer, options) {
2442
- return parseTextSync3(new TextDecoder().decode(arrayBuffer), options);
2820
+ async function parse2(arrayBuffer, options) {
2821
+ return parseTextSync2(new TextDecoder().decode(arrayBuffer), options);
2443
2822
  }
2444
- function parseTextSync3(text, options) {
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 json = parseJSONSync(text, options);
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(json);
2831
+ return geojsonToBinary(table.data);
2452
2832
  default:
2453
- return json;
2833
+ return table;
2454
2834
  }
2455
2835
  }
2456
- function parseInBatches3(asyncIterator, options) {
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: parse3,
2506
- parseTextSync: parseTextSync3,
2507
- parseInBatches: parseInBatches3
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();