@loaders.gl/json 4.0.0-alpha.9 → 4.0.0-beta.2

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 (113) hide show
  1. package/dist/dist.min.js +132 -82
  2. package/dist/es5/geojson-loader.js +30 -21
  3. package/dist/es5/geojson-loader.js.map +1 -1
  4. package/dist/es5/geojson-writer.js.map +1 -1
  5. package/dist/es5/json-loader.js +2 -2
  6. package/dist/es5/json-loader.js.map +1 -1
  7. package/dist/es5/json-writer.js +1 -1
  8. package/dist/es5/json-writer.js.map +1 -1
  9. package/dist/es5/lib/encoder-utils/encode-table-row.js +54 -0
  10. package/dist/es5/lib/encoder-utils/encode-table-row.js.map +1 -0
  11. package/dist/es5/lib/encoder-utils/encode-utils.js.map +1 -0
  12. package/dist/es5/lib/encoder-utils/utf8-encoder.js.map +1 -0
  13. package/dist/es5/lib/encoders/geojson-encoder.js +47 -84
  14. package/dist/es5/lib/encoders/geojson-encoder.js.map +1 -1
  15. package/dist/es5/lib/encoders/json-encoder.js +3 -3
  16. package/dist/es5/lib/encoders/json-encoder.js.map +1 -1
  17. package/dist/es5/lib/parsers/parse-json-in-batches.js +1 -1
  18. package/dist/es5/lib/parsers/parse-json-in-batches.js.map +1 -1
  19. package/dist/es5/lib/parsers/parse-ndjson-in-batches.js.map +1 -1
  20. package/dist/es5/ndgeoson-loader.js +10 -13
  21. package/dist/es5/ndgeoson-loader.js.map +1 -1
  22. package/dist/es5/ndjson-loader.js +1 -1
  23. package/dist/es5/ndjson-loader.js.map +1 -1
  24. package/dist/esm/geojson-loader.js +31 -22
  25. package/dist/esm/geojson-loader.js.map +1 -1
  26. package/dist/esm/geojson-writer.js.map +1 -1
  27. package/dist/esm/json-loader.js +2 -2
  28. package/dist/esm/json-loader.js.map +1 -1
  29. package/dist/esm/json-writer.js +1 -1
  30. package/dist/esm/json-writer.js.map +1 -1
  31. package/dist/esm/lib/encoder-utils/encode-table-row.js +44 -0
  32. package/dist/esm/lib/encoder-utils/encode-table-row.js.map +1 -0
  33. package/dist/esm/lib/encoder-utils/encode-utils.js.map +1 -0
  34. package/dist/esm/lib/encoder-utils/utf8-encoder.js.map +1 -0
  35. package/dist/esm/lib/encoders/geojson-encoder.js +9 -52
  36. package/dist/esm/lib/encoders/geojson-encoder.js.map +1 -1
  37. package/dist/esm/lib/encoders/json-encoder.js +3 -3
  38. package/dist/esm/lib/encoders/json-encoder.js.map +1 -1
  39. package/dist/esm/lib/parsers/parse-json-in-batches.js +1 -1
  40. package/dist/esm/lib/parsers/parse-json-in-batches.js.map +1 -1
  41. package/dist/esm/lib/parsers/parse-ndjson-in-batches.js.map +1 -1
  42. package/dist/esm/ndgeoson-loader.js +9 -11
  43. package/dist/esm/ndgeoson-loader.js.map +1 -1
  44. package/dist/esm/ndjson-loader.js +1 -1
  45. package/dist/esm/ndjson-loader.js.map +1 -1
  46. package/dist/geojson-loader.d.ts +3 -2
  47. package/dist/geojson-loader.d.ts.map +1 -1
  48. package/dist/geojson-worker.js +55 -209
  49. package/dist/geojson-writer.d.ts +8 -3
  50. package/dist/geojson-writer.d.ts.map +1 -1
  51. package/dist/json-loader.d.ts +1 -1
  52. package/dist/json-loader.d.ts.map +1 -1
  53. package/dist/json-writer.d.ts +13 -3
  54. package/dist/json-writer.d.ts.map +1 -1
  55. package/dist/lib/encoder-utils/encode-table-row.d.ts +7 -0
  56. package/dist/lib/encoder-utils/encode-table-row.d.ts.map +1 -0
  57. package/dist/lib/encoder-utils/encode-utils.d.ts.map +1 -0
  58. package/dist/lib/encoder-utils/utf8-encoder.d.ts.map +1 -0
  59. package/dist/lib/encoders/geojson-encoder.d.ts +2 -8
  60. package/dist/lib/encoders/geojson-encoder.d.ts.map +1 -1
  61. package/dist/lib/encoders/json-encoder.d.ts +1 -10
  62. package/dist/lib/encoders/json-encoder.d.ts.map +1 -1
  63. package/dist/lib/parsers/parse-json-in-batches.d.ts.map +1 -1
  64. package/dist/lib/parsers/parse-ndjson-in-batches.d.ts +2 -2
  65. package/dist/lib/parsers/parse-ndjson-in-batches.d.ts.map +1 -1
  66. package/dist/ndgeoson-loader.d.ts +4 -24
  67. package/dist/ndgeoson-loader.d.ts.map +1 -1
  68. package/package.json +5 -5
  69. package/src/geojson-loader.ts +42 -27
  70. package/src/geojson-writer.ts +8 -3
  71. package/src/json-loader.ts +2 -2
  72. package/src/json-writer.ts +12 -4
  73. package/src/lib/encoder-utils/encode-table-row.ts +69 -0
  74. package/src/lib/encoders/geojson-encoder.ts +15 -78
  75. package/src/lib/encoders/json-encoder.ts +3 -11
  76. package/src/lib/parsers/parse-json-in-batches.ts +2 -1
  77. package/src/lib/parsers/parse-ndjson-in-batches.ts +2 -2
  78. package/src/ndgeoson-loader.ts +16 -13
  79. package/dist/bundle.js +0 -5
  80. package/dist/es5/lib/encoders/encode-utils.js.map +0 -1
  81. package/dist/es5/lib/encoders/utf8-encoder.js.map +0 -1
  82. package/dist/esm/lib/encoders/encode-utils.js.map +0 -1
  83. package/dist/esm/lib/encoders/utf8-encoder.js.map +0 -1
  84. package/dist/geojson-loader.js +0 -77
  85. package/dist/geojson-writer.js +0 -22
  86. package/dist/index.js +0 -24
  87. package/dist/json-loader.js +0 -42
  88. package/dist/json-writer.js +0 -18
  89. package/dist/lib/clarinet/clarinet.js +0 -535
  90. package/dist/lib/encoders/encode-utils.d.ts.map +0 -1
  91. package/dist/lib/encoders/encode-utils.js +0 -47
  92. package/dist/lib/encoders/geojson-encoder.js +0 -104
  93. package/dist/lib/encoders/json-encoder.js +0 -22
  94. package/dist/lib/encoders/utf8-encoder.d.ts.map +0 -1
  95. package/dist/lib/encoders/utf8-encoder.js +0 -32
  96. package/dist/lib/json-parser/json-parser.js +0 -98
  97. package/dist/lib/json-parser/streaming-json-parser.js +0 -100
  98. package/dist/lib/jsonpath/jsonpath.js +0 -89
  99. package/dist/lib/parsers/parse-json-in-batches.js +0 -100
  100. package/dist/lib/parsers/parse-json.js +0 -32
  101. package/dist/lib/parsers/parse-ndjson-in-batches.js +0 -36
  102. package/dist/lib/parsers/parse-ndjson.js +0 -17
  103. package/dist/ndgeoson-loader.js +0 -37
  104. package/dist/ndjson-loader.js +0 -27
  105. package/dist/workers/geojson-worker.js +0 -5
  106. /package/dist/es5/lib/{encoders → encoder-utils}/encode-utils.js +0 -0
  107. /package/dist/es5/lib/{encoders → encoder-utils}/utf8-encoder.js +0 -0
  108. /package/dist/esm/lib/{encoders → encoder-utils}/encode-utils.js +0 -0
  109. /package/dist/esm/lib/{encoders → encoder-utils}/utf8-encoder.js +0 -0
  110. /package/dist/lib/{encoders → encoder-utils}/encode-utils.d.ts +0 -0
  111. /package/dist/lib/{encoders → encoder-utils}/utf8-encoder.d.ts +0 -0
  112. /package/src/lib/{encoders → encoder-utils}/encode-utils.ts +0 -0
  113. /package/src/lib/{encoders → encoder-utils}/utf8-encoder.ts +0 -0
@@ -1,11 +1,11 @@
1
1
  // loaders.gl, MIT license
2
2
 
3
3
  import type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';
4
+ import type {GeoJSON, GeoJSONTable, TableBatch} from '@loaders.gl/schema';
4
5
  import type {JSONLoaderOptions} from './json-loader';
5
6
  import {geojsonToBinary} from '@loaders.gl/gis';
6
- import {parseJSONSync} from './lib/parsers/parse-json';
7
+ // import {parseJSONSync} from './lib/parsers/parse-json';
7
8
  import {parseJSONInBatches} from './lib/parsers/parse-json-in-batches';
8
- import {GeoJSONRowTable} from '@loaders.gl/schema';
9
9
 
10
10
  // __VERSION__ is injected by babel-plugin-version-inline
11
11
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
@@ -20,22 +20,10 @@ export type GeoJSONLoaderOptions = JSONLoaderOptions & {
20
20
  };
21
21
  };
22
22
 
23
- const DEFAULT_GEOJSON_LOADER_OPTIONS = {
24
- geojson: {
25
- shape: 'object-row-table'
26
- },
27
- json: {
28
- jsonpaths: ['$', '$.features']
29
- },
30
- gis: {
31
- format: 'geojson'
32
- }
33
- };
34
-
35
23
  /**
36
24
  * GeoJSON loader
37
25
  */
38
- export const GeoJSONWorkerLoader: Loader = {
26
+ export const GeoJSONWorkerLoader: Loader<GeoJSON, TableBatch, GeoJSONLoaderOptions> = {
39
27
  name: 'GeoJSON',
40
28
  id: 'geojson',
41
29
  module: 'geojson',
@@ -45,39 +33,66 @@ export const GeoJSONWorkerLoader: Loader = {
45
33
  mimeTypes: ['application/geo+json'],
46
34
  category: 'geometry',
47
35
  text: true,
48
- options: DEFAULT_GEOJSON_LOADER_OPTIONS
36
+ options: {
37
+ geojson: {
38
+ shape: 'object-row-table'
39
+ },
40
+ json: {
41
+ shape: 'object-row-table',
42
+ jsonpaths: ['$', '$.features']
43
+ },
44
+ gis: {
45
+ format: 'geojson'
46
+ }
47
+ }
49
48
  };
50
49
 
51
- export const GeoJSONLoader: LoaderWithParser = {
50
+ export const GeoJSONLoader: LoaderWithParser<GeoJSON, TableBatch, GeoJSONLoaderOptions> = {
52
51
  ...GeoJSONWorkerLoader,
52
+ // @ts-expect-error
53
53
  parse,
54
+ // @ts-expect-error
54
55
  parseTextSync,
55
56
  parseInBatches
56
57
  };
57
58
 
58
- async function parse(arrayBuffer, options) {
59
+ async function parse(arrayBuffer: ArrayBuffer, options?: GeoJSONLoaderOptions) {
59
60
  return parseTextSync(new TextDecoder().decode(arrayBuffer), options);
60
61
  }
61
62
 
62
- function parseTextSync(text, options) {
63
+ function parseTextSync(text: string, options?: GeoJSONLoaderOptions) {
63
64
  // Apps can call the parse method directly, we so apply default options here
64
- options = {...DEFAULT_GEOJSON_LOADER_OPTIONS, ...options};
65
- options.json = {...DEFAULT_GEOJSON_LOADER_OPTIONS.geojson, ...options.geojson};
65
+ options = {...GeoJSONLoader.options, ...options};
66
+ options.geojson = {...GeoJSONLoader.options.geojson, ...options.geojson};
66
67
  options.gis = options.gis || {};
67
- const table = parseJSONSync(text, options) as GeoJSONRowTable;
68
- table.shape = 'geojson-row-table';
68
+
69
+ let geojson;
70
+ try {
71
+ geojson = JSON.parse(text);
72
+ } catch {
73
+ geojson = {};
74
+ }
75
+
76
+ const table: GeoJSONTable = {
77
+ shape: 'geojson-table',
78
+ // TODO - deduce schema from geojson
79
+ // TODO check that parsed data is of type FeatureCollection
80
+ type: 'FeatureCollection',
81
+ features: geojson?.features || []
82
+ };
83
+
69
84
  switch (options.gis.format) {
70
85
  case 'binary':
71
- return geojsonToBinary(table.data);
86
+ return geojsonToBinary(table.features);
72
87
  default:
73
88
  return table;
74
89
  }
75
90
  }
76
91
 
77
- function parseInBatches(asyncIterator, options): AsyncIterable<any> {
92
+ function parseInBatches(asyncIterator, options): AsyncIterable<TableBatch> {
78
93
  // Apps can call the parse method directly, we so apply default options here
79
- options = {...DEFAULT_GEOJSON_LOADER_OPTIONS, ...options};
80
- options.json = {...DEFAULT_GEOJSON_LOADER_OPTIONS.geojson, ...options.geojson};
94
+ options = {...GeoJSONLoader.options, ...options};
95
+ options.json = {...GeoJSONLoader.options.geojson, ...options.geojson};
81
96
 
82
97
  const geojsonIterator = parseJSONInBatches(asyncIterator, options);
83
98
 
@@ -1,12 +1,17 @@
1
1
  // loaders.gl, MIT license
2
2
  // Copyright Foursquare, Inc 20222
3
3
 
4
- import type {Writer} from '@loaders.gl/loader-utils';
4
+ import type {Writer, WriterOptions} from '@loaders.gl/loader-utils';
5
5
  import type {Table, TableBatch} from '@loaders.gl/schema';
6
- import type {GeoJSONWriterOptions} from './lib/encoders/geojson-encoder';
7
6
  import {encodeTableAsGeojsonInBatches} from './lib/encoders/geojson-encoder';
8
7
 
9
- export type {GeoJSONWriterOptions};
8
+ export type GeoJSONWriterOptions = WriterOptions & {
9
+ geojson?: {
10
+ featureArray?: boolean;
11
+ geometryColumn?: number | null;
12
+ };
13
+ chunkSize?: number;
14
+ };
10
15
 
11
16
  export const GeoJSONWriter: Writer<Table, TableBatch, GeoJSONWriterOptions> = {
12
17
  id: 'geojson',
@@ -10,7 +10,7 @@ import {parseJSONInBatches} from './lib/parsers/parse-json-in-batches';
10
10
  const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
11
11
 
12
12
  type ParseJSONOptions = {
13
- shape?: 'row-table';
13
+ shape: 'object-row-table'; // TODO - 'auto'?
14
14
  table?: boolean;
15
15
  jsonpaths?: string[];
16
16
  };
@@ -25,7 +25,7 @@ export type JSONLoaderOptions = LoaderOptions & {
25
25
 
26
26
  const DEFAULT_JSON_LOADER_OPTIONS: {json: Required<ParseJSONOptions>} = {
27
27
  json: {
28
- shape: 'row-table',
28
+ shape: 'object-row-table',
29
29
  table: false,
30
30
  jsonpaths: []
31
31
  // batchSize: 'auto'
@@ -2,12 +2,20 @@
2
2
  // Copyright 2022 Foursquare Labs, Inc.
3
3
 
4
4
  /* global TextEncoder */
5
- import type {Writer} from '@loaders.gl/loader-utils';
5
+ import type {Writer, WriterOptions} from '@loaders.gl/loader-utils';
6
6
  import type {Table, TableBatch} from '@loaders.gl/schema';
7
- import type {JSONWriterOptions} from './lib/encoders/json-encoder';
8
7
  import {encodeTableAsJSON} from './lib/encoders/json-encoder';
9
8
 
10
- export type {JSONWriterOptions};
9
+ export type JSONWriterOptions = WriterOptions & {
10
+ json?: {
11
+ shape?: 'object-row-table' | 'array-row-table';
12
+ wrapper?: (table: TableJSON) => unknown;
13
+ };
14
+ };
15
+
16
+ type RowArray = unknown[];
17
+ type RowObject = {[key: string]: unknown};
18
+ type TableJSON = RowArray[] | RowObject[];
11
19
 
12
20
  export const JSONWriter: Writer<Table, TableBatch, JSONWriterOptions> = {
13
21
  id: 'json',
@@ -20,5 +28,5 @@ export const JSONWriter: Writer<Table, TableBatch, JSONWriterOptions> = {
20
28
  text: true,
21
29
  encode: async (table: Table, options: JSONWriterOptions) =>
22
30
  new TextEncoder().encode(encodeTableAsJSON(table, options)).buffer,
23
- encodeText: (table: Table, options: JSONWriterOptions) => encodeTableAsJSON(table, options)
31
+ encodeTextSync: (table: Table, options: JSONWriterOptions) => encodeTableAsJSON(table, options)
24
32
  };
@@ -0,0 +1,69 @@
1
+ // loaders.gl, MIT license
2
+ // Copyright 2022 Foursquare Labs, Inc.
3
+
4
+ import {Feature} from '@loaders.gl/schema';
5
+ import {Table, getTableRowAsObject} from '@loaders.gl/schema';
6
+ import {getRowPropertyObject} from './encode-utils';
7
+ import {Utf8ArrayBufferEncoder} from './utf8-encoder';
8
+
9
+ type Row = {[key: string]: unknown};
10
+
11
+ // Helpers
12
+
13
+ /**
14
+ * Encode a row. Currently this ignores properties in the geometry column.
15
+ */
16
+ export function encodeTableRow(
17
+ table: Table,
18
+ rowIndex: number,
19
+ geometryColumnIndex: number,
20
+ utf8Encoder: Utf8ArrayBufferEncoder
21
+ ): void {
22
+ const row = getTableRowAsObject(table, rowIndex);
23
+ if (!row) return;
24
+ const featureWithProperties = getFeatureFromRow(table, row, geometryColumnIndex);
25
+ const featureString = JSON.stringify(featureWithProperties);
26
+ utf8Encoder.push(featureString);
27
+ }
28
+
29
+ /**
30
+ * Encode a row as a Feature. Currently this ignores properties objects in the geometry column.
31
+ */
32
+ function getFeatureFromRow(table: Table, row: Row, geometryColumnIndex: number): Feature {
33
+ // Extract non-feature/geometry properties
34
+ const properties = getRowPropertyObject(table, row, [geometryColumnIndex]);
35
+
36
+ // Extract geometry feature
37
+ const columnName = table.schema?.fields[geometryColumnIndex].name;
38
+ let featureOrGeometry =
39
+ columnName && (row[columnName] as {[key: string]: unknown} | string | null | undefined);
40
+
41
+ // GeoJSON support null geometries
42
+ if (!featureOrGeometry) {
43
+ // @ts-ignore Feature type does not support null geometries
44
+ return {type: 'Feature', geometry: null, properties};
45
+ }
46
+
47
+ // Support string geometries?
48
+ // TODO: This assumes GeoJSON strings, which may not be the correct format
49
+ // (could be WKT, encoded WKB...)
50
+ if (typeof featureOrGeometry === 'string') {
51
+ try {
52
+ featureOrGeometry = JSON.parse(featureOrGeometry);
53
+ } catch (err) {
54
+ throw new Error('Invalid string geometry');
55
+ }
56
+ }
57
+
58
+ if (typeof featureOrGeometry !== 'object' || typeof featureOrGeometry?.type !== 'string') {
59
+ throw new Error('invalid geometry column value');
60
+ }
61
+
62
+ if (featureOrGeometry?.type === 'Feature') {
63
+ // @ts-ignore Feature type does not support null geometries
64
+ return {...featureOrGeometry, properties};
65
+ }
66
+
67
+ // @ts-ignore Feature type does not support null geometries
68
+ return {type: 'Feature', geometry: featureOrGeometry, properties};
69
+ }
@@ -1,20 +1,12 @@
1
1
  // loaders.gl, MIT license
2
2
  // Copyright 2022 Foursquare Labs, Inc.
3
3
 
4
- import {Feature, getTableLength} from '@loaders.gl/schema';
5
- import {Table, TableBatch, getTableRowAsObject} from '@loaders.gl/schema';
6
- import {detectGeometryColumnIndex, getRowPropertyObject} from './encode-utils';
7
- import {Utf8ArrayBufferEncoder} from './utf8-encoder';
8
-
9
- type Row = {[key: string]: unknown};
10
-
11
- export type GeoJSONWriterOptions = {
12
- geojson?: {
13
- featureArray?: boolean;
14
- geometryColumn?: number | null;
15
- };
16
- chunkSize?: number;
17
- };
4
+ import type {TableBatch} from '@loaders.gl/schema';
5
+ import {getTableLength} from '@loaders.gl/schema';
6
+ import {detectGeometryColumnIndex} from '../encoder-utils/encode-utils';
7
+ import {encodeTableRow} from '../encoder-utils/encode-table-row';
8
+ import {Utf8ArrayBufferEncoder} from '../encoder-utils/utf8-encoder';
9
+ import type {GeoJSONWriterOptions} from '../../geojson-writer';
18
10
 
19
11
  /**
20
12
  * Encode a table as GeoJSON
@@ -24,6 +16,7 @@ export async function* encodeTableAsGeojsonInBatches(
24
16
  batchIterator: AsyncIterable<TableBatch>, // | Iterable<TableBatch>,
25
17
  inputOpts: GeoJSONWriterOptions = {}
26
18
  ): AsyncIterable<ArrayBuffer> {
19
+ // @ts-expect-error
27
20
  const options: Required<GeoJSONWriterOptions> = {geojson: {}, chunkSize: 10000, ...inputOpts};
28
21
 
29
22
  const utf8Encoder = new Utf8ArrayBufferEncoder(options.chunkSize);
@@ -37,12 +30,13 @@ export async function* encodeTableAsGeojsonInBatches(
37
30
 
38
31
  let isFirstLine = true;
39
32
 
40
- for await (const batch of batchIterator) {
41
- const {table, start, end = getTableLength(batch.table) - start} = batch;
33
+ let start = 0;
34
+ for await (const tableBatch of batchIterator) {
35
+ const end = start + getTableLength(tableBatch);
42
36
 
43
37
  // Deduce geometry column if not already done
44
38
  if (!geometryColumn) {
45
- geometryColumn = geometryColumn || detectGeometryColumnIndex(table);
39
+ geometryColumn = geometryColumn || detectGeometryColumnIndex(tableBatch);
46
40
  }
47
41
 
48
42
  for (let rowIndex = start; rowIndex < end; ++rowIndex) {
@@ -53,13 +47,16 @@ export async function* encodeTableAsGeojsonInBatches(
53
47
  utf8Encoder.push('\n');
54
48
  isFirstLine = false;
55
49
 
56
- encodeRow(table, rowIndex, geometryColumn, utf8Encoder);
50
+ encodeTableRow(tableBatch, rowIndex, geometryColumn, utf8Encoder);
57
51
 
58
52
  // eslint-disable-next-line max-depth
59
53
  if (utf8Encoder.isFull()) {
60
54
  yield utf8Encoder.getArrayBufferBatch();
61
55
  }
56
+
57
+ start = end;
62
58
  }
59
+
63
60
  const arrayBufferBatch = utf8Encoder.getArrayBufferBatch();
64
61
  if (arrayBufferBatch.byteLength > 0) {
65
62
  yield arrayBufferBatch;
@@ -77,63 +74,3 @@ export async function* encodeTableAsGeojsonInBatches(
77
74
  // Note: Since we pushed a few final lines, the last batch will always exist, no need to check first
78
75
  yield utf8Encoder.getArrayBufferBatch();
79
76
  }
80
-
81
- // Helpers
82
-
83
- /**
84
- * Encode a row. Currently this ignores properties in the geometry column.
85
- */
86
- function encodeRow(
87
- table: Table,
88
- rowIndex: number,
89
- geometryColumnIndex: number,
90
- utf8Encoder: Utf8ArrayBufferEncoder
91
- ): void {
92
- const row = getTableRowAsObject(table, rowIndex);
93
- if (!row) return;
94
- const featureWithProperties = getFeatureFromRow(table, row, geometryColumnIndex);
95
- const featureString = JSON.stringify(featureWithProperties);
96
- utf8Encoder.push(featureString);
97
- }
98
-
99
- /**
100
- * Encode a row as a Feature. Currently this ignores properties objects in the geometry column.
101
- */
102
- function getFeatureFromRow(table: Table, row: Row, geometryColumnIndex: number): Feature {
103
- // Extract non-feature/geometry properties
104
- const properties = getRowPropertyObject(table, row, [geometryColumnIndex]);
105
-
106
- // Extract geometry feature
107
- const columnName = table.schema?.fields[geometryColumnIndex].name;
108
- let featureOrGeometry =
109
- columnName && (row[columnName] as {[key: string]: unknown} | string | null | undefined);
110
-
111
- // GeoJSON support null geometries
112
- if (!featureOrGeometry) {
113
- // @ts-ignore Feature type does not support null geometries
114
- return {type: 'Feature', geometry: null, properties};
115
- }
116
-
117
- // Support string geometries?
118
- // TODO: This assumes GeoJSON strings, which may not be the correct format
119
- // (could be WKT, encoded WKB...)
120
- if (typeof featureOrGeometry === 'string') {
121
- try {
122
- featureOrGeometry = JSON.parse(featureOrGeometry);
123
- } catch (err) {
124
- throw new Error('Invalid string geometry');
125
- }
126
- }
127
-
128
- if (typeof featureOrGeometry !== 'object' || typeof featureOrGeometry?.type !== 'string') {
129
- throw new Error('invalid geometry column value');
130
- }
131
-
132
- if (featureOrGeometry?.type === 'Feature') {
133
- // @ts-ignore Feature type does not support null geometries
134
- return {...featureOrGeometry, properties};
135
- }
136
-
137
- // @ts-ignore Feature type does not support null geometries
138
- return {type: 'Feature', geometry: featureOrGeometry, properties};
139
- }
@@ -2,21 +2,13 @@
2
2
  // Copyright 2022 Foursquare Labs, Inc.
3
3
 
4
4
  import {Table, makeRowIterator} from '@loaders.gl/schema';
5
-
6
- type RowArray = unknown[];
7
- type RowObject = {[key: string]: unknown};
8
- type TableJSON = RowArray[] | RowObject[];
9
-
10
- export type JSONWriterOptions = {
11
- shape?: 'object-row-table' | 'array-row-table';
12
- wrapper?: (table: TableJSON) => unknown;
13
- };
5
+ import type {JSONWriterOptions} from '../../json-writer';
14
6
 
15
7
  /**
16
8
  * Encode a table as a JSON string
17
9
  */
18
- export function encodeTableAsJSON(table: Table, options: JSONWriterOptions = {}): string {
19
- const shape = options.shape || 'object-row-table';
10
+ export function encodeTableAsJSON(table: Table, options?: JSONWriterOptions): string {
11
+ const shape = options?.json?.shape || 'object-row-table';
20
12
 
21
13
  const strings: string[] = [];
22
14
  const rowIterator = makeRowIterator(table, shape);
@@ -20,7 +20,8 @@ export async function* parseJSONInBatches(
20
20
 
21
21
  // TODO fix Schema deduction
22
22
  const schema = null; // new Schema([]);
23
- const shape = options?.json?.shape || 'row-table';
23
+ // TODO - detect shape from data?
24
+ const shape = options?.json?.shape || 'object-row-table';
24
25
  // @ts-ignore
25
26
  const tableBatchBuilder = new TableBatchBuilder(schema, {
26
27
  ...options,
@@ -1,4 +1,4 @@
1
- import type {Batch} from '@loaders.gl/schema';
1
+ import type {TableBatch} from '@loaders.gl/schema';
2
2
  import {TableBatchBuilder} from '@loaders.gl/schema';
3
3
  import {
4
4
  LoaderOptions,
@@ -10,7 +10,7 @@ import {
10
10
  export async function* parseNDJSONInBatches(
11
11
  binaryAsyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,
12
12
  options?: LoaderOptions
13
- ): AsyncIterable<Batch> {
13
+ ): AsyncIterable<TableBatch> {
14
14
  const textIterator = makeTextDecoderIterator(binaryAsyncIterator);
15
15
  const lineIterator = makeLineIterator(textIterator);
16
16
  const numberedLineIterator = makeNumberedLineIterator(lineIterator);
@@ -1,11 +1,13 @@
1
1
  import type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';
2
2
  import {parseNDJSONSync} from './lib/parsers/parse-ndjson';
3
3
  import {parseNDJSONInBatches} from './lib/parsers/parse-ndjson-in-batches';
4
+ import {ArrayRowTable, ObjectRowTable, Batch} from '@loaders.gl/schema';
4
5
 
5
6
  // __VERSION__ is injected by babel-plugin-version-inline
6
7
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
7
8
  const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
8
9
 
10
+ /** Options for NDGeoJSONLoader */
9
11
  export type NDGeoJSONLoaderOptions = LoaderOptions & {
10
12
  geojson?: {
11
13
  shape?: 'object-row-table';
@@ -15,16 +17,12 @@ export type NDGeoJSONLoaderOptions = LoaderOptions & {
15
17
  };
16
18
  };
17
19
 
18
- const DEFAULT_NDGEOJSON_LOADER_OPTIONS = {
19
- geojson: {
20
- shape: 'object-row-table'
21
- },
22
- gis: {
23
- format: 'geojson'
24
- }
25
- };
26
-
27
- export const NDJSONLoader = {
20
+ /** NDGeoJSONLoader */
21
+ export const NDJSONLoader: LoaderWithParser<
22
+ ArrayRowTable | ObjectRowTable,
23
+ Batch,
24
+ NDGeoJSONLoaderOptions
25
+ > = {
28
26
  name: 'NDJSON',
29
27
  id: 'ndjson',
30
28
  module: 'json',
@@ -42,7 +40,12 @@ export const NDJSONLoader = {
42
40
  parse: async (arrayBuffer: ArrayBuffer) => parseNDJSONSync(new TextDecoder().decode(arrayBuffer)),
43
41
  parseTextSync: parseNDJSONSync,
44
42
  parseInBatches: parseNDJSONInBatches,
45
- options: DEFAULT_NDGEOJSON_LOADER_OPTIONS
43
+ options: {
44
+ geojson: {
45
+ shape: 'object-row-table'
46
+ },
47
+ gis: {
48
+ format: 'geojson'
49
+ }
50
+ }
46
51
  };
47
-
48
- export const _typecheckNDJSONLoader: LoaderWithParser = NDJSONLoader;
package/dist/bundle.js DELETED
@@ -1,5 +0,0 @@
1
- "use strict";
2
- // @ts-nocheck
3
- const moduleExports = require('./index');
4
- globalThis.loaders = globalThis.loaders || {};
5
- module.exports = Object.assign(globalThis.loaders, moduleExports);
@@ -1 +0,0 @@
1
- {"version":3,"file":"encode-utils.js","names":["_schema","require","detectGeometryColumnIndex","table","_table$schema$fields$","_table$schema","geometryIndex","schema","fields","findIndex","field","name","getTableLength","row","getTableRowAsArray","columnIndex","getTableNumCols","value","_typeof2","default","Error","getRowPropertyObject","excludeColumnIndices","arguments","length","undefined","properties","_table$schema2","columnName","includes"],"sources":["../../../../src/lib/encoders/encode-utils.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright 2022 Foursquare Labs, Inc.\n\nimport {Table, getTableLength, getTableNumCols, getTableRowAsArray} from '@loaders.gl/schema';\n\ntype Row = {[key: string]: unknown};\n\n/**\n * Attempts to identify which column contains geometry\n * Currently just returns name (key) of first object-valued column\n * @todo look for hints in schema metadata\n * @todo look for WKB\n */\nexport function detectGeometryColumnIndex(table: Table): number {\n // TODO - look for hints in schema metadata\n\n // look for a column named geometry\n const geometryIndex = table.schema?.fields.findIndex((field) => field.name === 'geometry') ?? -1;\n if (geometryIndex > -1) {\n return geometryIndex;\n }\n\n // look at the data\n // TODO - this drags in the indices\n if (getTableLength(table) > 0) {\n const row = getTableRowAsArray(table, 0);\n for (let columnIndex = 0; columnIndex < getTableNumCols(table); columnIndex++) {\n const value = row?.[columnIndex];\n if (value && typeof value === 'object') {\n return columnIndex;\n }\n }\n }\n\n throw new Error('Failed to detect geometry column');\n}\n\n/**\n * Return a row as a property (key/value) object, excluding selected columns\n */\nexport function getRowPropertyObject(\n table: Table,\n row: Row,\n excludeColumnIndices: number[] = []\n): {[columnName: string]: unknown} {\n const properties = {};\n for (let columnIndex = 0; columnIndex < getTableNumCols(table); ++columnIndex) {\n const columnName = table.schema?.fields[columnIndex].name;\n if (columnName && !excludeColumnIndices.includes(columnIndex)) {\n properties[columnName] = row[columnName];\n }\n }\n return properties;\n}\n"],"mappings":";;;;;;;;;AAGA,IAAAA,OAAA,GAAAC,OAAA;AAUO,SAASC,yBAAyBA,CAACC,KAAY,EAAU;EAAA,IAAAC,qBAAA,EAAAC,aAAA;EAI9D,IAAMC,aAAa,IAAAF,qBAAA,IAAAC,aAAA,GAAGF,KAAK,CAACI,MAAM,cAAAF,aAAA,uBAAZA,aAAA,CAAcG,MAAM,CAACC,SAAS,CAAC,UAACC,KAAK;IAAA,OAAKA,KAAK,CAACC,IAAI,KAAK,UAAU;EAAA,EAAC,cAAAP,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAC;EAChG,IAAIE,aAAa,GAAG,CAAC,CAAC,EAAE;IACtB,OAAOA,aAAa;EACtB;EAIA,IAAI,IAAAM,sBAAc,EAACT,KAAK,CAAC,GAAG,CAAC,EAAE;IAC7B,IAAMU,GAAG,GAAG,IAAAC,0BAAkB,EAACX,KAAK,EAAE,CAAC,CAAC;IACxC,KAAK,IAAIY,WAAW,GAAG,CAAC,EAAEA,WAAW,GAAG,IAAAC,uBAAe,EAACb,KAAK,CAAC,EAAEY,WAAW,EAAE,EAAE;MAC7E,IAAME,KAAK,GAAGJ,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAGE,WAAW,CAAC;MAChC,IAAIE,KAAK,IAAI,IAAAC,QAAA,CAAAC,OAAA,EAAOF,KAAK,MAAK,QAAQ,EAAE;QACtC,OAAOF,WAAW;MACpB;IACF;EACF;EAEA,MAAM,IAAIK,KAAK,CAAC,kCAAkC,CAAC;AACrD;AAKO,SAASC,oBAAoBA,CAClClB,KAAY,EACZU,GAAQ,EAEyB;EAAA,IADjCS,oBAA8B,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EAEnC,IAAMG,UAAU,GAAG,CAAC,CAAC;EACrB,KAAK,IAAIX,WAAW,GAAG,CAAC,EAAEA,WAAW,GAAG,IAAAC,uBAAe,EAACb,KAAK,CAAC,EAAE,EAAEY,WAAW,EAAE;IAAA,IAAAY,cAAA;IAC7E,IAAMC,WAAU,IAAAD,cAAA,GAAGxB,KAAK,CAACI,MAAM,cAAAoB,cAAA,uBAAZA,cAAA,CAAcnB,MAAM,CAACO,WAAW,CAAC,CAACJ,IAAI;IACzD,IAAIiB,WAAU,IAAI,CAACN,oBAAoB,CAACO,QAAQ,CAACd,WAAW,CAAC,EAAE;MAC7DW,UAAU,CAACE,WAAU,CAAC,GAAGf,GAAG,CAACe,WAAU,CAAC;IAC1C;EACF;EACA,OAAOF,UAAU;AACnB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"utf8-encoder.js","names":["Utf8ArrayBufferEncoder","chunkSize","_classCallCheck2","default","_defineProperty2","TextEncoder","_createClass2","key","value","push","_len","arguments","length","strings","Array","_key","_i","_strings","string","totalLength","isFull","getArrayBufferBatch","textEncoder","encode","getStringBatch","buffer","stringChunk","join","exports"],"sources":["../../../../src/lib/encoders/utf8-encoder.ts"],"sourcesContent":["// loaders.gl, MIT License\n\n/* global TextEncoder */\nexport class Utf8ArrayBufferEncoder {\n private readonly chunkSize: number;\n private strings: string[] = [];\n private totalLength = 0;\n private textEncoder: TextEncoder = new TextEncoder();\n\n constructor(chunkSize: number) {\n this.chunkSize = chunkSize;\n }\n\n push(...strings: string[]): void {\n for (const string of strings) {\n this.strings.push(string);\n this.totalLength += string.length;\n }\n }\n\n isFull(): boolean {\n return this.totalLength >= this.chunkSize;\n }\n\n getArrayBufferBatch(): ArrayBufferLike {\n return this.textEncoder.encode(this.getStringBatch()).buffer;\n }\n\n getStringBatch(): string {\n const stringChunk = this.strings.join('');\n this.strings = [];\n this.totalLength = 0;\n return stringChunk;\n }\n}\n"],"mappings":";;;;;;;;;;IAGaA,sBAAsB;EAMjC,SAAAA,uBAAYC,SAAiB,EAAE;IAAA,IAAAC,gBAAA,CAAAC,OAAA,QAAAH,sBAAA;IAAA,IAAAI,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA,mBAJH,EAAE;IAAA,IAAAC,gBAAA,CAAAD,OAAA,uBACR,CAAC;IAAA,IAAAC,gBAAA,CAAAD,OAAA,uBACY,IAAIE,WAAW,CAAC,CAAC;IAGlD,IAAI,CAACJ,SAAS,GAAGA,SAAS;EAC5B;EAAC,IAAAK,aAAA,CAAAH,OAAA,EAAAH,sBAAA;IAAAO,GAAA;IAAAC,KAAA,EAED,SAAAC,KAAA,EAAiC;MAAA,SAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAAzBC,OAAO,OAAAC,KAAA,CAAAJ,IAAA,GAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;QAAPF,OAAO,CAAAE,IAAA,IAAAJ,SAAA,CAAAI,IAAA;MAAA;MACb,SAAAC,EAAA,MAAAC,QAAA,GAAqBJ,OAAO,EAAAG,EAAA,GAAAC,QAAA,CAAAL,MAAA,EAAAI,EAAA,IAAE;QAAzB,IAAME,MAAM,GAAAD,QAAA,CAAAD,EAAA;QACf,IAAI,CAACH,OAAO,CAACJ,IAAI,CAACS,MAAM,CAAC;QACzB,IAAI,CAACC,WAAW,IAAID,MAAM,CAACN,MAAM;MACnC;IACF;EAAC;IAAAL,GAAA;IAAAC,KAAA,EAED,SAAAY,OAAA,EAAkB;MAChB,OAAO,IAAI,CAACD,WAAW,IAAI,IAAI,CAAClB,SAAS;IAC3C;EAAC;IAAAM,GAAA;IAAAC,KAAA,EAED,SAAAa,oBAAA,EAAuC;MACrC,OAAO,IAAI,CAACC,WAAW,CAACC,MAAM,CAAC,IAAI,CAACC,cAAc,CAAC,CAAC,CAAC,CAACC,MAAM;IAC9D;EAAC;IAAAlB,GAAA;IAAAC,KAAA,EAED,SAAAgB,eAAA,EAAyB;MACvB,IAAME,WAAW,GAAG,IAAI,CAACb,OAAO,CAACc,IAAI,CAAC,EAAE,CAAC;MACzC,IAAI,CAACd,OAAO,GAAG,EAAE;MACjB,IAAI,CAACM,WAAW,GAAG,CAAC;MACpB,OAAOO,WAAW;IACpB;EAAC;EAAA,OAAA1B,sBAAA;AAAA;AAAA4B,OAAA,CAAA5B,sBAAA,GAAAA,sBAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"encode-utils.js","names":["getTableLength","getTableNumCols","getTableRowAsArray","detectGeometryColumnIndex","table","_table$schema$fields$","_table$schema","geometryIndex","schema","fields","findIndex","field","name","row","columnIndex","value","Error","getRowPropertyObject","excludeColumnIndices","arguments","length","undefined","properties","_table$schema2","columnName","includes"],"sources":["../../../../src/lib/encoders/encode-utils.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright 2022 Foursquare Labs, Inc.\n\nimport {Table, getTableLength, getTableNumCols, getTableRowAsArray} from '@loaders.gl/schema';\n\ntype Row = {[key: string]: unknown};\n\n/**\n * Attempts to identify which column contains geometry\n * Currently just returns name (key) of first object-valued column\n * @todo look for hints in schema metadata\n * @todo look for WKB\n */\nexport function detectGeometryColumnIndex(table: Table): number {\n // TODO - look for hints in schema metadata\n\n // look for a column named geometry\n const geometryIndex = table.schema?.fields.findIndex((field) => field.name === 'geometry') ?? -1;\n if (geometryIndex > -1) {\n return geometryIndex;\n }\n\n // look at the data\n // TODO - this drags in the indices\n if (getTableLength(table) > 0) {\n const row = getTableRowAsArray(table, 0);\n for (let columnIndex = 0; columnIndex < getTableNumCols(table); columnIndex++) {\n const value = row?.[columnIndex];\n if (value && typeof value === 'object') {\n return columnIndex;\n }\n }\n }\n\n throw new Error('Failed to detect geometry column');\n}\n\n/**\n * Return a row as a property (key/value) object, excluding selected columns\n */\nexport function getRowPropertyObject(\n table: Table,\n row: Row,\n excludeColumnIndices: number[] = []\n): {[columnName: string]: unknown} {\n const properties = {};\n for (let columnIndex = 0; columnIndex < getTableNumCols(table); ++columnIndex) {\n const columnName = table.schema?.fields[columnIndex].name;\n if (columnName && !excludeColumnIndices.includes(columnIndex)) {\n properties[columnName] = row[columnName];\n }\n }\n return properties;\n}\n"],"mappings":"AAGA,SAAeA,cAAc,EAAEC,eAAe,EAAEC,kBAAkB,QAAO,oBAAoB;AAU7F,OAAO,SAASC,yBAAyBA,CAACC,KAAY,EAAU;EAAA,IAAAC,qBAAA,EAAAC,aAAA;EAI9D,MAAMC,aAAa,IAAAF,qBAAA,IAAAC,aAAA,GAAGF,KAAK,CAACI,MAAM,cAAAF,aAAA,uBAAZA,aAAA,CAAcG,MAAM,CAACC,SAAS,CAAEC,KAAK,IAAKA,KAAK,CAACC,IAAI,KAAK,UAAU,CAAC,cAAAP,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAC;EAChG,IAAIE,aAAa,GAAG,CAAC,CAAC,EAAE;IACtB,OAAOA,aAAa;EACtB;EAIA,IAAIP,cAAc,CAACI,KAAK,CAAC,GAAG,CAAC,EAAE;IAC7B,MAAMS,GAAG,GAAGX,kBAAkB,CAACE,KAAK,EAAE,CAAC,CAAC;IACxC,KAAK,IAAIU,WAAW,GAAG,CAAC,EAAEA,WAAW,GAAGb,eAAe,CAACG,KAAK,CAAC,EAAEU,WAAW,EAAE,EAAE;MAC7E,MAAMC,KAAK,GAAGF,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAGC,WAAW,CAAC;MAChC,IAAIC,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;QACtC,OAAOD,WAAW;MACpB;IACF;EACF;EAEA,MAAM,IAAIE,KAAK,CAAC,kCAAkC,CAAC;AACrD;AAKA,OAAO,SAASC,oBAAoBA,CAClCb,KAAY,EACZS,GAAQ,EAEyB;EAAA,IADjCK,oBAA8B,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EAEnC,MAAMG,UAAU,GAAG,CAAC,CAAC;EACrB,KAAK,IAAIR,WAAW,GAAG,CAAC,EAAEA,WAAW,GAAGb,eAAe,CAACG,KAAK,CAAC,EAAE,EAAEU,WAAW,EAAE;IAAA,IAAAS,cAAA;IAC7E,MAAMC,UAAU,IAAAD,cAAA,GAAGnB,KAAK,CAACI,MAAM,cAAAe,cAAA,uBAAZA,cAAA,CAAcd,MAAM,CAACK,WAAW,CAAC,CAACF,IAAI;IACzD,IAAIY,UAAU,IAAI,CAACN,oBAAoB,CAACO,QAAQ,CAACX,WAAW,CAAC,EAAE;MAC7DQ,UAAU,CAACE,UAAU,CAAC,GAAGX,GAAG,CAACW,UAAU,CAAC;IAC1C;EACF;EACA,OAAOF,UAAU;AACnB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"utf8-encoder.js","names":["Utf8ArrayBufferEncoder","constructor","chunkSize","_defineProperty","TextEncoder","push","_len","arguments","length","strings","Array","_key","string","totalLength","isFull","getArrayBufferBatch","textEncoder","encode","getStringBatch","buffer","stringChunk","join"],"sources":["../../../../src/lib/encoders/utf8-encoder.ts"],"sourcesContent":["// loaders.gl, MIT License\n\n/* global TextEncoder */\nexport class Utf8ArrayBufferEncoder {\n private readonly chunkSize: number;\n private strings: string[] = [];\n private totalLength = 0;\n private textEncoder: TextEncoder = new TextEncoder();\n\n constructor(chunkSize: number) {\n this.chunkSize = chunkSize;\n }\n\n push(...strings: string[]): void {\n for (const string of strings) {\n this.strings.push(string);\n this.totalLength += string.length;\n }\n }\n\n isFull(): boolean {\n return this.totalLength >= this.chunkSize;\n }\n\n getArrayBufferBatch(): ArrayBufferLike {\n return this.textEncoder.encode(this.getStringBatch()).buffer;\n }\n\n getStringBatch(): string {\n const stringChunk = this.strings.join('');\n this.strings = [];\n this.totalLength = 0;\n return stringChunk;\n }\n}\n"],"mappings":";AAGA,OAAO,MAAMA,sBAAsB,CAAC;EAMlCC,WAAWA,CAACC,SAAiB,EAAE;IAAAC,eAAA;IAAAA,eAAA,kBAJH,EAAE;IAAAA,eAAA,sBACR,CAAC;IAAAA,eAAA,sBACY,IAAIC,WAAW,CAAC,CAAC;IAGlD,IAAI,CAACF,SAAS,GAAGA,SAAS;EAC5B;EAEAG,IAAIA,CAAA,EAA6B;IAAA,SAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAAzBC,OAAO,OAAAC,KAAA,CAAAJ,IAAA,GAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;MAAPF,OAAO,CAAAE,IAAA,IAAAJ,SAAA,CAAAI,IAAA;IAAA;IACb,KAAK,MAAMC,MAAM,IAAIH,OAAO,EAAE;MAC5B,IAAI,CAACA,OAAO,CAACJ,IAAI,CAACO,MAAM,CAAC;MACzB,IAAI,CAACC,WAAW,IAAID,MAAM,CAACJ,MAAM;IACnC;EACF;EAEAM,MAAMA,CAAA,EAAY;IAChB,OAAO,IAAI,CAACD,WAAW,IAAI,IAAI,CAACX,SAAS;EAC3C;EAEAa,mBAAmBA,CAAA,EAAoB;IACrC,OAAO,IAAI,CAACC,WAAW,CAACC,MAAM,CAAC,IAAI,CAACC,cAAc,CAAC,CAAC,CAAC,CAACC,MAAM;EAC9D;EAEAD,cAAcA,CAAA,EAAW;IACvB,MAAME,WAAW,GAAG,IAAI,CAACX,OAAO,CAACY,IAAI,CAAC,EAAE,CAAC;IACzC,IAAI,CAACZ,OAAO,GAAG,EAAE;IACjB,IAAI,CAACI,WAAW,GAAG,CAAC;IACpB,OAAOO,WAAW;EACpB;AACF"}
@@ -1,77 +0,0 @@
1
- "use strict";
2
- // loaders.gl, MIT license
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.GeoJSONLoader = exports.GeoJSONWorkerLoader = void 0;
5
- const gis_1 = require("@loaders.gl/gis");
6
- const parse_json_1 = require("./lib/parsers/parse-json");
7
- const parse_json_in_batches_1 = require("./lib/parsers/parse-json-in-batches");
8
- // __VERSION__ is injected by babel-plugin-version-inline
9
- // @ts-ignore TS2304: Cannot find name '__VERSION__'.
10
- const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
11
- const DEFAULT_GEOJSON_LOADER_OPTIONS = {
12
- geojson: {
13
- shape: 'object-row-table'
14
- },
15
- json: {
16
- jsonpaths: ['$', '$.features']
17
- },
18
- gis: {
19
- format: 'geojson'
20
- }
21
- };
22
- /**
23
- * GeoJSON loader
24
- */
25
- exports.GeoJSONWorkerLoader = {
26
- name: 'GeoJSON',
27
- id: 'geojson',
28
- module: 'geojson',
29
- version: VERSION,
30
- worker: true,
31
- extensions: ['geojson'],
32
- mimeTypes: ['application/geo+json'],
33
- category: 'geometry',
34
- text: true,
35
- options: DEFAULT_GEOJSON_LOADER_OPTIONS
36
- };
37
- exports.GeoJSONLoader = {
38
- ...exports.GeoJSONWorkerLoader,
39
- parse,
40
- parseTextSync,
41
- parseInBatches
42
- };
43
- async function parse(arrayBuffer, options) {
44
- return parseTextSync(new TextDecoder().decode(arrayBuffer), options);
45
- }
46
- function parseTextSync(text, options) {
47
- // Apps can call the parse method directly, we so apply default options here
48
- options = { ...DEFAULT_GEOJSON_LOADER_OPTIONS, ...options };
49
- options.json = { ...DEFAULT_GEOJSON_LOADER_OPTIONS.geojson, ...options.geojson };
50
- options.gis = options.gis || {};
51
- const table = (0, parse_json_1.parseJSONSync)(text, options);
52
- table.shape = 'geojson-row-table';
53
- switch (options.gis.format) {
54
- case 'binary':
55
- return (0, gis_1.geojsonToBinary)(table.data);
56
- default:
57
- return table;
58
- }
59
- }
60
- function parseInBatches(asyncIterator, options) {
61
- // Apps can call the parse method directly, we so apply default options here
62
- options = { ...DEFAULT_GEOJSON_LOADER_OPTIONS, ...options };
63
- options.json = { ...DEFAULT_GEOJSON_LOADER_OPTIONS.geojson, ...options.geojson };
64
- const geojsonIterator = (0, parse_json_in_batches_1.parseJSONInBatches)(asyncIterator, options);
65
- switch (options.gis.format) {
66
- case 'binary':
67
- return makeBinaryGeometryIterator(geojsonIterator);
68
- default:
69
- return geojsonIterator;
70
- }
71
- }
72
- async function* makeBinaryGeometryIterator(geojsonIterator) {
73
- for await (const batch of geojsonIterator) {
74
- batch.data = (0, gis_1.geojsonToBinary)(batch.data);
75
- yield batch;
76
- }
77
- }
@@ -1,22 +0,0 @@
1
- "use strict";
2
- // loaders.gl, MIT license
3
- // Copyright Foursquare, Inc 20222
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.GeoJSONWriter = void 0;
6
- const geojson_encoder_1 = require("./lib/encoders/geojson-encoder");
7
- exports.GeoJSONWriter = {
8
- id: 'geojson',
9
- version: 'latest',
10
- module: 'geojson',
11
- name: 'GeoJSON',
12
- extensions: ['geojson'],
13
- mimeTypes: ['application/geo+json'],
14
- options: {
15
- geojson: {
16
- featureArray: false,
17
- geometryColumn: null
18
- }
19
- },
20
- text: true,
21
- encodeInBatches: (tableIterator, options) => (0, geojson_encoder_1.encodeTableAsGeojsonInBatches)(tableIterator, options)
22
- };