@zip.js/zip.js 2.7.22 → 2.7.23

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
@@ -7748,7 +7748,7 @@
7748
7748
  localDirectory.rawExtraField = localDirectory.extraFieldLength ?
7749
7749
  await readUint8Array(reader, offset + 30 + localDirectory.filenameLength, localDirectory.extraFieldLength, diskNumberStart) :
7750
7750
  new Uint8Array();
7751
- await readCommonFooter(zipEntry, localDirectory, dataView, 4);
7751
+ await readCommonFooter(zipEntry, localDirectory, dataView, 4, true);
7752
7752
  Object.assign(fileEntry, {
7753
7753
  lastAccessDate: localDirectory.lastAccessDate,
7754
7754
  creationDate: localDirectory.creationDate
@@ -7835,7 +7835,7 @@
7835
7835
  });
7836
7836
  }
7837
7837
 
7838
- async function readCommonFooter(fileEntry, directory, dataView, offset) {
7838
+ async function readCommonFooter(fileEntry, directory, dataView, offset, localDirectory) {
7839
7839
  const { rawExtraField } = directory;
7840
7840
  const extraField = directory.extraField = new Map();
7841
7841
  const rawExtraFieldView = getDataView$1(new Uint8Array(rawExtraField));
@@ -7888,7 +7888,7 @@
7888
7888
  }
7889
7889
  const extraFieldExtendedTimestamp = extraField.get(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
7890
7890
  if (extraFieldExtendedTimestamp) {
7891
- readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory);
7891
+ readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory);
7892
7892
  directory.extraFieldExtendedTimestamp = extraFieldExtendedTimestamp;
7893
7893
  }
7894
7894
  }
@@ -7979,23 +7979,28 @@
7979
7979
  }
7980
7980
  }
7981
7981
 
7982
- function readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory) {
7982
+ function readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory) {
7983
7983
  const extraFieldView = getDataView$1(extraFieldExtendedTimestamp.data);
7984
7984
  const flags = getUint8(extraFieldView, 0);
7985
7985
  const timeProperties = [];
7986
7986
  const timeRawProperties = [];
7987
- if ((flags & 0x1) == 0x1) {
7987
+ if (localDirectory) {
7988
+ if ((flags & 0x1) == 0x1) {
7989
+ timeProperties.push(PROPERTY_NAME_LAST_MODIFICATION_DATE);
7990
+ timeRawProperties.push(PROPERTY_NAME_RAW_LAST_MODIFICATION_DATE);
7991
+ }
7992
+ if ((flags & 0x2) == 0x2) {
7993
+ timeProperties.push(PROPERTY_NAME_LAST_ACCESS_DATE);
7994
+ timeRawProperties.push(PROPERTY_NAME_RAW_LAST_ACCESS_DATE);
7995
+ }
7996
+ if ((flags & 0x4) == 0x4) {
7997
+ timeProperties.push(PROPERTY_NAME_CREATION_DATE);
7998
+ timeRawProperties.push(PROPERTY_NAME_RAW_CREATION_DATE);
7999
+ }
8000
+ } else if (extraFieldExtendedTimestamp.data.length >= 5) {
7988
8001
  timeProperties.push(PROPERTY_NAME_LAST_MODIFICATION_DATE);
7989
8002
  timeRawProperties.push(PROPERTY_NAME_RAW_LAST_MODIFICATION_DATE);
7990
8003
  }
7991
- if ((flags & 0x2) == 0x2) {
7992
- timeProperties.push(PROPERTY_NAME_LAST_ACCESS_DATE);
7993
- timeRawProperties.push(PROPERTY_NAME_RAW_LAST_ACCESS_DATE);
7994
- }
7995
- if ((flags & 0x4) == 0x4) {
7996
- timeProperties.push(PROPERTY_NAME_CREATION_DATE);
7997
- timeRawProperties.push(PROPERTY_NAME_RAW_CREATION_DATE);
7998
- }
7999
8004
  let offset = 1;
8000
8005
  timeProperties.forEach((propertyName, indexProperty) => {
8001
8006
  if (extraFieldExtendedTimestamp.data.length >= offset + 4) {
@@ -8478,6 +8483,7 @@
8478
8483
  version,
8479
8484
  compressionMethod,
8480
8485
  rawExtraFieldExtendedTimestamp,
8486
+ extraFieldExtendedTimestampFlag,
8481
8487
  rawExtraFieldNTFS,
8482
8488
  rawExtraFieldAES
8483
8489
  } = headerInfo;
@@ -8609,6 +8615,7 @@
8609
8615
  headerArray,
8610
8616
  signature,
8611
8617
  rawExtraFieldZip64,
8618
+ extraFieldExtendedTimestampFlag,
8612
8619
  zip64UncompressedSize,
8613
8620
  zip64CompressedSize,
8614
8621
  zip64Offset,
@@ -8631,7 +8638,7 @@
8631
8638
  directory,
8632
8639
  rawExtraField,
8633
8640
  encryptionStrength,
8634
- extendedTimestamp,
8641
+ extendedTimestamp
8635
8642
  } = options;
8636
8643
  const compressed = level !== 0 && !directory;
8637
8644
  const encrypted = Boolean(password && getLength(password));
@@ -8648,19 +8655,23 @@
8648
8655
  }
8649
8656
  let rawExtraFieldNTFS;
8650
8657
  let rawExtraFieldExtendedTimestamp;
8658
+ let extraFieldExtendedTimestampFlag;
8651
8659
  if (extendedTimestamp) {
8652
8660
  rawExtraFieldExtendedTimestamp = new Uint8Array(9 + (lastAccessDate ? 4 : 0) + (creationDate ? 4 : 0));
8653
8661
  const extraFieldExtendedTimestampView = getDataView(rawExtraFieldExtendedTimestamp);
8654
8662
  setUint16(extraFieldExtendedTimestampView, 0, EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
8655
8663
  setUint16(extraFieldExtendedTimestampView, 2, getLength(rawExtraFieldExtendedTimestamp) - 4);
8656
- const extraFieldExtendedTimestampFlag = 0x1 + (lastAccessDate ? 0x2 : 0) + (creationDate ? 0x4 : 0);
8664
+ extraFieldExtendedTimestampFlag = 0x1 + (lastAccessDate ? 0x2 : 0) + (creationDate ? 0x4 : 0);
8657
8665
  setUint8(extraFieldExtendedTimestampView, 4, extraFieldExtendedTimestampFlag);
8658
- setUint32(extraFieldExtendedTimestampView, 5, Math.floor(lastModDate.getTime() / 1000));
8666
+ let offset = 5;
8667
+ setUint32(extraFieldExtendedTimestampView, offset, Math.floor(lastModDate.getTime() / 1000));
8668
+ offset += 4;
8659
8669
  if (lastAccessDate) {
8660
- setUint32(extraFieldExtendedTimestampView, 9, Math.floor(lastAccessDate.getTime() / 1000));
8670
+ setUint32(extraFieldExtendedTimestampView, offset, Math.floor(lastAccessDate.getTime() / 1000));
8671
+ offset += 4;
8661
8672
  }
8662
8673
  if (creationDate) {
8663
- setUint32(extraFieldExtendedTimestampView, 13, Math.floor(creationDate.getTime() / 1000));
8674
+ setUint32(extraFieldExtendedTimestampView, offset, Math.floor(creationDate.getTime() / 1000));
8664
8675
  }
8665
8676
  try {
8666
8677
  rawExtraFieldNTFS = new Uint8Array(36);
@@ -8741,6 +8752,7 @@
8741
8752
  compressed,
8742
8753
  version,
8743
8754
  compressionMethod,
8755
+ extraFieldExtendedTimestampFlag,
8744
8756
  rawExtraFieldExtendedTimestamp,
8745
8757
  rawExtraFieldNTFS,
8746
8758
  rawExtraFieldAES
@@ -8877,23 +8889,38 @@
8877
8889
  let directoryDataLength = 0;
8878
8890
  let directoryOffset = zipWriter.offset - diskOffset;
8879
8891
  let filesLength = files.size;
8880
- for (const [, {
8881
- rawFilename,
8882
- rawExtraFieldZip64,
8883
- rawExtraFieldAES,
8884
- rawExtraField,
8885
- rawComment,
8886
- rawExtraFieldExtendedTimestamp,
8887
- rawExtraFieldNTFS
8888
- }] of files) {
8892
+ for (const [, fileEntry] of files) {
8893
+ const {
8894
+ rawFilename,
8895
+ rawExtraFieldZip64,
8896
+ rawExtraFieldAES,
8897
+ rawComment,
8898
+ rawExtraFieldNTFS,
8899
+ rawExtraField,
8900
+ extendedTimestamp,
8901
+ extraFieldExtendedTimestampFlag,
8902
+ lastModDate
8903
+ } = fileEntry;
8904
+ let rawExtraFieldTimestamp;
8905
+ if (extendedTimestamp) {
8906
+ rawExtraFieldTimestamp = new Uint8Array(9);
8907
+ const extraFieldExtendedTimestampView = getDataView(rawExtraFieldTimestamp);
8908
+ setUint16(extraFieldExtendedTimestampView, 0, EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
8909
+ setUint16(extraFieldExtendedTimestampView, 2, 5);
8910
+ setUint8(extraFieldExtendedTimestampView, 4, extraFieldExtendedTimestampFlag);
8911
+ setUint32(extraFieldExtendedTimestampView, 5, Math.floor(lastModDate.getTime() / 1000));
8912
+ } else {
8913
+ rawExtraFieldTimestamp = new Uint8Array();
8914
+ }
8915
+ fileEntry.rawExtraFieldCDExtendedTimestamp = rawExtraFieldTimestamp;
8889
8916
  directoryDataLength += 46 +
8890
8917
  getLength(
8891
8918
  rawFilename,
8892
8919
  rawComment,
8893
8920
  rawExtraFieldZip64,
8894
8921
  rawExtraFieldAES,
8895
- rawExtraFieldExtendedTimestamp,
8896
8922
  rawExtraFieldNTFS,
8923
+ rawExtraFieldTimestamp,
8897
8924
  rawExtraField);
8898
8925
  }
8899
8926
  const directoryArray = new Uint8Array(directoryDataLength);
@@ -8906,6 +8933,7 @@
8906
8933
  rawFilename,
8907
8934
  rawExtraFieldZip64,
8908
8935
  rawExtraFieldAES,
8936
+ rawExtraFieldCDExtendedTimestamp,
8909
8937
  rawExtraFieldNTFS,
8910
8938
  rawExtraField,
8911
8939
  rawComment,
@@ -8920,24 +8948,11 @@
8920
8948
  msDosCompatible,
8921
8949
  internalFileAttribute,
8922
8950
  externalFileAttribute,
8923
- extendedTimestamp,
8924
- lastModDate,
8925
8951
  diskNumberStart,
8926
8952
  uncompressedSize,
8927
8953
  compressedSize
8928
8954
  } = fileEntry;
8929
- let rawExtraFieldExtendedTimestamp;
8930
- if (extendedTimestamp) {
8931
- rawExtraFieldExtendedTimestamp = new Uint8Array(9);
8932
- const extraFieldExtendedTimestampView = getDataView(rawExtraFieldExtendedTimestamp);
8933
- setUint16(extraFieldExtendedTimestampView, 0, EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
8934
- setUint16(extraFieldExtendedTimestampView, 2, getLength(rawExtraFieldExtendedTimestamp) - 4);
8935
- setUint8(extraFieldExtendedTimestampView, 4, 0x1);
8936
- setUint32(extraFieldExtendedTimestampView, 5, Math.floor(lastModDate.getTime() / 1000));
8937
- } else {
8938
- rawExtraFieldExtendedTimestamp = new Uint8Array();
8939
- }
8940
- const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraField);
8955
+ const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldCDExtendedTimestamp, rawExtraFieldNTFS, rawExtraField);
8941
8956
  setUint32(directoryView, offset, CENTRAL_FILE_HEADER_SIGNATURE);
8942
8957
  setUint16(directoryView, offset + 4, versionMadeBy);
8943
8958
  const headerView = getDataView(headerArray);
@@ -8961,9 +8976,9 @@
8961
8976
  arraySet(directoryArray, rawFilename, offset + 46);
8962
8977
  arraySet(directoryArray, rawExtraFieldZip64, offset + 46 + getLength(rawFilename));
8963
8978
  arraySet(directoryArray, rawExtraFieldAES, offset + 46 + getLength(rawFilename, rawExtraFieldZip64));
8964
- arraySet(directoryArray, rawExtraFieldExtendedTimestamp, offset + 46 + getLength(rawFilename, rawExtraFieldZip64, rawExtraFieldAES));
8965
- arraySet(directoryArray, rawExtraFieldNTFS, offset + 46 + getLength(rawFilename, rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp));
8966
- arraySet(directoryArray, rawExtraField, offset + 46 + getLength(rawFilename, rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS));
8979
+ arraySet(directoryArray, rawExtraFieldCDExtendedTimestamp, offset + 46 + getLength(rawFilename, rawExtraFieldZip64, rawExtraFieldAES));
8980
+ arraySet(directoryArray, rawExtraFieldNTFS, offset + 46 + getLength(rawFilename, rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldCDExtendedTimestamp));
8981
+ arraySet(directoryArray, rawExtraField, offset + 46 + getLength(rawFilename, rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldCDExtendedTimestamp, rawExtraFieldNTFS));
8967
8982
  arraySet(directoryArray, rawComment, offset + 46 + getLength(rawFilename) + extraFieldLength);
8968
8983
  const directoryEntryLength = 46 + getLength(rawFilename, rawComment) + extraFieldLength;
8969
8984
  if (offset - directoryDiskOffset > writer.availableSize) {