@loaders.gl/i3s 4.4.0-alpha.2 → 4.4.0-alpha.9

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 (74) hide show
  1. package/README.md +1 -1
  2. package/dist/arcgis-webscene-loader.js +2 -1
  3. package/dist/arcgis-webscene-loader.js.map +1 -0
  4. package/dist/dist.dev.js +402 -298
  5. package/dist/dist.min.js +1 -1
  6. package/dist/i3s-attribute-loader.js +2 -1
  7. package/dist/i3s-attribute-loader.js.map +1 -0
  8. package/dist/i3s-building-scene-layer-loader.js +2 -1
  9. package/dist/i3s-building-scene-layer-loader.js.map +1 -0
  10. package/dist/i3s-content-loader.js +2 -1
  11. package/dist/i3s-content-loader.js.map +1 -0
  12. package/dist/i3s-content-worker-node.js +45 -45
  13. package/dist/i3s-content-worker-node.js.map +4 -4
  14. package/dist/i3s-content-worker.js +396 -159
  15. package/dist/i3s-loader.d.ts +13 -8
  16. package/dist/i3s-loader.d.ts.map +1 -1
  17. package/dist/i3s-loader.js +8 -7
  18. package/dist/i3s-loader.js.map +1 -0
  19. package/dist/i3s-node-page-loader.js +2 -1
  20. package/dist/i3s-node-page-loader.js.map +1 -0
  21. package/dist/i3s-slpk-loader.d.ts +6 -1
  22. package/dist/i3s-slpk-loader.d.ts.map +1 -1
  23. package/dist/i3s-slpk-loader.js +10 -4
  24. package/dist/i3s-slpk-loader.js.map +1 -0
  25. package/dist/index.cjs +35 -27
  26. package/dist/index.cjs.map +4 -4
  27. package/dist/index.js +1 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/lib/helpers/i3s-nodepages-tiles.js +5 -4
  30. package/dist/lib/helpers/i3s-nodepages-tiles.js.map +1 -0
  31. package/dist/lib/parsers/constants.js +1 -0
  32. package/dist/lib/parsers/constants.js.map +1 -0
  33. package/dist/lib/parsers/parse-arcgis-webscene.js +1 -0
  34. package/dist/lib/parsers/parse-arcgis-webscene.js.map +1 -0
  35. package/dist/lib/parsers/parse-i3s-attribute.js +1 -0
  36. package/dist/lib/parsers/parse-i3s-attribute.js.map +1 -0
  37. package/dist/lib/parsers/parse-i3s-building-scene-layer.js +1 -0
  38. package/dist/lib/parsers/parse-i3s-building-scene-layer.js.map +1 -0
  39. package/dist/lib/parsers/parse-i3s-tile-content.d.ts +2 -2
  40. package/dist/lib/parsers/parse-i3s-tile-content.d.ts.map +1 -1
  41. package/dist/lib/parsers/parse-i3s-tile-content.js +1 -0
  42. package/dist/lib/parsers/parse-i3s-tile-content.js.map +1 -0
  43. package/dist/lib/parsers/parse-i3s.d.ts.map +1 -1
  44. package/dist/lib/parsers/parse-i3s.js +6 -4
  45. package/dist/lib/parsers/parse-i3s.js.map +1 -0
  46. package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts +3 -3
  47. package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts.map +1 -1
  48. package/dist/lib/parsers/parse-slpk/parse-slpk.js +4 -3
  49. package/dist/lib/parsers/parse-slpk/parse-slpk.js.map +1 -0
  50. package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts +3 -3
  51. package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts.map +1 -1
  52. package/dist/lib/parsers/parse-slpk/slpk-archieve.js +5 -4
  53. package/dist/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -0
  54. package/dist/lib/utils/convert-i3s-obb-to-mbs.js +1 -0
  55. package/dist/lib/utils/convert-i3s-obb-to-mbs.js.map +1 -0
  56. package/dist/lib/utils/customize-colors.js +5 -2
  57. package/dist/lib/utils/customize-colors.js.map +1 -0
  58. package/dist/lib/utils/url-utils.js +1 -0
  59. package/dist/lib/utils/url-utils.js.map +1 -0
  60. package/dist/types.js +1 -0
  61. package/dist/types.js.map +1 -0
  62. package/dist/workers/i3s-content-worker-node.js +1 -0
  63. package/dist/workers/i3s-content-worker-node.js.map +1 -0
  64. package/dist/workers/i3s-content-worker.js +1 -0
  65. package/dist/workers/i3s-content-worker.js.map +1 -0
  66. package/package.json +18 -12
  67. package/src/i3s-loader.ts +15 -10
  68. package/src/i3s-slpk-loader.ts +8 -3
  69. package/src/lib/helpers/i3s-nodepages-tiles.ts +4 -4
  70. package/src/lib/parsers/parse-i3s-tile-content.ts +2 -2
  71. package/src/lib/parsers/parse-i3s.ts +7 -4
  72. package/src/lib/parsers/parse-slpk/parse-slpk.ts +7 -5
  73. package/src/lib/parsers/parse-slpk/slpk-archieve.ts +7 -10
  74. package/src/lib/utils/customize-colors.ts +4 -2
@@ -473,7 +473,7 @@
473
473
  var dist_default = new Log({ id: "@probe.gl/log" });
474
474
 
475
475
  // ../loader-utils/src/lib/log-utils/log.ts
476
- var VERSION2 = true ? "4.4.0-alpha.1" : "latest";
476
+ var VERSION2 = true ? "4.4.0-alpha.9" : "latest";
477
477
  var version = VERSION2[0] >= "0" && VERSION2[0] <= "9" ? `v${VERSION2}` : "";
478
478
  function createLog() {
479
479
  const log2 = new Log({ id: "loaders.gl" });
@@ -486,6 +486,21 @@
486
486
  }
487
487
  var log = createLog();
488
488
 
489
+ // ../loader-utils/src/lib/javascript-utils/is-type.ts
490
+ var isBoolean = (value) => typeof value === "boolean";
491
+ var isFunction = (value) => typeof value === "function";
492
+ var isObject = (value) => value !== null && typeof value === "object";
493
+ var isPureObject = (value) => isObject(value) && value.constructor === {}.constructor;
494
+ var isSharedArrayBuffer = (value) => typeof SharedArrayBuffer !== "undefined" && value instanceof SharedArrayBuffer;
495
+ var isArrayBufferLike = (value) => isObject(value) && typeof value.byteLength === "number" && typeof value.slice === "function";
496
+ var isIterable = (value) => Boolean(value) && isFunction(value[Symbol.iterator]);
497
+ var isAsyncIterable = (value) => Boolean(value) && isFunction(value[Symbol.asyncIterator]);
498
+ var isResponse = (value) => typeof Response !== "undefined" && value instanceof Response || isObject(value) && isFunction(value.arrayBuffer) && isFunction(value.text) && isFunction(value.json);
499
+ var isBlob = (value) => typeof Blob !== "undefined" && value instanceof Blob;
500
+ var isReadableDOMStream = (value) => typeof ReadableStream !== "undefined" && value instanceof ReadableStream || isObject(value) && isFunction(value.tee) && isFunction(value.cancel) && isFunction(value.getReader);
501
+ var isReadableNodeStream = (value) => isObject(value) && isFunction(value.read) && isFunction(value.pipe) && isBoolean(value.readable);
502
+ var isReadableStream = (value) => isReadableDOMStream(value) || isReadableNodeStream(value);
503
+
489
504
  // ../loader-utils/src/lib/option-utils/merge-options.ts
490
505
  function mergeOptions(baseOptions, newOptions) {
491
506
  return mergeOptionsRecursively(baseOptions || {}, newOptions);
@@ -532,8 +547,9 @@
532
547
  "loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN."
533
548
  );
534
549
  globalThis._loadersgl_.version = NPM_TAG;
550
+ warningIssued = true;
535
551
  } else {
536
- globalThis._loadersgl_.version = "4.4.0-alpha.1";
552
+ globalThis._loadersgl_.version = "4.4.0-alpha.9";
537
553
  }
538
554
  }
539
555
  return globalThis._loadersgl_.version;
@@ -789,7 +805,8 @@
789
805
  if (this.url) {
790
806
  const absolute = this.url.includes(":/") || this.url.startsWith("/");
791
807
  const url = absolute ? this.url : `./${this.url}`;
792
- worker = new NodeWorker(url, { eval: false });
808
+ const type = this.url.endsWith(".ts") || this.url.endsWith(".mjs") ? "module" : "commonjs";
809
+ worker = new NodeWorker(url, { eval: false, type });
793
810
  } else if (this.source) {
794
811
  worker = new NodeWorker(this.source, { eval: true });
795
812
  } else {
@@ -1121,7 +1138,8 @@
1121
1138
  if (!url && worker.id === "compression") {
1122
1139
  url = options.workerUrl;
1123
1140
  }
1124
- if (options._workerType === "test") {
1141
+ const workerType = options._workerType || options?.core?._workerType;
1142
+ if (workerType === "test") {
1125
1143
  if (isBrowser3) {
1126
1144
  url = `modules/${worker.module}/dist/${workerFile}`;
1127
1145
  } else {
@@ -1161,6 +1179,9 @@
1161
1179
  return await loadLibraryPromises[libraryUrl];
1162
1180
  }
1163
1181
  function getLibraryUrl(library, moduleName, options = {}, libraryName = null) {
1182
+ if (options?.core) {
1183
+ throw new Error("loadLibrary: options.core must be pre-normalized");
1184
+ }
1164
1185
  if (!options.useLocalLibraries && library.startsWith("http")) {
1165
1186
  return library;
1166
1187
  }
@@ -1186,10 +1207,20 @@
1186
1207
  return await loadAsArrayBuffer(libraryUrl);
1187
1208
  }
1188
1209
  if (!isBrowser3) {
1210
+ const { requireFromFile } = globalThis.loaders || {};
1189
1211
  try {
1190
- const { requireFromFile } = globalThis.loaders || {};
1191
- return await requireFromFile?.(libraryUrl);
1212
+ const result = await requireFromFile?.(libraryUrl);
1213
+ if (result || !libraryUrl.includes("/dist/libs/")) {
1214
+ return result;
1215
+ }
1216
+ return await requireFromFile?.(libraryUrl.replace("/dist/libs/", "/src/libs/"));
1192
1217
  } catch (error) {
1218
+ if (libraryUrl.includes("/dist/libs/")) {
1219
+ try {
1220
+ return await requireFromFile?.(libraryUrl.replace("/dist/libs/", "/src/libs/"));
1221
+ } catch {
1222
+ }
1223
+ }
1193
1224
  console.error(error);
1194
1225
  return null;
1195
1226
  }
@@ -1225,7 +1256,14 @@
1225
1256
  const response = await fetch(url);
1226
1257
  return await response.arrayBuffer();
1227
1258
  }
1228
- return await readFileAsArrayBuffer(url);
1259
+ try {
1260
+ return await readFileAsArrayBuffer(url);
1261
+ } catch {
1262
+ if (url.includes("/dist/libs/")) {
1263
+ return await readFileAsArrayBuffer(url.replace("/dist/libs/", "/src/libs/"));
1264
+ }
1265
+ throw new Error(`Failed to load ArrayBuffer from ${url}`);
1266
+ }
1229
1267
  }
1230
1268
  async function loadAsText(url) {
1231
1269
  const { readFileAsText } = globalThis.loaders || {};
@@ -1233,7 +1271,14 @@
1233
1271
  const response = await fetch(url);
1234
1272
  return await response.text();
1235
1273
  }
1236
- return await readFileAsText(url);
1274
+ try {
1275
+ return await readFileAsText(url);
1276
+ } catch {
1277
+ if (url.includes("/dist/libs/")) {
1278
+ return await readFileAsText(url.replace("/dist/libs/", "/src/libs/"));
1279
+ }
1280
+ throw new Error(`Failed to load text from ${url}`);
1281
+ }
1237
1282
  }
1238
1283
 
1239
1284
  // ../loader-utils/src/lib/worker-loader-utils/create-loader-worker.ts
@@ -1312,7 +1357,10 @@
1312
1357
  options = {
1313
1358
  ...options,
1314
1359
  modules: loader && loader.options && loader.options.modules || {},
1315
- worker: false
1360
+ core: {
1361
+ ...options.core,
1362
+ worker: false
1363
+ }
1316
1364
  };
1317
1365
  return await parser(data, { ...options }, context, loader);
1318
1366
  }
@@ -1322,15 +1370,17 @@
1322
1370
  if (!WorkerFarm.isSupported()) {
1323
1371
  return false;
1324
1372
  }
1325
- if (!isBrowser3 && !options?._nodeWorkers) {
1373
+ const nodeWorkers = options?._nodeWorkers ?? options?.core?._nodeWorkers;
1374
+ if (!isBrowser3 && !nodeWorkers) {
1326
1375
  return false;
1327
1376
  }
1328
- return loader.worker && options?.worker;
1377
+ const useWorkers = options?.worker ?? options?.core?.worker;
1378
+ return Boolean(loader.worker && useWorkers);
1329
1379
  }
1330
1380
  async function parseWithWorker(loader, data, options, context, parseOnMainThread2) {
1331
1381
  const name = loader.id;
1332
1382
  const url = getWorkerURL(loader, options);
1333
- const workerFarm = WorkerFarm.getWorkerFarm(options);
1383
+ const workerFarm = WorkerFarm.getWorkerFarm(options?.core);
1334
1384
  const workerPool = workerFarm.getWorkerPool({ name, url });
1335
1385
  options = JSON.parse(JSON.stringify(options));
1336
1386
  context = JSON.parse(JSON.stringify(context || {}));
@@ -1408,10 +1458,26 @@
1408
1458
  async function concatenateArrayBuffersAsync(asyncIterator) {
1409
1459
  const arrayBuffers = [];
1410
1460
  for await (const chunk of asyncIterator) {
1411
- arrayBuffers.push(chunk);
1461
+ arrayBuffers.push(copyToArrayBuffer(chunk));
1412
1462
  }
1413
1463
  return concatenateArrayBuffers(...arrayBuffers);
1414
1464
  }
1465
+ function copyToArrayBuffer(chunk) {
1466
+ if (chunk instanceof ArrayBuffer) {
1467
+ return chunk;
1468
+ }
1469
+ if (ArrayBuffer.isView(chunk)) {
1470
+ const { buffer, byteOffset, byteLength } = chunk;
1471
+ return copyFromBuffer(buffer, byteOffset, byteLength);
1472
+ }
1473
+ return copyFromBuffer(chunk);
1474
+ }
1475
+ function copyFromBuffer(buffer, byteOffset = 0, byteLength = buffer.byteLength - byteOffset) {
1476
+ const view = new Uint8Array(buffer, byteOffset, byteLength);
1477
+ const copy2 = new Uint8Array(view.length);
1478
+ copy2.set(view);
1479
+ return copy2.buffer;
1480
+ }
1415
1481
 
1416
1482
  // ../loader-utils/src/lib/path-utils/file-aliases.ts
1417
1483
  var pathPrefix = "";
@@ -1445,11 +1511,15 @@
1445
1511
  if (data instanceof ArrayBuffer) {
1446
1512
  return data;
1447
1513
  }
1514
+ if (isSharedArrayBuffer(data)) {
1515
+ return copyToArrayBuffer2(data);
1516
+ }
1448
1517
  if (ArrayBuffer.isView(data)) {
1518
+ const buffer = data.buffer;
1449
1519
  if (data.byteOffset === 0 && data.byteLength === data.buffer.byteLength) {
1450
- return data.buffer;
1520
+ return buffer;
1451
1521
  }
1452
- return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
1522
+ return buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
1453
1523
  }
1454
1524
  if (typeof data === "string") {
1455
1525
  const text = data;
@@ -1461,6 +1531,31 @@
1461
1531
  }
1462
1532
  throw new Error("toArrayBuffer");
1463
1533
  }
1534
+ function ensureArrayBuffer(bufferSource) {
1535
+ if (bufferSource instanceof ArrayBuffer) {
1536
+ return bufferSource;
1537
+ }
1538
+ if (isSharedArrayBuffer(bufferSource)) {
1539
+ return copyToArrayBuffer2(bufferSource);
1540
+ }
1541
+ const { buffer, byteOffset, byteLength } = bufferSource;
1542
+ if (buffer instanceof ArrayBuffer && byteOffset === 0 && byteLength === buffer.byteLength) {
1543
+ return buffer;
1544
+ }
1545
+ return copyToArrayBuffer2(buffer, byteOffset, byteLength);
1546
+ }
1547
+ function copyToArrayBuffer2(buffer, byteOffset = 0, byteLength = buffer.byteLength - byteOffset) {
1548
+ const view = new Uint8Array(buffer, byteOffset, byteLength);
1549
+ const copy2 = new Uint8Array(view.length);
1550
+ copy2.set(view);
1551
+ return copy2.buffer;
1552
+ }
1553
+ function toArrayBufferView(data) {
1554
+ if (ArrayBuffer.isView(data)) {
1555
+ return data;
1556
+ }
1557
+ return new Uint8Array(data);
1558
+ }
1464
1559
 
1465
1560
  // ../loader-utils/src/lib/path-utils/path.ts
1466
1561
  var path_exports = {};
@@ -1483,7 +1578,7 @@
1483
1578
  // ../loader-utils/src/lib/path-utils/path.ts
1484
1579
  function filename(url) {
1485
1580
  const slashIndex = url ? url.lastIndexOf("/") : -1;
1486
- return slashIndex >= 0 ? url.substr(slashIndex + 1) : "";
1581
+ return slashIndex >= 0 ? url.substr(slashIndex + 1) : url;
1487
1582
  }
1488
1583
  function dirname(url) {
1489
1584
  const slashIndex = url ? url.lastIndexOf("/") : -1;
@@ -1605,20 +1700,6 @@
1605
1700
  return res;
1606
1701
  }
1607
1702
 
1608
- // ../core/src/javascript-utils/is-type.ts
1609
- var isBoolean = (x) => typeof x === "boolean";
1610
- var isFunction = (x) => typeof x === "function";
1611
- var isObject = (x) => x !== null && typeof x === "object";
1612
- var isPureObject = (x) => isObject(x) && x.constructor === {}.constructor;
1613
- var isIterable = (x) => Boolean(x) && typeof x[Symbol.iterator] === "function";
1614
- var isAsyncIterable = (x) => x && typeof x[Symbol.asyncIterator] === "function";
1615
- var isResponse = (x) => typeof Response !== "undefined" && x instanceof Response || x && x.arrayBuffer && x.text && x.json;
1616
- var isBlob = (x) => typeof Blob !== "undefined" && x instanceof Blob;
1617
- var isBuffer2 = (x) => x && typeof x === "object" && x.isBuffer;
1618
- var isReadableDOMStream = (x) => typeof ReadableStream !== "undefined" && x instanceof ReadableStream || isObject(x) && isFunction(x.tee) && isFunction(x.cancel) && isFunction(x.getReader);
1619
- var isReadableNodeStream = (x) => isObject(x) && isFunction(x.read) && isFunction(x.pipe) && isBoolean(x.readable);
1620
- var isReadableStream = (x) => isReadableDOMStream(x) || isReadableNodeStream(x);
1621
-
1622
1703
  // ../core/src/lib/fetch/fetch-error.ts
1623
1704
  var FetchError = class extends Error {
1624
1705
  constructor(message, info) {
@@ -1680,12 +1761,11 @@
1680
1761
  // ../core/src/lib/utils/resource-utils.ts
1681
1762
  function getResourceUrl(resource) {
1682
1763
  if (isResponse(resource)) {
1683
- const response = resource;
1684
- return response.url;
1764
+ return resource.url;
1685
1765
  }
1686
1766
  if (isBlob(resource)) {
1687
- const blob = resource;
1688
- return blob.name || "";
1767
+ const fileName = "name" in resource ? resource.name : "";
1768
+ return fileName || "";
1689
1769
  }
1690
1770
  if (typeof resource === "string") {
1691
1771
  return resource;
@@ -1694,14 +1774,12 @@
1694
1774
  }
1695
1775
  function getResourceMIMEType(resource) {
1696
1776
  if (isResponse(resource)) {
1697
- const response = resource;
1698
- const contentTypeHeader = response.headers.get("content-type") || "";
1699
- const noQueryUrl = stripQueryString(response.url);
1777
+ const contentTypeHeader = resource.headers.get("content-type") || "";
1778
+ const noQueryUrl = stripQueryString(resource.url);
1700
1779
  return parseMIMEType(contentTypeHeader) || parseMIMETypeFromURL(noQueryUrl);
1701
1780
  }
1702
1781
  if (isBlob(resource)) {
1703
- const blob = resource;
1704
- return blob.type || "";
1782
+ return resource.type || "";
1705
1783
  }
1706
1784
  if (typeof resource === "string") {
1707
1785
  return parseMIMETypeFromURL(resource);
@@ -1870,39 +1948,68 @@
1870
1948
 
1871
1949
  // ../core/src/lib/loader-utils/option-defaults.ts
1872
1950
  var DEFAULT_LOADER_OPTIONS = {
1873
- // baseUri
1874
- fetch: null,
1875
- mimeType: void 0,
1876
- nothrow: false,
1877
- log: new ConsoleLog(),
1878
- // A probe.gl compatible (`log.log()()` syntax) that just logs to console
1879
- useLocalLibraries: false,
1880
- CDN: "https://unpkg.com/@loaders.gl",
1881
- worker: true,
1882
- // By default, use worker if provided by loader.
1883
- maxConcurrency: 3,
1884
- // How many worker instances should be created for each loader.
1885
- maxMobileConcurrency: 1,
1886
- // How many worker instances should be created for each loader on mobile devices.
1887
- reuseWorkers: isBrowser,
1888
- // By default reuse workers in browser (Node.js refuses to terminate if browsers are running)
1889
- _nodeWorkers: false,
1890
- // By default do not support node workers
1891
- _workerType: "",
1892
- // 'test' to use locally generated workers
1893
- limit: 0,
1894
- _limitMB: 0,
1895
- batchSize: "auto",
1896
- batchDebounceMs: 0,
1897
- metadata: false,
1898
- // TODO - currently only implemented for parseInBatches, adds initial metadata batch,
1899
- transforms: []
1951
+ core: {
1952
+ baseUri: void 0,
1953
+ // baseUri
1954
+ fetch: null,
1955
+ mimeType: void 0,
1956
+ fallbackMimeType: void 0,
1957
+ ignoreRegisteredLoaders: void 0,
1958
+ nothrow: false,
1959
+ log: new ConsoleLog(),
1960
+ // A probe.gl compatible (`log.log()()` syntax) that just logs to console
1961
+ useLocalLibraries: false,
1962
+ CDN: "https://unpkg.com/@loaders.gl",
1963
+ worker: true,
1964
+ // By default, use worker if provided by loader.
1965
+ maxConcurrency: 3,
1966
+ // How many worker instances should be created for each loader.
1967
+ maxMobileConcurrency: 1,
1968
+ // How many worker instances should be created for each loader on mobile devices.
1969
+ reuseWorkers: isBrowser,
1970
+ // By default reuse workers in browser (Node.js refuses to terminate if browsers are running)
1971
+ _nodeWorkers: false,
1972
+ // By default do not support node workers
1973
+ _workerType: "",
1974
+ // 'test' to use locally generated workers
1975
+ limit: 0,
1976
+ _limitMB: 0,
1977
+ batchSize: "auto",
1978
+ batchDebounceMs: 0,
1979
+ metadata: false,
1980
+ // TODO - currently only implemented for parseInBatches, adds initial metadata batch,
1981
+ transforms: []
1982
+ }
1900
1983
  };
1901
1984
  var REMOVED_LOADER_OPTIONS = {
1985
+ // baseUri
1986
+ baseUri: "core.baseUri",
1987
+ fetch: "core.fetch",
1988
+ mimeType: "core.mimeType",
1989
+ fallbackMimeType: "core.fallbackMimeType",
1990
+ ignoreRegisteredLoaders: "core.ignoreRegisteredLoaders",
1991
+ nothrow: "core.nothrow",
1992
+ log: "core.log",
1993
+ useLocalLibraries: "core.useLocalLibraries",
1994
+ CDN: "core.CDN",
1995
+ worker: "core.worker",
1996
+ maxConcurrency: "core.maxConcurrency",
1997
+ maxMobileConcurrency: "core.maxMobileConcurrency",
1998
+ reuseWorkers: "core.reuseWorkers",
1999
+ _nodeWorkers: "core.nodeWorkers",
2000
+ _workerType: "core._workerType",
2001
+ _worker: "core._workerType",
2002
+ limit: "core.limit",
2003
+ _limitMB: "core._limitMB",
2004
+ batchSize: "core.batchSize",
2005
+ batchDebounceMs: "core.batchDebounceMs",
2006
+ metadata: "core.metadata",
2007
+ transforms: "core.transforms",
2008
+ // Older deprecations
1902
2009
  throws: "nothrow",
1903
2010
  dataType: "(no longer used)",
1904
2011
  uri: "baseUri",
1905
- // Warn if fetch options are used on top-level
2012
+ // Warn if fetch options are used on toplevel
1906
2013
  method: "fetch.method",
1907
2014
  headers: "fetch.headers",
1908
2015
  body: "fetch.body",
@@ -1918,6 +2025,29 @@
1918
2025
  };
1919
2026
 
1920
2027
  // ../core/src/lib/loader-utils/option-utils.ts
2028
+ var CORE_LOADER_OPTION_KEYS = [
2029
+ "baseUri",
2030
+ "fetch",
2031
+ "mimeType",
2032
+ "fallbackMimeType",
2033
+ "ignoreRegisteredLoaders",
2034
+ "nothrow",
2035
+ "log",
2036
+ "useLocalLibraries",
2037
+ "CDN",
2038
+ "worker",
2039
+ "maxConcurrency",
2040
+ "maxMobileConcurrency",
2041
+ "reuseWorkers",
2042
+ "_nodeWorkers",
2043
+ "_workerType",
2044
+ "limit",
2045
+ "_limitMB",
2046
+ "batchSize",
2047
+ "batchDebounceMs",
2048
+ "metadata",
2049
+ "transforms"
2050
+ ];
1921
2051
  function getGlobalLoaderState() {
1922
2052
  globalThis.loaders = globalThis.loaders || {};
1923
2053
  const { loaders } = globalThis;
@@ -1928,14 +2058,30 @@
1928
2058
  }
1929
2059
  function getGlobalLoaderOptions() {
1930
2060
  const state = getGlobalLoaderState();
1931
- state.globalOptions = state.globalOptions || { ...DEFAULT_LOADER_OPTIONS };
1932
- return state.globalOptions;
2061
+ state.globalOptions = state.globalOptions || {
2062
+ ...DEFAULT_LOADER_OPTIONS,
2063
+ core: { ...DEFAULT_LOADER_OPTIONS.core }
2064
+ };
2065
+ return normalizeLoaderOptions(state.globalOptions);
1933
2066
  }
1934
2067
  function normalizeOptions(options, loader, loaders, url) {
1935
2068
  loaders = loaders || [];
1936
2069
  loaders = Array.isArray(loaders) ? loaders : [loaders];
1937
2070
  validateOptions(options, loaders);
1938
- return normalizeOptionsInternal(loader, options, url);
2071
+ return normalizeLoaderOptions(normalizeOptionsInternal(loader, options, url));
2072
+ }
2073
+ function normalizeLoaderOptions(options) {
2074
+ const normalized = cloneLoaderOptions(options);
2075
+ moveDeprecatedTopLevelOptionsToCore(normalized);
2076
+ for (const key of CORE_LOADER_OPTION_KEYS) {
2077
+ if (normalized.core && normalized.core[key] !== void 0) {
2078
+ delete normalized[key];
2079
+ }
2080
+ }
2081
+ if (normalized.core && normalized.core._workerType !== void 0) {
2082
+ delete normalized._worker;
2083
+ }
2084
+ return normalized;
1939
2085
  }
1940
2086
  function validateOptions(options, loaders) {
1941
2087
  validateOptionsObject(options, null, DEFAULT_LOADER_OPTIONS, REMOVED_LOADER_OPTIONS, loaders);
@@ -1987,12 +2133,18 @@
1987
2133
  function normalizeOptionsInternal(loader, options, url) {
1988
2134
  const loaderDefaultOptions = loader.options || {};
1989
2135
  const mergedOptions = { ...loaderDefaultOptions };
1990
- addUrlOptions(mergedOptions, url);
1991
- if (mergedOptions.log === null) {
1992
- mergedOptions.log = new NullLog();
2136
+ if (loaderDefaultOptions.core) {
2137
+ mergedOptions.core = { ...loaderDefaultOptions.core };
1993
2138
  }
1994
- mergeNestedFields(mergedOptions, getGlobalLoaderOptions());
1995
- mergeNestedFields(mergedOptions, options);
2139
+ moveDeprecatedTopLevelOptionsToCore(mergedOptions);
2140
+ if (mergedOptions.core?.log === null) {
2141
+ mergedOptions.core = { ...mergedOptions.core, log: new NullLog() };
2142
+ }
2143
+ mergeNestedFields(mergedOptions, normalizeLoaderOptions(getGlobalLoaderOptions()));
2144
+ const userOptions = normalizeLoaderOptions(options);
2145
+ mergeNestedFields(mergedOptions, userOptions);
2146
+ addUrlOptions(mergedOptions, url);
2147
+ addDeprecatedTopLevelOptions(mergedOptions);
1996
2148
  return mergedOptions;
1997
2149
  }
1998
2150
  function mergeNestedFields(mergedOptions, options) {
@@ -2011,8 +2163,50 @@
2011
2163
  }
2012
2164
  }
2013
2165
  function addUrlOptions(options, url) {
2014
- if (url && !("baseUri" in options)) {
2015
- options.baseUri = url;
2166
+ if (!url) {
2167
+ return;
2168
+ }
2169
+ const hasTopLevelBaseUri = options.baseUri !== void 0;
2170
+ const hasCoreBaseUri = options.core?.baseUri !== void 0;
2171
+ if (!hasTopLevelBaseUri && !hasCoreBaseUri) {
2172
+ options.core ||= {};
2173
+ options.core.baseUri = url;
2174
+ }
2175
+ }
2176
+ function cloneLoaderOptions(options) {
2177
+ const clonedOptions = { ...options };
2178
+ if (options.core) {
2179
+ clonedOptions.core = { ...options.core };
2180
+ }
2181
+ return clonedOptions;
2182
+ }
2183
+ function moveDeprecatedTopLevelOptionsToCore(options) {
2184
+ for (const key of CORE_LOADER_OPTION_KEYS) {
2185
+ if (options[key] !== void 0) {
2186
+ const coreOptions = options.core = options.core || {};
2187
+ const coreRecord = coreOptions;
2188
+ if (coreRecord[key] === void 0) {
2189
+ coreRecord[key] = options[key];
2190
+ }
2191
+ }
2192
+ }
2193
+ const workerTypeAlias = options._worker;
2194
+ if (workerTypeAlias !== void 0) {
2195
+ options.core ||= {};
2196
+ if (options.core._workerType === void 0) {
2197
+ options.core._workerType = workerTypeAlias;
2198
+ }
2199
+ }
2200
+ }
2201
+ function addDeprecatedTopLevelOptions(options) {
2202
+ const coreOptions = options.core;
2203
+ if (!coreOptions) {
2204
+ return;
2205
+ }
2206
+ for (const key of CORE_LOADER_OPTION_KEYS) {
2207
+ if (coreOptions[key] !== void 0) {
2208
+ options[key] = coreOptions[key];
2209
+ }
2016
2210
  }
2017
2211
  }
2018
2212
 
@@ -2064,15 +2258,22 @@
2064
2258
  if (!validHTTPResponse(data)) {
2065
2259
  return null;
2066
2260
  }
2067
- let loader = selectLoaderSync(data, loaders, { ...options, nothrow: true }, context);
2261
+ const normalizedOptions = normalizeLoaderOptions(options || {});
2262
+ normalizedOptions.core ||= {};
2263
+ let loader = selectLoaderSync(
2264
+ data,
2265
+ loaders,
2266
+ { ...normalizedOptions, core: { ...normalizedOptions.core, nothrow: true } },
2267
+ context
2268
+ );
2068
2269
  if (loader) {
2069
2270
  return loader;
2070
2271
  }
2071
2272
  if (isBlob(data)) {
2072
2273
  data = await data.slice(0, 10).arrayBuffer();
2073
- loader = selectLoaderSync(data, loaders, options, context);
2274
+ loader = selectLoaderSync(data, loaders, normalizedOptions, context);
2074
2275
  }
2075
- if (!loader && !options?.nothrow) {
2276
+ if (!loader && !normalizedOptions.core.nothrow) {
2076
2277
  throw new Error(getNoValidLoaderMessage(data));
2077
2278
  }
2078
2279
  return loader;
@@ -2081,6 +2282,8 @@
2081
2282
  if (!validHTTPResponse(data)) {
2082
2283
  return null;
2083
2284
  }
2285
+ const normalizedOptions = normalizeLoaderOptions(options || {});
2286
+ normalizedOptions.core ||= {};
2084
2287
  if (loaders && !Array.isArray(loaders)) {
2085
2288
  return normalizeLoader(loaders);
2086
2289
  }
@@ -2088,12 +2291,12 @@
2088
2291
  if (loaders) {
2089
2292
  candidateLoaders = candidateLoaders.concat(loaders);
2090
2293
  }
2091
- if (!options?.ignoreRegisteredLoaders) {
2294
+ if (!normalizedOptions.core.ignoreRegisteredLoaders) {
2092
2295
  candidateLoaders.push(...getRegisteredLoaders());
2093
2296
  }
2094
2297
  normalizeLoaders(candidateLoaders);
2095
- const loader = selectLoaderInternal(data, candidateLoaders, options, context);
2096
- if (!loader && !options?.nothrow) {
2298
+ const loader = selectLoaderInternal(data, candidateLoaders, normalizedOptions, context);
2299
+ if (!loader && !normalizedOptions.core.nothrow) {
2097
2300
  throw new Error(getNoValidLoaderMessage(data));
2098
2301
  }
2099
2302
  return loader;
@@ -2104,9 +2307,9 @@
2104
2307
  const testUrl = stripQueryString(url) || context?.url;
2105
2308
  let loader = null;
2106
2309
  let reason = "";
2107
- if (options?.mimeType) {
2108
- loader = findLoaderByMIMEType(loaders, options?.mimeType);
2109
- reason = `match forced by supplied MIME type ${options?.mimeType}`;
2310
+ if (options?.core?.mimeType) {
2311
+ loader = findLoaderByMIMEType(loaders, options?.core?.mimeType);
2312
+ reason = `match forced by supplied MIME type ${options?.core?.mimeType}`;
2110
2313
  }
2111
2314
  loader = loader || findLoaderByUrl(loaders, testUrl);
2112
2315
  reason = reason || (loader ? `matched url ${testUrl}` : "");
@@ -2114,8 +2317,8 @@
2114
2317
  reason = reason || (loader ? `matched MIME type ${type}` : "");
2115
2318
  loader = loader || findLoaderByInitialBytes(loaders, data);
2116
2319
  reason = reason || (loader ? `matched initial data ${getFirstCharacters(data)}` : "");
2117
- if (options?.fallbackMimeType) {
2118
- loader = loader || findLoaderByMIMEType(loaders, options?.fallbackMimeType);
2320
+ if (options?.core?.fallbackMimeType) {
2321
+ loader = loader || findLoaderByMIMEType(loaders, options?.core?.fallbackMimeType);
2119
2322
  reason = reason || (loader ? `matched fallback MIME type ${type}` : "");
2120
2323
  }
2121
2324
  if (reason) {
@@ -2208,12 +2411,12 @@
2208
2411
  return tests.some((test) => testBinary(data, byteOffset, loader, test));
2209
2412
  }
2210
2413
  function testBinary(data, byteOffset, loader, test) {
2211
- if (test instanceof ArrayBuffer) {
2414
+ if (isArrayBufferLike(test)) {
2212
2415
  return compareArrayBuffers(test, data, test.byteLength);
2213
2416
  }
2214
2417
  switch (typeof test) {
2215
2418
  case "function":
2216
- return test(data);
2419
+ return test(ensureArrayBuffer(data));
2217
2420
  case "string":
2218
2421
  const magic = getMagicString(data, byteOffset, test.length);
2219
2422
  return test === magic;
@@ -2254,7 +2457,7 @@
2254
2457
  const chunkLength = Math.min(string.length - offset, chunkSize);
2255
2458
  const chunk = string.slice(offset, offset + chunkLength);
2256
2459
  offset += chunkLength;
2257
- yield textEncoder.encode(chunk);
2460
+ yield ensureArrayBuffer(textEncoder.encode(chunk));
2258
2461
  }
2259
2462
  }
2260
2463
 
@@ -2331,8 +2534,11 @@
2331
2534
  return makeStreamIterator(data, options);
2332
2535
  }
2333
2536
  if (isResponse(data)) {
2334
- const response = data;
2335
- return makeStreamIterator(response.body, options);
2537
+ const responseBody = data.body;
2538
+ if (!responseBody) {
2539
+ throw new Error("Readable stream not available on Response");
2540
+ }
2541
+ return makeStreamIterator(responseBody, options);
2336
2542
  }
2337
2543
  throw new Error("makeIterator");
2338
2544
  }
@@ -2343,43 +2549,29 @@
2343
2549
  if (loader.text && typeof data === "string") {
2344
2550
  return data;
2345
2551
  }
2346
- if (isBuffer2(data)) {
2552
+ if (isBuffer(data)) {
2347
2553
  data = data.buffer;
2348
2554
  }
2349
- if (data instanceof ArrayBuffer) {
2350
- const arrayBuffer = data;
2351
- if (loader.text && !loader.binary) {
2352
- const textDecoder = new TextDecoder("utf8");
2353
- return textDecoder.decode(arrayBuffer);
2354
- }
2355
- return arrayBuffer;
2356
- }
2357
- if (ArrayBuffer.isView(data)) {
2555
+ if (isArrayBufferLike(data)) {
2556
+ const bufferSource = toArrayBufferView(data);
2358
2557
  if (loader.text && !loader.binary) {
2359
2558
  const textDecoder = new TextDecoder("utf8");
2360
- return textDecoder.decode(data);
2361
- }
2362
- let arrayBuffer = data.buffer;
2363
- const byteLength = data.byteLength || data.length;
2364
- if (data.byteOffset !== 0 || byteLength !== arrayBuffer.byteLength) {
2365
- arrayBuffer = arrayBuffer.slice(data.byteOffset, data.byteOffset + byteLength);
2559
+ return textDecoder.decode(bufferSource);
2366
2560
  }
2367
- return arrayBuffer;
2561
+ return toArrayBuffer2(bufferSource);
2368
2562
  }
2369
2563
  throw new Error(ERR_DATA);
2370
2564
  }
2371
2565
  async function getArrayBufferOrStringFromData(data, loader, options) {
2372
- const isArrayBuffer = data instanceof ArrayBuffer || ArrayBuffer.isView(data);
2373
- if (typeof data === "string" || isArrayBuffer) {
2566
+ if (typeof data === "string" || isArrayBufferLike(data)) {
2374
2567
  return getArrayBufferOrStringFromDataSync(data, loader, options);
2375
2568
  }
2376
2569
  if (isBlob(data)) {
2377
2570
  data = await makeResponse(data);
2378
2571
  }
2379
2572
  if (isResponse(data)) {
2380
- const response = data;
2381
- await checkResponse(response);
2382
- return loader.binary ? await response.arrayBuffer() : await response.text();
2573
+ await checkResponse(data);
2574
+ return loader.binary ? await data.arrayBuffer() : await data.text();
2383
2575
  }
2384
2576
  if (isReadableStream(data)) {
2385
2577
  data = makeIterator(data, options);
@@ -2394,11 +2586,12 @@
2394
2586
  function getFetchFunction(options, context) {
2395
2587
  const globalOptions = getGlobalLoaderOptions();
2396
2588
  const loaderOptions = options || globalOptions;
2397
- if (typeof loaderOptions.fetch === "function") {
2398
- return loaderOptions.fetch;
2589
+ const fetchOption = loaderOptions.fetch ?? loaderOptions.core?.fetch;
2590
+ if (typeof fetchOption === "function") {
2591
+ return fetchOption;
2399
2592
  }
2400
- if (isObject(loaderOptions.fetch)) {
2401
- return (url) => fetchFile(url, loaderOptions.fetch);
2593
+ if (isObject(fetchOption)) {
2594
+ return (url) => fetchFile(url, fetchOption);
2402
2595
  }
2403
2596
  if (context?.fetch) {
2404
2597
  return context?.fetch;
@@ -2458,22 +2651,21 @@
2458
2651
  if (!loader) {
2459
2652
  return null;
2460
2653
  }
2461
- options = normalizeOptions(options, loader, candidateLoaders, url);
2654
+ const strictOptions = normalizeOptions(options, loader, candidateLoaders, url);
2462
2655
  context = getLoaderContext(
2463
2656
  // @ts-expect-error
2464
2657
  { url, _parse: parse, loaders: candidateLoaders },
2465
- options,
2658
+ strictOptions,
2466
2659
  context || null
2467
2660
  );
2468
- return await parseWithLoader(loader, data, options, context);
2661
+ return await parseWithLoader(loader, data, strictOptions, context);
2469
2662
  }
2470
2663
  async function parseWithLoader(loader, data, options, context) {
2471
2664
  validateWorkerVersion(loader);
2472
2665
  options = mergeOptions(loader.options, options);
2473
2666
  if (isResponse(data)) {
2474
- const response = data;
2475
- const { ok, redirected, status, statusText, type, url } = response;
2476
- const headers = Object.fromEntries(response.headers.entries());
2667
+ const { ok, redirected, status, statusText, type, url } = data;
2668
+ const headers = Object.fromEntries(data.headers.entries());
2477
2669
  context.response = { headers, ok, redirected, status, statusText, type, url };
2478
2670
  }
2479
2671
  data = await getArrayBufferOrStringFromData(data, loader, options);
@@ -5348,7 +5540,7 @@
5348
5540
  Ellipsoid.WGS84 = new Ellipsoid(WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z);
5349
5541
 
5350
5542
  // ../images/src/lib/utils/version.ts
5351
- var VERSION4 = true ? "4.4.0-alpha.1" : "latest";
5543
+ var VERSION4 = true ? "4.4.0-alpha.9" : "latest";
5352
5544
 
5353
5545
  // ../images/src/lib/category-api/image-type.ts
5354
5546
  var parseImageNode = globalThis.loaders?.parseImageNode;
@@ -5486,7 +5678,6 @@
5486
5678
  }
5487
5679
 
5488
5680
  // ../images/src/lib/parsers/parse-to-image-bitmap.ts
5489
- var EMPTY_OBJECT = {};
5490
5681
  var imagebitmapOptionsSupported = true;
5491
5682
  async function parseToImageBitmap(arrayBuffer, options, url) {
5492
5683
  let blob;
@@ -5514,8 +5705,13 @@
5514
5705
  return await createImageBitmap(blob);
5515
5706
  }
5516
5707
  function isEmptyObject(object) {
5517
- for (const key in object || EMPTY_OBJECT) {
5518
- return false;
5708
+ if (!object) {
5709
+ return true;
5710
+ }
5711
+ for (const key in object) {
5712
+ if (Object.prototype.hasOwnProperty.call(object, key)) {
5713
+ return false;
5714
+ }
5519
5715
  }
5520
5716
  return true;
5521
5717
  }
@@ -5776,21 +5972,32 @@
5776
5972
  [DRACO_EXTERNAL_LIBRARIES.ENCODER]: `https://raw.githubusercontent.com/google/draco/${DRACO_ENCODER_VERSION}/javascript/${DRACO_EXTERNAL_LIBRARIES.ENCODER}`
5777
5973
  };
5778
5974
  var loadDecoderPromise;
5779
- async function loadDracoDecoderModule(options) {
5975
+ async function loadDracoDecoderModule(options = {}, type) {
5780
5976
  const modules = options.modules || {};
5781
5977
  if (modules.draco3d) {
5782
5978
  loadDecoderPromise ||= modules.draco3d.createDecoderModule({}).then((draco) => {
5783
5979
  return { draco };
5784
5980
  });
5785
5981
  } else {
5786
- loadDecoderPromise ||= loadDracoDecoder(options);
5982
+ loadDecoderPromise ||= loadDracoDecoder(options, type);
5787
5983
  }
5788
5984
  return await loadDecoderPromise;
5789
5985
  }
5790
- async function loadDracoDecoder(options) {
5986
+ function getLibraryExport(library, exportName) {
5987
+ if (library && typeof library === "object") {
5988
+ if (library.default) {
5989
+ return library.default;
5990
+ }
5991
+ if (library[exportName]) {
5992
+ return library[exportName];
5993
+ }
5994
+ }
5995
+ return library;
5996
+ }
5997
+ async function loadDracoDecoder(options, type) {
5791
5998
  let DracoDecoderModule;
5792
5999
  let wasmBinary;
5793
- switch (options.draco && options.draco.decoderType) {
6000
+ switch (type) {
5794
6001
  case "js":
5795
6002
  DracoDecoderModule = await loadLibrary(
5796
6003
  DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.FALLBACK_DECODER],
@@ -5801,25 +6008,52 @@
5801
6008
  break;
5802
6009
  case "wasm":
5803
6010
  default:
5804
- [DracoDecoderModule, wasmBinary] = await Promise.all([
5805
- await loadLibrary(
5806
- DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER],
5807
- "draco",
5808
- options,
5809
- DRACO_EXTERNAL_LIBRARIES.DECODER
5810
- ),
5811
- await loadLibrary(
5812
- DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER_WASM],
5813
- "draco",
5814
- options,
5815
- DRACO_EXTERNAL_LIBRARIES.DECODER_WASM
5816
- )
5817
- ]);
6011
+ try {
6012
+ [DracoDecoderModule, wasmBinary] = await Promise.all([
6013
+ await loadLibrary(
6014
+ DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER],
6015
+ "draco",
6016
+ options,
6017
+ DRACO_EXTERNAL_LIBRARIES.DECODER
6018
+ ),
6019
+ await loadLibrary(
6020
+ DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER_WASM],
6021
+ "draco",
6022
+ options,
6023
+ DRACO_EXTERNAL_LIBRARIES.DECODER_WASM
6024
+ )
6025
+ ]);
6026
+ } catch {
6027
+ DracoDecoderModule = null;
6028
+ wasmBinary = null;
6029
+ }
5818
6030
  }
6031
+ DracoDecoderModule = getLibraryExport(DracoDecoderModule, "DracoDecoderModule");
5819
6032
  DracoDecoderModule = DracoDecoderModule || globalThis.DracoDecoderModule;
6033
+ if (!DracoDecoderModule && !isBrowser3) {
6034
+ [DracoDecoderModule, wasmBinary] = await Promise.all([
6035
+ await loadLibrary(
6036
+ DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER],
6037
+ "draco",
6038
+ { ...options, useLocalLibraries: true },
6039
+ DRACO_EXTERNAL_LIBRARIES.DECODER
6040
+ ),
6041
+ await loadLibrary(
6042
+ DRACO_EXTERNAL_LIBRARY_URLS[DRACO_EXTERNAL_LIBRARIES.DECODER_WASM],
6043
+ "draco",
6044
+ { ...options, useLocalLibraries: true },
6045
+ DRACO_EXTERNAL_LIBRARIES.DECODER_WASM
6046
+ )
6047
+ ]);
6048
+ DracoDecoderModule = getLibraryExport(DracoDecoderModule, "DracoDecoderModule");
6049
+ DracoDecoderModule = DracoDecoderModule || globalThis.DracoDecoderModule;
6050
+ }
5820
6051
  return await initializeDracoDecoder(DracoDecoderModule, wasmBinary);
5821
6052
  }
5822
6053
  function initializeDracoDecoder(DracoDecoderModule, wasmBinary) {
6054
+ if (typeof DracoDecoderModule !== "function") {
6055
+ throw new Error("DracoDecoderModule could not be loaded");
6056
+ }
5823
6057
  const options = {};
5824
6058
  if (wasmBinary) {
5825
6059
  options.wasmBinary = wasmBinary;
@@ -5834,7 +6068,7 @@
5834
6068
  }
5835
6069
 
5836
6070
  // ../draco/src/lib/utils/version.ts
5837
- var VERSION5 = true ? "4.4.0-alpha.1" : "latest";
6071
+ var VERSION5 = true ? "4.4.0-alpha.9" : "latest";
5838
6072
 
5839
6073
  // ../draco/src/lib/utils/get-draco-schema.ts
5840
6074
  function getDracoSchema(attributes, loaderData, indices) {
@@ -6362,7 +6596,10 @@
6362
6596
  parse: parse2
6363
6597
  };
6364
6598
  async function parse2(arrayBuffer, options) {
6365
- const { draco } = await loadDracoDecoderModule(options);
6599
+ const { draco } = await loadDracoDecoderModule(
6600
+ options?.core,
6601
+ options?.draco?.decoderType || "wasm"
6602
+ );
6366
6603
  const dracoParser = new DracoParser(draco);
6367
6604
  try {
6368
6605
  return dracoParser.parseSync(arrayBuffer, options?.draco);
@@ -6372,7 +6609,7 @@
6372
6609
  }
6373
6610
 
6374
6611
  // ../textures/src/lib/utils/version.ts
6375
- var VERSION6 = true ? "4.4.0-alpha.1" : "latest";
6612
+ var VERSION6 = true ? "4.4.0-alpha.9" : "latest";
6376
6613
 
6377
6614
  // ../textures/src/lib/parsers/basis-module-loader.ts
6378
6615
  var BASIS_EXTERNAL_LIBRARIES = {
@@ -7052,18 +7289,18 @@
7052
7289
  bgr565: { basisFormat: 15, compressed: false },
7053
7290
  rgba4444: { basisFormat: 16, compressed: false }
7054
7291
  };
7055
- async function parseBasis(data, options) {
7056
- if (options.basis.containerFormat === "auto") {
7292
+ async function parseBasis(data, options = {}) {
7293
+ if (!options.basis?.containerFormat || options.basis.containerFormat === "auto") {
7057
7294
  if (isKTX(data)) {
7058
- const fileConstructors = await loadBasisEncoderModule(options);
7295
+ const fileConstructors = await loadBasisEncoderModule(options?.core || {});
7059
7296
  return parseKTX2File(fileConstructors.KTX2File, data, options);
7060
7297
  }
7061
- const { BasisFile } = await loadBasisTranscoderModule(options);
7298
+ const { BasisFile } = await loadBasisTranscoderModule(options?.core || {});
7062
7299
  return parseBasisFile(BasisFile, data, options);
7063
7300
  }
7064
7301
  switch (options.basis.module) {
7065
7302
  case "encoder":
7066
- const fileConstructors = await loadBasisEncoderModule(options);
7303
+ const fileConstructors = await loadBasisEncoderModule(options?.core || {});
7067
7304
  switch (options.basis.containerFormat) {
7068
7305
  case "ktx2":
7069
7306
  return parseKTX2File(fileConstructors.KTX2File, data, options);
@@ -7073,7 +7310,7 @@
7073
7310
  }
7074
7311
  case "transcoder":
7075
7312
  default:
7076
- const { BasisFile } = await loadBasisTranscoderModule(options);
7313
+ const { BasisFile } = await loadBasisTranscoderModule(options.core || {});
7077
7314
  return parseBasisFile(BasisFile, data, options);
7078
7315
  }
7079
7316
  }
@@ -7176,7 +7413,7 @@
7176
7413
  };
7177
7414
  }
7178
7415
  function getBasisOptions(options, hasAlpha) {
7179
- let format = options && options.basis && options.basis.format;
7416
+ let format = options.basis?.format;
7180
7417
  if (format === "auto") {
7181
7418
  format = selectSupportedBasisFormat();
7182
7419
  }
@@ -7560,13 +7797,13 @@
7560
7797
  var CompressedTextureLoader = {
7561
7798
  ...CompressedTextureWorkerLoader,
7562
7799
  parse: async (arrayBuffer, options) => {
7800
+ options = { ...options };
7563
7801
  if (options?.["compressed-texture"]?.useBasis) {
7564
7802
  options.basis = {
7565
7803
  format: {
7566
7804
  alpha: "BC3",
7567
7805
  noAlpha: "BC1"
7568
7806
  },
7569
- // @ts-expect-error TODO not allowed to modify inputs
7570
7807
  ...options.basis,
7571
7808
  containerFormat: "ktx2",
7572
7809
  module: "encoder"
@@ -8055,7 +8292,7 @@
8055
8292
  }
8056
8293
 
8057
8294
  // src/i3s-content-loader.ts
8058
- var VERSION7 = true ? "4.4.0-alpha.1" : "latest";
8295
+ var VERSION7 = true ? "4.4.0-alpha.9" : "latest";
8059
8296
  var I3SContentLoader = {
8060
8297
  dataType: null,
8061
8298
  batchType: null,