@gnapi/cotester 1.2.4 → 1.2.6
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/auditLogger.d.ts +46 -0
- package/dist/auditLogger.js +107 -0
- package/dist/auditLogger.js.map +1 -0
- package/dist/checker.d.ts +3 -1
- package/dist/checker.js +1 -0
- package/dist/checker.js.map +1 -1
- package/dist/cli.js +39 -0
- package/dist/cli.js.map +1 -1
- package/dist/configManager.d.ts +27 -0
- package/dist/configManager.js +87 -17
- package/dist/configManager.js.map +1 -1
- package/dist/fileWorker.js +6 -1
- package/dist/fileWorker.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 +24 -1
- package/dist/generator.js +167 -69
- 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/importRepairer.d.ts +22 -0
- package/dist/importRepairer.js +226 -0
- package/dist/importRepairer.js.map +1 -0
- package/dist/interfaceShapeResolver.js +8 -3
- package/dist/interfaceShapeResolver.js.map +1 -1
- package/dist/migrator.d.ts +49 -0
- package/dist/migrator.js +335 -0
- package/dist/migrator.js.map +1 -0
- package/dist/mockGenerator.js +25 -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/sensitiveValueDetector.d.ts +62 -0
- package/dist/sensitiveValueDetector.js +147 -0
- package/dist/sensitiveValueDetector.js.map +1 -0
- package/dist/sharedMockRegistry.d.ts +27 -0
- package/dist/sharedMockRegistry.js +223 -0
- package/dist/sharedMockRegistry.js.map +1 -0
- package/dist/watcher.js +10 -1
- package/dist/watcher.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Broken Import Auto-Repair
|
|
4
|
+
*
|
|
5
|
+
* At watcher startup, scans all cotester-generated test files and validates
|
|
6
|
+
* that their relative import paths resolve to real files on disk.
|
|
7
|
+
*
|
|
8
|
+
* When an import is stale (the source file was moved/renamed), this module:
|
|
9
|
+
* 1. Searches the srcDir for a file with the same basename.
|
|
10
|
+
* 2. If exactly one match is found, rewrites the import path in-place.
|
|
11
|
+
* 3. Logs a warning with the old and new paths.
|
|
12
|
+
* 4. If multiple matches are found, logs an ambiguity warning and skips.
|
|
13
|
+
* 5. If no match is found, logs a warning so the user can act.
|
|
14
|
+
*/
|
|
15
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
18
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
19
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
20
|
+
}
|
|
21
|
+
Object.defineProperty(o, k2, desc);
|
|
22
|
+
}) : (function(o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
o[k2] = m[k];
|
|
25
|
+
}));
|
|
26
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
27
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
28
|
+
}) : function(o, v) {
|
|
29
|
+
o["default"] = v;
|
|
30
|
+
});
|
|
31
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
32
|
+
var ownKeys = function(o) {
|
|
33
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
34
|
+
var ar = [];
|
|
35
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
36
|
+
return ar;
|
|
37
|
+
};
|
|
38
|
+
return ownKeys(o);
|
|
39
|
+
};
|
|
40
|
+
return function (mod) {
|
|
41
|
+
if (mod && mod.__esModule) return mod;
|
|
42
|
+
var result = {};
|
|
43
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
44
|
+
__setModuleDefault(result, mod);
|
|
45
|
+
return result;
|
|
46
|
+
};
|
|
47
|
+
})();
|
|
48
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
|
+
exports.repairImports = repairImports;
|
|
50
|
+
const fs = __importStar(require("fs"));
|
|
51
|
+
const path = __importStar(require("path"));
|
|
52
|
+
const utils_1 = require("./utils");
|
|
53
|
+
// Matches: from '...' or from "..." (relative paths only — start with . or ..)
|
|
54
|
+
const RELATIVE_IMPORT_RE = /from\s+(['"])(\.\.?\/[^'"]+)\1/g;
|
|
55
|
+
const TESTGEN_MARKER = "// @cotester-generated";
|
|
56
|
+
// ─── Public entry point ───────────────────────────────────────────────────────
|
|
57
|
+
/**
|
|
58
|
+
* Scan all cotester-generated test files and repair any broken relative imports.
|
|
59
|
+
*
|
|
60
|
+
* @param projectRoot Absolute path to the project root.
|
|
61
|
+
* @param config Resolved cotester config (provides testDir and srcDir).
|
|
62
|
+
* @param dryRun When true, log proposed changes without writing files.
|
|
63
|
+
*/
|
|
64
|
+
function repairImports(projectRoot, config, dryRun = false) {
|
|
65
|
+
const testRoot = path.resolve(projectRoot, config.testDir);
|
|
66
|
+
const srcRoot = path.resolve(projectRoot, config.srcDir);
|
|
67
|
+
if (!fs.existsSync(testRoot))
|
|
68
|
+
return;
|
|
69
|
+
const testFiles = collectGeneratedTestFiles(testRoot);
|
|
70
|
+
if (testFiles.length === 0)
|
|
71
|
+
return;
|
|
72
|
+
(0, utils_1.log)(`Import repair: scanning ${testFiles.length} generated test file(s)…`, "info");
|
|
73
|
+
let repaired = 0;
|
|
74
|
+
let broken = 0;
|
|
75
|
+
for (const testFile of testFiles) {
|
|
76
|
+
const fileRepaired = repairFileImports(testFile, srcRoot, projectRoot, dryRun);
|
|
77
|
+
repaired += fileRepaired.repaired;
|
|
78
|
+
broken += fileRepaired.broken;
|
|
79
|
+
}
|
|
80
|
+
if (repaired > 0 || broken > 0) {
|
|
81
|
+
const dryTag = dryRun ? " (dry-run)" : "";
|
|
82
|
+
(0, utils_1.log)(`Import repair complete${dryTag}: ${repaired} import(s) fixed, ${broken} unresolvable import(s) skipped.`, broken > 0 ? "warn" : "success");
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
(0, utils_1.log)("Import repair: all imports are up to date.", "info");
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function repairFileImports(testFilePath, srcRoot, projectRoot, dryRun) {
|
|
89
|
+
const stats = { repaired: 0, broken: 0 };
|
|
90
|
+
let content;
|
|
91
|
+
try {
|
|
92
|
+
content = fs.readFileSync(testFilePath, "utf-8");
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return stats;
|
|
96
|
+
}
|
|
97
|
+
const testDir = path.dirname(testFilePath);
|
|
98
|
+
let updated = content;
|
|
99
|
+
let needsWrite = false;
|
|
100
|
+
// Reset regex state before each file
|
|
101
|
+
RELATIVE_IMPORT_RE.lastIndex = 0;
|
|
102
|
+
let match;
|
|
103
|
+
while ((match = RELATIVE_IMPORT_RE.exec(content)) !== null) {
|
|
104
|
+
const quote = match[1]; // ' or "
|
|
105
|
+
const importSpec = match[2]; // e.g. ../../src/services/user.service
|
|
106
|
+
// Resolve the import to an absolute file path
|
|
107
|
+
// TypeScript imports omit the .ts extension
|
|
108
|
+
const resolvedBase = path.resolve(testDir, importSpec);
|
|
109
|
+
const resolvedTs = resolvedBase + ".ts";
|
|
110
|
+
// If the file still exists, nothing to do
|
|
111
|
+
if (fs.existsSync(resolvedTs) || fs.existsSync(resolvedBase)) {
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
// Skip imports that clearly point outside srcRoot (e.g. mock dir imports)
|
|
115
|
+
// We only repair source-file imports; mock imports are regenerated on next run
|
|
116
|
+
const basename = path.basename(importSpec);
|
|
117
|
+
// Search srcRoot for a file with the same basename
|
|
118
|
+
const candidates = findByBasename(srcRoot, basename + ".ts");
|
|
119
|
+
const rel = path.relative(projectRoot, testFilePath).replace(/\\/g, "/");
|
|
120
|
+
if (candidates.length === 0) {
|
|
121
|
+
(0, utils_1.log)(` ⚠ Broken import in ${rel}: '${importSpec}' — source not found (file may have been deleted)`, "warn");
|
|
122
|
+
stats.broken++;
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
if (candidates.length > 1) {
|
|
126
|
+
const candidateRels = candidates
|
|
127
|
+
.map((c) => path.relative(projectRoot, c).replace(/\\/g, "/"))
|
|
128
|
+
.join(", ");
|
|
129
|
+
(0, utils_1.log)(` ⚠ Broken import in ${rel}: '${importSpec}' — multiple matches found (${candidateRels}), skipping`, "warn");
|
|
130
|
+
stats.broken++;
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
// Exactly one match — compute new relative import path
|
|
134
|
+
const newTarget = candidates[0];
|
|
135
|
+
const newImportPath = computeRelativeImport(newTarget, testFilePath);
|
|
136
|
+
const oldFull = match[0]; // full match text
|
|
137
|
+
const newFull = `from ${quote}${newImportPath}${quote}`;
|
|
138
|
+
const newTargetRel = path.relative(projectRoot, newTarget).replace(/\\/g, "/");
|
|
139
|
+
(0, utils_1.log)(` ↻ Repaired import in ${rel}: ${quote}${importSpec}${quote} → ${quote}${newImportPath}${quote} (${newTargetRel})`, "warn");
|
|
140
|
+
// Replace only this occurrence (use indexOf for safety — regex exec gives position)
|
|
141
|
+
updated = updated.replace(oldFull, newFull);
|
|
142
|
+
needsWrite = true;
|
|
143
|
+
stats.repaired++;
|
|
144
|
+
// Re-run regex from start since we mutated the string
|
|
145
|
+
RELATIVE_IMPORT_RE.lastIndex = 0;
|
|
146
|
+
// Re-read content so subsequent iterations work on the updated string
|
|
147
|
+
content = updated;
|
|
148
|
+
}
|
|
149
|
+
if (needsWrite && !dryRun) {
|
|
150
|
+
try {
|
|
151
|
+
fs.writeFileSync(testFilePath, updated, "utf-8");
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
(0, utils_1.log)(` ✖ Failed to write repairs to ${path.relative(projectRoot, testFilePath)}: ${err.message}`, "error");
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return stats;
|
|
158
|
+
}
|
|
159
|
+
// ─── File search helpers ──────────────────────────────────────────────────────
|
|
160
|
+
/**
|
|
161
|
+
* Recursively find files inside `dir` whose name exactly matches `filename`.
|
|
162
|
+
*/
|
|
163
|
+
function findByBasename(dir, filename) {
|
|
164
|
+
const SKIP_DIRS = new Set(["node_modules", "dist", ".git", "cotester"]);
|
|
165
|
+
const results = [];
|
|
166
|
+
if (!fs.existsSync(dir))
|
|
167
|
+
return results;
|
|
168
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
169
|
+
const full = path.join(dir, entry.name);
|
|
170
|
+
if (entry.isDirectory()) {
|
|
171
|
+
if (SKIP_DIRS.has(entry.name))
|
|
172
|
+
continue;
|
|
173
|
+
results.push(...findByBasename(full, filename));
|
|
174
|
+
}
|
|
175
|
+
else if (entry.isFile() && entry.name === filename) {
|
|
176
|
+
results.push(full);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return results;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Collect all cotester-generated `.test.ts` files under `dir` by peeking
|
|
183
|
+
* at the first 100 bytes for the ownership marker.
|
|
184
|
+
*/
|
|
185
|
+
function collectGeneratedTestFiles(dir) {
|
|
186
|
+
const results = [];
|
|
187
|
+
if (!fs.existsSync(dir))
|
|
188
|
+
return results;
|
|
189
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
190
|
+
const full = path.join(dir, entry.name);
|
|
191
|
+
if (entry.isDirectory()) {
|
|
192
|
+
results.push(...collectGeneratedTestFiles(full));
|
|
193
|
+
}
|
|
194
|
+
else if (entry.isFile() && entry.name.endsWith(".test.ts")) {
|
|
195
|
+
try {
|
|
196
|
+
const fd = fs.openSync(full, "r");
|
|
197
|
+
const buf = Buffer.alloc(100);
|
|
198
|
+
const bytesRead = fs.readSync(fd, buf, 0, 100, 0);
|
|
199
|
+
fs.closeSync(fd);
|
|
200
|
+
const peek = buf.slice(0, bytesRead).toString("utf-8");
|
|
201
|
+
if (peek.trimStart().startsWith(TESTGEN_MARKER)) {
|
|
202
|
+
results.push(full);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
// skip unreadable files
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return results;
|
|
211
|
+
}
|
|
212
|
+
// ─── Path helpers ─────────────────────────────────────────────────────────────
|
|
213
|
+
/**
|
|
214
|
+
* Compute the relative import path from `fromFilePath` to `targetFilePath`,
|
|
215
|
+
* stripping the `.ts` extension (TypeScript convention).
|
|
216
|
+
*/
|
|
217
|
+
function computeRelativeImport(targetFilePath, fromFilePath) {
|
|
218
|
+
const targetDir = path.dirname(targetFilePath);
|
|
219
|
+
const fromDir = path.dirname(fromFilePath);
|
|
220
|
+
let rel = path.relative(fromDir, targetDir).replace(/\\/g, "/");
|
|
221
|
+
if (!rel.startsWith("."))
|
|
222
|
+
rel = "./" + rel;
|
|
223
|
+
const basename = path.basename(targetFilePath, ".ts");
|
|
224
|
+
return `${rel}/${basename}`;
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=importRepairer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importRepairer.js","sourceRoot":"","sources":["../src/importRepairer.ts"],"names":[],"mappings":"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"}
|
|
@@ -60,6 +60,7 @@ const ts_morph_1 = require("ts-morph");
|
|
|
60
60
|
const fs = __importStar(require("fs"));
|
|
61
61
|
const path = __importStar(require("path"));
|
|
62
62
|
const mockDataEngine_1 = require("./mockDataEngine");
|
|
63
|
+
const sensitiveValueDetector_1 = require("./sensitiveValueDetector");
|
|
63
64
|
// ─── Constants ────────────────────────────────────────────────────────────────
|
|
64
65
|
/** Maximum recursion depth to prevent infinite loops on circular types. */
|
|
65
66
|
const MAX_DEPTH = 4;
|
|
@@ -178,7 +179,11 @@ function buildMockFromType(type, depth) {
|
|
|
178
179
|
// ── Primitives ────────────────────────────────────────────────────────────
|
|
179
180
|
if (type.isString() || type.isStringLiteral()) {
|
|
180
181
|
const lit = type.isStringLiteral() ? type.getLiteralValue() : undefined;
|
|
181
|
-
|
|
182
|
+
if (typeof lit === "string") {
|
|
183
|
+
const safe = (0, sensitiveValueDetector_1.sanitizeRawValue)(lit, "string literal type");
|
|
184
|
+
return `'${safe}'`;
|
|
185
|
+
}
|
|
186
|
+
return "'test-value'";
|
|
182
187
|
}
|
|
183
188
|
if (type.isNumber() || type.isNumberLiteral()) {
|
|
184
189
|
const lit = type.isNumberLiteral() ? type.getLiteralValue() : undefined;
|
|
@@ -203,7 +208,7 @@ function buildMockFromType(type, depth) {
|
|
|
203
208
|
if (type.isEnumLiteral()) {
|
|
204
209
|
const lit = type.getLiteralValue();
|
|
205
210
|
if (typeof lit === "string")
|
|
206
|
-
return `'${lit}'`;
|
|
211
|
+
return `'${(0, sensitiveValueDetector_1.sanitizeRawValue)(lit, "enum literal")}'`;
|
|
207
212
|
if (typeof lit === "number")
|
|
208
213
|
return String(lit);
|
|
209
214
|
}
|
|
@@ -216,7 +221,7 @@ function buildMockFromType(type, depth) {
|
|
|
216
221
|
if (members && members.length > 0) {
|
|
217
222
|
const firstVal = members[0].getValue?.();
|
|
218
223
|
if (typeof firstVal === "string")
|
|
219
|
-
return `'${firstVal}'`;
|
|
224
|
+
return `'${(0, sensitiveValueDetector_1.sanitizeRawValue)(firstVal, "enum value")}'`;
|
|
220
225
|
if (typeof firstVal === "number")
|
|
221
226
|
return String(firstVal);
|
|
222
227
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaceShapeResolver.js","sourceRoot":"","sources":["../src/interfaceShapeResolver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"interfaceShapeResolver.js","sourceRoot":"","sources":["../src/interfaceShapeResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version Upgrade Command — `cotester migrate`
|
|
3
|
+
*
|
|
4
|
+
* Scans all cotester-generated test and mock files, detects their format
|
|
5
|
+
* version, and upgrades them in-place to the current version.
|
|
6
|
+
*
|
|
7
|
+
* Version history
|
|
8
|
+
* ───────────────
|
|
9
|
+
* v1 (unversioned) Files have `// @cotester-generated` but no version line.
|
|
10
|
+
* Describe blocks lack `@testgen-sig:` fingerprint comments.
|
|
11
|
+
* Mock headers have no version line.
|
|
12
|
+
*
|
|
13
|
+
* v2 (current) Test files: second line is `// @cotester-version: 2`.
|
|
14
|
+
* Test files: `// @testgen-sig:` comments precede each describe.
|
|
15
|
+
* Mock files: second header line is `// @cotester-version: 2`.
|
|
16
|
+
*
|
|
17
|
+
* v1 → v2 transformations
|
|
18
|
+
* ───────────────────────
|
|
19
|
+
* Test files:
|
|
20
|
+
* 1. Insert `// @cotester-version: 2` immediately after `// @cotester-generated`.
|
|
21
|
+
* 2. For each describe('fnName', ...) block, if no preceding @testgen-sig comment
|
|
22
|
+
* exists, insert one by re-analysing the source file to get the current
|
|
23
|
+
* signature fingerprint.
|
|
24
|
+
*
|
|
25
|
+
* Mock files:
|
|
26
|
+
* 1. Insert `// @cotester-version: 2` after the `// Auto-generated mock data for`
|
|
27
|
+
* first-line header.
|
|
28
|
+
*
|
|
29
|
+
* All transformations are idempotent — running `cotester migrate` a second time
|
|
30
|
+
* has no effect on already-upgraded files.
|
|
31
|
+
*/
|
|
32
|
+
export interface MigrateOptions {
|
|
33
|
+
/** Print what would change without writing any files. */
|
|
34
|
+
dryRun?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface MigrateResult {
|
|
37
|
+
scanned: number;
|
|
38
|
+
upgraded: number;
|
|
39
|
+
alreadyCurrent: number;
|
|
40
|
+
failed: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Run the migration scan for all generated test/mock files under the project's
|
|
44
|
+
* configured testDir and mockDir.
|
|
45
|
+
*
|
|
46
|
+
* @param folder Optional subfolder to restrict the scan (relative to testDir/mockDir).
|
|
47
|
+
* @param opts `dryRun: true` prints proposed changes without writing.
|
|
48
|
+
*/
|
|
49
|
+
export declare function runMigrate(folder?: string, opts?: MigrateOptions): void;
|