@loaders.gl/i3s 4.2.0-alpha.1 → 4.2.0-alpha.2

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 (36) hide show
  1. package/dist/arcgis-webscene-loader.js +1 -1
  2. package/dist/dist.dev.js +290 -59
  3. package/dist/i3s-attribute-loader.js +1 -1
  4. package/dist/i3s-building-scene-layer-loader.js +1 -1
  5. package/dist/i3s-content-loader.js +1 -1
  6. package/dist/i3s-content-worker-node.js +22 -22
  7. package/dist/i3s-content-worker-node.js.map +3 -3
  8. package/dist/i3s-content-worker.js +25 -8
  9. package/dist/i3s-loader.js +1 -1
  10. package/dist/i3s-node-page-loader.js +1 -1
  11. package/dist/i3s-slpk-loader.js +1 -1
  12. package/dist/index.cjs +54 -23
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +1 -0
  16. package/dist/index.js.map +1 -1
  17. package/dist/lib/helpers/i3s-nodepages-tiles.d.ts.map +1 -1
  18. package/dist/lib/helpers/i3s-nodepages-tiles.js +1 -1
  19. package/dist/lib/helpers/i3s-nodepages-tiles.js.map +1 -1
  20. package/dist/lib/parsers/parse-i3s-tile-content.d.ts.map +1 -1
  21. package/dist/lib/parsers/parse-i3s-tile-content.js +13 -1
  22. package/dist/lib/parsers/parse-i3s-tile-content.js.map +1 -1
  23. package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts +1 -1
  24. package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts.map +1 -1
  25. package/dist/lib/parsers/parse-slpk/parse-slpk.js +2 -2
  26. package/dist/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
  27. package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts +10 -6
  28. package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts.map +1 -1
  29. package/dist/lib/parsers/parse-slpk/slpk-archieve.js +23 -15
  30. package/dist/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
  31. package/package.json +10 -10
  32. package/src/index.ts +1 -1
  33. package/src/lib/helpers/i3s-nodepages-tiles.ts +3 -1
  34. package/src/lib/parsers/parse-i3s-tile-content.ts +25 -2
  35. package/src/lib/parsers/parse-slpk/parse-slpk.ts +3 -2
  36. package/src/lib/parsers/parse-slpk/slpk-archieve.ts +34 -23
@@ -1,5 +1,5 @@
1
1
  import { parseWebscene } from "./lib/parsers/parse-arcgis-webscene.js";
2
- const VERSION = typeof "4.2.0-alpha.1" !== 'undefined' ? "4.2.0-alpha.1" : 'latest';
2
+ const VERSION = typeof "4.2.0-alpha.2" !== 'undefined' ? "4.2.0-alpha.2" : 'latest';
3
3
  export const ArcGISWebSceneLoader = {
4
4
  name: 'ArcGIS Web Scene Loader',
5
5
  id: 'arcgis-web-scene',
package/dist/dist.dev.js CHANGED
@@ -4270,6 +4270,7 @@ var __exports__ = (() => {
4270
4270
  I3SLoader: () => I3SLoader,
4271
4271
  I3SNodePageLoader: () => I3SNodePageLoader,
4272
4272
  LayerError: () => LayerError,
4273
+ SLPKArchive: () => SLPKArchive,
4273
4274
  SLPKLoader: () => SLPKLoader,
4274
4275
  customizeColors: () => customizeColors,
4275
4276
  loadFeatureAttributes: () => loadFeatureAttributes,
@@ -4336,7 +4337,7 @@ var __exports__ = (() => {
4336
4337
  console.warn("loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN.");
4337
4338
  globalThis._loadersgl_.version = NPM_TAG;
4338
4339
  } else {
4339
- globalThis._loadersgl_.version = "4.2.0-alpha.1";
4340
+ globalThis._loadersgl_.version = "4.2.0-alpha.2";
4340
4341
  }
4341
4342
  }
4342
4343
  return globalThis._loadersgl_.version;
@@ -4572,6 +4573,104 @@ var __exports__ = (() => {
4572
4573
  return (args) => new Promise((resolve, reject) => fn(args, (error, callbackArgs) => error ? reject(error) : resolve(callbackArgs)));
4573
4574
  }
4574
4575
 
4576
+ // ../loader-utils/src/lib/files/node-file-facade.ts
4577
+ var NOT_IMPLEMENTED = new Error("Not implemented");
4578
+ var NodeFileFacade = class {
4579
+ size = 0;
4580
+ bigsize = 0n;
4581
+ url = "";
4582
+ constructor(url, flags, mode) {
4583
+ if (globalThis.loaders?.NodeFile) {
4584
+ return new globalThis.loaders.NodeFile(url, flags, mode);
4585
+ }
4586
+ if (isBrowser) {
4587
+ throw new Error("Can't instantiate NodeFile in browser.");
4588
+ }
4589
+ throw new Error("Can't instantiate NodeFile. Make sure to import @loaders.gl/polyfills first.");
4590
+ }
4591
+ async read(start, end) {
4592
+ throw NOT_IMPLEMENTED;
4593
+ }
4594
+ async write(arrayBuffer, offset, length4) {
4595
+ throw NOT_IMPLEMENTED;
4596
+ }
4597
+ async stat() {
4598
+ throw NOT_IMPLEMENTED;
4599
+ }
4600
+ async truncate(length4) {
4601
+ throw NOT_IMPLEMENTED;
4602
+ }
4603
+ async append(data) {
4604
+ throw NOT_IMPLEMENTED;
4605
+ }
4606
+ async close() {
4607
+ }
4608
+ };
4609
+
4610
+ // ../loader-utils/src/lib/file-provider/file-provider.ts
4611
+ var isFileProvider = (fileProvider) => {
4612
+ return fileProvider?.getUint8 && fileProvider?.slice && fileProvider?.length;
4613
+ };
4614
+
4615
+ // ../loader-utils/src/lib/file-provider/file-handle-file.ts
4616
+ var FileHandleFile = class {
4617
+ constructor(path, append = false) {
4618
+ this.file = new NodeFileFacade(path, append ? "a+" : "r");
4619
+ }
4620
+ async truncate(length4) {
4621
+ await this.file.truncate(length4);
4622
+ }
4623
+ async append(buffer) {
4624
+ await this.file.append(buffer);
4625
+ }
4626
+ async destroy() {
4627
+ await this.file.close();
4628
+ }
4629
+ async getUint8(offset) {
4630
+ const arrayBuffer = await this.file.read(offset, 1);
4631
+ const val = new Uint8Array(arrayBuffer).at(0);
4632
+ if (val === void 0) {
4633
+ throw new Error("something went wrong");
4634
+ }
4635
+ return val;
4636
+ }
4637
+ async getUint16(offset) {
4638
+ const arrayBuffer = await this.file.read(offset, 2);
4639
+ const val = new Uint16Array(arrayBuffer).at(0);
4640
+ if (val === void 0) {
4641
+ throw new Error("something went wrong");
4642
+ }
4643
+ return val;
4644
+ }
4645
+ async getUint32(offset) {
4646
+ const arrayBuffer = await this.file.read(offset, 4);
4647
+ const val = new Uint32Array(arrayBuffer).at(0);
4648
+ if (val === void 0) {
4649
+ throw new Error("something went wrong");
4650
+ }
4651
+ return val;
4652
+ }
4653
+ async getBigUint64(offset) {
4654
+ const arrayBuffer = await this.file.read(offset, 8);
4655
+ const val = new BigInt64Array(arrayBuffer).at(0);
4656
+ if (val === void 0) {
4657
+ throw new Error("something went wrong");
4658
+ }
4659
+ return val;
4660
+ }
4661
+ async slice(startOffset, endOffset) {
4662
+ const bigLength = endOffset - startOffset;
4663
+ if (bigLength > Number.MAX_SAFE_INTEGER) {
4664
+ throw new Error("too big slice");
4665
+ }
4666
+ const length4 = Number(bigLength);
4667
+ return await this.file.read(startOffset, length4);
4668
+ }
4669
+ get length() {
4670
+ return this.file.bigsize;
4671
+ }
4672
+ };
4673
+
4575
4674
  // ../loader-utils/src/lib/file-provider/data-view-file.ts
4576
4675
  var toNumber = (bigint) => {
4577
4676
  if (bigint > Number.MAX_SAFE_INTEGER) {
@@ -9112,7 +9211,7 @@ var __exports__ = (() => {
9112
9211
  _defineProperty(Ellipsoid, "WGS84", new Ellipsoid(WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z));
9113
9212
 
9114
9213
  // ../images/src/lib/utils/version.ts
9115
- var VERSION2 = true ? "4.2.0-alpha.1" : "latest";
9214
+ var VERSION2 = true ? "4.2.0-alpha.2" : "latest";
9116
9215
 
9117
9216
  // ../images/src/lib/category-api/image-type.ts
9118
9217
  var parseImageNode = globalThis.loaders?.parseImageNode;
@@ -9501,7 +9600,7 @@ var __exports__ = (() => {
9501
9600
  };
9502
9601
 
9503
9602
  // ../draco/src/lib/utils/version.ts
9504
- var VERSION3 = true ? "4.2.0-alpha.1" : "latest";
9603
+ var VERSION3 = true ? "4.2.0-alpha.2" : "latest";
9505
9604
 
9506
9605
  // ../draco/src/draco-loader.ts
9507
9606
  var DracoLoader = {
@@ -10076,7 +10175,7 @@ var __exports__ = (() => {
10076
10175
  }
10077
10176
 
10078
10177
  // ../textures/src/lib/utils/version.ts
10079
- var VERSION4 = true ? "4.2.0-alpha.1" : "latest";
10178
+ var VERSION4 = true ? "4.2.0-alpha.2" : "latest";
10080
10179
 
10081
10180
  // ../textures/src/lib/parsers/basis-module-loader.ts
10082
10181
  var BASIS_EXTERNAL_LIBRARIES = {
@@ -11086,7 +11185,7 @@ var __exports__ = (() => {
11086
11185
  texture: null
11087
11186
  };
11088
11187
  if (tileOptions.textureUrl) {
11089
- const url = getUrlWithToken(tileOptions.textureUrl, options?.i3s?.token);
11188
+ const url = getUrlWithToken(getInternalPathFromUrl(tileOptions.textureUrl), options?.i3s?.token);
11090
11189
  const loader = getLoaderForTextureFormat(tileOptions.textureFormat);
11091
11190
  const fetchFunc = context?.fetch || fetch;
11092
11191
  const response = await fetchFunc(url);
@@ -11129,6 +11228,18 @@ var __exports__ = (() => {
11129
11228
  }
11130
11229
  return await parseI3SNodeGeometry(arrayBuffer, content, tileOptions, tilesetOptions, options);
11131
11230
  }
11231
+ function getInternalPathFromUrl(url) {
11232
+ const slpkUrlParts = url.split(".slpk");
11233
+ let filename;
11234
+ if (slpkUrlParts.length === 1) {
11235
+ filename = url;
11236
+ } else if (slpkUrlParts.length === 2) {
11237
+ filename = slpkUrlParts[1].slice(1);
11238
+ } else {
11239
+ filename = url;
11240
+ }
11241
+ return filename;
11242
+ }
11132
11243
  async function parseI3SNodeGeometry(arrayBuffer, content, tileOptions, tilesetOptions, options) {
11133
11244
  const contentByteLength = arrayBuffer.byteLength;
11134
11245
  let attributes;
@@ -11480,7 +11591,7 @@ var __exports__ = (() => {
11480
11591
  }
11481
11592
 
11482
11593
  // src/i3s-content-loader.ts
11483
- var VERSION5 = true ? "4.2.0-alpha.1" : "latest";
11594
+ var VERSION5 = true ? "4.2.0-alpha.2" : "latest";
11484
11595
  var I3SContentLoader = {
11485
11596
  name: "I3S Content (Indexed Scene Layers)",
11486
11597
  id: "i3s-content",
@@ -11990,7 +12101,7 @@ var __exports__ = (() => {
11990
12101
  var import_core16 = __toESM(require_core(), 1);
11991
12102
 
11992
12103
  // src/i3s-node-page-loader.ts
11993
- var VERSION6 = true ? "4.2.0-alpha.1" : "latest";
12104
+ var VERSION6 = true ? "4.2.0-alpha.2" : "latest";
11994
12105
  var I3SNodePageLoader = {
11995
12106
  name: "I3S Node Page",
11996
12107
  id: "i3s-node-page",
@@ -12027,7 +12138,7 @@ var __exports__ = (() => {
12027
12138
  async getNodeById(id) {
12028
12139
  const pageIndex = Math.floor(id / this.nodesPerPage);
12029
12140
  if (!this.nodePages[pageIndex] && !this.pendingNodePages[pageIndex]) {
12030
- const nodePageUrl = getUrlWithToken(`${this.url}/nodepages/${pageIndex}`, this.options.i3s?.token);
12141
+ const nodePageUrl = getUrlWithToken(this.url.indexOf(".slpk") !== -1 ? `nodepages/${pageIndex}` : `${this.url}/nodepages/${pageIndex}`, this.options.i3s?.token);
12031
12142
  this.pendingNodePages[pageIndex] = {
12032
12143
  status: "Pending",
12033
12144
  promise: (0, import_core16.load)(nodePageUrl, I3SNodePageLoader, this.options)
@@ -12280,7 +12391,7 @@ var __exports__ = (() => {
12280
12391
  }
12281
12392
 
12282
12393
  // src/i3s-loader.ts
12283
- var VERSION7 = true ? "4.2.0-alpha.1" : "latest";
12394
+ var VERSION7 = true ? "4.2.0-alpha.2" : "latest";
12284
12395
  var TILESET_REGEX = /layers\/[0-9]+$/;
12285
12396
  var TILE_HEADER_REGEX = /nodes\/([0-9-]+|root)$/;
12286
12397
  var SLPK_HEX = "504b0304";
@@ -13281,37 +13392,6 @@ var __exports__ = (() => {
13281
13392
  }
13282
13393
  };
13283
13394
 
13284
- // ../zip/src/hash-file-utility.ts
13285
- function parseHashTable(arrayBuffer) {
13286
- const dataView = new DataView(arrayBuffer);
13287
- const hashMap = {};
13288
- for (let i2 = 0; i2 < arrayBuffer.byteLength; i2 = i2 + 24) {
13289
- const offset = dataView.getBigUint64(i2 + 16, true);
13290
- const hash = bufferToHex(arrayBuffer, i2, 16);
13291
- hashMap[hash] = offset;
13292
- }
13293
- return hashMap;
13294
- }
13295
- function bufferToHex(buffer, start, length4) {
13296
- return [...new Uint8Array(buffer, start, length4)].map((x) => x.toString(16).padStart(2, "0")).join("");
13297
- }
13298
- async function makeHashTableFromZipHeaders(fileProvider) {
13299
- const zipCDIterator = makeZipCDHeaderIterator(fileProvider);
13300
- return getHashTable(zipCDIterator);
13301
- }
13302
- async function getHashTable(zipCDIterator) {
13303
- const md5Hash = new MD5Hash();
13304
- const textEncoder = new TextEncoder();
13305
- const hashTable = {};
13306
- for await (const cdHeader of zipCDIterator) {
13307
- const filename = cdHeader.fileName.split("\\").join("/").toLocaleLowerCase();
13308
- const arrayBuffer = textEncoder.encode(filename).buffer;
13309
- const md5 = await md5Hash.hash(arrayBuffer, "hex");
13310
- hashTable[md5] = cdHeader.localHeaderOffset;
13311
- }
13312
- return hashTable;
13313
- }
13314
-
13315
13395
  // ../compression/src/lib/compression.ts
13316
13396
  var Compression = class {
13317
13397
  constructor(options) {
@@ -13476,6 +13556,148 @@ var __exports__ = (() => {
13476
13556
  }
13477
13557
  };
13478
13558
 
13559
+ // ../zip/src/filesystems/zip-filesystem.ts
13560
+ var ZIP_COMPRESSION_HANDLERS = {
13561
+ 0: async (compressedFile) => compressedFile,
13562
+ 8: async (compressedFile) => {
13563
+ const compression = new DeflateCompression({
13564
+ raw: true
13565
+ });
13566
+ const decompressedData = await compression.decompress(compressedFile);
13567
+ return decompressedData;
13568
+ }
13569
+ };
13570
+ var ZipFileSystem = class {
13571
+ fileProvider = null;
13572
+ archive = null;
13573
+ constructor(file) {
13574
+ if (typeof file === "string") {
13575
+ this.fileName = file;
13576
+ if (!isBrowser) {
13577
+ this.fileProvider = new FileHandleFile(file);
13578
+ } else {
13579
+ throw new Error("Cannot open file for random access in a WEB browser");
13580
+ }
13581
+ } else if (file instanceof IndexedArchive) {
13582
+ this.fileProvider = file.fileProvider;
13583
+ this.archive = file;
13584
+ this.fileName = file.fileName;
13585
+ } else if (isFileProvider(file)) {
13586
+ this.fileProvider = file;
13587
+ }
13588
+ }
13589
+ async destroy() {
13590
+ if (this.fileProvider) {
13591
+ await this.fileProvider.destroy();
13592
+ }
13593
+ }
13594
+ async readdir() {
13595
+ if (!this.fileProvider) {
13596
+ throw new Error("No data detected in the zip archive");
13597
+ }
13598
+ const fileNames = [];
13599
+ const zipCDIterator = makeZipCDHeaderIterator(this.fileProvider);
13600
+ for await (const cdHeader of zipCDIterator) {
13601
+ fileNames.push(cdHeader.fileName);
13602
+ }
13603
+ return fileNames;
13604
+ }
13605
+ async stat(filename) {
13606
+ const cdFileHeader = await this.getCDFileHeader(filename);
13607
+ return {
13608
+ ...cdFileHeader,
13609
+ size: Number(cdFileHeader.uncompressedSize)
13610
+ };
13611
+ }
13612
+ async fetch(filename) {
13613
+ let uncompressedFile;
13614
+ if (this.archive) {
13615
+ uncompressedFile = await this.archive.getFile(filename, "http");
13616
+ } else {
13617
+ if (!this.fileProvider) {
13618
+ throw new Error("No data detected in the zip archive");
13619
+ }
13620
+ const cdFileHeader = await this.getCDFileHeader(filename);
13621
+ const localFileHeader = await parseZipLocalFileHeader(cdFileHeader.localHeaderOffset, this.fileProvider);
13622
+ if (!localFileHeader) {
13623
+ throw new Error("Local file header has not been found in the zip archive`");
13624
+ }
13625
+ const compressionHandler = ZIP_COMPRESSION_HANDLERS[localFileHeader.compressionMethod.toString()];
13626
+ if (!compressionHandler) {
13627
+ throw Error("Only Deflation compression is supported");
13628
+ }
13629
+ const compressedFile = await this.fileProvider.slice(localFileHeader.fileDataOffset, localFileHeader.fileDataOffset + localFileHeader.compressedSize);
13630
+ uncompressedFile = await compressionHandler(compressedFile);
13631
+ }
13632
+ const response = new Response(uncompressedFile);
13633
+ Object.defineProperty(response, "url", {
13634
+ value: filename ? `${this.fileName || ""}/${filename}` : this.fileName || ""
13635
+ });
13636
+ return response;
13637
+ }
13638
+ async getCDFileHeader(filename) {
13639
+ if (!this.fileProvider) {
13640
+ throw new Error("No data detected in the zip archive");
13641
+ }
13642
+ const zipCDIterator = makeZipCDHeaderIterator(this.fileProvider);
13643
+ let result = null;
13644
+ for await (const cdHeader of zipCDIterator) {
13645
+ if (cdHeader.fileName === filename) {
13646
+ result = cdHeader;
13647
+ break;
13648
+ }
13649
+ }
13650
+ if (!result) {
13651
+ throw new Error("File has not been found in the zip archive");
13652
+ }
13653
+ return result;
13654
+ }
13655
+ };
13656
+
13657
+ // ../zip/src/filesystems/IndexedArchive.ts
13658
+ var IndexedArchive = class {
13659
+ constructor(fileProvider, hashTable, fileName) {
13660
+ this.fileProvider = fileProvider;
13661
+ this.fileName = fileName;
13662
+ }
13663
+ async getFileWithoutHash(filename) {
13664
+ const zipFS = new ZipFileSystem(this.fileProvider);
13665
+ const response = await zipFS.fetch(filename);
13666
+ return await response.arrayBuffer();
13667
+ }
13668
+ };
13669
+
13670
+ // ../zip/src/hash-file-utility.ts
13671
+ function parseHashTable(arrayBuffer) {
13672
+ const dataView = new DataView(arrayBuffer);
13673
+ const hashMap = {};
13674
+ for (let i2 = 0; i2 < arrayBuffer.byteLength; i2 = i2 + 24) {
13675
+ const offset = dataView.getBigUint64(i2 + 16, true);
13676
+ const hash = bufferToHex(arrayBuffer, i2, 16);
13677
+ hashMap[hash] = offset;
13678
+ }
13679
+ return hashMap;
13680
+ }
13681
+ function bufferToHex(buffer, start, length4) {
13682
+ return [...new Uint8Array(buffer, start, length4)].map((x) => x.toString(16).padStart(2, "0")).join("");
13683
+ }
13684
+ async function makeHashTableFromZipHeaders(fileProvider) {
13685
+ const zipCDIterator = makeZipCDHeaderIterator(fileProvider);
13686
+ return getHashTable(zipCDIterator);
13687
+ }
13688
+ async function getHashTable(zipCDIterator) {
13689
+ const md5Hash = new MD5Hash();
13690
+ const textEncoder = new TextEncoder();
13691
+ const hashTable = {};
13692
+ for await (const cdHeader of zipCDIterator) {
13693
+ const filename = cdHeader.fileName.split("\\").join("/").toLocaleLowerCase();
13694
+ const arrayBuffer = textEncoder.encode(filename).buffer;
13695
+ const md5 = await md5Hash.hash(arrayBuffer, "hex");
13696
+ hashTable[md5] = cdHeader.localHeaderOffset;
13697
+ }
13698
+ return hashTable;
13699
+ }
13700
+
13479
13701
  // src/lib/parsers/parse-slpk/slpk-archieve.ts
13480
13702
  var PATH_DESCRIPTIONS = [{
13481
13703
  test: /^$/,
@@ -13502,12 +13724,12 @@ var __exports__ = (() => {
13502
13724
  test: /^nodes\/\d+\/shared$/,
13503
13725
  extensions: ["/sharedResource.json.gz"]
13504
13726
  }];
13505
- var SLPKArchive = class {
13727
+ var SLPKArchive = class extends IndexedArchive {
13506
13728
  _textEncoder = new TextEncoder();
13507
13729
  _textDecoder = new TextDecoder();
13508
13730
  _md5Hash = new MD5Hash();
13509
- constructor(slpkArchive, hashTable) {
13510
- this.slpkArchive = slpkArchive;
13731
+ constructor(fileProvider, hashTable, fileName) {
13732
+ super(fileProvider, hashTable, fileName);
13511
13733
  this.hashTable = hashTable;
13512
13734
  }
13513
13735
  async getFile(path, mode = "raw") {
@@ -13554,23 +13776,32 @@ var __exports__ = (() => {
13554
13776
  return data;
13555
13777
  }
13556
13778
  async getFileBytes(path) {
13557
- const binaryPath = this._textEncoder.encode(path);
13558
- const nameHash = await this._md5Hash.hash(binaryPath.buffer, "hex");
13559
- const offset = this.hashTable[nameHash];
13560
- if (offset === void 0) {
13561
- return void 0;
13562
- }
13563
- const localFileHeader = await parseZipLocalFileHeader(offset, this.slpkArchive);
13564
- if (!localFileHeader) {
13565
- return void 0;
13779
+ let compressedFile;
13780
+ if (this.hashTable) {
13781
+ const binaryPath = this._textEncoder.encode(path);
13782
+ const nameHash = await this._md5Hash.hash(binaryPath.buffer, "hex");
13783
+ const offset = this.hashTable[nameHash];
13784
+ if (offset === void 0) {
13785
+ return void 0;
13786
+ }
13787
+ const localFileHeader = await parseZipLocalFileHeader(offset, this.fileProvider);
13788
+ if (!localFileHeader) {
13789
+ return void 0;
13790
+ }
13791
+ compressedFile = await this.fileProvider.slice(localFileHeader.fileDataOffset, localFileHeader.fileDataOffset + localFileHeader.compressedSize);
13792
+ } else {
13793
+ try {
13794
+ compressedFile = await this.getFileWithoutHash(path);
13795
+ } catch {
13796
+ compressedFile = void 0;
13797
+ }
13566
13798
  }
13567
- const compressedFile = this.slpkArchive.slice(localFileHeader.fileDataOffset, localFileHeader.fileDataOffset + localFileHeader.compressedSize);
13568
13799
  return compressedFile;
13569
13800
  }
13570
13801
  };
13571
13802
 
13572
13803
  // src/lib/parsers/parse-slpk/parse-slpk.ts
13573
- async function parseSLPKArchive(fileProvider, cb) {
13804
+ async function parseSLPKArchive(fileProvider, cb, fileName) {
13574
13805
  const hashCDOffset = await searchFromTheEnd(fileProvider, signature);
13575
13806
  const cdFileHeader = await parseZipCDFileHeader(hashCDOffset, fileProvider);
13576
13807
  let hashTable;
@@ -13586,11 +13817,11 @@ var __exports__ = (() => {
13586
13817
  const hashFile = await fileProvider.slice(fileDataOffset, fileDataOffset + localFileHeader.compressedSize);
13587
13818
  hashTable = parseHashTable(hashFile);
13588
13819
  }
13589
- return new SLPKArchive(fileProvider, hashTable);
13820
+ return new SLPKArchive(fileProvider, hashTable, fileName);
13590
13821
  }
13591
13822
 
13592
13823
  // src/i3s-slpk-loader.ts
13593
- var VERSION8 = true ? "4.2.0-alpha.1" : "latest";
13824
+ var VERSION8 = true ? "4.2.0-alpha.2" : "latest";
13594
13825
  var SLPKLoader = {
13595
13826
  name: "I3S SLPK (Scene Layer Package)",
13596
13827
  id: "slpk",
@@ -13669,7 +13900,7 @@ var __exports__ = (() => {
13669
13900
  }
13670
13901
 
13671
13902
  // src/i3s-attribute-loader.ts
13672
- var VERSION9 = true ? "4.2.0-alpha.1" : "latest";
13903
+ var VERSION9 = true ? "4.2.0-alpha.2" : "latest";
13673
13904
  var EMPTY_VALUE = "";
13674
13905
  var REJECTED_STATUS = "rejected";
13675
13906
  var I3SAttributeLoader = {
@@ -13822,7 +14053,7 @@ var __exports__ = (() => {
13822
14053
  }
13823
14054
 
13824
14055
  // src/i3s-building-scene-layer-loader.ts
13825
- var VERSION10 = true ? "4.2.0-alpha.1" : "latest";
14056
+ var VERSION10 = true ? "4.2.0-alpha.2" : "latest";
13826
14057
  var I3SBuildingSceneLayerLoader = {
13827
14058
  name: "I3S Building Scene Layer",
13828
14059
  id: "i3s-building-scene-layer",
@@ -13917,7 +14148,7 @@ var __exports__ = (() => {
13917
14148
  }
13918
14149
 
13919
14150
  // src/arcgis-webscene-loader.ts
13920
- var VERSION11 = true ? "4.2.0-alpha.1" : "latest";
14151
+ var VERSION11 = true ? "4.2.0-alpha.2" : "latest";
13921
14152
  var ArcGISWebSceneLoader = {
13922
14153
  name: "ArcGIS Web Scene Loader",
13923
14154
  id: "arcgis-web-scene",
@@ -1,7 +1,7 @@
1
1
  import { load } from '@loaders.gl/core';
2
2
  import { parseI3STileAttribute } from "./lib/parsers/parse-i3s-attribute.js";
3
3
  import { getUrlWithToken } from "./lib/utils/url-utils.js";
4
- const VERSION = typeof "4.2.0-alpha.1" !== 'undefined' ? "4.2.0-alpha.1" : 'latest';
4
+ const VERSION = typeof "4.2.0-alpha.2" !== 'undefined' ? "4.2.0-alpha.2" : 'latest';
5
5
  const EMPTY_VALUE = '';
6
6
  const REJECTED_STATUS = 'rejected';
7
7
  export const I3SAttributeLoader = {
@@ -1,5 +1,5 @@
1
1
  import { parseBuildingSceneLayer } from "./lib/parsers/parse-i3s-building-scene-layer.js";
2
- const VERSION = typeof "4.2.0-alpha.1" !== 'undefined' ? "4.2.0-alpha.1" : 'latest';
2
+ const VERSION = typeof "4.2.0-alpha.2" !== 'undefined' ? "4.2.0-alpha.2" : 'latest';
3
3
  export const I3SBuildingSceneLayerLoader = {
4
4
  name: 'I3S Building Scene Layer',
5
5
  id: 'i3s-building-scene-layer',
@@ -1,5 +1,5 @@
1
1
  import { parseI3STileContent } from "./lib/parsers/parse-i3s-tile-content.js";
2
- const VERSION = typeof "4.2.0-alpha.1" !== 'undefined' ? "4.2.0-alpha.1" : 'latest';
2
+ const VERSION = typeof "4.2.0-alpha.2" !== 'undefined' ? "4.2.0-alpha.2" : 'latest';
3
3
  export const I3SContentLoader = {
4
4
  name: 'I3S Content (Indexed Scene Layers)',
5
5
  id: 'i3s-content',