@gnapi/cotester 1.2.3 → 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 +14 -1
- package/dist/checker.js +109 -8
- package/dist/checker.js.map +1 -1
- package/dist/cli.js +64 -2
- package/dist/cli.js.map +1 -1
- package/dist/configManager.d.ts +11 -0
- package/dist/configManager.js +55 -1
- 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 +149 -59
- 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/ignoreManager.d.ts +28 -0
- package/dist/ignoreManager.js +126 -0
- package/dist/ignoreManager.js.map +1 -0
- package/dist/mockGenerator.d.ts +1 -1
- package/dist/mockGenerator.js +36 -5
- 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.d.ts +1 -1
- package/dist/watcher.js +31 -13
- package/dist/watcher.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,223 @@
|
|
|
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.ensureSharedRegistry = ensureSharedRegistry;
|
|
37
|
+
exports.getRegistryImportPath = getRegistryImportPath;
|
|
38
|
+
exports.extractBaseTypeName = extractBaseTypeName;
|
|
39
|
+
exports.isCustomTypeName = isCustomTypeName;
|
|
40
|
+
exports.buildFactoryName = buildFactoryName;
|
|
41
|
+
/**
|
|
42
|
+
* Shared Mock Registry (Feature 18)
|
|
43
|
+
*
|
|
44
|
+
* Generates and maintains `cotester/mocks/__shared__/types.mock.ts`.
|
|
45
|
+
* Each detected custom (non-primitive) type gets a single canonical factory
|
|
46
|
+
* function:
|
|
47
|
+
*
|
|
48
|
+
* export const mockUser = (): User => ({ id: 1, name: 'John Doe', ... });
|
|
49
|
+
*
|
|
50
|
+
* Individual mock files import from the registry instead of duplicating
|
|
51
|
+
* inline object literals.
|
|
52
|
+
*/
|
|
53
|
+
const fs = __importStar(require("fs"));
|
|
54
|
+
const path = __importStar(require("path"));
|
|
55
|
+
const utils_1 = require("./utils");
|
|
56
|
+
const mockDataEngine_1 = require("./mockDataEngine");
|
|
57
|
+
const interfaceShapeResolver_1 = require("./interfaceShapeResolver");
|
|
58
|
+
// ── Constants ─────────────────────────────────────────────────────────────────
|
|
59
|
+
const REGISTRY_SUBPATH = "__shared__/types.mock.ts";
|
|
60
|
+
/** Known primitive/built-in TypeScript types that should NOT appear in the registry. */
|
|
61
|
+
const PRIMITIVE_TYPES = new Set([
|
|
62
|
+
"string", "number", "boolean", "void", "null", "undefined",
|
|
63
|
+
"any", "never", "unknown", "object", "date", "record", "error",
|
|
64
|
+
"regexp", "map", "set", "promise", "function",
|
|
65
|
+
]);
|
|
66
|
+
/**
|
|
67
|
+
* Collect all custom (non-primitive) parameter types from the given scenarios,
|
|
68
|
+
* ensure each one has an entry in the shared registry file, and return the
|
|
69
|
+
* registry path + factory name map so `generateMockFile` can import them.
|
|
70
|
+
*
|
|
71
|
+
* @param scenarios All scenarios for the current file being processed.
|
|
72
|
+
* @param projectRoot Absolute project root.
|
|
73
|
+
* @param mockDir Mock directory relative to projectRoot (e.g. "cotester/mocks").
|
|
74
|
+
* @param dryRun When true, nothing is written to disk.
|
|
75
|
+
* @param srcFilePath Source file path used for AST-based interface resolution.
|
|
76
|
+
*/
|
|
77
|
+
function ensureSharedRegistry(scenarios, projectRoot, mockDir, dryRun = false, srcFilePath = "") {
|
|
78
|
+
const customTypes = collectCustomTypes(scenarios, srcFilePath);
|
|
79
|
+
if (customTypes.size === 0)
|
|
80
|
+
return null;
|
|
81
|
+
const registryPath = path.join(projectRoot, mockDir, REGISTRY_SUBPATH);
|
|
82
|
+
// Load existing registry content (so we never overwrite user-edited entries)
|
|
83
|
+
let existingContent = "";
|
|
84
|
+
if (fs.existsSync(registryPath)) {
|
|
85
|
+
existingContent = fs.readFileSync(registryPath, "utf-8");
|
|
86
|
+
}
|
|
87
|
+
const factories = new Map();
|
|
88
|
+
const newLines = [];
|
|
89
|
+
for (const { typeName, resolvedSourceFilePath } of customTypes) {
|
|
90
|
+
const factoryFn = buildFactoryName(typeName);
|
|
91
|
+
factories.set(typeName, factoryFn);
|
|
92
|
+
// Skip if a factory for this type already exists in the file
|
|
93
|
+
if (existingContent.includes(`export const ${factoryFn}`))
|
|
94
|
+
continue;
|
|
95
|
+
const body = buildFactoryBody(typeName, resolvedSourceFilePath, projectRoot);
|
|
96
|
+
newLines.push(`export const ${factoryFn} = (): ${typeName} => (${body});`);
|
|
97
|
+
newLines.push("");
|
|
98
|
+
}
|
|
99
|
+
if (newLines.length === 0)
|
|
100
|
+
return { registryPath, factories };
|
|
101
|
+
const header = existingContent.length === 0
|
|
102
|
+
? [
|
|
103
|
+
"// CoTester shared mock registry — auto-generated. You may edit factory bodies.",
|
|
104
|
+
"// New types are appended; existing entries are never overwritten.",
|
|
105
|
+
"",
|
|
106
|
+
]
|
|
107
|
+
: [];
|
|
108
|
+
const updatedContent = existingContent.trimEnd() +
|
|
109
|
+
(existingContent.length > 0 ? "\n\n" : "") +
|
|
110
|
+
[...header, ...newLines].join("\n");
|
|
111
|
+
if (!dryRun) {
|
|
112
|
+
(0, utils_1.ensureDir)(path.dirname(registryPath));
|
|
113
|
+
fs.writeFileSync(registryPath, updatedContent, "utf-8");
|
|
114
|
+
}
|
|
115
|
+
return { registryPath, factories };
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Compute the relative import path from an individual mock file to the
|
|
119
|
+
* shared registry.
|
|
120
|
+
*/
|
|
121
|
+
function getRegistryImportPath(fromMockFilePath, registryPath) {
|
|
122
|
+
const rel = path.relative(path.dirname(fromMockFilePath), registryPath);
|
|
123
|
+
// Strip .ts extension; normalise Windows separators
|
|
124
|
+
return "./" + rel.replace(/\\/g, "/").replace(/\.ts$/, "");
|
|
125
|
+
}
|
|
126
|
+
function collectCustomTypes(scenarios, srcFilePath) {
|
|
127
|
+
// Use a Map keyed by typeName to deduplicate
|
|
128
|
+
const seen = new Map();
|
|
129
|
+
for (const scenario of scenarios) {
|
|
130
|
+
for (const param of scenario.parameters) {
|
|
131
|
+
const typeName = extractBaseTypeName(param.type);
|
|
132
|
+
if (typeName && isCustomTypeName(typeName) && !seen.has(typeName)) {
|
|
133
|
+
seen.set(typeName, { typeName, resolvedSourceFilePath: srcFilePath });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return new Set(seen.values());
|
|
138
|
+
}
|
|
139
|
+
// ── Type name helpers ─────────────────────────────────────────────────────────
|
|
140
|
+
function extractBaseTypeName(typeStr) {
|
|
141
|
+
let t = typeStr.trim();
|
|
142
|
+
// Strip import("...").TypeName
|
|
143
|
+
t = t.replace(/^import\([^)]+\)\./, "");
|
|
144
|
+
// Unwrap Promise<T>
|
|
145
|
+
const promiseMatch = t.match(/^Promise<(.+)>$/i);
|
|
146
|
+
if (promiseMatch)
|
|
147
|
+
t = promiseMatch[1].trim();
|
|
148
|
+
// Strip Array<T> → T
|
|
149
|
+
const arrayMatch = t.match(/^Array<(.+)>$/i);
|
|
150
|
+
if (arrayMatch)
|
|
151
|
+
t = arrayMatch[1].trim();
|
|
152
|
+
// Strip trailing []
|
|
153
|
+
t = t.replace(/\[\]$/, "").trim();
|
|
154
|
+
// Strip generic type params <...>
|
|
155
|
+
t = t.replace(/<[^>]+>$/, "").trim();
|
|
156
|
+
return t;
|
|
157
|
+
}
|
|
158
|
+
function isCustomTypeName(typeName) {
|
|
159
|
+
const lower = typeName.toLowerCase();
|
|
160
|
+
if (PRIMITIVE_TYPES.has(lower))
|
|
161
|
+
return false;
|
|
162
|
+
// All-lowercase single word that's a primitive alias
|
|
163
|
+
if (/^[a-z]+$/.test(typeName) && PRIMITIVE_TYPES.has(typeName))
|
|
164
|
+
return false;
|
|
165
|
+
// Must start with uppercase (interface/class convention) or be a non-primitive identifier
|
|
166
|
+
return /^[A-Z]/.test(typeName) || typeName.includes(".");
|
|
167
|
+
}
|
|
168
|
+
// ── Factory builders ──────────────────────────────────────────────────────────
|
|
169
|
+
function buildFactoryName(typeName) {
|
|
170
|
+
// "UserProfile" → "mockUserProfile"
|
|
171
|
+
return `mock${typeName.charAt(0).toUpperCase()}${typeName.slice(1)}`;
|
|
172
|
+
}
|
|
173
|
+
function buildFactoryBody(typeName, sourceFilePath, projectRoot) {
|
|
174
|
+
// 1. Try AST-based interface shape resolution first
|
|
175
|
+
if (sourceFilePath && fs.existsSync(sourceFilePath)) {
|
|
176
|
+
try {
|
|
177
|
+
const resolved = (0, interfaceShapeResolver_1.resolveInterfaceShape)(typeName, sourceFilePath, projectRoot);
|
|
178
|
+
if (resolved)
|
|
179
|
+
return resolved;
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
// Fall through to heuristics
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// 2. Heuristic patterns based on type name
|
|
186
|
+
return buildHeuristicBody(typeName);
|
|
187
|
+
}
|
|
188
|
+
function buildHeuristicBody(typeName) {
|
|
189
|
+
const lower = typeName.toLowerCase();
|
|
190
|
+
if (lower.includes("user") || lower.includes("account") || lower.includes("profile")) {
|
|
191
|
+
return `{ id: ${(0, mockDataEngine_1.getSmartPropertyValue)("id", "number")}, name: ${(0, mockDataEngine_1.getSmartPropertyValue)("name", "string")}, email: ${(0, mockDataEngine_1.getSmartPropertyValue)("email", "string")}, isActive: ${(0, mockDataEngine_1.getSmartPropertyValue)("isActive", "boolean")}, createdAt: new Date('2025-06-15T10:30:00Z') } as any`;
|
|
192
|
+
}
|
|
193
|
+
if (lower.includes("product") || lower.includes("item")) {
|
|
194
|
+
return `{ id: ${(0, mockDataEngine_1.getSmartPropertyValue)("id", "number")}, name: ${(0, mockDataEngine_1.getSmartPropertyValue)("title", "string")}, price: ${(0, mockDataEngine_1.getSmartPropertyValue)("price", "number")}, inStock: true } as any`;
|
|
195
|
+
}
|
|
196
|
+
if (lower.includes("order") || lower.includes("invoice")) {
|
|
197
|
+
return `{ id: ${(0, mockDataEngine_1.getSmartPropertyValue)("id", "number")}, total: ${(0, mockDataEngine_1.getSmartPropertyValue)("total", "number")}, status: 'pending', createdAt: new Date('2025-06-15T10:30:00Z') } as any`;
|
|
198
|
+
}
|
|
199
|
+
if (lower.includes("config") || lower.includes("settings") || lower.includes("options")) {
|
|
200
|
+
return `{ enabled: true, timeout: 3000, retries: 3 } as any`;
|
|
201
|
+
}
|
|
202
|
+
if (lower.includes("request") || lower.includes("payload")) {
|
|
203
|
+
return `{ body: {}, headers: { 'Content-Type': 'application/json' }, method: 'GET' } as any`;
|
|
204
|
+
}
|
|
205
|
+
if (lower.includes("response")) {
|
|
206
|
+
return `{ status: 200, data: {}, message: 'OK' } as any`;
|
|
207
|
+
}
|
|
208
|
+
if (lower.includes("event") || lower.includes("message")) {
|
|
209
|
+
return `{ type: 'test-event', payload: {}, timestamp: new Date('2025-06-15T10:30:00Z') } as any`;
|
|
210
|
+
}
|
|
211
|
+
if (lower.includes("error") || lower.includes("exception")) {
|
|
212
|
+
return `{ code: 'ERR_TEST', message: 'Test error occurred' } as any`;
|
|
213
|
+
}
|
|
214
|
+
if (lower.includes("token") || lower.includes("auth") || lower.includes("session")) {
|
|
215
|
+
return `{ token: 'mock-token-abc123', userId: 1, expiresAt: new Date('2030-01-01') } as any`;
|
|
216
|
+
}
|
|
217
|
+
if (lower.includes("tenant") || lower.includes("org")) {
|
|
218
|
+
return `{ id: 'tenant-001', name: 'Test Organisation', isActive: true } as any`;
|
|
219
|
+
}
|
|
220
|
+
// Generic fallback
|
|
221
|
+
return `{ id: 1, name: 'Test ${typeName}' } as any`;
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=sharedMockRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sharedMockRegistry.js","sourceRoot":"","sources":["../src/sharedMockRegistry.ts"],"names":[],"mappings":"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"}
|
package/dist/watcher.d.ts
CHANGED
|
@@ -15,4 +15,4 @@ export declare function startWatcher(watchFolder?: string): void;
|
|
|
15
15
|
* Process a single TypeScript file through the full pipeline:
|
|
16
16
|
* analyze → scenarios → mock file → test file
|
|
17
17
|
*/
|
|
18
|
-
export declare function processFile(filePath: string, projectRoot: string, config: TestGenConfig): Promise<void>;
|
|
18
|
+
export declare function processFile(filePath: string, projectRoot: string, config: TestGenConfig, dryRun?: boolean): Promise<void>;
|
package/dist/watcher.js
CHANGED
|
@@ -45,6 +45,7 @@ const configManager_1 = require("./configManager");
|
|
|
45
45
|
const utils_1 = require("./utils");
|
|
46
46
|
const workerPool_1 = require("./workerPool");
|
|
47
47
|
const astCache_1 = require("./astCache");
|
|
48
|
+
const ignoreManager_1 = require("./ignoreManager");
|
|
48
49
|
/**
|
|
49
50
|
* Start the file watcher.
|
|
50
51
|
*
|
|
@@ -70,10 +71,13 @@ function startWatcher(watchFolder) {
|
|
|
70
71
|
(0, utils_1.log)(`Project root: ${projectRoot}`, "info");
|
|
71
72
|
(0, utils_1.log)(`Watching directory: ${srcAbsolute}`, "info");
|
|
72
73
|
(0, utils_1.log)("", "info");
|
|
74
|
+
// ── Load .testgenignore patterns ───────────────────────────────────────
|
|
75
|
+
let ignorePatterns = (0, ignoreManager_1.loadIgnorePatterns)(projectRoot);
|
|
76
|
+
let isIgnored = (0, ignoreManager_1.buildIgnorePredicate)(ignorePatterns, projectRoot);
|
|
73
77
|
// ── Shared worker pool — used by startup scan AND event handler ───────
|
|
74
78
|
const pool = new workerPool_1.WorkerPool();
|
|
75
79
|
// ── Phase 2: scan existing files before entering the event loop ───────
|
|
76
|
-
scanExistingFiles(srcAbsolute, projectRoot, config, pool).then(() => {
|
|
80
|
+
scanExistingFiles(srcAbsolute, projectRoot, config, pool, isIgnored).then(() => {
|
|
77
81
|
(0, utils_1.log)("Watcher ready — waiting for file changes…\n", "success");
|
|
78
82
|
});
|
|
79
83
|
const debounceTimers = new Map();
|
|
@@ -95,16 +99,24 @@ function startWatcher(watchFolder) {
|
|
|
95
99
|
});
|
|
96
100
|
// ── Config hot-reload ─────────────────────────────────────────────────
|
|
97
101
|
const configPath = path.join(projectRoot, "cotester", "cotester.config.json");
|
|
98
|
-
const
|
|
102
|
+
const ignorePath = path.join(projectRoot, ".testgenignore");
|
|
103
|
+
const configWatcher = chokidar.watch([configPath, ignorePath], {
|
|
99
104
|
persistent: true,
|
|
100
105
|
ignoreInitial: true,
|
|
101
106
|
usePolling: true,
|
|
102
107
|
interval: 500,
|
|
103
108
|
});
|
|
104
|
-
configWatcher.on("change", () => {
|
|
109
|
+
configWatcher.on("change", (changedPath) => {
|
|
105
110
|
config = (0, configManager_1.loadConfig)(projectRoot);
|
|
106
111
|
(0, astCache_1.clearMemoryCache)(); // config change may affect scenario rules
|
|
107
|
-
|
|
112
|
+
if (changedPath === ignorePath) {
|
|
113
|
+
ignorePatterns = (0, ignoreManager_1.loadIgnorePatterns)(projectRoot);
|
|
114
|
+
isIgnored = (0, ignoreManager_1.buildIgnorePredicate)(ignorePatterns, projectRoot);
|
|
115
|
+
(0, utils_1.log)(".testgenignore changed — ignore patterns reloaded.", "info");
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
(0, utils_1.log)("cotester.config.json changed — config reloaded, AST cache cleared.", "info");
|
|
119
|
+
}
|
|
108
120
|
});
|
|
109
121
|
const handleFile = (filePath) => {
|
|
110
122
|
// Extra safety: skip non-.ts files
|
|
@@ -114,6 +126,8 @@ function startWatcher(watchFolder) {
|
|
|
114
126
|
return;
|
|
115
127
|
if (filePath.endsWith(".d.ts"))
|
|
116
128
|
return;
|
|
129
|
+
if (isIgnored(filePath))
|
|
130
|
+
return;
|
|
117
131
|
// Clear existing timer for this file
|
|
118
132
|
const existing = debounceTimers.get(filePath);
|
|
119
133
|
if (existing)
|
|
@@ -158,9 +172,9 @@ function startWatcher(watchFolder) {
|
|
|
158
172
|
* have a corresponding test file. Files are processed in parallel using the
|
|
159
173
|
* shared WorkerPool (bounded by CPU count) for maximum throughput.
|
|
160
174
|
*/
|
|
161
|
-
async function scanExistingFiles(dir, projectRoot, config, pool) {
|
|
175
|
+
async function scanExistingFiles(dir, projectRoot, config, pool, isIgnored = () => false) {
|
|
162
176
|
(0, utils_1.log)("Scanning existing source files for missing tests…", "info");
|
|
163
|
-
const files = collectSourceFiles(dir);
|
|
177
|
+
const files = collectSourceFiles(dir, isIgnored);
|
|
164
178
|
// Use the absolute srcRoot so mirrorPath never misidentifies a parent
|
|
165
179
|
// directory segment as the source root.
|
|
166
180
|
const absSrcRoot = path.resolve(projectRoot, config.srcDir);
|
|
@@ -187,9 +201,10 @@ async function scanExistingFiles(dir, projectRoot, config, pool) {
|
|
|
187
201
|
}
|
|
188
202
|
/**
|
|
189
203
|
* Recursively collect all source .ts files under `dir`,
|
|
190
|
-
* skipping test/spec/d.ts files and
|
|
204
|
+
* skipping test/spec/d.ts files, ignored directories, and any paths
|
|
205
|
+
* matched by the optional `isIgnored` predicate from .testgenignore.
|
|
191
206
|
*/
|
|
192
|
-
function collectSourceFiles(dir) {
|
|
207
|
+
function collectSourceFiles(dir, isIgnored = () => false) {
|
|
193
208
|
const IGNORED_DIRS = new Set(["node_modules", "cotester", "dist", ".git"]);
|
|
194
209
|
const results = [];
|
|
195
210
|
if (!fs.existsSync(dir))
|
|
@@ -199,13 +214,16 @@ function collectSourceFiles(dir) {
|
|
|
199
214
|
if (entry.isDirectory()) {
|
|
200
215
|
if (IGNORED_DIRS.has(entry.name))
|
|
201
216
|
continue;
|
|
202
|
-
|
|
217
|
+
if (isIgnored(fullPath))
|
|
218
|
+
continue;
|
|
219
|
+
results.push(...collectSourceFiles(fullPath, isIgnored));
|
|
203
220
|
}
|
|
204
221
|
else if (entry.isFile() &&
|
|
205
222
|
entry.name.endsWith(".ts") &&
|
|
206
223
|
!entry.name.endsWith(".test.ts") &&
|
|
207
224
|
!entry.name.endsWith(".spec.ts") &&
|
|
208
|
-
!entry.name.endsWith(".d.ts")
|
|
225
|
+
!entry.name.endsWith(".d.ts") &&
|
|
226
|
+
!isIgnored(fullPath)) {
|
|
209
227
|
results.push(fullPath);
|
|
210
228
|
}
|
|
211
229
|
}
|
|
@@ -215,7 +233,7 @@ function collectSourceFiles(dir) {
|
|
|
215
233
|
* Process a single TypeScript file through the full pipeline:
|
|
216
234
|
* analyze → scenarios → mock file → test file
|
|
217
235
|
*/
|
|
218
|
-
async function processFile(filePath, projectRoot, config) {
|
|
236
|
+
async function processFile(filePath, projectRoot, config, dryRun = false) {
|
|
219
237
|
try {
|
|
220
238
|
(0, utils_1.log)(`Analyzing: ${path.relative(projectRoot, filePath)}`, "info");
|
|
221
239
|
// 1. Analyse the file (returns cached result if content is unchanged)
|
|
@@ -228,9 +246,9 @@ async function processFile(filePath, projectRoot, config) {
|
|
|
228
246
|
// 2. Generate scenarios
|
|
229
247
|
const scenarios = (0, scenarioEngine_1.generateScenarios)(functions, config, projectRoot);
|
|
230
248
|
// 3. Generate the mock file (first!)
|
|
231
|
-
const mockResult = await (0, mockGenerator_1.generateMockFile)(filePath, scenarios, projectRoot, config.srcDir, config.mockDir);
|
|
249
|
+
const mockResult = await (0, mockGenerator_1.generateMockFile)(filePath, scenarios, projectRoot, config.srcDir, config.mockDir, dryRun);
|
|
232
250
|
// 4. Generate the test file (with mock import)
|
|
233
|
-
await (0, generator_1.generateTestFile)(filePath, scenarios, projectRoot, config.srcDir, config.testDir, mockResult, config.scenarioRules.tableThreshold);
|
|
251
|
+
await (0, generator_1.generateTestFile)(filePath, scenarios, projectRoot, config.srcDir, config.testDir, mockResult, config.scenarioRules.tableThreshold, dryRun, config.framework, config.scenarioRules.snapshotForComplexTypes);
|
|
234
252
|
}
|
|
235
253
|
catch (err) {
|
|
236
254
|
(0, utils_1.log)(` Error processing file: ${err.message}`, "error");
|
package/dist/watcher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED