@tac0de/flutter-mcp 0.1.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.
@@ -0,0 +1,231 @@
1
+ /**
2
+ * Validate Dart/Flutter code before execution
3
+ * Performs syntax checks, import validation, and common issue detection
4
+ */
5
+ export async function validateDartCode(code, filePath) {
6
+ const result = {
7
+ valid: true,
8
+ errors: [],
9
+ warnings: [],
10
+ suggestions: [],
11
+ metadata: {
12
+ lineCount: 0,
13
+ hasImports: false,
14
+ hasMainFunction: false,
15
+ hasWidgetClass: false,
16
+ estimatedComplexity: "low",
17
+ },
18
+ };
19
+ const lines = code.split("\n");
20
+ result.metadata.lineCount = lines.length;
21
+ // Basic structure validation
22
+ let braceCount = 0;
23
+ let parenCount = 0;
24
+ let inString = false;
25
+ let stringChar = "";
26
+ for (let i = 0; i < lines.length; i++) {
27
+ const line = lines[i];
28
+ const trimmed = line.trim();
29
+ const lineNumber = i + 1;
30
+ // Check for imports
31
+ if (trimmed.startsWith("import ")) {
32
+ result.metadata.hasImports = true;
33
+ // Validate import syntax
34
+ const importMatch = trimmed.match(/import\s+['"]([^'"]+)['"]/);
35
+ if (!importMatch) {
36
+ result.errors.push({
37
+ line: lineNumber,
38
+ column: trimmed.indexOf("import") + 1,
39
+ message: "Invalid import syntax",
40
+ severity: "error",
41
+ code: "INVALID_IMPORT",
42
+ });
43
+ result.valid = false;
44
+ }
45
+ // Check for unused imports warning
46
+ if (trimmed.endsWith(" as")) {
47
+ result.warnings.push({
48
+ line: lineNumber,
49
+ column: trimmed.length,
50
+ message: "Import alias appears incomplete",
51
+ severity: "warning",
52
+ code: "INCOMPLETE_IMPORT_ALIAS",
53
+ });
54
+ }
55
+ }
56
+ // Check for main function
57
+ if (trimmed.includes("void main(") || trimmed.includes("main()")) {
58
+ result.metadata.hasMainFunction = true;
59
+ }
60
+ // Check for widget classes
61
+ if (trimmed.includes("extends StatelessWidget") ||
62
+ trimmed.includes("extends StatefulWidget")) {
63
+ result.metadata.hasWidgetClass = true;
64
+ }
65
+ // Check for class declarations without proper naming
66
+ const classMatch = trimmed.match(/^class\s+(\w+)\s+/);
67
+ if (classMatch) {
68
+ const className = classMatch[1];
69
+ if (!/^[A-Z][a-zA-Z0-9]*$/.test(className)) {
70
+ result.warnings.push({
71
+ line: lineNumber,
72
+ column: trimmed.indexOf(className) + 1,
73
+ message: `Class name '${className}' should start with uppercase letter (PascalCase)`,
74
+ severity: "warning",
75
+ code: "CLASS_NAMING",
76
+ });
77
+ }
78
+ }
79
+ // Check for common issues
80
+ // Missing semicolon (basic check)
81
+ if (trimmed.length > 0 &&
82
+ !trimmed.startsWith("//") &&
83
+ !trimmed.startsWith("/*") &&
84
+ !trimmed.startsWith("*") &&
85
+ !trimmed.endsWith("{") &&
86
+ !trimmed.endsWith("}") &&
87
+ !trimmed.endsWith(";") &&
88
+ !trimmed.includes(" if ") &&
89
+ !trimmed.includes(" for ") &&
90
+ !trimmed.includes(" while ") &&
91
+ !trimmed.includes(" else ") &&
92
+ !trimmed.startsWith("import ") &&
93
+ !trimmed.startsWith("export ") &&
94
+ !trimmed.startsWith("class ") &&
95
+ !trimmed.startsWith("@") &&
96
+ !trimmed.startsWith("return ") &&
97
+ !trimmed.includes("=>") &&
98
+ !trimmed.endsWith(",")) {
99
+ // This is a simple heuristic - may have false positives
100
+ result.warnings.push({
101
+ line: lineNumber,
102
+ column: trimmed.length,
103
+ message: "Statement may be missing a semicolon",
104
+ severity: "info",
105
+ code: "MISSING_SEMICOLON",
106
+ });
107
+ }
108
+ // Check for print statements (should use logging in production)
109
+ if (trimmed.includes("print(") && !trimmed.startsWith("//")) {
110
+ result.suggestions.push(`Consider replacing 'print()' with proper logging on line ${lineNumber}`);
111
+ }
112
+ // Count braces and parentheses for balanced check
113
+ for (const char of line) {
114
+ if (char === '"' || char === "'") {
115
+ if (!inString) {
116
+ inString = true;
117
+ stringChar = char;
118
+ }
119
+ else if (char === stringChar) {
120
+ inString = false;
121
+ }
122
+ }
123
+ if (!inString) {
124
+ if (char === "{")
125
+ braceCount++;
126
+ if (char === "}")
127
+ braceCount--;
128
+ if (char === "(")
129
+ parenCount++;
130
+ if (char === ")")
131
+ parenCount--;
132
+ }
133
+ }
134
+ }
135
+ // Check for unbalanced braces/parentheses
136
+ if (braceCount !== 0) {
137
+ result.errors.push({
138
+ line: 0,
139
+ column: 0,
140
+ message: `Unbalanced braces: ${braceCount > 0 ? "opening" : "closing"} braces not matched`,
141
+ severity: "error",
142
+ code: "UNBALANCED_BRACES",
143
+ });
144
+ result.valid = false;
145
+ }
146
+ if (parenCount !== 0) {
147
+ result.errors.push({
148
+ line: 0,
149
+ column: 0,
150
+ message: `Unbalanced parentheses: ${parenCount > 0 ? "opening" : "closing"} parentheses not matched`,
151
+ severity: "error",
152
+ code: "UNBALANCED_PARENS",
153
+ });
154
+ result.valid = false;
155
+ }
156
+ // Estimate complexity
157
+ const complexityScore = calculateComplexity(code);
158
+ result.metadata.estimatedComplexity = complexityScore;
159
+ // Complexity-based suggestions
160
+ if (complexityScore === "high") {
161
+ result.suggestions.push("Code has high complexity. Consider breaking it into smaller functions or widgets.");
162
+ }
163
+ // File-specific checks
164
+ if (filePath) {
165
+ if (filePath.endsWith("_test.dart") && !result.metadata.hasMainFunction) {
166
+ result.warnings.push({
167
+ line: 0,
168
+ column: 0,
169
+ message: "Test file should contain test functions (using 'test()' or 'group()')",
170
+ severity: "warning",
171
+ code: "NO_TESTS_FOUND",
172
+ });
173
+ }
174
+ if (filePath.endsWith(".dart") && filePath.includes("/lib/") &&
175
+ code.trim().length > 0 && !result.metadata.hasImports) {
176
+ result.suggestions.push("Consider adding imports for better code organization");
177
+ }
178
+ }
179
+ // Empty file check
180
+ if (code.trim().length === 0) {
181
+ result.warnings.push({
182
+ line: 0,
183
+ column: 0,
184
+ message: "File is empty",
185
+ severity: "warning",
186
+ code: "EMPTY_FILE",
187
+ });
188
+ result.valid = false;
189
+ }
190
+ return result;
191
+ }
192
+ /**
193
+ * Calculate code complexity based on various metrics
194
+ */
195
+ function calculateComplexity(code) {
196
+ let score = 0;
197
+ // Count control structures
198
+ const controlStructures = [
199
+ /\bif\s*\(/g,
200
+ /\bfor\s*\(/g,
201
+ /\bwhile\s*\(/g,
202
+ /\bswitch\s*\(/g,
203
+ /\btry\s*{/g,
204
+ /\?\s*[^:]+:/g, // ternary
205
+ ];
206
+ for (const pattern of controlStructures) {
207
+ const matches = code.match(pattern);
208
+ if (matches)
209
+ score += matches.length * 2;
210
+ }
211
+ // Count nested blocks (approximate)
212
+ const maxNesting = code.split("\n").reduce((max, line) => {
213
+ const indent = line.search(/\S|$/);
214
+ const nesting = Math.floor(indent / 2);
215
+ return Math.max(max, nesting);
216
+ }, 0);
217
+ score += maxNesting * 3;
218
+ // Count function declarations
219
+ const functionMatches = code.match(/\b\w+\s*\(/g);
220
+ if (functionMatches)
221
+ score += functionMatches.length;
222
+ // Count lines
223
+ const lineCount = code.split("\n").length;
224
+ score += Math.floor(lineCount / 50);
225
+ if (score < 10)
226
+ return "low";
227
+ if (score < 25)
228
+ return "medium";
229
+ return "high";
230
+ }
231
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/tools/validate.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAY,EACZ,QAAiB;IAcjB,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,EAAuB;QAC/B,QAAQ,EAAE,EAAyB;QACnC,WAAW,EAAE,EAAc;QAC3B,QAAQ,EAAE;YACR,SAAS,EAAE,CAAC;YACZ,UAAU,EAAE,KAAK;YACjB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;YACrB,mBAAmB,EAAE,KAAkC;SACxD;KACF,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,CAAC,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;IAEzC,6BAA6B;IAC7B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,UAAU,GAAG,EAAE,CAAC;IAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;QAEzB,oBAAoB;QACpB,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;YAElC,yBAAyB;YACzB,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/D,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBACjB,IAAI,EAAE,UAAU;oBAChB,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;oBACrC,OAAO,EAAE,uBAAuB;oBAChC,QAAQ,EAAE,OAAO;oBACjB,IAAI,EAAE,gBAAgB;iBACvB,CAAC,CAAC;gBACH,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACvB,CAAC;YAED,mCAAmC;YACnC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACnB,IAAI,EAAE,UAAU;oBAChB,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,OAAO,EAAE,iCAAiC;oBAC1C,QAAQ,EAAE,SAAS;oBACnB,IAAI,EAAE,yBAAyB;iBAChC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjE,MAAM,CAAC,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC;QACzC,CAAC;QAED,2BAA2B;QAC3B,IAAI,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YAC3C,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC;QACxC,CAAC;QAED,qDAAqD;QACrD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACtD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACnB,IAAI,EAAE,UAAU;oBAChB,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC;oBACtC,OAAO,EAAE,eAAe,SAAS,mDAAmD;oBACpF,QAAQ,EAAE,SAAS;oBACnB,IAAI,EAAE,cAAc;iBACrB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,0BAA0B;QAE1B,kCAAkC;QAClC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAClB,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YACzB,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YACzB,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YACxB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;YACtB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;YACtB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;YACtB,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YACzB,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC1B,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC5B,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC3B,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC;YAC9B,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC;YAC9B,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC7B,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YACxB,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC;YAC9B,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;YACvB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,wDAAwD;YACxD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,OAAO,EAAE,sCAAsC;gBAC/C,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,mBAAmB;aAC1B,CAAC,CAAC;QACL,CAAC;QAED,gEAAgE;QAChE,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5D,MAAM,CAAC,WAAW,CAAC,IAAI,CACrB,4DAA4D,UAAU,EAAE,CACzE,CAAC;QACJ,CAAC;QAED,kDAAkD;QAClD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,QAAQ,GAAG,IAAI,CAAC;oBAChB,UAAU,GAAG,IAAI,CAAC;gBACpB,CAAC;qBAAM,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC/B,QAAQ,GAAG,KAAK,CAAC;gBACnB,CAAC;YACH,CAAC;YAED,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,IAAI,IAAI,KAAK,GAAG;oBAAE,UAAU,EAAE,CAAC;gBAC/B,IAAI,IAAI,KAAK,GAAG;oBAAE,UAAU,EAAE,CAAC;gBAC/B,IAAI,IAAI,KAAK,GAAG;oBAAE,UAAU,EAAE,CAAC;gBAC/B,IAAI,IAAI,KAAK,GAAG;oBAAE,UAAU,EAAE,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,sBAAsB,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,qBAAqB;YAC1F,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,mBAAmB;SAC1B,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,2BAA2B,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,0BAA0B;YACpG,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,mBAAmB;SAC1B,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,sBAAsB;IACtB,MAAM,eAAe,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,CAAC,QAAQ,CAAC,mBAAmB,GAAG,eAAe,CAAC;IAEtD,+BAA+B;IAC/B,IAAI,eAAe,KAAK,MAAM,EAAE,CAAC;QAC/B,MAAM,CAAC,WAAW,CAAC,IAAI,CACrB,mFAAmF,CACpF,CAAC;IACJ,CAAC;IAED,uBAAuB;IACvB,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;YACxE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,CAAC;gBACT,OAAO,EAAE,uEAAuE;gBAChF,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,gBAAgB;aACvB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;YACxD,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YAC1D,MAAM,CAAC,WAAW,CAAC,IAAI,CACrB,sDAAsD,CACvD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,eAAe;YACxB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,YAAY;SACnB,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,IAAY;IACvC,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,2BAA2B;IAC3B,MAAM,iBAAiB,GAAG;QACxB,YAAY;QACZ,aAAa;QACb,eAAe;QACf,gBAAgB;QAChB,YAAY;QACZ,cAAc,EAAE,UAAU;KAC3B,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,OAAO;YAAE,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3C,CAAC;IAED,oCAAoC;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEN,KAAK,IAAI,UAAU,GAAG,CAAC,CAAC;IAExB,8BAA8B;IAC9B,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAClD,IAAI,eAAe;QAAE,KAAK,IAAI,eAAe,CAAC,MAAM,CAAC;IAErD,cAAc;IACd,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAC1C,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;IAEpC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,KAAK,CAAC;IAC7B,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,QAAQ,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * List all Flutter widgets in the project
3
+ */
4
+ export declare function listWidgets(projectPath: string, includeFullPath?: boolean): Promise<{
5
+ widgets: WidgetInfo[];
6
+ summary: {
7
+ statelessCount: number;
8
+ statefulCount: number;
9
+ totalCount: number;
10
+ };
11
+ errors: string[];
12
+ }>;
13
+ interface WidgetInfo {
14
+ name: string;
15
+ type: "StatelessWidget" | "StatefulWidget" | "FunctionalWidget";
16
+ file: string;
17
+ line: number;
18
+ hasBuildMethod: boolean;
19
+ }
20
+ export {};
21
+ //# sourceMappingURL=widgets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widgets.d.ts","sourceRoot":"","sources":["../../src/tools/widgets.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,eAAe,UAAQ,GACtB,OAAO,CAAC;IACT,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,EAAE;QACP,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC,CA6CD;AAwKD,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,iBAAiB,GAAG,gBAAgB,GAAG,kBAAkB,CAAC;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,OAAO,CAAC;CACzB"}
@@ -0,0 +1,164 @@
1
+ import * as fs from "fs/promises";
2
+ import * as path from "path";
3
+ import { existsSync } from "fs";
4
+ /**
5
+ * List all Flutter widgets in the project
6
+ */
7
+ export async function listWidgets(projectPath, includeFullPath = false) {
8
+ const result = {
9
+ widgets: [],
10
+ summary: {
11
+ statelessCount: 0,
12
+ statefulCount: 0,
13
+ totalCount: 0,
14
+ },
15
+ errors: [],
16
+ };
17
+ try {
18
+ const libPath = path.join(projectPath, "lib");
19
+ if (!existsSync(libPath)) {
20
+ result.errors.push("lib directory not found");
21
+ return result;
22
+ }
23
+ await scanDirectoryForWidgets(libPath, result, projectPath, includeFullPath);
24
+ // Calculate summary
25
+ result.summary.statelessCount = result.widgets.filter((w) => w.type === "StatelessWidget").length;
26
+ result.summary.statefulCount = result.widgets.filter((w) => w.type === "StatefulWidget").length;
27
+ result.summary.totalCount = result.widgets.length;
28
+ // Sort by file path and line number
29
+ result.widgets.sort((a, b) => {
30
+ if (a.file !== b.file) {
31
+ return a.file.localeCompare(b.file);
32
+ }
33
+ return a.line - b.line;
34
+ });
35
+ }
36
+ catch (error) {
37
+ result.errors.push(error instanceof Error ? error.message : String(error));
38
+ }
39
+ return result;
40
+ }
41
+ /**
42
+ * Recursively scan directory for widget definitions
43
+ */
44
+ async function scanDirectoryForWidgets(dirPath, result, projectPath, includeFullPath) {
45
+ try {
46
+ const entries = await fs.readdir(dirPath, { withFileTypes: true });
47
+ for (const entry of entries) {
48
+ const fullPath = path.join(dirPath, entry.name);
49
+ if (entry.isDirectory()) {
50
+ // Skip build and generated directories
51
+ if (entry.name === "build" ||
52
+ entry.name === ".dart_tool" ||
53
+ entry.name === "generated") {
54
+ continue;
55
+ }
56
+ await scanDirectoryForWidgets(fullPath, result, projectPath, includeFullPath);
57
+ }
58
+ else if (entry.isFile() && entry.name.endsWith(".dart")) {
59
+ await scanFileForWidgets(fullPath, result, projectPath, includeFullPath);
60
+ }
61
+ }
62
+ }
63
+ catch (error) {
64
+ // Skip directories we can't read
65
+ }
66
+ }
67
+ /**
68
+ * Scan a single Dart file for widget definitions
69
+ */
70
+ async function scanFileForWidgets(filePath, result, projectPath, includeFullPath) {
71
+ try {
72
+ const content = await fs.readFile(filePath, "utf-8");
73
+ const lines = content.split("\n");
74
+ let relativePath = path.relative(projectPath, filePath);
75
+ if (!includeFullPath) {
76
+ relativePath = relativePath.split(path.sep).join("/");
77
+ }
78
+ let currentClass = null;
79
+ for (let i = 0; i < lines.length; i++) {
80
+ const line = lines[i];
81
+ const trimmed = line.trim();
82
+ const lineNumber = i + 1;
83
+ // Check for class declarations
84
+ const classMatch = trimmed.match(/^class\s+(\w+)\s+extends\s+(StatelessWidget|StatefulWidget)/);
85
+ if (classMatch) {
86
+ const className = classMatch[1];
87
+ const widgetType = classMatch[2];
88
+ // Save previous class if exists
89
+ if (currentClass && currentClass.type) {
90
+ result.widgets.push({
91
+ name: currentClass.name,
92
+ type: currentClass.type,
93
+ file: relativePath,
94
+ line: currentClass.line,
95
+ hasBuildMethod: currentClass.hasBuild,
96
+ });
97
+ }
98
+ currentClass = {
99
+ name: className,
100
+ line: lineNumber,
101
+ type: widgetType,
102
+ hasBuild: false,
103
+ };
104
+ }
105
+ // Check for build method within current class
106
+ if (currentClass && trimmed.includes("@override") &&
107
+ lines[i + 1]?.trim().startsWith("Widget build(")) {
108
+ currentClass.hasBuild = true;
109
+ }
110
+ // Check for mixin with widgets
111
+ const mixinMatch = trimmed.match(/^class\s+(\w+)\s+with\s+([\w\s,]+)\s*\{/);
112
+ if (mixinMatch) {
113
+ const mixins = mixinMatch[2].split(",").map((m) => m.trim());
114
+ for (const mixin of mixins) {
115
+ if (mixin === "StatelessWidget" || mixin === "StatefulWidget") {
116
+ result.widgets.push({
117
+ name: mixinMatch[1],
118
+ type: mixin,
119
+ file: relativePath,
120
+ line: lineNumber,
121
+ hasBuildMethod: false, // Can't determine without more analysis
122
+ });
123
+ }
124
+ }
125
+ }
126
+ }
127
+ // Save last class
128
+ if (currentClass && currentClass.type) {
129
+ result.widgets.push({
130
+ name: currentClass.name,
131
+ type: currentClass.type,
132
+ file: relativePath,
133
+ line: currentClass.line,
134
+ hasBuildMethod: currentClass.hasBuild,
135
+ });
136
+ }
137
+ // Also check for standalone build functions (functional widgets)
138
+ for (let i = 0; i < lines.length; i++) {
139
+ const line = lines[i];
140
+ const trimmed = line.trim();
141
+ // Look for Widget function returns (functional widgets)
142
+ const funcMatch = trimmed.match(/^Widget\s+(\w+)\s*\([^)]*\)\s*(?:=>|\{)/);
143
+ if (funcMatch) {
144
+ const functionName = funcMatch[1];
145
+ // Skip common non-widget functions
146
+ if (functionName !== "build" &&
147
+ !functionName.startsWith("_") &&
148
+ functionName[0] !== functionName[0].toLowerCase()) {
149
+ result.widgets.push({
150
+ name: functionName,
151
+ type: "FunctionalWidget",
152
+ file: relativePath,
153
+ line: i + 1,
154
+ hasBuildMethod: false,
155
+ });
156
+ }
157
+ }
158
+ }
159
+ }
160
+ catch (error) {
161
+ result.errors.push(`Failed to read file ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
162
+ }
163
+ }
164
+ //# sourceMappingURL=widgets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widgets.js","sourceRoot":"","sources":["../../src/tools/widgets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ import { z } from "zod";
2
+ export declare const PubspecSchema: z.ZodObject<{
3
+ name: z.ZodString;
4
+ description: z.ZodOptional<z.ZodString>;
5
+ version: z.ZodOptional<z.ZodString>;
6
+ publish_to: z.ZodOptional<z.ZodString>;
7
+ environment: z.ZodOptional<z.ZodObject<{
8
+ sdk: z.ZodString;
9
+ flutter: z.ZodOptional<z.ZodString>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ sdk: string;
12
+ flutter?: string | undefined;
13
+ }, {
14
+ sdk: string;
15
+ flutter?: string | undefined;
16
+ }>>;
17
+ dependencies: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
18
+ dev_dependencies: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
19
+ flutter: z.ZodOptional<z.ZodObject<{
20
+ "uses-material-design": z.ZodOptional<z.ZodBoolean>;
21
+ assets: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
22
+ fonts: z.ZodOptional<z.ZodArray<z.ZodAny, "many">>;
23
+ }, "strip", z.ZodTypeAny, {
24
+ "uses-material-design"?: boolean | undefined;
25
+ assets?: string[] | undefined;
26
+ fonts?: any[] | undefined;
27
+ }, {
28
+ "uses-material-design"?: boolean | undefined;
29
+ assets?: string[] | undefined;
30
+ fonts?: any[] | undefined;
31
+ }>>;
32
+ }, "strip", z.ZodTypeAny, {
33
+ name: string;
34
+ description?: string | undefined;
35
+ version?: string | undefined;
36
+ publish_to?: string | undefined;
37
+ flutter?: {
38
+ "uses-material-design"?: boolean | undefined;
39
+ assets?: string[] | undefined;
40
+ fonts?: any[] | undefined;
41
+ } | undefined;
42
+ environment?: {
43
+ sdk: string;
44
+ flutter?: string | undefined;
45
+ } | undefined;
46
+ dependencies?: Record<string, string> | undefined;
47
+ dev_dependencies?: Record<string, string> | undefined;
48
+ }, {
49
+ name: string;
50
+ description?: string | undefined;
51
+ version?: string | undefined;
52
+ publish_to?: string | undefined;
53
+ flutter?: {
54
+ "uses-material-design"?: boolean | undefined;
55
+ assets?: string[] | undefined;
56
+ fonts?: any[] | undefined;
57
+ } | undefined;
58
+ environment?: {
59
+ sdk: string;
60
+ flutter?: string | undefined;
61
+ } | undefined;
62
+ dependencies?: Record<string, string> | undefined;
63
+ dev_dependencies?: Record<string, string> | undefined;
64
+ }>;
65
+ export type PubspecYaml = z.infer<typeof PubspecSchema>;
66
+ /**
67
+ * Read and parse pubspec.yaml
68
+ */
69
+ export declare function readPubspecYaml(projectPath: string): Promise<PubspecYaml | null>;
70
+ /**
71
+ * Detect if directory is a Flutter project
72
+ */
73
+ export declare function detectFlutterProject(projectPath: string): Promise<{
74
+ isFlutterProject: boolean;
75
+ projectType: "app" | "package" | "module" | null;
76
+ flutterVersion: string | null;
77
+ hasPubspec: boolean;
78
+ errors: string[];
79
+ }>;
80
+ /**
81
+ * Analyze Flutter project structure
82
+ */
83
+ export declare function analyzeFlutterProject(projectPath: string): Promise<{
84
+ projectPath: string;
85
+ projectName: string | null;
86
+ projectType: string;
87
+ structure: {
88
+ hasLib: boolean;
89
+ hasAndroid: boolean;
90
+ hasIOS: boolean;
91
+ hasWeb: boolean;
92
+ hasLinux: boolean;
93
+ hasWindows: boolean;
94
+ hasMacOS: boolean;
95
+ hasTest: boolean;
96
+ hasIntegrationTest: boolean;
97
+ };
98
+ fileCount: number;
99
+ dartFileCount: number;
100
+ errors: string[];
101
+ }>;
102
+ /**
103
+ * Get Flutter project information
104
+ */
105
+ export declare function getFlutterProjectInfo(projectPath: string): Promise<{
106
+ name: string | null;
107
+ description: string | null;
108
+ version: string | null;
109
+ sdkVersion: string | null;
110
+ flutterVersion: string | null;
111
+ dependencies: Record<string, string>;
112
+ devDependencies: Record<string, string>;
113
+ usesMaterialDesign: boolean;
114
+ assets: string[];
115
+ errors: string[];
116
+ }>;
117
+ //# sourceMappingURL=flutter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flutter.d.ts","sourceRoot":"","sources":["../../src/utils/flutter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAcxB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AA6GxD;;GAEG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAe7B;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IACT,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,KAAK,GAAG,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC;IACjD,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC,CAuDD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IACT,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE;QACT,MAAM,EAAE,OAAO,CAAC;QAChB,UAAU,EAAE,OAAO,CAAC;QACpB,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,OAAO,CAAC;QAChB,QAAQ,EAAE,OAAO,CAAC;QAClB,UAAU,EAAE,OAAO,CAAC;QACpB,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,kBAAkB,EAAE,OAAO,CAAC;KAC7B,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC,CA+DD;AAoCD;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IACT,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC,CAuCD"}