@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/cli.js
ADDED
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* zipkit CLI
|
|
4
|
+
*
|
|
5
|
+
* A thin command line over the library, so ZipKit can be used straight from a
|
|
6
|
+
* terminal (`npm i -g @myrialabs/zipkit` / `bun add -g @myrialabs/zipkit`).
|
|
7
|
+
*
|
|
8
|
+
* zipkit compress <file> [--codec zstd] [--mode ratio] [--level N] [-o out]
|
|
9
|
+
* zipkit decompress <file> [--codec gzip] [-o out] (auto-detects by default)
|
|
10
|
+
* zipkit zip <archive.zip> <files...> [--method deflate|zstd|store]
|
|
11
|
+
* zipkit unzip <archive.zip> [-d <dir>]
|
|
12
|
+
* zipkit info <file> Inspect a file (format, or ZIP listing)
|
|
13
|
+
* zipkit bench <file> Compare every codec on a file
|
|
14
|
+
* zipkit version | help
|
|
15
|
+
*/
|
|
16
|
+
import { readFileSync, writeFileSync, mkdirSync, statSync, readdirSync } from 'node:fs';
|
|
17
|
+
import { dirname, join, basename, relative, sep } from 'node:path';
|
|
18
|
+
import { fileURLToPath } from 'node:url';
|
|
19
|
+
import { compress, decompress, decompressWith } from './compress.js';
|
|
20
|
+
import { detectFormat } from './detect.js';
|
|
21
|
+
import { zip as zipArchive, unzip as unzipArchive, listEntries } from './zip/index.js';
|
|
22
|
+
import { tar, untar, tarGz, untarGz, tarZstd, untarZstd } from './tar/index.js';
|
|
23
|
+
import { sevenZip, unSevenZip } from './sevenzip/index.js';
|
|
24
|
+
import { xz as xzCompressFn, unxz } from './codecs/xz.js';
|
|
25
|
+
import { presetCorpus } from './bench/corpus.js';
|
|
26
|
+
const CODECS = ['gzip', 'deflate', 'zlib', 'zstd', 'lz4', 'snappy', 'brotli', 'lzma', 'bzip2'];
|
|
27
|
+
/** Codecs selectable on the CLI — the {@link Codec} set plus the `xz` container. */
|
|
28
|
+
const CLI_CODECS = [...CODECS, 'xz'];
|
|
29
|
+
/** Compress with a CLI codec, routing `xz` to its container codec. */
|
|
30
|
+
function cliCompress(data, codec, opts) {
|
|
31
|
+
return codec === 'xz' ? xzCompressFn(data, opts) : compress(data, codec, opts);
|
|
32
|
+
}
|
|
33
|
+
/** Decompress with an explicit CLI codec, routing `xz` to its container codec. */
|
|
34
|
+
function cliDecompress(data, codec) {
|
|
35
|
+
return codec === 'xz' ? unxz(data) : decompressWith(data, codec);
|
|
36
|
+
}
|
|
37
|
+
const MODES = ['speed', 'balanced', 'ratio'];
|
|
38
|
+
// --- tiny ANSI helpers (no deps) ---
|
|
39
|
+
const useColor = process.stdout.isTTY && !process.env.NO_COLOR;
|
|
40
|
+
const wrap = (code) => (s) => (useColor ? `\x1b[${code}m${s}\x1b[0m` : s);
|
|
41
|
+
const c = {
|
|
42
|
+
bold: wrap('1'),
|
|
43
|
+
dim: wrap('2'),
|
|
44
|
+
red: wrap('31'),
|
|
45
|
+
green: wrap('32'),
|
|
46
|
+
cyan: wrap('36'),
|
|
47
|
+
accent: wrap('35')
|
|
48
|
+
};
|
|
49
|
+
const out = (s = '') => process.stdout.write(s + '\n');
|
|
50
|
+
const err = (s = '') => process.stderr.write(s + '\n');
|
|
51
|
+
function fail(message) {
|
|
52
|
+
err(c.red(message));
|
|
53
|
+
err(c.dim('Run `zipkit help` for usage.'));
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
function readVersion() {
|
|
57
|
+
try {
|
|
58
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
59
|
+
const pkg = JSON.parse(readFileSync(join(here, '..', 'package.json'), 'utf8'));
|
|
60
|
+
return pkg.version ?? '0.0.0';
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return '0.0.0';
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/** Minimal flag parser: `--key value`, `--flag`, `-o value`, rest are positionals. */
|
|
67
|
+
function parseArgs(argv) {
|
|
68
|
+
const positional = [];
|
|
69
|
+
const flags = {};
|
|
70
|
+
for (let i = 0; i < argv.length; i++) {
|
|
71
|
+
const a = argv[i];
|
|
72
|
+
if (a === '-o' || a === '--out') {
|
|
73
|
+
flags.out = argv[++i] ?? '';
|
|
74
|
+
}
|
|
75
|
+
else if (a === '-d' || a === '--dir') {
|
|
76
|
+
flags.dir = argv[++i] ?? '';
|
|
77
|
+
}
|
|
78
|
+
else if (a.startsWith('--')) {
|
|
79
|
+
const key = a.slice(2);
|
|
80
|
+
const next = argv[i + 1];
|
|
81
|
+
if (next === undefined || next.startsWith('-'))
|
|
82
|
+
flags[key] = true;
|
|
83
|
+
else
|
|
84
|
+
flags[key] = argv[++i];
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
positional.push(a);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return { positional, flags };
|
|
91
|
+
}
|
|
92
|
+
/** Read a file as a standalone Uint8Array (not a Buffer view into a pool). */
|
|
93
|
+
function readBytes(file) {
|
|
94
|
+
const buf = readFileSync(file);
|
|
95
|
+
return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
96
|
+
}
|
|
97
|
+
/** Recursively yield every regular file under `dir`. */
|
|
98
|
+
function* walkDir(dir) {
|
|
99
|
+
for (const ent of readdirSync(dir, { withFileTypes: true })) {
|
|
100
|
+
const p = join(dir, ent.name);
|
|
101
|
+
if (ent.isDirectory())
|
|
102
|
+
yield* walkDir(p);
|
|
103
|
+
else if (ent.isFile())
|
|
104
|
+
yield p;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Expand CLI inputs into archive entries. A directory is walked recursively and
|
|
109
|
+
* its files keep paths relative to the directory's parent (so `zipkit zip out
|
|
110
|
+
* mydir` stores `mydir/...`); a file is stored under its basename. Archive paths
|
|
111
|
+
* always use `/` separators.
|
|
112
|
+
*/
|
|
113
|
+
function collectEntries(inputs) {
|
|
114
|
+
const entries = [];
|
|
115
|
+
for (const input of inputs) {
|
|
116
|
+
const st = statSync(input);
|
|
117
|
+
if (st.isDirectory()) {
|
|
118
|
+
const base = dirname(input);
|
|
119
|
+
for (const filePath of walkDir(input)) {
|
|
120
|
+
entries.push({ name: relative(base, filePath).split(sep).join('/'), data: readBytes(filePath) });
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
entries.push({ name: basename(input), data: readBytes(input) });
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return entries;
|
|
128
|
+
}
|
|
129
|
+
function fmtBytes(n) {
|
|
130
|
+
if (n < 1024)
|
|
131
|
+
return `${n} B`;
|
|
132
|
+
if (n < 1024 * 1024)
|
|
133
|
+
return `${(n / 1024).toFixed(1)} KB`;
|
|
134
|
+
return `${(n / 1024 / 1024).toFixed(2)} MB`;
|
|
135
|
+
}
|
|
136
|
+
const EXT = {
|
|
137
|
+
gzip: 'gz',
|
|
138
|
+
zlib: 'zz',
|
|
139
|
+
deflate: 'deflate',
|
|
140
|
+
zstd: 'zst',
|
|
141
|
+
lz4: 'lz4',
|
|
142
|
+
snappy: 'snappy',
|
|
143
|
+
brotli: 'br',
|
|
144
|
+
lzma: 'lzma',
|
|
145
|
+
bzip2: 'bz2'
|
|
146
|
+
};
|
|
147
|
+
const XZ_EXT = 'xz';
|
|
148
|
+
async function cmdCompress(args) {
|
|
149
|
+
const file = args.positional[0];
|
|
150
|
+
if (!file)
|
|
151
|
+
fail('Usage: zipkit compress <file> [--codec <codec>] [--mode speed|balanced|ratio] [--level N] [-o out]');
|
|
152
|
+
const codec = args.flags.codec ?? 'zstd';
|
|
153
|
+
if (!CLI_CODECS.includes(codec))
|
|
154
|
+
fail(`Unknown codec: ${codec}. One of: ${CLI_CODECS.join(', ')}`);
|
|
155
|
+
const mode = args.flags.mode;
|
|
156
|
+
if (mode && !MODES.includes(mode))
|
|
157
|
+
fail(`Unknown mode: ${mode}. One of: ${MODES.join(', ')}`);
|
|
158
|
+
const level = typeof args.flags.level === 'string' ? Number(args.flags.level) : undefined;
|
|
159
|
+
const data = readBytes(file);
|
|
160
|
+
const compressed = await cliCompress(data, codec, { mode, level });
|
|
161
|
+
const dest = args.flags.out ?? `${file}.${codec === 'xz' ? XZ_EXT : EXT[codec] ?? codec}`;
|
|
162
|
+
writeFileSync(dest, compressed);
|
|
163
|
+
const ratio = data.length ? (compressed.length / data.length) : 0;
|
|
164
|
+
out(`${c.green('✓')} ${codec} ${fmtBytes(data.length)} → ${fmtBytes(compressed.length)} ` +
|
|
165
|
+
c.dim(`(${(ratio * 100).toFixed(1)}%) ${dest}`));
|
|
166
|
+
}
|
|
167
|
+
async function cmdDecompress(args) {
|
|
168
|
+
const file = args.positional[0];
|
|
169
|
+
if (!file)
|
|
170
|
+
fail('Usage: zipkit decompress <file> [--codec <codec>] [-o out]');
|
|
171
|
+
const data = readBytes(file);
|
|
172
|
+
const codec = args.flags.codec;
|
|
173
|
+
if (codec && !CLI_CODECS.includes(codec))
|
|
174
|
+
fail(`Unknown codec: ${codec}. One of: ${CLI_CODECS.join(', ')}`);
|
|
175
|
+
const result = codec ? await cliDecompress(data, codec) : await decompress(data);
|
|
176
|
+
const dest = args.flags.out ?? (file.replace(/\.[^.]+$/, '') || `${file}.out`);
|
|
177
|
+
writeFileSync(dest, result);
|
|
178
|
+
out(`${c.green('✓')} ${fmtBytes(data.length)} → ${fmtBytes(result.length)} ${c.dim(dest)}`);
|
|
179
|
+
}
|
|
180
|
+
async function cmdZip(args) {
|
|
181
|
+
const [archive, ...inputs] = args.positional;
|
|
182
|
+
if (!archive || inputs.length === 0) {
|
|
183
|
+
fail('Usage: zipkit zip <archive.zip> <files|dirs...> [--method deflate|zstd|store]');
|
|
184
|
+
}
|
|
185
|
+
const method = args.flags.method ?? 'deflate';
|
|
186
|
+
const entries = collectEntries(inputs).map((e) => ({ ...e, method }));
|
|
187
|
+
const out2 = await zipArchive(entries);
|
|
188
|
+
writeFileSync(archive, out2);
|
|
189
|
+
out(`${c.green('✓')} ${entries.length} file(s) → ${archive} ${c.dim(`(${fmtBytes(out2.length)})`)}`);
|
|
190
|
+
}
|
|
191
|
+
/** Pick the tar flavor from the archive extension. */
|
|
192
|
+
function tarFlavor(name) {
|
|
193
|
+
if (/\.t(ar\.)?gz$/i.test(name) || /\.taz$/i.test(name))
|
|
194
|
+
return 'gz';
|
|
195
|
+
if (/\.t(ar\.)?zst?$/i.test(name))
|
|
196
|
+
return 'zst';
|
|
197
|
+
return 'plain';
|
|
198
|
+
}
|
|
199
|
+
async function cmdTar(args) {
|
|
200
|
+
const [archive, ...inputs] = args.positional;
|
|
201
|
+
if (!archive || inputs.length === 0) {
|
|
202
|
+
fail('Usage: zipkit tar <archive.tar|.tar.gz|.tar.zst> <files|dirs...>');
|
|
203
|
+
}
|
|
204
|
+
const entries = collectEntries(inputs);
|
|
205
|
+
const flavor = tarFlavor(archive);
|
|
206
|
+
const bytes = flavor === 'gz' ? await tarGz(entries) : flavor === 'zst' ? await tarZstd(entries) : tar(entries);
|
|
207
|
+
writeFileSync(archive, bytes);
|
|
208
|
+
out(`${c.green('✓')} ${entries.length} file(s) → ${archive} ${c.dim(`(${fmtBytes(bytes.length)}, ${flavor})`)}`);
|
|
209
|
+
}
|
|
210
|
+
async function cmdUntar(args) {
|
|
211
|
+
const file = args.positional[0];
|
|
212
|
+
if (!file)
|
|
213
|
+
fail('Usage: zipkit untar <archive.tar|.tar.gz|.tar.zst> [-d <dir>]');
|
|
214
|
+
const dir = args.flags.dir ?? '.';
|
|
215
|
+
const data = readBytes(file);
|
|
216
|
+
const flavor = tarFlavor(file);
|
|
217
|
+
const entries = flavor === 'gz' ? await untarGz(data) : flavor === 'zst' ? await untarZstd(data) : untar(data);
|
|
218
|
+
let files = 0;
|
|
219
|
+
for (const e of entries) {
|
|
220
|
+
const dest = join(dir, e.name);
|
|
221
|
+
if (e.type === 'directory') {
|
|
222
|
+
mkdirSync(dest, { recursive: true });
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
mkdirSync(dirname(dest), { recursive: true });
|
|
226
|
+
writeFileSync(dest, e.data);
|
|
227
|
+
files++;
|
|
228
|
+
out(` ${c.dim('extract')} ${e.name} ${c.dim(`(${fmtBytes(e.size)})`)}`);
|
|
229
|
+
}
|
|
230
|
+
out(`${c.green('✓')} ${files} file(s) → ${dir}`);
|
|
231
|
+
}
|
|
232
|
+
async function cmdUnzip(args) {
|
|
233
|
+
const file = args.positional[0];
|
|
234
|
+
if (!file)
|
|
235
|
+
fail('Usage: zipkit unzip <archive.zip> [-d <dir>]');
|
|
236
|
+
const dir = args.flags.dir ?? '.';
|
|
237
|
+
const input = readFileSync(file);
|
|
238
|
+
const entries = await unzipArchive(new Uint8Array(input.buffer, input.byteOffset, input.byteLength));
|
|
239
|
+
for (const e of entries) {
|
|
240
|
+
const dest = join(dir, e.name);
|
|
241
|
+
mkdirSync(dirname(dest), { recursive: true });
|
|
242
|
+
writeFileSync(dest, e.data);
|
|
243
|
+
out(` ${c.dim('extract')} ${e.name} ${c.dim(`(${fmtBytes(e.size)})`)}`);
|
|
244
|
+
}
|
|
245
|
+
out(`${c.green('✓')} ${entries.length} file(s) → ${dir}`);
|
|
246
|
+
}
|
|
247
|
+
async function cmdSevenZip(args) {
|
|
248
|
+
const [archive, ...inputs] = args.positional;
|
|
249
|
+
if (!archive || inputs.length === 0)
|
|
250
|
+
fail('Usage: zipkit 7z <archive.7z> <files|dirs...> [--method lzma|copy]');
|
|
251
|
+
const method = args.flags.method ?? 'lzma';
|
|
252
|
+
const entries = collectEntries(inputs).map((e) => ({ ...e, method }));
|
|
253
|
+
const bytes = await sevenZip(entries);
|
|
254
|
+
writeFileSync(archive, bytes);
|
|
255
|
+
out(`${c.green('✓')} ${entries.length} file(s) → ${archive} ${c.dim(`(${fmtBytes(bytes.length)})`)}`);
|
|
256
|
+
}
|
|
257
|
+
async function cmdUnSevenZip(args) {
|
|
258
|
+
const file = args.positional[0];
|
|
259
|
+
if (!file)
|
|
260
|
+
fail('Usage: zipkit un7z <archive.7z> [-d <dir>]');
|
|
261
|
+
const dir = args.flags.dir ?? '.';
|
|
262
|
+
const entries = await unSevenZip(readBytes(file));
|
|
263
|
+
for (const e of entries) {
|
|
264
|
+
const dest = join(dir, e.name);
|
|
265
|
+
mkdirSync(dirname(dest), { recursive: true });
|
|
266
|
+
writeFileSync(dest, e.data);
|
|
267
|
+
out(` ${c.dim('extract')} ${e.name} ${c.dim(`(${fmtBytes(e.size)})`)}`);
|
|
268
|
+
}
|
|
269
|
+
out(`${c.green('✓')} ${entries.length} file(s) → ${dir}`);
|
|
270
|
+
}
|
|
271
|
+
async function cmdInfo(args) {
|
|
272
|
+
const file = args.positional[0];
|
|
273
|
+
if (!file)
|
|
274
|
+
fail('Usage: zipkit info <file>');
|
|
275
|
+
const input = readFileSync(file);
|
|
276
|
+
const data = new Uint8Array(input.buffer, input.byteOffset, input.byteLength);
|
|
277
|
+
const fmt = detectFormat(data);
|
|
278
|
+
out(`${c.bold(file)} ${c.dim(fmtBytes(data.length))}`);
|
|
279
|
+
out(`format: ${fmt ? c.cyan(fmt) : c.dim('unrecognized (headerless codec or raw data)')}`);
|
|
280
|
+
if (fmt === 'zip') {
|
|
281
|
+
const list = await listEntries(data);
|
|
282
|
+
out(c.dim(`${list.length} entries:`));
|
|
283
|
+
for (const e of list) {
|
|
284
|
+
out(` ${e.name} ${c.dim(`${fmtBytes(e.size)} → ${fmtBytes(e.compressedSize)}, method ${e.method}`)}`);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/** Run every CLI codec over `data`, returning one row each. */
|
|
289
|
+
async function benchDataset(data) {
|
|
290
|
+
const rows = [];
|
|
291
|
+
for (const codec of CLI_CODECS) {
|
|
292
|
+
try {
|
|
293
|
+
const t0 = performance.now();
|
|
294
|
+
const comp = await cliCompress(data, codec);
|
|
295
|
+
const t1 = performance.now();
|
|
296
|
+
await cliDecompress(comp, codec);
|
|
297
|
+
const t2 = performance.now();
|
|
298
|
+
rows.push({
|
|
299
|
+
codec,
|
|
300
|
+
ratio: data.length ? comp.length / data.length : 0,
|
|
301
|
+
size: comp.length,
|
|
302
|
+
compMs: t1 - t0,
|
|
303
|
+
decompMs: t2 - t1
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
catch (e) {
|
|
307
|
+
rows.push({ codec, ratio: 0, size: 0, compMs: 0, decompMs: 0, error: e instanceof Error ? e.message : String(e) });
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return rows;
|
|
311
|
+
}
|
|
312
|
+
function printBenchTable(rows) {
|
|
313
|
+
out(c.dim('codec ratio size comp decomp'));
|
|
314
|
+
for (const r of rows) {
|
|
315
|
+
if (r.error) {
|
|
316
|
+
out(`${r.codec.padEnd(9)} ${c.red('failed')} ${c.dim(r.error)}`);
|
|
317
|
+
continue;
|
|
318
|
+
}
|
|
319
|
+
out(`${r.codec.padEnd(9)} ${(r.ratio * 100).toFixed(1).padStart(5)}% ${fmtBytes(r.size).padStart(10)} ` +
|
|
320
|
+
`${r.compMs.toFixed(1).padStart(6)}ms ${r.decompMs.toFixed(1).padStart(6)}ms`);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
async function cmdBench(args) {
|
|
324
|
+
const file = args.positional[0];
|
|
325
|
+
const asJson = args.flags.json === true;
|
|
326
|
+
// Datasets: an explicit file, or the built-in deterministic preset corpus.
|
|
327
|
+
const datasets = file
|
|
328
|
+
? [{ name: file, data: readBytes(file) }]
|
|
329
|
+
: presetCorpus().map((d) => ({ name: d.name, description: d.description, data: d.data }));
|
|
330
|
+
const report = [];
|
|
331
|
+
for (const ds of datasets) {
|
|
332
|
+
report.push({ dataset: ds.name, bytes: ds.data.length, rows: await benchDataset(ds.data) });
|
|
333
|
+
}
|
|
334
|
+
if (asJson) {
|
|
335
|
+
out(JSON.stringify(report, null, 2));
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
338
|
+
if (!file)
|
|
339
|
+
out(c.dim('No file given — benchmarking the built-in preset corpus.'));
|
|
340
|
+
for (const r of report) {
|
|
341
|
+
out('');
|
|
342
|
+
out(`${c.bold('bench')} ${r.dataset} ${c.dim(`(${fmtBytes(r.bytes)})`)}`);
|
|
343
|
+
printBenchTable(r.rows);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
function showHelp(version) {
|
|
347
|
+
out(`
|
|
348
|
+
${c.accent('zipkit')} ${c.dim(`v${version}`)} — overkill compression from your terminal
|
|
349
|
+
|
|
350
|
+
${c.bold('USAGE')}
|
|
351
|
+
zipkit <command> [options]
|
|
352
|
+
|
|
353
|
+
${c.bold('COMMANDS')}
|
|
354
|
+
compress <file> Compress a file ${c.dim('--codec <c> --mode <m> --level N -o out')}
|
|
355
|
+
decompress <file> Decompress a file ${c.dim('--codec <c> (auto-detects) -o out')}
|
|
356
|
+
zip <out.zip> <files|dirs...> Create a ZIP ${c.dim('--method deflate|zstd|store (dirs recurse)')}
|
|
357
|
+
unzip <archive.zip> Extract a ZIP ${c.dim('-d <dir>')}
|
|
358
|
+
tar <out.tar[.gz|.zst]> <files|dirs...> Create a tarball ${c.dim('(flavor by extension)')}
|
|
359
|
+
untar <archive.tar[.gz|.zst]> Extract a tarball ${c.dim('-d <dir>')}
|
|
360
|
+
7z <out.7z> <files|dirs...> Create a 7z archive ${c.dim('--method lzma|copy')}
|
|
361
|
+
un7z <archive.7z> Extract a 7z archive ${c.dim('-d <dir>')}
|
|
362
|
+
info <file> Show format / ZIP listing
|
|
363
|
+
bench [file] Compare every codec ${c.dim('(preset corpus if no file; --json for CI)')}
|
|
364
|
+
version Print the version
|
|
365
|
+
help Show this help
|
|
366
|
+
|
|
367
|
+
${c.bold('CODECS')}
|
|
368
|
+
${CLI_CODECS.join(', ')}
|
|
369
|
+
|
|
370
|
+
${c.bold('MODES')}
|
|
371
|
+
${MODES.join(', ')} ${c.dim('(speed | balanced [default] | ratio — picks a codec-specific level)')}
|
|
372
|
+
|
|
373
|
+
${c.bold('EXAMPLES')}
|
|
374
|
+
zipkit compress data.json --codec zstd --mode ratio
|
|
375
|
+
zipkit decompress data.json.zst
|
|
376
|
+
zipkit zip site.zip ./public --method zstd
|
|
377
|
+
zipkit unzip site.zip -d ./out
|
|
378
|
+
zipkit tar release.tar.zst ./dist
|
|
379
|
+
zipkit untar release.tar.zst -d ./out
|
|
380
|
+
zipkit bench big.log
|
|
381
|
+
|
|
382
|
+
Docs: https://github.com/myrialabs/zipkit
|
|
383
|
+
`);
|
|
384
|
+
}
|
|
385
|
+
async function main() {
|
|
386
|
+
const version = readVersion();
|
|
387
|
+
const argv = process.argv.slice(2);
|
|
388
|
+
const command = argv[0];
|
|
389
|
+
if (!command || command === 'help' || command === '-h' || command === '--help') {
|
|
390
|
+
showHelp(version);
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
if (command === 'version' || command === '-v' || command === '--version') {
|
|
394
|
+
out(`v${version}`);
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
397
|
+
const rest = parseArgs(argv.slice(1));
|
|
398
|
+
switch (command) {
|
|
399
|
+
case 'compress':
|
|
400
|
+
return cmdCompress(rest);
|
|
401
|
+
case 'decompress':
|
|
402
|
+
return cmdDecompress(rest);
|
|
403
|
+
case 'zip':
|
|
404
|
+
return cmdZip(rest);
|
|
405
|
+
case 'unzip':
|
|
406
|
+
return cmdUnzip(rest);
|
|
407
|
+
case 'tar':
|
|
408
|
+
return cmdTar(rest);
|
|
409
|
+
case 'untar':
|
|
410
|
+
return cmdUntar(rest);
|
|
411
|
+
case '7z':
|
|
412
|
+
return cmdSevenZip(rest);
|
|
413
|
+
case 'un7z':
|
|
414
|
+
return cmdUnSevenZip(rest);
|
|
415
|
+
case 'info':
|
|
416
|
+
return cmdInfo(rest);
|
|
417
|
+
case 'bench':
|
|
418
|
+
return cmdBench(rest);
|
|
419
|
+
default:
|
|
420
|
+
fail(`Unknown command: ${command}`);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
main().catch((e) => {
|
|
424
|
+
err(c.red(`Error: ${e instanceof Error ? e.message : String(e)}`));
|
|
425
|
+
process.exit(1);
|
|
426
|
+
});
|
|
427
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CompressOptions, DecompressOptions } from '../types.js';
|
|
2
|
+
/** Compress with Brotli. Quality `0`–`11` via `level`; mode chooses the default. */
|
|
3
|
+
export declare function brotli(data: Uint8Array, opts?: CompressOptions): Promise<Uint8Array>;
|
|
4
|
+
/** Decompress a Brotli buffer. */
|
|
5
|
+
export declare function unbrotli(data: Uint8Array, opts?: DecompressOptions): Promise<Uint8Array>;
|
|
6
|
+
//# sourceMappingURL=brotli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brotli.d.ts","sourceRoot":"","sources":["../../src/codecs/brotli.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEtE,oFAAoF;AACpF,wBAAsB,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAI1F;AAED,kCAAkC;AAClC,wBAAsB,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CAG9F"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Brotli codec — brotli 1.1.0. Excellent ratio, web-standard. */
|
|
2
|
+
import { getEngine } from '../engine.js';
|
|
3
|
+
import { levelForMode, runAsync } from '../internal.js';
|
|
4
|
+
/** Compress with Brotli. Quality `0`–`11` via `level`; mode chooses the default. */
|
|
5
|
+
export async function brotli(data, opts) {
|
|
6
|
+
const e = await getEngine();
|
|
7
|
+
const quality = levelForMode(opts, 0, 11, { speed: 4, balanced: 6, ratio: 11 });
|
|
8
|
+
return runAsync(() => e.brotliCompress(data, quality), opts, data.length);
|
|
9
|
+
}
|
|
10
|
+
/** Decompress a Brotli buffer. */
|
|
11
|
+
export async function unbrotli(data, opts) {
|
|
12
|
+
const e = await getEngine();
|
|
13
|
+
return runAsync(() => e.brotliDecompress(data), opts, data.length);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=brotli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brotli.js","sourceRoot":"","sources":["../../src/codecs/brotli.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAGxD,oFAAoF;AACpF,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAgB,EAAE,IAAsB;IACpE,MAAM,CAAC,GAAG,MAAM,SAAS,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAChF,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3E,CAAC;AAED,kCAAkC;AAClC,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAgB,EAAE,IAAwB;IACxE,MAAM,CAAC,GAAG,MAAM,SAAS,EAAE,CAAC;IAC5B,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CompressOptions, DecompressOptions } from '../types.js';
|
|
2
|
+
/** Compress with bzip2. Level `1`–`9`; mode chooses the default. */
|
|
3
|
+
export declare function bzip2(data: Uint8Array, opts?: CompressOptions): Promise<Uint8Array>;
|
|
4
|
+
/** Decompress a bzip2 buffer. */
|
|
5
|
+
export declare function unbzip2(data: Uint8Array, opts?: DecompressOptions): Promise<Uint8Array>;
|
|
6
|
+
//# sourceMappingURL=bzip2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bzip2.d.ts","sourceRoot":"","sources":["../../src/codecs/bzip2.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEtE,oEAAoE;AACpE,wBAAsB,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAIzF;AAED,iCAAiC;AACjC,wBAAsB,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CAG7F"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** bzip2 codec — bzip2 1.0.8. Burrows–Wheeler; great on text. */
|
|
2
|
+
import { getEngine } from '../engine.js';
|
|
3
|
+
import { levelForMode, runAsync } from '../internal.js';
|
|
4
|
+
/** Compress with bzip2. Level `1`–`9`; mode chooses the default. */
|
|
5
|
+
export async function bzip2(data, opts) {
|
|
6
|
+
const e = await getEngine();
|
|
7
|
+
const level = levelForMode(opts, 1, 9, { speed: 1, balanced: 6, ratio: 9 });
|
|
8
|
+
return runAsync(() => e.bzip2Compress(data, level), opts, data.length);
|
|
9
|
+
}
|
|
10
|
+
/** Decompress a bzip2 buffer. */
|
|
11
|
+
export async function unbzip2(data, opts) {
|
|
12
|
+
const e = await getEngine();
|
|
13
|
+
return runAsync(() => e.bzip2Decompress(data), opts, data.length);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=bzip2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bzip2.js","sourceRoot":"","sources":["../../src/codecs/bzip2.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAGxD,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAgB,EAAE,IAAsB;IACnE,MAAM,CAAC,GAAG,MAAM,SAAS,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5E,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACxE,CAAC;AAED,iCAAiC;AACjC,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAgB,EAAE,IAAwB;IACvE,MAAM,CAAC,GAAG,MAAM,SAAS,EAAE,CAAC;IAC5B,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CompressOptions, DecompressOptions } from '../types.js';
|
|
2
|
+
/** Compress to a raw DEFLATE stream. Level `0`–`9`; mode chooses the default. */
|
|
3
|
+
export declare function deflate(data: Uint8Array, opts?: CompressOptions): Promise<Uint8Array>;
|
|
4
|
+
/** Decompress a raw DEFLATE stream. */
|
|
5
|
+
export declare function inflate(data: Uint8Array, opts?: DecompressOptions): Promise<Uint8Array>;
|
|
6
|
+
//# sourceMappingURL=deflate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deflate.d.ts","sourceRoot":"","sources":["../../src/codecs/deflate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAMtE,iFAAiF;AACjF,wBAAsB,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAQ3F;AAED,uCAAuC;AACvC,wBAAsB,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CAK7F"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Raw DEFLATE codec (RFC 1951) — libdeflate, standard-format compatible. */
|
|
2
|
+
import { getEngine } from '../engine.js';
|
|
3
|
+
import { bunRuntime, compressionMode, levelForMode, runAsync } from '../internal.js';
|
|
4
|
+
function useNativeDeflate(opts) {
|
|
5
|
+
return compressionMode(opts) !== 'ratio' && !!bunRuntime()?.deflateSync;
|
|
6
|
+
}
|
|
7
|
+
/** Compress to a raw DEFLATE stream. Level `0`–`9`; mode chooses the default. */
|
|
8
|
+
export async function deflate(data, opts) {
|
|
9
|
+
const level = levelForMode(opts, 0, 9, { speed: 1, balanced: 6, ratio: 9 });
|
|
10
|
+
const bun = bunRuntime();
|
|
11
|
+
if (useNativeDeflate(opts)) {
|
|
12
|
+
return runAsync(() => bun.deflateSync(data, { level }), opts, data.length);
|
|
13
|
+
}
|
|
14
|
+
const e = await getEngine();
|
|
15
|
+
return runAsync(() => e.deflateCompress(data, level), opts, data.length);
|
|
16
|
+
}
|
|
17
|
+
/** Decompress a raw DEFLATE stream. */
|
|
18
|
+
export async function inflate(data, opts) {
|
|
19
|
+
const bun = bunRuntime();
|
|
20
|
+
if (bun?.inflateSync)
|
|
21
|
+
return runAsync(() => bun.inflateSync(data), opts, data.length);
|
|
22
|
+
const e = await getEngine();
|
|
23
|
+
return runAsync(() => e.deflateDecompress(data), opts, data.length);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=deflate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deflate.js","sourceRoot":"","sources":["../../src/codecs/deflate.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAGrF,SAAS,gBAAgB,CAAC,IAAsB;IAC/C,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,WAAW,CAAC;AACzE,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAgB,EAAE,IAAsB;IACrE,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,CAAC,GAAG,MAAM,SAAS,EAAE,CAAC;IAC5B,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1E,CAAC;AAED,uCAAuC;AACvC,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAgB,EAAE,IAAwB;IACvE,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,GAAG,EAAE,WAAW;QAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACtF,MAAM,CAAC,GAAG,MAAM,SAAS,EAAE,CAAC;IAC5B,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CompressOptions, DecompressOptions } from '../types.js';
|
|
2
|
+
/** Compress to the gzip format. Level `0`–`9`; mode chooses the default. */
|
|
3
|
+
export declare function gzip(data: Uint8Array, opts?: CompressOptions): Promise<Uint8Array>;
|
|
4
|
+
/** Decompress a gzip buffer. */
|
|
5
|
+
export declare function gunzip(data: Uint8Array, opts?: DecompressOptions): Promise<Uint8Array>;
|
|
6
|
+
//# sourceMappingURL=gzip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gzip.d.ts","sourceRoot":"","sources":["../../src/codecs/gzip.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAMtE,4EAA4E;AAC5E,wBAAsB,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAQxF;AAED,gCAAgC;AAChC,wBAAsB,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CAK5F"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** gzip codec (RFC 1952) — libdeflate, standard-format compatible. */
|
|
2
|
+
import { getEngine } from '../engine.js';
|
|
3
|
+
import { bunRuntime, compressionMode, levelForMode, runAsync } from '../internal.js';
|
|
4
|
+
function useNativeGzip(opts) {
|
|
5
|
+
return compressionMode(opts) !== 'ratio' && !!bunRuntime()?.gzipSync;
|
|
6
|
+
}
|
|
7
|
+
/** Compress to the gzip format. Level `0`–`9`; mode chooses the default. */
|
|
8
|
+
export async function gzip(data, opts) {
|
|
9
|
+
const level = levelForMode(opts, 0, 9, { speed: 1, balanced: 6, ratio: 9 });
|
|
10
|
+
const bun = bunRuntime();
|
|
11
|
+
if (useNativeGzip(opts)) {
|
|
12
|
+
return runAsync(() => bun.gzipSync(data, { level }), opts, data.length);
|
|
13
|
+
}
|
|
14
|
+
const e = await getEngine();
|
|
15
|
+
return runAsync(() => e.gzipCompress(data, level), opts, data.length);
|
|
16
|
+
}
|
|
17
|
+
/** Decompress a gzip buffer. */
|
|
18
|
+
export async function gunzip(data, opts) {
|
|
19
|
+
const bun = bunRuntime();
|
|
20
|
+
if (bun?.gunzipSync)
|
|
21
|
+
return runAsync(() => bun.gunzipSync(data), opts, data.length);
|
|
22
|
+
const e = await getEngine();
|
|
23
|
+
return runAsync(() => e.gzipDecompress(data), opts, data.length);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=gzip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gzip.js","sourceRoot":"","sources":["../../src/codecs/gzip.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAGrF,SAAS,aAAa,CAAC,IAAsB;IAC5C,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,QAAQ,CAAC;AACtE,CAAC;AAED,4EAA4E;AAC5E,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAgB,EAAE,IAAsB;IAClE,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,CAAC,GAAG,MAAM,SAAS,EAAE,CAAC;IAC5B,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACvE,CAAC;AAED,gCAAgC;AAChC,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAgB,EAAE,IAAwB;IACtE,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,GAAG,EAAE,UAAU;QAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACpF,MAAM,CAAC,GAAG,MAAM,SAAS,EAAE,CAAC;IAC5B,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Encode raw RGB/RGBA pixels to QOI bytes. */
|
|
2
|
+
export declare function encodeImage(pixels: Uint8Array, width: number, height: number, channels: 3 | 4): Promise<Uint8Array>;
|
|
3
|
+
/** Decode QOI bytes back to raw interleaved pixels. */
|
|
4
|
+
export declare function decodeImage(data: Uint8Array): Promise<Uint8Array>;
|
|
5
|
+
//# sourceMappingURL=image.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../src/codecs/image.ts"],"names":[],"mappings":"AAMA,+CAA+C;AAC/C,wBAAsB,WAAW,CAChC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,CAAC,GAAG,CAAC,GACb,OAAO,CAAC,UAAU,CAAC,CAGrB;AAED,uDAAuD;AACvD,wBAAsB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAGvE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QOI — the Quite OK Image format. Lossless, single-pass, and tiny to decode.
|
|
3
|
+
* Operates on raw interleaved pixel bytes (RGB = 3 channels, RGBA = 4).
|
|
4
|
+
*/
|
|
5
|
+
import { getEngine } from '../engine.js';
|
|
6
|
+
/** Encode raw RGB/RGBA pixels to QOI bytes. */
|
|
7
|
+
export async function encodeImage(pixels, width, height, channels) {
|
|
8
|
+
const e = await getEngine();
|
|
9
|
+
return e.qoiEncode(pixels, width, height, channels);
|
|
10
|
+
}
|
|
11
|
+
/** Decode QOI bytes back to raw interleaved pixels. */
|
|
12
|
+
export async function decodeImage(data) {
|
|
13
|
+
const e = await getEngine();
|
|
14
|
+
return e.qoiDecode(data);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/codecs/image.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,+CAA+C;AAC/C,MAAM,CAAC,KAAK,UAAU,WAAW,CAChC,MAAkB,EAClB,KAAa,EACb,MAAc,EACd,QAAe;IAEf,MAAM,CAAC,GAAG,MAAM,SAAS,EAAE,CAAC;IAC5B,OAAO,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED,uDAAuD;AACvD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAgB;IACjD,MAAM,CAAC,GAAG,MAAM,SAAS,EAAE,CAAC;IAC5B,OAAO,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|