@loaders.gl/i3s 4.2.1 → 4.3.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.
@@ -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.1" !== 'undefined' ? "4.3.0-alpha.1" : '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
@@ -12820,6 +12820,7 @@ var __exports__ = (() => {
12820
12820
  }
12821
12821
 
12822
12822
  // ../zip/src/parse-zip/search-from-the-end.ts
12823
+ var buffLength = 1024;
12823
12824
  var searchFromTheEnd = async (file, target) => {
12824
12825
  const searchWindow = [
12825
12826
  await file.getUint8(file.length - 1n),
@@ -12827,18 +12828,25 @@ var __exports__ = (() => {
12827
12828
  await file.getUint8(file.length - 3n),
12828
12829
  void 0
12829
12830
  ];
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;
12831
+ let targetOffset = -1;
12832
+ let point = file.length - 4n;
12833
+ do {
12834
+ const prevPoint = point;
12835
+ point -= BigInt(buffLength);
12836
+ point = point >= 0n ? point : 0n;
12837
+ const buff = new Uint8Array(await file.slice(point, prevPoint));
12838
+ for (let i2 = buff.length - 1; i2 > -1; i2--) {
12839
+ searchWindow[3] = searchWindow[2];
12840
+ searchWindow[2] = searchWindow[1];
12841
+ searchWindow[1] = searchWindow[0];
12842
+ searchWindow[0] = buff[i2];
12843
+ if (searchWindow.every((val, index) => val === target[index])) {
12844
+ targetOffset = i2;
12845
+ break;
12846
+ }
12839
12847
  }
12840
- }
12841
- return targetOffset;
12848
+ } while (targetOffset === -1 && point > 0n);
12849
+ return point + BigInt(targetOffset);
12842
12850
  };
12843
12851
 
12844
12852
  // ../zip/src/parse-zip/end-of-central-directory.ts
@@ -12846,13 +12854,16 @@ var __exports__ = (() => {
12846
12854
  var zip64EoCDLocatorSignature = new Uint8Array([80, 75, 6, 7]);
12847
12855
  var zip64EoCDSignature = new Uint8Array([80, 75, 6, 6]);
12848
12856
  var CD_RECORDS_NUMBER_OFFSET = 8n;
12857
+ var CD_CD_BYTE_SIZE_OFFSET = 12n;
12849
12858
  var CD_START_OFFSET_OFFSET = 16n;
12850
12859
  var ZIP64_EOCD_START_OFFSET_OFFSET = 8n;
12851
12860
  var ZIP64_CD_RECORDS_NUMBER_OFFSET = 24n;
12861
+ var ZIP64_CD_CD_BYTE_SIZE_OFFSET = 40n;
12852
12862
  var ZIP64_CD_START_OFFSET_OFFSET = 48n;
12853
12863
  var parseEoCDRecord = async (file) => {
12854
12864
  const zipEoCDOffset = await searchFromTheEnd(file, eoCDSignature);
12855
12865
  let cdRecordsNumber = BigInt(await file.getUint16(zipEoCDOffset + CD_RECORDS_NUMBER_OFFSET));
12866
+ let cdByteSize = BigInt(await file.getUint32(zipEoCDOffset + CD_CD_BYTE_SIZE_OFFSET));
12856
12867
  let cdStartOffset = BigInt(await file.getUint32(zipEoCDOffset + CD_START_OFFSET_OFFSET));
12857
12868
  let zip64EoCDLocatorOffset = zipEoCDOffset - 20n;
12858
12869
  let zip64EoCDOffset = 0n;
@@ -12866,6 +12877,7 @@ var __exports__ = (() => {
12866
12877
  throw new Error("zip64 EoCD not found");
12867
12878
  }
12868
12879
  cdRecordsNumber = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_RECORDS_NUMBER_OFFSET);
12880
+ cdByteSize = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_CD_BYTE_SIZE_OFFSET);
12869
12881
  cdStartOffset = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_START_OFFSET_OFFSET);
12870
12882
  } else {
12871
12883
  zip64EoCDLocatorOffset = 0n;
@@ -12873,6 +12885,7 @@ var __exports__ = (() => {
12873
12885
  return {
12874
12886
  cdRecordsNumber,
12875
12887
  cdStartOffset,
12888
+ cdByteSize,
12876
12889
  offsets: {
12877
12890
  zip64EoCDOffset,
12878
12891
  zip64EoCDLocatorOffset,
@@ -13020,34 +13033,41 @@ var __exports__ = (() => {
13020
13033
  ];
13021
13034
 
13022
13035
  // ../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;
13036
+ var CD_COMPRESSED_SIZE_OFFSET = 20;
13037
+ var CD_UNCOMPRESSED_SIZE_OFFSET = 24;
13038
+ var CD_FILE_NAME_LENGTH_OFFSET = 28;
13039
+ var CD_EXTRA_FIELD_LENGTH_OFFSET = 30;
13040
+ var CD_START_DISK_OFFSET = 32;
13041
+ var CD_LOCAL_HEADER_OFFSET_OFFSET = 42;
13029
13042
  var CD_FILE_NAME_OFFSET = 46n;
13030
13043
  var signature = new Uint8Array([80, 75, 1, 2]);
13031
13044
  var parseZipCDFileHeader = async (headerOffset, file) => {
13032
- const magicBytes = await file.slice(headerOffset, headerOffset + 4n);
13045
+ if (headerOffset >= file.length) {
13046
+ return null;
13047
+ }
13048
+ const mainHeader = new DataView(
13049
+ await file.slice(headerOffset, headerOffset + CD_FILE_NAME_OFFSET)
13050
+ );
13051
+ const magicBytes = mainHeader.buffer.slice(0, 4);
13033
13052
  if (!compareArrayBuffers(magicBytes, signature.buffer)) {
13034
13053
  return null;
13035
13054
  }
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(
13055
+ const compressedSize = BigInt(mainHeader.getUint32(CD_COMPRESSED_SIZE_OFFSET, true));
13056
+ const uncompressedSize = BigInt(mainHeader.getUint32(CD_UNCOMPRESSED_SIZE_OFFSET, true));
13057
+ const extraFieldLength = mainHeader.getUint16(CD_EXTRA_FIELD_LENGTH_OFFSET, true);
13058
+ const startDisk = BigInt(mainHeader.getUint16(CD_START_DISK_OFFSET, true));
13059
+ const fileNameLength = mainHeader.getUint16(CD_FILE_NAME_LENGTH_OFFSET, true);
13060
+ const additionalHeader = await file.slice(
13042
13061
  headerOffset + CD_FILE_NAME_OFFSET,
13043
- headerOffset + CD_FILE_NAME_OFFSET + BigInt(fileNameLength)
13062
+ headerOffset + CD_FILE_NAME_OFFSET + BigInt(fileNameLength + extraFieldLength)
13044
13063
  );
13064
+ const filenameBytes = additionalHeader.slice(0, fileNameLength);
13045
13065
  const fileName = new TextDecoder().decode(filenameBytes);
13046
13066
  const extraOffset = headerOffset + CD_FILE_NAME_OFFSET + BigInt(fileNameLength);
13047
- const oldFormatOffset = await file.getUint32(headerOffset + CD_LOCAL_HEADER_OFFSET_OFFSET);
13067
+ const oldFormatOffset = mainHeader.getUint32(CD_LOCAL_HEADER_OFFSET_OFFSET, true);
13048
13068
  const localHeaderOffset = BigInt(oldFormatOffset);
13049
13069
  const extraField = new DataView(
13050
- await file.slice(extraOffset, extraOffset + BigInt(extraFieldLength))
13070
+ additionalHeader.slice(fileNameLength, additionalHeader.byteLength)
13051
13071
  );
13052
13072
  const zip64data = {
13053
13073
  uncompressedSize,
@@ -13066,13 +13086,16 @@ var __exports__ = (() => {
13066
13086
  };
13067
13087
  };
13068
13088
  async function* makeZipCDHeaderIterator(fileProvider) {
13069
- const { cdStartOffset } = await parseEoCDRecord(fileProvider);
13070
- let cdHeader = await parseZipCDFileHeader(cdStartOffset, fileProvider);
13089
+ const { cdStartOffset, cdByteSize } = await parseEoCDRecord(fileProvider);
13090
+ const centralDirectory = new DataViewFile(
13091
+ new DataView(await fileProvider.slice(cdStartOffset, cdStartOffset + cdByteSize))
13092
+ );
13093
+ let cdHeader = await parseZipCDFileHeader(0n, centralDirectory);
13071
13094
  while (cdHeader) {
13072
13095
  yield cdHeader;
13073
13096
  cdHeader = await parseZipCDFileHeader(
13074
13097
  cdHeader.extraOffset + BigInt(cdHeader.extraFieldLength),
13075
- fileProvider
13098
+ centralDirectory
13076
13099
  );
13077
13100
  }
13078
13101
  }
@@ -13219,42 +13242,45 @@ var __exports__ = (() => {
13219
13242
  ];
13220
13243
 
13221
13244
  // ../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;
13245
+ var COMPRESSION_METHOD_OFFSET = 8;
13246
+ var COMPRESSED_SIZE_OFFSET = 18;
13247
+ var UNCOMPRESSED_SIZE_OFFSET = 22;
13248
+ var FILE_NAME_LENGTH_OFFSET = 26;
13249
+ var EXTRA_FIELD_LENGTH_OFFSET = 28;
13227
13250
  var FILE_NAME_OFFSET = 30n;
13228
13251
  var signature2 = new Uint8Array([80, 75, 3, 4]);
13229
- var parseZipLocalFileHeader = async (headerOffset, buffer) => {
13230
- const magicBytes = await buffer.slice(headerOffset, headerOffset + 4n);
13252
+ var parseZipLocalFileHeader = async (headerOffset, file) => {
13253
+ const mainHeader = new DataView(await file.slice(headerOffset, headerOffset + FILE_NAME_OFFSET));
13254
+ const magicBytes = mainHeader.buffer.slice(0, 4);
13231
13255
  if (!compareArrayBuffers(magicBytes, signature2)) {
13232
13256
  return null;
13233
13257
  }
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);
13258
+ const fileNameLength = mainHeader.getUint16(FILE_NAME_LENGTH_OFFSET, true);
13259
+ const extraFieldLength = mainHeader.getUint16(EXTRA_FIELD_LENGTH_OFFSET, true);
13260
+ const additionalHeader = await file.slice(
13261
+ headerOffset + FILE_NAME_OFFSET,
13262
+ headerOffset + FILE_NAME_OFFSET + BigInt(fileNameLength + extraFieldLength)
13263
+ );
13264
+ const fileNameBuffer = additionalHeader.slice(0, fileNameLength);
13265
+ const extraDataBuffer = new DataView(
13266
+ additionalHeader.slice(fileNameLength, additionalHeader.byteLength)
13267
+ );
13268
+ const fileName = new TextDecoder().decode(fileNameBuffer).split("\\").join("/");
13242
13269
  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;
13270
+ const compressionMethod = mainHeader.getUint16(COMPRESSION_METHOD_OFFSET, true);
13271
+ let compressedSize = BigInt(mainHeader.getUint32(COMPRESSED_SIZE_OFFSET, true));
13272
+ let uncompressedSize = BigInt(mainHeader.getUint32(UNCOMPRESSED_SIZE_OFFSET, true));
13273
+ let offsetInZip64Data = 4;
13248
13274
  if (uncompressedSize === BigInt(4294967295)) {
13249
- uncompressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
13250
- offsetInZip64Data += 8n;
13275
+ uncompressedSize = extraDataBuffer.getBigUint64(offsetInZip64Data, true);
13276
+ offsetInZip64Data += 8;
13251
13277
  }
13252
13278
  if (compressedSize === BigInt(4294967295)) {
13253
- compressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
13254
- offsetInZip64Data += 8n;
13279
+ compressedSize = extraDataBuffer.getBigUint64(offsetInZip64Data, true);
13280
+ offsetInZip64Data += 8;
13255
13281
  }
13256
13282
  if (fileDataOffset === BigInt(4294967295)) {
13257
- fileDataOffset = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
13283
+ fileDataOffset = extraDataBuffer.getBigUint64(offsetInZip64Data, true);
13258
13284
  }
13259
13285
  return {
13260
13286
  fileNameLength,