@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.
Files changed (41) hide show
  1. package/README.md +8 -3
  2. package/deno.json +1 -1
  3. package/dist/zip-core-external.js +241 -95
  4. package/dist/zip-core-external.min.js +1 -1
  5. package/dist/zip-core.js +243 -94
  6. package/dist/zip-core.min.js +1 -1
  7. package/dist/zip-fs-core-external.js +564 -199
  8. package/dist/zip-fs-core-external.min.js +1 -1
  9. package/dist/zip-fs-core.js +551 -194
  10. package/dist/zip-fs-core.min.js +1 -1
  11. package/dist/zip-fs-external.js +564 -199
  12. package/dist/zip-fs-external.min.js +1 -1
  13. package/dist/zip-fs-native.js +567 -198
  14. package/dist/zip-fs-native.min.js +1 -1
  15. package/dist/zip-fs.js +567 -198
  16. package/dist/zip-fs.min.js +1 -1
  17. package/dist/zip-legacy.js +243 -94
  18. package/dist/zip-legacy.min.js +1 -1
  19. package/dist/zip-native.js +243 -94
  20. package/dist/zip-native.min.js +1 -1
  21. package/dist/zip.js +243 -94
  22. package/dist/zip.min.js +1 -1
  23. package/eslint.config.mjs +1 -1
  24. package/index-native.cjs +567 -198
  25. package/index-native.min.js +1 -1
  26. package/index.cjs +567 -198
  27. package/index.d.cts +551 -45
  28. package/index.d.ts +551 -45
  29. package/index.min.js +1 -1
  30. package/lib/core/codec-worker-web.js +13 -4
  31. package/lib/core/codec-worker.js +2 -0
  32. package/lib/core/constants.js +9 -0
  33. package/lib/core/io.js +43 -4
  34. package/lib/core/options.js +2 -0
  35. package/lib/core/util/compatible-streams.js +3 -8
  36. package/lib/core/zip-entry.js +16 -0
  37. package/lib/core/zip-fs.js +236 -107
  38. package/lib/core/zip-reader.js +106 -40
  39. package/lib/core/zip-writer.js +171 -41
  40. package/lib/zip-core-writer.js +3 -0
  41. 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();
@@ -48,6 +48,8 @@ let initModule = () => { };
48
48
 
49
49
  export {
50
50
  CodecWorker,
51
+ ProgressWatcherStream,
52
+ callHandler,
51
53
  configureWorker,
52
54
  resetWebWorkerSupport,
53
55
  supportsDeflate,
@@ -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
- controller.enqueue(data);
91
- if ((chunkOffset + chunkSize > size) || (size === UNDEFINED_VALUE && !data.length && dataSize)) {
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(diskReader => initStream(diskReader)));
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,
@@ -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
- const options = {};
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, contentType ? { type: contentType } : {}));
72
+ .then(() => new Blob(chunks, blobOptions));
78
73
  }
79
74
 
80
75
  function responseSupportsGlobalReadable() {
@@ -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,