@zip.js/zip.js 2.8.6 → 2.8.8

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.
@@ -37,6 +37,7 @@
37
37
 
38
38
  const MAX_32_BITS = 0xffffffff;
39
39
  const MAX_16_BITS = 0xffff;
40
+ const MAX_8_BITS = 0xff;
40
41
  const COMPRESSION_METHOD_DEFLATE = 0x08;
41
42
  const COMPRESSION_METHOD_DEFLATE_64 = 0x09;
42
43
  const COMPRESSION_METHOD_STORE = 0x00;
@@ -66,6 +67,8 @@
66
67
  const EXTRAFIELD_TYPE_UNICODE_PATH = 0x7075;
67
68
  const EXTRAFIELD_TYPE_UNICODE_COMMENT = 0x6375;
68
69
  const EXTRAFIELD_TYPE_USDZ = 0x1986;
70
+ const EXTRAFIELD_TYPE_INFOZIP = 0x7875;
71
+ const EXTRAFIELD_TYPE_UNIX = 0x7855;
69
72
 
70
73
  const BITFLAG_ENCRYPTED = 0b1;
71
74
  const BITFLAG_LEVEL = 0b0110;
@@ -75,10 +78,17 @@
75
78
  const BITFLAG_DATA_DESCRIPTOR = 0b1000;
76
79
  const BITFLAG_LANG_ENCODING_FLAG = 0b100000000000;
77
80
  const FILE_ATTR_MSDOS_DIR_MASK = 0b10000;
81
+ const FILE_ATTR_MSDOS_READONLY_MASK = 0x01;
82
+ const FILE_ATTR_MSDOS_HIDDEN_MASK = 0x02;
83
+ const FILE_ATTR_MSDOS_SYSTEM_MASK = 0x04;
84
+ const FILE_ATTR_MSDOS_ARCHIVE_MASK = 0x20;
78
85
  const FILE_ATTR_UNIX_TYPE_MASK = 0o170000;
79
86
  const FILE_ATTR_UNIX_TYPE_DIR = 0o040000;
80
87
  const FILE_ATTR_UNIX_EXECUTABLE_MASK = 0o111;
81
88
  const FILE_ATTR_UNIX_DEFAULT_MASK = 0o644;
89
+ const FILE_ATTR_UNIX_SETUID_MASK = 0o4000;
90
+ const FILE_ATTR_UNIX_SETGID_MASK = 0o2000;
91
+ const FILE_ATTR_UNIX_STICKY_MASK = 0o1000;
82
92
 
83
93
  const VERSION_DEFLATE = 0x14;
84
94
  const VERSION_ZIP64 = 0x2D;
@@ -97,6 +107,7 @@
97
107
  const UNDEFINED_VALUE = undefined;
98
108
  const UNDEFINED_TYPE = "undefined";
99
109
  const FUNCTION_TYPE = "function";
110
+ const OBJECT_TYPE = "object";
100
111
 
101
112
  /*
102
113
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
@@ -193,7 +204,7 @@
193
204
  }
194
205
  }
195
206
 
196
- const A="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function g(g){let B;g({workerURI:()=>(B||(B="data:text/javascript;base64,"+(g=>{g=(g=>{const B=(g=(g+"").replace(/[^A-Za-z0-9+/=]/g,"")).length,I=[];for(let C=0;B>C;C+=4){const B=A.indexOf(g[C])<<18|A.indexOf(g[C+1])<<12|(63&A.indexOf(g[C+2]))<<6|63&A.indexOf(g[C+3]);I.push(B>>16&255),"="!==g[C+2]&&I.push(B>>8&255),"="!==g[C+3]&&I.push(255&B);}return new Uint8Array(I)})(g);let B=new Uint8Array(1024),I=0;for(let A=0;A<g.length;){const E=g[A++];if(128&E){const Q=3+(127&E),Y=g[A++]<<8|g[A++],F=I-Y;C(I+Q);for(let A=0;Q>A;A++)B[I++]=B[F+A];}else {const Q=E;C(I+Q);for(let C=0;Q>C&&A<g.length;C++)B[I++]=g[A++];}}return (g=>{let B="";const I=g.length;let C=0;for(;I>C+2;C+=3){const I=g[C]<<16|g[C+1]<<8|g[C+2];B+=A[I>>18&63]+A[I>>12&63]+A[I>>6&63]+A[63&I];}const E=I-C;if(1===E){const I=g[C]<<16;B+=A[I>>18&63]+A[I>>12&63]+"==";}else if(2===E){const I=g[C]<<16|g[C+1]<<8;B+=A[I>>18&63]+A[I>>12&63]+A[I>>6&63]+"=";}return B})(new Uint8Array(B.buffer.slice(0,I)));function C(A){if(B.length<A){let g=2*B.length;for(;A>g;)g*=2;const C=new Uint8Array(g);C.set(B.subarray(0,I)),B=C;}}})("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")),B)});}
207
+ const A="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function g(g){let B;g({workerURI:()=>(B||(B="data:text/javascript;base64,"+(g=>{g=(g=>{const B=(g=(g+"").replace(/[^A-Za-z0-9+/=]/g,"")).length,I=[];for(let C=0;B>C;C+=4){const B=A.indexOf(g[C])<<18|A.indexOf(g[C+1])<<12|(63&A.indexOf(g[C+2]))<<6|63&A.indexOf(g[C+3]);I.push(B>>16&255),"="!==g[C+2]&&I.push(B>>8&255),"="!==g[C+3]&&I.push(255&B);}return new Uint8Array(I)})(g);let B=new Uint8Array(1024),I=0;for(let A=0;A<g.length;){const E=g[A++];if(128&E){const Q=3+(127&E),Y=g[A++]<<8|g[A++],F=I-Y;C(I+Q);for(let A=0;Q>A;A++)B[I++]=B[F+A];}else {const Q=E;C(I+Q);for(let C=0;Q>C&&A<g.length;C++)B[I++]=g[A++];}}return (g=>{let B="";const I=g.length;let C=0;for(;I>C+2;C+=3){const I=g[C]<<16|g[C+1]<<8|g[C+2];B+=A[I>>18&63]+A[I>>12&63]+A[I>>6&63]+A[63&I];}const E=I-C;if(1===E){const I=g[C]<<16;B+=A[I>>18&63]+A[I>>12&63]+"==";}else if(2===E){const I=g[C]<<16|g[C+1]<<8;B+=A[I>>18&63]+A[I>>12&63]+A[I>>6&63]+"=";}return B})(new Uint8Array(B.buffer.slice(0,I)));function C(A){if(B.length<A){let g=2*B.length;for(;A>g;)g*=2;const C=new Uint8Array(g);C.set(B.subarray(0,I)),B=C;}}})("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")),B)});}
197
208
 
198
209
  /*
199
210
  Copyright (c) 2022 Gildas Lormeau. All rights reserved.
@@ -2189,13 +2200,8 @@
2189
2200
  const { value, readable, writable } = message;
2190
2201
  const transferables = [];
2191
2202
  if (value) {
2192
- if (value.byteLength < value.buffer.byteLength) {
2193
- message.value = value.buffer.slice(value.byteOffset, value.byteOffset + value.byteLength);
2194
- }
2195
- else {
2196
- message.value = value.buffer;
2197
- }
2198
- transferables.push(message.value);
2203
+ message.value = value;
2204
+ transferables.push(message.value.buffer);
2199
2205
  }
2200
2206
  if (transferStreams && transferStreamsSupported) {
2201
2207
  if (readable) {
@@ -2421,6 +2427,7 @@
2421
2427
  const HTTP_METHOD_GET = "GET";
2422
2428
  const HTTP_RANGE_UNIT = "bytes";
2423
2429
  const DEFAULT_CHUNK_SIZE = 64 * 1024;
2430
+ const DEFAULT_BUFFER_SIZE = 256 * 1024;
2424
2431
 
2425
2432
  const PROPERTY_NAME_WRITABLE = "writable";
2426
2433
 
@@ -2913,19 +2920,29 @@
2913
2920
 
2914
2921
  class Uint8ArrayWriter extends Writer {
2915
2922
 
2923
+ constructor(defaultBufferSize) {
2924
+ super();
2925
+ this.defaultBufferSize = defaultBufferSize || DEFAULT_BUFFER_SIZE;
2926
+ }
2927
+
2916
2928
  init(initSize = 0) {
2917
2929
  Object.assign(this, {
2918
2930
  offset: 0,
2919
- array: new Uint8Array(initSize)
2931
+ array: new Uint8Array(initSize > 0 ? initSize : this.defaultBufferSize)
2920
2932
  });
2921
2933
  super.init();
2922
2934
  }
2923
2935
 
2924
2936
  writeUint8Array(array) {
2925
2937
  const writer = this;
2926
- if (writer.offset + array.length > writer.array.length) {
2938
+ const requiredLength = writer.offset + array.length;
2939
+ if (requiredLength > writer.array.length) {
2940
+ let newLength = writer.array.length ? writer.array.length * 2 : writer.defaultBufferSize;
2941
+ while (newLength < requiredLength) {
2942
+ newLength *= 2;
2943
+ }
2927
2944
  const previousArray = writer.array;
2928
- writer.array = new Uint8Array(previousArray.length + array.length);
2945
+ writer.array = new Uint8Array(newLength);
2929
2946
  writer.array.set(previousArray);
2930
2947
  }
2931
2948
  writer.array.set(array, writer.offset);
@@ -2933,7 +2950,11 @@
2933
2950
  }
2934
2951
 
2935
2952
  getData() {
2936
- return this.array;
2953
+ if (this.offset === this.array.length) {
2954
+ return this.array;
2955
+ } else {
2956
+ return this.array.slice(0, this.offset);
2957
+ }
2937
2958
  }
2938
2959
  }
2939
2960
 
@@ -3252,6 +3273,8 @@
3252
3273
  const PROPERTY_NAME_RAW_CREATION_DATE = "rawCreationDate";
3253
3274
  const PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES = "internalFileAttributes";
3254
3275
  const PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES = "externalFileAttributes";
3276
+ const PROPERTY_NAME_MSDOS_ATTRIBUTES_RAW = "msdosAttributesRaw";
3277
+ const PROPERTY_NAME_MSDOS_ATTRIBUTES = "msdosAttributes";
3255
3278
  const PROPERTY_NAME_MS_DOS_COMPATIBLE = "msDosCompatible";
3256
3279
  const PROPERTY_NAME_ZIP64 = "zip64";
3257
3280
  const PROPERTY_NAME_ENCRYPTED = "encrypted";
@@ -3263,17 +3286,73 @@
3263
3286
  const PROPERTY_NAME_COMPRESSION_METHOD = "compressionMethod";
3264
3287
  const PROPERTY_NAME_SIGNATURE = "signature";
3265
3288
  const PROPERTY_NAME_EXTRA_FIELD = "extraField";
3289
+ const PROPERTY_NAME_EXTRA_FIELD_INFOZIP = "extraFieldInfoZip";
3290
+ const PROPERTY_NAME_EXTRA_FIELD_UNIX = "extraFieldUnix";
3291
+ const PROPERTY_NAME_UID = "uid";
3292
+ const PROPERTY_NAME_GID = "gid";
3293
+ const PROPERTY_NAME_UNIX_MODE = "unixMode";
3294
+ const PROPERTY_NAME_SETUID = "setuid";
3295
+ const PROPERTY_NAME_SETGID = "setgid";
3296
+ const PROPERTY_NAME_STICKY = "sticky";
3297
+ const PROPERTY_NAME_BITFLAG = "bitFlag";
3298
+ const PROPERTY_NAME_FILENAME_UTF8 = "filenameUTF8";
3299
+ const PROPERTY_NAME_COMMENT_UTF8 = "commentUTF8";
3300
+ const PROPERTY_NAME_RAW_EXTRA_FIELD = "rawExtraField";
3301
+ const PROPERTY_NAME_EXTRA_FIELD_ZIP64 = "extraFieldZip64";
3302
+ const PROPERTY_NAME_EXTRA_FIELD_UNICODE_PATH = "extraFieldUnicodePath";
3303
+ const PROPERTY_NAME_EXTRA_FIELD_UNICODE_COMMENT = "extraFieldUnicodeComment";
3304
+ const PROPERTY_NAME_EXTRA_FIELD_AES = "extraFieldAES";
3305
+ const PROPERTY_NAME_EXTRA_FIELD_NTFS = "extraFieldNTFS";
3306
+ const PROPERTY_NAME_EXTRA_FIELD_EXTENDED_TIMESTAMP = "extraFieldExtendedTimestamp";
3266
3307
 
3267
3308
  const PROPERTY_NAMES = [
3268
- PROPERTY_NAME_FILENAME, PROPERTY_NAME_RAW_FILENAME, PROPERTY_NAME_COMPRESSED_SIZE, PROPERTY_NAME_UNCOMPRESSED_SIZE,
3269
- PROPERTY_NAME_LAST_MODIFICATION_DATE, PROPERTY_NAME_RAW_LAST_MODIFICATION_DATE, PROPERTY_NAME_COMMENT, PROPERTY_NAME_RAW_COMMENT,
3270
- PROPERTY_NAME_LAST_ACCESS_DATE, PROPERTY_NAME_CREATION_DATE, PROPERTY_NAME_OFFSET, PROPERTY_NAME_DISK_NUMBER_START,
3271
- PROPERTY_NAME_DISK_NUMBER_START, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES,
3272
- PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES, PROPERTY_NAME_MS_DOS_COMPATIBLE, PROPERTY_NAME_ZIP64,
3273
- PROPERTY_NAME_ENCRYPTED, PROPERTY_NAME_VERSION, PROPERTY_NAME_VERSION_MADE_BY, PROPERTY_NAME_ZIPCRYPTO, PROPERTY_NAME_DIRECTORY,
3274
- PROPERTY_NAME_EXECUTABLE, PROPERTY_NAME_COMPRESSION_METHOD, PROPERTY_NAME_SIGNATURE, PROPERTY_NAME_EXTRA_FIELD,
3275
- "bitFlag", "filenameUTF8", "commentUTF8", "rawExtraField", "extraFieldZip64", "extraFieldUnicodePath", "extraFieldUnicodeComment",
3276
- "extraFieldAES", "extraFieldNTFS", "extraFieldExtendedTimestamp"];
3309
+ PROPERTY_NAME_FILENAME,
3310
+ PROPERTY_NAME_RAW_FILENAME,
3311
+ PROPERTY_NAME_UNCOMPRESSED_SIZE,
3312
+ PROPERTY_NAME_COMPRESSED_SIZE,
3313
+ PROPERTY_NAME_LAST_MODIFICATION_DATE,
3314
+ PROPERTY_NAME_RAW_LAST_MODIFICATION_DATE,
3315
+ PROPERTY_NAME_COMMENT,
3316
+ PROPERTY_NAME_RAW_COMMENT,
3317
+ PROPERTY_NAME_LAST_ACCESS_DATE,
3318
+ PROPERTY_NAME_CREATION_DATE,
3319
+ PROPERTY_NAME_RAW_CREATION_DATE,
3320
+ PROPERTY_NAME_OFFSET,
3321
+ PROPERTY_NAME_DISK_NUMBER_START,
3322
+ PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES,
3323
+ PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES,
3324
+ PROPERTY_NAME_MSDOS_ATTRIBUTES_RAW,
3325
+ PROPERTY_NAME_MSDOS_ATTRIBUTES,
3326
+ PROPERTY_NAME_MS_DOS_COMPATIBLE,
3327
+ PROPERTY_NAME_ZIP64,
3328
+ PROPERTY_NAME_ENCRYPTED,
3329
+ PROPERTY_NAME_VERSION,
3330
+ PROPERTY_NAME_VERSION_MADE_BY,
3331
+ PROPERTY_NAME_ZIPCRYPTO,
3332
+ PROPERTY_NAME_DIRECTORY,
3333
+ PROPERTY_NAME_EXECUTABLE,
3334
+ PROPERTY_NAME_COMPRESSION_METHOD,
3335
+ PROPERTY_NAME_SIGNATURE,
3336
+ PROPERTY_NAME_EXTRA_FIELD,
3337
+ PROPERTY_NAME_EXTRA_FIELD_UNIX,
3338
+ PROPERTY_NAME_EXTRA_FIELD_INFOZIP,
3339
+ PROPERTY_NAME_UID,
3340
+ PROPERTY_NAME_GID,
3341
+ PROPERTY_NAME_UNIX_MODE,
3342
+ PROPERTY_NAME_SETUID,
3343
+ PROPERTY_NAME_SETGID,
3344
+ PROPERTY_NAME_STICKY,
3345
+ PROPERTY_NAME_BITFLAG,
3346
+ PROPERTY_NAME_FILENAME_UTF8,
3347
+ PROPERTY_NAME_COMMENT_UTF8,
3348
+ PROPERTY_NAME_RAW_EXTRA_FIELD,
3349
+ PROPERTY_NAME_EXTRA_FIELD_ZIP64,
3350
+ PROPERTY_NAME_EXTRA_FIELD_UNICODE_PATH,
3351
+ PROPERTY_NAME_EXTRA_FIELD_UNICODE_COMMENT,
3352
+ PROPERTY_NAME_EXTRA_FIELD_AES,
3353
+ PROPERTY_NAME_EXTRA_FIELD_NTFS,
3354
+ PROPERTY_NAME_EXTRA_FIELD_EXTENDED_TIMESTAMP
3355
+ ];
3277
3356
 
3278
3357
  class Entry {
3279
3358
 
@@ -3340,6 +3419,7 @@
3340
3419
  const OPTION_ENCODE_TEXT = "encodeText";
3341
3420
  const OPTION_OFFSET = "offset";
3342
3421
  const OPTION_USDZ = "usdz";
3422
+ const OPTION_UNIX_EXTRA_FIELD_TYPE = "unixExtraFieldType";
3343
3423
 
3344
3424
  /*
3345
3425
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
@@ -3382,6 +3462,7 @@
3382
3462
  const ERR_SPLIT_ZIP_FILE = "Split zip file";
3383
3463
  const ERR_OVERLAPPING_ENTRY = "Overlapping entry found";
3384
3464
  const CHARSET_UTF8 = "utf-8";
3465
+ const PROPERTY_NAME_UTF8_SUFFIX = "UTF8";
3385
3466
  const CHARSET_CP437 = "cp437";
3386
3467
  const ZIP64_PROPERTIES = [
3387
3468
  [PROPERTY_NAME_UNCOMPRESSED_SIZE, MAX_32_BITS],
@@ -3537,51 +3618,71 @@
3537
3618
  const filenameUTF8 = languageEncodingFlag;
3538
3619
  const commentUTF8 = languageEncodingFlag;
3539
3620
  const externalFileAttributes = getUint32(directoryView, offset + 38);
3540
- const directory =
3541
- (msDosCompatible && ((getUint8(directoryView, offset + 38) & FILE_ATTR_MSDOS_DIR_MASK) == FILE_ATTR_MSDOS_DIR_MASK)) ||
3542
- (unixCompatible && (((externalFileAttributes >> 16) & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_DIR)) ||
3543
- (rawFilename.length && rawFilename.at(-1) == DIRECTORY_SIGNATURE.charCodeAt(0));
3544
- const executable = (unixCompatible && (((externalFileAttributes >> 16) & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0));
3621
+ const msdosAttributesRaw = externalFileAttributes & MAX_8_BITS;
3622
+ const msdosAttributes = {
3623
+ readOnly: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_READONLY_MASK),
3624
+ hidden: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_HIDDEN_MASK),
3625
+ system: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_SYSTEM_MASK),
3626
+ directory: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_DIR_MASK),
3627
+ archive: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_ARCHIVE_MASK)
3628
+ };
3545
3629
  const offsetFileEntry = getUint32(directoryView, offset + 42) + prependedDataLength;
3630
+ const decode = getOptionValue$1(zipReader, options, OPTION_DECODE_TEXT) || decodeText;
3631
+ const rawFilenameEncoding = filenameUTF8 ? CHARSET_UTF8 : filenameEncoding || CHARSET_CP437;
3632
+ const rawCommentEncoding = commentUTF8 ? CHARSET_UTF8 : commentEncoding || CHARSET_CP437;
3633
+ let filename = decode(rawFilename, rawFilenameEncoding);
3634
+ if (filename === UNDEFINED_VALUE) {
3635
+ filename = decodeText(rawFilename, rawFilenameEncoding);
3636
+ }
3637
+ let comment = decode(rawComment, rawCommentEncoding);
3638
+ if (comment === UNDEFINED_VALUE) {
3639
+ comment = decodeText(rawComment, rawCommentEncoding);
3640
+ }
3546
3641
  Object.assign(fileEntry, {
3547
3642
  versionMadeBy,
3548
3643
  msDosCompatible,
3549
3644
  compressedSize: 0,
3550
3645
  uncompressedSize: 0,
3551
3646
  commentLength,
3552
- directory,
3553
3647
  offset: offsetFileEntry,
3554
3648
  diskNumberStart: getUint16(directoryView, offset + 34),
3555
3649
  internalFileAttributes: getUint16(directoryView, offset + 36),
3556
3650
  externalFileAttributes,
3651
+ msdosAttributesRaw,
3652
+ msdosAttributes,
3557
3653
  rawFilename,
3558
3654
  filenameUTF8,
3559
3655
  commentUTF8,
3560
3656
  rawExtraField: directoryArray.subarray(extraFieldOffset, commentOffset),
3561
- executable
3562
- });
3563
- fileEntry.internalFileAttribute = fileEntry.internalFileAttributes;
3564
- fileEntry.externalFileAttribute = fileEntry.externalFileAttributes;
3565
- const decode = getOptionValue$1(zipReader, options, OPTION_DECODE_TEXT) || decodeText;
3566
- const rawFilenameEncoding = filenameUTF8 ? CHARSET_UTF8 : filenameEncoding || CHARSET_CP437;
3567
- const rawCommentEncoding = commentUTF8 ? CHARSET_UTF8 : commentEncoding || CHARSET_CP437;
3568
- let filename = decode(rawFilename, rawFilenameEncoding);
3569
- if (filename === UNDEFINED_VALUE) {
3570
- filename = decodeText(rawFilename, rawFilenameEncoding);
3571
- }
3572
- let comment = decode(rawComment, rawCommentEncoding);
3573
- if (comment === UNDEFINED_VALUE) {
3574
- comment = decodeText(rawComment, rawCommentEncoding);
3575
- }
3576
- Object.assign(fileEntry, {
3577
3657
  rawComment,
3578
3658
  filename,
3579
- comment,
3580
- directory: directory || filename.endsWith(DIRECTORY_SIGNATURE)
3659
+ comment
3581
3660
  });
3582
3661
  startOffset = Math.max(offsetFileEntry, startOffset);
3583
3662
  readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6);
3584
- fileEntry.zipCrypto = fileEntry.encrypted && !fileEntry.extraFieldAES;
3663
+ const unixExternalUpper = (fileEntry.externalFileAttributes >> 16) & MAX_16_BITS;
3664
+ if (fileEntry.unixMode === UNDEFINED_VALUE && (unixExternalUpper & (FILE_ATTR_UNIX_DEFAULT_MASK | FILE_ATTR_UNIX_EXECUTABLE_MASK | FILE_ATTR_UNIX_TYPE_DIR)) != 0) {
3665
+ fileEntry.unixMode = unixExternalUpper;
3666
+ }
3667
+ const setuid = Boolean(fileEntry.unixMode & FILE_ATTR_UNIX_SETUID_MASK);
3668
+ const setgid = Boolean(fileEntry.unixMode & FILE_ATTR_UNIX_SETGID_MASK);
3669
+ const sticky = Boolean(fileEntry.unixMode & FILE_ATTR_UNIX_STICKY_MASK);
3670
+ const executable = (fileEntry.unixMode !== UNDEFINED_VALUE)
3671
+ ? ((fileEntry.unixMode & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)
3672
+ : (unixCompatible && ((unixExternalUpper & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0));
3673
+ const modeIsDir = fileEntry.unixMode !== UNDEFINED_VALUE && ((fileEntry.unixMode & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_DIR);
3674
+ const upperIsDir = ((unixExternalUpper & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_DIR);
3675
+ Object.assign(fileEntry, {
3676
+ setuid,
3677
+ setgid,
3678
+ sticky,
3679
+ unixExternalUpper,
3680
+ internalFileAttribute: fileEntry.internalFileAttributes,
3681
+ externalFileAttribute: fileEntry.externalFileAttributes,
3682
+ executable,
3683
+ directory: modeIsDir || upperIsDir || (msDosCompatible && msdosAttributes.directory) || (filename.endsWith(DIRECTORY_SIGNATURE) && !fileEntry.uncompressedSize),
3684
+ zipCrypto: fileEntry.encrypted && !fileEntry.extraFieldAES
3685
+ });
3585
3686
  const entry = new Entry(fileEntry);
3586
3687
  entry.getData = (writer, options) => fileEntry.getData(writer, entry, zipReader.readRanges, options);
3587
3688
  entry.arrayBuffer = async options => {
@@ -3755,7 +3856,7 @@
3755
3856
  zipCrypto,
3756
3857
  encryptionStrength: extraFieldAES && extraFieldAES.strength,
3757
3858
  signed: getOptionValue$1(zipEntry, options, OPTION_CHECK_SIGNATURE) && !passThrough,
3758
- passwordVerification: zipCrypto && (dataDescriptor ? ((rawLastModDate >>> 8) & 0xFF) : ((signature >>> 24) & 0xFF)),
3859
+ passwordVerification: zipCrypto && (dataDescriptor ? ((rawLastModDate >>> 8) & MAX_8_BITS) : ((signature >>> 24) & MAX_8_BITS)),
3759
3860
  outputSize: passThrough ? compressedSize : uncompressedSize,
3760
3861
  signature,
3761
3862
  compressed: compressionMethod != 0 && !passThrough,
@@ -3886,6 +3987,17 @@
3886
3987
  readExtraFieldNTFS(extraFieldNTFS, directory);
3887
3988
  directory.extraFieldNTFS = extraFieldNTFS;
3888
3989
  }
3990
+ const extraFieldUnix = extraField.get(EXTRAFIELD_TYPE_UNIX);
3991
+ if (extraFieldUnix) {
3992
+ readExtraFieldUnix(extraFieldUnix, directory, false);
3993
+ directory.extraFieldUnix = extraFieldUnix;
3994
+ } else {
3995
+ const extraFieldInfoZip = extraField.get(EXTRAFIELD_TYPE_INFOZIP);
3996
+ if (extraFieldInfoZip) {
3997
+ readExtraFieldUnix(extraFieldInfoZip, directory, true);
3998
+ directory.extraFieldInfoZip = extraFieldInfoZip;
3999
+ }
4000
+ }
3889
4001
  const extraFieldExtendedTimestamp = extraField.get(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
3890
4002
  if (extraFieldExtendedTimestamp) {
3891
4003
  readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory);
@@ -3927,7 +4039,7 @@
3927
4039
  });
3928
4040
  if (extraFieldUnicode.valid) {
3929
4041
  directory[propertyName] = extraFieldUnicode[propertyName];
3930
- directory[propertyName + "UTF8"] = true;
4042
+ directory[propertyName + PROPERTY_NAME_UTF8_SUFFIX] = true;
3931
4043
  }
3932
4044
  }
3933
4045
 
@@ -3983,6 +4095,47 @@
3983
4095
  }
3984
4096
  }
3985
4097
 
4098
+ function readExtraFieldUnix(extraField, directory, isInfoZip) {
4099
+ try {
4100
+ const view = getDataView$1(new Uint8Array(extraField.data));
4101
+ let offset = 0;
4102
+ const version = getUint8(view, offset++);
4103
+ const uidSize = getUint8(view, offset++);
4104
+ const uidBytes = extraField.data.subarray(offset, offset + uidSize);
4105
+ offset += uidSize;
4106
+ const uid = unpackUnixId(uidBytes);
4107
+ const gidSize = getUint8(view, offset++);
4108
+ const gidBytes = extraField.data.subarray(offset, offset + gidSize);
4109
+ offset += gidSize;
4110
+ const gid = unpackUnixId(gidBytes);
4111
+ let unixMode = UNDEFINED_VALUE;
4112
+ if (!isInfoZip && offset + 2 <= extraField.data.length) {
4113
+ const base = extraField.data;
4114
+ const modeView = new DataView(base.buffer, base.byteOffset + offset, 2);
4115
+ unixMode = modeView.getUint16(0, true);
4116
+ }
4117
+ Object.assign(extraField, { version, uid, gid, unixMode });
4118
+ if (uid !== UNDEFINED_VALUE) {
4119
+ directory.uid = uid;
4120
+ }
4121
+ if (gid !== UNDEFINED_VALUE) {
4122
+ directory.gid = gid;
4123
+ }
4124
+ if (unixMode !== UNDEFINED_VALUE) {
4125
+ directory.unixMode = unixMode;
4126
+ }
4127
+ } catch {
4128
+ // ignored
4129
+ }
4130
+ }
4131
+
4132
+ function unpackUnixId(bytes) {
4133
+ const buffer = new Uint8Array(4);
4134
+ buffer.set(bytes, 0);
4135
+ const view = new DataView(buffer.buffer, buffer.byteOffset, 4);
4136
+ return view.getUint32(0, true);
4137
+ }
4138
+
3986
4139
  function readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory) {
3987
4140
  const extraFieldView = getDataView$1(extraFieldExtendedTimestamp.data);
3988
4141
  const flags = getUint8(extraFieldView, 0);
@@ -4109,7 +4262,7 @@
4109
4262
  }
4110
4263
 
4111
4264
  function getDate(timeRaw) {
4112
- const date = (timeRaw & 0xffff0000) >> 16, time = timeRaw & 0x0000ffff;
4265
+ const date = (timeRaw & 0xffff0000) >> 16, time = timeRaw & MAX_16_BITS;
4113
4266
  try {
4114
4267
  return new Date(1980 + ((date & 0xFE00) >> 9), ((date & 0x01E0) >> 5) - 1, date & 0x001F, (time & 0xF800) >> 11, (time & 0x07E0) >> 5, (time & 0x001F) * 2, 0);
4115
4268
  } catch {
@@ -4185,8 +4338,16 @@
4185
4338
  const ERR_UNSUPPORTED_FORMAT = "Zip64 is not supported (make sure 'keepOrder' is set to 'true')";
4186
4339
  const ERR_UNDEFINED_UNCOMPRESSED_SIZE = "Undefined uncompressed size";
4187
4340
  const ERR_ZIP_NOT_EMPTY = "Zip file not empty";
4341
+ const ERR_INVALID_UID = "Invalid uid (must be integer 0..2^32-1)";
4342
+ const ERR_INVALID_GID = "Invalid gid (must be integer 0..2^32-1)";
4343
+ const ERR_INVALID_UNIX_MODE = "Invalid UNIX mode (must be integer 0..65535)";
4344
+ const ERR_INVALID_UNIX_EXTRA_FIELD_TYPE = "Invalid unixExtraFieldType (must be 'infozip' or 'unix')";
4345
+ const ERR_INVALID_MSDOS_ATTRIBUTES = "Invalid msdosAttributesRaw (must be integer 0..255)";
4346
+ const ERR_INVALID_MSDOS_DATA = "Invalid msdosAttributes (must be an object with boolean flags)";
4188
4347
 
4189
4348
  const EXTRAFIELD_DATA_AES = new Uint8Array([0x07, 0x00, 0x02, 0x00, 0x41, 0x45, 0x03, 0x00, 0x00]);
4349
+ const INFOZIP_EXTRA_FIELD_TYPE = "infozip";
4350
+ const UNIX_EXTRA_FIELD_TYPE = "unix";
4190
4351
 
4191
4352
  let workers = 0;
4192
4353
  const pendingEntries = [];
@@ -4244,15 +4405,17 @@
4244
4405
  rawExtraFieldAES,
4245
4406
  rawExtraFieldExtendedTimestamp,
4246
4407
  rawExtraFieldNTFS,
4247
- rawExtraField
4408
+ rawExtraFieldUnix,
4409
+ rawExtraField,
4248
4410
  } = entry;
4249
4411
  const { level, languageEncodingFlag, dataDescriptor } = bitFlag;
4250
4412
  rawExtraFieldZip64 = rawExtraFieldZip64 || new Uint8Array();
4251
4413
  rawExtraFieldAES = rawExtraFieldAES || new Uint8Array();
4252
4414
  rawExtraFieldExtendedTimestamp = rawExtraFieldExtendedTimestamp || new Uint8Array();
4253
4415
  rawExtraFieldNTFS = rawExtraFieldNTFS || new Uint8Array();
4416
+ rawExtraFieldUnix = entry.rawExtraFieldUnix || new Uint8Array();
4254
4417
  rawExtraField = rawExtraField || new Uint8Array();
4255
- const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraField);
4418
+ const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField);
4256
4419
  const zip64UncompressedSize = zip64 && uncompressedSize > MAX_32_BITS;
4257
4420
  const zip64CompressedSize = zip64 && compressedSize > MAX_32_BITS;
4258
4421
  const {
@@ -4279,6 +4442,7 @@
4279
4442
  rawExtraFieldAES,
4280
4443
  rawExtraFieldExtendedTimestamp,
4281
4444
  rawExtraFieldNTFS,
4445
+ rawExtraFieldUnix,
4282
4446
  rawExtraField,
4283
4447
  extendedTimestamp: rawExtraFieldExtendedTimestamp.length > 0 || rawExtraFieldNTFS.length > 0,
4284
4448
  extraFieldExtendedTimestampFlag: 0x1 + (lastAccessDate ? 0x2 : 0) + (creationDate ? 0x4 : 0),
@@ -4347,7 +4511,7 @@
4347
4511
  while (pendingAddFileCalls.size) {
4348
4512
  await Promise.allSettled(Array.from(pendingAddFileCalls));
4349
4513
  }
4350
- await closeFile(this, comment, options);
4514
+ await closeFile(zipWriter, comment, options);
4351
4515
  const preventClose = getOptionValue(zipWriter, options, OPTION_PREVENT_CLOSE);
4352
4516
  if (!preventClose) {
4353
4517
  await writable.getWriter().close();
@@ -4378,16 +4542,52 @@
4378
4542
  return writable;
4379
4543
  }
4380
4544
 
4381
- close(comment = undefined, options = {}) {
4545
+ close(comment = UNDEFINED_VALUE, options = {}) {
4382
4546
  return this.zipWriter.close(comment, options);
4383
4547
  }
4384
4548
  }
4385
4549
 
4386
4550
  async function addFile(zipWriter, name, reader, options) {
4387
4551
  name = name.trim();
4388
- const msDosCompatible = getOptionValue(zipWriter, options, PROPERTY_NAME_MS_DOS_COMPATIBLE);
4389
- const versionMadeBy = getOptionValue(zipWriter, options, PROPERTY_NAME_VERSION_MADE_BY, msDosCompatible ? 20 : 768);
4552
+ let msDosCompatible = getOptionValue(zipWriter, options, PROPERTY_NAME_MS_DOS_COMPATIBLE);
4553
+ let versionMadeBy = getOptionValue(zipWriter, options, PROPERTY_NAME_VERSION_MADE_BY, msDosCompatible ? 20 : 768);
4390
4554
  const executable = getOptionValue(zipWriter, options, PROPERTY_NAME_EXECUTABLE);
4555
+ const uid = getOptionValue(zipWriter, options, PROPERTY_NAME_UID);
4556
+ const gid = getOptionValue(zipWriter, options, PROPERTY_NAME_GID);
4557
+ let unixMode = getOptionValue(zipWriter, options, PROPERTY_NAME_UNIX_MODE);
4558
+ const unixExtraFieldType = getOptionValue(zipWriter, options, OPTION_UNIX_EXTRA_FIELD_TYPE);
4559
+ let setuid = getOptionValue(zipWriter, options, PROPERTY_NAME_SETUID);
4560
+ let setgid = getOptionValue(zipWriter, options, PROPERTY_NAME_SETGID);
4561
+ let sticky = getOptionValue(zipWriter, options, PROPERTY_NAME_STICKY);
4562
+ if (uid !== UNDEFINED_VALUE && (uid < 0 || uid > MAX_32_BITS)) {
4563
+ throw new Error(ERR_INVALID_UID);
4564
+ }
4565
+ if (gid !== UNDEFINED_VALUE && (gid < 0 || gid > MAX_32_BITS)) {
4566
+ throw new Error(ERR_INVALID_GID);
4567
+ }
4568
+ if (unixMode !== UNDEFINED_VALUE && (unixMode < 0 || unixMode > MAX_16_BITS)) {
4569
+ throw new Error(ERR_INVALID_UNIX_MODE);
4570
+ }
4571
+ if (unixExtraFieldType !== UNDEFINED_VALUE && unixExtraFieldType !== INFOZIP_EXTRA_FIELD_TYPE && unixExtraFieldType !== UNIX_EXTRA_FIELD_TYPE) {
4572
+ throw new Error(ERR_INVALID_UNIX_EXTRA_FIELD_TYPE);
4573
+ }
4574
+ let msdosAttributesRaw = getOptionValue(zipWriter, options, PROPERTY_NAME_MSDOS_ATTRIBUTES_RAW);
4575
+ let msdosAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_MSDOS_ATTRIBUTES);
4576
+ const hasUnixMetadata = uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE || unixMode !== UNDEFINED_VALUE || unixExtraFieldType;
4577
+ const hasMsDosProvided = msdosAttributesRaw !== UNDEFINED_VALUE || msdosAttributes !== UNDEFINED_VALUE;
4578
+ if (hasUnixMetadata) {
4579
+ msDosCompatible = false;
4580
+ versionMadeBy = (versionMadeBy & MAX_16_BITS) | (3 << 8);
4581
+ } else if (hasMsDosProvided) {
4582
+ msDosCompatible = true;
4583
+ versionMadeBy = (versionMadeBy & MAX_8_BITS);
4584
+ }
4585
+ if (msdosAttributesRaw !== UNDEFINED_VALUE && (msdosAttributesRaw < 0 || msdosAttributesRaw > MAX_8_BITS)) {
4586
+ throw new Error(ERR_INVALID_MSDOS_ATTRIBUTES);
4587
+ }
4588
+ if (msdosAttributes && typeof msdosAttributes !== OBJECT_TYPE) {
4589
+ throw new Error(ERR_INVALID_MSDOS_DATA);
4590
+ }
4391
4591
  if (versionMadeBy > MAX_16_BITS) {
4392
4592
  throw new Error(ERR_INVALID_VERSION);
4393
4593
  }
@@ -4413,6 +4613,34 @@
4413
4613
  externalFileAttributes = FILE_ATTR_UNIX_DEFAULT_MASK << 16;
4414
4614
  }
4415
4615
  }
4616
+ let unixExternalUpper;
4617
+ if (!msDosCompatible) {
4618
+ unixExternalUpper = (externalFileAttributes >> 16) & MAX_16_BITS;
4619
+ unixMode = unixMode === UNDEFINED_VALUE ? unixExternalUpper : (unixMode & MAX_16_BITS);
4620
+ if (setuid) {
4621
+ unixMode |= FILE_ATTR_UNIX_SETUID_MASK;
4622
+ } else {
4623
+ setuid = Boolean(unixMode & FILE_ATTR_UNIX_SETUID_MASK);
4624
+ }
4625
+ if (setgid) {
4626
+ unixMode |= FILE_ATTR_UNIX_SETGID_MASK;
4627
+ } else {
4628
+ setgid = Boolean(unixMode & FILE_ATTR_UNIX_SETGID_MASK);
4629
+ }
4630
+ if (sticky) {
4631
+ unixMode |= FILE_ATTR_UNIX_STICKY_MASK;
4632
+ } else {
4633
+ sticky = Boolean(unixMode & FILE_ATTR_UNIX_STICKY_MASK);
4634
+ }
4635
+ if (directory) {
4636
+ unixMode |= FILE_ATTR_UNIX_TYPE_DIR;
4637
+ }
4638
+ externalFileAttributes = ((unixMode & MAX_16_BITS) << 16) | (externalFileAttributes & MAX_8_BITS);
4639
+ }
4640
+ ({ msdosAttributesRaw, msdosAttributes } = normalizeMsdosAttributes(msdosAttributesRaw, msdosAttributes));
4641
+ if (hasMsDosProvided) {
4642
+ externalFileAttributes = (externalFileAttributes & MAX_32_BITS) | (msdosAttributesRaw & MAX_8_BITS);
4643
+ }
4416
4644
  const encode = getOptionValue(zipWriter, options, OPTION_ENCODE_TEXT, encodeText);
4417
4645
  let rawFilename = encode(name);
4418
4646
  if (rawFilename === UNDEFINED_VALUE) {
@@ -4575,7 +4803,16 @@
4575
4803
  compressionMethod,
4576
4804
  uncompressedSize,
4577
4805
  offset: zipWriter.offset - diskOffset,
4578
- diskNumberStart: diskNumber
4806
+ diskNumberStart: diskNumber,
4807
+ uid,
4808
+ gid,
4809
+ setuid,
4810
+ setgid,
4811
+ sticky,
4812
+ unixMode,
4813
+ msdosAttributesRaw,
4814
+ msdosAttributes,
4815
+ unixExternalUpper
4579
4816
  });
4580
4817
  const headerInfo = getHeaderInfo(options);
4581
4818
  const dataDescriptorInfo = getDataDescriptorInfo(options);
@@ -4767,7 +5004,8 @@
4767
5004
  rawExtraFieldExtendedTimestamp,
4768
5005
  extraFieldExtendedTimestampFlag,
4769
5006
  rawExtraFieldNTFS,
4770
- rawExtraFieldAES
5007
+ rawExtraFieldUnix,
5008
+ rawExtraFieldAES,
4771
5009
  } = headerInfo;
4772
5010
  const { dataDescriptorArray } = dataDescriptorInfo;
4773
5011
  const {
@@ -4799,6 +5037,15 @@
4799
5037
  msDosCompatible,
4800
5038
  internalFileAttributes,
4801
5039
  externalFileAttributes,
5040
+ uid,
5041
+ gid,
5042
+ unixMode,
5043
+ setuid,
5044
+ setgid,
5045
+ sticky,
5046
+ unixExternalUpper,
5047
+ msdosAttributesRaw,
5048
+ msdosAttributes,
4802
5049
  useCompressionStream,
4803
5050
  passThrough
4804
5051
  } = options;
@@ -4816,13 +5063,23 @@
4816
5063
  localExtraFieldZip64Length,
4817
5064
  rawExtraFieldExtendedTimestamp,
4818
5065
  rawExtraFieldNTFS,
5066
+ rawExtraFieldUnix,
4819
5067
  rawExtraFieldAES,
4820
5068
  rawExtraField,
4821
5069
  extendedTimestamp,
4822
5070
  msDosCompatible,
4823
5071
  internalFileAttributes,
4824
5072
  externalFileAttributes,
4825
- diskNumberStart
5073
+ diskNumberStart,
5074
+ uid,
5075
+ gid,
5076
+ unixMode,
5077
+ setuid,
5078
+ setgid,
5079
+ sticky,
5080
+ unixExternalUpper,
5081
+ msdosAttributesRaw,
5082
+ msdosAttributes
4826
5083
  };
4827
5084
  let {
4828
5085
  signature,
@@ -4845,7 +5102,7 @@
4845
5102
  password,
4846
5103
  encryptionStrength,
4847
5104
  zipCrypto: encrypted && zipCrypto,
4848
- passwordVerification: encrypted && zipCrypto && (rawLastModDate >> 8) & 0xFF,
5105
+ passwordVerification: encrypted && zipCrypto && (rawLastModDate >> 8) & MAX_8_BITS,
4849
5106
  signed: !passThrough,
4850
5107
  compressed: compressed && !passThrough,
4851
5108
  encrypted: encrypted && !passThrough,
@@ -5024,6 +5281,49 @@
5024
5281
  } else {
5025
5282
  rawExtraFieldNTFS = rawExtraFieldExtendedTimestamp = new Uint8Array();
5026
5283
  }
5284
+ let rawExtraFieldUnix;
5285
+ try {
5286
+ const { uid, gid, unixMode, setuid, setgid, sticky, unixExtraFieldType } = options;
5287
+ if (unixExtraFieldType && (uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE || unixMode !== UNDEFINED_VALUE)) {
5288
+ const uidBytes = packUnixId(uid);
5289
+ const gidBytes = packUnixId(gid);
5290
+ let modeArray = new Uint8Array();
5291
+ if (unixExtraFieldType == UNIX_EXTRA_FIELD_TYPE && unixMode !== UNDEFINED_VALUE) {
5292
+ let modeToWrite = unixMode & MAX_16_BITS;
5293
+ if (setuid) {
5294
+ modeToWrite |= FILE_ATTR_UNIX_SETUID_MASK;
5295
+ }
5296
+ if (setgid) {
5297
+ modeToWrite |= FILE_ATTR_UNIX_SETGID_MASK;
5298
+ }
5299
+ if (sticky) {
5300
+ modeToWrite |= FILE_ATTR_UNIX_STICKY_MASK;
5301
+ }
5302
+ modeArray = new Uint8Array(2);
5303
+ const modeDataView = new DataView(modeArray.buffer);
5304
+ modeDataView.setUint16(0, modeToWrite, true);
5305
+ }
5306
+ const payloadLength = 3 + uidBytes.length + gidBytes.length + modeArray.length;
5307
+ rawExtraFieldUnix = new Uint8Array(4 + payloadLength);
5308
+ const rawExtraFieldUnixView = getDataView(rawExtraFieldUnix);
5309
+ setUint16(rawExtraFieldUnixView, 0, unixExtraFieldType == INFOZIP_EXTRA_FIELD_TYPE ? EXTRAFIELD_TYPE_INFOZIP : EXTRAFIELD_TYPE_UNIX);
5310
+ setUint16(rawExtraFieldUnixView, 2, payloadLength);
5311
+ setUint8(rawExtraFieldUnixView, 4, 1);
5312
+ setUint8(rawExtraFieldUnixView, 5, uidBytes.length);
5313
+ let offset = 6;
5314
+ arraySet(rawExtraFieldUnix, uidBytes, offset);
5315
+ offset += uidBytes.length;
5316
+ setUint8(rawExtraFieldUnixView, offset, gidBytes.length);
5317
+ offset++;
5318
+ arraySet(rawExtraFieldUnix, gidBytes, offset);
5319
+ offset += gidBytes.length;
5320
+ arraySet(rawExtraFieldUnix, modeArray, offset);
5321
+ } else {
5322
+ rawExtraFieldUnix = new Uint8Array();
5323
+ }
5324
+ } catch {
5325
+ rawExtraFieldUnix = new Uint8Array();
5326
+ }
5027
5327
  if (compressionMethod === UNDEFINED_VALUE) {
5028
5328
  compressionMethod = compressed ? COMPRESSION_METHOD_DEFLATE : COMPRESSION_METHOD_STORE;
5029
5329
  }
@@ -5036,7 +5336,7 @@
5036
5336
  compressionMethod = COMPRESSION_METHOD_AES;
5037
5337
  }
5038
5338
  const localExtraFieldZip64Length = zip64ExtraFieldComplete ? getLength(rawExtraFieldZip64) : 0;
5039
- const extraFieldLength = localExtraFieldZip64Length + getLength(rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraField);
5339
+ const extraFieldLength = localExtraFieldZip64Length + getLength(rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField);
5040
5340
  const {
5041
5341
  headerArray,
5042
5342
  headerView,
@@ -5069,6 +5369,8 @@
5069
5369
  localHeaderOffset += getLength(rawExtraFieldExtendedTimestamp);
5070
5370
  arraySet(localHeaderArray, rawExtraFieldNTFS, localHeaderOffset);
5071
5371
  localHeaderOffset += getLength(rawExtraFieldNTFS);
5372
+ arraySet(localHeaderArray, rawExtraFieldUnix, localHeaderOffset);
5373
+ localHeaderOffset += getLength(rawExtraFieldUnix);
5072
5374
  arraySet(localHeaderArray, rawExtraField, localHeaderOffset);
5073
5375
  if (dataDescriptor) {
5074
5376
  setUint32(localHeaderView, HEADER_OFFSET_COMPRESSED_SIZE + 4, 0);
@@ -5090,6 +5392,7 @@
5090
5392
  localExtraFieldZip64Length,
5091
5393
  rawExtraFieldExtendedTimestamp,
5092
5394
  rawExtraFieldNTFS,
5395
+ rawExtraFieldUnix,
5093
5396
  rawExtraFieldAES,
5094
5397
  extraFieldLength
5095
5398
  };
@@ -5116,6 +5419,46 @@
5116
5419
  entryInfo.metadataSize += extraBytesLength;
5117
5420
  }
5118
5421
 
5422
+ function packUnixId(id) {
5423
+ if (id === UNDEFINED_VALUE) {
5424
+ return new Uint8Array();
5425
+ } else {
5426
+ const dataArray = new Uint8Array(4);
5427
+ const dataView = getDataView(dataArray);
5428
+ dataView.setUint32(0, id, true);
5429
+ let length = 4;
5430
+ while (length > 1 && dataArray[length - 1] === 0) {
5431
+ length--;
5432
+ }
5433
+ return dataArray.subarray(0, length);
5434
+ }
5435
+ }
5436
+
5437
+ function normalizeMsdosAttributes(msdosAttributesRaw, msdosAttributes) {
5438
+ if (msdosAttributesRaw !== UNDEFINED_VALUE) {
5439
+ msdosAttributesRaw = msdosAttributesRaw & MAX_8_BITS;
5440
+ } else if (msdosAttributes !== UNDEFINED_VALUE) {
5441
+ const { readOnly, hidden, system, directory: msdDir, archive } = msdosAttributes;
5442
+ let raw = 0;
5443
+ if (readOnly) raw |= FILE_ATTR_MSDOS_READONLY_MASK;
5444
+ if (hidden) raw |= FILE_ATTR_MSDOS_HIDDEN_MASK;
5445
+ if (system) raw |= FILE_ATTR_MSDOS_SYSTEM_MASK;
5446
+ if (msdDir) raw |= FILE_ATTR_MSDOS_DIR_MASK;
5447
+ if (archive) raw |= FILE_ATTR_MSDOS_ARCHIVE_MASK;
5448
+ msdosAttributesRaw = raw & MAX_8_BITS;
5449
+ }
5450
+ if (msdosAttributes === UNDEFINED_VALUE) {
5451
+ msdosAttributes = {
5452
+ readOnly: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_READONLY_MASK),
5453
+ hidden: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_HIDDEN_MASK),
5454
+ system: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_SYSTEM_MASK),
5455
+ directory: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_DIR_MASK),
5456
+ archive: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_ARCHIVE_MASK)
5457
+ };
5458
+ }
5459
+ return { msdosAttributesRaw, msdosAttributes };
5460
+ }
5461
+
5119
5462
  function getDataDescriptorInfo({
5120
5463
  zip64,
5121
5464
  dataDescriptor,
@@ -5273,6 +5616,7 @@
5273
5616
  rawExtraFieldAES,
5274
5617
  rawComment,
5275
5618
  rawExtraFieldNTFS,
5619
+ rawExtraFieldUnix,
5276
5620
  rawExtraField,
5277
5621
  extendedTimestamp,
5278
5622
  extraFieldExtendedTimestampFlag,
@@ -5297,6 +5641,7 @@
5297
5641
  rawExtraFieldZip64,
5298
5642
  rawExtraFieldAES,
5299
5643
  rawExtraFieldNTFS,
5644
+ rawExtraFieldUnix,
5300
5645
  rawExtraFieldTimestamp,
5301
5646
  rawExtraField);
5302
5647
  }
@@ -5312,6 +5657,7 @@
5312
5657
  rawExtraFieldAES,
5313
5658
  rawExtraFieldExtendedTimestamp,
5314
5659
  rawExtraFieldNTFS,
5660
+ rawExtraFieldUnix,
5315
5661
  rawExtraField,
5316
5662
  rawComment,
5317
5663
  versionMadeBy,
@@ -5328,7 +5674,7 @@
5328
5674
  uncompressedSize,
5329
5675
  compressedSize
5330
5676
  } = fileEntry;
5331
- const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraField);
5677
+ const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField);
5332
5678
  setUint32(directoryView, offset, CENTRAL_FILE_HEADER_SIGNATURE);
5333
5679
  setUint16(directoryView, offset + 4, versionMadeBy);
5334
5680
  if (!zip64UncompressedSize) {
@@ -5363,9 +5709,12 @@
5363
5709
  directoryOffset += getLength(rawExtraFieldExtendedTimestamp);
5364
5710
  arraySet(directoryArray, rawExtraFieldNTFS, directoryOffset);
5365
5711
  directoryOffset += getLength(rawExtraFieldNTFS);
5712
+ arraySet(directoryArray, rawExtraFieldUnix, directoryOffset);
5713
+ directoryOffset += getLength(rawExtraFieldUnix);
5366
5714
  arraySet(directoryArray, rawExtraField, directoryOffset);
5367
5715
  directoryOffset += getLength(rawExtraField);
5368
5716
  arraySet(directoryArray, rawComment, directoryOffset);
5717
+ directoryOffset += getLength(rawComment);
5369
5718
  if (offset - directoryDiskOffset > writer.availableSize) {
5370
5719
  writer.availableSize = 0;
5371
5720
  await writeData(writer, directoryArray.slice(directoryDiskOffset, offset));