@zip.js/zip.js 2.5.20 → 2.5.21
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/cli-deno/mc-zip.js +10 -4
- package/dist/zip-fs-full.js +42 -45
- package/dist/zip-fs-full.min.js +1 -1
- package/dist/zip-fs.js +42 -45
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-full.js +42 -45
- 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 +42 -45
- package/dist/zip.min.js +1 -1
- package/index.d.ts +6 -0
- package/lib/core/zip-reader.js +16 -5
- package/lib/core/zip-writer.js +26 -40
- package/lib/zip-fs.js +3 -3
- package/lib/zip-full-fflate.js +3 -3
- package/lib/zip-full.js +3 -3
- package/lib/zip-no-worker-deflate.js +3 -3
- package/lib/zip-no-worker-fflate-deflate.js +3 -3
- package/lib/zip-no-worker-fflate-inflate.js +3 -3
- package/lib/zip-no-worker-fflate.js +3 -3
- package/lib/zip-no-worker-inflate.js +3 -3
- package/lib/zip-no-worker.js +3 -3
- package/lib/zip.js +3 -3
- package/package.json +1 -1
- package/rollup-fflate.config.js +3 -3
- package/tests/all/test-wrapped.js +8 -4
package/cli-deno/mc-zip.js
CHANGED
|
@@ -105,7 +105,7 @@ async function getFileInfo(file, options) {
|
|
|
105
105
|
name = file;
|
|
106
106
|
resolvedName = resolvePath(name);
|
|
107
107
|
}
|
|
108
|
-
name = normalizePath(
|
|
108
|
+
name = normalizePath(replaceSlashes(name));
|
|
109
109
|
if (resolvedName) {
|
|
110
110
|
if (options.preventParentDirectories) {
|
|
111
111
|
name = cleanFilename(name);
|
|
@@ -154,8 +154,9 @@ function getTextWriter(stdout) {
|
|
|
154
154
|
return textEncoderStream.writable.getWriter();
|
|
155
155
|
}
|
|
156
156
|
|
|
157
|
-
function
|
|
158
|
-
|
|
157
|
+
function replaceSlashes(url) {
|
|
158
|
+
url = url.replace(/\\/g, "/");
|
|
159
|
+
const match = url.match(/^(?:\/)?(.*?)(?:\/)?$/);
|
|
159
160
|
if (match) {
|
|
160
161
|
return match[1];
|
|
161
162
|
} else {
|
|
@@ -164,7 +165,12 @@ function trimSlashes(url) {
|
|
|
164
165
|
}
|
|
165
166
|
|
|
166
167
|
function cleanFilename(name) {
|
|
167
|
-
|
|
168
|
+
const result = replaceSlashes(("/" + name + "/").replace(/(\/|\\)+(\.+)(\/|\\)+/g, "/"));
|
|
169
|
+
if (result == name) {
|
|
170
|
+
return result;
|
|
171
|
+
} else {
|
|
172
|
+
return cleanFilename(result);
|
|
173
|
+
}
|
|
168
174
|
}
|
|
169
175
|
|
|
170
176
|
function toCamelCase(kebabCase) {
|
package/dist/zip-fs-full.js
CHANGED
|
@@ -8224,8 +8224,12 @@
|
|
|
8224
8224
|
const endOfDirectoryView = getDataView$1(endOfDirectoryInfo);
|
|
8225
8225
|
let directoryDataLength = getUint32(endOfDirectoryView, 12);
|
|
8226
8226
|
let directoryDataOffset = getUint32(endOfDirectoryView, 16);
|
|
8227
|
+
const commentOffset = endOfDirectoryInfo.offset;
|
|
8228
|
+
const commentLength = getUint16(endOfDirectoryView, 20);
|
|
8229
|
+
const appendedDataOffset = commentOffset + END_OF_CENTRAL_DIR_LENGTH + commentLength;
|
|
8227
8230
|
let filesLength = getUint16(endOfDirectoryView, 8);
|
|
8228
8231
|
let prependedDataLength = 0;
|
|
8232
|
+
let startOffset = 0;
|
|
8229
8233
|
if (directoryDataOffset == MAX_32_BITS || directoryDataLength == MAX_32_BITS || filesLength == MAX_16_BITS) {
|
|
8230
8234
|
const endOfDirectoryLocatorArray = await readUint8Array(reader, endOfDirectoryInfo.offset - ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH, ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH);
|
|
8231
8235
|
const endOfDirectoryLocatorView = getDataView$1(endOfDirectoryLocatorArray);
|
|
@@ -8296,6 +8300,7 @@
|
|
|
8296
8300
|
commentUTF8: languageEncodingFlag,
|
|
8297
8301
|
rawExtraField: directoryArray.subarray(extraFieldOffset, commentOffset)
|
|
8298
8302
|
});
|
|
8303
|
+
startOffset = Math.max(fileEntry.offset, startOffset);
|
|
8299
8304
|
const endOffset = commentOffset + fileEntry.commentLength;
|
|
8300
8305
|
fileEntry.rawComment = directoryArray.subarray(commentOffset, endOffset);
|
|
8301
8306
|
const filenameEncoding = getOptionValue$1(zipReader, options, "filenameEncoding");
|
|
@@ -8322,16 +8327,22 @@
|
|
|
8322
8327
|
}
|
|
8323
8328
|
yield entry;
|
|
8324
8329
|
}
|
|
8330
|
+
const extractPrependedData = getOptionValue$1(zipReader, options, "extractPrependedData");
|
|
8331
|
+
const extractAppendedData = getOptionValue$1(zipReader, options, "extractAppendedData");
|
|
8332
|
+
if (extractPrependedData) {
|
|
8333
|
+
zipReader.prependedData = await readUint8Array(reader, 0, startOffset);
|
|
8334
|
+
}
|
|
8335
|
+
zipReader.comment = await readUint8Array(reader, commentOffset + END_OF_CENTRAL_DIR_LENGTH, commentLength);
|
|
8336
|
+
if (extractAppendedData) {
|
|
8337
|
+
zipReader.appendedData = appendedDataOffset < reader.size ? await readUint8Array(reader, appendedDataOffset, reader.size - appendedDataOffset) : new Uint8Array();
|
|
8338
|
+
}
|
|
8325
8339
|
return true;
|
|
8326
8340
|
}
|
|
8327
8341
|
|
|
8328
8342
|
async getEntries(options = {}) {
|
|
8329
8343
|
const entries = [];
|
|
8330
|
-
const
|
|
8331
|
-
|
|
8332
|
-
while (!(await result).done) {
|
|
8333
|
-
entries.push((await result).value);
|
|
8334
|
-
result = iterator.next();
|
|
8344
|
+
for await (const entry of this.getEntriesGenerator(options)) {
|
|
8345
|
+
entries.push(entry);
|
|
8335
8346
|
}
|
|
8336
8347
|
return entries;
|
|
8337
8348
|
}
|
|
@@ -8779,7 +8790,7 @@
|
|
|
8779
8790
|
await Promise.all(Array.from(pendingAddFileCalls));
|
|
8780
8791
|
}
|
|
8781
8792
|
await closeFile(this, comment, options);
|
|
8782
|
-
if (!writer.preventClose) {
|
|
8793
|
+
if (!writer.preventClose && !options.preventClose) {
|
|
8783
8794
|
await writable.getWriter().close();
|
|
8784
8795
|
}
|
|
8785
8796
|
return writer.getData ? writer.getData() : writable;
|
|
@@ -8932,8 +8943,9 @@
|
|
|
8932
8943
|
const previousFileEntry = Array.from(files.values()).pop();
|
|
8933
8944
|
let fileEntry = {};
|
|
8934
8945
|
let bufferedWrite;
|
|
8935
|
-
let
|
|
8946
|
+
let releaseLockWriter;
|
|
8936
8947
|
let resolveLockCurrentFileEntry;
|
|
8948
|
+
let writingBufferedData;
|
|
8937
8949
|
files.set(name, fileEntry);
|
|
8938
8950
|
try {
|
|
8939
8951
|
let lockPreviousFileEntry;
|
|
@@ -8942,12 +8954,12 @@
|
|
|
8942
8954
|
lockPreviousFileEntry = previousFileEntry && previousFileEntry.lock;
|
|
8943
8955
|
}
|
|
8944
8956
|
fileEntry.lock = new Promise(resolve => resolveLockCurrentFileEntry = resolve);
|
|
8945
|
-
if (options.bufferedWrite || zipWriter.
|
|
8957
|
+
if (options.bufferedWrite || zipWriter.lockWriter || !options.dataDescriptor) {
|
|
8946
8958
|
fileWriter = new BlobWriter();
|
|
8947
8959
|
fileWriter.init();
|
|
8948
8960
|
bufferedWrite = true;
|
|
8949
8961
|
} else {
|
|
8950
|
-
zipWriter.
|
|
8962
|
+
zipWriter.lockWriter = Promise.resolve();
|
|
8951
8963
|
if (writer.init && !writer.initialized) {
|
|
8952
8964
|
await writer.init();
|
|
8953
8965
|
}
|
|
@@ -8957,11 +8969,10 @@
|
|
|
8957
8969
|
files.set(name, fileEntry);
|
|
8958
8970
|
fileEntry.filename = name;
|
|
8959
8971
|
if (bufferedWrite) {
|
|
8960
|
-
let
|
|
8961
|
-
const blob = fileWriter.getData();
|
|
8972
|
+
let blob = fileWriter.getData();
|
|
8962
8973
|
await lockPreviousFileEntry;
|
|
8963
|
-
await
|
|
8964
|
-
|
|
8974
|
+
await lockWriter();
|
|
8975
|
+
writingBufferedData = true;
|
|
8965
8976
|
const { writable } = writer;
|
|
8966
8977
|
if (!options.dataDescriptor) {
|
|
8967
8978
|
const headerLength = 26;
|
|
@@ -8978,10 +8989,10 @@
|
|
|
8978
8989
|
setUint32(arrayBufferView, 22, fileEntry.uncompressedSize);
|
|
8979
8990
|
}
|
|
8980
8991
|
await writeUint8Array(writable, new Uint8Array(arrayBuffer));
|
|
8981
|
-
|
|
8992
|
+
blob = blob.slice(headerLength);
|
|
8982
8993
|
}
|
|
8983
|
-
await
|
|
8984
|
-
|
|
8994
|
+
await blob.stream().pipeTo(writable, { preventClose: true });
|
|
8995
|
+
writingBufferedData = false;
|
|
8985
8996
|
}
|
|
8986
8997
|
fileEntry.offset = zipWriter.offset;
|
|
8987
8998
|
if (fileEntry.zip64) {
|
|
@@ -8993,7 +9004,7 @@
|
|
|
8993
9004
|
zipWriter.offset += fileEntry.length;
|
|
8994
9005
|
return fileEntry;
|
|
8995
9006
|
} catch (error) {
|
|
8996
|
-
if ((bufferedWrite &&
|
|
9007
|
+
if ((bufferedWrite && writingBufferedData) || (!bufferedWrite && fileEntry.dataWritten)) {
|
|
8997
9008
|
error.corruptedEntry = zipWriter.hasCorruptedEntries = true;
|
|
8998
9009
|
if (fileEntry.uncompressedSize) {
|
|
8999
9010
|
zipWriter.offset += fileEntry.uncompressedSize;
|
|
@@ -9003,17 +9014,17 @@
|
|
|
9003
9014
|
throw error;
|
|
9004
9015
|
} finally {
|
|
9005
9016
|
resolveLockCurrentFileEntry();
|
|
9006
|
-
if (
|
|
9007
|
-
|
|
9017
|
+
if (releaseLockWriter) {
|
|
9018
|
+
releaseLockWriter();
|
|
9008
9019
|
}
|
|
9009
9020
|
}
|
|
9010
9021
|
|
|
9011
|
-
async function
|
|
9012
|
-
if (zipWriter.
|
|
9013
|
-
await zipWriter.
|
|
9014
|
-
await
|
|
9022
|
+
async function lockWriter() {
|
|
9023
|
+
if (zipWriter.lockWriter) {
|
|
9024
|
+
await zipWriter.lockWriter.then(() => delete zipWriter.lockWriter);
|
|
9025
|
+
await lockWriter();
|
|
9015
9026
|
} else {
|
|
9016
|
-
zipWriter.
|
|
9027
|
+
zipWriter.lockWriter = new Promise(resolve => releaseLockWriter = resolve);
|
|
9017
9028
|
}
|
|
9018
9029
|
}
|
|
9019
9030
|
}
|
|
@@ -9272,13 +9283,6 @@
|
|
|
9272
9283
|
}
|
|
9273
9284
|
const directoryArray = new Uint8Array(directoryDataLength + (zip64 ? ZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH : END_OF_CENTRAL_DIR_LENGTH));
|
|
9274
9285
|
const directoryView = getDataView(directoryArray);
|
|
9275
|
-
if (comment && comment.length) {
|
|
9276
|
-
if (comment.length <= MAX_16_BITS) {
|
|
9277
|
-
setUint16(directoryView, offset + 20, comment.length);
|
|
9278
|
-
} else {
|
|
9279
|
-
throw new Error(ERR_INVALID_COMMENT);
|
|
9280
|
-
}
|
|
9281
|
-
}
|
|
9282
9286
|
for (const [indexFileEntry, fileEntry] of Array.from(files.values()).entries()) {
|
|
9283
9287
|
const {
|
|
9284
9288
|
rawFilename,
|
|
@@ -9362,6 +9366,13 @@
|
|
|
9362
9366
|
setUint16(directoryView, offset + 10, filesLength);
|
|
9363
9367
|
setUint32(directoryView, offset + 12, directoryDataLength);
|
|
9364
9368
|
setUint32(directoryView, offset + 16, directoryOffset);
|
|
9369
|
+
if (comment && comment.length) {
|
|
9370
|
+
if (comment.length <= MAX_16_BITS) {
|
|
9371
|
+
setUint16(directoryView, offset + 20, comment.length);
|
|
9372
|
+
} else {
|
|
9373
|
+
throw new Error(ERR_INVALID_COMMENT);
|
|
9374
|
+
}
|
|
9375
|
+
}
|
|
9365
9376
|
const { writable } = zipWriter.writer;
|
|
9366
9377
|
await writeUint8Array(writable, directoryArray);
|
|
9367
9378
|
if (comment && comment.length) {
|
|
@@ -9377,20 +9388,6 @@
|
|
|
9377
9388
|
}
|
|
9378
9389
|
}
|
|
9379
9390
|
|
|
9380
|
-
async function writeBlob(writable, blob, start = 0) {
|
|
9381
|
-
const blockSize = 512 * 1024 * 1024;
|
|
9382
|
-
await writeSlice();
|
|
9383
|
-
|
|
9384
|
-
async function writeSlice() {
|
|
9385
|
-
if (start < blob.size) {
|
|
9386
|
-
const arrayBuffer = await sliceAsArrayBuffer(blob, start, start + blockSize);
|
|
9387
|
-
await writeUint8Array(writable, new Uint8Array(arrayBuffer));
|
|
9388
|
-
start += blockSize;
|
|
9389
|
-
await writeSlice();
|
|
9390
|
-
}
|
|
9391
|
-
}
|
|
9392
|
-
}
|
|
9393
|
-
|
|
9394
9391
|
async function writeUint8Array(writable, array) {
|
|
9395
9392
|
const streamWriter = writable.getWriter();
|
|
9396
9393
|
await streamWriter.ready;
|