@zip.js/zip.js 2.7.56 → 2.7.57

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.
@@ -60,6 +60,7 @@ const BITFLAG_LANG_ENCODING_FLAG = 0x0800;
60
60
  const FILE_ATTR_MSDOS_DIR_MASK = 0x10;
61
61
  const FILE_ATTR_UNIX_DIR_MASK = 0x4000;
62
62
  const FILE_ATTR_UNIX_EXECUTABLE_MASK = 0o111;
63
+ const FILE_ATTR_UNIX_DEFAULT_MASK = 0o644;
63
64
 
64
65
  const VERSION_DEFLATE = 0x14;
65
66
  const VERSION_ZIP64 = 0x2D;
@@ -106,6 +107,7 @@ export {
106
107
  FILE_ATTR_MSDOS_DIR_MASK,
107
108
  FILE_ATTR_UNIX_DIR_MASK,
108
109
  FILE_ATTR_UNIX_EXECUTABLE_MASK,
110
+ FILE_ATTR_UNIX_DEFAULT_MASK,
109
111
  VERSION_DEFLATE,
110
112
  VERSION_ZIP64,
111
113
  VERSION_AES,
@@ -50,12 +50,14 @@ const PROPERTY_NAME_ENCRYPTED = "encrypted";
50
50
  const PROPERTY_NAME_VERSION = "version";
51
51
  const PROPERTY_NAME_VERSION_MADE_BY = "versionMadeBy";
52
52
  const PROPERTY_NAME_ZIPCRYPTO = "zipCrypto";
53
+ const PROPERTY_NAME_DIRECTORY = "directory";
54
+ const PROPERTY_NAME_EXECUTABLE = "executable";
53
55
 
54
56
  const PROPERTY_NAMES = [
55
57
  PROPERTY_NAME_FILENAME, PROPERTY_NAME_RAW_FILENAME, PROPERTY_NAME_COMPPRESSED_SIZE, PROPERTY_NAME_UNCOMPPRESSED_SIZE,
56
58
  PROPERTY_NAME_LAST_MODIFICATION_DATE, PROPERTY_NAME_RAW_LAST_MODIFICATION_DATE, PROPERTY_NAME_COMMENT, PROPERTY_NAME_RAW_COMMENT,
57
59
  PROPERTY_NAME_LAST_ACCESS_DATE, PROPERTY_NAME_CREATION_DATE, PROPERTY_NAME_OFFSET, PROPERTY_NAME_DISK_NUMBER_START,
58
- PROPERTY_NAME_DISK_NUMBER_START, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTE, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTE, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES, PROPERTY_NAME_MS_DOS_COMPATIBLE, PROPERTY_NAME_ZIP64, PROPERTY_NAME_ENCRYPTED, PROPERTY_NAME_VERSION, PROPERTY_NAME_VERSION_MADE_BY, PROPERTY_NAME_ZIPCRYPTO, "directory", "executable", "bitFlag", "signature", "filenameUTF8", "commentUTF8", "compressionMethod", "extraField", "rawExtraField", "extraFieldZip64", "extraFieldUnicodePath", "extraFieldUnicodeComment", "extraFieldAES", "extraFieldNTFS", "extraFieldExtendedTimestamp"];
60
+ PROPERTY_NAME_DISK_NUMBER_START, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTE, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTE, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES, PROPERTY_NAME_MS_DOS_COMPATIBLE, PROPERTY_NAME_ZIP64, PROPERTY_NAME_ENCRYPTED, PROPERTY_NAME_VERSION, PROPERTY_NAME_VERSION_MADE_BY, PROPERTY_NAME_ZIPCRYPTO, PROPERTY_NAME_DIRECTORY, PROPERTY_NAME_EXECUTABLE, "bitFlag", "signature", "filenameUTF8", "commentUTF8", "compressionMethod", "extraField", "rawExtraField", "extraFieldZip64", "extraFieldUnicodePath", "extraFieldUnicodeComment", "extraFieldAES", "extraFieldNTFS", "extraFieldExtendedTimestamp"];
59
61
 
60
62
  class Entry {
61
63
 
@@ -90,5 +92,7 @@ export {
90
92
  PROPERTY_NAME_VERSION,
91
93
  PROPERTY_NAME_VERSION_MADE_BY,
92
94
  PROPERTY_NAME_ZIPCRYPTO,
95
+ PROPERTY_NAME_DIRECTORY,
96
+ PROPERTY_NAME_EXECUTABLE,
93
97
  Entry
94
98
  };
@@ -56,6 +56,9 @@ import {
56
56
  BITFLAG_DATA_DESCRIPTOR,
57
57
  BITFLAG_LANG_ENCODING_FLAG,
58
58
  FILE_ATTR_MSDOS_DIR_MASK,
59
+ FILE_ATTR_UNIX_DIR_MASK,
60
+ FILE_ATTR_UNIX_EXECUTABLE_MASK,
61
+ FILE_ATTR_UNIX_DEFAULT_MASK,
59
62
  VERSION_DEFLATE,
60
63
  VERSION_ZIP64,
61
64
  VERSION_AES,
@@ -92,6 +95,8 @@ import {
92
95
  PROPERTY_NAME_VERSION,
93
96
  PROPERTY_NAME_VERSION_MADE_BY,
94
97
  PROPERTY_NAME_ZIPCRYPTO,
98
+ PROPERTY_NAME_DIRECTORY,
99
+ PROPERTY_NAME_EXECUTABLE,
95
100
  Entry
96
101
  } from "./zip-entry.js";
97
102
 
@@ -227,10 +232,37 @@ export {
227
232
 
228
233
  async function addFile(zipWriter, name, reader, options) {
229
234
  name = name.trim();
230
- if (options.directory && (!name.endsWith(DIRECTORY_SIGNATURE))) {
231
- name += DIRECTORY_SIGNATURE;
232
- } else {
233
- options.directory = name.endsWith(DIRECTORY_SIGNATURE);
235
+ const msDosCompatible = getOptionValue(zipWriter, options, PROPERTY_NAME_MS_DOS_COMPATIBLE);
236
+ const versionMadeBy = getOptionValue(zipWriter, options, PROPERTY_NAME_VERSION_MADE_BY, msDosCompatible ? 20 : 768);
237
+ const executable = getOptionValue(zipWriter, options, PROPERTY_NAME_EXECUTABLE);
238
+ if (versionMadeBy > MAX_16_BITS) {
239
+ throw new Error(ERR_INVALID_VERSION);
240
+ }
241
+ let externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES, 0);
242
+ if (externalFileAttributes === 0) {
243
+ externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTE, 0);
244
+ }
245
+ if (!options.directory && name.endsWith(DIRECTORY_SIGNATURE)) {
246
+ options.directory = true;
247
+ }
248
+ const directory = getOptionValue(zipWriter, options, PROPERTY_NAME_DIRECTORY);
249
+ if (directory) {
250
+ if (!name.endsWith(DIRECTORY_SIGNATURE)) {
251
+ name += DIRECTORY_SIGNATURE;
252
+ }
253
+ if (externalFileAttributes === 0) {
254
+ if (msDosCompatible) {
255
+ externalFileAttributes = FILE_ATTR_MSDOS_DIR_MASK;
256
+ } else {
257
+ externalFileAttributes = FILE_ATTR_UNIX_DIR_MASK << 16;
258
+ }
259
+ }
260
+ } else if (!msDosCompatible && externalFileAttributes === 0) {
261
+ if (executable) {
262
+ externalFileAttributes = (FILE_ATTR_UNIX_EXECUTABLE_MASK | FILE_ATTR_UNIX_DEFAULT_MASK) << 16;
263
+ } else {
264
+ externalFileAttributes = FILE_ATTR_UNIX_DEFAULT_MASK << 16;
265
+ }
234
266
  }
235
267
  const encode = getOptionValue(zipWriter, options, "encodeText", encodeText);
236
268
  let rawFilename = encode(name);
@@ -252,22 +284,13 @@ async function addFile(zipWriter, name, reader, options) {
252
284
  if (version > MAX_16_BITS) {
253
285
  throw new Error(ERR_INVALID_VERSION);
254
286
  }
255
- const versionMadeBy = getOptionValue(zipWriter, options, PROPERTY_NAME_VERSION_MADE_BY, 20);
256
- if (versionMadeBy > MAX_16_BITS) {
257
- throw new Error(ERR_INVALID_VERSION);
258
- }
259
287
  const lastModDate = getOptionValue(zipWriter, options, PROPERTY_NAME_LAST_MODIFICATION_DATE, new Date());
260
288
  const lastAccessDate = getOptionValue(zipWriter, options, PROPERTY_NAME_LAST_ACCESS_DATE);
261
289
  const creationDate = getOptionValue(zipWriter, options, PROPERTY_NAME_CREATION_DATE);
262
- const msDosCompatible = getOptionValue(zipWriter, options, PROPERTY_NAME_MS_DOS_COMPATIBLE, true);
263
290
  let internalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES, 0);
264
291
  if (internalFileAttributes === 0) {
265
292
  internalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTE, 0);
266
293
  }
267
- let externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES, 0);
268
- if (externalFileAttributes === 0) {
269
- externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTE, 0);
270
- }
271
294
  const passThrough = getOptionValue(zipWriter, options, "passThrough");
272
295
  let password, rawPassword;
273
296
  if (!passThrough) {
@@ -590,6 +613,7 @@ async function createFileEntry(reader, writer, { diskNumberStart, lock }, entryI
590
613
  zipCrypto,
591
614
  dataDescriptor,
592
615
  directory,
616
+ executable,
593
617
  versionMadeBy,
594
618
  rawComment,
595
619
  rawExtraField,
@@ -611,6 +635,7 @@ async function createFileEntry(reader, writer, { diskNumberStart, lock }, entryI
611
635
  versionMadeBy,
612
636
  zip64,
613
637
  directory: Boolean(directory),
638
+ executable: Boolean(executable),
614
639
  filenameUTF8: true,
615
640
  rawFilename,
616
641
  commentUTF8: true,
@@ -1071,13 +1096,11 @@ async function closeFile(zipWriter, comment, options) {
1071
1096
  rawComment,
1072
1097
  versionMadeBy,
1073
1098
  headerArray,
1074
- directory,
1075
1099
  zip64,
1076
1100
  zip64UncompressedSize,
1077
1101
  zip64CompressedSize,
1078
1102
  zip64DiskNumberStart,
1079
1103
  zip64Offset,
1080
- msDosCompatible,
1081
1104
  internalFileAttributes,
1082
1105
  externalFileAttributes,
1083
1106
  diskNumberStart,
@@ -1101,8 +1124,6 @@ async function closeFile(zipWriter, comment, options) {
1101
1124
  setUint16(directoryView, offset + 36, internalFileAttributes);
1102
1125
  if (externalFileAttributes) {
1103
1126
  setUint32(directoryView, offset + 38, externalFileAttributes);
1104
- } else if (directory && msDosCompatible) {
1105
- setUint8(directoryView, offset + 38, FILE_ATTR_MSDOS_DIR_MASK);
1106
1127
  }
1107
1128
  setUint32(directoryView, offset + 42, zip64 && zip64Offset ? MAX_32_BITS : fileEntryOffset);
1108
1129
  arraySet(directoryArray, rawFilename, offset + 46);
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "A JavaScript library to zip and unzip files in the browser, Deno and Node.js",
4
4
  "author": "Gildas Lormeau",
5
5
  "license": "BSD-3-Clause",
6
- "version": "2.7.56",
6
+ "version": "2.7.57",
7
7
  "type": "module",
8
8
  "keywords": [
9
9
  "zip",