@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/deno.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zip-js/zip-js",
3
- "version": "2.7.56",
3
+ "version": "2.7.57",
4
4
  "exports": {
5
5
  ".": "./index.js",
6
6
  "./data-uri": "./lib/zip-data-uri.js"
@@ -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;
@@ -9223,12 +9224,14 @@
9223
9224
  const PROPERTY_NAME_VERSION = "version";
9224
9225
  const PROPERTY_NAME_VERSION_MADE_BY = "versionMadeBy";
9225
9226
  const PROPERTY_NAME_ZIPCRYPTO = "zipCrypto";
9227
+ const PROPERTY_NAME_DIRECTORY = "directory";
9228
+ const PROPERTY_NAME_EXECUTABLE = "executable";
9226
9229
 
9227
9230
  const PROPERTY_NAMES = [
9228
9231
  PROPERTY_NAME_FILENAME, PROPERTY_NAME_RAW_FILENAME, PROPERTY_NAME_COMPPRESSED_SIZE, PROPERTY_NAME_UNCOMPPRESSED_SIZE,
9229
9232
  PROPERTY_NAME_LAST_MODIFICATION_DATE, PROPERTY_NAME_RAW_LAST_MODIFICATION_DATE, PROPERTY_NAME_COMMENT, PROPERTY_NAME_RAW_COMMENT,
9230
9233
  PROPERTY_NAME_LAST_ACCESS_DATE, PROPERTY_NAME_CREATION_DATE, PROPERTY_NAME_OFFSET, PROPERTY_NAME_DISK_NUMBER_START,
9231
- 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"];
9234
+ 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"];
9232
9235
 
9233
9236
  class Entry {
9234
9237
 
@@ -10073,10 +10076,37 @@
10073
10076
 
10074
10077
  async function addFile(zipWriter, name, reader, options) {
10075
10078
  name = name.trim();
10076
- if (options.directory && (!name.endsWith(DIRECTORY_SIGNATURE))) {
10077
- name += DIRECTORY_SIGNATURE;
10078
- } else {
10079
- options.directory = name.endsWith(DIRECTORY_SIGNATURE);
10079
+ const msDosCompatible = getOptionValue(zipWriter, options, PROPERTY_NAME_MS_DOS_COMPATIBLE);
10080
+ const versionMadeBy = getOptionValue(zipWriter, options, PROPERTY_NAME_VERSION_MADE_BY, msDosCompatible ? 20 : 768);
10081
+ const executable = getOptionValue(zipWriter, options, PROPERTY_NAME_EXECUTABLE);
10082
+ if (versionMadeBy > MAX_16_BITS) {
10083
+ throw new Error(ERR_INVALID_VERSION);
10084
+ }
10085
+ let externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES, 0);
10086
+ if (externalFileAttributes === 0) {
10087
+ externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTE, 0);
10088
+ }
10089
+ if (!options.directory && name.endsWith(DIRECTORY_SIGNATURE)) {
10090
+ options.directory = true;
10091
+ }
10092
+ const directory = getOptionValue(zipWriter, options, PROPERTY_NAME_DIRECTORY);
10093
+ if (directory) {
10094
+ if (!name.endsWith(DIRECTORY_SIGNATURE)) {
10095
+ name += DIRECTORY_SIGNATURE;
10096
+ }
10097
+ if (externalFileAttributes === 0) {
10098
+ if (msDosCompatible) {
10099
+ externalFileAttributes = FILE_ATTR_MSDOS_DIR_MASK;
10100
+ } else {
10101
+ externalFileAttributes = FILE_ATTR_UNIX_DIR_MASK << 16;
10102
+ }
10103
+ }
10104
+ } else if (!msDosCompatible && externalFileAttributes === 0) {
10105
+ if (executable) {
10106
+ externalFileAttributes = (FILE_ATTR_UNIX_EXECUTABLE_MASK | FILE_ATTR_UNIX_DEFAULT_MASK) << 16;
10107
+ } else {
10108
+ externalFileAttributes = FILE_ATTR_UNIX_DEFAULT_MASK << 16;
10109
+ }
10080
10110
  }
10081
10111
  const encode = getOptionValue(zipWriter, options, "encodeText", encodeText);
10082
10112
  let rawFilename = encode(name);
@@ -10098,22 +10128,13 @@
10098
10128
  if (version > MAX_16_BITS) {
10099
10129
  throw new Error(ERR_INVALID_VERSION);
10100
10130
  }
10101
- const versionMadeBy = getOptionValue(zipWriter, options, PROPERTY_NAME_VERSION_MADE_BY, 20);
10102
- if (versionMadeBy > MAX_16_BITS) {
10103
- throw new Error(ERR_INVALID_VERSION);
10104
- }
10105
10131
  const lastModDate = getOptionValue(zipWriter, options, PROPERTY_NAME_LAST_MODIFICATION_DATE, new Date());
10106
10132
  const lastAccessDate = getOptionValue(zipWriter, options, PROPERTY_NAME_LAST_ACCESS_DATE);
10107
10133
  const creationDate = getOptionValue(zipWriter, options, PROPERTY_NAME_CREATION_DATE);
10108
- const msDosCompatible = getOptionValue(zipWriter, options, PROPERTY_NAME_MS_DOS_COMPATIBLE, true);
10109
10134
  let internalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES, 0);
10110
10135
  if (internalFileAttributes === 0) {
10111
10136
  internalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTE, 0);
10112
10137
  }
10113
- let externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES, 0);
10114
- if (externalFileAttributes === 0) {
10115
- externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTE, 0);
10116
- }
10117
10138
  const passThrough = getOptionValue(zipWriter, options, "passThrough");
10118
10139
  let password, rawPassword;
10119
10140
  if (!passThrough) {
@@ -10436,6 +10457,7 @@
10436
10457
  zipCrypto,
10437
10458
  dataDescriptor,
10438
10459
  directory,
10460
+ executable,
10439
10461
  versionMadeBy,
10440
10462
  rawComment,
10441
10463
  rawExtraField,
@@ -10457,6 +10479,7 @@
10457
10479
  versionMadeBy,
10458
10480
  zip64,
10459
10481
  directory: Boolean(directory),
10482
+ executable: Boolean(executable),
10460
10483
  filenameUTF8: true,
10461
10484
  rawFilename,
10462
10485
  commentUTF8: true,
@@ -10917,13 +10940,11 @@
10917
10940
  rawComment,
10918
10941
  versionMadeBy,
10919
10942
  headerArray,
10920
- directory,
10921
10943
  zip64,
10922
10944
  zip64UncompressedSize,
10923
10945
  zip64CompressedSize,
10924
10946
  zip64DiskNumberStart,
10925
10947
  zip64Offset,
10926
- msDosCompatible,
10927
10948
  internalFileAttributes,
10928
10949
  externalFileAttributes,
10929
10950
  diskNumberStart,
@@ -10947,8 +10968,6 @@
10947
10968
  setUint16(directoryView, offset + 36, internalFileAttributes);
10948
10969
  if (externalFileAttributes) {
10949
10970
  setUint32(directoryView, offset + 38, externalFileAttributes);
10950
- } else if (directory && msDosCompatible) {
10951
- setUint8(directoryView, offset + 38, FILE_ATTR_MSDOS_DIR_MASK);
10952
10971
  }
10953
10972
  setUint32(directoryView, offset + 42, zip64 && zip64Offset ? MAX_32_BITS : fileEntryOffset);
10954
10973
  arraySet(directoryArray, rawFilename, offset + 46);