@loaders.gl/tiles 5.0.0-alpha.13 → 5.0.0-alpha.14

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 (38) hide show
  1. package/dist/dist.dev.js +665 -472
  2. package/dist/dist.min.js +3 -3
  3. package/dist/index.cjs +9 -6
  4. package/dist/index.cjs.map +2 -2
  5. package/dist/mlt/index.cjs +9 -11
  6. package/dist/mlt/index.cjs.map +1 -1
  7. package/dist/mlt/mlt-loader.js +1 -1
  8. package/dist/mlt/mlt-writer.js +1 -1
  9. package/dist/mvt/arrow-table-tile-source-loader-types.js +1 -1
  10. package/dist/mvt/arrow-table-tile-source-loader.cjs +8 -10
  11. package/dist/mvt/arrow-table-tile-source-loader.cjs.map +1 -1
  12. package/dist/mvt/dist.dev.js +15 -20
  13. package/dist/mvt/dist.min.js +19 -19
  14. package/dist/mvt/index.cjs +14 -24
  15. package/dist/mvt/index.cjs.map +3 -3
  16. package/dist/mvt/lib/mvt-worker-transport.d.ts.map +1 -1
  17. package/dist/mvt/lib/mvt-worker-transport.js +1 -1
  18. package/dist/mvt/lib/mvt-worker-transport.js.map +1 -1
  19. package/dist/mvt/map-style-loader.js +1 -1
  20. package/dist/mvt/mvt-geojson-loader-types.js +1 -1
  21. package/dist/mvt/mvt-geojson-loader.cjs +1 -1
  22. package/dist/mvt/mvt-loader.js +1 -1
  23. package/dist/mvt/mvt-writer.js +1 -1
  24. package/dist/mvt/tilejson-loader.js +1 -1
  25. package/dist/mvt-worker-node.js +69 -27
  26. package/dist/mvt-worker-node.js.map +4 -4
  27. package/dist/mvt-worker.js +68 -27
  28. package/dist/pmtiles/dist.dev.js +18 -23
  29. package/dist/pmtiles/dist.min.js +15 -15
  30. package/dist/pmtiles/geoarrow.cjs +7 -9
  31. package/dist/pmtiles/geoarrow.cjs.map +1 -1
  32. package/dist/pmtiles/index.cjs +13 -23
  33. package/dist/pmtiles/index.cjs.map +3 -3
  34. package/dist/pmtiles/lib/version.js +1 -1
  35. package/dist/pmtiles/pmtiles-writer.js +1 -1
  36. package/dist/pmtiles/raster.cjs.map +1 -1
  37. package/package.json +9 -9
  38. package/src/mvt/lib/mvt-worker-transport.ts +5 -2
@@ -15667,7 +15667,7 @@ return true;`);
15667
15667
 
15668
15668
  // ../../node_modules/@math.gl/geospatial/dist/wkb/wkb-builder.js
15669
15669
  function measureGeometry(geometryWriter, options) {
15670
- const builder = new WKBBuilder({ mode: "measure", ...options });
15670
+ const builder = new WKBBuilder({ ...options, mode: "measure" });
15671
15671
  geometryWriter(builder);
15672
15672
  return builder.finishGeometry();
15673
15673
  }
@@ -15857,6 +15857,11 @@ return true;`);
15857
15857
  if (valueOffsets.length !== geometryWriters.length + 1) {
15858
15858
  throw new Error("WKB valueOffsets length must equal geometry count plus one");
15859
15859
  }
15860
+ for (let i = 0; i < valueOffsets.length; i++) {
15861
+ if (!Number.isInteger(valueOffsets[i]) || valueOffsets[i] < 0 || i > 0 && valueOffsets[i] < valueOffsets[i - 1]) {
15862
+ throw new Error("WKB valueOffsets must be nonnegative and nondecreasing");
15863
+ }
15864
+ }
15860
15865
  if (valueOffsets[valueOffsets.length - 1] > values.byteLength) {
15861
15866
  throw new Error("WKB values buffer is smaller than its final offset");
15862
15867
  }
@@ -15865,10 +15870,10 @@ return true;`);
15865
15870
  if (!geometryWriter)
15866
15871
  continue;
15867
15872
  const builder = new _WKBBuilder({
15873
+ ...options,
15868
15874
  mode: "write",
15869
15875
  target: values,
15870
15876
  byteOffset: valueOffsets[geometryIndex],
15871
- ...options,
15872
15877
  dimension: options.dimensionResolver?.(geometryIndex) ?? options.dimension
15873
15878
  });
15874
15879
  geometryWriter(builder);
@@ -19056,7 +19061,7 @@ return true;`);
19056
19061
  "../core/src/loader-utils/lib/log-utils/log.ts"() {
19057
19062
  "use strict";
19058
19063
  init_log();
19059
- VERSION2 = true ? "5.0.0-alpha.13" : "latest";
19064
+ VERSION2 = true ? "5.0.0-alpha.14" : "latest";
19060
19065
  version = VERSION2[0] >= "0" && VERSION2[0] <= "9" ? `v${VERSION2}` : "";
19061
19066
  log2 = createLog();
19062
19067
  }
@@ -19290,6 +19295,8 @@ return true;`);
19290
19295
  process: processOnMainThread
19291
19296
  };
19292
19297
  WorkerBody.onmessage = async (type, payload) => {
19298
+ const reporter = type === "process" || type === "process-in-batches" ? createProgressReporter() : void 0;
19299
+ const jobContext = { ...context, reportProgress: reporter?.report };
19293
19300
  try {
19294
19301
  switch (type) {
19295
19302
  case "preload":
@@ -19302,9 +19309,10 @@ return true;`);
19302
19309
  const result = await process2(
19303
19310
  payload.input,
19304
19311
  payload.options || {},
19305
- context,
19312
+ jobContext,
19306
19313
  payload.context || {}
19307
19314
  );
19315
+ reporter?.finish();
19308
19316
  WorkerBody.postMessage("done", { result });
19309
19317
  break;
19310
19318
  case "process-in-batches":
@@ -19319,13 +19327,14 @@ return true;`);
19319
19327
  const resultIterator = processInBatches(
19320
19328
  createDemandDrivenIterator(inputBatches),
19321
19329
  payload.options || {},
19322
- context,
19330
+ jobContext,
19323
19331
  payload.context || {}
19324
19332
  );
19325
19333
  for await (const batch of resultIterator) {
19326
19334
  await WorkerBody.postMessage("output-batch", { result: batch });
19327
19335
  await outputAcknowledgements.next();
19328
19336
  }
19337
+ reporter?.finish();
19329
19338
  await WorkerBody.postMessage("done", {});
19330
19339
  } finally {
19331
19340
  activeInputBatches = null;
@@ -19353,6 +19362,7 @@ return true;`);
19353
19362
  default:
19354
19363
  }
19355
19364
  } catch (error) {
19365
+ reporter?.finish();
19356
19366
  const message = error instanceof Error ? error.message : "";
19357
19367
  WorkerBody.postMessage("error", { error: message });
19358
19368
  }
@@ -19392,6 +19402,35 @@ return true;`);
19392
19402
  WorkerBody.postMessage("process", payload);
19393
19403
  });
19394
19404
  }
19405
+ function createProgressReporter() {
19406
+ let pending;
19407
+ let finished = false;
19408
+ let scheduled = false;
19409
+ const flush = () => {
19410
+ scheduled = false;
19411
+ if (pending) {
19412
+ WorkerBody.postMessage("progress", { progress: pending });
19413
+ pending = void 0;
19414
+ }
19415
+ };
19416
+ return {
19417
+ /** Records progress while retaining phase transitions. */
19418
+ report(progress) {
19419
+ if (finished) return;
19420
+ if (pending && pending.phase !== progress.phase) flush();
19421
+ pending = { ...progress };
19422
+ if (!scheduled) {
19423
+ scheduled = true;
19424
+ setTimeout(flush, 0);
19425
+ }
19426
+ },
19427
+ /** Flushes final progress and suppresses reports from stale callbacks. */
19428
+ finish() {
19429
+ flush();
19430
+ finished = true;
19431
+ }
19432
+ };
19433
+ }
19395
19434
  var requestId, activeInputBatches, activeOutputAcknowledgements;
19396
19435
  var init_create_worker = __esm({
19397
19436
  "../core/src/worker-utils/lib/worker-api/create-worker.ts"() {
@@ -19438,6 +19477,7 @@ return true;`);
19438
19477
  options,
19439
19478
  context: {
19440
19479
  ...loaderContext,
19480
+ reportProgress: workerContext?.reportProgress,
19441
19481
  coreApi: createWorkerCoreApi(),
19442
19482
  _parse: createParseOnMainThread(workerContext?.process)
19443
19483
  }
@@ -19448,8 +19488,10 @@ return true;`);
19448
19488
  if (!loader.parseInBatches) {
19449
19489
  throw new Error(`${loader.id} loader does not support batched parsing`);
19450
19490
  }
19451
- const resultIterator = loader.parseInBatches(inputIterator, options, {
19491
+ const parserOptions = getWorkerLoaderOptions(loader, options);
19492
+ const resultIterator = loader.parseInBatches(inputIterator, parserOptions, {
19452
19493
  ...loaderContext,
19494
+ reportProgress: workerContext?.reportProgress,
19453
19495
  coreApi: createWorkerCoreApi(),
19454
19496
  _parse: createParseOnMainThread(workerContext?.process)
19455
19497
  });
@@ -19505,7 +19547,17 @@ return true;`);
19505
19547
  if (!context) {
19506
19548
  return void 0;
19507
19549
  }
19508
- const { fetch: fetch2, loaders, coreApi, _parse, _parseSync, _parseInBatches, ...serializableContext } = context;
19550
+ const {
19551
+ fetch: fetch2,
19552
+ loaders,
19553
+ coreApi,
19554
+ signal,
19555
+ reportProgress,
19556
+ _parse,
19557
+ _parseSync,
19558
+ _parseInBatches,
19559
+ ...serializableContext
19560
+ } = context;
19509
19561
  return JSON.parse(JSON.stringify(serializableContext));
19510
19562
  }
19511
19563
  async function parseData({
@@ -19526,18 +19578,15 @@ return true;`);
19526
19578
  } else {
19527
19579
  throw new Error(`Could not load data with ${loader.name} loader`);
19528
19580
  }
19529
- options = {
19581
+ options = getWorkerLoaderOptions(loader, options);
19582
+ return await parser(data, { ...options }, context, loader);
19583
+ }
19584
+ function getWorkerLoaderOptions(loader, options) {
19585
+ return {
19530
19586
  ...options,
19531
- modules: {
19532
- ...loader && loader.options && loader.options.modules || {},
19533
- ...options.modules || {}
19534
- },
19535
- core: {
19536
- ...options.core,
19537
- worker: false
19538
- }
19587
+ modules: { ...loader.options?.modules, ...options.modules },
19588
+ core: { ...options.core, worker: false }
19539
19589
  };
19540
- return await parser(data, { ...options }, context, loader);
19541
19590
  }
19542
19591
  var init_create_loader_worker = __esm({
19543
19592
  "../core/src/loader-utils/lib/worker-loader-utils/create-loader-worker.ts"() {
@@ -21091,14 +21140,6 @@ return true;`);
21091
21140
  }
21092
21141
  });
21093
21142
 
21094
- // ../arrow/src/transport.ts
21095
- var init_transport2 = __esm({
21096
- "../arrow/src/transport.ts"() {
21097
- "use strict";
21098
- init_transport();
21099
- }
21100
- });
21101
-
21102
21143
  // src/mvt/lib/mvt-worker-transport.ts
21103
21144
  function serializeMVTWorkerResult(result, options) {
21104
21145
  if (isArrowTable3(result)) {
@@ -21137,7 +21178,7 @@ return true;`);
21137
21178
  var init_mvt_worker_transport = __esm({
21138
21179
  "src/mvt/lib/mvt-worker-transport.ts"() {
21139
21180
  "use strict";
21140
- init_transport2();
21181
+ init_transport();
21141
21182
  }
21142
21183
  });
21143
21184
 
@@ -21176,7 +21217,7 @@ return true;`);
21176
21217
  "use strict";
21177
21218
  init_mvt_format();
21178
21219
  init_mvt_worker_transport();
21179
- VERSION3 = true ? "5.0.0-alpha.13" : "latest";
21220
+ VERSION3 = true ? "5.0.0-alpha.14" : "latest";
21180
21221
  MVTLoader = {
21181
21222
  ...MVTFormat,
21182
21223
  dataType: null,
@@ -1122,7 +1122,7 @@ var __exports__ = (() => {
1122
1122
  for (const credential of requestCredentials) normalizeRequestOrigins(credential.origins);
1123
1123
  const authenticatedFetch = async (url2, requestOptions = {}) => {
1124
1124
  requestOptions = mergeFetchOptions(fetchOptions, requestOptions);
1125
- if (requestOptions.signal?.aborted) throw createAbortError();
1125
+ requestOptions.signal?.throwIfAborted();
1126
1126
  if (!credentials.length) return baseFetch(url2, requestOptions);
1127
1127
  const resolvedURL = parseHTTPURL(url2);
1128
1128
  const authorization = resolvedURL ? await authorizeRequest(resolvedURL, requestOptions, tokenCredentials) : { url: url2, options: requestOptions, credentials: [] };
@@ -1138,7 +1138,7 @@ var __exports__ = (() => {
1138
1138
  (credential) => credential.refreshStatusCodes?.includes(response.status)
1139
1139
  );
1140
1140
  if (!refreshableCredentials.length && !shouldRetrySignature) return response;
1141
- if (requestOptions.signal?.aborted) throw createAbortError();
1141
+ requestOptions.signal?.throwIfAborted();
1142
1142
  const refreshedTokens = /* @__PURE__ */ new Map();
1143
1143
  await Promise.all(
1144
1144
  refreshableCredentials.map(async ({ credential }) => {
@@ -1149,7 +1149,7 @@ var __exports__ = (() => {
1149
1149
  if (!refreshedTokens.size && !shouldRetrySignature) return response;
1150
1150
  await response.body?.cancel().catch(() => {
1151
1151
  });
1152
- if (requestOptions.signal?.aborted) throw createAbortError();
1152
+ requestOptions.signal?.throwIfAborted();
1153
1153
  const replayAuthorization = resolvedURL ? await authorizeRequest(
1154
1154
  resolvedURL,
1155
1155
  requestOptions,
@@ -1183,9 +1183,10 @@ var __exports__ = (() => {
1183
1183
  } else {
1184
1184
  fetchFunction = (url2, requestOptions) => fetch(url2, requestOptions);
1185
1185
  }
1186
+ const fetchOptions = typeof fetchOption === "object" && fetchOption ? fetchOption : void 0;
1186
1187
  return createAuthenticatedFetch({
1187
1188
  fetch: fetchFunction,
1188
- fetchOptions: typeof fetchOption === "object" && fetchOption ? fetchOption : void 0,
1189
+ fetchOptions: options.signal ? { ...fetchOptions, signal: options.signal } : fetchOptions,
1189
1190
  credentials: options.core?.credentials || [],
1190
1191
  authentications: options.core?.authentications
1191
1192
  });
@@ -1205,7 +1206,7 @@ var __exports__ = (() => {
1205
1206
  for (const credential of credentials) {
1206
1207
  const origin = getRequestOrigin(request.url);
1207
1208
  if (!origin || !normalizeRequestOrigins(credential.origins).includes(origin)) continue;
1208
- if (signal?.aborted) throw createAbortError();
1209
+ signal?.throwIfAborted();
1209
1210
  const authenticatedRequest = await credential.authenticate({
1210
1211
  url: request.url,
1211
1212
  options: { ...request.options, headers: new Headers(request.options.headers) },
@@ -1221,7 +1222,7 @@ var __exports__ = (() => {
1221
1222
  };
1222
1223
  appliedCredentials.push(credential);
1223
1224
  }
1224
- if (signal?.aborted) throw createAbortError();
1225
+ signal?.throwIfAborted();
1225
1226
  return { ...request, credentials: appliedCredentials };
1226
1227
  }
1227
1228
  function getRequestOrigin(url2) {
@@ -1311,9 +1312,6 @@ var __exports__ = (() => {
1311
1312
  if (!["GET", "HEAD", "OPTIONS", "PUT", "DELETE"].includes(method)) return false;
1312
1313
  return !(options.body && typeof ReadableStream !== "undefined" && options.body instanceof ReadableStream);
1313
1314
  }
1314
- function createAbortError() {
1315
- return new DOMException("The operation was aborted.", "AbortError");
1316
- }
1317
1315
  var AUTHENTICATED_FETCH, refreshPromises;
1318
1316
  var init_request_credentials = __esm({
1319
1317
  "../core/src/loader-utils/lib/request-utils/request-credentials.ts"() {
@@ -1517,7 +1515,7 @@ var __exports__ = (() => {
1517
1515
  function getTimestamp() {
1518
1516
  return globalThis.performance?.now() ?? Date.now();
1519
1517
  }
1520
- function createAbortError2() {
1518
+ function createAbortError() {
1521
1519
  if (typeof DOMException !== "undefined") {
1522
1520
  return new DOMException("Request aborted", "AbortError");
1523
1521
  }
@@ -1621,7 +1619,7 @@ var __exports__ = (() => {
1621
1619
  return Promise.reject(new Error("Byte range length cannot be negative"));
1622
1620
  }
1623
1621
  if (request.signal?.aborted) {
1624
- return Promise.reject(request.signal.reason ?? createAbortError2());
1622
+ return Promise.reject(request.signal.reason ?? createAbortError());
1625
1623
  }
1626
1624
  if (request.length === 0) {
1627
1625
  return Promise.resolve(new ArrayBuffer(0));
@@ -1881,7 +1879,7 @@ var __exports__ = (() => {
1881
1879
  }
1882
1880
  }
1883
1881
  this.transportQueue = this.transportQueue.filter((group) => group.requests.length > 0);
1884
- request.reject(request.signal?.reason ?? createAbortError2());
1882
+ request.reject(request.signal?.reason ?? createAbortError());
1885
1883
  this.trackEvent({
1886
1884
  type: "abort",
1887
1885
  sourceId: request.sourceId,
@@ -18871,7 +18869,7 @@ return true;`);
18871
18869
 
18872
18870
  // ../../node_modules/@math.gl/geospatial/dist/wkb/wkb-builder.js
18873
18871
  function measureGeometry(geometryWriter, options) {
18874
- const builder = new WKBBuilder({ mode: "measure", ...options });
18872
+ const builder = new WKBBuilder({ ...options, mode: "measure" });
18875
18873
  geometryWriter(builder);
18876
18874
  return builder.finishGeometry();
18877
18875
  }
@@ -19061,6 +19059,11 @@ return true;`);
19061
19059
  if (valueOffsets.length !== geometryWriters.length + 1) {
19062
19060
  throw new Error("WKB valueOffsets length must equal geometry count plus one");
19063
19061
  }
19062
+ for (let i2 = 0; i2 < valueOffsets.length; i2++) {
19063
+ if (!Number.isInteger(valueOffsets[i2]) || valueOffsets[i2] < 0 || i2 > 0 && valueOffsets[i2] < valueOffsets[i2 - 1]) {
19064
+ throw new Error("WKB valueOffsets must be nonnegative and nondecreasing");
19065
+ }
19066
+ }
19064
19067
  if (valueOffsets[valueOffsets.length - 1] > values.byteLength) {
19065
19068
  throw new Error("WKB values buffer is smaller than its final offset");
19066
19069
  }
@@ -19069,10 +19072,10 @@ return true;`);
19069
19072
  if (!geometryWriter)
19070
19073
  continue;
19071
19074
  const builder = new _WKBBuilder({
19075
+ ...options,
19072
19076
  mode: "write",
19073
19077
  target: values,
19074
19078
  byteOffset: valueOffsets[geometryIndex],
19075
- ...options,
19076
19079
  dimension: options.dimensionResolver?.(geometryIndex) ?? options.dimension
19077
19080
  });
19078
19081
  geometryWriter(builder);
@@ -46871,14 +46874,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
46871
46874
  }
46872
46875
  });
46873
46876
 
46874
- // ../arrow/src/transport.ts
46875
- var init_transport2 = __esm({
46876
- "../arrow/src/transport.ts"() {
46877
- "use strict";
46878
- init_transport();
46879
- }
46880
- });
46881
-
46882
46877
  // src/mvt/lib/mvt-worker-transport.ts
46883
46878
  function serializeMVTWorkerResult(result, options) {
46884
46879
  if (isArrowTable3(result)) {
@@ -46917,7 +46912,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
46917
46912
  var init_mvt_worker_transport = __esm({
46918
46913
  "src/mvt/lib/mvt-worker-transport.ts"() {
46919
46914
  "use strict";
46920
- init_transport2();
46915
+ init_transport();
46921
46916
  }
46922
46917
  });
46923
46918