@loaders.gl/zip 4.1.0-alpha.2 → 4.1.0-alpha.4
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 +155 -51
- package/dist/filesystems/zip-filesystem.d.ts.map +1 -1
- package/dist/filesystems/zip-filesystem.js.map +1 -1
- package/dist/hash-file-utility.d.ts.map +1 -1
- package/dist/hash-file-utility.js.map +1 -1
- package/dist/index.cjs +171 -49
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/tar/header.d.ts.map +1 -1
- package/dist/lib/tar/header.js.map +1 -1
- package/dist/lib/tar/tar.d.ts.map +1 -1
- package/dist/lib/tar/tar.js.map +1 -1
- package/dist/lib/tar/types.d.ts.map +1 -1
- package/dist/lib/tar/types.js.map +1 -1
- package/dist/lib/tar/utils.d.ts.map +1 -1
- package/dist/lib/tar/utils.js.map +1 -1
- package/dist/parse-zip/cd-file-header.d.ts +1 -1
- package/dist/parse-zip/cd-file-header.d.ts.map +1 -1
- package/dist/parse-zip/cd-file-header.js +4 -4
- package/dist/parse-zip/cd-file-header.js.map +1 -1
- package/dist/parse-zip/end-of-central-directory.d.ts +19 -0
- package/dist/parse-zip/end-of-central-directory.d.ts.map +1 -1
- package/dist/parse-zip/end-of-central-directory.js +42 -8
- package/dist/parse-zip/end-of-central-directory.js.map +1 -1
- package/dist/parse-zip/local-file-header.d.ts +16 -0
- package/dist/parse-zip/local-file-header.d.ts.map +1 -1
- package/dist/parse-zip/local-file-header.js +73 -1
- package/dist/parse-zip/local-file-header.js.map +1 -1
- package/dist/parse-zip/search-from-the-end.d.ts.map +1 -1
- package/dist/parse-zip/search-from-the-end.js.map +1 -1
- package/dist/parse-zip/zip-compozition.d.ts +8 -0
- package/dist/parse-zip/zip-compozition.d.ts.map +1 -0
- package/dist/parse-zip/zip-compozition.js +43 -0
- package/dist/parse-zip/zip-compozition.js.map +1 -0
- package/dist/parse-zip/zip64-info-generation.d.ts +5 -8
- package/dist/parse-zip/zip64-info-generation.d.ts.map +1 -1
- package/dist/parse-zip/zip64-info-generation.js +6 -3
- package/dist/parse-zip/zip64-info-generation.js.map +1 -1
- package/dist/tar-builder.d.ts.map +1 -1
- package/dist/tar-builder.js.map +1 -1
- package/dist/zip-loader.d.ts.map +1 -1
- package/dist/zip-loader.js +1 -1
- package/dist/zip-loader.js.map +1 -1
- package/dist/zip-writer.d.ts +2 -2
- package/dist/zip-writer.d.ts.map +1 -1
- package/dist/zip-writer.js +22 -7
- package/dist/zip-writer.js.map +1 -1
- package/package.json +5 -5
- package/src/filesystems/zip-filesystem.ts +2 -1
- package/src/hash-file-utility.ts +2 -1
- package/src/index.ts +4 -2
- package/src/lib/tar/header.ts +2 -1
- package/src/lib/tar/tar.ts +2 -1
- package/src/lib/tar/types.ts +2 -1
- package/src/lib/tar/utils.ts +2 -1
- package/src/parse-zip/cd-file-header.ts +8 -6
- package/src/parse-zip/end-of-central-directory.ts +97 -9
- package/src/parse-zip/local-file-header.ts +128 -2
- package/src/parse-zip/search-from-the-end.ts +2 -1
- package/src/parse-zip/zip-compozition.ts +113 -0
- package/src/parse-zip/zip64-info-generation.ts +20 -4
- package/src/tar-builder.ts +2 -1
- package/src/zip-loader.ts +2 -1
- package/src/zip-writer.ts +24 -10
package/dist/dist.dev.js
CHANGED
|
@@ -6957,6 +6957,7 @@ var __exports__ = (() => {
|
|
|
6957
6957
|
ZipLoader: () => ZipLoader,
|
|
6958
6958
|
ZipWriter: () => ZipWriter,
|
|
6959
6959
|
generateCDHeader: () => generateCDHeader,
|
|
6960
|
+
generateLocalHeader: () => generateLocalHeader,
|
|
6960
6961
|
localHeaderSignature: () => signature3,
|
|
6961
6962
|
makeHashTableFromZipHeaders: () => makeHashTableFromZipHeaders,
|
|
6962
6963
|
makeZipCDHeaderIterator: () => makeZipCDHeaderIterator,
|
|
@@ -6969,7 +6970,7 @@ var __exports__ = (() => {
|
|
|
6969
6970
|
|
|
6970
6971
|
// src/zip-loader.ts
|
|
6971
6972
|
var import_jszip = __toESM(require_jszip_min(), 1);
|
|
6972
|
-
var VERSION =
|
|
6973
|
+
var VERSION = true ? "4.1.0-alpha.4" : "latest";
|
|
6973
6974
|
var ZipLoader = {
|
|
6974
6975
|
id: "zip",
|
|
6975
6976
|
module: "zip",
|
|
@@ -7014,11 +7015,22 @@ var __exports__ = (() => {
|
|
|
7014
7015
|
|
|
7015
7016
|
// src/zip-writer.ts
|
|
7016
7017
|
var import_jszip2 = __toESM(require_jszip_min(), 1);
|
|
7018
|
+
var VERSION2 = true ? "4.1.0-alpha.4" : "latest";
|
|
7017
7019
|
var ZipWriter = {
|
|
7018
7020
|
name: "Zip Archive",
|
|
7021
|
+
id: "zip",
|
|
7022
|
+
module: "zip",
|
|
7023
|
+
version: VERSION2,
|
|
7019
7024
|
extensions: ["zip"],
|
|
7020
7025
|
category: "archive",
|
|
7021
7026
|
mimeTypes: ["application/zip"],
|
|
7027
|
+
options: {
|
|
7028
|
+
zip: {
|
|
7029
|
+
onUpdate: () => {
|
|
7030
|
+
}
|
|
7031
|
+
},
|
|
7032
|
+
jszip: {}
|
|
7033
|
+
},
|
|
7022
7034
|
encode: encodeZipAsync
|
|
7023
7035
|
};
|
|
7024
7036
|
async function encodeZipAsync(fileMap, options = {}) {
|
|
@@ -7027,18 +7039,21 @@ var __exports__ = (() => {
|
|
|
7027
7039
|
const subFileData = fileMap[subFileName];
|
|
7028
7040
|
jsZip.file(subFileName, subFileData, options?.jszip || {});
|
|
7029
7041
|
}
|
|
7042
|
+
const zipOptions = {
|
|
7043
|
+
...ZipWriter.options.zip,
|
|
7044
|
+
...options?.zip
|
|
7045
|
+
};
|
|
7030
7046
|
const jszipOptions = {
|
|
7031
|
-
...options?.jszip,
|
|
7032
|
-
|
|
7047
|
+
...ZipWriter.options?.jszip,
|
|
7048
|
+
...options.jszip
|
|
7033
7049
|
};
|
|
7034
|
-
const {
|
|
7035
|
-
onUpdate = () => {
|
|
7036
|
-
}
|
|
7037
|
-
} = options;
|
|
7038
7050
|
try {
|
|
7039
|
-
return await jsZip.generateAsync(
|
|
7051
|
+
return await jsZip.generateAsync({
|
|
7052
|
+
...jszipOptions,
|
|
7053
|
+
type: "arraybuffer"
|
|
7054
|
+
}, zipOptions.onUpdate);
|
|
7040
7055
|
} catch (error) {
|
|
7041
|
-
options.log.error(`Unable to
|
|
7056
|
+
options.log.error(`Unable to encode zip archive: ${error}`);
|
|
7042
7057
|
throw error;
|
|
7043
7058
|
}
|
|
7044
7059
|
}
|
|
@@ -7361,6 +7376,12 @@ var __exports__ = (() => {
|
|
|
7361
7376
|
async stat() {
|
|
7362
7377
|
throw NOT_IMPLEMENTED;
|
|
7363
7378
|
}
|
|
7379
|
+
async truncate(length) {
|
|
7380
|
+
throw NOT_IMPLEMENTED;
|
|
7381
|
+
}
|
|
7382
|
+
async append(data) {
|
|
7383
|
+
throw NOT_IMPLEMENTED;
|
|
7384
|
+
}
|
|
7364
7385
|
async close() {
|
|
7365
7386
|
}
|
|
7366
7387
|
};
|
|
@@ -7372,9 +7393,14 @@ var __exports__ = (() => {
|
|
|
7372
7393
|
|
|
7373
7394
|
// ../loader-utils/src/lib/file-provider/file-handle-file.ts
|
|
7374
7395
|
var FileHandleFile = class {
|
|
7375
|
-
constructor(path) {
|
|
7376
|
-
this.file = new NodeFileFacade(path, "r");
|
|
7377
|
-
|
|
7396
|
+
constructor(path, append = false) {
|
|
7397
|
+
this.file = new NodeFileFacade(path, append ? "a+" : "r");
|
|
7398
|
+
}
|
|
7399
|
+
async truncate(length) {
|
|
7400
|
+
await this.file.truncate(length);
|
|
7401
|
+
}
|
|
7402
|
+
async append(buffer) {
|
|
7403
|
+
await this.file.append(buffer);
|
|
7378
7404
|
}
|
|
7379
7405
|
async destroy() {
|
|
7380
7406
|
await this.file.close();
|
|
@@ -7420,7 +7446,7 @@ var __exports__ = (() => {
|
|
|
7420
7446
|
return await this.file.read(startOffset, length);
|
|
7421
7447
|
}
|
|
7422
7448
|
get length() {
|
|
7423
|
-
return this.
|
|
7449
|
+
return this.file.bigsize;
|
|
7424
7450
|
}
|
|
7425
7451
|
};
|
|
7426
7452
|
|
|
@@ -7441,39 +7467,6 @@ var __exports__ = (() => {
|
|
|
7441
7467
|
return targetOffset;
|
|
7442
7468
|
};
|
|
7443
7469
|
|
|
7444
|
-
// src/parse-zip/end-of-central-directory.ts
|
|
7445
|
-
var eoCDSignature = new Uint8Array([80, 75, 5, 6]);
|
|
7446
|
-
var zip64EoCDLocatorSignature = new Uint8Array([80, 75, 6, 7]);
|
|
7447
|
-
var zip64EoCDSignature = new Uint8Array([80, 75, 6, 6]);
|
|
7448
|
-
var CD_RECORDS_NUMBER_OFFSET = 8n;
|
|
7449
|
-
var CD_START_OFFSET_OFFSET = 16n;
|
|
7450
|
-
var ZIP64_EOCD_START_OFFSET_OFFSET = 8n;
|
|
7451
|
-
var ZIP64_CD_RECORDS_NUMBER_OFFSET = 24n;
|
|
7452
|
-
var ZIP64_CD_START_OFFSET_OFFSET = 48n;
|
|
7453
|
-
var parseEoCDRecord = async (file) => {
|
|
7454
|
-
const zipEoCDOffset = await searchFromTheEnd(file, eoCDSignature);
|
|
7455
|
-
let cdRecordsNumber = BigInt(await file.getUint16(zipEoCDOffset + CD_RECORDS_NUMBER_OFFSET));
|
|
7456
|
-
let cdStartOffset = BigInt(await file.getUint32(zipEoCDOffset + CD_START_OFFSET_OFFSET));
|
|
7457
|
-
if (cdStartOffset === BigInt(4294967295) || cdRecordsNumber === BigInt(4294967295)) {
|
|
7458
|
-
const zip64EoCDLocatorOffset = zipEoCDOffset - 20n;
|
|
7459
|
-
const magicBytes = await file.slice(zip64EoCDLocatorOffset, zip64EoCDLocatorOffset + 4n);
|
|
7460
|
-
if (!compareArrayBuffers(magicBytes, zip64EoCDLocatorSignature)) {
|
|
7461
|
-
throw new Error("zip64 EoCD locator not found");
|
|
7462
|
-
}
|
|
7463
|
-
const zip64EoCDOffset = await file.getBigUint64(zip64EoCDLocatorOffset + ZIP64_EOCD_START_OFFSET_OFFSET);
|
|
7464
|
-
const endOfCDMagicBytes = await file.slice(zip64EoCDOffset, zip64EoCDOffset + 4n);
|
|
7465
|
-
if (!compareArrayBuffers(endOfCDMagicBytes, zip64EoCDSignature.buffer)) {
|
|
7466
|
-
throw new Error("zip64 EoCD not found");
|
|
7467
|
-
}
|
|
7468
|
-
cdRecordsNumber = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_RECORDS_NUMBER_OFFSET);
|
|
7469
|
-
cdStartOffset = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_START_OFFSET_OFFSET);
|
|
7470
|
-
}
|
|
7471
|
-
return {
|
|
7472
|
-
cdRecordsNumber,
|
|
7473
|
-
cdStartOffset
|
|
7474
|
-
};
|
|
7475
|
-
};
|
|
7476
|
-
|
|
7477
7470
|
// src/parse-zip/zip64-info-generation.ts
|
|
7478
7471
|
var signature = new Uint8Array([1, 0]);
|
|
7479
7472
|
function createZip64Info(options) {
|
|
@@ -7492,12 +7485,15 @@ var __exports__ = (() => {
|
|
|
7492
7485
|
}
|
|
7493
7486
|
return concatenateArrayBuffers(...arraysToConcat);
|
|
7494
7487
|
}
|
|
7488
|
+
function setFieldToNumber(header, fieldSize, fieldOffset, value) {
|
|
7489
|
+
NUMBER_SETTERS[fieldSize](header, Number(fieldOffset), value);
|
|
7490
|
+
}
|
|
7495
7491
|
var NUMBER_SETTERS = {
|
|
7496
7492
|
2: (header, offset, value) => {
|
|
7497
|
-
header.setUint16(offset, value, true);
|
|
7493
|
+
header.setUint16(offset, Number(value), true);
|
|
7498
7494
|
},
|
|
7499
7495
|
4: (header, offset, value) => {
|
|
7500
|
-
header.setUint32(offset, value, true);
|
|
7496
|
+
header.setUint32(offset, Number(value), true);
|
|
7501
7497
|
},
|
|
7502
7498
|
8: (header, offset, value) => {
|
|
7503
7499
|
header.setBigUint64(offset, BigInt(value), true);
|
|
@@ -7520,6 +7516,44 @@ var __exports__ = (() => {
|
|
|
7520
7516
|
name: "offset"
|
|
7521
7517
|
}];
|
|
7522
7518
|
|
|
7519
|
+
// src/parse-zip/end-of-central-directory.ts
|
|
7520
|
+
var eoCDSignature = new Uint8Array([80, 75, 5, 6]);
|
|
7521
|
+
var zip64EoCDLocatorSignature = new Uint8Array([80, 75, 6, 7]);
|
|
7522
|
+
var zip64EoCDSignature = new Uint8Array([80, 75, 6, 6]);
|
|
7523
|
+
var CD_RECORDS_NUMBER_OFFSET = 8n;
|
|
7524
|
+
var CD_START_OFFSET_OFFSET = 16n;
|
|
7525
|
+
var ZIP64_EOCD_START_OFFSET_OFFSET = 8n;
|
|
7526
|
+
var ZIP64_CD_RECORDS_NUMBER_OFFSET = 24n;
|
|
7527
|
+
var ZIP64_CD_START_OFFSET_OFFSET = 48n;
|
|
7528
|
+
var parseEoCDRecord = async (file) => {
|
|
7529
|
+
const zipEoCDOffset = await searchFromTheEnd(file, eoCDSignature);
|
|
7530
|
+
let cdRecordsNumber = BigInt(await file.getUint16(zipEoCDOffset + CD_RECORDS_NUMBER_OFFSET));
|
|
7531
|
+
let cdStartOffset = BigInt(await file.getUint32(zipEoCDOffset + CD_START_OFFSET_OFFSET));
|
|
7532
|
+
let zip64EoCDLocatorOffset = zipEoCDOffset - 20n;
|
|
7533
|
+
let zip64EoCDOffset = 0n;
|
|
7534
|
+
const magicBytes = await file.slice(zip64EoCDLocatorOffset, zip64EoCDLocatorOffset + 4n);
|
|
7535
|
+
if (compareArrayBuffers(magicBytes, zip64EoCDLocatorSignature)) {
|
|
7536
|
+
zip64EoCDOffset = await file.getBigUint64(zip64EoCDLocatorOffset + ZIP64_EOCD_START_OFFSET_OFFSET);
|
|
7537
|
+
const endOfCDMagicBytes = await file.slice(zip64EoCDOffset, zip64EoCDOffset + 4n);
|
|
7538
|
+
if (!compareArrayBuffers(endOfCDMagicBytes, zip64EoCDSignature.buffer)) {
|
|
7539
|
+
throw new Error("zip64 EoCD not found");
|
|
7540
|
+
}
|
|
7541
|
+
cdRecordsNumber = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_RECORDS_NUMBER_OFFSET);
|
|
7542
|
+
cdStartOffset = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_START_OFFSET_OFFSET);
|
|
7543
|
+
} else {
|
|
7544
|
+
zip64EoCDLocatorOffset = 0n;
|
|
7545
|
+
}
|
|
7546
|
+
return {
|
|
7547
|
+
cdRecordsNumber,
|
|
7548
|
+
cdStartOffset,
|
|
7549
|
+
offsets: {
|
|
7550
|
+
zip64EoCDOffset,
|
|
7551
|
+
zip64EoCDLocatorOffset,
|
|
7552
|
+
zipEoCDOffset
|
|
7553
|
+
}
|
|
7554
|
+
};
|
|
7555
|
+
};
|
|
7556
|
+
|
|
7523
7557
|
// src/parse-zip/cd-file-header.ts
|
|
7524
7558
|
var CD_COMPRESSED_SIZE_OFFSET = 20n;
|
|
7525
7559
|
var CD_UNCOMPRESSED_SIZE_OFFSET = 24n;
|
|
@@ -7627,7 +7661,7 @@ var __exports__ = (() => {
|
|
|
7627
7661
|
const optionsToZip64 = {};
|
|
7628
7662
|
if (optionsToUse.offset >= 4294967295) {
|
|
7629
7663
|
optionsToZip64.offset = optionsToUse.offset;
|
|
7630
|
-
optionsToUse.offset = 4294967295;
|
|
7664
|
+
optionsToUse.offset = BigInt(4294967295);
|
|
7631
7665
|
}
|
|
7632
7666
|
if (optionsToUse.length >= 4294967295) {
|
|
7633
7667
|
optionsToZip64.size = optionsToUse.length;
|
|
@@ -7637,9 +7671,9 @@ var __exports__ = (() => {
|
|
|
7637
7671
|
zip64header = createZip64Info(optionsToZip64);
|
|
7638
7672
|
optionsToUse.extraLength = zip64header.byteLength;
|
|
7639
7673
|
}
|
|
7640
|
-
const header = new DataView(new ArrayBuffer(
|
|
7674
|
+
const header = new DataView(new ArrayBuffer(Number(CD_FILE_NAME_OFFSET)));
|
|
7641
7675
|
for (const field of ZIP_HEADER_FIELDS) {
|
|
7642
|
-
|
|
7676
|
+
setFieldToNumber(header, field.size, field.offset, optionsToUse[field.name ?? ""] ?? field.default ?? 0);
|
|
7643
7677
|
}
|
|
7644
7678
|
const encodedName = new TextEncoder().encode(optionsToUse.fileName);
|
|
7645
7679
|
const resHeader = concatenateArrayBuffers(header.buffer, encodedName, zip64header);
|
|
@@ -7758,6 +7792,76 @@ var __exports__ = (() => {
|
|
|
7758
7792
|
compressionMethod
|
|
7759
7793
|
};
|
|
7760
7794
|
};
|
|
7795
|
+
function generateLocalHeader(options) {
|
|
7796
|
+
const optionsToUse = {
|
|
7797
|
+
...options,
|
|
7798
|
+
extraLength: 0,
|
|
7799
|
+
fnlength: options.fileName.length
|
|
7800
|
+
};
|
|
7801
|
+
let zip64header = new ArrayBuffer(0);
|
|
7802
|
+
const optionsToZip64 = {};
|
|
7803
|
+
if (optionsToUse.length >= 4294967295) {
|
|
7804
|
+
optionsToZip64.size = optionsToUse.length;
|
|
7805
|
+
optionsToUse.length = 4294967295;
|
|
7806
|
+
}
|
|
7807
|
+
if (Object.keys(optionsToZip64).length) {
|
|
7808
|
+
zip64header = createZip64Info(optionsToZip64);
|
|
7809
|
+
optionsToUse.extraLength = zip64header.byteLength;
|
|
7810
|
+
}
|
|
7811
|
+
const header = new DataView(new ArrayBuffer(Number(FILE_NAME_OFFSET)));
|
|
7812
|
+
for (const field of ZIP_HEADER_FIELDS2) {
|
|
7813
|
+
setFieldToNumber(header, field.size, field.offset, optionsToUse[field.name ?? ""] ?? field.default ?? 0);
|
|
7814
|
+
}
|
|
7815
|
+
const encodedName = new TextEncoder().encode(optionsToUse.fileName);
|
|
7816
|
+
const resHeader = concatenateArrayBuffers(header.buffer, encodedName, zip64header);
|
|
7817
|
+
return resHeader;
|
|
7818
|
+
}
|
|
7819
|
+
var ZIP_HEADER_FIELDS2 = [{
|
|
7820
|
+
offset: 0,
|
|
7821
|
+
size: 4,
|
|
7822
|
+
default: new DataView(signature3.buffer).getUint32(0, true)
|
|
7823
|
+
}, {
|
|
7824
|
+
offset: 4,
|
|
7825
|
+
size: 2,
|
|
7826
|
+
default: 45
|
|
7827
|
+
}, {
|
|
7828
|
+
offset: 6,
|
|
7829
|
+
size: 2,
|
|
7830
|
+
default: 0
|
|
7831
|
+
}, {
|
|
7832
|
+
offset: 8,
|
|
7833
|
+
size: 2,
|
|
7834
|
+
default: 0
|
|
7835
|
+
}, {
|
|
7836
|
+
offset: 10,
|
|
7837
|
+
size: 2,
|
|
7838
|
+
default: 0
|
|
7839
|
+
}, {
|
|
7840
|
+
offset: 12,
|
|
7841
|
+
size: 2,
|
|
7842
|
+
default: 0
|
|
7843
|
+
}, {
|
|
7844
|
+
offset: 14,
|
|
7845
|
+
size: 4,
|
|
7846
|
+
name: "crc32"
|
|
7847
|
+
}, {
|
|
7848
|
+
offset: 18,
|
|
7849
|
+
size: 4,
|
|
7850
|
+
name: "length"
|
|
7851
|
+
}, {
|
|
7852
|
+
offset: 22,
|
|
7853
|
+
size: 4,
|
|
7854
|
+
name: "length"
|
|
7855
|
+
}, {
|
|
7856
|
+
offset: 26,
|
|
7857
|
+
size: 2,
|
|
7858
|
+
name: "fnlength"
|
|
7859
|
+
}, {
|
|
7860
|
+
offset: 28,
|
|
7861
|
+
size: 2,
|
|
7862
|
+
default: 0,
|
|
7863
|
+
name: "extraLength"
|
|
7864
|
+
}];
|
|
7761
7865
|
|
|
7762
7866
|
// ../crypto/src/lib/hash.ts
|
|
7763
7867
|
var Hash = class {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zip-filesystem.d.ts","sourceRoot":"","sources":["../../src/filesystems/zip-filesystem.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"zip-filesystem.d.ts","sourceRoot":"","sources":["../../src/filesystems/zip-filesystem.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,UAAU,EAAY,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAC,YAAY,EAAiB,MAAM,0BAA0B,CAAC;AAEtE,OAAO,EAAC,eAAe,EAA0B,MAAM,6BAA6B,CAAC;AAiBrF;;;GAGG;AACH,qBAAa,aAAc,YAAW,UAAU;IAC9C,oCAAoC;IACpC,SAAS,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAQ;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAEzB;;;OAGG;gBACS,IAAI,EAAE,YAAY,GAAG,MAAM;IAcvC,yBAAyB;IACnB,OAAO;IAMb;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAYlC;;;;OAIG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,CAAC;IAKvE;;;;OAIG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IA8BhD;;;;OAIG;YACW,eAAe;CAiB9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zip-filesystem.js","names":["isBrowser","isFileProvider","FileHandleFile","makeZipCDHeaderIterator","parseZipLocalFileHeader","DeflateCompression","COMPRESSION_METHODS","compressedFile","compression","raw","decompressedData","decompress","ZipFileSystem","constructor","file","fileProvider","fileName","Error","destroy","readdir","fileNames","zipCDIterator","cdHeader","push","stat","filename","cdFileHeader","getCDFileHeader","size","Number","uncompressedSize","fetch","localFileHeader","localHeaderOffset","compressionHandler","compressionMethod","toString","slice","fileDataOffset","compressedSize","uncompressedFile","response","Response","Object","defineProperty","value","result"],"sources":["../../src/filesystems/zip-filesystem.ts"],"sourcesContent":["// loaders.gl
|
|
1
|
+
{"version":3,"file":"zip-filesystem.js","names":["isBrowser","isFileProvider","FileHandleFile","makeZipCDHeaderIterator","parseZipLocalFileHeader","DeflateCompression","COMPRESSION_METHODS","compressedFile","compression","raw","decompressedData","decompress","ZipFileSystem","constructor","file","fileProvider","fileName","Error","destroy","readdir","fileNames","zipCDIterator","cdHeader","push","stat","filename","cdFileHeader","getCDFileHeader","size","Number","uncompressedSize","fetch","localFileHeader","localHeaderOffset","compressionHandler","compressionMethod","toString","slice","fileDataOffset","compressedSize","uncompressedFile","response","Response","Object","defineProperty","value","result"],"sources":["../../src/filesystems/zip-filesystem.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {FileSystem, isBrowser} from '@loaders.gl/loader-utils';\nimport {FileProvider, isFileProvider} from '@loaders.gl/loader-utils';\nimport {FileHandleFile} from '@loaders.gl/loader-utils';\nimport {ZipCDFileHeader, makeZipCDHeaderIterator} from '../parse-zip/cd-file-header';\nimport {parseZipLocalFileHeader} from '../parse-zip/local-file-header';\nimport {DeflateCompression} from '@loaders.gl/compression';\n\ntype CompressionHandler = (compressedFile: ArrayBuffer) => Promise<ArrayBuffer>;\n/** Handling different compression types in zip */\nconst COMPRESSION_METHODS: {[key: number]: CompressionHandler} = {\n /** No compression */\n 0: async (compressedFile) => compressedFile,\n /** Deflation */\n 8: async (compressedFile) => {\n const compression = new DeflateCompression({raw: true});\n const decompressedData = await compression.decompress(compressedFile);\n return decompressedData;\n }\n};\n\n/**\n * FileSystem adapter for a ZIP file\n * Holds FileProvider object that provides random access to archived files\n */\nexport class ZipFileSystem implements FileSystem {\n /** FileProvider instance promise */\n protected fileProvider: FileProvider | null = null;\n public fileName?: string;\n\n /**\n * Constructor\n * @param file - instance of FileProvider or file path string\n */\n constructor(file: FileProvider | string) {\n // Try to open file in NodeJS\n if (typeof file === 'string') {\n this.fileName = file;\n if (!isBrowser) {\n this.fileProvider = new FileHandleFile(file);\n } else {\n throw new Error('Cannot open file for random access in a WEB browser');\n }\n } else if (isFileProvider(file)) {\n this.fileProvider = file;\n }\n }\n\n /** Clean up resources */\n async destroy() {\n if (this.fileProvider) {\n await this.fileProvider.destroy();\n }\n }\n\n /**\n * Get file names list from zip archive\n * @returns array of file names\n */\n async readdir(): Promise<string[]> {\n if (!this.fileProvider) {\n throw new Error('No data detected in the zip archive');\n }\n const fileNames: string[] = [];\n const zipCDIterator = makeZipCDHeaderIterator(this.fileProvider);\n for await (const cdHeader of zipCDIterator) {\n fileNames.push(cdHeader.fileName);\n }\n return fileNames;\n }\n\n /**\n * Get file metadata\n * @param filename - name of a file\n * @returns central directory data\n */\n async stat(filename: string): Promise<ZipCDFileHeader & {size: number}> {\n const cdFileHeader = await this.getCDFileHeader(filename);\n return {...cdFileHeader, size: Number(cdFileHeader.uncompressedSize)};\n }\n\n /**\n * Implementation of fetch against this file system\n * @param filename - name of a file\n * @returns - Response with file data\n */\n async fetch(filename: string): Promise<Response> {\n if (!this.fileProvider) {\n throw new Error('No data detected in the zip archive');\n }\n const cdFileHeader = await this.getCDFileHeader(filename);\n const localFileHeader = await parseZipLocalFileHeader(\n cdFileHeader.localHeaderOffset,\n this.fileProvider\n );\n if (!localFileHeader) {\n throw new Error('Local file header has not been found in the zip archive`');\n }\n\n const compressionHandler = COMPRESSION_METHODS[localFileHeader.compressionMethod.toString()];\n if (!compressionHandler) {\n throw Error('Only Deflation compression is supported');\n }\n\n const compressedFile = await this.fileProvider.slice(\n localFileHeader.fileDataOffset,\n localFileHeader.fileDataOffset + localFileHeader.compressedSize\n );\n\n const uncompressedFile = await compressionHandler(compressedFile);\n\n const response = new Response(uncompressedFile);\n Object.defineProperty(response, 'url', {value: `${this.fileName || ''}/${filename}`});\n return response;\n }\n\n /**\n * Get central directory file header\n * @param filename - name of a file\n * @returns central directory file header\n */\n private async getCDFileHeader(filename: string): Promise<ZipCDFileHeader> {\n if (!this.fileProvider) {\n throw new Error('No data detected in the zip archive');\n }\n const zipCDIterator = makeZipCDHeaderIterator(this.fileProvider);\n let result: ZipCDFileHeader | null = null;\n for await (const cdHeader of zipCDIterator) {\n if (cdHeader.fileName === filename) {\n result = cdHeader;\n break;\n }\n }\n if (!result) {\n throw new Error('File has not been found in the zip archive');\n }\n return result;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash-file-utility.d.ts","sourceRoot":"","sources":["../src/hash-file-utility.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hash-file-utility.d.ts","sourceRoot":"","sources":["../src/hash-file-utility.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,YAAY,EAAC,MAAM,0BAA0B,CAAC;AAGtD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAY/E;AASD;;;;GAIG;AACH,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAejC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash-file-utility.js","names":["MD5Hash","makeZipCDHeaderIterator","parseHashTable","arrayBuffer","dataView","DataView","hashMap","i","byteLength","offset","getBigUint64","hash","bufferToHex","buffer","start","length","Uint8Array","map","x","toString","padStart","join","makeHashTableFromZipHeaders","fileProvider","zipCDIterator","md5Hash","textEncoder","TextEncoder","hashTable","cdHeader","filename","fileName","split","toLocaleLowerCase","encode","md5","localHeaderOffset"],"sources":["../src/hash-file-utility.ts"],"sourcesContent":["// loaders.gl
|
|
1
|
+
{"version":3,"file":"hash-file-utility.js","names":["MD5Hash","makeZipCDHeaderIterator","parseHashTable","arrayBuffer","dataView","DataView","hashMap","i","byteLength","offset","getBigUint64","hash","bufferToHex","buffer","start","length","Uint8Array","map","x","toString","padStart","join","makeHashTableFromZipHeaders","fileProvider","zipCDIterator","md5Hash","textEncoder","TextEncoder","hashTable","cdHeader","filename","fileName","split","toLocaleLowerCase","encode","md5","localHeaderOffset"],"sources":["../src/hash-file-utility.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {MD5Hash} from '@loaders.gl/crypto';\nimport {FileProvider} from '@loaders.gl/loader-utils';\nimport {makeZipCDHeaderIterator} from './parse-zip/cd-file-header';\n\n/**\n * Reads hash file from buffer and returns it in ready-to-use form\n * @param arrayBuffer - buffer containing hash file\n * @returns Map containing hash and offset\n */\nexport function parseHashTable(arrayBuffer: ArrayBuffer): Record<string, bigint> {\n const dataView = new DataView(arrayBuffer);\n\n const hashMap: Record<string, bigint> = {};\n\n for (let i = 0; i < arrayBuffer.byteLength; i = i + 24) {\n const offset = dataView.getBigUint64(i + 16, true);\n const hash = bufferToHex(arrayBuffer, i, 16);\n hashMap[hash] = offset;\n }\n\n return hashMap;\n}\n\nfunction bufferToHex(buffer: ArrayBuffer, start: number, length: number): string {\n // buffer is an ArrayBuffer\n return [...new Uint8Array(buffer, start, length)]\n .map((x) => x.toString(16).padStart(2, '0'))\n .join('');\n}\n\n/**\n * generates hash info from zip files \"central directory\"\n * @param fileProvider - provider of the archive\n * @returns ready to use hash info\n */\nexport async function makeHashTableFromZipHeaders(\n fileProvider: FileProvider\n): Promise<Record<string, bigint>> {\n const zipCDIterator = makeZipCDHeaderIterator(fileProvider);\n const md5Hash = new MD5Hash();\n const textEncoder = new TextEncoder();\n\n const hashTable: Record<string, bigint> = {};\n\n for await (const cdHeader of zipCDIterator) {\n const filename = cdHeader.fileName.split('\\\\').join('/').toLocaleLowerCase();\n const arrayBuffer = textEncoder.encode(filename).buffer;\n const md5 = await md5Hash.hash(arrayBuffer, 'hex');\n hashTable[md5] = cdHeader.localHeaderOffset;\n }\n\n return hashTable;\n}\n"],"mappings":"AAIA,SAAQA,OAAO,QAAO,oBAAoB;AAAC,SAEnCC,uBAAuB;AAO/B,OAAO,SAASC,cAAcA,CAACC,WAAwB,EAA0B;EAC/E,MAAMC,QAAQ,GAAG,IAAIC,QAAQ,CAACF,WAAW,CAAC;EAE1C,MAAMG,OAA+B,GAAG,CAAC,CAAC;EAE1C,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,WAAW,CAACK,UAAU,EAAED,CAAC,GAAGA,CAAC,GAAG,EAAE,EAAE;IACtD,MAAME,MAAM,GAAGL,QAAQ,CAACM,YAAY,CAACH,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC;IAClD,MAAMI,IAAI,GAAGC,WAAW,CAACT,WAAW,EAAEI,CAAC,EAAE,EAAE,CAAC;IAC5CD,OAAO,CAACK,IAAI,CAAC,GAAGF,MAAM;EACxB;EAEA,OAAOH,OAAO;AAChB;AAEA,SAASM,WAAWA,CAACC,MAAmB,EAAEC,KAAa,EAAEC,MAAc,EAAU;EAE/E,OAAO,CAAC,GAAG,IAAIC,UAAU,CAACH,MAAM,EAAEC,KAAK,EAAEC,MAAM,CAAC,CAAC,CAC9CE,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAC3CC,IAAI,CAAC,EAAE,CAAC;AACb;AAOA,OAAO,eAAeC,2BAA2BA,CAC/CC,YAA0B,EACO;EACjC,MAAMC,aAAa,GAAGvB,uBAAuB,CAACsB,YAAY,CAAC;EAC3D,MAAME,OAAO,GAAG,IAAIzB,OAAO,CAAC,CAAC;EAC7B,MAAM0B,WAAW,GAAG,IAAIC,WAAW,CAAC,CAAC;EAErC,MAAMC,SAAiC,GAAG,CAAC,CAAC;EAE5C,WAAW,MAAMC,QAAQ,IAAIL,aAAa,EAAE;IAC1C,MAAMM,QAAQ,GAAGD,QAAQ,CAACE,QAAQ,CAACC,KAAK,CAAC,IAAI,CAAC,CAACX,IAAI,CAAC,GAAG,CAAC,CAACY,iBAAiB,CAAC,CAAC;IAC5E,MAAM9B,WAAW,GAAGuB,WAAW,CAACQ,MAAM,CAACJ,QAAQ,CAAC,CAACjB,MAAM;IACvD,MAAMsB,GAAG,GAAG,MAAMV,OAAO,CAACd,IAAI,CAACR,WAAW,EAAE,KAAK,CAAC;IAClDyB,SAAS,CAACO,GAAG,CAAC,GAAGN,QAAQ,CAACO,iBAAiB;EAC7C;EAEA,OAAOR,SAAS;AAClB"}
|