@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,646 @@
1
+ /**
2
+ * 7z container — read and write `.7z` archives.
3
+ *
4
+ * Built on the engine's LZMA: the writer stores each file in its own folder with
5
+ * a copy or LZMA1 coder and a plain header; the reader parses the 7z structure
6
+ * (plain or LZMA-encoded header) and decodes copy / LZMA1 / LZMA2 single-coder
7
+ * folders — covering archives from `7z a` (LZMA2 by default), `-m0=lzma`, and
8
+ * `-m0=copy`. Multi-coder folders (e.g. BCJ filter chains) are reported as
9
+ * unsupported rather than silently mis-decoded.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * import { sevenZip, unSevenZip } from '@myrialabs/zipkit/sevenzip';
14
+ * const archive = await sevenZip([{ name: 'a.txt', data: strToU8('hi') }]);
15
+ * const files = await unSevenZip(archive);
16
+ * ```
17
+ */
18
+ import { getEngine } from '../engine.js';
19
+ import { ZipKitError } from '../types.js';
20
+ const SIGNATURE = new Uint8Array([0x37, 0x7a, 0xbc, 0xaf, 0x27, 0x1c]);
21
+ // Property IDs.
22
+ const K = {
23
+ End: 0x00,
24
+ Header: 0x01,
25
+ MainStreamsInfo: 0x04,
26
+ FilesInfo: 0x05,
27
+ PackInfo: 0x06,
28
+ UnpackInfo: 0x07,
29
+ SubStreamsInfo: 0x08,
30
+ Size: 0x09,
31
+ CRC: 0x0a,
32
+ Folder: 0x0b,
33
+ CodersUnpackSize: 0x0c,
34
+ NumUnpackStream: 0x0d,
35
+ EmptyStream: 0x0e,
36
+ EmptyFile: 0x0f,
37
+ Name: 0x11,
38
+ MTime: 0x14,
39
+ WinAttributes: 0x15,
40
+ EncodedHeader: 0x17
41
+ };
42
+ // Coder IDs.
43
+ const COPY_ID = 0x00;
44
+ const LZMA1_ID = 0x030101;
45
+ const LZMA2_ID = 0x21;
46
+ // ---------------------------------------------------------------------------
47
+ // 7z variable-length numbers
48
+ // ---------------------------------------------------------------------------
49
+ /** A growable byte sink with the 7z number encoding. */
50
+ class ByteWriter {
51
+ buf = [];
52
+ byte(b) {
53
+ this.buf.push(b & 0xff);
54
+ }
55
+ bytes(b) {
56
+ for (const x of b)
57
+ this.buf.push(x);
58
+ }
59
+ u32(v) {
60
+ this.byte(v);
61
+ this.byte(v >>> 8);
62
+ this.byte(v >>> 16);
63
+ this.byte(v >>> 24);
64
+ }
65
+ u64(v) {
66
+ // Little-endian 64-bit (values stay within 2^53 in practice).
67
+ for (let i = 0; i < 8; i++) {
68
+ this.byte(Math.floor(v / 2 ** (8 * i)) & 0xff);
69
+ }
70
+ }
71
+ /** Encode a 7z variable-length number. */
72
+ number(value) {
73
+ let firstByte = 0;
74
+ let mask = 0x80;
75
+ let i = 0;
76
+ for (; i < 8; i++) {
77
+ if (value < 2 ** (7 * (i + 1))) {
78
+ firstByte |= Math.floor(value / 2 ** (8 * i)) & 0xff;
79
+ break;
80
+ }
81
+ firstByte |= mask;
82
+ mask >>= 1;
83
+ }
84
+ this.byte(firstByte);
85
+ for (let j = 0; j < i; j++) {
86
+ this.byte(Math.floor(value / 2 ** (8 * j)) & 0xff);
87
+ }
88
+ }
89
+ take() {
90
+ return new Uint8Array(this.buf);
91
+ }
92
+ }
93
+ /** Sequential reader with the 7z number encoding. */
94
+ class ByteReader {
95
+ data;
96
+ pos = 0;
97
+ constructor(data) {
98
+ this.data = data;
99
+ }
100
+ byte() {
101
+ if (this.pos >= this.data.length)
102
+ throw new ZipKitError('7z header truncated');
103
+ return this.data[this.pos++];
104
+ }
105
+ bytes(n) {
106
+ const out = this.data.subarray(this.pos, this.pos + n);
107
+ this.pos += n;
108
+ return out;
109
+ }
110
+ number() {
111
+ const firstByte = this.byte();
112
+ let mask = 0x80;
113
+ let value = 0;
114
+ for (let i = 0; i < 8; i++) {
115
+ if ((firstByte & mask) === 0) {
116
+ value += (firstByte & (mask - 1)) * 2 ** (8 * i);
117
+ return value;
118
+ }
119
+ value += this.byte() * 2 ** (8 * i);
120
+ mask >>= 1;
121
+ }
122
+ return value;
123
+ }
124
+ expect(id, what) {
125
+ const got = this.byte();
126
+ if (got !== id)
127
+ throw new ZipKitError(`7z parse error: expected ${what} (0x${id.toString(16)}), got 0x${got.toString(16)}`);
128
+ }
129
+ }
130
+ // ---------------------------------------------------------------------------
131
+ // Writing
132
+ // ---------------------------------------------------------------------------
133
+ function crc32LE(w, crc) {
134
+ w.u32(crc >>> 0);
135
+ }
136
+ /** UTF-16LE encode a name with a trailing null terminator. */
137
+ function nameUtf16(name) {
138
+ const out = [];
139
+ for (const ch of name) {
140
+ let code = ch.codePointAt(0);
141
+ if (code > 0xffff) {
142
+ // Surrogate pair.
143
+ code -= 0x10000;
144
+ const hi = 0xd800 + (code >> 10);
145
+ const lo = 0xdc00 + (code & 0x3ff);
146
+ out.push(hi & 0xff, hi >> 8, lo & 0xff, lo >> 8);
147
+ }
148
+ else {
149
+ out.push(code & 0xff, code >> 8);
150
+ }
151
+ }
152
+ out.push(0, 0);
153
+ return new Uint8Array(out);
154
+ }
155
+ /**
156
+ * Create a 7z archive from `entries`. Each file is stored in its own folder
157
+ * (non-solid) with an LZMA1 or copy coder and a plain (uncompressed) header.
158
+ */
159
+ export async function sevenZip(entries) {
160
+ const e = await getEngine();
161
+ const prepared = [];
162
+ for (const entry of entries) {
163
+ const method = entry.method ?? 'lzma';
164
+ const raw = entry.data;
165
+ const unpackCrc = e.crc32(raw) >>> 0;
166
+ if (method === 'copy') {
167
+ prepared.push({ name: entry.name, packed: raw, unpackSize: raw.length, unpackCrc, coderId: COPY_ID });
168
+ }
169
+ else {
170
+ // engine LZMA frame: [5 props][4 LE size][raw LZMA1 stream] — strip to
171
+ // the bare props + stream a 7z folder expects.
172
+ const frame = e.lzmaCompress(raw, entry.level ?? 6);
173
+ const props = frame.subarray(0, 5);
174
+ const stream = frame.subarray(9);
175
+ prepared.push({
176
+ name: entry.name,
177
+ packed: stream.slice(),
178
+ unpackSize: raw.length,
179
+ unpackCrc,
180
+ coderId: LZMA1_ID,
181
+ props: props.slice()
182
+ });
183
+ }
184
+ }
185
+ // Packed streams blob (sits right after the 32-byte signature header).
186
+ let packTotal = 0;
187
+ for (const p of prepared)
188
+ packTotal += p.packed.length;
189
+ const packedBlob = new Uint8Array(packTotal);
190
+ {
191
+ let off = 0;
192
+ for (const p of prepared) {
193
+ packedBlob.set(p.packed, off);
194
+ off += p.packed.length;
195
+ }
196
+ }
197
+ const header = buildHeader(prepared);
198
+ const nextHeaderCrc = e.crc32(header) >>> 0;
199
+ const start = new ByteWriter();
200
+ start.u64(packedBlob.length); // NextHeaderOffset (relative to offset 32)
201
+ start.u64(header.length); // NextHeaderSize
202
+ start.u32(nextHeaderCrc); // NextHeaderCRC
203
+ const startHeader = start.take();
204
+ const startHeaderCrc = e.crc32(startHeader) >>> 0;
205
+ const out = new ByteWriter();
206
+ out.bytes(SIGNATURE);
207
+ out.byte(0x00); // version major
208
+ out.byte(0x04); // version minor
209
+ out.u32(startHeaderCrc);
210
+ out.bytes(startHeader);
211
+ out.bytes(packedBlob);
212
+ out.bytes(header);
213
+ return out.take();
214
+ }
215
+ function buildHeader(prepared) {
216
+ const w = new ByteWriter();
217
+ w.byte(K.Header);
218
+ w.byte(K.MainStreamsInfo);
219
+ // --- PackInfo ---
220
+ w.byte(K.PackInfo);
221
+ w.number(0); // PackPos
222
+ w.number(prepared.length); // NumPackStreams
223
+ w.byte(K.Size);
224
+ for (const p of prepared)
225
+ w.number(p.packed.length);
226
+ w.byte(K.End);
227
+ // --- UnpackInfo ---
228
+ w.byte(K.UnpackInfo);
229
+ w.byte(K.Folder);
230
+ w.number(prepared.length); // NumFolders (one per file)
231
+ w.byte(0); // External = 0 (folders inline)
232
+ for (const p of prepared) {
233
+ w.number(1); // NumCoders
234
+ if (p.coderId === COPY_ID) {
235
+ w.byte(0x01); // idSize 1, no attrs
236
+ w.byte(0x00); // copy id
237
+ }
238
+ else {
239
+ // LZMA1 id is 3 bytes (03 01 01), with attributes.
240
+ w.byte(0x23); // idSize 3 | 0x20 (has attributes)
241
+ w.byte(0x03);
242
+ w.byte(0x01);
243
+ w.byte(0x01);
244
+ w.number(p.props.length);
245
+ w.bytes(p.props);
246
+ }
247
+ }
248
+ w.byte(K.CodersUnpackSize);
249
+ for (const p of prepared)
250
+ w.number(p.unpackSize);
251
+ // Per-folder unpack CRCs (all defined).
252
+ w.byte(K.CRC);
253
+ w.byte(1); // AllAreDefined
254
+ for (const p of prepared)
255
+ crc32LE(w, p.unpackCrc);
256
+ w.byte(K.End);
257
+ w.byte(K.End); // end MainStreamsInfo
258
+ // --- FilesInfo ---
259
+ w.byte(K.FilesInfo);
260
+ w.number(prepared.length);
261
+ // Names property.
262
+ const names = new ByteWriter();
263
+ names.byte(0); // External = 0
264
+ for (const p of prepared)
265
+ names.bytes(nameUtf16(p.name));
266
+ const nameData = names.take();
267
+ w.byte(K.Name);
268
+ w.number(nameData.length);
269
+ w.bytes(nameData);
270
+ w.byte(K.End); // end FilesInfo
271
+ w.byte(K.End); // end Header
272
+ return w.take();
273
+ }
274
+ function readBitVector(r, n) {
275
+ const bits = [];
276
+ let mask = 0;
277
+ let b = 0;
278
+ for (let i = 0; i < n; i++) {
279
+ if (mask === 0) {
280
+ b = r.byte();
281
+ mask = 0x80;
282
+ }
283
+ bits.push((b & mask) !== 0);
284
+ mask >>= 1;
285
+ }
286
+ return bits;
287
+ }
288
+ /** Read an "all-defined or bit-vector" flag set. */
289
+ function readBoolVectorAllable(r, n) {
290
+ const allDefined = r.byte();
291
+ if (allDefined !== 0)
292
+ return new Array(n).fill(true);
293
+ return readBitVector(r, n);
294
+ }
295
+ /** Read a digest set: which streams have a CRC, then the 32-bit CRCs. */
296
+ function readDigests(r, n) {
297
+ const defined = readBoolVectorAllable(r, n);
298
+ const out = [];
299
+ for (let i = 0; i < n; i++) {
300
+ if (defined[i]) {
301
+ out.push((r.byte() | (r.byte() << 8) | (r.byte() << 16) | (r.byte() << 24)) >>> 0);
302
+ }
303
+ else {
304
+ out.push(undefined);
305
+ }
306
+ }
307
+ return out;
308
+ }
309
+ function parseFolder(r) {
310
+ const numCoders = r.number();
311
+ const coders = [];
312
+ let totalIn = 0;
313
+ let totalOut = 0;
314
+ for (let i = 0; i < numCoders; i++) {
315
+ const flag = r.byte();
316
+ const idSize = flag & 0x0f;
317
+ const isComplex = (flag & 0x10) !== 0;
318
+ const hasAttr = (flag & 0x20) !== 0;
319
+ let id = 0;
320
+ for (const b of r.bytes(idSize))
321
+ id = id * 256 + b;
322
+ let numIn = 1;
323
+ let numOut = 1;
324
+ if (isComplex) {
325
+ numIn = r.number();
326
+ numOut = r.number();
327
+ }
328
+ let props;
329
+ if (hasAttr)
330
+ props = r.bytes(r.number()).slice();
331
+ coders.push({ id, numIn, numOut, props });
332
+ totalIn += numIn;
333
+ totalOut += numOut;
334
+ }
335
+ const numBindPairs = totalOut - 1;
336
+ for (let i = 0; i < numBindPairs; i++) {
337
+ r.number(); // inIndex
338
+ r.number(); // outIndex
339
+ }
340
+ const numPackedStreams = totalIn - numBindPairs;
341
+ if (numPackedStreams > 1) {
342
+ for (let i = 0; i < numPackedStreams; i++)
343
+ r.number(); // packed stream indices
344
+ }
345
+ return { coders, numPackedStreams, unpackSizes: [] };
346
+ }
347
+ function parseStreamsInfo(r) {
348
+ let packPos = 0;
349
+ let packSizes = [];
350
+ let folders = [];
351
+ let id = r.byte();
352
+ if (id === K.PackInfo) {
353
+ packPos = r.number();
354
+ const numPack = r.number();
355
+ let next = r.byte();
356
+ while (next !== K.End) {
357
+ if (next === K.Size) {
358
+ packSizes = [];
359
+ for (let i = 0; i < numPack; i++)
360
+ packSizes.push(r.number());
361
+ }
362
+ else if (next === K.CRC) {
363
+ readDigests(r, numPack);
364
+ }
365
+ else {
366
+ throw new ZipKitError(`7z: unexpected id 0x${next.toString(16)} in PackInfo`);
367
+ }
368
+ next = r.byte();
369
+ }
370
+ id = r.byte();
371
+ }
372
+ if (id === K.UnpackInfo) {
373
+ r.expect(K.Folder, 'kFolder');
374
+ const numFolders = r.number();
375
+ const external = r.byte();
376
+ if (external !== 0)
377
+ throw new ZipKitError('7z: external folder definitions are unsupported');
378
+ folders = [];
379
+ for (let i = 0; i < numFolders; i++)
380
+ folders.push(parseFolder(r));
381
+ r.expect(K.CodersUnpackSize, 'kCodersUnpackSize');
382
+ for (const f of folders) {
383
+ let totalOut = 0;
384
+ for (const c of f.coders)
385
+ totalOut += c.numOut;
386
+ for (let i = 0; i < totalOut; i++)
387
+ f.unpackSizes.push(r.number());
388
+ }
389
+ let next = r.byte();
390
+ while (next !== K.End) {
391
+ if (next === K.CRC) {
392
+ const crcs = readDigests(r, numFolders);
393
+ folders.forEach((f, i) => (f.crc = crcs[i]));
394
+ }
395
+ else {
396
+ throw new ZipKitError(`7z: unexpected id 0x${next.toString(16)} in UnpackInfo`);
397
+ }
398
+ next = r.byte();
399
+ }
400
+ id = r.byte();
401
+ }
402
+ // Defaults: one substream per folder, sized to the folder's final output.
403
+ const numUnpackStreamsPerFolder = folders.map(() => 1);
404
+ const subSizes = folders.map((f) => [folderOutSize(f)]);
405
+ let subCrcs = folders.map((f) => f.crc);
406
+ if (id === K.SubStreamsInfo) {
407
+ let next = r.byte();
408
+ if (next === K.NumUnpackStream) {
409
+ for (let i = 0; i < folders.length; i++)
410
+ numUnpackStreamsPerFolder[i] = r.number();
411
+ next = r.byte();
412
+ }
413
+ // Sizes (all but the last substream of each folder are explicit).
414
+ for (let f = 0; f < folders.length; f++) {
415
+ const n = numUnpackStreamsPerFolder[f];
416
+ if (n === 0) {
417
+ subSizes[f] = [];
418
+ continue;
419
+ }
420
+ const sizes = [];
421
+ let sum = 0;
422
+ if (next === K.Size) {
423
+ for (let i = 0; i < n - 1; i++) {
424
+ const s = r.number();
425
+ sizes.push(s);
426
+ sum += s;
427
+ }
428
+ }
429
+ sizes.push(folderOutSize(folders[f]) - sum);
430
+ subSizes[f] = sizes;
431
+ }
432
+ if (next === K.Size)
433
+ next = r.byte();
434
+ // CRCs for substreams whose folder CRC wasn't already known.
435
+ let totalStreams = 0;
436
+ for (const n of numUnpackStreamsPerFolder)
437
+ totalStreams += n;
438
+ if (next === K.CRC) {
439
+ const numUnknown = folders.reduce((acc, f, i) => acc + (numUnpackStreamsPerFolder[i] === 1 && f.crc !== undefined ? 0 : numUnpackStreamsPerFolder[i]), 0);
440
+ const digs = readDigests(r, numUnknown);
441
+ const flat = [];
442
+ let di = 0;
443
+ folders.forEach((f, i) => {
444
+ if (numUnpackStreamsPerFolder[i] === 1 && f.crc !== undefined)
445
+ flat.push(f.crc);
446
+ else
447
+ for (let s = 0; s < numUnpackStreamsPerFolder[i]; s++)
448
+ flat.push(digs[di++]);
449
+ });
450
+ subCrcs = flat;
451
+ next = r.byte();
452
+ }
453
+ else {
454
+ subCrcs = new Array(totalStreams).fill(undefined);
455
+ }
456
+ while (next !== K.End)
457
+ next = r.byte();
458
+ id = r.byte();
459
+ }
460
+ if (id !== K.End)
461
+ throw new ZipKitError(`7z: expected end of StreamsInfo, got 0x${id.toString(16)}`);
462
+ return { packPos, packSizes, folders, numUnpackStreamsPerFolder, subSizes, subCrcs };
463
+ }
464
+ /** The output size a folder produces (its final, non-bound output stream). */
465
+ function folderOutSize(f) {
466
+ // For the single-coder folders ZipKit reads, the only output is the result.
467
+ return f.unpackSizes[f.unpackSizes.length - 1] ?? 0;
468
+ }
469
+ function parseFilesInfo(r) {
470
+ const numFiles = r.number();
471
+ let emptyStream = new Array(numFiles).fill(false);
472
+ let emptyFile = [];
473
+ let names = [];
474
+ for (;;) {
475
+ const propType = r.byte();
476
+ if (propType === K.End)
477
+ break;
478
+ const size = r.number();
479
+ const end = r.pos + size;
480
+ if (propType === K.EmptyStream) {
481
+ emptyStream = readBitVector(r, numFiles);
482
+ }
483
+ else if (propType === K.EmptyFile) {
484
+ const numEmpty = emptyStream.filter(Boolean).length;
485
+ emptyFile = readBitVector(r, numEmpty);
486
+ }
487
+ else if (propType === K.Name) {
488
+ const external = r.byte();
489
+ if (external !== 0)
490
+ throw new ZipKitError('7z: external file names are unsupported');
491
+ names = decodeNames(r.bytes(end - r.pos));
492
+ }
493
+ r.pos = end; // skip any unconsumed property bytes (mtime, attrs, …)
494
+ }
495
+ return { names, emptyStream, emptyFile };
496
+ }
497
+ /** Decode a run of null-terminated UTF-16LE names. */
498
+ function decodeNames(data) {
499
+ const names = [];
500
+ const units = [];
501
+ for (let i = 0; i + 1 < data.length; i += 2) {
502
+ const u = data[i] | (data[i + 1] << 8);
503
+ if (u === 0) {
504
+ names.push(String.fromCharCode(...units));
505
+ units.length = 0;
506
+ }
507
+ else {
508
+ units.push(u);
509
+ }
510
+ }
511
+ return names;
512
+ }
513
+ function readU64LE(d, off) {
514
+ let v = 0;
515
+ for (let i = 0; i < 8; i++)
516
+ v += d[off + i] * 2 ** (8 * i);
517
+ return v;
518
+ }
519
+ /** Decode one single-coder folder's packed bytes to its unpacked output. */
520
+ async function decodeFolder(folder, packed) {
521
+ if (folder.coders.length !== 1) {
522
+ throw new ZipKitError('7z: multi-coder folders (e.g. BCJ filter chains) are not supported');
523
+ }
524
+ const coder = folder.coders[0];
525
+ const outSize = folderOutSize(folder);
526
+ const e = await getEngine();
527
+ if (coder.id === COPY_ID)
528
+ return packed.slice();
529
+ if (coder.id === LZMA1_ID) {
530
+ const props = coder.props ?? new Uint8Array(5);
531
+ // Rebuild the engine frame: [5 props][4 LE unpackSize][stream].
532
+ const frame = new Uint8Array(9 + packed.length);
533
+ frame.set(props.subarray(0, 5), 0);
534
+ frame[5] = outSize & 0xff;
535
+ frame[6] = (outSize >>> 8) & 0xff;
536
+ frame[7] = (outSize >>> 16) & 0xff;
537
+ frame[8] = (outSize >>> 24) & 0xff;
538
+ frame.set(packed, 9);
539
+ return e.lzmaDecompress(frame);
540
+ }
541
+ if (coder.id === LZMA2_ID) {
542
+ const prop = coder.props?.[0] ?? 0;
543
+ return e.lzma2Decompress(packed, prop, outSize);
544
+ }
545
+ throw new ZipKitError(`7z: unsupported coder id 0x${coder.id.toString(16)} (only copy, LZMA, LZMA2)`);
546
+ }
547
+ /** Read a 7z archive into its entries. */
548
+ export async function unSevenZip(data) {
549
+ for (let i = 0; i < SIGNATURE.length; i++) {
550
+ if (data[i] !== SIGNATURE[i])
551
+ throw new ZipKitError('Not a 7z archive (bad signature)');
552
+ }
553
+ const nextHeaderOffset = readU64LE(data, 12);
554
+ const nextHeaderSize = readU64LE(data, 20);
555
+ const base = 32;
556
+ let headerBytes = data.subarray(base + nextHeaderOffset, base + nextHeaderOffset + nextHeaderSize);
557
+ if (headerBytes.length === 0)
558
+ return []; // empty archive
559
+ let r = new ByteReader(headerBytes);
560
+ let id = r.byte();
561
+ // An encoded header is itself a packed stream described by a StreamsInfo;
562
+ // decode it, then parse the result as a normal header.
563
+ if (id === K.EncodedHeader) {
564
+ const si = parseStreamsInfo(r);
565
+ const decoded = await decodeStreams(data, base, si);
566
+ if (decoded.length !== 1)
567
+ throw new ZipKitError('7z: unexpected encoded-header layout');
568
+ headerBytes = decoded[0];
569
+ r = new ByteReader(headerBytes);
570
+ id = r.byte();
571
+ }
572
+ if (id !== K.Header)
573
+ throw new ZipKitError(`7z: expected header, got 0x${id.toString(16)}`);
574
+ let streams;
575
+ let files;
576
+ let next = r.byte();
577
+ if (next === 0x02) {
578
+ // ArchiveProperties — skip to its end marker.
579
+ while (r.byte() !== K.End) {
580
+ /* property size + data already consumed by structure below */
581
+ }
582
+ next = r.byte();
583
+ }
584
+ if (next === K.MainStreamsInfo) {
585
+ streams = parseStreamsInfo(r);
586
+ next = r.byte();
587
+ }
588
+ if (next === K.FilesInfo) {
589
+ files = parseFilesInfo(r);
590
+ next = r.byte();
591
+ }
592
+ // Decode every folder, then split into substreams in folder order.
593
+ const folderOutputs = streams ? await decodeStreams(data, base, streams) : [];
594
+ const substreams = [];
595
+ if (streams) {
596
+ for (let f = 0; f < streams.folders.length; f++) {
597
+ const sizes = streams.subSizes[f];
598
+ let off = 0;
599
+ for (const s of sizes) {
600
+ substreams.push(folderOutputs[f].subarray(off, off + s));
601
+ off += s;
602
+ }
603
+ }
604
+ }
605
+ // Map substreams to files (empty-stream files have no data).
606
+ const entries = [];
607
+ const names = files?.names ?? [];
608
+ const emptyStream = files?.emptyStream ?? [];
609
+ let streamIdx = 0;
610
+ const numFiles = names.length || substreams.length;
611
+ for (let i = 0; i < numFiles; i++) {
612
+ const name = names[i] ?? `file${i}`;
613
+ if (emptyStream[i]) {
614
+ entries.push({ name, data: new Uint8Array(0), size: 0 });
615
+ }
616
+ else {
617
+ const d = substreams[streamIdx++] ?? new Uint8Array(0);
618
+ entries.push({ name, data: d.slice(), size: d.length });
619
+ }
620
+ }
621
+ return entries;
622
+ }
623
+ /** Decode each folder in `si`, returning one buffer per folder. */
624
+ async function decodeStreams(data, base, si) {
625
+ const packBase = base + si.packPos;
626
+ // Pack-stream offsets are cumulative; each single-packed folder takes one.
627
+ const packOffsets = [];
628
+ let acc = packBase;
629
+ for (const s of si.packSizes) {
630
+ packOffsets.push(acc);
631
+ acc += s;
632
+ }
633
+ const outputs = [];
634
+ let packIdx = 0;
635
+ for (const folder of si.folders) {
636
+ if (folder.numPackedStreams !== 1) {
637
+ throw new ZipKitError('7z: folders with multiple packed streams are not supported');
638
+ }
639
+ const off = packOffsets[packIdx];
640
+ const size = si.packSizes[packIdx];
641
+ packIdx++;
642
+ outputs.push(await decodeFolder(folder, data.subarray(off, off + size)));
643
+ }
644
+ return outputs;
645
+ }
646
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sevenzip/index.ts"],"names":[],"mappings":"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"}