@zip.js/zip.js 2.7.56 → 2.7.58

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;
@@ -2558,6 +2559,7 @@
2558
2559
  const ERR_HTTP_STATUS = "HTTP error ";
2559
2560
  const ERR_HTTP_RANGE = "HTTP Range not supported";
2560
2561
  const ERR_ITERATOR_COMPLETED_TOO_SOON = "Writer iterator completed too soon";
2562
+ const ERR_WRITER_NOT_INITIALIZED = "Writer not initialized";
2561
2563
 
2562
2564
  const CONTENT_TYPE_TEXT_PLAIN = "text/plain";
2563
2565
  const HTTP_HEADER_CONTENT_LENGTH = "Content-Length";
@@ -2595,8 +2597,10 @@
2595
2597
  async pull(controller) {
2596
2598
  const { offset = 0, size, diskNumberStart } = readable;
2597
2599
  const { chunkOffset } = this;
2598
- controller.enqueue(await readUint8Array(reader, offset + chunkOffset, Math.min(chunkSize, size - chunkOffset), diskNumberStart));
2599
- if (chunkOffset + chunkSize > size) {
2600
+ const dataSize = size === UNDEFINED_VALUE ? chunkSize : Math.min(chunkSize, size - chunkOffset);
2601
+ const data = await readUint8Array(reader, offset + chunkOffset, dataSize, diskNumberStart);
2602
+ controller.enqueue(data);
2603
+ if ((chunkOffset + chunkSize > size) || (size === UNDEFINED_VALUE && !data.length && dataSize)) {
2600
2604
  controller.close();
2601
2605
  } else {
2602
2606
  this.chunkOffset += chunkSize;
@@ -2614,6 +2618,9 @@
2614
2618
  const writer = this;
2615
2619
  const writable = new WritableStream({
2616
2620
  write(chunk) {
2621
+ if (!writer.initialized) {
2622
+ throw new Error(ERR_WRITER_NOT_INITIALIZED);
2623
+ }
2617
2624
  return writer.writeUint8Array(chunk);
2618
2625
  }
2619
2626
  });
@@ -3376,12 +3383,14 @@
3376
3383
  const PROPERTY_NAME_VERSION = "version";
3377
3384
  const PROPERTY_NAME_VERSION_MADE_BY = "versionMadeBy";
3378
3385
  const PROPERTY_NAME_ZIPCRYPTO = "zipCrypto";
3386
+ const PROPERTY_NAME_DIRECTORY = "directory";
3387
+ const PROPERTY_NAME_EXECUTABLE = "executable";
3379
3388
 
3380
3389
  const PROPERTY_NAMES = [
3381
3390
  PROPERTY_NAME_FILENAME, PROPERTY_NAME_RAW_FILENAME, PROPERTY_NAME_COMPPRESSED_SIZE, PROPERTY_NAME_UNCOMPPRESSED_SIZE,
3382
3391
  PROPERTY_NAME_LAST_MODIFICATION_DATE, PROPERTY_NAME_RAW_LAST_MODIFICATION_DATE, PROPERTY_NAME_COMMENT, PROPERTY_NAME_RAW_COMMENT,
3383
3392
  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"];
3393
+ 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
3394
 
3386
3395
  class Entry {
3387
3396
 
@@ -4226,10 +4235,37 @@
4226
4235
 
4227
4236
  async function addFile(zipWriter, name, reader, options) {
4228
4237
  name = name.trim();
4229
- if (options.directory && (!name.endsWith(DIRECTORY_SIGNATURE))) {
4230
- name += DIRECTORY_SIGNATURE;
4231
- } else {
4232
- options.directory = name.endsWith(DIRECTORY_SIGNATURE);
4238
+ const msDosCompatible = getOptionValue(zipWriter, options, PROPERTY_NAME_MS_DOS_COMPATIBLE);
4239
+ const versionMadeBy = getOptionValue(zipWriter, options, PROPERTY_NAME_VERSION_MADE_BY, msDosCompatible ? 20 : 768);
4240
+ const executable = getOptionValue(zipWriter, options, PROPERTY_NAME_EXECUTABLE);
4241
+ if (versionMadeBy > MAX_16_BITS) {
4242
+ throw new Error(ERR_INVALID_VERSION);
4243
+ }
4244
+ let externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES, 0);
4245
+ if (externalFileAttributes === 0) {
4246
+ externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTE, 0);
4247
+ }
4248
+ if (!options.directory && name.endsWith(DIRECTORY_SIGNATURE)) {
4249
+ options.directory = true;
4250
+ }
4251
+ const directory = getOptionValue(zipWriter, options, PROPERTY_NAME_DIRECTORY);
4252
+ if (directory) {
4253
+ if (!name.endsWith(DIRECTORY_SIGNATURE)) {
4254
+ name += DIRECTORY_SIGNATURE;
4255
+ }
4256
+ if (externalFileAttributes === 0) {
4257
+ if (msDosCompatible) {
4258
+ externalFileAttributes = FILE_ATTR_MSDOS_DIR_MASK;
4259
+ } else {
4260
+ externalFileAttributes = FILE_ATTR_UNIX_DIR_MASK << 16;
4261
+ }
4262
+ }
4263
+ } else if (!msDosCompatible && externalFileAttributes === 0) {
4264
+ if (executable) {
4265
+ externalFileAttributes = (FILE_ATTR_UNIX_EXECUTABLE_MASK | FILE_ATTR_UNIX_DEFAULT_MASK) << 16;
4266
+ } else {
4267
+ externalFileAttributes = FILE_ATTR_UNIX_DEFAULT_MASK << 16;
4268
+ }
4233
4269
  }
4234
4270
  const encode = getOptionValue(zipWriter, options, "encodeText", encodeText);
4235
4271
  let rawFilename = encode(name);
@@ -4251,22 +4287,13 @@
4251
4287
  if (version > MAX_16_BITS) {
4252
4288
  throw new Error(ERR_INVALID_VERSION);
4253
4289
  }
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
4290
  const lastModDate = getOptionValue(zipWriter, options, PROPERTY_NAME_LAST_MODIFICATION_DATE, new Date());
4259
4291
  const lastAccessDate = getOptionValue(zipWriter, options, PROPERTY_NAME_LAST_ACCESS_DATE);
4260
4292
  const creationDate = getOptionValue(zipWriter, options, PROPERTY_NAME_CREATION_DATE);
4261
- const msDosCompatible = getOptionValue(zipWriter, options, PROPERTY_NAME_MS_DOS_COMPATIBLE, true);
4262
4293
  let internalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES, 0);
4263
4294
  if (internalFileAttributes === 0) {
4264
4295
  internalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTE, 0);
4265
4296
  }
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
4297
  const passThrough = getOptionValue(zipWriter, options, "passThrough");
4271
4298
  let password, rawPassword;
4272
4299
  if (!passThrough) {
@@ -4589,6 +4616,7 @@
4589
4616
  zipCrypto,
4590
4617
  dataDescriptor,
4591
4618
  directory,
4619
+ executable,
4592
4620
  versionMadeBy,
4593
4621
  rawComment,
4594
4622
  rawExtraField,
@@ -4610,6 +4638,7 @@
4610
4638
  versionMadeBy,
4611
4639
  zip64,
4612
4640
  directory: Boolean(directory),
4641
+ executable: Boolean(executable),
4613
4642
  filenameUTF8: true,
4614
4643
  rawFilename,
4615
4644
  commentUTF8: true,
@@ -5070,13 +5099,11 @@
5070
5099
  rawComment,
5071
5100
  versionMadeBy,
5072
5101
  headerArray,
5073
- directory,
5074
5102
  zip64,
5075
5103
  zip64UncompressedSize,
5076
5104
  zip64CompressedSize,
5077
5105
  zip64DiskNumberStart,
5078
5106
  zip64Offset,
5079
- msDosCompatible,
5080
5107
  internalFileAttributes,
5081
5108
  externalFileAttributes,
5082
5109
  diskNumberStart,
@@ -5100,8 +5127,6 @@
5100
5127
  setUint16(directoryView, offset + 36, internalFileAttributes);
5101
5128
  if (externalFileAttributes) {
5102
5129
  setUint32(directoryView, offset + 38, externalFileAttributes);
5103
- } else if (directory && msDosCompatible) {
5104
- setUint8(directoryView, offset + 38, FILE_ATTR_MSDOS_DIR_MASK);
5105
5130
  }
5106
5131
  setUint32(directoryView, offset + 42, zip64 && zip64Offset ? MAX_32_BITS : fileEntryOffset);
5107
5132
  arraySet(directoryArray, rawFilename, offset + 46);
@@ -6180,6 +6205,7 @@
6180
6205
  exports.ERR_UNSUPPORTED_COMPRESSION = ERR_UNSUPPORTED_COMPRESSION;
6181
6206
  exports.ERR_UNSUPPORTED_ENCRYPTION = ERR_UNSUPPORTED_ENCRYPTION;
6182
6207
  exports.ERR_UNSUPPORTED_FORMAT = ERR_UNSUPPORTED_FORMAT;
6208
+ exports.ERR_WRITER_NOT_INITIALIZED = ERR_WRITER_NOT_INITIALIZED;
6183
6209
  exports.HttpRangeReader = HttpRangeReader;
6184
6210
  exports.HttpReader = HttpReader;
6185
6211
  exports.Reader = Reader;