@theihtisham/ai-testgen 1.0.0

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.
Files changed (149) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +383 -0
  3. package/dist/analyzers/analyzer.d.ts +10 -0
  4. package/dist/analyzers/analyzer.d.ts.map +1 -0
  5. package/dist/analyzers/analyzer.js +131 -0
  6. package/dist/analyzers/analyzer.js.map +1 -0
  7. package/dist/analyzers/go-analyzer.d.ts +3 -0
  8. package/dist/analyzers/go-analyzer.d.ts.map +1 -0
  9. package/dist/analyzers/go-analyzer.js +244 -0
  10. package/dist/analyzers/go-analyzer.js.map +1 -0
  11. package/dist/analyzers/index.d.ts +5 -0
  12. package/dist/analyzers/index.d.ts.map +1 -0
  13. package/dist/analyzers/index.js +15 -0
  14. package/dist/analyzers/index.js.map +1 -0
  15. package/dist/analyzers/js-ts-analyzer.d.ts +3 -0
  16. package/dist/analyzers/js-ts-analyzer.d.ts.map +1 -0
  17. package/dist/analyzers/js-ts-analyzer.js +299 -0
  18. package/dist/analyzers/js-ts-analyzer.js.map +1 -0
  19. package/dist/analyzers/python-analyzer.d.ts +3 -0
  20. package/dist/analyzers/python-analyzer.d.ts.map +1 -0
  21. package/dist/analyzers/python-analyzer.js +306 -0
  22. package/dist/analyzers/python-analyzer.js.map +1 -0
  23. package/dist/cli.d.ts +3 -0
  24. package/dist/cli.d.ts.map +1 -0
  25. package/dist/cli.js +381 -0
  26. package/dist/cli.js.map +1 -0
  27. package/dist/config/defaults.d.ts +6 -0
  28. package/dist/config/defaults.d.ts.map +1 -0
  29. package/dist/config/defaults.js +80 -0
  30. package/dist/config/defaults.js.map +1 -0
  31. package/dist/config/index.d.ts +3 -0
  32. package/dist/config/index.d.ts.map +1 -0
  33. package/dist/config/index.js +14 -0
  34. package/dist/config/index.js.map +1 -0
  35. package/dist/config/loader.d.ts +6 -0
  36. package/dist/config/loader.d.ts.map +1 -0
  37. package/dist/config/loader.js +126 -0
  38. package/dist/config/loader.js.map +1 -0
  39. package/dist/coverage.d.ts +4 -0
  40. package/dist/coverage.d.ts.map +1 -0
  41. package/dist/coverage.js +108 -0
  42. package/dist/coverage.js.map +1 -0
  43. package/dist/generators/ai-generator.d.ts +4 -0
  44. package/dist/generators/ai-generator.d.ts.map +1 -0
  45. package/dist/generators/ai-generator.js +175 -0
  46. package/dist/generators/ai-generator.js.map +1 -0
  47. package/dist/generators/generator.d.ts +4 -0
  48. package/dist/generators/generator.d.ts.map +1 -0
  49. package/dist/generators/generator.js +121 -0
  50. package/dist/generators/generator.js.map +1 -0
  51. package/dist/generators/go-generator.d.ts +3 -0
  52. package/dist/generators/go-generator.d.ts.map +1 -0
  53. package/dist/generators/go-generator.js +175 -0
  54. package/dist/generators/go-generator.js.map +1 -0
  55. package/dist/generators/index.d.ts +6 -0
  56. package/dist/generators/index.d.ts.map +1 -0
  57. package/dist/generators/index.js +16 -0
  58. package/dist/generators/index.js.map +1 -0
  59. package/dist/generators/js-ts-generator.d.ts +3 -0
  60. package/dist/generators/js-ts-generator.d.ts.map +1 -0
  61. package/dist/generators/js-ts-generator.js +331 -0
  62. package/dist/generators/js-ts-generator.js.map +1 -0
  63. package/dist/generators/python-generator.d.ts +3 -0
  64. package/dist/generators/python-generator.d.ts.map +1 -0
  65. package/dist/generators/python-generator.js +180 -0
  66. package/dist/generators/python-generator.js.map +1 -0
  67. package/dist/incremental.d.ts +16 -0
  68. package/dist/incremental.d.ts.map +1 -0
  69. package/dist/incremental.js +146 -0
  70. package/dist/incremental.js.map +1 -0
  71. package/dist/index.d.ts +9 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +44 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/mutation/index.d.ts +2 -0
  76. package/dist/mutation/index.d.ts.map +1 -0
  77. package/dist/mutation/index.js +9 -0
  78. package/dist/mutation/index.js.map +1 -0
  79. package/dist/mutation/mutator.d.ts +6 -0
  80. package/dist/mutation/mutator.d.ts.map +1 -0
  81. package/dist/mutation/mutator.js +237 -0
  82. package/dist/mutation/mutator.js.map +1 -0
  83. package/dist/types.d.ts +199 -0
  84. package/dist/types.d.ts.map +1 -0
  85. package/dist/types.js +4 -0
  86. package/dist/types.js.map +1 -0
  87. package/dist/utils/file.d.ts +10 -0
  88. package/dist/utils/file.d.ts.map +1 -0
  89. package/dist/utils/file.js +108 -0
  90. package/dist/utils/file.js.map +1 -0
  91. package/dist/utils/index.d.ts +4 -0
  92. package/dist/utils/index.d.ts.map +1 -0
  93. package/dist/utils/index.js +24 -0
  94. package/dist/utils/index.js.map +1 -0
  95. package/dist/utils/language.d.ts +8 -0
  96. package/dist/utils/language.d.ts.map +1 -0
  97. package/dist/utils/language.js +137 -0
  98. package/dist/utils/language.js.map +1 -0
  99. package/dist/utils/logger.d.ts +13 -0
  100. package/dist/utils/logger.d.ts.map +1 -0
  101. package/dist/utils/logger.js +57 -0
  102. package/dist/utils/logger.js.map +1 -0
  103. package/dist/watcher/index.d.ts +2 -0
  104. package/dist/watcher/index.d.ts.map +1 -0
  105. package/dist/watcher/index.js +6 -0
  106. package/dist/watcher/index.js.map +1 -0
  107. package/dist/watcher/watcher.d.ts +19 -0
  108. package/dist/watcher/watcher.d.ts.map +1 -0
  109. package/dist/watcher/watcher.js +122 -0
  110. package/dist/watcher/watcher.js.map +1 -0
  111. package/package.json +63 -0
  112. package/src/analyzers/analyzer.ts +180 -0
  113. package/src/analyzers/go-analyzer.ts +235 -0
  114. package/src/analyzers/index.ts +4 -0
  115. package/src/analyzers/js-ts-analyzer.ts +324 -0
  116. package/src/analyzers/python-analyzer.ts +306 -0
  117. package/src/cli.ts +416 -0
  118. package/src/config/defaults.ts +81 -0
  119. package/src/config/index.ts +2 -0
  120. package/src/config/loader.ts +114 -0
  121. package/src/coverage.ts +128 -0
  122. package/src/generators/ai-generator.ts +170 -0
  123. package/src/generators/generator.ts +117 -0
  124. package/src/generators/go-generator.ts +183 -0
  125. package/src/generators/index.ts +5 -0
  126. package/src/generators/js-ts-generator.ts +379 -0
  127. package/src/generators/python-generator.ts +201 -0
  128. package/src/incremental.ts +131 -0
  129. package/src/index.ts +8 -0
  130. package/src/mutation/index.ts +1 -0
  131. package/src/mutation/mutator.ts +314 -0
  132. package/src/types.ts +240 -0
  133. package/src/utils/file.ts +73 -0
  134. package/src/utils/index.ts +3 -0
  135. package/src/utils/language.ts +114 -0
  136. package/src/utils/logger.ts +61 -0
  137. package/src/watcher/index.ts +1 -0
  138. package/src/watcher/watcher.ts +103 -0
  139. package/tests/analyzer.test.ts +429 -0
  140. package/tests/config.test.ts +171 -0
  141. package/tests/coverage.test.ts +197 -0
  142. package/tests/file-utils.test.ts +121 -0
  143. package/tests/generators.test.ts +383 -0
  144. package/tests/incremental.test.ts +108 -0
  145. package/tests/language.test.ts +90 -0
  146. package/tests/mutation.test.ts +286 -0
  147. package/tests/watcher.test.ts +35 -0
  148. package/tsconfig.json +26 -0
  149. package/vitest.config.ts +25 -0
@@ -0,0 +1,237 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateMutants = generateMutants;
4
+ exports.applyMutant = applyMutant;
5
+ exports.calculateMutationScore = calculateMutationScore;
6
+ exports.formatMutationReport = formatMutationReport;
7
+ const file_js_1 = require("../utils/file.js");
8
+ // Mutations stored as [search, replacement] pairs.
9
+ // We use indexOf-based matching to avoid regex backtracking issues.
10
+ const ARITHMETIC_MUTATIONS = [
11
+ ['+', '-'],
12
+ ['-', '+'],
13
+ ['*', '/'],
14
+ ['/', '*'],
15
+ ['%', '*'],
16
+ ['**', '*'],
17
+ ];
18
+ const COMPARISON_MUTATIONS = [
19
+ ['===', '!=='],
20
+ ['!==', '==='],
21
+ ['==', '!='],
22
+ ['!=', '=='],
23
+ ['>', '<='],
24
+ ['<', '>='],
25
+ ['>=', '<'],
26
+ ['<=', '>'],
27
+ ];
28
+ const LOGICAL_MUTATIONS = [
29
+ ['&&', '||'],
30
+ ['||', '&&'],
31
+ ];
32
+ const PYTHON_COMPARISON_MUTATIONS = {
33
+ '==': '!=',
34
+ '!=': '==',
35
+ '>': '<=',
36
+ '<': '>=',
37
+ '>=': '<',
38
+ '<=': '>',
39
+ 'is': 'is not',
40
+ 'is not': 'is',
41
+ 'in': 'not in',
42
+ };
43
+ const PYTHON_LOGICAL_MUTATIONS = {
44
+ 'and': 'or',
45
+ 'or': 'and',
46
+ };
47
+ function generateMutants(filePath, analysis) {
48
+ const mutants = [];
49
+ const content = (0, file_js_1.readFile)(filePath);
50
+ const lines = content.split('\n');
51
+ for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
52
+ const line = lines[lineIndex];
53
+ const trimmed = line.trim();
54
+ // Skip comments, strings, empty lines
55
+ if (trimmed.startsWith('//') || trimmed.startsWith('#') || trimmed.startsWith('/*') || trimmed === '') {
56
+ continue;
57
+ }
58
+ // Skip import lines
59
+ if (trimmed.startsWith('import ') || trimmed.startsWith('from ')) {
60
+ continue;
61
+ }
62
+ if (analysis.language === 'python') {
63
+ mutants.push(...generatePythonMutants(line, lineIndex, filePath));
64
+ }
65
+ else {
66
+ mutants.push(...generateJsTsStyleMutants(line, lineIndex, filePath, analysis.language));
67
+ }
68
+ }
69
+ return mutants;
70
+ }
71
+ function generateJsTsStyleMutants(line, lineIndex, filePath, _language) {
72
+ const mutants = [];
73
+ let mutantId = 0;
74
+ const MAX_MUTANTS_PER_LINE = 10;
75
+ // Arithmetic operators — use indexOf to avoid regex backtracking
76
+ for (const [op, replacement] of ARITHMETIC_MUTATIONS) {
77
+ const idx = line.indexOf(op);
78
+ if (idx >= 0) {
79
+ mutants.push(createMutant(filePath, lineIndex, idx, op, replacement, 'arithmetic-operator', mutantId++));
80
+ }
81
+ if (mutantId >= MAX_MUTANTS_PER_LINE)
82
+ break;
83
+ }
84
+ // Comparison operators — check longest first to avoid partial matches
85
+ for (const [op, replacement] of COMPARISON_MUTATIONS) {
86
+ if (mutantId >= MAX_MUTANTS_PER_LINE)
87
+ break;
88
+ const idx = line.indexOf(op);
89
+ if (idx >= 0) {
90
+ mutants.push(createMutant(filePath, lineIndex, idx, op, replacement, 'comparison-operator', mutantId++));
91
+ }
92
+ }
93
+ // Logical operators
94
+ for (const [op, replacement] of LOGICAL_MUTATIONS) {
95
+ if (mutantId >= MAX_MUTANTS_PER_LINE)
96
+ break;
97
+ const idx = line.indexOf(op);
98
+ if (idx >= 0) {
99
+ mutants.push(createMutant(filePath, lineIndex, idx, op, replacement, 'logical-operator', mutantId++));
100
+ }
101
+ }
102
+ // Boolean literal mutations
103
+ if (mutantId < MAX_MUTANTS_PER_LINE && /\btrue\b/.test(line)) {
104
+ const idx = line.indexOf('true');
105
+ if (idx >= 0) {
106
+ mutants.push(createMutant(filePath, lineIndex, idx, 'true', 'false', 'boolean-literal', mutantId++));
107
+ }
108
+ }
109
+ if (mutantId < MAX_MUTANTS_PER_LINE && /\bfalse\b/.test(line)) {
110
+ const idx = line.indexOf('false');
111
+ if (idx >= 0) {
112
+ mutants.push(createMutant(filePath, lineIndex, idx, 'false', 'true', 'boolean-literal', mutantId++));
113
+ }
114
+ }
115
+ // String literal mutations
116
+ if (mutantId < MAX_MUTANTS_PER_LINE) {
117
+ const stringMatches = [...line.matchAll(/(["'`])(?:(?!\1).)*\1/g)];
118
+ for (const sm of stringMatches) {
119
+ if (mutantId >= MAX_MUTANTS_PER_LINE)
120
+ break;
121
+ if (sm.index !== undefined && sm[0].length > 2) {
122
+ const original = sm[0];
123
+ const quote = original[0];
124
+ const mutated = `${quote}${quote}`;
125
+ mutants.push(createMutant(filePath, lineIndex, sm.index, original, mutated, 'string-literal', mutantId++));
126
+ }
127
+ }
128
+ }
129
+ return mutants;
130
+ }
131
+ function generatePythonMutants(line, lineIndex, filePath) {
132
+ const mutants = [];
133
+ let mutantId = 0;
134
+ const MAX_MUTANTS_PER_LINE = 10;
135
+ // Comparison operators
136
+ for (const [op, replacement] of Object.entries(PYTHON_COMPARISON_MUTATIONS)) {
137
+ if (mutantId >= MAX_MUTANTS_PER_LINE)
138
+ break;
139
+ const idx = line.indexOf(op);
140
+ if (idx >= 0) {
141
+ mutants.push(createMutant(filePath, lineIndex, idx, op, replacement, 'comparison-operator', mutantId++));
142
+ }
143
+ }
144
+ // Logical operators
145
+ for (const [op, replacement] of Object.entries(PYTHON_LOGICAL_MUTATIONS)) {
146
+ if (mutantId >= MAX_MUTANTS_PER_LINE)
147
+ break;
148
+ const idx = line.indexOf(op);
149
+ if (idx >= 0) {
150
+ mutants.push(createMutant(filePath, lineIndex, idx, op, replacement, 'logical-operator', mutantId++));
151
+ }
152
+ }
153
+ // Boolean mutations
154
+ if (mutantId < MAX_MUTANTS_PER_LINE && /\bTrue\b/.test(line)) {
155
+ const idx = line.indexOf('True');
156
+ if (idx >= 0) {
157
+ mutants.push(createMutant(filePath, lineIndex, idx, 'True', 'False', 'boolean-literal', mutantId++));
158
+ }
159
+ }
160
+ if (mutantId < MAX_MUTANTS_PER_LINE && /\bFalse\b/.test(line)) {
161
+ const idx = line.indexOf('False');
162
+ if (idx >= 0) {
163
+ mutants.push(createMutant(filePath, lineIndex, idx, 'False', 'True', 'boolean-literal', mutantId++));
164
+ }
165
+ }
166
+ // Arithmetic
167
+ for (const [op, replacement] of ARITHMETIC_MUTATIONS) {
168
+ if (mutantId >= MAX_MUTANTS_PER_LINE)
169
+ break;
170
+ if (line.includes(op)) {
171
+ const idx = line.indexOf(op);
172
+ mutants.push(createMutant(filePath, lineIndex, idx, op, replacement, 'arithmetic-operator', mutantId++));
173
+ }
174
+ }
175
+ return mutants;
176
+ }
177
+ function createMutant(filePath, line, column, originalCode, mutatedCode, type, id) {
178
+ return {
179
+ id: `mutant-${line}-${column}-${id}`,
180
+ sourceFile: filePath,
181
+ line: line + 1,
182
+ column,
183
+ originalCode,
184
+ mutatedCode,
185
+ type,
186
+ status: 'pending',
187
+ };
188
+ }
189
+ function applyMutant(sourceContent, mutant) {
190
+ const lines = sourceContent.split('\n');
191
+ const line = lines[mutant.line - 1];
192
+ if (!line)
193
+ return sourceContent;
194
+ // Replace first occurrence on the line
195
+ const before = line.substring(0, mutant.column);
196
+ const after = line.substring(mutant.column + mutant.originalCode.length);
197
+ lines[mutant.line - 1] = before + mutant.mutatedCode + after;
198
+ return lines.join('\n');
199
+ }
200
+ function calculateMutationScore(results) {
201
+ const killed = results.filter((m) => m.status === 'killed').length;
202
+ const survived = results.filter((m) => m.status === 'survived').length;
203
+ const timeout = results.filter((m) => m.status === 'timeout').length;
204
+ const errors = results.filter((m) => m.status === 'error').length;
205
+ const total = results.length;
206
+ return {
207
+ total,
208
+ killed,
209
+ survived,
210
+ timeout,
211
+ errors,
212
+ mutationScore: total > 0 ? Math.round((killed / total) * 100) : 0,
213
+ mutants: results,
214
+ };
215
+ }
216
+ function formatMutationReport(result) {
217
+ const lines = [];
218
+ lines.push('');
219
+ lines.push(' Mutation Testing Report');
220
+ lines.push(' ======================');
221
+ lines.push(` Total mutants: ${result.total}`);
222
+ lines.push(` Killed: ${result.killed}`);
223
+ lines.push(` Survived: ${result.survived}`);
224
+ lines.push(` Timeout: ${result.timeout}`);
225
+ lines.push(` Errors: ${result.errors}`);
226
+ lines.push(` Mutation score: ${result.mutationScore}%`);
227
+ lines.push('');
228
+ if (result.survived > 0) {
229
+ lines.push(' Survived mutants (tests may be insufficient):');
230
+ for (const m of result.mutants.filter((m) => m.status === 'survived').slice(0, 10)) {
231
+ lines.push(` [${m.type}] ${m.sourceFile}:${m.line} | ${m.originalCode} -> ${m.mutatedCode}`);
232
+ }
233
+ lines.push('');
234
+ }
235
+ return lines.join('\n');
236
+ }
237
+ //# sourceMappingURL=mutator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutator.js","sourceRoot":"","sources":["../../src/mutation/mutator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,199 @@
1
+ export type SupportedLanguage = 'typescript' | 'javascript' | 'python' | 'go' | 'rust';
2
+ export type TestFramework = 'jest' | 'vitest' | 'pytest' | 'go-test';
3
+ export type TestType = 'unit' | 'integration' | 'edge-case' | 'mock-setup';
4
+ export interface FunctionParam {
5
+ name: string;
6
+ type: string | null;
7
+ optional: boolean;
8
+ defaultValue: string | null;
9
+ }
10
+ export interface AnalyzedFunction {
11
+ name: string;
12
+ isAsync: boolean;
13
+ isExported: boolean;
14
+ params: FunctionParam[];
15
+ returnType: string | null;
16
+ throws: string[];
17
+ complexity: number;
18
+ hasSideEffects: boolean;
19
+ startLine: number;
20
+ endLine: number;
21
+ }
22
+ export interface AnalyzedClass {
23
+ name: string;
24
+ isExported: boolean;
25
+ constructorParams: FunctionParam[];
26
+ methods: AnalyzedFunction[];
27
+ properties: ClassProperty[];
28
+ implements: string[];
29
+ extends: string | null;
30
+ }
31
+ export interface ClassProperty {
32
+ name: string;
33
+ type: string | null;
34
+ visibility: 'public' | 'private' | 'protected';
35
+ isStatic: boolean;
36
+ isReadonly: boolean;
37
+ }
38
+ export interface AnalyzedInterface {
39
+ name: string;
40
+ isExported: boolean;
41
+ properties: {
42
+ name: string;
43
+ type: string | null;
44
+ optional: boolean;
45
+ }[];
46
+ methods: {
47
+ name: string;
48
+ params: FunctionParam[];
49
+ returnType: string | null;
50
+ }[];
51
+ }
52
+ export interface AnalyzedExport {
53
+ name: string;
54
+ type: 'function' | 'class' | 'interface' | 'type' | 'constant' | 'default';
55
+ filePath: string;
56
+ }
57
+ export interface SourceAnalysis {
58
+ filePath: string;
59
+ language: SupportedLanguage;
60
+ functions: AnalyzedFunction[];
61
+ classes: AnalyzedClass[];
62
+ interfaces: AnalyzedInterface[];
63
+ exports: AnalyzedExport[];
64
+ imports: ImportInfo[];
65
+ dependencies: string[];
66
+ linesOfCode: number;
67
+ cyclomaticComplexity: number;
68
+ }
69
+ export interface ImportInfo {
70
+ modulePath: string;
71
+ namedImports: string[];
72
+ defaultImport: string | null;
73
+ isTypeOnly: boolean;
74
+ }
75
+ export interface TestCase {
76
+ name: string;
77
+ type: TestType;
78
+ description: string;
79
+ code: string;
80
+ expectedBehavior: string;
81
+ inputDescription: string;
82
+ tags: string[];
83
+ }
84
+ export interface MockDefinition {
85
+ moduleName: string;
86
+ mockName: string;
87
+ setup: string;
88
+ teardown: string | null;
89
+ implementations: Record<string, string>;
90
+ }
91
+ export interface TestSuite {
92
+ filePath: string;
93
+ sourceFilePath: string;
94
+ language: SupportedLanguage;
95
+ framework: TestFramework;
96
+ testCases: TestCase[];
97
+ mocks: MockDefinition[];
98
+ imports: string[];
99
+ setupCode: string;
100
+ teardownCode: string;
101
+ coverageEstimate: number;
102
+ }
103
+ export interface GenerationResult {
104
+ sourceFile: string;
105
+ testFile: string;
106
+ testSuite: TestSuite;
107
+ duration: number;
108
+ usedAI: boolean;
109
+ }
110
+ export interface Mutant {
111
+ id: string;
112
+ sourceFile: string;
113
+ line: number;
114
+ column: number;
115
+ originalCode: string;
116
+ mutatedCode: string;
117
+ type: MutationType;
118
+ status: 'pending' | 'killed' | 'survived' | 'timeout' | 'error';
119
+ }
120
+ export type MutationType = 'arithmetic-operator' | 'comparison-operator' | 'logical-operator' | 'conditional-expression' | 'string-literal' | 'boolean-literal' | 'negate-condition' | 'remove-statement' | 'return-value';
121
+ export interface MutationResult {
122
+ total: number;
123
+ killed: number;
124
+ survived: number;
125
+ timeout: number;
126
+ errors: number;
127
+ mutationScore: number;
128
+ mutants: Mutant[];
129
+ }
130
+ export interface TestGenConfig {
131
+ version: string;
132
+ language: SupportedLanguage | 'auto';
133
+ framework: TestFramework | 'auto';
134
+ outputDir: string;
135
+ testFilePattern: string;
136
+ coverage: {
137
+ target: number;
138
+ strict: boolean;
139
+ };
140
+ ai: {
141
+ enabled: boolean;
142
+ provider: 'openai' | 'anthropic' | 'local' | 'none';
143
+ model: string;
144
+ apiKeyEnv: string;
145
+ maxTokens: number;
146
+ temperature: number;
147
+ privacyMode: boolean;
148
+ };
149
+ generation: {
150
+ unitTests: boolean;
151
+ integrationTests: boolean;
152
+ edgeCaseTests: boolean;
153
+ mockGeneration: boolean;
154
+ mutationTesting: boolean;
155
+ maxTestsPerFunction: number;
156
+ includeComments: boolean;
157
+ };
158
+ incremental: {
159
+ enabled: boolean;
160
+ gitBased: boolean;
161
+ cacheDir: string;
162
+ };
163
+ watch: {
164
+ enabled: boolean;
165
+ ignorePatterns: string[];
166
+ debounceMs: number;
167
+ };
168
+ exclude: string[];
169
+ include: string[];
170
+ }
171
+ export interface FileChangeEvent {
172
+ filePath: string;
173
+ eventType: 'add' | 'change' | 'unlink';
174
+ timestamp: number;
175
+ }
176
+ export interface CoveragePrediction {
177
+ filePath: string;
178
+ estimatedLineCoverage: number;
179
+ estimatedBranchCoverage: number;
180
+ estimatedFunctionCoverage: number;
181
+ uncoveredPaths: string[];
182
+ suggestions: string[];
183
+ }
184
+ export interface CLIOptions {
185
+ source: string;
186
+ output?: string;
187
+ config?: string;
188
+ language?: SupportedLanguage;
189
+ framework?: TestFramework;
190
+ watch: boolean;
191
+ incremental: boolean;
192
+ verbose: boolean;
193
+ dryRun: boolean;
194
+ noAI: boolean;
195
+ types: TestType[];
196
+ coverage: boolean;
197
+ mutation: boolean;
198
+ }
199
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ // --- Language & Framework Types ---
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA,qCAAqC"}
@@ -0,0 +1,10 @@
1
+ export declare function readFile(filePath: string): string;
2
+ export declare function writeFile(filePath: string, content: string): void;
3
+ export declare function fileExists(filePath: string): boolean;
4
+ export declare function findSourceFiles(patterns: string[], cwd: string, excludePatterns: string[]): Promise<string[]>;
5
+ export declare function getRelativePath(from: string, to: string): string;
6
+ export declare function ensureDir(dirPath: string): void;
7
+ export declare function getFileHash(filePath: string): string;
8
+ export declare function hashString(input: string): string;
9
+ export declare function readJsonFile<T>(filePath: string): T;
10
+ //# sourceMappingURL=file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"AAIA,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAOjE;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAAE,EAClB,GAAG,EAAE,MAAM,EACX,eAAe,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC,MAAM,EAAE,CAAC,CAQnB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAMhE;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAK/C;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,CAGnD"}
@@ -0,0 +1,108 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.readFile = readFile;
40
+ exports.writeFile = writeFile;
41
+ exports.fileExists = fileExists;
42
+ exports.findSourceFiles = findSourceFiles;
43
+ exports.getRelativePath = getRelativePath;
44
+ exports.ensureDir = ensureDir;
45
+ exports.getFileHash = getFileHash;
46
+ exports.hashString = hashString;
47
+ exports.readJsonFile = readJsonFile;
48
+ const fs = __importStar(require("fs"));
49
+ const path = __importStar(require("path"));
50
+ const fast_glob_1 = __importDefault(require("fast-glob"));
51
+ function readFile(filePath) {
52
+ const absolute = path.resolve(filePath);
53
+ if (!fs.existsSync(absolute)) {
54
+ throw new Error(`File not found: ${absolute}`);
55
+ }
56
+ return fs.readFileSync(absolute, 'utf-8');
57
+ }
58
+ function writeFile(filePath, content) {
59
+ const absolute = path.resolve(filePath);
60
+ const dir = path.dirname(absolute);
61
+ if (!fs.existsSync(dir)) {
62
+ fs.mkdirSync(dir, { recursive: true });
63
+ }
64
+ fs.writeFileSync(absolute, content, 'utf-8');
65
+ }
66
+ function fileExists(filePath) {
67
+ return fs.existsSync(path.resolve(filePath));
68
+ }
69
+ async function findSourceFiles(patterns, cwd, excludePatterns) {
70
+ const results = await (0, fast_glob_1.default)(patterns, {
71
+ cwd,
72
+ absolute: true,
73
+ ignore: excludePatterns,
74
+ onlyFiles: true,
75
+ });
76
+ return results.sort();
77
+ }
78
+ function getRelativePath(from, to) {
79
+ let rel = path.relative(path.dirname(from), to).replace(/\\/g, '/');
80
+ if (!rel.startsWith('.')) {
81
+ rel = './' + rel;
82
+ }
83
+ return rel;
84
+ }
85
+ function ensureDir(dirPath) {
86
+ const absolute = path.resolve(dirPath);
87
+ if (!fs.existsSync(absolute)) {
88
+ fs.mkdirSync(absolute, { recursive: true });
89
+ }
90
+ }
91
+ function getFileHash(filePath) {
92
+ const content = readFile(filePath);
93
+ return hashString(content);
94
+ }
95
+ function hashString(input) {
96
+ let hash = 0;
97
+ for (let i = 0; i < input.length; i++) {
98
+ const char = input.charCodeAt(i);
99
+ hash = ((hash << 5) - hash) + char;
100
+ hash = hash & hash; // Convert to 32-bit integer
101
+ }
102
+ return Math.abs(hash).toString(16).padStart(8, '0');
103
+ }
104
+ function readJsonFile(filePath) {
105
+ const content = readFile(filePath);
106
+ return JSON.parse(content);
107
+ }
108
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { detectLanguage, detectFramework, getTestFileExtension, buildTestFilePath, isTestFile, shouldAnalyze } from './language.js';
2
+ export { logger, setLogLevel, LogLevel } from './logger.js';
3
+ export { readFile, writeFile, fileExists, findSourceFiles, getRelativePath, ensureDir, getFileHash, hashString, readJsonFile } from './file.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACpI,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readJsonFile = exports.hashString = exports.getFileHash = exports.ensureDir = exports.getRelativePath = exports.findSourceFiles = exports.fileExists = exports.writeFile = exports.readFile = exports.setLogLevel = exports.logger = exports.shouldAnalyze = exports.isTestFile = exports.buildTestFilePath = exports.getTestFileExtension = exports.detectFramework = exports.detectLanguage = void 0;
4
+ var language_js_1 = require("./language.js");
5
+ Object.defineProperty(exports, "detectLanguage", { enumerable: true, get: function () { return language_js_1.detectLanguage; } });
6
+ Object.defineProperty(exports, "detectFramework", { enumerable: true, get: function () { return language_js_1.detectFramework; } });
7
+ Object.defineProperty(exports, "getTestFileExtension", { enumerable: true, get: function () { return language_js_1.getTestFileExtension; } });
8
+ Object.defineProperty(exports, "buildTestFilePath", { enumerable: true, get: function () { return language_js_1.buildTestFilePath; } });
9
+ Object.defineProperty(exports, "isTestFile", { enumerable: true, get: function () { return language_js_1.isTestFile; } });
10
+ Object.defineProperty(exports, "shouldAnalyze", { enumerable: true, get: function () { return language_js_1.shouldAnalyze; } });
11
+ var logger_js_1 = require("./logger.js");
12
+ Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_js_1.logger; } });
13
+ Object.defineProperty(exports, "setLogLevel", { enumerable: true, get: function () { return logger_js_1.setLogLevel; } });
14
+ var file_js_1 = require("./file.js");
15
+ Object.defineProperty(exports, "readFile", { enumerable: true, get: function () { return file_js_1.readFile; } });
16
+ Object.defineProperty(exports, "writeFile", { enumerable: true, get: function () { return file_js_1.writeFile; } });
17
+ Object.defineProperty(exports, "fileExists", { enumerable: true, get: function () { return file_js_1.fileExists; } });
18
+ Object.defineProperty(exports, "findSourceFiles", { enumerable: true, get: function () { return file_js_1.findSourceFiles; } });
19
+ Object.defineProperty(exports, "getRelativePath", { enumerable: true, get: function () { return file_js_1.getRelativePath; } });
20
+ Object.defineProperty(exports, "ensureDir", { enumerable: true, get: function () { return file_js_1.ensureDir; } });
21
+ Object.defineProperty(exports, "getFileHash", { enumerable: true, get: function () { return file_js_1.getFileHash; } });
22
+ Object.defineProperty(exports, "hashString", { enumerable: true, get: function () { return file_js_1.hashString; } });
23
+ Object.defineProperty(exports, "readJsonFile", { enumerable: true, get: function () { return file_js_1.readJsonFile; } });
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;AAAA,6CAAoI;AAA3H,6GAAA,cAAc,OAAA;AAAE,8GAAA,eAAe,OAAA;AAAE,mHAAA,oBAAoB,OAAA;AAAE,gHAAA,iBAAiB,OAAA;AAAE,yGAAA,UAAU,OAAA;AAAE,4GAAA,aAAa,OAAA;AAC5G,yCAA4D;AAAnD,mGAAA,MAAM,OAAA;AAAE,wGAAA,WAAW,OAAA;AAC5B,qCAAgJ;AAAvI,mGAAA,QAAQ,OAAA;AAAE,oGAAA,SAAS,OAAA;AAAE,qGAAA,UAAU,OAAA;AAAE,0GAAA,eAAe,OAAA;AAAE,0GAAA,eAAe,OAAA;AAAE,oGAAA,SAAS,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,qGAAA,UAAU,OAAA;AAAE,uGAAA,YAAY,OAAA"}
@@ -0,0 +1,8 @@
1
+ import { SupportedLanguage, TestFramework } from '../types.js';
2
+ export declare function detectLanguage(filePath: string): SupportedLanguage;
3
+ export declare function detectFramework(language: SupportedLanguage, projectDir: string): TestFramework;
4
+ export declare function getTestFileExtension(language: SupportedLanguage): string;
5
+ export declare function buildTestFilePath(sourceFilePath: string, outputDir: string, language: SupportedLanguage, framework: TestFramework): string;
6
+ export declare function isTestFile(filePath: string): boolean;
7
+ export declare function shouldAnalyze(filePath: string, excludePatterns: string[]): boolean;
8
+ //# sourceMappingURL=language.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language.d.ts","sourceRoot":"","sources":["../../src/utils/language.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG/D,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAOlE;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,CAkC9F;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CASxE;AAED,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,EAAE,aAAa,GACvB,MAAM,CAqBR;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAQpD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAclF"}