@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.
- package/dist/analyzer.d.ts +5 -0
- package/dist/analyzer.js +7 -2
- package/dist/analyzer.js.map +1 -1
- package/dist/checker.d.ts +3 -1
- package/dist/checker.js +1 -0
- package/dist/checker.js.map +1 -1
- package/dist/cli.js +29 -0
- package/dist/cli.js.map +1 -1
- package/dist/configManager.d.ts +11 -0
- package/dist/configManager.js +3 -0
- package/dist/configManager.js.map +1 -1
- package/dist/frameworkAdapter.d.ts +51 -0
- package/dist/frameworkAdapter.js +77 -0
- package/dist/frameworkAdapter.js.map +1 -0
- package/dist/generator.d.ts +1 -1
- package/dist/generator.js +139 -60
- package/dist/generator.js.map +1 -1
- package/dist/hooksInstaller.d.ts +1 -0
- package/dist/hooksInstaller.js +246 -0
- package/dist/hooksInstaller.js.map +1 -0
- package/dist/mockGenerator.js +23 -1
- package/dist/mockGenerator.js.map +1 -1
- package/dist/reporter.d.ts +10 -0
- package/dist/reporter.js +270 -0
- package/dist/reporter.js.map +1 -0
- package/dist/scenarioEngine.js +4 -1
- package/dist/scenarioEngine.js.map +1 -1
- package/dist/sharedMockRegistry.d.ts +27 -0
- package/dist/sharedMockRegistry.js +223 -0
- package/dist/sharedMockRegistry.js.map +1 -0
- package/dist/watcher.js +1 -1
- package/dist/watcher.js.map +1 -1
- package/package.json +1 -1
|
@@ -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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"}
|
package/dist/mockGenerator.js
CHANGED
|
@@ -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) =>
|
|
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;
|
package/dist/reporter.js
ADDED
|
@@ -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} — 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
|