codeguard-testgen 1.0.14 → 1.0.16

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 (50) hide show
  1. package/README.md +157 -1034
  2. package/dist/ai.d.ts +8 -0
  3. package/dist/ai.d.ts.map +1 -0
  4. package/dist/ai.js +332 -0
  5. package/dist/ai.js.map +1 -0
  6. package/dist/ast.d.ts +8 -0
  7. package/dist/ast.d.ts.map +1 -0
  8. package/dist/ast.js +988 -0
  9. package/dist/ast.js.map +1 -0
  10. package/dist/config.d.ts +4 -0
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +4 -0
  13. package/dist/config.js.map +1 -1
  14. package/dist/git.d.ts +18 -0
  15. package/dist/git.d.ts.map +1 -0
  16. package/dist/git.js +208 -0
  17. package/dist/git.js.map +1 -0
  18. package/dist/globals.d.ts +24 -0
  19. package/dist/globals.d.ts.map +1 -0
  20. package/dist/globals.js +40 -0
  21. package/dist/globals.js.map +1 -0
  22. package/dist/index.d.ts +9 -54
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +85 -5434
  25. package/dist/index.js.map +1 -1
  26. package/dist/pathResolver.d.ts +12 -0
  27. package/dist/pathResolver.d.ts.map +1 -0
  28. package/dist/pathResolver.js +44 -0
  29. package/dist/pathResolver.js.map +1 -0
  30. package/dist/reviewer.d.ts +13 -0
  31. package/dist/reviewer.d.ts.map +1 -0
  32. package/dist/reviewer.js +402 -0
  33. package/dist/reviewer.js.map +1 -0
  34. package/dist/testGenerator.d.ts +24 -0
  35. package/dist/testGenerator.d.ts.map +1 -0
  36. package/dist/testGenerator.js +1107 -0
  37. package/dist/testGenerator.js.map +1 -0
  38. package/dist/toolDefinitions.d.ts +6 -0
  39. package/dist/toolDefinitions.d.ts.map +1 -0
  40. package/dist/toolDefinitions.js +370 -0
  41. package/dist/toolDefinitions.js.map +1 -0
  42. package/dist/toolHandlers.d.ts +76 -0
  43. package/dist/toolHandlers.d.ts.map +1 -0
  44. package/dist/toolHandlers.js +1430 -0
  45. package/dist/toolHandlers.js.map +1 -0
  46. package/dist/types.d.ts +74 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +3 -0
  49. package/dist/types.js.map +1 -0
  50. package/package.json +1 -2
@@ -0,0 +1,402 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reviewChangedFiles = reviewChangedFiles;
4
+ exports.generateUnifiedCodeReview = generateUnifiedCodeReview;
5
+ const fs = require("fs/promises");
6
+ const fsSync = require("fs");
7
+ const path = require("path");
8
+ const globals_1 = require("./globals");
9
+ const ai_1 = require("./ai");
10
+ const toolHandlers_1 = require("./toolHandlers");
11
+ const toolDefinitions_1 = require("./toolDefinitions");
12
+ const git_1 = require("./git");
13
+ /**
14
+ * Review code changes for quality, bugs, performance, and security issues
15
+ */
16
+ async function reviewChangedFiles() {
17
+ (0, globals_1.updateSpinner)('šŸ” Scanning git changes for review...');
18
+ try {
19
+ const { fullDiff, files } = await (0, git_1.getGitDiff)();
20
+ if (files.length === 0) {
21
+ (0, globals_1.stopSpinner)();
22
+ console.log('āœ… No changes detected in source files.');
23
+ console.log(' (Only staged and unstaged changes are checked)');
24
+ return;
25
+ }
26
+ globals_1.g.globalSpinner.text = `Found changes in ${files.length} file(s) to review`;
27
+ await new Promise(resolve => setTimeout(resolve, 200));
28
+ const filesToReview = [];
29
+ for (const fileInfo of files) {
30
+ const { filePath, diff } = fileInfo;
31
+ if (!fsSync.existsSync(filePath)) {
32
+ (0, globals_1.updateSpinner)(`ā­ļø Skipping ${filePath} (file not found)`);
33
+ await new Promise(resolve => setTimeout(resolve, 100));
34
+ continue;
35
+ }
36
+ (0, globals_1.updateSpinner)(`šŸ”„ Analyzing: ${filePath}`);
37
+ const changedFunctions = await (0, git_1.getChangedFunctionsFromDiff)(filePath, diff);
38
+ if (changedFunctions.length === 0) {
39
+ globals_1.g.globalSpinner.text = `ā­ļø No exported functions changed in ${path.basename(filePath)}`;
40
+ await new Promise(resolve => setTimeout(resolve, 150));
41
+ continue;
42
+ }
43
+ globals_1.g.globalSpinner.text = `Found ${changedFunctions.length} changed function(s) in ${path.basename(filePath)}`;
44
+ await new Promise(resolve => setTimeout(resolve, 200));
45
+ filesToReview.push({ filePath, diff, functions: changedFunctions });
46
+ }
47
+ if (filesToReview.length === 0) {
48
+ console.log('\nāœ… No functions to review.');
49
+ return;
50
+ }
51
+ try {
52
+ await generateUnifiedCodeReview(filesToReview);
53
+ (0, globals_1.stopSpinner)();
54
+ console.log('\nāœ… Code review completed!');
55
+ }
56
+ catch (error) {
57
+ console.error(`\nāŒ Error during review: ${error.message}`);
58
+ }
59
+ console.log('\n' + '='.repeat(60));
60
+ console.log('šŸ“Š Code Review Summary');
61
+ console.log('='.repeat(60));
62
+ console.log(`āœ… Files reviewed: ${filesToReview.length}`);
63
+ console.log(`šŸ“ Total functions: ${filesToReview.reduce((sum, f) => sum + f.functions.length, 0)}`);
64
+ console.log(`šŸ“ Review saved to: reviews/code_review.md`);
65
+ console.log('='.repeat(60));
66
+ console.log('\n✨ Done!');
67
+ }
68
+ catch (error) {
69
+ if (error.message === 'Not a git repository') {
70
+ console.error('āŒ Error: Not a git repository');
71
+ console.error(' Review mode requires git to detect changes.');
72
+ process.exit(1);
73
+ }
74
+ throw error;
75
+ }
76
+ }
77
+ /**
78
+ * Build AI prompt for a specific review step based on its ruleset
79
+ */
80
+ async function buildStepPrompt(step, filesToReview, stepOutputPath) {
81
+ const filesContext = filesToReview.map(f => `- ${f.filePath}: ${f.functions.join(', ')}`).join('\n');
82
+ const totalFunctions = filesToReview.reduce((sum, f) => sum + f.functions.length, 0);
83
+ const rulesetPath = path.join(process.cwd(), 'codeguard-ruleset', step.ruleset);
84
+ let rulesetContent;
85
+ try {
86
+ rulesetContent = await fs.readFile(rulesetPath, 'utf-8');
87
+ if (globals_1.g.globalSpinner && globals_1.g.globalSpinner.isSpinning) {
88
+ globals_1.g.globalSpinner.text = `šŸ“– Loaded ruleset: ${step.ruleset}`;
89
+ await new Promise(resolve => setTimeout(resolve, 100));
90
+ }
91
+ }
92
+ catch (error) {
93
+ (0, globals_1.stopSpinner)();
94
+ console.warn(`āš ļø Could not read ruleset file: ${rulesetPath}`);
95
+ console.warn(` Using default ruleset message. Error: ${error.message}`);
96
+ rulesetContent = `Please review the code for ${step.name} following industry best practices.`;
97
+ }
98
+ return `You are a senior software engineer conducting a focused code review for: **${step.name}**
99
+
100
+ ## CONTEXT
101
+ Review Focus: ${step.name}
102
+ Category: ${step.category}
103
+ Total files changed: ${filesToReview.length}
104
+ Total functions changed: ${totalFunctions}
105
+
106
+ Changed files and functions:
107
+ ${filesContext}
108
+
109
+ ## GIT DIFFS
110
+
111
+ ${filesToReview.map(f => `### ${f.filePath}
112
+ \`\`\`diff
113
+ ${f.diff}
114
+ \`\`\`
115
+ `).join('\n')}
116
+
117
+ ## YOUR TASK
118
+ Conduct a focused code review ONLY for ${step.name}. Use the available tools to analyze the code thoroughly.
119
+ Must complete and write the review within 1 minutes. Your review should be brief and to the point.
120
+
121
+ ## ANALYSIS STEPS
122
+
123
+ **Phase 1: Code Analysis (MANDATORY)**
124
+ For each changed file:
125
+ 1. analyze_file_ast(filePath) → Get file structure and all functions
126
+ - OR use analyze_file_ast(filePath, functionName) for specific function reviews (token-efficient)
127
+ 2. For each changed function:
128
+ - get_function_ast(filePath, functionName) → Get implementation details
129
+ 3. get_imports_ast(filePath) → Understand dependencies
130
+ 4. get_type_definitions(filePath) → Review type safety
131
+ 5. Use search_codebase() if needed to understand usage patterns
132
+ 6. Use tools to analyze the code thoroughly. -> Where the functions is used and what all dependencies are there that call this function? What can be potential issues with the code?
133
+
134
+ **Phase 2: Review Analysis for ${step.name}**
135
+
136
+ Review the code against the following ruleset:
137
+
138
+ ${rulesetContent}
139
+
140
+ Also give attention to any industry specific points that are not covered by the ruleset for ${step.name}.
141
+
142
+ **Phase 3: Write Review**
143
+
144
+ Use the write_review tool to save findings to: ${stepOutputPath}
145
+
146
+ ## OUTPUT FORMAT
147
+
148
+ Your review MUST be in markdown format with the following structure:
149
+
150
+ \`\`\`markdown
151
+ # ${step.name}
152
+
153
+
154
+ ## Findings
155
+
156
+ ### šŸ”“ Critical Issues
157
+
158
+ #### [Issue Title]
159
+ **File**: \`filePath\`
160
+ **Function**: \`functionName\`
161
+ **Severity**: Critical
162
+
163
+ **Issue**:
164
+ [Description]
165
+
166
+ **Current Code**:
167
+ \`\`\`typescript
168
+ // problematic code
169
+ \`\`\`
170
+
171
+ **Recommended Code**:
172
+ \`\`\`typescript
173
+ // improved code
174
+ \`\`\`
175
+
176
+ **Rationale**:
177
+ [Why this is important]
178
+
179
+ ---
180
+
181
+ ### 🟠 High Priority Issues
182
+ [Same format as above]
183
+
184
+ ---
185
+
186
+ ### 🟔 Medium Priority Issues
187
+ [Same format as above]
188
+
189
+ ---
190
+
191
+ ## Positive Aspects
192
+ [What was done well in this area]
193
+
194
+ ## Recommendations
195
+ [Specific recommendations for ${step.name}]
196
+ \`\`\`
197
+
198
+ ## CRITICAL REMINDERS
199
+
200
+ - ALWAYS use tools to analyze code before reviewing
201
+ - Focus ONLY on ${step.name} - do not review other aspects
202
+ - Be specific and actionable
203
+ - Include code examples
204
+ - Use write_review tool to save to: ${stepOutputPath}
205
+ - Must complete within 30 seconds
206
+ - Use avaiable tools extensively to analyze the code.
207
+ - The review should be based on the ruleset, it should be to the point without too much text.
208
+ - Before writing the review, make sure to analyze the code thoroughly using the tools available, how similar code is used in the codebase.
209
+ - Keep the review short and to the point, do not write too much text.
210
+
211
+ **START**: Begin by calling analyze_file_ast on each changed file.`;
212
+ }
213
+ /**
214
+ * Execute a single review step with AI
215
+ */
216
+ async function executeReviewStep(step, filesToReview, stepOutputPath) {
217
+ try {
218
+ const prompt = await buildStepPrompt(step, filesToReview, stepOutputPath);
219
+ const messages = [
220
+ {
221
+ role: 'user',
222
+ content: prompt
223
+ }
224
+ ];
225
+ let iterations = 0;
226
+ const maxIterations = 30;
227
+ let reviewWritten = false;
228
+ while (iterations < maxIterations) {
229
+ iterations++;
230
+ const response = await (0, ai_1.callAI)(messages, toolDefinitions_1.TOOLS_FOR_CODE_REVIEW, globals_1.g.CONFIG.aiProvider);
231
+ if (response.content) {
232
+ const content = typeof response.content === 'string' ? response.content : JSON.stringify(response.content);
233
+ messages.push({ role: 'assistant', content });
234
+ if (typeof content === 'string' && (content.toLowerCase().includes('review complete') ||
235
+ content.toLowerCase().includes('review has been written'))) {
236
+ if (reviewWritten) {
237
+ break;
238
+ }
239
+ }
240
+ }
241
+ if (!response.toolCalls || response.toolCalls.length === 0) {
242
+ if (reviewWritten) {
243
+ break;
244
+ }
245
+ messages.push({
246
+ role: 'user',
247
+ content: `Please use the write_review tool NOW to save your ${step.name} review to ${stepOutputPath}. Include all findings with severity levels and code examples.`
248
+ });
249
+ continue;
250
+ }
251
+ const toolResults = [];
252
+ for (const toolCall of response.toolCalls) {
253
+ const toolResult = await (0, toolHandlers_1.executeTool)(toolCall.name, toolCall.input);
254
+ toolResults.push({ id: toolCall.id, name: toolCall.name, result: toolResult });
255
+ if (toolCall.name === 'write_review' && toolResult.success) {
256
+ reviewWritten = true;
257
+ }
258
+ }
259
+ (0, ai_1.addToolResultsToMessages)(globals_1.g.CONFIG.aiProvider, messages, response.toolCalls, toolResults);
260
+ }
261
+ if (!reviewWritten) {
262
+ throw new Error(`Could not complete ${step.name} review within iteration limit`);
263
+ }
264
+ console.log(` āœ… ${step.name} review completed`);
265
+ return { success: true, stepId: step.id, stepName: step.name };
266
+ }
267
+ catch (error) {
268
+ console.error(` āŒ ${step.name} review failed: ${error.message}`);
269
+ return { success: false, error: error.message, stepId: step.id, stepName: step.name };
270
+ }
271
+ }
272
+ /**
273
+ * Merge review results from multiple steps into a single unified review
274
+ */
275
+ async function mergeReviewResults(stepResults, filesToReview, finalOutputPath) {
276
+ const timestamp = new Date().toISOString().split('T')[0];
277
+ const totalFunctions = filesToReview.reduce((sum, f) => sum + f.functions.length, 0);
278
+ let mergedReview = `# Code Review
279
+
280
+ **Date**: ${timestamp}
281
+ **Reviewer**: AI Code Review System
282
+ **Files Changed**: ${filesToReview.length}
283
+ **Functions Changed**: ${totalFunctions}
284
+
285
+ ---
286
+
287
+ ## Summary
288
+
289
+ This review covers ${filesToReview.length} file(s) with ${totalFunctions} changed function(s). The review was conducted across multiple aspects: ${stepResults.map(r => r.stepName).join(', ')}.
290
+
291
+ ---
292
+
293
+ ## Files Changed
294
+
295
+ ${filesToReview.map(f => `- **${f.filePath}**
296
+ - Functions: ${f.functions.join(', ')}`).join('\n')}
297
+
298
+ ---
299
+
300
+ `;
301
+ for (const result of stepResults) {
302
+ const stepFilePath = path.join('reviews', '.tmp', `step-${result.stepId}.md`);
303
+ if (result.success) {
304
+ try {
305
+ if (fsSync.existsSync(stepFilePath)) {
306
+ const stepContent = await fs.readFile(stepFilePath, 'utf-8');
307
+ const lines = stepContent.split('\n');
308
+ let contentStart = 0;
309
+ for (let i = 0; i < lines.length; i++) {
310
+ if (lines[i].startsWith('# ')) {
311
+ contentStart = i + 1;
312
+ break;
313
+ }
314
+ }
315
+ const content = lines.slice(contentStart).join('\n').trim();
316
+ mergedReview += `## ${result.stepName}\n\n${content}\n\n---\n\n`;
317
+ }
318
+ else {
319
+ mergedReview += `## ${result.stepName}\n\nāš ļø Review file not found.\n\n---\n\n`;
320
+ }
321
+ }
322
+ catch (error) {
323
+ mergedReview += `## ${result.stepName}\n\nāš ļø Error reading review: ${error.message}\n\n---\n\n`;
324
+ }
325
+ }
326
+ else {
327
+ mergedReview += `## ${result.stepName}\n\nāŒ **Review step failed**: ${result.error}\n\n---\n\n`;
328
+ }
329
+ }
330
+ mergedReview += `## Conclusion
331
+
332
+ This comprehensive review analyzed the code changes from multiple perspectives. Please address the findings based on their severity levels, starting with critical issues.
333
+
334
+ The review was conducted using AI-powered analysis with access to the full codebase context.
335
+ `;
336
+ const reviewsDir = path.dirname(finalOutputPath);
337
+ if (!fsSync.existsSync(reviewsDir)) {
338
+ await fs.mkdir(reviewsDir, { recursive: true });
339
+ }
340
+ await fs.writeFile(finalOutputPath, mergedReview, 'utf-8');
341
+ console.log(`\nāœ… Merged review written to: ${finalOutputPath}`);
342
+ try {
343
+ const tmpDir = path.join('reviews', '.tmp');
344
+ if (fsSync.existsSync(tmpDir)) {
345
+ const tmpFiles = await fs.readdir(tmpDir);
346
+ for (const file of tmpFiles) {
347
+ await fs.unlink(path.join(tmpDir, file));
348
+ }
349
+ await fs.rmdir(tmpDir);
350
+ }
351
+ }
352
+ catch (error) {
353
+ // Ignore cleanup errors
354
+ }
355
+ }
356
+ /**
357
+ * Generate unified code review for all changed files
358
+ */
359
+ async function generateUnifiedCodeReview(filesToReview) {
360
+ const reviewFilePath = path.join('reviews', 'code_review.md');
361
+ const enabledSteps = globals_1.g.CONFIG.reviewSteps.filter(step => step.enabled);
362
+ if (enabledSteps.length === 0) {
363
+ console.log('\nāš ļø No review steps enabled. Please enable at least one step in codeguard.json');
364
+ return;
365
+ }
366
+ console.log(`\nšŸ“‹ Running ${enabledSteps.length} review step(s): ${enabledSteps.map(s => s.name).join(', ')}`);
367
+ const tmpDir = path.join('reviews', '.tmp');
368
+ if (!fsSync.existsSync(tmpDir)) {
369
+ await fs.mkdir(tmpDir, { recursive: true });
370
+ }
371
+ let stepResults;
372
+ if (globals_1.g.CONFIG.reviewExecutionMode === 'parallel') {
373
+ (0, globals_1.updateSpinner)('šŸ”„ Executing review steps in parallel...');
374
+ const stepPromises = enabledSteps.map(step => {
375
+ const stepOutputPath = path.join('reviews', '.tmp', `step-${step.id}.md`);
376
+ return executeReviewStep(step, filesToReview, stepOutputPath);
377
+ });
378
+ stepResults = await Promise.all(stepPromises);
379
+ }
380
+ else {
381
+ (0, globals_1.updateSpinner)('šŸ”„ Executing review steps sequentially...');
382
+ stepResults = [];
383
+ for (const step of enabledSteps) {
384
+ if (globals_1.g.globalSpinner) {
385
+ globals_1.g.globalSpinner.text = `šŸ” Running ${step.name} review step...`;
386
+ }
387
+ const stepOutputPath = path.join('reviews', '.tmp', `step-${step.id}.md`);
388
+ const result = await executeReviewStep(step, filesToReview, stepOutputPath);
389
+ stepResults.push(result);
390
+ if (globals_1.g.globalSpinner && result.success) {
391
+ globals_1.g.globalSpinner.text = `${step.name} review completed`;
392
+ await new Promise(resolve => setTimeout(resolve, 200));
393
+ }
394
+ }
395
+ }
396
+ await mergeReviewResults(stepResults, filesToReview, reviewFilePath);
397
+ (0, globals_1.stopSpinner)();
398
+ const successCount = stepResults.filter(r => r.success).length;
399
+ const failCount = stepResults.filter(r => !r.success).length;
400
+ console.log(`\nāœ… Review complete: ${successCount} step(s) succeeded${failCount > 0 ? `, ${failCount} failed` : ''}`);
401
+ }
402
+ //# sourceMappingURL=reviewer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewer.js","sourceRoot":"","sources":["../src/reviewer.ts"],"names":[],"mappings":";;AAcA,gDA2EC;AAkUD,8DA0DC;AArdD,kCAAmC;AACnC,6BAA8B;AAC9B,6BAA8B;AAC9B,uCAA0D;AAC1D,6BAAwD;AACxD,iDAA6C;AAC7C,uDAA0D;AAC1D,+BAAgE;AAIhE;;GAEG;AACI,KAAK,UAAU,kBAAkB;IACtC,IAAA,uBAAa,EAAC,uCAAuC,CAAC,CAAC;IAEvD,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,IAAA,gBAAU,GAAE,CAAC;QAE/C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,IAAA,qBAAW,GAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QAED,WAAC,CAAC,aAAa,CAAC,IAAI,GAAG,oBAAoB,KAAK,CAAC,MAAM,oBAAoB,CAAC;QAC5E,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAEvD,MAAM,aAAa,GAAiE,EAAE,CAAC;QAEvF,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;YAEpC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjC,IAAA,uBAAa,EAAC,gBAAgB,QAAQ,mBAAmB,CAAC,CAAC;gBAC3D,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;gBACvD,SAAS;YACX,CAAC;YAED,IAAA,uBAAa,EAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;YAE3C,MAAM,gBAAgB,GAAG,MAAM,IAAA,iCAA2B,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAE3E,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClC,WAAC,CAAC,aAAa,CAAC,IAAI,GAAG,wCAAwC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzF,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;gBACvD,SAAS;YACX,CAAC;YAED,WAAC,CAAC,aAAa,CAAC,IAAI,GAAG,SAAS,gBAAgB,CAAC,MAAM,2BAA2B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5G,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;YAEvD,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,yBAAyB,CAAC,aAAa,CAAC,CAAC;YAE/C,IAAA,qBAAW,GAAE,CAAC;YAEd,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,qBAAqB,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,uBAAuB,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACpG,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAE3B,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,OAAO,KAAK,sBAAsB,EAAE,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC/C,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAC5B,IAAgB,EAChB,aAA2E,EAC3E,cAAsB;IAEtB,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACzC,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAErF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAChF,IAAI,cAAsB,CAAC;IAE3B,IAAI,CAAC;QACH,cAAc,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACzD,IAAI,WAAC,CAAC,aAAa,IAAI,WAAC,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;YAClD,WAAC,CAAC,aAAa,CAAC,IAAI,GAAG,sBAAsB,IAAI,CAAC,OAAO,EAAE,CAAC;YAC5D,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAA,qBAAW,GAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,oCAAoC,WAAW,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,4CAA4C,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1E,cAAc,GAAG,8BAA8B,IAAI,CAAC,IAAI,qCAAqC,CAAC;IAChG,CAAC;IAED,OAAO,8EAA8E,IAAI,CAAC,IAAI;;;gBAGhF,IAAI,CAAC,IAAI;YACb,IAAI,CAAC,QAAQ;uBACF,aAAa,CAAC,MAAM;2BAChB,cAAc;;;EAGvC,YAAY;;;;EAIZ,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ;;EAExC,CAAC,CAAC,IAAI;;CAEP,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;yCAG4B,IAAI,CAAC,IAAI;;;;;;;;;;;;;;;;mCAgBf,IAAI,CAAC,IAAI;;;;IAIxC,cAAc;;gGAE8E,IAAI,CAAC,IAAI;;;;iDAIxD,cAAc;;;;;;;IAO3D,IAAI,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCA4CmB,IAAI,CAAC,IAAI;;;;;;kBAMvB,IAAI,CAAC,IAAI;;;sCAGW,cAAc;;;;;;;mEAOe,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAC9B,IAAgB,EAChB,aAA2E,EAC3E,cAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;QAE1E,MAAM,QAAQ,GAAc;YAC1B;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,MAAM;aAChB;SACF,CAAC;QAEF,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,aAAa,GAAG,EAAE,CAAC;QACzB,IAAI,aAAa,GAAG,KAAK,CAAC;QAE1B,OAAO,UAAU,GAAG,aAAa,EAAE,CAAC;YAClC,UAAU,EAAE,CAAC;YAEb,MAAM,QAAQ,GAAG,MAAM,IAAA,WAAM,EAAC,QAAQ,EAAE,uCAAqB,EAAE,WAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAEpF,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACrB,MAAM,OAAO,GAAG,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC3G,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;gBAE9C,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;oBACjF,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC;oBAC/D,IAAI,aAAa,EAAE,CAAC;wBAClB,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3D,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM;gBACR,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,qDAAqD,IAAI,CAAC,IAAI,cAAc,cAAc,gEAAgE;iBACpK,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,MAAM,WAAW,GAAU,EAAE,CAAC;YAC9B,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBAC1C,MAAM,UAAU,GAAG,MAAM,IAAA,0BAAW,EAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACpE,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;gBAE/E,IAAI,QAAQ,CAAC,IAAI,KAAK,cAAc,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;oBAC3D,aAAa,GAAG,IAAI,CAAC;gBACvB,CAAC;YACH,CAAC;YAED,IAAA,6BAAwB,EAAC,WAAC,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,SAAU,EAAE,WAAW,CAAC,CAAC;QAC5F,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,IAAI,gCAAgC,CAAC,CAAC;QACnF,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,IAAI,mBAAmB,CAAC,CAAC;QAClD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IAEjE,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,mBAAmB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACnE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACxF,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,kBAAkB,CAC/B,WAAwF,EACxF,aAA2E,EAC3E,eAAuB;IAEvB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAErF,IAAI,YAAY,GAAG;;YAET,SAAS;;qBAEA,aAAa,CAAC,MAAM;yBAChB,cAAc;;;;;;qBAMlB,aAAa,CAAC,MAAM,iBAAiB,cAAc,2EAA2E,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;EAM5L,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ;iBACzB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;CAIpD,CAAC;IAEA,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;QAE9E,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,IAAI,CAAC;gBACH,IAAI,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;oBACpC,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;oBAE7D,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACtC,IAAI,YAAY,GAAG,CAAC,CAAC;oBACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBACtC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;4BAC9B,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC;4BACrB,MAAM;wBACR,CAAC;oBACH,CAAC;oBACD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;oBAE5D,YAAY,IAAI,MAAM,MAAM,CAAC,QAAQ,OAAO,OAAO,aAAa,CAAC;gBACnE,CAAC;qBAAM,CAAC;oBACN,YAAY,IAAI,MAAM,MAAM,CAAC,QAAQ,0CAA0C,CAAC;gBAClF,CAAC;YACH,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,YAAY,IAAI,MAAM,MAAM,CAAC,QAAQ,gCAAgC,KAAK,CAAC,OAAO,aAAa,CAAC;YAClG,CAAC;QACH,CAAC;aAAM,CAAC;YACN,YAAY,IAAI,MAAM,MAAM,CAAC,QAAQ,iCAAiC,MAAM,CAAC,KAAK,aAAa,CAAC;QAClG,CAAC;IACH,CAAC;IAED,YAAY,IAAI;;;;;CAKjB,CAAC;IAEA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,iCAAiC,eAAe,EAAE,CAAC,CAAC;IAEhE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC5C,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;gBAC5B,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YAC3C,CAAC;YACD,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,wBAAwB;IAC1B,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,yBAAyB,CAC7C,aAA2E;IAE3E,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAE9D,MAAM,YAAY,GAAG,WAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEvE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;QAChG,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,gBAAgB,YAAY,CAAC,MAAM,oBAAoB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE/G,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,WAAwF,CAAC;IAE7F,IAAI,WAAC,CAAC,MAAM,CAAC,mBAAmB,KAAK,UAAU,EAAE,CAAC;QAChD,IAAA,uBAAa,EAAC,0CAA0C,CAAC,CAAC;QAE1D,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC3C,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;YAC1E,OAAO,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,IAAA,uBAAa,EAAC,2CAA2C,CAAC,CAAC;QAE3D,WAAW,GAAG,EAAE,CAAC;QACjB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,IAAI,WAAC,CAAC,aAAa,EAAE,CAAC;gBACpB,WAAC,CAAC,aAAa,CAAC,IAAI,GAAG,cAAc,IAAI,CAAC,IAAI,iBAAiB,CAAC;YAClE,CAAC;YAED,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;YAC1E,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;YAC5E,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEzB,IAAI,WAAC,CAAC,aAAa,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACtC,WAAC,CAAC,aAAa,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,mBAAmB,CAAC;gBACvD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,kBAAkB,CAAC,WAAW,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;IAErE,IAAA,qBAAW,GAAE,CAAC;IAEd,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAC/D,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAE7D,OAAO,CAAC,GAAG,CAAC,wBAAwB,YAAY,qBAAqB,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACvH,CAAC"}
@@ -0,0 +1,24 @@
1
+ export declare function listFilesRecursive(dir: string, fileList?: string[]): Promise<string[]>;
2
+ export declare function getTestFilePath(sourceFile: string): string;
3
+ export declare function generateTests(sourceFile: string): Promise<string>;
4
+ export declare function promptUser(question: string): Promise<string>;
5
+ export declare function generateTestsForFolder(): Promise<void>;
6
+ /**
7
+ * Generate tests for a single function
8
+ * @returns true if tests passed, false if legitimate failure reported
9
+ */
10
+ export declare function generateTestForSingleFunction(sourceFile: string, functionName: string, testFilePath: string, testFileExists: boolean): Promise<boolean>;
11
+ /**
12
+ * Smart validation that fixes failing tests
13
+ */
14
+ export declare function smartValidateTestSuite(sourceFile: string, testFilePath: string, functionNames: string[]): Promise<void>;
15
+ /**
16
+ * Fix failing tests using AI
17
+ */
18
+ export declare function fixFailingTests(sourceFile: string, testFilePath: string, functionNames: string[], failingTests: string[], fullSuiteOutput: string): Promise<void>;
19
+ /**
20
+ * Generate tests for multiple functions, one at a time
21
+ */
22
+ export declare function generateTestsForFunctions(sourceFile: string, functionNames: string[]): Promise<string>;
23
+ export declare function generateTestsForFunction(): Promise<void>;
24
+ //# sourceMappingURL=testGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testGenerator.d.ts","sourceRoot":"","sources":["../src/testGenerator.ts"],"names":[],"mappings":"AAeA,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAmChG;AAGD,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA0B1D;AAMD,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBvE;AAMD,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYlE;AAoBD,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuD5D;AAMD;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,OAAO,GACtB,OAAO,CAAC,OAAO,CAAC,CAkvBlB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CAkCf;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EAAE,EACvB,YAAY,EAAE,MAAM,EAAE,EACtB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,IAAI,CAAC,CAoFf;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAqD5G;AAED,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CAmE9D"}