test-genie-mcp 2.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 (102) hide show
  1. package/README.md +219 -0
  2. package/dist/analyzers/astAnalyzer.d.ts +108 -0
  3. package/dist/analyzers/astAnalyzer.d.ts.map +1 -0
  4. package/dist/analyzers/astAnalyzer.js +800 -0
  5. package/dist/analyzers/astAnalyzer.js.map +1 -0
  6. package/dist/analyzers/performanceAnalyzer.d.ts +90 -0
  7. package/dist/analyzers/performanceAnalyzer.d.ts.map +1 -0
  8. package/dist/analyzers/performanceAnalyzer.js +647 -0
  9. package/dist/analyzers/performanceAnalyzer.js.map +1 -0
  10. package/dist/index.d.ts +3 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +683 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/platforms/android/index.d.ts +90 -0
  15. package/dist/platforms/android/index.d.ts.map +1 -0
  16. package/dist/platforms/android/index.js +519 -0
  17. package/dist/platforms/android/index.js.map +1 -0
  18. package/dist/platforms/flutter/index.d.ts +105 -0
  19. package/dist/platforms/flutter/index.d.ts.map +1 -0
  20. package/dist/platforms/flutter/index.js +533 -0
  21. package/dist/platforms/flutter/index.js.map +1 -0
  22. package/dist/platforms/ios/index.d.ts +79 -0
  23. package/dist/platforms/ios/index.d.ts.map +1 -0
  24. package/dist/platforms/ios/index.js +393 -0
  25. package/dist/platforms/ios/index.js.map +1 -0
  26. package/dist/platforms/react-native/index.d.ts +160 -0
  27. package/dist/platforms/react-native/index.d.ts.map +1 -0
  28. package/dist/platforms/react-native/index.js +602 -0
  29. package/dist/platforms/react-native/index.js.map +1 -0
  30. package/dist/platforms/web/index.d.ts +177 -0
  31. package/dist/platforms/web/index.d.ts.map +1 -0
  32. package/dist/platforms/web/index.js +637 -0
  33. package/dist/platforms/web/index.js.map +1 -0
  34. package/dist/storage/index.d.ts +35 -0
  35. package/dist/storage/index.d.ts.map +1 -0
  36. package/dist/storage/index.js +351 -0
  37. package/dist/storage/index.js.map +1 -0
  38. package/dist/tools/analysis/analyzeAppStructure.d.ts +9 -0
  39. package/dist/tools/analysis/analyzeAppStructure.d.ts.map +1 -0
  40. package/dist/tools/analysis/analyzeAppStructure.js +289 -0
  41. package/dist/tools/analysis/analyzeAppStructure.js.map +1 -0
  42. package/dist/tools/analysis/createTestPlan.d.ts +21 -0
  43. package/dist/tools/analysis/createTestPlan.d.ts.map +1 -0
  44. package/dist/tools/analysis/createTestPlan.js +214 -0
  45. package/dist/tools/analysis/createTestPlan.js.map +1 -0
  46. package/dist/tools/analysis/generateScenarios.d.ts +21 -0
  47. package/dist/tools/analysis/generateScenarios.d.ts.map +1 -0
  48. package/dist/tools/analysis/generateScenarios.js +567 -0
  49. package/dist/tools/analysis/generateScenarios.js.map +1 -0
  50. package/dist/tools/automation/cicdIntegration.d.ts +41 -0
  51. package/dist/tools/automation/cicdIntegration.d.ts.map +1 -0
  52. package/dist/tools/automation/cicdIntegration.js +825 -0
  53. package/dist/tools/automation/cicdIntegration.js.map +1 -0
  54. package/dist/tools/automation/generateReport.d.ts +16 -0
  55. package/dist/tools/automation/generateReport.d.ts.map +1 -0
  56. package/dist/tools/automation/generateReport.js +406 -0
  57. package/dist/tools/automation/generateReport.js.map +1 -0
  58. package/dist/tools/automation/runFullAutomation.d.ts +25 -0
  59. package/dist/tools/automation/runFullAutomation.d.ts.map +1 -0
  60. package/dist/tools/automation/runFullAutomation.js +296 -0
  61. package/dist/tools/automation/runFullAutomation.js.map +1 -0
  62. package/dist/tools/detection/detectLogicErrors.d.ts +18 -0
  63. package/dist/tools/detection/detectLogicErrors.d.ts.map +1 -0
  64. package/dist/tools/detection/detectLogicErrors.js +470 -0
  65. package/dist/tools/detection/detectLogicErrors.js.map +1 -0
  66. package/dist/tools/detection/detectMemoryLeaks.d.ts +23 -0
  67. package/dist/tools/detection/detectMemoryLeaks.d.ts.map +1 -0
  68. package/dist/tools/detection/detectMemoryLeaks.js +453 -0
  69. package/dist/tools/detection/detectMemoryLeaks.js.map +1 -0
  70. package/dist/tools/execution/runScenarioTest.d.ts +34 -0
  71. package/dist/tools/execution/runScenarioTest.d.ts.map +1 -0
  72. package/dist/tools/execution/runScenarioTest.js +334 -0
  73. package/dist/tools/execution/runScenarioTest.js.map +1 -0
  74. package/dist/tools/execution/runSimulation.d.ts +17 -0
  75. package/dist/tools/execution/runSimulation.d.ts.map +1 -0
  76. package/dist/tools/execution/runSimulation.js +250 -0
  77. package/dist/tools/execution/runSimulation.js.map +1 -0
  78. package/dist/tools/execution/runStressTest.d.ts +52 -0
  79. package/dist/tools/execution/runStressTest.d.ts.map +1 -0
  80. package/dist/tools/execution/runStressTest.js +176 -0
  81. package/dist/tools/execution/runStressTest.js.map +1 -0
  82. package/dist/tools/fixing/applyFix.d.ts +44 -0
  83. package/dist/tools/fixing/applyFix.d.ts.map +1 -0
  84. package/dist/tools/fixing/applyFix.js +399 -0
  85. package/dist/tools/fixing/applyFix.js.map +1 -0
  86. package/dist/tools/fixing/confirmFix.d.ts +31 -0
  87. package/dist/tools/fixing/confirmFix.d.ts.map +1 -0
  88. package/dist/tools/fixing/confirmFix.js +136 -0
  89. package/dist/tools/fixing/confirmFix.js.map +1 -0
  90. package/dist/tools/fixing/suggestFixes.d.ts +23 -0
  91. package/dist/tools/fixing/suggestFixes.d.ts.map +1 -0
  92. package/dist/tools/fixing/suggestFixes.js +349 -0
  93. package/dist/tools/fixing/suggestFixes.js.map +1 -0
  94. package/dist/types.d.ts +322 -0
  95. package/dist/types.d.ts.map +1 -0
  96. package/dist/types.js +6 -0
  97. package/dist/types.js.map +1 -0
  98. package/dist/utils/codeParser.d.ts +12 -0
  99. package/dist/utils/codeParser.d.ts.map +1 -0
  100. package/dist/utils/codeParser.js +487 -0
  101. package/dist/utils/codeParser.js.map +1 -0
  102. package/package.json +68 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/platforms/android/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ export interface FlutterDevice {
2
+ id: string;
3
+ name: string;
4
+ platform: 'android' | 'ios' | 'web' | 'macos' | 'windows' | 'linux';
5
+ emulator: boolean;
6
+ }
7
+ export interface FlutterTestConfig {
8
+ projectPath: string;
9
+ testPath?: string;
10
+ device?: string;
11
+ flavor?: string;
12
+ coverage?: boolean;
13
+ reporter?: 'compact' | 'expanded' | 'json';
14
+ timeout?: number;
15
+ }
16
+ export declare function listDevices(): Promise<FlutterDevice[]>;
17
+ export declare function runEmulator(platform: 'android' | 'ios'): Promise<boolean>;
18
+ export declare function runFlutterTest(config: FlutterTestConfig): Promise<{
19
+ success: boolean;
20
+ output: string;
21
+ tests: {
22
+ name: string;
23
+ passed: boolean;
24
+ duration: number;
25
+ error?: string;
26
+ }[];
27
+ coverage?: number;
28
+ }>;
29
+ export declare function runIntegrationTest(config: FlutterTestConfig & {
30
+ driver?: string;
31
+ target?: string;
32
+ }): Promise<{
33
+ success: boolean;
34
+ output: string;
35
+ screenshots: string[];
36
+ duration: number;
37
+ performanceMetrics?: Record<string, number>;
38
+ }>;
39
+ export declare function runGoldenTests(config: FlutterTestConfig & {
40
+ updateGoldens?: boolean;
41
+ }): Promise<{
42
+ success: boolean;
43
+ output: string;
44
+ mismatches: {
45
+ name: string;
46
+ diffPath: string;
47
+ }[];
48
+ }>;
49
+ export interface FlutterProfileConfig {
50
+ projectPath: string;
51
+ device?: string;
52
+ duration: number;
53
+ target?: string;
54
+ }
55
+ export declare function runPerformanceProfile(config: FlutterProfileConfig): Promise<{
56
+ success: boolean;
57
+ tracePath: string;
58
+ metrics: {
59
+ avgFPS: number;
60
+ worstFPS: number;
61
+ avgFrameBuildTime: number;
62
+ avgFrameRasterTime: number;
63
+ jankFrames: number;
64
+ memoryMB: number;
65
+ };
66
+ }>;
67
+ export declare function analyzeMemory(config: {
68
+ projectPath: string;
69
+ device?: string;
70
+ duration: number;
71
+ }): Promise<{
72
+ success: boolean;
73
+ heapUsage: {
74
+ time: number;
75
+ usedMB: number;
76
+ capacityMB: number;
77
+ }[];
78
+ leaks: string[];
79
+ recommendations: string[];
80
+ }>;
81
+ export declare function buildApp(projectPath: string, platform: 'apk' | 'appbundle' | 'ios' | 'ipa' | 'web', options?: {
82
+ release?: boolean;
83
+ flavor?: string;
84
+ target?: string;
85
+ }): Promise<{
86
+ success: boolean;
87
+ outputPath: string;
88
+ output: string;
89
+ }>;
90
+ export declare function installApp(device: string, appPath: string): Promise<boolean>;
91
+ export declare function takeScreenshot(device: string, outputPath: string): Promise<boolean>;
92
+ declare const _default: {
93
+ listDevices: typeof listDevices;
94
+ runEmulator: typeof runEmulator;
95
+ runFlutterTest: typeof runFlutterTest;
96
+ runIntegrationTest: typeof runIntegrationTest;
97
+ runGoldenTests: typeof runGoldenTests;
98
+ runPerformanceProfile: typeof runPerformanceProfile;
99
+ analyzeMemory: typeof analyzeMemory;
100
+ buildApp: typeof buildApp;
101
+ installApp: typeof installApp;
102
+ takeScreenshot: typeof takeScreenshot;
103
+ };
104
+ export default _default;
105
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/platforms/flutter/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,533 @@
1
+ "use strict";
2
+ // ============================================
3
+ // Flutter Test Platform Integration
4
+ // flutter_test, flutter drive, integration_test
5
+ // ============================================
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.listDevices = listDevices;
41
+ exports.runEmulator = runEmulator;
42
+ exports.runFlutterTest = runFlutterTest;
43
+ exports.runIntegrationTest = runIntegrationTest;
44
+ exports.runGoldenTests = runGoldenTests;
45
+ exports.runPerformanceProfile = runPerformanceProfile;
46
+ exports.analyzeMemory = analyzeMemory;
47
+ exports.buildApp = buildApp;
48
+ exports.installApp = installApp;
49
+ exports.takeScreenshot = takeScreenshot;
50
+ const child_process_1 = require("child_process");
51
+ const util_1 = require("util");
52
+ const fs = __importStar(require("fs"));
53
+ const path = __importStar(require("path"));
54
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
55
+ // ============================================
56
+ // Device Management
57
+ // ============================================
58
+ async function listDevices() {
59
+ try {
60
+ const { stdout } = await execAsync('flutter devices --machine');
61
+ const devices = JSON.parse(stdout);
62
+ return devices.map((d) => ({
63
+ id: d.id,
64
+ name: d.name,
65
+ platform: d.targetPlatform?.split('.')[1] || 'unknown',
66
+ emulator: d.emulator || false,
67
+ }));
68
+ }
69
+ catch (error) {
70
+ console.error('Failed to list Flutter devices:', error);
71
+ return [];
72
+ }
73
+ }
74
+ async function runEmulator(platform) {
75
+ try {
76
+ if (platform === 'android') {
77
+ await execAsync('flutter emulators --launch flutter_emulator');
78
+ }
79
+ else {
80
+ await execAsync('open -a Simulator');
81
+ }
82
+ // Wait for emulator to boot
83
+ await new Promise(resolve => setTimeout(resolve, 10000));
84
+ return true;
85
+ }
86
+ catch {
87
+ return false;
88
+ }
89
+ }
90
+ // ============================================
91
+ // Unit & Widget Tests (flutter test)
92
+ // ============================================
93
+ async function runFlutterTest(config) {
94
+ const { projectPath, testPath = 'test', coverage = false, reporter = 'json', timeout = 300000, } = config;
95
+ const coverageArg = coverage ? '--coverage' : '';
96
+ const reporterArg = `--reporter=${reporter}`;
97
+ const command = `cd "${projectPath}" && flutter test ${testPath} ${coverageArg} ${reporterArg} 2>&1`;
98
+ try {
99
+ const { stdout } = await execAsync(command, { timeout, maxBuffer: 50 * 1024 * 1024 });
100
+ const tests = parseFlutterTestOutput(stdout, reporter);
101
+ const allPassed = tests.every(t => t.passed);
102
+ let coveragePercent;
103
+ if (coverage) {
104
+ coveragePercent = await getFlutterCoverage(projectPath);
105
+ }
106
+ return {
107
+ success: allPassed,
108
+ output: stdout,
109
+ tests,
110
+ coverage: coveragePercent,
111
+ };
112
+ }
113
+ catch (error) {
114
+ return {
115
+ success: false,
116
+ output: error.stdout || error.message,
117
+ tests: parseFlutterTestOutput(error.stdout || '', reporter),
118
+ };
119
+ }
120
+ }
121
+ function parseFlutterTestOutput(output, reporter) {
122
+ const tests = [];
123
+ if (reporter === 'json') {
124
+ // Parse JSON lines
125
+ const lines = output.split('\n').filter(l => l.trim().startsWith('{'));
126
+ for (const line of lines) {
127
+ try {
128
+ const event = JSON.parse(line);
129
+ if (event.type === 'testDone') {
130
+ tests.push({
131
+ name: event.name || `Test ${event.testID}`,
132
+ passed: event.result === 'success',
133
+ duration: event.time || 0,
134
+ error: event.result !== 'success' ? event.error : undefined,
135
+ });
136
+ }
137
+ }
138
+ catch {
139
+ // Skip invalid JSON lines
140
+ }
141
+ }
142
+ }
143
+ else {
144
+ // Parse expanded/compact format
145
+ const testRegex = /(\d+:\d+)\s+(\+\d+(?:\s+-\d+)?)?:\s+(.*?)(?:\s+\((\d+)ms\))?$/gm;
146
+ let match;
147
+ while ((match = testRegex.exec(output)) !== null) {
148
+ const statusPart = match[2] || '';
149
+ const passed = !statusPart.includes('-');
150
+ tests.push({
151
+ name: match[3]?.trim() || 'Unknown',
152
+ passed,
153
+ duration: parseInt(match[4] || '0'),
154
+ });
155
+ }
156
+ }
157
+ return tests;
158
+ }
159
+ async function getFlutterCoverage(projectPath) {
160
+ try {
161
+ const lcovPath = path.join(projectPath, 'coverage', 'lcov.info');
162
+ if (!fs.existsSync(lcovPath)) {
163
+ return undefined;
164
+ }
165
+ const content = fs.readFileSync(lcovPath, 'utf-8');
166
+ let totalLines = 0;
167
+ let coveredLines = 0;
168
+ const lines = content.split('\n');
169
+ for (const line of lines) {
170
+ if (line.startsWith('LF:')) {
171
+ totalLines += parseInt(line.substring(3)) || 0;
172
+ }
173
+ else if (line.startsWith('LH:')) {
174
+ coveredLines += parseInt(line.substring(3)) || 0;
175
+ }
176
+ }
177
+ return totalLines > 0 ? Math.round((coveredLines / totalLines) * 100) : undefined;
178
+ }
179
+ catch {
180
+ return undefined;
181
+ }
182
+ }
183
+ // ============================================
184
+ // Integration Tests (flutter drive / integration_test)
185
+ // ============================================
186
+ async function runIntegrationTest(config) {
187
+ const { projectPath, device, driver = 'test_driver/integration_test.dart', target = 'integration_test/app_test.dart', timeout = 600000, } = config;
188
+ const deviceArg = device ? `-d ${device}` : '';
189
+ const screenshotDir = path.join(projectPath, '.test-genie', 'screenshots', `integration_${Date.now()}`);
190
+ if (!fs.existsSync(screenshotDir)) {
191
+ fs.mkdirSync(screenshotDir, { recursive: true });
192
+ }
193
+ // Check if using new integration_test package or old flutter_driver
194
+ const useNewIntegration = fs.existsSync(path.join(projectPath, 'integration_test'));
195
+ let command;
196
+ if (useNewIntegration) {
197
+ command = `cd "${projectPath}" && flutter test integration_test ${deviceArg} 2>&1`;
198
+ }
199
+ else {
200
+ command = `cd "${projectPath}" && flutter drive --driver=${driver} --target=${target} ${deviceArg} 2>&1`;
201
+ }
202
+ const startTime = Date.now();
203
+ try {
204
+ const { stdout } = await execAsync(command, { timeout, maxBuffer: 50 * 1024 * 1024 });
205
+ // Extract performance metrics if available
206
+ const performanceMetrics = extractPerformanceMetrics(stdout);
207
+ // Get screenshots from the directory
208
+ const screenshots = fs.existsSync(screenshotDir)
209
+ ? fs.readdirSync(screenshotDir).map(f => path.join(screenshotDir, f))
210
+ : [];
211
+ return {
212
+ success: !stdout.includes('FAILED') && !stdout.includes('Some tests failed'),
213
+ output: stdout,
214
+ screenshots,
215
+ duration: Date.now() - startTime,
216
+ performanceMetrics,
217
+ };
218
+ }
219
+ catch (error) {
220
+ return {
221
+ success: false,
222
+ output: error.stdout || error.message,
223
+ screenshots: [],
224
+ duration: Date.now() - startTime,
225
+ };
226
+ }
227
+ }
228
+ function extractPerformanceMetrics(output) {
229
+ const metrics = {};
230
+ // Parse timeline summary if available
231
+ const avgFrameMatch = output.match(/Average frame build time:\s*([\d.]+)ms/);
232
+ if (avgFrameMatch) {
233
+ metrics['avgFrameBuildTime'] = parseFloat(avgFrameMatch[1] || '0');
234
+ }
235
+ const worstFrameMatch = output.match(/Worst frame build time:\s*([\d.]+)ms/);
236
+ if (worstFrameMatch) {
237
+ metrics['worstFrameBuildTime'] = parseFloat(worstFrameMatch[1] || '0');
238
+ }
239
+ const missedFramesMatch = output.match(/Missed frames:\s*(\d+)/);
240
+ if (missedFramesMatch) {
241
+ metrics['missedFrames'] = parseInt(missedFramesMatch[1] || '0');
242
+ }
243
+ return metrics;
244
+ }
245
+ // ============================================
246
+ // Golden Tests (Snapshot Testing)
247
+ // ============================================
248
+ async function runGoldenTests(config) {
249
+ const { projectPath, testPath = 'test', updateGoldens = false, timeout = 300000, } = config;
250
+ const updateArg = updateGoldens ? '--update-goldens' : '';
251
+ const command = `cd "${projectPath}" && flutter test ${testPath} ${updateArg} --tags=golden 2>&1`;
252
+ try {
253
+ const { stdout } = await execAsync(command, { timeout, maxBuffer: 50 * 1024 * 1024 });
254
+ const mismatches = parseGoldenMismatches(stdout, projectPath);
255
+ return {
256
+ success: mismatches.length === 0,
257
+ output: stdout,
258
+ mismatches,
259
+ };
260
+ }
261
+ catch (error) {
262
+ return {
263
+ success: false,
264
+ output: error.stdout || error.message,
265
+ mismatches: parseGoldenMismatches(error.stdout || '', projectPath),
266
+ };
267
+ }
268
+ }
269
+ function parseGoldenMismatches(output, projectPath) {
270
+ const mismatches = [];
271
+ const mismatchRegex = /Golden file\s+([^\s]+)\s+does not match/g;
272
+ let match;
273
+ while ((match = mismatchRegex.exec(output)) !== null) {
274
+ const goldenName = match[1] || '';
275
+ const diffPath = path.join(projectPath, 'test', 'failures', `${goldenName}_diff.png`);
276
+ mismatches.push({
277
+ name: goldenName,
278
+ diffPath: fs.existsSync(diffPath) ? diffPath : '',
279
+ });
280
+ }
281
+ return mismatches;
282
+ }
283
+ async function runPerformanceProfile(config) {
284
+ const { projectPath, device, duration, target = 'lib/main.dart', } = config;
285
+ const deviceArg = device ? `-d ${device}` : '';
286
+ const tracePath = path.join(projectPath, '.test-genie', 'traces', `profile_${Date.now()}.json`);
287
+ const traceDir = path.dirname(tracePath);
288
+ if (!fs.existsSync(traceDir)) {
289
+ fs.mkdirSync(traceDir, { recursive: true });
290
+ }
291
+ // Run with profiling
292
+ const command = `cd "${projectPath}" && flutter run --profile ${deviceArg} --trace-startup --endless-trace-buffer 2>&1`;
293
+ try {
294
+ // Start the app
295
+ const process = (0, child_process_1.exec)(command);
296
+ let output = '';
297
+ process.stdout?.on('data', (data) => {
298
+ output += data;
299
+ });
300
+ // Wait for specified duration
301
+ await new Promise(resolve => setTimeout(resolve, duration * 1000));
302
+ // Send 'q' to quit and get trace
303
+ process.stdin?.write('P'); // Capture performance overlay
304
+ await new Promise(resolve => setTimeout(resolve, 2000));
305
+ process.stdin?.write('q');
306
+ await new Promise((resolve) => {
307
+ process.on('exit', () => resolve());
308
+ setTimeout(() => {
309
+ process.kill();
310
+ resolve();
311
+ }, 5000);
312
+ });
313
+ // Parse metrics from output
314
+ const metrics = parsePerformanceOutput(output);
315
+ return {
316
+ success: true,
317
+ tracePath,
318
+ metrics,
319
+ };
320
+ }
321
+ catch (error) {
322
+ return {
323
+ success: false,
324
+ tracePath,
325
+ metrics: {
326
+ avgFPS: 0,
327
+ worstFPS: 0,
328
+ avgFrameBuildTime: 0,
329
+ avgFrameRasterTime: 0,
330
+ jankFrames: 0,
331
+ memoryMB: 0,
332
+ },
333
+ };
334
+ }
335
+ }
336
+ function parsePerformanceOutput(output) {
337
+ const metrics = {
338
+ avgFPS: 60,
339
+ worstFPS: 60,
340
+ avgFrameBuildTime: 0,
341
+ avgFrameRasterTime: 0,
342
+ jankFrames: 0,
343
+ memoryMB: 0,
344
+ };
345
+ // Parse DevTools-style metrics
346
+ const fpsMatch = output.match(/(\d+)\s*fps/i);
347
+ if (fpsMatch) {
348
+ metrics.avgFPS = parseInt(fpsMatch[1] || '60');
349
+ }
350
+ const memoryMatch = output.match(/Memory:\s*([\d.]+)\s*MB/i);
351
+ if (memoryMatch) {
352
+ metrics.memoryMB = parseFloat(memoryMatch[1] || '0');
353
+ }
354
+ const buildTimeMatch = output.match(/Build:\s*([\d.]+)ms/);
355
+ if (buildTimeMatch) {
356
+ metrics.avgFrameBuildTime = parseFloat(buildTimeMatch[1] || '0');
357
+ }
358
+ const rasterTimeMatch = output.match(/Raster:\s*([\d.]+)ms/);
359
+ if (rasterTimeMatch) {
360
+ metrics.avgFrameRasterTime = parseFloat(rasterTimeMatch[1] || '0');
361
+ }
362
+ return metrics;
363
+ }
364
+ // ============================================
365
+ // Memory Analysis
366
+ // ============================================
367
+ async function analyzeMemory(config) {
368
+ const { projectPath, device, duration } = config;
369
+ const deviceArg = device ? `-d ${device}` : '';
370
+ const command = `cd "${projectPath}" && flutter run --profile ${deviceArg} 2>&1`;
371
+ const heapUsage = [];
372
+ const startTime = Date.now();
373
+ try {
374
+ const process = (0, child_process_1.exec)(command);
375
+ let output = '';
376
+ process.stdout?.on('data', (data) => {
377
+ output += data;
378
+ // Parse memory info from output
379
+ const memMatch = data.toString().match(/Memory usage:\s*([\d.]+)\s*MB\s*\/\s*([\d.]+)\s*MB/);
380
+ if (memMatch) {
381
+ heapUsage.push({
382
+ time: Date.now() - startTime,
383
+ usedMB: parseFloat(memMatch[1] || '0'),
384
+ capacityMB: parseFloat(memMatch[2] || '0'),
385
+ });
386
+ }
387
+ });
388
+ // Monitor for specified duration
389
+ await new Promise(resolve => setTimeout(resolve, duration * 1000));
390
+ process.stdin?.write('q');
391
+ await new Promise((resolve) => {
392
+ process.on('exit', () => resolve());
393
+ setTimeout(() => {
394
+ process.kill();
395
+ resolve();
396
+ }, 5000);
397
+ });
398
+ // Analyze for potential leaks
399
+ const { leaks, recommendations } = analyzeHeapPattern(heapUsage);
400
+ return {
401
+ success: true,
402
+ heapUsage,
403
+ leaks,
404
+ recommendations,
405
+ };
406
+ }
407
+ catch (error) {
408
+ return {
409
+ success: false,
410
+ heapUsage,
411
+ leaks: [],
412
+ recommendations: [],
413
+ };
414
+ }
415
+ }
416
+ function analyzeHeapPattern(heapUsage) {
417
+ const leaks = [];
418
+ const recommendations = [];
419
+ if (heapUsage.length < 2) {
420
+ return { leaks, recommendations };
421
+ }
422
+ // Check for continuous memory growth
423
+ let growthCount = 0;
424
+ for (let i = 1; i < heapUsage.length; i++) {
425
+ const prev = heapUsage[i - 1];
426
+ const curr = heapUsage[i];
427
+ if (prev && curr && curr.usedMB > prev.usedMB) {
428
+ growthCount++;
429
+ }
430
+ }
431
+ const growthRatio = growthCount / (heapUsage.length - 1);
432
+ if (growthRatio > 0.8) {
433
+ leaks.push('Continuous memory growth detected - potential memory leak');
434
+ recommendations.push('Review dispose() implementations in StatefulWidgets');
435
+ recommendations.push('Check for proper StreamSubscription cancellation');
436
+ recommendations.push('Verify AnimationController disposal');
437
+ }
438
+ // Check for high memory usage
439
+ const maxUsage = Math.max(...heapUsage.map(h => h.usedMB));
440
+ if (maxUsage > 500) {
441
+ recommendations.push('High memory usage detected - consider lazy loading');
442
+ recommendations.push('Review image caching strategy');
443
+ }
444
+ return { leaks, recommendations };
445
+ }
446
+ // ============================================
447
+ // App Build & Installation
448
+ // ============================================
449
+ async function buildApp(projectPath, platform, options) {
450
+ const { release = true, flavor, target } = options || {};
451
+ const modeArg = release ? '--release' : '--debug';
452
+ const flavorArg = flavor ? `--flavor ${flavor}` : '';
453
+ const targetArg = target ? `-t ${target}` : '';
454
+ const buildCommand = platform === 'web' ? 'web' : platform;
455
+ const command = `cd "${projectPath}" && flutter build ${buildCommand} ${modeArg} ${flavorArg} ${targetArg} 2>&1`;
456
+ try {
457
+ const { stdout } = await execAsync(command, { timeout: 600000, maxBuffer: 50 * 1024 * 1024 });
458
+ let outputPath = '';
459
+ switch (platform) {
460
+ case 'apk':
461
+ outputPath = path.join(projectPath, 'build', 'app', 'outputs', 'flutter-apk', 'app-release.apk');
462
+ break;
463
+ case 'appbundle':
464
+ outputPath = path.join(projectPath, 'build', 'app', 'outputs', 'bundle', 'release', 'app-release.aab');
465
+ break;
466
+ case 'ios':
467
+ case 'ipa':
468
+ outputPath = path.join(projectPath, 'build', 'ios', 'iphoneos', 'Runner.app');
469
+ break;
470
+ case 'web':
471
+ outputPath = path.join(projectPath, 'build', 'web');
472
+ break;
473
+ }
474
+ return {
475
+ success: stdout.includes('Built') || stdout.includes('build succeeded'),
476
+ outputPath,
477
+ output: stdout,
478
+ };
479
+ }
480
+ catch (error) {
481
+ return {
482
+ success: false,
483
+ outputPath: '',
484
+ output: error.stdout || error.message,
485
+ };
486
+ }
487
+ }
488
+ async function installApp(device, appPath) {
489
+ try {
490
+ await execAsync(`flutter install --device-id=${device} 2>&1`);
491
+ return true;
492
+ }
493
+ catch {
494
+ return false;
495
+ }
496
+ }
497
+ // ============================================
498
+ // Screenshot & Recording
499
+ // ============================================
500
+ async function takeScreenshot(device, outputPath) {
501
+ try {
502
+ // Use platform-specific screenshot command
503
+ const { stdout } = await execAsync('flutter devices --machine');
504
+ const devices = JSON.parse(stdout);
505
+ const targetDevice = devices.find((d) => d.id === device);
506
+ if (!targetDevice) {
507
+ return false;
508
+ }
509
+ if (targetDevice.targetPlatform?.includes('android')) {
510
+ await execAsync(`adb -s ${device} exec-out screencap -p > "${outputPath}"`);
511
+ }
512
+ else if (targetDevice.targetPlatform?.includes('ios')) {
513
+ await execAsync(`xcrun simctl io ${device} screenshot "${outputPath}"`);
514
+ }
515
+ return true;
516
+ }
517
+ catch {
518
+ return false;
519
+ }
520
+ }
521
+ exports.default = {
522
+ listDevices,
523
+ runEmulator,
524
+ runFlutterTest,
525
+ runIntegrationTest,
526
+ runGoldenTests,
527
+ runPerformanceProfile,
528
+ analyzeMemory,
529
+ buildApp,
530
+ installApp,
531
+ takeScreenshot,
532
+ };
533
+ //# sourceMappingURL=index.js.map