@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-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) {
|
|
@@ -4725,6 +4725,7 @@
|
|
|
4725
4725
|
const WARNING_WRAPPED_ENTRIES_COUNT = "wrapped entries count";
|
|
4726
4726
|
const WARNING_APPENDED_DATA = "appended data";
|
|
4727
4727
|
const WARNING_PREPENDED_DATA = "prepended data";
|
|
4728
|
+
const WARNING_PREPENDED_CENTRAL_DIRECTORY = "prepended central directory";
|
|
4728
4729
|
const WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = "trailing central directory data";
|
|
4729
4730
|
const WARNING_DUPLICATE_FILENAME = "duplicate filename";
|
|
4730
4731
|
const WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = "mismatched zip64 end of central directory record";
|
|
@@ -4818,6 +4819,7 @@
|
|
|
4818
4819
|
let diskNumber = getUint16$1(endOfDirectoryView, 6);
|
|
4819
4820
|
let filesLength = getUint16$1(endOfDirectoryView, 10);
|
|
4820
4821
|
let prependedDataLength = 0;
|
|
4822
|
+
let prependedCentralDirectory;
|
|
4821
4823
|
let startOffset;
|
|
4822
4824
|
let zip64EndOfDirectory;
|
|
4823
4825
|
let zip64EndOfDirectoryVersion2;
|
|
@@ -4921,6 +4923,7 @@
|
|
|
4921
4923
|
directoryDataOffset = expectedDirectoryDataOffset;
|
|
4922
4924
|
if (directoryDataOffset > originalDirectoryDataOffset) {
|
|
4923
4925
|
prependedDataLength += directoryDataOffset - originalDirectoryDataOffset;
|
|
4926
|
+
prependedCentralDirectory = storedPointsAtDirectory;
|
|
4924
4927
|
}
|
|
4925
4928
|
directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
|
|
4926
4929
|
directoryView = getDataView(directoryArray);
|
|
@@ -5148,6 +5151,9 @@
|
|
|
5148
5151
|
if (prependedDataLength || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
|
|
5149
5152
|
addWarning(warnings, WARNING_PREPENDED_DATA);
|
|
5150
5153
|
}
|
|
5154
|
+
if (prependedCentralDirectory) {
|
|
5155
|
+
addWarning(warnings, WARNING_PREPENDED_CENTRAL_DIRECTORY);
|
|
5156
|
+
}
|
|
5151
5157
|
if (extractPrependedData) {
|
|
5152
5158
|
zipReader.prependedData = startOffset > splitZipSignatureLength ?
|
|
5153
5159
|
await readUint8Array(reader, splitZipSignatureLength, startOffset - splitZipSignatureLength) :
|
|
@@ -6208,6 +6214,7 @@
|
|
|
6208
6214
|
WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD: WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD,
|
|
6209
6215
|
WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES: WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES,
|
|
6210
6216
|
WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY: WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY,
|
|
6217
|
+
WARNING_PREPENDED_CENTRAL_DIRECTORY: WARNING_PREPENDED_CENTRAL_DIRECTORY,
|
|
6211
6218
|
WARNING_PREPENDED_DATA: WARNING_PREPENDED_DATA,
|
|
6212
6219
|
WARNING_TRAILING_CENTRAL_DIRECTORY_DATA: WARNING_TRAILING_CENTRAL_DIRECTORY_DATA,
|
|
6213
6220
|
WARNING_UNKNOWN_VERSION: WARNING_UNKNOWN_VERSION,
|
|
@@ -6656,6 +6663,13 @@
|
|
|
6656
6663
|
const { comment } = metadataInfo;
|
|
6657
6664
|
const extraField = options[PROPERTY_NAME_EXTRA_FIELD];
|
|
6658
6665
|
zipWriter.fileEntries.set(name, UNDEFINED_VALUE);
|
|
6666
|
+
const previousFileEntry = zipWriter.lastFileEntry;
|
|
6667
|
+
const pendingFileEntry = {};
|
|
6668
|
+
let releaseLockFileEntry;
|
|
6669
|
+
if (metadataInfo.resolvedOptions.keepOrder) {
|
|
6670
|
+
pendingFileEntry.lockFileEntry = new Promise(resolve => releaseLockFileEntry = resolve);
|
|
6671
|
+
}
|
|
6672
|
+
zipWriter.lastFileEntry = pendingFileEntry;
|
|
6659
6673
|
let fileEntry;
|
|
6660
6674
|
try {
|
|
6661
6675
|
const { resolvedOptions } = metadataInfo;
|
|
@@ -6677,10 +6691,21 @@
|
|
|
6677
6691
|
const headerInfo = getHeaderInfo(options);
|
|
6678
6692
|
const dataDescriptorInfo = getDataDescriptorInfo(options);
|
|
6679
6693
|
const metadataSize = getLength(headerInfo.localHeaderArray, dataDescriptorInfo.dataDescriptorArray);
|
|
6680
|
-
fileEntry = await getFileEntry(zipWriter, name, reader, {
|
|
6694
|
+
fileEntry = await getFileEntry(zipWriter, name, reader, {
|
|
6695
|
+
headerInfo,
|
|
6696
|
+
dataDescriptorInfo,
|
|
6697
|
+
metadataSize,
|
|
6698
|
+
fileEntry: pendingFileEntry,
|
|
6699
|
+
previousFileEntry,
|
|
6700
|
+
releaseLockFileEntry
|
|
6701
|
+
}, options);
|
|
6681
6702
|
} catch (error) {
|
|
6682
6703
|
zipWriter.fileEntries.delete(name);
|
|
6683
6704
|
throw error;
|
|
6705
|
+
} finally {
|
|
6706
|
+
if (releaseLockFileEntry) {
|
|
6707
|
+
releaseLockFileEntry(previousFileEntry && previousFileEntry.lockFileEntry);
|
|
6708
|
+
}
|
|
6684
6709
|
}
|
|
6685
6710
|
Object.assign(fileEntry, {
|
|
6686
6711
|
name,
|
|
@@ -7066,27 +7091,23 @@
|
|
|
7066
7091
|
signal
|
|
7067
7092
|
} = options;
|
|
7068
7093
|
const {
|
|
7069
|
-
headerInfo
|
|
7094
|
+
headerInfo,
|
|
7095
|
+
fileEntry: pendingFileEntry,
|
|
7096
|
+
previousFileEntry,
|
|
7097
|
+
releaseLockFileEntry
|
|
7070
7098
|
} = entryInfo;
|
|
7071
7099
|
const usdz = zipWriter.options[OPTION_USDZ];
|
|
7072
|
-
|
|
7073
|
-
let fileEntry = {};
|
|
7100
|
+
let fileEntry = pendingFileEntry;
|
|
7074
7101
|
let bufferedWrite;
|
|
7075
7102
|
let releaseLockWriter;
|
|
7076
|
-
let releaseLockCurrentFileEntry;
|
|
7077
7103
|
let writingBufferedEntryData;
|
|
7078
7104
|
let writingEntryData;
|
|
7079
7105
|
let writerSizeBeforeEntry;
|
|
7080
7106
|
let flushedBufferedSize = 0;
|
|
7081
7107
|
let fileWriter;
|
|
7108
|
+
const lockPreviousFileEntry = keepOrder && previousFileEntry ? previousFileEntry.lockFileEntry : UNDEFINED_VALUE;
|
|
7082
7109
|
fileEntries.set(name, fileEntry);
|
|
7083
|
-
zipWriter.lastFileEntry = fileEntry;
|
|
7084
7110
|
try {
|
|
7085
|
-
let lockPreviousFileEntry;
|
|
7086
|
-
if (keepOrder) {
|
|
7087
|
-
lockPreviousFileEntry = previousFileEntry && previousFileEntry.lockFileEntry;
|
|
7088
|
-
requestLockCurrentFileEntry();
|
|
7089
|
-
}
|
|
7090
7111
|
if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || (!dataDescriptor && !emptyEntry)) {
|
|
7091
7112
|
bufferedWrite = true;
|
|
7092
7113
|
zipWriter.bufferedWrites++;
|
|
@@ -7099,6 +7120,7 @@
|
|
|
7099
7120
|
await initStream(writer);
|
|
7100
7121
|
} else {
|
|
7101
7122
|
fileWriter = writer;
|
|
7123
|
+
await lockPreviousFileEntry;
|
|
7102
7124
|
await requestLockWriter();
|
|
7103
7125
|
}
|
|
7104
7126
|
await initStream(fileWriter);
|
|
@@ -7111,7 +7133,6 @@
|
|
|
7111
7133
|
}
|
|
7112
7134
|
const { localHeaderArray } = headerInfo;
|
|
7113
7135
|
if (!bufferedWrite) {
|
|
7114
|
-
await lockPreviousFileEntry;
|
|
7115
7136
|
await skipDiskIfNeeded();
|
|
7116
7137
|
}
|
|
7117
7138
|
const diskNumberStart = getDiskNumber(writer);
|
|
@@ -7176,8 +7197,8 @@
|
|
|
7176
7197
|
if (bufferedWrite) {
|
|
7177
7198
|
zipWriter.bufferedWrites--;
|
|
7178
7199
|
}
|
|
7179
|
-
if (
|
|
7180
|
-
|
|
7200
|
+
if (releaseLockFileEntry) {
|
|
7201
|
+
releaseLockFileEntry(lockPreviousFileEntry);
|
|
7181
7202
|
}
|
|
7182
7203
|
if (releaseLockWriter) {
|
|
7183
7204
|
releaseLockWriter();
|
|
@@ -7191,10 +7212,6 @@
|
|
|
7191
7212
|
}
|
|
7192
7213
|
}
|
|
7193
7214
|
|
|
7194
|
-
function requestLockCurrentFileEntry() {
|
|
7195
|
-
fileEntry.lockFileEntry = new Promise(resolve => releaseLockCurrentFileEntry = resolve);
|
|
7196
|
-
}
|
|
7197
|
-
|
|
7198
7215
|
async function requestLockWriter() {
|
|
7199
7216
|
zipWriter.writerLocked = true;
|
|
7200
7217
|
const { lockWriter } = zipWriter;
|
|
@@ -8514,7 +8531,7 @@
|
|
|
8514
8531
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
8515
8532
|
*/
|
|
8516
8533
|
|
|
8517
|
-
const VERSION = "2.
|
|
8534
|
+
const VERSION = "2.9.0";
|
|
8518
8535
|
|
|
8519
8536
|
/*
|
|
8520
8537
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
@@ -9123,6 +9140,7 @@
|
|
|
9123
9140
|
exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD = WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD;
|
|
9124
9141
|
exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES = WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES;
|
|
9125
9142
|
exports.WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY;
|
|
9143
|
+
exports.WARNING_PREPENDED_CENTRAL_DIRECTORY = WARNING_PREPENDED_CENTRAL_DIRECTORY;
|
|
9126
9144
|
exports.WARNING_PREPENDED_DATA = WARNING_PREPENDED_DATA;
|
|
9127
9145
|
exports.WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = WARNING_TRAILING_CENTRAL_DIRECTORY_DATA;
|
|
9128
9146
|
exports.WARNING_UNKNOWN_VERSION = WARNING_UNKNOWN_VERSION;
|