@loaders.gl/flatgeobuf 4.0.0-beta.2 → 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 (39) hide show
  1. package/dist/{dist.min.js → dist.dev.js} +8507 -9117
  2. package/dist/flatgeobuf-loader.d.ts +1 -1
  3. package/dist/flatgeobuf-loader.d.ts.map +1 -1
  4. package/dist/{esm/flatgeobuf-loader.js → flatgeobuf-loader.js} +1 -1
  5. package/dist/flatgeobuf-loader.js.map +1 -0
  6. package/dist/flatgeobuf-worker.js +63 -29
  7. package/dist/index.cjs +265 -0
  8. package/dist/{esm/index.js → index.js} +2 -2
  9. package/dist/index.js.map +1 -0
  10. package/dist/{esm/lib → lib}/binary-geometries.js +1 -1
  11. package/dist/lib/binary-geometries.js.map +1 -0
  12. package/dist/{esm/lib → lib}/parse-flatgeobuf.js +1 -1
  13. package/dist/lib/parse-flatgeobuf.js.map +1 -0
  14. package/dist/{esm/workers → workers}/flatgeobuf-worker.js +1 -1
  15. package/dist/workers/flatgeobuf-worker.js.map +1 -0
  16. package/package.json +17 -9
  17. package/src/flatgeobuf-loader.ts +1 -1
  18. package/dist/bundle.d.ts +0 -2
  19. package/dist/bundle.d.ts.map +0 -1
  20. package/dist/es5/bundle.js +0 -6
  21. package/dist/es5/bundle.js.map +0 -1
  22. package/dist/es5/flatgeobuf-loader.js +0 -27
  23. package/dist/es5/flatgeobuf-loader.js.map +0 -1
  24. package/dist/es5/index.js +0 -44
  25. package/dist/es5/index.js.map +0 -1
  26. package/dist/es5/lib/binary-geometries.js +0 -137
  27. package/dist/es5/lib/binary-geometries.js.map +0 -1
  28. package/dist/es5/lib/parse-flatgeobuf.js +0 -193
  29. package/dist/es5/lib/parse-flatgeobuf.js.map +0 -1
  30. package/dist/es5/workers/flatgeobuf-worker.js +0 -6
  31. package/dist/es5/workers/flatgeobuf-worker.js.map +0 -1
  32. package/dist/esm/bundle.js +0 -4
  33. package/dist/esm/bundle.js.map +0 -1
  34. package/dist/esm/flatgeobuf-loader.js.map +0 -1
  35. package/dist/esm/index.js.map +0 -1
  36. package/dist/esm/lib/binary-geometries.js.map +0 -1
  37. package/dist/esm/lib/parse-flatgeobuf.js.map +0 -1
  38. package/dist/esm/workers/flatgeobuf-worker.js.map +0 -1
  39. package/src/bundle.ts +0 -4
@@ -1,7 +1,7 @@
1
1
  import type { Loader, LoaderOptions } from '@loaders.gl/loader-utils';
2
2
  export type FlatGeobufLoaderOptions = LoaderOptions & {
3
3
  flatgeobuf?: {
4
- shape?: 'geojson-table' | 'columnar-table' | 'geojson-table' | 'geojson' | 'binary';
4
+ shape?: 'geojson-table' | 'columnar-table' | 'geojson' | 'binary';
5
5
  };
6
6
  gis?: {
7
7
  reproject?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"flatgeobuf-loader.d.ts","sourceRoot":"","sources":["../src/flatgeobuf-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAMpE,MAAM,MAAM,uBAAuB,GAAG,aAAa,GAAG;IACpD,UAAU,CAAC,EAAE;QACX,KAAK,CAAC,EAAE,eAAe,GAAG,gBAAgB,GAAG,eAAe,GAAG,SAAS,GAAG,QAAQ,CAAC;KACrF,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,+CAA+C;QAC/C,MAAM,CAAC,EAAE,KAAK,CAAC;KAChB,CAAC;CACH,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,uBAAuB,CAiBtE,CAAC"}
1
+ {"version":3,"file":"flatgeobuf-loader.d.ts","sourceRoot":"","sources":["../src/flatgeobuf-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAMpE,MAAM,MAAM,uBAAuB,GAAG,aAAa,GAAG;IACpD,UAAU,CAAC,EAAE;QACX,KAAK,CAAC,EAAE,eAAe,GAAG,gBAAgB,GAAG,SAAS,GAAG,QAAQ,CAAC;KACnE,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,+CAA+C;QAC/C,MAAM,CAAC,EAAE,KAAK,CAAC;KAChB,CAAC;CACH,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,uBAAuB,CAiBtE,CAAC"}
@@ -1,4 +1,4 @@
1
- const VERSION = typeof "4.0.0-beta.2" !== 'undefined' ? "4.0.0-beta.2" : 'latest';
1
+ const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
2
2
  export const FlatGeobufLoader = {
3
3
  id: 'flatgeobuf',
4
4
  name: 'FlatGeobuf',
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatgeobuf-loader.js","names":["VERSION","__VERSION__","FlatGeobufLoader","id","name","module","version","worker","extensions","mimeTypes","category","options","flatgeobuf","shape","gis","reproject"],"sources":["../src/flatgeobuf-loader.ts"],"sourcesContent":["import type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';\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\nexport type FlatGeobufLoaderOptions = LoaderOptions & {\n flatgeobuf?: {\n shape?: 'geojson-table' | 'columnar-table' | 'geojson' | 'binary';\n };\n gis?: {\n reproject?: boolean;\n _targetCrs?: string;\n /** @deprecated Use options.flatgeobuf.shape */\n format?: never;\n };\n};\n\nexport const FlatGeobufLoader: Loader<any, any, FlatGeobufLoaderOptions> = {\n id: 'flatgeobuf',\n name: 'FlatGeobuf',\n module: 'flatgeobuf',\n version: VERSION,\n worker: true,\n extensions: ['fgb'],\n mimeTypes: ['application/octet-stream'],\n category: 'geometry',\n options: {\n flatgeobuf: {\n shape: 'geojson-table'\n },\n gis: {\n reproject: false\n }\n }\n};\n"],"mappings":"AAIA,MAAMA,OAAO,GAAG,OAAOC,WAAW,KAAK,WAAW,GAAGA,WAAW,GAAG,QAAQ;AAc3E,OAAO,MAAMC,gBAA2D,GAAG;EACzEC,EAAE,EAAE,YAAY;EAChBC,IAAI,EAAE,YAAY;EAClBC,MAAM,EAAE,YAAY;EACpBC,OAAO,EAAEN,OAAO;EAChBO,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,0BAA0B,CAAC;EACvCC,QAAQ,EAAE,UAAU;EACpBC,OAAO,EAAE;IACPC,UAAU,EAAE;MACVC,KAAK,EAAE;IACT,CAAC;IACDC,GAAG,EAAE;MACHC,SAAS,EAAE;IACb;EACF;AACF,CAAC"}
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  (() => {
2
3
  var __create = Object.create;
3
4
  var __defProp = Object.defineProperty;
@@ -5,21 +6,25 @@
5
6
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
7
  var __getProtoOf = Object.getPrototypeOf;
7
8
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
9
9
  var __commonJS = (cb, mod) => function __require() {
10
- return mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
10
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
11
11
  };
12
- var __reExport = (target, module, desc) => {
13
- if (module && typeof module === "object" || typeof module === "function") {
14
- for (let key of __getOwnPropNames(module))
15
- if (!__hasOwnProp.call(target, key) && key !== "default")
16
- __defProp(target, key, { get: () => module[key], enumerable: !(desc = __getOwnPropDesc(module, key)) || desc.enumerable });
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
17
  }
18
- return target;
19
- };
20
- var __toModule = (module) => {
21
- return __reExport(__markAsModule(__defProp(module != null ? __create(__getProtoOf(module)) : {}, "default", module && module.__esModule && "default" in module ? { get: () => module.default, enumerable: true } : { value: module, enumerable: true })), module);
18
+ return to;
22
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
23
28
 
24
29
  // ../../node_modules/flatbuffers/js/flatbuffers.js
25
30
  var require_flatbuffers = __commonJS({
@@ -347,7 +352,10 @@
347
352
  if (codePoint < 65536) {
348
353
  utf8.push(codePoint >> 12 & 15 | 224);
349
354
  } else {
350
- utf8.push(codePoint >> 18 & 7 | 240, codePoint >> 12 & 63 | 128);
355
+ utf8.push(
356
+ codePoint >> 18 & 7 | 240,
357
+ codePoint >> 12 & 63 | 128
358
+ );
351
359
  }
352
360
  utf8.push(codePoint >> 6 & 63 | 128);
353
361
  }
@@ -422,7 +430,8 @@
422
430
  return flatbuffers.float64[0];
423
431
  };
424
432
  flatbuffers.ByteBuffer.prototype.writeInt8 = function(offset, value) {
425
- this.bytes_[offset] = value;
433
+ this.bytes_[offset] = /** @type {number} */
434
+ value;
426
435
  };
427
436
  flatbuffers.ByteBuffer.prototype.writeUint8 = function(offset, value) {
428
437
  this.bytes_[offset] = value;
@@ -466,11 +475,15 @@
466
475
  };
467
476
  flatbuffers.ByteBuffer.prototype.getBufferIdentifier = function() {
468
477
  if (this.bytes_.length < this.position_ + flatbuffers.SIZEOF_INT + flatbuffers.FILE_IDENTIFIER_LENGTH) {
469
- throw new Error("FlatBuffers: ByteBuffer is too short to contain an identifier.");
478
+ throw new Error(
479
+ "FlatBuffers: ByteBuffer is too short to contain an identifier."
480
+ );
470
481
  }
471
482
  var result = "";
472
483
  for (var i = 0; i < flatbuffers.FILE_IDENTIFIER_LENGTH; i++) {
473
- result += String.fromCharCode(this.readInt8(this.position_ + flatbuffers.SIZEOF_INT + i));
484
+ result += String.fromCharCode(
485
+ this.readInt8(this.position_ + flatbuffers.SIZEOF_INT + i)
486
+ );
474
487
  }
475
488
  return result;
476
489
  };
@@ -515,7 +528,10 @@
515
528
  result += String.fromCharCode(codePoint);
516
529
  } else {
517
530
  codePoint -= 65536;
518
- result += String.fromCharCode((codePoint >> 10) + 55296, (codePoint & (1 << 10) - 1) + 56320);
531
+ result += String.fromCharCode(
532
+ (codePoint >> 10) + 55296,
533
+ (codePoint & (1 << 10) - 1) + 56320
534
+ );
519
535
  }
520
536
  }
521
537
  return result;
@@ -3212,7 +3228,7 @@
3212
3228
 
3213
3229
  // ../worker-utils/src/lib/worker-utils/get-transfer-list.ts
3214
3230
  function getTransferList(object, recursive = true, transfers) {
3215
- const transfersSet = transfers || new Set();
3231
+ const transfersSet = transfers || /* @__PURE__ */ new Set();
3216
3232
  if (!object) {
3217
3233
  } else if (isTransferable(object)) {
3218
3234
  transfersSet.add(object);
@@ -3255,11 +3271,15 @@
3255
3271
  }
3256
3272
  return parentPort;
3257
3273
  }
3258
- var onMessageWrapperMap = new Map();
3274
+ var onMessageWrapperMap = /* @__PURE__ */ new Map();
3259
3275
  var WorkerBody = class {
3276
+ /** Check that we are actually in a worker thread */
3260
3277
  static inWorkerThread() {
3261
3278
  return typeof self !== "undefined" || Boolean(getParentPort());
3262
3279
  }
3280
+ /*
3281
+ * (type: WorkerMessageType, payload: WorkerMessagePayload) => any
3282
+ */
3263
3283
  static set onmessage(onMessage) {
3264
3284
  function handleMessage(message) {
3265
3285
  const parentPort3 = getParentPort();
@@ -3303,6 +3323,11 @@
3303
3323
  globalThis.removeEventListener("message", onMessageWrapper);
3304
3324
  }
3305
3325
  }
3326
+ /**
3327
+ * Send a message from a worker to creating thread (main thread)
3328
+ * @param type
3329
+ * @param payload
3330
+ */
3306
3331
  static postMessage(type, payload) {
3307
3332
  const data = { source: "loaders.gl", type, payload };
3308
3333
  const transferList = getTransferList(payload);
@@ -3334,6 +3359,7 @@
3334
3359
  loader,
3335
3360
  arrayBuffer: input,
3336
3361
  options,
3362
+ // @ts-expect-error fetch missing
3337
3363
  context: {
3338
3364
  ...context,
3339
3365
  _parse: parseOnMainThread
@@ -3402,10 +3428,10 @@
3402
3428
  // ../../node_modules/@babel/runtime/helpers/esm/typeof.js
3403
3429
  function _typeof(obj) {
3404
3430
  "@babel/helpers - typeof";
3405
- return _typeof = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(obj2) {
3431
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj2) {
3406
3432
  return typeof obj2;
3407
3433
  } : function(obj2) {
3408
- return obj2 && typeof Symbol == "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2;
3434
+ return obj2 && "function" == typeof Symbol && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2;
3409
3435
  }, _typeof(obj);
3410
3436
  }
3411
3437
 
@@ -3446,7 +3472,7 @@
3446
3472
  }
3447
3473
 
3448
3474
  // src/flatgeobuf-loader.ts
3449
- var VERSION = true ? "4.0.0-beta.2" : "latest";
3475
+ var VERSION = true ? "4.0.0-beta.3" : "latest";
3450
3476
  var FlatGeobufLoader = {
3451
3477
  id: "flatgeobuf",
3452
3478
  name: "FlatGeobuf",
@@ -4846,7 +4872,6 @@
4846
4872
  var Proj_default = Projection;
4847
4873
 
4848
4874
  // ../../node_modules/proj4/lib/datumUtils.js
4849
- "use strict";
4850
4875
  function compareDatums(source, dest) {
4851
4876
  if (source.datum_type !== dest.datum_type) {
4852
4877
  return false;
@@ -8789,7 +8814,7 @@
8789
8814
  projs_default(core_default);
8790
8815
  var lib_default = core_default;
8791
8816
 
8792
- // ../../node_modules/@math.gl/proj4/dist/esm/lib/proj4-projection.js
8817
+ // ../../node_modules/@math.gl/proj4/dist/lib/proj4-projection.js
8793
8818
  var Proj4Projection = class {
8794
8819
  static defineProjectionAliases(aliases) {
8795
8820
  const aliasArray = [];
@@ -8838,12 +8863,12 @@
8838
8863
  }
8839
8864
 
8840
8865
  // src/lib/parse-flatgeobuf.ts
8841
- var import_geojson = __toModule(require_geojson());
8842
- var import_generic = __toModule(require_generic());
8843
- var import_feature = __toModule(require_feature());
8866
+ var import_geojson = __toESM(require_geojson(), 1);
8867
+ var import_generic = __toESM(require_generic(), 1);
8868
+ var import_feature = __toESM(require_feature(), 1);
8844
8869
 
8845
8870
  // src/lib/binary-geometries.ts
8846
- var import_header_generated = __toModule(require_header_generated());
8871
+ var import_header_generated = __toESM(require_header_generated(), 1);
8847
8872
  function parsePoint(geometry) {
8848
8873
  const xy = geometry.xyArray();
8849
8874
  const z = geometry.zArray();
@@ -8898,8 +8923,16 @@
8898
8923
  const positionSize = parsedParts[0].positions.size;
8899
8924
  for (const parsedPart of parsedParts) {
8900
8925
  concatPositions.set(parsedPart.positions.value, positionCounter * positionSize);
8901
- concatPrimitivePolygonIndices.set(parsedPart.primitivePolygonIndices.value.subarray(1).map((x) => x + positionCounter), primitivePolygonIndicesCounter);
8902
- concatPolygonIndices.set(parsedPart.polygonIndices.value.subarray(1).map((x) => x + positionCounter), polygonIndicesCounter);
8926
+ concatPrimitivePolygonIndices.set(
8927
+ // eslint-disable-next-line
8928
+ parsedPart.primitivePolygonIndices.value.subarray(1).map((x) => x + positionCounter),
8929
+ primitivePolygonIndicesCounter
8930
+ );
8931
+ concatPolygonIndices.set(
8932
+ // eslint-disable-next-line
8933
+ parsedPart.polygonIndices.value.subarray(1).map((x) => x + positionCounter),
8934
+ polygonIndicesCounter
8935
+ );
8903
8936
  positionCounter += parsedPart.positions.value.length / positionSize;
8904
8937
  primitivePolygonIndicesCounter += parsedPart.primitivePolygonIndices.value.length - 1;
8905
8938
  polygonIndicesCounter += parsedPart.polygonIndices.value.length - 1;
@@ -9039,6 +9072,7 @@
9039
9072
  ...FlatGeobufLoader,
9040
9073
  parse: async (arrayBuffer, options) => parseFlatGeobuf(arrayBuffer, options),
9041
9074
  parseSync: parseFlatGeobuf,
9075
+ // @ts-expect-error this is a stream parser not an async iterator parser
9042
9076
  parseInBatchesFromStream: parseFlatGeobufInBatches,
9043
9077
  binary: true
9044
9078
  };
package/dist/index.cjs ADDED
@@ -0,0 +1,265 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var src_exports = {};
22
+ __export(src_exports, {
23
+ FlatGeobufLoader: () => FlatGeobufLoader2,
24
+ FlatGeobufWorkerLoader: () => FlatGeobufLoader
25
+ });
26
+ module.exports = __toCommonJS(src_exports);
27
+
28
+ // src/flatgeobuf-loader.ts
29
+ var VERSION = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
30
+ var FlatGeobufLoader = {
31
+ id: "flatgeobuf",
32
+ name: "FlatGeobuf",
33
+ module: "flatgeobuf",
34
+ version: VERSION,
35
+ worker: true,
36
+ extensions: ["fgb"],
37
+ mimeTypes: ["application/octet-stream"],
38
+ category: "geometry",
39
+ options: {
40
+ flatgeobuf: {
41
+ shape: "geojson-table"
42
+ },
43
+ gis: {
44
+ reproject: false
45
+ }
46
+ }
47
+ };
48
+
49
+ // src/lib/parse-flatgeobuf.ts
50
+ var import_proj4 = require("@math.gl/proj4");
51
+ var import_gis = require("@loaders.gl/gis");
52
+ var import_geojson = require("flatgeobuf/lib/cjs/geojson");
53
+ var import_generic = require("flatgeobuf/lib/cjs/generic");
54
+ var import_feature = require("flatgeobuf/lib/cjs/generic/feature");
55
+
56
+ // src/lib/binary-geometries.ts
57
+ var import_header_generated = require("flatgeobuf/lib/cjs/header_generated");
58
+ function parsePoint(geometry) {
59
+ const xy = geometry.xyArray();
60
+ const z = geometry.zArray();
61
+ const positions = blitArrays(xy, z);
62
+ return { positions };
63
+ }
64
+ function parseLines(geometry) {
65
+ const xy = geometry.xyArray();
66
+ const z = geometry.zArray();
67
+ const positions = blitArrays(xy, z);
68
+ const ends = geometry.endsArray() && Array.from(geometry.endsArray()) || [xy.length / 2];
69
+ ends.unshift(0);
70
+ const pathIndices = { value: new Uint16Array(ends), size: 1 };
71
+ return {
72
+ positions,
73
+ pathIndices
74
+ };
75
+ }
76
+ function parsePolygons(geometry) {
77
+ const xy = geometry.xyArray();
78
+ const z = geometry.zArray();
79
+ const positions = blitArrays(xy, z);
80
+ const ends = geometry.endsArray() && Array.from(geometry.endsArray()) || [xy.length / 2];
81
+ ends.unshift(0);
82
+ const primitivePolygonIndices = { value: new Uint16Array(ends), size: 1 };
83
+ const polygonIndices = { value: new Uint16Array([0, xy.length / 2]), size: 1 };
84
+ return {
85
+ positions,
86
+ primitivePolygonIndices,
87
+ polygonIndices
88
+ };
89
+ }
90
+ function parseMultiPolygons(geometry) {
91
+ const parsedParts = [];
92
+ let nPositions = 0;
93
+ let nPrimitivePolygonIndices = 1;
94
+ let nPolygonIndices = 1;
95
+ for (let i = 0; i < geometry.partsLength(); i++) {
96
+ const part = geometry.parts(i);
97
+ const polygon = parsePolygons(part);
98
+ nPositions += polygon.positions.value.length;
99
+ nPrimitivePolygonIndices += polygon.primitivePolygonIndices.value.length - 1;
100
+ nPolygonIndices += polygon.polygonIndices.value.length - 1;
101
+ parsedParts.push(polygon);
102
+ }
103
+ const concatPositions = new Float64Array(nPositions);
104
+ const concatPrimitivePolygonIndices = new Uint32Array(nPrimitivePolygonIndices);
105
+ const concatPolygonIndices = new Uint32Array(nPolygonIndices);
106
+ let positionCounter = 0;
107
+ let primitivePolygonIndicesCounter = 1;
108
+ let polygonIndicesCounter = 1;
109
+ const positionSize = parsedParts[0].positions.size;
110
+ for (const parsedPart of parsedParts) {
111
+ concatPositions.set(parsedPart.positions.value, positionCounter * positionSize);
112
+ concatPrimitivePolygonIndices.set(
113
+ // eslint-disable-next-line
114
+ parsedPart.primitivePolygonIndices.value.subarray(1).map((x) => x + positionCounter),
115
+ primitivePolygonIndicesCounter
116
+ );
117
+ concatPolygonIndices.set(
118
+ // eslint-disable-next-line
119
+ parsedPart.polygonIndices.value.subarray(1).map((x) => x + positionCounter),
120
+ polygonIndicesCounter
121
+ );
122
+ positionCounter += parsedPart.positions.value.length / positionSize;
123
+ primitivePolygonIndicesCounter += parsedPart.primitivePolygonIndices.value.length - 1;
124
+ polygonIndicesCounter += parsedPart.polygonIndices.value.length - 1;
125
+ }
126
+ return {
127
+ positions: { value: concatPositions, size: positionSize },
128
+ primitivePolygonIndices: { value: concatPrimitivePolygonIndices, size: 1 },
129
+ polygonIndices: { value: concatPolygonIndices, size: 1 }
130
+ };
131
+ }
132
+ function blitArrays(xy, z) {
133
+ if (!z) {
134
+ return { value: xy, size: 2 };
135
+ }
136
+ if (z.length * 2 !== xy.length) {
137
+ throw new Error("Z array must be half XY array's length");
138
+ }
139
+ const totalLength = xy.length + z.length;
140
+ const xyz = new Float64Array(totalLength);
141
+ for (let i = 0; i < xy.length / 2; i++) {
142
+ xyz[i * 3 + 0] = xy[i * 2 + 0];
143
+ xyz[i * 3 + 1] = xy[i * 2 + 1];
144
+ xyz[i * 3 + 2] = z[i];
145
+ }
146
+ return { value: xyz, size: 3 };
147
+ }
148
+ function fromGeometry(geometry, type) {
149
+ switch (type) {
150
+ case import_header_generated.GeometryType.Point:
151
+ case import_header_generated.GeometryType.MultiPoint:
152
+ return parsePoint(geometry);
153
+ case import_header_generated.GeometryType.LineString:
154
+ case import_header_generated.GeometryType.MultiLineString:
155
+ return parseLines(geometry);
156
+ case import_header_generated.GeometryType.Polygon:
157
+ return parsePolygons(geometry);
158
+ case import_header_generated.GeometryType.MultiPolygon:
159
+ return parseMultiPolygons(geometry);
160
+ default:
161
+ throw new Error(`Unimplemented geometry type: ${type}`);
162
+ }
163
+ }
164
+
165
+ // src/lib/parse-flatgeobuf.ts
166
+ function binaryFromFeature(feature, header) {
167
+ const geometry = feature.geometry();
168
+ const geometryType = header.geometryType || geometry.type();
169
+ const parsedGeometry = fromGeometry(geometry, geometryType);
170
+ parsedGeometry.properties = (0, import_feature.parseProperties)(feature, header.columns);
171
+ return parsedGeometry;
172
+ }
173
+ function parseFlatGeobuf(arrayBuffer, options) {
174
+ var _a, _b;
175
+ const shape = ((_a = options == null ? void 0 : options.gis) == null ? void 0 : _a.format) || ((_b = options == null ? void 0 : options.flatgeobuf) == null ? void 0 : _b.shape);
176
+ switch (shape) {
177
+ case "geojson":
178
+ case "geojson-table": {
179
+ const features = parseFlatGeobufToGeoJSON(arrayBuffer, options);
180
+ const table = {
181
+ shape: "geojson-table",
182
+ type: "FeatureCollection",
183
+ features
184
+ };
185
+ return table;
186
+ }
187
+ case "columnar-table":
188
+ const binary = parseFlatGeobufToBinary(arrayBuffer, options);
189
+ return { shape: "columnar-table", data: binary };
190
+ case "binary":
191
+ return parseFlatGeobufToBinary(arrayBuffer, options);
192
+ default:
193
+ throw new Error(shape);
194
+ }
195
+ }
196
+ function parseFlatGeobufToBinary(arrayBuffer, options = {}) {
197
+ const array = new Uint8Array(arrayBuffer);
198
+ return (0, import_generic.deserialize)(array, binaryFromFeature);
199
+ }
200
+ function parseFlatGeobufToGeoJSON(arrayBuffer, options = {}) {
201
+ if (arrayBuffer.byteLength === 0) {
202
+ return [];
203
+ }
204
+ const { reproject = false, _targetCrs = "WGS84" } = options && options.gis || {};
205
+ const arr = new Uint8Array(arrayBuffer);
206
+ let headerMeta;
207
+ const { features } = (0, import_geojson.deserialize)(arr, void 0, (header) => {
208
+ headerMeta = header;
209
+ });
210
+ const crs = headerMeta && headerMeta.crs;
211
+ let projection;
212
+ if (reproject && crs) {
213
+ try {
214
+ projection = new import_proj4.Proj4Projection({ from: crs.wkt, to: _targetCrs });
215
+ } catch (e) {
216
+ }
217
+ }
218
+ if (projection) {
219
+ return (0, import_gis.transformGeoJsonCoords)(features, (coords) => projection.project(coords));
220
+ }
221
+ return features;
222
+ }
223
+ function parseFlatGeobufInBatches(stream, options) {
224
+ if (options && options.gis && options.gis.format === "binary") {
225
+ return parseFlatGeobufInBatchesToBinary(stream, options);
226
+ }
227
+ return parseFlatGeobufInBatchesToGeoJSON(stream, options);
228
+ }
229
+ function parseFlatGeobufInBatchesToBinary(stream, options) {
230
+ const iterator = (0, import_generic.deserialize)(stream, binaryFromFeature);
231
+ return iterator;
232
+ }
233
+ async function* parseFlatGeobufInBatchesToGeoJSON(stream, options) {
234
+ const { reproject = false, _targetCrs = "WGS84" } = options && options.gis || {};
235
+ let headerMeta;
236
+ const iterator = (0, import_geojson.deserialize)(stream, void 0, (header) => {
237
+ headerMeta = header;
238
+ });
239
+ let projection;
240
+ let firstRecord = true;
241
+ for await (const feature of iterator) {
242
+ if (firstRecord) {
243
+ const crs = headerMeta && headerMeta.crs;
244
+ if (reproject && crs) {
245
+ projection = new import_proj4.Proj4Projection({ from: crs.wkt, to: _targetCrs });
246
+ }
247
+ firstRecord = false;
248
+ }
249
+ if (reproject && projection) {
250
+ yield (0, import_gis.transformGeoJsonCoords)([feature], (coords) => projection.project(coords));
251
+ } else {
252
+ yield feature;
253
+ }
254
+ }
255
+ }
256
+
257
+ // src/index.ts
258
+ var FlatGeobufLoader2 = {
259
+ ...FlatGeobufLoader,
260
+ parse: async (arrayBuffer, options) => parseFlatGeobuf(arrayBuffer, options),
261
+ parseSync: parseFlatGeobuf,
262
+ // @ts-expect-error this is a stream parser not an async iterator parser
263
+ parseInBatchesFromStream: parseFlatGeobufInBatches,
264
+ binary: true
265
+ };
@@ -1,5 +1,5 @@
1
- import { FlatGeobufLoader as FlatGeobufWorkerLoader } from './flatgeobuf-loader';
2
- import { parseFlatGeobuf, parseFlatGeobufInBatches } from './lib/parse-flatgeobuf';
1
+ import { FlatGeobufLoader as FlatGeobufWorkerLoader } from "./flatgeobuf-loader.js";
2
+ import { parseFlatGeobuf, parseFlatGeobufInBatches } from "./lib/parse-flatgeobuf.js";
3
3
  export { FlatGeobufWorkerLoader };
4
4
  export const FlatGeobufLoader = {
5
5
  ...FlatGeobufWorkerLoader,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["FlatGeobufLoader","FlatGeobufWorkerLoader","parseFlatGeobuf","parseFlatGeobufInBatches","parse","arrayBuffer","options","parseSync","parseInBatchesFromStream","binary"],"sources":["../src/index.ts"],"sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {FlatGeobufLoaderOptions} from './flatgeobuf-loader';\nimport {FlatGeobufLoader as FlatGeobufWorkerLoader} from './flatgeobuf-loader';\nimport {parseFlatGeobuf, parseFlatGeobufInBatches} from './lib/parse-flatgeobuf';\n\nexport {FlatGeobufWorkerLoader};\n\nexport const FlatGeobufLoader: LoaderWithParser<any, any, FlatGeobufLoaderOptions> = {\n ...FlatGeobufWorkerLoader,\n parse: async (arrayBuffer, options) => parseFlatGeobuf(arrayBuffer, options),\n parseSync: parseFlatGeobuf,\n // @ts-expect-error this is a stream parser not an async iterator parser\n parseInBatchesFromStream: parseFlatGeobufInBatches,\n binary: true\n};\n"],"mappings":"SAEQA,gBAAgB,IAAIC,sBAAsB;AAAA,SAC1CC,eAAe,EAAEC,wBAAwB;AAEjD,SAAQF,sBAAsB;AAE9B,OAAO,MAAMD,gBAAqE,GAAG;EACnF,GAAGC,sBAAsB;EACzBG,KAAK,EAAE,MAAAA,CAAOC,WAAW,EAAEC,OAAO,KAAKJ,eAAe,CAACG,WAAW,EAAEC,OAAO,CAAC;EAC5EC,SAAS,EAAEL,eAAe;EAE1BM,wBAAwB,EAAEL,wBAAwB;EAClDM,MAAM,EAAE;AACV,CAAC"}
@@ -120,7 +120,7 @@ export function fromGeometry(geometry, type) {
120
120
  case GeometryType.MultiPolygon:
121
121
  return parseMultiPolygons(geometry);
122
122
  default:
123
- throw new Error("Unimplemented geometry type: ".concat(type));
123
+ throw new Error(`Unimplemented geometry type: ${type}`);
124
124
  }
125
125
  }
126
126
  //# sourceMappingURL=binary-geometries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary-geometries.js","names":["GeometryType","parsePoint","geometry","xy","xyArray","z","zArray","positions","blitArrays","parseLines","ends","endsArray","Array","from","length","unshift","pathIndices","value","Uint16Array","size","parsePolygons","primitivePolygonIndices","polygonIndices","parseMultiPolygons","parsedParts","nPositions","nPrimitivePolygonIndices","nPolygonIndices","i","partsLength","part","parts","polygon","push","concatPositions","Float64Array","concatPrimitivePolygonIndices","Uint32Array","concatPolygonIndices","positionCounter","primitivePolygonIndicesCounter","polygonIndicesCounter","positionSize","parsedPart","set","subarray","map","x","Error","totalLength","xyz","fromGeometry","type","Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon"],"sources":["../../src/lib/binary-geometries.ts"],"sourcesContent":["import {GeometryType} from 'flatgeobuf/lib/cjs/header_generated';\n\n// Parse Point to flat array\nfunction parsePoint(geometry) {\n const xy = geometry.xyArray();\n const z = geometry.zArray();\n const positions = blitArrays(xy, z);\n return {positions};\n}\n\nfunction parseLines(geometry) {\n const xy = geometry.xyArray();\n const z = geometry.zArray();\n const positions = blitArrays(xy, z);\n\n // If endsArray is null, a single LineString. Otherwise, contains the end\n // indices of each part of the MultiLineString. geometry.endsArray() omits the\n // initial 0 that we have in our internal format.\n const ends = (geometry.endsArray() && Array.from(geometry.endsArray())) || [xy.length / 2];\n ends.unshift(0);\n\n const pathIndices = {value: new Uint16Array(ends), size: 1};\n\n return {\n positions,\n pathIndices\n };\n}\n\nfunction parsePolygons(geometry) {\n const xy = geometry.xyArray();\n const z = geometry.zArray();\n const positions = blitArrays(xy, z);\n\n // If endsArray is null, a simple Polygon with no inner rings. Otherwise,\n // contains the end indices of each ring of the Polygon. geometry.endsArray()\n // omits the initial 0 that we have in our internal format.\n const ends = (geometry.endsArray() && Array.from(geometry.endsArray())) || [xy.length / 2];\n ends.unshift(0);\n\n const primitivePolygonIndices = {value: new Uint16Array(ends), size: 1};\n const polygonIndices = {value: new Uint16Array([0, xy.length / 2]), size: 1};\n\n return {\n positions,\n primitivePolygonIndices,\n polygonIndices\n };\n}\n\n// eslint-disable-next-line max-statements\nfunction parseMultiPolygons(geometry) {\n // Create arrays for each geometry part, then concatenate\n const parsedParts: any[] = [];\n let nPositions = 0;\n let nPrimitivePolygonIndices = 1;\n let nPolygonIndices = 1;\n\n for (let i = 0; i < geometry.partsLength(); i++) {\n const part = geometry.parts(i);\n const polygon = parsePolygons(part);\n\n nPositions += polygon.positions.value.length;\n nPrimitivePolygonIndices += polygon.primitivePolygonIndices.value.length - 1;\n nPolygonIndices += polygon.polygonIndices.value.length - 1;\n\n parsedParts.push(polygon);\n }\n\n const concatPositions = new Float64Array(nPositions);\n const concatPrimitivePolygonIndices = new Uint32Array(nPrimitivePolygonIndices);\n const concatPolygonIndices = new Uint32Array(nPolygonIndices);\n\n let positionCounter = 0;\n let primitivePolygonIndicesCounter = 1;\n let polygonIndicesCounter = 1;\n\n // Assumes all parts of the multipolygon have the same size\n const positionSize = parsedParts[0].positions.size;\n\n for (const parsedPart of parsedParts) {\n concatPositions.set(parsedPart.positions.value, positionCounter * positionSize);\n\n // For indices, need to add positionCounter so that position indices are\n // correct in the concatenated positions\n concatPrimitivePolygonIndices.set(\n // eslint-disable-next-line\n parsedPart.primitivePolygonIndices.value.subarray(1).map((x) => x + positionCounter),\n primitivePolygonIndicesCounter\n );\n concatPolygonIndices.set(\n // eslint-disable-next-line\n parsedPart.polygonIndices.value.subarray(1).map((x) => x + positionCounter),\n polygonIndicesCounter\n );\n\n positionCounter += parsedPart.positions.value.length / positionSize;\n primitivePolygonIndicesCounter += parsedPart.primitivePolygonIndices.value.length - 1;\n polygonIndicesCounter += parsedPart.polygonIndices.value.length - 1;\n }\n\n return {\n positions: {value: concatPositions, size: positionSize},\n primitivePolygonIndices: {value: concatPrimitivePolygonIndices, size: 1},\n polygonIndices: {value: concatPolygonIndices, size: 1}\n };\n}\n\n// Combine xy and z arrays\nfunction blitArrays(xy, z) {\n if (!z) {\n return {value: xy, size: 2};\n }\n\n if (z.length * 2 !== xy.length) {\n throw new Error('Z array must be half XY array\\'s length');\n }\n const totalLength = xy.length + z.length;\n\n const xyz = new Float64Array(totalLength);\n for (let i = 0; i < xy.length / 2; i++) {\n xyz[i * 3 + 0] = xy[i * 2 + 0];\n xyz[i * 3 + 1] = xy[i * 2 + 1];\n xyz[i * 3 + 2] = z[i];\n }\n return {value: xyz, size: 3};\n}\n\nexport function fromGeometry(geometry, type) {\n switch (type) {\n case GeometryType.Point:\n case GeometryType.MultiPoint:\n return parsePoint(geometry);\n case GeometryType.LineString:\n case GeometryType.MultiLineString:\n return parseLines(geometry);\n case GeometryType.Polygon:\n return parsePolygons(geometry);\n case GeometryType.MultiPolygon:\n return parseMultiPolygons(geometry);\n default:\n throw new Error(`Unimplemented geometry type: ${type}`);\n }\n}\n"],"mappings":"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"}
@@ -3,7 +3,7 @@ import { transformGeoJsonCoords } from '@loaders.gl/gis';
3
3
  import { deserialize as deserializeGeoJson } from 'flatgeobuf/lib/cjs/geojson';
4
4
  import { deserialize as deserializeGeneric } from 'flatgeobuf/lib/cjs/generic';
5
5
  import { parseProperties as parsePropertiesBinary } from 'flatgeobuf/lib/cjs/generic/feature';
6
- import { fromGeometry as binaryFromGeometry } from './binary-geometries';
6
+ import { fromGeometry as binaryFromGeometry } from "./binary-geometries.js";
7
7
  function binaryFromFeature(feature, header) {
8
8
  const geometry = feature.geometry();
9
9
  const geometryType = header.geometryType || geometry.type();
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-flatgeobuf.js","names":["Proj4Projection","transformGeoJsonCoords","deserialize","deserializeGeoJson","deserializeGeneric","parseProperties","parsePropertiesBinary","fromGeometry","binaryFromGeometry","binaryFromFeature","feature","header","geometry","geometryType","type","parsedGeometry","properties","columns","parseFlatGeobuf","arrayBuffer","options","_options$gis","_options$flatgeobuf","shape","gis","format","flatgeobuf","features","parseFlatGeobufToGeoJSON","table","binary","parseFlatGeobufToBinary","data","Error","arguments","length","undefined","array","Uint8Array","byteLength","reproject","_targetCrs","arr","headerMeta","crs","projection","from","wkt","to","e","coords","project","parseFlatGeobufInBatches","stream","parseFlatGeobufInBatchesToBinary","parseFlatGeobufInBatchesToGeoJSON","iterator","firstRecord"],"sources":["../../src/lib/parse-flatgeobuf.ts"],"sourcesContent":["import {Proj4Projection} from '@math.gl/proj4';\nimport {transformGeoJsonCoords} from '@loaders.gl/gis';\n\nimport {deserialize as deserializeGeoJson} from 'flatgeobuf/lib/cjs/geojson';\nimport {deserialize as deserializeGeneric} from 'flatgeobuf/lib/cjs/generic';\nimport {parseProperties as parsePropertiesBinary} from 'flatgeobuf/lib/cjs/generic/feature';\n\nimport type {FlatGeobufLoaderOptions} from '../flatgeobuf-loader';\nimport type {GeoJSONTable, Feature, Table} from '@loaders.gl/schema';\nimport {fromGeometry as binaryFromGeometry} from './binary-geometries';\n// import {Feature} from 'flatgeobuf/lib/cjs/feature_generated';\n\n// TODO: reproject binary features\nfunction binaryFromFeature(feature, header) {\n const geometry = feature.geometry();\n\n // FlatGeobuf files can only hold a single geometry type per file, otherwise\n // GeometryType is GeometryCollection\n // I believe geometry.type() is null (0) except when the geometry type isn't\n // known in the header?\n const geometryType = header.geometryType || geometry.type();\n const parsedGeometry = binaryFromGeometry(geometry, geometryType);\n // @ts-expect-error this looks wrong\n parsedGeometry.properties = parsePropertiesBinary(feature, header.columns);\n\n // TODO: wrap binary data either in points, lines, or polygons key\n return parsedGeometry;\n}\n\n/*\n * Parse FlatGeobuf arrayBuffer and return GeoJSON.\n *\n * @param arrayBuffer A FlatGeobuf arrayBuffer\n * @return A GeoJSON geometry object\n */\nexport function parseFlatGeobuf(\n arrayBuffer: ArrayBuffer,\n options?: FlatGeobufLoaderOptions\n): Table {\n const shape = options?.gis?.format || options?.flatgeobuf?.shape;\n\n switch (shape) {\n case 'geojson':\n case 'geojson-table': {\n const features = parseFlatGeobufToGeoJSON(arrayBuffer, options);\n const table: GeoJSONTable = {\n shape: 'geojson-table',\n type: 'FeatureCollection',\n features\n };\n return table;\n }\n\n case 'columnar-table': // binary + some JS arrays\n const binary = parseFlatGeobufToBinary(arrayBuffer, options);\n // @ts-expect-error\n return {shape: 'columnar-table', data: binary};\n\n case 'binary':\n // @ts-expect-error\n return parseFlatGeobufToBinary(arrayBuffer, options);\n\n default:\n throw new Error(shape);\n }\n}\n\nfunction parseFlatGeobufToBinary(arrayBuffer: ArrayBuffer, options: FlatGeobufLoaderOptions = {}) {\n // TODO: reproject binary features\n // const {reproject = false, _targetCrs = 'WGS84'} = (options && options.gis) || {};\n\n const array = new Uint8Array(arrayBuffer);\n // @ts-expect-error this looks wrong\n return deserializeGeneric(array, binaryFromFeature);\n}\n\nfunction parseFlatGeobufToGeoJSON(\n arrayBuffer: ArrayBuffer,\n options: FlatGeobufLoaderOptions = {}\n): Feature[] {\n if (arrayBuffer.byteLength === 0) {\n return [];\n }\n\n const {reproject = false, _targetCrs = 'WGS84'} = (options && options.gis) || {};\n\n const arr = new Uint8Array(arrayBuffer);\n\n let headerMeta;\n // @ts-expect-error this looks wrong\n const {features} = deserializeGeoJson(arr, undefined, (header) => {\n headerMeta = header;\n });\n\n const crs = headerMeta && headerMeta.crs;\n let projection;\n if (reproject && crs) {\n // Constructing the projection may fail for some invalid WKT strings\n try {\n projection = new Proj4Projection({from: crs.wkt, to: _targetCrs});\n } catch (e) {\n // no op\n }\n }\n\n if (projection) {\n return transformGeoJsonCoords(features, (coords) => projection.project(coords));\n }\n\n return features;\n}\n\n/*\n * Parse FlatGeobuf arrayBuffer and return GeoJSON.\n *\n * @param {ReadableStream} _ A FlatGeobuf arrayBuffer\n * @return A GeoJSON geometry object iterator\n */\n// eslint-disable-next-line complexity\nexport function parseFlatGeobufInBatches(stream, options: FlatGeobufLoaderOptions) {\n if (options && options.gis && options.gis.format === 'binary') {\n return parseFlatGeobufInBatchesToBinary(stream, options);\n }\n\n return parseFlatGeobufInBatchesToGeoJSON(stream, options);\n}\n\nfunction parseFlatGeobufInBatchesToBinary(stream, options: FlatGeobufLoaderOptions) {\n // TODO: reproject binary streaming features\n // const {reproject = false, _targetCrs = 'WGS84'} = (options && options.gis) || {};\n\n // @ts-expect-error\n const iterator = deserializeGeneric(stream, binaryFromFeature);\n return iterator;\n}\n\n// eslint-disable-next-line complexity\nasync function* parseFlatGeobufInBatchesToGeoJSON(stream, options: FlatGeobufLoaderOptions) {\n const {reproject = false, _targetCrs = 'WGS84'} = (options && options.gis) || {};\n\n let headerMeta;\n const iterator = deserializeGeoJson(stream, undefined, (header) => {\n headerMeta = header;\n });\n\n let projection;\n let firstRecord = true;\n // @ts-expect-error this looks wrong\n for await (const feature of iterator) {\n if (firstRecord) {\n const crs = headerMeta && headerMeta.crs;\n if (reproject && crs) {\n projection = new Proj4Projection({from: crs.wkt, to: _targetCrs});\n }\n\n firstRecord = false;\n }\n\n if (reproject && projection) {\n // eslint-disable-next-line\n yield transformGeoJsonCoords([feature], (coords) => projection.project(coords));\n } else {\n yield feature;\n }\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import { createLoaderWorker } from '@loaders.gl/loader-utils';
2
- import { FlatGeobufLoader } from '../index';
2
+ import { FlatGeobufLoader } from "../index.js";
3
3
  createLoaderWorker(FlatGeobufLoader);
4
4
  //# sourceMappingURL=flatgeobuf-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatgeobuf-worker.js","names":["createLoaderWorker","FlatGeobufLoader"],"sources":["../../src/workers/flatgeobuf-worker.ts"],"sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport {FlatGeobufLoader} from '../index';\n\ncreateLoaderWorker(FlatGeobufLoader);\n"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,0BAA0B;AAAC,SACpDC,gBAAgB;AAExBD,kBAAkB,CAACC,gBAAgB,CAAC"}