@jamesaphoenix/tx-cli 0.5.9 → 0.5.10

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/dist/version.d.ts CHANGED
@@ -1,2 +1,11 @@
1
+ /**
2
+ * CLI version — injected at compile time for binaries, read from package.json
3
+ * for development.
4
+ *
5
+ * In compiled binaries (`bun build --compile`), `--define` replaces
6
+ * `process.env.TX_CLI_VERSION` with a string literal at bundle time, so
7
+ * the filesystem read is never reached. This avoids Bun minifier bugs
8
+ * that can hoist `readFileSync` out of try-catch blocks.
9
+ */
1
10
  export declare const CLI_VERSION: string;
2
11
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,WAAW,EAAE,MAA+B,CAAA"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA8BH,eAAO,MAAM,WAAW,EAAE,MAAqB,CAAA"}
package/dist/version.js CHANGED
@@ -1,10 +1,37 @@
1
1
  /**
2
- * CLI version — read from package.json at runtime so there's a single source of truth.
2
+ * CLI version — injected at compile time for binaries, read from package.json
3
+ * for development.
4
+ *
5
+ * In compiled binaries (`bun build --compile`), `--define` replaces
6
+ * `process.env.TX_CLI_VERSION` with a string literal at bundle time, so
7
+ * the filesystem read is never reached. This avoids Bun minifier bugs
8
+ * that can hoist `readFileSync` out of try-catch blocks.
3
9
  */
4
- import { readFileSync } from "node:fs";
5
- import { resolve, dirname } from "node:path";
6
- import { fileURLToPath } from "node:url";
7
- const __dir = dirname(fileURLToPath(import.meta.url));
8
- const pkg = JSON.parse(readFileSync(resolve(__dir, "../package.json"), "utf-8"));
9
- export const CLI_VERSION = pkg.version ?? "0.0.0";
10
+ // Strict semver pattern: digits.digits.digits with optional pre-release/build metadata
11
+ const SEMVER_RE = /^\d+\.\d+\.\d+(-[a-zA-Z0-9._-]+)?(\+[a-zA-Z0-9._-]+)?$/;
12
+ function getVersion() {
13
+ // Compile-time injected version (set by --define in release.yml)
14
+ // In compiled binaries, bun replaces this with the literal string e.g. '0.5.9'
15
+ const injected = process.env.TX_CLI_VERSION;
16
+ if (injected && injected !== "undefined" && injected !== "" && SEMVER_RE.test(injected)) {
17
+ return injected;
18
+ }
19
+ // Development fallback: read from package.json.
20
+ // IMPORTANT: Uses require() instead of static import to prevent Bun's minifier
21
+ // from hoisting readFileSync to module scope (outside try-catch), which causes
22
+ // ENOENT crashes in compiled binaries where /$bunfs/ paths don't exist on disk.
23
+ // In compiled binaries, the --define check above returns before reaching this code.
24
+ try {
25
+ const { readFileSync } = require("node:fs");
26
+ const { resolve, dirname } = require("node:path");
27
+ const { fileURLToPath } = require("node:url");
28
+ const __dir = dirname(fileURLToPath(import.meta.url));
29
+ const pkg = JSON.parse(readFileSync(resolve(__dir, "../package.json"), "utf-8"));
30
+ return pkg.version ?? "0.0.0";
31
+ }
32
+ catch {
33
+ return "0.0.0";
34
+ }
35
+ }
36
+ export const CLI_VERSION = getVersion();
10
37
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AACrD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;AAEhF,MAAM,CAAC,MAAM,WAAW,GAAW,GAAG,CAAC,OAAO,IAAI,OAAO,CAAA"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,uFAAuF;AACvF,MAAM,SAAS,GAAG,wDAAwD,CAAA;AAE1E,SAAS,UAAU;IACjB,iEAAiE;IACjE,+EAA+E;IAC/E,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAA;IAC3C,IAAI,QAAQ,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxF,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,gDAAgD;IAChD,+EAA+E;IAC/E,+EAA+E;IAC/E,gFAAgF;IAChF,oFAAoF;IACpF,IAAI,CAAC;QACH,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,SAAS,CAA6B,CAAA;QACvE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAA+B,CAAA;QAC/E,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,UAAU,CAA8B,CAAA;QAC1E,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;QAChF,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAA;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAA;IAChB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAW,UAAU,EAAE,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jamesaphoenix/tx-cli",
3
- "version": "0.5.9",
3
+ "version": "0.5.10",
4
4
  "description": "TX command line tool - task management for AI agents and humans",
5
5
  "type": "module",
6
6
  "main": "./dist/cli.js",
@@ -15,15 +15,18 @@
15
15
  }
16
16
  },
17
17
  "files": [
18
- "dist"
18
+ "dist",
19
+ "!dist/tx",
20
+ "!dist/tx-*",
21
+ "!dist/**/*.test.*"
19
22
  ],
20
23
  "scripts": {
21
24
  "build": "tsc -b",
22
- "build:binary": "bun build ./src/cli.ts --compile --outfile dist/tx --minify --external @anthropic-ai/sdk --external openai --external node-llama-cpp --external @node-llama-cpp/*",
23
- "build:darwin-arm64": "bun build ./src/cli.ts --compile --outfile dist/tx-darwin-arm64 --target bun-darwin-arm64 --minify --external @anthropic-ai/sdk --external openai --external node-llama-cpp --external @node-llama-cpp/*",
24
- "build:darwin-x64": "bun build ./src/cli.ts --compile --outfile dist/tx-darwin-x64 --target bun-darwin-x64 --minify --external @anthropic-ai/sdk --external openai --external node-llama-cpp --external @node-llama-cpp/*",
25
- "build:linux-x64": "bun build ./src/cli.ts --compile --outfile dist/tx-linux-x64 --target bun-linux-x64 --minify --external @anthropic-ai/sdk --external openai --external node-llama-cpp --external @node-llama-cpp/*",
26
- "build:linux-arm64": "bun build ./src/cli.ts --compile --outfile dist/tx-linux-arm64 --target bun-linux-arm64 --minify --external @anthropic-ai/sdk --external openai --external node-llama-cpp --external @node-llama-cpp/*",
25
+ "build:binary": "bun build ./src/cli.ts --compile --outfile dist/tx --minify --external @anthropic-ai/sdk --external @anthropic-ai/claude-agent-sdk --external openai --external node-llama-cpp --external @node-llama-cpp/*",
26
+ "build:darwin-arm64": "bun build ./src/cli.ts --compile --outfile dist/tx-darwin-arm64 --target bun-darwin-arm64 --minify --external @anthropic-ai/sdk --external @anthropic-ai/claude-agent-sdk --external openai --external node-llama-cpp --external @node-llama-cpp/*",
27
+ "build:darwin-x64": "bun build ./src/cli.ts --compile --outfile dist/tx-darwin-x64 --target bun-darwin-x64 --minify --external @anthropic-ai/sdk --external @anthropic-ai/claude-agent-sdk --external openai --external node-llama-cpp --external @node-llama-cpp/*",
28
+ "build:linux-x64": "bun build ./src/cli.ts --compile --outfile dist/tx-linux-x64 --target bun-linux-x64 --minify --external @anthropic-ai/sdk --external @anthropic-ai/claude-agent-sdk --external openai --external node-llama-cpp --external @node-llama-cpp/*",
29
+ "build:linux-arm64": "bun build ./src/cli.ts --compile --outfile dist/tx-linux-arm64 --target bun-linux-arm64 --minify --external @anthropic-ai/sdk --external @anthropic-ai/claude-agent-sdk --external openai --external node-llama-cpp --external @node-llama-cpp/*",
27
30
  "build:all": "bun run build:darwin-arm64 && bun run build:darwin-x64 && bun run build:linux-x64 && bun run build:linux-arm64",
28
31
  "typecheck": "tsc --noEmit",
29
32
  "lint": "eslint src/",
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=dashboard.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard.test.d.ts","sourceRoot":"","sources":["../../src/commands/dashboard.test.ts"],"names":[],"mappings":""}
@@ -1,166 +0,0 @@
1
- /**
2
- * Dashboard command tests
3
- *
4
- * Tests for `tx dashboard` — starts API server + Vite dev server.
5
- */
6
- import { describe, it, expect, afterEach } from "vitest";
7
- import { spawn, spawnSync } from "node:child_process";
8
- import { mkdtempSync, rmSync } from "node:fs";
9
- import { tmpdir } from "node:os";
10
- import { join, resolve } from "node:path";
11
- const CLI_SRC = resolve(__dirname, "../cli.ts");
12
- describe("tx dashboard", () => {
13
- let proc = null;
14
- let blocker = null;
15
- let tempProjectDir = null;
16
- const delay = (ms) => new Promise((r) => setTimeout(r, ms));
17
- const canFetch = async (url) => {
18
- try {
19
- const res = await fetch(url);
20
- return res.ok;
21
- }
22
- catch {
23
- return false;
24
- }
25
- };
26
- const extractDashboardUrl = (output) => {
27
- // Preferred: summary line emitted by tx dashboard
28
- const summary = output.match(/Dashboard:\s*(https?:\/\/[^\s]+)/);
29
- if (summary?.[1])
30
- return summary[1];
31
- // Fallback: Vite's "Local:" line
32
- const viteLocal = output.match(/Local:\s*(https?:\/\/[^\s]+)/);
33
- return viteLocal?.[1] ?? null;
34
- };
35
- async function waitForServers(outputRef, timeoutMs = 20000) {
36
- const started = Date.now();
37
- let dashboardUrl = null;
38
- while (Date.now() - started < timeoutMs) {
39
- dashboardUrl = extractDashboardUrl(outputRef.value);
40
- const apiReady = await canFetch("http://localhost:3001/api/stats");
41
- const dashboardReady = dashboardUrl ? await canFetch(dashboardUrl) : false;
42
- if (apiReady && dashboardReady && dashboardUrl) {
43
- return dashboardUrl;
44
- }
45
- await delay(500);
46
- }
47
- throw new Error(`dashboard did not become ready. output:\n${outputRef.value}`);
48
- }
49
- function runCliInCwd(args, cwd) {
50
- return spawnSync("bun", [CLI_SRC, ...args], {
51
- cwd,
52
- encoding: "utf-8",
53
- timeout: 20000,
54
- });
55
- }
56
- afterEach(() => {
57
- if (blocker && !blocker.killed) {
58
- blocker.kill("SIGKILL");
59
- blocker = null;
60
- }
61
- if (proc && !proc.killed) {
62
- proc.kill("SIGTERM");
63
- proc = null;
64
- }
65
- if (tempProjectDir) {
66
- rmSync(tempProjectDir, { recursive: true, force: true });
67
- tempProjectDir = null;
68
- }
69
- });
70
- it("is registered as a CLI command", () => {
71
- const result = spawnSync("bun", [CLI_SRC, "help"], {
72
- encoding: "utf-8",
73
- timeout: 10000,
74
- });
75
- expect(result.stdout).toContain("dashboard");
76
- });
77
- it("shows help text with --help flag", () => {
78
- const result = spawnSync("bun", [CLI_SRC, "dashboard", "--help"], {
79
- encoding: "utf-8",
80
- timeout: 10000,
81
- });
82
- expect(result.stdout).toContain("tx dashboard");
83
- expect(result.stdout).toContain("--no-open");
84
- expect(result.stdout).toContain("--port");
85
- });
86
- it("starts servers that respond on expected ports", async () => {
87
- proc = spawn("bun", [CLI_SRC, "dashboard", "--no-open"], {
88
- stdio: "pipe",
89
- });
90
- const output = { value: "" };
91
- proc.stdout?.on("data", (d) => { output.value += d.toString(); });
92
- proc.stderr?.on("data", (d) => { output.value += d.toString(); });
93
- const dashboardUrl = await waitForServers(output);
94
- expect(await canFetch("http://localhost:3001/api/stats")).toBe(true);
95
- expect(await canFetch(dashboardUrl)).toBe(true);
96
- }, 25000);
97
- it("cleans up child processes on SIGTERM", async () => {
98
- proc = spawn("bun", [CLI_SRC, "dashboard", "--no-open"], {
99
- stdio: "pipe",
100
- });
101
- const output = { value: "" };
102
- proc.stdout?.on("data", (d) => { output.value += d.toString(); });
103
- proc.stderr?.on("data", (d) => { output.value += d.toString(); });
104
- const dashboardUrl = await waitForServers(output);
105
- // Send SIGTERM
106
- proc.kill("SIGTERM");
107
- // Wait for cleanup
108
- await delay(2000);
109
- // Ports should be freed
110
- const apiFreed = !(await canFetch("http://localhost:3001/api/stats"));
111
- const viteFreed = !(await canFetch(dashboardUrl));
112
- expect(apiFreed).toBe(true);
113
- expect(viteFreed).toBe(true);
114
- proc = null; // already killed
115
- }, 25000);
116
- it("prints and uses the actual Vite URL when 5173 remains occupied", async () => {
117
- // Blocker ignores SIGTERM so killPort(5173) won't free it.
118
- blocker = spawn("bun", [
119
- "-e",
120
- `
121
- process.on("SIGTERM", () => {});
122
- Bun.serve({ port: 5173, fetch: () => new Response("blocked") });
123
- setInterval(() => {}, 1000);
124
- `
125
- ], { stdio: "ignore" });
126
- await delay(500);
127
- proc = spawn("bun", [CLI_SRC, "dashboard", "--no-open"], {
128
- stdio: "pipe",
129
- });
130
- const output = { value: "" };
131
- proc.stdout?.on("data", (d) => { output.value += d.toString(); });
132
- proc.stderr?.on("data", (d) => { output.value += d.toString(); });
133
- const dashboardUrl = await waitForServers(output, 30000);
134
- expect(dashboardUrl).not.toContain(":5173");
135
- expect(output.value).toContain(`Dashboard: ${dashboardUrl}`);
136
- }, 35000);
137
- it("serves docs endpoints from the selected project database", async () => {
138
- tempProjectDir = mkdtempSync(join(tmpdir(), "tx-dashboard-docs-"));
139
- const init = runCliInCwd(["init", "--codex"], tempProjectDir);
140
- expect(init.status).toBe(0);
141
- const addDoc = runCliInCwd(["doc", "add", "overview", "dashboard-test-doc", "--title", "Dashboard Test Doc"], tempProjectDir);
142
- expect(addDoc.status).toBe(0);
143
- proc = spawn("bun", [CLI_SRC, "dashboard", "--no-open"], {
144
- cwd: tempProjectDir,
145
- stdio: "pipe",
146
- });
147
- const output = { value: "" };
148
- proc.stdout?.on("data", (d) => { output.value += d.toString(); });
149
- proc.stderr?.on("data", (d) => { output.value += d.toString(); });
150
- await waitForServers(output, 30000);
151
- const listRes = await fetch("http://localhost:3001/api/docs");
152
- expect(listRes.ok).toBe(true);
153
- const listData = await listRes.json();
154
- expect(listData.docs.some((doc) => doc.name === "dashboard-test-doc")).toBe(true);
155
- const detailRes = await fetch("http://localhost:3001/api/docs/dashboard-test-doc");
156
- expect(detailRes.ok).toBe(true);
157
- const detailData = await detailRes.json();
158
- expect(detailData.name).toBe("dashboard-test-doc");
159
- expect(detailData.kind).toBe("overview");
160
- const graphRes = await fetch("http://localhost:3001/api/docs/graph");
161
- expect(graphRes.ok).toBe(true);
162
- const graphData = await graphRes.json();
163
- expect(graphData.nodes.some((node) => node.label === "dashboard-test-doc")).toBe(true);
164
- }, 40000);
165
- });
166
- //# sourceMappingURL=dashboard.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard.test.js","sourceRoot":"","sources":["../../src/commands/dashboard.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=parse.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse.test.d.ts","sourceRoot":"","sources":["../../src/utils/parse.test.ts"],"names":[],"mappings":""}
@@ -1,140 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from "vitest";
2
- import { opt, flag, parseIntOpt, parseFloatOpt } from "./parse.js";
3
- describe("opt", () => {
4
- it("returns string value for matching flag", () => {
5
- const flags = { limit: "10", json: true };
6
- expect(opt(flags, "limit")).toBe("10");
7
- });
8
- it("returns undefined for boolean flag", () => {
9
- const flags = { json: true };
10
- expect(opt(flags, "json")).toBeUndefined();
11
- });
12
- it("returns undefined for missing flag", () => {
13
- const flags = {};
14
- expect(opt(flags, "limit")).toBeUndefined();
15
- });
16
- it("returns first matching flag when multiple names given", () => {
17
- const flags = { n: "5" };
18
- expect(opt(flags, "limit", "n")).toBe("5");
19
- });
20
- it("prefers earlier name in list", () => {
21
- const flags = { limit: "10", n: "5" };
22
- expect(opt(flags, "limit", "n")).toBe("10");
23
- });
24
- });
25
- describe("flag", () => {
26
- it("returns true when flag is set", () => {
27
- const flags = { json: true };
28
- expect(flag(flags, "json")).toBe(true);
29
- });
30
- it("returns false when flag is not set", () => {
31
- const flags = {};
32
- expect(flag(flags, "json")).toBe(false);
33
- });
34
- it("returns false when flag is a string value", () => {
35
- const flags = { json: "true" };
36
- expect(flag(flags, "json")).toBe(false);
37
- });
38
- it("returns true if any name matches", () => {
39
- const flags = { h: true };
40
- expect(flag(flags, "help", "h")).toBe(true);
41
- });
42
- });
43
- describe("parseIntOpt", () => {
44
- let mockExit;
45
- let mockError;
46
- beforeEach(() => {
47
- mockExit = vi.spyOn(process, "exit").mockImplementation(() => undefined);
48
- mockError = vi.spyOn(console, "error").mockImplementation(() => { });
49
- });
50
- it("returns undefined when flag is not present", () => {
51
- const flags = {};
52
- expect(parseIntOpt(flags, "limit", "limit", "n")).toBeUndefined();
53
- });
54
- it("returns parsed integer for valid value", () => {
55
- const flags = { limit: "42" };
56
- expect(parseIntOpt(flags, "limit", "limit")).toBe(42);
57
- });
58
- it("returns parsed integer for short alias", () => {
59
- const flags = { n: "5" };
60
- expect(parseIntOpt(flags, "limit", "limit", "n")).toBe(5);
61
- });
62
- it("exits with error for non-numeric value", () => {
63
- const flags = { limit: "abc" };
64
- parseIntOpt(flags, "limit", "limit");
65
- expect(mockError).toHaveBeenCalledWith('Invalid value for --limit: "abc" is not a valid finite number');
66
- expect(mockExit).toHaveBeenCalledWith(1);
67
- });
68
- it("exits with error for empty string value", () => {
69
- const flags = { limit: "" };
70
- parseIntOpt(flags, "limit", "limit");
71
- expect(mockExit).toHaveBeenCalledWith(1);
72
- });
73
- it("parses negative integers", () => {
74
- const flags = { score: "-5" };
75
- expect(parseIntOpt(flags, "score", "score")).toBe(-5);
76
- });
77
- it("parses zero", () => {
78
- const flags = { limit: "0" };
79
- expect(parseIntOpt(flags, "limit", "limit")).toBe(0);
80
- });
81
- it("truncates floats to integer", () => {
82
- const flags = { limit: "3.7" };
83
- expect(parseIntOpt(flags, "limit", "limit")).toBe(3);
84
- });
85
- it("ignores boolean flags", () => {
86
- const flags = { limit: true };
87
- expect(parseIntOpt(flags, "limit", "limit")).toBeUndefined();
88
- });
89
- });
90
- describe("parseFloatOpt", () => {
91
- let mockExit;
92
- let mockError;
93
- beforeEach(() => {
94
- mockExit = vi.spyOn(process, "exit").mockImplementation(() => undefined);
95
- mockError = vi.spyOn(console, "error").mockImplementation(() => { });
96
- });
97
- it("returns undefined when flag is not present", () => {
98
- const flags = {};
99
- expect(parseFloatOpt(flags, "score", "score")).toBeUndefined();
100
- });
101
- it("returns parsed float for valid value", () => {
102
- const flags = { score: "0.75" };
103
- expect(parseFloatOpt(flags, "score", "score")).toBe(0.75);
104
- });
105
- it("returns parsed float for integer value", () => {
106
- const flags = { "min-score": "3" };
107
- expect(parseFloatOpt(flags, "min-score", "min-score")).toBe(3);
108
- });
109
- it("exits with error for non-numeric value", () => {
110
- const flags = { score: "high" };
111
- parseFloatOpt(flags, "score", "score");
112
- expect(mockError).toHaveBeenCalledWith('Invalid value for --score: "high" is not a valid finite number');
113
- expect(mockExit).toHaveBeenCalledWith(1);
114
- });
115
- it("parses negative floats", () => {
116
- const flags = { score: "-0.5" };
117
- expect(parseFloatOpt(flags, "score", "score")).toBe(-0.5);
118
- });
119
- it("parses zero", () => {
120
- const flags = { score: "0" };
121
- expect(parseFloatOpt(flags, "score", "score")).toBe(0);
122
- });
123
- it("exits with error for Infinity", () => {
124
- const flags = { score: "Infinity" };
125
- parseFloatOpt(flags, "score", "score");
126
- expect(mockError).toHaveBeenCalledWith('Invalid value for --score: "Infinity" is not a valid finite number');
127
- expect(mockExit).toHaveBeenCalledWith(1);
128
- });
129
- it("exits with error for -Infinity", () => {
130
- const flags = { score: "-Infinity" };
131
- parseFloatOpt(flags, "score", "score");
132
- expect(mockError).toHaveBeenCalledWith('Invalid value for --score: "-Infinity" is not a valid finite number');
133
- expect(mockExit).toHaveBeenCalledWith(1);
134
- });
135
- it("ignores boolean flags", () => {
136
- const flags = { score: true };
137
- expect(parseFloatOpt(flags, "score", "score")).toBeUndefined();
138
- });
139
- });
140
- //# sourceMappingURL=parse.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse.test.js","sourceRoot":"","sources":["../../src/utils/parse.test.ts"],"names":[],"mappings":"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"}