text-compress 2.0.2 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -1
- package/dist/cli/analytics.d.ts +14 -3
- package/dist/cli/analytics.d.ts.map +1 -1
- package/dist/cli/analytics.js +46 -8
- package/dist/cli/analytics.js.map +1 -1
- package/dist/cli/commands/compress.d.ts.map +1 -1
- package/dist/cli/commands/compress.js +31 -26
- package/dist/cli/commands/compress.js.map +1 -1
- package/dist/cli/commands/decompress.d.ts.map +1 -1
- package/dist/cli/commands/decompress.js +24 -18
- package/dist/cli/commands/decompress.js.map +1 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +8 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/output.d.ts +1 -7
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +1 -20
- package/dist/cli/output.js.map +1 -1
- package/dist/cli/usage.d.ts.map +1 -1
- package/dist/cli/usage.js +4 -2
- package/dist/cli/usage.js.map +1 -1
- package/dist/cli/version.d.ts +8 -0
- package/dist/cli/version.d.ts.map +1 -0
- package/dist/cli/version.js +19 -0
- package/dist/cli/version.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/split/parts.d.ts +35 -9
- package/dist/split/parts.d.ts.map +1 -1
- package/dist/split/parts.js +162 -26
- package/dist/split/parts.js.map +1 -1
- package/dist/streaming/folder.d.ts.map +1 -1
- package/dist/streaming/folder.js +10 -62
- package/dist/streaming/folder.js.map +1 -1
- package/package.json +8 -3
- package/skills/text-compress/cli/SKILL.md +2 -2
package/README.md
CHANGED
|
@@ -67,6 +67,9 @@ text-compress ./large-file.txt -s 4000
|
|
|
67
67
|
# Inline text
|
|
68
68
|
text-compress -t "hello world" -o output.txt
|
|
69
69
|
|
|
70
|
+
# Show version
|
|
71
|
+
text-compress --version
|
|
72
|
+
|
|
70
73
|
# Force mode when auto-detect is wrong
|
|
71
74
|
text-compress --compress ./looks-compressed.txt
|
|
72
75
|
text-compress --decompress ./plain.md # errors if not valid payload
|
|
@@ -139,7 +142,7 @@ Password-protected payloads error without `-p` (they are **not** silently re-com
|
|
|
139
142
|
|
|
140
143
|
## v2 split output
|
|
141
144
|
|
|
142
|
-
Large outputs split into numbered files (`output.1.txt`, `output.02.txt`, …). Each part embeds order in a `
|
|
145
|
+
Large outputs split into numbered files (`output.1.txt`, `output.02.txt`, …). Each part embeds order in a printable ASCII header (`;TCP2;<part>;<total>;`). The `-s` limit applies to the **entire part file** (header + payload), not just the encoded content.
|
|
143
146
|
|
|
144
147
|
On decompress:
|
|
145
148
|
|
|
@@ -168,10 +171,34 @@ npm run build
|
|
|
168
171
|
npm run check
|
|
169
172
|
```
|
|
170
173
|
|
|
174
|
+
Git hooks (via [Husky](https://typicode.github.io/husky/)) run automatically after `bun install`:
|
|
175
|
+
|
|
176
|
+
- **pre-commit** — `lint` + `typecheck`
|
|
177
|
+
- **pre-push** — `check:ci` + `test`
|
|
178
|
+
|
|
179
|
+
### Publish
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
npm login
|
|
183
|
+
npm publish --access public
|
|
184
|
+
```
|
|
185
|
+
|
|
171
186
|
See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) and [docs/LEARNING.md](docs/LEARNING.md).
|
|
172
187
|
|
|
173
188
|
## Changelog
|
|
174
189
|
|
|
190
|
+
### v2.0.4 — `text-compress` (2026-07-09)
|
|
191
|
+
|
|
192
|
+
- Show package version on every run (`text-compress v2.0.4`)
|
|
193
|
+
- Add `-V` / `--version` flag
|
|
194
|
+
- Improve CLI summary: aligned stats, human-readable sizes, clearer split output
|
|
195
|
+
|
|
196
|
+
### v2.0.3 — `text-compress` (2026-07-09)
|
|
197
|
+
|
|
198
|
+
- Use printable ASCII `;TCP2;` split headers so part files stay copyable in text editors (legacy binary `TCP\x02` headers still accepted on read)
|
|
199
|
+
- Apply `-s` / auto-split limits to the full part file size, including the header
|
|
200
|
+
- Add Husky git hooks (`pre-commit`: lint + typecheck, `pre-push`: check + test)
|
|
201
|
+
|
|
175
202
|
### v2.0.2 — `text-compress` (2026-07-09)
|
|
176
203
|
|
|
177
204
|
- Ship [TanStack Intent](https://tanstack.com/intent/latest/docs/overview) agent skills (`core`, `cli`, `library`) inside the npm package
|
package/dist/cli/analytics.d.ts
CHANGED
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module cli/analytics
|
|
3
3
|
*
|
|
4
|
-
* Post-run
|
|
4
|
+
* Post-run summary printed to stdout after each CLI command.
|
|
5
5
|
*/
|
|
6
|
-
/** Print
|
|
7
|
-
export declare function
|
|
6
|
+
/** Print package version and exit (for `-V` / `--version`). */
|
|
7
|
+
export declare function printVersion(): void;
|
|
8
|
+
/** Format a byte count for human-readable CLI output. */
|
|
9
|
+
export declare function formatBytes(bytes: number): string;
|
|
10
|
+
/** Format integers with thousands separators. */
|
|
11
|
+
export declare function formatCount(value: number): string;
|
|
12
|
+
export interface RunSummary {
|
|
13
|
+
title: string;
|
|
14
|
+
outputPaths: string[];
|
|
15
|
+
stats: Record<string, string | number>;
|
|
16
|
+
}
|
|
17
|
+
/** Print a versioned, aligned summary block after a successful run. */
|
|
18
|
+
export declare function printRunSummary(summary: RunSummary): void;
|
|
8
19
|
/** Build split-related analytics fields when output was split. */
|
|
9
20
|
export declare function splitAnalytics(splitChunkSize: number | undefined, outputParts: number): Record<string, string | number>;
|
|
10
21
|
//# sourceMappingURL=analytics.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/cli/analytics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/cli/analytics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,+DAA+D;AAC/D,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAED,yDAAyD;AACzD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAYjD;AAED,iDAAiD;AACjD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAA;CACvC;AAED,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAoBzD;AAED,kEAAkE;AAClE,wBAAgB,cAAc,CAC5B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,WAAW,EAAE,MAAM,GAClB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAMjC"}
|
package/dist/cli/analytics.js
CHANGED
|
@@ -1,13 +1,51 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module cli/analytics
|
|
3
3
|
*
|
|
4
|
-
* Post-run
|
|
4
|
+
* Post-run summary printed to stdout after each CLI command.
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
import { getVersion } from "./version.js";
|
|
7
|
+
/** Print package version and exit (for `-V` / `--version`). */
|
|
8
|
+
export function printVersion() {
|
|
9
|
+
console.log(`text-compress v${getVersion()}`);
|
|
10
|
+
}
|
|
11
|
+
/** Format a byte count for human-readable CLI output. */
|
|
12
|
+
export function formatBytes(bytes) {
|
|
13
|
+
if (bytes < 1024)
|
|
14
|
+
return `${bytes} B`;
|
|
15
|
+
const units = ["KB", "MB", "GB", "TB"];
|
|
16
|
+
let value = bytes / 1024;
|
|
17
|
+
for (const unit of units) {
|
|
18
|
+
if (value < 1024) {
|
|
19
|
+
const digits = value < 10 ? 1 : 0;
|
|
20
|
+
return `${value.toFixed(digits)} ${unit}`;
|
|
21
|
+
}
|
|
22
|
+
value /= 1024;
|
|
23
|
+
}
|
|
24
|
+
return `${value.toFixed(1)} TB`;
|
|
25
|
+
}
|
|
26
|
+
/** Format integers with thousands separators. */
|
|
27
|
+
export function formatCount(value) {
|
|
28
|
+
return value.toLocaleString("en-US");
|
|
29
|
+
}
|
|
30
|
+
/** Print a versioned, aligned summary block after a successful run. */
|
|
31
|
+
export function printRunSummary(summary) {
|
|
32
|
+
console.log(`text-compress v${getVersion()}`);
|
|
33
|
+
console.log();
|
|
34
|
+
console.log(summary.title);
|
|
35
|
+
if (summary.outputPaths.length > 1) {
|
|
36
|
+
for (const path of summary.outputPaths) {
|
|
37
|
+
console.log(` ${path}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else if (summary.outputPaths.length === 1) {
|
|
41
|
+
console.log(` ${summary.outputPaths[0]}`);
|
|
42
|
+
}
|
|
43
|
+
if (Object.keys(summary.stats).length === 0)
|
|
44
|
+
return;
|
|
45
|
+
console.log();
|
|
46
|
+
const width = Math.max(...Object.keys(summary.stats).map((key) => key.length));
|
|
47
|
+
for (const [key, value] of Object.entries(summary.stats)) {
|
|
48
|
+
console.log(` ${key.padEnd(width)} ${value}`);
|
|
11
49
|
}
|
|
12
50
|
}
|
|
13
51
|
/** Build split-related analytics fields when output was split. */
|
|
@@ -15,8 +53,8 @@ export function splitAnalytics(splitChunkSize, outputParts) {
|
|
|
15
53
|
if (splitChunkSize === undefined)
|
|
16
54
|
return {};
|
|
17
55
|
return {
|
|
18
|
-
"Split
|
|
19
|
-
|
|
56
|
+
"Split limit": `${formatCount(splitChunkSize)} chars / part`,
|
|
57
|
+
Parts: outputParts,
|
|
20
58
|
};
|
|
21
59
|
}
|
|
22
60
|
//# sourceMappingURL=analytics.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/cli/analytics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/cli/analytics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,+DAA+D;AAC/D,MAAM,UAAU,YAAY;IAC1B,OAAO,CAAC,GAAG,CAAC,kBAAkB,UAAU,EAAE,EAAE,CAAC,CAAA;AAC/C,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,GAAG,KAAK,IAAI,CAAA;IACrC,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAA;IAC/C,IAAI,KAAK,GAAG,KAAK,GAAG,IAAI,CAAA;IACxB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,KAAK,GAAG,IAAI,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACjC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAA;QAC3C,CAAC;QACD,KAAK,IAAI,IAAI,CAAA;IACf,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAA;AACjC,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;AACtC,CAAC;AAQD,uEAAuE;AACvE,MAAM,UAAU,eAAe,CAAC,OAAmB;IACjD,OAAO,CAAC,GAAG,CAAC,kBAAkB,UAAU,EAAE,EAAE,CAAC,CAAA;IAC7C,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAE1B,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;QAC1B,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAC5C,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAEnD,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IAC9E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC,CAAA;IACjD,CAAC;AACH,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,cAAc,CAC5B,cAAkC,EAClC,WAAmB;IAEnB,IAAI,cAAc,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IAC3C,OAAO;QACL,aAAa,EAAE,GAAG,WAAW,CAAC,cAAc,CAAC,eAAe;QAC5D,KAAK,EAAE,WAAW;KACnB,CAAA;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/compress.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,KAAK,IAAI,EAA8B,MAAM,YAAY,CAAA;AAIlE,uCAAuC;AACvC,wBAAsB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/compress.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,KAAK,IAAI,EAA8B,MAAM,YAAY,CAAA;AAIlE,uCAAuC;AACvC,wBAAsB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAwE3D"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { compress } from "../../api/text.js";
|
|
7
7
|
import { assertDirectory } from "../../fs/paths.js";
|
|
8
8
|
import { compressFolderToPath } from "../../streaming/folder.js";
|
|
9
|
-
import {
|
|
9
|
+
import { formatBytes, formatCount, printRunSummary, splitAnalytics } from "../analytics.js";
|
|
10
10
|
import { readInput, resolveEncoding } from "../args.js";
|
|
11
11
|
import { writeCompressedOutput } from "../output.js";
|
|
12
12
|
import { resolveOutputPath } from "../paths.js";
|
|
@@ -20,20 +20,22 @@ export async function runCompress(args) {
|
|
|
20
20
|
const { fileCount, dirCount, originalBytes, archiveBytes, compressedBytes, outputPaths, splitChunkSize, } = await compressFolderToPath(args.dir, outputPath, encoding, args.split, args.password);
|
|
21
21
|
const elapsedMs = Number(process.hrtime.bigint() - start) / 1e6;
|
|
22
22
|
const ratio = originalBytes === 0 ? 0 : compressedBytes / originalBytes;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
23
|
+
printRunSummary({
|
|
24
|
+
title: outputPaths.length === 1
|
|
25
|
+
? "Compressed folder"
|
|
26
|
+
: `Compressed folder → ${outputPaths.length} files`,
|
|
27
|
+
outputPaths,
|
|
28
|
+
stats: {
|
|
29
|
+
Encoding: `base${encoding}`,
|
|
30
|
+
Files: formatCount(fileCount),
|
|
31
|
+
Directories: formatCount(dirCount),
|
|
32
|
+
"Original size": formatBytes(originalBytes),
|
|
33
|
+
"Archive (pre-Brotli)": formatBytes(archiveBytes),
|
|
34
|
+
[`Compressed (base${encoding})`]: formatBytes(compressedBytes),
|
|
35
|
+
...splitAnalytics(splitChunkSize, outputPaths.length),
|
|
36
|
+
"Space saved": `${((1 - ratio) * 100).toFixed(1)}%`,
|
|
37
|
+
Time: `${elapsedMs.toFixed(0)} ms`,
|
|
38
|
+
},
|
|
37
39
|
});
|
|
38
40
|
return;
|
|
39
41
|
}
|
|
@@ -46,17 +48,20 @@ export async function runCompress(args) {
|
|
|
46
48
|
const { paths: outputPaths, splitChunkSize } = writeCompressedOutput(result, outputPath, args.split);
|
|
47
49
|
const outputBytes = Buffer.byteLength(result, "utf-8");
|
|
48
50
|
const ratio = inputBytes === 0 ? 0 : outputBytes / inputBytes;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
51
|
+
printRunSummary({
|
|
52
|
+
title: outputPaths.length === 1
|
|
53
|
+
? "Compressed text"
|
|
54
|
+
: `Compressed text → ${outputPaths.length} files`,
|
|
55
|
+
outputPaths,
|
|
56
|
+
stats: {
|
|
57
|
+
Encoding: `base${encoding}`,
|
|
58
|
+
"Original size": formatBytes(inputBytes),
|
|
59
|
+
[`Compressed (base${encoding})`]: formatBytes(outputBytes),
|
|
60
|
+
...splitAnalytics(splitChunkSize, outputPaths.length),
|
|
61
|
+
"Size ratio": ratio.toFixed(3),
|
|
62
|
+
"Space saved": `${((1 - ratio) * 100).toFixed(1)}%`,
|
|
63
|
+
Time: `${elapsedMs.toFixed(0)} ms`,
|
|
64
|
+
},
|
|
60
65
|
});
|
|
61
66
|
}
|
|
62
67
|
//# sourceMappingURL=compress.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compress.js","sourceRoot":"","sources":["../../../src/cli/commands/compress.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"compress.js","sourceRoot":"","sources":["../../../src/cli/commands/compress.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decompress.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/decompress.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,KAAK,IAAI,EAAuD,MAAM,YAAY,CAAA;AAuB3F,yCAAyC;AACzC,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"decompress.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/decompress.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,KAAK,IAAI,EAAuD,MAAM,YAAY,CAAA;AAuB3F,yCAAyC;AACzC,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAoD9C"}
|
|
@@ -7,7 +7,7 @@ import { writeFileSync } from "node:fs";
|
|
|
7
7
|
import { unpackDirectory } from "../../archive/unpack.js";
|
|
8
8
|
import { decompressPayload, TAG_FOLDER, TAG_TEXT } from "../../payload/tags.js";
|
|
9
9
|
import { readSplitInput } from "../../split/parts.js";
|
|
10
|
-
import {
|
|
10
|
+
import { formatBytes, formatCount, printRunSummary } from "../analytics.js";
|
|
11
11
|
import { readInput, resolveEncoding, resolveEncodingOptional } from "../args.js";
|
|
12
12
|
import { resolveDetectedEncoding } from "../detect.js";
|
|
13
13
|
import { resolveOutputPath } from "../paths.js";
|
|
@@ -36,15 +36,18 @@ export function runDecompress(args) {
|
|
|
36
36
|
if (tag === TAG_FOLDER) {
|
|
37
37
|
const outputPath = resolveOutputPath(args, "decompressed.de", ".de");
|
|
38
38
|
const { files, dirs, bytes } = unpackDirectory(data, outputPath);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
39
|
+
printRunSummary({
|
|
40
|
+
title: "Decompressed folder",
|
|
41
|
+
outputPaths: [outputPath],
|
|
42
|
+
stats: {
|
|
43
|
+
Encoding: `base${encoding}`,
|
|
44
|
+
[`Compressed (base${encoding})`]: formatBytes(inputBytes),
|
|
45
|
+
...(partPaths ? { "Input parts": partPaths.length } : {}),
|
|
46
|
+
"Files restored": formatCount(files),
|
|
47
|
+
"Directories restored": formatCount(dirs),
|
|
48
|
+
"Restored size": formatBytes(bytes),
|
|
49
|
+
Time: `${elapsedMs.toFixed(0)} ms`,
|
|
50
|
+
},
|
|
48
51
|
});
|
|
49
52
|
return;
|
|
50
53
|
}
|
|
@@ -56,14 +59,17 @@ export function runDecompress(args) {
|
|
|
56
59
|
writeFileSync(outputPath, result, "utf-8");
|
|
57
60
|
const outputBytes = Buffer.byteLength(result, "utf-8");
|
|
58
61
|
const ratio = inputBytes === 0 ? 0 : outputBytes / inputBytes;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
62
|
+
printRunSummary({
|
|
63
|
+
title: "Decompressed text",
|
|
64
|
+
outputPaths: [outputPath],
|
|
65
|
+
stats: {
|
|
66
|
+
Encoding: `base${encoding}`,
|
|
67
|
+
[`Compressed (base${encoding})`]: formatBytes(inputBytes),
|
|
68
|
+
...(partPaths ? { "Input parts": partPaths.length } : {}),
|
|
69
|
+
"Restored size": formatBytes(outputBytes),
|
|
70
|
+
"Expansion ratio": ratio.toFixed(3),
|
|
71
|
+
Time: `${elapsedMs.toFixed(0)} ms`,
|
|
72
|
+
},
|
|
67
73
|
});
|
|
68
74
|
}
|
|
69
75
|
//# sourceMappingURL=decompress.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decompress.js","sourceRoot":"","sources":["../../../src/cli/commands/decompress.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"decompress.js","sourceRoot":"","sources":["../../../src/cli/commands/decompress.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA8CH,2BAA2B;AAC3B,wBAAgB,IAAI,SAqCnB"}
|
package/dist/cli/main.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* CLI entry logic — parses argv and auto-routes to compress or decompress.
|
|
5
5
|
*/
|
|
6
6
|
import { readSplitInput } from "../split/parts.js";
|
|
7
|
+
import { printVersion } from "./analytics.js";
|
|
7
8
|
import { parseArgs, resolveEncodingOptional, resolveInputArgs } from "./args.js";
|
|
8
9
|
import { runCompress } from "./commands/compress.js";
|
|
9
10
|
import { runDecompress } from "./commands/decompress.js";
|
|
@@ -12,6 +13,9 @@ import { printUsage } from "./usage.js";
|
|
|
12
13
|
function wantsHelp(argv) {
|
|
13
14
|
return argv.length === 0 || argv.includes("-h") || argv.includes("--help");
|
|
14
15
|
}
|
|
16
|
+
function wantsVersion(argv) {
|
|
17
|
+
return argv.includes("-V") || argv.includes("--version");
|
|
18
|
+
}
|
|
15
19
|
/** Strip an optional legacy leading compress/decompress command. */
|
|
16
20
|
function normalizeArgv(argv) {
|
|
17
21
|
const [first, ...rest] = argv;
|
|
@@ -51,6 +55,10 @@ export function main() {
|
|
|
51
55
|
printUsage();
|
|
52
56
|
process.exit(argv.length === 0 ? 1 : 0);
|
|
53
57
|
}
|
|
58
|
+
if (wantsVersion(argv)) {
|
|
59
|
+
printVersion();
|
|
60
|
+
process.exit(0);
|
|
61
|
+
}
|
|
54
62
|
const legacy = normalizeArgv(argv);
|
|
55
63
|
argv = legacy.argv;
|
|
56
64
|
const args = parseArgs(argv);
|
package/dist/cli/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/output.d.ts
CHANGED
|
@@ -3,11 +3,5 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Write compressed output to disk, optionally split into numbered parts.
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
* Write an encoded string to one file or multiple split part files.
|
|
8
|
-
*/
|
|
9
|
-
export declare function writeCompressedOutput(encoded: string, outputPath: string, explicitSplit?: number): {
|
|
10
|
-
paths: string[];
|
|
11
|
-
splitChunkSize?: number;
|
|
12
|
-
};
|
|
6
|
+
export { writeEncodedOutput as writeCompressedOutput } from "../split/parts.js";
|
|
13
7
|
//# sourceMappingURL=output.d.ts.map
|
package/dist/cli/output.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,IAAI,qBAAqB,EAAE,MAAM,mBAAmB,CAAA"}
|
package/dist/cli/output.js
CHANGED
|
@@ -3,24 +3,5 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Write compressed output to disk, optionally split into numbered parts.
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
import { formatSplitOutputPath, resolveSplitChunkSize, splitString, wrapSplitChunk, } from "../split/parts.js";
|
|
8
|
-
/**
|
|
9
|
-
* Write an encoded string to one file or multiple split part files.
|
|
10
|
-
*/
|
|
11
|
-
export function writeCompressedOutput(encoded, outputPath, explicitSplit) {
|
|
12
|
-
const splitChunkSize = resolveSplitChunkSize(encoded.length, explicitSplit);
|
|
13
|
-
if (splitChunkSize === undefined) {
|
|
14
|
-
writeFileSync(outputPath, encoded, "utf-8");
|
|
15
|
-
return { paths: [outputPath] };
|
|
16
|
-
}
|
|
17
|
-
const chunks = splitString(encoded, splitChunkSize);
|
|
18
|
-
const totalParts = chunks.length;
|
|
19
|
-
const paths = chunks.map((chunk, index) => {
|
|
20
|
-
const partPath = formatSplitOutputPath(outputPath, index + 1, totalParts);
|
|
21
|
-
writeFileSync(partPath, wrapSplitChunk(index + 1, totalParts, chunk), "utf-8");
|
|
22
|
-
return partPath;
|
|
23
|
-
});
|
|
24
|
-
return { paths, splitChunkSize };
|
|
25
|
-
}
|
|
6
|
+
export { writeEncodedOutput as writeCompressedOutput } from "../split/parts.js";
|
|
26
7
|
//# sourceMappingURL=output.js.map
|
package/dist/cli/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,IAAI,qBAAqB,EAAE,MAAM,mBAAmB,CAAA"}
|
package/dist/cli/usage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/cli/usage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mCAAmC;AACnC,wBAAgB,UAAU,
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/cli/usage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mCAAmC;AACnC,wBAAgB,UAAU,SAmEzB"}
|
package/dist/cli/usage.js
CHANGED
|
@@ -25,8 +25,9 @@ Options:
|
|
|
25
25
|
-C, --compress Always compress (even if input looks compressed)
|
|
26
26
|
-D, --decompress Always decompress
|
|
27
27
|
-o, --output <path> Output path (optional, see defaults below)
|
|
28
|
-
-s, --split <chars> Split compressed output into multiple files
|
|
29
|
-
at most this many characters
|
|
28
|
+
-s, --split <chars> Split compressed output into multiple files. Each
|
|
29
|
+
part file is at most this many characters total,
|
|
30
|
+
including the ;TCP2; header (compress only).
|
|
30
31
|
If omitted, auto-splits at 30,000 characters when
|
|
31
32
|
the output is larger. Parts are named by inserting
|
|
32
33
|
.NNN before the extension, e.g. output.001.txt
|
|
@@ -38,6 +39,7 @@ Options:
|
|
|
38
39
|
preserves text verbatim (e.g. a code block)
|
|
39
40
|
-p, --password <string> Password-protect on compress, or unlock on decompress
|
|
40
41
|
-h, --help Show this usage guide
|
|
42
|
+
-V, --version Show package version
|
|
41
43
|
|
|
42
44
|
Split output (decompress):
|
|
43
45
|
Pass any one sibling file. All files sharing the same basename prefix
|
package/dist/cli/usage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/cli/usage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mCAAmC;AACnC,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/cli/usage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mCAAmC;AACnC,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiEb,CAAC,CAAA;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/cli/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,2DAA2D;AAC3D,wBAAgB,UAAU,IAAI,MAAM,CAMnC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module cli/version
|
|
3
|
+
*
|
|
4
|
+
* Package version read from package.json at runtime.
|
|
5
|
+
*/
|
|
6
|
+
import { readFileSync } from "node:fs";
|
|
7
|
+
import { dirname, join } from "node:path";
|
|
8
|
+
import { fileURLToPath } from "node:url";
|
|
9
|
+
let cachedVersion;
|
|
10
|
+
/** Return the published `text-compress` version string. */
|
|
11
|
+
export function getVersion() {
|
|
12
|
+
if (cachedVersion)
|
|
13
|
+
return cachedVersion;
|
|
14
|
+
const root = join(dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
15
|
+
const pkg = JSON.parse(readFileSync(join(root, "package.json"), "utf-8"));
|
|
16
|
+
cachedVersion = pkg.version;
|
|
17
|
+
return cachedVersion;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/cli/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,IAAI,aAAiC,CAAA;AAErC,2DAA2D;AAC3D,MAAM,UAAU,UAAU;IACxB,IAAI,aAAa;QAAE,OAAO,aAAa,CAAA;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IACtE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAwB,CAAA;IAChG,aAAa,GAAG,GAAG,CAAC,OAAO,CAAA;IAC3B,OAAO,aAAa,CAAA;AACtB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -16,6 +16,6 @@ export { unpackDirectory } from "./archive/unpack.js";
|
|
|
16
16
|
export { assertDirectory, readTextFile } from "./fs/paths.js";
|
|
17
17
|
export { decompressPayload, TAG_FOLDER, TAG_TEXT } from "./payload/tags.js";
|
|
18
18
|
export type { SplitChunk } from "./split/parts.js";
|
|
19
|
-
export { AUTO_SPLIT_CHARS, assembleSplitChunks, createSplitChunkHeader, extractFilenamePrefix, formatSplitOutputPath, parseSplitBuffer, parseSplitPartPath, readSplitInput, resolveSplitChunkSize, resolveSplitInputPaths, SPLIT_MAGIC, splitString, tryParseSplitChunks, wrapSplitChunk, } from "./split/parts.js";
|
|
19
|
+
export { AUTO_SPLIT_CHARS, assembleSplitChunks, createSplitChunkHeader, extractFilenamePrefix, formatSplitOutputPath, parseSplitBuffer, parseSplitPartPath, readSplitInput, resolveSplitChunkSize, resolveSplitInputPaths, resolveSplitPartCount, SPLIT_MAGIC, splitEncodedIntoWrappedParts, splitString, tryParseSplitChunks, wrapSplitChunk, writeEncodedOutput, } from "./split/parts.js";
|
|
20
20
|
export type { Encoding } from "./types.js";
|
|
21
21
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAGlE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAErD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE7D,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC3E,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAGlE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAErD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE7D,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC3E,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,WAAW,EACX,4BAA4B,EAC5B,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,kBAAkB,GACnB,MAAM,kBAAkB,CAAA;AACzB,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -21,5 +21,5 @@ export { assertDirectory, readTextFile } from "./fs/paths.js";
|
|
|
21
21
|
// Low-level payload access
|
|
22
22
|
export { decompressPayload, TAG_FOLDER, TAG_TEXT } from "./payload/tags.js";
|
|
23
23
|
// Split-file helpers
|
|
24
|
-
export { AUTO_SPLIT_CHARS, assembleSplitChunks, createSplitChunkHeader, extractFilenamePrefix, formatSplitOutputPath, parseSplitBuffer, parseSplitPartPath, readSplitInput, resolveSplitChunkSize, resolveSplitInputPaths, SPLIT_MAGIC, splitString, tryParseSplitChunks, wrapSplitChunk, } from "./split/parts.js";
|
|
24
|
+
export { AUTO_SPLIT_CHARS, assembleSplitChunks, createSplitChunkHeader, extractFilenamePrefix, formatSplitOutputPath, parseSplitBuffer, parseSplitPartPath, readSplitInput, resolveSplitChunkSize, resolveSplitInputPaths, resolveSplitPartCount, SPLIT_MAGIC, splitEncodedIntoWrappedParts, splitString, tryParseSplitChunks, wrapSplitChunk, writeEncodedOutput, } from "./split/parts.js";
|
|
25
25
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,aAAa;AACb,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAElE,WAAW;AACX,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AACpD,oDAAoD;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,0BAA0B;AAC1B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC7D,2BAA2B;AAC3B,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE3E,qBAAqB;AACrB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,aAAa;AACb,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAElE,WAAW;AACX,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AACpD,oDAAoD;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,0BAA0B;AAC1B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC7D,2BAA2B;AAC3B,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE3E,qBAAqB;AACrB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,WAAW,EACX,4BAA4B,EAC5B,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,kBAAkB,GACnB,MAAM,kBAAkB,CAAA"}
|
package/dist/split/parts.d.ts
CHANGED
|
@@ -9,13 +9,17 @@
|
|
|
9
9
|
*
|
|
10
10
|
* ## v2 split format
|
|
11
11
|
*
|
|
12
|
-
* Each logical part is prefixed with a
|
|
13
|
-
* file content, not filenames
|
|
12
|
+
* Each logical part is prefixed with a short ASCII header so order is encoded
|
|
13
|
+
* in file content, not filenames. The header uses only printable text (no NUL
|
|
14
|
+
* or control bytes) so split files stay pasteable and open in any text editor:
|
|
14
15
|
*
|
|
15
16
|
* ```
|
|
16
|
-
*
|
|
17
|
+
* ;TCP2;<partIndex>;<totalParts>;<payload…>
|
|
17
18
|
* ```
|
|
18
19
|
*
|
|
20
|
+
* Legacy v2.0.x files used a 12-byte binary header (`TCP\x02` + u32le fields);
|
|
21
|
+
* those are still accepted on read.
|
|
22
|
+
*
|
|
19
23
|
* Every part carries `totalParts`, so any single valid part reveals how many
|
|
20
24
|
* logical parts exist. A physical file may contain one or more consecutive
|
|
21
25
|
* parts. Parts can be read in any file order, and adjacent part files can be
|
|
@@ -41,12 +45,13 @@
|
|
|
41
45
|
* ## Auto-split threshold
|
|
42
46
|
*
|
|
43
47
|
* When no explicit `-s` size is given, outputs longer than
|
|
44
|
-
* {@link AUTO_SPLIT_CHARS} are automatically split.
|
|
48
|
+
* {@link AUTO_SPLIT_CHARS} are automatically split. Split limits count the
|
|
49
|
+
* entire part file, including the `;TCP2;` header — not just the payload.
|
|
45
50
|
*/
|
|
46
51
|
/** Default character threshold for automatic output splitting. */
|
|
47
52
|
export declare const AUTO_SPLIT_CHARS = 30000;
|
|
48
|
-
/**
|
|
49
|
-
export declare const SPLIT_MAGIC
|
|
53
|
+
/** ASCII prefix identifying a v2 split chunk header. */
|
|
54
|
+
export declare const SPLIT_MAGIC = ";TCP2;";
|
|
50
55
|
/** One parsed logical part from split file content. */
|
|
51
56
|
export interface SplitChunk {
|
|
52
57
|
partIndex: number;
|
|
@@ -58,17 +63,38 @@ export interface SplitChunk {
|
|
|
58
63
|
*
|
|
59
64
|
* @param encodedLength - Total characters in the encoded string.
|
|
60
65
|
* @param explicitSplit - User-provided `-s` value, if any.
|
|
61
|
-
* @returns
|
|
66
|
+
* @returns Max characters per part file (header + payload), or `undefined` when no split is needed.
|
|
62
67
|
*/
|
|
63
68
|
export declare function resolveSplitChunkSize(encodedLength: number, explicitSplit?: number): number | undefined;
|
|
69
|
+
/** Character length of the split header for one part. */
|
|
70
|
+
export declare function splitHeaderLength(partIndex: number, totalParts: number): number;
|
|
71
|
+
/** Smallest allowed `-s` value (header-only part for a single-part output). */
|
|
72
|
+
export declare function minSplitPartChars(): number;
|
|
73
|
+
/**
|
|
74
|
+
* Resolve how many part files are needed when each file is at most `maxPartChars`.
|
|
75
|
+
*
|
|
76
|
+
* Iterates until the guessed `totalParts` matches the count implied by header sizes.
|
|
77
|
+
*/
|
|
78
|
+
export declare function resolveSplitPartCount(encodedLength: number, maxPartChars: number): number;
|
|
79
|
+
/**
|
|
80
|
+
* Split encoded text into wrapped part strings, each at most `maxPartChars` long.
|
|
81
|
+
*/
|
|
82
|
+
export declare function splitEncodedIntoWrappedParts(encoded: string, maxPartChars: number): string[];
|
|
83
|
+
/**
|
|
84
|
+
* Write encoded text to one file or numbered split part files.
|
|
85
|
+
*/
|
|
86
|
+
export declare function writeEncodedOutput(encoded: string, outputPath: string, explicitSplit?: number): {
|
|
87
|
+
paths: string[];
|
|
88
|
+
splitChunkSize?: number;
|
|
89
|
+
};
|
|
64
90
|
/**
|
|
65
91
|
* Split a string into fixed-size chunks (last chunk may be shorter).
|
|
66
92
|
*
|
|
67
93
|
* @throws If `chunkSize` is not a positive integer.
|
|
68
94
|
*/
|
|
69
95
|
export declare function splitString(value: string, chunkSize: number): string[];
|
|
70
|
-
/** Build the
|
|
71
|
-
export declare function createSplitChunkHeader(partIndex: number, totalParts: number):
|
|
96
|
+
/** Build the ASCII v2 split chunk header. */
|
|
97
|
+
export declare function createSplitChunkHeader(partIndex: number, totalParts: number): string;
|
|
72
98
|
/**
|
|
73
99
|
* Wrap one encoded payload chunk with a v2 split header.
|
|
74
100
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../src/split/parts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../src/split/parts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAKH,kEAAkE;AAClE,eAAO,MAAM,gBAAgB,QAAS,CAAA;AAEtC,wDAAwD;AACxD,eAAO,MAAM,WAAW,WAAW,CAAA;AAOnC,uDAAuD;AACvD,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,MAAM,EACrB,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,GAAG,SAAS,CAIpB;AAED,yDAAyD;AACzD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED,+EAA+E;AAC/E,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AA+BD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAWzF;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAoB5F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,MAAM,GACrB;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CAe9C;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAWtE;AAED,6CAA6C;AAC7C,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEpF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE7F;AAyFD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,EAAE,GAAG,IAAI,CAUpE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,EAAE,CAS1D;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAmChE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,MAAM,CAUR;AAED,oFAAoF;AACpF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAEvE;AAkBD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAuBlE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG;IACjD,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB,CAoBA"}
|
package/dist/split/parts.js
CHANGED
|
@@ -9,13 +9,17 @@
|
|
|
9
9
|
*
|
|
10
10
|
* ## v2 split format
|
|
11
11
|
*
|
|
12
|
-
* Each logical part is prefixed with a
|
|
13
|
-
* file content, not filenames
|
|
12
|
+
* Each logical part is prefixed with a short ASCII header so order is encoded
|
|
13
|
+
* in file content, not filenames. The header uses only printable text (no NUL
|
|
14
|
+
* or control bytes) so split files stay pasteable and open in any text editor:
|
|
14
15
|
*
|
|
15
16
|
* ```
|
|
16
|
-
*
|
|
17
|
+
* ;TCP2;<partIndex>;<totalParts>;<payload…>
|
|
17
18
|
* ```
|
|
18
19
|
*
|
|
20
|
+
* Legacy v2.0.x files used a 12-byte binary header (`TCP\x02` + u32le fields);
|
|
21
|
+
* those are still accepted on read.
|
|
22
|
+
*
|
|
19
23
|
* Every part carries `totalParts`, so any single valid part reveals how many
|
|
20
24
|
* logical parts exist. A physical file may contain one or more consecutive
|
|
21
25
|
* parts. Parts can be read in any file order, and adjacent part files can be
|
|
@@ -41,21 +45,24 @@
|
|
|
41
45
|
* ## Auto-split threshold
|
|
42
46
|
*
|
|
43
47
|
* When no explicit `-s` size is given, outputs longer than
|
|
44
|
-
* {@link AUTO_SPLIT_CHARS} are automatically split.
|
|
48
|
+
* {@link AUTO_SPLIT_CHARS} are automatically split. Split limits count the
|
|
49
|
+
* entire part file, including the `;TCP2;` header — not just the payload.
|
|
45
50
|
*/
|
|
46
|
-
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
51
|
+
import { existsSync, readdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
|
|
47
52
|
import { dirname, join } from "node:path";
|
|
48
53
|
/** Default character threshold for automatic output splitting. */
|
|
49
54
|
export const AUTO_SPLIT_CHARS = 30_000;
|
|
50
|
-
/**
|
|
51
|
-
export const SPLIT_MAGIC =
|
|
52
|
-
|
|
55
|
+
/** ASCII prefix identifying a v2 split chunk header. */
|
|
56
|
+
export const SPLIT_MAGIC = ";TCP2;";
|
|
57
|
+
/** Legacy binary magic from v2.0.x (still accepted on read). */
|
|
58
|
+
const LEGACY_SPLIT_MAGIC = Buffer.from([0x54, 0x43, 0x50, 0x02]);
|
|
59
|
+
const LEGACY_SPLIT_HEADER_SIZE = 12;
|
|
53
60
|
/**
|
|
54
61
|
* Decide whether and how to split encoded output.
|
|
55
62
|
*
|
|
56
63
|
* @param encodedLength - Total characters in the encoded string.
|
|
57
64
|
* @param explicitSplit - User-provided `-s` value, if any.
|
|
58
|
-
* @returns
|
|
65
|
+
* @returns Max characters per part file (header + payload), or `undefined` when no split is needed.
|
|
59
66
|
*/
|
|
60
67
|
export function resolveSplitChunkSize(encodedLength, explicitSplit) {
|
|
61
68
|
if (explicitSplit !== undefined)
|
|
@@ -64,6 +71,91 @@ export function resolveSplitChunkSize(encodedLength, explicitSplit) {
|
|
|
64
71
|
return AUTO_SPLIT_CHARS;
|
|
65
72
|
return undefined;
|
|
66
73
|
}
|
|
74
|
+
/** Character length of the split header for one part. */
|
|
75
|
+
export function splitHeaderLength(partIndex, totalParts) {
|
|
76
|
+
return createSplitChunkHeader(partIndex, totalParts).length;
|
|
77
|
+
}
|
|
78
|
+
/** Smallest allowed `-s` value (header-only part for a single-part output). */
|
|
79
|
+
export function minSplitPartChars() {
|
|
80
|
+
return splitHeaderLength(1, 1);
|
|
81
|
+
}
|
|
82
|
+
function assertSplitPartChars(maxPartChars) {
|
|
83
|
+
const min = minSplitPartChars();
|
|
84
|
+
if (!Number.isInteger(maxPartChars) || maxPartChars < min) {
|
|
85
|
+
throw new Error(`Split size must be at least ${min} characters (to fit split headers).`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function countSplitParts(encodedLength, maxPartChars, totalPartsGuess) {
|
|
89
|
+
if (encodedLength === 0)
|
|
90
|
+
return 1;
|
|
91
|
+
let offset = 0;
|
|
92
|
+
let partIndex = 0;
|
|
93
|
+
while (offset < encodedLength) {
|
|
94
|
+
partIndex++;
|
|
95
|
+
const payloadCap = maxPartChars - splitHeaderLength(partIndex, totalPartsGuess);
|
|
96
|
+
if (payloadCap < 1) {
|
|
97
|
+
throw new Error(`Split size ${maxPartChars} is too small for ${totalPartsGuess} parts (header alone is ${splitHeaderLength(partIndex, totalPartsGuess)} characters).`);
|
|
98
|
+
}
|
|
99
|
+
offset += Math.min(payloadCap, encodedLength - offset);
|
|
100
|
+
}
|
|
101
|
+
return partIndex;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Resolve how many part files are needed when each file is at most `maxPartChars`.
|
|
105
|
+
*
|
|
106
|
+
* Iterates until the guessed `totalParts` matches the count implied by header sizes.
|
|
107
|
+
*/
|
|
108
|
+
export function resolveSplitPartCount(encodedLength, maxPartChars) {
|
|
109
|
+
assertSplitPartChars(maxPartChars);
|
|
110
|
+
if (encodedLength === 0)
|
|
111
|
+
return 1;
|
|
112
|
+
let totalParts = 1;
|
|
113
|
+
for (let i = 0; i < 20; i++) {
|
|
114
|
+
const next = countSplitParts(encodedLength, maxPartChars, totalParts);
|
|
115
|
+
if (next === totalParts)
|
|
116
|
+
return totalParts;
|
|
117
|
+
totalParts = next;
|
|
118
|
+
}
|
|
119
|
+
return totalParts;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Split encoded text into wrapped part strings, each at most `maxPartChars` long.
|
|
123
|
+
*/
|
|
124
|
+
export function splitEncodedIntoWrappedParts(encoded, maxPartChars) {
|
|
125
|
+
assertSplitPartChars(maxPartChars);
|
|
126
|
+
const totalParts = resolveSplitPartCount(encoded.length, maxPartChars);
|
|
127
|
+
const parts = [];
|
|
128
|
+
let offset = 0;
|
|
129
|
+
for (let partIndex = 1; partIndex <= totalParts; partIndex++) {
|
|
130
|
+
const payloadCap = maxPartChars - splitHeaderLength(partIndex, totalParts);
|
|
131
|
+
const payload = encoded.slice(offset, offset + payloadCap);
|
|
132
|
+
const wrapped = wrapSplitChunk(partIndex, totalParts, payload);
|
|
133
|
+
if (wrapped.length > maxPartChars) {
|
|
134
|
+
throw new Error(`Split part ${partIndex} is ${wrapped.length} characters, exceeding limit ${maxPartChars}.`);
|
|
135
|
+
}
|
|
136
|
+
parts.push(wrapped);
|
|
137
|
+
offset += payload.length;
|
|
138
|
+
}
|
|
139
|
+
return parts;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Write encoded text to one file or numbered split part files.
|
|
143
|
+
*/
|
|
144
|
+
export function writeEncodedOutput(encoded, outputPath, explicitSplit) {
|
|
145
|
+
const maxPartChars = resolveSplitChunkSize(encoded.length, explicitSplit);
|
|
146
|
+
if (maxPartChars === undefined) {
|
|
147
|
+
writeFileSync(outputPath, encoded, "utf-8");
|
|
148
|
+
return { paths: [outputPath] };
|
|
149
|
+
}
|
|
150
|
+
const wrappedParts = splitEncodedIntoWrappedParts(encoded, maxPartChars);
|
|
151
|
+
const totalParts = wrappedParts.length;
|
|
152
|
+
const paths = wrappedParts.map((content, index) => {
|
|
153
|
+
const partPath = formatSplitOutputPath(outputPath, index + 1, totalParts);
|
|
154
|
+
writeFileSync(partPath, content, "utf-8");
|
|
155
|
+
return partPath;
|
|
156
|
+
});
|
|
157
|
+
return { paths, splitChunkSize: maxPartChars };
|
|
158
|
+
}
|
|
67
159
|
/**
|
|
68
160
|
* Split a string into fixed-size chunks (last chunk may be shorter).
|
|
69
161
|
*
|
|
@@ -81,37 +173,70 @@ export function splitString(value, chunkSize) {
|
|
|
81
173
|
}
|
|
82
174
|
return chunks;
|
|
83
175
|
}
|
|
84
|
-
/** Build the
|
|
176
|
+
/** Build the ASCII v2 split chunk header. */
|
|
85
177
|
export function createSplitChunkHeader(partIndex, totalParts) {
|
|
86
|
-
|
|
87
|
-
SPLIT_MAGIC.copy(header, 0);
|
|
88
|
-
header.writeUInt32LE(partIndex, 4);
|
|
89
|
-
header.writeUInt32LE(totalParts, 8);
|
|
90
|
-
return header;
|
|
178
|
+
return `${SPLIT_MAGIC}${partIndex};${totalParts};`;
|
|
91
179
|
}
|
|
92
180
|
/**
|
|
93
181
|
* Wrap one encoded payload chunk with a v2 split header.
|
|
94
182
|
*/
|
|
95
183
|
export function wrapSplitChunk(partIndex, totalParts, payload) {
|
|
96
|
-
return
|
|
97
|
-
createSplitChunkHeader(partIndex, totalParts),
|
|
98
|
-
Buffer.from(payload, "utf-8"),
|
|
99
|
-
]).toString("utf-8");
|
|
184
|
+
return `${createSplitChunkHeader(partIndex, totalParts)}${payload}`;
|
|
100
185
|
}
|
|
101
|
-
function
|
|
186
|
+
function parseTextSplitHeader(text, offset) {
|
|
187
|
+
if (!text.startsWith(SPLIT_MAGIC, offset))
|
|
188
|
+
return null;
|
|
189
|
+
let pos = offset + SPLIT_MAGIC.length;
|
|
190
|
+
const partEnd = text.indexOf(";", pos);
|
|
191
|
+
if (partEnd === -1)
|
|
192
|
+
return null;
|
|
193
|
+
const partIndex = Number(text.slice(pos, partEnd));
|
|
194
|
+
pos = partEnd + 1;
|
|
195
|
+
const totalEnd = text.indexOf(";", pos);
|
|
196
|
+
if (totalEnd === -1)
|
|
197
|
+
return null;
|
|
198
|
+
const totalParts = Number(text.slice(pos, totalEnd));
|
|
199
|
+
if (!Number.isInteger(partIndex) ||
|
|
200
|
+
!Number.isInteger(totalParts) ||
|
|
201
|
+
partIndex < 1 ||
|
|
202
|
+
totalParts < 1) {
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
return { partIndex, totalParts, headerEnd: totalEnd + 1 };
|
|
206
|
+
}
|
|
207
|
+
function readTextSplitChunks(text) {
|
|
208
|
+
const chunks = [];
|
|
209
|
+
let offset = 0;
|
|
210
|
+
while (offset < text.length) {
|
|
211
|
+
const header = parseTextSplitHeader(text, offset);
|
|
212
|
+
if (!header) {
|
|
213
|
+
throw new Error("Invalid split format: unexpected data between split chunks.");
|
|
214
|
+
}
|
|
215
|
+
const nextMagic = text.indexOf(SPLIT_MAGIC, header.headerEnd);
|
|
216
|
+
const end = nextMagic === -1 ? text.length : nextMagic;
|
|
217
|
+
chunks.push({
|
|
218
|
+
partIndex: header.partIndex,
|
|
219
|
+
totalParts: header.totalParts,
|
|
220
|
+
payload: text.slice(header.headerEnd, end),
|
|
221
|
+
});
|
|
222
|
+
offset = end;
|
|
223
|
+
}
|
|
224
|
+
return chunks;
|
|
225
|
+
}
|
|
226
|
+
function readLegacyBinarySplitChunks(buf) {
|
|
102
227
|
const chunks = [];
|
|
103
228
|
let offset = 0;
|
|
104
229
|
while (offset < buf.length) {
|
|
105
|
-
if (buf.length - offset <
|
|
230
|
+
if (buf.length - offset < LEGACY_SPLIT_HEADER_SIZE) {
|
|
106
231
|
throw new Error("Invalid split format: truncated chunk header.");
|
|
107
232
|
}
|
|
108
|
-
if (!buf.subarray(offset, offset +
|
|
233
|
+
if (!buf.subarray(offset, offset + LEGACY_SPLIT_MAGIC.length).equals(LEGACY_SPLIT_MAGIC)) {
|
|
109
234
|
throw new Error("Invalid split format: unexpected data between split chunks.");
|
|
110
235
|
}
|
|
111
236
|
const partIndex = buf.readUInt32LE(offset + 4);
|
|
112
237
|
const totalParts = buf.readUInt32LE(offset + 8);
|
|
113
|
-
offset +=
|
|
114
|
-
const nextMagic = buf.indexOf(
|
|
238
|
+
offset += LEGACY_SPLIT_HEADER_SIZE;
|
|
239
|
+
const nextMagic = buf.indexOf(LEGACY_SPLIT_MAGIC, offset);
|
|
115
240
|
const end = nextMagic === -1 ? buf.length : nextMagic;
|
|
116
241
|
const payload = buf.subarray(offset, end).toString("utf-8");
|
|
117
242
|
chunks.push({ partIndex, totalParts, payload });
|
|
@@ -119,15 +244,26 @@ function readSplitChunks(buf) {
|
|
|
119
244
|
}
|
|
120
245
|
return chunks;
|
|
121
246
|
}
|
|
247
|
+
function readSplitChunks(buf) {
|
|
248
|
+
if (buf.subarray(0, SPLIT_MAGIC.length).toString("utf-8") === SPLIT_MAGIC) {
|
|
249
|
+
return readTextSplitChunks(buf.toString("utf-8"));
|
|
250
|
+
}
|
|
251
|
+
if (buf.subarray(0, LEGACY_SPLIT_MAGIC.length).equals(LEGACY_SPLIT_MAGIC)) {
|
|
252
|
+
return readLegacyBinarySplitChunks(buf);
|
|
253
|
+
}
|
|
254
|
+
throw new Error("Invalid split format: missing chunk header.");
|
|
255
|
+
}
|
|
122
256
|
/**
|
|
123
257
|
* Parse split chunks from a buffer when it starts with a split header.
|
|
124
258
|
*
|
|
125
259
|
* @returns `null` when the buffer is not split data or is malformed.
|
|
126
260
|
*/
|
|
127
261
|
export function tryParseSplitChunks(buf) {
|
|
128
|
-
if (buf.length <
|
|
262
|
+
if (buf.length < SPLIT_MAGIC.length)
|
|
129
263
|
return null;
|
|
130
|
-
|
|
264
|
+
const startsWithText = buf.subarray(0, SPLIT_MAGIC.length).toString("utf-8") === SPLIT_MAGIC;
|
|
265
|
+
const startsWithLegacy = buf.subarray(0, LEGACY_SPLIT_MAGIC.length).equals(LEGACY_SPLIT_MAGIC);
|
|
266
|
+
if (!startsWithText && !startsWithLegacy)
|
|
131
267
|
return null;
|
|
132
268
|
try {
|
|
133
269
|
return readSplitChunks(buf);
|
package/dist/split/parts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parts.js","sourceRoot":"","sources":["../../src/split/parts.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parts.js","sourceRoot":"","sources":["../../src/split/parts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folder.d.ts","sourceRoot":"","sources":["../../src/streaming/folder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;
|
|
1
|
+
{"version":3,"file":"folder.d.ts","sourceRoot":"","sources":["../../src/streaming/folder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AA2BH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAQ3C,uDAAuD;AACvD,UAAU,YAAY;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;CACrB;AA6GD,8CAA8C;AAC9C,MAAM,WAAW,0BAA2B,SAAQ,YAAY;IAC9D,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,QAAa,EACvB,KAAK,CAAC,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,0BAA0B,CAAC,CAuBrC"}
|
package/dist/streaming/folder.js
CHANGED
|
@@ -34,11 +34,10 @@ import { writeDirEntry, writeFileEntry } from "../archive/format.js";
|
|
|
34
34
|
import { createMaxQualityBrotliCompress } from "../compression/brotli.js";
|
|
35
35
|
import { encryptBuffer } from "../crypto/password.js";
|
|
36
36
|
import { encodeBase64 } from "../encoding/base64.js";
|
|
37
|
-
import { estimatedEncodedLength } from "../encoding/index.js";
|
|
38
37
|
import { encodeBase85 } from "../encoding/z85.js";
|
|
39
38
|
import { walkDirectory } from "../fs/walk.js";
|
|
40
39
|
import { TAG_FOLDER } from "../payload/tags.js";
|
|
41
|
-
import {
|
|
40
|
+
import { writeEncodedOutput } from "../split/parts.js";
|
|
42
41
|
/** Buffer size when copying file content into the archive. */
|
|
43
42
|
const COPY_CHUNK = 1024 * 1024;
|
|
44
43
|
/** Buffer size when reading compressed bytes for Base64 encoding. */
|
|
@@ -97,19 +96,10 @@ function prependTagStream(tag, filePath) {
|
|
|
97
96
|
async function brotliCompressFile(inputPath, outputPath) {
|
|
98
97
|
await pipeline(prependTagStream(TAG_FOLDER, inputPath), createMaxQualityBrotliCompress(statSync(inputPath).size + 1), createWriteStream(outputPath));
|
|
99
98
|
}
|
|
100
|
-
/** Open one numbered part file for split output. */
|
|
101
|
-
function openPart(outputPath, partIndex, totalParts) {
|
|
102
|
-
const path = formatSplitOutputPath(outputPath, partIndex, totalParts);
|
|
103
|
-
const fd = openSync(path, "w");
|
|
104
|
-
writeSync(fd, createSplitChunkHeader(partIndex, totalParts));
|
|
105
|
-
return { path, fd };
|
|
106
|
-
}
|
|
107
99
|
/**
|
|
108
|
-
* Stream-read a binary file and write encoded text to
|
|
109
|
-
*
|
|
110
|
-
* Handles optional character-based splitting across part files.
|
|
100
|
+
* Stream-read a binary file and write encoded text to a single output file.
|
|
111
101
|
*/
|
|
112
|
-
function
|
|
102
|
+
function encodeBinaryFileToTextFile(inputPath, outputPath, encoding) {
|
|
113
103
|
const binaryBytes = statSync(inputPath).size;
|
|
114
104
|
const srcFd = openSync(inputPath, "r");
|
|
115
105
|
const readAndEncode = (writeEncoded) => {
|
|
@@ -137,57 +127,14 @@ function encodeBinaryFileToTextFiles(inputPath, outputPath, encoding, split) {
|
|
|
137
127
|
writeEncoded(encodeBase85(raw));
|
|
138
128
|
}
|
|
139
129
|
};
|
|
140
|
-
|
|
141
|
-
const outFd = openSync(outputPath, "w");
|
|
142
|
-
try {
|
|
143
|
-
readAndEncode((text) => writeSync(outFd, text));
|
|
144
|
-
}
|
|
145
|
-
finally {
|
|
146
|
-
closeSync(srcFd);
|
|
147
|
-
closeSync(outFd);
|
|
148
|
-
}
|
|
149
|
-
return [outputPath];
|
|
150
|
-
}
|
|
151
|
-
const encodedLength = estimatedEncodedLength(binaryBytes, encoding);
|
|
152
|
-
const totalParts = Math.ceil(encodedLength / split);
|
|
153
|
-
const paths = [];
|
|
154
|
-
let partIndex = 1;
|
|
155
|
-
let part = openPart(outputPath, partIndex, totalParts);
|
|
156
|
-
paths.push(part.path);
|
|
157
|
-
let partChars = 0;
|
|
158
|
-
const flushPart = () => {
|
|
159
|
-
closeSync(part.fd);
|
|
160
|
-
if (partIndex < totalParts) {
|
|
161
|
-
partIndex++;
|
|
162
|
-
part = openPart(outputPath, partIndex, totalParts);
|
|
163
|
-
paths.push(part.path);
|
|
164
|
-
partChars = 0;
|
|
165
|
-
}
|
|
166
|
-
};
|
|
167
|
-
const writeEncoded = (text) => {
|
|
168
|
-
let offset = 0;
|
|
169
|
-
while (offset < text.length) {
|
|
170
|
-
const remaining = split - partChars;
|
|
171
|
-
if (remaining <= 0) {
|
|
172
|
-
flushPart();
|
|
173
|
-
continue;
|
|
174
|
-
}
|
|
175
|
-
const slice = text.slice(offset, offset + remaining);
|
|
176
|
-
writeSync(part.fd, slice);
|
|
177
|
-
partChars += slice.length;
|
|
178
|
-
offset += slice.length;
|
|
179
|
-
if (partChars >= split && offset < text.length)
|
|
180
|
-
flushPart();
|
|
181
|
-
}
|
|
182
|
-
};
|
|
130
|
+
const outFd = openSync(outputPath, "w");
|
|
183
131
|
try {
|
|
184
|
-
readAndEncode(
|
|
132
|
+
readAndEncode((text) => writeSync(outFd, text));
|
|
185
133
|
}
|
|
186
134
|
finally {
|
|
187
135
|
closeSync(srcFd);
|
|
188
|
-
closeSync(
|
|
136
|
+
closeSync(outFd);
|
|
189
137
|
}
|
|
190
|
-
return paths;
|
|
191
138
|
}
|
|
192
139
|
/**
|
|
193
140
|
* Compress a folder to encoded text file(s) using the streaming pipeline.
|
|
@@ -208,9 +155,10 @@ export async function compressFolderToPath(dirPath, outputPath, encoding = 64, s
|
|
|
208
155
|
encodeInputPath = encryptedPath;
|
|
209
156
|
}
|
|
210
157
|
const compressedBytes = statSync(encodeInputPath).size;
|
|
211
|
-
const
|
|
212
|
-
|
|
213
|
-
const
|
|
158
|
+
const encodedPath = join(tempDir, "encoded.txt");
|
|
159
|
+
encodeBinaryFileToTextFile(encodeInputPath, encodedPath, encoding);
|
|
160
|
+
const encoded = readFileSync(encodedPath, "utf-8");
|
|
161
|
+
const { paths: outputPaths, splitChunkSize } = writeEncodedOutput(encoded, outputPath, split);
|
|
214
162
|
return { ...stats, compressedBytes, outputPaths, splitChunkSize };
|
|
215
163
|
}
|
|
216
164
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folder.js","sourceRoot":"","sources":["../../src/streaming/folder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,aAAa,EACb,SAAS,GACV,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACpE,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAA;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"folder.js","sourceRoot":"","sources":["../../src/streaming/folder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,aAAa,EACb,SAAS,GACV,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACpE,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAA;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAGtD,8DAA8D;AAC9D,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,CAAA;AAE9B,qEAAqE;AACrE,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;AAUzC;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,OAAe,EAAE,WAAmB;IAC5D,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;IACrC,IAAI,SAAS,GAAG,CAAC,CAAA;IACjB,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,IAAI,aAAa,GAAG,CAAC,CAAA;IAErB,IAAI,CAAC;QACH,aAAa,CAAC,OAAO,EAAE;YACrB,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC/B,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;gBACzB,QAAQ,EAAE,CAAA;YACZ,CAAC;YACD,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBACnB,aAAa,IAAI,cAAc,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,CAAA;gBACzD,SAAS,EAAE,CAAA;YACb,CAAC;SACF,CAAC,CAAA;IACJ,CAAC;YAAS,CAAC;QACT,SAAS,CAAC,EAAE,CAAC,CAAA;IACf,CAAC;IAED,OAAO;QACL,SAAS;QACT,QAAQ;QACR,aAAa;QACb,YAAY,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI;KACzC,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,GAAW,EAAE,QAAgB;IACrD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IACjC,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IACvC,OAAO,QAAQ,CAAC,IAAI,CAClB,CAAC,KAAK,SAAS,CAAC;QACd,MAAM,MAAM,CAAA;QACZ,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YAC/B,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC,CAAC,EAAE,CACL,CAAA;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,kBAAkB,CAAC,SAAiB,EAAE,UAAkB;IACrE,MAAM,QAAQ,CACZ,gBAAgB,CAAC,UAAU,EAAE,SAAS,CAAC,EACvC,8BAA8B,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,EAC5D,iBAAiB,CAAC,UAAU,CAAC,CAC9B,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAS,0BAA0B,CACjC,SAAiB,EACjB,UAAkB,EAClB,QAAkB;IAElB,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAA;IAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;IAEtC,MAAM,aAAa,GAAG,CAAC,YAAoC,EAAE,EAAE;QAC7D,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;YAC3C,IAAI,GAAG,GAAG,CAAC,CAAA;YACX,OAAO,GAAG,GAAG,WAAW,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,GAAG,CAAC,CAAA;gBACtD,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;gBAC9C,IAAI,CAAC,IAAI,CAAC;oBAAE,MAAK;gBACjB,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC9C,GAAG,IAAI,CAAC,CAAA;YACV,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;YACrC,IAAI,GAAG,GAAG,CAAC,CAAA;YACX,OAAO,GAAG,GAAG,WAAW,EAAE,CAAC;gBACzB,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,GAAG,GAAG,EAAE,GAAG,CAAC,CAAA;gBAC3D,IAAI,CAAC,IAAI,CAAC;oBAAE,MAAK;gBACjB,GAAG,IAAI,CAAC,CAAA;YACV,CAAC;YACD,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAA;QACjC,CAAC;IACH,CAAC,CAAA;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;IACvC,IAAI,CAAC;QACH,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;IACjD,CAAC;YAAS,CAAC;QACT,SAAS,CAAC,KAAK,CAAC,CAAA;QAChB,SAAS,CAAC,KAAK,CAAC,CAAA;IAClB,CAAC;AACH,CAAC;AASD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAe,EACf,UAAkB,EAClB,QAAQ,GAAa,EAAE,EACvB,KAAc,EACd,QAAiB;IAEjB,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAA;IAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;IAChD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAA;IAEtD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QACpD,MAAM,kBAAkB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAA;QACrD,IAAI,eAAe,GAAG,cAAc,CAAA;QACpC,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAA;YACpD,aAAa,CAAC,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAA;YACnF,eAAe,GAAG,aAAa,CAAA;QACjC,CAAC;QACD,MAAM,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC,IAAI,CAAA;QACtD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;QAChD,0BAA0B,CAAC,eAAe,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;QAClE,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAClD,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;QAC7F,OAAO,EAAE,GAAG,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,CAAA;IACnE,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACnD,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "text-compress",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"description": "Brotli-compress text or folders to base64/base85 strings for easy sharing",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -21,13 +21,17 @@
|
|
|
21
21
|
],
|
|
22
22
|
"scripts": {
|
|
23
23
|
"build": "tsc",
|
|
24
|
-
"check": "biome check --write . && tsc &&
|
|
24
|
+
"check": "biome check --write . && tsc && bun run validate:skills",
|
|
25
|
+
"check:ci": "biome check . && tsc && bun run validate:skills",
|
|
25
26
|
"dev": "tsx src/cli.ts",
|
|
27
|
+
"lint": "biome check .",
|
|
28
|
+
"typecheck": "tsc",
|
|
26
29
|
"test": "vitest run",
|
|
27
30
|
"pretest": "npm run build",
|
|
28
31
|
"test:watch": "vitest",
|
|
29
32
|
"prepublishOnly": "npm run build",
|
|
30
|
-
"validate:skills": "intent validate"
|
|
33
|
+
"validate:skills": "intent validate",
|
|
34
|
+
"prepare": "husky"
|
|
31
35
|
},
|
|
32
36
|
"keywords": [
|
|
33
37
|
"brotli",
|
|
@@ -55,6 +59,7 @@
|
|
|
55
59
|
"@biomejs/biome": "^2.5.3",
|
|
56
60
|
"@tanstack/intent": "^0.3.5",
|
|
57
61
|
"@types/node": "^26.1.1",
|
|
62
|
+
"husky": "^9.1.7",
|
|
58
63
|
"tsx": "^4.23.0",
|
|
59
64
|
"typescript": "^7.0.2",
|
|
60
65
|
"vitest": "^4.1.10"
|
|
@@ -144,14 +144,14 @@ Source: src/cli/args.ts
|
|
|
144
144
|
Wrong:
|
|
145
145
|
|
|
146
146
|
```bash
|
|
147
|
-
# Expecting v1 raw concatenation without
|
|
147
|
+
# Expecting v1 raw concatenation without ;TCP2; headers
|
|
148
148
|
text-compress ./v1-part.1.txt
|
|
149
149
|
```
|
|
150
150
|
|
|
151
151
|
Correct:
|
|
152
152
|
|
|
153
153
|
```bash
|
|
154
|
-
# v2 parts have
|
|
154
|
+
# v2 parts have ;TCP2; ASCII headers; pass any sibling
|
|
155
155
|
text-compress ./output.7.txt
|
|
156
156
|
```
|
|
157
157
|
|