@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-full.js CHANGED
@@ -4284,6 +4284,7 @@
4284
4284
  const FILE_ATTR_MSDOS_DIR_MASK = 0x10;
4285
4285
  const FILE_ATTR_UNIX_DIR_MASK = 0x4000;
4286
4286
  const FILE_ATTR_UNIX_EXECUTABLE_MASK = 0o111;
4287
+ const FILE_ATTR_UNIX_DEFAULT_MASK = 0o644;
4287
4288
 
4288
4289
  const VERSION_DEFLATE = 0x14;
4289
4290
  const VERSION_ZIP64 = 0x2D;
@@ -7591,12 +7592,14 @@
7591
7592
  const PROPERTY_NAME_VERSION = "version";
7592
7593
  const PROPERTY_NAME_VERSION_MADE_BY = "versionMadeBy";
7593
7594
  const PROPERTY_NAME_ZIPCRYPTO = "zipCrypto";
7595
+ const PROPERTY_NAME_DIRECTORY = "directory";
7596
+ const PROPERTY_NAME_EXECUTABLE = "executable";
7594
7597
 
7595
7598
  const PROPERTY_NAMES = [
7596
7599
  PROPERTY_NAME_FILENAME, PROPERTY_NAME_RAW_FILENAME, PROPERTY_NAME_COMPPRESSED_SIZE, PROPERTY_NAME_UNCOMPPRESSED_SIZE,
7597
7600
  PROPERTY_NAME_LAST_MODIFICATION_DATE, PROPERTY_NAME_RAW_LAST_MODIFICATION_DATE, PROPERTY_NAME_COMMENT, PROPERTY_NAME_RAW_COMMENT,
7598
7601
  PROPERTY_NAME_LAST_ACCESS_DATE, PROPERTY_NAME_CREATION_DATE, PROPERTY_NAME_OFFSET, PROPERTY_NAME_DISK_NUMBER_START,
7599
- 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"];
7602
+ 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"];
7600
7603
 
7601
7604
  class Entry {
7602
7605
 
@@ -8441,10 +8444,37 @@
8441
8444
 
8442
8445
  async function addFile(zipWriter, name, reader, options) {
8443
8446
  name = name.trim();
8444
- if (options.directory && (!name.endsWith(DIRECTORY_SIGNATURE))) {
8445
- name += DIRECTORY_SIGNATURE;
8446
- } else {
8447
- options.directory = name.endsWith(DIRECTORY_SIGNATURE);
8447
+ const msDosCompatible = getOptionValue(zipWriter, options, PROPERTY_NAME_MS_DOS_COMPATIBLE);
8448
+ const versionMadeBy = getOptionValue(zipWriter, options, PROPERTY_NAME_VERSION_MADE_BY, msDosCompatible ? 20 : 768);
8449
+ const executable = getOptionValue(zipWriter, options, PROPERTY_NAME_EXECUTABLE);
8450
+ if (versionMadeBy > MAX_16_BITS) {
8451
+ throw new Error(ERR_INVALID_VERSION);
8452
+ }
8453
+ let externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES, 0);
8454
+ if (externalFileAttributes === 0) {
8455
+ externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTE, 0);
8456
+ }
8457
+ if (!options.directory && name.endsWith(DIRECTORY_SIGNATURE)) {
8458
+ options.directory = true;
8459
+ }
8460
+ const directory = getOptionValue(zipWriter, options, PROPERTY_NAME_DIRECTORY);
8461
+ if (directory) {
8462
+ if (!name.endsWith(DIRECTORY_SIGNATURE)) {
8463
+ name += DIRECTORY_SIGNATURE;
8464
+ }
8465
+ if (externalFileAttributes === 0) {
8466
+ if (msDosCompatible) {
8467
+ externalFileAttributes = FILE_ATTR_MSDOS_DIR_MASK;
8468
+ } else {
8469
+ externalFileAttributes = FILE_ATTR_UNIX_DIR_MASK << 16;
8470
+ }
8471
+ }
8472
+ } else if (!msDosCompatible && externalFileAttributes === 0) {
8473
+ if (executable) {
8474
+ externalFileAttributes = (FILE_ATTR_UNIX_EXECUTABLE_MASK | FILE_ATTR_UNIX_DEFAULT_MASK) << 16;
8475
+ } else {
8476
+ externalFileAttributes = FILE_ATTR_UNIX_DEFAULT_MASK << 16;
8477
+ }
8448
8478
  }
8449
8479
  const encode = getOptionValue(zipWriter, options, "encodeText", encodeText);
8450
8480
  let rawFilename = encode(name);
@@ -8466,22 +8496,13 @@
8466
8496
  if (version > MAX_16_BITS) {
8467
8497
  throw new Error(ERR_INVALID_VERSION);
8468
8498
  }
8469
- const versionMadeBy = getOptionValue(zipWriter, options, PROPERTY_NAME_VERSION_MADE_BY, 20);
8470
- if (versionMadeBy > MAX_16_BITS) {
8471
- throw new Error(ERR_INVALID_VERSION);
8472
- }
8473
8499
  const lastModDate = getOptionValue(zipWriter, options, PROPERTY_NAME_LAST_MODIFICATION_DATE, new Date());
8474
8500
  const lastAccessDate = getOptionValue(zipWriter, options, PROPERTY_NAME_LAST_ACCESS_DATE);
8475
8501
  const creationDate = getOptionValue(zipWriter, options, PROPERTY_NAME_CREATION_DATE);
8476
- const msDosCompatible = getOptionValue(zipWriter, options, PROPERTY_NAME_MS_DOS_COMPATIBLE, true);
8477
8502
  let internalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES, 0);
8478
8503
  if (internalFileAttributes === 0) {
8479
8504
  internalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTE, 0);
8480
8505
  }
8481
- let externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES, 0);
8482
- if (externalFileAttributes === 0) {
8483
- externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTE, 0);
8484
- }
8485
8506
  const passThrough = getOptionValue(zipWriter, options, "passThrough");
8486
8507
  let password, rawPassword;
8487
8508
  if (!passThrough) {
@@ -8804,6 +8825,7 @@
8804
8825
  zipCrypto,
8805
8826
  dataDescriptor,
8806
8827
  directory,
8828
+ executable,
8807
8829
  versionMadeBy,
8808
8830
  rawComment,
8809
8831
  rawExtraField,
@@ -8825,6 +8847,7 @@
8825
8847
  versionMadeBy,
8826
8848
  zip64,
8827
8849
  directory: Boolean(directory),
8850
+ executable: Boolean(executable),
8828
8851
  filenameUTF8: true,
8829
8852
  rawFilename,
8830
8853
  commentUTF8: true,
@@ -9285,13 +9308,11 @@
9285
9308
  rawComment,
9286
9309
  versionMadeBy,
9287
9310
  headerArray,
9288
- directory,
9289
9311
  zip64,
9290
9312
  zip64UncompressedSize,
9291
9313
  zip64CompressedSize,
9292
9314
  zip64DiskNumberStart,
9293
9315
  zip64Offset,
9294
- msDosCompatible,
9295
9316
  internalFileAttributes,
9296
9317
  externalFileAttributes,
9297
9318
  diskNumberStart,
@@ -9315,8 +9336,6 @@
9315
9336
  setUint16(directoryView, offset + 36, internalFileAttributes);
9316
9337
  if (externalFileAttributes) {
9317
9338
  setUint32(directoryView, offset + 38, externalFileAttributes);
9318
- } else if (directory && msDosCompatible) {
9319
- setUint8(directoryView, offset + 38, FILE_ATTR_MSDOS_DIR_MASK);
9320
9339
  }
9321
9340
  setUint32(directoryView, offset + 42, zip64 && zip64Offset ? MAX_32_BITS : fileEntryOffset);
9322
9341
  arraySet(directoryArray, rawFilename, offset + 46);