@zip.js/zip.js 2.6.12 → 2.6.15
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/README.md +66 -13
- package/cli-deno/mc-zip.js +1 -1
- package/dist/zip-fs-full.js +40 -26
- package/dist/zip-fs-full.min.js +1 -1
- package/dist/zip-fs.js +40 -26
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-full.js +39 -25
- package/dist/zip-full.min.js +1 -1
- package/dist/zip-no-worker-deflate.min.js +1 -1
- package/dist/zip-no-worker-inflate.min.js +1 -1
- package/dist/zip-no-worker.min.js +1 -1
- package/dist/zip.js +39 -25
- package/dist/zip.min.js +1 -1
- package/index.d.ts +15 -9
- package/lib/core/io.js +11 -10
- package/lib/core/util/cp437-decode.js +12 -5
- package/lib/core/zip-fs-core.js +1 -1
- package/lib/core/zip-reader.js +2 -1
- package/lib/core/zip-writer.js +14 -9
- package/package.json +2 -2
- package/tests/all/test-sw-worker.js +0 -1
package/lib/core/zip-fs-core.js
CHANGED
|
@@ -121,7 +121,7 @@ class ZipFileEntry extends ZipEntry {
|
|
|
121
121
|
return zipEntry.data;
|
|
122
122
|
} else {
|
|
123
123
|
const reader = zipEntry.reader = new zipEntry.Reader(zipEntry.data, options);
|
|
124
|
-
await Promise.all([initStream(reader), initStream(writer)]);
|
|
124
|
+
await Promise.all([initStream(reader), initStream(writer, zipEntry.data.uncompressedSize)]);
|
|
125
125
|
zipEntry.uncompressedSize = reader.size;
|
|
126
126
|
const readable = reader.readable;
|
|
127
127
|
readable.size = () => reader.size;
|
package/lib/core/zip-reader.js
CHANGED
|
@@ -282,6 +282,7 @@ class ZipEntry {
|
|
|
282
282
|
bitFlag,
|
|
283
283
|
signature,
|
|
284
284
|
rawLastModDate,
|
|
285
|
+
uncompressedSize,
|
|
285
286
|
compressedSize
|
|
286
287
|
} = zipEntry;
|
|
287
288
|
const localDirectory = zipEntry.localDirectory = {};
|
|
@@ -322,7 +323,7 @@ class ZipEntry {
|
|
|
322
323
|
readable.size = size;
|
|
323
324
|
const { writable } = writer;
|
|
324
325
|
const signal = getOptionValue(zipEntry, options, "signal");
|
|
325
|
-
await initStream(writer);
|
|
326
|
+
await initStream(writer, uncompressedSize);
|
|
326
327
|
const { onstart, onprogress, onend } = options;
|
|
327
328
|
const workerOptions = {
|
|
328
329
|
options: {
|
package/lib/core/zip-writer.js
CHANGED
|
@@ -321,8 +321,9 @@ async function getFileEntry(zipWriter, name, reader, options) {
|
|
|
321
321
|
let bufferedWrite;
|
|
322
322
|
let releaseLockWriter;
|
|
323
323
|
let releaseLockCurrentFileEntry;
|
|
324
|
-
let
|
|
324
|
+
let writingBufferedData;
|
|
325
325
|
let fileWriter;
|
|
326
|
+
let fileWriterSize;
|
|
326
327
|
files.set(name, fileEntry);
|
|
327
328
|
try {
|
|
328
329
|
let lockPreviousFileEntry;
|
|
@@ -339,6 +340,7 @@ async function getFileEntry(zipWriter, name, reader, options) {
|
|
|
339
340
|
await initStream(writer);
|
|
340
341
|
fileWriter = writer;
|
|
341
342
|
}
|
|
343
|
+
fileWriterSize = fileWriter.size;
|
|
342
344
|
fileEntry = await createFileEntry(reader, fileEntry, fileWriter.writable, zipWriter.config, options);
|
|
343
345
|
files.set(name, fileEntry);
|
|
344
346
|
fileEntry.filename = name;
|
|
@@ -346,7 +348,7 @@ async function getFileEntry(zipWriter, name, reader, options) {
|
|
|
346
348
|
let blob = fileWriter.getData();
|
|
347
349
|
await lockPreviousFileEntry;
|
|
348
350
|
await requestLockWriter();
|
|
349
|
-
|
|
351
|
+
writingBufferedData = true;
|
|
350
352
|
const { writable } = writer;
|
|
351
353
|
if (!dataDescriptor) {
|
|
352
354
|
const headerLength = 26;
|
|
@@ -366,7 +368,7 @@ async function getFileEntry(zipWriter, name, reader, options) {
|
|
|
366
368
|
blob = blob.slice(headerLength);
|
|
367
369
|
}
|
|
368
370
|
await blob.stream().pipeTo(writable, { preventClose: true, signal });
|
|
369
|
-
|
|
371
|
+
writingBufferedData = false;
|
|
370
372
|
}
|
|
371
373
|
fileEntry.offset = zipWriter.offset;
|
|
372
374
|
if (fileEntry.zip64) {
|
|
@@ -378,9 +380,12 @@ async function getFileEntry(zipWriter, name, reader, options) {
|
|
|
378
380
|
zipWriter.offset += fileEntry.length;
|
|
379
381
|
return fileEntry;
|
|
380
382
|
} catch (error) {
|
|
381
|
-
if ((bufferedWrite &&
|
|
382
|
-
|
|
383
|
-
|
|
383
|
+
if ((bufferedWrite && writingBufferedData) || (!bufferedWrite && fileEntry.writingData)) {
|
|
384
|
+
zipWriter.hasCorruptedEntries = true;
|
|
385
|
+
if (error) {
|
|
386
|
+
error.corruptedEntry = true;
|
|
387
|
+
}
|
|
388
|
+
zipWriter.offset += fileWriter.size - fileWriterSize;
|
|
384
389
|
}
|
|
385
390
|
files.delete(name);
|
|
386
391
|
throw error;
|
|
@@ -557,10 +562,10 @@ async function createFileEntry(reader, pendingFileEntry, writable, config, optio
|
|
|
557
562
|
arraySet(localHeaderArray, rawExtraField, 30 + rawFilename.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length);
|
|
558
563
|
let result;
|
|
559
564
|
let compressedSize = 0;
|
|
565
|
+
fileEntry.writingData = pendingFileEntry.writingData = true;
|
|
560
566
|
if (reader) {
|
|
561
567
|
reader.chunkSize = getChunkSize(config);
|
|
562
568
|
await writeData(writable, localHeaderArray);
|
|
563
|
-
fileEntry.dataWritten = pendingFileEntry.dataWritten = true;
|
|
564
569
|
const size = () => reader.size;
|
|
565
570
|
const readable = reader.readable;
|
|
566
571
|
readable.size = size;
|
|
@@ -587,7 +592,6 @@ async function createFileEntry(reader, pendingFileEntry, writable, config, optio
|
|
|
587
592
|
compressedSize = result.size;
|
|
588
593
|
} else {
|
|
589
594
|
await writeData(writable, localHeaderArray);
|
|
590
|
-
fileEntry.dataWritten = pendingFileEntry.dataWritten = true;
|
|
591
595
|
}
|
|
592
596
|
let dataDescriptorArray = new Uint8Array();
|
|
593
597
|
let dataDescriptorView, dataDescriptorOffset = 0;
|
|
@@ -640,7 +644,8 @@ async function createFileEntry(reader, pendingFileEntry, writable, config, optio
|
|
|
640
644
|
creationDate,
|
|
641
645
|
lastAccessDate,
|
|
642
646
|
encrypted,
|
|
643
|
-
length
|
|
647
|
+
length,
|
|
648
|
+
writingData: false
|
|
644
649
|
});
|
|
645
650
|
return fileEntry;
|
|
646
651
|
}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "A JavaScript library to zip and unzip files in the browser, Deno and Node.js",
|
|
4
4
|
"author": "Gildas Lormeau",
|
|
5
5
|
"license": "BSD-3-Clause",
|
|
6
|
-
"version": "2.6.
|
|
6
|
+
"version": "2.6.15",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"keywords": [
|
|
9
9
|
"zip",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"@rollup/plugin-node-resolve": "^13.3.0",
|
|
54
54
|
"@rollup/plugin-replace": "^4.0.0",
|
|
55
55
|
"http-server": "^14.1.1",
|
|
56
|
-
"rollup": "^2.
|
|
56
|
+
"rollup": "^2.78.0",
|
|
57
57
|
"rollup-plugin-terser": "^7.0.2",
|
|
58
58
|
"typedoc": "^0.23.10"
|
|
59
59
|
}
|