@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.
package/dist/zip-fs.js CHANGED
@@ -69,6 +69,7 @@
69
69
  const FILE_ATTR_MSDOS_DIR_MASK = 0x10;
70
70
  const FILE_ATTR_UNIX_DIR_MASK = 0x4000;
71
71
  const FILE_ATTR_UNIX_EXECUTABLE_MASK = 0o111;
72
+ const FILE_ATTR_UNIX_DEFAULT_MASK = 0o644;
72
73
 
73
74
  const VERSION_DEFLATE = 0x14;
74
75
  const VERSION_ZIP64 = 0x2D;
@@ -3376,12 +3377,14 @@
3376
3377
  const PROPERTY_NAME_VERSION = "version";
3377
3378
  const PROPERTY_NAME_VERSION_MADE_BY = "versionMadeBy";
3378
3379
  const PROPERTY_NAME_ZIPCRYPTO = "zipCrypto";
3380
+ const PROPERTY_NAME_DIRECTORY = "directory";
3381
+ const PROPERTY_NAME_EXECUTABLE = "executable";
3379
3382
 
3380
3383
  const PROPERTY_NAMES = [
3381
3384
  PROPERTY_NAME_FILENAME, PROPERTY_NAME_RAW_FILENAME, PROPERTY_NAME_COMPPRESSED_SIZE, PROPERTY_NAME_UNCOMPPRESSED_SIZE,
3382
3385
  PROPERTY_NAME_LAST_MODIFICATION_DATE, PROPERTY_NAME_RAW_LAST_MODIFICATION_DATE, PROPERTY_NAME_COMMENT, PROPERTY_NAME_RAW_COMMENT,
3383
3386
  PROPERTY_NAME_LAST_ACCESS_DATE, PROPERTY_NAME_CREATION_DATE, PROPERTY_NAME_OFFSET, PROPERTY_NAME_DISK_NUMBER_START,
3384
- 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"];
3387
+ 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"];
3385
3388
 
3386
3389
  class Entry {
3387
3390
 
@@ -4226,10 +4229,37 @@
4226
4229
 
4227
4230
  async function addFile(zipWriter, name, reader, options) {
4228
4231
  name = name.trim();
4229
- if (options.directory && (!name.endsWith(DIRECTORY_SIGNATURE))) {
4230
- name += DIRECTORY_SIGNATURE;
4231
- } else {
4232
- options.directory = name.endsWith(DIRECTORY_SIGNATURE);
4232
+ const msDosCompatible = getOptionValue(zipWriter, options, PROPERTY_NAME_MS_DOS_COMPATIBLE);
4233
+ const versionMadeBy = getOptionValue(zipWriter, options, PROPERTY_NAME_VERSION_MADE_BY, msDosCompatible ? 20 : 768);
4234
+ const executable = getOptionValue(zipWriter, options, PROPERTY_NAME_EXECUTABLE);
4235
+ if (versionMadeBy > MAX_16_BITS) {
4236
+ throw new Error(ERR_INVALID_VERSION);
4237
+ }
4238
+ let externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES, 0);
4239
+ if (externalFileAttributes === 0) {
4240
+ externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTE, 0);
4241
+ }
4242
+ if (!options.directory && name.endsWith(DIRECTORY_SIGNATURE)) {
4243
+ options.directory = true;
4244
+ }
4245
+ const directory = getOptionValue(zipWriter, options, PROPERTY_NAME_DIRECTORY);
4246
+ if (directory) {
4247
+ if (!name.endsWith(DIRECTORY_SIGNATURE)) {
4248
+ name += DIRECTORY_SIGNATURE;
4249
+ }
4250
+ if (externalFileAttributes === 0) {
4251
+ if (msDosCompatible) {
4252
+ externalFileAttributes = FILE_ATTR_MSDOS_DIR_MASK;
4253
+ } else {
4254
+ externalFileAttributes = FILE_ATTR_UNIX_DIR_MASK << 16;
4255
+ }
4256
+ }
4257
+ } else if (!msDosCompatible && externalFileAttributes === 0) {
4258
+ if (executable) {
4259
+ externalFileAttributes = (FILE_ATTR_UNIX_EXECUTABLE_MASK | FILE_ATTR_UNIX_DEFAULT_MASK) << 16;
4260
+ } else {
4261
+ externalFileAttributes = FILE_ATTR_UNIX_DEFAULT_MASK << 16;
4262
+ }
4233
4263
  }
4234
4264
  const encode = getOptionValue(zipWriter, options, "encodeText", encodeText);
4235
4265
  let rawFilename = encode(name);
@@ -4251,22 +4281,13 @@
4251
4281
  if (version > MAX_16_BITS) {
4252
4282
  throw new Error(ERR_INVALID_VERSION);
4253
4283
  }
4254
- const versionMadeBy = getOptionValue(zipWriter, options, PROPERTY_NAME_VERSION_MADE_BY, 20);
4255
- if (versionMadeBy > MAX_16_BITS) {
4256
- throw new Error(ERR_INVALID_VERSION);
4257
- }
4258
4284
  const lastModDate = getOptionValue(zipWriter, options, PROPERTY_NAME_LAST_MODIFICATION_DATE, new Date());
4259
4285
  const lastAccessDate = getOptionValue(zipWriter, options, PROPERTY_NAME_LAST_ACCESS_DATE);
4260
4286
  const creationDate = getOptionValue(zipWriter, options, PROPERTY_NAME_CREATION_DATE);
4261
- const msDosCompatible = getOptionValue(zipWriter, options, PROPERTY_NAME_MS_DOS_COMPATIBLE, true);
4262
4287
  let internalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES, 0);
4263
4288
  if (internalFileAttributes === 0) {
4264
4289
  internalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTE, 0);
4265
4290
  }
4266
- let externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES, 0);
4267
- if (externalFileAttributes === 0) {
4268
- externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTE, 0);
4269
- }
4270
4291
  const passThrough = getOptionValue(zipWriter, options, "passThrough");
4271
4292
  let password, rawPassword;
4272
4293
  if (!passThrough) {
@@ -4589,6 +4610,7 @@
4589
4610
  zipCrypto,
4590
4611
  dataDescriptor,
4591
4612
  directory,
4613
+ executable,
4592
4614
  versionMadeBy,
4593
4615
  rawComment,
4594
4616
  rawExtraField,
@@ -4610,6 +4632,7 @@
4610
4632
  versionMadeBy,
4611
4633
  zip64,
4612
4634
  directory: Boolean(directory),
4635
+ executable: Boolean(executable),
4613
4636
  filenameUTF8: true,
4614
4637
  rawFilename,
4615
4638
  commentUTF8: true,
@@ -5070,13 +5093,11 @@
5070
5093
  rawComment,
5071
5094
  versionMadeBy,
5072
5095
  headerArray,
5073
- directory,
5074
5096
  zip64,
5075
5097
  zip64UncompressedSize,
5076
5098
  zip64CompressedSize,
5077
5099
  zip64DiskNumberStart,
5078
5100
  zip64Offset,
5079
- msDosCompatible,
5080
5101
  internalFileAttributes,
5081
5102
  externalFileAttributes,
5082
5103
  diskNumberStart,
@@ -5100,8 +5121,6 @@
5100
5121
  setUint16(directoryView, offset + 36, internalFileAttributes);
5101
5122
  if (externalFileAttributes) {
5102
5123
  setUint32(directoryView, offset + 38, externalFileAttributes);
5103
- } else if (directory && msDosCompatible) {
5104
- setUint8(directoryView, offset + 38, FILE_ATTR_MSDOS_DIR_MASK);
5105
5124
  }
5106
5125
  setUint32(directoryView, offset + 42, zip64 && zip64Offset ? MAX_32_BITS : fileEntryOffset);
5107
5126
  arraySet(directoryArray, rawFilename, offset + 46);