@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-core.js
CHANGED
|
@@ -493,7 +493,7 @@
|
|
|
493
493
|
// Every table MUST stay a PACKED_SMI array: build with array literals (not `new Array(n)`,
|
|
494
494
|
// which is HOLEY) and store the signed int32 XOR result (no `>>> 0`). An unsigned or holey
|
|
495
495
|
// table becomes a V8 FixedDoubleArray whose every hot-loop lookup unboxes a double (~1.6x
|
|
496
|
-
// slower). Signedness is irrelevant to the result
|
|
496
|
+
// slower). Signedness is irrelevant to the result: the reads mask/shift it and the final
|
|
497
497
|
// `~crc` normalizes it. Do NOT reintroduce `>>> 0` here or switch to `new Array(256)`.
|
|
498
498
|
const T = [[], [], [], [], [], [], [], []];
|
|
499
499
|
for (let n = 0; n < 256; n++) {
|
|
@@ -3477,7 +3477,7 @@
|
|
|
3477
3477
|
|
|
3478
3478
|
/* global TextDecoder */
|
|
3479
3479
|
|
|
3480
|
-
const CP437 = "\0
|
|
3480
|
+
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("");
|
|
3481
3481
|
const VALID_CP437 = CP437.length == 256;
|
|
3482
3482
|
|
|
3483
3483
|
function decodeCP437(stringValue) {
|
|
@@ -4723,6 +4723,7 @@
|
|
|
4723
4723
|
const WARNING_WRAPPED_ENTRIES_COUNT = "wrapped entries count";
|
|
4724
4724
|
const WARNING_APPENDED_DATA = "appended data";
|
|
4725
4725
|
const WARNING_PREPENDED_DATA = "prepended data";
|
|
4726
|
+
const WARNING_PREPENDED_CENTRAL_DIRECTORY = "prepended central directory";
|
|
4726
4727
|
const WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = "trailing central directory data";
|
|
4727
4728
|
const WARNING_DUPLICATE_FILENAME = "duplicate filename";
|
|
4728
4729
|
const WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = "mismatched zip64 end of central directory record";
|
|
@@ -4816,6 +4817,7 @@
|
|
|
4816
4817
|
let diskNumber = getUint16$1(endOfDirectoryView, 6);
|
|
4817
4818
|
let filesLength = getUint16$1(endOfDirectoryView, 10);
|
|
4818
4819
|
let prependedDataLength = 0;
|
|
4820
|
+
let prependedCentralDirectory;
|
|
4819
4821
|
let startOffset;
|
|
4820
4822
|
let zip64EndOfDirectory;
|
|
4821
4823
|
let zip64EndOfDirectoryVersion2;
|
|
@@ -4919,6 +4921,7 @@
|
|
|
4919
4921
|
directoryDataOffset = expectedDirectoryDataOffset;
|
|
4920
4922
|
if (directoryDataOffset > originalDirectoryDataOffset) {
|
|
4921
4923
|
prependedDataLength += directoryDataOffset - originalDirectoryDataOffset;
|
|
4924
|
+
prependedCentralDirectory = storedPointsAtDirectory;
|
|
4922
4925
|
}
|
|
4923
4926
|
directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
|
|
4924
4927
|
directoryView = getDataView(directoryArray);
|
|
@@ -5146,6 +5149,9 @@
|
|
|
5146
5149
|
if (prependedDataLength || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
|
|
5147
5150
|
addWarning(warnings, WARNING_PREPENDED_DATA);
|
|
5148
5151
|
}
|
|
5152
|
+
if (prependedCentralDirectory) {
|
|
5153
|
+
addWarning(warnings, WARNING_PREPENDED_CENTRAL_DIRECTORY);
|
|
5154
|
+
}
|
|
5149
5155
|
if (extractPrependedData) {
|
|
5150
5156
|
zipReader.prependedData = startOffset > splitZipSignatureLength ?
|
|
5151
5157
|
await readUint8Array(reader, splitZipSignatureLength, startOffset - splitZipSignatureLength) :
|
|
@@ -6206,6 +6212,7 @@
|
|
|
6206
6212
|
WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD: WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD,
|
|
6207
6213
|
WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES: WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES,
|
|
6208
6214
|
WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY: WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY,
|
|
6215
|
+
WARNING_PREPENDED_CENTRAL_DIRECTORY: WARNING_PREPENDED_CENTRAL_DIRECTORY,
|
|
6209
6216
|
WARNING_PREPENDED_DATA: WARNING_PREPENDED_DATA,
|
|
6210
6217
|
WARNING_TRAILING_CENTRAL_DIRECTORY_DATA: WARNING_TRAILING_CENTRAL_DIRECTORY_DATA,
|
|
6211
6218
|
WARNING_UNKNOWN_VERSION: WARNING_UNKNOWN_VERSION,
|
|
@@ -6654,6 +6661,13 @@
|
|
|
6654
6661
|
const { comment } = metadataInfo;
|
|
6655
6662
|
const extraField = options[PROPERTY_NAME_EXTRA_FIELD];
|
|
6656
6663
|
zipWriter.fileEntries.set(name, UNDEFINED_VALUE);
|
|
6664
|
+
const previousFileEntry = zipWriter.lastFileEntry;
|
|
6665
|
+
const pendingFileEntry = {};
|
|
6666
|
+
let releaseLockFileEntry;
|
|
6667
|
+
if (metadataInfo.resolvedOptions.keepOrder) {
|
|
6668
|
+
pendingFileEntry.lockFileEntry = new Promise(resolve => releaseLockFileEntry = resolve);
|
|
6669
|
+
}
|
|
6670
|
+
zipWriter.lastFileEntry = pendingFileEntry;
|
|
6657
6671
|
let fileEntry;
|
|
6658
6672
|
try {
|
|
6659
6673
|
const { resolvedOptions } = metadataInfo;
|
|
@@ -6675,10 +6689,21 @@
|
|
|
6675
6689
|
const headerInfo = getHeaderInfo(options);
|
|
6676
6690
|
const dataDescriptorInfo = getDataDescriptorInfo(options);
|
|
6677
6691
|
const metadataSize = getLength(headerInfo.localHeaderArray, dataDescriptorInfo.dataDescriptorArray);
|
|
6678
|
-
fileEntry = await getFileEntry(zipWriter, name, reader, {
|
|
6692
|
+
fileEntry = await getFileEntry(zipWriter, name, reader, {
|
|
6693
|
+
headerInfo,
|
|
6694
|
+
dataDescriptorInfo,
|
|
6695
|
+
metadataSize,
|
|
6696
|
+
fileEntry: pendingFileEntry,
|
|
6697
|
+
previousFileEntry,
|
|
6698
|
+
releaseLockFileEntry
|
|
6699
|
+
}, options);
|
|
6679
6700
|
} catch (error) {
|
|
6680
6701
|
zipWriter.fileEntries.delete(name);
|
|
6681
6702
|
throw error;
|
|
6703
|
+
} finally {
|
|
6704
|
+
if (releaseLockFileEntry) {
|
|
6705
|
+
releaseLockFileEntry(previousFileEntry && previousFileEntry.lockFileEntry);
|
|
6706
|
+
}
|
|
6682
6707
|
}
|
|
6683
6708
|
Object.assign(fileEntry, {
|
|
6684
6709
|
name,
|
|
@@ -7064,27 +7089,23 @@
|
|
|
7064
7089
|
signal
|
|
7065
7090
|
} = options;
|
|
7066
7091
|
const {
|
|
7067
|
-
headerInfo
|
|
7092
|
+
headerInfo,
|
|
7093
|
+
fileEntry: pendingFileEntry,
|
|
7094
|
+
previousFileEntry,
|
|
7095
|
+
releaseLockFileEntry
|
|
7068
7096
|
} = entryInfo;
|
|
7069
7097
|
const usdz = zipWriter.options[OPTION_USDZ];
|
|
7070
|
-
|
|
7071
|
-
let fileEntry = {};
|
|
7098
|
+
let fileEntry = pendingFileEntry;
|
|
7072
7099
|
let bufferedWrite;
|
|
7073
7100
|
let releaseLockWriter;
|
|
7074
|
-
let releaseLockCurrentFileEntry;
|
|
7075
7101
|
let writingBufferedEntryData;
|
|
7076
7102
|
let writingEntryData;
|
|
7077
7103
|
let writerSizeBeforeEntry;
|
|
7078
7104
|
let flushedBufferedSize = 0;
|
|
7079
7105
|
let fileWriter;
|
|
7106
|
+
const lockPreviousFileEntry = keepOrder && previousFileEntry ? previousFileEntry.lockFileEntry : UNDEFINED_VALUE;
|
|
7080
7107
|
fileEntries.set(name, fileEntry);
|
|
7081
|
-
zipWriter.lastFileEntry = fileEntry;
|
|
7082
7108
|
try {
|
|
7083
|
-
let lockPreviousFileEntry;
|
|
7084
|
-
if (keepOrder) {
|
|
7085
|
-
lockPreviousFileEntry = previousFileEntry && previousFileEntry.lockFileEntry;
|
|
7086
|
-
requestLockCurrentFileEntry();
|
|
7087
|
-
}
|
|
7088
7109
|
if (options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || (!dataDescriptor && !emptyEntry)) {
|
|
7089
7110
|
bufferedWrite = true;
|
|
7090
7111
|
zipWriter.bufferedWrites++;
|
|
@@ -7097,6 +7118,7 @@
|
|
|
7097
7118
|
await initStream(writer);
|
|
7098
7119
|
} else {
|
|
7099
7120
|
fileWriter = writer;
|
|
7121
|
+
await lockPreviousFileEntry;
|
|
7100
7122
|
await requestLockWriter();
|
|
7101
7123
|
}
|
|
7102
7124
|
await initStream(fileWriter);
|
|
@@ -7109,7 +7131,6 @@
|
|
|
7109
7131
|
}
|
|
7110
7132
|
const { localHeaderArray } = headerInfo;
|
|
7111
7133
|
if (!bufferedWrite) {
|
|
7112
|
-
await lockPreviousFileEntry;
|
|
7113
7134
|
await skipDiskIfNeeded();
|
|
7114
7135
|
}
|
|
7115
7136
|
const diskNumberStart = getDiskNumber(writer);
|
|
@@ -7174,8 +7195,8 @@
|
|
|
7174
7195
|
if (bufferedWrite) {
|
|
7175
7196
|
zipWriter.bufferedWrites--;
|
|
7176
7197
|
}
|
|
7177
|
-
if (
|
|
7178
|
-
|
|
7198
|
+
if (releaseLockFileEntry) {
|
|
7199
|
+
releaseLockFileEntry(lockPreviousFileEntry);
|
|
7179
7200
|
}
|
|
7180
7201
|
if (releaseLockWriter) {
|
|
7181
7202
|
releaseLockWriter();
|
|
@@ -7189,10 +7210,6 @@
|
|
|
7189
7210
|
}
|
|
7190
7211
|
}
|
|
7191
7212
|
|
|
7192
|
-
function requestLockCurrentFileEntry() {
|
|
7193
|
-
fileEntry.lockFileEntry = new Promise(resolve => releaseLockCurrentFileEntry = resolve);
|
|
7194
|
-
}
|
|
7195
|
-
|
|
7196
7213
|
async function requestLockWriter() {
|
|
7197
7214
|
zipWriter.writerLocked = true;
|
|
7198
7215
|
const { lockWriter } = zipWriter;
|
|
@@ -8512,7 +8529,7 @@
|
|
|
8512
8529
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
8513
8530
|
*/
|
|
8514
8531
|
|
|
8515
|
-
const VERSION = "2.
|
|
8532
|
+
const VERSION = "2.9.0";
|
|
8516
8533
|
|
|
8517
8534
|
/*
|
|
8518
8535
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
@@ -9052,6 +9069,7 @@
|
|
|
9052
9069
|
exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD = WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD;
|
|
9053
9070
|
exports.WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES = WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES;
|
|
9054
9071
|
exports.WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY;
|
|
9072
|
+
exports.WARNING_PREPENDED_CENTRAL_DIRECTORY = WARNING_PREPENDED_CENTRAL_DIRECTORY;
|
|
9055
9073
|
exports.WARNING_PREPENDED_DATA = WARNING_PREPENDED_DATA;
|
|
9056
9074
|
exports.WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = WARNING_TRAILING_CENTRAL_DIRECTORY_DATA;
|
|
9057
9075
|
exports.WARNING_UNKNOWN_VERSION = WARNING_UNKNOWN_VERSION;
|