@zip.js/zip.js 2.9.0 → 2.10.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/README.md +40 -0
- package/deno.json +1 -1
- package/dist/zip-core-external.js +5 -12
- package/dist/zip-core-external.min.js +1 -1
- package/dist/zip-core.js +5 -12
- package/dist/zip-core.min.js +1 -1
- package/dist/zip-fs-core-external.js +159 -55
- package/dist/zip-fs-core-external.min.js +1 -1
- package/dist/zip-fs-core.js +160 -54
- package/dist/zip-fs-core.min.js +1 -1
- package/dist/zip-fs-external.js +159 -55
- package/dist/zip-fs-external.min.js +1 -1
- package/dist/zip-fs-native.js +160 -54
- package/dist/zip-fs-native.min.js +1 -1
- package/dist/zip-fs.js +160 -54
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-legacy.js +5 -12
- package/dist/zip-legacy.min.js +1 -1
- package/dist/zip-native.js +5 -12
- package/dist/zip-native.min.js +1 -1
- package/dist/zip.js +5 -12
- package/dist/zip.min.js +1 -1
- package/index-native.cjs +160 -54
- package/index-native.min.js +1 -1
- package/index.cjs +160 -54
- package/index.d.cts +87 -7
- package/index.d.ts +87 -7
- package/index.min.js +1 -1
- package/lib/core/util/decode-cp437.js +4 -11
- package/lib/core/version.js +1 -1
- package/lib/core/zip-fs.js +155 -44
- package/package.json +1 -1
|
@@ -3506,21 +3506,14 @@ async function terminateWorkers() {
|
|
|
3506
3506
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
3507
3507
|
*/
|
|
3508
3508
|
|
|
3509
|
-
/* global TextDecoder */
|
|
3510
|
-
|
|
3511
3509
|
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("");
|
|
3512
|
-
const VALID_CP437 = CP437.length == 256;
|
|
3513
3510
|
|
|
3514
3511
|
function decodeCP437(stringValue) {
|
|
3515
|
-
|
|
3516
|
-
|
|
3517
|
-
|
|
3518
|
-
result += CP437[stringValue[indexCharacter]];
|
|
3519
|
-
}
|
|
3520
|
-
return result;
|
|
3521
|
-
} else {
|
|
3522
|
-
return new TextDecoder().decode(stringValue);
|
|
3512
|
+
let result = "";
|
|
3513
|
+
for (let indexCharacter = 0; indexCharacter < stringValue.length; indexCharacter++) {
|
|
3514
|
+
result += CP437[stringValue[indexCharacter]];
|
|
3523
3515
|
}
|
|
3516
|
+
return result;
|
|
3524
3517
|
}
|
|
3525
3518
|
|
|
3526
3519
|
/*
|
|
@@ -8655,7 +8648,7 @@ function formatSupported(StreamClass, format) {
|
|
|
8655
8648
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
8656
8649
|
*/
|
|
8657
8650
|
|
|
8658
|
-
const VERSION = "2.
|
|
8651
|
+
const VERSION = "2.10.0";
|
|
8659
8652
|
|
|
8660
8653
|
/*
|
|
8661
8654
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
@@ -9519,7 +9512,14 @@ configureExternalAssets();
|
|
|
9519
9512
|
|
|
9520
9513
|
|
|
9521
9514
|
const ERR_ENTRY_EXISTS = "Entry filename already exists";
|
|
9515
|
+
const ERR_DUPLICATE_IMPORTED_ENTRY = "Duplicate entry filename in the imported zip file";
|
|
9516
|
+
const ERR_INVALID_DUPLICATES = "Invalid duplicates option (must be \"throw\", \"keep-first\" or \"keep-last\")";
|
|
9517
|
+
const ERR_ANCESTOR_ENTRY = "Entry is a ancestor of target entry";
|
|
9522
9518
|
const ERR_READABLE_CONSUMED = "Readable stream already consumed";
|
|
9519
|
+
const DUPLICATES_THROW = "throw";
|
|
9520
|
+
const DUPLICATES_KEEP_FIRST = "keep-first";
|
|
9521
|
+
const DUPLICATES_KEEP_LAST = "keep-last";
|
|
9522
|
+
const DUPLICATES_VALUES = new Set([DUPLICATES_THROW, DUPLICATES_KEEP_FIRST, DUPLICATES_KEEP_LAST]);
|
|
9523
9523
|
const ERR_INVALID_PASS_THROUGH = "Invalid passThrough option (use readerOptions.passThrough or set uncompressedSize for each entry)";
|
|
9524
9524
|
const ERR_INVALID_READER_OPTIONS = "Invalid readerOptions (must be an object)";
|
|
9525
9525
|
const ERR_ZIP_CRYPTO_LAST_MOD_DATE = "The last modification date of an entry encrypted with ZipCrypto cannot be changed when passThrough is set";
|
|
@@ -9596,12 +9596,26 @@ class ZipEntry {
|
|
|
9596
9596
|
}
|
|
9597
9597
|
|
|
9598
9598
|
rename(name) {
|
|
9599
|
-
const
|
|
9600
|
-
|
|
9601
|
-
|
|
9602
|
-
|
|
9603
|
-
|
|
9599
|
+
const zipEntry = this;
|
|
9600
|
+
let parent = zipEntry.parent;
|
|
9601
|
+
if (parent) {
|
|
9602
|
+
const path = splitPath(name);
|
|
9603
|
+
if (path) {
|
|
9604
|
+
name = path.pop();
|
|
9605
|
+
parent = getPathParent(parent, path, zipEntry);
|
|
9606
|
+
}
|
|
9607
|
+
const existingChild = parent.getChildByName(name);
|
|
9608
|
+
if (existingChild && existingChild != zipEntry) {
|
|
9609
|
+
throw new Error(ERR_ENTRY_EXISTS);
|
|
9610
|
+
}
|
|
9611
|
+
if (parent != zipEntry.parent) {
|
|
9612
|
+
detach(zipEntry);
|
|
9613
|
+
zipEntry.parent = parent;
|
|
9614
|
+
parent.children.push(zipEntry);
|
|
9615
|
+
registerEntries(zipEntry.fs, zipEntry);
|
|
9616
|
+
}
|
|
9604
9617
|
}
|
|
9618
|
+
zipEntry.name = name;
|
|
9605
9619
|
}
|
|
9606
9620
|
|
|
9607
9621
|
setOptions(options) {
|
|
@@ -9694,47 +9708,47 @@ class ZipFileEntry extends ZipEntry {
|
|
|
9694
9708
|
}
|
|
9695
9709
|
|
|
9696
9710
|
replaceBlob(blob) {
|
|
9697
|
-
|
|
9711
|
+
replaceContent(this, {
|
|
9698
9712
|
data: blob,
|
|
9699
9713
|
Reader: BlobReader,
|
|
9700
9714
|
Writer: BlobWriter,
|
|
9701
|
-
|
|
9715
|
+
uncompressedSize: blob.size
|
|
9702
9716
|
});
|
|
9703
9717
|
}
|
|
9704
9718
|
|
|
9705
9719
|
replaceText(text) {
|
|
9706
|
-
|
|
9720
|
+
replaceContent(this, {
|
|
9707
9721
|
data: text,
|
|
9708
9722
|
Reader: TextReader,
|
|
9709
9723
|
Writer: TextWriter,
|
|
9710
|
-
|
|
9724
|
+
uncompressedSize: getTextSize(text)
|
|
9711
9725
|
});
|
|
9712
9726
|
}
|
|
9713
9727
|
|
|
9714
9728
|
replaceData64URI(dataURI) {
|
|
9715
|
-
|
|
9729
|
+
replaceContent(this, {
|
|
9716
9730
|
data: dataURI,
|
|
9717
9731
|
Reader: Data64URIReader,
|
|
9718
9732
|
Writer: Data64URIWriter,
|
|
9719
|
-
|
|
9733
|
+
uncompressedSize: getData64URISize(dataURI)
|
|
9720
9734
|
});
|
|
9721
9735
|
}
|
|
9722
9736
|
|
|
9723
9737
|
replaceUint8Array(array) {
|
|
9724
|
-
|
|
9738
|
+
replaceContent(this, {
|
|
9725
9739
|
data: array,
|
|
9726
9740
|
Reader: Uint8ArrayReader,
|
|
9727
9741
|
Writer: Uint8ArrayWriter,
|
|
9728
|
-
|
|
9742
|
+
uncompressedSize: array.length
|
|
9729
9743
|
});
|
|
9730
9744
|
}
|
|
9731
9745
|
|
|
9732
9746
|
replaceReadable(readable) {
|
|
9733
|
-
|
|
9747
|
+
replaceContent(this, {
|
|
9734
9748
|
data: null,
|
|
9735
9749
|
Reader: getReadableReader(readable),
|
|
9736
9750
|
Writer: null,
|
|
9737
|
-
|
|
9751
|
+
uncompressedSize: UNDEFINED_VALUE
|
|
9738
9752
|
});
|
|
9739
9753
|
}
|
|
9740
9754
|
}
|
|
@@ -9784,17 +9798,12 @@ class ZipDirectoryEntry extends ZipEntry {
|
|
|
9784
9798
|
}
|
|
9785
9799
|
|
|
9786
9800
|
addData64URI(name, dataURI, options = {}) {
|
|
9787
|
-
let dataEnd = dataURI.length;
|
|
9788
|
-
while (dataURI.charAt(dataEnd - 1) == "=") {
|
|
9789
|
-
dataEnd--;
|
|
9790
|
-
}
|
|
9791
|
-
const dataStart = dataURI.indexOf(",") + 1;
|
|
9792
9801
|
return addChild(this, name, {
|
|
9793
9802
|
data: dataURI,
|
|
9794
9803
|
Reader: Data64URIReader,
|
|
9795
9804
|
Writer: Data64URIWriter,
|
|
9796
9805
|
options,
|
|
9797
|
-
uncompressedSize:
|
|
9806
|
+
uncompressedSize: getData64URISize(dataURI)
|
|
9798
9807
|
});
|
|
9799
9808
|
}
|
|
9800
9809
|
|
|
@@ -9902,6 +9911,7 @@ class ZipDirectoryEntry extends ZipEntry {
|
|
|
9902
9911
|
await initStream(reader);
|
|
9903
9912
|
zipReader = new ZipReader(reader, options);
|
|
9904
9913
|
}
|
|
9914
|
+
const duplicates = checkDuplicatesOption(options.duplicates);
|
|
9905
9915
|
const importedEntries = [];
|
|
9906
9916
|
const entries = await zipReader.getEntries(options);
|
|
9907
9917
|
for (const entry of entries) {
|
|
@@ -9909,19 +9919,42 @@ class ZipDirectoryEntry extends ZipEntry {
|
|
|
9909
9919
|
try {
|
|
9910
9920
|
const path = entry.filename.split("/").filter(pathPart => pathPart != "" && pathPart != ".");
|
|
9911
9921
|
const name = path.pop();
|
|
9912
|
-
|
|
9922
|
+
let skippedEntry = false;
|
|
9923
|
+
for (const pathPart of path) {
|
|
9913
9924
|
const previousParent = parent;
|
|
9914
9925
|
parent = parent.getChildByName(pathPart);
|
|
9915
9926
|
if (parent) {
|
|
9916
9927
|
if (!parent.directory) {
|
|
9917
|
-
|
|
9928
|
+
if (duplicates == DUPLICATES_KEEP_FIRST) {
|
|
9929
|
+
skippedEntry = true;
|
|
9930
|
+
break;
|
|
9931
|
+
} else if (duplicates == DUPLICATES_KEEP_LAST) {
|
|
9932
|
+
this.fs.remove(parent);
|
|
9933
|
+
parent = new ZipDirectoryEntry(this.fs, pathPart, { data: null }, previousParent);
|
|
9934
|
+
importedEntries.push(parent);
|
|
9935
|
+
} else {
|
|
9936
|
+
throw new Error(ERR_DUPLICATE_IMPORTED_ENTRY);
|
|
9937
|
+
}
|
|
9918
9938
|
}
|
|
9919
9939
|
} else {
|
|
9920
9940
|
parent = new ZipDirectoryEntry(this.fs, pathPart, { data: null }, previousParent);
|
|
9921
9941
|
importedEntries.push(parent);
|
|
9922
9942
|
}
|
|
9923
|
-
}
|
|
9943
|
+
}
|
|
9944
|
+
if (skippedEntry) {
|
|
9945
|
+
continue;
|
|
9946
|
+
}
|
|
9924
9947
|
if (!entry.directory) {
|
|
9948
|
+
const existingChild = parent.getChildByName(name);
|
|
9949
|
+
if (existingChild) {
|
|
9950
|
+
if (duplicates == DUPLICATES_KEEP_FIRST) {
|
|
9951
|
+
continue;
|
|
9952
|
+
} else if (duplicates == DUPLICATES_KEEP_LAST) {
|
|
9953
|
+
this.fs.remove(existingChild);
|
|
9954
|
+
} else {
|
|
9955
|
+
throw new Error(ERR_DUPLICATE_IMPORTED_ENTRY);
|
|
9956
|
+
}
|
|
9957
|
+
}
|
|
9925
9958
|
importedEntries.push(addChild(parent, name, {
|
|
9926
9959
|
data: entry,
|
|
9927
9960
|
Reader: getZipBlobReader(Object.assign({}, options)),
|
|
@@ -9932,11 +9965,17 @@ class ZipDirectoryEntry extends ZipEntry {
|
|
|
9932
9965
|
let directoryEntry = parent;
|
|
9933
9966
|
if (name) {
|
|
9934
9967
|
directoryEntry = parent.getChildByName(name);
|
|
9935
|
-
if (directoryEntry) {
|
|
9936
|
-
if (
|
|
9937
|
-
|
|
9968
|
+
if (directoryEntry && !directoryEntry.directory) {
|
|
9969
|
+
if (duplicates == DUPLICATES_KEEP_FIRST) {
|
|
9970
|
+
continue;
|
|
9971
|
+
} else if (duplicates == DUPLICATES_KEEP_LAST) {
|
|
9972
|
+
this.fs.remove(directoryEntry);
|
|
9973
|
+
directoryEntry = UNDEFINED_VALUE;
|
|
9974
|
+
} else {
|
|
9975
|
+
throw new Error(ERR_DUPLICATE_IMPORTED_ENTRY);
|
|
9938
9976
|
}
|
|
9939
|
-
}
|
|
9977
|
+
}
|
|
9978
|
+
if (!directoryEntry) {
|
|
9940
9979
|
directoryEntry = new ZipDirectoryEntry(this.fs, name, { data: null }, parent);
|
|
9941
9980
|
importedEntries.push(directoryEntry);
|
|
9942
9981
|
}
|
|
@@ -9946,6 +9985,7 @@ class ZipDirectoryEntry extends ZipEntry {
|
|
|
9946
9985
|
}
|
|
9947
9986
|
}
|
|
9948
9987
|
} catch (error) {
|
|
9988
|
+
importedEntries.reverse().forEach(importedEntry => this.fs.remove(importedEntry));
|
|
9949
9989
|
try {
|
|
9950
9990
|
error.cause = {
|
|
9951
9991
|
entry
|
|
@@ -10064,7 +10104,7 @@ class ZipFS {
|
|
|
10064
10104
|
}
|
|
10065
10105
|
}
|
|
10066
10106
|
} else {
|
|
10067
|
-
throw new Error(
|
|
10107
|
+
throw new Error(ERR_ANCESTOR_ENTRY);
|
|
10068
10108
|
}
|
|
10069
10109
|
} else {
|
|
10070
10110
|
throw new Error("Target entry is not a directory");
|
|
@@ -10076,7 +10116,7 @@ class ZipFS {
|
|
|
10076
10116
|
const path = fullname.split("/");
|
|
10077
10117
|
let node = this.root;
|
|
10078
10118
|
for (let index = 0; node && index < path.length; index++) {
|
|
10079
|
-
node = node.getChildByName(path[index]);
|
|
10119
|
+
node = node.directory ? node.getChildByName(path[index]) : UNDEFINED_VALUE;
|
|
10080
10120
|
}
|
|
10081
10121
|
if (!node) {
|
|
10082
10122
|
node = this.entries.find(entry => entry && (entry == this.root || entry.isDescendantOf(this.root)) &&
|
|
@@ -10138,33 +10178,27 @@ class ZipFS {
|
|
|
10138
10178
|
}
|
|
10139
10179
|
|
|
10140
10180
|
importBlob(blob, options) {
|
|
10141
|
-
|
|
10142
|
-
return this.root.importBlob(blob, options);
|
|
10181
|
+
return resetAndImport(this, root => root.importBlob(blob, options));
|
|
10143
10182
|
}
|
|
10144
10183
|
|
|
10145
10184
|
importData64URI(dataURI, options) {
|
|
10146
|
-
|
|
10147
|
-
return this.root.importData64URI(dataURI, options);
|
|
10185
|
+
return resetAndImport(this, root => root.importData64URI(dataURI, options));
|
|
10148
10186
|
}
|
|
10149
10187
|
|
|
10150
10188
|
importUint8Array(array, options) {
|
|
10151
|
-
|
|
10152
|
-
return this.root.importUint8Array(array, options);
|
|
10189
|
+
return resetAndImport(this, root => root.importUint8Array(array, options));
|
|
10153
10190
|
}
|
|
10154
10191
|
|
|
10155
10192
|
importHttpContent(url, options) {
|
|
10156
|
-
|
|
10157
|
-
return this.root.importHttpContent(url, options);
|
|
10193
|
+
return resetAndImport(this, root => root.importHttpContent(url, options));
|
|
10158
10194
|
}
|
|
10159
10195
|
|
|
10160
10196
|
importReadable(readable, options) {
|
|
10161
|
-
|
|
10162
|
-
return this.root.importReadable(readable, options);
|
|
10197
|
+
return resetAndImport(this, root => root.importReadable(readable, options));
|
|
10163
10198
|
}
|
|
10164
10199
|
|
|
10165
10200
|
importZip(reader, options) {
|
|
10166
|
-
|
|
10167
|
-
return this.root.importZip(reader, options);
|
|
10201
|
+
return resetAndImport(this, root => root.importZip(reader, options));
|
|
10168
10202
|
}
|
|
10169
10203
|
|
|
10170
10204
|
exportBlob(options) {
|
|
@@ -10484,6 +10518,25 @@ function checkReaderOptions(readerOptions) {
|
|
|
10484
10518
|
return readerOptions;
|
|
10485
10519
|
}
|
|
10486
10520
|
|
|
10521
|
+
function replaceContent(zipEntry, params) {
|
|
10522
|
+
const { uncompressedSize } = params;
|
|
10523
|
+
Object.assign(zipEntry, params, {
|
|
10524
|
+
reader: null,
|
|
10525
|
+
passThrough: UNDEFINED_VALUE,
|
|
10526
|
+
uncompressedSize: uncompressedSize === UNDEFINED_VALUE ? 0 : uncompressedSize,
|
|
10527
|
+
undeterminedSize: uncompressedSize === UNDEFINED_VALUE
|
|
10528
|
+
});
|
|
10529
|
+
}
|
|
10530
|
+
|
|
10531
|
+
function getData64URISize(dataURI) {
|
|
10532
|
+
let dataEnd = dataURI.length;
|
|
10533
|
+
while (dataURI.charAt(dataEnd - 1) == "=") {
|
|
10534
|
+
dataEnd--;
|
|
10535
|
+
}
|
|
10536
|
+
const dataStart = dataURI.indexOf(",") + 1;
|
|
10537
|
+
return Math.floor((dataEnd - dataStart) * 0.75);
|
|
10538
|
+
}
|
|
10539
|
+
|
|
10487
10540
|
function isPassThrough(child, options) {
|
|
10488
10541
|
const { readerOptions } = options;
|
|
10489
10542
|
return Boolean(!child.directory && (child.passThrough || (readerOptions && readerOptions.passThrough)));
|
|
@@ -10773,6 +10826,15 @@ function resetFS(fs) {
|
|
|
10773
10826
|
fs.root = new ZipDirectoryEntry(fs);
|
|
10774
10827
|
}
|
|
10775
10828
|
|
|
10829
|
+
function resetAndImport(fs, importFunction) {
|
|
10830
|
+
const { entries, entryIdCounter, root } = fs;
|
|
10831
|
+
resetFS(fs);
|
|
10832
|
+
return importFunction(fs.root).catch(error => {
|
|
10833
|
+
Object.assign(fs, { entries, entryIdCounter, root });
|
|
10834
|
+
throw error;
|
|
10835
|
+
});
|
|
10836
|
+
}
|
|
10837
|
+
|
|
10776
10838
|
function collectChildren(directory, recursive) {
|
|
10777
10839
|
const children = [];
|
|
10778
10840
|
const pendingDirectories = [directory];
|
|
@@ -10801,10 +10863,52 @@ function registerEntries(fs, entry) {
|
|
|
10801
10863
|
|
|
10802
10864
|
function addChild(parent, name, params, directory) {
|
|
10803
10865
|
if (parent.directory) {
|
|
10866
|
+
const path = splitPath(name);
|
|
10867
|
+
if (path) {
|
|
10868
|
+
name = path.pop();
|
|
10869
|
+
parent = getPathParent(parent, path);
|
|
10870
|
+
}
|
|
10804
10871
|
return directory ? new ZipDirectoryEntry(parent.fs, name, params, parent) : new ZipFileEntry(parent.fs, name, params, parent);
|
|
10805
10872
|
} else {
|
|
10806
10873
|
throw new Error("Parent entry is not a directory");
|
|
10807
10874
|
}
|
|
10808
10875
|
}
|
|
10809
10876
|
|
|
10810
|
-
|
|
10877
|
+
function checkDuplicatesOption(duplicates) {
|
|
10878
|
+
if (duplicates === UNDEFINED_VALUE) {
|
|
10879
|
+
return DUPLICATES_THROW;
|
|
10880
|
+
} else if (DUPLICATES_VALUES.has(duplicates)) {
|
|
10881
|
+
return duplicates;
|
|
10882
|
+
} else {
|
|
10883
|
+
throw new Error(ERR_INVALID_DUPLICATES);
|
|
10884
|
+
}
|
|
10885
|
+
}
|
|
10886
|
+
|
|
10887
|
+
function splitPath(name) {
|
|
10888
|
+
if (name.includes("/")) {
|
|
10889
|
+
const path = name.split("/").filter(pathPart => pathPart != "" && pathPart != ".");
|
|
10890
|
+
if (path.length) {
|
|
10891
|
+
return path;
|
|
10892
|
+
}
|
|
10893
|
+
}
|
|
10894
|
+
}
|
|
10895
|
+
|
|
10896
|
+
function getPathParent(parent, path, movedEntry) {
|
|
10897
|
+
path.forEach(pathPart => {
|
|
10898
|
+
const previousParent = parent;
|
|
10899
|
+
parent = parent.getChildByName(pathPart);
|
|
10900
|
+
if (parent) {
|
|
10901
|
+
if (!parent.directory) {
|
|
10902
|
+
throw new Error(ERR_ENTRY_EXISTS);
|
|
10903
|
+
}
|
|
10904
|
+
if (movedEntry && (parent == movedEntry || parent.isDescendantOf(movedEntry))) {
|
|
10905
|
+
throw new Error(ERR_ANCESTOR_ENTRY);
|
|
10906
|
+
}
|
|
10907
|
+
} else {
|
|
10908
|
+
parent = new ZipDirectoryEntry(previousParent.fs, pathPart, { data: null }, previousParent);
|
|
10909
|
+
}
|
|
10910
|
+
});
|
|
10911
|
+
return parent;
|
|
10912
|
+
}
|
|
10913
|
+
|
|
10914
|
+
export { BlobReader, BlobWriter, Data64URIReader, Data64URIWriter, ERR_ABORTED, ERR_AMBIGUOUS_ARCHIVE, ERR_BAD_FORMAT, ERR_CENTRAL_DIRECTORY_NOT_FOUND, ERR_DUPLICATED_NAME, ERR_DUPLICATE_IMPORTED_ENTRY, ERR_ENCRYPTED, ERR_ENCRYPTED_CENTRAL_DIRECTORY, ERR_ENTRY_DATA_OUT_OF_BOUNDS, ERR_ENTRY_EXISTS, ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND, ERR_EOCDR_NOT_FOUND, ERR_EXTRAFIELD_ZIP64_NOT_FOUND, ERR_HTTP_RANGE, ERR_HTTP_RESOURCE_CHANGED, ERR_INVALID_AUTHENTICATION_CODE, ERR_INVALID_CODEC_DEFINITION, ERR_INVALID_CODEC_MODULE, ERR_INVALID_COMMENT, ERR_INVALID_COMMENT_TYPE, ERR_INVALID_COMPRESSED_DATA, ERR_INVALID_CRC32, ERR_INVALID_DATE, ERR_INVALID_DUPLICATES, ERR_INVALID_ENCRYPTION_STRENGTH, ERR_INVALID_ENTRY_COMMENT, ERR_INVALID_ENTRY_COMMENT_TYPE, ERR_INVALID_ENTRY_NAME, ERR_INVALID_EXTRAFIELD, ERR_INVALID_EXTRAFIELD_DATA, ERR_INVALID_EXTRAFIELD_DATA_TYPE, ERR_INVALID_EXTRAFIELD_TYPE, ERR_INVALID_FILENAME_VALIDATION, ERR_INVALID_FUNCTION_OPTION, ERR_INVALID_GID, ERR_INVALID_LEVEL, ERR_INVALID_MAX_APPENDED_DATA_SIZE, ERR_INVALID_MAX_WORKERS, ERR_INVALID_MSDOS_ATTRIBUTES, ERR_INVALID_MSDOS_DATA, ERR_INVALID_PASSWORD, ERR_INVALID_PASSWORD_TYPE, ERR_INVALID_PASS_THROUGH, ERR_INVALID_READER_OPTIONS, ERR_INVALID_SIGNAL, ERR_INVALID_SIGNATURE, ERR_INVALID_SIGNATURE_DATA, ERR_INVALID_STRICTNESS, ERR_INVALID_UID, ERR_INVALID_UNCOMPRESSED_SIZE, ERR_INVALID_UNIX_EXTRA_FIELD_TYPE, ERR_INVALID_UNIX_ID_SIZE, ERR_INVALID_UNIX_MODE, ERR_INVALID_VERSION, ERR_ITERATOR_COMPLETED_TOO_SOON, ERR_LOCAL_FILE_HEADER_NOT_FOUND, ERR_OVERLAPPING_ENTRY, ERR_READABLE_CONSUMED, ERR_RESERVED_COMPRESSION_METHOD, ERR_SPLIT_ZIP_FILE, ERR_UNDEFINED_COMPRESSION_METHOD, ERR_UNDEFINED_READER, ERR_UNDEFINED_UNCOMPRESSED_SIZE, ERR_UNDETERMINED_SIZE, ERR_UNSAFE_FILENAME, ERR_UNSUPPORTED_COMPRESSION$1 as ERR_UNSUPPORTED_COMPRESSION, ERR_UNSUPPORTED_CONTEXT, ERR_UNSUPPORTED_CRYPTO_API, ERR_UNSUPPORTED_ENCRYPTION, ERR_UNSUPPORTED_ENCRYPTION_PASS_THROUGH, ERR_UNSUPPORTED_ENCRYPTION_USDZ, ERR_UNSUPPORTED_FORMAT, ERR_UNSUPPORTED_UINT64, ERR_WORKER_STARTUP_TIMEOUT, ERR_WRITER_NOT_INITIALIZED, ERR_ZIP_CRYPTO_LAST_MOD_DATE, ERR_ZIP_NOT_EMPTY, HttpRangeReader, HttpReader, Reader, SplitDataReader, SplitDataWriter, TextReader, TextWriter, Uint8ArrayReader, Uint8ArrayWriter, VERSION, WARNING_APPENDED_DATA, WARNING_COMPRESSED_PATCHED_DATA, WARNING_DUPLICATE_FILENAME, WARNING_MALFORMED_EXTRA_FIELD, WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG, WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD, WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES, WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY, WARNING_PREPENDED_CENTRAL_DIRECTORY, WARNING_PREPENDED_DATA, WARNING_TRAILING_CENTRAL_DIRECTORY_DATA, WARNING_UNKNOWN_VERSION, WARNING_UNKNOWN_ZIP64_EXTENSIBLE_DATA, WARNING_UNSORTED_CENTRAL_DIRECTORY, WARNING_WRAPPED_ENTRIES_COUNT, Writer, ZipDirectoryEntry, ZipEntry, ZipFS, ZipFileEntry, ZipReader, ZipReaderStream, ZipWriter, ZipWriterStream, configure, createBlobTempStream, createOPFSTempStream, createSyncAccessHandleTempStream, fs, getMimeType, getRegisteredCodecs, getSupportedCompressionMethods, isZipFile, registerCodec, resetConfiguration, terminateWorkersAndModule as terminateWorkers, unregisterCodec };
|