@loaders.gl/zip 4.1.0-alpha.9 → 4.1.1
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 +575 -24
- package/dist/hash-file-utility.d.ts +15 -2
- package/dist/hash-file-utility.d.ts.map +1 -1
- package/dist/hash-file-utility.js +16 -8
- package/dist/hash-file-utility.js.map +1 -1
- package/dist/index.cjs +260 -9
- 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/parse-zip/end-of-central-directory.d.ts +17 -1
- package/dist/parse-zip/end-of-central-directory.d.ts.map +1 -1
- package/dist/parse-zip/end-of-central-directory.js +121 -2
- package/dist/parse-zip/end-of-central-directory.js.map +1 -1
- package/dist/parse-zip/zip-composition.d.ts +38 -0
- package/dist/parse-zip/zip-composition.d.ts.map +1 -0
- package/dist/parse-zip/zip-composition.js +114 -0
- package/dist/parse-zip/zip-composition.js.map +1 -0
- package/dist/parse-zip/zip64-info-generation.js +2 -2
- package/dist/parse-zip/zip64-info-generation.js.map +1 -1
- package/dist/zip-loader.js +1 -1
- package/dist/zip-loader.js.map +1 -1
- package/dist/zip-writer.js +1 -1
- package/dist/zip-writer.js.map +1 -1
- package/package.json +7 -7
- package/src/hash-file-utility.ts +44 -9
- package/src/index.ts +1 -1
- package/src/parse-zip/end-of-central-directory.ts +241 -3
- package/src/parse-zip/zip-composition.ts +234 -0
- package/src/parse-zip/zip64-info-generation.ts +3 -3
- package/dist/parse-zip/zip-compozition.d.ts +0 -8
- package/dist/parse-zip/zip-compozition.d.ts.map +0 -1
- package/dist/parse-zip/zip-compozition.js +0 -43
- package/dist/parse-zip/zip-compozition.js.map +0 -1
- package/src/parse-zip/zip-compozition.ts +0 -113
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { FileProvider } from '@loaders.gl/loader-utils';
|
|
2
|
+
import { ZipCDFileHeader } from './parse-zip/cd-file-header';
|
|
2
3
|
/**
|
|
3
4
|
* Reads hash file from buffer and returns it in ready-to-use form
|
|
4
5
|
* @param arrayBuffer - buffer containing hash file
|
|
@@ -11,10 +12,22 @@ export declare function parseHashTable(arrayBuffer: ArrayBuffer): Record<string,
|
|
|
11
12
|
* @returns ready to use hash info
|
|
12
13
|
*/
|
|
13
14
|
export declare function makeHashTableFromZipHeaders(fileProvider: FileProvider): Promise<Record<string, bigint>>;
|
|
15
|
+
/**
|
|
16
|
+
* creates hash table from file offset iterator
|
|
17
|
+
* @param zipCDIterator iterator to use
|
|
18
|
+
* @returns hash table
|
|
19
|
+
*/
|
|
20
|
+
export declare function getHashTable(zipCDIterator: AsyncIterable<ZipCDFileHeader>): Promise<Record<string, bigint>>;
|
|
21
|
+
/** item of the file offset list */
|
|
22
|
+
type FileListItem = {
|
|
23
|
+
fileName: string;
|
|
24
|
+
localHeaderOffset: bigint;
|
|
25
|
+
};
|
|
14
26
|
/**
|
|
15
27
|
* creates hash file that later can be added to the SLPK archive
|
|
16
|
-
* @param
|
|
28
|
+
* @param zipCDIterator iterator to use
|
|
17
29
|
* @returns ArrayBuffer containing hash file
|
|
18
30
|
*/
|
|
19
|
-
export declare function composeHashFile(
|
|
31
|
+
export declare function composeHashFile(zipCDIterator: AsyncIterable<FileListItem> | Iterable<FileListItem>): Promise<ArrayBuffer>;
|
|
32
|
+
export {};
|
|
20
33
|
//# sourceMappingURL=hash-file-utility.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash-file-utility.d.ts","sourceRoot":"","sources":["../src/hash-file-utility.ts"],"names":[],"mappings":"AAKA,OAAO,
|
|
1
|
+
{"version":3,"file":"hash-file-utility.d.ts","sourceRoot":"","sources":["../src/hash-file-utility.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,YAAY,EAGb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAC,eAAe,EAA0B,MAAM,4BAA4B,CAAC;AAEpF;;;;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,CAGjC;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,aAAa,EAAE,aAAa,CAAC,eAAe,CAAC,GAC5C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAcjC;AAED,mCAAmC;AACnC,KAAK,YAAY,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,GAClE,OAAO,CAAC,WAAW,CAAC,CAkBtB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MD5Hash } from '@loaders.gl/crypto';
|
|
2
|
-
import { concatenateArrayBuffers } from '@loaders.gl/loader-utils';
|
|
2
|
+
import { concatenateArrayBuffers, concatenateArrayBuffersFromArray } from '@loaders.gl/loader-utils';
|
|
3
3
|
import { makeZipCDHeaderIterator } from "./parse-zip/cd-file-header.js";
|
|
4
4
|
export function parseHashTable(arrayBuffer) {
|
|
5
5
|
const dataView = new DataView(arrayBuffer);
|
|
@@ -16,6 +16,9 @@ function bufferToHex(buffer, start, length) {
|
|
|
16
16
|
}
|
|
17
17
|
export async function makeHashTableFromZipHeaders(fileProvider) {
|
|
18
18
|
const zipCDIterator = makeZipCDHeaderIterator(fileProvider);
|
|
19
|
+
return getHashTable(zipCDIterator);
|
|
20
|
+
}
|
|
21
|
+
export async function getHashTable(zipCDIterator) {
|
|
19
22
|
const md5Hash = new MD5Hash();
|
|
20
23
|
const textEncoder = new TextEncoder();
|
|
21
24
|
const hashTable = {};
|
|
@@ -27,13 +30,18 @@ export async function makeHashTableFromZipHeaders(fileProvider) {
|
|
|
27
30
|
}
|
|
28
31
|
return hashTable;
|
|
29
32
|
}
|
|
30
|
-
export async function composeHashFile(
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
export async function composeHashFile(zipCDIterator) {
|
|
34
|
+
const md5Hash = new MD5Hash();
|
|
35
|
+
const textEncoder = new TextEncoder();
|
|
36
|
+
const hashArray = [];
|
|
37
|
+
for await (const cdHeader of zipCDIterator) {
|
|
38
|
+
const filename = cdHeader.fileName.split('\\').join('/').toLocaleLowerCase();
|
|
39
|
+
const arrayBuffer = textEncoder.encode(filename).buffer;
|
|
40
|
+
const md5 = await md5Hash.hash(arrayBuffer, 'hex');
|
|
41
|
+
hashArray.push(concatenateArrayBuffers(hexStringToBuffer(md5), bigintToBuffer(cdHeader.localHeaderOffset)));
|
|
42
|
+
}
|
|
43
|
+
const bufferArray = hashArray.sort(compareHashes);
|
|
44
|
+
return concatenateArrayBuffersFromArray(bufferArray);
|
|
37
45
|
}
|
|
38
46
|
function compareHashes(arrA, arrB) {
|
|
39
47
|
const a = new BigUint64Array(arrA);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash-file-utility.js","names":["MD5Hash","concatenateArrayBuffers","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","composeHashFile","hashArray","
|
|
1
|
+
{"version":3,"file":"hash-file-utility.js","names":["MD5Hash","concatenateArrayBuffers","concatenateArrayBuffersFromArray","makeZipCDHeaderIterator","parseHashTable","arrayBuffer","dataView","DataView","hashMap","i","byteLength","offset","getBigUint64","hash","bufferToHex","buffer","start","length","Uint8Array","map","x","toString","padStart","join","makeHashTableFromZipHeaders","fileProvider","zipCDIterator","getHashTable","md5Hash","textEncoder","TextEncoder","hashTable","cdHeader","filename","fileName","split","toLocaleLowerCase","encode","md5","localHeaderOffset","composeHashFile","hashArray","push","hexStringToBuffer","bigintToBuffer","bufferArray","sort","compareHashes","arrA","arrB","a","BigUint64Array","b","Number","str","_str$match","byteArray","match","h","parseInt","Array","n"],"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 {\n FileProvider,\n concatenateArrayBuffers,\n concatenateArrayBuffersFromArray\n} from '@loaders.gl/loader-utils';\nimport {ZipCDFileHeader, 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 return getHashTable(zipCDIterator);\n}\n\n/**\n * creates hash table from file offset iterator\n * @param zipCDIterator iterator to use\n * @returns hash table\n */\nexport async function getHashTable(\n zipCDIterator: AsyncIterable<ZipCDFileHeader>\n): Promise<Record<string, bigint>> {\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\n/** item of the file offset list */\ntype FileListItem = {\n fileName: string;\n localHeaderOffset: bigint;\n};\n\n/**\n * creates hash file that later can be added to the SLPK archive\n * @param zipCDIterator iterator to use\n * @returns ArrayBuffer containing hash file\n */\nexport async function composeHashFile(\n zipCDIterator: AsyncIterable<FileListItem> | Iterable<FileListItem>\n): Promise<ArrayBuffer> {\n const md5Hash = new MD5Hash();\n const textEncoder = new TextEncoder();\n\n const hashArray: ArrayBuffer[] = [];\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 hashArray.push(\n concatenateArrayBuffers(hexStringToBuffer(md5), bigintToBuffer(cdHeader.localHeaderOffset))\n );\n }\n\n const bufferArray = hashArray.sort(compareHashes);\n\n return concatenateArrayBuffersFromArray(bufferArray);\n}\n\n/**\n * Function to compare md5 hashes according to https://github.com/Esri/i3s-spec/blob/master/docs/2.0/slpk_hashtable.pcsl.md\n * @param arrA first hash to compare\n * @param arrB second hash to compare\n * @returns 0 if equal, negative number if a<b, pozitive if a>b\n */\nfunction compareHashes(arrA: ArrayBuffer, arrB: ArrayBuffer): number {\n const a = new BigUint64Array(arrA);\n const b = new BigUint64Array(arrB);\n\n return Number(a[0] === b[0] ? a[1] - b[1] : a[0] - b[0]);\n}\n\n/**\n * converts hex string to buffer\n * @param str hex string to convert\n * @returns conversion result\n */\nfunction hexStringToBuffer(str: string): ArrayBuffer {\n const byteArray = str.match(/../g)?.map((h) => parseInt(h, 16));\n return new Uint8Array(byteArray ?? new Array(16)).buffer;\n}\n\n/**\n * converts bigint to buffer\n * @param n bigint to convert\n * @returns convertion result\n */\nfunction bigintToBuffer(n: bigint): ArrayBuffer {\n return new BigUint64Array([n]).buffer;\n}\n"],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -37,6 +37,7 @@ __export(src_exports, {
|
|
|
37
37
|
ZipWriter: () => ZipWriter,
|
|
38
38
|
addOneFile: () => addOneFile,
|
|
39
39
|
composeHashFile: () => composeHashFile,
|
|
40
|
+
createZip: () => createZip,
|
|
40
41
|
generateCDHeader: () => generateCDHeader,
|
|
41
42
|
generateLocalHeader: () => generateLocalHeader,
|
|
42
43
|
localHeaderSignature: () => signature3,
|
|
@@ -403,10 +404,10 @@ function setFieldToNumber(header, fieldSize, fieldOffset, value) {
|
|
|
403
404
|
}
|
|
404
405
|
var NUMBER_SETTERS = {
|
|
405
406
|
2: (header, offset, value) => {
|
|
406
|
-
header.setUint16(offset, Number(value), true);
|
|
407
|
+
header.setUint16(offset, Number(value > 65535 ? 65535 : value), true);
|
|
407
408
|
},
|
|
408
409
|
4: (header, offset, value) => {
|
|
409
|
-
header.setUint32(offset, Number(value), true);
|
|
410
|
+
header.setUint32(offset, Number(value > 4294967295 ? 4294967295 : value), true);
|
|
410
411
|
},
|
|
411
412
|
8: (header, offset, value) => {
|
|
412
413
|
header.setBigUint64(offset, BigInt(value), true);
|
|
@@ -448,11 +449,13 @@ var CD_RECORDS_NUMBER_OFFSET = 8n;
|
|
|
448
449
|
var CD_RECORDS_NUMBER_ON_DISC_OFFSET = 10n;
|
|
449
450
|
var CD_CD_BYTE_SIZE_OFFSET = 12n;
|
|
450
451
|
var CD_START_OFFSET_OFFSET = 16n;
|
|
452
|
+
var CD_COMMENT_OFFSET = 22n;
|
|
451
453
|
var ZIP64_EOCD_START_OFFSET_OFFSET = 8n;
|
|
452
454
|
var ZIP64_CD_RECORDS_NUMBER_OFFSET = 24n;
|
|
453
455
|
var ZIP64_CD_RECORDS_NUMBER_ON_DISC_OFFSET = 32n;
|
|
454
456
|
var ZIP64_CD_CD_BYTE_SIZE_OFFSET = 40n;
|
|
455
457
|
var ZIP64_CD_START_OFFSET_OFFSET = 48n;
|
|
458
|
+
var ZIP64_COMMENT_OFFSET = 56n;
|
|
456
459
|
var parseEoCDRecord = async (file) => {
|
|
457
460
|
const zipEoCDOffset = await searchFromTheEnd(file, eoCDSignature);
|
|
458
461
|
let cdRecordsNumber = BigInt(await file.getUint16(zipEoCDOffset + CD_RECORDS_NUMBER_OFFSET));
|
|
@@ -483,7 +486,7 @@ var parseEoCDRecord = async (file) => {
|
|
|
483
486
|
}
|
|
484
487
|
};
|
|
485
488
|
};
|
|
486
|
-
|
|
489
|
+
function updateEoCD(eocdBody, oldEoCDOffsets, newCDStartOffset, eocdStartOffset, newCDRecordsNumber) {
|
|
487
490
|
const eocd = new DataView(eocdBody);
|
|
488
491
|
const classicEoCDOffset = oldEoCDOffsets.zip64EoCDOffset ? oldEoCDOffsets.zipEoCDOffset - oldEoCDOffsets.zip64EoCDOffset : 0n;
|
|
489
492
|
if (Number(newCDRecordsNumber) <= 65535) {
|
|
@@ -516,6 +519,182 @@ async function updateEoCD(eocdBody, oldEoCDOffsets, newCDStartOffset, eocdStartO
|
|
|
516
519
|
}
|
|
517
520
|
return new Uint8Array(eocd.buffer);
|
|
518
521
|
}
|
|
522
|
+
function generateEoCD(options) {
|
|
523
|
+
const header = new DataView(new ArrayBuffer(Number(CD_COMMENT_OFFSET)));
|
|
524
|
+
for (const field of EOCD_FIELDS) {
|
|
525
|
+
setFieldToNumber(
|
|
526
|
+
header,
|
|
527
|
+
field.size,
|
|
528
|
+
field.offset,
|
|
529
|
+
options[field.name ?? ""] ?? field.default ?? 0
|
|
530
|
+
);
|
|
531
|
+
}
|
|
532
|
+
const locator = generateZip64InfoLocator(options);
|
|
533
|
+
const zip64Record = generateZip64Info(options);
|
|
534
|
+
return (0, import_loader_utils2.concatenateArrayBuffers)(zip64Record, locator, header.buffer);
|
|
535
|
+
}
|
|
536
|
+
var EOCD_FIELDS = [
|
|
537
|
+
// End of central directory signature = 0x06054b50
|
|
538
|
+
{
|
|
539
|
+
offset: 0,
|
|
540
|
+
size: 4,
|
|
541
|
+
default: new DataView(eoCDSignature.buffer).getUint32(0, true)
|
|
542
|
+
},
|
|
543
|
+
// Number of this disk (or 0xffff for ZIP64)
|
|
544
|
+
{
|
|
545
|
+
offset: 4,
|
|
546
|
+
size: 2,
|
|
547
|
+
default: 0
|
|
548
|
+
},
|
|
549
|
+
// Disk where central directory starts (or 0xffff for ZIP64)
|
|
550
|
+
{
|
|
551
|
+
offset: 6,
|
|
552
|
+
size: 2,
|
|
553
|
+
default: 0
|
|
554
|
+
},
|
|
555
|
+
// Number of central directory records on this disk (or 0xffff for ZIP64)
|
|
556
|
+
{
|
|
557
|
+
offset: 8,
|
|
558
|
+
size: 2,
|
|
559
|
+
name: "recordsNumber"
|
|
560
|
+
},
|
|
561
|
+
// Total number of central directory records (or 0xffff for ZIP64)
|
|
562
|
+
{
|
|
563
|
+
offset: 10,
|
|
564
|
+
size: 2,
|
|
565
|
+
name: "recordsNumber"
|
|
566
|
+
},
|
|
567
|
+
// Size of central directory (bytes) (or 0xffffffff for ZIP64)
|
|
568
|
+
{
|
|
569
|
+
offset: 12,
|
|
570
|
+
size: 4,
|
|
571
|
+
name: "cdSize"
|
|
572
|
+
},
|
|
573
|
+
// Offset of start of central directory, relative to start of archive (or 0xffffffff for ZIP64)
|
|
574
|
+
{
|
|
575
|
+
offset: 16,
|
|
576
|
+
size: 4,
|
|
577
|
+
name: "cdOffset"
|
|
578
|
+
},
|
|
579
|
+
// Comment length (n)
|
|
580
|
+
{
|
|
581
|
+
offset: 20,
|
|
582
|
+
size: 2,
|
|
583
|
+
default: 0
|
|
584
|
+
}
|
|
585
|
+
];
|
|
586
|
+
function generateZip64Info(options) {
|
|
587
|
+
const record = new DataView(new ArrayBuffer(Number(ZIP64_COMMENT_OFFSET)));
|
|
588
|
+
for (const field of ZIP64_EOCD_FIELDS) {
|
|
589
|
+
setFieldToNumber(
|
|
590
|
+
record,
|
|
591
|
+
field.size,
|
|
592
|
+
field.offset,
|
|
593
|
+
options[field.name ?? ""] ?? field.default ?? 0
|
|
594
|
+
);
|
|
595
|
+
}
|
|
596
|
+
return record.buffer;
|
|
597
|
+
}
|
|
598
|
+
function generateZip64InfoLocator(options) {
|
|
599
|
+
const locator = new DataView(new ArrayBuffer(Number(20)));
|
|
600
|
+
for (const field of ZIP64_EOCD_LOCATOR_FIELDS) {
|
|
601
|
+
setFieldToNumber(
|
|
602
|
+
locator,
|
|
603
|
+
field.size,
|
|
604
|
+
field.offset,
|
|
605
|
+
options[field.name ?? ""] ?? field.default ?? 0
|
|
606
|
+
);
|
|
607
|
+
}
|
|
608
|
+
return locator.buffer;
|
|
609
|
+
}
|
|
610
|
+
var ZIP64_EOCD_LOCATOR_FIELDS = [
|
|
611
|
+
// zip64 end of central dir locator signature
|
|
612
|
+
{
|
|
613
|
+
offset: 0,
|
|
614
|
+
size: 4,
|
|
615
|
+
default: new DataView(zip64EoCDLocatorSignature.buffer).getUint32(0, true)
|
|
616
|
+
},
|
|
617
|
+
// number of the disk with the start of the zip64 end of
|
|
618
|
+
{
|
|
619
|
+
offset: 4,
|
|
620
|
+
size: 4,
|
|
621
|
+
default: 0
|
|
622
|
+
},
|
|
623
|
+
// start of the zip64 end of central directory
|
|
624
|
+
{
|
|
625
|
+
offset: 8,
|
|
626
|
+
size: 8,
|
|
627
|
+
name: "eoCDStart"
|
|
628
|
+
},
|
|
629
|
+
// total number of disks
|
|
630
|
+
{
|
|
631
|
+
offset: 16,
|
|
632
|
+
size: 4,
|
|
633
|
+
default: 1
|
|
634
|
+
}
|
|
635
|
+
];
|
|
636
|
+
var ZIP64_EOCD_FIELDS = [
|
|
637
|
+
// End of central directory signature = 0x06064b50
|
|
638
|
+
{
|
|
639
|
+
offset: 0,
|
|
640
|
+
size: 4,
|
|
641
|
+
default: new DataView(zip64EoCDSignature.buffer).getUint32(0, true)
|
|
642
|
+
},
|
|
643
|
+
// Size of the EOCD64 minus 12
|
|
644
|
+
{
|
|
645
|
+
offset: 4,
|
|
646
|
+
size: 8,
|
|
647
|
+
default: 44
|
|
648
|
+
},
|
|
649
|
+
// Version made by
|
|
650
|
+
{
|
|
651
|
+
offset: 12,
|
|
652
|
+
size: 2,
|
|
653
|
+
default: 45
|
|
654
|
+
},
|
|
655
|
+
// Version needed to extract (minimum)
|
|
656
|
+
{
|
|
657
|
+
offset: 14,
|
|
658
|
+
size: 2,
|
|
659
|
+
default: 45
|
|
660
|
+
},
|
|
661
|
+
// Number of this disk
|
|
662
|
+
{
|
|
663
|
+
offset: 16,
|
|
664
|
+
size: 4,
|
|
665
|
+
default: 0
|
|
666
|
+
},
|
|
667
|
+
// Disk where central directory starts
|
|
668
|
+
{
|
|
669
|
+
offset: 20,
|
|
670
|
+
size: 4,
|
|
671
|
+
default: 0
|
|
672
|
+
},
|
|
673
|
+
// Number of central directory records on this disk
|
|
674
|
+
{
|
|
675
|
+
offset: 24,
|
|
676
|
+
size: 8,
|
|
677
|
+
name: "recordsNumber"
|
|
678
|
+
},
|
|
679
|
+
// Total number of central directory records
|
|
680
|
+
{
|
|
681
|
+
offset: 32,
|
|
682
|
+
size: 8,
|
|
683
|
+
name: "recordsNumber"
|
|
684
|
+
},
|
|
685
|
+
// Size of central directory (bytes)
|
|
686
|
+
{
|
|
687
|
+
offset: 40,
|
|
688
|
+
size: 8,
|
|
689
|
+
name: "cdSize"
|
|
690
|
+
},
|
|
691
|
+
// Offset of start of central directory, relative to start of archive
|
|
692
|
+
{
|
|
693
|
+
offset: 48,
|
|
694
|
+
size: 8,
|
|
695
|
+
name: "cdOffset"
|
|
696
|
+
}
|
|
697
|
+
];
|
|
519
698
|
|
|
520
699
|
// src/parse-zip/cd-file-header.ts
|
|
521
700
|
var CD_COMPRESSED_SIZE_OFFSET = 20n;
|
|
@@ -896,9 +1075,10 @@ var ZIP_HEADER_FIELDS2 = [
|
|
|
896
1075
|
}
|
|
897
1076
|
];
|
|
898
1077
|
|
|
899
|
-
// src/parse-zip/zip-
|
|
1078
|
+
// src/parse-zip/zip-composition.ts
|
|
900
1079
|
var import_loader_utils5 = require("@loaders.gl/loader-utils");
|
|
901
1080
|
var import_crypto = require("@loaders.gl/crypto");
|
|
1081
|
+
var import_core = require("@loaders.gl/core");
|
|
902
1082
|
async function cutTheTailOff(provider) {
|
|
903
1083
|
const oldEoCDinfo = await parseEoCDRecord(provider);
|
|
904
1084
|
const oldCDStartOffset = oldEoCDinfo.cdStartOffset;
|
|
@@ -940,7 +1120,7 @@ async function addOneFile(zipUrl, fileToAdd, fileName) {
|
|
|
940
1120
|
await provider.append(new Uint8Array(newCDBody));
|
|
941
1121
|
const eocdOffset = provider.length;
|
|
942
1122
|
await provider.append(
|
|
943
|
-
|
|
1123
|
+
updateEoCD(
|
|
944
1124
|
eocdBody,
|
|
945
1125
|
oldEoCDinfo.offsets,
|
|
946
1126
|
newCDStartOffset,
|
|
@@ -949,6 +1129,64 @@ async function addOneFile(zipUrl, fileToAdd, fileName) {
|
|
|
949
1129
|
)
|
|
950
1130
|
);
|
|
951
1131
|
}
|
|
1132
|
+
async function createZip(inputPath, outputPath, createAdditionalData) {
|
|
1133
|
+
const fileIterator = getFileIterator(inputPath);
|
|
1134
|
+
const resFile = new import_loader_utils5.NodeFile(outputPath, "w");
|
|
1135
|
+
const fileList = [];
|
|
1136
|
+
const cdArray = [];
|
|
1137
|
+
for await (const file of fileIterator) {
|
|
1138
|
+
await addFile(file, resFile, cdArray, fileList);
|
|
1139
|
+
}
|
|
1140
|
+
if (createAdditionalData) {
|
|
1141
|
+
const additionaldata = await createAdditionalData(fileList);
|
|
1142
|
+
await addFile(additionaldata, resFile, cdArray);
|
|
1143
|
+
}
|
|
1144
|
+
const cdOffset = (await resFile.stat()).bigsize;
|
|
1145
|
+
const cd = (0, import_loader_utils5.concatenateArrayBuffers)(...cdArray);
|
|
1146
|
+
await resFile.append(new Uint8Array(cd));
|
|
1147
|
+
const eoCDStart = (await resFile.stat()).bigsize;
|
|
1148
|
+
await resFile.append(
|
|
1149
|
+
new Uint8Array(
|
|
1150
|
+
generateEoCD({ recordsNumber: cdArray.length, cdSize: cd.byteLength, cdOffset, eoCDStart })
|
|
1151
|
+
)
|
|
1152
|
+
);
|
|
1153
|
+
}
|
|
1154
|
+
async function addFile(file, resFile, cdArray, fileList) {
|
|
1155
|
+
const size = (await resFile.stat()).bigsize;
|
|
1156
|
+
fileList == null ? void 0 : fileList.push({ fileName: file.path, localHeaderOffset: size });
|
|
1157
|
+
const [localPart, cdHeaderPart] = await generateFileHeaders(file.path, file.file, size);
|
|
1158
|
+
await resFile.append(localPart);
|
|
1159
|
+
cdArray.push(cdHeaderPart);
|
|
1160
|
+
}
|
|
1161
|
+
function getFileIterator(inputPath) {
|
|
1162
|
+
async function* iterable() {
|
|
1163
|
+
const fileList = await getAllFiles(inputPath);
|
|
1164
|
+
for (const filePath of fileList) {
|
|
1165
|
+
const file = await (await (0, import_core.fetchFile)(import_loader_utils5.path.join(inputPath, filePath))).arrayBuffer();
|
|
1166
|
+
yield { path: filePath, file };
|
|
1167
|
+
}
|
|
1168
|
+
}
|
|
1169
|
+
return iterable();
|
|
1170
|
+
}
|
|
1171
|
+
async function getAllFiles(basePath, subfolder = "", fsPassed) {
|
|
1172
|
+
const fs = fsPassed ? fsPassed : new import_loader_utils5.NodeFilesystem({});
|
|
1173
|
+
const files = await fs.readdir(pathJoin(basePath, subfolder));
|
|
1174
|
+
const arrayOfFiles = [];
|
|
1175
|
+
for (const file of files) {
|
|
1176
|
+
const fullPath = pathJoin(basePath, subfolder, file);
|
|
1177
|
+
if ((await fs.stat(fullPath)).isDirectory) {
|
|
1178
|
+
const files2 = await getAllFiles(basePath, pathJoin(subfolder, file));
|
|
1179
|
+
arrayOfFiles.push(...files2);
|
|
1180
|
+
} else {
|
|
1181
|
+
arrayOfFiles.push(pathJoin(subfolder, file));
|
|
1182
|
+
}
|
|
1183
|
+
}
|
|
1184
|
+
return arrayOfFiles;
|
|
1185
|
+
}
|
|
1186
|
+
function pathJoin(...paths) {
|
|
1187
|
+
const resPaths = paths.filter((val) => val.length);
|
|
1188
|
+
return import_loader_utils5.path.join(...resPaths);
|
|
1189
|
+
}
|
|
952
1190
|
|
|
953
1191
|
// src/hash-file-utility.ts
|
|
954
1192
|
var import_crypto2 = require("@loaders.gl/crypto");
|
|
@@ -968,6 +1206,9 @@ function bufferToHex(buffer, start, length) {
|
|
|
968
1206
|
}
|
|
969
1207
|
async function makeHashTableFromZipHeaders(fileProvider) {
|
|
970
1208
|
const zipCDIterator = makeZipCDHeaderIterator(fileProvider);
|
|
1209
|
+
return getHashTable(zipCDIterator);
|
|
1210
|
+
}
|
|
1211
|
+
async function getHashTable(zipCDIterator) {
|
|
971
1212
|
const md5Hash = new import_crypto2.MD5Hash();
|
|
972
1213
|
const textEncoder = new TextEncoder();
|
|
973
1214
|
const hashTable = {};
|
|
@@ -979,10 +1220,20 @@ async function makeHashTableFromZipHeaders(fileProvider) {
|
|
|
979
1220
|
}
|
|
980
1221
|
return hashTable;
|
|
981
1222
|
}
|
|
982
|
-
async function composeHashFile(
|
|
983
|
-
const
|
|
984
|
-
const
|
|
985
|
-
|
|
1223
|
+
async function composeHashFile(zipCDIterator) {
|
|
1224
|
+
const md5Hash = new import_crypto2.MD5Hash();
|
|
1225
|
+
const textEncoder = new TextEncoder();
|
|
1226
|
+
const hashArray = [];
|
|
1227
|
+
for await (const cdHeader of zipCDIterator) {
|
|
1228
|
+
const filename = cdHeader.fileName.split("\\").join("/").toLocaleLowerCase();
|
|
1229
|
+
const arrayBuffer = textEncoder.encode(filename).buffer;
|
|
1230
|
+
const md5 = await md5Hash.hash(arrayBuffer, "hex");
|
|
1231
|
+
hashArray.push(
|
|
1232
|
+
(0, import_loader_utils6.concatenateArrayBuffers)(hexStringToBuffer(md5), bigintToBuffer(cdHeader.localHeaderOffset))
|
|
1233
|
+
);
|
|
1234
|
+
}
|
|
1235
|
+
const bufferArray = hashArray.sort(compareHashes);
|
|
1236
|
+
return (0, import_loader_utils6.concatenateArrayBuffersFromArray)(bufferArray);
|
|
986
1237
|
}
|
|
987
1238
|
function compareHashes(arrA, arrB) {
|
|
988
1239
|
const a = new BigUint64Array(arrA);
|
package/dist/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export { parseZipCDFileHeader, makeZipCDHeaderIterator, signature as CD_HEADER_S
|
|
|
5
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
|
-
export { addOneFile } from './parse-zip/zip-
|
|
8
|
+
export { addOneFile, createZip } from './parse-zip/zip-composition';
|
|
9
9
|
export { parseHashTable, makeHashTableFromZipHeaders, composeHashFile } from './hash-file-utility';
|
|
10
10
|
export { ZipFileSystem } from './filesystems/zip-filesystem';
|
|
11
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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;AACjE,OAAO,EAAC,UAAU,EAAC,MAAM,6BAA6B,CAAC;
|
|
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;AACjE,OAAO,EAAC,UAAU,EAAE,SAAS,EAAC,MAAM,6BAA6B,CAAC;AAGlE,OAAO,EAAC,cAAc,EAAE,2BAA2B,EAAE,eAAe,EAAC,MAAM,qBAAqB,CAAC;AAEjG,OAAO,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ export { parseZipCDFileHeader, makeZipCDHeaderIterator, signature as CD_HEADER_S
|
|
|
5
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
|
-
export { addOneFile } from "./parse-zip/zip-
|
|
8
|
+
export { addOneFile, createZip } from "./parse-zip/zip-composition.js";
|
|
9
9
|
export { parseHashTable, makeHashTableFromZipHeaders, composeHashFile } from "./hash-file-utility.js";
|
|
10
10
|
export { ZipFileSystem } from "./filesystems/zip-filesystem.js";
|
|
11
11
|
//# sourceMappingURL=index.js.map
|
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","generateLocalHeader","parseEoCDRecord","searchFromTheEnd","addOneFile","parseHashTable","makeHashTableFromZipHeaders","composeHashFile","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';\nexport {addOneFile} from './parse-zip/zip-
|
|
1
|
+
{"version":3,"file":"index.js","names":["ZipLoader","ZipWriter","TarBuilder","parseZipCDFileHeader","makeZipCDHeaderIterator","signature","CD_HEADER_SIGNATURE","generateCDHeader","parseZipLocalFileHeader","localHeaderSignature","generateLocalHeader","parseEoCDRecord","searchFromTheEnd","addOneFile","createZip","parseHashTable","makeHashTableFromZipHeaders","composeHashFile","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';\nexport {addOneFile, createZip} from './parse-zip/zip-composition';\n\n// export type {HashElement} from './hash-file-utility';\nexport {parseHashTable, makeHashTableFromZipHeaders, composeHashFile} 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,SAChBC,UAAU,EAAEC,SAAS;AAAA,SAGrBC,cAAc,EAAEC,2BAA2B,EAAEC,eAAe;AAAA,SAE5DC,aAAa"}
|
|
@@ -19,6 +19,16 @@ export type ZipEoCDRecordOffsets = {
|
|
|
19
19
|
zip64EoCDOffset?: bigint;
|
|
20
20
|
zip64EoCDLocatorOffset?: bigint;
|
|
21
21
|
};
|
|
22
|
+
/**
|
|
23
|
+
* Data to generate End of central directory record
|
|
24
|
+
* according to https://en.wikipedia.org/wiki/ZIP_(file_format)
|
|
25
|
+
*/
|
|
26
|
+
export type ZipEoCDGenerationOptions = {
|
|
27
|
+
recordsNumber: number;
|
|
28
|
+
cdSize: number;
|
|
29
|
+
cdOffset: bigint;
|
|
30
|
+
eoCDStart: bigint;
|
|
31
|
+
};
|
|
22
32
|
/**
|
|
23
33
|
* Parses end of central directory record of zip file
|
|
24
34
|
* @param file - FileProvider instance
|
|
@@ -33,5 +43,11 @@ export declare const parseEoCDRecord: (file: FileProvider) => Promise<ZipEoCDRec
|
|
|
33
43
|
* @param eocdStartOffset EoCD start offset to be updated
|
|
34
44
|
* @returns new EoCD header
|
|
35
45
|
*/
|
|
36
|
-
export declare function updateEoCD(eocdBody: ArrayBuffer, oldEoCDOffsets: ZipEoCDRecordOffsets, newCDStartOffset: bigint, eocdStartOffset: bigint, newCDRecordsNumber: bigint):
|
|
46
|
+
export declare function updateEoCD(eocdBody: ArrayBuffer, oldEoCDOffsets: ZipEoCDRecordOffsets, newCDStartOffset: bigint, eocdStartOffset: bigint, newCDRecordsNumber: bigint): Uint8Array;
|
|
47
|
+
/**
|
|
48
|
+
* generates EoCD record
|
|
49
|
+
* @param options data to generate EoCD record
|
|
50
|
+
* @returns ArrayBuffer with EoCD record
|
|
51
|
+
*/
|
|
52
|
+
export declare function generateEoCD(options: ZipEoCDGenerationOptions): ArrayBuffer;
|
|
37
53
|
//# sourceMappingURL=end-of-central-directory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"end-of-central-directory.d.ts","sourceRoot":"","sources":["../../src/parse-zip/end-of-central-directory.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"end-of-central-directory.d.ts","sourceRoot":"","sources":["../../src/parse-zip/end-of-central-directory.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,YAAY,EAA+C,MAAM,0BAA0B,CAAC;AAIpG;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,2CAA2C;IAC3C,aAAa,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,oBAAoB,CAAC;CAC/B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,EAAE,MAAM,CAAC;IAEtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAmBF;;;;GAIG;AACH,eAAO,MAAM,eAAe,SAAgB,YAAY,KAAG,QAAQ,aAAa,CAmC/E,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,WAAW,EACrB,cAAc,EAAE,oBAAoB,EACpC,gBAAgB,EAAE,MAAM,EACxB,eAAe,EAAE,MAAM,EACvB,kBAAkB,EAAE,MAAM,GACzB,UAAU,CAmDZ;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,wBAAwB,GAAG,WAAW,CAgB3E"}
|