@zip.js/zip.js 2.8.61 → 2.10.0

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/README.md CHANGED
@@ -75,6 +75,46 @@ console.log(helloWorldText);
75
75
 
76
76
  Run the code on JSFiddle: https://jsfiddle.net/tm9fhvab/
77
77
 
78
+ ## Hello world with the filesystem API
79
+
80
+ The filesystem API stores the entries in a tree instead of a flat list. It needs
81
+ a single import, it infers the Reader and the Writer from the type of the data,
82
+ and it reaches an entry from its name instead of searching it in an array.
83
+
84
+ ```js
85
+ import { ZipFS } from "@zip.js/zip.js";
86
+ // "jsr:@zip-js/zip-js" for Deno
87
+
88
+ // ----
89
+ // Write the zip file
90
+ // ----
91
+
92
+ // Creates a ZipFS object and adds two entries to it. The name of an entry is a
93
+ // path, so the "folder" directory is created by the second call.
94
+ const zipFs = new ZipFS();
95
+ zipFs.addText("hello.txt", "Hello world!");
96
+ zipFs.addText("folder/hello.txt", "Hello world from a directory!");
97
+
98
+ // Retrieves the Blob object containing the zip content.
99
+ const zipFileBlob = await zipFs.exportBlob();
100
+
101
+ // ----
102
+ // Read the zip file
103
+ // ----
104
+
105
+ // Imports the zip content into a new ZipFS object, then retrieves the content
106
+ // of the entries from their full name.
107
+ const importedZipFs = new ZipFS();
108
+ await importedZipFs.importBlob(zipFileBlob);
109
+ const helloWorldText = await importedZipFs.find("hello.txt").getText();
110
+ const nestedText = await importedZipFs.find("folder/hello.txt").getText();
111
+
112
+ // Displays "Hello world!" and "Hello world from a directory!".
113
+ console.log(helloWorldText, nestedText);
114
+ ```
115
+
116
+ Run the code on JSFiddle: https://jsfiddle.net/gcnret0x/
117
+
78
118
  ## Hello world with Streams
79
119
 
80
120
  ```js
package/deno.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zip-js/zip-js",
3
- "version": "2.8.61",
3
+ "version": "2.10.0",
4
4
  "exports": {
5
5
  ".": "./index.js",
6
6
  "./external": "./lib/zip-fs-external.js",
@@ -520,7 +520,7 @@ function getDataView(array) {
520
520
  // Every table MUST stay a PACKED_SMI array: build with array literals (not `new Array(n)`,
521
521
  // which is HOLEY) and store the signed int32 XOR result (no `>>> 0`). An unsigned or holey
522
522
  // table becomes a V8 FixedDoubleArray whose every hot-loop lookup unboxes a double (~1.6x
523
- // slower). Signedness is irrelevant to the result — the reads mask/shift it and the final
523
+ // slower). Signedness is irrelevant to the result: the reads mask/shift it and the final
524
524
  // `~crc` normalizes it. Do NOT reintroduce `>>> 0` here or switch to `new Array(256)`.
525
525
  const T = [[], [], [], [], [], [], [], []];
526
526
  for (let n = 0; n < 256; n++) {
@@ -3506,21 +3506,14 @@ async function terminateWorkers() {
3506
3506
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3507
3507
  */
3508
3508
 
3509
- /* global TextDecoder */
3510
-
3511
- const CP437 = "\0☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ".split("");
3512
- const VALID_CP437 = CP437.length == 256;
3509
+ const CP437 = "\0\u263A\u263B\u2665\u2666\u2663\u2660\u2022\u25D8\u25CB\u25D9\u2642\u2640\u266A\u266B\u263C\u25BA\u25C4\u2195\u203C\u00B6\u00A7\u25AC\u21A8\u2191\u2193\u2192\u2190\u221F\u2194\u25B2\u25BC !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u2302\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0".split("");
3513
3510
 
3514
3511
  function decodeCP437(stringValue) {
3515
- if (VALID_CP437) {
3516
- let result = "";
3517
- for (let indexCharacter = 0; indexCharacter < stringValue.length; indexCharacter++) {
3518
- result += CP437[stringValue[indexCharacter]];
3519
- }
3520
- return result;
3521
- } else {
3522
- return new TextDecoder().decode(stringValue);
3512
+ let result = "";
3513
+ for (let indexCharacter = 0; indexCharacter < stringValue.length; indexCharacter++) {
3514
+ result += CP437[stringValue[indexCharacter]];
3523
3515
  }
3516
+ return result;
3524
3517
  }
3525
3518
 
3526
3519
  /*
@@ -4754,6 +4747,7 @@ const WARNING_UNKNOWN_ZIP64_EXTENSIBLE_DATA = "unknown zip64 extensible data";
4754
4747
  const WARNING_WRAPPED_ENTRIES_COUNT = "wrapped entries count";
4755
4748
  const WARNING_APPENDED_DATA = "appended data";
4756
4749
  const WARNING_PREPENDED_DATA = "prepended data";
4750
+ const WARNING_PREPENDED_CENTRAL_DIRECTORY = "prepended central directory";
4757
4751
  const WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = "trailing central directory data";
4758
4752
  const WARNING_DUPLICATE_FILENAME = "duplicate filename";
4759
4753
  const WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = "mismatched zip64 end of central directory record";
@@ -4847,6 +4841,7 @@ class ZipReader {
4847
4841
  let diskNumber = getUint16$1(endOfDirectoryView, 6);
4848
4842
  let filesLength = getUint16$1(endOfDirectoryView, 10);
4849
4843
  let prependedDataLength = 0;
4844
+ let prependedCentralDirectory;
4850
4845
  let startOffset;
4851
4846
  let zip64EndOfDirectory;
4852
4847
  let zip64EndOfDirectoryVersion2;
@@ -4950,6 +4945,7 @@ class ZipReader {
4950
4945
  directoryDataOffset = expectedDirectoryDataOffset;
4951
4946
  if (directoryDataOffset > originalDirectoryDataOffset) {
4952
4947
  prependedDataLength += directoryDataOffset - originalDirectoryDataOffset;
4948
+ prependedCentralDirectory = storedPointsAtDirectory;
4953
4949
  }
4954
4950
  directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength);
4955
4951
  directoryView = getDataView(directoryArray);
@@ -5177,6 +5173,9 @@ class ZipReader {
5177
5173
  if (prependedDataLength || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
5178
5174
  addWarning(warnings, WARNING_PREPENDED_DATA);
5179
5175
  }
5176
+ if (prependedCentralDirectory) {
5177
+ addWarning(warnings, WARNING_PREPENDED_CENTRAL_DIRECTORY);
5178
+ }
5180
5179
  if (extractPrependedData) {
5181
5180
  zipReader.prependedData = startOffset > splitZipSignatureLength ?
5182
5181
  await readUint8Array(reader, splitZipSignatureLength, startOffset - splitZipSignatureLength) :
@@ -6237,6 +6236,7 @@ var zipReader = /*#__PURE__*/Object.freeze({
6237
6236
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD: WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD,
6238
6237
  WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES: WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES,
6239
6238
  WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY: WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY,
6239
+ WARNING_PREPENDED_CENTRAL_DIRECTORY: WARNING_PREPENDED_CENTRAL_DIRECTORY,
6240
6240
  WARNING_PREPENDED_DATA: WARNING_PREPENDED_DATA,
6241
6241
  WARNING_TRAILING_CENTRAL_DIRECTORY_DATA: WARNING_TRAILING_CENTRAL_DIRECTORY_DATA,
6242
6242
  WARNING_UNKNOWN_VERSION: WARNING_UNKNOWN_VERSION,
@@ -8553,7 +8553,7 @@ function formatSupported(StreamClass, format) {
8553
8553
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8554
8554
  */
8555
8555
 
8556
- const VERSION = "2.8.61";
8556
+ const VERSION = "2.10.0";
8557
8557
 
8558
8558
  /*
8559
8559
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
@@ -9387,4 +9387,4 @@ function terminateWorkersAndModule() {
9387
9387
 
9388
9388
  configureExternalAssets();
9389
9389
 
9390
- export { BlobReader, BlobWriter, Data64URIReader, Data64URIWriter, ERR_AMBIGUOUS_ARCHIVE, ERR_BAD_FORMAT, ERR_CENTRAL_DIRECTORY_NOT_FOUND, ERR_DUPLICATED_NAME, ERR_ENCRYPTED, ERR_ENCRYPTED_CENTRAL_DIRECTORY, ERR_ENTRY_DATA_OUT_OF_BOUNDS, ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND, ERR_EOCDR_NOT_FOUND, ERR_EXTRAFIELD_ZIP64_NOT_FOUND, ERR_HTTP_RANGE, ERR_HTTP_RESOURCE_CHANGED, ERR_INVALID_AUTHENTICATION_CODE, ERR_INVALID_CODEC_DEFINITION, ERR_INVALID_CODEC_MODULE, ERR_INVALID_COMMENT, ERR_INVALID_COMMENT_TYPE, ERR_INVALID_COMPRESSED_DATA, ERR_INVALID_CRC32, ERR_INVALID_DATE, ERR_INVALID_ENCRYPTION_STRENGTH, ERR_INVALID_ENTRY_COMMENT, ERR_INVALID_ENTRY_COMMENT_TYPE, ERR_INVALID_ENTRY_NAME, ERR_INVALID_EXTRAFIELD, ERR_INVALID_EXTRAFIELD_DATA, ERR_INVALID_EXTRAFIELD_DATA_TYPE, ERR_INVALID_EXTRAFIELD_TYPE, ERR_INVALID_FILENAME_VALIDATION, ERR_INVALID_FUNCTION_OPTION, ERR_INVALID_GID, ERR_INVALID_LEVEL, ERR_INVALID_MAX_APPENDED_DATA_SIZE, ERR_INVALID_MAX_WORKERS, ERR_INVALID_MSDOS_ATTRIBUTES, ERR_INVALID_MSDOS_DATA, ERR_INVALID_PASSWORD, ERR_INVALID_PASSWORD_TYPE, ERR_INVALID_SIGNAL, ERR_INVALID_SIGNATURE, ERR_INVALID_SIGNATURE_DATA, ERR_INVALID_STRICTNESS, ERR_INVALID_UID, ERR_INVALID_UNCOMPRESSED_SIZE, ERR_INVALID_UNIX_EXTRA_FIELD_TYPE, ERR_INVALID_UNIX_ID_SIZE, ERR_INVALID_UNIX_MODE, ERR_INVALID_VERSION, ERR_ITERATOR_COMPLETED_TOO_SOON, ERR_LOCAL_FILE_HEADER_NOT_FOUND, ERR_OVERLAPPING_ENTRY, ERR_RESERVED_COMPRESSION_METHOD, ERR_SPLIT_ZIP_FILE, ERR_UNDEFINED_COMPRESSION_METHOD, ERR_UNDEFINED_READER, ERR_UNDEFINED_UNCOMPRESSED_SIZE, ERR_UNDETERMINED_SIZE, ERR_UNSAFE_FILENAME, ERR_UNSUPPORTED_COMPRESSION$1 as ERR_UNSUPPORTED_COMPRESSION, ERR_UNSUPPORTED_CONTEXT, ERR_UNSUPPORTED_CRYPTO_API, ERR_UNSUPPORTED_ENCRYPTION, ERR_UNSUPPORTED_ENCRYPTION_PASS_THROUGH, ERR_UNSUPPORTED_ENCRYPTION_USDZ, ERR_UNSUPPORTED_FORMAT, ERR_UNSUPPORTED_UINT64, ERR_WORKER_STARTUP_TIMEOUT, ERR_WRITER_NOT_INITIALIZED, ERR_ZIP_NOT_EMPTY, HttpRangeReader, HttpReader, Reader, SplitDataReader, SplitDataWriter, TextReader, TextWriter, Uint8ArrayReader, Uint8ArrayWriter, VERSION, WARNING_APPENDED_DATA, WARNING_COMPRESSED_PATCHED_DATA, WARNING_DUPLICATE_FILENAME, WARNING_MALFORMED_EXTRA_FIELD, WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG, WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD, WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES, WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY, WARNING_PREPENDED_DATA, WARNING_TRAILING_CENTRAL_DIRECTORY_DATA, WARNING_UNKNOWN_VERSION, WARNING_UNKNOWN_ZIP64_EXTENSIBLE_DATA, WARNING_UNSORTED_CENTRAL_DIRECTORY, WARNING_WRAPPED_ENTRIES_COUNT, Writer, ZipReader, ZipReaderStream, ZipWriter, ZipWriterStream, configure, createBlobTempStream, createOPFSTempStream, createSyncAccessHandleTempStream, getMimeType, getRegisteredCodecs, getSupportedCompressionMethods, isZipFile, registerCodec, resetConfiguration, terminateWorkersAndModule as terminateWorkers, unregisterCodec };
9390
+ export { BlobReader, BlobWriter, Data64URIReader, Data64URIWriter, ERR_AMBIGUOUS_ARCHIVE, ERR_BAD_FORMAT, ERR_CENTRAL_DIRECTORY_NOT_FOUND, ERR_DUPLICATED_NAME, ERR_ENCRYPTED, ERR_ENCRYPTED_CENTRAL_DIRECTORY, ERR_ENTRY_DATA_OUT_OF_BOUNDS, ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND, ERR_EOCDR_NOT_FOUND, ERR_EXTRAFIELD_ZIP64_NOT_FOUND, ERR_HTTP_RANGE, ERR_HTTP_RESOURCE_CHANGED, ERR_INVALID_AUTHENTICATION_CODE, ERR_INVALID_CODEC_DEFINITION, ERR_INVALID_CODEC_MODULE, ERR_INVALID_COMMENT, ERR_INVALID_COMMENT_TYPE, ERR_INVALID_COMPRESSED_DATA, ERR_INVALID_CRC32, ERR_INVALID_DATE, ERR_INVALID_ENCRYPTION_STRENGTH, ERR_INVALID_ENTRY_COMMENT, ERR_INVALID_ENTRY_COMMENT_TYPE, ERR_INVALID_ENTRY_NAME, ERR_INVALID_EXTRAFIELD, ERR_INVALID_EXTRAFIELD_DATA, ERR_INVALID_EXTRAFIELD_DATA_TYPE, ERR_INVALID_EXTRAFIELD_TYPE, ERR_INVALID_FILENAME_VALIDATION, ERR_INVALID_FUNCTION_OPTION, ERR_INVALID_GID, ERR_INVALID_LEVEL, ERR_INVALID_MAX_APPENDED_DATA_SIZE, ERR_INVALID_MAX_WORKERS, ERR_INVALID_MSDOS_ATTRIBUTES, ERR_INVALID_MSDOS_DATA, ERR_INVALID_PASSWORD, ERR_INVALID_PASSWORD_TYPE, ERR_INVALID_SIGNAL, ERR_INVALID_SIGNATURE, ERR_INVALID_SIGNATURE_DATA, ERR_INVALID_STRICTNESS, ERR_INVALID_UID, ERR_INVALID_UNCOMPRESSED_SIZE, ERR_INVALID_UNIX_EXTRA_FIELD_TYPE, ERR_INVALID_UNIX_ID_SIZE, ERR_INVALID_UNIX_MODE, ERR_INVALID_VERSION, ERR_ITERATOR_COMPLETED_TOO_SOON, ERR_LOCAL_FILE_HEADER_NOT_FOUND, ERR_OVERLAPPING_ENTRY, ERR_RESERVED_COMPRESSION_METHOD, ERR_SPLIT_ZIP_FILE, ERR_UNDEFINED_COMPRESSION_METHOD, ERR_UNDEFINED_READER, ERR_UNDEFINED_UNCOMPRESSED_SIZE, ERR_UNDETERMINED_SIZE, ERR_UNSAFE_FILENAME, ERR_UNSUPPORTED_COMPRESSION$1 as ERR_UNSUPPORTED_COMPRESSION, ERR_UNSUPPORTED_CONTEXT, ERR_UNSUPPORTED_CRYPTO_API, ERR_UNSUPPORTED_ENCRYPTION, ERR_UNSUPPORTED_ENCRYPTION_PASS_THROUGH, ERR_UNSUPPORTED_ENCRYPTION_USDZ, ERR_UNSUPPORTED_FORMAT, ERR_UNSUPPORTED_UINT64, ERR_WORKER_STARTUP_TIMEOUT, ERR_WRITER_NOT_INITIALIZED, ERR_ZIP_NOT_EMPTY, HttpRangeReader, HttpReader, Reader, SplitDataReader, SplitDataWriter, TextReader, TextWriter, Uint8ArrayReader, Uint8ArrayWriter, VERSION, WARNING_APPENDED_DATA, WARNING_COMPRESSED_PATCHED_DATA, WARNING_DUPLICATE_FILENAME, WARNING_MALFORMED_EXTRA_FIELD, WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG, WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD, WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES, WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY, WARNING_PREPENDED_CENTRAL_DIRECTORY, WARNING_PREPENDED_DATA, WARNING_TRAILING_CENTRAL_DIRECTORY_DATA, WARNING_UNKNOWN_VERSION, WARNING_UNKNOWN_ZIP64_EXTENSIBLE_DATA, WARNING_UNSORTED_CENTRAL_DIRECTORY, WARNING_WRAPPED_ENTRIES_COUNT, Writer, ZipReader, ZipReaderStream, ZipWriter, ZipWriterStream, configure, createBlobTempStream, createOPFSTempStream, createSyncAccessHandleTempStream, getMimeType, getRegisteredCodecs, getSupportedCompressionMethods, isZipFile, registerCodec, resetConfiguration, terminateWorkersAndModule as terminateWorkers, unregisterCodec };