@zip.js/zip.js 2.8.60 → 2.9.0
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/deno.json +1 -1
- package/dist/zip-core-external.js +39 -22
- package/dist/zip-core-external.min.js +1 -1
- package/dist/zip-core.js +39 -21
- package/dist/zip-core.min.js +1 -1
- package/dist/zip-fs-core-external.js +45 -30
- package/dist/zip-fs-core-external.min.js +1 -1
- package/dist/zip-fs-core.js +45 -29
- package/dist/zip-fs-core.min.js +1 -1
- package/dist/zip-fs-external.js +45 -30
- package/dist/zip-fs-external.min.js +1 -1
- package/dist/zip-fs-native.js +45 -29
- package/dist/zip-fs-native.min.js +1 -1
- package/dist/zip-fs.js +45 -29
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-legacy.js +39 -21
- package/dist/zip-legacy.min.js +1 -1
- package/dist/zip-native.js +39 -21
- package/dist/zip-native.min.js +1 -1
- package/dist/zip.js +39 -21
- package/dist/zip.min.js +1 -1
- package/index-native.cjs +45 -29
- package/index-native.min.js +1 -1
- package/index.cjs +45 -29
- package/index.d.cts +17 -2
- package/index.d.ts +17 -2
- package/index.min.js +1 -1
- package/lib/core/streams/codecs/crc32.js +1 -1
- package/lib/core/util/decode-cp437.js +1 -1
- package/lib/core/version.js +1 -1
- package/lib/core/zip-fs.js +5 -4
- package/lib/core/zip-reader.js +7 -0
- package/lib/core/zip-writer.js +37 -31
- package/lib/zip-core-reader.js +1 -0
- package/package.json +2 -1
- package/release.sh +47 -0
package/dist/zip-fs.js
CHANGED
|
@@ -495,7 +495,7 @@
|
|
|
495
495
|
// Every table MUST stay a PACKED_SMI array: build with array literals (not `new Array(n)`,
|
|
496
496
|
// which is HOLEY) and store the signed int32 XOR result (no `>>> 0`). An unsigned or holey
|
|
497
497
|
// table becomes a V8 FixedDoubleArray whose every hot-loop lookup unboxes a double (~1.6x
|
|
498
|
-
// slower). Signedness is irrelevant to the result
|
|
498
|
+
// slower). Signedness is irrelevant to the result: the reads mask/shift it and the final
|
|
499
499
|
// `~crc` normalizes it. Do NOT reintroduce `>>> 0` here or switch to `new Array(256)`.
|
|
500
500
|
const T = [[], [], [], [], [], [], [], []];
|
|
501
501
|
for (let n = 0; n < 256; n++) {
|
|
@@ -3483,7 +3483,7 @@
|
|
|
3483
3483
|
|
|
3484
3484
|
/* global TextDecoder */
|
|
3485
3485
|
|
|
3486
|
-
const CP437 = "\0
|
|
3486
|
+
const CP437 = "\0\u263A\u263B\u2665\u2666\u2663\u2660\u2022\u25D8\u25CB\u25D9\u2642\u2640\u266A\u266B\u263C\u25BA\u25C4\u2195\u203C\u00B6\u00A7\u25AC\u21A8\u2191\u2193\u2192\u2190\u221F\u2194\u25B2\u25BC !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u2302\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0".split("");
|
|
3487
3487
|
const VALID_CP437 = CP437.length == 256;
|
|
3488
3488
|
|
|
3489
3489
|
function decodeCP437(stringValue) {
|
|
@@ -4749,6 +4749,7 @@
|
|
|
4749
4749
|
const WARNING_WRAPPED_ENTRIES_COUNT = "wrapped entries count";
|
|
4750
4750
|
const WARNING_APPENDED_DATA = "appended data";
|
|
4751
4751
|
const WARNING_PREPENDED_DATA = "prepended data";
|
|
4752
|
+
const WARNING_PREPENDED_CENTRAL_DIRECTORY = "prepended central directory";
|
|
4752
4753
|
const WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = "trailing central directory data";
|
|
4753
4754
|
const WARNING_DUPLICATE_FILENAME = "duplicate filename";
|
|
4754
4755
|
const WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = "mismatched zip64 end of central directory record";
|
|
@@ -4842,6 +4843,7 @@
|
|
|
4842
4843
|
let diskNumber = getUint16$1(endOfDirectoryView, 6);
|
|
4843
4844
|
let filesLength = getUint16$1(endOfDirectoryView, 10);
|
|
4844
4845
|
let prependedDataLength = 0;
|
|
4846
|
+
let prependedCentralDirectory;
|
|
4845
4847
|
let startOffset;
|
|
4846
4848
|
let zip64EndOfDirectory;
|
|
4847
4849
|
let zip64EndOfDirectoryVersion2;
|
|
@@ -4945,6 +4947,7 @@
|
|
|
4945
4947
|
directoryDataOffset = expectedDirectoryDataOffset;
|
|
4946
4948
|
if (directoryDataOffset > originalDirectoryDataOffset) {
|
|
4947
4949
|
prependedDataLength += directoryDataOffset - originalDirectoryDataOffset;
|
|
4950
|
+
prependedCentralDirectory = storedPointsAtDirectory;
|
|
4948
4951
|
}
|
|
4949
4952
|
directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
|
|
4950
4953
|
directoryView = getDataView(directoryArray);
|
|
@@ -5172,6 +5175,9 @@
|
|
|
5172
5175
|
if (prependedDataLength || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
|
|
5173
5176
|
addWarning(warnings, WARNING_PREPENDED_DATA);
|
|
5174
5177
|
}
|
|
5178
|
+
if (prependedCentralDirectory) {
|
|
5179
|
+
addWarning(warnings, WARNING_PREPENDED_CENTRAL_DIRECTORY);
|
|
5180
|
+
}
|
|
5175
5181
|
if (extractPrependedData) {
|
|
5176
5182
|
zipReader.prependedData = startOffset > splitZipSignatureLength ?
|
|
5177
5183
|
await readUint8Array(reader, splitZipSignatureLength, startOffset - splitZipSignatureLength) :
|
|
@@ -6232,6 +6238,7 @@
|
|
|
6232
6238
|
WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD: WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD,
|
|
6233
6239
|
WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES: WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES,
|
|
6234
6240
|
WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY: WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY,
|
|
6241
|
+
WARNING_PREPENDED_CENTRAL_DIRECTORY: WARNING_PREPENDED_CENTRAL_DIRECTORY,
|
|
6235
6242
|
WARNING_PREPENDED_DATA: WARNING_PREPENDED_DATA,
|
|
6236
6243
|
WARNING_TRAILING_CENTRAL_DIRECTORY_DATA: WARNING_TRAILING_CENTRAL_DIRECTORY_DATA,
|
|
6237
6244
|
WARNING_UNKNOWN_VERSION: WARNING_UNKNOWN_VERSION,
|
|
@@ -6680,6 +6687,13 @@
|
|
|
6680
6687
|
const { comment } = metadataInfo;
|
|
6681
6688
|
const extraField = options[PROPERTY_NAME_EXTRA_FIELD];
|
|
6682
6689
|
zipWriter.fileEntries.set(name, UNDEFINED_VALUE);
|
|
6690
|
+
const previousFileEntry = zipWriter.lastFileEntry;
|
|
6691
|
+
const pendingFileEntry = {};
|
|
6692
|
+
let releaseLockFileEntry;
|
|
6693
|
+
if (metadataInfo.resolvedOptions.keepOrder) {
|
|
6694
|
+
pendingFileEntry.lockFileEntry = new Promise(resolve => releaseLockFileEntry = resolve);
|
|
6695
|
+
}
|
|
6696
|
+
zipWriter.lastFileEntry = pendingFileEntry;
|
|
6683
6697
|
let fileEntry;
|
|
6684
6698
|
try {
|
|
6685
6699
|
const { resolvedOptions } = metadataInfo;
|
|
@@ -6701,10 +6715,21 @@
|
|
|
6701
6715
|
const headerInfo = getHeaderInfo(options);
|
|
6702
6716
|
const dataDescriptorInfo = getDataDescriptorInfo(options);
|
|
6703
6717
|
const metadataSize = getLength(headerInfo.localHeaderArray, dataDescriptorInfo.dataDescriptorArray);
|
|
6704
|
-
fileEntry = await getFileEntry(zipWriter, name, reader, {
|
|
6718
|
+
fileEntry = await getFileEntry(zipWriter, name, reader, {
|
|
6719
|
+
headerInfo,
|
|
6720
|
+
dataDescriptorInfo,
|
|
6721
|
+
metadataSize,
|
|
6722
|
+
fileEntry: pendingFileEntry,
|
|
6723
|
+
previousFileEntry,
|
|
6724
|
+
releaseLockFileEntry
|
|
6725
|
+
}, options);
|
|
6705
6726
|
} catch (error) {
|
|
6706
6727
|
zipWriter.fileEntries.delete(name);
|
|
6707
6728
|
throw error;
|
|
6729
|
+
} finally {
|
|
6730
|
+
if (releaseLockFileEntry) {
|
|
6731
|
+
releaseLockFileEntry(previousFileEntry && previousFileEntry.lockFileEntry);
|
|
6732
|
+
}
|
|
6708
6733
|
}
|
|
6709
6734
|
Object.assign(fileEntry, {
|
|
6710
6735
|
name,
|
|
@@ -7092,7 +7117,6 @@
|
|
|
7092
7117
|
}
|
|
7093
7118
|
const usdz = writerOptions[OPTION_USDZ];
|
|
7094
7119
|
const files = new Map();
|
|
7095
|
-
let layoutDependsOnWriteOrder = Boolean(usdz);
|
|
7096
7120
|
const initialOffset = writerOptions[OPTION_OFFSET] === UNDEFINED_VALUE ? 0 : writerOptions[OPTION_OFFSET];
|
|
7097
7121
|
let offset = initialOffset;
|
|
7098
7122
|
let minimumEntrySize = INFINITY_VALUE;
|
|
@@ -7138,9 +7162,7 @@
|
|
|
7138
7162
|
minimumEntrySize = Math.min(minimumEntrySize, entrySize);
|
|
7139
7163
|
offset += entrySize;
|
|
7140
7164
|
}
|
|
7141
|
-
|
|
7142
|
-
layoutDependsOnWriteOrder = true;
|
|
7143
|
-
}
|
|
7165
|
+
const layoutDependsOnWriteOrder = files.size > 1 && (usdz || offset - minimumEntrySize >= MAX_32_BITS);
|
|
7144
7166
|
if (layoutDependsOnWriteOrder && !writeOrderGuaranteed) {
|
|
7145
7167
|
throw new Error(ERR_UNDETERMINED_SIZE);
|
|
7146
7168
|
}
|
|
@@ -7168,27 +7190,23 @@
|
|
|
7168
7190
|
signal
|
|
7169
7191
|
} = options;
|
|
7170
7192
|
const {
|
|
7171
|
-
headerInfo
|
|
7193
|
+
headerInfo,
|
|
7194
|
+
fileEntry: pendingFileEntry,
|
|
7195
|
+
previousFileEntry,
|
|
7196
|
+
releaseLockFileEntry
|
|
7172
7197
|
} = entryInfo;
|
|
7173
7198
|
const usdz = zipWriter.options[OPTION_USDZ];
|
|
7174
|
-
|
|
7175
|
-
let fileEntry = {};
|
|
7199
|
+
let fileEntry = pendingFileEntry;
|
|
7176
7200
|
let bufferedWrite;
|
|
7177
7201
|
let releaseLockWriter;
|
|
7178
|
-
let releaseLockCurrentFileEntry;
|
|
7179
7202
|
let writingBufferedEntryData;
|
|
7180
7203
|
let writingEntryData;
|
|
7181
7204
|
let writerSizeBeforeEntry;
|
|
7182
7205
|
let flushedBufferedSize = 0;
|
|
7183
7206
|
let fileWriter;
|
|
7207
|
+
const lockPreviousFileEntry = keepOrder && previousFileEntry ? previousFileEntry.lockFileEntry : UNDEFINED_VALUE;
|
|
7184
7208
|
fileEntries.set(name, fileEntry);
|
|
7185
|
-
zipWriter.lastFileEntry = fileEntry;
|
|
7186
7209
|
try {
|
|
7187
|
-
let lockPreviousFileEntry;
|
|
7188
|
-
if (keepOrder) {
|
|
7189
|
-
lockPreviousFileEntry = previousFileEntry && previousFileEntry.lockFileEntry;
|
|
7190
|
-
requestLockCurrentFileEntry();
|
|
7191
|
-
}
|
|
7192
7210
|
if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || (!dataDescriptor && !emptyEntry)) {
|
|
7193
7211
|
bufferedWrite = true;
|
|
7194
7212
|
zipWriter.bufferedWrites++;
|
|
@@ -7201,6 +7219,7 @@
|
|
|
7201
7219
|
await initStream(writer);
|
|
7202
7220
|
} else {
|
|
7203
7221
|
fileWriter = writer;
|
|
7222
|
+
await lockPreviousFileEntry;
|
|
7204
7223
|
await requestLockWriter();
|
|
7205
7224
|
}
|
|
7206
7225
|
await initStream(fileWriter);
|
|
@@ -7213,7 +7232,6 @@
|
|
|
7213
7232
|
}
|
|
7214
7233
|
const { localHeaderArray } = headerInfo;
|
|
7215
7234
|
if (!bufferedWrite) {
|
|
7216
|
-
await lockPreviousFileEntry;
|
|
7217
7235
|
await skipDiskIfNeeded();
|
|
7218
7236
|
}
|
|
7219
7237
|
const diskNumberStart = getDiskNumber(writer);
|
|
@@ -7278,8 +7296,8 @@
|
|
|
7278
7296
|
if (bufferedWrite) {
|
|
7279
7297
|
zipWriter.bufferedWrites--;
|
|
7280
7298
|
}
|
|
7281
|
-
if (
|
|
7282
|
-
|
|
7299
|
+
if (releaseLockFileEntry) {
|
|
7300
|
+
releaseLockFileEntry(lockPreviousFileEntry);
|
|
7283
7301
|
}
|
|
7284
7302
|
if (releaseLockWriter) {
|
|
7285
7303
|
releaseLockWriter();
|
|
@@ -7293,10 +7311,6 @@
|
|
|
7293
7311
|
}
|
|
7294
7312
|
}
|
|
7295
7313
|
|
|
7296
|
-
function requestLockCurrentFileEntry() {
|
|
7297
|
-
fileEntry.lockFileEntry = new Promise(resolve => releaseLockCurrentFileEntry = resolve);
|
|
7298
|
-
}
|
|
7299
|
-
|
|
7300
7314
|
async function requestLockWriter() {
|
|
7301
7315
|
zipWriter.writerLocked = true;
|
|
7302
7316
|
const { lockWriter } = zipWriter;
|
|
@@ -8616,7 +8630,7 @@
|
|
|
8616
8630
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
8617
8631
|
*/
|
|
8618
8632
|
|
|
8619
|
-
const VERSION = "2.
|
|
8633
|
+
const VERSION = "2.9.0";
|
|
8620
8634
|
|
|
8621
8635
|
/*
|
|
8622
8636
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
@@ -9968,12 +9982,13 @@
|
|
|
9968
9982
|
if (options.bufferedWrite === UNDEFINED_VALUE) {
|
|
9969
9983
|
options.bufferedWrite = true;
|
|
9970
9984
|
}
|
|
9971
|
-
const
|
|
9972
|
-
(options.keepOrder !== false && zipEntry.children.every(child => !child.children.length));
|
|
9973
|
-
return getEntriesSize(options, zipEntry.getChildren({ recursive: true }).filter(child => !isImplicitDirectory(child)).map(child => {
|
|
9985
|
+
const entries = zipEntry.getChildren({ recursive: true }).filter(child => !isImplicitDirectory(child)).map(child => {
|
|
9974
9986
|
const { name, entryOptions } = getChildEntryOptions(child, zipEntry, options);
|
|
9975
9987
|
return { name, size: child.directory ? 0 : getDeterminedSize(child, isPassThrough(child, options)), options: entryOptions };
|
|
9976
|
-
})
|
|
9988
|
+
});
|
|
9989
|
+
const writeOrderGuaranteed = !options.bufferedWrite ||
|
|
9990
|
+
(entries.every(entry => entry.options.keepOrder !== false) && zipEntry.children.every(child => !child.children.length));
|
|
9991
|
+
return getEntriesSize(options, entries, writeOrderGuaranteed, options.globalComment);
|
|
9977
9992
|
}
|
|
9978
9993
|
|
|
9979
9994
|
getChildByName(name) {
|
|
@@ -10987,6 +11002,7 @@
|
|
|
10987
11002
|
exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD = WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD;
|
|
10988
11003
|
exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES = WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES;
|
|
10989
11004
|
exports.WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY;
|
|
11005
|
+
exports.WARNING_PREPENDED_CENTRAL_DIRECTORY = WARNING_PREPENDED_CENTRAL_DIRECTORY;
|
|
10990
11006
|
exports.WARNING_PREPENDED_DATA = WARNING_PREPENDED_DATA;
|
|
10991
11007
|
exports.WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = WARNING_TRAILING_CENTRAL_DIRECTORY_DATA;
|
|
10992
11008
|
exports.WARNING_UNKNOWN_VERSION = WARNING_UNKNOWN_VERSION;
|