@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-native.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$1 = [[], [], [], [], [], [], [], []];
|
|
501
501
|
for (let n = 0; n < 256; n++) {
|
|
@@ -3479,7 +3479,7 @@
|
|
|
3479
3479
|
|
|
3480
3480
|
/* global TextDecoder */
|
|
3481
3481
|
|
|
3482
|
-
const CP437 = "\0
|
|
3482
|
+
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("");
|
|
3483
3483
|
const VALID_CP437 = CP437.length == 256;
|
|
3484
3484
|
|
|
3485
3485
|
function decodeCP437(stringValue) {
|
|
@@ -4745,6 +4745,7 @@
|
|
|
4745
4745
|
const WARNING_WRAPPED_ENTRIES_COUNT = "wrapped entries count";
|
|
4746
4746
|
const WARNING_APPENDED_DATA = "appended data";
|
|
4747
4747
|
const WARNING_PREPENDED_DATA = "prepended data";
|
|
4748
|
+
const WARNING_PREPENDED_CENTRAL_DIRECTORY = "prepended central directory";
|
|
4748
4749
|
const WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = "trailing central directory data";
|
|
4749
4750
|
const WARNING_DUPLICATE_FILENAME = "duplicate filename";
|
|
4750
4751
|
const WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = "mismatched zip64 end of central directory record";
|
|
@@ -4838,6 +4839,7 @@
|
|
|
4838
4839
|
let diskNumber = getUint16$1(endOfDirectoryView, 6);
|
|
4839
4840
|
let filesLength = getUint16$1(endOfDirectoryView, 10);
|
|
4840
4841
|
let prependedDataLength = 0;
|
|
4842
|
+
let prependedCentralDirectory;
|
|
4841
4843
|
let startOffset;
|
|
4842
4844
|
let zip64EndOfDirectory;
|
|
4843
4845
|
let zip64EndOfDirectoryVersion2;
|
|
@@ -4941,6 +4943,7 @@
|
|
|
4941
4943
|
directoryDataOffset = expectedDirectoryDataOffset;
|
|
4942
4944
|
if (directoryDataOffset > originalDirectoryDataOffset) {
|
|
4943
4945
|
prependedDataLength += directoryDataOffset - originalDirectoryDataOffset;
|
|
4946
|
+
prependedCentralDirectory = storedPointsAtDirectory;
|
|
4944
4947
|
}
|
|
4945
4948
|
directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
|
|
4946
4949
|
directoryView = getDataView(directoryArray);
|
|
@@ -5168,6 +5171,9 @@
|
|
|
5168
5171
|
if (prependedDataLength || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
|
|
5169
5172
|
addWarning(warnings, WARNING_PREPENDED_DATA);
|
|
5170
5173
|
}
|
|
5174
|
+
if (prependedCentralDirectory) {
|
|
5175
|
+
addWarning(warnings, WARNING_PREPENDED_CENTRAL_DIRECTORY);
|
|
5176
|
+
}
|
|
5171
5177
|
if (extractPrependedData) {
|
|
5172
5178
|
zipReader.prependedData = startOffset > splitZipSignatureLength ?
|
|
5173
5179
|
await readUint8Array(reader, splitZipSignatureLength, startOffset - splitZipSignatureLength) :
|
|
@@ -6228,6 +6234,7 @@
|
|
|
6228
6234
|
WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD: WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD,
|
|
6229
6235
|
WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES: WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES,
|
|
6230
6236
|
WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY: WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY,
|
|
6237
|
+
WARNING_PREPENDED_CENTRAL_DIRECTORY: WARNING_PREPENDED_CENTRAL_DIRECTORY,
|
|
6231
6238
|
WARNING_PREPENDED_DATA: WARNING_PREPENDED_DATA,
|
|
6232
6239
|
WARNING_TRAILING_CENTRAL_DIRECTORY_DATA: WARNING_TRAILING_CENTRAL_DIRECTORY_DATA,
|
|
6233
6240
|
WARNING_UNKNOWN_VERSION: WARNING_UNKNOWN_VERSION,
|
|
@@ -6676,6 +6683,13 @@
|
|
|
6676
6683
|
const { comment } = metadataInfo;
|
|
6677
6684
|
const extraField = options[PROPERTY_NAME_EXTRA_FIELD];
|
|
6678
6685
|
zipWriter.fileEntries.set(name, UNDEFINED_VALUE);
|
|
6686
|
+
const previousFileEntry = zipWriter.lastFileEntry;
|
|
6687
|
+
const pendingFileEntry = {};
|
|
6688
|
+
let releaseLockFileEntry;
|
|
6689
|
+
if (metadataInfo.resolvedOptions.keepOrder) {
|
|
6690
|
+
pendingFileEntry.lockFileEntry = new Promise(resolve => releaseLockFileEntry = resolve);
|
|
6691
|
+
}
|
|
6692
|
+
zipWriter.lastFileEntry = pendingFileEntry;
|
|
6679
6693
|
let fileEntry;
|
|
6680
6694
|
try {
|
|
6681
6695
|
const { resolvedOptions } = metadataInfo;
|
|
@@ -6697,10 +6711,21 @@
|
|
|
6697
6711
|
const headerInfo = getHeaderInfo(options);
|
|
6698
6712
|
const dataDescriptorInfo = getDataDescriptorInfo(options);
|
|
6699
6713
|
const metadataSize = getLength(headerInfo.localHeaderArray, dataDescriptorInfo.dataDescriptorArray);
|
|
6700
|
-
fileEntry = await getFileEntry(zipWriter, name, reader, {
|
|
6714
|
+
fileEntry = await getFileEntry(zipWriter, name, reader, {
|
|
6715
|
+
headerInfo,
|
|
6716
|
+
dataDescriptorInfo,
|
|
6717
|
+
metadataSize,
|
|
6718
|
+
fileEntry: pendingFileEntry,
|
|
6719
|
+
previousFileEntry,
|
|
6720
|
+
releaseLockFileEntry
|
|
6721
|
+
}, options);
|
|
6701
6722
|
} catch (error) {
|
|
6702
6723
|
zipWriter.fileEntries.delete(name);
|
|
6703
6724
|
throw error;
|
|
6725
|
+
} finally {
|
|
6726
|
+
if (releaseLockFileEntry) {
|
|
6727
|
+
releaseLockFileEntry(previousFileEntry && previousFileEntry.lockFileEntry);
|
|
6728
|
+
}
|
|
6704
6729
|
}
|
|
6705
6730
|
Object.assign(fileEntry, {
|
|
6706
6731
|
name,
|
|
@@ -7088,7 +7113,6 @@
|
|
|
7088
7113
|
}
|
|
7089
7114
|
const usdz = writerOptions[OPTION_USDZ];
|
|
7090
7115
|
const files = new Map();
|
|
7091
|
-
let layoutDependsOnWriteOrder = Boolean(usdz);
|
|
7092
7116
|
const initialOffset = writerOptions[OPTION_OFFSET] === UNDEFINED_VALUE ? 0 : writerOptions[OPTION_OFFSET];
|
|
7093
7117
|
let offset = initialOffset;
|
|
7094
7118
|
let minimumEntrySize = INFINITY_VALUE;
|
|
@@ -7134,9 +7158,7 @@
|
|
|
7134
7158
|
minimumEntrySize = Math.min(minimumEntrySize, entrySize);
|
|
7135
7159
|
offset += entrySize;
|
|
7136
7160
|
}
|
|
7137
|
-
|
|
7138
|
-
layoutDependsOnWriteOrder = true;
|
|
7139
|
-
}
|
|
7161
|
+
const layoutDependsOnWriteOrder = files.size > 1 && (usdz || offset - minimumEntrySize >= MAX_32_BITS);
|
|
7140
7162
|
if (layoutDependsOnWriteOrder && !writeOrderGuaranteed) {
|
|
7141
7163
|
throw new Error(ERR_UNDETERMINED_SIZE);
|
|
7142
7164
|
}
|
|
@@ -7164,27 +7186,23 @@
|
|
|
7164
7186
|
signal
|
|
7165
7187
|
} = options;
|
|
7166
7188
|
const {
|
|
7167
|
-
headerInfo
|
|
7189
|
+
headerInfo,
|
|
7190
|
+
fileEntry: pendingFileEntry,
|
|
7191
|
+
previousFileEntry,
|
|
7192
|
+
releaseLockFileEntry
|
|
7168
7193
|
} = entryInfo;
|
|
7169
7194
|
const usdz = zipWriter.options[OPTION_USDZ];
|
|
7170
|
-
|
|
7171
|
-
let fileEntry = {};
|
|
7195
|
+
let fileEntry = pendingFileEntry;
|
|
7172
7196
|
let bufferedWrite;
|
|
7173
7197
|
let releaseLockWriter;
|
|
7174
|
-
let releaseLockCurrentFileEntry;
|
|
7175
7198
|
let writingBufferedEntryData;
|
|
7176
7199
|
let writingEntryData;
|
|
7177
7200
|
let writerSizeBeforeEntry;
|
|
7178
7201
|
let flushedBufferedSize = 0;
|
|
7179
7202
|
let fileWriter;
|
|
7203
|
+
const lockPreviousFileEntry = keepOrder && previousFileEntry ? previousFileEntry.lockFileEntry : UNDEFINED_VALUE;
|
|
7180
7204
|
fileEntries.set(name, fileEntry);
|
|
7181
|
-
zipWriter.lastFileEntry = fileEntry;
|
|
7182
7205
|
try {
|
|
7183
|
-
let lockPreviousFileEntry;
|
|
7184
|
-
if (keepOrder) {
|
|
7185
|
-
lockPreviousFileEntry = previousFileEntry && previousFileEntry.lockFileEntry;
|
|
7186
|
-
requestLockCurrentFileEntry();
|
|
7187
|
-
}
|
|
7188
7206
|
if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || (!dataDescriptor && !emptyEntry)) {
|
|
7189
7207
|
bufferedWrite = true;
|
|
7190
7208
|
zipWriter.bufferedWrites++;
|
|
@@ -7197,6 +7215,7 @@
|
|
|
7197
7215
|
await initStream(writer);
|
|
7198
7216
|
} else {
|
|
7199
7217
|
fileWriter = writer;
|
|
7218
|
+
await lockPreviousFileEntry;
|
|
7200
7219
|
await requestLockWriter();
|
|
7201
7220
|
}
|
|
7202
7221
|
await initStream(fileWriter);
|
|
@@ -7209,7 +7228,6 @@
|
|
|
7209
7228
|
}
|
|
7210
7229
|
const { localHeaderArray } = headerInfo;
|
|
7211
7230
|
if (!bufferedWrite) {
|
|
7212
|
-
await lockPreviousFileEntry;
|
|
7213
7231
|
await skipDiskIfNeeded();
|
|
7214
7232
|
}
|
|
7215
7233
|
const diskNumberStart = getDiskNumber(writer);
|
|
@@ -7274,8 +7292,8 @@
|
|
|
7274
7292
|
if (bufferedWrite) {
|
|
7275
7293
|
zipWriter.bufferedWrites--;
|
|
7276
7294
|
}
|
|
7277
|
-
if (
|
|
7278
|
-
|
|
7295
|
+
if (releaseLockFileEntry) {
|
|
7296
|
+
releaseLockFileEntry(lockPreviousFileEntry);
|
|
7279
7297
|
}
|
|
7280
7298
|
if (releaseLockWriter) {
|
|
7281
7299
|
releaseLockWriter();
|
|
@@ -7289,10 +7307,6 @@
|
|
|
7289
7307
|
}
|
|
7290
7308
|
}
|
|
7291
7309
|
|
|
7292
|
-
function requestLockCurrentFileEntry() {
|
|
7293
|
-
fileEntry.lockFileEntry = new Promise(resolve => releaseLockCurrentFileEntry = resolve);
|
|
7294
|
-
}
|
|
7295
|
-
|
|
7296
7310
|
async function requestLockWriter() {
|
|
7297
7311
|
zipWriter.writerLocked = true;
|
|
7298
7312
|
const { lockWriter } = zipWriter;
|
|
@@ -8612,7 +8626,7 @@
|
|
|
8612
8626
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
8613
8627
|
*/
|
|
8614
8628
|
|
|
8615
|
-
const VERSION = "2.
|
|
8629
|
+
const VERSION = "2.9.0";
|
|
8616
8630
|
|
|
8617
8631
|
/*
|
|
8618
8632
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
@@ -9589,12 +9603,13 @@
|
|
|
9589
9603
|
if (options.bufferedWrite === UNDEFINED_VALUE) {
|
|
9590
9604
|
options.bufferedWrite = true;
|
|
9591
9605
|
}
|
|
9592
|
-
const
|
|
9593
|
-
(options.keepOrder !== false && zipEntry.children.every(child => !child.children.length));
|
|
9594
|
-
return getEntriesSize(options, zipEntry.getChildren({ recursive: true }).filter(child => !isImplicitDirectory(child)).map(child => {
|
|
9606
|
+
const entries = zipEntry.getChildren({ recursive: true }).filter(child => !isImplicitDirectory(child)).map(child => {
|
|
9595
9607
|
const { name, entryOptions } = getChildEntryOptions(child, zipEntry, options);
|
|
9596
9608
|
return { name, size: child.directory ? 0 : getDeterminedSize(child, isPassThrough(child, options)), options: entryOptions };
|
|
9597
|
-
})
|
|
9609
|
+
});
|
|
9610
|
+
const writeOrderGuaranteed = !options.bufferedWrite ||
|
|
9611
|
+
(entries.every(entry => entry.options.keepOrder !== false) && zipEntry.children.every(child => !child.children.length));
|
|
9612
|
+
return getEntriesSize(options, entries, writeOrderGuaranteed, options.globalComment);
|
|
9598
9613
|
}
|
|
9599
9614
|
|
|
9600
9615
|
getChildByName(name) {
|
|
@@ -10608,6 +10623,7 @@
|
|
|
10608
10623
|
exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD = WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD;
|
|
10609
10624
|
exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES = WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES;
|
|
10610
10625
|
exports.WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY;
|
|
10626
|
+
exports.WARNING_PREPENDED_CENTRAL_DIRECTORY = WARNING_PREPENDED_CENTRAL_DIRECTORY;
|
|
10611
10627
|
exports.WARNING_PREPENDED_DATA = WARNING_PREPENDED_DATA;
|
|
10612
10628
|
exports.WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = WARNING_TRAILING_CENTRAL_DIRECTORY_DATA;
|
|
10613
10629
|
exports.WARNING_UNKNOWN_VERSION = WARNING_UNKNOWN_VERSION;
|