@loaders.gl/zip 4.3.0-alpha.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.
- package/dist/dist.dev.js +136 -55
- package/dist/dist.min.js +2 -2
- package/dist/index.cjs +71 -51
- package/dist/index.cjs.map +2 -2
- package/dist/parse-zip/cd-file-header.d.ts.map +1 -1
- package/dist/parse-zip/cd-file-header.js +25 -19
- package/dist/parse-zip/end-of-central-directory.d.ts +4 -2
- package/dist/parse-zip/end-of-central-directory.d.ts.map +1 -1
- package/dist/parse-zip/end-of-central-directory.js +3 -0
- package/dist/parse-zip/local-file-header.d.ts +1 -1
- package/dist/parse-zip/local-file-header.d.ts.map +1 -1
- package/dist/parse-zip/local-file-header.js +23 -23
- package/dist/parse-zip/search-from-the-end.d.ts.map +1 -1
- package/dist/parse-zip/search-from-the-end.js +19 -11
- package/dist/zip-loader.js +1 -1
- package/dist/zip-writer.js +1 -1
- package/package.json +5 -5
- package/src/parse-zip/cd-file-header.ts +38 -20
- package/src/parse-zip/end-of-central-directory.ts +7 -2
- package/src/parse-zip/local-file-header.ts +33 -29
- package/src/parse-zip/search-from-the-end.ts +20 -11
package/dist/index.cjs
CHANGED
|
@@ -55,7 +55,7 @@ module.exports = __toCommonJS(dist_exports);
|
|
|
55
55
|
|
|
56
56
|
// dist/zip-loader.js
|
|
57
57
|
var import_jszip = __toESM(require("jszip"), 1);
|
|
58
|
-
var VERSION = true ? "4.
|
|
58
|
+
var VERSION = true ? "4.3.0-alpha.1" : "latest";
|
|
59
59
|
var ZipLoader = {
|
|
60
60
|
dataType: null,
|
|
61
61
|
batchType: null,
|
|
@@ -102,7 +102,7 @@ async function loadZipEntry(jsZip, subFilename, options = {}) {
|
|
|
102
102
|
|
|
103
103
|
// dist/zip-writer.js
|
|
104
104
|
var import_jszip2 = __toESM(require("jszip"), 1);
|
|
105
|
-
var VERSION2 = true ? "4.
|
|
105
|
+
var VERSION2 = true ? "4.3.0-alpha.1" : "latest";
|
|
106
106
|
var ZipWriter = {
|
|
107
107
|
name: "Zip Archive",
|
|
108
108
|
id: "zip",
|
|
@@ -366,6 +366,7 @@ var import_loader_utils3 = require("@loaders.gl/loader-utils");
|
|
|
366
366
|
var import_loader_utils2 = require("@loaders.gl/loader-utils");
|
|
367
367
|
|
|
368
368
|
// dist/parse-zip/search-from-the-end.js
|
|
369
|
+
var buffLength = 1024;
|
|
369
370
|
var searchFromTheEnd = async (file, target) => {
|
|
370
371
|
const searchWindow = [
|
|
371
372
|
await file.getUint8(file.length - 1n),
|
|
@@ -373,18 +374,25 @@ var searchFromTheEnd = async (file, target) => {
|
|
|
373
374
|
await file.getUint8(file.length - 3n),
|
|
374
375
|
void 0
|
|
375
376
|
];
|
|
376
|
-
let targetOffset =
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
377
|
+
let targetOffset = -1;
|
|
378
|
+
let point = file.length - 4n;
|
|
379
|
+
do {
|
|
380
|
+
const prevPoint = point;
|
|
381
|
+
point -= BigInt(buffLength);
|
|
382
|
+
point = point >= 0n ? point : 0n;
|
|
383
|
+
const buff = new Uint8Array(await file.slice(point, prevPoint));
|
|
384
|
+
for (let i = buff.length - 1; i > -1; i--) {
|
|
385
|
+
searchWindow[3] = searchWindow[2];
|
|
386
|
+
searchWindow[2] = searchWindow[1];
|
|
387
|
+
searchWindow[1] = searchWindow[0];
|
|
388
|
+
searchWindow[0] = buff[i];
|
|
389
|
+
if (searchWindow.every((val, index) => val === target[index])) {
|
|
390
|
+
targetOffset = i;
|
|
391
|
+
break;
|
|
392
|
+
}
|
|
385
393
|
}
|
|
386
|
-
}
|
|
387
|
-
return targetOffset;
|
|
394
|
+
} while (targetOffset === -1 && point > 0n);
|
|
395
|
+
return point + BigInt(targetOffset);
|
|
388
396
|
};
|
|
389
397
|
|
|
390
398
|
// dist/parse-zip/zip64-info-generation.js
|
|
@@ -466,6 +474,7 @@ var ZIP64_COMMENT_OFFSET = 56n;
|
|
|
466
474
|
var parseEoCDRecord = async (file) => {
|
|
467
475
|
const zipEoCDOffset = await searchFromTheEnd(file, eoCDSignature);
|
|
468
476
|
let cdRecordsNumber = BigInt(await file.getUint16(zipEoCDOffset + CD_RECORDS_NUMBER_OFFSET));
|
|
477
|
+
let cdByteSize = BigInt(await file.getUint32(zipEoCDOffset + CD_CD_BYTE_SIZE_OFFSET));
|
|
469
478
|
let cdStartOffset = BigInt(await file.getUint32(zipEoCDOffset + CD_START_OFFSET_OFFSET));
|
|
470
479
|
let zip64EoCDLocatorOffset = zipEoCDOffset - 20n;
|
|
471
480
|
let zip64EoCDOffset = 0n;
|
|
@@ -477,6 +486,7 @@ var parseEoCDRecord = async (file) => {
|
|
|
477
486
|
throw new Error("zip64 EoCD not found");
|
|
478
487
|
}
|
|
479
488
|
cdRecordsNumber = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_RECORDS_NUMBER_OFFSET);
|
|
489
|
+
cdByteSize = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_CD_BYTE_SIZE_OFFSET);
|
|
480
490
|
cdStartOffset = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_START_OFFSET_OFFSET);
|
|
481
491
|
} else {
|
|
482
492
|
zip64EoCDLocatorOffset = 0n;
|
|
@@ -484,6 +494,7 @@ var parseEoCDRecord = async (file) => {
|
|
|
484
494
|
return {
|
|
485
495
|
cdRecordsNumber,
|
|
486
496
|
cdStartOffset,
|
|
497
|
+
cdByteSize,
|
|
487
498
|
offsets: {
|
|
488
499
|
zip64EoCDOffset,
|
|
489
500
|
zip64EoCDLocatorOffset,
|
|
@@ -677,30 +688,35 @@ var ZIP64_EOCD_FIELDS = [
|
|
|
677
688
|
];
|
|
678
689
|
|
|
679
690
|
// dist/parse-zip/cd-file-header.js
|
|
680
|
-
var CD_COMPRESSED_SIZE_OFFSET =
|
|
681
|
-
var CD_UNCOMPRESSED_SIZE_OFFSET =
|
|
682
|
-
var CD_FILE_NAME_LENGTH_OFFSET =
|
|
683
|
-
var CD_EXTRA_FIELD_LENGTH_OFFSET =
|
|
684
|
-
var CD_START_DISK_OFFSET =
|
|
685
|
-
var CD_LOCAL_HEADER_OFFSET_OFFSET =
|
|
691
|
+
var CD_COMPRESSED_SIZE_OFFSET = 20;
|
|
692
|
+
var CD_UNCOMPRESSED_SIZE_OFFSET = 24;
|
|
693
|
+
var CD_FILE_NAME_LENGTH_OFFSET = 28;
|
|
694
|
+
var CD_EXTRA_FIELD_LENGTH_OFFSET = 30;
|
|
695
|
+
var CD_START_DISK_OFFSET = 32;
|
|
696
|
+
var CD_LOCAL_HEADER_OFFSET_OFFSET = 42;
|
|
686
697
|
var CD_FILE_NAME_OFFSET = 46n;
|
|
687
698
|
var signature2 = new Uint8Array([80, 75, 1, 2]);
|
|
688
699
|
var parseZipCDFileHeader = async (headerOffset, file) => {
|
|
689
|
-
|
|
700
|
+
if (headerOffset >= file.length) {
|
|
701
|
+
return null;
|
|
702
|
+
}
|
|
703
|
+
const mainHeader = new DataView(await file.slice(headerOffset, headerOffset + CD_FILE_NAME_OFFSET));
|
|
704
|
+
const magicBytes = mainHeader.buffer.slice(0, 4);
|
|
690
705
|
if (!(0, import_loader_utils3.compareArrayBuffers)(magicBytes, signature2.buffer)) {
|
|
691
706
|
return null;
|
|
692
707
|
}
|
|
693
|
-
const compressedSize = BigInt(
|
|
694
|
-
const uncompressedSize = BigInt(
|
|
695
|
-
const extraFieldLength =
|
|
696
|
-
const startDisk = BigInt(
|
|
697
|
-
const fileNameLength =
|
|
698
|
-
const
|
|
708
|
+
const compressedSize = BigInt(mainHeader.getUint32(CD_COMPRESSED_SIZE_OFFSET, true));
|
|
709
|
+
const uncompressedSize = BigInt(mainHeader.getUint32(CD_UNCOMPRESSED_SIZE_OFFSET, true));
|
|
710
|
+
const extraFieldLength = mainHeader.getUint16(CD_EXTRA_FIELD_LENGTH_OFFSET, true);
|
|
711
|
+
const startDisk = BigInt(mainHeader.getUint16(CD_START_DISK_OFFSET, true));
|
|
712
|
+
const fileNameLength = mainHeader.getUint16(CD_FILE_NAME_LENGTH_OFFSET, true);
|
|
713
|
+
const additionalHeader = await file.slice(headerOffset + CD_FILE_NAME_OFFSET, headerOffset + CD_FILE_NAME_OFFSET + BigInt(fileNameLength + extraFieldLength));
|
|
714
|
+
const filenameBytes = additionalHeader.slice(0, fileNameLength);
|
|
699
715
|
const fileName = new TextDecoder().decode(filenameBytes);
|
|
700
716
|
const extraOffset = headerOffset + CD_FILE_NAME_OFFSET + BigInt(fileNameLength);
|
|
701
|
-
const oldFormatOffset =
|
|
717
|
+
const oldFormatOffset = mainHeader.getUint32(CD_LOCAL_HEADER_OFFSET_OFFSET, true);
|
|
702
718
|
const localHeaderOffset = BigInt(oldFormatOffset);
|
|
703
|
-
const extraField = new DataView(
|
|
719
|
+
const extraField = new DataView(additionalHeader.slice(fileNameLength, additionalHeader.byteLength));
|
|
704
720
|
const zip64data = {
|
|
705
721
|
uncompressedSize,
|
|
706
722
|
compressedSize,
|
|
@@ -718,11 +734,12 @@ var parseZipCDFileHeader = async (headerOffset, file) => {
|
|
|
718
734
|
};
|
|
719
735
|
};
|
|
720
736
|
async function* makeZipCDHeaderIterator(fileProvider) {
|
|
721
|
-
const { cdStartOffset } = await parseEoCDRecord(fileProvider);
|
|
722
|
-
|
|
737
|
+
const { cdStartOffset, cdByteSize } = await parseEoCDRecord(fileProvider);
|
|
738
|
+
const centralDirectory = new import_loader_utils3.DataViewFile(new DataView(await fileProvider.slice(cdStartOffset, cdStartOffset + cdByteSize)));
|
|
739
|
+
let cdHeader = await parseZipCDFileHeader(0n, centralDirectory);
|
|
723
740
|
while (cdHeader) {
|
|
724
741
|
yield cdHeader;
|
|
725
|
-
cdHeader = await parseZipCDFileHeader(cdHeader.extraOffset + BigInt(cdHeader.extraFieldLength),
|
|
742
|
+
cdHeader = await parseZipCDFileHeader(cdHeader.extraOffset + BigInt(cdHeader.extraFieldLength), centralDirectory);
|
|
726
743
|
}
|
|
727
744
|
}
|
|
728
745
|
var getUint16 = (...bytes) => {
|
|
@@ -895,37 +912,40 @@ var ZIP_HEADER_FIELDS = [
|
|
|
895
912
|
|
|
896
913
|
// dist/parse-zip/local-file-header.js
|
|
897
914
|
var import_loader_utils4 = require("@loaders.gl/loader-utils");
|
|
898
|
-
var COMPRESSION_METHOD_OFFSET =
|
|
899
|
-
var COMPRESSED_SIZE_OFFSET =
|
|
900
|
-
var UNCOMPRESSED_SIZE_OFFSET =
|
|
901
|
-
var FILE_NAME_LENGTH_OFFSET =
|
|
902
|
-
var EXTRA_FIELD_LENGTH_OFFSET =
|
|
915
|
+
var COMPRESSION_METHOD_OFFSET = 8;
|
|
916
|
+
var COMPRESSED_SIZE_OFFSET = 18;
|
|
917
|
+
var UNCOMPRESSED_SIZE_OFFSET = 22;
|
|
918
|
+
var FILE_NAME_LENGTH_OFFSET = 26;
|
|
919
|
+
var EXTRA_FIELD_LENGTH_OFFSET = 28;
|
|
903
920
|
var FILE_NAME_OFFSET = 30n;
|
|
904
921
|
var signature3 = new Uint8Array([80, 75, 3, 4]);
|
|
905
|
-
var parseZipLocalFileHeader = async (headerOffset,
|
|
906
|
-
const
|
|
922
|
+
var parseZipLocalFileHeader = async (headerOffset, file) => {
|
|
923
|
+
const mainHeader = new DataView(await file.slice(headerOffset, headerOffset + FILE_NAME_OFFSET));
|
|
924
|
+
const magicBytes = mainHeader.buffer.slice(0, 4);
|
|
907
925
|
if (!(0, import_loader_utils4.compareArrayBuffers)(magicBytes, signature3)) {
|
|
908
926
|
return null;
|
|
909
927
|
}
|
|
910
|
-
const fileNameLength =
|
|
911
|
-
const
|
|
912
|
-
const
|
|
928
|
+
const fileNameLength = mainHeader.getUint16(FILE_NAME_LENGTH_OFFSET, true);
|
|
929
|
+
const extraFieldLength = mainHeader.getUint16(EXTRA_FIELD_LENGTH_OFFSET, true);
|
|
930
|
+
const additionalHeader = await file.slice(headerOffset + FILE_NAME_OFFSET, headerOffset + FILE_NAME_OFFSET + BigInt(fileNameLength + extraFieldLength));
|
|
931
|
+
const fileNameBuffer = additionalHeader.slice(0, fileNameLength);
|
|
932
|
+
const extraDataBuffer = new DataView(additionalHeader.slice(fileNameLength, additionalHeader.byteLength));
|
|
933
|
+
const fileName = new TextDecoder().decode(fileNameBuffer).split("\\").join("/");
|
|
913
934
|
let fileDataOffset = headerOffset + FILE_NAME_OFFSET + BigInt(fileNameLength + extraFieldLength);
|
|
914
|
-
const compressionMethod =
|
|
915
|
-
let compressedSize = BigInt(
|
|
916
|
-
let uncompressedSize = BigInt(
|
|
917
|
-
|
|
918
|
-
let offsetInZip64Data = 4n;
|
|
935
|
+
const compressionMethod = mainHeader.getUint16(COMPRESSION_METHOD_OFFSET, true);
|
|
936
|
+
let compressedSize = BigInt(mainHeader.getUint32(COMPRESSED_SIZE_OFFSET, true));
|
|
937
|
+
let uncompressedSize = BigInt(mainHeader.getUint32(UNCOMPRESSED_SIZE_OFFSET, true));
|
|
938
|
+
let offsetInZip64Data = 4;
|
|
919
939
|
if (uncompressedSize === BigInt(4294967295)) {
|
|
920
|
-
uncompressedSize =
|
|
921
|
-
offsetInZip64Data +=
|
|
940
|
+
uncompressedSize = extraDataBuffer.getBigUint64(offsetInZip64Data, true);
|
|
941
|
+
offsetInZip64Data += 8;
|
|
922
942
|
}
|
|
923
943
|
if (compressedSize === BigInt(4294967295)) {
|
|
924
|
-
compressedSize =
|
|
925
|
-
offsetInZip64Data +=
|
|
944
|
+
compressedSize = extraDataBuffer.getBigUint64(offsetInZip64Data, true);
|
|
945
|
+
offsetInZip64Data += 8;
|
|
926
946
|
}
|
|
927
947
|
if (fileDataOffset === BigInt(4294967295)) {
|
|
928
|
-
fileDataOffset =
|
|
948
|
+
fileDataOffset = extraDataBuffer.getBigUint64(offsetInZip64Data, true);
|
|
929
949
|
}
|
|
930
950
|
return {
|
|
931
951
|
fileNameLength,
|