@loaders.gl/parquet 5.0.0-alpha.6 → 5.0.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/delta-source-loader-types.js +1 -1
  2. package/dist/delta-source.js +1 -1
  3. package/dist/geoparquet-loader-with-parser.d.ts +1 -1
  4. package/dist/geoparquet-loader.d.ts +2 -2
  5. package/dist/geoparquet-loader.js +1 -1
  6. package/dist/index.cjs +74 -33
  7. package/dist/index.cjs.map +2 -2
  8. package/dist/lib/constants.js +1 -1
  9. package/dist/lib/parquet-source-worker-client.d.ts.map +1 -1
  10. package/dist/lib/parquet-source-worker-client.js +3 -1
  11. package/dist/lib/parquet-source-worker-client.js.map +1 -1
  12. package/dist/parquet-dataset-source.cjs +71 -27
  13. package/dist/parquet-dataset-source.cjs.map +3 -3
  14. package/dist/parquet-js-loader-types.d.ts +2 -2
  15. package/dist/parquet-js-loader-types.js +3 -3
  16. package/dist/parquet-js-loader-types.js.map +1 -1
  17. package/dist/parquet-js-loader.d.ts +1 -1
  18. package/dist/parquet-js-loader.d.ts.map +1 -1
  19. package/dist/parquet-js-loader.js +3 -2
  20. package/dist/parquet-js-loader.js.map +1 -1
  21. package/dist/parquet-js-writer.js +1 -1
  22. package/dist/parquet-loader-base.d.ts +1 -1
  23. package/dist/parquet-loader-base.js +1 -1
  24. package/dist/parquet-loader-options.d.ts +1 -1
  25. package/dist/parquet-loader-options.js +1 -1
  26. package/dist/parquet-loader-options.js.map +1 -1
  27. package/dist/parquet-loader-types.d.ts +2 -2
  28. package/dist/parquet-loader.d.ts +1 -1
  29. package/dist/parquet-source-loader-types.js +1 -1
  30. package/dist/parquet-source-loader.cjs +71 -27
  31. package/dist/parquet-source-loader.cjs.map +3 -3
  32. package/dist/parquet-source-worker-factory.d.ts +4 -0
  33. package/dist/parquet-source-worker-factory.d.ts.map +1 -0
  34. package/dist/parquet-source-worker-factory.js +6 -0
  35. package/dist/parquet-source-worker-factory.js.map +1 -0
  36. package/dist/parquet-source-worker.js +43 -15
  37. package/dist/parquet-source-worker.js.map +4 -4
  38. package/dist/parquet-worker-node.cjs +308 -119
  39. package/dist/parquet-worker-node.cjs.map +4 -4
  40. package/dist/parquet-worker.js +51 -14
  41. package/dist/parquet-worker.js.map +4 -4
  42. package/package.json +12 -12
  43. package/src/lib/parquet-source-worker-client.ts +3 -1
  44. package/src/parquet-js-loader-types.ts +2 -2
  45. package/src/parquet-js-loader.ts +3 -2
  46. package/src/parquet-loader-options.ts +1 -1
  47. package/src/parquet-source-worker-factory.ts +8 -0
@@ -4,7 +4,7 @@
4
4
  import { DeltaFormat } from "./delta-format.js";
5
5
  // __VERSION__ is injected by babel-plugin-version-inline
6
6
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
7
- const VERSION = typeof "5.0.0-alpha.6" !== 'undefined' ? "5.0.0-alpha.6" : 'latest';
7
+ const VERSION = typeof "5.0.0-alpha.7" !== 'undefined' ? "5.0.0-alpha.7" : 'latest';
8
8
  /** Loads the parser-bearing Delta source implementation on demand. */
9
9
  async function preloadDeltaSourceLoader() {
10
10
  const { DeltaSourceLoaderWithParser } = await import('@loaders.gl/parquet/delta-source');
@@ -7,7 +7,7 @@ import { PARQUET_TABLE_QUERY_CAPABILITIES } from "./parquet-source-capabilities.
7
7
  import { DeltaFormat } from "./delta-format.js";
8
8
  // __VERSION__ is injected by babel-plugin-version-inline
9
9
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
10
- const VERSION = typeof "5.0.0-alpha.6" !== 'undefined' ? "5.0.0-alpha.6" : 'latest';
10
+ const VERSION = typeof "5.0.0-alpha.7" !== 'undefined' ? "5.0.0-alpha.7" : 'latest';
11
11
  /** Lightweight Delta Lake snapshot source backed by a newline-delimited commit log. */
12
12
  export class DeltaTableSource extends DataSource {
13
13
  actionsPromises = new Map();
@@ -18,7 +18,7 @@ export declare const GeoParquetLoaderWithParser: {
18
18
  readonly parquet: {
19
19
  readonly columns: undefined;
20
20
  readonly preserveBinary: false;
21
- readonly shape: "object-row-table";
21
+ readonly shape: "arrow-table";
22
22
  };
23
23
  };
24
24
  readonly name: "Apache Parquet";
@@ -18,7 +18,7 @@ declare function preloadGeoParquetLoader(): Promise<{
18
18
  readonly parquet: {
19
19
  readonly columns: undefined;
20
20
  readonly preserveBinary: false;
21
- readonly shape: "object-row-table";
21
+ readonly shape: "arrow-table";
22
22
  };
23
23
  };
24
24
  readonly name: "Apache Parquet";
@@ -42,7 +42,7 @@ export declare const GeoParquetLoader: {
42
42
  readonly parquet: {
43
43
  readonly columns: undefined;
44
44
  readonly preserveBinary: false;
45
- readonly shape: "object-row-table";
45
+ readonly shape: "arrow-table";
46
46
  };
47
47
  };
48
48
  readonly preload: typeof preloadGeoParquetLoader;
@@ -5,7 +5,7 @@ import { ParquetFormat } from "./parquet-format.js";
5
5
  import { PARQUET_LOADER_DEFAULT_OPTIONS } from "./parquet-loader-options.js";
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-alpha.6" !== 'undefined' ? "5.0.0-alpha.6" : 'latest';
8
+ const VERSION = typeof "5.0.0-alpha.7" !== 'undefined' ? "5.0.0-alpha.7" : 'latest';
9
9
  /** Preloads the parser-bearing GeoParquet loader implementation. */
10
10
  async function preloadGeoParquetLoader() {
11
11
  const { GeoParquetLoaderWithParser } = await import("./geoparquet-loader-with-parser.js");
package/dist/index.cjs CHANGED
@@ -61,7 +61,7 @@ var init_parquet_loader_options = __esm({
61
61
  PARQUET_LOADER_DEFAULT_OPTIONS = {
62
62
  columns: void 0,
63
63
  preserveBinary: false,
64
- shape: "object-row-table"
64
+ shape: "arrow-table"
65
65
  };
66
66
  }
67
67
  });
@@ -73,7 +73,7 @@ var init_parquet_loader_base = __esm({
73
73
  "use strict";
74
74
  init_parquet_format();
75
75
  init_parquet_loader_options();
76
- VERSION = true ? "5.0.0-alpha.6" : "latest";
76
+ VERSION = true ? "5.0.0-alpha.7" : "latest";
77
77
  PARQUET_LOADER_BASE = {
78
78
  ...ParquetFormat,
79
79
  dataType: null,
@@ -666,6 +666,7 @@ var init_worker_pool = __esm({
666
666
  props = {};
667
667
  jobQueue = [];
668
668
  idleQueue = [];
669
+ activeJobs = /* @__PURE__ */ new Set();
669
670
  count = 0;
670
671
  isDestroyed = false;
671
672
  /** Checks if workers are supported on this platform */
@@ -684,10 +685,14 @@ var init_worker_pool = __esm({
684
685
  this.setProps(props);
685
686
  }
686
687
  /**
687
- * Terminates all workers in the pool
688
+ * Terminates all workers in the pool and aborts active jobs.
689
+ * @param reason Optional error delivered to active jobs.
688
690
  * @note Can free up significant memory
689
691
  */
690
- destroy() {
692
+ destroy(reason = new Error("Worker pool was destroyed")) {
693
+ this.activeJobs.forEach((job) => job.abort(reason));
694
+ const queuedJobs = this.jobQueue.splice(0);
695
+ queuedJobs.forEach((queuedJob) => queuedJob.onReject(reason));
691
696
  this.idleQueue.forEach((worker) => worker.destroy());
692
697
  this.isDestroyed = true;
693
698
  }
@@ -710,8 +715,11 @@ var init_worker_pool = __esm({
710
715
  }
711
716
  }
712
717
  async startJob(name, onMessage2 = (job, type, data) => job.done(data), onError = (job, error) => job.error(error)) {
713
- const startPromise = new Promise((onStart) => {
714
- this.jobQueue.push({ name, onMessage: onMessage2, onError, onStart });
718
+ if (this.isDestroyed) {
719
+ return Promise.reject(new Error("Worker pool was destroyed"));
720
+ }
721
+ const startPromise = new Promise((onStart, onReject) => {
722
+ this.jobQueue.push({ name, onMessage: onMessage2, onError, onStart, onReject });
715
723
  return this;
716
724
  });
717
725
  this._startQueuedJob();
@@ -739,6 +747,7 @@ var init_worker_pool = __esm({
739
747
  backlog: this.jobQueue.length
740
748
  });
741
749
  const job = new WorkerJob(queuedJob.name, workerThread);
750
+ this.activeJobs.add(job);
742
751
  workerThread.ref();
743
752
  workerThread.onMessage = (data) => queuedJob.onMessage(job, data.type, data.payload);
744
753
  workerThread.onError = (error) => queuedJob.onError(job, error);
@@ -747,6 +756,7 @@ var init_worker_pool = __esm({
747
756
  await job.result;
748
757
  } catch {
749
758
  } finally {
759
+ this.activeJobs.delete(job);
750
760
  this.returnWorkerToQueue(workerThread);
751
761
  }
752
762
  }
@@ -860,12 +870,13 @@ var init_worker_farm = __esm({
860
870
  this.workerPools = /* @__PURE__ */ new Map();
861
871
  }
862
872
  /**
863
- * Terminate all workers in the farm
873
+ * Terminate all workers in the farm and abort active jobs.
874
+ * @param reason Optional error delivered to active jobs.
864
875
  * @note Can free up significant memory
865
876
  */
866
- destroy() {
877
+ destroy(reason) {
867
878
  for (const workerPool of this.workerPools.values()) {
868
- workerPool.destroy();
879
+ workerPool.destroy(reason);
869
880
  }
870
881
  this.workerPools = /* @__PURE__ */ new Map();
871
882
  }
@@ -1109,13 +1120,13 @@ var init_src = __esm({
1109
1120
 
1110
1121
  // ../loader-utils/src/lib/worker-loader-utils/parse-with-worker.ts
1111
1122
  function canParseWithWorker(loader, options) {
1112
- var _a, _b;
1123
+ var _a;
1113
1124
  const workerOptions = getWorkerOptions(options);
1114
1125
  const nodeWorkers = workerOptions._nodeWorkers;
1115
1126
  if (!isBrowser2 && !nodeWorkers) {
1116
1127
  return false;
1117
1128
  }
1118
- if (loader.id === "excel" && ((_a = options == null ? void 0 : options.excel) == null ? void 0 : _a.shape) === "arrow-table" || loader.id === "ply" && ((_b = options == null ? void 0 : options.ply) == null ? void 0 : _b.shape) === "arrow-table") {
1129
+ if (loader.id === "las" && (((_a = options == null ? void 0 : options.las) == null ? void 0 : _a.shape) ?? "arrow-table") === "arrow-table") {
1119
1130
  return false;
1120
1131
  }
1121
1132
  if (loader.id === "csv" && !shouldParseCSVWithWorker(options)) {
@@ -2937,6 +2948,9 @@ function getDataTypeFromArray(array) {
2937
2948
  return { type: "null", nullable: true };
2938
2949
  }
2939
2950
  function getDataTypeFromTypedArray(array) {
2951
+ if (typeof Float16Array !== "undefined" && array instanceof Float16Array) {
2952
+ return "float16";
2953
+ }
2940
2954
  switch (array.constructor) {
2941
2955
  case Int8Array:
2942
2956
  return "int8";
@@ -2978,15 +2992,19 @@ function getArrayTypeFromDataType(type, nullable) {
2978
2992
  return Float32Array;
2979
2993
  case "float64":
2980
2994
  return Float64Array;
2995
+ case "float16":
2996
+ return (0, import_types.getFloat16ArrayConstructor)();
2981
2997
  default:
2982
2998
  break;
2983
2999
  }
2984
3000
  }
2985
3001
  return Array;
2986
3002
  }
3003
+ var import_types;
2987
3004
  var init_data_type = __esm({
2988
3005
  "../schema-utils/src/lib/schema/data-type.ts"() {
2989
3006
  "use strict";
3007
+ import_types = require("@math.gl/types");
2990
3008
  }
2991
3009
  });
2992
3010
 
@@ -3038,6 +3056,13 @@ function serializeArrowType(arrowType) {
3038
3056
  if (isArrowViewType(arrowType, "Utf8View")) {
3039
3057
  return "utf8-view";
3040
3058
  }
3059
+ if (isOptionalArrowType(arrowType, "LargeList")) {
3060
+ const largeListType = arrowType;
3061
+ return {
3062
+ type: "large-list",
3063
+ children: [serializeArrowField(largeListType.valueField)]
3064
+ };
3065
+ }
3041
3066
  switch (arrowType.constructor) {
3042
3067
  case arrow.Null:
3043
3068
  return "null";
@@ -3176,12 +3201,6 @@ function serializeArrowType(arrowType) {
3176
3201
  type: "list",
3177
3202
  children: [serializeArrowField(listField)]
3178
3203
  };
3179
- case arrow.LargeList:
3180
- const largeListType = arrowType;
3181
- return {
3182
- type: "large-list",
3183
- children: [serializeArrowField(largeListType.valueField)]
3184
- };
3185
3204
  case arrow.FixedSizeList:
3186
3205
  const fixedSizeList = arrowType;
3187
3206
  return {
@@ -3234,7 +3253,13 @@ function deserializeArrowType(dataType, options) {
3234
3253
  }
3235
3254
  case "large-list": {
3236
3255
  const field = deserializeArrowField(dataType.children[0], options);
3237
- return new arrow.LargeList(field);
3256
+ const LargeList = getOptionalArrowConstructor("LargeList");
3257
+ if (!LargeList) {
3258
+ throw new Error(
3259
+ "LargeList requires an Apache Arrow runtime that exports the LargeList constructor"
3260
+ );
3261
+ }
3262
+ return new LargeList(field);
3238
3263
  }
3239
3264
  case "fixed-size-list": {
3240
3265
  const child = deserializeArrowField(dataType.children[0], options);
@@ -3330,11 +3355,11 @@ function deserializeArrowType(dataType, options) {
3330
3355
  throw new Error("array type not supported");
3331
3356
  }
3332
3357
  }
3333
- function getArrowViewConstructors() {
3334
- return arrow;
3358
+ function getOptionalArrowConstructor(typeName) {
3359
+ return arrow[typeName];
3335
3360
  }
3336
3361
  function isArrowViewType(arrowType, viewTypeName) {
3337
- const constructor = getArrowViewConstructors()[viewTypeName];
3362
+ const constructor = getOptionalArrowConstructor(viewTypeName);
3338
3363
  if (constructor && arrowType instanceof constructor) {
3339
3364
  return true;
3340
3365
  }
@@ -3342,12 +3367,16 @@ function isArrowViewType(arrowType, viewTypeName) {
3342
3367
  const guard = viewTypeName === "BinaryView" ? guards.isBinaryView : guards.isUtf8View;
3343
3368
  return Boolean(guard == null ? void 0 : guard(arrowType));
3344
3369
  }
3370
+ function isOptionalArrowType(arrowType, typeName) {
3371
+ const constructor = getOptionalArrowConstructor(typeName);
3372
+ return Boolean(constructor && arrowType instanceof constructor);
3373
+ }
3345
3374
  function makeVariableWidthArrowType(viewTypeName, fallbackType, options) {
3346
3375
  const viewTypeMode = (options == null ? void 0 : options.viewTypes) || "never";
3347
3376
  if (viewTypeMode === "never") {
3348
3377
  return fallbackType;
3349
3378
  }
3350
- const constructor = getArrowViewConstructors()[viewTypeName];
3379
+ const constructor = getOptionalArrowConstructor(viewTypeName);
3351
3380
  if (constructor) {
3352
3381
  return new constructor();
3353
3382
  }
@@ -3359,7 +3388,7 @@ function makeVariableWidthArrowType(viewTypeName, fallbackType, options) {
3359
3388
  return fallbackType;
3360
3389
  }
3361
3390
  function makeRequiredArrowViewType(viewTypeName) {
3362
- const constructor = getArrowViewConstructors()[viewTypeName];
3391
+ const constructor = getOptionalArrowConstructor(viewTypeName);
3363
3392
  if (!constructor) {
3364
3393
  throw new Error(
3365
3394
  `${viewTypeName} requires apache-arrow 21.2.0 or later; the installed runtime does not support it`
@@ -6265,7 +6294,7 @@ var init_parquet_loader_options2 = __esm({
6265
6294
  PARQUET_LOADER_DEFAULT_OPTIONS2 = {
6266
6295
  columns: void 0,
6267
6296
  preserveBinary: false,
6268
- shape: "object-row-table"
6297
+ shape: "arrow-table"
6269
6298
  };
6270
6299
  }
6271
6300
  });
@@ -7278,7 +7307,7 @@ var init_geoparquet_loader = __esm({
7278
7307
  "use strict";
7279
7308
  init_parquet_format();
7280
7309
  init_parquet_loader_options();
7281
- VERSION5 = true ? "5.0.0-alpha.6" : "latest";
7310
+ VERSION5 = true ? "5.0.0-alpha.7" : "latest";
7282
7311
  GeoParquetLoader = {
7283
7312
  ...ParquetFormat,
7284
7313
  dataType: null,
@@ -24792,7 +24821,7 @@ var init_parquet_js_loader_types = __esm({
24792
24821
  columns: void 0,
24793
24822
  preserveBinary: false,
24794
24823
  verifyFooterSignature: true,
24795
- shape: "object-row-table"
24824
+ shape: "arrow-table"
24796
24825
  };
24797
24826
  ParquetJSLoader = {
24798
24827
  ...ParquetFormat2,
@@ -24831,7 +24860,8 @@ var init_parquet_js_loader = __esm({
24831
24860
  DEFAULT_PARQUET_JS_OPTIONS2 = {
24832
24861
  columns: void 0,
24833
24862
  preserveBinary: false,
24834
- verifyFooterSignature: true
24863
+ verifyFooterSignature: true,
24864
+ shape: "arrow-table"
24835
24865
  };
24836
24866
  ParquetJSLoaderWithParser = {
24837
24867
  ...ParquetJSLoaderMetadataWithoutPreload,
@@ -25974,6 +26004,15 @@ var init_parquet_page_index = __esm({
25974
26004
  }
25975
26005
  });
25976
26006
 
26007
+ // src/parquet-source-worker-factory.ts
26008
+ var PARQUET_SOURCE_WORKER_LOAD_WORKER;
26009
+ var init_parquet_source_worker_factory = __esm({
26010
+ "src/parquet-source-worker-factory.ts"() {
26011
+ "use strict";
26012
+ PARQUET_SOURCE_WORKER_LOAD_WORKER = void 0;
26013
+ }
26014
+ });
26015
+
25977
26016
  // src/parquet-source-worker-url.ts
25978
26017
  function resolveParquetSourceWorkerUrl() {
25979
26018
  if (!import_meta5.url) {
@@ -26014,12 +26053,14 @@ var init_parquet_source_worker_client = __esm({
26014
26053
  "use strict";
26015
26054
  init_src2();
26016
26055
  init_parquet_loader_base2();
26056
+ init_parquet_source_worker_factory();
26017
26057
  init_parquet_source_worker_url();
26018
26058
  PARQUET_SOURCE_WORKER = {
26019
26059
  ...PARQUET_LOADER_BASE2,
26020
26060
  id: "parquet-source",
26021
26061
  name: "ParquetSource",
26022
- worker: PARQUET_SOURCE_WORKER_URL
26062
+ worker: PARQUET_SOURCE_WORKER_URL,
26063
+ loadWorker: PARQUET_SOURCE_WORKER_LOAD_WORKER
26023
26064
  };
26024
26065
  }
26025
26066
  });
@@ -28100,12 +28141,12 @@ init_geoparquet_loader();
28100
28141
 
28101
28142
  // dist/parquet-js-loader-types.js
28102
28143
  init_parquet_format();
28103
- var VERSION8 = true ? "5.0.0-alpha.6" : "latest";
28144
+ var VERSION8 = true ? "5.0.0-alpha.7" : "latest";
28104
28145
  var DEFAULT_PARQUET_JS_OPTIONS3 = {
28105
28146
  columns: void 0,
28106
28147
  preserveBinary: false,
28107
28148
  verifyFooterSignature: true,
28108
- shape: "object-row-table"
28149
+ shape: "arrow-table"
28109
28150
  };
28110
28151
  async function preloadParquetJSLoader2() {
28111
28152
  const { ParquetJSLoaderWithParser: ParquetJSLoaderWithParser2 } = await Promise.resolve().then(() => (init_parquet_js_loader(), parquet_js_loader_exports));
@@ -28127,7 +28168,7 @@ var ParquetJSLoader2 = {
28127
28168
 
28128
28169
  // dist/parquet-source-loader-types.js
28129
28170
  init_parquet_format();
28130
- var VERSION10 = true ? "5.0.0-alpha.6" : "latest";
28171
+ var VERSION10 = true ? "5.0.0-alpha.7" : "latest";
28131
28172
  async function preloadParquetSourceLoader2() {
28132
28173
  const { ParquetSourceLoaderWithParser: ParquetSourceLoaderWithParser2 } = await Promise.resolve().then(() => (init_parquet_source_loader(), parquet_source_loader_exports));
28133
28174
  return ParquetSourceLoaderWithParser2;
@@ -28251,7 +28292,7 @@ init_normalize_parquet_options2();
28251
28292
  init_parquet_format();
28252
28293
 
28253
28294
  // dist/lib/constants.js
28254
- var VERSION11 = true ? "5.0.0-alpha.6" : "latest";
28295
+ var VERSION11 = true ? "5.0.0-alpha.7" : "latest";
28255
28296
  var PARQUET_MAGIC2 = "PAR1";
28256
28297
  var PARQUET_MAGIC_ENCRYPTED2 = "PARE";
28257
28298
  var PARQUET_RDLVL_TYPE2 = "INT32";
@@ -39114,7 +39155,7 @@ function formatDataType(dataType) {
39114
39155
 
39115
39156
  // dist/parquet-js-writer.js
39116
39157
  init_parquet_format();
39117
- var VERSION12 = true ? "5.0.0-alpha.6" : "latest";
39158
+ var VERSION12 = true ? "5.0.0-alpha.7" : "latest";
39118
39159
  var DEFAULT_PARQUET_JS_OPTIONS4 = {};
39119
39160
  var ParquetJSWriter = {
39120
39161
  ...ParquetFormat,