@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/dist/zip-fs.js
CHANGED
|
@@ -2716,18 +2716,19 @@
|
|
|
2716
2716
|
|
|
2717
2717
|
class Uint8ArrayWriter extends Writer {
|
|
2718
2718
|
|
|
2719
|
-
|
|
2720
|
-
|
|
2721
|
-
this.array = new Uint8Array();
|
|
2719
|
+
init(initSize = 0) {
|
|
2720
|
+
this.array = new Uint8Array(initSize);
|
|
2722
2721
|
}
|
|
2723
2722
|
|
|
2724
2723
|
writeUint8Array(array) {
|
|
2725
|
-
super.writeUint8Array(array);
|
|
2726
2724
|
const writer = this;
|
|
2727
|
-
|
|
2728
|
-
|
|
2729
|
-
|
|
2730
|
-
|
|
2725
|
+
if (writer.size + array.length > writer.array.length) {
|
|
2726
|
+
const previousArray = writer.array;
|
|
2727
|
+
writer.array = new Uint8Array(previousArray.length + array.length);
|
|
2728
|
+
writer.array.set(previousArray);
|
|
2729
|
+
}
|
|
2730
|
+
writer.array.set(array, writer.size);
|
|
2731
|
+
super.writeUint8Array(array);
|
|
2731
2732
|
}
|
|
2732
2733
|
|
|
2733
2734
|
getData() {
|
|
@@ -2741,9 +2742,9 @@
|
|
|
2741
2742
|
return protocol == "http:" || protocol == "https:";
|
|
2742
2743
|
}
|
|
2743
2744
|
|
|
2744
|
-
async function initStream(stream) {
|
|
2745
|
+
async function initStream(stream, initSize) {
|
|
2745
2746
|
if (stream.init && !stream.initialized) {
|
|
2746
|
-
await stream.init();
|
|
2747
|
+
await stream.init(initSize);
|
|
2747
2748
|
}
|
|
2748
2749
|
}
|
|
2749
2750
|
|
|
@@ -2845,14 +2846,21 @@
|
|
|
2845
2846
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
2846
2847
|
*/
|
|
2847
2848
|
|
|
2849
|
+
/* global TextDecoder */
|
|
2850
|
+
|
|
2848
2851
|
const CP437 = "\0☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ".split("");
|
|
2852
|
+
const VALID_CP437 = CP437.length == 256;
|
|
2849
2853
|
|
|
2850
|
-
var decodeCP437 = stringValue => {
|
|
2851
|
-
|
|
2852
|
-
|
|
2853
|
-
|
|
2854
|
+
var decodeCP437 = (stringValue) => {
|
|
2855
|
+
if (VALID_CP437) {
|
|
2856
|
+
let result = "";
|
|
2857
|
+
for (let indexCharacter = 0; indexCharacter < stringValue.length; indexCharacter++) {
|
|
2858
|
+
result += CP437[stringValue[indexCharacter]];
|
|
2859
|
+
}
|
|
2860
|
+
return result;
|
|
2861
|
+
} else {
|
|
2862
|
+
return new TextDecoder().decode(stringValue);
|
|
2854
2863
|
}
|
|
2855
|
-
return result;
|
|
2856
2864
|
};
|
|
2857
2865
|
|
|
2858
2866
|
/*
|
|
@@ -3155,6 +3163,7 @@
|
|
|
3155
3163
|
bitFlag,
|
|
3156
3164
|
signature,
|
|
3157
3165
|
rawLastModDate,
|
|
3166
|
+
uncompressedSize,
|
|
3158
3167
|
compressedSize
|
|
3159
3168
|
} = zipEntry;
|
|
3160
3169
|
const localDirectory = zipEntry.localDirectory = {};
|
|
@@ -3195,7 +3204,7 @@
|
|
|
3195
3204
|
readable.size = size;
|
|
3196
3205
|
const { writable } = writer;
|
|
3197
3206
|
const signal = getOptionValue$1(zipEntry, options, "signal");
|
|
3198
|
-
await initStream(writer);
|
|
3207
|
+
await initStream(writer, uncompressedSize);
|
|
3199
3208
|
const { onstart, onprogress, onend } = options;
|
|
3200
3209
|
const workerOptions = {
|
|
3201
3210
|
options: {
|
|
@@ -3743,8 +3752,9 @@
|
|
|
3743
3752
|
let bufferedWrite;
|
|
3744
3753
|
let releaseLockWriter;
|
|
3745
3754
|
let releaseLockCurrentFileEntry;
|
|
3746
|
-
let
|
|
3755
|
+
let writingBufferedData;
|
|
3747
3756
|
let fileWriter;
|
|
3757
|
+
let fileWriterSize;
|
|
3748
3758
|
files.set(name, fileEntry);
|
|
3749
3759
|
try {
|
|
3750
3760
|
let lockPreviousFileEntry;
|
|
@@ -3761,6 +3771,7 @@
|
|
|
3761
3771
|
await initStream(writer);
|
|
3762
3772
|
fileWriter = writer;
|
|
3763
3773
|
}
|
|
3774
|
+
fileWriterSize = fileWriter.size;
|
|
3764
3775
|
fileEntry = await createFileEntry(reader, fileEntry, fileWriter.writable, zipWriter.config, options);
|
|
3765
3776
|
files.set(name, fileEntry);
|
|
3766
3777
|
fileEntry.filename = name;
|
|
@@ -3768,7 +3779,7 @@
|
|
|
3768
3779
|
let blob = fileWriter.getData();
|
|
3769
3780
|
await lockPreviousFileEntry;
|
|
3770
3781
|
await requestLockWriter();
|
|
3771
|
-
|
|
3782
|
+
writingBufferedData = true;
|
|
3772
3783
|
const { writable } = writer;
|
|
3773
3784
|
if (!dataDescriptor) {
|
|
3774
3785
|
const headerLength = 26;
|
|
@@ -3788,7 +3799,7 @@
|
|
|
3788
3799
|
blob = blob.slice(headerLength);
|
|
3789
3800
|
}
|
|
3790
3801
|
await blob.stream().pipeTo(writable, { preventClose: true, signal });
|
|
3791
|
-
|
|
3802
|
+
writingBufferedData = false;
|
|
3792
3803
|
}
|
|
3793
3804
|
fileEntry.offset = zipWriter.offset;
|
|
3794
3805
|
if (fileEntry.zip64) {
|
|
@@ -3800,9 +3811,12 @@
|
|
|
3800
3811
|
zipWriter.offset += fileEntry.length;
|
|
3801
3812
|
return fileEntry;
|
|
3802
3813
|
} catch (error) {
|
|
3803
|
-
if ((bufferedWrite &&
|
|
3804
|
-
|
|
3805
|
-
|
|
3814
|
+
if ((bufferedWrite && writingBufferedData) || (!bufferedWrite && fileEntry.writingData)) {
|
|
3815
|
+
zipWriter.hasCorruptedEntries = true;
|
|
3816
|
+
if (error) {
|
|
3817
|
+
error.corruptedEntry = true;
|
|
3818
|
+
}
|
|
3819
|
+
zipWriter.offset += fileWriter.size - fileWriterSize;
|
|
3806
3820
|
}
|
|
3807
3821
|
files.delete(name);
|
|
3808
3822
|
throw error;
|
|
@@ -3979,10 +3993,10 @@
|
|
|
3979
3993
|
arraySet(localHeaderArray, rawExtraField, 30 + rawFilename.length + rawExtraFieldAES.length + rawExtraFieldExtendedTimestamp.length + rawExtraFieldNTFS.length);
|
|
3980
3994
|
let result;
|
|
3981
3995
|
let compressedSize = 0;
|
|
3996
|
+
fileEntry.writingData = pendingFileEntry.writingData = true;
|
|
3982
3997
|
if (reader) {
|
|
3983
3998
|
reader.chunkSize = getChunkSize(config);
|
|
3984
3999
|
await writeData(writable, localHeaderArray);
|
|
3985
|
-
fileEntry.dataWritten = pendingFileEntry.dataWritten = true;
|
|
3986
4000
|
const size = () => reader.size;
|
|
3987
4001
|
const readable = reader.readable;
|
|
3988
4002
|
readable.size = size;
|
|
@@ -4009,7 +4023,6 @@
|
|
|
4009
4023
|
compressedSize = result.size;
|
|
4010
4024
|
} else {
|
|
4011
4025
|
await writeData(writable, localHeaderArray);
|
|
4012
|
-
fileEntry.dataWritten = pendingFileEntry.dataWritten = true;
|
|
4013
4026
|
}
|
|
4014
4027
|
let dataDescriptorArray = new Uint8Array();
|
|
4015
4028
|
let dataDescriptorView, dataDescriptorOffset = 0;
|
|
@@ -4062,7 +4075,8 @@
|
|
|
4062
4075
|
creationDate,
|
|
4063
4076
|
lastAccessDate,
|
|
4064
4077
|
encrypted,
|
|
4065
|
-
length
|
|
4078
|
+
length,
|
|
4079
|
+
writingData: false
|
|
4066
4080
|
});
|
|
4067
4081
|
return fileEntry;
|
|
4068
4082
|
}
|
|
@@ -4344,7 +4358,7 @@
|
|
|
4344
4358
|
return zipEntry.data;
|
|
4345
4359
|
} else {
|
|
4346
4360
|
const reader = zipEntry.reader = new zipEntry.Reader(zipEntry.data, options);
|
|
4347
|
-
await Promise.all([initStream(reader), initStream(writer)]);
|
|
4361
|
+
await Promise.all([initStream(reader), initStream(writer, zipEntry.data.uncompressedSize)]);
|
|
4348
4362
|
zipEntry.uncompressedSize = reader.size;
|
|
4349
4363
|
const readable = reader.readable;
|
|
4350
4364
|
readable.size = () => reader.size;
|