@loaders.gl/3d-tiles 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.
@@ -5,7 +5,7 @@ import { DataViewFile } from '@loaders.gl/loader-utils';
5
5
  import { parse3DTilesArchive as parse3DTilesArchiveFromProvider } from "./3d-tiles-archive/3d-tiles-archive-parser.js";
6
6
  // __VERSION__ is injected by babel-plugin-version-inline
7
7
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
8
- const VERSION = typeof "4.2.0" !== 'undefined' ? "4.2.0" : 'latest';
8
+ const VERSION = typeof "4.3.0-alpha.1" !== 'undefined' ? "4.3.0-alpha.1" : 'latest';
9
9
  /**
10
10
  * Loader for 3tz packages
11
11
  */
package/dist/dist.dev.js CHANGED
@@ -20501,6 +20501,7 @@ var __exports__ = (() => {
20501
20501
  };
20502
20502
 
20503
20503
  // ../zip/src/parse-zip/search-from-the-end.ts
20504
+ var buffLength = 1024;
20504
20505
  var searchFromTheEnd = async (file, target) => {
20505
20506
  const searchWindow = [
20506
20507
  await file.getUint8(file.length - 1n),
@@ -20508,18 +20509,25 @@ var __exports__ = (() => {
20508
20509
  await file.getUint8(file.length - 3n),
20509
20510
  void 0
20510
20511
  ];
20511
- let targetOffset = 0n;
20512
- for (let i2 = file.length - 4n; i2 > -1; i2--) {
20513
- searchWindow[3] = searchWindow[2];
20514
- searchWindow[2] = searchWindow[1];
20515
- searchWindow[1] = searchWindow[0];
20516
- searchWindow[0] = await file.getUint8(i2);
20517
- if (searchWindow.every((val, index) => val === target[index])) {
20518
- targetOffset = i2;
20519
- break;
20512
+ let targetOffset = -1;
20513
+ let point = file.length - 4n;
20514
+ do {
20515
+ const prevPoint = point;
20516
+ point -= BigInt(buffLength);
20517
+ point = point >= 0n ? point : 0n;
20518
+ const buff = new Uint8Array(await file.slice(point, prevPoint));
20519
+ for (let i2 = buff.length - 1; i2 > -1; i2--) {
20520
+ searchWindow[3] = searchWindow[2];
20521
+ searchWindow[2] = searchWindow[1];
20522
+ searchWindow[1] = searchWindow[0];
20523
+ searchWindow[0] = buff[i2];
20524
+ if (searchWindow.every((val, index) => val === target[index])) {
20525
+ targetOffset = i2;
20526
+ break;
20527
+ }
20520
20528
  }
20521
- }
20522
- return targetOffset;
20529
+ } while (targetOffset === -1 && point > 0n);
20530
+ return point + BigInt(targetOffset);
20523
20531
  };
20524
20532
 
20525
20533
  // ../zip/src/parse-zip/end-of-central-directory.ts
@@ -20527,13 +20535,16 @@ var __exports__ = (() => {
20527
20535
  var zip64EoCDLocatorSignature = new Uint8Array([80, 75, 6, 7]);
20528
20536
  var zip64EoCDSignature = new Uint8Array([80, 75, 6, 6]);
20529
20537
  var CD_RECORDS_NUMBER_OFFSET = 8n;
20538
+ var CD_CD_BYTE_SIZE_OFFSET = 12n;
20530
20539
  var CD_START_OFFSET_OFFSET = 16n;
20531
20540
  var ZIP64_EOCD_START_OFFSET_OFFSET = 8n;
20532
20541
  var ZIP64_CD_RECORDS_NUMBER_OFFSET = 24n;
20542
+ var ZIP64_CD_CD_BYTE_SIZE_OFFSET = 40n;
20533
20543
  var ZIP64_CD_START_OFFSET_OFFSET = 48n;
20534
20544
  var parseEoCDRecord = async (file) => {
20535
20545
  const zipEoCDOffset = await searchFromTheEnd(file, eoCDSignature);
20536
20546
  let cdRecordsNumber = BigInt(await file.getUint16(zipEoCDOffset + CD_RECORDS_NUMBER_OFFSET));
20547
+ let cdByteSize = BigInt(await file.getUint32(zipEoCDOffset + CD_CD_BYTE_SIZE_OFFSET));
20537
20548
  let cdStartOffset = BigInt(await file.getUint32(zipEoCDOffset + CD_START_OFFSET_OFFSET));
20538
20549
  let zip64EoCDLocatorOffset = zipEoCDOffset - 20n;
20539
20550
  let zip64EoCDOffset = 0n;
@@ -20547,6 +20558,7 @@ var __exports__ = (() => {
20547
20558
  throw new Error("zip64 EoCD not found");
20548
20559
  }
20549
20560
  cdRecordsNumber = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_RECORDS_NUMBER_OFFSET);
20561
+ cdByteSize = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_CD_BYTE_SIZE_OFFSET);
20550
20562
  cdStartOffset = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_START_OFFSET_OFFSET);
20551
20563
  } else {
20552
20564
  zip64EoCDLocatorOffset = 0n;
@@ -20554,6 +20566,7 @@ var __exports__ = (() => {
20554
20566
  return {
20555
20567
  cdRecordsNumber,
20556
20568
  cdStartOffset,
20569
+ cdByteSize,
20557
20570
  offsets: {
20558
20571
  zip64EoCDOffset,
20559
20572
  zip64EoCDLocatorOffset,
@@ -20701,34 +20714,41 @@ var __exports__ = (() => {
20701
20714
  ];
20702
20715
 
20703
20716
  // ../zip/src/parse-zip/cd-file-header.ts
20704
- var CD_COMPRESSED_SIZE_OFFSET = 20n;
20705
- var CD_UNCOMPRESSED_SIZE_OFFSET = 24n;
20706
- var CD_FILE_NAME_LENGTH_OFFSET = 28n;
20707
- var CD_EXTRA_FIELD_LENGTH_OFFSET = 30n;
20708
- var CD_START_DISK_OFFSET = 32n;
20709
- var CD_LOCAL_HEADER_OFFSET_OFFSET = 42n;
20717
+ var CD_COMPRESSED_SIZE_OFFSET = 20;
20718
+ var CD_UNCOMPRESSED_SIZE_OFFSET = 24;
20719
+ var CD_FILE_NAME_LENGTH_OFFSET = 28;
20720
+ var CD_EXTRA_FIELD_LENGTH_OFFSET = 30;
20721
+ var CD_START_DISK_OFFSET = 32;
20722
+ var CD_LOCAL_HEADER_OFFSET_OFFSET = 42;
20710
20723
  var CD_FILE_NAME_OFFSET = 46n;
20711
20724
  var signature = new Uint8Array([80, 75, 1, 2]);
20712
20725
  var parseZipCDFileHeader = async (headerOffset, file) => {
20713
- const magicBytes = await file.slice(headerOffset, headerOffset + 4n);
20726
+ if (headerOffset >= file.length) {
20727
+ return null;
20728
+ }
20729
+ const mainHeader = new DataView(
20730
+ await file.slice(headerOffset, headerOffset + CD_FILE_NAME_OFFSET)
20731
+ );
20732
+ const magicBytes = mainHeader.buffer.slice(0, 4);
20714
20733
  if (!compareArrayBuffers(magicBytes, signature.buffer)) {
20715
20734
  return null;
20716
20735
  }
20717
- const compressedSize = BigInt(await file.getUint32(headerOffset + CD_COMPRESSED_SIZE_OFFSET));
20718
- const uncompressedSize = BigInt(await file.getUint32(headerOffset + CD_UNCOMPRESSED_SIZE_OFFSET));
20719
- const extraFieldLength = await file.getUint16(headerOffset + CD_EXTRA_FIELD_LENGTH_OFFSET);
20720
- const startDisk = BigInt(await file.getUint16(headerOffset + CD_START_DISK_OFFSET));
20721
- const fileNameLength = await file.getUint16(headerOffset + CD_FILE_NAME_LENGTH_OFFSET);
20722
- const filenameBytes = await file.slice(
20736
+ const compressedSize = BigInt(mainHeader.getUint32(CD_COMPRESSED_SIZE_OFFSET, true));
20737
+ const uncompressedSize = BigInt(mainHeader.getUint32(CD_UNCOMPRESSED_SIZE_OFFSET, true));
20738
+ const extraFieldLength = mainHeader.getUint16(CD_EXTRA_FIELD_LENGTH_OFFSET, true);
20739
+ const startDisk = BigInt(mainHeader.getUint16(CD_START_DISK_OFFSET, true));
20740
+ const fileNameLength = mainHeader.getUint16(CD_FILE_NAME_LENGTH_OFFSET, true);
20741
+ const additionalHeader = await file.slice(
20723
20742
  headerOffset + CD_FILE_NAME_OFFSET,
20724
- headerOffset + CD_FILE_NAME_OFFSET + BigInt(fileNameLength)
20743
+ headerOffset + CD_FILE_NAME_OFFSET + BigInt(fileNameLength + extraFieldLength)
20725
20744
  );
20745
+ const filenameBytes = additionalHeader.slice(0, fileNameLength);
20726
20746
  const fileName = new TextDecoder().decode(filenameBytes);
20727
20747
  const extraOffset = headerOffset + CD_FILE_NAME_OFFSET + BigInt(fileNameLength);
20728
- const oldFormatOffset = await file.getUint32(headerOffset + CD_LOCAL_HEADER_OFFSET_OFFSET);
20748
+ const oldFormatOffset = mainHeader.getUint32(CD_LOCAL_HEADER_OFFSET_OFFSET, true);
20729
20749
  const localHeaderOffset = BigInt(oldFormatOffset);
20730
20750
  const extraField = new DataView(
20731
- await file.slice(extraOffset, extraOffset + BigInt(extraFieldLength))
20751
+ additionalHeader.slice(fileNameLength, additionalHeader.byteLength)
20732
20752
  );
20733
20753
  const zip64data = {
20734
20754
  uncompressedSize,
@@ -20747,13 +20767,16 @@ var __exports__ = (() => {
20747
20767
  };
20748
20768
  };
20749
20769
  async function* makeZipCDHeaderIterator(fileProvider) {
20750
- const { cdStartOffset } = await parseEoCDRecord(fileProvider);
20751
- let cdHeader = await parseZipCDFileHeader(cdStartOffset, fileProvider);
20770
+ const { cdStartOffset, cdByteSize } = await parseEoCDRecord(fileProvider);
20771
+ const centralDirectory = new DataViewFile(
20772
+ new DataView(await fileProvider.slice(cdStartOffset, cdStartOffset + cdByteSize))
20773
+ );
20774
+ let cdHeader = await parseZipCDFileHeader(0n, centralDirectory);
20752
20775
  while (cdHeader) {
20753
20776
  yield cdHeader;
20754
20777
  cdHeader = await parseZipCDFileHeader(
20755
20778
  cdHeader.extraOffset + BigInt(cdHeader.extraFieldLength),
20756
- fileProvider
20779
+ centralDirectory
20757
20780
  );
20758
20781
  }
20759
20782
  }
@@ -20900,42 +20923,45 @@ var __exports__ = (() => {
20900
20923
  ];
20901
20924
 
20902
20925
  // ../zip/src/parse-zip/local-file-header.ts
20903
- var COMPRESSION_METHOD_OFFSET = 8n;
20904
- var COMPRESSED_SIZE_OFFSET = 18n;
20905
- var UNCOMPRESSED_SIZE_OFFSET = 22n;
20906
- var FILE_NAME_LENGTH_OFFSET = 26n;
20907
- var EXTRA_FIELD_LENGTH_OFFSET = 28n;
20926
+ var COMPRESSION_METHOD_OFFSET = 8;
20927
+ var COMPRESSED_SIZE_OFFSET = 18;
20928
+ var UNCOMPRESSED_SIZE_OFFSET = 22;
20929
+ var FILE_NAME_LENGTH_OFFSET = 26;
20930
+ var EXTRA_FIELD_LENGTH_OFFSET = 28;
20908
20931
  var FILE_NAME_OFFSET = 30n;
20909
20932
  var signature2 = new Uint8Array([80, 75, 3, 4]);
20910
- var parseZipLocalFileHeader = async (headerOffset, buffer) => {
20911
- const magicBytes = await buffer.slice(headerOffset, headerOffset + 4n);
20933
+ var parseZipLocalFileHeader = async (headerOffset, file) => {
20934
+ const mainHeader = new DataView(await file.slice(headerOffset, headerOffset + FILE_NAME_OFFSET));
20935
+ const magicBytes = mainHeader.buffer.slice(0, 4);
20912
20936
  if (!compareArrayBuffers(magicBytes, signature2)) {
20913
20937
  return null;
20914
20938
  }
20915
- const fileNameLength = await buffer.getUint16(headerOffset + FILE_NAME_LENGTH_OFFSET);
20916
- const fileName = new TextDecoder().decode(
20917
- await buffer.slice(
20918
- headerOffset + FILE_NAME_OFFSET,
20919
- headerOffset + FILE_NAME_OFFSET + BigInt(fileNameLength)
20920
- )
20921
- ).split("\\").join("/");
20922
- const extraFieldLength = await buffer.getUint16(headerOffset + EXTRA_FIELD_LENGTH_OFFSET);
20939
+ const fileNameLength = mainHeader.getUint16(FILE_NAME_LENGTH_OFFSET, true);
20940
+ const extraFieldLength = mainHeader.getUint16(EXTRA_FIELD_LENGTH_OFFSET, true);
20941
+ const additionalHeader = await file.slice(
20942
+ headerOffset + FILE_NAME_OFFSET,
20943
+ headerOffset + FILE_NAME_OFFSET + BigInt(fileNameLength + extraFieldLength)
20944
+ );
20945
+ const fileNameBuffer = additionalHeader.slice(0, fileNameLength);
20946
+ const extraDataBuffer = new DataView(
20947
+ additionalHeader.slice(fileNameLength, additionalHeader.byteLength)
20948
+ );
20949
+ const fileName = new TextDecoder().decode(fileNameBuffer).split("\\").join("/");
20923
20950
  let fileDataOffset = headerOffset + FILE_NAME_OFFSET + BigInt(fileNameLength + extraFieldLength);
20924
- const compressionMethod = await buffer.getUint16(headerOffset + COMPRESSION_METHOD_OFFSET);
20925
- let compressedSize = BigInt(await buffer.getUint32(headerOffset + COMPRESSED_SIZE_OFFSET));
20926
- let uncompressedSize = BigInt(await buffer.getUint32(headerOffset + UNCOMPRESSED_SIZE_OFFSET));
20927
- const extraOffset = headerOffset + FILE_NAME_OFFSET + BigInt(fileNameLength);
20928
- let offsetInZip64Data = 4n;
20951
+ const compressionMethod = mainHeader.getUint16(COMPRESSION_METHOD_OFFSET, true);
20952
+ let compressedSize = BigInt(mainHeader.getUint32(COMPRESSED_SIZE_OFFSET, true));
20953
+ let uncompressedSize = BigInt(mainHeader.getUint32(UNCOMPRESSED_SIZE_OFFSET, true));
20954
+ let offsetInZip64Data = 4;
20929
20955
  if (uncompressedSize === BigInt(4294967295)) {
20930
- uncompressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
20931
- offsetInZip64Data += 8n;
20956
+ uncompressedSize = extraDataBuffer.getBigUint64(offsetInZip64Data, true);
20957
+ offsetInZip64Data += 8;
20932
20958
  }
20933
20959
  if (compressedSize === BigInt(4294967295)) {
20934
- compressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
20935
- offsetInZip64Data += 8n;
20960
+ compressedSize = extraDataBuffer.getBigUint64(offsetInZip64Data, true);
20961
+ offsetInZip64Data += 8;
20936
20962
  }
20937
20963
  if (fileDataOffset === BigInt(4294967295)) {
20938
- fileDataOffset = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
20964
+ fileDataOffset = extraDataBuffer.getBigUint64(offsetInZip64Data, true);
20939
20965
  }
20940
20966
  return {
20941
20967
  fileNameLength,