@loaders.gl/pointclouds 5.0.0-beta.4 → 5.0.0-beta.6

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 (67) hide show
  1. package/LAS-README.md +1 -1
  2. package/PCD-README.md +1 -1
  3. package/PLY-README.md +1 -1
  4. package/README.md +1 -1
  5. package/dist/dist.dev.js +129 -90
  6. package/dist/dist.min.js +20 -20
  7. package/dist/las/las-loader-shared.cjs +1 -1
  8. package/dist/las/las-loader-shared.js +1 -1
  9. package/dist/las/las-loader-types.d.ts +2 -2
  10. package/dist/las/las-loader.cjs +4 -4
  11. package/dist/las/las-loader.cjs.map +2 -2
  12. package/dist/las/las-loader.d.ts +1 -1
  13. package/dist/las/las-loader.d.ts.map +1 -1
  14. package/dist/las/las-loader.js +1 -1
  15. package/dist/las/las-loader.js.map +1 -1
  16. package/dist/las/las-writer.cjs +1 -1
  17. package/dist/las/las-writer.js +1 -1
  18. package/dist/las-loader.cjs +4 -4
  19. package/dist/las-loader.cjs.map +2 -2
  20. package/dist/las-worker.js +303 -80
  21. package/dist/las-writer.cjs +1 -1
  22. package/dist/pcd/pcd-loader-types.cjs +3 -3
  23. package/dist/pcd/pcd-loader-types.cjs.map +2 -2
  24. package/dist/pcd/pcd-loader-types.d.ts +1 -1
  25. package/dist/pcd/pcd-loader-types.d.ts.map +1 -1
  26. package/dist/pcd/pcd-loader-types.js +2 -2
  27. package/dist/pcd/pcd-loader-types.js.map +1 -1
  28. package/dist/pcd/pcd-loader.cjs +4 -4
  29. package/dist/pcd/pcd-loader.cjs.map +2 -2
  30. package/dist/pcd/pcd-loader.d.ts +1 -1
  31. package/dist/pcd/pcd-loader.d.ts.map +1 -1
  32. package/dist/pcd/pcd-loader.js +1 -1
  33. package/dist/pcd/pcd-loader.js.map +1 -1
  34. package/dist/pcd/pcd-writer.cjs +1 -1
  35. package/dist/pcd/pcd-writer.js +1 -1
  36. package/dist/pcd-loader-types.cjs +3 -3
  37. package/dist/pcd-loader-types.cjs.map +2 -2
  38. package/dist/pcd-loader.cjs +4 -4
  39. package/dist/pcd-loader.cjs.map +2 -2
  40. package/dist/pcd-worker.js +568 -287
  41. package/dist/pcd-writer.cjs +1 -1
  42. package/dist/ply/ply-loader-types.cjs +3 -3
  43. package/dist/ply/ply-loader-types.cjs.map +2 -2
  44. package/dist/ply/ply-loader-types.d.ts +1 -1
  45. package/dist/ply/ply-loader-types.d.ts.map +1 -1
  46. package/dist/ply/ply-loader-types.js +2 -2
  47. package/dist/ply/ply-loader-types.js.map +1 -1
  48. package/dist/ply/ply-loader.cjs +4 -4
  49. package/dist/ply/ply-loader.cjs.map +2 -2
  50. package/dist/ply/ply-loader.d.ts +1 -1
  51. package/dist/ply/ply-loader.d.ts.map +1 -1
  52. package/dist/ply/ply-loader.js +1 -1
  53. package/dist/ply/ply-loader.js.map +1 -1
  54. package/dist/ply/ply-writer.cjs +1 -1
  55. package/dist/ply/ply-writer.js +1 -1
  56. package/dist/ply-loader-types.cjs +3 -3
  57. package/dist/ply-loader-types.cjs.map +2 -2
  58. package/dist/ply-loader.cjs +4 -4
  59. package/dist/ply-loader.cjs.map +2 -2
  60. package/dist/ply-worker.js +394 -113
  61. package/dist/ply-writer.cjs +1 -1
  62. package/package.json +3 -3
  63. package/src/las/las-loader.ts +1 -1
  64. package/src/pcd/pcd-loader-types.ts +1 -1
  65. package/src/pcd/pcd-loader.ts +1 -1
  66. package/src/ply/ply-loader-types.ts +1 -1
  67. package/src/ply/ply-loader.ts +1 -1
@@ -42,10 +42,10 @@
42
42
  }
43
43
  });
44
44
 
45
- // ../../node_modules/@math.gl/core/dist/worker-utils/lib/node/worker_threads-browser.js
45
+ // ../../node_modules/@math.gl/tasks/dist/worker-utils/lib/node/worker_threads-browser.js
46
46
  var parentPort = globalThis.process?.getBuiltinModule?.("node:worker_threads")?.parentPort ?? null;
47
47
 
48
- // ../../node_modules/@math.gl/core/dist/worker-utils/lib/worker-utils/get-transfer-list.js
48
+ // ../../node_modules/@math.gl/tasks/dist/worker-utils/lib/worker-utils/get-transfer-list.js
49
49
  function getTransferList(object, recursive = true, transfers) {
50
50
  const transfersSet = transfers || /* @__PURE__ */ new Set();
51
51
  const seen = /* @__PURE__ */ new Set();
@@ -96,7 +96,7 @@
96
96
  return false;
97
97
  }
98
98
 
99
- // ../../node_modules/@math.gl/core/dist/worker-utils/lib/worker-farm/worker-body.js
99
+ // ../../node_modules/@math.gl/tasks/dist/worker-utils/lib/worker-farm/worker-body.js
100
100
  async function getParentPort() {
101
101
  return parentPort;
102
102
  }
@@ -183,7 +183,7 @@
183
183
  return messageData && typeof messageData.source === "string" && messageData.source.startsWith("loaders.gl") ? messageData : null;
184
184
  }
185
185
 
186
- // ../../node_modules/@math.gl/core/dist/worker-utils/lib/async-queue/async-queue.js
186
+ // ../../node_modules/@math.gl/tasks/dist/worker-utils/lib/async-queue/async-queue.js
187
187
  var AsyncQueue = class {
188
188
  constructor() {
189
189
  this._values = [];
@@ -250,7 +250,7 @@
250
250
  }
251
251
  };
252
252
 
253
- // ../../node_modules/@math.gl/core/dist/worker-utils/lib/worker-api/shared-state.js
253
+ // ../../node_modules/@math.gl/tasks/dist/worker-utils/lib/worker-api/shared-state.js
254
254
  var SharedWorkerState = class {
255
255
  constructor(buffer) {
256
256
  if (typeof SharedArrayBuffer === "undefined" || !(buffer instanceof SharedArrayBuffer) || buffer.byteLength !== 16)
@@ -289,14 +289,14 @@
289
289
  }
290
290
  };
291
291
 
292
- // ../../node_modules/@math.gl/core/dist/worker-utils/lib/worker-api/validate-output-ownership.js
292
+ // ../../node_modules/@math.gl/tasks/dist/worker-utils/lib/worker-api/validate-output-ownership.js
293
293
  function validateOutputOwnership(ownership) {
294
294
  if (ownership !== void 0 && ownership !== "copy" && ownership !== "transfer") {
295
295
  throw new Error("Invalid worker output ownership");
296
296
  }
297
297
  }
298
298
 
299
- // ../../node_modules/@math.gl/core/dist/worker-utils/lib/worker-api/create-worker.js
299
+ // ../../node_modules/@math.gl/tasks/dist/worker-utils/lib/worker-api/create-worker.js
300
300
  var requestId = 0;
301
301
  var activeController = null;
302
302
  var activeInputBatches = null;
@@ -504,12 +504,12 @@
504
504
  };
505
505
  }
506
506
 
507
- // ../../node_modules/@math.gl/core/dist/worker-utils/index.js
507
+ // ../../node_modules/@math.gl/tasks/dist/worker-utils/index.js
508
508
  var import_meta = {};
509
509
  var path = typeof __filename === "string" ? __filename.replace(/\\/g, "/") : "";
510
510
  var moduleUrl = path ? `file://${path.startsWith("/") ? "" : "/"}${encodeURI(path).replace(/#/g, "%23").replace(/\?/g, "%3F")}` : import_meta.url;
511
511
 
512
- // ../../node_modules/@math.gl/core/dist/tasks/task-preload.js
512
+ // ../../node_modules/@math.gl/tasks/dist/tasks/task-preload.js
513
513
  var pending = /* @__PURE__ */ new WeakMap();
514
514
  var loaded = /* @__PURE__ */ new WeakSet();
515
515
  function preloadTaskCode(task, signal) {
@@ -546,17 +546,182 @@
546
546
  });
547
547
  }
548
548
 
549
- // ../../node_modules/@math.gl/core/dist/tasks/task-runtime.js
549
+ // ../../node_modules/@math.gl/tasks/dist/tasks/task-channel.js
550
+ var TaskRequestError = class extends Error {
551
+ };
552
+ var TaskChannel = class {
553
+ constructor(options) {
554
+ this.options = options;
555
+ this.nextId = 1;
556
+ this.pending = /* @__PURE__ */ new Map();
557
+ this.incoming = /* @__PURE__ */ new Map();
558
+ }
559
+ /** Send a request without serializing other in-flight requests. */
560
+ request(operation, value, signal, transfer = []) {
561
+ if (this.failure)
562
+ return Promise.reject(this.failure.reason);
563
+ if (signal?.aborted)
564
+ return Promise.reject(signal.reason);
565
+ const id = this.nextId++;
566
+ return new Promise((resolve, reject) => {
567
+ const abort = () => {
568
+ const pending2 = this.pending.get(id);
569
+ if (!pending2)
570
+ return;
571
+ this.pending.delete(id);
572
+ pending2.cleanup();
573
+ reject(signal?.reason);
574
+ this.send({ source: "math.gl/tasks", kind: "cancel", id });
575
+ };
576
+ this.pending.set(id, {
577
+ resolve,
578
+ reject,
579
+ cleanup: () => signal?.removeEventListener("abort", abort)
580
+ });
581
+ signal?.addEventListener("abort", abort, { once: true });
582
+ this.send({ source: "math.gl/tasks", kind: "request", id, operation, value }, transfer);
583
+ });
584
+ }
585
+ /** Send a one-way notification. */
586
+ emit(operation, value, transfer = []) {
587
+ if (this.failure)
588
+ throw this.failure.reason;
589
+ this.send({ source: "math.gl/tasks", kind: "event", id: 0, operation, value }, transfer);
590
+ }
591
+ /** Dispatch a transport message; unrelated protocols are ignored. */
592
+ receive(message) {
593
+ if (this.failure || message?.source !== "math.gl/tasks")
594
+ return;
595
+ if (message.kind === "failure") {
596
+ const reason = new Error(message.error?.message ?? "Task channel failed");
597
+ this.close(reason);
598
+ this.options.onFailure?.(reason);
599
+ } else if (message.kind === "result" || message.kind === "error") {
600
+ const pending2 = this.pending.get(message.id);
601
+ if (!pending2)
602
+ return;
603
+ this.pending.delete(message.id);
604
+ pending2.cleanup();
605
+ if (message.kind === "result")
606
+ pending2.resolve(message.value);
607
+ else {
608
+ const error = new TaskRequestError(message.error?.message ?? "Task request failed");
609
+ error.name = message.error?.name ?? "Error";
610
+ pending2.reject(error);
611
+ }
612
+ } else if (message.kind === "cancel") {
613
+ this.incoming.get(message.id)?.abort(new DOMException("Task request cancelled", "AbortError"));
614
+ } else if (message.kind === "event") {
615
+ try {
616
+ this.options.handleEvent?.(message.operation, message.value);
617
+ } catch (error) {
618
+ this.fail(error);
619
+ }
620
+ } else if (message.kind === "request") {
621
+ if (this.incoming.has(message.id)) {
622
+ this.fail(new Error("Duplicate task request identifier"));
623
+ return;
624
+ }
625
+ const controller = new AbortController();
626
+ this.incoming.set(message.id, controller);
627
+ void Promise.resolve().then(() => {
628
+ controller.signal.throwIfAborted();
629
+ return this.options.handleRequest(message.operation, message.value, controller.signal);
630
+ }).then((value) => {
631
+ if (!controller.signal.aborted && !this.failure) {
632
+ this.send({ source: "math.gl/tasks", kind: "result", id: message.id, value }, this.options.getResultTransferList?.(value, message.value));
633
+ }
634
+ }).catch((reason) => {
635
+ if (!controller.signal.aborted && !this.failure) {
636
+ this.send({
637
+ source: "math.gl/tasks",
638
+ kind: "error",
639
+ id: message.id,
640
+ error: {
641
+ name: reason instanceof Error ? reason.name : "Error",
642
+ message: reason instanceof Error ? reason.message : String(reason)
643
+ }
644
+ });
645
+ }
646
+ }).finally(() => this.incoming.delete(message.id));
647
+ }
648
+ }
649
+ /** Reject all outstanding calls with a common cause and abort incoming callbacks. */
650
+ close(reason = new Error("Task channel closed")) {
651
+ if (this.failure)
652
+ return;
653
+ this.failure = { reason };
654
+ for (const pending2 of this.pending.values()) {
655
+ pending2.cleanup();
656
+ pending2.reject(reason);
657
+ }
658
+ this.pending.clear();
659
+ for (const controller of this.incoming.values())
660
+ controller.abort(reason);
661
+ this.incoming.clear();
662
+ }
663
+ send(message, transfer = []) {
664
+ if (this.failure)
665
+ return;
666
+ try {
667
+ this.options.send(message, transfer);
668
+ } catch (error) {
669
+ this.fail(error);
670
+ }
671
+ }
672
+ /** Invalidate the channel and notify the peer when the transport still works. */
673
+ fail(reason) {
674
+ if (this.failure)
675
+ return;
676
+ this.close(reason);
677
+ try {
678
+ this.options.send({
679
+ source: "math.gl/tasks",
680
+ kind: "failure",
681
+ id: 0,
682
+ error: {
683
+ name: reason instanceof Error ? reason.name : "Error",
684
+ message: reason instanceof Error ? reason.message : String(reason)
685
+ }
686
+ }, []);
687
+ } catch {
688
+ }
689
+ this.options.onFailure?.(reason);
690
+ }
691
+ };
692
+
693
+ // ../../node_modules/@math.gl/tasks/dist/tasks/task-runtime.js
550
694
  function assertPayload(value) {
551
695
  if (!value || typeof value !== "object" || Object.getPrototypeOf(value) !== Object.prototype) {
552
696
  throw new TypeError("Task payloads must be plain objects with named fields");
553
697
  }
554
698
  }
699
+ function clonePayload(value, ownership = "copy") {
700
+ assertPayload(value);
701
+ if (!["copy", "transfer", "share"].includes(ownership))
702
+ throw new TypeError("Invalid input ownership");
703
+ const transfer = getTransferList(value);
704
+ if (ownership === "share" && transfer.length)
705
+ throw new TypeError("Share requires shared storage");
706
+ return structuredClone(value, {
707
+ transfer: ownership === "transfer" ? transfer : []
708
+ });
709
+ }
555
710
  function taskContext(state, context = {}) {
556
711
  const signal = context.signal ?? new AbortController().signal;
557
712
  return {
558
713
  state,
559
714
  signal,
715
+ requestHost: async (operation, payload, controls) => {
716
+ signal.throwIfAborted();
717
+ if (!context.requestHost)
718
+ throw new Error("No host request handler configured");
719
+ return context.requestHost(operation, payload, controls);
720
+ },
721
+ emitHost: (operation, payload) => {
722
+ signal.throwIfAborted();
723
+ context.emitHost?.(operation, payload);
724
+ },
560
725
  throwIfAborted: () => {
561
726
  signal.throwIfAborted();
562
727
  context.throwIfAborted?.();
@@ -621,6 +786,69 @@
621
786
  throw new Error("A task is already installed in this worker");
622
787
  installed = true;
623
788
  const runtime = new TaskRuntime(task);
789
+ let channelStream;
790
+ const channel = new TaskChannel({
791
+ getResultTransferList: (value, request) => request.outputOwnership === "transfer" ? getTransferList(value) : [],
792
+ send: (message, transfer) => {
793
+ const snapshot = structuredClone(message, { transfer });
794
+ void WorkerBody.postMessage("task-channel", snapshot).catch((reason) => channel.fail(reason));
795
+ },
796
+ handleRequest: async (operation, value, signal) => {
797
+ const request = value;
798
+ const context = {
799
+ signal,
800
+ reportProgress: (progress) => channel.emit("task:progress", { id: request.progressId, progress }),
801
+ requestHost: (operation2, payload, controls = {}) => {
802
+ const request2 = {
803
+ operation: operation2,
804
+ payload: clonePayload(payload, controls.inputOwnership),
805
+ outputOwnership: controls.outputOwnership ?? "copy"
806
+ };
807
+ return channel.request("task:host-request", request2, signal, getTransferList(request2));
808
+ },
809
+ emitHost: (operation2, payload) => channel.emit("task:host-event", { operation: operation2, payload, id: request.progressId })
810
+ };
811
+ switch (operation) {
812
+ case "initialize":
813
+ return runtime.initialize(request.input, context);
814
+ case "process":
815
+ return runtime.process(request.input, request.options, context);
816
+ case "stream-open": {
817
+ if (channelStream)
818
+ throw new Error("A task stream is already open");
819
+ async function* inputs() {
820
+ while (true) {
821
+ const result = await channel.request("task:next-input", { outputOwnership: "transfer" }, signal);
822
+ if (result.done)
823
+ return;
824
+ yield result.value;
825
+ }
826
+ }
827
+ channelStream = runtime.stream(inputs(), request.options, context)[Symbol.asyncIterator]();
828
+ return {};
829
+ }
830
+ case "stream-next":
831
+ if (!channelStream)
832
+ throw new Error("No active task stream");
833
+ return channelStream.next();
834
+ case "stream-close":
835
+ try {
836
+ await channelStream?.return?.();
837
+ } finally {
838
+ channelStream = void 0;
839
+ }
840
+ return {};
841
+ case "destroy":
842
+ return runtime.destroy();
843
+ default:
844
+ throw new Error("Unknown task channel operation");
845
+ }
846
+ }
847
+ });
848
+ await WorkerBody.addEventListener((type, payload) => {
849
+ if (type === "task-channel")
850
+ channel.receive(payload);
851
+ });
624
852
  let streamOptions = {};
625
853
  return createWorker(async (request, _options, context) => {
626
854
  switch (request.operation) {
@@ -19289,12 +19517,6 @@ return true;`);
19289
19517
  metadata: serializeArrowMetadata(arrowSchema.metadata)
19290
19518
  };
19291
19519
  }
19292
- function deserializeArrowSchema(schema, options) {
19293
- return new Schema2(
19294
- schema.fields.map((field) => deserializeArrowField(field, options)),
19295
- deserializeArrowMetadata(schema.metadata)
19296
- );
19297
- }
19298
19520
  function serializeArrowMetadata(arrowMetadata) {
19299
19521
  return Object.fromEntries(arrowMetadata);
19300
19522
  }
@@ -20265,7 +20487,7 @@ return true;`);
20265
20487
  };
20266
20488
 
20267
20489
  // src/las/las-loader-shared.ts
20268
- var VERSION = true ? "5.0.0-beta.4" : "latest";
20490
+ var VERSION = true ? "5.0.0-beta.6" : "latest";
20269
20491
  var DEFAULT_LAS_SHAPE = "arrow-table";
20270
20492
  function getLASShape(options) {
20271
20493
  return options?.las?.shape || DEFAULT_LAS_SHAPE;
@@ -20310,7 +20532,24 @@ return true;`);
20310
20532
  return { ...mesh, attributes };
20311
20533
  }
20312
20534
 
20313
- // ../core/src/schema-utils/lib/arrow/split-arrow-buffers.ts
20535
+ // ../../node_modules/@math.gl/arrow/dist/arrow/arrow-data.js
20536
+ function getArrowVariadicBuffers(data) {
20537
+ return data.variadicBuffers ?? [];
20538
+ }
20539
+ function createArrowData(type, offset, length, nullCount, buffers, children, dictionary, variadicBuffers) {
20540
+ return Reflect.construct(Data, [
20541
+ type,
20542
+ offset,
20543
+ length,
20544
+ nullCount,
20545
+ buffers,
20546
+ children,
20547
+ dictionary,
20548
+ variadicBuffers
20549
+ ]);
20550
+ }
20551
+
20552
+ // ../../node_modules/@math.gl/arrow/dist/arrow/split-arrow-buffers.js
20314
20553
  function splitArrowBuffers(input, options = {}) {
20315
20554
  const context = { ...options, copies: /* @__PURE__ */ new WeakMap() };
20316
20555
  if (isArrowTable2(input)) {
@@ -20333,17 +20572,12 @@ return true;`);
20333
20572
  function isArrowVector2(input) {
20334
20573
  return "data" in input && Array.isArray(input.data);
20335
20574
  }
20336
- function splitArrowTableBuffersInternal(table, options) {
20337
- const recordBatches = table.batches.map(
20338
- (recordBatch) => splitArrowRecordBatchBuffers(recordBatch, options)
20339
- );
20340
- return new Table(table.schema, recordBatches);
20575
+ function splitArrowTableBuffersInternal(arrowTable, options) {
20576
+ const recordBatches = arrowTable.batches.map((recordBatch) => splitArrowRecordBatchBuffers(recordBatch, options));
20577
+ return new Table(arrowTable.schema, recordBatches);
20341
20578
  }
20342
20579
  function splitArrowRecordBatchBuffers(recordBatch, options) {
20343
- return new RecordBatch3(
20344
- recordBatch.schema,
20345
- splitArrowDataBuffers(recordBatch.data, options)
20346
- );
20580
+ return new RecordBatch3(recordBatch.schema, splitArrowDataBuffers(recordBatch.data, options));
20347
20581
  }
20348
20582
  function splitArrowDataBuffers(data, options) {
20349
20583
  const children = data.children.map((childData) => splitArrowDataBuffers(childData, options));
@@ -20354,7 +20588,7 @@ return true;`);
20354
20588
  [BufferType.VALIDITY]: splitArrowBuffer(data.buffers[BufferType.VALIDITY], options),
20355
20589
  [BufferType.TYPE]: splitArrowBuffer(data.buffers[BufferType.TYPE], options)
20356
20590
  };
20357
- return new Data(
20591
+ return createArrowData(
20358
20592
  data.type,
20359
20593
  data.offset,
20360
20594
  data.length,
@@ -20362,7 +20596,8 @@ return true;`);
20362
20596
  data._nullCount,
20363
20597
  buffers,
20364
20598
  children,
20365
- dictionary
20599
+ dictionary,
20600
+ getArrowVariadicBuffers(data).map((buffer) => splitArrowBuffer(buffer, options))
20366
20601
  );
20367
20602
  }
20368
20603
  function splitArrowVectorBuffers(vector, options) {
@@ -20380,7 +20615,7 @@ return true;`);
20380
20615
  }
20381
20616
  let copy = options.copies.get(array);
20382
20617
  if (!copy) {
20383
- copy = array.slice();
20618
+ copy = array instanceof Uint8Array ? new Uint8Array(array) : array.slice();
20384
20619
  options.copies.set(array, copy);
20385
20620
  }
20386
20621
  return copy;
@@ -20389,23 +20624,50 @@ return true;`);
20389
20624
  return ArrayBuffer.isView(value) && !(value instanceof DataView);
20390
20625
  }
20391
20626
 
20392
- // ../core/src/schema-utils/lib/arrow/arrow-table-transport.ts
20393
- function dehydrateArrowTable(table, options) {
20394
- const splitTable = splitArrowBuffers(table, options);
20627
+ // ../../node_modules/@math.gl/arrow/dist/arrow/arrow-table-transport.js
20628
+ function dehydrateArrowTable(arrowTable, options) {
20629
+ const splitTable = splitArrowBuffers(arrowTable, options);
20395
20630
  return {
20396
- shape: "arrow-table",
20397
20631
  transport: "arrow-js",
20398
- schema: serializeArrowSchema(splitTable.schema),
20399
- batches: splitTable.batches.map((recordBatch) => dehydrateArrowRecordBatch(recordBatch))
20632
+ version: 1,
20633
+ schema: tableToIPC(new Table(splitTable.schema, [])),
20634
+ metadataVersion: splitTable.schema.metadataVersion,
20635
+ batches: splitTable.batches.map((batch) => dehydrateArrowData(batch.data))
20400
20636
  };
20401
20637
  }
20402
20638
  function hydrateArrowTable(table) {
20403
- const schema = deserializeArrowSchema(table.schema);
20404
- const recordBatches = table.batches.map(
20405
- (recordBatch) => new RecordBatch3(schema, hydrateArrowData(recordBatch.data))
20406
- );
20407
- return new Table(schema, recordBatches);
20639
+ if (table.transport !== "arrow-js" || table.version !== 1) {
20640
+ throw new Error("Unsupported Arrow column-buffer transport protocol.");
20641
+ }
20642
+ const decodedSchema = tableFromIPC(table.schema).schema;
20643
+ const schema = new Schema2(decodedSchema.fields, decodedSchema.metadata, decodedSchema.dictionaries, table.metadataVersion);
20644
+ const type = new Struct(schema.fields);
20645
+ const batches = table.batches.map((data) => new RecordBatch3(schema, hydrateArrowData(data, type)));
20646
+ return new Table(schema, batches);
20408
20647
  }
20648
+ function dehydrateArrowData(data) {
20649
+ return {
20650
+ offset: data.offset,
20651
+ length: data.length,
20652
+ nullCount: data.nullCount,
20653
+ buffers: {
20654
+ [BufferType.OFFSET]: data.buffers[BufferType.OFFSET],
20655
+ [BufferType.DATA]: data.buffers[BufferType.DATA],
20656
+ [BufferType.VALIDITY]: data.buffers[BufferType.VALIDITY],
20657
+ [BufferType.TYPE]: data.buffers[BufferType.TYPE]
20658
+ },
20659
+ children: data.children.map((child) => dehydrateArrowData(child)),
20660
+ variadicBuffers: getArrowVariadicBuffers(data),
20661
+ dictionary: data.dictionary?.data.map((chunk) => dehydrateArrowData(chunk))
20662
+ };
20663
+ }
20664
+ function hydrateArrowData(data, type) {
20665
+ const children = data.children.map((child, index) => hydrateArrowData(child, type.children[index].type));
20666
+ const dictionary = data.dictionary && DataType.isDictionary(type) ? new Vector(data.dictionary.map((chunk) => hydrateArrowData(chunk, type.dictionary))) : void 0;
20667
+ return createArrowData(type, data.offset, data.length, data.nullCount, data.buffers, children, dictionary, data.variadicBuffers);
20668
+ }
20669
+
20670
+ // ../core/src/arrow-worker-transport.ts
20409
20671
  function serializeArrowWorkerTable(result) {
20410
20672
  if (!isArrowTableWrapper(result)) {
20411
20673
  throw new Error("Workers require Arrow table output");
@@ -20434,45 +20696,6 @@ return true;`);
20434
20696
  table && table.shape === "arrow-table" && table.data && table.data.transport === "arrow-js" && Array.isArray(table.data.batches)
20435
20697
  );
20436
20698
  }
20437
- function dehydrateArrowRecordBatch(recordBatch) {
20438
- return { data: dehydrateArrowData(recordBatch.data) };
20439
- }
20440
- function dehydrateArrowData(data) {
20441
- return {
20442
- type: serializeArrowType(data.type),
20443
- offset: data.offset,
20444
- length: data.length,
20445
- // @ts-expect-error _nullCount is protected. Preserve the Arrow lazy null-count state.
20446
- nullCount: data._nullCount,
20447
- buffers: {
20448
- [BufferType.OFFSET]: data.buffers[BufferType.OFFSET],
20449
- [BufferType.DATA]: data.buffers[BufferType.DATA],
20450
- [BufferType.VALIDITY]: data.buffers[BufferType.VALIDITY],
20451
- [BufferType.TYPE]: data.buffers[BufferType.TYPE]
20452
- },
20453
- children: data.children.map((childData) => dehydrateArrowData(childData)),
20454
- dictionary: data.dictionary ? dehydrateArrowVector(data.dictionary) : void 0
20455
- };
20456
- }
20457
- function dehydrateArrowVector(vector) {
20458
- return { data: vector.data.map((data) => dehydrateArrowData(data)) };
20459
- }
20460
- function hydrateArrowData(data) {
20461
- const children = data.children.map((childData) => hydrateArrowData(childData));
20462
- const dictionary = data.dictionary ? hydrateArrowVector(data.dictionary) : void 0;
20463
- return new Data(
20464
- deserializeArrowType(data.type),
20465
- data.offset,
20466
- data.length,
20467
- data.nullCount,
20468
- data.buffers,
20469
- children,
20470
- dictionary
20471
- );
20472
- }
20473
- function hydrateArrowVector(vector) {
20474
- return new Vector(vector.data.map((data) => hydrateArrowData(data)));
20475
- }
20476
20699
 
20477
20700
  // src/las/lib/get-las-schema.ts
20478
20701
  function getLASSchema(lasHeader, attributes) {
@@ -28,7 +28,7 @@ module.exports = __toCommonJS(las_writer_exports);
28
28
  var import_loader_utils = require("@loaders.gl/core/loader-utils");
29
29
  var import_schema_utils = require("@loaders.gl/core/schema-utils");
30
30
  var import_las_format = require("./las-format.cjs");
31
- var VERSION = true ? "5.0.0-beta.4" : "latest";
31
+ var VERSION = true ? "5.0.0-beta.6" : "latest";
32
32
  var LAS_HEADER_LENGTH = 227;
33
33
  var LAS_1_4_HEADER_LENGTH = 375;
34
34
  var LAS_1_5_HEADER_LENGTH = 393;
@@ -35,8 +35,8 @@ __export(pcd_loader_types_exports, {
35
35
  });
36
36
  module.exports = __toCommonJS(pcd_loader_types_exports);
37
37
  var import_pcd_format = require("./pcd-format.cjs");
38
- var import_arrow_transport = require("@loaders.gl/core/schema-utils/arrow-transport");
39
- var VERSION = true ? "5.0.0-beta.4" : "latest";
38
+ var import_arrow_worker_transport = require("@loaders.gl/core/arrow-worker-transport");
39
+ var VERSION = true ? "5.0.0-beta.6" : "latest";
40
40
  async function preload() {
41
41
  const { PCDLoaderWithParser } = await import("@loaders.gl/pointclouds/pcd-loader");
42
42
  return PCDLoaderWithParser;
@@ -49,7 +49,7 @@ var PCDLoader = {
49
49
  worker: true,
50
50
  /** Enables the stateful input/output batch protocol on the built-in worker. */
51
51
  workerInBatches: true,
52
- serializeWorkerResult: import_arrow_transport.serializeArrowWorkerTable,
52
+ serializeWorkerResult: import_arrow_worker_transport.serializeArrowWorkerTable,
53
53
  options: {
54
54
  pcd: { shape: "arrow-table", colorFormat: "uint8norm" }
55
55
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/pcd/pcd-loader-types.ts"],
4
- "sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Loader, LoaderOptions} from '@loaders.gl/core/loader-utils';\nimport type {MeshArrowTable, ArrowTableBatch} from '@loaders.gl/core/schema';\nimport type {PCDMesh} from './lib/pcd-types';\nimport {PCDFormat} from './pcd-format';\nimport {serializeArrowWorkerTable} from '@loaders.gl/core/schema-utils/arrow-transport';\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 PCDLoaderOptions = LoaderOptions & {\n pcd?: {\n /** Output shape. Defaults to a Mesh Arrow table. */\n shape?: 'mesh' | 'arrow-table';\n /** Color storage format. Defaults to uint8norm for backwards compatibility. */\n colorFormat?: 'uint8norm' | 'float16' | 'float32';\n /** Override the URL to the worker bundle (by default loads from unpkg.com) */\n workerUrl?: string;\n };\n};\n\n/**\n * Preloads the parser-bearing PCD loader implementation.\n */\nasync function preload() {\n const {PCDLoaderWithParser} = await import('@loaders.gl/pointclouds/pcd-loader');\n return PCDLoaderWithParser;\n}\n\n/**\n * Metadata-only worker loader for PCD - Point Cloud Data\n */\nexport const PCDLoader = {\n ...PCDFormat,\n dataType: null as unknown as PCDMesh | MeshArrowTable,\n batchType: null as unknown as PCDMesh | ArrowTableBatch,\n version: VERSION,\n worker: true,\n /** Enables the stateful input/output batch protocol on the built-in worker. */\n workerInBatches: true,\n serializeWorkerResult: serializeArrowWorkerTable,\n options: {\n pcd: {shape: 'arrow-table', colorFormat: 'uint8norm'}\n },\n preload\n} as const satisfies Loader<PCDMesh | MeshArrowTable, PCDMesh | ArrowTableBatch, PCDLoaderOptions>;\n\n/** @deprecated Use PCDLoader. */\nexport const PCDWorkerLoader = PCDLoader;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,wBAAwB;AACxB,6BAAwC;AAIxC,IAAM,UAAU,OAAqC,iBAAc;AAgBnE,eAAe,UAAU;AACvB,QAAM,EAAC,oBAAmB,IAAI,MAAM,OAAO,oCAAoC;AAC/E,SAAO;AACT;AAKO,IAAM,YAAY;AAAA,EACvB,GAAG;AAAA,EACH,UAAU;AAAA,EACV,WAAW;AAAA,EACX,SAAS;AAAA,EACT,QAAQ;AAAA;AAAA,EAER,iBAAiB;AAAA,EACjB,uBAAuB;AAAA,EACvB,SAAS;AAAA,IACP,KAAK,EAAC,OAAO,eAAe,aAAa,YAAW;AAAA,EACtD;AAAA,EACA;AACF;AAGO,IAAM,kBAAkB;",
4
+ "sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Loader, LoaderOptions} from '@loaders.gl/core/loader-utils';\nimport type {MeshArrowTable, ArrowTableBatch} from '@loaders.gl/core/schema';\nimport type {PCDMesh} from './lib/pcd-types';\nimport {PCDFormat} from './pcd-format';\nimport {serializeArrowWorkerTable} from '@loaders.gl/core/arrow-worker-transport';\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 PCDLoaderOptions = LoaderOptions & {\n pcd?: {\n /** Output shape. Defaults to a Mesh Arrow table. */\n shape?: 'mesh' | 'arrow-table';\n /** Color storage format. Defaults to uint8norm for backwards compatibility. */\n colorFormat?: 'uint8norm' | 'float16' | 'float32';\n /** Override the URL to the worker bundle (by default loads from unpkg.com) */\n workerUrl?: string;\n };\n};\n\n/**\n * Preloads the parser-bearing PCD loader implementation.\n */\nasync function preload() {\n const {PCDLoaderWithParser} = await import('@loaders.gl/pointclouds/pcd-loader');\n return PCDLoaderWithParser;\n}\n\n/**\n * Metadata-only worker loader for PCD - Point Cloud Data\n */\nexport const PCDLoader = {\n ...PCDFormat,\n dataType: null as unknown as PCDMesh | MeshArrowTable,\n batchType: null as unknown as PCDMesh | ArrowTableBatch,\n version: VERSION,\n worker: true,\n /** Enables the stateful input/output batch protocol on the built-in worker. */\n workerInBatches: true,\n serializeWorkerResult: serializeArrowWorkerTable,\n options: {\n pcd: {shape: 'arrow-table', colorFormat: 'uint8norm'}\n },\n preload\n} as const satisfies Loader<PCDMesh | MeshArrowTable, PCDMesh | ArrowTableBatch, PCDLoaderOptions>;\n\n/** @deprecated Use PCDLoader. */\nexport const PCDWorkerLoader = PCDLoader;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,wBAAwB;AACxB,oCAAwC;AAIxC,IAAM,UAAU,OAAqC,iBAAc;AAgBnE,eAAe,UAAU;AACvB,QAAM,EAAC,oBAAmB,IAAI,MAAM,OAAO,oCAAoC;AAC/E,SAAO;AACT;AAKO,IAAM,YAAY;AAAA,EACvB,GAAG;AAAA,EACH,UAAU;AAAA,EACV,WAAW;AAAA,EACX,SAAS;AAAA,EACT,QAAQ;AAAA;AAAA,EAER,iBAAiB;AAAA,EACjB,uBAAuB;AAAA,EACvB,SAAS;AAAA,IACP,KAAK,EAAC,OAAO,eAAe,aAAa,YAAW;AAAA,EACtD;AAAA,EACA;AACF;AAGO,IAAM,kBAAkB;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  import type { LoaderOptions } from '@loaders.gl/core/loader-utils';
2
2
  import type { MeshArrowTable, ArrowTableBatch } from '@loaders.gl/core/schema';
3
3
  import type { PCDMesh } from "./lib/pcd-types.js";
4
- import { serializeArrowWorkerTable } from '@loaders.gl/core/schema-utils/arrow-transport';
4
+ import { serializeArrowWorkerTable } from '@loaders.gl/core/arrow-worker-transport';
5
5
  export type PCDLoaderOptions = LoaderOptions & {
6
6
  pcd?: {
7
7
  /** Output shape. Defaults to a Mesh Arrow table. */
@@ -1 +1 @@
1
- {"version":3,"file":"pcd-loader-types.d.ts","sourceRoot":"","sources":["../../src/pcd/pcd-loader-types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAS,aAAa,EAAC,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAC,cAAc,EAAE,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAC7E,OAAO,KAAK,EAAC,OAAO,EAAC,2BAAwB;AAE7C,OAAO,EAAC,yBAAyB,EAAC,MAAM,+CAA+C,CAAC;AAMxF,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE;QACJ,oDAAoD;QACpD,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;QAC/B,+EAA+E;QAC/E,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;QAClD,8EAA8E;QAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,iBAAe,OAAO;;;;;;;;uBAUS,OAAO,GAAG,cAAc;wBACvB,OAAO,GAAG,eAAe;;;;;;;;;;;;;;;;;;;;GARxD;AAED;;GAEG;AACH,eAAO,MAAM,SAAS;uBAES,OAAO,GAAG,cAAc;wBACvB,OAAO,GAAG,eAAe;;;IAGvD,+EAA+E;;;;;;;;;;;;;;;;;;;;CAOiB,CAAC;AAEnG,iCAAiC;AACjC,eAAO,MAAM,eAAe;uBAdG,OAAO,GAAG,cAAc;wBACvB,OAAO,GAAG,eAAe;;;IAGvD,+EAA+E;;;;;;;;;;;;;;;;;;;;CAUzC,CAAC"}
1
+ {"version":3,"file":"pcd-loader-types.d.ts","sourceRoot":"","sources":["../../src/pcd/pcd-loader-types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAS,aAAa,EAAC,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAC,cAAc,EAAE,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAC7E,OAAO,KAAK,EAAC,OAAO,EAAC,2BAAwB;AAE7C,OAAO,EAAC,yBAAyB,EAAC,MAAM,yCAAyC,CAAC;AAMlF,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE;QACJ,oDAAoD;QACpD,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;QAC/B,+EAA+E;QAC/E,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;QAClD,8EAA8E;QAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,iBAAe,OAAO;;;;;;;;uBAUS,OAAO,GAAG,cAAc;wBACvB,OAAO,GAAG,eAAe;;;;;;;;;;;;;;;;;;;;GARxD;AAED;;GAEG;AACH,eAAO,MAAM,SAAS;uBAES,OAAO,GAAG,cAAc;wBACvB,OAAO,GAAG,eAAe;;;IAGvD,+EAA+E;;;;;;;;;;;;;;;;;;;;CAOiB,CAAC;AAEnG,iCAAiC;AACjC,eAAO,MAAM,eAAe;uBAdG,OAAO,GAAG,cAAc;wBACvB,OAAO,GAAG,eAAe;;;IAGvD,+EAA+E;;;;;;;;;;;;;;;;;;;;CAUzC,CAAC"}
@@ -2,10 +2,10 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
  import { PCDFormat } from "./pcd-format.js";
5
- import { serializeArrowWorkerTable } from '@loaders.gl/core/schema-utils/arrow-transport';
5
+ import { serializeArrowWorkerTable } from '@loaders.gl/core/arrow-worker-transport';
6
6
  // __VERSION__ is injected by babel-plugin-version-inline
7
7
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
8
- const VERSION = typeof "5.0.0-beta.4" !== 'undefined' ? "5.0.0-beta.4" : 'latest';
8
+ const VERSION = typeof "5.0.0-beta.6" !== 'undefined' ? "5.0.0-beta.6" : 'latest';
9
9
  /**
10
10
  * Preloads the parser-bearing PCD loader implementation.
11
11
  */
@@ -1 +1 @@
1
- {"version":3,"file":"pcd-loader-types.js","sourceRoot":"","sources":["../../src/pcd/pcd-loader-types.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC;AAKpC,OAAO,EAAC,SAAS,EAAC,wBAAqB;AACvC,OAAO,EAAC,yBAAyB,EAAC,MAAM,+CAA+C,CAAC;AAExF,yDAAyD;AACzD,qDAAqD;AACrD,MAAM,OAAO,GAAG,qBAAkB,KAAK,WAAW,CAAC,CAAC,gBAAa,CAAC,CAAC,QAAQ,CAAC;AAa5E;;GAEG;AACH,KAAK,UAAU,OAAO;IACpB,MAAM,EAAC,mBAAmB,EAAC,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;IACjF,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,GAAG,SAAS;IACZ,QAAQ,EAAE,IAA2C;IACrD,SAAS,EAAE,IAA4C;IACvD,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,IAAI;IACZ,+EAA+E;IAC/E,eAAe,EAAE,IAAI;IACrB,qBAAqB,EAAE,yBAAyB;IAChD,OAAO,EAAE;QACP,GAAG,EAAE,EAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAC;KACtD;IACD,OAAO;CACyF,CAAC;AAEnG,iCAAiC;AACjC,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC"}
1
+ {"version":3,"file":"pcd-loader-types.js","sourceRoot":"","sources":["../../src/pcd/pcd-loader-types.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC;AAKpC,OAAO,EAAC,SAAS,EAAC,wBAAqB;AACvC,OAAO,EAAC,yBAAyB,EAAC,MAAM,yCAAyC,CAAC;AAElF,yDAAyD;AACzD,qDAAqD;AACrD,MAAM,OAAO,GAAG,qBAAkB,KAAK,WAAW,CAAC,CAAC,gBAAa,CAAC,CAAC,QAAQ,CAAC;AAa5E;;GAEG;AACH,KAAK,UAAU,OAAO;IACpB,MAAM,EAAC,mBAAmB,EAAC,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;IACjF,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,GAAG,SAAS;IACZ,QAAQ,EAAE,IAA2C;IACrD,SAAS,EAAE,IAA4C;IACvD,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,IAAI;IACZ,+EAA+E;IAC/E,eAAe,EAAE,IAAI;IACrB,qBAAqB,EAAE,yBAAyB;IAChD,OAAO,EAAE;QACP,GAAG,EAAE,EAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAC;KACtD;IACD,OAAO;CACyF,CAAC;AAEnG,iCAAiC;AACjC,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC"}
@@ -24,7 +24,7 @@ __export(pcd_loader_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(pcd_loader_exports);
26
26
  var import_loader_utils = require("@loaders.gl/core/loader-utils");
27
- var import_arrow_transport = require("@loaders.gl/core/schema-utils/arrow-transport");
27
+ var import_arrow_worker_transport = require("@loaders.gl/core/arrow-worker-transport");
28
28
  var import_schema_utils = require("@loaders.gl/core/schema-utils");
29
29
  var import_parse_pcd = require("./lib/parse-pcd.cjs");
30
30
  var import_pcd_loader_types = require("./pcd-loader-types.cjs");
@@ -52,9 +52,9 @@ var PCDLoaderWithParser = {
52
52
  }
53
53
  yield makePCDBatch((0, import_parse_pcd.parsePCD)(data, options), options);
54
54
  },
55
- serializeWorkerResult: import_arrow_transport.serializeArrowWorkerTable,
55
+ serializeWorkerResult: import_arrow_worker_transport.serializeArrowWorkerTable,
56
56
  deserializeWorkerResult: deserializePCDWorkerResult,
57
- serializeWorkerBatch: import_arrow_transport.serializeArrowWorkerTable,
57
+ serializeWorkerBatch: import_arrow_worker_transport.serializeArrowWorkerTable,
58
58
  deserializeWorkerBatch: deserializePCDWorkerBatch
59
59
  };
60
60
  function getNumericBatchSize(options) {
@@ -131,7 +131,7 @@ function makePCDHeaderText(pcdHeader, pointCount) {
131
131
  `;
132
132
  }
133
133
  function deserializePCDWorkerResult(result, options) {
134
- const table = (0, import_arrow_transport.deserializeArrowWorkerTable)(result);
134
+ const table = (0, import_arrow_worker_transport.deserializeArrowWorkerTable)(result);
135
135
  return options?.pcd?.shape === "mesh" ? convertPCDTableToMesh(table, table) : table;
136
136
  }
137
137
  function deserializePCDWorkerBatch(result, options) {