text-compress 2.0.3 → 2.0.5

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
@@ -184,6 +187,12 @@ See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) and [docs/LEARNING.md](docs/LEA
184
187
 
185
188
  ## Changelog
186
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
+
187
196
  ### v2.0.3 — `text-compress` (2026-07-09)
188
197
 
189
198
  - Use printable ASCII `;TCP2;` split headers so part files stay copyable in text editors (legacy binary `TCP\x02` headers still accepted on read)
@@ -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":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAa,SAAS,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,SAAS,SAAS,CAAC,IAAc;IAC/B,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC5E,CAAC;AAED,oEAAoE;AACpE,SAAS,aAAa,CAAC,IAAc;IACnC,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;IAC7B,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,CAAA;IACxF,IAAI,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,CAAA;IAC5F,OAAO,EAAE,IAAI,EAAE,CAAA;AACjB,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAU;IAClC,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAA;IACvD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,IAAI,CAAA;IAC7C,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;AACtE,CAAC;AAED,SAAS,cAAc,CAAC,IAAU;IAChC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,UAAU,CAAA;IAC/C,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,YAAY,CAAA;IACnD,IAAI,IAAI,CAAC,GAAG;QAAE,OAAO,UAAU,CAAA;IAE/B,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACtC,MAAM,SAAS,GAAG,uBAAuB,CAAC,OAAO,EAAE,uBAAuB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;IAChG,IAAI,SAAS,KAAK,mBAAmB,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAA;IAC1F,CAAC;IACD,IAAI,SAAS,KAAK,YAAY;QAAE,OAAO,YAAY,CAAA;IACnD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,2BAA2B;AAC3B,MAAM,UAAU,IAAI;IAClB,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAEhC,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,UAAU,EAAE,CAAA;QACZ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACzC,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IAClC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IAClB,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,CAAA;IAC/B,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;QACrB,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;QAE9E,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;QAEjC,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1B,aAAa,CAAC,IAAI,CAAC,CAAA;YACnB,OAAM;QACR,CAAC;QAED,MAAM,WAAW,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC,CAAA;IAED,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QAClB,OAAO,CAAC,KAAK,CAAC,UAAW,GAAa,CAAC,OAAO,EAAE,CAAC,CAAA;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAa,SAAS,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,SAAS,SAAS,CAAC,IAAc;IAC/B,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC5E,CAAC;AAED,SAAS,YAAY,CAAC,IAAc;IAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AAC1D,CAAC;AAED,oEAAoE;AACpE,SAAS,aAAa,CAAC,IAAc;IACnC,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;IAC7B,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,CAAA;IACxF,IAAI,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,CAAA;IAC5F,OAAO,EAAE,IAAI,EAAE,CAAA;AACjB,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAU;IAClC,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAA;IACvD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,IAAI,CAAA;IAC7C,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;AACtE,CAAC;AAED,SAAS,cAAc,CAAC,IAAU;IAChC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,UAAU,CAAA;IAC/C,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,YAAY,CAAA;IACnD,IAAI,IAAI,CAAC,GAAG;QAAE,OAAO,UAAU,CAAA;IAE/B,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACtC,MAAM,SAAS,GAAG,uBAAuB,CAAC,OAAO,EAAE,uBAAuB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;IAChG,IAAI,SAAS,KAAK,mBAAmB,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAA;IAC1F,CAAC;IACD,IAAI,SAAS,KAAK,YAAY;QAAE,OAAO,YAAY,CAAA;IACnD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,2BAA2B;AAC3B,MAAM,UAAU,IAAI;IAClB,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAEhC,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,UAAU,EAAE,CAAA;QACZ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACzC,CAAC;IAED,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,YAAY,EAAE,CAAA;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IAClC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IAClB,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,CAAA;IAC/B,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;QACrB,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;QAE9E,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;QAEjC,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1B,aAAa,CAAC,IAAI,CAAC,CAAA;YACnB,OAAM;QACR,CAAC;QAED,MAAM,WAAW,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC,CAAA;IAED,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QAClB,OAAO,CAAC,KAAK,CAAC,UAAW,GAAa,CAAC,OAAO,EAAE,CAAC,CAAA;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/cli/usage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mCAAmC;AACnC,wBAAgB,UAAU,SAkEzB"}
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
@@ -39,6 +39,7 @@ Options:
39
39
  preserves text verbatim (e.g. a code block)
40
40
  -p, --password <string> Password-protect on compress, or unlock on decompress
41
41
  -h, --help Show this usage guide
42
+ -V, --version Show package version
42
43
 
43
44
  Split output (decompress):
44
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgEb,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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "text-compress",
3
- "version": "2.0.3",
3
+ "version": "2.0.5",
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",