@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/index-native.cjs
CHANGED
|
@@ -489,7 +489,7 @@ function getDataView(array) {
|
|
|
489
489
|
// Every table MUST stay a PACKED_SMI array: build with array literals (not `new Array(n)`,
|
|
490
490
|
// which is HOLEY) and store the signed int32 XOR result (no `>>> 0`). An unsigned or holey
|
|
491
491
|
// table becomes a V8 FixedDoubleArray whose every hot-loop lookup unboxes a double (~1.6x
|
|
492
|
-
// slower). Signedness is irrelevant to the result
|
|
492
|
+
// slower). Signedness is irrelevant to the result: the reads mask/shift it and the final
|
|
493
493
|
// `~crc` normalizes it. Do NOT reintroduce `>>> 0` here or switch to `new Array(256)`.
|
|
494
494
|
const T$1 = [[], [], [], [], [], [], [], []];
|
|
495
495
|
for (let n = 0; n < 256; n++) {
|
|
@@ -3473,7 +3473,7 @@ async function terminateWorkers() {
|
|
|
3473
3473
|
|
|
3474
3474
|
/* global TextDecoder */
|
|
3475
3475
|
|
|
3476
|
-
const CP437 = "\0
|
|
3476
|
+
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("");
|
|
3477
3477
|
const VALID_CP437 = CP437.length == 256;
|
|
3478
3478
|
|
|
3479
3479
|
function decodeCP437(stringValue) {
|
|
@@ -4739,6 +4739,7 @@ const WARNING_UNKNOWN_ZIP64_EXTENSIBLE_DATA = "unknown zip64 extensible data";
|
|
|
4739
4739
|
const WARNING_WRAPPED_ENTRIES_COUNT = "wrapped entries count";
|
|
4740
4740
|
const WARNING_APPENDED_DATA = "appended data";
|
|
4741
4741
|
const WARNING_PREPENDED_DATA = "prepended data";
|
|
4742
|
+
const WARNING_PREPENDED_CENTRAL_DIRECTORY = "prepended central directory";
|
|
4742
4743
|
const WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = "trailing central directory data";
|
|
4743
4744
|
const WARNING_DUPLICATE_FILENAME = "duplicate filename";
|
|
4744
4745
|
const WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = "mismatched zip64 end of central directory record";
|
|
@@ -4832,6 +4833,7 @@ class ZipReader {
|
|
|
4832
4833
|
let diskNumber = getUint16$1(endOfDirectoryView, 6);
|
|
4833
4834
|
let filesLength = getUint16$1(endOfDirectoryView, 10);
|
|
4834
4835
|
let prependedDataLength = 0;
|
|
4836
|
+
let prependedCentralDirectory;
|
|
4835
4837
|
let startOffset;
|
|
4836
4838
|
let zip64EndOfDirectory;
|
|
4837
4839
|
let zip64EndOfDirectoryVersion2;
|
|
@@ -4935,6 +4937,7 @@ class ZipReader {
|
|
|
4935
4937
|
directoryDataOffset = expectedDirectoryDataOffset;
|
|
4936
4938
|
if (directoryDataOffset > originalDirectoryDataOffset) {
|
|
4937
4939
|
prependedDataLength += directoryDataOffset - originalDirectoryDataOffset;
|
|
4940
|
+
prependedCentralDirectory = storedPointsAtDirectory;
|
|
4938
4941
|
}
|
|
4939
4942
|
directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
|
|
4940
4943
|
directoryView = getDataView(directoryArray);
|
|
@@ -5162,6 +5165,9 @@ class ZipReader {
|
|
|
5162
5165
|
if (prependedDataLength || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
|
|
5163
5166
|
addWarning(warnings, WARNING_PREPENDED_DATA);
|
|
5164
5167
|
}
|
|
5168
|
+
if (prependedCentralDirectory) {
|
|
5169
|
+
addWarning(warnings, WARNING_PREPENDED_CENTRAL_DIRECTORY);
|
|
5170
|
+
}
|
|
5165
5171
|
if (extractPrependedData) {
|
|
5166
5172
|
zipReader.prependedData = startOffset > splitZipSignatureLength ?
|
|
5167
5173
|
await readUint8Array(reader, splitZipSignatureLength, startOffset - splitZipSignatureLength) :
|
|
@@ -6222,6 +6228,7 @@ var zipReader = /*#__PURE__*/Object.freeze({
|
|
|
6222
6228
|
WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD: WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD,
|
|
6223
6229
|
WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES: WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES,
|
|
6224
6230
|
WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY: WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY,
|
|
6231
|
+
WARNING_PREPENDED_CENTRAL_DIRECTORY: WARNING_PREPENDED_CENTRAL_DIRECTORY,
|
|
6225
6232
|
WARNING_PREPENDED_DATA: WARNING_PREPENDED_DATA,
|
|
6226
6233
|
WARNING_TRAILING_CENTRAL_DIRECTORY_DATA: WARNING_TRAILING_CENTRAL_DIRECTORY_DATA,
|
|
6227
6234
|
WARNING_UNKNOWN_VERSION: WARNING_UNKNOWN_VERSION,
|
|
@@ -6670,6 +6677,13 @@ async function addFile(zipWriter, name, reader, options) {
|
|
|
6670
6677
|
const { comment } = metadataInfo;
|
|
6671
6678
|
const extraField = options[PROPERTY_NAME_EXTRA_FIELD];
|
|
6672
6679
|
zipWriter.fileEntries.set(name, UNDEFINED_VALUE);
|
|
6680
|
+
const previousFileEntry = zipWriter.lastFileEntry;
|
|
6681
|
+
const pendingFileEntry = {};
|
|
6682
|
+
let releaseLockFileEntry;
|
|
6683
|
+
if (metadataInfo.resolvedOptions.keepOrder) {
|
|
6684
|
+
pendingFileEntry.lockFileEntry = new Promise(resolve => releaseLockFileEntry = resolve);
|
|
6685
|
+
}
|
|
6686
|
+
zipWriter.lastFileEntry = pendingFileEntry;
|
|
6673
6687
|
let fileEntry;
|
|
6674
6688
|
try {
|
|
6675
6689
|
const { resolvedOptions } = metadataInfo;
|
|
@@ -6691,10 +6705,21 @@ async function addFile(zipWriter, name, reader, options) {
|
|
|
6691
6705
|
const headerInfo = getHeaderInfo(options);
|
|
6692
6706
|
const dataDescriptorInfo = getDataDescriptorInfo(options);
|
|
6693
6707
|
const metadataSize = getLength(headerInfo.localHeaderArray, dataDescriptorInfo.dataDescriptorArray);
|
|
6694
|
-
fileEntry = await getFileEntry(zipWriter, name, reader, {
|
|
6708
|
+
fileEntry = await getFileEntry(zipWriter, name, reader, {
|
|
6709
|
+
headerInfo,
|
|
6710
|
+
dataDescriptorInfo,
|
|
6711
|
+
metadataSize,
|
|
6712
|
+
fileEntry: pendingFileEntry,
|
|
6713
|
+
previousFileEntry,
|
|
6714
|
+
releaseLockFileEntry
|
|
6715
|
+
}, options);
|
|
6695
6716
|
} catch (error) {
|
|
6696
6717
|
zipWriter.fileEntries.delete(name);
|
|
6697
6718
|
throw error;
|
|
6719
|
+
} finally {
|
|
6720
|
+
if (releaseLockFileEntry) {
|
|
6721
|
+
releaseLockFileEntry(previousFileEntry && previousFileEntry.lockFileEntry);
|
|
6722
|
+
}
|
|
6698
6723
|
}
|
|
6699
6724
|
Object.assign(fileEntry, {
|
|
6700
6725
|
name,
|
|
@@ -7082,7 +7107,6 @@ async function getEntriesSize(writerOptions, entries, writeOrderGuaranteed, comm
|
|
|
7082
7107
|
}
|
|
7083
7108
|
const usdz = writerOptions[OPTION_USDZ];
|
|
7084
7109
|
const files = new Map();
|
|
7085
|
-
let layoutDependsOnWriteOrder = Boolean(usdz);
|
|
7086
7110
|
const initialOffset = writerOptions[OPTION_OFFSET] === UNDEFINED_VALUE ? 0 : writerOptions[OPTION_OFFSET];
|
|
7087
7111
|
let offset = initialOffset;
|
|
7088
7112
|
let minimumEntrySize = INFINITY_VALUE;
|
|
@@ -7128,9 +7152,7 @@ async function getEntriesSize(writerOptions, entries, writeOrderGuaranteed, comm
|
|
|
7128
7152
|
minimumEntrySize = Math.min(minimumEntrySize, entrySize);
|
|
7129
7153
|
offset += entrySize;
|
|
7130
7154
|
}
|
|
7131
|
-
|
|
7132
|
-
layoutDependsOnWriteOrder = true;
|
|
7133
|
-
}
|
|
7155
|
+
const layoutDependsOnWriteOrder = files.size > 1 && (usdz || offset - minimumEntrySize >= MAX_32_BITS);
|
|
7134
7156
|
if (layoutDependsOnWriteOrder && !writeOrderGuaranteed) {
|
|
7135
7157
|
throw new Error(ERR_UNDETERMINED_SIZE);
|
|
7136
7158
|
}
|
|
@@ -7158,27 +7180,23 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
|
|
|
7158
7180
|
signal
|
|
7159
7181
|
} = options;
|
|
7160
7182
|
const {
|
|
7161
|
-
headerInfo
|
|
7183
|
+
headerInfo,
|
|
7184
|
+
fileEntry: pendingFileEntry,
|
|
7185
|
+
previousFileEntry,
|
|
7186
|
+
releaseLockFileEntry
|
|
7162
7187
|
} = entryInfo;
|
|
7163
7188
|
const usdz = zipWriter.options[OPTION_USDZ];
|
|
7164
|
-
|
|
7165
|
-
let fileEntry = {};
|
|
7189
|
+
let fileEntry = pendingFileEntry;
|
|
7166
7190
|
let bufferedWrite;
|
|
7167
7191
|
let releaseLockWriter;
|
|
7168
|
-
let releaseLockCurrentFileEntry;
|
|
7169
7192
|
let writingBufferedEntryData;
|
|
7170
7193
|
let writingEntryData;
|
|
7171
7194
|
let writerSizeBeforeEntry;
|
|
7172
7195
|
let flushedBufferedSize = 0;
|
|
7173
7196
|
let fileWriter;
|
|
7197
|
+
const lockPreviousFileEntry = keepOrder && previousFileEntry ? previousFileEntry.lockFileEntry : UNDEFINED_VALUE;
|
|
7174
7198
|
fileEntries.set(name, fileEntry);
|
|
7175
|
-
zipWriter.lastFileEntry = fileEntry;
|
|
7176
7199
|
try {
|
|
7177
|
-
let lockPreviousFileEntry;
|
|
7178
|
-
if (keepOrder) {
|
|
7179
|
-
lockPreviousFileEntry = previousFileEntry && previousFileEntry.lockFileEntry;
|
|
7180
|
-
requestLockCurrentFileEntry();
|
|
7181
|
-
}
|
|
7182
7200
|
if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || (!dataDescriptor && !emptyEntry)) {
|
|
7183
7201
|
bufferedWrite = true;
|
|
7184
7202
|
zipWriter.bufferedWrites++;
|
|
@@ -7191,6 +7209,7 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
|
|
|
7191
7209
|
await initStream(writer);
|
|
7192
7210
|
} else {
|
|
7193
7211
|
fileWriter = writer;
|
|
7212
|
+
await lockPreviousFileEntry;
|
|
7194
7213
|
await requestLockWriter();
|
|
7195
7214
|
}
|
|
7196
7215
|
await initStream(fileWriter);
|
|
@@ -7203,7 +7222,6 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
|
|
|
7203
7222
|
}
|
|
7204
7223
|
const { localHeaderArray } = headerInfo;
|
|
7205
7224
|
if (!bufferedWrite) {
|
|
7206
|
-
await lockPreviousFileEntry;
|
|
7207
7225
|
await skipDiskIfNeeded();
|
|
7208
7226
|
}
|
|
7209
7227
|
const diskNumberStart = getDiskNumber(writer);
|
|
@@ -7268,8 +7286,8 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
|
|
|
7268
7286
|
if (bufferedWrite) {
|
|
7269
7287
|
zipWriter.bufferedWrites--;
|
|
7270
7288
|
}
|
|
7271
|
-
if (
|
|
7272
|
-
|
|
7289
|
+
if (releaseLockFileEntry) {
|
|
7290
|
+
releaseLockFileEntry(lockPreviousFileEntry);
|
|
7273
7291
|
}
|
|
7274
7292
|
if (releaseLockWriter) {
|
|
7275
7293
|
releaseLockWriter();
|
|
@@ -7283,10 +7301,6 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
|
|
|
7283
7301
|
}
|
|
7284
7302
|
}
|
|
7285
7303
|
|
|
7286
|
-
function requestLockCurrentFileEntry() {
|
|
7287
|
-
fileEntry.lockFileEntry = new Promise(resolve => releaseLockCurrentFileEntry = resolve);
|
|
7288
|
-
}
|
|
7289
|
-
|
|
7290
7304
|
async function requestLockWriter() {
|
|
7291
7305
|
zipWriter.writerLocked = true;
|
|
7292
7306
|
const { lockWriter } = zipWriter;
|
|
@@ -8606,7 +8620,7 @@ function formatSupported(StreamClass, format) {
|
|
|
8606
8620
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
8607
8621
|
*/
|
|
8608
8622
|
|
|
8609
|
-
const VERSION = "2.
|
|
8623
|
+
const VERSION = "2.9.0";
|
|
8610
8624
|
|
|
8611
8625
|
/*
|
|
8612
8626
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
@@ -9583,12 +9597,13 @@ class ZipDirectoryEntry extends ZipEntry {
|
|
|
9583
9597
|
if (options.bufferedWrite === UNDEFINED_VALUE) {
|
|
9584
9598
|
options.bufferedWrite = true;
|
|
9585
9599
|
}
|
|
9586
|
-
const
|
|
9587
|
-
(options.keepOrder !== false && zipEntry.children.every(child => !child.children.length));
|
|
9588
|
-
return getEntriesSize(options, zipEntry.getChildren({ recursive: true }).filter(child => !isImplicitDirectory(child)).map(child => {
|
|
9600
|
+
const entries = zipEntry.getChildren({ recursive: true }).filter(child => !isImplicitDirectory(child)).map(child => {
|
|
9589
9601
|
const { name, entryOptions } = getChildEntryOptions(child, zipEntry, options);
|
|
9590
9602
|
return { name, size: child.directory ? 0 : getDeterminedSize(child, isPassThrough(child, options)), options: entryOptions };
|
|
9591
|
-
})
|
|
9603
|
+
});
|
|
9604
|
+
const writeOrderGuaranteed = !options.bufferedWrite ||
|
|
9605
|
+
(entries.every(entry => entry.options.keepOrder !== false) && zipEntry.children.every(child => !child.children.length));
|
|
9606
|
+
return getEntriesSize(options, entries, writeOrderGuaranteed, options.globalComment);
|
|
9592
9607
|
}
|
|
9593
9608
|
|
|
9594
9609
|
getChildByName(name) {
|
|
@@ -10602,6 +10617,7 @@ exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG = WARNING_MISMATCHED_LOCAL
|
|
|
10602
10617
|
exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD = WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD;
|
|
10603
10618
|
exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES = WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES;
|
|
10604
10619
|
exports.WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY;
|
|
10620
|
+
exports.WARNING_PREPENDED_CENTRAL_DIRECTORY = WARNING_PREPENDED_CENTRAL_DIRECTORY;
|
|
10605
10621
|
exports.WARNING_PREPENDED_DATA = WARNING_PREPENDED_DATA;
|
|
10606
10622
|
exports.WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = WARNING_TRAILING_CENTRAL_DIRECTORY_DATA;
|
|
10607
10623
|
exports.WARNING_UNKNOWN_VERSION = WARNING_UNKNOWN_VERSION;
|