@gnapi/cotester 1.2.4 → 1.2.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.
@@ -0,0 +1,246 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.installHooks = installHooks;
37
+ /**
38
+ * Pre-commit hook installer (Feature 19)
39
+ *
40
+ * `cotester hooks:install` installs a Git pre-commit hook that:
41
+ * 1. Detects which .ts source files are staged.
42
+ * 2. Runs `cotester generate` on each changed source file.
43
+ * 3. Stages the newly generated test/mock files alongside the change.
44
+ *
45
+ * Strategy:
46
+ * - Prefers Husky v8/v9 (`.husky/pre-commit` + `"prepare": "husky"` in package.json).
47
+ * - Falls back to a raw `.git/hooks/pre-commit` shell script when Husky is absent.
48
+ */
49
+ const fs = __importStar(require("fs"));
50
+ const path = __importStar(require("path"));
51
+ const utils_1 = require("./utils");
52
+ // ── Hook script content ───────────────────────────────────────────────────────
53
+ /** The shell script injected into the pre-commit hook. */
54
+ const HOOK_BLOCK_START = "# >>> cotester hook start <<<";
55
+ const HOOK_BLOCK_END = "# >>> cotester hook end <<<";
56
+ function buildHookBody(cotesterBin) {
57
+ return `${HOOK_BLOCK_START}
58
+ # Auto-generated by cotester hooks:install — do not edit this block manually.
59
+ # Re-run \`cotester hooks:install\` to update.
60
+
61
+ _staged_ts=$(git diff --cached --name-only --diff-filter=ACMR | grep '\\.ts$' | grep -v '\\.test\\.ts$' | grep -v '\\.spec\\.ts$' | grep -v '\\.d\\.ts$' || true)
62
+
63
+ if [ -n "$_staged_ts" ]; then
64
+ echo "[cotester] Generating tests for staged TypeScript files..."
65
+ for _file in $_staged_ts; do
66
+ if [ -f "$_file" ]; then
67
+ ${cotesterBin} generate "$_file" 2>&1 || true
68
+ fi
69
+ done
70
+ # Stage any newly created or updated test/mock files
71
+ git add cotester/tests cotester/mocks 2>/dev/null || true
72
+ echo "[cotester] Done."
73
+ fi
74
+ ${HOOK_BLOCK_END}`;
75
+ }
76
+ // ── Public entry point ────────────────────────────────────────────────────────
77
+ function installHooks() {
78
+ const projectRoot = (0, utils_1.getProjectRoot)();
79
+ const huskyDir = path.join(projectRoot, ".husky");
80
+ const gitDir = findGitDir(projectRoot);
81
+ if (!gitDir) {
82
+ (0, utils_1.log)("Could not find a .git directory. Is this a git repository?", "error");
83
+ process.exit(1);
84
+ }
85
+ const useHusky = detectHusky(projectRoot);
86
+ const cotesterBin = resolveCotesterBin(projectRoot);
87
+ if (useHusky) {
88
+ installHuskyHook(projectRoot, huskyDir, cotesterBin);
89
+ }
90
+ else {
91
+ installRawGitHook(gitDir, cotesterBin);
92
+ }
93
+ }
94
+ // ── Husky installer ───────────────────────────────────────────────────────────
95
+ function installHuskyHook(projectRoot, huskyDir, cotesterBin) {
96
+ const hookPath = path.join(huskyDir, "pre-commit");
97
+ // Ensure .husky dir exists
98
+ if (!fs.existsSync(huskyDir)) {
99
+ fs.mkdirSync(huskyDir, { recursive: true });
100
+ (0, utils_1.log)(`Created ${path.relative(projectRoot, huskyDir)}/`, "info");
101
+ }
102
+ const hookBody = buildHookBody(cotesterBin);
103
+ if (fs.existsSync(hookPath)) {
104
+ const existing = fs.readFileSync(hookPath, "utf-8");
105
+ if (existing.includes(HOOK_BLOCK_START)) {
106
+ // Update existing block
107
+ const updated = replaceHookBlock(existing, hookBody);
108
+ fs.writeFileSync(hookPath, updated, "utf-8");
109
+ (0, utils_1.log)(`Updated cotester block in ${path.relative(projectRoot, hookPath)}`, "success");
110
+ }
111
+ else {
112
+ // Append to existing hook
113
+ const appended = existing.trimEnd() + "\n\n" + hookBody + "\n";
114
+ fs.writeFileSync(hookPath, appended, "utf-8");
115
+ (0, utils_1.log)(`Appended cotester block to ${path.relative(projectRoot, hookPath)}`, "success");
116
+ }
117
+ }
118
+ else {
119
+ // Create new hook file
120
+ const content = `#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n\n${hookBody}\n`;
121
+ fs.writeFileSync(hookPath, content, "utf-8");
122
+ (0, utils_1.log)(`Created ${path.relative(projectRoot, hookPath)}`, "success");
123
+ }
124
+ makeExecutable(hookPath);
125
+ ensureHuskyPrepareScript(projectRoot);
126
+ (0, utils_1.log)("Husky pre-commit hook installed.", "success");
127
+ (0, utils_1.log)('Run `npm install` (or `npx husky`) to activate Husky if not already done.', "info");
128
+ }
129
+ // ── Raw Git hook installer ────────────────────────────────────────────────────
130
+ function installRawGitHook(gitDir, cotesterBin) {
131
+ const hooksDir = path.join(gitDir, "hooks");
132
+ const hookPath = path.join(hooksDir, "pre-commit");
133
+ if (!fs.existsSync(hooksDir)) {
134
+ fs.mkdirSync(hooksDir, { recursive: true });
135
+ }
136
+ const hookBody = buildHookBody(cotesterBin);
137
+ if (fs.existsSync(hookPath)) {
138
+ const existing = fs.readFileSync(hookPath, "utf-8");
139
+ if (existing.includes(HOOK_BLOCK_START)) {
140
+ const updated = replaceHookBlock(existing, hookBody);
141
+ fs.writeFileSync(hookPath, updated, "utf-8");
142
+ (0, utils_1.log)(`Updated cotester block in .git/hooks/pre-commit`, "success");
143
+ }
144
+ else {
145
+ const appended = existing.trimEnd() + "\n\n" + hookBody + "\n";
146
+ fs.writeFileSync(hookPath, appended, "utf-8");
147
+ (0, utils_1.log)(`Appended cotester block to .git/hooks/pre-commit`, "success");
148
+ }
149
+ }
150
+ else {
151
+ const content = `#!/usr/bin/env sh\nset -e\n\n${hookBody}\n`;
152
+ fs.writeFileSync(hookPath, content, "utf-8");
153
+ (0, utils_1.log)(`Created .git/hooks/pre-commit`, "success");
154
+ }
155
+ makeExecutable(hookPath);
156
+ (0, utils_1.log)("Git pre-commit hook installed.", "success");
157
+ }
158
+ // ── Helpers ───────────────────────────────────────────────────────────────────
159
+ function replaceHookBlock(content, newBlock) {
160
+ const startIdx = content.indexOf(HOOK_BLOCK_START);
161
+ const endIdx = content.indexOf(HOOK_BLOCK_END);
162
+ if (startIdx === -1 || endIdx === -1)
163
+ return content + "\n\n" + newBlock;
164
+ return (content.substring(0, startIdx) +
165
+ newBlock +
166
+ content.substring(endIdx + HOOK_BLOCK_END.length));
167
+ }
168
+ function makeExecutable(filePath) {
169
+ try {
170
+ fs.chmodSync(filePath, 0o755);
171
+ }
172
+ catch {
173
+ // chmod not available on Windows — that's fine, Git on Windows handles this
174
+ }
175
+ }
176
+ /** Walk up from projectRoot looking for a .git directory. */
177
+ function findGitDir(startDir) {
178
+ let current = startDir;
179
+ for (let i = 0; i < 10; i++) {
180
+ const candidate = path.join(current, ".git");
181
+ if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory()) {
182
+ return candidate;
183
+ }
184
+ const parent = path.dirname(current);
185
+ if (parent === current)
186
+ break;
187
+ current = parent;
188
+ }
189
+ return null;
190
+ }
191
+ /** Return true when the project has Husky installed. */
192
+ function detectHusky(projectRoot) {
193
+ // Husky v8+ stores hooks in .husky/
194
+ if (fs.existsSync(path.join(projectRoot, ".husky")))
195
+ return true;
196
+ // Check package.json devDependencies / dependencies
197
+ const pkgPath = path.join(projectRoot, "package.json");
198
+ if (fs.existsSync(pkgPath)) {
199
+ try {
200
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
201
+ const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
202
+ if ("husky" in allDeps)
203
+ return true;
204
+ }
205
+ catch {
206
+ // ignore
207
+ }
208
+ }
209
+ return false;
210
+ }
211
+ /**
212
+ * Resolve the command to invoke cotester inside the hook script.
213
+ * Prefers a local `./node_modules/.bin/cotester`; falls back to `npx cotester`.
214
+ */
215
+ function resolveCotesterBin(projectRoot) {
216
+ const local = path.join(projectRoot, "node_modules", ".bin", "cotester");
217
+ if (fs.existsSync(local)) {
218
+ return "./node_modules/.bin/cotester";
219
+ }
220
+ return "npx cotester";
221
+ }
222
+ /**
223
+ * Add `"prepare": "husky"` to package.json scripts if not already present.
224
+ * This ensures `npm install` activates Husky automatically.
225
+ */
226
+ function ensureHuskyPrepareScript(projectRoot) {
227
+ const pkgPath = path.join(projectRoot, "package.json");
228
+ if (!fs.existsSync(pkgPath))
229
+ return;
230
+ try {
231
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
232
+ if (!pkg.scripts)
233
+ pkg.scripts = {};
234
+ if (!pkg.scripts.prepare || !pkg.scripts.prepare.includes("husky")) {
235
+ pkg.scripts.prepare = pkg.scripts.prepare
236
+ ? `${pkg.scripts.prepare} && husky`
237
+ : "husky";
238
+ fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + "\n", "utf-8");
239
+ (0, utils_1.log)('Added "prepare": "husky" to package.json scripts.', "info");
240
+ }
241
+ }
242
+ catch {
243
+ // Non-critical — Husky still works without the prepare script
244
+ }
245
+ }
246
+ //# sourceMappingURL=hooksInstaller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooksInstaller.js","sourceRoot":"","sources":["../src/hooksInstaller.ts"],"names":[],"mappings":"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"}
@@ -44,6 +44,7 @@ const formatter_1 = require("./formatter");
44
44
  const utils_1 = require("./utils");
45
45
  const mockDataEngine_1 = require("./mockDataEngine");
46
46
  const interfaceShapeResolver_1 = require("./interfaceShapeResolver");
47
+ const sharedMockRegistry_1 = require("./sharedMockRegistry");
47
48
  /**
48
49
  * Generate a mock file that mirrors the source file path.
49
50
  *
@@ -55,6 +56,8 @@ async function generateMockFile(srcFilePath, scenarios, projectRoot, srcDir, moc
55
56
  return null;
56
57
  const absSrcRoot = path.resolve(projectRoot, srcDir);
57
58
  const mockFilePath = (0, utils_1.mirrorPath)(srcFilePath, absSrcRoot, path.join(projectRoot, mockDir), ".mock.ts");
59
+ // ── Ensure shared registry has entries for all custom types ──────────
60
+ const registryResult = (0, sharedMockRegistry_1.ensureSharedRegistry)(scenarios, projectRoot, mockDir, dryRun, srcFilePath);
58
61
  const constantNames = new Map();
59
62
  const lines = [];
60
63
  // Header comment
@@ -62,6 +65,13 @@ async function generateMockFile(srcFilePath, scenarios, projectRoot, srcDir, moc
62
65
  lines.push(`// Auto-generated mock data for ${relSrc}`);
63
66
  lines.push(`// Do not edit — regenerated on each source change.`);
64
67
  lines.push("");
68
+ // ── Import from shared registry if we have any custom-type factories ─
69
+ if (registryResult && registryResult.factories.size > 0) {
70
+ const importPath = (0, sharedMockRegistry_1.getRegistryImportPath)(mockFilePath, registryResult.registryPath);
71
+ const factoryNames = [...registryResult.factories.values()].sort().join(", ");
72
+ lines.push(`import { ${factoryNames} } from '${importPath}';`);
73
+ lines.push("");
74
+ }
65
75
  for (const scenario of scenarios) {
66
76
  const fnName = scenario.className
67
77
  ? `${scenario.className}_${scenario.functionName}`
@@ -76,7 +86,19 @@ async function generateMockFile(srcFilePath, scenarios, projectRoot, srcDir, moc
76
86
  }
77
87
  else {
78
88
  const props = c.paramNames
79
- .map((name, i) => `${name}: ${c.argLiterals[i] ?? "undefined"}`)
89
+ .map((name, i) => {
90
+ const rawLiteral = c.argLiterals[i] ?? "undefined";
91
+ // Resolve the type for this parameter name
92
+ const param = scenario.parameters.find(p => p.name === name);
93
+ if (param) {
94
+ const typeName = (0, sharedMockRegistry_1.extractBaseTypeName)(param.type);
95
+ if ((0, sharedMockRegistry_1.isCustomTypeName)(typeName) && registryResult?.factories.has(typeName)) {
96
+ const factory = registryResult.factories.get(typeName);
97
+ return `${name}: ${factory}()`;
98
+ }
99
+ }
100
+ return `${name}: ${rawLiteral}`;
101
+ })
80
102
  .join(", ");
81
103
  lines.push(` ${key}: { ${props} },`);
82
104
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mockGenerator.js","sourceRoot":"","sources":["../src/mockGenerator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mockGenerator.js","sourceRoot":"","sources":["../src/mockGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface ReportOptions {
2
+ format: "html" | "json" | "md";
3
+ /** Path to coverage-summary.json. Defaults to <projectRoot>/coverage/coverage-summary.json */
4
+ coverageSummaryPath?: string;
5
+ /** Write report to this file path; print to stdout if omitted */
6
+ output?: string;
7
+ /** Restrict scan to this subfolder of srcDir */
8
+ folder?: string;
9
+ }
10
+ export declare function runReport(options: ReportOptions): void;
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.runReport = runReport;
37
+ /**
38
+ * CoTester Coverage Reporter (Feature 15)
39
+ *
40
+ * Reads Istanbul/c8 `coverage/coverage-summary.json`, overlays it with
41
+ * cotester's own function-level tracking (via checker.ts), and outputs
42
+ * a combined report in HTML, JSON, or Markdown format.
43
+ *
44
+ * Usage: cotester report [--format html|json|md] [--coverage <path>] [-o <file>]
45
+ */
46
+ const fs = __importStar(require("fs"));
47
+ const path = __importStar(require("path"));
48
+ const checker_1 = require("./checker");
49
+ const configManager_1 = require("./configManager");
50
+ const utils_1 = require("./utils");
51
+ // ── Entry point ───────────────────────────────────────────────────────────────
52
+ function runReport(options) {
53
+ const projectRoot = (0, utils_1.getProjectRoot)();
54
+ const summaryPath = options.coverageSummaryPath ??
55
+ path.join(projectRoot, "coverage", "coverage-summary.json");
56
+ // Load Istanbul summary (optional — report works without it)
57
+ let istanbul = {};
58
+ if (fs.existsSync(summaryPath)) {
59
+ try {
60
+ istanbul = JSON.parse(fs.readFileSync(summaryPath, "utf-8"));
61
+ }
62
+ catch {
63
+ (0, utils_1.log)(`Warning: could not parse ${path.relative(projectRoot, summaryPath)} — Istanbul metrics omitted.`, "warn");
64
+ }
65
+ }
66
+ else {
67
+ (0, utils_1.log)(`Info: ${path.relative(projectRoot, summaryPath)} not found — run your test runner with coverage first for Istanbul metrics.`, "info");
68
+ }
69
+ // Get cotester function-level data
70
+ const config = (0, configManager_1.loadConfig)(projectRoot);
71
+ const baseAbsolute = path.resolve(projectRoot, config.srcDir);
72
+ const scanRoot = options.folder
73
+ ? path.resolve(baseAbsolute, options.folder)
74
+ : baseAbsolute;
75
+ const checkResult = (0, checker_1.computeCoverage)(scanRoot, projectRoot, config);
76
+ const rows = buildRows(checkResult, istanbul, projectRoot);
77
+ const content = renderReport(rows, checkResult, options.format, projectRoot);
78
+ if (options.output) {
79
+ const outPath = path.resolve(options.output);
80
+ fs.writeFileSync(outPath, content, "utf-8");
81
+ (0, utils_1.log)(`Report written → ${path.relative(projectRoot, outPath)}`, "success");
82
+ }
83
+ else {
84
+ process.stdout.write(content);
85
+ if (!content.endsWith("\n"))
86
+ process.stdout.write("\n");
87
+ }
88
+ }
89
+ // ── Build combined rows ───────────────────────────────────────────────────────
90
+ function buildRows(checkResult, istanbul, projectRoot) {
91
+ // Build a lookup: normalised absolute path → Istanbul summary
92
+ const istMap = new Map();
93
+ for (const [key, val] of Object.entries(istanbul)) {
94
+ if (key === "total")
95
+ continue;
96
+ // Istanbul keys are absolute paths on most OS; normalise separators
97
+ istMap.set(path.normalize(key), val);
98
+ }
99
+ return checkResult.fileCoverages.map((fc) => {
100
+ const cotesterPct = fc.totalCount === 0
101
+ ? 100
102
+ : Math.round((fc.coveredCount / fc.totalCount) * 100);
103
+ const ist = istMap.get(path.normalize(fc.srcPath));
104
+ return {
105
+ relPath: fc.relPath,
106
+ testExists: fc.testFileExists,
107
+ cotesterPct,
108
+ coveredFns: fc.coveredCount,
109
+ totalFns: fc.totalCount,
110
+ staleCount: fc.staleCount,
111
+ linesPct: ist?.lines.pct,
112
+ branchesPct: ist?.branches.pct,
113
+ fnPct: ist?.functions.pct,
114
+ stmtPct: ist?.statements.pct,
115
+ };
116
+ });
117
+ }
118
+ // ── Renderers ─────────────────────────────────────────────────────────────────
119
+ function renderReport(rows, checkResult, format, projectRoot) {
120
+ switch (format) {
121
+ case "json":
122
+ return renderJson(rows, checkResult);
123
+ case "html":
124
+ return renderHtml(rows, checkResult, projectRoot);
125
+ default:
126
+ return renderMarkdown(rows, checkResult);
127
+ }
128
+ }
129
+ // ── JSON ──────────────────────────────────────────────────────────────────────
130
+ function renderJson(rows, checkResult) {
131
+ return JSON.stringify({
132
+ summary: {
133
+ totalFunctions: checkResult.totalFunctions,
134
+ coveredFunctions: checkResult.coveredFunctions,
135
+ coveragePercent: checkResult.coveragePercent,
136
+ minCoverage: checkResult.minCoverage,
137
+ passed: checkResult.passed,
138
+ totalStale: checkResult.totalStale,
139
+ },
140
+ files: rows,
141
+ }, null, 2);
142
+ }
143
+ // ── Markdown ──────────────────────────────────────────────────────────────────
144
+ function renderMarkdown(rows, checkResult) {
145
+ const lines = [];
146
+ lines.push("# CoTester Coverage Report");
147
+ lines.push("");
148
+ lines.push(`**Overall function coverage:** ${checkResult.coveragePercent}% (${checkResult.coveredFunctions}/${checkResult.totalFunctions})`);
149
+ lines.push(`**Status:** ${checkResult.passed ? "PASS" : "FAIL"} (threshold: ${checkResult.minCoverage}%)`);
150
+ if (checkResult.totalStale > 0) {
151
+ lines.push(`**Stale tests:** ${checkResult.totalStale} function(s) with changed signatures`);
152
+ }
153
+ lines.push("");
154
+ lines.push("| File | CoTester% | Covered/Total | Stale | Lines% | Branches% | Fns% | Stmts% |");
155
+ lines.push("|------|-----------|--------------|-------|--------|-----------|------|--------|");
156
+ for (const r of rows) {
157
+ const testIcon = r.testExists ? "✔" : "✖";
158
+ const stale = r.staleCount > 0 ? `⚠ ${r.staleCount}` : "-";
159
+ const fmtPct = (v) => (v !== undefined ? `${v}%` : "—");
160
+ lines.push(`| ${r.relPath} ${testIcon} | ${r.cotesterPct}% | ${r.coveredFns}/${r.totalFns} | ${stale} | ${fmtPct(r.linesPct)} | ${fmtPct(r.branchesPct)} | ${fmtPct(r.fnPct)} | ${fmtPct(r.stmtPct)} |`);
161
+ }
162
+ lines.push("");
163
+ return lines.join("\n");
164
+ }
165
+ // ── HTML ──────────────────────────────────────────────────────────────────────
166
+ function pctColor(pct) {
167
+ if (pct >= 80)
168
+ return "#22c55e"; // green
169
+ if (pct >= 50)
170
+ return "#f59e0b"; // amber
171
+ return "#ef4444"; // red
172
+ }
173
+ function fmtPct(v) {
174
+ return v !== undefined ? `${v}%` : "—";
175
+ }
176
+ function renderHtml(rows, checkResult, projectRoot) {
177
+ const passColor = checkResult.passed ? "#22c55e" : "#ef4444";
178
+ const passLabel = checkResult.passed ? "PASS" : "FAIL";
179
+ const generatedAt = new Date().toISOString();
180
+ const rowHtml = rows
181
+ .map((r) => {
182
+ const testBadge = r.testExists
183
+ ? `<span style="color:#22c55e">✔</span>`
184
+ : `<span style="color:#ef4444">✖</span>`;
185
+ const staleBadge = r.staleCount > 0
186
+ ? `<span style="color:#f59e0b">⚠ ${r.staleCount}</span>`
187
+ : `<span style="color:#6b7280">—</span>`;
188
+ const ctPct = r.cotesterPct;
189
+ return `
190
+ <tr>
191
+ <td style="max-width:360px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap" title="${r.relPath}">${r.relPath} ${testBadge}</td>
192
+ <td style="color:${pctColor(ctPct)};font-weight:600;text-align:center">${ctPct}%</td>
193
+ <td style="text-align:center">${r.coveredFns}/${r.totalFns}</td>
194
+ <td style="text-align:center">${staleBadge}</td>
195
+ <td style="text-align:center;color:${r.linesPct !== undefined ? pctColor(r.linesPct) : "#6b7280"}">${fmtPct(r.linesPct)}</td>
196
+ <td style="text-align:center;color:${r.branchesPct !== undefined ? pctColor(r.branchesPct) : "#6b7280"}">${fmtPct(r.branchesPct)}</td>
197
+ <td style="text-align:center;color:${r.fnPct !== undefined ? pctColor(r.fnPct) : "#6b7280"}">${fmtPct(r.fnPct)}</td>
198
+ <td style="text-align:center;color:${r.stmtPct !== undefined ? pctColor(r.stmtPct) : "#6b7280"}">${fmtPct(r.stmtPct)}</td>
199
+ </tr>`;
200
+ })
201
+ .join("");
202
+ return `<!DOCTYPE html>
203
+ <html lang="en">
204
+ <head>
205
+ <meta charset="UTF-8" />
206
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
207
+ <title>CoTester Coverage Report</title>
208
+ <style>
209
+ body { font-family: system-ui, sans-serif; background: #0f172a; color: #e2e8f0; margin: 0; padding: 2rem; }
210
+ h1 { color: #f8fafc; margin-bottom: 0.5rem; }
211
+ .meta { color: #94a3b8; font-size: 0.875rem; margin-bottom: 1.5rem; }
212
+ .summary { display: flex; gap: 1.5rem; margin-bottom: 2rem; flex-wrap: wrap; }
213
+ .card { background: #1e293b; border-radius: 0.75rem; padding: 1rem 1.5rem; min-width: 160px; }
214
+ .card-label { font-size: 0.75rem; color: #94a3b8; text-transform: uppercase; letter-spacing: 0.05em; }
215
+ .card-value { font-size: 1.75rem; font-weight: 700; margin-top: 0.25rem; }
216
+ table { width: 100%; border-collapse: collapse; background: #1e293b; border-radius: 0.75rem; overflow: hidden; }
217
+ th { background: #0f172a; padding: 0.75rem 1rem; text-align: left; font-size: 0.75rem; color: #94a3b8; text-transform: uppercase; letter-spacing: 0.05em; }
218
+ td { padding: 0.625rem 1rem; border-top: 1px solid #0f172a; font-size: 0.875rem; }
219
+ tr:hover td { background: #263548; }
220
+ </style>
221
+ </head>
222
+ <body>
223
+ <h1>CoTester Coverage Report</h1>
224
+ <p class="meta">Generated at ${generatedAt} &mdash; project root: ${projectRoot.replace(/\\/g, "/")}</p>
225
+
226
+ <div class="summary">
227
+ <div class="card">
228
+ <div class="card-label">Function Coverage</div>
229
+ <div class="card-value" style="color:${pctColor(checkResult.coveragePercent)}">${checkResult.coveragePercent}%</div>
230
+ </div>
231
+ <div class="card">
232
+ <div class="card-label">Covered / Total</div>
233
+ <div class="card-value">${checkResult.coveredFunctions} / ${checkResult.totalFunctions}</div>
234
+ </div>
235
+ <div class="card">
236
+ <div class="card-label">Status</div>
237
+ <div class="card-value" style="color:${passColor}">${passLabel}</div>
238
+ </div>
239
+ <div class="card">
240
+ <div class="card-label">Threshold</div>
241
+ <div class="card-value">${checkResult.minCoverage}%</div>
242
+ </div>
243
+ ${checkResult.totalStale > 0 ? `
244
+ <div class="card">
245
+ <div class="card-label">Stale Tests</div>
246
+ <div class="card-value" style="color:#f59e0b">${checkResult.totalStale}</div>
247
+ </div>` : ""}
248
+ </div>
249
+
250
+ <table>
251
+ <thead>
252
+ <tr>
253
+ <th>File</th>
254
+ <th>CoTester%</th>
255
+ <th>Covered/Total</th>
256
+ <th>Stale</th>
257
+ <th>Lines%</th>
258
+ <th>Branches%</th>
259
+ <th>Fns%</th>
260
+ <th>Stmts%</th>
261
+ </tr>
262
+ </thead>
263
+ <tbody>${rowHtml}
264
+ </tbody>
265
+ </table>
266
+ </body>
267
+ </html>
268
+ `;
269
+ }
270
+ //# sourceMappingURL=reporter.js.map