@loaders.gl/json 4.0.0-beta.1 → 4.0.0-beta.3

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 (119) hide show
  1. package/dist/{dist.min.js → dist.dev.js} +1603 -1561
  2. package/dist/{esm/geojson-loader.js → geojson-loader.js} +2 -2
  3. package/dist/geojson-loader.js.map +1 -0
  4. package/dist/geojson-worker.js +345 -179
  5. package/dist/{esm/geojson-writer.js → geojson-writer.js} +1 -1
  6. package/dist/geojson-writer.js.map +1 -0
  7. package/dist/index.cjs +1259 -0
  8. package/dist/index.js +9 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/{esm/json-loader.js → json-loader.js} +3 -3
  11. package/dist/json-loader.js.map +1 -0
  12. package/dist/{esm/json-writer.js → json-writer.js} +1 -1
  13. package/dist/json-writer.js.map +1 -0
  14. package/dist/{esm/lib → lib}/clarinet/clarinet.js +33 -34
  15. package/dist/lib/clarinet/clarinet.js.map +1 -0
  16. package/dist/{esm/lib → lib}/encoder-utils/encode-table-row.js +1 -1
  17. package/dist/lib/encoder-utils/encode-table-row.js.map +1 -0
  18. package/dist/lib/encoder-utils/encode-utils.js.map +1 -0
  19. package/dist/{esm/lib → lib}/encoder-utils/utf8-encoder.js +4 -5
  20. package/dist/lib/encoder-utils/utf8-encoder.js.map +1 -0
  21. package/dist/{esm/lib → lib}/encoders/geojson-encoder.js +3 -3
  22. package/dist/lib/encoders/geojson-encoder.js.map +1 -0
  23. package/dist/{esm/lib → lib}/encoders/json-encoder.js +1 -1
  24. package/dist/lib/encoders/json-encoder.js.map +1 -0
  25. package/dist/{esm/lib → lib}/json-parser/json-parser.js +8 -9
  26. package/dist/lib/json-parser/json-parser.js.map +1 -0
  27. package/dist/{esm/lib → lib}/json-parser/streaming-json-parser.js +6 -7
  28. package/dist/lib/json-parser/streaming-json-parser.js.map +1 -0
  29. package/dist/{esm/lib → lib}/jsonpath/jsonpath.js +1 -2
  30. package/dist/lib/jsonpath/jsonpath.js.map +1 -0
  31. package/dist/{esm/lib → lib}/parsers/parse-json-in-batches.js +2 -2
  32. package/dist/lib/parsers/parse-json-in-batches.js.map +1 -0
  33. package/dist/lib/parsers/parse-json.js.map +1 -0
  34. package/dist/{esm/lib → lib}/parsers/parse-ndjson-in-batches.js +1 -1
  35. package/dist/lib/parsers/parse-ndjson-in-batches.js.map +1 -0
  36. package/dist/{esm/lib → lib}/parsers/parse-ndjson.js +1 -1
  37. package/dist/lib/parsers/parse-ndjson.js.map +1 -0
  38. package/dist/{esm/ndgeoson-loader.js → ndgeoson-loader.js} +3 -3
  39. package/dist/ndgeoson-loader.js.map +1 -0
  40. package/dist/{esm/ndjson-loader.js → ndjson-loader.js} +3 -3
  41. package/dist/ndjson-loader.js.map +1 -0
  42. package/dist/{esm/workers → workers}/geojson-worker.js +1 -1
  43. package/dist/workers/geojson-worker.js.map +1 -0
  44. package/package.json +17 -9
  45. package/dist/bundle.d.ts +0 -2
  46. package/dist/bundle.d.ts.map +0 -1
  47. package/dist/es5/bundle.js +0 -6
  48. package/dist/es5/bundle.js.map +0 -1
  49. package/dist/es5/geojson-loader.js +0 -166
  50. package/dist/es5/geojson-loader.js.map +0 -1
  51. package/dist/es5/geojson-writer.js +0 -27
  52. package/dist/es5/geojson-writer.js.map +0 -1
  53. package/dist/es5/index.js +0 -69
  54. package/dist/es5/index.js.map +0 -1
  55. package/dist/es5/json-loader.js +0 -67
  56. package/dist/es5/json-loader.js.map +0 -1
  57. package/dist/es5/json-writer.js +0 -42
  58. package/dist/es5/json-writer.js.map +0 -1
  59. package/dist/es5/lib/clarinet/clarinet.js +0 -446
  60. package/dist/es5/lib/clarinet/clarinet.js.map +0 -1
  61. package/dist/es5/lib/encoder-utils/encode-table-row.js +0 -54
  62. package/dist/es5/lib/encoder-utils/encode-table-row.js.map +0 -1
  63. package/dist/es5/lib/encoder-utils/encode-utils.js +0 -42
  64. package/dist/es5/lib/encoder-utils/encode-utils.js.map +0 -1
  65. package/dist/es5/lib/encoder-utils/utf8-encoder.js +0 -54
  66. package/dist/es5/lib/encoder-utils/utf8-encoder.js.map +0 -1
  67. package/dist/es5/lib/encoders/geojson-encoder.js +0 -141
  68. package/dist/es5/lib/encoders/geojson-encoder.js.map +0 -1
  69. package/dist/es5/lib/encoders/json-encoder.js +0 -30
  70. package/dist/es5/lib/encoders/json-encoder.js.map +0 -1
  71. package/dist/es5/lib/json-parser/json-parser.js +0 -140
  72. package/dist/es5/lib/json-parser/json-parser.js.map +0 -1
  73. package/dist/es5/lib/json-parser/streaming-json-parser.js +0 -123
  74. package/dist/es5/lib/json-parser/streaming-json-parser.js.map +0 -1
  75. package/dist/es5/lib/jsonpath/jsonpath.js +0 -119
  76. package/dist/es5/lib/jsonpath/jsonpath.js.map +0 -1
  77. package/dist/es5/lib/parsers/parse-json-in-batches.js +0 -206
  78. package/dist/es5/lib/parsers/parse-json-in-batches.js.map +0 -1
  79. package/dist/es5/lib/parsers/parse-json.js +0 -38
  80. package/dist/es5/lib/parsers/parse-json.js.map +0 -1
  81. package/dist/es5/lib/parsers/parse-ndjson-in-batches.js +0 -114
  82. package/dist/es5/lib/parsers/parse-ndjson-in-batches.js.map +0 -1
  83. package/dist/es5/lib/parsers/parse-ndjson.js +0 -19
  84. package/dist/es5/lib/parsers/parse-ndjson.js.map +0 -1
  85. package/dist/es5/ndgeoson-loader.js +0 -51
  86. package/dist/es5/ndgeoson-loader.js.map +0 -1
  87. package/dist/es5/ndjson-loader.js +0 -44
  88. package/dist/es5/ndjson-loader.js.map +0 -1
  89. package/dist/es5/workers/geojson-worker.js +0 -6
  90. package/dist/es5/workers/geojson-worker.js.map +0 -1
  91. package/dist/esm/bundle.js +0 -4
  92. package/dist/esm/bundle.js.map +0 -1
  93. package/dist/esm/geojson-loader.js.map +0 -1
  94. package/dist/esm/geojson-writer.js.map +0 -1
  95. package/dist/esm/index.js +0 -9
  96. package/dist/esm/index.js.map +0 -1
  97. package/dist/esm/json-loader.js.map +0 -1
  98. package/dist/esm/json-writer.js.map +0 -1
  99. package/dist/esm/lib/clarinet/LICENSE +0 -28
  100. package/dist/esm/lib/clarinet/clarinet.js.map +0 -1
  101. package/dist/esm/lib/encoder-utils/encode-table-row.js.map +0 -1
  102. package/dist/esm/lib/encoder-utils/encode-utils.js.map +0 -1
  103. package/dist/esm/lib/encoder-utils/utf8-encoder.js.map +0 -1
  104. package/dist/esm/lib/encoders/geojson-encoder.js.map +0 -1
  105. package/dist/esm/lib/encoders/json-encoder.js.map +0 -1
  106. package/dist/esm/lib/json-parser/json-parser.js.map +0 -1
  107. package/dist/esm/lib/json-parser/streaming-json-parser.js.map +0 -1
  108. package/dist/esm/lib/jsonpath/jsonpath.js.map +0 -1
  109. package/dist/esm/lib/parsers/parse-json-in-batches.js.map +0 -1
  110. package/dist/esm/lib/parsers/parse-json.js.map +0 -1
  111. package/dist/esm/lib/parsers/parse-ndjson-in-batches.js.map +0 -1
  112. package/dist/esm/lib/parsers/parse-ndjson.js.map +0 -1
  113. package/dist/esm/ndgeoson-loader.js.map +0 -1
  114. package/dist/esm/ndjson-loader.js.map +0 -1
  115. package/dist/esm/workers/geojson-worker.js.map +0 -1
  116. package/src/bundle.ts +0 -4
  117. /package/dist/{es5/lib → lib}/clarinet/LICENSE +0 -0
  118. /package/dist/{esm/lib → lib}/encoder-utils/encode-utils.js +0 -0
  119. /package/dist/{esm/lib → lib}/parsers/parse-json.js +0 -0
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ export { JSONLoader } from "./json-loader.js";
2
+ export { NDJSONLoader } from "./ndjson-loader.js";
3
+ export { JSONWriter } from "./json-writer.js";
4
+ export { GeoJSONLoader as _GeoJSONLoader, GeoJSONWorkerLoader as _GeoJSONWorkerLoader } from "./geojson-loader.js";
5
+ export { GeoJSONWriter as _GeoJSONWriter } from "./geojson-writer.js";
6
+ export { default as _JSONPath } from "./lib/jsonpath/jsonpath.js";
7
+ export { default as _ClarinetParser } from "./lib/clarinet/clarinet.js";
8
+ export { rebuildJsonObject as _rebuildJsonObject } from "./lib/parsers/parse-json-in-batches.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["JSONLoader","NDJSONLoader","JSONWriter","GeoJSONLoader","_GeoJSONLoader","GeoJSONWorkerLoader","_GeoJSONWorkerLoader","GeoJSONWriter","_GeoJSONWriter","default","_JSONPath","_ClarinetParser","rebuildJsonObject","_rebuildJsonObject"],"sources":["../src/index.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nexport type {JSONLoaderOptions} from './json-loader';\nexport {JSONLoader} from './json-loader';\nexport {NDJSONLoader} from './ndjson-loader';\n\nexport type {JSONWriterOptions} from './json-writer';\nexport {JSONWriter} from './json-writer';\n\n// EXPERIMENTAL EXPORTS - WARNING: MAY BE REMOVED WIHTOUT NOTICE IN FUTURE RELEASES\nexport type {GeoJSONLoaderOptions as _GeoJSONLoaderOptions} from './geojson-loader';\nexport {\n GeoJSONLoader as _GeoJSONLoader,\n GeoJSONWorkerLoader as _GeoJSONWorkerLoader\n} from './geojson-loader';\n\nexport type {GeoJSONWriterOptions as _GeoJSONWriterOptions} from './geojson-writer';\nexport {GeoJSONWriter as _GeoJSONWriter} from './geojson-writer';\n\nexport {default as _JSONPath} from './lib/jsonpath/jsonpath';\nexport {default as _ClarinetParser} from './lib/clarinet/clarinet';\n\nexport {rebuildJsonObject as _rebuildJsonObject} from './lib/parsers/parse-json-in-batches';\n"],"mappings":"SAGQA,UAAU;AAAA,SACVC,YAAY;AAAA,SAGZC,UAAU;AAAA,SAKhBC,aAAa,IAAIC,cAAc,EAC/BC,mBAAmB,IAAIC,oBAAoB;AAAA,SAIrCC,aAAa,IAAIC,cAAc;AAAA,SAE/BC,OAAO,IAAIC,SAAS;AAAA,SACpBD,OAAO,IAAIE,eAAe;AAAA,SAE1BC,iBAAiB,IAAIC,kBAAkB"}
@@ -1,6 +1,6 @@
1
- import { parseJSONSync } from './lib/parsers/parse-json';
2
- import { parseJSONInBatches } from './lib/parsers/parse-json-in-batches';
3
- const VERSION = typeof "4.0.0-beta.1" !== 'undefined' ? "4.0.0-beta.1" : 'latest';
1
+ import { parseJSONSync } from "./lib/parsers/parse-json.js";
2
+ import { parseJSONInBatches } from "./lib/parsers/parse-json-in-batches.js";
3
+ const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
4
4
  const DEFAULT_JSON_LOADER_OPTIONS = {
5
5
  json: {
6
6
  shape: 'object-row-table',
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-loader.js","names":["parseJSONSync","parseJSONInBatches","VERSION","__VERSION__","DEFAULT_JSON_LOADER_OPTIONS","json","shape","table","jsonpaths","JSONLoader","name","id","module","version","extensions","mimeTypes","category","text","parse","parseTextSync","parseInBatches","options","arrayBuffer","TextDecoder","decode","jsonOptions","asyncIterator"],"sources":["../src/json-loader.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport type {Table, TableBatch} from '@loaders.gl/schema';\nimport type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {parseJSONSync} from './lib/parsers/parse-json';\nimport {parseJSONInBatches} from './lib/parsers/parse-json-in-batches';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\ntype ParseJSONOptions = {\n shape: 'object-row-table'; // TODO - 'auto'?\n table?: boolean;\n jsonpaths?: string[];\n};\n\n/**\n * @param table -\n * @param jsonpaths -\n */\nexport type JSONLoaderOptions = LoaderOptions & {\n json?: ParseJSONOptions;\n};\n\nconst DEFAULT_JSON_LOADER_OPTIONS: {json: Required<ParseJSONOptions>} = {\n json: {\n shape: 'object-row-table',\n table: false,\n jsonpaths: []\n // batchSize: 'auto'\n }\n};\n\nexport const JSONLoader: LoaderWithParser<Table, TableBatch, JSONLoaderOptions> = {\n name: 'JSON',\n id: 'json',\n module: 'json',\n version: VERSION,\n extensions: ['json', 'geojson'],\n mimeTypes: ['application/json'],\n category: 'table',\n text: true,\n parse,\n parseTextSync,\n parseInBatches,\n options: DEFAULT_JSON_LOADER_OPTIONS\n};\n\nasync function parse(arrayBuffer: ArrayBuffer, options?: JSONLoaderOptions) {\n return parseTextSync(new TextDecoder().decode(arrayBuffer), options);\n}\n\nfunction parseTextSync(text: string, options?: JSONLoaderOptions) {\n const jsonOptions = {...options, json: {...DEFAULT_JSON_LOADER_OPTIONS.json, ...options?.json}};\n return parseJSONSync(text, jsonOptions as JSONLoaderOptions);\n}\n\nfunction parseInBatches(\n asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options?: JSONLoaderOptions\n): AsyncIterable<TableBatch> {\n const jsonOptions = {...options, json: {...DEFAULT_JSON_LOADER_OPTIONS.json, ...options?.json}};\n return parseJSONInBatches(asyncIterator, jsonOptions as JSONLoaderOptions);\n}\n"],"mappings":"SAIQA,aAAa;AAAA,SACbC,kBAAkB;AAI1B,MAAMC,OAAO,GAAG,OAAOC,WAAW,KAAK,WAAW,GAAGA,WAAW,GAAG,QAAQ;AAgB3E,MAAMC,2BAA+D,GAAG;EACtEC,IAAI,EAAE;IACJC,KAAK,EAAE,kBAAkB;IACzBC,KAAK,EAAE,KAAK;IACZC,SAAS,EAAE;EAEb;AACF,CAAC;AAED,OAAO,MAAMC,UAAkE,GAAG;EAChFC,IAAI,EAAE,MAAM;EACZC,EAAE,EAAE,MAAM;EACVC,MAAM,EAAE,MAAM;EACdC,OAAO,EAAEX,OAAO;EAChBY,UAAU,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;EAC/BC,SAAS,EAAE,CAAC,kBAAkB,CAAC;EAC/BC,QAAQ,EAAE,OAAO;EACjBC,IAAI,EAAE,IAAI;EACVC,KAAK;EACLC,aAAa;EACbC,cAAc;EACdC,OAAO,EAAEjB;AACX,CAAC;AAED,eAAec,KAAKA,CAACI,WAAwB,EAAED,OAA2B,EAAE;EAC1E,OAAOF,aAAa,CAAC,IAAII,WAAW,CAAC,CAAC,CAACC,MAAM,CAACF,WAAW,CAAC,EAAED,OAAO,CAAC;AACtE;AAEA,SAASF,aAAaA,CAACF,IAAY,EAAEI,OAA2B,EAAE;EAChE,MAAMI,WAAW,GAAG;IAAC,GAAGJ,OAAO;IAAEhB,IAAI,EAAE;MAAC,GAAGD,2BAA2B,CAACC,IAAI;MAAE,IAAGgB,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEhB,IAAI;IAAA;EAAC,CAAC;EAC/F,OAAOL,aAAa,CAACiB,IAAI,EAAEQ,WAAgC,CAAC;AAC9D;AAEA,SAASL,cAAcA,CACrBM,aAAiE,EACjEL,OAA2B,EACA;EAC3B,MAAMI,WAAW,GAAG;IAAC,GAAGJ,OAAO;IAAEhB,IAAI,EAAE;MAAC,GAAGD,2BAA2B,CAACC,IAAI;MAAE,IAAGgB,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEhB,IAAI;IAAA;EAAC,CAAC;EAC/F,OAAOJ,kBAAkB,CAACyB,aAAa,EAAED,WAAgC,CAAC;AAC5E"}
@@ -1,4 +1,4 @@
1
- import { encodeTableAsJSON } from './lib/encoders/json-encoder';
1
+ import { encodeTableAsJSON } from "./lib/encoders/json-encoder.js";
2
2
  export const JSONWriter = {
3
3
  id: 'json',
4
4
  version: 'latest',
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-writer.js","names":["encodeTableAsJSON","JSONWriter","id","version","module","name","extensions","mimeTypes","options","text","encode","table","TextEncoder","buffer","encodeTextSync"],"sources":["../src/json-writer.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright 2022 Foursquare Labs, Inc.\n\n/* global TextEncoder */\nimport type {Writer, WriterOptions} from '@loaders.gl/loader-utils';\nimport type {Table, TableBatch} from '@loaders.gl/schema';\nimport {encodeTableAsJSON} from './lib/encoders/json-encoder';\n\nexport type JSONWriterOptions = WriterOptions & {\n json?: {\n shape?: 'object-row-table' | 'array-row-table';\n wrapper?: (table: TableJSON) => unknown;\n };\n};\n\ntype RowArray = unknown[];\ntype RowObject = {[key: string]: unknown};\ntype TableJSON = RowArray[] | RowObject[];\n\nexport const JSONWriter: Writer<Table, TableBatch, JSONWriterOptions> = {\n id: 'json',\n version: 'latest',\n module: 'json',\n name: 'JSON',\n extensions: ['json'],\n mimeTypes: ['application/json'],\n options: {},\n text: true,\n encode: async (table: Table, options: JSONWriterOptions) =>\n new TextEncoder().encode(encodeTableAsJSON(table, options)).buffer,\n encodeTextSync: (table: Table, options: JSONWriterOptions) => encodeTableAsJSON(table, options)\n};\n"],"mappings":"SAMQA,iBAAiB;AAazB,OAAO,MAAMC,UAAwD,GAAG;EACtEC,EAAE,EAAE,MAAM;EACVC,OAAO,EAAE,QAAQ;EACjBC,MAAM,EAAE,MAAM;EACdC,IAAI,EAAE,MAAM;EACZC,UAAU,EAAE,CAAC,MAAM,CAAC;EACpBC,SAAS,EAAE,CAAC,kBAAkB,CAAC;EAC/BC,OAAO,EAAE,CAAC,CAAC;EACXC,IAAI,EAAE,IAAI;EACVC,MAAM,EAAE,MAAAA,CAAOC,KAAY,EAAEH,OAA0B,KACrD,IAAII,WAAW,CAAC,CAAC,CAACF,MAAM,CAACV,iBAAiB,CAACW,KAAK,EAAEH,OAAO,CAAC,CAAC,CAACK,MAAM;EACpEC,cAAc,EAAEA,CAACH,KAAY,EAAEH,OAA0B,KAAKR,iBAAiB,CAACW,KAAK,EAAEH,OAAO;AAChG,CAAC"}
@@ -1,4 +1,3 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
1
  const MAX_BUFFER_LENGTH = Number.MAX_SAFE_INTEGER;
3
2
  var STATE = function (STATE) {
4
3
  STATE[STATE["BEGIN"] = 0] = "BEGIN";
@@ -73,26 +72,26 @@ const DEFAULT_OPTIONS = {
73
72
  export default class ClarinetParser {
74
73
  constructor() {
75
74
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
76
- _defineProperty(this, "options", DEFAULT_OPTIONS);
77
- _defineProperty(this, "bufferCheckPosition", MAX_BUFFER_LENGTH);
78
- _defineProperty(this, "q", '');
79
- _defineProperty(this, "c", '');
80
- _defineProperty(this, "p", '');
81
- _defineProperty(this, "closed", false);
82
- _defineProperty(this, "closedRoot", false);
83
- _defineProperty(this, "sawRoot", false);
84
- _defineProperty(this, "error", null);
85
- _defineProperty(this, "state", STATE.BEGIN);
86
- _defineProperty(this, "stack", []);
87
- _defineProperty(this, "position", 0);
88
- _defineProperty(this, "column", 0);
89
- _defineProperty(this, "line", 1);
90
- _defineProperty(this, "slashed", false);
91
- _defineProperty(this, "unicodeI", 0);
92
- _defineProperty(this, "unicodeS", null);
93
- _defineProperty(this, "depth", 0);
94
- _defineProperty(this, "textNode", void 0);
95
- _defineProperty(this, "numberNode", void 0);
75
+ this.options = DEFAULT_OPTIONS;
76
+ this.bufferCheckPosition = MAX_BUFFER_LENGTH;
77
+ this.q = '';
78
+ this.c = '';
79
+ this.p = '';
80
+ this.closed = false;
81
+ this.closedRoot = false;
82
+ this.sawRoot = false;
83
+ this.error = null;
84
+ this.state = STATE.BEGIN;
85
+ this.stack = [];
86
+ this.position = 0;
87
+ this.column = 0;
88
+ this.line = 1;
89
+ this.slashed = false;
90
+ this.unicodeI = 0;
91
+ this.unicodeS = null;
92
+ this.depth = 0;
93
+ this.textNode = void 0;
94
+ this.numberNode = void 0;
96
95
  this.options = {
97
96
  ...DEFAULT_OPTIONS,
98
97
  ...options
@@ -302,43 +301,43 @@ export default class ClarinetParser {
302
301
  this.unicodeI = unicodeI;
303
302
  continue;
304
303
  case STATE.TRUE:
305
- if (c === Char.r) this.state = STATE.TRUE2;else this._error("Invalid true started with t".concat(c));
304
+ if (c === Char.r) this.state = STATE.TRUE2;else this._error(`Invalid true started with t${c}`);
306
305
  continue;
307
306
  case STATE.TRUE2:
308
- if (c === Char.u) this.state = STATE.TRUE3;else this._error("Invalid true started with tr".concat(c));
307
+ if (c === Char.u) this.state = STATE.TRUE3;else this._error(`Invalid true started with tr${c}`);
309
308
  continue;
310
309
  case STATE.TRUE3:
311
310
  if (c === Char.e) {
312
311
  this.emit('onvalue', true);
313
312
  this.state = this.stack.pop() || STATE.VALUE;
314
- } else this._error("Invalid true started with tru".concat(c));
313
+ } else this._error(`Invalid true started with tru${c}`);
315
314
  continue;
316
315
  case STATE.FALSE:
317
- if (c === Char.a) this.state = STATE.FALSE2;else this._error("Invalid false started with f".concat(c));
316
+ if (c === Char.a) this.state = STATE.FALSE2;else this._error(`Invalid false started with f${c}`);
318
317
  continue;
319
318
  case STATE.FALSE2:
320
- if (c === Char.l) this.state = STATE.FALSE3;else this._error("Invalid false started with fa".concat(c));
319
+ if (c === Char.l) this.state = STATE.FALSE3;else this._error(`Invalid false started with fa${c}`);
321
320
  continue;
322
321
  case STATE.FALSE3:
323
- if (c === Char.s) this.state = STATE.FALSE4;else this._error("Invalid false started with fal".concat(c));
322
+ if (c === Char.s) this.state = STATE.FALSE4;else this._error(`Invalid false started with fal${c}`);
324
323
  continue;
325
324
  case STATE.FALSE4:
326
325
  if (c === Char.e) {
327
326
  this.emit('onvalue', false);
328
327
  this.state = this.stack.pop() || STATE.VALUE;
329
- } else this._error("Invalid false started with fals".concat(c));
328
+ } else this._error(`Invalid false started with fals${c}`);
330
329
  continue;
331
330
  case STATE.NULL:
332
- if (c === Char.u) this.state = STATE.NULL2;else this._error("Invalid null started with n".concat(c));
331
+ if (c === Char.u) this.state = STATE.NULL2;else this._error(`Invalid null started with n${c}`);
333
332
  continue;
334
333
  case STATE.NULL2:
335
- if (c === Char.l) this.state = STATE.NULL3;else this._error("Invalid null started with nu".concat(c));
334
+ if (c === Char.l) this.state = STATE.NULL3;else this._error(`Invalid null started with nu${c}`);
336
335
  continue;
337
336
  case STATE.NULL3:
338
337
  if (c === Char.l) {
339
338
  this.emit('onvalue', null);
340
339
  this.state = this.stack.pop() || STATE.VALUE;
341
- } else this._error("Invalid null started with nul".concat(c));
340
+ } else this._error(`Invalid null started with nul${c}`);
342
341
  continue;
343
342
  case STATE.NUMBER_DECIMAL_POINT:
344
343
  if (c === Char.period) {
@@ -363,7 +362,7 @@ export default class ClarinetParser {
363
362
  }
364
363
  continue;
365
364
  default:
366
- this._error("Unknown state: ".concat(this.state));
365
+ this._error(`Unknown state: ${this.state}`);
367
366
  }
368
367
  }
369
368
  if (this.position >= this.bufferCheckPosition) {
@@ -386,7 +385,7 @@ export default class ClarinetParser {
386
385
  _error() {
387
386
  let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
388
387
  this._closeValue();
389
- message += "\nLine: ".concat(this.line, "\nColumn: ").concat(this.column, "\nChar: ").concat(this.c);
388
+ message += `\nLine: ${this.line}\nColumn: ${this.column}\nChar: ${this.c}`;
390
389
  const error = new Error(message);
391
390
  this.error = error;
392
391
  this.emit('onerror', error);
@@ -405,7 +404,7 @@ function checkBufferLength(parser) {
405
404
  case 'text':
406
405
  break;
407
406
  default:
408
- parser._error("Max buffer length exceeded: ".concat(buffer));
407
+ parser._error(`Max buffer length exceeded: ${buffer}`);
409
408
  }
410
409
  }
411
410
  maxActual = Math.max(maxActual, len);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clarinet.js","names":["MAX_BUFFER_LENGTH","Number","MAX_SAFE_INTEGER","STATE","Char","tab","lineFeed","carriageReturn","space","doubleQuote","plus","comma","minus","period","_0","_9","colon","E","openBracket","backslash","closeBracket","a","b","e","f","l","n","r","s","t","u","openBrace","closeBrace","stringTokenPattern","DEFAULT_OPTIONS","onready","onopenobject","onkey","oncloseobject","onopenarray","onclosearray","onvalue","onerror","onend","onchunkparsed","ClarinetParser","constructor","options","arguments","length","undefined","bufferCheckPosition","q","c","p","closed","closedRoot","sawRoot","error","state","BEGIN","stack","position","column","line","slashed","unicodeI","unicodeS","depth","textNode","numberNode","emit","end","VALUE","_error","_closeValue","resume","close","write","event","data","_this$options$event","_this$options","call","emitNode","chunk","i","charCodeAt","OPEN_OBJECT","OPEN_ARRAY","isWhitespace","OPEN_KEY","push","CLOSE_KEY","pop","CLOSE_OBJECT","STRING","CLOSE_ARRAY","TRUE","FALSE","NULL","String","fromCharCode","NUMBER_DIGIT","starti","STRING_BIGLOOP","parseInt","substring","lastIndex","reResult","exec","index","TRUE2","TRUE3","FALSE2","FALSE3","FALSE4","NULL2","NULL3","NUMBER_DECIMAL_POINT","indexOf","_closeNumber","checkBufferLength","parseFloat","message","Error","parser","maxAllowed","Math","max","maxActual","buffer","len"],"sources":["../../../src/lib/clarinet/clarinet.ts"],"sourcesContent":["// loaders.gl, MIT license\n// This is a fork of the clarinet library, originally BSD license (see LICENSE file)\n// loaders.gl changes:\n// - typescript port\n\nexport type ClarinetEvent =\n | 'onvalue'\n | 'onstring'\n | 'onkey'\n | 'onopenobject'\n | 'oncloseobject'\n | 'onopenarray'\n | 'onclosearray'\n | 'onerror'\n | 'onend'\n | 'onready';\n\n// Removes the MAX_BUFFER_LENGTH, originally set to 64 * 1024\nconst MAX_BUFFER_LENGTH = Number.MAX_SAFE_INTEGER;\n// const DEBUG = false;\n\nenum STATE {\n BEGIN = 0,\n VALUE, // general stuff\n OPEN_OBJECT, // {\n CLOSE_OBJECT, // }\n OPEN_ARRAY, // [\n CLOSE_ARRAY, // ]\n TEXT_ESCAPE, // \\ stuff\n STRING, // \"\"\n BACKSLASH,\n END, // No more stack\n OPEN_KEY, // , \"a\"\n CLOSE_KEY, // :\n TRUE, // r\n TRUE2, // u\n TRUE3, // e\n FALSE, // a\n FALSE2, // l\n FALSE3, // s\n FALSE4, // e\n NULL, // u\n NULL2, // l\n NULL3, // l\n NUMBER_DECIMAL_POINT, // .\n NUMBER_DIGIT // [0-9]\n}\n\nconst Char = {\n tab: 0x09, // \\t\n lineFeed: 0x0a, // \\n\n carriageReturn: 0x0d, // \\r\n space: 0x20, // \" \"\n\n doubleQuote: 0x22, // \"\n plus: 0x2b, // +\n comma: 0x2c, // ,\n minus: 0x2d, // -\n period: 0x2e, // .\n\n _0: 0x30, // 0\n _9: 0x39, // 9\n\n colon: 0x3a, // :\n\n E: 0x45, // E\n\n openBracket: 0x5b, // [\n backslash: 0x5c, // \\\n closeBracket: 0x5d, // ]\n\n a: 0x61, // a\n b: 0x62, // b\n e: 0x65, // e\n f: 0x66, // f\n l: 0x6c, // l\n n: 0x6e, // n\n r: 0x72, // r\n s: 0x73, // s\n t: 0x74, // t\n u: 0x75, // u\n\n openBrace: 0x7b, // {\n closeBrace: 0x7d // }\n};\n\nconst stringTokenPattern = /[\\\\\"\\n]/g;\n\ntype ParserEvent = (parser: ClarinetParser, event: string, data?: any) => void;\n\nexport type ClarinetParserOptions = {\n onready?: ParserEvent;\n onopenobject?: ParserEvent;\n onkey?: ParserEvent;\n oncloseobject?: ParserEvent;\n onopenarray?: ParserEvent;\n onclosearray?: ParserEvent;\n onvalue?: ParserEvent;\n onerror?: ParserEvent;\n onend?: ParserEvent;\n onchunkparsed?: ParserEvent;\n};\n\nconst DEFAULT_OPTIONS: Required<ClarinetParserOptions> = {\n onready: () => {},\n onopenobject: () => {},\n onkey: () => {},\n oncloseobject: () => {},\n onopenarray: () => {},\n onclosearray: () => {},\n onvalue: () => {},\n onerror: () => {},\n onend: () => {},\n onchunkparsed: () => {}\n};\nexport default class ClarinetParser {\n protected options: Required<ClarinetParserOptions> = DEFAULT_OPTIONS;\n\n bufferCheckPosition = MAX_BUFFER_LENGTH;\n q = '';\n c = '';\n p = '';\n closed = false;\n closedRoot = false;\n sawRoot = false;\n // tag = null;\n error: Error | null = null;\n state = STATE.BEGIN;\n stack: STATE[] = [];\n // mostly just for error reporting\n position: number = 0;\n column: number = 0;\n line: number = 1;\n slashed: boolean = false;\n unicodeI: number = 0;\n unicodeS: string | null = null;\n depth: number = 0;\n\n textNode;\n numberNode;\n\n constructor(options: ClarinetParserOptions = {}) {\n this.options = {...DEFAULT_OPTIONS, ...options};\n this.textNode = undefined;\n this.numberNode = '';\n this.emit('onready');\n }\n\n end() {\n if (this.state !== STATE.VALUE || this.depth !== 0) this._error('Unexpected end');\n\n this._closeValue();\n this.c = '';\n this.closed = true;\n this.emit('onend');\n return this;\n }\n\n resume() {\n this.error = null;\n return this;\n }\n\n close() {\n return this.write(null);\n }\n\n // protected\n\n emit(event: string, data?: any): void {\n // if (DEBUG) console.log('-- emit', event, data);\n this.options[event]?.(data, this);\n }\n\n emitNode(event: string, data?: any): void {\n this._closeValue();\n this.emit(event, data);\n }\n\n /* eslint-disable no-continue */\n // eslint-disable-next-line complexity, max-statements\n write(chunk) {\n if (this.error) {\n throw this.error;\n }\n if (this.closed) {\n return this._error('Cannot write after close. Assign an onready handler.');\n }\n if (chunk === null) {\n return this.end();\n }\n let i = 0;\n let c = chunk.charCodeAt(0);\n let p = this.p;\n // if (DEBUG) console.log(`write -> [${ chunk }]`);\n while (c) {\n p = c;\n this.c = c = chunk.charCodeAt(i++);\n // if chunk doesnt have next, like streaming char by char\n // this way we need to check if previous is really previous\n // if not we need to reset to what the this says is the previous\n // from buffer\n if (p !== c) {\n this.p = p;\n } else {\n p = this.p;\n }\n\n if (!c) break;\n\n // if (DEBUG) console.log(i, c, STATE[this.state]);\n this.position++;\n if (c === Char.lineFeed) {\n this.line++;\n this.column = 0;\n } else this.column++;\n\n switch (this.state) {\n case STATE.BEGIN:\n if (c === Char.openBrace) this.state = STATE.OPEN_OBJECT;\n else if (c === Char.openBracket) this.state = STATE.OPEN_ARRAY;\n else if (!isWhitespace(c)) {\n this._error('Non-whitespace before {[.');\n }\n continue;\n\n case STATE.OPEN_KEY:\n case STATE.OPEN_OBJECT:\n if (isWhitespace(c)) continue;\n if (this.state === STATE.OPEN_KEY) this.stack.push(STATE.CLOSE_KEY);\n else if (c === Char.closeBrace) {\n this.emit('onopenobject');\n this.depth++;\n this.emit('oncloseobject');\n this.depth--;\n this.state = this.stack.pop() || STATE.VALUE;\n continue;\n } else this.stack.push(STATE.CLOSE_OBJECT);\n if (c === Char.doubleQuote) this.state = STATE.STRING;\n else this._error('Malformed object key should start with \"');\n continue;\n\n case STATE.CLOSE_KEY:\n case STATE.CLOSE_OBJECT:\n if (isWhitespace(c)) continue;\n // let event = this.state === STATE.CLOSE_KEY ? 'key' : 'object';\n if (c === Char.colon) {\n if (this.state === STATE.CLOSE_OBJECT) {\n this.stack.push(STATE.CLOSE_OBJECT);\n this._closeValue('onopenobject');\n this.depth++;\n } else this._closeValue('onkey');\n this.state = STATE.VALUE;\n } else if (c === Char.closeBrace) {\n this.emitNode('oncloseobject');\n this.depth--;\n this.state = this.stack.pop() || STATE.VALUE;\n } else if (c === Char.comma) {\n if (this.state === STATE.CLOSE_OBJECT) this.stack.push(STATE.CLOSE_OBJECT);\n this._closeValue();\n this.state = STATE.OPEN_KEY;\n } else this._error('Bad object');\n continue;\n\n case STATE.OPEN_ARRAY: // after an array there always a value\n case STATE.VALUE:\n if (isWhitespace(c)) continue;\n if (this.state === STATE.OPEN_ARRAY) {\n this.emit('onopenarray');\n this.depth++;\n this.state = STATE.VALUE;\n if (c === Char.closeBracket) {\n this.emit('onclosearray');\n this.depth--;\n this.state = this.stack.pop() || STATE.VALUE;\n continue;\n } else {\n this.stack.push(STATE.CLOSE_ARRAY);\n }\n }\n if (c === Char.doubleQuote) this.state = STATE.STRING;\n else if (c === Char.openBrace) this.state = STATE.OPEN_OBJECT;\n else if (c === Char.openBracket) this.state = STATE.OPEN_ARRAY;\n else if (c === Char.t) this.state = STATE.TRUE;\n else if (c === Char.f) this.state = STATE.FALSE;\n else if (c === Char.n) this.state = STATE.NULL;\n else if (c === Char.minus) {\n // keep and continue\n this.numberNode += '-';\n } else if (Char._0 <= c && c <= Char._9) {\n this.numberNode += String.fromCharCode(c);\n this.state = STATE.NUMBER_DIGIT;\n } else this._error('Bad value');\n continue;\n\n case STATE.CLOSE_ARRAY:\n if (c === Char.comma) {\n this.stack.push(STATE.CLOSE_ARRAY);\n this._closeValue('onvalue');\n this.state = STATE.VALUE;\n } else if (c === Char.closeBracket) {\n this.emitNode('onclosearray');\n this.depth--;\n this.state = this.stack.pop() || STATE.VALUE;\n } else if (isWhitespace(c)) continue;\n else this._error('Bad array');\n continue;\n\n case STATE.STRING:\n if (this.textNode === undefined) {\n this.textNode = '';\n }\n\n // thanks thejh, this is an about 50% performance improvement.\n let starti = i - 1;\n let slashed = this.slashed;\n let unicodeI = this.unicodeI;\n // eslint-disable-next-line no-constant-condition, no-labels\n STRING_BIGLOOP: while (true) {\n // if (DEBUG) console.log(i, c, STATE[this.state], slashed);\n // zero means \"no unicode active\". 1-4 mean \"parse some more\". end after 4.\n while (unicodeI > 0) {\n this.unicodeS += String.fromCharCode(c);\n c = chunk.charCodeAt(i++);\n this.position++;\n if (unicodeI === 4) {\n // TODO this might be slow? well, probably not used too often anyway\n this.textNode += String.fromCharCode(parseInt(this.unicodeS as string, 16));\n unicodeI = 0;\n starti = i - 1;\n } else {\n unicodeI++;\n }\n // we can just break here: no stuff we skipped that still has to be sliced out or so\n // eslint-disable-next-line no-labels\n if (!c) break STRING_BIGLOOP;\n }\n if (c === Char.doubleQuote && !slashed) {\n this.state = this.stack.pop() || STATE.VALUE;\n this.textNode += chunk.substring(starti, i - 1);\n this.position += i - 1 - starti;\n break;\n }\n if (c === Char.backslash && !slashed) {\n slashed = true;\n this.textNode += chunk.substring(starti, i - 1);\n this.position += i - 1 - starti;\n c = chunk.charCodeAt(i++);\n this.position++;\n if (!c) break;\n }\n if (slashed) {\n slashed = false;\n if (c === Char.n) {\n this.textNode += '\\n';\n } else if (c === Char.r) {\n this.textNode += '\\r';\n } else if (c === Char.t) {\n this.textNode += '\\t';\n } else if (c === Char.f) {\n this.textNode += '\\f';\n } else if (c === Char.b) {\n this.textNode += '\\b';\n } else if (c === Char.u) {\n // \\uxxxx. meh!\n unicodeI = 1;\n this.unicodeS = '';\n } else {\n this.textNode += String.fromCharCode(c);\n }\n c = chunk.charCodeAt(i++);\n this.position++;\n starti = i - 1;\n if (!c) break;\n else continue;\n }\n\n stringTokenPattern.lastIndex = i;\n const reResult = stringTokenPattern.exec(chunk);\n if (reResult === null) {\n i = chunk.length + 1;\n this.textNode += chunk.substring(starti, i - 1);\n this.position += i - 1 - starti;\n break;\n }\n i = reResult.index + 1;\n c = chunk.charCodeAt(reResult.index);\n if (!c) {\n this.textNode += chunk.substring(starti, i - 1);\n this.position += i - 1 - starti;\n break;\n }\n }\n this.slashed = slashed;\n this.unicodeI = unicodeI;\n continue;\n\n case STATE.TRUE:\n if (c === Char.r) this.state = STATE.TRUE2;\n else this._error(`Invalid true started with t${c}`);\n continue;\n\n case STATE.TRUE2:\n if (c === Char.u) this.state = STATE.TRUE3;\n else this._error(`Invalid true started with tr${c}`);\n continue;\n\n case STATE.TRUE3:\n if (c === Char.e) {\n this.emit('onvalue', true);\n this.state = this.stack.pop() || STATE.VALUE;\n } else this._error(`Invalid true started with tru${c}`);\n continue;\n\n case STATE.FALSE:\n if (c === Char.a) this.state = STATE.FALSE2;\n else this._error(`Invalid false started with f${c}`);\n continue;\n\n case STATE.FALSE2:\n if (c === Char.l) this.state = STATE.FALSE3;\n else this._error(`Invalid false started with fa${c}`);\n continue;\n\n case STATE.FALSE3:\n if (c === Char.s) this.state = STATE.FALSE4;\n else this._error(`Invalid false started with fal${c}`);\n continue;\n\n case STATE.FALSE4:\n if (c === Char.e) {\n this.emit('onvalue', false);\n this.state = this.stack.pop() || STATE.VALUE;\n } else this._error(`Invalid false started with fals${c}`);\n continue;\n\n case STATE.NULL:\n if (c === Char.u) this.state = STATE.NULL2;\n else this._error(`Invalid null started with n${c}`);\n continue;\n\n case STATE.NULL2:\n if (c === Char.l) this.state = STATE.NULL3;\n else this._error(`Invalid null started with nu${c}`);\n continue;\n\n case STATE.NULL3:\n if (c === Char.l) {\n this.emit('onvalue', null);\n this.state = this.stack.pop() || STATE.VALUE;\n } else this._error(`Invalid null started with nul${c}`);\n continue;\n\n case STATE.NUMBER_DECIMAL_POINT:\n if (c === Char.period) {\n this.numberNode += '.';\n this.state = STATE.NUMBER_DIGIT;\n } else this._error('Leading zero not followed by .');\n continue;\n\n case STATE.NUMBER_DIGIT:\n if (Char._0 <= c && c <= Char._9) this.numberNode += String.fromCharCode(c);\n else if (c === Char.period) {\n if (this.numberNode.indexOf('.') !== -1) this._error('Invalid number has two dots');\n this.numberNode += '.';\n } else if (c === Char.e || c === Char.E) {\n if (this.numberNode.indexOf('e') !== -1 || this.numberNode.indexOf('E') !== -1)\n this._error('Invalid number has two exponential');\n this.numberNode += 'e';\n } else if (c === Char.plus || c === Char.minus) {\n // @ts-expect-error\n if (!(p === Char.e || p === Char.E)) this._error('Invalid symbol in number');\n this.numberNode += String.fromCharCode(c);\n } else {\n this._closeNumber();\n i--; // go back one\n this.state = this.stack.pop() || STATE.VALUE;\n }\n continue;\n\n default:\n this._error(`Unknown state: ${this.state}`);\n }\n }\n if (this.position >= this.bufferCheckPosition) {\n checkBufferLength(this);\n }\n\n this.emit('onchunkparsed');\n\n return this;\n }\n\n _closeValue(event: string = 'onvalue'): void {\n if (this.textNode !== undefined) {\n this.emit(event, this.textNode);\n }\n this.textNode = undefined;\n }\n\n _closeNumber(): void {\n if (this.numberNode) this.emit('onvalue', parseFloat(this.numberNode));\n this.numberNode = '';\n }\n\n _error(message: string = ''): void {\n this._closeValue();\n message += `\\nLine: ${this.line}\\nColumn: ${this.column}\\nChar: ${this.c}`;\n const error = new Error(message);\n this.error = error;\n this.emit('onerror', error);\n }\n}\n\nfunction isWhitespace(c): boolean {\n return c === Char.carriageReturn || c === Char.lineFeed || c === Char.space || c === Char.tab;\n}\n\nfunction checkBufferLength(parser) {\n const maxAllowed = Math.max(MAX_BUFFER_LENGTH, 10);\n let maxActual = 0;\n\n for (const buffer of ['textNode', 'numberNode']) {\n const len = parser[buffer] === undefined ? 0 : parser[buffer].length;\n if (len > maxAllowed) {\n switch (buffer) {\n case 'text':\n // TODO - should this be closeValue?\n // closeText(parser);\n break;\n\n default:\n parser._error(`Max buffer length exceeded: ${buffer}`);\n }\n }\n maxActual = Math.max(maxActual, len);\n }\n parser.bufferCheckPosition = MAX_BUFFER_LENGTH - maxActual + parser.position;\n}\n"],"mappings":"AAkBA,MAAMA,iBAAiB,GAAGC,MAAM,CAACC,gBAAgB;AAAC,IAG7CC,KAAK,aAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAALA,KAAK,CAALA,KAAK;EAAA,OAALA,KAAK;AAAA,EAALA,KAAK;AA2BV,MAAMC,IAAI,GAAG;EACXC,GAAG,EAAE,IAAI;EACTC,QAAQ,EAAE,IAAI;EACdC,cAAc,EAAE,IAAI;EACpBC,KAAK,EAAE,IAAI;EAEXC,WAAW,EAAE,IAAI;EACjBC,IAAI,EAAE,IAAI;EACVC,KAAK,EAAE,IAAI;EACXC,KAAK,EAAE,IAAI;EACXC,MAAM,EAAE,IAAI;EAEZC,EAAE,EAAE,IAAI;EACRC,EAAE,EAAE,IAAI;EAERC,KAAK,EAAE,IAAI;EAEXC,CAAC,EAAE,IAAI;EAEPC,WAAW,EAAE,IAAI;EACjBC,SAAS,EAAE,IAAI;EACfC,YAAY,EAAE,IAAI;EAElBC,CAAC,EAAE,IAAI;EACPC,CAAC,EAAE,IAAI;EACPC,CAAC,EAAE,IAAI;EACPC,CAAC,EAAE,IAAI;EACPC,CAAC,EAAE,IAAI;EACPC,CAAC,EAAE,IAAI;EACPC,CAAC,EAAE,IAAI;EACPC,CAAC,EAAE,IAAI;EACPC,CAAC,EAAE,IAAI;EACPC,CAAC,EAAE,IAAI;EAEPC,SAAS,EAAE,IAAI;EACfC,UAAU,EAAE;AACd,CAAC;AAED,MAAMC,kBAAkB,GAAG,UAAU;AAiBrC,MAAMC,eAAgD,GAAG;EACvDC,OAAO,EAAEA,CAAA,KAAM,CAAC,CAAC;EACjBC,YAAY,EAAEA,CAAA,KAAM,CAAC,CAAC;EACtBC,KAAK,EAAEA,CAAA,KAAM,CAAC,CAAC;EACfC,aAAa,EAAEA,CAAA,KAAM,CAAC,CAAC;EACvBC,WAAW,EAAEA,CAAA,KAAM,CAAC,CAAC;EACrBC,YAAY,EAAEA,CAAA,KAAM,CAAC,CAAC;EACtBC,OAAO,EAAEA,CAAA,KAAM,CAAC,CAAC;EACjBC,OAAO,EAAEA,CAAA,KAAM,CAAC,CAAC;EACjBC,KAAK,EAAEA,CAAA,KAAM,CAAC,CAAC;EACfC,aAAa,EAAEA,CAAA,KAAM,CAAC;AACxB,CAAC;AACD,eAAe,MAAMC,cAAc,CAAC;EA0BlCC,WAAWA,CAAA,EAAsC;IAAA,IAArCC,OAA8B,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IAAA,KAzBrCD,OAAO,GAAoCb,eAAe;IAAA,KAEpEiB,mBAAmB,GAAGnD,iBAAiB;IAAA,KACvCoD,CAAC,GAAG,EAAE;IAAA,KACNC,CAAC,GAAG,EAAE;IAAA,KACNC,CAAC,GAAG,EAAE;IAAA,KACNC,MAAM,GAAG,KAAK;IAAA,KACdC,UAAU,GAAG,KAAK;IAAA,KAClBC,OAAO,GAAG,KAAK;IAAA,KAEfC,KAAK,GAAiB,IAAI;IAAA,KAC1BC,KAAK,GAAGxD,KAAK,CAACyD,KAAK;IAAA,KACnBC,KAAK,GAAY,EAAE;IAAA,KAEnBC,QAAQ,GAAW,CAAC;IAAA,KACpBC,MAAM,GAAW,CAAC;IAAA,KAClBC,IAAI,GAAW,CAAC;IAAA,KAChBC,OAAO,GAAY,KAAK;IAAA,KACxBC,QAAQ,GAAW,CAAC;IAAA,KACpBC,QAAQ,GAAkB,IAAI;IAAA,KAC9BC,KAAK,GAAW,CAAC;IAAA,KAEjBC,QAAQ;IAAA,KACRC,UAAU;IAGR,IAAI,CAACvB,OAAO,GAAG;MAAC,GAAGb,eAAe;MAAE,GAAGa;IAAO,CAAC;IAC/C,IAAI,CAACsB,QAAQ,GAAGnB,SAAS;IACzB,IAAI,CAACoB,UAAU,GAAG,EAAE;IACpB,IAAI,CAACC,IAAI,CAAC,SAAS,CAAC;EACtB;EAEAC,GAAGA,CAAA,EAAG;IACJ,IAAI,IAAI,CAACb,KAAK,KAAKxD,KAAK,CAACsE,KAAK,IAAI,IAAI,CAACL,KAAK,KAAK,CAAC,EAAE,IAAI,CAACM,MAAM,CAAC,gBAAgB,CAAC;IAEjF,IAAI,CAACC,WAAW,CAAC,CAAC;IAClB,IAAI,CAACtB,CAAC,GAAG,EAAE;IACX,IAAI,CAACE,MAAM,GAAG,IAAI;IAClB,IAAI,CAACgB,IAAI,CAAC,OAAO,CAAC;IAClB,OAAO,IAAI;EACb;EAEAK,MAAMA,CAAA,EAAG;IACP,IAAI,CAAClB,KAAK,GAAG,IAAI;IACjB,OAAO,IAAI;EACb;EAEAmB,KAAKA,CAAA,EAAG;IACN,OAAO,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC;EACzB;EAIAP,IAAIA,CAACQ,KAAa,EAAEC,IAAU,EAAQ;IAAA,IAAAC,mBAAA,EAAAC,aAAA;IAEpC,CAAAD,mBAAA,IAAAC,aAAA,OAAI,CAACnC,OAAO,EAACgC,KAAK,CAAC,cAAAE,mBAAA,uBAAnBA,mBAAA,CAAAE,IAAA,CAAAD,aAAA,EAAsBF,IAAI,EAAE,IAAI,CAAC;EACnC;EAEAI,QAAQA,CAACL,KAAa,EAAEC,IAAU,EAAQ;IACxC,IAAI,CAACL,WAAW,CAAC,CAAC;IAClB,IAAI,CAACJ,IAAI,CAACQ,KAAK,EAAEC,IAAI,CAAC;EACxB;EAIAF,KAAKA,CAACO,KAAK,EAAE;IACX,IAAI,IAAI,CAAC3B,KAAK,EAAE;MACd,MAAM,IAAI,CAACA,KAAK;IAClB;IACA,IAAI,IAAI,CAACH,MAAM,EAAE;MACf,OAAO,IAAI,CAACmB,MAAM,CAAC,sDAAsD,CAAC;IAC5E;IACA,IAAIW,KAAK,KAAK,IAAI,EAAE;MAClB,OAAO,IAAI,CAACb,GAAG,CAAC,CAAC;IACnB;IACA,IAAIc,CAAC,GAAG,CAAC;IACT,IAAIjC,CAAC,GAAGgC,KAAK,CAACE,UAAU,CAAC,CAAC,CAAC;IAC3B,IAAIjC,CAAC,GAAG,IAAI,CAACA,CAAC;IAEd,OAAOD,CAAC,EAAE;MACRC,CAAC,GAAGD,CAAC;MACL,IAAI,CAACA,CAAC,GAAGA,CAAC,GAAGgC,KAAK,CAACE,UAAU,CAACD,CAAC,EAAE,CAAC;MAKlC,IAAIhC,CAAC,KAAKD,CAAC,EAAE;QACX,IAAI,CAACC,CAAC,GAAGA,CAAC;MACZ,CAAC,MAAM;QACLA,CAAC,GAAG,IAAI,CAACA,CAAC;MACZ;MAEA,IAAI,CAACD,CAAC,EAAE;MAGR,IAAI,CAACS,QAAQ,EAAE;MACf,IAAIT,CAAC,KAAKjD,IAAI,CAACE,QAAQ,EAAE;QACvB,IAAI,CAAC0D,IAAI,EAAE;QACX,IAAI,CAACD,MAAM,GAAG,CAAC;MACjB,CAAC,MAAM,IAAI,CAACA,MAAM,EAAE;MAEpB,QAAQ,IAAI,CAACJ,KAAK;QAChB,KAAKxD,KAAK,CAACyD,KAAK;UACd,IAAIP,CAAC,KAAKjD,IAAI,CAAC2B,SAAS,EAAE,IAAI,CAAC4B,KAAK,GAAGxD,KAAK,CAACqF,WAAW,CAAC,KACpD,IAAInC,CAAC,KAAKjD,IAAI,CAACc,WAAW,EAAE,IAAI,CAACyC,KAAK,GAAGxD,KAAK,CAACsF,UAAU,CAAC,KAC1D,IAAI,CAACC,YAAY,CAACrC,CAAC,CAAC,EAAE;YACzB,IAAI,CAACqB,MAAM,CAAC,2BAA2B,CAAC;UAC1C;UACA;QAEF,KAAKvE,KAAK,CAACwF,QAAQ;QACnB,KAAKxF,KAAK,CAACqF,WAAW;UACpB,IAAIE,YAAY,CAACrC,CAAC,CAAC,EAAE;UACrB,IAAI,IAAI,CAACM,KAAK,KAAKxD,KAAK,CAACwF,QAAQ,EAAE,IAAI,CAAC9B,KAAK,CAAC+B,IAAI,CAACzF,KAAK,CAAC0F,SAAS,CAAC,CAAC,KAC/D,IAAIxC,CAAC,KAAKjD,IAAI,CAAC4B,UAAU,EAAE;YAC9B,IAAI,CAACuC,IAAI,CAAC,cAAc,CAAC;YACzB,IAAI,CAACH,KAAK,EAAE;YACZ,IAAI,CAACG,IAAI,CAAC,eAAe,CAAC;YAC1B,IAAI,CAACH,KAAK,EAAE;YACZ,IAAI,CAACT,KAAK,GAAG,IAAI,CAACE,KAAK,CAACiC,GAAG,CAAC,CAAC,IAAI3F,KAAK,CAACsE,KAAK;YAC5C;UACF,CAAC,MAAM,IAAI,CAACZ,KAAK,CAAC+B,IAAI,CAACzF,KAAK,CAAC4F,YAAY,CAAC;UAC1C,IAAI1C,CAAC,KAAKjD,IAAI,CAACK,WAAW,EAAE,IAAI,CAACkD,KAAK,GAAGxD,KAAK,CAAC6F,MAAM,CAAC,KACjD,IAAI,CAACtB,MAAM,CAAC,0CAA0C,CAAC;UAC5D;QAEF,KAAKvE,KAAK,CAAC0F,SAAS;QACpB,KAAK1F,KAAK,CAAC4F,YAAY;UACrB,IAAIL,YAAY,CAACrC,CAAC,CAAC,EAAE;UAErB,IAAIA,CAAC,KAAKjD,IAAI,CAACY,KAAK,EAAE;YACpB,IAAI,IAAI,CAAC2C,KAAK,KAAKxD,KAAK,CAAC4F,YAAY,EAAE;cACrC,IAAI,CAAClC,KAAK,CAAC+B,IAAI,CAACzF,KAAK,CAAC4F,YAAY,CAAC;cACnC,IAAI,CAACpB,WAAW,CAAC,cAAc,CAAC;cAChC,IAAI,CAACP,KAAK,EAAE;YACd,CAAC,MAAM,IAAI,CAACO,WAAW,CAAC,OAAO,CAAC;YAChC,IAAI,CAAChB,KAAK,GAAGxD,KAAK,CAACsE,KAAK;UAC1B,CAAC,MAAM,IAAIpB,CAAC,KAAKjD,IAAI,CAAC4B,UAAU,EAAE;YAChC,IAAI,CAACoD,QAAQ,CAAC,eAAe,CAAC;YAC9B,IAAI,CAAChB,KAAK,EAAE;YACZ,IAAI,CAACT,KAAK,GAAG,IAAI,CAACE,KAAK,CAACiC,GAAG,CAAC,CAAC,IAAI3F,KAAK,CAACsE,KAAK;UAC9C,CAAC,MAAM,IAAIpB,CAAC,KAAKjD,IAAI,CAACO,KAAK,EAAE;YAC3B,IAAI,IAAI,CAACgD,KAAK,KAAKxD,KAAK,CAAC4F,YAAY,EAAE,IAAI,CAAClC,KAAK,CAAC+B,IAAI,CAACzF,KAAK,CAAC4F,YAAY,CAAC;YAC1E,IAAI,CAACpB,WAAW,CAAC,CAAC;YAClB,IAAI,CAAChB,KAAK,GAAGxD,KAAK,CAACwF,QAAQ;UAC7B,CAAC,MAAM,IAAI,CAACjB,MAAM,CAAC,YAAY,CAAC;UAChC;QAEF,KAAKvE,KAAK,CAACsF,UAAU;QACrB,KAAKtF,KAAK,CAACsE,KAAK;UACd,IAAIiB,YAAY,CAACrC,CAAC,CAAC,EAAE;UACrB,IAAI,IAAI,CAACM,KAAK,KAAKxD,KAAK,CAACsF,UAAU,EAAE;YACnC,IAAI,CAAClB,IAAI,CAAC,aAAa,CAAC;YACxB,IAAI,CAACH,KAAK,EAAE;YACZ,IAAI,CAACT,KAAK,GAAGxD,KAAK,CAACsE,KAAK;YACxB,IAAIpB,CAAC,KAAKjD,IAAI,CAACgB,YAAY,EAAE;cAC3B,IAAI,CAACmD,IAAI,CAAC,cAAc,CAAC;cACzB,IAAI,CAACH,KAAK,EAAE;cACZ,IAAI,CAACT,KAAK,GAAG,IAAI,CAACE,KAAK,CAACiC,GAAG,CAAC,CAAC,IAAI3F,KAAK,CAACsE,KAAK;cAC5C;YACF,CAAC,MAAM;cACL,IAAI,CAACZ,KAAK,CAAC+B,IAAI,CAACzF,KAAK,CAAC8F,WAAW,CAAC;YACpC;UACF;UACA,IAAI5C,CAAC,KAAKjD,IAAI,CAACK,WAAW,EAAE,IAAI,CAACkD,KAAK,GAAGxD,KAAK,CAAC6F,MAAM,CAAC,KACjD,IAAI3C,CAAC,KAAKjD,IAAI,CAAC2B,SAAS,EAAE,IAAI,CAAC4B,KAAK,GAAGxD,KAAK,CAACqF,WAAW,CAAC,KACzD,IAAInC,CAAC,KAAKjD,IAAI,CAACc,WAAW,EAAE,IAAI,CAACyC,KAAK,GAAGxD,KAAK,CAACsF,UAAU,CAAC,KAC1D,IAAIpC,CAAC,KAAKjD,IAAI,CAACyB,CAAC,EAAE,IAAI,CAAC8B,KAAK,GAAGxD,KAAK,CAAC+F,IAAI,CAAC,KAC1C,IAAI7C,CAAC,KAAKjD,IAAI,CAACoB,CAAC,EAAE,IAAI,CAACmC,KAAK,GAAGxD,KAAK,CAACgG,KAAK,CAAC,KAC3C,IAAI9C,CAAC,KAAKjD,IAAI,CAACsB,CAAC,EAAE,IAAI,CAACiC,KAAK,GAAGxD,KAAK,CAACiG,IAAI,CAAC,KAC1C,IAAI/C,CAAC,KAAKjD,IAAI,CAACQ,KAAK,EAAE;YAEzB,IAAI,CAAC0D,UAAU,IAAI,GAAG;UACxB,CAAC,MAAM,IAAIlE,IAAI,CAACU,EAAE,IAAIuC,CAAC,IAAIA,CAAC,IAAIjD,IAAI,CAACW,EAAE,EAAE;YACvC,IAAI,CAACuD,UAAU,IAAI+B,MAAM,CAACC,YAAY,CAACjD,CAAC,CAAC;YACzC,IAAI,CAACM,KAAK,GAAGxD,KAAK,CAACoG,YAAY;UACjC,CAAC,MAAM,IAAI,CAAC7B,MAAM,CAAC,WAAW,CAAC;UAC/B;QAEF,KAAKvE,KAAK,CAAC8F,WAAW;UACpB,IAAI5C,CAAC,KAAKjD,IAAI,CAACO,KAAK,EAAE;YACpB,IAAI,CAACkD,KAAK,CAAC+B,IAAI,CAACzF,KAAK,CAAC8F,WAAW,CAAC;YAClC,IAAI,CAACtB,WAAW,CAAC,SAAS,CAAC;YAC3B,IAAI,CAAChB,KAAK,GAAGxD,KAAK,CAACsE,KAAK;UAC1B,CAAC,MAAM,IAAIpB,CAAC,KAAKjD,IAAI,CAACgB,YAAY,EAAE;YAClC,IAAI,CAACgE,QAAQ,CAAC,cAAc,CAAC;YAC7B,IAAI,CAAChB,KAAK,EAAE;YACZ,IAAI,CAACT,KAAK,GAAG,IAAI,CAACE,KAAK,CAACiC,GAAG,CAAC,CAAC,IAAI3F,KAAK,CAACsE,KAAK;UAC9C,CAAC,MAAM,IAAIiB,YAAY,CAACrC,CAAC,CAAC,EAAE,SAAS,KAChC,IAAI,CAACqB,MAAM,CAAC,WAAW,CAAC;UAC7B;QAEF,KAAKvE,KAAK,CAAC6F,MAAM;UACf,IAAI,IAAI,CAAC3B,QAAQ,KAAKnB,SAAS,EAAE;YAC/B,IAAI,CAACmB,QAAQ,GAAG,EAAE;UACpB;UAGA,IAAImC,MAAM,GAAGlB,CAAC,GAAG,CAAC;UAClB,IAAIrB,OAAO,GAAG,IAAI,CAACA,OAAO;UAC1B,IAAIC,QAAQ,GAAG,IAAI,CAACA,QAAQ;UAE5BuC,cAAc,EAAE,OAAO,IAAI,EAAE;YAG3B,OAAOvC,QAAQ,GAAG,CAAC,EAAE;cACnB,IAAI,CAACC,QAAQ,IAAIkC,MAAM,CAACC,YAAY,CAACjD,CAAC,CAAC;cACvCA,CAAC,GAAGgC,KAAK,CAACE,UAAU,CAACD,CAAC,EAAE,CAAC;cACzB,IAAI,CAACxB,QAAQ,EAAE;cACf,IAAII,QAAQ,KAAK,CAAC,EAAE;gBAElB,IAAI,CAACG,QAAQ,IAAIgC,MAAM,CAACC,YAAY,CAACI,QAAQ,CAAC,IAAI,CAACvC,QAAQ,EAAY,EAAE,CAAC,CAAC;gBAC3ED,QAAQ,GAAG,CAAC;gBACZsC,MAAM,GAAGlB,CAAC,GAAG,CAAC;cAChB,CAAC,MAAM;gBACLpB,QAAQ,EAAE;cACZ;cAGA,IAAI,CAACb,CAAC,EAAE,MAAMoD,cAAc;YAC9B;YACA,IAAIpD,CAAC,KAAKjD,IAAI,CAACK,WAAW,IAAI,CAACwD,OAAO,EAAE;cACtC,IAAI,CAACN,KAAK,GAAG,IAAI,CAACE,KAAK,CAACiC,GAAG,CAAC,CAAC,IAAI3F,KAAK,CAACsE,KAAK;cAC5C,IAAI,CAACJ,QAAQ,IAAIgB,KAAK,CAACsB,SAAS,CAACH,MAAM,EAAElB,CAAC,GAAG,CAAC,CAAC;cAC/C,IAAI,CAACxB,QAAQ,IAAIwB,CAAC,GAAG,CAAC,GAAGkB,MAAM;cAC/B;YACF;YACA,IAAInD,CAAC,KAAKjD,IAAI,CAACe,SAAS,IAAI,CAAC8C,OAAO,EAAE;cACpCA,OAAO,GAAG,IAAI;cACd,IAAI,CAACI,QAAQ,IAAIgB,KAAK,CAACsB,SAAS,CAACH,MAAM,EAAElB,CAAC,GAAG,CAAC,CAAC;cAC/C,IAAI,CAACxB,QAAQ,IAAIwB,CAAC,GAAG,CAAC,GAAGkB,MAAM;cAC/BnD,CAAC,GAAGgC,KAAK,CAACE,UAAU,CAACD,CAAC,EAAE,CAAC;cACzB,IAAI,CAACxB,QAAQ,EAAE;cACf,IAAI,CAACT,CAAC,EAAE;YACV;YACA,IAAIY,OAAO,EAAE;cACXA,OAAO,GAAG,KAAK;cACf,IAAIZ,CAAC,KAAKjD,IAAI,CAACsB,CAAC,EAAE;gBAChB,IAAI,CAAC2C,QAAQ,IAAI,IAAI;cACvB,CAAC,MAAM,IAAIhB,CAAC,KAAKjD,IAAI,CAACuB,CAAC,EAAE;gBACvB,IAAI,CAAC0C,QAAQ,IAAI,IAAI;cACvB,CAAC,MAAM,IAAIhB,CAAC,KAAKjD,IAAI,CAACyB,CAAC,EAAE;gBACvB,IAAI,CAACwC,QAAQ,IAAI,IAAI;cACvB,CAAC,MAAM,IAAIhB,CAAC,KAAKjD,IAAI,CAACoB,CAAC,EAAE;gBACvB,IAAI,CAAC6C,QAAQ,IAAI,IAAI;cACvB,CAAC,MAAM,IAAIhB,CAAC,KAAKjD,IAAI,CAACkB,CAAC,EAAE;gBACvB,IAAI,CAAC+C,QAAQ,IAAI,IAAI;cACvB,CAAC,MAAM,IAAIhB,CAAC,KAAKjD,IAAI,CAAC0B,CAAC,EAAE;gBAEvBoC,QAAQ,GAAG,CAAC;gBACZ,IAAI,CAACC,QAAQ,GAAG,EAAE;cACpB,CAAC,MAAM;gBACL,IAAI,CAACE,QAAQ,IAAIgC,MAAM,CAACC,YAAY,CAACjD,CAAC,CAAC;cACzC;cACAA,CAAC,GAAGgC,KAAK,CAACE,UAAU,CAACD,CAAC,EAAE,CAAC;cACzB,IAAI,CAACxB,QAAQ,EAAE;cACf0C,MAAM,GAAGlB,CAAC,GAAG,CAAC;cACd,IAAI,CAACjC,CAAC,EAAE,MAAM,KACT;YACP;YAEApB,kBAAkB,CAAC2E,SAAS,GAAGtB,CAAC;YAChC,MAAMuB,QAAQ,GAAG5E,kBAAkB,CAAC6E,IAAI,CAACzB,KAAK,CAAC;YAC/C,IAAIwB,QAAQ,KAAK,IAAI,EAAE;cACrBvB,CAAC,GAAGD,KAAK,CAACpC,MAAM,GAAG,CAAC;cACpB,IAAI,CAACoB,QAAQ,IAAIgB,KAAK,CAACsB,SAAS,CAACH,MAAM,EAAElB,CAAC,GAAG,CAAC,CAAC;cAC/C,IAAI,CAACxB,QAAQ,IAAIwB,CAAC,GAAG,CAAC,GAAGkB,MAAM;cAC/B;YACF;YACAlB,CAAC,GAAGuB,QAAQ,CAACE,KAAK,GAAG,CAAC;YACtB1D,CAAC,GAAGgC,KAAK,CAACE,UAAU,CAACsB,QAAQ,CAACE,KAAK,CAAC;YACpC,IAAI,CAAC1D,CAAC,EAAE;cACN,IAAI,CAACgB,QAAQ,IAAIgB,KAAK,CAACsB,SAAS,CAACH,MAAM,EAAElB,CAAC,GAAG,CAAC,CAAC;cAC/C,IAAI,CAACxB,QAAQ,IAAIwB,CAAC,GAAG,CAAC,GAAGkB,MAAM;cAC/B;YACF;UACF;UACA,IAAI,CAACvC,OAAO,GAAGA,OAAO;UACtB,IAAI,CAACC,QAAQ,GAAGA,QAAQ;UACxB;QAEF,KAAK/D,KAAK,CAAC+F,IAAI;UACb,IAAI7C,CAAC,KAAKjD,IAAI,CAACuB,CAAC,EAAE,IAAI,CAACgC,KAAK,GAAGxD,KAAK,CAAC6G,KAAK,CAAC,KACtC,IAAI,CAACtC,MAAM,CAAE,8BAA6BrB,CAAE,EAAC,CAAC;UACnD;QAEF,KAAKlD,KAAK,CAAC6G,KAAK;UACd,IAAI3D,CAAC,KAAKjD,IAAI,CAAC0B,CAAC,EAAE,IAAI,CAAC6B,KAAK,GAAGxD,KAAK,CAAC8G,KAAK,CAAC,KACtC,IAAI,CAACvC,MAAM,CAAE,+BAA8BrB,CAAE,EAAC,CAAC;UACpD;QAEF,KAAKlD,KAAK,CAAC8G,KAAK;UACd,IAAI5D,CAAC,KAAKjD,IAAI,CAACmB,CAAC,EAAE;YAChB,IAAI,CAACgD,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;YAC1B,IAAI,CAACZ,KAAK,GAAG,IAAI,CAACE,KAAK,CAACiC,GAAG,CAAC,CAAC,IAAI3F,KAAK,CAACsE,KAAK;UAC9C,CAAC,MAAM,IAAI,CAACC,MAAM,CAAE,gCAA+BrB,CAAE,EAAC,CAAC;UACvD;QAEF,KAAKlD,KAAK,CAACgG,KAAK;UACd,IAAI9C,CAAC,KAAKjD,IAAI,CAACiB,CAAC,EAAE,IAAI,CAACsC,KAAK,GAAGxD,KAAK,CAAC+G,MAAM,CAAC,KACvC,IAAI,CAACxC,MAAM,CAAE,+BAA8BrB,CAAE,EAAC,CAAC;UACpD;QAEF,KAAKlD,KAAK,CAAC+G,MAAM;UACf,IAAI7D,CAAC,KAAKjD,IAAI,CAACqB,CAAC,EAAE,IAAI,CAACkC,KAAK,GAAGxD,KAAK,CAACgH,MAAM,CAAC,KACvC,IAAI,CAACzC,MAAM,CAAE,gCAA+BrB,CAAE,EAAC,CAAC;UACrD;QAEF,KAAKlD,KAAK,CAACgH,MAAM;UACf,IAAI9D,CAAC,KAAKjD,IAAI,CAACwB,CAAC,EAAE,IAAI,CAAC+B,KAAK,GAAGxD,KAAK,CAACiH,MAAM,CAAC,KACvC,IAAI,CAAC1C,MAAM,CAAE,iCAAgCrB,CAAE,EAAC,CAAC;UACtD;QAEF,KAAKlD,KAAK,CAACiH,MAAM;UACf,IAAI/D,CAAC,KAAKjD,IAAI,CAACmB,CAAC,EAAE;YAChB,IAAI,CAACgD,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;YAC3B,IAAI,CAACZ,KAAK,GAAG,IAAI,CAACE,KAAK,CAACiC,GAAG,CAAC,CAAC,IAAI3F,KAAK,CAACsE,KAAK;UAC9C,CAAC,MAAM,IAAI,CAACC,MAAM,CAAE,kCAAiCrB,CAAE,EAAC,CAAC;UACzD;QAEF,KAAKlD,KAAK,CAACiG,IAAI;UACb,IAAI/C,CAAC,KAAKjD,IAAI,CAAC0B,CAAC,EAAE,IAAI,CAAC6B,KAAK,GAAGxD,KAAK,CAACkH,KAAK,CAAC,KACtC,IAAI,CAAC3C,MAAM,CAAE,8BAA6BrB,CAAE,EAAC,CAAC;UACnD;QAEF,KAAKlD,KAAK,CAACkH,KAAK;UACd,IAAIhE,CAAC,KAAKjD,IAAI,CAACqB,CAAC,EAAE,IAAI,CAACkC,KAAK,GAAGxD,KAAK,CAACmH,KAAK,CAAC,KACtC,IAAI,CAAC5C,MAAM,CAAE,+BAA8BrB,CAAE,EAAC,CAAC;UACpD;QAEF,KAAKlD,KAAK,CAACmH,KAAK;UACd,IAAIjE,CAAC,KAAKjD,IAAI,CAACqB,CAAC,EAAE;YAChB,IAAI,CAAC8C,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;YAC1B,IAAI,CAACZ,KAAK,GAAG,IAAI,CAACE,KAAK,CAACiC,GAAG,CAAC,CAAC,IAAI3F,KAAK,CAACsE,KAAK;UAC9C,CAAC,MAAM,IAAI,CAACC,MAAM,CAAE,gCAA+BrB,CAAE,EAAC,CAAC;UACvD;QAEF,KAAKlD,KAAK,CAACoH,oBAAoB;UAC7B,IAAIlE,CAAC,KAAKjD,IAAI,CAACS,MAAM,EAAE;YACrB,IAAI,CAACyD,UAAU,IAAI,GAAG;YACtB,IAAI,CAACX,KAAK,GAAGxD,KAAK,CAACoG,YAAY;UACjC,CAAC,MAAM,IAAI,CAAC7B,MAAM,CAAC,gCAAgC,CAAC;UACpD;QAEF,KAAKvE,KAAK,CAACoG,YAAY;UACrB,IAAInG,IAAI,CAACU,EAAE,IAAIuC,CAAC,IAAIA,CAAC,IAAIjD,IAAI,CAACW,EAAE,EAAE,IAAI,CAACuD,UAAU,IAAI+B,MAAM,CAACC,YAAY,CAACjD,CAAC,CAAC,CAAC,KACvE,IAAIA,CAAC,KAAKjD,IAAI,CAACS,MAAM,EAAE;YAC1B,IAAI,IAAI,CAACyD,UAAU,CAACkD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC9C,MAAM,CAAC,6BAA6B,CAAC;YACnF,IAAI,CAACJ,UAAU,IAAI,GAAG;UACxB,CAAC,MAAM,IAAIjB,CAAC,KAAKjD,IAAI,CAACmB,CAAC,IAAI8B,CAAC,KAAKjD,IAAI,CAACa,CAAC,EAAE;YACvC,IAAI,IAAI,CAACqD,UAAU,CAACkD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAClD,UAAU,CAACkD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAC5E,IAAI,CAAC9C,MAAM,CAAC,oCAAoC,CAAC;YACnD,IAAI,CAACJ,UAAU,IAAI,GAAG;UACxB,CAAC,MAAM,IAAIjB,CAAC,KAAKjD,IAAI,CAACM,IAAI,IAAI2C,CAAC,KAAKjD,IAAI,CAACQ,KAAK,EAAE;YAE9C,IAAI,EAAE0C,CAAC,KAAKlD,IAAI,CAACmB,CAAC,IAAI+B,CAAC,KAAKlD,IAAI,CAACa,CAAC,CAAC,EAAE,IAAI,CAACyD,MAAM,CAAC,0BAA0B,CAAC;YAC5E,IAAI,CAACJ,UAAU,IAAI+B,MAAM,CAACC,YAAY,CAACjD,CAAC,CAAC;UAC3C,CAAC,MAAM;YACL,IAAI,CAACoE,YAAY,CAAC,CAAC;YACnBnC,CAAC,EAAE;YACH,IAAI,CAAC3B,KAAK,GAAG,IAAI,CAACE,KAAK,CAACiC,GAAG,CAAC,CAAC,IAAI3F,KAAK,CAACsE,KAAK;UAC9C;UACA;QAEF;UACE,IAAI,CAACC,MAAM,CAAE,kBAAiB,IAAI,CAACf,KAAM,EAAC,CAAC;MAC/C;IACF;IACA,IAAI,IAAI,CAACG,QAAQ,IAAI,IAAI,CAACX,mBAAmB,EAAE;MAC7CuE,iBAAiB,CAAC,IAAI,CAAC;IACzB;IAEA,IAAI,CAACnD,IAAI,CAAC,eAAe,CAAC;IAE1B,OAAO,IAAI;EACb;EAEAI,WAAWA,CAAA,EAAkC;IAAA,IAAjCI,KAAa,GAAA/B,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,SAAS;IACnC,IAAI,IAAI,CAACqB,QAAQ,KAAKnB,SAAS,EAAE;MAC/B,IAAI,CAACqB,IAAI,CAACQ,KAAK,EAAE,IAAI,CAACV,QAAQ,CAAC;IACjC;IACA,IAAI,CAACA,QAAQ,GAAGnB,SAAS;EAC3B;EAEAuE,YAAYA,CAAA,EAAS;IACnB,IAAI,IAAI,CAACnD,UAAU,EAAE,IAAI,CAACC,IAAI,CAAC,SAAS,EAAEoD,UAAU,CAAC,IAAI,CAACrD,UAAU,CAAC,CAAC;IACtE,IAAI,CAACA,UAAU,GAAG,EAAE;EACtB;EAEAI,MAAMA,CAAA,EAA6B;IAAA,IAA5BkD,OAAe,GAAA5E,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;IACzB,IAAI,CAAC2B,WAAW,CAAC,CAAC;IAClBiD,OAAO,IAAK,WAAU,IAAI,CAAC5D,IAAK,aAAY,IAAI,CAACD,MAAO,WAAU,IAAI,CAACV,CAAE,EAAC;IAC1E,MAAMK,KAAK,GAAG,IAAImE,KAAK,CAACD,OAAO,CAAC;IAChC,IAAI,CAAClE,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACa,IAAI,CAAC,SAAS,EAAEb,KAAK,CAAC;EAC7B;AACF;AAEA,SAASgC,YAAYA,CAACrC,CAAC,EAAW;EAChC,OAAOA,CAAC,KAAKjD,IAAI,CAACG,cAAc,IAAI8C,CAAC,KAAKjD,IAAI,CAACE,QAAQ,IAAI+C,CAAC,KAAKjD,IAAI,CAACI,KAAK,IAAI6C,CAAC,KAAKjD,IAAI,CAACC,GAAG;AAC/F;AAEA,SAASqH,iBAAiBA,CAACI,MAAM,EAAE;EACjC,MAAMC,UAAU,GAAGC,IAAI,CAACC,GAAG,CAACjI,iBAAiB,EAAE,EAAE,CAAC;EAClD,IAAIkI,SAAS,GAAG,CAAC;EAEjB,KAAK,MAAMC,MAAM,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE;IAC/C,MAAMC,GAAG,GAAGN,MAAM,CAACK,MAAM,CAAC,KAAKjF,SAAS,GAAG,CAAC,GAAG4E,MAAM,CAACK,MAAM,CAAC,CAAClF,MAAM;IACpE,IAAImF,GAAG,GAAGL,UAAU,EAAE;MACpB,QAAQI,MAAM;QACZ,KAAK,MAAM;UAGT;QAEF;UACEL,MAAM,CAACpD,MAAM,CAAE,+BAA8ByD,MAAO,EAAC,CAAC;MAC1D;IACF;IACAD,SAAS,GAAGF,IAAI,CAACC,GAAG,CAACC,SAAS,EAAEE,GAAG,CAAC;EACtC;EACAN,MAAM,CAAC3E,mBAAmB,GAAGnD,iBAAiB,GAAGkI,SAAS,GAAGJ,MAAM,CAAChE,QAAQ;AAC9E"}
@@ -1,5 +1,5 @@
1
1
  import { getTableRowAsObject } from '@loaders.gl/schema';
2
- import { getRowPropertyObject } from './encode-utils';
2
+ import { getRowPropertyObject } from "./encode-utils.js";
3
3
  export function encodeTableRow(table, rowIndex, geometryColumnIndex, utf8Encoder) {
4
4
  const row = getTableRowAsObject(table, rowIndex);
5
5
  if (!row) return;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encode-table-row.js","names":["getTableRowAsObject","getRowPropertyObject","encodeTableRow","table","rowIndex","geometryColumnIndex","utf8Encoder","row","featureWithProperties","getFeatureFromRow","featureString","JSON","stringify","push","_table$schema","_featureOrGeometry","_featureOrGeometry2","properties","columnName","schema","fields","name","featureOrGeometry","type","geometry","parse","err","Error"],"sources":["../../../src/lib/encoder-utils/encode-table-row.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright 2022 Foursquare Labs, Inc.\n\nimport {Feature} from '@loaders.gl/schema';\nimport {Table, getTableRowAsObject} from '@loaders.gl/schema';\nimport {getRowPropertyObject} from './encode-utils';\nimport {Utf8ArrayBufferEncoder} from './utf8-encoder';\n\ntype Row = {[key: string]: unknown};\n\n// Helpers\n\n/**\n * Encode a row. Currently this ignores properties in the geometry column.\n */\nexport function encodeTableRow(\n table: Table,\n rowIndex: number,\n geometryColumnIndex: number,\n utf8Encoder: Utf8ArrayBufferEncoder\n): void {\n const row = getTableRowAsObject(table, rowIndex);\n if (!row) return;\n const featureWithProperties = getFeatureFromRow(table, row, geometryColumnIndex);\n const featureString = JSON.stringify(featureWithProperties);\n utf8Encoder.push(featureString);\n}\n\n/**\n * Encode a row as a Feature. Currently this ignores properties objects in the geometry column.\n */\nfunction getFeatureFromRow(table: Table, row: Row, geometryColumnIndex: number): Feature {\n // Extract non-feature/geometry properties\n const properties = getRowPropertyObject(table, row, [geometryColumnIndex]);\n\n // Extract geometry feature\n const columnName = table.schema?.fields[geometryColumnIndex].name;\n let featureOrGeometry =\n columnName && (row[columnName] as {[key: string]: unknown} | string | null | undefined);\n\n // GeoJSON support null geometries\n if (!featureOrGeometry) {\n // @ts-ignore Feature type does not support null geometries\n return {type: 'Feature', geometry: null, properties};\n }\n\n // Support string geometries?\n // TODO: This assumes GeoJSON strings, which may not be the correct format\n // (could be WKT, encoded WKB...)\n if (typeof featureOrGeometry === 'string') {\n try {\n featureOrGeometry = JSON.parse(featureOrGeometry);\n } catch (err) {\n throw new Error('Invalid string geometry');\n }\n }\n\n if (typeof featureOrGeometry !== 'object' || typeof featureOrGeometry?.type !== 'string') {\n throw new Error('invalid geometry column value');\n }\n\n if (featureOrGeometry?.type === 'Feature') {\n // @ts-ignore Feature type does not support null geometries\n return {...featureOrGeometry, properties};\n }\n\n // @ts-ignore Feature type does not support null geometries\n return {type: 'Feature', geometry: featureOrGeometry, properties};\n}\n"],"mappings":"AAIA,SAAeA,mBAAmB,QAAO,oBAAoB;AAAC,SACtDC,oBAAoB;AAU5B,OAAO,SAASC,cAAcA,CAC5BC,KAAY,EACZC,QAAgB,EAChBC,mBAA2B,EAC3BC,WAAmC,EAC7B;EACN,MAAMC,GAAG,GAAGP,mBAAmB,CAACG,KAAK,EAAEC,QAAQ,CAAC;EAChD,IAAI,CAACG,GAAG,EAAE;EACV,MAAMC,qBAAqB,GAAGC,iBAAiB,CAACN,KAAK,EAAEI,GAAG,EAAEF,mBAAmB,CAAC;EAChF,MAAMK,aAAa,GAAGC,IAAI,CAACC,SAAS,CAACJ,qBAAqB,CAAC;EAC3DF,WAAW,CAACO,IAAI,CAACH,aAAa,CAAC;AACjC;AAKA,SAASD,iBAAiBA,CAACN,KAAY,EAAEI,GAAQ,EAAEF,mBAA2B,EAAW;EAAA,IAAAS,aAAA,EAAAC,kBAAA,EAAAC,mBAAA;EAEvF,MAAMC,UAAU,GAAGhB,oBAAoB,CAACE,KAAK,EAAEI,GAAG,EAAE,CAACF,mBAAmB,CAAC,CAAC;EAG1E,MAAMa,UAAU,IAAAJ,aAAA,GAAGX,KAAK,CAACgB,MAAM,cAAAL,aAAA,uBAAZA,aAAA,CAAcM,MAAM,CAACf,mBAAmB,CAAC,CAACgB,IAAI;EACjE,IAAIC,iBAAiB,GACnBJ,UAAU,IAAKX,GAAG,CAACW,UAAU,CAA0D;EAGzF,IAAI,CAACI,iBAAiB,EAAE;IAEtB,OAAO;MAACC,IAAI,EAAE,SAAS;MAAEC,QAAQ,EAAE,IAAI;MAAEP;IAAU,CAAC;EACtD;EAKA,IAAI,OAAOK,iBAAiB,KAAK,QAAQ,EAAE;IACzC,IAAI;MACFA,iBAAiB,GAAGX,IAAI,CAACc,KAAK,CAACH,iBAAiB,CAAC;IACnD,CAAC,CAAC,OAAOI,GAAG,EAAE;MACZ,MAAM,IAAIC,KAAK,CAAC,yBAAyB,CAAC;IAC5C;EACF;EAEA,IAAI,OAAOL,iBAAiB,KAAK,QAAQ,IAAI,SAAAP,kBAAA,GAAOO,iBAAiB,cAAAP,kBAAA,uBAAjBA,kBAAA,CAAmBQ,IAAI,MAAK,QAAQ,EAAE;IACxF,MAAM,IAAII,KAAK,CAAC,+BAA+B,CAAC;EAClD;EAEA,IAAI,EAAAX,mBAAA,GAAAM,iBAAiB,cAAAN,mBAAA,uBAAjBA,mBAAA,CAAmBO,IAAI,MAAK,SAAS,EAAE;IAEzC,OAAO;MAAC,GAAGD,iBAAiB;MAAEL;IAAU,CAAC;EAC3C;EAGA,OAAO;IAACM,IAAI,EAAE,SAAS;IAAEC,QAAQ,EAAEF,iBAAiB;IAAEL;EAAU,CAAC;AACnE"}
@@ -0,0 +1 @@
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/encoder-utils/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,10 +1,9 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
1
  export class Utf8ArrayBufferEncoder {
3
2
  constructor(chunkSize) {
4
- _defineProperty(this, "chunkSize", void 0);
5
- _defineProperty(this, "strings", []);
6
- _defineProperty(this, "totalLength", 0);
7
- _defineProperty(this, "textEncoder", new TextEncoder());
3
+ this.chunkSize = void 0;
4
+ this.strings = [];
5
+ this.totalLength = 0;
6
+ this.textEncoder = new TextEncoder();
8
7
  this.chunkSize = chunkSize;
9
8
  }
10
9
  push() {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utf8-encoder.js","names":["Utf8ArrayBufferEncoder","constructor","chunkSize","strings","totalLength","textEncoder","TextEncoder","push","_len","arguments","length","Array","_key","string","isFull","getArrayBufferBatch","encode","getStringBatch","buffer","stringChunk","join"],"sources":["../../../src/lib/encoder-utils/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;IAAA,KALdA,SAAS;IAAA,KAClBC,OAAO,GAAa,EAAE;IAAA,KACtBC,WAAW,GAAG,CAAC;IAAA,KACfC,WAAW,GAAgB,IAAIC,WAAW,CAAC,CAAC;IAGlD,IAAI,CAACJ,SAAS,GAAGA,SAAS;EAC5B;EAEAK,IAAIA,CAAA,EAA6B;IAAA,SAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAAzBP,OAAO,OAAAQ,KAAA,CAAAH,IAAA,GAAAI,IAAA,MAAAA,IAAA,GAAAJ,IAAA,EAAAI,IAAA;MAAPT,OAAO,CAAAS,IAAA,IAAAH,SAAA,CAAAG,IAAA;IAAA;IACb,KAAK,MAAMC,MAAM,IAAIV,OAAO,EAAE;MAC5B,IAAI,CAACA,OAAO,CAACI,IAAI,CAACM,MAAM,CAAC;MACzB,IAAI,CAACT,WAAW,IAAIS,MAAM,CAACH,MAAM;IACnC;EACF;EAEAI,MAAMA,CAAA,EAAY;IAChB,OAAO,IAAI,CAACV,WAAW,IAAI,IAAI,CAACF,SAAS;EAC3C;EAEAa,mBAAmBA,CAAA,EAAoB;IACrC,OAAO,IAAI,CAACV,WAAW,CAACW,MAAM,CAAC,IAAI,CAACC,cAAc,CAAC,CAAC,CAAC,CAACC,MAAM;EAC9D;EAEAD,cAAcA,CAAA,EAAW;IACvB,MAAME,WAAW,GAAG,IAAI,CAAChB,OAAO,CAACiB,IAAI,CAAC,EAAE,CAAC;IACzC,IAAI,CAACjB,OAAO,GAAG,EAAE;IACjB,IAAI,CAACC,WAAW,GAAG,CAAC;IACpB,OAAOe,WAAW;EACpB;AACF"}
@@ -1,7 +1,7 @@
1
1
  import { getTableLength } from '@loaders.gl/schema';
2
- import { detectGeometryColumnIndex } from '../encoder-utils/encode-utils';
3
- import { encodeTableRow } from '../encoder-utils/encode-table-row';
4
- import { Utf8ArrayBufferEncoder } from '../encoder-utils/utf8-encoder';
2
+ import { detectGeometryColumnIndex } from "../encoder-utils/encode-utils.js";
3
+ import { encodeTableRow } from "../encoder-utils/encode-table-row.js";
4
+ import { Utf8ArrayBufferEncoder } from "../encoder-utils/utf8-encoder.js";
5
5
  export function encodeTableAsGeojsonInBatches(batchIterator) {
6
6
  try {
7
7
  let inputOpts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geojson-encoder.js","names":["getTableLength","detectGeometryColumnIndex","encodeTableRow","Utf8ArrayBufferEncoder","encodeTableAsGeojsonInBatches","batchIterator","inputOpts","arguments","length","undefined","options","geojson","chunkSize","utf8Encoder","featureArray","push","geometryColumn","isFirstLine","start","tableBatch","end","rowIndex","isFull","getArrayBufferBatch","arrayBufferBatch","byteLength","e","Promise","reject"],"sources":["../../../src/lib/encoders/geojson-encoder.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright 2022 Foursquare Labs, Inc.\n\nimport type {TableBatch} from '@loaders.gl/schema';\nimport {getTableLength} from '@loaders.gl/schema';\nimport {detectGeometryColumnIndex} from '../encoder-utils/encode-utils';\nimport {encodeTableRow} from '../encoder-utils/encode-table-row';\nimport {Utf8ArrayBufferEncoder} from '../encoder-utils/utf8-encoder';\nimport type {GeoJSONWriterOptions} from '../../geojson-writer';\n\n/**\n * Encode a table as GeoJSON\n */\n// eslint-disable-next-line max-statements\nexport async function* encodeTableAsGeojsonInBatches(\n batchIterator: AsyncIterable<TableBatch>, // | Iterable<TableBatch>,\n inputOpts: GeoJSONWriterOptions = {}\n): AsyncIterable<ArrayBuffer> {\n // @ts-expect-error\n const options: Required<GeoJSONWriterOptions> = {geojson: {}, chunkSize: 10000, ...inputOpts};\n\n const utf8Encoder = new Utf8ArrayBufferEncoder(options.chunkSize);\n\n if (!options.geojson.featureArray) {\n utf8Encoder.push('{\\n', '\"type\": \"FeatureCollection\",\\n', '\"features\":\\n');\n }\n utf8Encoder.push('['); // Note no newline\n\n let geometryColumn = options.geojson.geometryColumn;\n\n let isFirstLine = true;\n\n let start = 0;\n for await (const tableBatch of batchIterator) {\n const end = start + getTableLength(tableBatch);\n\n // Deduce geometry column if not already done\n if (!geometryColumn) {\n geometryColumn = geometryColumn || detectGeometryColumnIndex(tableBatch);\n }\n\n for (let rowIndex = start; rowIndex < end; ++rowIndex) {\n // Add a comma except on final feature\n if (!isFirstLine) {\n utf8Encoder.push(',');\n }\n utf8Encoder.push('\\n');\n isFirstLine = false;\n\n encodeTableRow(tableBatch, rowIndex, geometryColumn, utf8Encoder);\n\n // eslint-disable-next-line max-depth\n if (utf8Encoder.isFull()) {\n yield utf8Encoder.getArrayBufferBatch();\n }\n\n start = end;\n }\n\n const arrayBufferBatch = utf8Encoder.getArrayBufferBatch();\n if (arrayBufferBatch.byteLength > 0) {\n yield arrayBufferBatch;\n }\n }\n\n utf8Encoder.push('\\n');\n\n // Add completing rows and emit final batch\n utf8Encoder.push(']\\n');\n if (!options.geojson.featureArray) {\n utf8Encoder.push('}');\n }\n\n // Note: Since we pushed a few final lines, the last batch will always exist, no need to check first\n yield utf8Encoder.getArrayBufferBatch();\n}\n"],"mappings":"AAIA,SAAQA,cAAc,QAAO,oBAAoB;AAAC,SAC1CC,yBAAyB;AAAA,SACzBC,cAAc;AAAA,SACdC,sBAAsB;AAO9B,OAAO,SAAgBC,6BAA6BA,CAClDC,aAAwC;EAAA;IAAA,IACxCC,SAA+B,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IAAA,0BACR;MAE5B,MAAMG,OAAuC,GAAG;QAACC,OAAO,EAAE,CAAC,CAAC;QAAEC,SAAS,EAAE,KAAK;QAAE,GAAGN;MAAS,CAAC;MAE7F,MAAMO,WAAW,GAAG,IAAIV,sBAAsB,CAACO,OAAO,CAACE,SAAS,CAAC;MAEjE,IAAI,CAACF,OAAO,CAACC,OAAO,CAACG,YAAY,EAAE;QACjCD,WAAW,CAACE,IAAI,CAAC,KAAK,EAAE,gCAAgC,EAAE,eAAe,CAAC;MAC5E;MACAF,WAAW,CAACE,IAAI,CAAC,GAAG,CAAC;MAErB,IAAIC,cAAc,GAAGN,OAAO,CAACC,OAAO,CAACK,cAAc;MAEnD,IAAIC,WAAW,GAAG,IAAI;MAEtB,IAAIC,KAAK,GAAG,CAAC;MACb,WAAW,MAAMC,UAAU,IAAId,aAAa,EAAE;QAC5C,MAAMe,GAAG,GAAGF,KAAK,GAAGlB,cAAc,CAACmB,UAAU,CAAC;QAG9C,IAAI,CAACH,cAAc,EAAE;UACnBA,cAAc,GAAGA,cAAc,IAAIf,yBAAyB,CAACkB,UAAU,CAAC;QAC1E;QAEA,KAAK,IAAIE,QAAQ,GAAGH,KAAK,EAAEG,QAAQ,GAAGD,GAAG,EAAE,EAAEC,QAAQ,EAAE;UAErD,IAAI,CAACJ,WAAW,EAAE;YAChBJ,WAAW,CAACE,IAAI,CAAC,GAAG,CAAC;UACvB;UACAF,WAAW,CAACE,IAAI,CAAC,IAAI,CAAC;UACtBE,WAAW,GAAG,KAAK;UAEnBf,cAAc,CAACiB,UAAU,EAAEE,QAAQ,EAAEL,cAAc,EAAEH,WAAW,CAAC;UAGjE,IAAIA,WAAW,CAACS,MAAM,CAAC,CAAC,EAAE;YACxB,MAAMT,WAAW,CAACU,mBAAmB,CAAC,CAAC;UACzC;UAEAL,KAAK,GAAGE,GAAG;QACb;QAEA,MAAMI,gBAAgB,GAAGX,WAAW,CAACU,mBAAmB,CAAC,CAAC;QAC1D,IAAIC,gBAAgB,CAACC,UAAU,GAAG,CAAC,EAAE;UACnC,MAAMD,gBAAgB;QACxB;MACF;MAEAX,WAAW,CAACE,IAAI,CAAC,IAAI,CAAC;MAGtBF,WAAW,CAACE,IAAI,CAAC,KAAK,CAAC;MACvB,IAAI,CAACL,OAAO,CAACC,OAAO,CAACG,YAAY,EAAE;QACjCD,WAAW,CAACE,IAAI,CAAC,GAAG,CAAC;MACvB;MAGA,MAAMF,WAAW,CAACU,mBAAmB,CAAC,CAAC;IACzC,CAAC;EAAA,SAAAG,CAAA;IAAA,OAAAC,OAAA,CAAAC,MAAA,CAAAF,CAAA;EAAA;AAAA"}
@@ -7,6 +7,6 @@ export function encodeTableAsJSON(table, options) {
7
7
  for (const row of rowIterator) {
8
8
  strings.push(JSON.stringify(row));
9
9
  }
10
- return "[".concat(strings.join(','), "]");
10
+ return `[${strings.join(',')}]`;
11
11
  }
12
12
  //# sourceMappingURL=json-encoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-encoder.js","names":["makeRowIterator","encodeTableAsJSON","table","options","_options$json","shape","json","strings","rowIterator","row","push","JSON","stringify","join"],"sources":["../../../src/lib/encoders/json-encoder.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright 2022 Foursquare Labs, Inc.\n\nimport {Table, makeRowIterator} from '@loaders.gl/schema';\nimport type {JSONWriterOptions} from '../../json-writer';\n\n/**\n * Encode a table as a JSON string\n */\nexport function encodeTableAsJSON(table: Table, options?: JSONWriterOptions): string {\n const shape = options?.json?.shape || 'object-row-table';\n\n const strings: string[] = [];\n const rowIterator = makeRowIterator(table, shape);\n for (const row of rowIterator) {\n // Round elements etc\n // processRow(wrappedRow, table.schema);\n // const wrappedRow = options.wrapper ? options.wrapper(row) : row;\n strings.push(JSON.stringify(row));\n }\n return `[${strings.join(',')}]`;\n}\n"],"mappings":"AAGA,SAAeA,eAAe,QAAO,oBAAoB;AAMzD,OAAO,SAASC,iBAAiBA,CAACC,KAAY,EAAEC,OAA2B,EAAU;EAAA,IAAAC,aAAA;EACnF,MAAMC,KAAK,GAAG,CAAAF,OAAO,aAAPA,OAAO,wBAAAC,aAAA,GAAPD,OAAO,CAAEG,IAAI,cAAAF,aAAA,uBAAbA,aAAA,CAAeC,KAAK,KAAI,kBAAkB;EAExD,MAAME,OAAiB,GAAG,EAAE;EAC5B,MAAMC,WAAW,GAAGR,eAAe,CAACE,KAAK,EAAEG,KAAK,CAAC;EACjD,KAAK,MAAMI,GAAG,IAAID,WAAW,EAAE;IAI7BD,OAAO,CAACG,IAAI,CAACC,IAAI,CAACC,SAAS,CAACH,GAAG,CAAC,CAAC;EACnC;EACA,OAAQ,IAAGF,OAAO,CAACM,IAAI,CAAC,GAAG,CAAE,GAAE;AACjC"}
@@ -1,16 +1,15 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import ClarinetParser from '../clarinet/clarinet';
3
- import JSONPath from '../jsonpath/jsonpath';
1
+ import ClarinetParser from "../clarinet/clarinet.js";
2
+ import JSONPath from "../jsonpath/jsonpath.js";
4
3
  export default class JSONParser {
5
4
  constructor(options) {
6
- _defineProperty(this, "parser", void 0);
7
- _defineProperty(this, "result", undefined);
8
- _defineProperty(this, "previousStates", []);
9
- _defineProperty(this, "currentState", Object.freeze({
5
+ this.parser = void 0;
6
+ this.result = undefined;
7
+ this.previousStates = [];
8
+ this.currentState = Object.freeze({
10
9
  container: [],
11
10
  key: null
12
- }));
13
- _defineProperty(this, "jsonpath", new JSONPath());
11
+ });
12
+ this.jsonpath = new JSONPath();
14
13
  this.reset();
15
14
  this.parser = new ClarinetParser({
16
15
  onready: () => {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-parser.js","names":["ClarinetParser","JSONPath","JSONParser","constructor","options","parser","result","undefined","previousStates","currentState","Object","freeze","container","key","jsonpath","reset","onready","length","onopenobject","name","_openObject","emit","onkey","set","oncloseobject","_closeObject","onopenarray","_openArray","onclosearray","_closeArray","onvalue","value","_pushOrSet","onerror","error","onend","pop","write","chunk","close","push","newContainer","arguments","isArray"],"sources":["../../../src/lib/json-parser/json-parser.ts"],"sourcesContent":["// @ts-nocheck\n\nimport ClarinetParser, {ClarinetParserOptions} from '../clarinet/clarinet';\nimport JSONPath from '../jsonpath/jsonpath';\n\n// JSONParser builds a JSON object using the events emitted by the Clarinet parser\n\nexport default class JSONParser {\n readonly parser: ClarinetParser;\n result = undefined;\n previousStates = [];\n currentState = Object.freeze({container: [], key: null});\n jsonpath: JSONPath = new JSONPath();\n\n constructor(options: ClarinetParserOptions) {\n this.reset();\n this.parser = new ClarinetParser({\n onready: () => {\n this.jsonpath = new JSONPath();\n this.previousStates.length = 0;\n this.currentState.container.length = 0;\n },\n\n onopenobject: (name) => {\n this._openObject({});\n if (typeof name !== 'undefined') {\n this.parser.emit('onkey', name);\n }\n },\n\n onkey: (name) => {\n this.jsonpath.set(name);\n this.currentState.key = name;\n },\n\n oncloseobject: () => {\n this._closeObject();\n },\n\n onopenarray: () => {\n this._openArray();\n },\n\n onclosearray: () => {\n this._closeArray();\n },\n\n onvalue: (value) => {\n this._pushOrSet(value);\n },\n\n onerror: (error) => {\n throw error;\n },\n\n onend: () => {\n this.result = this.currentState.container.pop();\n },\n\n ...options\n });\n }\n\n reset(): void {\n this.result = undefined;\n this.previousStates = [];\n this.currentState = Object.freeze({container: [], key: null});\n this.jsonpath = new JSONPath();\n }\n\n write(chunk): void {\n this.parser.write(chunk);\n }\n\n close(): void {\n this.parser.close();\n }\n\n // PRIVATE METHODS\n\n _pushOrSet(value): void {\n const {container, key} = this.currentState;\n if (key !== null) {\n container[key] = value;\n this.currentState.key = null;\n } else {\n container.push(value);\n }\n }\n\n _openArray(newContainer = []): void {\n this.jsonpath.push(null);\n this._pushOrSet(newContainer);\n this.previousStates.push(this.currentState);\n this.currentState = {container: newContainer, isArray: true, key: null};\n }\n\n _closeArray(): void {\n this.jsonpath.pop();\n this.currentState = this.previousStates.pop();\n }\n\n _openObject(newContainer = {}): void {\n this.jsonpath.push(null);\n this._pushOrSet(newContainer);\n this.previousStates.push(this.currentState);\n this.currentState = {container: newContainer, isArray: false, key: null};\n }\n\n _closeObject(): void {\n this.jsonpath.pop();\n this.currentState = this.previousStates.pop();\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import { default as JSONParser } from './json-parser';
3
- import JSONPath from '../jsonpath/jsonpath';
1
+ import { default as JSONParser } from "./json-parser.js";
2
+ import JSONPath from "../jsonpath/jsonpath.js";
4
3
  export default class StreamingJSONParser extends JSONParser {
5
4
  constructor() {
6
5
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -28,10 +27,10 @@ export default class StreamingJSONParser extends JSONParser {
28
27
  }
29
28
  }
30
29
  });
31
- _defineProperty(this, "jsonPaths", void 0);
32
- _defineProperty(this, "streamingJsonPath", null);
33
- _defineProperty(this, "streamingArray", null);
34
- _defineProperty(this, "topLevelObject", null);
30
+ this.jsonPaths = void 0;
31
+ this.streamingJsonPath = null;
32
+ this.streamingArray = null;
33
+ this.topLevelObject = null;
35
34
  const jsonpaths = options.jsonpaths || [];
36
35
  this.jsonPaths = jsonpaths.map(jsonpath => new JSONPath(jsonpath));
37
36
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming-json-parser.js","names":["default","JSONParser","JSONPath","StreamingJSONParser","constructor","options","arguments","length","undefined","onopenarray","streamingArray","_matchJSONPath","streamingJsonPath","getJsonPath","clone","_openArray","onopenobject","name","topLevelObject","_openObject","parser","emit","jsonPaths","jsonpaths","map","jsonpath","write","chunk","array","getPartialResult","getStreamingJsonPath","getStreamingJsonPathAsString","toString","currentPath","jsonPath","equals"],"sources":["../../../src/lib/json-parser/streaming-json-parser.ts"],"sourcesContent":["import {default as JSONParser} from './json-parser';\nimport JSONPath from '../jsonpath/jsonpath';\n\n/**\n * The `StreamingJSONParser` looks for the first array in the JSON structure.\n * and emits an array of chunks\n */\nexport default class StreamingJSONParser extends JSONParser {\n private jsonPaths: JSONPath[];\n private streamingJsonPath: JSONPath | null = null;\n private streamingArray: any[] | null = null;\n private topLevelObject: object | null = null;\n\n constructor(options: {[key: string]: any} = {}) {\n super({\n onopenarray: () => {\n if (!this.streamingArray) {\n if (this._matchJSONPath()) {\n // @ts-ignore\n this.streamingJsonPath = this.getJsonPath().clone();\n this.streamingArray = [];\n this._openArray(this.streamingArray as []);\n return;\n }\n }\n\n this._openArray();\n },\n\n // Redefine onopenarray to inject value for top-level object\n onopenobject: (name) => {\n if (!this.topLevelObject) {\n this.topLevelObject = {};\n this._openObject(this.topLevelObject);\n } else {\n this._openObject({});\n }\n if (typeof name !== 'undefined') {\n this.parser.emit('onkey', name);\n }\n }\n });\n const jsonpaths = options.jsonpaths || [];\n this.jsonPaths = jsonpaths.map((jsonpath) => new JSONPath(jsonpath));\n }\n\n /**\n * write REDEFINITION\n * - super.write() chunk to parser\n * - get the contents (so far) of \"topmost-level\" array as batch of rows\n * - clear top-level array\n * - return the batch of rows\\\n */\n write(chunk) {\n super.write(chunk);\n let array: any[] = [];\n if (this.streamingArray) {\n array = [...this.streamingArray];\n this.streamingArray.length = 0;\n }\n return array;\n }\n\n /**\n * Returns a partially formed result object\n * Useful for returning the \"wrapper\" object when array is not top level\n * e.g. GeoJSON\n */\n getPartialResult() {\n return this.topLevelObject;\n }\n\n getStreamingJsonPath() {\n return this.streamingJsonPath;\n }\n\n getStreamingJsonPathAsString() {\n return this.streamingJsonPath && this.streamingJsonPath.toString();\n }\n\n getJsonPath() {\n return this.jsonpath;\n }\n\n // PRIVATE METHODS\n\n /**\n * Checks is this.getJsonPath matches the jsonpaths provided in options\n */\n _matchJSONPath() {\n const currentPath = this.getJsonPath();\n // console.debug(`Testing JSONPath`, currentPath);\n\n // Backwards compatibility, match any array\n // TODO implement using wildcard once that is supported\n if (this.jsonPaths.length === 0) {\n return true;\n }\n\n for (const jsonPath of this.jsonPaths) {\n if (jsonPath.equals(currentPath)) {\n return true;\n }\n }\n\n return false;\n }\n}\n"],"mappings":"SAAQA,OAAO,IAAIC,UAAU;AAAA,OACtBC,QAAQ;AAMf,eAAe,MAAMC,mBAAmB,SAASF,UAAU,CAAC;EAM1DG,WAAWA,CAAA,EAAqC;IAAA,IAApCC,OAA6B,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IAC5C,KAAK,CAAC;MACJG,WAAW,EAAEA,CAAA,KAAM;QACjB,IAAI,CAAC,IAAI,CAACC,cAAc,EAAE;UACxB,IAAI,IAAI,CAACC,cAAc,CAAC,CAAC,EAAE;YAEzB,IAAI,CAACC,iBAAiB,GAAG,IAAI,CAACC,WAAW,CAAC,CAAC,CAACC,KAAK,CAAC,CAAC;YACnD,IAAI,CAACJ,cAAc,GAAG,EAAE;YACxB,IAAI,CAACK,UAAU,CAAC,IAAI,CAACL,cAAoB,CAAC;YAC1C;UACF;QACF;QAEA,IAAI,CAACK,UAAU,CAAC,CAAC;MACnB,CAAC;MAGDC,YAAY,EAAGC,IAAI,IAAK;QACtB,IAAI,CAAC,IAAI,CAACC,cAAc,EAAE;UACxB,IAAI,CAACA,cAAc,GAAG,CAAC,CAAC;UACxB,IAAI,CAACC,WAAW,CAAC,IAAI,CAACD,cAAc,CAAC;QACvC,CAAC,MAAM;UACL,IAAI,CAACC,WAAW,CAAC,CAAC,CAAC,CAAC;QACtB;QACA,IAAI,OAAOF,IAAI,KAAK,WAAW,EAAE;UAC/B,IAAI,CAACG,MAAM,CAACC,IAAI,CAAC,OAAO,EAAEJ,IAAI,CAAC;QACjC;MACF;IACF,CAAC,CAAC;IAAC,KAjCGK,SAAS;IAAA,KACTV,iBAAiB,GAAoB,IAAI;IAAA,KACzCF,cAAc,GAAiB,IAAI;IAAA,KACnCQ,cAAc,GAAkB,IAAI;IA+B1C,MAAMK,SAAS,GAAGlB,OAAO,CAACkB,SAAS,IAAI,EAAE;IACzC,IAAI,CAACD,SAAS,GAAGC,SAAS,CAACC,GAAG,CAAEC,QAAQ,IAAK,IAAIvB,QAAQ,CAACuB,QAAQ,CAAC,CAAC;EACtE;EASAC,KAAKA,CAACC,KAAK,EAAE;IACX,KAAK,CAACD,KAAK,CAACC,KAAK,CAAC;IAClB,IAAIC,KAAY,GAAG,EAAE;IACrB,IAAI,IAAI,CAAClB,cAAc,EAAE;MACvBkB,KAAK,GAAG,CAAC,GAAG,IAAI,CAAClB,cAAc,CAAC;MAChC,IAAI,CAACA,cAAc,CAACH,MAAM,GAAG,CAAC;IAChC;IACA,OAAOqB,KAAK;EACd;EAOAC,gBAAgBA,CAAA,EAAG;IACjB,OAAO,IAAI,CAACX,cAAc;EAC5B;EAEAY,oBAAoBA,CAAA,EAAG;IACrB,OAAO,IAAI,CAAClB,iBAAiB;EAC/B;EAEAmB,4BAA4BA,CAAA,EAAG;IAC7B,OAAO,IAAI,CAACnB,iBAAiB,IAAI,IAAI,CAACA,iBAAiB,CAACoB,QAAQ,CAAC,CAAC;EACpE;EAEAnB,WAAWA,CAAA,EAAG;IACZ,OAAO,IAAI,CAACY,QAAQ;EACtB;EAOAd,cAAcA,CAAA,EAAG;IACf,MAAMsB,WAAW,GAAG,IAAI,CAACpB,WAAW,CAAC,CAAC;IAKtC,IAAI,IAAI,CAACS,SAAS,CAACf,MAAM,KAAK,CAAC,EAAE;MAC/B,OAAO,IAAI;IACb;IAEA,KAAK,MAAM2B,QAAQ,IAAI,IAAI,CAACZ,SAAS,EAAE;MACrC,IAAIY,QAAQ,CAACC,MAAM,CAACF,WAAW,CAAC,EAAE;QAChC,OAAO,IAAI;MACb;IACF;IAEA,OAAO,KAAK;EACd;AACF"}
@@ -1,8 +1,7 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
1
  export default class JSONPath {
3
2
  constructor() {
4
3
  let path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
5
- _defineProperty(this, "path", void 0);
4
+ this.path = void 0;
6
5
  this.path = ['$'];
7
6
  if (path instanceof JSONPath) {
8
7
  this.path = [...path.path];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonpath.js","names":["JSONPath","constructor","path","arguments","length","undefined","Array","isArray","push","split","Error","clone","toString","join","name","pop","set","equals","other","i","setFieldAtPath","object","value","shift","field","component","getFieldAtPath"],"sources":["../../../src/lib/jsonpath/jsonpath.ts"],"sourcesContent":["/**\n * A parser for a minimal subset of the jsonpath standard\n * Full JSON path parsers for JS exist but are quite large (bundle size)\n *\n * Supports\n *\n * `$.component.component.component`\n */\nexport default class JSONPath {\n path: string[];\n\n constructor(path: JSONPath | string[] | string | null = null) {\n this.path = ['$'];\n\n if (path instanceof JSONPath) {\n // @ts-ignore\n this.path = [...path.path];\n return;\n }\n\n if (Array.isArray(path)) {\n this.path.push(...path);\n return;\n }\n\n // Parse a string as a JSONPath\n if (typeof path === 'string') {\n this.path = path.split('.');\n if (this.path[0] !== '$') {\n throw new Error('JSONPaths must start with $');\n }\n }\n }\n\n clone(): JSONPath {\n return new JSONPath(this);\n }\n\n toString(): string {\n return this.path.join('.');\n }\n\n push(name: string): void {\n this.path.push(name);\n }\n\n pop() {\n return this.path.pop();\n }\n\n set(name: string): void {\n this.path[this.path.length - 1] = name;\n }\n\n equals(other: JSONPath): boolean {\n if (!this || !other || this.path.length !== other.path.length) {\n return false;\n }\n\n for (let i = 0; i < this.path.length; ++i) {\n if (this.path[i] !== other.path[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Sets the value pointed at by path\n * TODO - handle root path\n * @param object\n * @param value\n */\n setFieldAtPath(object, value) {\n const path = [...this.path];\n path.shift();\n const field = path.pop();\n for (const component of path) {\n object = object[component];\n }\n // @ts-ignore\n object[field] = value;\n }\n\n /**\n * Gets the value pointed at by path\n * TODO - handle root path\n * @param object\n */\n getFieldAtPath(object) {\n const path = [...this.path];\n path.shift();\n const field = path.pop();\n for (const component of path) {\n object = object[component];\n }\n // @ts-ignore\n return object[field];\n }\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { TableBatchBuilder } from '@loaders.gl/schema';
2
2
  import { assert, makeTextDecoderIterator } from '@loaders.gl/loader-utils';
3
- import StreamingJSONParser from '../json-parser/streaming-json-parser';
4
- import JSONPath from '../jsonpath/jsonpath';
3
+ import StreamingJSONParser from "../json-parser/streaming-json-parser.js";
4
+ import JSONPath from "../jsonpath/jsonpath.js";
5
5
  export async function* parseJSONInBatches(binaryAsyncIterator, options) {
6
6
  var _options$json;
7
7
  const asyncIterator = makeTextDecoderIterator(binaryAsyncIterator);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-json-in-batches.js","names":["TableBatchBuilder","assert","makeTextDecoderIterator","StreamingJSONParser","JSONPath","parseJSONInBatches","binaryAsyncIterator","options","_options$json","asyncIterator","metadata","jsonpaths","json","isFirstChunk","schema","shape","tableBatchBuilder","parser","chunk","rows","write","jsonpath","length","getStreamingJsonPathAsString","initialBatch","batchType","data","bytesUsed","container","getPartialResult","row","addRow","batch","getFullBatch","chunkComplete","getFinalBatch","finalBatch","rebuildJsonObject","topLevelObject","streamingPath","setFieldAtPath"],"sources":["../../../src/lib/parsers/parse-json-in-batches.ts"],"sourcesContent":["import type {TableBatch} from '@loaders.gl/schema';\nimport type {JSONLoaderOptions} from '../../json-loader';\nimport {TableBatchBuilder} from '@loaders.gl/schema';\nimport {assert, makeTextDecoderIterator} from '@loaders.gl/loader-utils';\nimport StreamingJSONParser from '../json-parser/streaming-json-parser';\nimport JSONPath from '../jsonpath/jsonpath';\n\n// TODO - support batch size 0 = no batching/single batch?\n// eslint-disable-next-line max-statements, complexity\nexport async function* parseJSONInBatches(\n binaryAsyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options: JSONLoaderOptions\n): AsyncIterable<TableBatch> {\n const asyncIterator = makeTextDecoderIterator(binaryAsyncIterator);\n\n const {metadata} = options;\n const {jsonpaths} = options.json || {};\n\n let isFirstChunk: boolean = true;\n\n // TODO fix Schema deduction\n const schema = null; // new Schema([]);\n // TODO - detect shape from data?\n const shape = options?.json?.shape || 'object-row-table';\n // @ts-ignore\n const tableBatchBuilder = new TableBatchBuilder(schema, {\n ...options,\n shape\n });\n\n const parser = new StreamingJSONParser({jsonpaths});\n\n for await (const chunk of asyncIterator) {\n const rows = parser.write(chunk);\n\n const jsonpath = rows.length > 0 && parser.getStreamingJsonPathAsString();\n\n if (rows.length > 0 && isFirstChunk) {\n if (metadata) {\n const initialBatch: TableBatch = {\n // Common fields\n shape,\n batchType: 'partial-result',\n data: [],\n length: 0,\n bytesUsed: 0,\n // JSON additions\n container: parser.getPartialResult(),\n jsonpath\n };\n yield initialBatch;\n }\n isFirstChunk = false;\n // schema = deduceSchema(rows);\n }\n\n // Add the row\n for (const row of rows) {\n tableBatchBuilder.addRow(row);\n // If a batch has been completed, emit it\n const batch = tableBatchBuilder.getFullBatch({jsonpath});\n if (batch) {\n yield batch;\n }\n }\n\n tableBatchBuilder.chunkComplete(chunk);\n const batch = tableBatchBuilder.getFullBatch({jsonpath});\n if (batch) {\n yield batch;\n }\n }\n\n // yield final batch\n const jsonpath = parser.getStreamingJsonPathAsString();\n const batch = tableBatchBuilder.getFinalBatch({jsonpath});\n if (batch) {\n yield batch;\n }\n\n if (metadata) {\n const finalBatch: TableBatch = {\n shape,\n batchType: 'final-result',\n container: parser.getPartialResult(),\n jsonpath: parser.getStreamingJsonPathAsString(),\n data: [],\n length: 0\n // schema: null\n };\n yield finalBatch;\n }\n}\n\nexport function rebuildJsonObject(batch, data) {\n // Last batch will have this special type and will provide all the root object of the parsed file\n assert(batch.batchType === 'final-result');\n\n // The streamed JSON data is a top level array (jsonpath = '$'), just return the array of row objects\n if (batch.jsonpath === '$') {\n return data;\n }\n\n // (jsonpath !== '$') The streamed data is not a top level array, so stitch it back in to the top-level object\n if (batch.jsonpath && batch.jsonpath.length > 1) {\n const topLevelObject = batch.container;\n const streamingPath = new JSONPath(batch.jsonpath);\n streamingPath.setFieldAtPath(topLevelObject, data);\n return topLevelObject;\n }\n\n // No jsonpath, in this case nothing was streamed.\n return batch.container;\n}\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-json.js","names":["makeTableFromData","parseJSONSync","jsonText","options","_options$json","json","JSON","parse","table","data","getFirstArray","error","Error","Array","isArray","value","Object","values","array"],"sources":["../../../src/lib/parsers/parse-json.ts"],"sourcesContent":["// loaders.gl, MIT license\nimport type {RowTable} from '@loaders.gl/schema';\nimport {makeTableFromData} from '@loaders.gl/schema';\nimport type {JSONLoaderOptions} from '../../json-loader';\n\nexport function parseJSONSync(jsonText: string, options: JSONLoaderOptions): RowTable {\n try {\n const json = JSON.parse(jsonText);\n if (options.json?.table) {\n const data = getFirstArray(json) || json;\n return makeTableFromData(data);\n }\n return json;\n } catch (error) {\n throw new Error('JSONLoader: failed to parse JSON');\n }\n}\n\nfunction getFirstArray(json) {\n if (Array.isArray(json)) {\n return json;\n }\n if (json && typeof json === 'object') {\n for (const value of Object.values(json)) {\n const array = getFirstArray(value);\n if (array) {\n return array;\n }\n }\n }\n return null;\n}\n"],"mappings":"AAEA,SAAQA,iBAAiB,QAAO,oBAAoB;AAGpD,OAAO,SAASC,aAAaA,CAACC,QAAgB,EAAEC,OAA0B,EAAY;EACpF,IAAI;IAAA,IAAAC,aAAA;IACF,MAAMC,IAAI,GAAGC,IAAI,CAACC,KAAK,CAACL,QAAQ,CAAC;IACjC,KAAAE,aAAA,GAAID,OAAO,CAACE,IAAI,cAAAD,aAAA,eAAZA,aAAA,CAAcI,KAAK,EAAE;MACvB,MAAMC,IAAI,GAAGC,aAAa,CAACL,IAAI,CAAC,IAAIA,IAAI;MACxC,OAAOL,iBAAiB,CAACS,IAAI,CAAC;IAChC;IACA,OAAOJ,IAAI;EACb,CAAC,CAAC,OAAOM,KAAK,EAAE;IACd,MAAM,IAAIC,KAAK,CAAC,kCAAkC,CAAC;EACrD;AACF;AAEA,SAASF,aAAaA,CAACL,IAAI,EAAE;EAC3B,IAAIQ,KAAK,CAACC,OAAO,CAACT,IAAI,CAAC,EAAE;IACvB,OAAOA,IAAI;EACb;EACA,IAAIA,IAAI,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;IACpC,KAAK,MAAMU,KAAK,IAAIC,MAAM,CAACC,MAAM,CAACZ,IAAI,CAAC,EAAE;MACvC,MAAMa,KAAK,GAAGR,aAAa,CAACK,KAAK,CAAC;MAClC,IAAIG,KAAK,EAAE;QACT,OAAOA,KAAK;MACd;IACF;EACF;EACA,OAAO,IAAI;AACb"}
@@ -23,7 +23,7 @@ export async function* parseNDJSONInBatches(binaryAsyncIterator, options) {
23
23
  yield batch;
24
24
  }
25
25
  } catch (error) {
26
- throw new Error("NDJSONLoader: failed to parse JSON on line ".concat(counter));
26
+ throw new Error(`NDJSONLoader: failed to parse JSON on line ${counter}`);
27
27
  }
28
28
  }
29
29
  const batch = tableBatchBuilder.getFinalBatch();
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-ndjson-in-batches.js","names":["TableBatchBuilder","makeLineIterator","makeNumberedLineIterator","makeTextDecoderIterator","parseNDJSONInBatches","binaryAsyncIterator","options","textIterator","lineIterator","numberedLineIterator","schema","shape","tableBatchBuilder","counter","line","row","JSON","parse","addRow","chunkComplete","batch","getFullBatch","error","Error","getFinalBatch"],"sources":["../../../src/lib/parsers/parse-ndjson-in-batches.ts"],"sourcesContent":["import type {TableBatch} from '@loaders.gl/schema';\nimport {TableBatchBuilder} from '@loaders.gl/schema';\nimport {\n LoaderOptions,\n makeLineIterator,\n makeNumberedLineIterator,\n makeTextDecoderIterator\n} from '@loaders.gl/loader-utils';\n\nexport async function* parseNDJSONInBatches(\n binaryAsyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options?: LoaderOptions\n): AsyncIterable<TableBatch> {\n const textIterator = makeTextDecoderIterator(binaryAsyncIterator);\n const lineIterator = makeLineIterator(textIterator);\n const numberedLineIterator = makeNumberedLineIterator(lineIterator);\n\n const schema = null;\n const shape = 'row-table';\n // @ts-ignore\n const tableBatchBuilder = new TableBatchBuilder(schema, {\n ...options,\n shape\n });\n\n for await (const {counter, line} of numberedLineIterator) {\n try {\n const row = JSON.parse(line);\n tableBatchBuilder.addRow(row);\n tableBatchBuilder.chunkComplete(line);\n const batch = tableBatchBuilder.getFullBatch();\n if (batch) {\n yield batch;\n }\n } catch (error) {\n throw new Error(`NDJSONLoader: failed to parse JSON on line ${counter}`);\n }\n }\n\n const batch = tableBatchBuilder.getFinalBatch();\n if (batch) {\n yield batch;\n }\n}\n"],"mappings":"AACA,SAAQA,iBAAiB,QAAO,oBAAoB;AACpD,SAEEC,gBAAgB,EAChBC,wBAAwB,EACxBC,uBAAuB,QAClB,0BAA0B;AAEjC,OAAO,gBAAgBC,oBAAoBA,CACzCC,mBAAuE,EACvEC,OAAuB,EACI;EAC3B,MAAMC,YAAY,GAAGJ,uBAAuB,CAACE,mBAAmB,CAAC;EACjE,MAAMG,YAAY,GAAGP,gBAAgB,CAACM,YAAY,CAAC;EACnD,MAAME,oBAAoB,GAAGP,wBAAwB,CAACM,YAAY,CAAC;EAEnE,MAAME,MAAM,GAAG,IAAI;EACnB,MAAMC,KAAK,GAAG,WAAW;EAEzB,MAAMC,iBAAiB,GAAG,IAAIZ,iBAAiB,CAACU,MAAM,EAAE;IACtD,GAAGJ,OAAO;IACVK;EACF,CAAC,CAAC;EAEF,WAAW,MAAM;IAACE,OAAO;IAAEC;EAAI,CAAC,IAAIL,oBAAoB,EAAE;IACxD,IAAI;MACF,MAAMM,GAAG,GAAGC,IAAI,CAACC,KAAK,CAACH,IAAI,CAAC;MAC5BF,iBAAiB,CAACM,MAAM,CAACH,GAAG,CAAC;MAC7BH,iBAAiB,CAACO,aAAa,CAACL,IAAI,CAAC;MACrC,MAAMM,KAAK,GAAGR,iBAAiB,CAACS,YAAY,CAAC,CAAC;MAC9C,IAAID,KAAK,EAAE;QACT,MAAMA,KAAK;MACb;IACF,CAAC,CAAC,OAAOE,KAAK,EAAE;MACd,MAAM,IAAIC,KAAK,CAAE,8CAA6CV,OAAQ,EAAC,CAAC;IAC1E;EACF;EAEA,MAAMO,KAAK,GAAGR,iBAAiB,CAACY,aAAa,CAAC,CAAC;EAC/C,IAAIJ,KAAK,EAAE;IACT,MAAMA,KAAK;EACb;AACF"}
@@ -5,7 +5,7 @@ export function parseNDJSONSync(ndjsonText) {
5
5
  try {
6
6
  return JSON.parse(line);
7
7
  } catch (error) {
8
- throw new Error("NDJSONLoader: failed to parse JSON on line ".concat(counter + 1));
8
+ throw new Error(`NDJSONLoader: failed to parse JSON on line ${counter + 1}`);
9
9
  }
10
10
  });
11
11
  return makeTableFromData(parsedLines);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-ndjson.js","names":["makeTableFromData","parseNDJSONSync","ndjsonText","lines","trim","split","parsedLines","map","line","counter","JSON","parse","error","Error"],"sources":["../../../src/lib/parsers/parse-ndjson.ts"],"sourcesContent":["import type {ArrayRowTable, ObjectRowTable} from '@loaders.gl/schema';\nimport {makeTableFromData} from '@loaders.gl/schema';\n\nexport function parseNDJSONSync(ndjsonText: string): ArrayRowTable | ObjectRowTable {\n const lines = ndjsonText.trim().split('\\n');\n const parsedLines = lines.map((line, counter) => {\n try {\n return JSON.parse(line);\n } catch (error) {\n throw new Error(`NDJSONLoader: failed to parse JSON on line ${counter + 1}`);\n }\n });\n\n return makeTableFromData(parsedLines);\n}\n"],"mappings":"AACA,SAAQA,iBAAiB,QAAO,oBAAoB;AAEpD,OAAO,SAASC,eAAeA,CAACC,UAAkB,EAAkC;EAClF,MAAMC,KAAK,GAAGD,UAAU,CAACE,IAAI,CAAC,CAAC,CAACC,KAAK,CAAC,IAAI,CAAC;EAC3C,MAAMC,WAAW,GAAGH,KAAK,CAACI,GAAG,CAAC,CAACC,IAAI,EAAEC,OAAO,KAAK;IAC/C,IAAI;MACF,OAAOC,IAAI,CAACC,KAAK,CAACH,IAAI,CAAC;IACzB,CAAC,CAAC,OAAOI,KAAK,EAAE;MACd,MAAM,IAAIC,KAAK,CAAE,8CAA6CJ,OAAO,GAAG,CAAE,EAAC,CAAC;IAC9E;EACF,CAAC,CAAC;EAEF,OAAOT,iBAAiB,CAACM,WAAW,CAAC;AACvC"}
@@ -1,6 +1,6 @@
1
- import { parseNDJSONSync } from './lib/parsers/parse-ndjson';
2
- import { parseNDJSONInBatches } from './lib/parsers/parse-ndjson-in-batches';
3
- const VERSION = typeof "4.0.0-beta.1" !== 'undefined' ? "4.0.0-beta.1" : 'latest';
1
+ import { parseNDJSONSync } from "./lib/parsers/parse-ndjson.js";
2
+ import { parseNDJSONInBatches } from "./lib/parsers/parse-ndjson-in-batches.js";
3
+ const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
4
4
  export const NDJSONLoader = {
5
5
  name: 'NDJSON',
6
6
  id: 'ndjson',
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ndgeoson-loader.js","names":["parseNDJSONSync","parseNDJSONInBatches","VERSION","__VERSION__","NDJSONLoader","name","id","module","version","extensions","mimeTypes","category","text","parse","arrayBuffer","TextDecoder","decode","parseTextSync","parseInBatches","options","geojson","shape","gis","format"],"sources":["../src/ndgeoson-loader.ts"],"sourcesContent":["import type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {parseNDJSONSync} from './lib/parsers/parse-ndjson';\nimport {parseNDJSONInBatches} from './lib/parsers/parse-ndjson-in-batches';\nimport {ArrayRowTable, ObjectRowTable, Batch} from '@loaders.gl/schema';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/** Options for NDGeoJSONLoader */\nexport type NDGeoJSONLoaderOptions = LoaderOptions & {\n geojson?: {\n shape?: 'object-row-table';\n };\n gis?: {\n format: 'geojson';\n };\n};\n\n/** NDGeoJSONLoader */\nexport const NDJSONLoader: LoaderWithParser<\n ArrayRowTable | ObjectRowTable,\n Batch,\n NDGeoJSONLoaderOptions\n> = {\n name: 'NDJSON',\n id: 'ndjson',\n module: 'json',\n version: VERSION,\n extensions: ['ndjson', 'ndgeojson'],\n mimeTypes: [\n 'application/geo+x-ndjson',\n 'application/geo+x-ldjson',\n 'application/jsonlines', // https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html#cm-batch\n 'application/geo+json-seq',\n 'application/x-ndjson'\n ],\n category: 'table',\n text: true,\n parse: async (arrayBuffer: ArrayBuffer) => parseNDJSONSync(new TextDecoder().decode(arrayBuffer)),\n parseTextSync: parseNDJSONSync,\n parseInBatches: parseNDJSONInBatches,\n options: {\n geojson: {\n shape: 'object-row-table'\n },\n gis: {\n format: 'geojson'\n }\n }\n};\n"],"mappings":"SACQA,eAAe;AAAA,SACfC,oBAAoB;AAK5B,MAAMC,OAAO,GAAG,OAAOC,WAAW,KAAK,WAAW,GAAGA,WAAW,GAAG,QAAQ;AAa3E,OAAO,MAAMC,YAIZ,GAAG;EACFC,IAAI,EAAE,QAAQ;EACdC,EAAE,EAAE,QAAQ;EACZC,MAAM,EAAE,MAAM;EACdC,OAAO,EAAEN,OAAO;EAChBO,UAAU,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC;EACnCC,SAAS,EAAE,CACT,0BAA0B,EAC1B,0BAA0B,EAC1B,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,CACvB;EACDC,QAAQ,EAAE,OAAO;EACjBC,IAAI,EAAE,IAAI;EACVC,KAAK,EAAE,MAAOC,WAAwB,IAAKd,eAAe,CAAC,IAAIe,WAAW,CAAC,CAAC,CAACC,MAAM,CAACF,WAAW,CAAC,CAAC;EACjGG,aAAa,EAAEjB,eAAe;EAC9BkB,cAAc,EAAEjB,oBAAoB;EACpCkB,OAAO,EAAE;IACPC,OAAO,EAAE;MACPC,KAAK,EAAE;IACT,CAAC;IACDC,GAAG,EAAE;MACHC,MAAM,EAAE;IACV;EACF;AACF,CAAC"}