@myrialabs/zipkit 0.0.6

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 (185) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +329 -0
  3. package/dist/bench/corpus.d.ts +21 -0
  4. package/dist/bench/corpus.d.ts.map +1 -0
  5. package/dist/bench/corpus.js +92 -0
  6. package/dist/bench/corpus.js.map +1 -0
  7. package/dist/checksum.d.ts +29 -0
  8. package/dist/checksum.d.ts.map +1 -0
  9. package/dist/checksum.js +35 -0
  10. package/dist/checksum.js.map +1 -0
  11. package/dist/cli.d.ts +17 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +427 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/codecs/brotli.d.ts +6 -0
  16. package/dist/codecs/brotli.d.ts.map +1 -0
  17. package/dist/codecs/brotli.js +15 -0
  18. package/dist/codecs/brotli.js.map +1 -0
  19. package/dist/codecs/bzip2.d.ts +6 -0
  20. package/dist/codecs/bzip2.d.ts.map +1 -0
  21. package/dist/codecs/bzip2.js +15 -0
  22. package/dist/codecs/bzip2.js.map +1 -0
  23. package/dist/codecs/deflate.d.ts +6 -0
  24. package/dist/codecs/deflate.d.ts.map +1 -0
  25. package/dist/codecs/deflate.js +25 -0
  26. package/dist/codecs/deflate.js.map +1 -0
  27. package/dist/codecs/gzip.d.ts +6 -0
  28. package/dist/codecs/gzip.d.ts.map +1 -0
  29. package/dist/codecs/gzip.js +25 -0
  30. package/dist/codecs/gzip.js.map +1 -0
  31. package/dist/codecs/image.d.ts +5 -0
  32. package/dist/codecs/image.d.ts.map +1 -0
  33. package/dist/codecs/image.js +16 -0
  34. package/dist/codecs/image.js.map +1 -0
  35. package/dist/codecs/index.d.ts +18 -0
  36. package/dist/codecs/index.d.ts.map +1 -0
  37. package/dist/codecs/index.js +18 -0
  38. package/dist/codecs/index.js.map +1 -0
  39. package/dist/codecs/lz4.d.ts +6 -0
  40. package/dist/codecs/lz4.d.ts.map +1 -0
  41. package/dist/codecs/lz4.js +17 -0
  42. package/dist/codecs/lz4.js.map +1 -0
  43. package/dist/codecs/lzma.d.ts +6 -0
  44. package/dist/codecs/lzma.d.ts.map +1 -0
  45. package/dist/codecs/lzma.js +15 -0
  46. package/dist/codecs/lzma.js.map +1 -0
  47. package/dist/codecs/snappy.d.ts +6 -0
  48. package/dist/codecs/snappy.d.ts.map +1 -0
  49. package/dist/codecs/snappy.js +14 -0
  50. package/dist/codecs/snappy.js.map +1 -0
  51. package/dist/codecs/video.d.ts +13 -0
  52. package/dist/codecs/video.d.ts.map +1 -0
  53. package/dist/codecs/video.js +26 -0
  54. package/dist/codecs/video.js.map +1 -0
  55. package/dist/codecs/xz.d.ts +6 -0
  56. package/dist/codecs/xz.d.ts.map +1 -0
  57. package/dist/codecs/xz.js +30 -0
  58. package/dist/codecs/xz.js.map +1 -0
  59. package/dist/codecs/zlib.d.ts +6 -0
  60. package/dist/codecs/zlib.d.ts.map +1 -0
  61. package/dist/codecs/zlib.js +15 -0
  62. package/dist/codecs/zlib.js.map +1 -0
  63. package/dist/codecs/zstd.d.ts +6 -0
  64. package/dist/codecs/zstd.d.ts.map +1 -0
  65. package/dist/codecs/zstd.js +24 -0
  66. package/dist/codecs/zstd.js.map +1 -0
  67. package/dist/compress.d.ts +20 -0
  68. package/dist/compress.d.ts.map +1 -0
  69. package/dist/compress.js +83 -0
  70. package/dist/compress.js.map +1 -0
  71. package/dist/delta.d.ts +30 -0
  72. package/dist/delta.d.ts.map +1 -0
  73. package/dist/delta.js +44 -0
  74. package/dist/delta.js.map +1 -0
  75. package/dist/detect.d.ts +46 -0
  76. package/dist/detect.d.ts.map +1 -0
  77. package/dist/detect.js +86 -0
  78. package/dist/detect.js.map +1 -0
  79. package/dist/dictionary.d.ts +37 -0
  80. package/dist/dictionary.d.ts.map +1 -0
  81. package/dist/dictionary.js +71 -0
  82. package/dist/dictionary.js.map +1 -0
  83. package/dist/engine.d.ts +102 -0
  84. package/dist/engine.d.ts.map +1 -0
  85. package/dist/engine.js +204 -0
  86. package/dist/engine.js.map +1 -0
  87. package/dist/fsa.d.ts +54 -0
  88. package/dist/fsa.d.ts.map +1 -0
  89. package/dist/fsa.js +45 -0
  90. package/dist/fsa.js.map +1 -0
  91. package/dist/index.d.ts +35 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +47 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/internal.d.ts +21 -0
  96. package/dist/internal.d.ts.map +1 -0
  97. package/dist/internal.js +42 -0
  98. package/dist/internal.js.map +1 -0
  99. package/dist/middleware/elysia.d.ts +15 -0
  100. package/dist/middleware/elysia.d.ts.map +1 -0
  101. package/dist/middleware/elysia.js +43 -0
  102. package/dist/middleware/elysia.js.map +1 -0
  103. package/dist/middleware/express.d.ts +17 -0
  104. package/dist/middleware/express.d.ts.map +1 -0
  105. package/dist/middleware/express.js +62 -0
  106. package/dist/middleware/express.js.map +1 -0
  107. package/dist/middleware/hono.d.ts +17 -0
  108. package/dist/middleware/hono.d.ts.map +1 -0
  109. package/dist/middleware/hono.js +41 -0
  110. package/dist/middleware/hono.js.map +1 -0
  111. package/dist/middleware/index.d.ts +14 -0
  112. package/dist/middleware/index.d.ts.map +1 -0
  113. package/dist/middleware/index.js +14 -0
  114. package/dist/middleware/index.js.map +1 -0
  115. package/dist/middleware/shared.d.ts +29 -0
  116. package/dist/middleware/shared.d.ts.map +1 -0
  117. package/dist/middleware/shared.js +47 -0
  118. package/dist/middleware/shared.js.map +1 -0
  119. package/dist/pack.d.ts +36 -0
  120. package/dist/pack.d.ts.map +1 -0
  121. package/dist/pack.js +75 -0
  122. package/dist/pack.js.map +1 -0
  123. package/dist/parallel/index.d.ts +56 -0
  124. package/dist/parallel/index.d.ts.map +1 -0
  125. package/dist/parallel/index.js +158 -0
  126. package/dist/parallel/index.js.map +1 -0
  127. package/dist/sevenzip/index.d.ts +45 -0
  128. package/dist/sevenzip/index.d.ts.map +1 -0
  129. package/dist/sevenzip/index.js +646 -0
  130. package/dist/sevenzip/index.js.map +1 -0
  131. package/dist/streams/index.d.ts +32 -0
  132. package/dist/streams/index.d.ts.map +1 -0
  133. package/dist/streams/index.js +74 -0
  134. package/dist/streams/index.js.map +1 -0
  135. package/dist/string.d.ts +38 -0
  136. package/dist/string.d.ts.map +1 -0
  137. package/dist/string.js +64 -0
  138. package/dist/string.js.map +1 -0
  139. package/dist/tar/index.d.ts +99 -0
  140. package/dist/tar/index.d.ts.map +1 -0
  141. package/dist/tar/index.js +380 -0
  142. package/dist/tar/index.js.map +1 -0
  143. package/dist/types.d.ts +59 -0
  144. package/dist/types.d.ts.map +1 -0
  145. package/dist/types.js +22 -0
  146. package/dist/types.js.map +1 -0
  147. package/dist/workers/index.d.ts +58 -0
  148. package/dist/workers/index.d.ts.map +1 -0
  149. package/dist/workers/index.js +158 -0
  150. package/dist/workers/index.js.map +1 -0
  151. package/dist/workers/worker.d.ts +18 -0
  152. package/dist/workers/worker.d.ts.map +1 -0
  153. package/dist/workers/worker.js +45 -0
  154. package/dist/workers/worker.js.map +1 -0
  155. package/dist/zip/crypto/aes.d.ts +25 -0
  156. package/dist/zip/crypto/aes.d.ts.map +1 -0
  157. package/dist/zip/crypto/aes.js +156 -0
  158. package/dist/zip/crypto/aes.js.map +1 -0
  159. package/dist/zip/crypto/winzip.d.ts +28 -0
  160. package/dist/zip/crypto/winzip.d.ts.map +1 -0
  161. package/dist/zip/crypto/winzip.js +87 -0
  162. package/dist/zip/crypto/winzip.js.map +1 -0
  163. package/dist/zip/crypto/zipcrypto.d.ts +14 -0
  164. package/dist/zip/crypto/zipcrypto.d.ts.map +1 -0
  165. package/dist/zip/crypto/zipcrypto.js +65 -0
  166. package/dist/zip/crypto/zipcrypto.js.map +1 -0
  167. package/dist/zip/datetime.d.ts +9 -0
  168. package/dist/zip/datetime.d.ts.map +1 -0
  169. package/dist/zip/datetime.js +13 -0
  170. package/dist/zip/datetime.js.map +1 -0
  171. package/dist/zip/index.d.ts +134 -0
  172. package/dist/zip/index.d.ts.map +1 -0
  173. package/dist/zip/index.js +473 -0
  174. package/dist/zip/index.js.map +1 -0
  175. package/dist/zip/stream.d.ts +38 -0
  176. package/dist/zip/stream.d.ts.map +1 -0
  177. package/dist/zip/stream.js +240 -0
  178. package/dist/zip/stream.js.map +1 -0
  179. package/dist/zipkit.d.ts +74 -0
  180. package/dist/zipkit.d.ts.map +1 -0
  181. package/dist/zipkit.js +168 -0
  182. package/dist/zipkit.js.map +1 -0
  183. package/engine/dist/zipkit-engine.mjs +2 -0
  184. package/engine/dist/zipkit-engine.wasm +0 -0
  185. package/package.json +137 -0
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Legacy PKWARE "ZipCrypto" — decryption only, for reading old encrypted
3
+ * archives. The cipher is weak and long deprecated, so ZipKit never *writes* it
4
+ * (new encrypted archives use WinZip AES, {@link import('./winzip.js')}); this
5
+ * exists purely for read compatibility with historical files.
6
+ */
7
+ import { ZipKitError } from '../../types.js';
8
+ /** CRC-32 byte-update table (IEEE 802.3), built once. */
9
+ const CRC_TABLE = (() => {
10
+ const t = new Uint32Array(256);
11
+ for (let n = 0; n < 256; n++) {
12
+ let c = n;
13
+ for (let k = 0; k < 8; k++)
14
+ c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
15
+ t[n] = c >>> 0;
16
+ }
17
+ return t;
18
+ })();
19
+ function crc32Update(crc, byte) {
20
+ return (CRC_TABLE[(crc ^ byte) & 0xff] ^ (crc >>> 8)) >>> 0;
21
+ }
22
+ function initKeys(password) {
23
+ const keys = { k0: 0x12345678, k1: 0x23456789, k2: 0x34567890 };
24
+ for (const byte of new TextEncoder().encode(password))
25
+ updateKeys(keys, byte);
26
+ return keys;
27
+ }
28
+ function updateKeys(keys, byte) {
29
+ keys.k0 = crc32Update(keys.k0, byte);
30
+ keys.k1 = (keys.k1 + (keys.k0 & 0xff)) >>> 0;
31
+ keys.k1 = (Math.imul(keys.k1, 134775813) + 1) >>> 0;
32
+ keys.k2 = crc32Update(keys.k2, keys.k1 >>> 24);
33
+ }
34
+ function decryptByte(keys) {
35
+ const temp = (keys.k2 | 2) & 0xffff;
36
+ return (Math.imul(temp, temp ^ 1) >> 8) & 0xff;
37
+ }
38
+ /**
39
+ * Decrypt a ZipCrypto entry: the raw bytes are a 12-byte encryption header
40
+ * followed by the (still-compressed) ciphertext. `checkByte` is the expected
41
+ * high byte of the verification value — the CRC-32's top byte, or the DOS time's
42
+ * high byte when the entry used a data descriptor. Throws on a wrong password.
43
+ */
44
+ export function zipCryptoDecrypt(data, password, checkByte) {
45
+ if (data.length < 12)
46
+ throw new ZipKitError('ZipCrypto entry is too short (missing encryption header)');
47
+ const keys = initKeys(password);
48
+ const header = new Uint8Array(12);
49
+ for (let i = 0; i < 12; i++) {
50
+ const c = (data[i] ^ decryptByte(keys)) & 0xff;
51
+ updateKeys(keys, c);
52
+ header[i] = c;
53
+ }
54
+ if (header[11] !== (checkByte & 0xff)) {
55
+ throw new ZipKitError('Wrong password for ZipCrypto entry (verification byte mismatch)');
56
+ }
57
+ const out = new Uint8Array(data.length - 12);
58
+ for (let i = 12; i < data.length; i++) {
59
+ const c = (data[i] ^ decryptByte(keys)) & 0xff;
60
+ updateKeys(keys, c);
61
+ out[i - 12] = c;
62
+ }
63
+ return out;
64
+ }
65
+ //# sourceMappingURL=zipcrypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zipcrypto.js","sourceRoot":"","sources":["../../../src/zip/crypto/zipcrypto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /** MS-DOS date/time <-> JS Date, as stored in ZIP local/central headers. */
2
+ /** Encode a Date to a packed DOS date and time pair (`{ date, time }`). */
3
+ export declare function toDosDateTime(d: Date): {
4
+ date: number;
5
+ time: number;
6
+ };
7
+ /** Decode a packed DOS date/time pair back to a Date. */
8
+ export declare function fromDosDateTime(date: number, time: number): Date;
9
+ //# sourceMappingURL=datetime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datetime.d.ts","sourceRoot":"","sources":["../../src/zip/datetime.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAE5E,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAKrE;AAED,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAShE"}
@@ -0,0 +1,13 @@
1
+ /** MS-DOS date/time <-> JS Date, as stored in ZIP local/central headers. */
2
+ /** Encode a Date to a packed DOS date and time pair (`{ date, time }`). */
3
+ export function toDosDateTime(d) {
4
+ const year = Math.max(1980, d.getFullYear());
5
+ const date = (((year - 1980) & 0x7f) << 9) | ((d.getMonth() + 1) << 5) | d.getDate();
6
+ const time = (d.getHours() << 11) | (d.getMinutes() << 5) | (d.getSeconds() >> 1);
7
+ return { date, time };
8
+ }
9
+ /** Decode a packed DOS date/time pair back to a Date. */
10
+ export function fromDosDateTime(date, time) {
11
+ return new Date(((date >> 9) & 0x7f) + 1980, ((date >> 5) & 0x0f) - 1, date & 0x1f, (time >> 11) & 0x1f, (time >> 5) & 0x3f, (time & 0x1f) << 1);
12
+ }
13
+ //# sourceMappingURL=datetime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datetime.js","sourceRoot":"","sources":["../../src/zip/datetime.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAE5E,2EAA2E;AAC3E,MAAM,UAAU,aAAa,CAAC,CAAO;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IACrF,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;IAClF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACvB,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,IAAY;IACzD,OAAO,IAAI,IAAI,CACd,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,EAC3B,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EACxB,IAAI,GAAG,IAAI,EACX,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,IAAI,EACnB,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,EAClB,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * ZIP container — create and read multi-file archives.
3
+ *
4
+ * Interoperates with standard tools (`unzip`, Explorer, fflate): `store` and
5
+ * `deflate` entries round-trip everywhere. ZipKit additionally supports `zstd`
6
+ * (method 93) inside the container for much denser archives between ZipKit-aware
7
+ * peers. Entry metadata (modification time, Unix permissions, comment) is
8
+ * preserved both ways, and archives over 4 GB / 65 535 entries transparently
9
+ * use ZIP64.
10
+ *
11
+ * Everything is in-memory and async (the codecs are Wasm). Reading supports a
12
+ * `filter` so you only pay to decompress the entries you want.
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * import { zip, unzip } from '@myrialabs/zipkit/zip';
17
+ * const archive = await zip([
18
+ * { name: 'hello.txt', data: strToU8('hi') },
19
+ * { name: 'data.json', data: bytes, method: 'zstd' }
20
+ * ]);
21
+ * const files = await unzip(archive, { filter: (e) => e.name.endsWith('.json') });
22
+ * ```
23
+ */
24
+ /** Built-in ZIP compression methods, by friendly name. */
25
+ export type ZipMethod = 'store' | 'deflate' | 'zstd';
26
+ /** An entry to add to an archive. */
27
+ export interface ZipEntryInput {
28
+ /** Path within the archive, using `/` separators. */
29
+ name: string;
30
+ /** Uncompressed contents. */
31
+ data: Uint8Array;
32
+ /** Compression method (default `'deflate'`). */
33
+ method?: ZipMethod;
34
+ /** DEFLATE/zstd level. */
35
+ level?: number;
36
+ /** Last-modified time (default: now). */
37
+ mtime?: Date | number;
38
+ /** Unix permission bits, e.g. `0o644`. Stored in the external attributes. */
39
+ unixPermissions?: number;
40
+ /** Optional per-entry comment. */
41
+ comment?: string;
42
+ }
43
+ /** A decoded archive entry. */
44
+ export interface ZipEntry {
45
+ /** Path within the archive. */
46
+ name: string;
47
+ /** Decompressed contents (omitted when a `filter` rejected the entry). */
48
+ data: Uint8Array;
49
+ /** Numeric compression method as stored (0 = store, 8 = deflate, 93 = zstd). */
50
+ method: number;
51
+ /** Last-modified time. */
52
+ mtime: Date;
53
+ /** Uncompressed size in bytes. */
54
+ size: number;
55
+ /** Compressed size in bytes. */
56
+ compressedSize: number;
57
+ /** Stored CRC-32 of the uncompressed data. */
58
+ crc32: number;
59
+ /** Unix permission bits, if the archive recorded any. */
60
+ unixPermissions?: number;
61
+ /** Per-entry comment, if present. */
62
+ comment?: string;
63
+ }
64
+ /** Metadata for an entry, passed to a read `filter` before decompression. */
65
+ export interface ZipEntryInfo {
66
+ name: string;
67
+ method: number;
68
+ size: number;
69
+ compressedSize: number;
70
+ mtime: Date;
71
+ unixPermissions?: number;
72
+ }
73
+ /** Options for {@link unzip}. */
74
+ export interface UnzipOptions {
75
+ /** Decompress only the entries for which this returns `true`. */
76
+ filter?: (entry: ZipEntryInfo) => boolean;
77
+ /**
78
+ * Recompute each decompressed entry's CRC-32 and compare it to the value
79
+ * stored in the archive, throwing {@link ZipKitError} on a mismatch. Off by
80
+ * default — turn it on to detect silent corruption explicitly rather than
81
+ * trusting the codec's own (format-dependent) integrity checks.
82
+ */
83
+ verify?: boolean;
84
+ /**
85
+ * Password for encrypted entries. Decrypts WinZip AES (AE-1/AE-2) and legacy
86
+ * ZipCrypto entries. Required if the archive is encrypted; a wrong password
87
+ * throws {@link ZipKitError}.
88
+ */
89
+ password?: string;
90
+ }
91
+ /** Options for {@link zip}. */
92
+ export interface ZipOptions {
93
+ /**
94
+ * Compress entries concurrently across the worker pool. Independent entries
95
+ * fan out over every core while the container is assembled in order, so the
96
+ * output is byte-identical to the single-threaded path.
97
+ *
98
+ * Defaults to automatic: on when there are at least two entries and the
99
+ * archive totals at least 256 KB, off otherwise (the worker hand-off would
100
+ * cost more than it saves on tiny archives). Set explicitly to override.
101
+ */
102
+ parallel?: boolean;
103
+ /**
104
+ * Reports archive-build progress as each entry finishes compressing:
105
+ * `(entriesDone, totalEntries)`. Fires up to once per entry; the final call
106
+ * has `entriesDone === totalEntries`.
107
+ */
108
+ onProgress?: (entriesDone: number, totalEntries: number) => void;
109
+ /**
110
+ * Encrypt every entry with WinZip AES (AE-2). Reads back with the same
111
+ * `password` via {@link unzip}, and interoperates with 7-Zip / WinZip. AES-256
112
+ * by default; the per-entry CRC is omitted as the AE-2 spec requires.
113
+ */
114
+ password?: string;
115
+ }
116
+ /**
117
+ * Build a ZIP archive from a list of entries. Returns the complete archive
118
+ * bytes. Uses ZIP64 automatically when any size/offset exceeds 4 GB or there
119
+ * are more than 65 535 entries.
120
+ */
121
+ export declare function zip(entries: ZipEntryInput[], opts?: ZipOptions): Promise<Uint8Array>;
122
+ /**
123
+ * Read a ZIP archive. Returns one {@link ZipEntry} per file. Pass
124
+ * `opts.filter` to skip decompressing entries you don't need — rejected
125
+ * entries are omitted from the result.
126
+ */
127
+ export declare function unzip(data: Uint8Array, opts?: UnzipOptions): Promise<ZipEntry[]>;
128
+ /**
129
+ * List the entries in an archive without decompressing them. Cheaper than
130
+ * {@link unzip} when you only need names, sizes, and metadata.
131
+ */
132
+ export declare function listEntries(data: Uint8Array): Promise<ZipEntryInfo[]>;
133
+ export { zipStream, type ZipStreamOptions } from './stream.js';
134
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/zip/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAoBH,0DAA0D;AAC1D,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAIrD,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC7B,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,gDAAgD;IAChD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IACtB,6EAA6E;IAC7E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,+BAA+B;AAC/B,MAAM,WAAW,QAAQ;IACxB,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,IAAI,EAAE,UAAU,CAAC;IACjB,gFAAgF;IAChF,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,KAAK,EAAE,IAAI,CAAC;IACZ,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,6EAA6E;AAC7E,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,IAAI,CAAC;IACZ,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,iCAAiC;AACjC,MAAM,WAAW,YAAY;IAC5B,iEAAiE;IACjE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC;IAC1C;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,+BAA+B;AAC/B,MAAM,WAAW,UAAU;IAC1B;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAkFD;;;;GAIG;AACH,wBAAsB,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,IAAI,GAAE,UAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CA4L9F;AA4DD;;;;GAIG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CA2H1F;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAS3E;AAGD,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC"}