@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/index.cjs
CHANGED
|
@@ -36,6 +36,7 @@ __export(src_exports, {
|
|
|
36
36
|
ZipLoader: () => ZipLoader,
|
|
37
37
|
ZipWriter: () => ZipWriter,
|
|
38
38
|
generateCDHeader: () => generateCDHeader,
|
|
39
|
+
generateLocalHeader: () => generateLocalHeader,
|
|
39
40
|
localHeaderSignature: () => signature3,
|
|
40
41
|
makeHashTableFromZipHeaders: () => makeHashTableFromZipHeaders,
|
|
41
42
|
makeZipCDHeaderIterator: () => makeZipCDHeaderIterator,
|
|
@@ -94,27 +95,41 @@ async function loadZipEntry(jsZip, subFilename, options = {}) {
|
|
|
94
95
|
|
|
95
96
|
// src/zip-writer.ts
|
|
96
97
|
var import_jszip2 = __toESM(require("jszip"), 1);
|
|
98
|
+
var VERSION2 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
|
|
97
99
|
var ZipWriter = {
|
|
98
100
|
name: "Zip Archive",
|
|
101
|
+
id: "zip",
|
|
102
|
+
module: "zip",
|
|
103
|
+
version: VERSION2,
|
|
99
104
|
extensions: ["zip"],
|
|
100
105
|
category: "archive",
|
|
101
106
|
mimeTypes: ["application/zip"],
|
|
102
|
-
|
|
107
|
+
options: {
|
|
108
|
+
zip: {
|
|
109
|
+
onUpdate: () => {
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
jszip: {}
|
|
113
|
+
},
|
|
103
114
|
encode: encodeZipAsync
|
|
104
115
|
};
|
|
105
116
|
async function encodeZipAsync(fileMap, options = {}) {
|
|
117
|
+
var _a;
|
|
106
118
|
const jsZip = new import_jszip2.default();
|
|
107
119
|
for (const subFileName in fileMap) {
|
|
108
120
|
const subFileData = fileMap[subFileName];
|
|
109
121
|
jsZip.file(subFileName, subFileData, (options == null ? void 0 : options.jszip) || {});
|
|
110
122
|
}
|
|
111
|
-
const
|
|
112
|
-
const {
|
|
113
|
-
} } = options;
|
|
123
|
+
const zipOptions = { ...ZipWriter.options.zip, ...options == null ? void 0 : options.zip };
|
|
124
|
+
const jszipOptions = { ...(_a = ZipWriter.options) == null ? void 0 : _a.jszip, ...options.jszip };
|
|
114
125
|
try {
|
|
115
|
-
return await jsZip.generateAsync(
|
|
126
|
+
return await jsZip.generateAsync(
|
|
127
|
+
{ ...jszipOptions, type: "arraybuffer" },
|
|
128
|
+
// generate an arraybuffer
|
|
129
|
+
zipOptions.onUpdate
|
|
130
|
+
);
|
|
116
131
|
} catch (error) {
|
|
117
|
-
options.log.error(`Unable to
|
|
132
|
+
options.log.error(`Unable to encode zip archive: ${error}`);
|
|
118
133
|
throw error;
|
|
119
134
|
}
|
|
120
135
|
}
|
|
@@ -338,7 +353,7 @@ var TarBuilder = class {
|
|
|
338
353
|
var import_loader_utils3 = require("@loaders.gl/loader-utils");
|
|
339
354
|
|
|
340
355
|
// src/parse-zip/end-of-central-directory.ts
|
|
341
|
-
var
|
|
356
|
+
var import_loader_utils2 = require("@loaders.gl/loader-utils");
|
|
342
357
|
|
|
343
358
|
// src/parse-zip/search-from-the-end.ts
|
|
344
359
|
var searchFromTheEnd = async (file, target) => {
|
|
@@ -362,43 +377,8 @@ var searchFromTheEnd = async (file, target) => {
|
|
|
362
377
|
return targetOffset;
|
|
363
378
|
};
|
|
364
379
|
|
|
365
|
-
// src/parse-zip/end-of-central-directory.ts
|
|
366
|
-
var eoCDSignature = new Uint8Array([80, 75, 5, 6]);
|
|
367
|
-
var zip64EoCDLocatorSignature = new Uint8Array([80, 75, 6, 7]);
|
|
368
|
-
var zip64EoCDSignature = new Uint8Array([80, 75, 6, 6]);
|
|
369
|
-
var CD_RECORDS_NUMBER_OFFSET = 8n;
|
|
370
|
-
var CD_START_OFFSET_OFFSET = 16n;
|
|
371
|
-
var ZIP64_EOCD_START_OFFSET_OFFSET = 8n;
|
|
372
|
-
var ZIP64_CD_RECORDS_NUMBER_OFFSET = 24n;
|
|
373
|
-
var ZIP64_CD_START_OFFSET_OFFSET = 48n;
|
|
374
|
-
var parseEoCDRecord = async (file) => {
|
|
375
|
-
const zipEoCDOffset = await searchFromTheEnd(file, eoCDSignature);
|
|
376
|
-
let cdRecordsNumber = BigInt(await file.getUint16(zipEoCDOffset + CD_RECORDS_NUMBER_OFFSET));
|
|
377
|
-
let cdStartOffset = BigInt(await file.getUint32(zipEoCDOffset + CD_START_OFFSET_OFFSET));
|
|
378
|
-
if (cdStartOffset === BigInt(4294967295) || cdRecordsNumber === BigInt(4294967295)) {
|
|
379
|
-
const zip64EoCDLocatorOffset = zipEoCDOffset - 20n;
|
|
380
|
-
const magicBytes = await file.slice(zip64EoCDLocatorOffset, zip64EoCDLocatorOffset + 4n);
|
|
381
|
-
if (!(0, import_loader_utils.compareArrayBuffers)(magicBytes, zip64EoCDLocatorSignature)) {
|
|
382
|
-
throw new Error("zip64 EoCD locator not found");
|
|
383
|
-
}
|
|
384
|
-
const zip64EoCDOffset = await file.getBigUint64(
|
|
385
|
-
zip64EoCDLocatorOffset + ZIP64_EOCD_START_OFFSET_OFFSET
|
|
386
|
-
);
|
|
387
|
-
const endOfCDMagicBytes = await file.slice(zip64EoCDOffset, zip64EoCDOffset + 4n);
|
|
388
|
-
if (!(0, import_loader_utils.compareArrayBuffers)(endOfCDMagicBytes, zip64EoCDSignature.buffer)) {
|
|
389
|
-
throw new Error("zip64 EoCD not found");
|
|
390
|
-
}
|
|
391
|
-
cdRecordsNumber = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_RECORDS_NUMBER_OFFSET);
|
|
392
|
-
cdStartOffset = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_START_OFFSET_OFFSET);
|
|
393
|
-
}
|
|
394
|
-
return {
|
|
395
|
-
cdRecordsNumber,
|
|
396
|
-
cdStartOffset
|
|
397
|
-
};
|
|
398
|
-
};
|
|
399
|
-
|
|
400
380
|
// src/parse-zip/zip64-info-generation.ts
|
|
401
|
-
var
|
|
381
|
+
var import_loader_utils = require("@loaders.gl/loader-utils");
|
|
402
382
|
var signature = new Uint8Array([1, 0]);
|
|
403
383
|
function createZip64Info(options) {
|
|
404
384
|
const optionsToUse = {
|
|
@@ -414,14 +394,17 @@ function createZip64Info(options) {
|
|
|
414
394
|
NUMBER_SETTERS[field.size](newValue, 0, optionsToUse[field.name ?? ""] ?? field.default);
|
|
415
395
|
arraysToConcat.push(newValue.buffer);
|
|
416
396
|
}
|
|
417
|
-
return (0,
|
|
397
|
+
return (0, import_loader_utils.concatenateArrayBuffers)(...arraysToConcat);
|
|
398
|
+
}
|
|
399
|
+
function setFieldToNumber(header, fieldSize, fieldOffset, value) {
|
|
400
|
+
NUMBER_SETTERS[fieldSize](header, Number(fieldOffset), value);
|
|
418
401
|
}
|
|
419
402
|
var NUMBER_SETTERS = {
|
|
420
403
|
2: (header, offset, value) => {
|
|
421
|
-
header.setUint16(offset, value, true);
|
|
404
|
+
header.setUint16(offset, Number(value), true);
|
|
422
405
|
},
|
|
423
406
|
4: (header, offset, value) => {
|
|
424
|
-
header.setUint32(offset, value, true);
|
|
407
|
+
header.setUint32(offset, Number(value), true);
|
|
425
408
|
},
|
|
426
409
|
8: (header, offset, value) => {
|
|
427
410
|
header.setBigUint64(offset, BigInt(value), true);
|
|
@@ -455,6 +438,46 @@ var ZIP64_FIELDS = [
|
|
|
455
438
|
}
|
|
456
439
|
];
|
|
457
440
|
|
|
441
|
+
// src/parse-zip/end-of-central-directory.ts
|
|
442
|
+
var eoCDSignature = new Uint8Array([80, 75, 5, 6]);
|
|
443
|
+
var zip64EoCDLocatorSignature = new Uint8Array([80, 75, 6, 7]);
|
|
444
|
+
var zip64EoCDSignature = new Uint8Array([80, 75, 6, 6]);
|
|
445
|
+
var CD_RECORDS_NUMBER_OFFSET = 8n;
|
|
446
|
+
var CD_START_OFFSET_OFFSET = 16n;
|
|
447
|
+
var ZIP64_EOCD_START_OFFSET_OFFSET = 8n;
|
|
448
|
+
var ZIP64_CD_RECORDS_NUMBER_OFFSET = 24n;
|
|
449
|
+
var ZIP64_CD_START_OFFSET_OFFSET = 48n;
|
|
450
|
+
var parseEoCDRecord = async (file) => {
|
|
451
|
+
const zipEoCDOffset = await searchFromTheEnd(file, eoCDSignature);
|
|
452
|
+
let cdRecordsNumber = BigInt(await file.getUint16(zipEoCDOffset + CD_RECORDS_NUMBER_OFFSET));
|
|
453
|
+
let cdStartOffset = BigInt(await file.getUint32(zipEoCDOffset + CD_START_OFFSET_OFFSET));
|
|
454
|
+
let zip64EoCDLocatorOffset = zipEoCDOffset - 20n;
|
|
455
|
+
let zip64EoCDOffset = 0n;
|
|
456
|
+
const magicBytes = await file.slice(zip64EoCDLocatorOffset, zip64EoCDLocatorOffset + 4n);
|
|
457
|
+
if ((0, import_loader_utils2.compareArrayBuffers)(magicBytes, zip64EoCDLocatorSignature)) {
|
|
458
|
+
zip64EoCDOffset = await file.getBigUint64(
|
|
459
|
+
zip64EoCDLocatorOffset + ZIP64_EOCD_START_OFFSET_OFFSET
|
|
460
|
+
);
|
|
461
|
+
const endOfCDMagicBytes = await file.slice(zip64EoCDOffset, zip64EoCDOffset + 4n);
|
|
462
|
+
if (!(0, import_loader_utils2.compareArrayBuffers)(endOfCDMagicBytes, zip64EoCDSignature.buffer)) {
|
|
463
|
+
throw new Error("zip64 EoCD not found");
|
|
464
|
+
}
|
|
465
|
+
cdRecordsNumber = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_RECORDS_NUMBER_OFFSET);
|
|
466
|
+
cdStartOffset = await file.getBigUint64(zip64EoCDOffset + ZIP64_CD_START_OFFSET_OFFSET);
|
|
467
|
+
} else {
|
|
468
|
+
zip64EoCDLocatorOffset = 0n;
|
|
469
|
+
}
|
|
470
|
+
return {
|
|
471
|
+
cdRecordsNumber,
|
|
472
|
+
cdStartOffset,
|
|
473
|
+
offsets: {
|
|
474
|
+
zip64EoCDOffset,
|
|
475
|
+
zip64EoCDLocatorOffset,
|
|
476
|
+
zipEoCDOffset
|
|
477
|
+
}
|
|
478
|
+
};
|
|
479
|
+
};
|
|
480
|
+
|
|
458
481
|
// src/parse-zip/cd-file-header.ts
|
|
459
482
|
var CD_COMPRESSED_SIZE_OFFSET = 20n;
|
|
460
483
|
var CD_UNCOMPRESSED_SIZE_OFFSET = 24n;
|
|
@@ -558,7 +581,7 @@ function generateCDHeader(options) {
|
|
|
558
581
|
const optionsToZip64 = {};
|
|
559
582
|
if (optionsToUse.offset >= 4294967295) {
|
|
560
583
|
optionsToZip64.offset = optionsToUse.offset;
|
|
561
|
-
optionsToUse.offset = 4294967295;
|
|
584
|
+
optionsToUse.offset = BigInt(4294967295);
|
|
562
585
|
}
|
|
563
586
|
if (optionsToUse.length >= 4294967295) {
|
|
564
587
|
optionsToZip64.size = optionsToUse.length;
|
|
@@ -568,10 +591,11 @@ function generateCDHeader(options) {
|
|
|
568
591
|
zip64header = createZip64Info(optionsToZip64);
|
|
569
592
|
optionsToUse.extraLength = zip64header.byteLength;
|
|
570
593
|
}
|
|
571
|
-
const header = new DataView(new ArrayBuffer(
|
|
594
|
+
const header = new DataView(new ArrayBuffer(Number(CD_FILE_NAME_OFFSET)));
|
|
572
595
|
for (const field of ZIP_HEADER_FIELDS) {
|
|
573
|
-
|
|
596
|
+
setFieldToNumber(
|
|
574
597
|
header,
|
|
598
|
+
field.size,
|
|
575
599
|
field.offset,
|
|
576
600
|
optionsToUse[field.name ?? ""] ?? field.default ?? 0
|
|
577
601
|
);
|
|
@@ -734,6 +758,104 @@ var parseZipLocalFileHeader = async (headerOffset, buffer) => {
|
|
|
734
758
|
compressionMethod
|
|
735
759
|
};
|
|
736
760
|
};
|
|
761
|
+
function generateLocalHeader(options) {
|
|
762
|
+
const optionsToUse = {
|
|
763
|
+
...options,
|
|
764
|
+
extraLength: 0,
|
|
765
|
+
fnlength: options.fileName.length
|
|
766
|
+
};
|
|
767
|
+
let zip64header = new ArrayBuffer(0);
|
|
768
|
+
const optionsToZip64 = {};
|
|
769
|
+
if (optionsToUse.length >= 4294967295) {
|
|
770
|
+
optionsToZip64.size = optionsToUse.length;
|
|
771
|
+
optionsToUse.length = 4294967295;
|
|
772
|
+
}
|
|
773
|
+
if (Object.keys(optionsToZip64).length) {
|
|
774
|
+
zip64header = createZip64Info(optionsToZip64);
|
|
775
|
+
optionsToUse.extraLength = zip64header.byteLength;
|
|
776
|
+
}
|
|
777
|
+
const header = new DataView(new ArrayBuffer(Number(FILE_NAME_OFFSET)));
|
|
778
|
+
for (const field of ZIP_HEADER_FIELDS2) {
|
|
779
|
+
setFieldToNumber(
|
|
780
|
+
header,
|
|
781
|
+
field.size,
|
|
782
|
+
field.offset,
|
|
783
|
+
optionsToUse[field.name ?? ""] ?? field.default ?? 0
|
|
784
|
+
);
|
|
785
|
+
}
|
|
786
|
+
const encodedName = new TextEncoder().encode(optionsToUse.fileName);
|
|
787
|
+
const resHeader = (0, import_loader_utils4.concatenateArrayBuffers)(header.buffer, encodedName, zip64header);
|
|
788
|
+
return resHeader;
|
|
789
|
+
}
|
|
790
|
+
var ZIP_HEADER_FIELDS2 = [
|
|
791
|
+
// Local file header signature = 0x04034b50
|
|
792
|
+
{
|
|
793
|
+
offset: 0,
|
|
794
|
+
size: 4,
|
|
795
|
+
default: new DataView(signature3.buffer).getUint32(0, true)
|
|
796
|
+
},
|
|
797
|
+
// Version needed to extract (minimum)
|
|
798
|
+
{
|
|
799
|
+
offset: 4,
|
|
800
|
+
size: 2,
|
|
801
|
+
default: 45
|
|
802
|
+
},
|
|
803
|
+
// General purpose bit flag
|
|
804
|
+
{
|
|
805
|
+
offset: 6,
|
|
806
|
+
size: 2,
|
|
807
|
+
default: 0
|
|
808
|
+
},
|
|
809
|
+
// Compression method
|
|
810
|
+
{
|
|
811
|
+
offset: 8,
|
|
812
|
+
size: 2,
|
|
813
|
+
default: 0
|
|
814
|
+
},
|
|
815
|
+
// File last modification time
|
|
816
|
+
{
|
|
817
|
+
offset: 10,
|
|
818
|
+
size: 2,
|
|
819
|
+
default: 0
|
|
820
|
+
},
|
|
821
|
+
// File last modification date
|
|
822
|
+
{
|
|
823
|
+
offset: 12,
|
|
824
|
+
size: 2,
|
|
825
|
+
default: 0
|
|
826
|
+
},
|
|
827
|
+
// CRC-32 of uncompressed data
|
|
828
|
+
{
|
|
829
|
+
offset: 14,
|
|
830
|
+
size: 4,
|
|
831
|
+
name: "crc32"
|
|
832
|
+
},
|
|
833
|
+
// Compressed size (or 0xffffffff for ZIP64)
|
|
834
|
+
{
|
|
835
|
+
offset: 18,
|
|
836
|
+
size: 4,
|
|
837
|
+
name: "length"
|
|
838
|
+
},
|
|
839
|
+
// Uncompressed size (or 0xffffffff for ZIP64)
|
|
840
|
+
{
|
|
841
|
+
offset: 22,
|
|
842
|
+
size: 4,
|
|
843
|
+
name: "length"
|
|
844
|
+
},
|
|
845
|
+
// File name length (n)
|
|
846
|
+
{
|
|
847
|
+
offset: 26,
|
|
848
|
+
size: 2,
|
|
849
|
+
name: "fnlength"
|
|
850
|
+
},
|
|
851
|
+
// Extra field length (m)
|
|
852
|
+
{
|
|
853
|
+
offset: 28,
|
|
854
|
+
size: 2,
|
|
855
|
+
default: 0,
|
|
856
|
+
name: "extraLength"
|
|
857
|
+
}
|
|
858
|
+
];
|
|
737
859
|
|
|
738
860
|
// src/hash-file-utility.ts
|
|
739
861
|
var import_crypto = require("@loaders.gl/crypto");
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { ZipLoader } from './zip-loader';
|
|
|
2
2
|
export { ZipWriter } from './zip-writer';
|
|
3
3
|
export { TarBuilder } from './tar-builder';
|
|
4
4
|
export { parseZipCDFileHeader, makeZipCDHeaderIterator, signature as CD_HEADER_SIGNATURE, generateCDHeader } from './parse-zip/cd-file-header';
|
|
5
|
-
export { parseZipLocalFileHeader, signature as localHeaderSignature } from './parse-zip/local-file-header';
|
|
5
|
+
export { parseZipLocalFileHeader, signature as localHeaderSignature, generateLocalHeader } from './parse-zip/local-file-header';
|
|
6
6
|
export { parseEoCDRecord } from './parse-zip/end-of-central-directory';
|
|
7
7
|
export { searchFromTheEnd } from './parse-zip/search-from-the-end';
|
|
8
8
|
export { parseHashTable, makeHashTableFromZipHeaders } from './hash-file-utility';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AACvC,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AACvC,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAEzC,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,SAAS,IAAI,mBAAmB,EAChC,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,uBAAuB,EACvB,SAAS,IAAI,oBAAoB,EACjC,mBAAmB,EACpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAC,eAAe,EAAC,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAC,gBAAgB,EAAC,MAAM,iCAAiC,CAAC;AAGjE,OAAO,EAAC,cAAc,EAAE,2BAA2B,EAAC,MAAM,qBAAqB,CAAC;AAEhF,OAAO,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@ export { ZipLoader } from "./zip-loader.js";
|
|
|
2
2
|
export { ZipWriter } from "./zip-writer.js";
|
|
3
3
|
export { TarBuilder } from "./tar-builder.js";
|
|
4
4
|
export { parseZipCDFileHeader, makeZipCDHeaderIterator, signature as CD_HEADER_SIGNATURE, generateCDHeader } from "./parse-zip/cd-file-header.js";
|
|
5
|
-
export { parseZipLocalFileHeader, signature as localHeaderSignature } from "./parse-zip/local-file-header.js";
|
|
5
|
+
export { parseZipLocalFileHeader, signature as localHeaderSignature, generateLocalHeader } from "./parse-zip/local-file-header.js";
|
|
6
6
|
export { parseEoCDRecord } from "./parse-zip/end-of-central-directory.js";
|
|
7
7
|
export { searchFromTheEnd } from "./parse-zip/search-from-the-end.js";
|
|
8
8
|
export { parseHashTable, makeHashTableFromZipHeaders } from "./hash-file-utility.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["ZipLoader","ZipWriter","TarBuilder","parseZipCDFileHeader","makeZipCDHeaderIterator","signature","CD_HEADER_SIGNATURE","generateCDHeader","parseZipLocalFileHeader","localHeaderSignature","parseEoCDRecord","searchFromTheEnd","parseHashTable","makeHashTableFromZipHeaders","ZipFileSystem"],"sources":["../src/index.ts"],"sourcesContent":["// loaders.gl
|
|
1
|
+
{"version":3,"file":"index.js","names":["ZipLoader","ZipWriter","TarBuilder","parseZipCDFileHeader","makeZipCDHeaderIterator","signature","CD_HEADER_SIGNATURE","generateCDHeader","parseZipLocalFileHeader","localHeaderSignature","generateLocalHeader","parseEoCDRecord","searchFromTheEnd","parseHashTable","makeHashTableFromZipHeaders","ZipFileSystem"],"sources":["../src/index.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport {ZipLoader} from './zip-loader';\nexport {ZipWriter} from './zip-writer';\nexport {TarBuilder} from './tar-builder';\n\nexport {\n parseZipCDFileHeader,\n makeZipCDHeaderIterator,\n signature as CD_HEADER_SIGNATURE,\n generateCDHeader\n} from './parse-zip/cd-file-header';\nexport {\n parseZipLocalFileHeader,\n signature as localHeaderSignature,\n generateLocalHeader\n} from './parse-zip/local-file-header';\nexport {parseEoCDRecord} from './parse-zip/end-of-central-directory';\nexport {searchFromTheEnd} from './parse-zip/search-from-the-end';\n\n// export type {HashElement} from './hash-file-utility';\nexport {parseHashTable, makeHashTableFromZipHeaders} from './hash-file-utility';\n\nexport {ZipFileSystem} from './filesystems/zip-filesystem';\n"],"mappings":"SAIQA,SAAS;AAAA,SACTC,SAAS;AAAA,SACTC,UAAU;AAAA,SAGhBC,oBAAoB,EACpBC,uBAAuB,EACvBC,SAAS,IAAIC,mBAAmB,EAChCC,gBAAgB;AAAA,SAGhBC,uBAAuB,EACvBH,SAAS,IAAII,oBAAoB,EACjCC,mBAAmB;AAAA,SAEbC,eAAe;AAAA,SACfC,gBAAgB;AAAA,SAGhBC,cAAc,EAAEC,2BAA2B;AAAA,SAE3CC,aAAa"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../src/lib/tar/header.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../src/lib/tar/header.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAe,OAAO,EAAC,MAAM,SAAS,CAAC;AAyCnD;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,UAAU,CAsB/E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.js","names":["utils","structure","fileName","fileMode","uid","gid","fileSize","mtime","checksum","type","linkName","ustar","owner","group","majorNumber","minorNumber","filenamePrefix","padding","format","data","cb","buffer","clean","offset","Object","entries","forEach","_ref","field","length","str","i","fieldLength","charCodeAt"],"sources":["../../../src/lib/tar/header.ts"],"sourcesContent":["// loaders.gl
|
|
1
|
+
{"version":3,"file":"header.js","names":["utils","structure","fileName","fileMode","uid","gid","fileSize","mtime","checksum","type","linkName","ustar","owner","group","majorNumber","minorNumber","filenamePrefix","padding","format","data","cb","buffer","clean","offset","Object","entries","forEach","_ref","field","length","str","i","fieldLength","charCodeAt"],"sources":["../../../src/lib/tar/header.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// This file is derived from the tar-js code base under MIT license\n// See https://github.com/beatgammit/tar-js/blob/master/LICENSE\n/*\n * tar-js\n * MIT (c) 2011 T. Jameson Little\n */\n/* eslint-disable */\nimport * as utils from './utils';\nimport type {TarStructure, TarData} from './types';\n/*\nstruct posix_header { // byte offset\n\tchar name[100]; // 0\n\tchar mode[8]; // 100\n\tchar uid[8]; // 108\n\tchar gid[8]; // 116\n\tchar size[12]; // 124\n\tchar mtime[12]; // 136\n\tchar chksum[8]; // 148\n\tchar typeflag; // 156\n\tchar linkname[100]; // 157\n\tchar magic[6]; // 257\n\tchar version[2]; // 263\n\tchar uname[32]; // 265\n\tchar gname[32]; // 297\n\tchar devmajor[8]; // 329\n\tchar devminor[8]; // 337\n\tchar prefix[155]; // 345\n // 500\n};\n*/\n\nconst structure: TarStructure = {\n fileName: 100,\n fileMode: 8,\n uid: 8,\n gid: 8,\n fileSize: 12,\n mtime: 12,\n checksum: 8,\n type: 1,\n linkName: 100,\n ustar: 8,\n owner: 32,\n group: 32,\n majorNumber: 8,\n minorNumber: 8,\n filenamePrefix: 155,\n padding: 12\n};\n/**\n * Getting the header\n * @param data\n * @param [cb]\n * @returns {Uint8Array} | Array\n */\nexport function format(data: TarData, cb?: any): [string, number][] | Uint8Array {\n const buffer = utils.clean(512);\n let offset = 0;\n\n Object.entries(structure).forEach(([field, length]) => {\n const str = data[field] || '';\n let i: number;\n let fieldLength: number;\n\n for (i = 0, fieldLength = str.length; i < fieldLength; i += 1) {\n buffer[offset] = str.charCodeAt(i);\n offset += 1;\n }\n\n // space it out with nulls\n offset += length - i;\n });\n\n if (typeof cb === 'function') {\n return cb(buffer, offset);\n }\n return buffer;\n}\n"],"mappings":"OAWO,KAAKA,KAAK;AAwBjB,MAAMC,SAAuB,GAAG;EAC9BC,QAAQ,EAAE,GAAG;EACbC,QAAQ,EAAE,CAAC;EACXC,GAAG,EAAE,CAAC;EACNC,GAAG,EAAE,CAAC;EACNC,QAAQ,EAAE,EAAE;EACZC,KAAK,EAAE,EAAE;EACTC,QAAQ,EAAE,CAAC;EACXC,IAAI,EAAE,CAAC;EACPC,QAAQ,EAAE,GAAG;EACbC,KAAK,EAAE,CAAC;EACRC,KAAK,EAAE,EAAE;EACTC,KAAK,EAAE,EAAE;EACTC,WAAW,EAAE,CAAC;EACdC,WAAW,EAAE,CAAC;EACdC,cAAc,EAAE,GAAG;EACnBC,OAAO,EAAE;AACX,CAAC;AAOD,OAAO,SAASC,MAAMA,CAACC,IAAa,EAAEC,EAAQ,EAAmC;EAC/E,MAAMC,MAAM,GAAGrB,KAAK,CAACsB,KAAK,CAAC,GAAG,CAAC;EAC/B,IAAIC,MAAM,GAAG,CAAC;EAEdC,MAAM,CAACC,OAAO,CAACxB,SAAS,CAAC,CAACyB,OAAO,CAACC,IAAA,IAAqB;IAAA,IAApB,CAACC,KAAK,EAAEC,MAAM,CAAC,GAAAF,IAAA;IAChD,MAAMG,GAAG,GAAGX,IAAI,CAACS,KAAK,CAAC,IAAI,EAAE;IAC7B,IAAIG,CAAS;IACb,IAAIC,WAAmB;IAEvB,KAAKD,CAAC,GAAG,CAAC,EAAEC,WAAW,GAAGF,GAAG,CAACD,MAAM,EAAEE,CAAC,GAAGC,WAAW,EAAED,CAAC,IAAI,CAAC,EAAE;MAC7DV,MAAM,CAACE,MAAM,CAAC,GAAGO,GAAG,CAACG,UAAU,CAACF,CAAC,CAAC;MAClCR,MAAM,IAAI,CAAC;IACb;IAGAA,MAAM,IAAIM,MAAM,GAAGE,CAAC;EACtB,CAAC,CAAC;EAEF,IAAI,OAAOX,EAAE,KAAK,UAAU,EAAE;IAC5B,OAAOA,EAAE,CAACC,MAAM,EAAEE,MAAM,CAAC;EAC3B;EACA,OAAOF,MAAM;AACf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tar.d.ts","sourceRoot":"","sources":["../../../src/lib/tar/tar.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tar.d.ts","sourceRoot":"","sources":["../../../src/lib/tar/tar.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAC,SAAS,EAAE,UAAU,EAAsB,MAAM,SAAS,CAAC;AAQxE,cAAM,GAAG;IACP,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,UAAU,CAAC;IAChB,MAAM,EAAE,SAAS,CAAM;IACvB,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;gBACS,eAAe,EAAE,MAAM,GAAG,SAAS;IAY/C;;;;;OAKG;IAEH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,SAAS;IA+DlF;;;OAGG;IACH,IAAI,IAAI,IAAI;IAkCZ;;OAEG;IACH,KAAK;CAIN;AAED,eAAe,GAAG,CAAC"}
|
package/dist/lib/tar/tar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tar.js","names":["clean","pad","stringToUint8","format","blockSize","headerLength","inputLength","recordSize","Tar","constructor","recordsPerBlock","written","out","blocks","length","save","bind","clear","append","filepath","input","opts","checksum","Uint8Array","prototype","errorInputMatch","exec","toString","errorInput","errorMessage","mode","parseInt","mtime","Math","floor","Number","Date","uid","gid","data","fileName","fileMode","fileSize","type","ustar","owner","group","Object","keys","forEach","key","i","value","charCodeAt","headerArr","ceil","push","header","buffers","chunks","Array","max","pow","chunk","b","arguments","undefined","c","buffer","set","Blob"],"sources":["../../../src/lib/tar/tar.ts"],"sourcesContent":["// loaders.gl
|
|
1
|
+
{"version":3,"file":"tar.js","names":["clean","pad","stringToUint8","format","blockSize","headerLength","inputLength","recordSize","Tar","constructor","recordsPerBlock","written","out","blocks","length","save","bind","clear","append","filepath","input","opts","checksum","Uint8Array","prototype","errorInputMatch","exec","toString","errorInput","errorMessage","mode","parseInt","mtime","Math","floor","Number","Date","uid","gid","data","fileName","fileMode","fileSize","type","ustar","owner","group","Object","keys","forEach","key","i","value","charCodeAt","headerArr","ceil","push","header","buffers","chunks","Array","max","pow","chunk","b","arguments","undefined","c","buffer","set","Blob"],"sources":["../../../src/lib/tar/tar.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// This file is derived from the tar-js code base under MIT license\n// See https://github.com/beatgammit/tar-js/blob/master/LICENSE\n/*\n * tar-js\n * MIT (c) 2011 T. Jameson Little\n */\n\nimport {clean, pad, stringToUint8} from './utils';\nimport {format} from './header';\nimport type {TarBlocks, TarOptions, TarChunks, TarChunk} from './types';\n\nlet blockSize: number;\nlet headerLength: number;\nlet inputLength: number;\n\nconst recordSize = 512;\n\nclass Tar {\n written: number;\n out: Uint8Array;\n blocks: TarBlocks = [];\n length: number;\n\n /**\n * @param [recordsPerBlock]\n */\n constructor(recordsPerBlock: number | undefined) {\n this.written = 0;\n blockSize = (recordsPerBlock || 20) * recordSize;\n this.out = clean(blockSize);\n\n this.blocks = [];\n this.length = 0;\n this.save = this.save.bind(this);\n this.clear = this.clear.bind(this);\n this.append = this.append.bind(this);\n }\n\n /**\n * Append a file to the tar archive\n * @param filepath\n * @param input\n * @param [opts]\n */\n // eslint-disable-next-line complexity\n append(filepath: string, input: string | Uint8Array, opts?: TarOptions | undefined) {\n let checksum: string | any;\n\n if (typeof input === 'string') {\n input = stringToUint8(input);\n } else if (input.constructor && input.constructor !== Uint8Array.prototype.constructor) {\n // @ts-ignore\n const errorInputMatch = /function\\s*([$A-Za-z_][0-9A-Za-z_]*)\\s*\\(/.exec(\n input.constructor.toString()\n );\n const errorInput = errorInputMatch && errorInputMatch[1];\n const errorMessage = `Invalid input type. You gave me: ${errorInput}`;\n throw errorMessage;\n }\n\n opts = opts || {};\n\n const mode = opts.mode || parseInt('777', 8) & 0xfff;\n const mtime = opts.mtime || Math.floor(Number(new Date()) / 1000);\n const uid = opts.uid || 0;\n const gid = opts.gid || 0;\n\n const data: Record<string, string> = {\n fileName: filepath,\n fileMode: pad(mode, 7),\n uid: pad(uid, 7),\n gid: pad(gid, 7),\n fileSize: pad(input.length, 11),\n mtime: pad(mtime, 11),\n checksum: ' ',\n // 0 = just a file\n type: '0',\n ustar: 'ustar ',\n owner: opts.owner || '',\n group: opts.group || ''\n };\n\n // calculate the checksum\n checksum = 0;\n Object.keys(data).forEach((key) => {\n let i: number;\n const value = data[key];\n let length: number;\n\n for (i = 0, length = value.length; i < length; i += 1) {\n checksum += value.charCodeAt(i);\n }\n });\n\n data.checksum = `${pad(checksum, 6)}\\u0000 `;\n\n const headerArr = format(data);\n\n headerLength = Math.ceil(headerArr.length / recordSize) * recordSize;\n inputLength = Math.ceil(input.length / recordSize) * recordSize;\n\n this.blocks.push({\n header: headerArr,\n input,\n headerLength,\n inputLength\n });\n }\n /**\n * Compiling data to a Blob object\n * @returns {Blob}\n */\n save(): Blob {\n const buffers: any = [];\n const chunks = new Array<TarChunks>();\n let length = 0;\n const max = Math.pow(2, 20);\n\n let chunk = new Array<TarChunk>();\n this.blocks.forEach((b: any = []) => {\n if (length + b.headerLength + b.inputLength > max) {\n chunks.push({blocks: chunk, length});\n chunk = [];\n length = 0;\n }\n chunk.push(b);\n length += b.headerLength + b.inputLength;\n });\n chunks.push({blocks: chunk, length});\n\n chunks.forEach((c: any = []) => {\n const buffer = new Uint8Array(c.length);\n let written = 0;\n c.blocks.forEach((b: any = []) => {\n buffer.set(b.header, written);\n written += b.headerLength;\n buffer.set(b.input, written);\n written += b.inputLength;\n });\n buffers.push(buffer);\n });\n\n buffers.push(new Uint8Array(2 * recordSize));\n\n return new Blob(buffers, {type: 'octet/stream'});\n }\n /**\n * Clear the data by its blocksize\n */\n clear() {\n this.written = 0;\n this.out = clean(blockSize);\n }\n}\n\nexport default Tar;\n"],"mappings":"SAWQA,KAAK,EAAEC,GAAG,EAAEC,aAAa;AAAA,SACzBC,MAAM;AAGd,IAAIC,SAAiB;AACrB,IAAIC,YAAoB;AACxB,IAAIC,WAAmB;AAEvB,MAAMC,UAAU,GAAG,GAAG;AAEtB,MAAMC,GAAG,CAAC;EASRC,WAAWA,CAACC,eAAmC,EAAE;IAAA,KARjDC,OAAO;IAAA,KACPC,GAAG;IAAA,KACHC,MAAM,GAAc,EAAE;IAAA,KACtBC,MAAM;IAMJ,IAAI,CAACH,OAAO,GAAG,CAAC;IAChBP,SAAS,GAAG,CAACM,eAAe,IAAI,EAAE,IAAIH,UAAU;IAChD,IAAI,CAACK,GAAG,GAAGZ,KAAK,CAACI,SAAS,CAAC;IAE3B,IAAI,CAACS,MAAM,GAAG,EAAE;IAChB,IAAI,CAACC,MAAM,GAAG,CAAC;IACf,IAAI,CAACC,IAAI,GAAG,IAAI,CAACA,IAAI,CAACC,IAAI,CAAC,IAAI,CAAC;IAChC,IAAI,CAACC,KAAK,GAAG,IAAI,CAACA,KAAK,CAACD,IAAI,CAAC,IAAI,CAAC;IAClC,IAAI,CAACE,MAAM,GAAG,IAAI,CAACA,MAAM,CAACF,IAAI,CAAC,IAAI,CAAC;EACtC;EASAE,MAAMA,CAACC,QAAgB,EAAEC,KAA0B,EAAEC,IAA6B,EAAE;IAClF,IAAIC,QAAsB;IAE1B,IAAI,OAAOF,KAAK,KAAK,QAAQ,EAAE;MAC7BA,KAAK,GAAGlB,aAAa,CAACkB,KAAK,CAAC;IAC9B,CAAC,MAAM,IAAIA,KAAK,CAACX,WAAW,IAAIW,KAAK,CAACX,WAAW,KAAKc,UAAU,CAACC,SAAS,CAACf,WAAW,EAAE;MAEtF,MAAMgB,eAAe,GAAG,2CAA2C,CAACC,IAAI,CACtEN,KAAK,CAACX,WAAW,CAACkB,QAAQ,CAAC,CAC7B,CAAC;MACD,MAAMC,UAAU,GAAGH,eAAe,IAAIA,eAAe,CAAC,CAAC,CAAC;MACxD,MAAMI,YAAY,GAAI,oCAAmCD,UAAW,EAAC;MACrE,MAAMC,YAAY;IACpB;IAEAR,IAAI,GAAGA,IAAI,IAAI,CAAC,CAAC;IAEjB,MAAMS,IAAI,GAAGT,IAAI,CAACS,IAAI,IAAIC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,KAAK;IACpD,MAAMC,KAAK,GAAGX,IAAI,CAACW,KAAK,IAAIC,IAAI,CAACC,KAAK,CAACC,MAAM,CAAC,IAAIC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACjE,MAAMC,GAAG,GAAGhB,IAAI,CAACgB,GAAG,IAAI,CAAC;IACzB,MAAMC,GAAG,GAAGjB,IAAI,CAACiB,GAAG,IAAI,CAAC;IAEzB,MAAMC,IAA4B,GAAG;MACnCC,QAAQ,EAAErB,QAAQ;MAClBsB,QAAQ,EAAExC,GAAG,CAAC6B,IAAI,EAAE,CAAC,CAAC;MACtBO,GAAG,EAAEpC,GAAG,CAACoC,GAAG,EAAE,CAAC,CAAC;MAChBC,GAAG,EAAErC,GAAG,CAACqC,GAAG,EAAE,CAAC,CAAC;MAChBI,QAAQ,EAAEzC,GAAG,CAACmB,KAAK,CAACN,MAAM,EAAE,EAAE,CAAC;MAC/BkB,KAAK,EAAE/B,GAAG,CAAC+B,KAAK,EAAE,EAAE,CAAC;MACrBV,QAAQ,EAAE,UAAU;MAEpBqB,IAAI,EAAE,GAAG;MACTC,KAAK,EAAE,SAAS;MAChBC,KAAK,EAAExB,IAAI,CAACwB,KAAK,IAAI,EAAE;MACvBC,KAAK,EAAEzB,IAAI,CAACyB,KAAK,IAAI;IACvB,CAAC;IAGDxB,QAAQ,GAAG,CAAC;IACZyB,MAAM,CAACC,IAAI,CAACT,IAAI,CAAC,CAACU,OAAO,CAAEC,GAAG,IAAK;MACjC,IAAIC,CAAS;MACb,MAAMC,KAAK,GAAGb,IAAI,CAACW,GAAG,CAAC;MACvB,IAAIpC,MAAc;MAElB,KAAKqC,CAAC,GAAG,CAAC,EAAErC,MAAM,GAAGsC,KAAK,CAACtC,MAAM,EAAEqC,CAAC,GAAGrC,MAAM,EAAEqC,CAAC,IAAI,CAAC,EAAE;QACrD7B,QAAQ,IAAI8B,KAAK,CAACC,UAAU,CAACF,CAAC,CAAC;MACjC;IACF,CAAC,CAAC;IAEFZ,IAAI,CAACjB,QAAQ,GAAI,GAAErB,GAAG,CAACqB,QAAQ,EAAE,CAAC,CAAE,SAAQ;IAE5C,MAAMgC,SAAS,GAAGnD,MAAM,CAACoC,IAAI,CAAC;IAE9BlC,YAAY,GAAG4B,IAAI,CAACsB,IAAI,CAACD,SAAS,CAACxC,MAAM,GAAGP,UAAU,CAAC,GAAGA,UAAU;IACpED,WAAW,GAAG2B,IAAI,CAACsB,IAAI,CAACnC,KAAK,CAACN,MAAM,GAAGP,UAAU,CAAC,GAAGA,UAAU;IAE/D,IAAI,CAACM,MAAM,CAAC2C,IAAI,CAAC;MACfC,MAAM,EAAEH,SAAS;MACjBlC,KAAK;MACLf,YAAY;MACZC;IACF,CAAC,CAAC;EACJ;EAKAS,IAAIA,CAAA,EAAS;IACX,MAAM2C,OAAY,GAAG,EAAE;IACvB,MAAMC,MAAM,GAAG,IAAIC,KAAK,CAAY,CAAC;IACrC,IAAI9C,MAAM,GAAG,CAAC;IACd,MAAM+C,GAAG,GAAG5B,IAAI,CAAC6B,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;IAE3B,IAAIC,KAAK,GAAG,IAAIH,KAAK,CAAW,CAAC;IACjC,IAAI,CAAC/C,MAAM,CAACoC,OAAO,CAAC,YAAiB;MAAA,IAAhBe,CAAM,GAAAC,SAAA,CAAAnD,MAAA,QAAAmD,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,EAAE;MAC9B,IAAInD,MAAM,GAAGkD,CAAC,CAAC3D,YAAY,GAAG2D,CAAC,CAAC1D,WAAW,GAAGuD,GAAG,EAAE;QACjDF,MAAM,CAACH,IAAI,CAAC;UAAC3C,MAAM,EAAEkD,KAAK;UAAEjD;QAAM,CAAC,CAAC;QACpCiD,KAAK,GAAG,EAAE;QACVjD,MAAM,GAAG,CAAC;MACZ;MACAiD,KAAK,CAACP,IAAI,CAACQ,CAAC,CAAC;MACblD,MAAM,IAAIkD,CAAC,CAAC3D,YAAY,GAAG2D,CAAC,CAAC1D,WAAW;IAC1C,CAAC,CAAC;IACFqD,MAAM,CAACH,IAAI,CAAC;MAAC3C,MAAM,EAAEkD,KAAK;MAAEjD;IAAM,CAAC,CAAC;IAEpC6C,MAAM,CAACV,OAAO,CAAC,YAAiB;MAAA,IAAhBkB,CAAM,GAAAF,SAAA,CAAAnD,MAAA,QAAAmD,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,EAAE;MACzB,MAAMG,MAAM,GAAG,IAAI7C,UAAU,CAAC4C,CAAC,CAACrD,MAAM,CAAC;MACvC,IAAIH,OAAO,GAAG,CAAC;MACfwD,CAAC,CAACtD,MAAM,CAACoC,OAAO,CAAC,YAAiB;QAAA,IAAhBe,CAAM,GAAAC,SAAA,CAAAnD,MAAA,QAAAmD,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,EAAE;QAC3BG,MAAM,CAACC,GAAG,CAACL,CAAC,CAACP,MAAM,EAAE9C,OAAO,CAAC;QAC7BA,OAAO,IAAIqD,CAAC,CAAC3D,YAAY;QACzB+D,MAAM,CAACC,GAAG,CAACL,CAAC,CAAC5C,KAAK,EAAET,OAAO,CAAC;QAC5BA,OAAO,IAAIqD,CAAC,CAAC1D,WAAW;MAC1B,CAAC,CAAC;MACFoD,OAAO,CAACF,IAAI,CAACY,MAAM,CAAC;IACtB,CAAC,CAAC;IAEFV,OAAO,CAACF,IAAI,CAAC,IAAIjC,UAAU,CAAC,CAAC,GAAGhB,UAAU,CAAC,CAAC;IAE5C,OAAO,IAAI+D,IAAI,CAACZ,OAAO,EAAE;MAACf,IAAI,EAAE;IAAc,CAAC,CAAC;EAClD;EAIA1B,KAAKA,CAAA,EAAG;IACN,IAAI,CAACN,OAAO,GAAG,CAAC;IAChB,IAAI,CAACC,GAAG,GAAGZ,KAAK,CAACI,SAAS,CAAC;EAC7B;AACF;AAEA,eAAeI,GAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/tar/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/tar/types.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB,CAAC;AACF;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;CAC/B,CAAC;AACF;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC;IACrB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AACF;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,KAAK,CAAC,EAAE,GAAG,CAAC;CACb,CAAC;AACF;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB,CAAC;AACF;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,GAAG,CAAC;CACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../src/lib/tar/types.ts"],"sourcesContent":["// loaders.gl
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../src/lib/tar/types.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/**\n * Structure of data\n */\nexport type TarStructure = {\n [index: string]: number;\n};\n/**\n * Image of input data\n */\nexport type TarData = {\n [index: string]: string | any;\n};\n/**\n * Describes inner content of the blocks in the Tar's constructor\n */\nexport type TarBlocks = {\n [index: string]: any;\n header?: Uint8Array;\n input?: string | Uint8Array;\n headerLength?: number;\n inputLength?: number;\n};\n/**\n * Describes additional options for Tar class\n */\nexport type TarOptions = {\n mode?: number;\n mtime?: number;\n uid?: number;\n gid?: number;\n owner?: any;\n group?: any;\n};\n/**\n * Array of numbers for TarChunks\n */\nexport type TarChunk = {\n [index: number]: any;\n};\n/**\n * Sections of binary data inside the Tar class\n */\nexport type TarChunks = {\n [index: number]: TarChunk;\n length?: number;\n blocks?: any;\n};\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/tar/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/tar/utils.ts"],"names":[],"mappings":"AAUA;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAOhD;AACD;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAGrE;AACD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAa1F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["clean","length","i","buffer","Uint8Array","pad","num","bytes","base","numStr","toString","substr","stringToUint8","input","out","offset","charCodeAt"],"sources":["../../../src/lib/tar/utils.ts"],"sourcesContent":["// loaders.gl
|
|
1
|
+
{"version":3,"file":"utils.js","names":["clean","length","i","buffer","Uint8Array","pad","num","bytes","base","numStr","toString","substr","stringToUint8","input","out","offset","charCodeAt"],"sources":["../../../src/lib/tar/utils.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// This file is derived from the tar-js code base under MIT license\n// See https://github.com/beatgammit/tar-js/blob/master/LICENSE\n/*\n * tar-js\n * MIT (c) 2011 T. Jameson Little\n */\n/**\n * Returns the memory area specified by length\n * @param length\n * @returns {Uint8Array}\n */\nexport function clean(length: number): Uint8Array {\n let i: number;\n const buffer = new Uint8Array(length);\n for (i = 0; i < length; i += 1) {\n buffer[i] = 0;\n }\n return buffer;\n}\n/**\n * Converting data to a string\n * @param num\n * @param bytes\n * @param base\n * @returns string\n */\nexport function pad(num: number, bytes: number, base?: number): string {\n const numStr = num.toString(base || 8);\n return '000000000000'.substr(numStr.length + 12 - bytes) + numStr;\n}\n/**\n * Converting input to binary data\n * @param input\n * @param out\n * @param offset\n * @returns {Uint8Array}\n */\nexport function stringToUint8(input: string, out?: Uint8Array, offset?: number): Uint8Array {\n let i: number;\n let length: number;\n\n out = out || clean(input.length);\n\n offset = offset || 0;\n for (i = 0, length = input.length; i < length; i += 1) {\n out[offset] = input.charCodeAt(i);\n offset += 1;\n }\n\n return out;\n}\n"],"mappings":"AAeA,OAAO,SAASA,KAAKA,CAACC,MAAc,EAAc;EAChD,IAAIC,CAAS;EACb,MAAMC,MAAM,GAAG,IAAIC,UAAU,CAACH,MAAM,CAAC;EACrC,KAAKC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,MAAM,EAAEC,CAAC,IAAI,CAAC,EAAE;IAC9BC,MAAM,CAACD,CAAC,CAAC,GAAG,CAAC;EACf;EACA,OAAOC,MAAM;AACf;AAQA,OAAO,SAASE,GAAGA,CAACC,GAAW,EAAEC,KAAa,EAAEC,IAAa,EAAU;EACrE,MAAMC,MAAM,GAAGH,GAAG,CAACI,QAAQ,CAACF,IAAI,IAAI,CAAC,CAAC;EACtC,OAAO,cAAc,CAACG,MAAM,CAACF,MAAM,CAACR,MAAM,GAAG,EAAE,GAAGM,KAAK,CAAC,GAAGE,MAAM;AACnE;AAQA,OAAO,SAASG,aAAaA,CAACC,KAAa,EAAEC,GAAgB,EAAEC,MAAe,EAAc;EAC1F,IAAIb,CAAS;EACb,IAAID,MAAc;EAElBa,GAAG,GAAGA,GAAG,IAAId,KAAK,CAACa,KAAK,CAACZ,MAAM,CAAC;EAEhCc,MAAM,GAAGA,MAAM,IAAI,CAAC;EACpB,KAAKb,CAAC,GAAG,CAAC,EAAED,MAAM,GAAGY,KAAK,CAACZ,MAAM,EAAEC,CAAC,GAAGD,MAAM,EAAEC,CAAC,IAAI,CAAC,EAAE;IACrDY,GAAG,CAACC,MAAM,CAAC,GAAGF,KAAK,CAACG,UAAU,CAACd,CAAC,CAAC;IACjCa,MAAM,IAAI,CAAC;EACb;EAEA,OAAOD,GAAG;AACZ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cd-file-header.d.ts","sourceRoot":"","sources":["../../src/parse-zip/cd-file-header.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cd-file-header.d.ts","sourceRoot":"","sources":["../../src/parse-zip/cd-file-header.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,YAAY,EAA+C,MAAM,0BAA0B,CAAC;AAEpG,OAAO,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAC;AAGnD;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,wBAAwB;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAyBF,eAAO,MAAM,SAAS,EAAE,YAAuD,CAAC;AAEhF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,iBACjB,MAAM,QACd,YAAY,KACjB,QAAQ,eAAe,GAAG,IAAI,CA2ChC,CAAC;AAEF;;;GAGG;AACH,wBAAuB,uBAAuB,CAC5C,YAAY,EAAE,YAAY,GACzB,aAAa,CAAC,eAAe,CAAC,CAUhC;AAoED,6CAA6C;AAC7C,KAAK,iBAAiB,GAAG;IACvB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,WAAW,CAuCxE"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { compareArrayBuffers, concatenateArrayBuffers } from '@loaders.gl/loader-utils';
|
|
2
2
|
import { parseEoCDRecord } from "./end-of-central-directory.js";
|
|
3
|
-
import { createZip64Info,
|
|
3
|
+
import { createZip64Info, setFieldToNumber } from "./zip64-info-generation.js";
|
|
4
4
|
const CD_COMPRESSED_SIZE_OFFSET = 20n;
|
|
5
5
|
const CD_UNCOMPRESSED_SIZE_OFFSET = 24n;
|
|
6
6
|
const CD_FILE_NAME_LENGTH_OFFSET = 28n;
|
|
@@ -107,7 +107,7 @@ export function generateCDHeader(options) {
|
|
|
107
107
|
const optionsToZip64 = {};
|
|
108
108
|
if (optionsToUse.offset >= 0xffffffff) {
|
|
109
109
|
optionsToZip64.offset = optionsToUse.offset;
|
|
110
|
-
optionsToUse.offset = 0xffffffff;
|
|
110
|
+
optionsToUse.offset = BigInt(0xffffffff);
|
|
111
111
|
}
|
|
112
112
|
if (optionsToUse.length >= 0xffffffff) {
|
|
113
113
|
optionsToZip64.size = optionsToUse.length;
|
|
@@ -117,10 +117,10 @@ export function generateCDHeader(options) {
|
|
|
117
117
|
zip64header = createZip64Info(optionsToZip64);
|
|
118
118
|
optionsToUse.extraLength = zip64header.byteLength;
|
|
119
119
|
}
|
|
120
|
-
const header = new DataView(new ArrayBuffer(
|
|
120
|
+
const header = new DataView(new ArrayBuffer(Number(CD_FILE_NAME_OFFSET)));
|
|
121
121
|
for (const field of ZIP_HEADER_FIELDS) {
|
|
122
122
|
var _ref, _optionsToUse, _field$name;
|
|
123
|
-
|
|
123
|
+
setFieldToNumber(header, field.size, field.offset, (_ref = (_optionsToUse = optionsToUse[(_field$name = field.name) !== null && _field$name !== void 0 ? _field$name : '']) !== null && _optionsToUse !== void 0 ? _optionsToUse : field.default) !== null && _ref !== void 0 ? _ref : 0);
|
|
124
124
|
}
|
|
125
125
|
const encodedName = new TextEncoder().encode(optionsToUse.fileName);
|
|
126
126
|
const resHeader = concatenateArrayBuffers(header.buffer, encodedName, zip64header);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cd-file-header.js","names":["compareArrayBuffers","concatenateArrayBuffers","parseEoCDRecord","createZip64Info","NUMBER_SETTERS","CD_COMPRESSED_SIZE_OFFSET","CD_UNCOMPRESSED_SIZE_OFFSET","CD_FILE_NAME_LENGTH_OFFSET","CD_EXTRA_FIELD_LENGTH_OFFSET","CD_START_DISK_OFFSET","CD_LOCAL_HEADER_OFFSET_OFFSET","CD_FILE_NAME_OFFSET","signature","Uint8Array","parseZipCDFileHeader","headerOffset","file","magicBytes","slice","buffer","compressedSize","BigInt","getUint32","uncompressedSize","extraFieldLength","getUint16","startDisk","fileNameLength","filenameBytes","fileName","TextDecoder","decode","extraOffset","oldFormatOffset","localHeaderOffset","extraField","DataView","zip64data","res","findZip64DataInExtra","makeZipCDHeaderIterator","fileProvider","cdStartOffset","cdHeader","arguments","length","undefined","zip64dataList","findExpectedData","zip64DataRes","zip64chunkSize","reduce","sum","curr","offsetInExtraData","findIndex","_val","i","arr","bytesRead","note","offset","name","getBigUint64","push","generateCDHeader","options","optionsToUse","fnlength","extraLength","zip64header","ArrayBuffer","optionsToZip64","size","Object","keys","byteLength","header","field","ZIP_HEADER_FIELDS","_ref","_optionsToUse","_field$name","default","encodedName","TextEncoder","encode","resHeader"],"sources":["../../src/parse-zip/cd-file-header.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {FileProvider, compareArrayBuffers, concatenateArrayBuffers} from '@loaders.gl/loader-utils';\nimport {parseEoCDRecord} from './end-of-central-directory';\nimport {ZipSignature} from './search-from-the-end';\nimport {createZip64Info, NUMBER_SETTERS} from './zip64-info-generation';\n\n/**\n * zip central directory file header info\n * according to https://en.wikipedia.org/wiki/ZIP_(file_format)\n */\nexport type ZipCDFileHeader = {\n /** Compressed size */\n compressedSize: bigint;\n /** Uncompressed size */\n uncompressedSize: bigint;\n /** Extra field size */\n extraFieldLength: number;\n /** File name length */\n fileNameLength: number;\n /** File name */\n fileName: string;\n /** Extra field offset */\n extraOffset: bigint;\n /** Relative offset of local file header */\n localHeaderOffset: bigint;\n};\n\n/**\n * Data that might be in Zip64 notation inside extra data\n */\ntype Zip64Data = {\n /** Uncompressed size */\n uncompressedSize: bigint;\n /** Compressed size */\n compressedSize: bigint;\n /** Relative offset of local file header */\n localHeaderOffset: bigint;\n /** Start disk */\n startDisk: bigint;\n};\n\n// offsets accroding to https://en.wikipedia.org/wiki/ZIP_(file_format)\nconst CD_COMPRESSED_SIZE_OFFSET = 20n;\nconst CD_UNCOMPRESSED_SIZE_OFFSET = 24n;\nconst CD_FILE_NAME_LENGTH_OFFSET = 28n;\nconst CD_EXTRA_FIELD_LENGTH_OFFSET = 30n;\nconst CD_START_DISK_OFFSET = 32n;\nconst CD_LOCAL_HEADER_OFFSET_OFFSET = 42n;\nconst CD_FILE_NAME_OFFSET = 46n;\n\nexport const signature: ZipSignature = new Uint8Array([0x50, 0x4b, 0x01, 0x02]);\n\n/**\n * Parses central directory file header of zip file\n * @param headerOffset - offset in the archive where header starts\n * @param buffer - buffer containing whole array\n * @returns Info from the header\n */\nexport const parseZipCDFileHeader = async (\n headerOffset: bigint,\n file: FileProvider\n): Promise<ZipCDFileHeader | null> => {\n const magicBytes = await file.slice(headerOffset, headerOffset + 4n);\n if (!compareArrayBuffers(magicBytes, signature.buffer)) {\n return null;\n }\n\n const compressedSize = BigInt(await file.getUint32(headerOffset + CD_COMPRESSED_SIZE_OFFSET));\n const uncompressedSize = BigInt(await file.getUint32(headerOffset + CD_UNCOMPRESSED_SIZE_OFFSET));\n const extraFieldLength = await file.getUint16(headerOffset + CD_EXTRA_FIELD_LENGTH_OFFSET);\n const startDisk = BigInt(await file.getUint16(headerOffset + CD_START_DISK_OFFSET));\n const fileNameLength = await file.getUint16(headerOffset + CD_FILE_NAME_LENGTH_OFFSET);\n const filenameBytes = await file.slice(\n headerOffset + CD_FILE_NAME_OFFSET,\n headerOffset + CD_FILE_NAME_OFFSET + BigInt(fileNameLength)\n );\n const fileName = new TextDecoder().decode(filenameBytes);\n\n const extraOffset = headerOffset + CD_FILE_NAME_OFFSET + BigInt(fileNameLength);\n const oldFormatOffset = await file.getUint32(headerOffset + CD_LOCAL_HEADER_OFFSET_OFFSET);\n\n const localHeaderOffset = BigInt(oldFormatOffset);\n const extraField = new DataView(\n await file.slice(extraOffset, extraOffset + BigInt(extraFieldLength))\n );\n // looking for info that might be also be in zip64 extra field\n\n const zip64data: Zip64Data = {\n uncompressedSize,\n compressedSize,\n localHeaderOffset,\n startDisk\n };\n\n const res = findZip64DataInExtra(zip64data, extraField);\n\n return {\n ...zip64data,\n ...res,\n extraFieldLength,\n fileNameLength,\n fileName,\n extraOffset\n };\n};\n\n/**\n * Create iterator over files of zip archive\n * @param fileProvider - file provider that provider random access to the file\n */\nexport async function* makeZipCDHeaderIterator(\n fileProvider: FileProvider\n): AsyncIterable<ZipCDFileHeader> {\n const {cdStartOffset} = await parseEoCDRecord(fileProvider);\n let cdHeader = await parseZipCDFileHeader(cdStartOffset, fileProvider);\n while (cdHeader) {\n yield cdHeader;\n cdHeader = await parseZipCDFileHeader(\n cdHeader.extraOffset + BigInt(cdHeader.extraFieldLength),\n fileProvider\n );\n }\n}\n/**\n * returns the number written in the provided bytes\n * @param bytes two bytes containing the number\n * @returns the number written in the provided bytes\n */\nconst getUint16 = (...bytes: [number, number]) => {\n return bytes[0] + bytes[1] * 16;\n};\n\n/**\n * reads all nesessary data from zip64 record in the extra data\n * @param zip64data values that might be in zip64 record\n * @param extraField full extra data\n * @returns data read from zip64\n */\n\nconst findZip64DataInExtra = (zip64data: Zip64Data, extraField: DataView): Partial<Zip64Data> => {\n const zip64dataList = findExpectedData(zip64data);\n\n const zip64DataRes: Partial<Zip64Data> = {};\n if (zip64dataList.length > 0) {\n // total length of data in zip64 notation in bytes\n const zip64chunkSize = zip64dataList.reduce((sum, curr) => sum + curr.length, 0);\n // we're looking for the zip64 nontation header (0x0001)\n // and a size field with a correct value next to it\n const offsetInExtraData = new Uint8Array(extraField.buffer).findIndex(\n (_val, i, arr) =>\n getUint16(arr[i], arr[i + 1]) === 0x0001 &&\n getUint16(arr[i + 2], arr[i + 3]) === zip64chunkSize\n );\n // then we read all the nesessary fields from the zip64 data\n let bytesRead = 0;\n for (const note of zip64dataList) {\n const offset = bytesRead;\n zip64DataRes[note.name] = extraField.getBigUint64(offsetInExtraData + 4 + offset, true);\n bytesRead = offset + note.length;\n }\n }\n\n return zip64DataRes;\n};\n\n/**\n * frind data that's expected to be in zip64\n * @param zip64data values that might be in zip64 record\n * @returns zip64 data description\n */\n\nconst findExpectedData = (zip64data: Zip64Data): {length: number; name: string}[] => {\n // We define fields that should be in zip64 data\n const zip64dataList: {length: number; name: string}[] = [];\n if (zip64data.uncompressedSize === BigInt(0xffffffff)) {\n zip64dataList.push({name: 'uncompressedSize', length: 8});\n }\n if (zip64data.compressedSize === BigInt(0xffffffff)) {\n zip64dataList.push({name: 'compressedSize', length: 8});\n }\n if (zip64data.localHeaderOffset === BigInt(0xffffffff)) {\n zip64dataList.push({name: 'localHeaderOffset', length: 8});\n }\n if (zip64data.startDisk === BigInt(0xffffffff)) {\n zip64dataList.push({name: 'startDisk', length: 4});\n }\n\n return zip64dataList;\n};\n\n/** info that can be placed into cd header */\ntype GenerateCDOptions = {\n /** CRC-32 of uncompressed data */\n crc32: number;\n /** File name */\n fileName: string;\n /** File size */\n length: number;\n /** Relative offset of local file header */\n offset: number;\n};\n\n/**\n * generates cd header for the file\n * @param options info that can be placed into cd header\n * @returns buffer with header\n */\nexport function generateCDHeader(options: GenerateCDOptions): ArrayBuffer {\n const optionsToUse = {\n ...options,\n fnlength: options.fileName.length,\n extraLength: 0\n };\n\n let zip64header: ArrayBuffer = new ArrayBuffer(0);\n\n const optionsToZip64: any = {};\n if (optionsToUse.offset >= 0xffffffff) {\n optionsToZip64.offset = optionsToUse.offset;\n optionsToUse.offset = 0xffffffff;\n }\n if (optionsToUse.length >= 0xffffffff) {\n optionsToZip64.size = optionsToUse.length;\n optionsToUse.length = 0xffffffff;\n }\n\n if (Object.keys(optionsToZip64).length) {\n zip64header = createZip64Info(optionsToZip64);\n optionsToUse.extraLength = zip64header.byteLength;\n }\n const header = new DataView(new ArrayBuffer(46));\n\n for (const field of ZIP_HEADER_FIELDS) {\n NUMBER_SETTERS[field.size](\n header,\n field.offset,\n optionsToUse[field.name ?? ''] ?? field.default ?? 0\n );\n }\n\n const encodedName = new TextEncoder().encode(optionsToUse.fileName);\n\n const resHeader = concatenateArrayBuffers(header.buffer, encodedName, zip64header);\n\n return resHeader;\n}\n\n/** Fields map */\nconst ZIP_HEADER_FIELDS = [\n // Central directory file header signature = 0x02014b50\n {\n offset: 0,\n size: 4,\n default: new DataView(signature.buffer).getUint32(0, true)\n },\n\n // Version made by\n {\n offset: 4,\n size: 2,\n default: 45\n },\n\n // Version needed to extract (minimum)\n {\n offset: 6,\n size: 2,\n default: 45\n },\n\n // General purpose bit flag\n {\n offset: 8,\n size: 2,\n default: 0\n },\n\n // Compression method\n {\n offset: 10,\n size: 2,\n default: 0\n },\n\n // File last modification time\n {\n offset: 12,\n size: 2,\n default: 0\n },\n\n // File last modification date\n {\n offset: 14,\n size: 2,\n default: 0\n },\n\n // CRC-32 of uncompressed data\n {\n offset: 16,\n size: 4,\n name: 'crc32'\n },\n\n // Compressed size (or 0xffffffff for ZIP64)\n {\n offset: 20,\n size: 4,\n name: 'length'\n },\n\n // Uncompressed size (or 0xffffffff for ZIP64)\n {\n offset: 24,\n size: 4,\n name: 'length'\n },\n\n // File name length (n)\n {\n offset: 28,\n size: 2,\n name: 'fnlength'\n },\n\n // Extra field length (m)\n {\n offset: 30,\n size: 2,\n default: 0,\n name: 'extraLength'\n },\n\n // File comment length (k)\n {\n offset: 32,\n size: 2,\n default: 0\n },\n\n // Disk number where file starts (or 0xffff for ZIP64)\n {\n offset: 34,\n size: 2,\n default: 0\n },\n\n // Internal file attributes\n {\n offset: 36,\n size: 2,\n default: 0\n },\n\n // External file attributes\n {\n offset: 38,\n size: 4,\n default: 0\n },\n\n // Relative offset of local file header\n {\n offset: 42,\n size: 4,\n name: 'offset'\n }\n];\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cd-file-header.js","names":["compareArrayBuffers","concatenateArrayBuffers","parseEoCDRecord","createZip64Info","setFieldToNumber","CD_COMPRESSED_SIZE_OFFSET","CD_UNCOMPRESSED_SIZE_OFFSET","CD_FILE_NAME_LENGTH_OFFSET","CD_EXTRA_FIELD_LENGTH_OFFSET","CD_START_DISK_OFFSET","CD_LOCAL_HEADER_OFFSET_OFFSET","CD_FILE_NAME_OFFSET","signature","Uint8Array","parseZipCDFileHeader","headerOffset","file","magicBytes","slice","buffer","compressedSize","BigInt","getUint32","uncompressedSize","extraFieldLength","getUint16","startDisk","fileNameLength","filenameBytes","fileName","TextDecoder","decode","extraOffset","oldFormatOffset","localHeaderOffset","extraField","DataView","zip64data","res","findZip64DataInExtra","makeZipCDHeaderIterator","fileProvider","cdStartOffset","cdHeader","arguments","length","undefined","zip64dataList","findExpectedData","zip64DataRes","zip64chunkSize","reduce","sum","curr","offsetInExtraData","findIndex","_val","i","arr","bytesRead","note","offset","name","getBigUint64","push","generateCDHeader","options","optionsToUse","fnlength","extraLength","zip64header","ArrayBuffer","optionsToZip64","size","Object","keys","byteLength","header","Number","field","ZIP_HEADER_FIELDS","_ref","_optionsToUse","_field$name","default","encodedName","TextEncoder","encode","resHeader"],"sources":["../../src/parse-zip/cd-file-header.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {FileProvider, compareArrayBuffers, concatenateArrayBuffers} from '@loaders.gl/loader-utils';\nimport {parseEoCDRecord} from './end-of-central-directory';\nimport {ZipSignature} from './search-from-the-end';\nimport {createZip64Info, setFieldToNumber} from './zip64-info-generation';\n\n/**\n * zip central directory file header info\n * according to https://en.wikipedia.org/wiki/ZIP_(file_format)\n */\nexport type ZipCDFileHeader = {\n /** Compressed size */\n compressedSize: bigint;\n /** Uncompressed size */\n uncompressedSize: bigint;\n /** Extra field size */\n extraFieldLength: number;\n /** File name length */\n fileNameLength: number;\n /** File name */\n fileName: string;\n /** Extra field offset */\n extraOffset: bigint;\n /** Relative offset of local file header */\n localHeaderOffset: bigint;\n};\n\n/**\n * Data that might be in Zip64 notation inside extra data\n */\ntype Zip64Data = {\n /** Uncompressed size */\n uncompressedSize: bigint;\n /** Compressed size */\n compressedSize: bigint;\n /** Relative offset of local file header */\n localHeaderOffset: bigint;\n /** Start disk */\n startDisk: bigint;\n};\n\n// offsets accroding to https://en.wikipedia.org/wiki/ZIP_(file_format)\nconst CD_COMPRESSED_SIZE_OFFSET = 20n;\nconst CD_UNCOMPRESSED_SIZE_OFFSET = 24n;\nconst CD_FILE_NAME_LENGTH_OFFSET = 28n;\nconst CD_EXTRA_FIELD_LENGTH_OFFSET = 30n;\nconst CD_START_DISK_OFFSET = 32n;\nconst CD_LOCAL_HEADER_OFFSET_OFFSET = 42n;\nconst CD_FILE_NAME_OFFSET = 46n;\n\nexport const signature: ZipSignature = new Uint8Array([0x50, 0x4b, 0x01, 0x02]);\n\n/**\n * Parses central directory file header of zip file\n * @param headerOffset - offset in the archive where header starts\n * @param buffer - buffer containing whole array\n * @returns Info from the header\n */\nexport const parseZipCDFileHeader = async (\n headerOffset: bigint,\n file: FileProvider\n): Promise<ZipCDFileHeader | null> => {\n const magicBytes = await file.slice(headerOffset, headerOffset + 4n);\n if (!compareArrayBuffers(magicBytes, signature.buffer)) {\n return null;\n }\n\n const compressedSize = BigInt(await file.getUint32(headerOffset + CD_COMPRESSED_SIZE_OFFSET));\n const uncompressedSize = BigInt(await file.getUint32(headerOffset + CD_UNCOMPRESSED_SIZE_OFFSET));\n const extraFieldLength = await file.getUint16(headerOffset + CD_EXTRA_FIELD_LENGTH_OFFSET);\n const startDisk = BigInt(await file.getUint16(headerOffset + CD_START_DISK_OFFSET));\n const fileNameLength = await file.getUint16(headerOffset + CD_FILE_NAME_LENGTH_OFFSET);\n const filenameBytes = await file.slice(\n headerOffset + CD_FILE_NAME_OFFSET,\n headerOffset + CD_FILE_NAME_OFFSET + BigInt(fileNameLength)\n );\n const fileName = new TextDecoder().decode(filenameBytes);\n\n const extraOffset = headerOffset + CD_FILE_NAME_OFFSET + BigInt(fileNameLength);\n const oldFormatOffset = await file.getUint32(headerOffset + CD_LOCAL_HEADER_OFFSET_OFFSET);\n\n const localHeaderOffset = BigInt(oldFormatOffset);\n const extraField = new DataView(\n await file.slice(extraOffset, extraOffset + BigInt(extraFieldLength))\n );\n // looking for info that might be also be in zip64 extra field\n\n const zip64data: Zip64Data = {\n uncompressedSize,\n compressedSize,\n localHeaderOffset,\n startDisk\n };\n\n const res = findZip64DataInExtra(zip64data, extraField);\n\n return {\n ...zip64data,\n ...res,\n extraFieldLength,\n fileNameLength,\n fileName,\n extraOffset\n };\n};\n\n/**\n * Create iterator over files of zip archive\n * @param fileProvider - file provider that provider random access to the file\n */\nexport async function* makeZipCDHeaderIterator(\n fileProvider: FileProvider\n): AsyncIterable<ZipCDFileHeader> {\n const {cdStartOffset} = await parseEoCDRecord(fileProvider);\n let cdHeader = await parseZipCDFileHeader(cdStartOffset, fileProvider);\n while (cdHeader) {\n yield cdHeader;\n cdHeader = await parseZipCDFileHeader(\n cdHeader.extraOffset + BigInt(cdHeader.extraFieldLength),\n fileProvider\n );\n }\n}\n/**\n * returns the number written in the provided bytes\n * @param bytes two bytes containing the number\n * @returns the number written in the provided bytes\n */\nconst getUint16 = (...bytes: [number, number]) => {\n return bytes[0] + bytes[1] * 16;\n};\n\n/**\n * reads all nesessary data from zip64 record in the extra data\n * @param zip64data values that might be in zip64 record\n * @param extraField full extra data\n * @returns data read from zip64\n */\n\nconst findZip64DataInExtra = (zip64data: Zip64Data, extraField: DataView): Partial<Zip64Data> => {\n const zip64dataList = findExpectedData(zip64data);\n\n const zip64DataRes: Partial<Zip64Data> = {};\n if (zip64dataList.length > 0) {\n // total length of data in zip64 notation in bytes\n const zip64chunkSize = zip64dataList.reduce((sum, curr) => sum + curr.length, 0);\n // we're looking for the zip64 nontation header (0x0001)\n // and a size field with a correct value next to it\n const offsetInExtraData = new Uint8Array(extraField.buffer).findIndex(\n (_val, i, arr) =>\n getUint16(arr[i], arr[i + 1]) === 0x0001 &&\n getUint16(arr[i + 2], arr[i + 3]) === zip64chunkSize\n );\n // then we read all the nesessary fields from the zip64 data\n let bytesRead = 0;\n for (const note of zip64dataList) {\n const offset = bytesRead;\n zip64DataRes[note.name] = extraField.getBigUint64(offsetInExtraData + 4 + offset, true);\n bytesRead = offset + note.length;\n }\n }\n\n return zip64DataRes;\n};\n\n/**\n * frind data that's expected to be in zip64\n * @param zip64data values that might be in zip64 record\n * @returns zip64 data description\n */\n\nconst findExpectedData = (zip64data: Zip64Data): {length: number; name: string}[] => {\n // We define fields that should be in zip64 data\n const zip64dataList: {length: number; name: string}[] = [];\n if (zip64data.uncompressedSize === BigInt(0xffffffff)) {\n zip64dataList.push({name: 'uncompressedSize', length: 8});\n }\n if (zip64data.compressedSize === BigInt(0xffffffff)) {\n zip64dataList.push({name: 'compressedSize', length: 8});\n }\n if (zip64data.localHeaderOffset === BigInt(0xffffffff)) {\n zip64dataList.push({name: 'localHeaderOffset', length: 8});\n }\n if (zip64data.startDisk === BigInt(0xffffffff)) {\n zip64dataList.push({name: 'startDisk', length: 4});\n }\n\n return zip64dataList;\n};\n\n/** info that can be placed into cd header */\ntype GenerateCDOptions = {\n /** CRC-32 of uncompressed data */\n crc32: number;\n /** File name */\n fileName: string;\n /** File size */\n length: number;\n /** Relative offset of local file header */\n offset: bigint;\n};\n\n/**\n * generates cd header for the file\n * @param options info that can be placed into cd header\n * @returns buffer with header\n */\nexport function generateCDHeader(options: GenerateCDOptions): ArrayBuffer {\n const optionsToUse = {\n ...options,\n fnlength: options.fileName.length,\n extraLength: 0\n };\n\n let zip64header: ArrayBuffer = new ArrayBuffer(0);\n\n const optionsToZip64: any = {};\n if (optionsToUse.offset >= 0xffffffff) {\n optionsToZip64.offset = optionsToUse.offset;\n optionsToUse.offset = BigInt(0xffffffff);\n }\n if (optionsToUse.length >= 0xffffffff) {\n optionsToZip64.size = optionsToUse.length;\n optionsToUse.length = 0xffffffff;\n }\n\n if (Object.keys(optionsToZip64).length) {\n zip64header = createZip64Info(optionsToZip64);\n optionsToUse.extraLength = zip64header.byteLength;\n }\n const header = new DataView(new ArrayBuffer(Number(CD_FILE_NAME_OFFSET)));\n\n for (const field of ZIP_HEADER_FIELDS) {\n setFieldToNumber(\n header,\n field.size,\n field.offset,\n optionsToUse[field.name ?? ''] ?? field.default ?? 0\n );\n }\n\n const encodedName = new TextEncoder().encode(optionsToUse.fileName);\n\n const resHeader = concatenateArrayBuffers(header.buffer, encodedName, zip64header);\n\n return resHeader;\n}\n\n/** Fields map */\nconst ZIP_HEADER_FIELDS = [\n // Central directory file header signature = 0x02014b50\n {\n offset: 0,\n size: 4,\n default: new DataView(signature.buffer).getUint32(0, true)\n },\n\n // Version made by\n {\n offset: 4,\n size: 2,\n default: 45\n },\n\n // Version needed to extract (minimum)\n {\n offset: 6,\n size: 2,\n default: 45\n },\n\n // General purpose bit flag\n {\n offset: 8,\n size: 2,\n default: 0\n },\n\n // Compression method\n {\n offset: 10,\n size: 2,\n default: 0\n },\n\n // File last modification time\n {\n offset: 12,\n size: 2,\n default: 0\n },\n\n // File last modification date\n {\n offset: 14,\n size: 2,\n default: 0\n },\n\n // CRC-32 of uncompressed data\n {\n offset: 16,\n size: 4,\n name: 'crc32'\n },\n\n // Compressed size (or 0xffffffff for ZIP64)\n {\n offset: 20,\n size: 4,\n name: 'length'\n },\n\n // Uncompressed size (or 0xffffffff for ZIP64)\n {\n offset: 24,\n size: 4,\n name: 'length'\n },\n\n // File name length (n)\n {\n offset: 28,\n size: 2,\n name: 'fnlength'\n },\n\n // Extra field length (m)\n {\n offset: 30,\n size: 2,\n default: 0,\n name: 'extraLength'\n },\n\n // File comment length (k)\n {\n offset: 32,\n size: 2,\n default: 0\n },\n\n // Disk number where file starts (or 0xffff for ZIP64)\n {\n offset: 34,\n size: 2,\n default: 0\n },\n\n // Internal file attributes\n {\n offset: 36,\n size: 2,\n default: 0\n },\n\n // External file attributes\n {\n offset: 38,\n size: 4,\n default: 0\n },\n\n // Relative offset of local file header\n {\n offset: 42,\n size: 4,\n name: 'offset'\n }\n];\n"],"mappings":"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"}
|