@loaders.gl/i3s 4.3.0-alpha.1 → 4.3.0-alpha.3

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.
@@ -1,7 +1,7 @@
1
1
  import { parseWebscene } from "./lib/parsers/parse-arcgis-webscene.js";
2
2
  // __VERSION__ is injected by babel-plugin-version-inline
3
3
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
4
- const VERSION = typeof "4.2.0" !== 'undefined' ? "4.2.0" : 'latest';
4
+ const VERSION = typeof "4.3.0-alpha.2" !== 'undefined' ? "4.3.0-alpha.2" : 'latest';
5
5
  /**
6
6
  * Loader for ArcGIS WebScene
7
7
  * Spec - https://developers.arcgis.com/web-scene-specification/objects/webscene/
package/dist/dist.dev.js CHANGED
@@ -4645,7 +4645,7 @@ var __exports__ = (() => {
4645
4645
  }
4646
4646
  };
4647
4647
 
4648
- // ../loader-utils/src/lib/file-provider/file-provider.ts
4648
+ // ../loader-utils/src/lib/file-provider/file-provider-interface.ts
4649
4649
  var isFileProvider = (fileProvider) => {
4650
4650
  return fileProvider?.getUint8 && fileProvider?.slice && fileProvider?.length;
4651
4651
  };
@@ -11470,7 +11470,11 @@ var __exports__ = (() => {
11470
11470
  try {
11471
11471
  const urlObj = new URL(url);
11472
11472
  urlWithoutParams = `${urlObj.origin}${urlObj.pathname}`;
11473
+ if (urlWithoutParams.startsWith("null")) {
11474
+ urlWithoutParams = null;
11475
+ }
11473
11476
  } catch (e2) {
11477
+ urlWithoutParams = null;
11474
11478
  }
11475
11479
  return urlWithoutParams || url;
11476
11480
  }
@@ -12820,6 +12824,7 @@ var __exports__ = (() => {
12820
12824
  }
12821
12825
 
12822
12826
  // ../zip/src/parse-zip/search-from-the-end.ts
12827
+ var buffLength = 1024;
12823
12828
  var searchFromTheEnd = async (file, target) => {
12824
12829
  const searchWindow = [
12825
12830
  await file.getUint8(file.length - 1n),
@@ -12827,18 +12832,25 @@ var __exports__ = (() => {
12827
12832
  await file.getUint8(file.length - 3n),
12828
12833
  void 0
12829
12834
  ];
12830
- let targetOffset = 0n;
12831
- for (let i2 = file.length - 4n; i2 > -1; i2--) {
12832
- searchWindow[3] = searchWindow[2];
12833
- searchWindow[2] = searchWindow[1];
12834
- searchWindow[1] = searchWindow[0];
12835
- searchWindow[0] = await file.getUint8(i2);
12836
- if (searchWindow.every((val, index) => val === target[index])) {
12837
- targetOffset = i2;
12838
- break;
12835
+ let targetOffset = -1;
12836
+ let point = file.length - 4n;
12837
+ do {
12838
+ const prevPoint = point;
12839
+ point -= BigInt(buffLength);
12840
+ point = point >= 0n ? point : 0n;
12841
+ const buff = new Uint8Array(await file.slice(point, prevPoint));
12842
+ for (let i2 = buff.length - 1; i2 > -1; i2--) {
12843
+ searchWindow[3] = searchWindow[2];
12844
+ searchWindow[2] = searchWindow[1];
12845
+ searchWindow[1] = searchWindow[0];
12846
+ searchWindow[0] = buff[i2];
12847
+ if (searchWindow.every((val, index) => val === target[index])) {
12848
+ targetOffset = i2;
12849
+ break;
12850
+ }
12839
12851
  }
12840
- }
12841
- return targetOffset;
12852
+ } while (targetOffset === -1 && point > 0n);
12853
+ return point + BigInt(targetOffset);
12842
12854
  };
12843
12855
 
12844
12856
  // ../zip/src/parse-zip/end-of-central-directory.ts
@@ -12846,13 +12858,16 @@ var __exports__ = (() => {
12846
12858
  var zip64EoCDLocatorSignature = new Uint8Array([80, 75, 6, 7]);
12847
12859
  var zip64EoCDSignature = new Uint8Array([80, 75, 6, 6]);
12848
12860
  var CD_RECORDS_NUMBER_OFFSET = 8n;
12861
+ var CD_CD_BYTE_SIZE_OFFSET = 12n;
12849
12862
  var CD_START_OFFSET_OFFSET = 16n;
12850
12863
  var ZIP64_EOCD_START_OFFSET_OFFSET = 8n;
12851
12864
  var ZIP64_CD_RECORDS_NUMBER_OFFSET = 24n;
12865
+ var ZIP64_CD_CD_BYTE_SIZE_OFFSET = 40n;
12852
12866
  var ZIP64_CD_START_OFFSET_OFFSET = 48n;
12853
12867
  var parseEoCDRecord = async (file) => {
12854
12868
  const zipEoCDOffset = await searchFromTheEnd(file, eoCDSignature);
12855
12869
  let cdRecordsNumber = BigInt(await file.getUint16(zipEoCDOffset + CD_RECORDS_NUMBER_OFFSET));
12870
+ let cdByteSize = BigInt(await file.getUint32(zipEoCDOffset + CD_CD_BYTE_SIZE_OFFSET));
12856
12871
  let cdStartOffset = BigInt(await file.getUint32(zipEoCDOffset + CD_START_OFFSET_OFFSET));
12857
12872
  let zip64EoCDLocatorOffset = zipEoCDOffset - 20n;
12858
12873
  let zip64EoCDOffset = 0n;
@@ -12866,6 +12881,7 @@ var __exports__ = (() => {
12866
12881
  throw new Error("zip64 EoCD not found");
12867
12882
  }
12868
12883
  cdRecordsNumber = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_RECORDS_NUMBER_OFFSET);
12884
+ cdByteSize = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_CD_BYTE_SIZE_OFFSET);
12869
12885
  cdStartOffset = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_START_OFFSET_OFFSET);
12870
12886
  } else {
12871
12887
  zip64EoCDLocatorOffset = 0n;
@@ -12873,6 +12889,7 @@ var __exports__ = (() => {
12873
12889
  return {
12874
12890
  cdRecordsNumber,
12875
12891
  cdStartOffset,
12892
+ cdByteSize,
12876
12893
  offsets: {
12877
12894
  zip64EoCDOffset,
12878
12895
  zip64EoCDLocatorOffset,
@@ -13020,34 +13037,41 @@ var __exports__ = (() => {
13020
13037
  ];
13021
13038
 
13022
13039
  // ../zip/src/parse-zip/cd-file-header.ts
13023
- var CD_COMPRESSED_SIZE_OFFSET = 20n;
13024
- var CD_UNCOMPRESSED_SIZE_OFFSET = 24n;
13025
- var CD_FILE_NAME_LENGTH_OFFSET = 28n;
13026
- var CD_EXTRA_FIELD_LENGTH_OFFSET = 30n;
13027
- var CD_START_DISK_OFFSET = 32n;
13028
- var CD_LOCAL_HEADER_OFFSET_OFFSET = 42n;
13040
+ var CD_COMPRESSED_SIZE_OFFSET = 20;
13041
+ var CD_UNCOMPRESSED_SIZE_OFFSET = 24;
13042
+ var CD_FILE_NAME_LENGTH_OFFSET = 28;
13043
+ var CD_EXTRA_FIELD_LENGTH_OFFSET = 30;
13044
+ var CD_START_DISK_OFFSET = 32;
13045
+ var CD_LOCAL_HEADER_OFFSET_OFFSET = 42;
13029
13046
  var CD_FILE_NAME_OFFSET = 46n;
13030
13047
  var signature = new Uint8Array([80, 75, 1, 2]);
13031
13048
  var parseZipCDFileHeader = async (headerOffset, file) => {
13032
- const magicBytes = await file.slice(headerOffset, headerOffset + 4n);
13049
+ if (headerOffset >= file.length) {
13050
+ return null;
13051
+ }
13052
+ const mainHeader = new DataView(
13053
+ await file.slice(headerOffset, headerOffset + CD_FILE_NAME_OFFSET)
13054
+ );
13055
+ const magicBytes = mainHeader.buffer.slice(0, 4);
13033
13056
  if (!compareArrayBuffers(magicBytes, signature.buffer)) {
13034
13057
  return null;
13035
13058
  }
13036
- const compressedSize = BigInt(await file.getUint32(headerOffset + CD_COMPRESSED_SIZE_OFFSET));
13037
- const uncompressedSize = BigInt(await file.getUint32(headerOffset + CD_UNCOMPRESSED_SIZE_OFFSET));
13038
- const extraFieldLength = await file.getUint16(headerOffset + CD_EXTRA_FIELD_LENGTH_OFFSET);
13039
- const startDisk = BigInt(await file.getUint16(headerOffset + CD_START_DISK_OFFSET));
13040
- const fileNameLength = await file.getUint16(headerOffset + CD_FILE_NAME_LENGTH_OFFSET);
13041
- const filenameBytes = await file.slice(
13059
+ const compressedSize = BigInt(mainHeader.getUint32(CD_COMPRESSED_SIZE_OFFSET, true));
13060
+ const uncompressedSize = BigInt(mainHeader.getUint32(CD_UNCOMPRESSED_SIZE_OFFSET, true));
13061
+ const extraFieldLength = mainHeader.getUint16(CD_EXTRA_FIELD_LENGTH_OFFSET, true);
13062
+ const startDisk = BigInt(mainHeader.getUint16(CD_START_DISK_OFFSET, true));
13063
+ const fileNameLength = mainHeader.getUint16(CD_FILE_NAME_LENGTH_OFFSET, true);
13064
+ const additionalHeader = await file.slice(
13042
13065
  headerOffset + CD_FILE_NAME_OFFSET,
13043
- headerOffset + CD_FILE_NAME_OFFSET + BigInt(fileNameLength)
13066
+ headerOffset + CD_FILE_NAME_OFFSET + BigInt(fileNameLength + extraFieldLength)
13044
13067
  );
13068
+ const filenameBytes = additionalHeader.slice(0, fileNameLength);
13045
13069
  const fileName = new TextDecoder().decode(filenameBytes);
13046
13070
  const extraOffset = headerOffset + CD_FILE_NAME_OFFSET + BigInt(fileNameLength);
13047
- const oldFormatOffset = await file.getUint32(headerOffset + CD_LOCAL_HEADER_OFFSET_OFFSET);
13071
+ const oldFormatOffset = mainHeader.getUint32(CD_LOCAL_HEADER_OFFSET_OFFSET, true);
13048
13072
  const localHeaderOffset = BigInt(oldFormatOffset);
13049
13073
  const extraField = new DataView(
13050
- await file.slice(extraOffset, extraOffset + BigInt(extraFieldLength))
13074
+ additionalHeader.slice(fileNameLength, additionalHeader.byteLength)
13051
13075
  );
13052
13076
  const zip64data = {
13053
13077
  uncompressedSize,
@@ -13066,13 +13090,16 @@ var __exports__ = (() => {
13066
13090
  };
13067
13091
  };
13068
13092
  async function* makeZipCDHeaderIterator(fileProvider) {
13069
- const { cdStartOffset } = await parseEoCDRecord(fileProvider);
13070
- let cdHeader = await parseZipCDFileHeader(cdStartOffset, fileProvider);
13093
+ const { cdStartOffset, cdByteSize } = await parseEoCDRecord(fileProvider);
13094
+ const centralDirectory = new DataViewFile(
13095
+ new DataView(await fileProvider.slice(cdStartOffset, cdStartOffset + cdByteSize))
13096
+ );
13097
+ let cdHeader = await parseZipCDFileHeader(0n, centralDirectory);
13071
13098
  while (cdHeader) {
13072
13099
  yield cdHeader;
13073
13100
  cdHeader = await parseZipCDFileHeader(
13074
13101
  cdHeader.extraOffset + BigInt(cdHeader.extraFieldLength),
13075
- fileProvider
13102
+ centralDirectory
13076
13103
  );
13077
13104
  }
13078
13105
  }
@@ -13219,42 +13246,45 @@ var __exports__ = (() => {
13219
13246
  ];
13220
13247
 
13221
13248
  // ../zip/src/parse-zip/local-file-header.ts
13222
- var COMPRESSION_METHOD_OFFSET = 8n;
13223
- var COMPRESSED_SIZE_OFFSET = 18n;
13224
- var UNCOMPRESSED_SIZE_OFFSET = 22n;
13225
- var FILE_NAME_LENGTH_OFFSET = 26n;
13226
- var EXTRA_FIELD_LENGTH_OFFSET = 28n;
13249
+ var COMPRESSION_METHOD_OFFSET = 8;
13250
+ var COMPRESSED_SIZE_OFFSET = 18;
13251
+ var UNCOMPRESSED_SIZE_OFFSET = 22;
13252
+ var FILE_NAME_LENGTH_OFFSET = 26;
13253
+ var EXTRA_FIELD_LENGTH_OFFSET = 28;
13227
13254
  var FILE_NAME_OFFSET = 30n;
13228
13255
  var signature2 = new Uint8Array([80, 75, 3, 4]);
13229
- var parseZipLocalFileHeader = async (headerOffset, buffer) => {
13230
- const magicBytes = await buffer.slice(headerOffset, headerOffset + 4n);
13256
+ var parseZipLocalFileHeader = async (headerOffset, file) => {
13257
+ const mainHeader = new DataView(await file.slice(headerOffset, headerOffset + FILE_NAME_OFFSET));
13258
+ const magicBytes = mainHeader.buffer.slice(0, 4);
13231
13259
  if (!compareArrayBuffers(magicBytes, signature2)) {
13232
13260
  return null;
13233
13261
  }
13234
- const fileNameLength = await buffer.getUint16(headerOffset + FILE_NAME_LENGTH_OFFSET);
13235
- const fileName = new TextDecoder().decode(
13236
- await buffer.slice(
13237
- headerOffset + FILE_NAME_OFFSET,
13238
- headerOffset + FILE_NAME_OFFSET + BigInt(fileNameLength)
13239
- )
13240
- ).split("\\").join("/");
13241
- const extraFieldLength = await buffer.getUint16(headerOffset + EXTRA_FIELD_LENGTH_OFFSET);
13262
+ const fileNameLength = mainHeader.getUint16(FILE_NAME_LENGTH_OFFSET, true);
13263
+ const extraFieldLength = mainHeader.getUint16(EXTRA_FIELD_LENGTH_OFFSET, true);
13264
+ const additionalHeader = await file.slice(
13265
+ headerOffset + FILE_NAME_OFFSET,
13266
+ headerOffset + FILE_NAME_OFFSET + BigInt(fileNameLength + extraFieldLength)
13267
+ );
13268
+ const fileNameBuffer = additionalHeader.slice(0, fileNameLength);
13269
+ const extraDataBuffer = new DataView(
13270
+ additionalHeader.slice(fileNameLength, additionalHeader.byteLength)
13271
+ );
13272
+ const fileName = new TextDecoder().decode(fileNameBuffer).split("\\").join("/");
13242
13273
  let fileDataOffset = headerOffset + FILE_NAME_OFFSET + BigInt(fileNameLength + extraFieldLength);
13243
- const compressionMethod = await buffer.getUint16(headerOffset + COMPRESSION_METHOD_OFFSET);
13244
- let compressedSize = BigInt(await buffer.getUint32(headerOffset + COMPRESSED_SIZE_OFFSET));
13245
- let uncompressedSize = BigInt(await buffer.getUint32(headerOffset + UNCOMPRESSED_SIZE_OFFSET));
13246
- const extraOffset = headerOffset + FILE_NAME_OFFSET + BigInt(fileNameLength);
13247
- let offsetInZip64Data = 4n;
13274
+ const compressionMethod = mainHeader.getUint16(COMPRESSION_METHOD_OFFSET, true);
13275
+ let compressedSize = BigInt(mainHeader.getUint32(COMPRESSED_SIZE_OFFSET, true));
13276
+ let uncompressedSize = BigInt(mainHeader.getUint32(UNCOMPRESSED_SIZE_OFFSET, true));
13277
+ let offsetInZip64Data = 4;
13248
13278
  if (uncompressedSize === BigInt(4294967295)) {
13249
- uncompressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
13250
- offsetInZip64Data += 8n;
13279
+ uncompressedSize = extraDataBuffer.getBigUint64(offsetInZip64Data, true);
13280
+ offsetInZip64Data += 8;
13251
13281
  }
13252
13282
  if (compressedSize === BigInt(4294967295)) {
13253
- compressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
13254
- offsetInZip64Data += 8n;
13283
+ compressedSize = extraDataBuffer.getBigUint64(offsetInZip64Data, true);
13284
+ offsetInZip64Data += 8;
13255
13285
  }
13256
13286
  if (fileDataOffset === BigInt(4294967295)) {
13257
- fileDataOffset = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
13287
+ fileDataOffset = extraDataBuffer.getBigUint64(offsetInZip64Data, true);
13258
13288
  }
13259
13289
  return {
13260
13290
  fileNameLength,