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 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 `TCP\x02` header.
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
@@ -1,10 +1,21 @@
1
1
  /**
2
2
  * @module cli/analytics
3
3
  *
4
- * Post-run statistics printed to stdout after each CLI command.
4
+ * Post-run summary printed to stdout after each CLI command.
5
5
  */
6
- /** Print a key/value analytics block below the main status line. */
7
- export declare function printAnalytics(stats: Record<string, string | number>): void;
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;AAEH,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,QAKpE;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"}
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"}
@@ -1,13 +1,51 @@
1
1
  /**
2
2
  * @module cli/analytics
3
3
  *
4
- * Post-run statistics printed to stdout after each CLI command.
4
+ * Post-run summary printed to stdout after each CLI command.
5
5
  */
6
- /** Print a key/value analytics block below the main status line. */
7
- export function printAnalytics(stats) {
8
- console.log("\n--- Analytics ---");
9
- for (const [key, value] of Object.entries(stats)) {
10
- console.log(`${key}: ${value}`);
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 size (chars)": splitChunkSize,
19
- "Output parts": outputParts,
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,oEAAoE;AACpE,MAAM,UAAU,cAAc,CAAC,KAAsC;IACnE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;IAClC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,KAAK,EAAE,CAAC,CAAA;IACjC,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,oBAAoB,EAAE,cAAc;QACpC,cAAc,EAAE,WAAW;KAC5B,CAAA;AACH,CAAC"}
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,CAqE3D"}
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 { printAnalytics, splitAnalytics } from "../analytics.js";
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
- console.log(outputPaths.length === 1
24
- ? `Compressed folder written to ${outputPaths[0]}`
25
- : `Compressed folder written to ${outputPaths.length} files:\n ${outputPaths.join("\n ")}`);
26
- printAnalytics({
27
- Encoding: `base${encoding}`,
28
- Files: fileCount,
29
- Directories: dirCount,
30
- "Original size (bytes)": originalBytes,
31
- "Archive size before compression (bytes)": archiveBytes,
32
- [`Compressed size (bytes, base${encoding})`]: compressedBytes,
33
- ...splitAnalytics(splitChunkSize, outputPaths.length),
34
- "Size ratio (compressed/original)": ratio.toFixed(3),
35
- "Space saved": `${((1 - ratio) * 100).toFixed(1)}%`,
36
- "Time taken (ms)": elapsedMs.toFixed(3),
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
- console.log(outputPaths.length === 1
50
- ? `Compressed output written to ${outputPath}`
51
- : `Compressed output written to ${outputPaths.length} files:\n ${outputPaths.join("\n ")}`);
52
- printAnalytics({
53
- Encoding: `base${encoding}`,
54
- "Original size (bytes)": inputBytes,
55
- [`Compressed size (bytes, base${encoding})`]: outputBytes,
56
- ...splitAnalytics(splitChunkSize, outputPaths.length),
57
- "Size ratio (compressed/original)": ratio.toFixed(3),
58
- "Space saved": `${((1 - ratio) * 100).toFixed(1)}%`,
59
- "Time taken (ms)": elapsedMs.toFixed(3),
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":"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"}
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,CA8C9C"}
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 { printAnalytics } from "../analytics.js";
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
- console.log(`Decompressed folder recreated at ${outputPath}`);
40
- printAnalytics({
41
- Encoding: `base${encoding}`,
42
- [`Compressed size (bytes, base${encoding})`]: inputBytes,
43
- ...(partPaths ? { "Input parts": partPaths.length } : {}),
44
- "Files restored": files,
45
- "Directories restored": dirs,
46
- "Decompressed size (bytes)": bytes,
47
- "Time taken (ms)": elapsedMs.toFixed(3),
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
- console.log(`Decompressed output written to ${outputPath}`);
60
- printAnalytics({
61
- Encoding: `base${encoding}`,
62
- [`Compressed size (bytes, base${encoding})`]: inputBytes,
63
- ...(partPaths ? { "Input parts": partPaths.length } : {}),
64
- "Decompressed size (bytes)": outputBytes,
65
- "Expansion ratio (decompressed/compressed)": ratio.toFixed(3),
66
- "Time taken (ms)": elapsedMs.toFixed(3),
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":"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"}
1
+ {"version":3,"file":"decompress.js","sourceRoot":"","sources":["../../../src/cli/commands/decompress.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAyCH,2BAA2B;AAC3B,wBAAgB,IAAI,SAgCnB"}
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);
@@ -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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"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,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"}
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"}
@@ -3,24 +3,5 @@
3
3
  *
4
4
  * Write compressed output to disk, optionally split into numbered parts.
5
5
  */
6
- import { writeFileSync } from "node:fs";
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
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,WAAW,EACX,cAAc,GACf,MAAM,mBAAmB,CAAA;AAE1B;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAe,EACf,UAAkB,EAClB,aAAsB;IAEtB,MAAM,cAAc,GAAG,qBAAqB,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC3E,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;QAC3C,OAAO,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,CAAA;IAChC,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,cAAc,CAAC,CAAA;IACnD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAA;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACxC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,UAAU,EAAE,KAAK,GAAG,CAAC,EAAE,UAAU,CAAC,CAAA;QACzE,aAAa,CAAC,QAAQ,EAAE,cAAc,CAAC,KAAK,GAAG,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,CAAA;QAC9E,OAAO,QAAQ,CAAA;IACjB,CAAC,CAAC,CAAA;IACF,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAA;AAClC,CAAC"}
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"}
@@ -1 +1 @@
1
- {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/cli/usage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mCAAmC;AACnC,wBAAgB,UAAU,SAiEzB"}
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, each
29
- at most this many characters (compress only).
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
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Db,CAAC,CAAA;AACF,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,8 @@
1
+ /**
2
+ * @module cli/version
3
+ *
4
+ * Package version read from package.json at runtime.
5
+ */
6
+ /** Return the published `text-compress` version string. */
7
+ export declare function getVersion(): string;
8
+ //# sourceMappingURL=version.d.ts.map
@@ -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
@@ -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,GACf,MAAM,kBAAkB,CAAA;AACzB,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA"}
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,GACf,MAAM,kBAAkB,CAAA"}
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"}
@@ -9,13 +9,17 @@
9
9
  *
10
10
  * ## v2 split format
11
11
  *
12
- * Each logical part is prefixed with a 12-byte header so order is encoded in
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
- * [magic: "TCP\x02"][partIndex: u32le][totalParts: u32le][payload…]
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
- /** Magic bytes identifying a v2 split chunk header. */
49
- export declare const SPLIT_MAGIC: Buffer<ArrayBuffer>;
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 Chunk size, or `undefined` when no split is needed.
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 12-byte v2 split chunk header. */
71
- export declare function createSplitChunkHeader(partIndex: number, totalParts: number): Buffer;
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAKH,kEAAkE;AAClE,eAAO,MAAM,gBAAgB,QAAS,CAAA;AAEtC,uDAAuD;AACvD,eAAO,MAAM,WAAW,qBAAwC,CAAA;AAIhE,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;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAWtE;AAED,+CAA+C;AAC/C,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAMpF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAK7F;AA4BD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,EAAE,GAAG,IAAI,CAQpE;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"}
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"}
@@ -9,13 +9,17 @@
9
9
  *
10
10
  * ## v2 split format
11
11
  *
12
- * Each logical part is prefixed with a 12-byte header so order is encoded in
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
- * [magic: "TCP\x02"][partIndex: u32le][totalParts: u32le][payload…]
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
- /** Magic bytes identifying a v2 split chunk header. */
51
- export const SPLIT_MAGIC = Buffer.from([0x54, 0x43, 0x50, 0x02]);
52
- const SPLIT_HEADER_SIZE = 12;
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 Chunk size, or `undefined` when no split is needed.
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 12-byte v2 split chunk header. */
176
+ /** Build the ASCII v2 split chunk header. */
85
177
  export function createSplitChunkHeader(partIndex, totalParts) {
86
- const header = Buffer.alloc(SPLIT_HEADER_SIZE);
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 Buffer.concat([
97
- createSplitChunkHeader(partIndex, totalParts),
98
- Buffer.from(payload, "utf-8"),
99
- ]).toString("utf-8");
184
+ return `${createSplitChunkHeader(partIndex, totalParts)}${payload}`;
100
185
  }
101
- function readSplitChunks(buf) {
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 < SPLIT_HEADER_SIZE) {
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 + SPLIT_MAGIC.length).equals(SPLIT_MAGIC)) {
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 += SPLIT_HEADER_SIZE;
114
- const nextMagic = buf.indexOf(SPLIT_MAGIC, offset);
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 < SPLIT_HEADER_SIZE)
262
+ if (buf.length < SPLIT_MAGIC.length)
129
263
  return null;
130
- if (!buf.subarray(0, SPLIT_MAGIC.length).equals(SPLIT_MAGIC))
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);
@@ -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;AAgCH,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;AAuKD,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,CA2BrC"}
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"}
@@ -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 { createSplitChunkHeader, formatSplitOutputPath, resolveSplitChunkSize, } from "../split/parts.js";
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 one or more output files.
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 encodeBinaryFileToTextFiles(inputPath, outputPath, encoding, split) {
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
- if (!split) {
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(writeEncoded);
132
+ readAndEncode((text) => writeSync(outFd, text));
185
133
  }
186
134
  finally {
187
135
  closeSync(srcFd);
188
- closeSync(part.fd);
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 encodedLength = estimatedEncodedLength(compressedBytes, encoding);
212
- const splitChunkSize = resolveSplitChunkSize(encodedLength, split);
213
- const outputPaths = encodeBinaryFileToTextFiles(encodeInputPath, outputPath, encoding, splitChunkSize);
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":"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"}
1
+ {"version":3,"file":"folder.js","sourceRoot":"","sources":["../../src/streaming/folder.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "text-compress",
3
- "version": "2.0.2",
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 && npm run validate:skills",
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 TCP\x02 headers
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 TCP\x02 headers; pass any sibling
154
+ # v2 parts have ;TCP2; ASCII headers; pass any sibling
155
155
  text-compress ./output.7.txt
156
156
  ```
157
157