@zip.js/zip.js 2.8.46 → 2.8.47

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.
Files changed (46) hide show
  1. package/deno.json +1 -1
  2. package/dist/zip-core-external.js +85 -9
  3. package/dist/zip-core-external.min.js +1 -1
  4. package/dist/zip-core.js +95 -8
  5. package/dist/zip-core.min.js +1 -1
  6. package/dist/zip-fs-core-external.js +85 -9
  7. package/dist/zip-fs-core-external.min.js +1 -1
  8. package/dist/zip-fs-core.js +86 -8
  9. package/dist/zip-fs-core.min.js +1 -1
  10. package/dist/zip-fs-external.js +85 -9
  11. package/dist/zip-fs-external.min.js +1 -1
  12. package/dist/zip-fs-native.js +99 -10
  13. package/dist/zip-fs-native.min.js +1 -1
  14. package/dist/zip-fs.js +98 -9
  15. package/dist/zip-fs.min.js +1 -1
  16. package/dist/zip-legacy.js +97 -10
  17. package/dist/zip-legacy.min.js +1 -1
  18. package/dist/zip-native.js +97 -10
  19. package/dist/zip-native.min.js +1 -1
  20. package/dist/zip-web-worker-native.js +1 -1
  21. package/dist/zip-web-worker.js +1 -1
  22. package/dist/zip.js +96 -9
  23. package/dist/zip.min.js +1 -1
  24. package/index-native.cjs +99 -10
  25. package/index-native.min.js +1 -1
  26. package/index.cjs +98 -9
  27. package/index.d.cts +141 -0
  28. package/index.d.ts +141 -0
  29. package/index.min.js +1 -1
  30. package/lib/core/codec-pool.js +6 -3
  31. package/lib/core/codec-worker.js +2 -1
  32. package/lib/core/constants.js +2 -0
  33. package/lib/core/options.js +4 -0
  34. package/lib/core/streams/codec-stream.js +2 -0
  35. package/lib/core/streams/common-crypto.js +2 -1
  36. package/lib/core/streams/zip-entry-stream.js +4 -2
  37. package/lib/core/util/sync-access-handle-temp-stream.js +2 -1
  38. package/lib/core/web-worker-inline-native.js +1 -1
  39. package/lib/core/web-worker-inline-wasm.js +1 -1
  40. package/lib/core/zip-fs.js +1 -1
  41. package/lib/core/zip-reader.js +58 -5
  42. package/lib/core/zip-writer.js +43 -8
  43. package/lib/zip-core-base.js +2 -1
  44. package/lib/zip-core-reader.js +2 -1
  45. package/lib/zip-core-writer.js +10 -1
  46. package/package.json +1 -1
@@ -88,6 +88,7 @@ import {
88
88
  SPLIT_ZIP_FILE_SIGNATURE,
89
89
  LOCAL_FILE_HEADER_SIGNATURE,
90
90
  DATA_DESCRIPTOR_RECORD_SIGNATURE,
91
+ DIGITAL_SIGNATURE_RECORD_SIGNATURE,
91
92
  CENTRAL_FILE_HEADER_SIGNATURE,
92
93
  CENTRAL_FILE_HEADER_LENGTH,
93
94
  END_OF_CENTRAL_DIR_SIGNATURE,
@@ -146,7 +147,8 @@ import { getRegisteredCodec } from "./codec-registry.js";
146
147
  import { supportsDeflate } from "./codec-worker.js";
147
148
  import {
148
149
  CODEC_DEFLATE,
149
- runWorker
150
+ runWorker,
151
+ ERR_UNSUPPORTED_CRYPTO_API
150
152
  } from "./codec-pool.js";
151
153
  import {
152
154
  initStream,
@@ -209,7 +211,8 @@ import {
209
211
  OPTION_OFFSET,
210
212
  OPTION_USDZ,
211
213
  OPTION_UNIX_EXTRA_FIELD_TYPE,
212
- OPTION_LOCAL_EXTRA_FIELD
214
+ OPTION_LOCAL_EXTRA_FIELD,
215
+ OPTION_SIGN_CENTRAL_DIRECTORY
213
216
  } from "./options.js";
214
217
 
215
218
  const ERR_DUPLICATED_NAME = "File already exists";
@@ -237,6 +240,7 @@ const ERR_INVALID_UNIX_EXTRA_FIELD_TYPE = "Invalid unixExtraFieldType (must be '
237
240
  const ERR_INVALID_UNIX_ID_SIZE = "uid/gid must be 0..65535 for unixExtraFieldType 'unix' (use 'infozip' for larger ids)";
238
241
  const ERR_INVALID_MSDOS_ATTRIBUTES = "Invalid msdosAttributesRaw (must be integer 0..255)";
239
242
  const ERR_INVALID_MSDOS_DATA = "Invalid msdosAttributes (must be an object with boolean flags)";
243
+ const ERR_INVALID_SIGNATURE_DATA = "Signature data exceeds 64KB";
240
244
 
241
245
  const EXTRAFIELD_DATA_AES = new Uint8Array([0x07, 0x00, 0x02, 0x00, 0x41, 0x45, 0x03, 0x00, 0x00]);
242
246
  const EXTRAFIELD_OFFSET_AES_VENDOR_VERSION = 4;
@@ -515,7 +519,16 @@ export {
515
519
  ERR_UNSUPPORTED_FORMAT,
516
520
  ERR_UNDEFINED_UNCOMPRESSED_SIZE,
517
521
  ERR_UNDEFINED_READER,
518
- ERR_ZIP_NOT_EMPTY
522
+ ERR_ZIP_NOT_EMPTY,
523
+ ERR_INVALID_SIGNATURE_DATA,
524
+ ERR_INVALID_UID,
525
+ ERR_INVALID_GID,
526
+ ERR_INVALID_UNIX_MODE,
527
+ ERR_INVALID_UNIX_EXTRA_FIELD_TYPE,
528
+ ERR_INVALID_UNIX_ID_SIZE,
529
+ ERR_INVALID_MSDOS_ATTRIBUTES,
530
+ ERR_INVALID_MSDOS_DATA,
531
+ ERR_UNSUPPORTED_CRYPTO_API
519
532
  };
520
533
 
521
534
  async function addFile(zipWriter, name, reader, options) {
@@ -1614,8 +1627,9 @@ function updateLocalHeader({
1614
1627
 
1615
1628
  async function closeFile(zipWriter, comment, options) {
1616
1629
  const directoryDataLength = createDirectoryRecords(zipWriter.files);
1617
- const directoryStart = await writeDirectoryRecords(zipWriter, directoryDataLength, options);
1618
- await writeEndOfDirectoryRecord(zipWriter, comment, options, { directoryStart, directoryDataLength });
1630
+ const { directoryStart, directoryArray } = await writeDirectoryRecords(zipWriter, directoryDataLength, options);
1631
+ const signatureLength = await writeDigitalSignatureRecord(zipWriter, directoryArray, options);
1632
+ await writeEndOfDirectoryRecord(zipWriter, comment, options, { directoryStart, directoryDataLength, signatureLength });
1619
1633
  }
1620
1634
 
1621
1635
  function createDirectoryRecords(files) {
@@ -1772,12 +1786,33 @@ async function writeDirectoryRecords(zipWriter, directoryDataLength, options) {
1772
1786
  }
1773
1787
  }
1774
1788
  await writeData(writer, directoryDiskOffset ? directoryArray.slice(directoryDiskOffset) : directoryArray);
1775
- return { diskNumber: directoryStartDiskNumber, diskOffset: directoryStartDiskOffset };
1789
+ return {
1790
+ directoryStart: { diskNumber: directoryStartDiskNumber, diskOffset: directoryStartDiskOffset },
1791
+ directoryArray
1792
+ };
1793
+ }
1794
+
1795
+ async function writeDigitalSignatureRecord(zipWriter, directoryArray, options) {
1796
+ const signCentralDirectory = getOptionValue(zipWriter, options, OPTION_SIGN_CENTRAL_DIRECTORY);
1797
+ if (signCentralDirectory) {
1798
+ const signatureData = await signCentralDirectory(directoryArray);
1799
+ const signatureDataLength = getLength(signatureData);
1800
+ if (signatureDataLength > MAX_16_BITS) {
1801
+ throw new Error(ERR_INVALID_SIGNATURE_DATA);
1802
+ }
1803
+ const signatureRecord = createRecordWriter(6 + signatureDataLength);
1804
+ signatureRecord.uint32(DIGITAL_SIGNATURE_RECORD_SIGNATURE);
1805
+ signatureRecord.uint16(signatureDataLength);
1806
+ signatureRecord.bytes(signatureData);
1807
+ await writeData(zipWriter.writer, signatureRecord.array);
1808
+ return 6 + signatureDataLength;
1809
+ }
1810
+ return 0;
1776
1811
  }
1777
1812
 
1778
1813
  async function writeEndOfDirectoryRecord(zipWriter, comment, options, cdInfo) {
1779
1814
  const { writer } = zipWriter;
1780
- const { directoryStart } = cdInfo;
1815
+ const { directoryStart, signatureLength } = cdInfo;
1781
1816
  let { directoryDataLength } = cdInfo;
1782
1817
  let filesLength = zipWriter.files.size;
1783
1818
  let diskNumber = directoryStart.diskNumber;
@@ -1816,7 +1851,7 @@ async function writeEndOfDirectoryRecord(zipWriter, comment, options, cdInfo) {
1816
1851
  endOfdirectoryRecord.uint64(directoryOffset);
1817
1852
  endOfdirectoryRecord.uint32(ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE);
1818
1853
  endOfdirectoryRecord.uint32(lastDiskNumber);
1819
- endOfdirectoryRecord.uint64(BigInt(getSegmentOffset(zipWriter, writer)) + BigInt(directoryDataLength));
1854
+ endOfdirectoryRecord.uint64(BigInt(getSegmentOffset(zipWriter, writer)) + BigInt(directoryDataLength) + BigInt(signatureLength));
1820
1855
  endOfdirectoryRecord.uint32(lastDiskNumber + 1);
1821
1856
  const supportZip64SplitFile = getOptionValue(zipWriter, options, OPTION_SUPPORT_ZIP64_SPLIT_FILE, true);
1822
1857
  if (supportZip64SplitFile) {
@@ -77,5 +77,6 @@ export {
77
77
  createBlobTempStream
78
78
  } from "./core/util/blob-temp-stream.js";
79
79
  export {
80
- createSyncAccessHandleTempStream
80
+ createSyncAccessHandleTempStream,
81
+ ERR_UNSUPPORTED_CONTEXT
81
82
  } from "./core/util/sync-access-handle-temp-stream.js";
@@ -47,5 +47,6 @@ export {
47
47
  ERR_SPLIT_ZIP_FILE,
48
48
  ERR_OVERLAPPING_ENTRY,
49
49
  ERR_AMBIGUOUS_ARCHIVE,
50
- ERR_ENCRYPTED_CENTRAL_DIRECTORY
50
+ ERR_ENCRYPTED_CENTRAL_DIRECTORY,
51
+ ERR_WORKER_STARTUP_TIMEOUT
51
52
  } from "./core/zip-reader.js";
@@ -41,5 +41,14 @@ export {
41
41
  ERR_UNSUPPORTED_FORMAT,
42
42
  ERR_UNDEFINED_UNCOMPRESSED_SIZE,
43
43
  ERR_UNDEFINED_READER,
44
- ERR_ZIP_NOT_EMPTY
44
+ ERR_ZIP_NOT_EMPTY,
45
+ ERR_INVALID_SIGNATURE_DATA,
46
+ ERR_INVALID_UID,
47
+ ERR_INVALID_GID,
48
+ ERR_INVALID_UNIX_MODE,
49
+ ERR_INVALID_UNIX_EXTRA_FIELD_TYPE,
50
+ ERR_INVALID_UNIX_ID_SIZE,
51
+ ERR_INVALID_MSDOS_ATTRIBUTES,
52
+ ERR_INVALID_MSDOS_DATA,
53
+ ERR_UNSUPPORTED_CRYPTO_API
45
54
  } from "./core/zip-writer.js";
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "A JavaScript library to zip and unzip files in the browser, Deno and Node.js",
4
4
  "author": "Gildas Lormeau",
5
5
  "license": "BSD-3-Clause",
6
- "version": "2.8.46",
6
+ "version": "2.8.47",
7
7
  "type": "module",
8
8
  "keywords": [
9
9
  "zip",