helix-lang 11.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 (193) hide show
  1. package/README.md +168 -0
  2. package/dist/architect.d.ts +14 -0
  3. package/dist/architect.d.ts.map +1 -0
  4. package/dist/architect.js +127 -0
  5. package/dist/architect.js.map +1 -0
  6. package/dist/bin/helix.d.ts +20 -0
  7. package/dist/bin/helix.d.ts.map +1 -0
  8. package/dist/bin/helix.js +921 -0
  9. package/dist/bin/helix.js.map +1 -0
  10. package/dist/commands/collaborate/index.d.ts +2 -0
  11. package/dist/commands/collaborate/index.d.ts.map +1 -0
  12. package/dist/commands/collaborate/index.js +129 -0
  13. package/dist/commands/collaborate/index.js.map +1 -0
  14. package/dist/commands/collaborate/server.d.ts +31 -0
  15. package/dist/commands/collaborate/server.d.ts.map +1 -0
  16. package/dist/commands/collaborate/server.js +159 -0
  17. package/dist/commands/collaborate/server.js.map +1 -0
  18. package/dist/commands/deploy/index.d.ts +25 -0
  19. package/dist/commands/deploy/index.d.ts.map +1 -0
  20. package/dist/commands/deploy/index.js +130 -0
  21. package/dist/commands/deploy/index.js.map +1 -0
  22. package/dist/commands/deploy/platforms/fly.d.ts +9 -0
  23. package/dist/commands/deploy/platforms/fly.d.ts.map +1 -0
  24. package/dist/commands/deploy/platforms/fly.js +68 -0
  25. package/dist/commands/deploy/platforms/fly.js.map +1 -0
  26. package/dist/commands/deploy/platforms/railway.d.ts +9 -0
  27. package/dist/commands/deploy/platforms/railway.d.ts.map +1 -0
  28. package/dist/commands/deploy/platforms/railway.js +115 -0
  29. package/dist/commands/deploy/platforms/railway.js.map +1 -0
  30. package/dist/commands/deploy/platforms/vercel.d.ts +10 -0
  31. package/dist/commands/deploy/platforms/vercel.d.ts.map +1 -0
  32. package/dist/commands/deploy/platforms/vercel.js +126 -0
  33. package/dist/commands/deploy/platforms/vercel.js.map +1 -0
  34. package/dist/commands/deploy.d.ts +6 -0
  35. package/dist/commands/deploy.d.ts.map +1 -0
  36. package/dist/commands/deploy.js +56 -0
  37. package/dist/commands/deploy.js.map +1 -0
  38. package/dist/commands/evolve/analyzers/performance.d.ts +13 -0
  39. package/dist/commands/evolve/analyzers/performance.d.ts.map +1 -0
  40. package/dist/commands/evolve/analyzers/performance.js +591 -0
  41. package/dist/commands/evolve/analyzers/performance.js.map +1 -0
  42. package/dist/commands/evolve/analyzers/security.d.ts +21 -0
  43. package/dist/commands/evolve/analyzers/security.d.ts.map +1 -0
  44. package/dist/commands/evolve/analyzers/security.js +280 -0
  45. package/dist/commands/evolve/analyzers/security.js.map +1 -0
  46. package/dist/commands/evolve/index.d.ts +2 -0
  47. package/dist/commands/evolve/index.d.ts.map +1 -0
  48. package/dist/commands/evolve/index.js +122 -0
  49. package/dist/commands/evolve/index.js.map +1 -0
  50. package/dist/commands/generate.d.ts +6 -0
  51. package/dist/commands/generate.d.ts.map +1 -0
  52. package/dist/commands/generate.js +277 -0
  53. package/dist/commands/generate.js.map +1 -0
  54. package/dist/commands/install.d.ts +2 -0
  55. package/dist/commands/install.d.ts.map +1 -0
  56. package/dist/commands/install.js +176 -0
  57. package/dist/commands/install.js.map +1 -0
  58. package/dist/commands/library/index.d.ts +27 -0
  59. package/dist/commands/library/index.d.ts.map +1 -0
  60. package/dist/commands/library/index.js +126 -0
  61. package/dist/commands/library/index.js.map +1 -0
  62. package/dist/commands/migrate.d.ts +5 -0
  63. package/dist/commands/migrate.d.ts.map +1 -0
  64. package/dist/commands/migrate.js +258 -0
  65. package/dist/commands/migrate.js.map +1 -0
  66. package/dist/commands/new.d.ts +6 -0
  67. package/dist/commands/new.d.ts.map +1 -0
  68. package/dist/commands/new.js +195 -0
  69. package/dist/commands/new.js.map +1 -0
  70. package/dist/commands/preflight.d.ts +20 -0
  71. package/dist/commands/preflight.d.ts.map +1 -0
  72. package/dist/commands/preflight.js +182 -0
  73. package/dist/commands/preflight.js.map +1 -0
  74. package/dist/commands/preview.d.ts +13 -0
  75. package/dist/commands/preview.d.ts.map +1 -0
  76. package/dist/commands/preview.js +260 -0
  77. package/dist/commands/preview.js.map +1 -0
  78. package/dist/commands/run.d.ts +6 -0
  79. package/dist/commands/run.d.ts.map +1 -0
  80. package/dist/commands/run.js +96 -0
  81. package/dist/commands/run.js.map +1 -0
  82. package/dist/commands/spawn.d.ts +11 -0
  83. package/dist/commands/spawn.d.ts.map +1 -0
  84. package/dist/commands/spawn.js +916 -0
  85. package/dist/commands/spawn.js.map +1 -0
  86. package/dist/compiler.d.ts +12 -0
  87. package/dist/compiler.d.ts.map +1 -0
  88. package/dist/compiler.js +92 -0
  89. package/dist/compiler.js.map +1 -0
  90. package/dist/core/file-writer.d.ts +36 -0
  91. package/dist/core/file-writer.d.ts.map +1 -0
  92. package/dist/core/file-writer.js +268 -0
  93. package/dist/core/file-writer.js.map +1 -0
  94. package/dist/core/registry.d.ts +57 -0
  95. package/dist/core/registry.d.ts.map +1 -0
  96. package/dist/core/registry.js +222 -0
  97. package/dist/core/registry.js.map +1 -0
  98. package/dist/core/self-healing.d.ts +47 -0
  99. package/dist/core/self-healing.d.ts.map +1 -0
  100. package/dist/core/self-healing.js +250 -0
  101. package/dist/core/self-healing.js.map +1 -0
  102. package/dist/core/types.d.ts +126 -0
  103. package/dist/core/types.d.ts.map +1 -0
  104. package/dist/core/types.js +7 -0
  105. package/dist/core/types.js.map +1 -0
  106. package/dist/generators/databases/mongodb.d.ts +10 -0
  107. package/dist/generators/databases/mongodb.d.ts.map +1 -0
  108. package/dist/generators/databases/mongodb.js +83 -0
  109. package/dist/generators/databases/mongodb.js.map +1 -0
  110. package/dist/generators/databases/redis.d.ts +2 -0
  111. package/dist/generators/databases/redis.d.ts.map +1 -0
  112. package/dist/generators/databases/redis.js +140 -0
  113. package/dist/generators/databases/redis.js.map +1 -0
  114. package/dist/generators/flutter.d.ts +32 -0
  115. package/dist/generators/flutter.d.ts.map +1 -0
  116. package/dist/generators/flutter.js +628 -0
  117. package/dist/generators/flutter.js.map +1 -0
  118. package/dist/openrouter.d.ts +68 -0
  119. package/dist/openrouter.d.ts.map +1 -0
  120. package/dist/openrouter.js +241 -0
  121. package/dist/openrouter.js.map +1 -0
  122. package/dist/page-generator.d.ts +22 -0
  123. package/dist/page-generator.d.ts.map +1 -0
  124. package/dist/page-generator.js +192 -0
  125. package/dist/page-generator.js.map +1 -0
  126. package/dist/parser.d.ts +76 -0
  127. package/dist/parser.d.ts.map +1 -0
  128. package/dist/parser.js +691 -0
  129. package/dist/parser.js.map +1 -0
  130. package/dist/prompts/master-architect.d.ts +9 -0
  131. package/dist/prompts/master-architect.d.ts.map +1 -0
  132. package/dist/prompts/master-architect.js +150 -0
  133. package/dist/prompts/master-architect.js.map +1 -0
  134. package/dist/researcher.d.ts +12 -0
  135. package/dist/researcher.d.ts.map +1 -0
  136. package/dist/researcher.js +85 -0
  137. package/dist/researcher.js.map +1 -0
  138. package/dist/self-heal.d.ts +29 -0
  139. package/dist/self-heal.d.ts.map +1 -0
  140. package/dist/self-heal.js +260 -0
  141. package/dist/self-heal.js.map +1 -0
  142. package/dist/services/SupabaseDeployer.d.ts +9 -0
  143. package/dist/services/SupabaseDeployer.d.ts.map +1 -0
  144. package/dist/services/SupabaseDeployer.js +50 -0
  145. package/dist/services/SupabaseDeployer.js.map +1 -0
  146. package/dist/test-generator.d.ts +18 -0
  147. package/dist/test-generator.d.ts.map +1 -0
  148. package/dist/test-generator.js +180 -0
  149. package/dist/test-generator.js.map +1 -0
  150. package/dist/themes/index.d.ts +52 -0
  151. package/dist/themes/index.d.ts.map +1 -0
  152. package/dist/themes/index.js +273 -0
  153. package/dist/themes/index.js.map +1 -0
  154. package/dist/types.d.ts +9 -0
  155. package/dist/types.d.ts.map +1 -0
  156. package/dist/types.js +81 -0
  157. package/dist/types.js.map +1 -0
  158. package/dist/utils/constitutional-validator.d.ts +73 -0
  159. package/dist/utils/constitutional-validator.d.ts.map +1 -0
  160. package/dist/utils/constitutional-validator.js +249 -0
  161. package/dist/utils/constitutional-validator.js.map +1 -0
  162. package/library/auth-flow/app/api/auth/[...nextauth]/route.ts +31 -0
  163. package/library/auth-flow/app/api/auth/login/route.ts +90 -0
  164. package/library/auth-flow/app/api/auth/register/route.ts +91 -0
  165. package/library/auth-flow/components/auth/AuthMiddleware.tsx +139 -0
  166. package/library/auth-flow/components/auth/LoginForm.tsx +125 -0
  167. package/library/auth-flow/components/auth/RegisterForm.tsx +168 -0
  168. package/library/auth-flow/components/auth/nextauth-config.ts +99 -0
  169. package/library/auth-flow/manifest.json +29 -0
  170. package/library/auth-flow/schema.prisma +45 -0
  171. package/library/dashboard-analytics/components/dashboard/ActivityFeed.tsx +109 -0
  172. package/library/dashboard-analytics/components/dashboard/LineChart.tsx +180 -0
  173. package/library/dashboard-analytics/components/dashboard/StatsCard.tsx +47 -0
  174. package/library/dashboard-analytics/components/dashboard/SummaryGrid.tsx +39 -0
  175. package/library/dashboard-analytics/manifest.json +19 -0
  176. package/library/data-table/components/table/BulkActions.tsx +59 -0
  177. package/library/data-table/components/table/ColumnToggle.tsx +65 -0
  178. package/library/data-table/components/table/DataTable.tsx +318 -0
  179. package/library/data-table/components/table/ExportCSV.tsx +52 -0
  180. package/library/data-table/components/table/SearchFilter.tsx +48 -0
  181. package/library/data-table/manifest.json +20 -0
  182. package/library/file-upload/app/api/upload/route.ts +107 -0
  183. package/library/file-upload/components/upload/DropZone.tsx +268 -0
  184. package/library/file-upload/components/upload/FilePreview.tsx +82 -0
  185. package/library/file-upload/components/upload/UploadProgress.tsx +92 -0
  186. package/library/file-upload/components/upload/fileStorage.ts +142 -0
  187. package/library/file-upload/manifest.json +21 -0
  188. package/library/notification-system/app/api/notifications/route.ts +121 -0
  189. package/library/notification-system/components/notifications/NotificationBell.tsx +154 -0
  190. package/library/notification-system/components/notifications/NotificationProvider.tsx +161 -0
  191. package/library/notification-system/components/notifications/Toast.tsx +112 -0
  192. package/library/notification-system/manifest.json +20 -0
  193. package/package.json +66 -0
@@ -0,0 +1,591 @@
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.analyzePerformance = analyzePerformance;
40
+ exports.autoFixPerformanceIssues = autoFixPerformanceIssues;
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const fs = __importStar(require("fs-extra"));
43
+ const path = __importStar(require("path"));
44
+ async function findFiles(dir, pattern) {
45
+ const results = [];
46
+ try {
47
+ const files = await fs.readdir(dir, { withFileTypes: true });
48
+ for (const file of files) {
49
+ const filePath = path.join(dir, file.name);
50
+ if (file.isDirectory() && !['node_modules', '.next', 'dist', '.git'].includes(file.name)) {
51
+ results.push(...await findFiles(filePath, pattern));
52
+ }
53
+ else if (file.isFile() && pattern.test(file.name)) {
54
+ results.push(filePath);
55
+ }
56
+ }
57
+ }
58
+ catch (error) {
59
+ // Skip inaccessible directories
60
+ }
61
+ return results;
62
+ }
63
+ async function analyzePerformance(projectPath) {
64
+ console.log(chalk_1.default.cyan('\n Analyzing performance...\n'));
65
+ const issues = [];
66
+ // Find all TypeScript/JavaScript files
67
+ const codeFiles = await findFiles(projectPath, /\.(ts|tsx|js|jsx)$/);
68
+ // Find Prisma schema files
69
+ const prismaFiles = await findFiles(projectPath, /schema\.prisma$/);
70
+ for (const filePath of codeFiles) {
71
+ const content = await fs.readFile(filePath, 'utf-8');
72
+ const lines = content.split('\n');
73
+ const relativePath = path.relative(projectPath, filePath);
74
+ // Detect N+1 queries (findMany inside loops)
75
+ issues.push(...detectNPlusOneQueries(relativePath, lines));
76
+ // Detect large components
77
+ issues.push(...detectLargeComponents(relativePath, lines, content));
78
+ // Detect unused imports
79
+ issues.push(...detectUnusedImports(relativePath, lines, content));
80
+ // Detect inefficient React renders
81
+ issues.push(...detectInefficientRenders(relativePath, lines));
82
+ }
83
+ // Detect missing indexes in Prisma schemas
84
+ for (const prismaFile of prismaFiles) {
85
+ const content = await fs.readFile(prismaFile, 'utf-8');
86
+ const relativePath = path.relative(projectPath, prismaFile);
87
+ // Gather all where-clause fields from code files
88
+ const whereFields = await gatherWhereClauseFields(codeFiles);
89
+ issues.push(...detectMissingIndexes(relativePath, content, whereFields));
90
+ }
91
+ // Report findings
92
+ if (issues.length > 0) {
93
+ console.log(chalk_1.default.yellow(`\n Found ${issues.length} performance issues:\n`));
94
+ issues.forEach((issue, index) => {
95
+ const severityColor = issue.severity === 'high' ? chalk_1.default.red :
96
+ issue.severity === 'medium' ? chalk_1.default.yellow :
97
+ chalk_1.default.gray;
98
+ const fixLabel = issue.autoFixable ? chalk_1.default.green(' [auto-fixable]') : chalk_1.default.gray(' [manual]');
99
+ console.log(severityColor(`${index + 1}. [${issue.severity.toUpperCase()}] ${issue.type}${fixLabel}`));
100
+ console.log(chalk_1.default.gray(` ${issue.file}:${issue.line}`));
101
+ console.log(chalk_1.default.white(` ${issue.description}`));
102
+ console.log(chalk_1.default.cyan(` Suggestion: ${issue.suggestion}\n`));
103
+ });
104
+ }
105
+ else {
106
+ console.log(chalk_1.default.green(' No performance issues found.\n'));
107
+ }
108
+ return issues;
109
+ }
110
+ function detectNPlusOneQueries(file, lines) {
111
+ const issues = [];
112
+ lines.forEach((line, index) => {
113
+ // Detect loops with database queries inside them
114
+ if (line.includes('for') || line.includes('.map(') || line.includes('.forEach(')) {
115
+ const nextFewLines = lines.slice(index, Math.min(index + 10, lines.length)).join('\n');
116
+ // Check for prisma findMany/findUnique/findFirst inside the loop
117
+ const prismaMatch = nextFewLines.match(/prisma\.(\w+)\.(findMany|findUnique|findFirst)/);
118
+ if (prismaMatch) {
119
+ const model = prismaMatch[1];
120
+ const method = prismaMatch[2];
121
+ issues.push({
122
+ type: 'n+1-query',
123
+ file,
124
+ line: index + 1,
125
+ description: `N+1 query: prisma.${model}.${method} called inside a loop`,
126
+ suggestion: `Use prisma.${model}.findMany with a where/in clause outside the loop, or add include to the parent query`,
127
+ severity: 'high',
128
+ autoFixable: true,
129
+ fixData: { model, method },
130
+ });
131
+ }
132
+ // Also catch generic db calls
133
+ if (!prismaMatch && nextFewLines.includes('await db.')) {
134
+ issues.push({
135
+ type: 'n+1-query',
136
+ file,
137
+ line: index + 1,
138
+ description: 'Potential N+1 query: Database call inside loop',
139
+ suggestion: 'Batch queries using findMany with where/in clause outside the loop',
140
+ severity: 'high',
141
+ autoFixable: false,
142
+ });
143
+ }
144
+ }
145
+ // Detect findMany/findUnique without include when relations are accessed
146
+ if ((line.includes('findMany') || line.includes('findUnique')) &&
147
+ !line.includes('include')) {
148
+ const nextFewLines = lines.slice(index, Math.min(index + 10, lines.length)).join('\n');
149
+ // Check if relation access pattern exists (e.g., user.posts, item.category)
150
+ const relationMatch = nextFewLines.match(/\.(\w+)\.(\w+)/);
151
+ if (relationMatch) {
152
+ const relationName = relationMatch[1];
153
+ issues.push({
154
+ type: 'n+1-query',
155
+ file,
156
+ line: index + 1,
157
+ description: 'Query may trigger additional queries for relations',
158
+ suggestion: `Add include: { ${relationName}: true } to prevent N+1 queries`,
159
+ severity: 'medium',
160
+ autoFixable: true,
161
+ fixData: { relationName },
162
+ });
163
+ }
164
+ }
165
+ });
166
+ return issues;
167
+ }
168
+ async function gatherWhereClauseFields(codeFiles) {
169
+ const modelFields = new Map();
170
+ for (const filePath of codeFiles) {
171
+ try {
172
+ const content = await fs.readFile(filePath, 'utf-8');
173
+ // Match prisma.model.findMany({ where: { field: ... } })
174
+ const whereRegex = /prisma\.(\w+)\.(?:findMany|findFirst|findUnique|count|deleteMany|updateMany)\(\s*\{[^}]*where\s*:\s*\{([^}]+)\}/g;
175
+ let match;
176
+ while ((match = whereRegex.exec(content)) !== null) {
177
+ const model = match[1];
178
+ const whereClause = match[2];
179
+ if (!modelFields.has(model)) {
180
+ modelFields.set(model, new Set());
181
+ }
182
+ // Extract field names from the where clause
183
+ const fieldRegex = /(\w+)\s*:/g;
184
+ let fieldMatch;
185
+ while ((fieldMatch = fieldRegex.exec(whereClause)) !== null) {
186
+ const field = fieldMatch[1];
187
+ // Skip Prisma operators
188
+ if (!['contains', 'startsWith', 'endsWith', 'equals', 'not', 'in', 'notIn', 'lt', 'lte', 'gt', 'gte', 'mode'].includes(field)) {
189
+ modelFields.get(model).add(field);
190
+ }
191
+ }
192
+ }
193
+ }
194
+ catch (error) {
195
+ // Skip unreadable files
196
+ }
197
+ }
198
+ return modelFields;
199
+ }
200
+ function detectMissingIndexes(file, schemaContent, whereFields) {
201
+ const issues = [];
202
+ // Parse models from Prisma schema
203
+ const modelRegex = /model\s+(\w+)\s*\{([\s\S]*?)\n\}/g;
204
+ let modelMatch;
205
+ while ((modelMatch = modelRegex.exec(schemaContent)) !== null) {
206
+ const modelName = modelMatch[1];
207
+ const modelBody = modelMatch[2];
208
+ const modelStartLine = schemaContent.substring(0, modelMatch.index).split('\n').length;
209
+ // Find existing indexes
210
+ const existingIndexes = new Set();
211
+ // Check for @id
212
+ const idMatch = modelBody.match(/(\w+)\s+.*@id/);
213
+ if (idMatch) {
214
+ existingIndexes.add(idMatch[1]);
215
+ }
216
+ // Check for @unique
217
+ const uniqueRegex = /(\w+)\s+.*@unique/g;
218
+ let uniqueMatch;
219
+ while ((uniqueMatch = uniqueRegex.exec(modelBody)) !== null) {
220
+ existingIndexes.add(uniqueMatch[1]);
221
+ }
222
+ // Check for @@index
223
+ const indexRegex = /@@index\(\[([^\]]+)\]\)/g;
224
+ let indexMatch;
225
+ while ((indexMatch = indexRegex.exec(modelBody)) !== null) {
226
+ const indexFields = indexMatch[1].split(',').map(f => f.trim());
227
+ indexFields.forEach(f => existingIndexes.add(f));
228
+ }
229
+ // Convert model name to lowercase for matching (Prisma convention)
230
+ const modelNameLower = modelName.charAt(0).toLowerCase() + modelName.slice(1);
231
+ const queriedFields = whereFields.get(modelNameLower) || whereFields.get(modelName);
232
+ if (queriedFields) {
233
+ for (const field of queriedFields) {
234
+ if (!existingIndexes.has(field) && field !== 'id') {
235
+ // Find the line number for this field in the model
236
+ const fieldRegex = new RegExp(`^\\s+${field}\\s+`, 'm');
237
+ const fieldMatch = modelBody.match(fieldRegex);
238
+ const lineOffset = fieldMatch
239
+ ? modelBody.substring(0, modelBody.indexOf(fieldMatch[0])).split('\n').length
240
+ : 1;
241
+ issues.push({
242
+ type: 'missing-index',
243
+ file,
244
+ line: modelStartLine + lineOffset,
245
+ description: `Field "${field}" on model "${modelName}" is used in where clauses but has no index`,
246
+ suggestion: `Add @@index([${field}]) to the ${modelName} model`,
247
+ severity: 'medium',
248
+ autoFixable: true,
249
+ fixData: { modelName, field },
250
+ });
251
+ }
252
+ }
253
+ }
254
+ }
255
+ return issues;
256
+ }
257
+ function detectLargeComponents(file, lines, content) {
258
+ const issues = [];
259
+ if (!file.endsWith('.tsx') && !file.endsWith('.jsx')) {
260
+ return issues;
261
+ }
262
+ // Find React component definitions and measure their size
263
+ const componentPatterns = [
264
+ /^(?:export\s+)?(?:default\s+)?function\s+([A-Z]\w*)/,
265
+ /^(?:export\s+)?const\s+([A-Z]\w*)\s*[=:]/,
266
+ ];
267
+ lines.forEach((line, index) => {
268
+ for (const pattern of componentPatterns) {
269
+ const match = line.match(pattern);
270
+ if (match) {
271
+ const componentName = match[1];
272
+ // Estimate component size by counting lines until the next component or end
273
+ let braceDepth = 0;
274
+ let componentEnd = lines.length;
275
+ let started = false;
276
+ for (let i = index; i < lines.length; i++) {
277
+ for (const ch of lines[i]) {
278
+ if (ch === '{') {
279
+ braceDepth++;
280
+ started = true;
281
+ }
282
+ if (ch === '}')
283
+ braceDepth--;
284
+ }
285
+ if (started && braceDepth <= 0) {
286
+ componentEnd = i;
287
+ break;
288
+ }
289
+ }
290
+ const componentSize = componentEnd - index + 1;
291
+ if (componentSize > 200) {
292
+ issues.push({
293
+ type: 'large-component',
294
+ file,
295
+ line: index + 1,
296
+ description: `Component "${componentName}" is ${componentSize} lines long (threshold: 200)`,
297
+ suggestion: `Split "${componentName}" into smaller sub-components for better readability and performance`,
298
+ severity: 'medium',
299
+ autoFixable: false, // Suggest only, don't auto-split
300
+ });
301
+ }
302
+ break; // Only match first pattern per line
303
+ }
304
+ }
305
+ });
306
+ return issues;
307
+ }
308
+ function detectUnusedImports(file, lines, content) {
309
+ const issues = [];
310
+ // Only check TS/JS files
311
+ if (!file.match(/\.(ts|tsx|js|jsx)$/)) {
312
+ return issues;
313
+ }
314
+ lines.forEach((line, index) => {
315
+ // Match named imports: import { Foo, Bar } from '...'
316
+ const namedImportMatch = line.match(/^import\s*\{([^}]+)\}\s*from\s/);
317
+ if (namedImportMatch) {
318
+ const importNames = namedImportMatch[1].split(',').map(s => {
319
+ // Handle aliased imports: Foo as Bar
320
+ const parts = s.trim().split(/\s+as\s+/);
321
+ return { original: parts[0].trim(), alias: (parts[1] || parts[0]).trim() };
322
+ });
323
+ // Get the rest of the file content after this import line
324
+ const restOfFile = lines.slice(index + 1).join('\n');
325
+ for (const { original, alias } of importNames) {
326
+ if (!alias)
327
+ continue;
328
+ // Check if the imported name is used anywhere after the import
329
+ // Use word boundary to avoid false matches (e.g., "useState" matching "useStateManager")
330
+ const usageRegex = new RegExp(`\\b${escapeRegex(alias)}\\b`);
331
+ if (!usageRegex.test(restOfFile)) {
332
+ issues.push({
333
+ type: 'unused-import',
334
+ file,
335
+ line: index + 1,
336
+ description: `Unused import: "${alias}" is imported but never used`,
337
+ suggestion: `Remove unused import "${alias}"`,
338
+ severity: 'low',
339
+ autoFixable: true,
340
+ fixData: { importName: alias, originalName: original },
341
+ });
342
+ }
343
+ }
344
+ }
345
+ // Match default imports: import Foo from '...'
346
+ const defaultImportMatch = line.match(/^import\s+([A-Za-z_$][\w$]*)\s+from\s/);
347
+ if (defaultImportMatch) {
348
+ const importName = defaultImportMatch[1];
349
+ const restOfFile = lines.slice(index + 1).join('\n');
350
+ const usageRegex = new RegExp(`\\b${escapeRegex(importName)}\\b`);
351
+ if (!usageRegex.test(restOfFile)) {
352
+ issues.push({
353
+ type: 'unused-import',
354
+ file,
355
+ line: index + 1,
356
+ description: `Unused import: "${importName}" is imported but never used`,
357
+ suggestion: `Remove unused import "${importName}"`,
358
+ severity: 'low',
359
+ autoFixable: true,
360
+ fixData: { importName },
361
+ });
362
+ }
363
+ }
364
+ });
365
+ return issues;
366
+ }
367
+ function escapeRegex(str) {
368
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
369
+ }
370
+ function detectInefficientRenders(file, lines) {
371
+ const issues = [];
372
+ if (!file.endsWith('.tsx') && !file.endsWith('.jsx')) {
373
+ return issues;
374
+ }
375
+ lines.forEach((line, index) => {
376
+ // Detect inline function definitions in JSX
377
+ if (line.includes('onClick={() =>') || line.includes('onChange={() =>')) {
378
+ issues.push({
379
+ type: 'inefficient-render',
380
+ file,
381
+ line: index + 1,
382
+ description: 'Inline function in JSX causes re-renders',
383
+ suggestion: 'Use useCallback or define function outside render',
384
+ severity: 'low',
385
+ autoFixable: false,
386
+ });
387
+ }
388
+ // Detect missing React.memo on components that accept props
389
+ if (line.includes('export default function') || line.includes('export const')) {
390
+ const componentContent = lines.slice(index, Math.min(index + 50, lines.length)).join('\n');
391
+ if (componentContent.includes('props') && !componentContent.includes('memo')) {
392
+ issues.push({
393
+ type: 'inefficient-render',
394
+ file,
395
+ line: index + 1,
396
+ description: 'Component with props may benefit from React.memo',
397
+ suggestion: 'Wrap component with React.memo to prevent unnecessary re-renders',
398
+ severity: 'low',
399
+ autoFixable: false,
400
+ });
401
+ }
402
+ }
403
+ });
404
+ return issues;
405
+ }
406
+ // =============================================================================
407
+ // AUTO-FIXER
408
+ // =============================================================================
409
+ async function autoFixPerformanceIssues(projectPath, issues) {
410
+ console.log(chalk_1.default.cyan('\n Auto-fixing performance issues...\n'));
411
+ const fixableIssues = issues.filter(i => i.autoFixable);
412
+ if (fixableIssues.length === 0) {
413
+ console.log(chalk_1.default.yellow(' No auto-fixable issues found.\n'));
414
+ return;
415
+ }
416
+ // Group issues by file
417
+ const issuesByFile = fixableIssues.reduce((acc, issue) => {
418
+ if (!acc[issue.file])
419
+ acc[issue.file] = [];
420
+ acc[issue.file].push(issue);
421
+ return acc;
422
+ }, {});
423
+ let fixedCount = 0;
424
+ for (const [file, fileIssues] of Object.entries(issuesByFile)) {
425
+ const filePath = path.join(projectPath, file);
426
+ try {
427
+ let content = await fs.readFile(filePath, 'utf-8');
428
+ let lines = content.split('\n');
429
+ let modified = false;
430
+ // Sort issues by line number descending so we can fix from bottom up
431
+ // without shifting line numbers
432
+ const sortedIssues = [...fileIssues].sort((a, b) => b.line - a.line);
433
+ for (const issue of sortedIssues) {
434
+ switch (issue.type) {
435
+ case 'n+1-query': {
436
+ // Fix: Add include to Prisma queries
437
+ if (issue.fixData?.relationName) {
438
+ const lineIdx = issue.line - 1;
439
+ const currentLine = lines[lineIdx];
440
+ if (currentLine && (currentLine.includes('findMany') || currentLine.includes('findUnique'))) {
441
+ // Check if there's already an object argument
442
+ if (currentLine.includes('({')) {
443
+ // Add include to existing args
444
+ const insertLine = ` include: { ${issue.fixData.relationName}: true },`;
445
+ // Find the opening brace and insert after it
446
+ const braceIdx = currentLine.indexOf('({');
447
+ if (braceIdx !== -1) {
448
+ lines.splice(lineIdx + 1, 0, insertLine);
449
+ modified = true;
450
+ fixedCount++;
451
+ console.log(chalk_1.default.green(` Fixed: Added include for "${issue.fixData.relationName}" in ${file}:${issue.line}`));
452
+ }
453
+ }
454
+ else if (currentLine.includes('()')) {
455
+ // No args yet, add them
456
+ lines[lineIdx] = currentLine.replace(/\(\)/, `({ include: { ${issue.fixData.relationName}: true } })`);
457
+ modified = true;
458
+ fixedCount++;
459
+ console.log(chalk_1.default.green(` Fixed: Added include for "${issue.fixData.relationName}" in ${file}:${issue.line}`));
460
+ }
461
+ }
462
+ }
463
+ break;
464
+ }
465
+ case 'missing-index': {
466
+ // Fix: Add @@index to Prisma schema
467
+ if (issue.fixData?.modelName && issue.fixData?.field) {
468
+ const modelName = issue.fixData.modelName;
469
+ const field = issue.fixData.field;
470
+ // Find the closing brace of the model
471
+ const modelRegex = new RegExp(`model\\s+${modelName}\\s*\\{`);
472
+ const modelMatch = content.match(modelRegex);
473
+ if (modelMatch && modelMatch.index !== undefined) {
474
+ const modelStart = modelMatch.index;
475
+ // Find the closing brace
476
+ let braceDepth = 0;
477
+ let closingBraceIdx = -1;
478
+ for (let i = modelStart; i < content.length; i++) {
479
+ if (content[i] === '{')
480
+ braceDepth++;
481
+ if (content[i] === '}') {
482
+ braceDepth--;
483
+ if (braceDepth === 0) {
484
+ closingBraceIdx = i;
485
+ break;
486
+ }
487
+ }
488
+ }
489
+ if (closingBraceIdx !== -1) {
490
+ // Check if this index already exists
491
+ const modelContent = content.substring(modelStart, closingBraceIdx);
492
+ if (!modelContent.includes(`@@index([${field}])`)) {
493
+ // Insert @@index before the closing brace
494
+ const indexLine = ` @@index([${field}])\n`;
495
+ content = content.substring(0, closingBraceIdx) + indexLine + content.substring(closingBraceIdx);
496
+ lines = content.split('\n');
497
+ modified = true;
498
+ fixedCount++;
499
+ console.log(chalk_1.default.green(` Fixed: Added @@index([${field}]) to ${modelName} in ${file}`));
500
+ }
501
+ }
502
+ }
503
+ }
504
+ break;
505
+ }
506
+ case 'unused-import': {
507
+ // Fix: Remove unused imports
508
+ if (issue.fixData?.importName) {
509
+ const lineIdx = issue.line - 1;
510
+ const currentLine = lines[lineIdx];
511
+ if (currentLine) {
512
+ const importName = issue.fixData.importName;
513
+ const originalName = issue.fixData.originalName || importName;
514
+ // Check if it's a named import
515
+ const namedImportMatch = currentLine.match(/^import\s*\{([^}]+)\}\s*from\s/);
516
+ if (namedImportMatch) {
517
+ const imports = namedImportMatch[1].split(',').map(s => s.trim());
518
+ if (imports.length === 1) {
519
+ // Only import - remove the entire line
520
+ lines.splice(lineIdx, 1);
521
+ modified = true;
522
+ fixedCount++;
523
+ console.log(chalk_1.default.green(` Fixed: Removed unused import "${importName}" from ${file}:${issue.line}`));
524
+ }
525
+ else {
526
+ // Multiple imports - remove just this one
527
+ const aliasPattern = originalName !== importName
528
+ ? `${originalName}\\s+as\\s+${importName}`
529
+ : importName;
530
+ // Remove the import with possible trailing/leading comma
531
+ let newImports = namedImportMatch[1];
532
+ const patterns = [
533
+ new RegExp(`\\s*${escapeRegex(aliasPattern)}\\s*,`),
534
+ new RegExp(`,\\s*${escapeRegex(aliasPattern)}\\s*`),
535
+ new RegExp(`\\s*${escapeRegex(aliasPattern)}\\s*`),
536
+ ];
537
+ for (const p of patterns) {
538
+ if (p.test(newImports)) {
539
+ newImports = newImports.replace(p, '');
540
+ break;
541
+ }
542
+ }
543
+ lines[lineIdx] = currentLine.replace(namedImportMatch[1], ` ${newImports.trim()} `);
544
+ modified = true;
545
+ fixedCount++;
546
+ console.log(chalk_1.default.green(` Fixed: Removed unused import "${importName}" from ${file}:${issue.line}`));
547
+ }
548
+ }
549
+ // Check if it's a default import
550
+ const defaultImportMatch = currentLine.match(/^import\s+([A-Za-z_$][\w$]*)\s+from\s/);
551
+ if (defaultImportMatch && defaultImportMatch[1] === importName) {
552
+ lines.splice(lineIdx, 1);
553
+ modified = true;
554
+ fixedCount++;
555
+ console.log(chalk_1.default.green(` Fixed: Removed unused import "${importName}" from ${file}:${issue.line}`));
556
+ }
557
+ }
558
+ }
559
+ break;
560
+ }
561
+ case 'large-component': {
562
+ // Suggest only - don't auto-split
563
+ console.log(chalk_1.default.yellow(` Manual fix needed: ${issue.description}`));
564
+ console.log(chalk_1.default.gray(` Suggestion: ${issue.suggestion}`));
565
+ break;
566
+ }
567
+ case 'inefficient-render': {
568
+ // Suggest only
569
+ console.log(chalk_1.default.yellow(` Manual fix recommended for ${file}:${issue.line}`));
570
+ console.log(chalk_1.default.gray(` ${issue.suggestion}`));
571
+ break;
572
+ }
573
+ }
574
+ }
575
+ if (modified) {
576
+ await fs.writeFile(filePath, lines.join('\n'), 'utf-8');
577
+ console.log(chalk_1.default.green(` Saved: ${file}`));
578
+ }
579
+ }
580
+ catch (error) {
581
+ console.log(chalk_1.default.red(` Error processing ${file}: ${error.message}`));
582
+ }
583
+ }
584
+ console.log(chalk_1.default.cyan(`\n Auto-fixed ${fixedCount} issues.`));
585
+ // Report manual fixes needed
586
+ const manualIssues = issues.filter(i => !i.autoFixable);
587
+ if (manualIssues.length > 0) {
588
+ console.log(chalk_1.default.yellow(` ${manualIssues.length} issues require manual attention.\n`));
589
+ }
590
+ }
591
+ //# sourceMappingURL=performance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance.js","sourceRoot":"","sources":["../../../../src/commands/evolve/analyzers/performance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface SecurityIssue {
2
+ type: 'hardcoded-secret' | 'missing-auth' | 'no-rate-limiting' | 'no-input-validation';
3
+ file: string;
4
+ line: number;
5
+ description: string;
6
+ suggestion: string;
7
+ severity: 'low' | 'medium' | 'high' | 'critical';
8
+ }
9
+ export interface SecurityReport {
10
+ score: number;
11
+ issues: SecurityIssue[];
12
+ summary: {
13
+ critical: number;
14
+ high: number;
15
+ medium: number;
16
+ low: number;
17
+ };
18
+ }
19
+ export declare function analyzeSecurity(projectPath: string): Promise<SecurityReport>;
20
+ export declare function printSecurityReport(report: SecurityReport): void;
21
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../../../src/commands/evolve/analyzers/security.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,kBAAkB,GAAG,cAAc,GAAG,kBAAkB,GAAG,qBAAqB,CAAC;IACvF,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;CACpD;AAED,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,OAAO,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACf,CAAC;CACL;AAuBD,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAkClF;AAwLD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAiChE"}