Skip to content

Commit b608211

Browse files
bump up version
1 parent 99d5748 commit b608211

14 files changed

+194
-99
lines changed

deno.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@zip-js/zip-js",
3-
"version": "2.7.56",
3+
"version": "2.7.57",
44
"exports": {
55
".": "./index.js",
66
"./data-uri": "./lib/zip-data-uri.js"

dist/zip-fs-full.js

Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4284,6 +4284,7 @@
42844284
const FILE_ATTR_MSDOS_DIR_MASK = 0x10;
42854285
const FILE_ATTR_UNIX_DIR_MASK = 0x4000;
42864286
const FILE_ATTR_UNIX_EXECUTABLE_MASK = 0o111;
4287+
const FILE_ATTR_UNIX_DEFAULT_MASK = 0o644;
42874288

42884289
const VERSION_DEFLATE = 0x14;
42894290
const VERSION_ZIP64 = 0x2D;
@@ -9223,12 +9224,14 @@
92239224
const PROPERTY_NAME_VERSION = "version";
92249225
const PROPERTY_NAME_VERSION_MADE_BY = "versionMadeBy";
92259226
const PROPERTY_NAME_ZIPCRYPTO = "zipCrypto";
9227+
const PROPERTY_NAME_DIRECTORY = "directory";
9228+
const PROPERTY_NAME_EXECUTABLE = "executable";
92269229

92279230
const PROPERTY_NAMES = [
92289231
PROPERTY_NAME_FILENAME, PROPERTY_NAME_RAW_FILENAME, PROPERTY_NAME_COMPPRESSED_SIZE, PROPERTY_NAME_UNCOMPPRESSED_SIZE,
92299232
PROPERTY_NAME_LAST_MODIFICATION_DATE, PROPERTY_NAME_RAW_LAST_MODIFICATION_DATE, PROPERTY_NAME_COMMENT, PROPERTY_NAME_RAW_COMMENT,
92309233
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"];
92329235

92339236
class Entry {
92349237

@@ -10073,10 +10076,37 @@
1007310076

1007410077
async function addFile(zipWriter, name, reader, options) {
1007510078
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+
}
1008010110
}
1008110111
const encode = getOptionValue(zipWriter, options, "encodeText", encodeText);
1008210112
let rawFilename = encode(name);
@@ -10098,22 +10128,13 @@
1009810128
if (version > MAX_16_BITS) {
1009910129
throw new Error(ERR_INVALID_VERSION);
1010010130
}
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-
}
1010510131
const lastModDate = getOptionValue(zipWriter, options, PROPERTY_NAME_LAST_MODIFICATION_DATE, new Date());
1010610132
const lastAccessDate = getOptionValue(zipWriter, options, PROPERTY_NAME_LAST_ACCESS_DATE);
1010710133
const creationDate = getOptionValue(zipWriter, options, PROPERTY_NAME_CREATION_DATE);
10108-
const msDosCompatible = getOptionValue(zipWriter, options, PROPERTY_NAME_MS_DOS_COMPATIBLE, true);
1010910134
let internalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES, 0);
1011010135
if (internalFileAttributes === 0) {
1011110136
internalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTE, 0);
1011210137
}
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-
}
1011710138
const passThrough = getOptionValue(zipWriter, options, "passThrough");
1011810139
let password, rawPassword;
1011910140
if (!passThrough) {
@@ -10436,6 +10457,7 @@
1043610457
zipCrypto,
1043710458
dataDescriptor,
1043810459
directory,
10460+
executable,
1043910461
versionMadeBy,
1044010462
rawComment,
1044110463
rawExtraField,
@@ -10457,6 +10479,7 @@
1045710479
versionMadeBy,
1045810480
zip64,
1045910481
directory: Boolean(directory),
10482+
executable: Boolean(executable),
1046010483
filenameUTF8: true,
1046110484
rawFilename,
1046210485
commentUTF8: true,
@@ -10917,13 +10940,11 @@
1091710940
rawComment,
1091810941
versionMadeBy,
1091910942
headerArray,
10920-
directory,
1092110943
zip64,
1092210944
zip64UncompressedSize,
1092310945
zip64CompressedSize,
1092410946
zip64DiskNumberStart,
1092510947
zip64Offset,
10926-
msDosCompatible,
1092710948
internalFileAttributes,
1092810949
externalFileAttributes,
1092910950
diskNumberStart,
@@ -10947,8 +10968,6 @@
1094710968
setUint16(directoryView, offset + 36, internalFileAttributes);
1094810969
if (externalFileAttributes) {
1094910970
setUint32(directoryView, offset + 38, externalFileAttributes);
10950-
} else if (directory && msDosCompatible) {
10951-
setUint8(directoryView, offset + 38, FILE_ATTR_MSDOS_DIR_MASK);
1095210971
}
1095310972
setUint32(directoryView, offset + 42, zip64 && zip64Offset ? MAX_32_BITS : fileEntryOffset);
1095410973
arraySet(directoryArray, rawFilename, offset + 46);

dist/zip-fs-full.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/zip-fs.js

Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
const FILE_ATTR_MSDOS_DIR_MASK = 0x10;
7070
const FILE_ATTR_UNIX_DIR_MASK = 0x4000;
7171
const FILE_ATTR_UNIX_EXECUTABLE_MASK = 0o111;
72+
const FILE_ATTR_UNIX_DEFAULT_MASK = 0o644;
7273

7374
const VERSION_DEFLATE = 0x14;
7475
const VERSION_ZIP64 = 0x2D;
@@ -3376,12 +3377,14 @@
33763377
const PROPERTY_NAME_VERSION = "version";
33773378
const PROPERTY_NAME_VERSION_MADE_BY = "versionMadeBy";
33783379
const PROPERTY_NAME_ZIPCRYPTO = "zipCrypto";
3380+
const PROPERTY_NAME_DIRECTORY = "directory";
3381+
const PROPERTY_NAME_EXECUTABLE = "executable";
33793382

33803383
const PROPERTY_NAMES = [
33813384
PROPERTY_NAME_FILENAME, PROPERTY_NAME_RAW_FILENAME, PROPERTY_NAME_COMPPRESSED_SIZE, PROPERTY_NAME_UNCOMPPRESSED_SIZE,
33823385
PROPERTY_NAME_LAST_MODIFICATION_DATE, PROPERTY_NAME_RAW_LAST_MODIFICATION_DATE, PROPERTY_NAME_COMMENT, PROPERTY_NAME_RAW_COMMENT,
33833386
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"];
33853388

33863389
class Entry {
33873390

@@ -4226,10 +4229,37 @@
42264229

42274230
async function addFile(zipWriter, name, reader, options) {
42284231
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+
}
42334263
}
42344264
const encode = getOptionValue(zipWriter, options, "encodeText", encodeText);
42354265
let rawFilename = encode(name);
@@ -4251,22 +4281,13 @@
42514281
if (version > MAX_16_BITS) {
42524282
throw new Error(ERR_INVALID_VERSION);
42534283
}
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-
}
42584284
const lastModDate = getOptionValue(zipWriter, options, PROPERTY_NAME_LAST_MODIFICATION_DATE, new Date());
42594285
const lastAccessDate = getOptionValue(zipWriter, options, PROPERTY_NAME_LAST_ACCESS_DATE);
42604286
const creationDate = getOptionValue(zipWriter, options, PROPERTY_NAME_CREATION_DATE);
4261-
const msDosCompatible = getOptionValue(zipWriter, options, PROPERTY_NAME_MS_DOS_COMPATIBLE, true);
42624287
let internalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES, 0);
42634288
if (internalFileAttributes === 0) {
42644289
internalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTE, 0);
42654290
}
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-
}
42704291
const passThrough = getOptionValue(zipWriter, options, "passThrough");
42714292
let password, rawPassword;
42724293
if (!passThrough) {
@@ -4589,6 +4610,7 @@
45894610
zipCrypto,
45904611
dataDescriptor,
45914612
directory,
4613+
executable,
45924614
versionMadeBy,
45934615
rawComment,
45944616
rawExtraField,
@@ -4610,6 +4632,7 @@
46104632
versionMadeBy,
46114633
zip64,
46124634
directory: Boolean(directory),
4635+
executable: Boolean(executable),
46134636
filenameUTF8: true,
46144637
rawFilename,
46154638
commentUTF8: true,
@@ -5070,13 +5093,11 @@
50705093
rawComment,
50715094
versionMadeBy,
50725095
headerArray,
5073-
directory,
50745096
zip64,
50755097
zip64UncompressedSize,
50765098
zip64CompressedSize,
50775099
zip64DiskNumberStart,
50785100
zip64Offset,
5079-
msDosCompatible,
50805101
internalFileAttributes,
50815102
externalFileAttributes,
50825103
diskNumberStart,
@@ -5100,8 +5121,6 @@
51005121
setUint16(directoryView, offset + 36, internalFileAttributes);
51015122
if (externalFileAttributes) {
51025123
setUint32(directoryView, offset + 38, externalFileAttributes);
5103-
} else if (directory && msDosCompatible) {
5104-
setUint8(directoryView, offset + 38, FILE_ATTR_MSDOS_DIR_MASK);
51055124
}
51065125
setUint32(directoryView, offset + 42, zip64 && zip64Offset ? MAX_32_BITS : fileEntryOffset);
51075126
arraySet(directoryArray, rawFilename, offset + 46);

dist/zip-fs.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/zip-full.js

Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4284,6 +4284,7 @@
42844284
const FILE_ATTR_MSDOS_DIR_MASK = 0x10;
42854285
const FILE_ATTR_UNIX_DIR_MASK = 0x4000;
42864286
const FILE_ATTR_UNIX_EXECUTABLE_MASK = 0o111;
4287+
const FILE_ATTR_UNIX_DEFAULT_MASK = 0o644;
42874288

42884289
const VERSION_DEFLATE = 0x14;
42894290
const VERSION_ZIP64 = 0x2D;
@@ -7591,12 +7592,14 @@
75917592
const PROPERTY_NAME_VERSION = "version";
75927593
const PROPERTY_NAME_VERSION_MADE_BY = "versionMadeBy";
75937594
const PROPERTY_NAME_ZIPCRYPTO = "zipCrypto";
7595+
const PROPERTY_NAME_DIRECTORY = "directory";
7596+
const PROPERTY_NAME_EXECUTABLE = "executable";
75947597

75957598
const PROPERTY_NAMES = [
75967599
PROPERTY_NAME_FILENAME, PROPERTY_NAME_RAW_FILENAME, PROPERTY_NAME_COMPPRESSED_SIZE, PROPERTY_NAME_UNCOMPPRESSED_SIZE,
75977600
PROPERTY_NAME_LAST_MODIFICATION_DATE, PROPERTY_NAME_RAW_LAST_MODIFICATION_DATE, PROPERTY_NAME_COMMENT, PROPERTY_NAME_RAW_COMMENT,
75987601
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"];
76007603

76017604
class Entry {
76027605

@@ -8441,10 +8444,37 @@
84418444

84428445
async function addFile(zipWriter, name, reader, options) {
84438446
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+
}
84488478
}
84498479
const encode = getOptionValue(zipWriter, options, "encodeText", encodeText);
84508480
let rawFilename = encode(name);
@@ -8466,22 +8496,13 @@
84668496
if (version > MAX_16_BITS) {
84678497
throw new Error(ERR_INVALID_VERSION);
84688498
}
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-
}
84738499
const lastModDate = getOptionValue(zipWriter, options, PROPERTY_NAME_LAST_MODIFICATION_DATE, new Date());
84748500
const lastAccessDate = getOptionValue(zipWriter, options, PROPERTY_NAME_LAST_ACCESS_DATE);
84758501
const creationDate = getOptionValue(zipWriter, options, PROPERTY_NAME_CREATION_DATE);
8476-
const msDosCompatible = getOptionValue(zipWriter, options, PROPERTY_NAME_MS_DOS_COMPATIBLE, true);
84778502
let internalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES, 0);
84788503
if (internalFileAttributes === 0) {
84798504
internalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTE, 0);
84808505
}
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-
}
84858506
const passThrough = getOptionValue(zipWriter, options, "passThrough");
84868507
let password, rawPassword;
84878508
if (!passThrough) {
@@ -8804,6 +8825,7 @@
88048825
zipCrypto,
88058826
dataDescriptor,
88068827
directory,
8828+
executable,
88078829
versionMadeBy,
88088830
rawComment,
88098831
rawExtraField,
@@ -8825,6 +8847,7 @@
88258847
versionMadeBy,
88268848
zip64,
88278849
directory: Boolean(directory),
8850+
executable: Boolean(executable),
88288851
filenameUTF8: true,
88298852
rawFilename,
88308853
commentUTF8: true,
@@ -9285,13 +9308,11 @@
92859308
rawComment,
92869309
versionMadeBy,
92879310
headerArray,
9288-
directory,
92899311
zip64,
92909312
zip64UncompressedSize,
92919313
zip64CompressedSize,
92929314
zip64DiskNumberStart,
92939315
zip64Offset,
9294-
msDosCompatible,
92959316
internalFileAttributes,
92969317
externalFileAttributes,
92979318
diskNumberStart,
@@ -9315,8 +9336,6 @@
93159336
setUint16(directoryView, offset + 36, internalFileAttributes);
93169337
if (externalFileAttributes) {
93179338
setUint32(directoryView, offset + 38, externalFileAttributes);
9318-
} else if (directory && msDosCompatible) {
9319-
setUint8(directoryView, offset + 38, FILE_ATTR_MSDOS_DIR_MASK);
93209339
}
93219340
setUint32(directoryView, offset + 42, zip64 && zip64Offset ? MAX_32_BITS : fileEntryOffset);
93229341
arraySet(directoryArray, rawFilename, offset + 46);

dist/zip-full.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/zip-no-worker-deflate.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/zip-no-worker.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)