@zip.js/zip.js 2.8.51 → 2.8.53
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 +8 -3
- package/deno.json +1 -1
- package/dist/zip-core-external.js +241 -95
- package/dist/zip-core-external.min.js +1 -1
- package/dist/zip-core.js +243 -94
- package/dist/zip-core.min.js +1 -1
- package/dist/zip-fs-core-external.js +564 -199
- package/dist/zip-fs-core-external.min.js +1 -1
- package/dist/zip-fs-core.js +551 -194
- package/dist/zip-fs-core.min.js +1 -1
- package/dist/zip-fs-external.js +564 -199
- package/dist/zip-fs-external.min.js +1 -1
- package/dist/zip-fs-native.js +567 -198
- package/dist/zip-fs-native.min.js +1 -1
- package/dist/zip-fs.js +567 -198
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-legacy.js +243 -94
- package/dist/zip-legacy.min.js +1 -1
- package/dist/zip-native.js +243 -94
- package/dist/zip-native.min.js +1 -1
- package/dist/zip.js +243 -94
- package/dist/zip.min.js +1 -1
- package/eslint.config.mjs +1 -1
- package/index-native.cjs +567 -198
- package/index-native.min.js +1 -1
- package/index.cjs +567 -198
- package/index.d.cts +551 -45
- package/index.d.ts +551 -45
- package/index.min.js +1 -1
- package/lib/core/codec-worker-web.js +13 -4
- package/lib/core/codec-worker.js +2 -0
- package/lib/core/constants.js +9 -0
- package/lib/core/io.js +43 -4
- package/lib/core/options.js +2 -0
- package/lib/core/util/compatible-streams.js +3 -8
- package/lib/core/zip-entry.js +16 -0
- package/lib/core/zip-fs.js +236 -107
- package/lib/core/zip-reader.js +106 -40
- package/lib/core/zip-writer.js +171 -41
- package/lib/zip-core-writer.js +3 -0
- package/package.json +9 -7
|
@@ -83,6 +83,7 @@ function createWebWorkerInterface(workerData, config) {
|
|
|
83
83
|
worker,
|
|
84
84
|
workerAlive: false,
|
|
85
85
|
terminated: false,
|
|
86
|
+
startupError: null,
|
|
86
87
|
interface: {
|
|
87
88
|
run: async () => {
|
|
88
89
|
try {
|
|
@@ -110,6 +111,13 @@ function createWebWorkerInterface(workerData, config) {
|
|
|
110
111
|
}
|
|
111
112
|
|
|
112
113
|
async function runWebWorker(workerData, config) {
|
|
114
|
+
if (!workerData.worker) {
|
|
115
|
+
const { startupError } = workerData;
|
|
116
|
+
workerData.startupError = null;
|
|
117
|
+
const error = startupError || new Error(ERR_WORKER_STARTUP_TIMEOUT);
|
|
118
|
+
error.workerStartupFailed = true;
|
|
119
|
+
throw error;
|
|
120
|
+
}
|
|
113
121
|
let resolveResult, rejectResult;
|
|
114
122
|
const result = new Promise((resolve, reject) => {
|
|
115
123
|
resolveResult = resolve;
|
|
@@ -323,11 +331,12 @@ function onWorkerError(event, workerData) {
|
|
|
323
331
|
if (!workerAlive) {
|
|
324
332
|
workerData.worker = null;
|
|
325
333
|
}
|
|
334
|
+
let error = event.error || new Error(event.message || ERROR_EVENT_TYPE);
|
|
335
|
+
if (!workerAlive) {
|
|
336
|
+
error = Object.assign(new Error(error.message || ERROR_EVENT_TYPE), { workerStartupFailed: true });
|
|
337
|
+
workerData.startupError = error;
|
|
338
|
+
}
|
|
326
339
|
if (rejectResult) {
|
|
327
|
-
let error = event.error || new Error(event.message || ERROR_EVENT_TYPE);
|
|
328
|
-
if (!workerAlive) {
|
|
329
|
-
error = Object.assign(new Error(error.message || ERROR_EVENT_TYPE), { workerStartupFailed: true });
|
|
330
|
-
}
|
|
331
340
|
rejectResult(error);
|
|
332
341
|
if (writer) {
|
|
333
342
|
writer.releaseLock();
|
package/lib/core/codec-worker.js
CHANGED
package/lib/core/constants.js
CHANGED
|
@@ -81,6 +81,8 @@ const FILE_ATTR_MSDOS_SYSTEM_MASK = 0x04;
|
|
|
81
81
|
const FILE_ATTR_MSDOS_ARCHIVE_MASK = 0x20;
|
|
82
82
|
const FILE_ATTR_UNIX_TYPE_MASK = 0o170000;
|
|
83
83
|
const FILE_ATTR_UNIX_TYPE_DIR = 0o040000;
|
|
84
|
+
const FILE_ATTR_UNIX_TYPE_SYMLINK = 0o120000;
|
|
85
|
+
const FILE_ATTR_UNIX_TYPE_FILE = 0o100000;
|
|
84
86
|
const FILE_ATTR_UNIX_EXECUTABLE_MASK = 0o111;
|
|
85
87
|
const FILE_ATTR_UNIX_DEFAULT_MASK = 0o644;
|
|
86
88
|
const FILE_ATTR_UNIX_SETUID_MASK = 0o4000;
|
|
@@ -91,6 +93,9 @@ const VERSION_DEFLATE = 0x14;
|
|
|
91
93
|
const VERSION_ZIP64 = 0x2D;
|
|
92
94
|
const VERSION_AES = 0x33;
|
|
93
95
|
|
|
96
|
+
const VERSION_MADE_BY_MSDOS = 0x0014;
|
|
97
|
+
const VERSION_MADE_BY_UNIX = 0x0300;
|
|
98
|
+
|
|
94
99
|
const DIRECTORY_SIGNATURE = "/";
|
|
95
100
|
|
|
96
101
|
const HEADER_SIZE = 30;
|
|
@@ -166,12 +171,16 @@ export {
|
|
|
166
171
|
FILE_ATTR_MSDOS_ARCHIVE_MASK,
|
|
167
172
|
FILE_ATTR_UNIX_TYPE_MASK,
|
|
168
173
|
FILE_ATTR_UNIX_TYPE_DIR,
|
|
174
|
+
FILE_ATTR_UNIX_TYPE_SYMLINK,
|
|
175
|
+
FILE_ATTR_UNIX_TYPE_FILE,
|
|
169
176
|
FILE_ATTR_UNIX_EXECUTABLE_MASK,
|
|
170
177
|
FILE_ATTR_UNIX_DEFAULT_MASK,
|
|
171
178
|
FILE_ATTR_UNIX_SETUID_MASK,
|
|
172
179
|
FILE_ATTR_UNIX_SETGID_MASK,
|
|
173
180
|
FILE_ATTR_UNIX_STICKY_MASK,
|
|
174
181
|
VERSION_DEFLATE,
|
|
182
|
+
VERSION_MADE_BY_MSDOS,
|
|
183
|
+
VERSION_MADE_BY_UNIX,
|
|
175
184
|
VERSION_ZIP64,
|
|
176
185
|
VERSION_AES,
|
|
177
186
|
HEADER_SIZE,
|
package/lib/core/io.js
CHANGED
|
@@ -87,8 +87,10 @@ class Reader extends Stream {
|
|
|
87
87
|
async pull(controller) {
|
|
88
88
|
const dataSize = size === UNDEFINED_VALUE ? chunkSize : Math.min(chunkSize, size - chunkOffset);
|
|
89
89
|
const data = await readUint8Array(reader, offset + chunkOffset, dataSize);
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
if (data.length) {
|
|
91
|
+
controller.enqueue(data);
|
|
92
|
+
}
|
|
93
|
+
if ((chunkOffset + chunkSize >= size) || (size === UNDEFINED_VALUE && !data.length && dataSize)) {
|
|
92
94
|
controller.close();
|
|
93
95
|
} else {
|
|
94
96
|
chunkOffset += chunkSize;
|
|
@@ -166,6 +168,7 @@ class Data64URIWriter extends Writer {
|
|
|
166
168
|
constructor(contentType) {
|
|
167
169
|
super();
|
|
168
170
|
Object.assign(this, {
|
|
171
|
+
contentType,
|
|
169
172
|
data: "data:" + (contentType || "") + ";base64,",
|
|
170
173
|
pending: []
|
|
171
174
|
});
|
|
@@ -267,6 +270,7 @@ class BlobWriter extends Stream {
|
|
|
267
270
|
return transformStream.writable;
|
|
268
271
|
}
|
|
269
272
|
});
|
|
273
|
+
writer.contentType = contentType;
|
|
270
274
|
writer.blob = streamToBlob(transformStream.readable, contentType);
|
|
271
275
|
writer.blob.catch(() => { });
|
|
272
276
|
}
|
|
@@ -283,6 +287,26 @@ class TextReader extends BlobReader {
|
|
|
283
287
|
}
|
|
284
288
|
}
|
|
285
289
|
|
|
290
|
+
function getTextSize(text) {
|
|
291
|
+
let size = 0;
|
|
292
|
+
for (let indexCharacter = 0; indexCharacter < text.length; indexCharacter++) {
|
|
293
|
+
const characterCode = text.charCodeAt(indexCharacter);
|
|
294
|
+
if (characterCode < 0x80) {
|
|
295
|
+
size += 1;
|
|
296
|
+
} else if (characterCode < 0x800) {
|
|
297
|
+
size += 2;
|
|
298
|
+
} else if (characterCode < 0xd800 || characterCode >= 0xe000) {
|
|
299
|
+
size += 3;
|
|
300
|
+
} else if (characterCode < 0xdc00 && (text.charCodeAt(indexCharacter + 1) & 0xfc00) == 0xdc00) {
|
|
301
|
+
size += 4;
|
|
302
|
+
indexCharacter++;
|
|
303
|
+
} else {
|
|
304
|
+
size += 3;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
return size;
|
|
308
|
+
}
|
|
309
|
+
|
|
286
310
|
class TextWriter extends BlobWriter {
|
|
287
311
|
|
|
288
312
|
constructor(encoding) {
|
|
@@ -767,9 +791,8 @@ class SplitDataReader extends Reader {
|
|
|
767
791
|
|
|
768
792
|
async init() {
|
|
769
793
|
const reader = this;
|
|
770
|
-
const { readers } = reader;
|
|
771
794
|
reader.lastDiskNumber = 0;
|
|
772
|
-
await Promise.all(readers.map(
|
|
795
|
+
const readers = reader.readers = await Promise.all(reader.readers.map(initDiskReader));
|
|
773
796
|
reader.diskOffsets = readers.map(diskReader => {
|
|
774
797
|
const diskOffset = reader.size;
|
|
775
798
|
reader.size += diskReader.size;
|
|
@@ -946,6 +969,10 @@ class GenericWriter {
|
|
|
946
969
|
}
|
|
947
970
|
}
|
|
948
971
|
|
|
972
|
+
function ownsWritable(writer) {
|
|
973
|
+
return Boolean(writer && writer.getData);
|
|
974
|
+
}
|
|
975
|
+
|
|
949
976
|
function isHttpFamily(url) {
|
|
950
977
|
const { baseURI } = getConfiguration();
|
|
951
978
|
const { protocol } = new URL(url, baseURI);
|
|
@@ -960,6 +987,16 @@ async function initStream(stream, initSize) {
|
|
|
960
987
|
}
|
|
961
988
|
}
|
|
962
989
|
|
|
990
|
+
async function initDiskReader(diskReader) {
|
|
991
|
+
diskReader = new GenericReader(diskReader);
|
|
992
|
+
await initStream(diskReader);
|
|
993
|
+
if (diskReader.size === UNDEFINED_VALUE || !diskReader.readUint8Array) {
|
|
994
|
+
diskReader = new BlobReader(await streamToBlob(diskReader.readable));
|
|
995
|
+
await initStream(diskReader);
|
|
996
|
+
}
|
|
997
|
+
return diskReader;
|
|
998
|
+
}
|
|
999
|
+
|
|
963
1000
|
function readUint8Array(reader, offset, size) {
|
|
964
1001
|
return reader.readUint8Array(offset, size);
|
|
965
1002
|
}
|
|
@@ -968,11 +1005,13 @@ export {
|
|
|
968
1005
|
initStream,
|
|
969
1006
|
GenericReader,
|
|
970
1007
|
GenericWriter,
|
|
1008
|
+
ownsWritable,
|
|
971
1009
|
readUint8Array,
|
|
972
1010
|
Reader,
|
|
973
1011
|
Writer,
|
|
974
1012
|
TextReader,
|
|
975
1013
|
TextWriter,
|
|
1014
|
+
getTextSize,
|
|
976
1015
|
Data64URIReader,
|
|
977
1016
|
Data64URIWriter,
|
|
978
1017
|
BlobReader,
|
package/lib/core/options.js
CHANGED
|
@@ -39,6 +39,7 @@ const OPTION_CHECK_PASSWORD_ONLY = "checkPasswordOnly";
|
|
|
39
39
|
const OPTION_CHECK_OVERLAPPING_ENTRY_ONLY = "checkOverlappingEntryOnly";
|
|
40
40
|
const OPTION_CHECK_OVERLAPPING_ENTRY = "checkOverlappingEntry";
|
|
41
41
|
const OPTION_CHECK_AMBIGUITY = "checkAmbiguity";
|
|
42
|
+
const OPTION_CHECK_LOCAL_DIRECTORY = "checkLocalDirectory";
|
|
42
43
|
const OPTION_CHECK_SIGNATURE = "checkSignature";
|
|
43
44
|
const OPTION_CHECK_CRC32 = "checkCrc32";
|
|
44
45
|
const OPTION_CHECK_AUTHENTICATION_CODE = "checkAuthenticationCode";
|
|
@@ -88,6 +89,7 @@ export {
|
|
|
88
89
|
OPTION_CHECK_OVERLAPPING_ENTRY_ONLY,
|
|
89
90
|
OPTION_CHECK_OVERLAPPING_ENTRY,
|
|
90
91
|
OPTION_CHECK_AMBIGUITY,
|
|
92
|
+
OPTION_CHECK_LOCAL_DIRECTORY,
|
|
91
93
|
OPTION_CHECK_SIGNATURE,
|
|
92
94
|
OPTION_CHECK_CRC32,
|
|
93
95
|
OPTION_CHECK_AUTHENTICATION_CODE,
|
|
@@ -36,8 +36,6 @@ export {
|
|
|
36
36
|
streamToBlob
|
|
37
37
|
};
|
|
38
38
|
|
|
39
|
-
const HTTP_HEADER_CONTENT_TYPE = "Content-Type";
|
|
40
|
-
|
|
41
39
|
function toCompatibleReadable(readable) {
|
|
42
40
|
if (readable instanceof ReadableStream) {
|
|
43
41
|
return readable;
|
|
@@ -60,12 +58,9 @@ function toCompatibleReadable(readable) {
|
|
|
60
58
|
|
|
61
59
|
function streamToBlob(readable, contentType) {
|
|
62
60
|
readable = toCompatibleReadable(readable);
|
|
61
|
+
const blobOptions = contentType ? { type: contentType } : {};
|
|
63
62
|
if (responseSupportsGlobalReadable()) {
|
|
64
|
-
|
|
65
|
-
if (contentType) {
|
|
66
|
-
options.headers = [[HTTP_HEADER_CONTENT_TYPE, contentType]];
|
|
67
|
-
}
|
|
68
|
-
return new Response(readable, options).blob();
|
|
63
|
+
return new Response(readable).blob().then(blob => contentType ? new Blob([blob], blobOptions) : blob);
|
|
69
64
|
}
|
|
70
65
|
const chunks = [];
|
|
71
66
|
return readable
|
|
@@ -74,7 +69,7 @@ function streamToBlob(readable, contentType) {
|
|
|
74
69
|
chunks.push(chunk);
|
|
75
70
|
}
|
|
76
71
|
}))
|
|
77
|
-
.then(() => new Blob(chunks,
|
|
72
|
+
.then(() => new Blob(chunks, blobOptions));
|
|
78
73
|
}
|
|
79
74
|
|
|
80
75
|
function responseSupportsGlobalReadable() {
|
package/lib/core/zip-entry.js
CHANGED
|
@@ -42,6 +42,8 @@ const PROPERTY_NAME_CREATION_DATE = "creationDate";
|
|
|
42
42
|
const PROPERTY_NAME_RAW_CREATION_DATE = "rawCreationDate";
|
|
43
43
|
const PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES = "internalFileAttributes";
|
|
44
44
|
const PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES = "externalFileAttributes";
|
|
45
|
+
const PROPERTY_NAME_DEPRECATED_INTERNAL_FILE_ATTRIBUTES = "internalFileAttribute";
|
|
46
|
+
const PROPERTY_NAME_DEPRECATED_EXTERNAL_FILE_ATTRIBUTES = "externalFileAttribute";
|
|
45
47
|
const PROPERTY_NAME_MSDOS_ATTRIBUTES_RAW = "msdosAttributesRaw";
|
|
46
48
|
const PROPERTY_NAME_MSDOS_ATTRIBUTES = "msdosAttributes";
|
|
47
49
|
const PROPERTY_NAME_MS_DOS_COMPATIBLE = "msDosCompatible";
|
|
@@ -52,6 +54,7 @@ const PROPERTY_NAME_VERSION_MADE_BY = "versionMadeBy";
|
|
|
52
54
|
const PROPERTY_NAME_ZIPCRYPTO = "zipCrypto";
|
|
53
55
|
const PROPERTY_NAME_DIRECTORY = "directory";
|
|
54
56
|
const PROPERTY_NAME_EXECUTABLE = "executable";
|
|
57
|
+
const PROPERTY_NAME_SYMLINK = "symlink";
|
|
55
58
|
const PROPERTY_NAME_COMPRESSION_METHOD = "compressionMethod";
|
|
56
59
|
const PROPERTY_NAME_SIGNATURE = "signature";
|
|
57
60
|
const PROPERTY_NAME_CRC32 = "crc32";
|
|
@@ -67,6 +70,10 @@ const PROPERTY_NAME_SETUID = "setuid";
|
|
|
67
70
|
const PROPERTY_NAME_SETGID = "setgid";
|
|
68
71
|
const PROPERTY_NAME_STICKY = "sticky";
|
|
69
72
|
const PROPERTY_NAME_BITFLAG = "bitFlag";
|
|
73
|
+
const PROPERTY_NAME_RAW_BITFLAG = "rawBitFlag";
|
|
74
|
+
const PROPERTY_NAME_FILENAME_LENGTH = "filenameLength";
|
|
75
|
+
const PROPERTY_NAME_EXTRA_FIELD_LENGTH = "extraFieldLength";
|
|
76
|
+
const PROPERTY_NAME_UNIX_EXTERNAL_UPPER = "unixExternalUpper";
|
|
70
77
|
const PROPERTY_NAME_FILENAME_UTF8 = "filenameUTF8";
|
|
71
78
|
const PROPERTY_NAME_COMMENT_UTF8 = "commentUTF8";
|
|
72
79
|
const PROPERTY_NAME_RAW_EXTRA_FIELD = "rawExtraField";
|
|
@@ -95,6 +102,8 @@ const PROPERTY_NAMES = [
|
|
|
95
102
|
PROPERTY_NAME_DISK_NUMBER_START,
|
|
96
103
|
PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES,
|
|
97
104
|
PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES,
|
|
105
|
+
PROPERTY_NAME_DEPRECATED_INTERNAL_FILE_ATTRIBUTES,
|
|
106
|
+
PROPERTY_NAME_DEPRECATED_EXTERNAL_FILE_ATTRIBUTES,
|
|
98
107
|
PROPERTY_NAME_MSDOS_ATTRIBUTES_RAW,
|
|
99
108
|
PROPERTY_NAME_MSDOS_ATTRIBUTES,
|
|
100
109
|
PROPERTY_NAME_MS_DOS_COMPATIBLE,
|
|
@@ -105,6 +114,7 @@ const PROPERTY_NAMES = [
|
|
|
105
114
|
PROPERTY_NAME_ZIPCRYPTO,
|
|
106
115
|
PROPERTY_NAME_DIRECTORY,
|
|
107
116
|
PROPERTY_NAME_EXECUTABLE,
|
|
117
|
+
PROPERTY_NAME_SYMLINK,
|
|
108
118
|
PROPERTY_NAME_COMPRESSION_METHOD,
|
|
109
119
|
PROPERTY_NAME_SIGNATURE,
|
|
110
120
|
PROPERTY_NAME_CRC32,
|
|
@@ -116,10 +126,14 @@ const PROPERTY_NAMES = [
|
|
|
116
126
|
PROPERTY_NAME_UID,
|
|
117
127
|
PROPERTY_NAME_GID,
|
|
118
128
|
PROPERTY_NAME_UNIX_MODE,
|
|
129
|
+
PROPERTY_NAME_UNIX_EXTERNAL_UPPER,
|
|
119
130
|
PROPERTY_NAME_SETUID,
|
|
120
131
|
PROPERTY_NAME_SETGID,
|
|
121
132
|
PROPERTY_NAME_STICKY,
|
|
122
133
|
PROPERTY_NAME_BITFLAG,
|
|
134
|
+
PROPERTY_NAME_RAW_BITFLAG,
|
|
135
|
+
PROPERTY_NAME_FILENAME_LENGTH,
|
|
136
|
+
PROPERTY_NAME_EXTRA_FIELD_LENGTH,
|
|
123
137
|
PROPERTY_NAME_FILENAME_UTF8,
|
|
124
138
|
PROPERTY_NAME_COMMENT_UTF8,
|
|
125
139
|
PROPERTY_NAME_RAW_EXTRA_FIELD,
|
|
@@ -157,6 +171,8 @@ export {
|
|
|
157
171
|
PROPERTY_NAME_RAW_CREATION_DATE,
|
|
158
172
|
PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES,
|
|
159
173
|
PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES,
|
|
174
|
+
PROPERTY_NAME_DEPRECATED_INTERNAL_FILE_ATTRIBUTES,
|
|
175
|
+
PROPERTY_NAME_DEPRECATED_EXTERNAL_FILE_ATTRIBUTES,
|
|
160
176
|
PROPERTY_NAME_MSDOS_ATTRIBUTES_RAW,
|
|
161
177
|
PROPERTY_NAME_MSDOS_ATTRIBUTES,
|
|
162
178
|
PROPERTY_NAME_MS_DOS_COMPATIBLE,
|