@gnapi/cotester 1.2.2 → 1.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analyzer.d.ts +10 -0
- package/dist/analyzer.js +66 -3
- package/dist/analyzer.js.map +1 -1
- package/dist/checker.d.ts +11 -0
- package/dist/checker.js +108 -8
- package/dist/checker.js.map +1 -1
- package/dist/cli.js +35 -2
- package/dist/cli.js.map +1 -1
- package/dist/configManager.d.ts +6 -0
- package/dist/configManager.js +53 -1
- package/dist/configManager.js.map +1 -1
- package/dist/fileWorker.js +1 -1
- package/dist/fileWorker.js.map +1 -1
- package/dist/generator.d.ts +1 -1
- package/dist/generator.js +237 -19
- package/dist/generator.js.map +1 -1
- package/dist/ignoreManager.d.ts +28 -0
- package/dist/ignoreManager.js +126 -0
- package/dist/ignoreManager.js.map +1 -0
- package/dist/mockDataEngine.js +6 -2
- package/dist/mockDataEngine.js.map +1 -1
- package/dist/mockGenerator.d.ts +1 -1
- package/dist/mockGenerator.js +13 -4
- package/dist/mockGenerator.js.map +1 -1
- package/dist/watcher.d.ts +1 -1
- package/dist/watcher.js +31 -13
- package/dist/watcher.js.map +1 -1
- package/package.json +1 -1
package/dist/analyzer.d.ts
CHANGED
|
@@ -5,6 +5,14 @@ export interface ParameterMeta {
|
|
|
5
5
|
name: string;
|
|
6
6
|
type: string;
|
|
7
7
|
}
|
|
8
|
+
/** Per-function return type metadata for a single imported name */
|
|
9
|
+
export interface ImportedFunctionMeta {
|
|
10
|
+
name: string;
|
|
11
|
+
/** Raw return type text from ts-morph, e.g. "Promise<User>" */
|
|
12
|
+
returnType: string;
|
|
13
|
+
/** true when the return type is Promise-wrapped */
|
|
14
|
+
isAsync: boolean;
|
|
15
|
+
}
|
|
8
16
|
export interface DependencyMeta {
|
|
9
17
|
/** Module specifier, e.g. './userRepository' */
|
|
10
18
|
modulePath: string;
|
|
@@ -14,6 +22,8 @@ export interface DependencyMeta {
|
|
|
14
22
|
isDefault: boolean;
|
|
15
23
|
/** The local alias/name used in code */
|
|
16
24
|
localName: string;
|
|
25
|
+
/** Return type metadata resolved via ts-morph for each imported function */
|
|
26
|
+
importedFunctionMeta: ImportedFunctionMeta[];
|
|
17
27
|
}
|
|
18
28
|
export interface FunctionMeta {
|
|
19
29
|
name: string;
|
package/dist/analyzer.js
CHANGED
|
@@ -72,7 +72,7 @@ function analyzeFile(filePath, aliases) {
|
|
|
72
72
|
const returnType = fn.getReturnType().getText(fn) || "void";
|
|
73
73
|
const isAsync = fn.isAsync() || returnType.toLowerCase().startsWith("promise");
|
|
74
74
|
const throwsErrors = bodyContainsThrow(fn);
|
|
75
|
-
const dependencies = findUsedDependencies(fn, fileImports);
|
|
75
|
+
const dependencies = findUsedDependencies(fn, fileImports, sourceFile);
|
|
76
76
|
const branches = (0, branchAnalyzer_1.analyzeBranches)(fn);
|
|
77
77
|
const ormUsage = (0, ormMockGenerator_1.detectOrmUsage)(fn);
|
|
78
78
|
results.push({
|
|
@@ -111,7 +111,7 @@ function analyzeFile(filePath, aliases) {
|
|
|
111
111
|
const returnType = method.getReturnType().getText(method) || "void";
|
|
112
112
|
const isAsync = method.isAsync() || returnType.toLowerCase().startsWith("promise");
|
|
113
113
|
const throwsErrors = bodyContainsThrow(method);
|
|
114
|
-
const dependencies = findUsedDependencies(method, fileImports);
|
|
114
|
+
const dependencies = findUsedDependencies(method, fileImports, sourceFile);
|
|
115
115
|
const branches = (0, branchAnalyzer_1.analyzeBranches)(method);
|
|
116
116
|
const ormUsage = (0, ormMockGenerator_1.detectOrmUsage)(method);
|
|
117
117
|
results.push({
|
|
@@ -152,6 +152,9 @@ function collectImports(sourceFile, aliases, sourceDir) {
|
|
|
152
152
|
continue;
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
|
+
// Skip `import type { ... }` — nothing in these declarations is a runtime value.
|
|
156
|
+
if (decl.isTypeOnly())
|
|
157
|
+
continue;
|
|
155
158
|
// Default import
|
|
156
159
|
const defaultImport = decl.getDefaultImport();
|
|
157
160
|
if (defaultImport) {
|
|
@@ -164,6 +167,27 @@ function collectImports(sourceFile, aliases, sourceDir) {
|
|
|
164
167
|
}
|
|
165
168
|
// Named imports
|
|
166
169
|
for (const named of decl.getNamedImports()) {
|
|
170
|
+
// Skip inline `type` specifier: import { type Foo, Bar } from '...'
|
|
171
|
+
if (named.isTypeOnly())
|
|
172
|
+
continue;
|
|
173
|
+
// Skip symbols that are purely type declarations (interface / type alias).
|
|
174
|
+
// These don't exist as runtime values; putting them in expect(...) would
|
|
175
|
+
// produce TS2693 "X only refers to a type" errors in generated tests.
|
|
176
|
+
try {
|
|
177
|
+
const sym = named.getNameNode().getSymbol();
|
|
178
|
+
const decls = sym?.getDeclarations() ?? [];
|
|
179
|
+
if (decls.length > 0 &&
|
|
180
|
+
decls.every((d) => {
|
|
181
|
+
const k = d.getKind();
|
|
182
|
+
return (k === ts_morph_1.SyntaxKind.InterfaceDeclaration ||
|
|
183
|
+
k === ts_morph_1.SyntaxKind.TypeAliasDeclaration);
|
|
184
|
+
})) {
|
|
185
|
+
continue; // type-only symbol — not a runtime value
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
// Symbol resolution failed — include the import conservatively
|
|
190
|
+
}
|
|
167
191
|
imports.push({
|
|
168
192
|
modulePath,
|
|
169
193
|
localName: named.getAliasNode()?.getText() ?? named.getName(),
|
|
@@ -175,7 +199,7 @@ function collectImports(sourceFile, aliases, sourceDir) {
|
|
|
175
199
|
return imports;
|
|
176
200
|
}
|
|
177
201
|
// ─── Dependency cross-referencing ────────────────────────────────────────────
|
|
178
|
-
function findUsedDependencies(fnNode, fileImports) {
|
|
202
|
+
function findUsedDependencies(fnNode, fileImports, sourceFile) {
|
|
179
203
|
const bodyText = fnNode.getText();
|
|
180
204
|
const depMap = new Map();
|
|
181
205
|
for (const imp of fileImports) {
|
|
@@ -195,12 +219,51 @@ function findUsedDependencies(fnNode, fileImports) {
|
|
|
195
219
|
importedNames: [imp.importedName],
|
|
196
220
|
isDefault: imp.isDefault,
|
|
197
221
|
localName: imp.localName,
|
|
222
|
+
importedFunctionMeta: [],
|
|
198
223
|
});
|
|
199
224
|
}
|
|
200
225
|
}
|
|
201
226
|
}
|
|
227
|
+
// Resolve return-type metadata for each dependency via ts-morph's type checker.
|
|
228
|
+
// This allows the generator to emit mockReturnValue / mockResolvedValue in Arrange.
|
|
229
|
+
for (const dep of depMap.values()) {
|
|
230
|
+
dep.importedFunctionMeta = resolveImportedFunctionMeta(sourceFile, dep);
|
|
231
|
+
}
|
|
202
232
|
return Array.from(depMap.values());
|
|
203
233
|
}
|
|
234
|
+
/**
|
|
235
|
+
* Use ts-morph to look up the declared return type of each imported function
|
|
236
|
+
* name in a dependency. Falls back gracefully when the module cannot be
|
|
237
|
+
* resolved (e.g. node_modules, missing files).
|
|
238
|
+
*/
|
|
239
|
+
function resolveImportedFunctionMeta(sourceFile, dep) {
|
|
240
|
+
const result = [];
|
|
241
|
+
try {
|
|
242
|
+
const importDecl = sourceFile.getImportDeclaration((d) => d.getModuleSpecifierValue() === dep.modulePath);
|
|
243
|
+
if (!importDecl)
|
|
244
|
+
return result;
|
|
245
|
+
for (const importedName of dep.importedNames) {
|
|
246
|
+
if (importedName === "default")
|
|
247
|
+
continue;
|
|
248
|
+
const namedImport = importDecl
|
|
249
|
+
.getNamedImports()
|
|
250
|
+
.find((n) => n.getName() === importedName);
|
|
251
|
+
if (!namedImport)
|
|
252
|
+
continue;
|
|
253
|
+
const type = namedImport.getNameNode().getType();
|
|
254
|
+
const callSigs = type.getCallSignatures();
|
|
255
|
+
if (callSigs.length === 0)
|
|
256
|
+
continue;
|
|
257
|
+
const returnTypeText = callSigs[0].getReturnType().getText();
|
|
258
|
+
const isAsync = /^Promise</i.test(returnTypeText);
|
|
259
|
+
result.push({ name: importedName, returnType: returnTypeText, isAsync });
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
// Silently ignore — resolution failures are expected for third-party modules
|
|
264
|
+
}
|
|
265
|
+
return result;
|
|
266
|
+
}
|
|
204
267
|
function escapeRegex(str) {
|
|
205
268
|
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
206
269
|
}
|
package/dist/analyzer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"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"}
|
package/dist/checker.d.ts
CHANGED
|
@@ -18,6 +18,8 @@ interface FileCoverage {
|
|
|
18
18
|
coveredCount: number;
|
|
19
19
|
/** Total number of exported functions/methods in this file */
|
|
20
20
|
totalCount: number;
|
|
21
|
+
/** Number of functions whose @testgen-sig fingerprint no longer matches current source */
|
|
22
|
+
staleCount: number;
|
|
21
23
|
}
|
|
22
24
|
export interface CheckResult {
|
|
23
25
|
fileCoverages: FileCoverage[];
|
|
@@ -31,6 +33,8 @@ export interface CheckResult {
|
|
|
31
33
|
minCoverage: number;
|
|
32
34
|
/** true when coveragePercent >= minCoverage */
|
|
33
35
|
passed: boolean;
|
|
36
|
+
/** Total functions with changed signatures (stale tests) */
|
|
37
|
+
totalStale: number;
|
|
34
38
|
}
|
|
35
39
|
export interface CheckOptions {
|
|
36
40
|
/**
|
|
@@ -57,4 +61,11 @@ export interface CheckOptions {
|
|
|
57
61
|
* @param opts Reporter / threshold options.
|
|
58
62
|
*/
|
|
59
63
|
export declare function runCheck(watchFolder?: string, opts?: CheckOptions): void;
|
|
64
|
+
/**
|
|
65
|
+
* Run a per-file status report — shows covered/total/stale for every source file.
|
|
66
|
+
* Unlike `runCheck`, this never exits with code 1 and has no threshold.
|
|
67
|
+
*
|
|
68
|
+
* @param watchFolder Optional subfolder of srcDir to restrict the scan to.
|
|
69
|
+
*/
|
|
70
|
+
export declare function runStatus(watchFolder?: string): void;
|
|
60
71
|
export {};
|
package/dist/checker.js
CHANGED
|
@@ -34,6 +34,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.runCheck = runCheck;
|
|
37
|
+
exports.runStatus = runStatus;
|
|
37
38
|
/**
|
|
38
39
|
* CoTester Coverage Checker
|
|
39
40
|
*
|
|
@@ -49,6 +50,7 @@ const path = __importStar(require("path"));
|
|
|
49
50
|
const configManager_1 = require("./configManager");
|
|
50
51
|
const utils_1 = require("./utils");
|
|
51
52
|
const astCache_1 = require("./astCache");
|
|
53
|
+
const ignoreManager_1 = require("./ignoreManager");
|
|
52
54
|
// ─── Public entry point ───────────────────────────────────────────────────────
|
|
53
55
|
/**
|
|
54
56
|
* Run the coverage check, print a report, and exit with code 1 on gate failure.
|
|
@@ -89,27 +91,32 @@ function runCheck(watchFolder, opts = {}) {
|
|
|
89
91
|
}
|
|
90
92
|
// ─── Coverage computation ─────────────────────────────────────────────────────
|
|
91
93
|
function computeCoverage(scanRoot, projectRoot, config) {
|
|
92
|
-
const
|
|
94
|
+
const ignorePatterns = (0, ignoreManager_1.loadIgnorePatterns)(projectRoot);
|
|
95
|
+
const isIgnored = (0, ignoreManager_1.buildIgnorePredicate)(ignorePatterns, projectRoot);
|
|
96
|
+
const sourceFiles = collectSourceFiles(scanRoot, isIgnored);
|
|
93
97
|
const minCoverage = config.minCoverage ?? 80;
|
|
94
98
|
const fileCoverages = [];
|
|
95
99
|
let totalFunctions = 0;
|
|
96
100
|
let coveredFunctions = 0;
|
|
101
|
+
let totalStale = 0;
|
|
97
102
|
// Absolute srcRoot avoids misidentifying parent directories with the same segment name.
|
|
98
103
|
const absSrcRoot = path.resolve(projectRoot, config.srcDir);
|
|
99
104
|
for (const srcPath of sourceFiles) {
|
|
100
|
-
const
|
|
101
|
-
if (
|
|
105
|
+
const rawFunctions = safeAnalyze(srcPath, projectRoot);
|
|
106
|
+
if (rawFunctions.length === 0)
|
|
102
107
|
continue;
|
|
103
108
|
const testPath = (0, utils_1.mirrorPath)(srcPath, absSrcRoot, path.join(projectRoot, config.testDir), ".test.ts");
|
|
104
109
|
const testFileExists = fs.existsSync(testPath);
|
|
105
110
|
const testContent = readTestContent(testPath);
|
|
106
|
-
const functionCoverages =
|
|
111
|
+
const functionCoverages = rawFunctions.map((fn) => ({
|
|
107
112
|
name: fn.name,
|
|
108
113
|
covered: isCovered(fn.name, testContent),
|
|
109
114
|
}));
|
|
110
115
|
const fileCoveredCount = functionCoverages.filter((f) => f.covered).length;
|
|
116
|
+
const fileStaleCount = detectStaleCount(testContent, rawFunctions);
|
|
111
117
|
totalFunctions += functionCoverages.length;
|
|
112
118
|
coveredFunctions += fileCoveredCount;
|
|
119
|
+
totalStale += fileStaleCount;
|
|
113
120
|
fileCoverages.push({
|
|
114
121
|
srcPath,
|
|
115
122
|
relPath: path.relative(projectRoot, srcPath).replace(/\\/g, "/"),
|
|
@@ -118,6 +125,7 @@ function computeCoverage(scanRoot, projectRoot, config) {
|
|
|
118
125
|
functions: functionCoverages,
|
|
119
126
|
coveredCount: fileCoveredCount,
|
|
120
127
|
totalCount: functionCoverages.length,
|
|
128
|
+
staleCount: fileStaleCount,
|
|
121
129
|
});
|
|
122
130
|
}
|
|
123
131
|
const coveragePercent = totalFunctions === 0 ? 100 : Math.round((coveredFunctions / totalFunctions) * 100);
|
|
@@ -128,6 +136,7 @@ function computeCoverage(scanRoot, projectRoot, config) {
|
|
|
128
136
|
coveragePercent,
|
|
129
137
|
minCoverage,
|
|
130
138
|
passed: coveragePercent >= minCoverage,
|
|
139
|
+
totalStale,
|
|
131
140
|
};
|
|
132
141
|
}
|
|
133
142
|
// ─── Report printer ───────────────────────────────────────────────────────────
|
|
@@ -215,6 +224,95 @@ function writeJsonReport(result, outputPath, projectRoot) {
|
|
|
215
224
|
(0, utils_1.log)(`Failed to write coverage report: ${err?.message}`, "warn");
|
|
216
225
|
}
|
|
217
226
|
}
|
|
227
|
+
// ─── Status command ───────────────────────────────────────────────────────────
|
|
228
|
+
/**
|
|
229
|
+
* Run a per-file status report — shows covered/total/stale for every source file.
|
|
230
|
+
* Unlike `runCheck`, this never exits with code 1 and has no threshold.
|
|
231
|
+
*
|
|
232
|
+
* @param watchFolder Optional subfolder of srcDir to restrict the scan to.
|
|
233
|
+
*/
|
|
234
|
+
function runStatus(watchFolder) {
|
|
235
|
+
const projectRoot = (0, utils_1.getProjectRoot)();
|
|
236
|
+
const config = (0, configManager_1.loadConfig)(projectRoot);
|
|
237
|
+
const baseAbsolute = path.resolve(projectRoot, config.srcDir);
|
|
238
|
+
const scanRoot = watchFolder
|
|
239
|
+
? path.resolve(baseAbsolute, watchFolder)
|
|
240
|
+
: baseAbsolute;
|
|
241
|
+
(0, utils_1.log)("CoTester Status\n", "info");
|
|
242
|
+
const result = computeCoverage(scanRoot, projectRoot, config);
|
|
243
|
+
printStatusReport(result, projectRoot);
|
|
244
|
+
}
|
|
245
|
+
function printStatusReport(result, projectRoot) {
|
|
246
|
+
const { fileCoverages, totalFunctions, coveredFunctions, totalStale } = result;
|
|
247
|
+
if (fileCoverages.length === 0) {
|
|
248
|
+
(0, utils_1.log)("No source files found.", "warn");
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
const maxPathLen = Math.max(...fileCoverages.map((f) => f.relPath.length));
|
|
252
|
+
for (const file of fileCoverages) {
|
|
253
|
+
const { relPath, coveredCount, totalCount, staleCount } = file;
|
|
254
|
+
const allCovered = coveredCount === totalCount;
|
|
255
|
+
const noneCovered = coveredCount === 0;
|
|
256
|
+
// Choose icon and colour
|
|
257
|
+
let icon;
|
|
258
|
+
let colour;
|
|
259
|
+
if (noneCovered) {
|
|
260
|
+
icon = "✖";
|
|
261
|
+
colour = "\x1b[31m"; // red
|
|
262
|
+
}
|
|
263
|
+
else if (!allCovered || staleCount > 0) {
|
|
264
|
+
icon = "⚠";
|
|
265
|
+
colour = "\x1b[33m"; // yellow
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
icon = "✔";
|
|
269
|
+
colour = "\x1b[32m"; // green
|
|
270
|
+
}
|
|
271
|
+
const staleTag = staleCount > 0 ? ` \x1b[33m[stale: ${staleCount}]\x1b[0m` : "";
|
|
272
|
+
const pathCol = relPath.padEnd(maxPathLen);
|
|
273
|
+
const coverCol = `${coveredCount}/${totalCount} functions covered`;
|
|
274
|
+
console.log(` ${colour}${icon}\x1b[0m ${pathCol} ${colour}${coverCol}\x1b[0m${staleTag}`);
|
|
275
|
+
}
|
|
276
|
+
console.log("");
|
|
277
|
+
// Summary footer
|
|
278
|
+
const staleNote = totalStale > 0 ? ` (${totalStale} stale)` : "";
|
|
279
|
+
(0, utils_1.log)(`${fileCoverages.length} files · ${coveredFunctions}/${totalFunctions} functions covered${staleNote}`, coveredFunctions === totalFunctions && totalStale === 0 ? "success" : "warn");
|
|
280
|
+
}
|
|
281
|
+
// ─── Stale detection ──────────────────────────────────────────────────────────
|
|
282
|
+
/**
|
|
283
|
+
* Count how many functions in `rawFunctions` have a `@testgen-sig` fingerprint
|
|
284
|
+
* in the test file that no longer matches the current source signature.
|
|
285
|
+
* Functions without any fingerprint yet are NOT counted as stale.
|
|
286
|
+
*/
|
|
287
|
+
function detectStaleCount(testContent, rawFunctions) {
|
|
288
|
+
if (!testContent)
|
|
289
|
+
return 0;
|
|
290
|
+
// Parse all @testgen-sig fingerprints: fnName → full fingerprint string
|
|
291
|
+
const re = /\/\/ @testgen-sig:(\S+)/g;
|
|
292
|
+
const existingSigs = new Map();
|
|
293
|
+
let m;
|
|
294
|
+
while ((m = re.exec(testContent)) !== null) {
|
|
295
|
+
const fp = m[1];
|
|
296
|
+
const parenIdx = fp.indexOf("(");
|
|
297
|
+
if (parenIdx !== -1) {
|
|
298
|
+
existingSigs.set(fp.slice(0, parenIdx), fp);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
if (existingSigs.size === 0)
|
|
302
|
+
return 0;
|
|
303
|
+
let stale = 0;
|
|
304
|
+
for (const fn of rawFunctions) {
|
|
305
|
+
const params = fn.parameters
|
|
306
|
+
.map((p) => `${p.name}:${p.type.replace(/\s+/g, "")}`)
|
|
307
|
+
.join(",");
|
|
308
|
+
const currentSig = `${fn.name}(${params}):${fn.returnType.replace(/\s+/g, "")}`;
|
|
309
|
+
const oldSig = existingSigs.get(fn.name);
|
|
310
|
+
if (oldSig !== undefined && oldSig !== currentSig) {
|
|
311
|
+
stale++;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
return stale;
|
|
315
|
+
}
|
|
218
316
|
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
219
317
|
/** Read the test file content, returning empty string if it doesn't exist. */
|
|
220
318
|
function readTestContent(testPath) {
|
|
@@ -248,7 +346,7 @@ function safeAnalyze(filePath, projectRoot) {
|
|
|
248
346
|
}
|
|
249
347
|
}
|
|
250
348
|
/** Recursively collect .ts source files, skipping test/spec/d.ts and ignored dirs. */
|
|
251
|
-
function collectSourceFiles(dir) {
|
|
349
|
+
function collectSourceFiles(dir, isIgnored = () => false) {
|
|
252
350
|
const IGNORED = new Set(["node_modules", "cotester", "dist", ".git"]);
|
|
253
351
|
const results = [];
|
|
254
352
|
if (!fs.existsSync(dir))
|
|
@@ -256,14 +354,16 @@ function collectSourceFiles(dir) {
|
|
|
256
354
|
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
257
355
|
const fullPath = path.join(dir, entry.name);
|
|
258
356
|
if (entry.isDirectory()) {
|
|
259
|
-
if (!IGNORED.has(entry.name))
|
|
260
|
-
results.push(...collectSourceFiles(fullPath));
|
|
357
|
+
if (!IGNORED.has(entry.name) && !isIgnored(fullPath)) {
|
|
358
|
+
results.push(...collectSourceFiles(fullPath, isIgnored));
|
|
359
|
+
}
|
|
261
360
|
}
|
|
262
361
|
else if (entry.isFile() &&
|
|
263
362
|
entry.name.endsWith(".ts") &&
|
|
264
363
|
!entry.name.endsWith(".test.ts") &&
|
|
265
364
|
!entry.name.endsWith(".spec.ts") &&
|
|
266
|
-
!entry.name.endsWith(".d.ts")
|
|
365
|
+
!entry.name.endsWith(".d.ts") &&
|
|
366
|
+
!isIgnored(fullPath)) {
|
|
267
367
|
results.push(fullPath);
|
|
268
368
|
}
|
|
269
369
|
}
|
package/dist/checker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checker.js","sourceRoot":"","sources":["../src/checker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"checker.js","sourceRoot":"","sources":["../src/checker.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -34,6 +34,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
};
|
|
35
35
|
})();
|
|
36
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
37
38
|
const path = __importStar(require("path"));
|
|
38
39
|
const commander_1 = require("commander");
|
|
39
40
|
const bootstrap_1 = require("./bootstrap");
|
|
@@ -61,11 +62,15 @@ program
|
|
|
61
62
|
program
|
|
62
63
|
.command("generate <file>")
|
|
63
64
|
.description("Generate test and mock files for a single source file")
|
|
64
|
-
.
|
|
65
|
+
.option("--dry-run", "Print what would be generated to stdout without writing any files")
|
|
66
|
+
.action(async (file, opts) => {
|
|
65
67
|
const projectRoot = (0, utils_1.getProjectRoot)();
|
|
66
68
|
const config = (0, configManager_1.loadConfig)(projectRoot);
|
|
67
69
|
const absPath = path.resolve(file);
|
|
68
|
-
|
|
70
|
+
if (opts.dryRun) {
|
|
71
|
+
(0, utils_1.log)(`Dry-run: ${path.relative(projectRoot, absPath) || file}`, "info");
|
|
72
|
+
}
|
|
73
|
+
await (0, watcher_1.processFile)(absPath, projectRoot, config, opts.dryRun ?? false);
|
|
69
74
|
});
|
|
70
75
|
program
|
|
71
76
|
.command("check [folder]")
|
|
@@ -81,5 +86,33 @@ program
|
|
|
81
86
|
output: opts.output,
|
|
82
87
|
});
|
|
83
88
|
});
|
|
89
|
+
program
|
|
90
|
+
.command("reset <file>")
|
|
91
|
+
.description("Delete the generated test and mock files for <file>, then immediately regenerate them. " +
|
|
92
|
+
"Use this to force a clean regeneration without manually deleting files.")
|
|
93
|
+
.action(async (file) => {
|
|
94
|
+
const projectRoot = (0, utils_1.getProjectRoot)();
|
|
95
|
+
const config = (0, configManager_1.loadConfig)(projectRoot);
|
|
96
|
+
const absPath = path.resolve(file);
|
|
97
|
+
const absSrcRoot = path.resolve(projectRoot, config.srcDir);
|
|
98
|
+
const testPath = (0, utils_1.mirrorPath)(absPath, absSrcRoot, path.join(projectRoot, config.testDir), ".test.ts");
|
|
99
|
+
const mockPath = (0, utils_1.mirrorPath)(absPath, absSrcRoot, path.join(projectRoot, config.mockDir), ".mock.ts");
|
|
100
|
+
if (fs.existsSync(testPath)) {
|
|
101
|
+
fs.unlinkSync(testPath);
|
|
102
|
+
(0, utils_1.log)(`Deleted: ${path.relative(projectRoot, testPath)}`, "info");
|
|
103
|
+
}
|
|
104
|
+
if (fs.existsSync(mockPath)) {
|
|
105
|
+
fs.unlinkSync(mockPath);
|
|
106
|
+
(0, utils_1.log)(`Deleted: ${path.relative(projectRoot, mockPath)}`, "info");
|
|
107
|
+
}
|
|
108
|
+
await (0, watcher_1.processFile)(absPath, projectRoot, config);
|
|
109
|
+
});
|
|
110
|
+
program
|
|
111
|
+
.command("status [folder]")
|
|
112
|
+
.description("Show a per-file test coverage status report with stale detection. " +
|
|
113
|
+
"Optionally restrict to a subfolder of src/ (e.g. `cotester status services`)")
|
|
114
|
+
.action((folder) => {
|
|
115
|
+
(0, checker_1.runStatus)(folder);
|
|
116
|
+
});
|
|
84
117
|
program.parse(process.argv);
|
|
85
118
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,2CAA6B;AAC7B,yCAAoC;AACpC,2CAAwC;AACxC,uCAAsD;AACtD,mDAA6C;AAC7C,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/configManager.d.ts
CHANGED
|
@@ -14,6 +14,12 @@ export interface TestGenConfig {
|
|
|
14
14
|
string: string[];
|
|
15
15
|
boolean: string[];
|
|
16
16
|
default: string[];
|
|
17
|
+
/**
|
|
18
|
+
* Minimum number of standard test cases required to collapse them into
|
|
19
|
+
* a single test.each() table instead of individual test() blocks.
|
|
20
|
+
* Set to 0 to disable table-driven generation. Defaults to 3.
|
|
21
|
+
*/
|
|
22
|
+
tableThreshold: number;
|
|
17
23
|
};
|
|
18
24
|
}
|
|
19
25
|
export declare function loadConfig(projectRoot: string): TestGenConfig;
|
package/dist/configManager.js
CHANGED
|
@@ -37,6 +37,7 @@ exports.loadConfig = loadConfig;
|
|
|
37
37
|
exports.getDefaultConfig = getDefaultConfig;
|
|
38
38
|
const fs = __importStar(require("fs"));
|
|
39
39
|
const path = __importStar(require("path"));
|
|
40
|
+
const module_1 = require("module");
|
|
40
41
|
const DEFAULT_CONFIG = {
|
|
41
42
|
watchPatterns: ["src/**/*.ts"],
|
|
42
43
|
ignorePatterns: ["node_modules", "cotester", "dist", "**/*.test.ts", "**/*.spec.ts"],
|
|
@@ -59,6 +60,7 @@ const DEFAULT_CONFIG = {
|
|
|
59
60
|
],
|
|
60
61
|
boolean: ["handles truthy condition", "handles falsy condition"],
|
|
61
62
|
default: ["handles default case"],
|
|
63
|
+
tableThreshold: 3,
|
|
62
64
|
},
|
|
63
65
|
};
|
|
64
66
|
function loadConfig(projectRoot) {
|
|
@@ -67,7 +69,8 @@ function loadConfig(projectRoot) {
|
|
|
67
69
|
try {
|
|
68
70
|
const raw = fs.readFileSync(configPath, "utf-8");
|
|
69
71
|
const userConfig = JSON.parse(raw);
|
|
70
|
-
|
|
72
|
+
const baseConfig = resolveExtends(userConfig, projectRoot, new Set());
|
|
73
|
+
return mergeConfig(baseConfig, userConfig);
|
|
71
74
|
}
|
|
72
75
|
catch {
|
|
73
76
|
console.warn("⚠ Could not parse cotester.config.json — using defaults.");
|
|
@@ -76,6 +79,55 @@ function loadConfig(projectRoot) {
|
|
|
76
79
|
}
|
|
77
80
|
return { ...DEFAULT_CONFIG };
|
|
78
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Resolve an `extends` chain, returning the merged config of all ancestors.
|
|
84
|
+
* The local file's own fields are NOT applied here — that is done by the caller
|
|
85
|
+
* so that local overrides always win.
|
|
86
|
+
*
|
|
87
|
+
* Chain resolution:
|
|
88
|
+
* 1. Attempt `require.resolve('<pkg>/cotester.config.json', { paths: [projectRoot] })`
|
|
89
|
+
* → parse as JSON config (the preferred, explicit contract)
|
|
90
|
+
* 2. Attempt `require.resolve('<pkg>', { paths: [projectRoot] })`
|
|
91
|
+
* → require() the package and treat its default export as the config
|
|
92
|
+
*
|
|
93
|
+
* Supports up to 5 levels of chaining to guard against cycles / runaway depth.
|
|
94
|
+
*/
|
|
95
|
+
function resolveExtends(userConfig, projectRoot, visited, depth = 0) {
|
|
96
|
+
const extendsTarget = userConfig.extends;
|
|
97
|
+
if (!extendsTarget || depth >= 5)
|
|
98
|
+
return { ...DEFAULT_CONFIG };
|
|
99
|
+
if (visited.has(extendsTarget)) {
|
|
100
|
+
console.warn(`⚠ CoTester config: circular extends detected for "${extendsTarget}" — skipping.`);
|
|
101
|
+
return { ...DEFAULT_CONFIG };
|
|
102
|
+
}
|
|
103
|
+
visited.add(extendsTarget);
|
|
104
|
+
try {
|
|
105
|
+
const req = (0, module_1.createRequire)(path.join(projectRoot, "package.json"));
|
|
106
|
+
let baseRaw;
|
|
107
|
+
// Strategy 1: look for a dedicated cotester.config.json inside the package
|
|
108
|
+
try {
|
|
109
|
+
const configFilePath = req.resolve(`${extendsTarget}/cotester.config.json`);
|
|
110
|
+
baseRaw = JSON.parse(fs.readFileSync(configFilePath, "utf-8"));
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
// Strategy 2: require the package itself (exports the config object)
|
|
114
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
115
|
+
const mod = req(extendsTarget);
|
|
116
|
+
baseRaw = (mod?.default ?? mod);
|
|
117
|
+
}
|
|
118
|
+
if (!baseRaw || typeof baseRaw !== "object") {
|
|
119
|
+
console.warn(`⚠ CoTester config: extends "${extendsTarget}" did not export a valid config object.`);
|
|
120
|
+
return { ...DEFAULT_CONFIG };
|
|
121
|
+
}
|
|
122
|
+
// Recurse into the base config's own extends chain first
|
|
123
|
+
const grandBase = resolveExtends(baseRaw, projectRoot, visited, depth + 1);
|
|
124
|
+
return mergeConfig(grandBase, baseRaw);
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
console.warn(`⚠ CoTester config: could not resolve extends "${extendsTarget}": ${err?.message}`);
|
|
128
|
+
return { ...DEFAULT_CONFIG };
|
|
129
|
+
}
|
|
130
|
+
}
|
|
79
131
|
function mergeConfig(base, override) {
|
|
80
132
|
return {
|
|
81
133
|
watchPatterns: override.watchPatterns ?? base.watchPatterns,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configManager.js","sourceRoot":"","sources":["../src/configManager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"configManager.js","sourceRoot":"","sources":["../src/configManager.ts"],"names":[],"mappings":"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"}
|
package/dist/fileWorker.js
CHANGED
|
@@ -23,7 +23,7 @@ const { filePath, projectRoot, config } = worker_threads_1.workerData;
|
|
|
23
23
|
}
|
|
24
24
|
const scenarios = (0, scenarioEngine_1.generateScenarios)(functions, config, projectRoot);
|
|
25
25
|
const mockResult = await (0, mockGenerator_1.generateMockFile)(filePath, scenarios, projectRoot, config.srcDir, config.mockDir);
|
|
26
|
-
await (0, generator_1.generateTestFile)(filePath, scenarios, projectRoot, config.srcDir, config.testDir, mockResult);
|
|
26
|
+
await (0, generator_1.generateTestFile)(filePath, scenarios, projectRoot, config.srcDir, config.testDir, mockResult, config.scenarioRules.tableThreshold);
|
|
27
27
|
worker_threads_1.parentPort?.postMessage({ ok: true });
|
|
28
28
|
}
|
|
29
29
|
catch (err) {
|
package/dist/fileWorker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileWorker.js","sourceRoot":"","sources":["../src/fileWorker.ts"],"names":[],"mappings":";;AAAA;;;;;;;GAOG;AACH,mDAAwD;AACxD,yCAA+C;AAC/C,qDAAqD;AACrD,mDAAmD;AACnD,2CAA+C;AAc/C,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,2BAAyB,CAAC;AAEpE,CAAC,KAAK,IAAI,EAAE;IACV,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,4BAAiB,EAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAE3D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,2BAAU,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAyB,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,IAAA,kCAAiB,EAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAEpE,MAAM,UAAU,GAAG,MAAM,IAAA,gCAAgB,EACvC,QAAQ,EACR,SAAS,EACT,WAAW,EACX,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,OAAO,CACf,CAAC;QAEF,MAAM,IAAA,4BAAgB,EACpB,QAAQ,EACR,SAAS,EACT,WAAW,EACX,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,OAAO,EACd,UAAU,
|
|
1
|
+
{"version":3,"file":"fileWorker.js","sourceRoot":"","sources":["../src/fileWorker.ts"],"names":[],"mappings":";;AAAA;;;;;;;GAOG;AACH,mDAAwD;AACxD,yCAA+C;AAC/C,qDAAqD;AACrD,mDAAmD;AACnD,2CAA+C;AAc/C,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,2BAAyB,CAAC;AAEpE,CAAC,KAAK,IAAI,EAAE;IACV,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,4BAAiB,EAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAE3D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,2BAAU,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAyB,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,IAAA,kCAAiB,EAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAEpE,MAAM,UAAU,GAAG,MAAM,IAAA,gCAAgB,EACvC,QAAQ,EACR,SAAS,EACT,WAAW,EACX,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,OAAO,CACf,CAAC;QAEF,MAAM,IAAA,4BAAgB,EACpB,QAAQ,EACR,SAAS,EACT,WAAW,EACX,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,OAAO,EACd,UAAU,EACV,MAAM,CAAC,aAAa,CAAC,cAAc,CACpC,CAAC;QAEF,2BAAU,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAyB,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,2BAAU,EAAE,WAAW,CAAC;YACtB,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC;SACZ,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC,CAAC,EAAE,CAAC"}
|