@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.
- package/LICENSE +21 -0
- package/README.md +329 -0
- package/dist/bench/corpus.d.ts +21 -0
- package/dist/bench/corpus.d.ts.map +1 -0
- package/dist/bench/corpus.js +92 -0
- package/dist/bench/corpus.js.map +1 -0
- package/dist/checksum.d.ts +29 -0
- package/dist/checksum.d.ts.map +1 -0
- package/dist/checksum.js +35 -0
- package/dist/checksum.js.map +1 -0
- package/dist/cli.d.ts +17 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +427 -0
- package/dist/cli.js.map +1 -0
- package/dist/codecs/brotli.d.ts +6 -0
- package/dist/codecs/brotli.d.ts.map +1 -0
- package/dist/codecs/brotli.js +15 -0
- package/dist/codecs/brotli.js.map +1 -0
- package/dist/codecs/bzip2.d.ts +6 -0
- package/dist/codecs/bzip2.d.ts.map +1 -0
- package/dist/codecs/bzip2.js +15 -0
- package/dist/codecs/bzip2.js.map +1 -0
- package/dist/codecs/deflate.d.ts +6 -0
- package/dist/codecs/deflate.d.ts.map +1 -0
- package/dist/codecs/deflate.js +25 -0
- package/dist/codecs/deflate.js.map +1 -0
- package/dist/codecs/gzip.d.ts +6 -0
- package/dist/codecs/gzip.d.ts.map +1 -0
- package/dist/codecs/gzip.js +25 -0
- package/dist/codecs/gzip.js.map +1 -0
- package/dist/codecs/image.d.ts +5 -0
- package/dist/codecs/image.d.ts.map +1 -0
- package/dist/codecs/image.js +16 -0
- package/dist/codecs/image.js.map +1 -0
- package/dist/codecs/index.d.ts +18 -0
- package/dist/codecs/index.d.ts.map +1 -0
- package/dist/codecs/index.js +18 -0
- package/dist/codecs/index.js.map +1 -0
- package/dist/codecs/lz4.d.ts +6 -0
- package/dist/codecs/lz4.d.ts.map +1 -0
- package/dist/codecs/lz4.js +17 -0
- package/dist/codecs/lz4.js.map +1 -0
- package/dist/codecs/lzma.d.ts +6 -0
- package/dist/codecs/lzma.d.ts.map +1 -0
- package/dist/codecs/lzma.js +15 -0
- package/dist/codecs/lzma.js.map +1 -0
- package/dist/codecs/snappy.d.ts +6 -0
- package/dist/codecs/snappy.d.ts.map +1 -0
- package/dist/codecs/snappy.js +14 -0
- package/dist/codecs/snappy.js.map +1 -0
- package/dist/codecs/video.d.ts +13 -0
- package/dist/codecs/video.d.ts.map +1 -0
- package/dist/codecs/video.js +26 -0
- package/dist/codecs/video.js.map +1 -0
- package/dist/codecs/xz.d.ts +6 -0
- package/dist/codecs/xz.d.ts.map +1 -0
- package/dist/codecs/xz.js +30 -0
- package/dist/codecs/xz.js.map +1 -0
- package/dist/codecs/zlib.d.ts +6 -0
- package/dist/codecs/zlib.d.ts.map +1 -0
- package/dist/codecs/zlib.js +15 -0
- package/dist/codecs/zlib.js.map +1 -0
- package/dist/codecs/zstd.d.ts +6 -0
- package/dist/codecs/zstd.d.ts.map +1 -0
- package/dist/codecs/zstd.js +24 -0
- package/dist/codecs/zstd.js.map +1 -0
- package/dist/compress.d.ts +20 -0
- package/dist/compress.d.ts.map +1 -0
- package/dist/compress.js +83 -0
- package/dist/compress.js.map +1 -0
- package/dist/delta.d.ts +30 -0
- package/dist/delta.d.ts.map +1 -0
- package/dist/delta.js +44 -0
- package/dist/delta.js.map +1 -0
- package/dist/detect.d.ts +46 -0
- package/dist/detect.d.ts.map +1 -0
- package/dist/detect.js +86 -0
- package/dist/detect.js.map +1 -0
- package/dist/dictionary.d.ts +37 -0
- package/dist/dictionary.d.ts.map +1 -0
- package/dist/dictionary.js +71 -0
- package/dist/dictionary.js.map +1 -0
- package/dist/engine.d.ts +102 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +204 -0
- package/dist/engine.js.map +1 -0
- package/dist/fsa.d.ts +54 -0
- package/dist/fsa.d.ts.map +1 -0
- package/dist/fsa.js +45 -0
- package/dist/fsa.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/internal.d.ts +21 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +42 -0
- package/dist/internal.js.map +1 -0
- package/dist/middleware/elysia.d.ts +15 -0
- package/dist/middleware/elysia.d.ts.map +1 -0
- package/dist/middleware/elysia.js +43 -0
- package/dist/middleware/elysia.js.map +1 -0
- package/dist/middleware/express.d.ts +17 -0
- package/dist/middleware/express.d.ts.map +1 -0
- package/dist/middleware/express.js +62 -0
- package/dist/middleware/express.js.map +1 -0
- package/dist/middleware/hono.d.ts +17 -0
- package/dist/middleware/hono.d.ts.map +1 -0
- package/dist/middleware/hono.js +41 -0
- package/dist/middleware/hono.js.map +1 -0
- package/dist/middleware/index.d.ts +14 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +14 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/shared.d.ts +29 -0
- package/dist/middleware/shared.d.ts.map +1 -0
- package/dist/middleware/shared.js +47 -0
- package/dist/middleware/shared.js.map +1 -0
- package/dist/pack.d.ts +36 -0
- package/dist/pack.d.ts.map +1 -0
- package/dist/pack.js +75 -0
- package/dist/pack.js.map +1 -0
- package/dist/parallel/index.d.ts +56 -0
- package/dist/parallel/index.d.ts.map +1 -0
- package/dist/parallel/index.js +158 -0
- package/dist/parallel/index.js.map +1 -0
- package/dist/sevenzip/index.d.ts +45 -0
- package/dist/sevenzip/index.d.ts.map +1 -0
- package/dist/sevenzip/index.js +646 -0
- package/dist/sevenzip/index.js.map +1 -0
- package/dist/streams/index.d.ts +32 -0
- package/dist/streams/index.d.ts.map +1 -0
- package/dist/streams/index.js +74 -0
- package/dist/streams/index.js.map +1 -0
- package/dist/string.d.ts +38 -0
- package/dist/string.d.ts.map +1 -0
- package/dist/string.js +64 -0
- package/dist/string.js.map +1 -0
- package/dist/tar/index.d.ts +99 -0
- package/dist/tar/index.d.ts.map +1 -0
- package/dist/tar/index.js +380 -0
- package/dist/tar/index.js.map +1 -0
- package/dist/types.d.ts +59 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +22 -0
- package/dist/types.js.map +1 -0
- package/dist/workers/index.d.ts +58 -0
- package/dist/workers/index.d.ts.map +1 -0
- package/dist/workers/index.js +158 -0
- package/dist/workers/index.js.map +1 -0
- package/dist/workers/worker.d.ts +18 -0
- package/dist/workers/worker.d.ts.map +1 -0
- package/dist/workers/worker.js +45 -0
- package/dist/workers/worker.js.map +1 -0
- package/dist/zip/crypto/aes.d.ts +25 -0
- package/dist/zip/crypto/aes.d.ts.map +1 -0
- package/dist/zip/crypto/aes.js +156 -0
- package/dist/zip/crypto/aes.js.map +1 -0
- package/dist/zip/crypto/winzip.d.ts +28 -0
- package/dist/zip/crypto/winzip.d.ts.map +1 -0
- package/dist/zip/crypto/winzip.js +87 -0
- package/dist/zip/crypto/winzip.js.map +1 -0
- package/dist/zip/crypto/zipcrypto.d.ts +14 -0
- package/dist/zip/crypto/zipcrypto.d.ts.map +1 -0
- package/dist/zip/crypto/zipcrypto.js +65 -0
- package/dist/zip/crypto/zipcrypto.js.map +1 -0
- package/dist/zip/datetime.d.ts +9 -0
- package/dist/zip/datetime.d.ts.map +1 -0
- package/dist/zip/datetime.js +13 -0
- package/dist/zip/datetime.js.map +1 -0
- package/dist/zip/index.d.ts +134 -0
- package/dist/zip/index.d.ts.map +1 -0
- package/dist/zip/index.js +473 -0
- package/dist/zip/index.js.map +1 -0
- package/dist/zip/stream.d.ts +38 -0
- package/dist/zip/stream.d.ts.map +1 -0
- package/dist/zip/stream.js +240 -0
- package/dist/zip/stream.js.map +1 -0
- package/dist/zipkit.d.ts +74 -0
- package/dist/zipkit.d.ts.map +1 -0
- package/dist/zipkit.js +168 -0
- package/dist/zipkit.js.map +1 -0
- package/engine/dist/zipkit-engine.mjs +2 -0
- package/engine/dist/zipkit-engine.wasm +0 -0
- package/package.json +137 -0
package/dist/pack.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "Smallest possible" packing.
|
|
3
|
+
*
|
|
4
|
+
* `pack()` tries the densest codecs (brotli, lzma, bzip2, zstd-ultra) and keeps
|
|
5
|
+
* the smallest result, tagged with a one-byte codec id so `unpack()` can
|
|
6
|
+
* reverse it without being told which codec won. Use it when output size
|
|
7
|
+
* matters more than compression time and both ends are ZipKit.
|
|
8
|
+
*
|
|
9
|
+
* The async {@link pack}/{@link unpack} helpers lazily load the shared engine;
|
|
10
|
+
* the synchronous {@link packSync}/{@link unpackSync} take an already-loaded
|
|
11
|
+
* engine and back {@link import('./zipkit.js').ZipKit.pack}.
|
|
12
|
+
*/
|
|
13
|
+
import { getEngine } from './engine.js';
|
|
14
|
+
import { ZipKitError } from './types.js';
|
|
15
|
+
const PACK_BROTLI = 0;
|
|
16
|
+
const PACK_LZMA = 1;
|
|
17
|
+
const PACK_BZIP2 = 2;
|
|
18
|
+
const PACK_ZSTD = 3;
|
|
19
|
+
/** Codec name for each pack tag, indexed by the leading tag byte. */
|
|
20
|
+
export const PACK_CODECS = ['brotli', 'lzma', 'bzip2', 'zstd'];
|
|
21
|
+
/** Pack with an already-loaded engine. */
|
|
22
|
+
export function packSync(engine, data) {
|
|
23
|
+
const candidates = [
|
|
24
|
+
[PACK_BROTLI, engine.brotliCompress(data, 11)],
|
|
25
|
+
[PACK_LZMA, engine.lzmaCompress(data, 9)],
|
|
26
|
+
[PACK_BZIP2, engine.bzip2Compress(data, 9)],
|
|
27
|
+
[PACK_ZSTD, engine.zstdMaxCompress(data, 22)]
|
|
28
|
+
];
|
|
29
|
+
let best = candidates[0];
|
|
30
|
+
for (const c of candidates)
|
|
31
|
+
if (c[1].length < best[1].length)
|
|
32
|
+
best = c;
|
|
33
|
+
const out = new Uint8Array(best[1].length + 1);
|
|
34
|
+
out[0] = best[0];
|
|
35
|
+
out.set(best[1], 1);
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
/** Reverse {@link packSync} with an already-loaded engine. */
|
|
39
|
+
export function unpackSync(engine, data) {
|
|
40
|
+
const tag = data[0];
|
|
41
|
+
const body = data.subarray(1);
|
|
42
|
+
switch (tag) {
|
|
43
|
+
case PACK_BROTLI:
|
|
44
|
+
return engine.brotliDecompress(body);
|
|
45
|
+
case PACK_LZMA:
|
|
46
|
+
return engine.lzmaDecompress(body);
|
|
47
|
+
case PACK_BZIP2:
|
|
48
|
+
return engine.bzip2Decompress(body);
|
|
49
|
+
case PACK_ZSTD:
|
|
50
|
+
return engine.zstdDecompress(body);
|
|
51
|
+
default:
|
|
52
|
+
throw new ZipKitError(`unpack: unknown codec tag ${tag}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Compress to the smallest output across brotli/lzma/bzip2/zstd-ultra, tagged so
|
|
57
|
+
* {@link unpack} can reverse it. Async; lazily loads the shared engine. For the
|
|
58
|
+
* synchronous form load an engine once via `ZipKit.load()` and call
|
|
59
|
+
* {@link import('./zipkit.js').ZipKit.pack}.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```ts
|
|
63
|
+
* import { pack, unpack } from '@myrialabs/zipkit';
|
|
64
|
+
* const small = await pack(bytes);
|
|
65
|
+
* const orig = await unpack(small);
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export async function pack(data) {
|
|
69
|
+
return packSync(await getEngine(), data);
|
|
70
|
+
}
|
|
71
|
+
/** Reverse {@link pack}. Async; lazily loads the shared engine. */
|
|
72
|
+
export async function unpack(data) {
|
|
73
|
+
return unpackSync(await getEngine(), data);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=pack.js.map
|
package/dist/pack.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack.js","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,SAAS,EAAqB,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,SAAS,GAAG,CAAC,CAAC;AACpB,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,SAAS,GAAG,CAAC,CAAC;AAEpB,qEAAqE;AACrE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAU,CAAC;AAExE,0CAA0C;AAC1C,MAAM,UAAU,QAAQ,CAAC,MAAoB,EAAE,IAAgB;IAC9D,MAAM,UAAU,GAA2B;QAC1C,CAAC,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9C,CAAC,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACzC,CAAC,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC,SAAS,EAAE,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;KAC7C,CAAC;IACF,IAAI,IAAI,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,UAAU;QAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM;YAAE,IAAI,GAAG,CAAC,CAAC;IACvE,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/C,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpB,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,UAAU,CAAC,MAAoB,EAAE,IAAgB;IAChE,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9B,QAAQ,GAAG,EAAE,CAAC;QACb,KAAK,WAAW;YACf,OAAO,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACtC,KAAK,SAAS;YACb,OAAO,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACpC,KAAK,UAAU;YACd,OAAO,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACrC,KAAK,SAAS;YACb,OAAO,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACpC;YACC,MAAM,IAAI,WAAW,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;IAC5D,CAAC;AACF,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAgB;IAC1C,OAAO,QAAQ,CAAC,MAAM,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAgB;IAC5C,OAAO,UAAU,CAAC,MAAM,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parallel, multi-core compression — the one lever no single-threaded codec can
|
|
3
|
+
* match.
|
|
4
|
+
*
|
|
5
|
+
* `fflate`, `pako`, and even the runtime-native `Bun.gzipSync` / `zlib` all
|
|
6
|
+
* compress a buffer on **one** thread. ZipKit splits the input into independent
|
|
7
|
+
* blocks, compresses them concurrently across the whole {@link sharedPool}
|
|
8
|
+
* worker pool, and frames the result in a tiny self-describing container. On an
|
|
9
|
+
* N-core machine large inputs compress and decompress close to N× faster — so
|
|
10
|
+
* ZipKit beats native throughput on big data, the way `pigz` beats `gzip`.
|
|
11
|
+
*
|
|
12
|
+
* Each block is a complete, standard stream of the chosen codec; only the outer
|
|
13
|
+
* container (magic `ZKP1`) is ZipKit-specific, so {@link decompressParallel}
|
|
14
|
+
* reverses it. Per-block independence costs a sliver of ratio at small block
|
|
15
|
+
* sizes — negligible at the default ≥256 KB blocks.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* import { compressParallel, decompressParallel } from '@myrialabs/zipkit/parallel';
|
|
20
|
+
* const packed = await compressParallel(bigBuffer, 'zstd', { level: 19 });
|
|
21
|
+
* const original = await decompressParallel(packed);
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
import type { Codec, CompressOptions, DecompressOptions } from '../types.js';
|
|
25
|
+
import { WorkerPool } from '../workers/index.js';
|
|
26
|
+
/** Options for {@link compressParallel}. */
|
|
27
|
+
export interface ParallelCompressOptions extends CompressOptions {
|
|
28
|
+
/**
|
|
29
|
+
* Bytes per block. Larger blocks compress slightly denser; smaller blocks
|
|
30
|
+
* parallelize better. Defaults to an adaptive size (≥256 KB, ~4 blocks per
|
|
31
|
+
* core) that keeps every worker busy with negligible ratio loss.
|
|
32
|
+
*/
|
|
33
|
+
blockSize?: number;
|
|
34
|
+
/** Worker pool to run on. Defaults to the process-wide {@link sharedPool}. */
|
|
35
|
+
pool?: WorkerPool;
|
|
36
|
+
}
|
|
37
|
+
/** Options for {@link decompressParallel}. */
|
|
38
|
+
export interface ParallelDecompressOptions extends DecompressOptions {
|
|
39
|
+
/** Worker pool to run on. Defaults to the process-wide {@link sharedPool}. */
|
|
40
|
+
pool?: WorkerPool;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Compress `data` in parallel across the worker pool, returning a self-describing
|
|
44
|
+
* container that {@link decompressParallel} reverses. Falls back to a single
|
|
45
|
+
* block (and inline execution) where workers aren't available, so it never
|
|
46
|
+
* breaks — it simply stops being parallel.
|
|
47
|
+
*/
|
|
48
|
+
export declare function compressParallel(data: Uint8Array, codec: Codec, opts?: ParallelCompressOptions): Promise<Uint8Array>;
|
|
49
|
+
/** True if `data` looks like a {@link compressParallel} container. */
|
|
50
|
+
export declare function isParallelContainer(data: Uint8Array): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Reverse {@link compressParallel}: decompress every block concurrently across
|
|
53
|
+
* the pool and concatenate. The codec is read from the container header.
|
|
54
|
+
*/
|
|
55
|
+
export declare function decompressParallel(data: Uint8Array, opts?: ParallelDecompressOptions): Promise<Uint8Array>;
|
|
56
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parallel/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE7E,OAAO,EAAc,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAuB7D,4CAA4C;AAC5C,MAAM,WAAW,uBAAwB,SAAQ,eAAe;IAC/D;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,IAAI,CAAC,EAAE,UAAU,CAAC;CAClB;AAED,8CAA8C;AAC9C,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IACnE,8EAA8E;IAC9E,IAAI,CAAC,EAAE,UAAU,CAAC;CAClB;AAsBD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACrC,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,KAAK,EACZ,IAAI,CAAC,EAAE,uBAAuB,GAC5B,OAAO,CAAC,UAAU,CAAC,CAkDrB;AAED,sEAAsE;AACtE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAE7D;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,UAAU,CAAC,CAwChH"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parallel, multi-core compression — the one lever no single-threaded codec can
|
|
3
|
+
* match.
|
|
4
|
+
*
|
|
5
|
+
* `fflate`, `pako`, and even the runtime-native `Bun.gzipSync` / `zlib` all
|
|
6
|
+
* compress a buffer on **one** thread. ZipKit splits the input into independent
|
|
7
|
+
* blocks, compresses them concurrently across the whole {@link sharedPool}
|
|
8
|
+
* worker pool, and frames the result in a tiny self-describing container. On an
|
|
9
|
+
* N-core machine large inputs compress and decompress close to N× faster — so
|
|
10
|
+
* ZipKit beats native throughput on big data, the way `pigz` beats `gzip`.
|
|
11
|
+
*
|
|
12
|
+
* Each block is a complete, standard stream of the chosen codec; only the outer
|
|
13
|
+
* container (magic `ZKP1`) is ZipKit-specific, so {@link decompressParallel}
|
|
14
|
+
* reverses it. Per-block independence costs a sliver of ratio at small block
|
|
15
|
+
* sizes — negligible at the default ≥256 KB blocks.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* import { compressParallel, decompressParallel } from '@myrialabs/zipkit/parallel';
|
|
20
|
+
* const packed = await compressParallel(bigBuffer, 'zstd', { level: 19 });
|
|
21
|
+
* const original = await decompressParallel(packed);
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
import { ZipKitError } from '../types.js';
|
|
25
|
+
import { sharedPool } from '../workers/index.js';
|
|
26
|
+
/** Container magic: "ZKP1" (ZipKit Parallel, version 1). */
|
|
27
|
+
const MAGIC = 0x5a_4b_50_31;
|
|
28
|
+
/** Fixed header size: magic(4) + codec(1) + reserved(1) + blockSize(4) + originalLen(4) + nBlocks(4). */
|
|
29
|
+
const HEADER = 18;
|
|
30
|
+
/** Stable on-disk codec ids (independent of the `Codec` union's order). */
|
|
31
|
+
const CODEC_ID = {
|
|
32
|
+
gzip: 1,
|
|
33
|
+
deflate: 2,
|
|
34
|
+
zlib: 3,
|
|
35
|
+
zstd: 4,
|
|
36
|
+
lz4: 5,
|
|
37
|
+
snappy: 6,
|
|
38
|
+
brotli: 7,
|
|
39
|
+
lzma: 8,
|
|
40
|
+
bzip2: 9
|
|
41
|
+
};
|
|
42
|
+
const ID_CODEC = Object.fromEntries(Object.entries(CODEC_ID).map(([k, v]) => [v, k]));
|
|
43
|
+
function cpuCount() {
|
|
44
|
+
return globalThis.navigator?.hardwareConcurrency ?? 4;
|
|
45
|
+
}
|
|
46
|
+
/** Choose a block size: ~4 blocks per core, never below 256 KB. */
|
|
47
|
+
function defaultBlockSize(len) {
|
|
48
|
+
const target = Math.max(1, cpuCount() * 4);
|
|
49
|
+
return Math.max(256 * 1024, Math.ceil(len / target));
|
|
50
|
+
}
|
|
51
|
+
function writeU32(buf, off, v) {
|
|
52
|
+
buf[off] = v & 0xff;
|
|
53
|
+
buf[off + 1] = (v >>> 8) & 0xff;
|
|
54
|
+
buf[off + 2] = (v >>> 16) & 0xff;
|
|
55
|
+
buf[off + 3] = (v >>> 24) & 0xff;
|
|
56
|
+
}
|
|
57
|
+
function readU32(buf, off) {
|
|
58
|
+
return (buf[off] | (buf[off + 1] << 8) | (buf[off + 2] << 16) | (buf[off + 3] << 24)) >>> 0;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Compress `data` in parallel across the worker pool, returning a self-describing
|
|
62
|
+
* container that {@link decompressParallel} reverses. Falls back to a single
|
|
63
|
+
* block (and inline execution) where workers aren't available, so it never
|
|
64
|
+
* breaks — it simply stops being parallel.
|
|
65
|
+
*/
|
|
66
|
+
export async function compressParallel(data, codec, opts) {
|
|
67
|
+
const id = CODEC_ID[codec];
|
|
68
|
+
if (id === undefined)
|
|
69
|
+
throw new ZipKitError(`Unknown codec: ${codec}`);
|
|
70
|
+
if (data.length > 0xffffffff) {
|
|
71
|
+
throw new ZipKitError('compressParallel: inputs larger than 4 GB are not supported');
|
|
72
|
+
}
|
|
73
|
+
const pool = opts?.pool ?? sharedPool();
|
|
74
|
+
const blockSize = Math.max(1, opts?.blockSize ?? defaultBlockSize(data.length));
|
|
75
|
+
const nBlocks = Math.max(1, Math.ceil(data.length / blockSize));
|
|
76
|
+
// Fan out: every block compresses concurrently; the pool spreads them across
|
|
77
|
+
// all cores. This is the win — N blocks finish in ~1/N the wall-clock time.
|
|
78
|
+
let done = 0;
|
|
79
|
+
const jobs = [];
|
|
80
|
+
for (let i = 0; i < nBlocks; i++) {
|
|
81
|
+
const start = i * blockSize;
|
|
82
|
+
const block = data.subarray(start, Math.min(start + blockSize, data.length));
|
|
83
|
+
jobs.push(pool.compress(block, codec, { mode: opts?.mode, level: opts?.level, signal: opts?.signal }).then((out) => {
|
|
84
|
+
done++;
|
|
85
|
+
opts?.onProgress?.(done / nBlocks, done * blockSize);
|
|
86
|
+
return out;
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
const parts = await Promise.all(jobs);
|
|
90
|
+
// Assemble: [header][per-block u32 compressedLen ...][blocks...].
|
|
91
|
+
const tableSize = nBlocks * 4;
|
|
92
|
+
let body = 0;
|
|
93
|
+
for (const p of parts)
|
|
94
|
+
body += p.length;
|
|
95
|
+
const out = new Uint8Array(HEADER + tableSize + body);
|
|
96
|
+
writeU32(out, 0, MAGIC);
|
|
97
|
+
out[4] = id;
|
|
98
|
+
out[5] = 0; // reserved
|
|
99
|
+
writeU32(out, 6, blockSize);
|
|
100
|
+
writeU32(out, 10, data.length);
|
|
101
|
+
writeU32(out, 14, nBlocks);
|
|
102
|
+
let off = HEADER;
|
|
103
|
+
for (let i = 0; i < nBlocks; i++) {
|
|
104
|
+
writeU32(out, off, parts[i].length);
|
|
105
|
+
off += 4;
|
|
106
|
+
}
|
|
107
|
+
for (const p of parts) {
|
|
108
|
+
out.set(p, off);
|
|
109
|
+
off += p.length;
|
|
110
|
+
}
|
|
111
|
+
return out;
|
|
112
|
+
}
|
|
113
|
+
/** True if `data` looks like a {@link compressParallel} container. */
|
|
114
|
+
export function isParallelContainer(data) {
|
|
115
|
+
return data.length >= HEADER && readU32(data, 0) === MAGIC;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Reverse {@link compressParallel}: decompress every block concurrently across
|
|
119
|
+
* the pool and concatenate. The codec is read from the container header.
|
|
120
|
+
*/
|
|
121
|
+
export async function decompressParallel(data, opts) {
|
|
122
|
+
if (!isParallelContainer(data)) {
|
|
123
|
+
throw new ZipKitError('decompressParallel: not a ZipKit parallel container (bad magic)');
|
|
124
|
+
}
|
|
125
|
+
const codec = ID_CODEC[data[4]];
|
|
126
|
+
if (!codec)
|
|
127
|
+
throw new ZipKitError(`decompressParallel: unknown codec id ${data[4]}`);
|
|
128
|
+
const originalLen = readU32(data, 10);
|
|
129
|
+
const nBlocks = readU32(data, 14);
|
|
130
|
+
const tableOff = HEADER;
|
|
131
|
+
const blocksOff = tableOff + nBlocks * 4;
|
|
132
|
+
// Slice each compressed block out of the container, then decompress them all
|
|
133
|
+
// concurrently — decompression parallelizes too.
|
|
134
|
+
const pool = opts?.pool ?? sharedPool();
|
|
135
|
+
let cursor = blocksOff;
|
|
136
|
+
let done = 0;
|
|
137
|
+
const jobs = [];
|
|
138
|
+
for (let i = 0; i < nBlocks; i++) {
|
|
139
|
+
const clen = readU32(data, tableOff + i * 4);
|
|
140
|
+
const block = data.subarray(cursor, cursor + clen);
|
|
141
|
+
cursor += clen;
|
|
142
|
+
jobs.push(pool.decompress(block, codec, { signal: opts?.signal }).then((out) => {
|
|
143
|
+
done++;
|
|
144
|
+
opts?.onProgress?.(done / nBlocks, out.length);
|
|
145
|
+
return out;
|
|
146
|
+
}));
|
|
147
|
+
}
|
|
148
|
+
const parts = await Promise.all(jobs);
|
|
149
|
+
// Concatenate in block order. originalLen sizes the buffer exactly.
|
|
150
|
+
const out = new Uint8Array(originalLen);
|
|
151
|
+
let off = 0;
|
|
152
|
+
for (const p of parts) {
|
|
153
|
+
out.set(p, off);
|
|
154
|
+
off += p.length;
|
|
155
|
+
}
|
|
156
|
+
return out;
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parallel/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAc,MAAM,qBAAqB,CAAC;AAE7D,4DAA4D;AAC5D,MAAM,KAAK,GAAG,aAAa,CAAC;AAC5B,yGAAyG;AACzG,MAAM,MAAM,GAAG,EAAE,CAAC;AAElB,2EAA2E;AAC3E,MAAM,QAAQ,GAA0B;IACvC,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACR,CAAC;AACF,MAAM,QAAQ,GAA0B,MAAM,CAAC,WAAW,CACzD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAU,CAAC,CAAC,CAChC,CAAC;AAoB3B,SAAS,QAAQ;IAChB,OAAQ,UAA+D,CAAC,SAAS,EAAE,mBAAmB,IAAI,CAAC,CAAC;AAC7G,CAAC;AAED,mEAAmE;AACnE,SAAS,gBAAgB,CAAC,GAAW;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,QAAQ,CAAC,GAAe,EAAE,GAAW,EAAE,CAAS;IACxD,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;IAChC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;AAClC,CAAC;AACD,SAAS,OAAO,CAAC,GAAe,EAAE,GAAW;IAC5C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAE,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AACjG,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACrC,IAAgB,EAChB,KAAY,EACZ,IAA8B;IAE9B,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,EAAE,KAAK,SAAS;QAAE,MAAM,IAAI,WAAW,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;IACvE,IAAI,IAAI,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;QAC9B,MAAM,IAAI,WAAW,CAAC,6DAA6D,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,UAAU,EAAE,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAChF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAEhE,6EAA6E;IAC7E,4EAA4E;IAC5E,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,IAAI,GAA0B,EAAE,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7E,IAAI,CAAC,IAAI,CACR,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACxG,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,UAAU,EAAE,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,GAAG,SAAS,CAAC,CAAC;YACrD,OAAO,GAAG,CAAC;QACZ,CAAC,CAAC,CACF,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAEtC,kEAAkE;IAClE,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC;IAC9B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC;IACxC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;IAEtD,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IACxB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACZ,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW;IACvB,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/B,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IAC3B,IAAI,GAAG,GAAG,MAAM,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,CAAC;QACrC,GAAG,IAAI,CAAC,CAAC;IACV,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACvB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAChB,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC;IACjB,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,mBAAmB,CAAC,IAAgB;IACnD,OAAO,IAAI,CAAC,MAAM,IAAI,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAgB,EAAE,IAAgC;IAC1F,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,WAAW,CAAC,iEAAiE,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,WAAW,CAAC,wCAAwC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAErF,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,MAAM,CAAC;IACxB,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAC;IAEzC,6EAA6E;IAC7E,iDAAiD;IACjD,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,UAAU,EAAE,CAAC;IACxC,IAAI,MAAM,GAAG,SAAS,CAAC;IACvB,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,IAAI,GAA0B,EAAE,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;QACnD,MAAM,IAAI,IAAI,CAAC;QACf,IAAI,CAAC,IAAI,CACR,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACpE,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,UAAU,EAAE,CAAC,IAAI,GAAG,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/C,OAAO,GAAG,CAAC;QACZ,CAAC,CAAC,CACF,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAEtC,oEAAoE;IACpE,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IACxC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACvB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAChB,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC;IACjB,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
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
|
+
/** An entry to write into a 7z archive. */
|
|
19
|
+
export interface SevenZipEntryInput {
|
|
20
|
+
/** Path within the archive (use `/` separators). */
|
|
21
|
+
name: string;
|
|
22
|
+
/** File contents. */
|
|
23
|
+
data: Uint8Array;
|
|
24
|
+
/** Coder: `'lzma'` (default, dense) or `'copy'` (stored). */
|
|
25
|
+
method?: 'lzma' | 'copy';
|
|
26
|
+
/** LZMA level 0–9 (default 6). */
|
|
27
|
+
level?: number;
|
|
28
|
+
}
|
|
29
|
+
/** A decoded 7z entry. */
|
|
30
|
+
export interface SevenZipEntry {
|
|
31
|
+
/** Path within the archive. */
|
|
32
|
+
name: string;
|
|
33
|
+
/** File contents. */
|
|
34
|
+
data: Uint8Array;
|
|
35
|
+
/** Uncompressed size in bytes. */
|
|
36
|
+
size: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Create a 7z archive from `entries`. Each file is stored in its own folder
|
|
40
|
+
* (non-solid) with an LZMA1 or copy coder and a plain (uncompressed) header.
|
|
41
|
+
*/
|
|
42
|
+
export declare function sevenZip(entries: SevenZipEntryInput[]): Promise<Uint8Array>;
|
|
43
|
+
/** Read a 7z archive into its entries. */
|
|
44
|
+
export declare function unSevenZip(data: Uint8Array): Promise<SevenZipEntry[]>;
|
|
45
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sevenzip/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAkCH,2CAA2C;AAC3C,MAAM,WAAW,kBAAkB;IAClC,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,0BAA0B;AAC1B,MAAM,WAAW,aAAa;IAC7B,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;CACb;AAuHD;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CA0DjF;AAqWD,0CAA0C;AAC1C,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA2E3E"}
|