@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.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) {
|
|
@@ -4729,6 +4729,7 @@
|
|
|
4729
4729
|
const WARNING_WRAPPED_ENTRIES_COUNT = "wrapped entries count";
|
|
4730
4730
|
const WARNING_APPENDED_DATA = "appended data";
|
|
4731
4731
|
const WARNING_PREPENDED_DATA = "prepended data";
|
|
4732
|
+
const WARNING_PREPENDED_CENTRAL_DIRECTORY = "prepended central directory";
|
|
4732
4733
|
const WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = "trailing central directory data";
|
|
4733
4734
|
const WARNING_DUPLICATE_FILENAME = "duplicate filename";
|
|
4734
4735
|
const WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = "mismatched zip64 end of central directory record";
|
|
@@ -4822,6 +4823,7 @@
|
|
|
4822
4823
|
let diskNumber = getUint16$1(endOfDirectoryView, 6);
|
|
4823
4824
|
let filesLength = getUint16$1(endOfDirectoryView, 10);
|
|
4824
4825
|
let prependedDataLength = 0;
|
|
4826
|
+
let prependedCentralDirectory;
|
|
4825
4827
|
let startOffset;
|
|
4826
4828
|
let zip64EndOfDirectory;
|
|
4827
4829
|
let zip64EndOfDirectoryVersion2;
|
|
@@ -4925,6 +4927,7 @@
|
|
|
4925
4927
|
directoryDataOffset = expectedDirectoryDataOffset;
|
|
4926
4928
|
if (directoryDataOffset > originalDirectoryDataOffset) {
|
|
4927
4929
|
prependedDataLength += directoryDataOffset - originalDirectoryDataOffset;
|
|
4930
|
+
prependedCentralDirectory = storedPointsAtDirectory;
|
|
4928
4931
|
}
|
|
4929
4932
|
directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
|
|
4930
4933
|
directoryView = getDataView(directoryArray);
|
|
@@ -5152,6 +5155,9 @@
|
|
|
5152
5155
|
if (prependedDataLength || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
|
|
5153
5156
|
addWarning(warnings, WARNING_PREPENDED_DATA);
|
|
5154
5157
|
}
|
|
5158
|
+
if (prependedCentralDirectory) {
|
|
5159
|
+
addWarning(warnings, WARNING_PREPENDED_CENTRAL_DIRECTORY);
|
|
5160
|
+
}
|
|
5155
5161
|
if (extractPrependedData) {
|
|
5156
5162
|
zipReader.prependedData = startOffset > splitZipSignatureLength ?
|
|
5157
5163
|
await readUint8Array(reader, splitZipSignatureLength, startOffset - splitZipSignatureLength) :
|
|
@@ -6212,6 +6218,7 @@
|
|
|
6212
6218
|
WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD: WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD,
|
|
6213
6219
|
WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES: WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES,
|
|
6214
6220
|
WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY: WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY,
|
|
6221
|
+
WARNING_PREPENDED_CENTRAL_DIRECTORY: WARNING_PREPENDED_CENTRAL_DIRECTORY,
|
|
6215
6222
|
WARNING_PREPENDED_DATA: WARNING_PREPENDED_DATA,
|
|
6216
6223
|
WARNING_TRAILING_CENTRAL_DIRECTORY_DATA: WARNING_TRAILING_CENTRAL_DIRECTORY_DATA,
|
|
6217
6224
|
WARNING_UNKNOWN_VERSION: WARNING_UNKNOWN_VERSION,
|
|
@@ -6660,6 +6667,13 @@
|
|
|
6660
6667
|
const { comment } = metadataInfo;
|
|
6661
6668
|
const extraField = options[PROPERTY_NAME_EXTRA_FIELD];
|
|
6662
6669
|
zipWriter.fileEntries.set(name, UNDEFINED_VALUE);
|
|
6670
|
+
const previousFileEntry = zipWriter.lastFileEntry;
|
|
6671
|
+
const pendingFileEntry = {};
|
|
6672
|
+
let releaseLockFileEntry;
|
|
6673
|
+
if (metadataInfo.resolvedOptions.keepOrder) {
|
|
6674
|
+
pendingFileEntry.lockFileEntry = new Promise(resolve => releaseLockFileEntry = resolve);
|
|
6675
|
+
}
|
|
6676
|
+
zipWriter.lastFileEntry = pendingFileEntry;
|
|
6663
6677
|
let fileEntry;
|
|
6664
6678
|
try {
|
|
6665
6679
|
const { resolvedOptions } = metadataInfo;
|
|
@@ -6681,10 +6695,21 @@
|
|
|
6681
6695
|
const headerInfo = getHeaderInfo(options);
|
|
6682
6696
|
const dataDescriptorInfo = getDataDescriptorInfo(options);
|
|
6683
6697
|
const metadataSize = getLength(headerInfo.localHeaderArray, dataDescriptorInfo.dataDescriptorArray);
|
|
6684
|
-
fileEntry = await getFileEntry(zipWriter, name, reader, {
|
|
6698
|
+
fileEntry = await getFileEntry(zipWriter, name, reader, {
|
|
6699
|
+
headerInfo,
|
|
6700
|
+
dataDescriptorInfo,
|
|
6701
|
+
metadataSize,
|
|
6702
|
+
fileEntry: pendingFileEntry,
|
|
6703
|
+
previousFileEntry,
|
|
6704
|
+
releaseLockFileEntry
|
|
6705
|
+
}, options);
|
|
6685
6706
|
} catch (error) {
|
|
6686
6707
|
zipWriter.fileEntries.delete(name);
|
|
6687
6708
|
throw error;
|
|
6709
|
+
} finally {
|
|
6710
|
+
if (releaseLockFileEntry) {
|
|
6711
|
+
releaseLockFileEntry(previousFileEntry && previousFileEntry.lockFileEntry);
|
|
6712
|
+
}
|
|
6688
6713
|
}
|
|
6689
6714
|
Object.assign(fileEntry, {
|
|
6690
6715
|
name,
|
|
@@ -7070,27 +7095,23 @@
|
|
|
7070
7095
|
signal
|
|
7071
7096
|
} = options;
|
|
7072
7097
|
const {
|
|
7073
|
-
headerInfo
|
|
7098
|
+
headerInfo,
|
|
7099
|
+
fileEntry: pendingFileEntry,
|
|
7100
|
+
previousFileEntry,
|
|
7101
|
+
releaseLockFileEntry
|
|
7074
7102
|
} = entryInfo;
|
|
7075
7103
|
const usdz = zipWriter.options[OPTION_USDZ];
|
|
7076
|
-
|
|
7077
|
-
let fileEntry = {};
|
|
7104
|
+
let fileEntry = pendingFileEntry;
|
|
7078
7105
|
let bufferedWrite;
|
|
7079
7106
|
let releaseLockWriter;
|
|
7080
|
-
let releaseLockCurrentFileEntry;
|
|
7081
7107
|
let writingBufferedEntryData;
|
|
7082
7108
|
let writingEntryData;
|
|
7083
7109
|
let writerSizeBeforeEntry;
|
|
7084
7110
|
let flushedBufferedSize = 0;
|
|
7085
7111
|
let fileWriter;
|
|
7112
|
+
const lockPreviousFileEntry = keepOrder && previousFileEntry ? previousFileEntry.lockFileEntry : UNDEFINED_VALUE;
|
|
7086
7113
|
fileEntries.set(name, fileEntry);
|
|
7087
|
-
zipWriter.lastFileEntry = fileEntry;
|
|
7088
7114
|
try {
|
|
7089
|
-
let lockPreviousFileEntry;
|
|
7090
|
-
if (keepOrder) {
|
|
7091
|
-
lockPreviousFileEntry = previousFileEntry && previousFileEntry.lockFileEntry;
|
|
7092
|
-
requestLockCurrentFileEntry();
|
|
7093
|
-
}
|
|
7094
7115
|
if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || (!dataDescriptor && !emptyEntry)) {
|
|
7095
7116
|
bufferedWrite = true;
|
|
7096
7117
|
zipWriter.bufferedWrites++;
|
|
@@ -7103,6 +7124,7 @@
|
|
|
7103
7124
|
await initStream(writer);
|
|
7104
7125
|
} else {
|
|
7105
7126
|
fileWriter = writer;
|
|
7127
|
+
await lockPreviousFileEntry;
|
|
7106
7128
|
await requestLockWriter();
|
|
7107
7129
|
}
|
|
7108
7130
|
await initStream(fileWriter);
|
|
@@ -7115,7 +7137,6 @@
|
|
|
7115
7137
|
}
|
|
7116
7138
|
const { localHeaderArray } = headerInfo;
|
|
7117
7139
|
if (!bufferedWrite) {
|
|
7118
|
-
await lockPreviousFileEntry;
|
|
7119
7140
|
await skipDiskIfNeeded();
|
|
7120
7141
|
}
|
|
7121
7142
|
const diskNumberStart = getDiskNumber(writer);
|
|
@@ -7180,8 +7201,8 @@
|
|
|
7180
7201
|
if (bufferedWrite) {
|
|
7181
7202
|
zipWriter.bufferedWrites--;
|
|
7182
7203
|
}
|
|
7183
|
-
if (
|
|
7184
|
-
|
|
7204
|
+
if (releaseLockFileEntry) {
|
|
7205
|
+
releaseLockFileEntry(lockPreviousFileEntry);
|
|
7185
7206
|
}
|
|
7186
7207
|
if (releaseLockWriter) {
|
|
7187
7208
|
releaseLockWriter();
|
|
@@ -7195,10 +7216,6 @@
|
|
|
7195
7216
|
}
|
|
7196
7217
|
}
|
|
7197
7218
|
|
|
7198
|
-
function requestLockCurrentFileEntry() {
|
|
7199
|
-
fileEntry.lockFileEntry = new Promise(resolve => releaseLockCurrentFileEntry = resolve);
|
|
7200
|
-
}
|
|
7201
|
-
|
|
7202
7219
|
async function requestLockWriter() {
|
|
7203
7220
|
zipWriter.writerLocked = true;
|
|
7204
7221
|
const { lockWriter } = zipWriter;
|
|
@@ -8518,7 +8535,7 @@
|
|
|
8518
8535
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
8519
8536
|
*/
|
|
8520
8537
|
|
|
8521
|
-
const VERSION = "2.
|
|
8538
|
+
const VERSION = "2.9.0";
|
|
8522
8539
|
|
|
8523
8540
|
/*
|
|
8524
8541
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
@@ -9502,6 +9519,7 @@
|
|
|
9502
9519
|
exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD = WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD;
|
|
9503
9520
|
exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES = WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES;
|
|
9504
9521
|
exports.WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY;
|
|
9522
|
+
exports.WARNING_PREPENDED_CENTRAL_DIRECTORY = WARNING_PREPENDED_CENTRAL_DIRECTORY;
|
|
9505
9523
|
exports.WARNING_PREPENDED_DATA = WARNING_PREPENDED_DATA;
|
|
9506
9524
|
exports.WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = WARNING_TRAILING_CENTRAL_DIRECTORY_DATA;
|
|
9507
9525
|
exports.WARNING_UNKNOWN_VERSION = WARNING_UNKNOWN_VERSION;
|