codedev-mcp 3.2.0 → 3.2.1

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 (52) hide show
  1. package/dist/analyzers/db-schema.d.ts +10 -2
  2. package/dist/analyzers/db-schema.d.ts.map +1 -1
  3. package/dist/analyzers/db-schema.js +458 -27
  4. package/dist/analyzers/db-schema.js.map +1 -1
  5. package/dist/analyzers/scaffold.d.ts.map +1 -1
  6. package/dist/analyzers/scaffold.js +500 -0
  7. package/dist/analyzers/scaffold.js.map +1 -1
  8. package/dist/schemas/output-schemas.d.ts +5 -7
  9. package/dist/schemas/output-schemas.d.ts.map +1 -1
  10. package/dist/schemas/output-schemas.js +3 -5
  11. package/dist/schemas/output-schemas.js.map +1 -1
  12. package/dist/search/fast-search.d.ts.map +1 -1
  13. package/dist/search/fast-search.js +2 -0
  14. package/dist/search/fast-search.js.map +1 -1
  15. package/dist/tools/analysis.d.ts.map +1 -1
  16. package/dist/tools/analysis.js +27 -18
  17. package/dist/tools/analysis.js.map +1 -1
  18. package/dist/tools/architecture.d.ts.map +1 -1
  19. package/dist/tools/architecture.js +7 -4
  20. package/dist/tools/architecture.js.map +1 -1
  21. package/dist/tools/devops.d.ts.map +1 -1
  22. package/dist/tools/devops.js +10 -4
  23. package/dist/tools/devops.js.map +1 -1
  24. package/dist/tools/docs.d.ts.map +1 -1
  25. package/dist/tools/docs.js +13 -9
  26. package/dist/tools/docs.js.map +1 -1
  27. package/dist/tools/git.d.ts.map +1 -1
  28. package/dist/tools/git.js +63 -17
  29. package/dist/tools/git.js.map +1 -1
  30. package/dist/tools/nav.js +3 -3
  31. package/dist/tools/nav.js.map +1 -1
  32. package/dist/tools/notebook.d.ts.map +1 -1
  33. package/dist/tools/notebook.js +10 -7
  34. package/dist/tools/notebook.js.map +1 -1
  35. package/dist/tools/performance.d.ts.map +1 -1
  36. package/dist/tools/performance.js +4 -1
  37. package/dist/tools/performance.js.map +1 -1
  38. package/dist/tools/quality.d.ts.map +1 -1
  39. package/dist/tools/quality.js +46 -13
  40. package/dist/tools/quality.js.map +1 -1
  41. package/dist/tools/scaffold.d.ts.map +1 -1
  42. package/dist/tools/scaffold.js +17 -7
  43. package/dist/tools/scaffold.js.map +1 -1
  44. package/dist/tools/search.js +4 -4
  45. package/dist/tools/search.js.map +1 -1
  46. package/dist/tools/security.d.ts.map +1 -1
  47. package/dist/tools/security.js +9 -4
  48. package/dist/tools/security.js.map +1 -1
  49. package/dist/utils/languages.d.ts.map +1 -1
  50. package/dist/utils/languages.js +126 -0
  51. package/dist/utils/languages.js.map +1 -1
  52. package/package.json +2 -2
@@ -1,7 +1,15 @@
1
1
  /**
2
2
  * Database Schema Analysis
3
- * Parses SQL migrations, Prisma schemas, Drizzle definitions,
4
- * SQLAlchemy models, TypeORM entities, and Sequelize models.
3
+ * Comprehensive ORM support:
4
+ * - JavaScript/TypeScript: Prisma, Drizzle, TypeORM, Sequelize, MikroORM, Knex, Objection, Bookshelf
5
+ * - Python: SQLAlchemy, Django ORM, SQLModel, Tortoise ORM, Peewee, SQLObject, Pony ORM, Databases
6
+ * - Ruby: ActiveRecord, Sequel
7
+ * - Java: Hibernate, JPA, MyBatis, jOOQ, Ebean
8
+ * - PHP: Doctrine, Eloquent, Propel, RedBeanPHP
9
+ * - C#: Entity Framework, Dapper, NHibernate
10
+ * - Go: GORM, Ent, SQLBoiler, Beego ORM
11
+ * - Rust: Diesel, Sea-ORM, SQLx
12
+ * - Plus raw SQL migrations
5
13
  */
6
14
  export interface DBColumn {
7
15
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"db-schema.d.ts","sourceRoot":"","sources":["../../src/analyzers/db-schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,YAAY,GAAG,aAAa,GAAG,cAAc,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrH,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACzE,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACnG,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AA+FD;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAkI5G"}
1
+ {"version":3,"file":"db-schema.d.ts","sourceRoot":"","sources":["../../src/analyzers/db-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,YAAY,GAAG,aAAa,GAAG,cAAc,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrH,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACzE,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACnG,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAgID;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CA8hB5G"}
@@ -1,7 +1,15 @@
1
1
  /**
2
2
  * Database Schema Analysis
3
- * Parses SQL migrations, Prisma schemas, Drizzle definitions,
4
- * SQLAlchemy models, TypeORM entities, and Sequelize models.
3
+ * Comprehensive ORM support:
4
+ * - JavaScript/TypeScript: Prisma, Drizzle, TypeORM, Sequelize, MikroORM, Knex, Objection, Bookshelf
5
+ * - Python: SQLAlchemy, Django ORM, SQLModel, Tortoise ORM, Peewee, SQLObject, Pony ORM, Databases
6
+ * - Ruby: ActiveRecord, Sequel
7
+ * - Java: Hibernate, JPA, MyBatis, jOOQ, Ebean
8
+ * - PHP: Doctrine, Eloquent, Propel, RedBeanPHP
9
+ * - C#: Entity Framework, Dapper, NHibernate
10
+ * - Go: GORM, Ent, SQLBoiler, Beego ORM
11
+ * - Rust: Diesel, Sea-ORM, SQLx
12
+ * - Plus raw SQL migrations
5
13
  */
6
14
  import { listFiles } from '../search/fast-search.js';
7
15
  import { readFile } from 'node:fs/promises';
@@ -77,26 +85,49 @@ function parsePrismaSchema(content, file) {
77
85
  }
78
86
  function parseDrizzleSchema(content, file) {
79
87
  const tables = [];
80
- const tableMatches = content.matchAll(/(?:export\s+const\s+)?(\w+)\s*=\s*(?:pg|mysql|sqlite)Table\s*\(\s*['"](\w+)['"]\s*,\s*\{([\s\S]*?)\}\s*\)/g);
88
+ // Enhanced regex to match various Drizzle table patterns:
89
+ // - pgTable('name', { ... })
90
+ // - mysqlTable('name', { ... })
91
+ // - sqliteTable('name', { ... })
92
+ // - Also matches with or without 'export const'
93
+ const tableMatches = content.matchAll(/(?:export\s+(?:const|default|function)\s+)?(\w+)\s*=\s*(?:pg|mysql|sqlite|drizzle\.)?Table\s*\(\s*['"`](\w+)['"`]\s*,\s*\{([\s\S]*?)\}\s*\)/g);
81
94
  for (const match of tableMatches) {
82
95
  const tableName = match[2];
83
96
  const body = match[3];
84
97
  const columns = [];
85
- const colMatches = body.matchAll(/(\w+)\s*:\s*(\w+)\s*\(\s*['"]?(\w+)['"]?\s*\)/g);
98
+ // Enhanced column parsing to handle various Drizzle column patterns:
99
+ // - columnName: varchar('columnName')
100
+ // - columnName: integer('columnName').primaryKey()
101
+ // - columnName: text('columnName').notNull()
102
+ // - columnName: serial('columnName')
103
+ // - Also handles columns without explicit name parameter
104
+ const colMatches = body.matchAll(/(\w+)\s*:\s*(\w+)\s*\(\s*['"`]?(\w+)['"`]?\s*\)(?:\s*\.\w+\([^)]*\))*/g);
86
105
  for (const col of colMatches) {
87
- const column = { name: col[3] || col[1], type: col[2] };
88
- const fullLine = body.slice(body.indexOf(col[0]));
89
- if (/\.primaryKey\(\)/.test(fullLine))
106
+ const columnName = col[3] || col[1]; // Use explicit name or fallback to property name
107
+ const columnType = col[2];
108
+ const column = { name: columnName, type: columnType };
109
+ // Find the full column definition to check for modifiers
110
+ const colStart = body.indexOf(col[0]);
111
+ const colEnd = body.indexOf(',', colStart);
112
+ const colEnd2 = body.indexOf('\n', colStart);
113
+ const fullColumnDef = body.slice(colStart, colEnd !== -1 && (colEnd2 === -1 || colEnd < colEnd2) ? colEnd : colEnd2 !== -1 ? colEnd2 : body.length);
114
+ // Check for Drizzle column modifiers
115
+ if (/\.primaryKey\(\)/.test(fullColumnDef))
90
116
  column.primary = true;
91
- if (/\.notNull\(\)/.test(fullLine))
117
+ if (/\.notNull\(\)/.test(fullColumnDef))
92
118
  column.nullable = false;
93
- if (/\.unique\(\)/.test(fullLine))
119
+ if (/\.unique\(\)/.test(fullColumnDef))
94
120
  column.unique = true;
95
- if (/\.references\(\)/.test(fullLine))
96
- column.references = 'foreign_key';
121
+ // Check for references
122
+ const refMatch = fullColumnDef.match(/\.references\s*\(\s*\(\)\s*=>\s*(\w+)\.(\w+)/);
123
+ if (refMatch) {
124
+ column.references = refMatch[2]; // Reference to another table's column
125
+ }
97
126
  columns.push(column);
98
127
  }
99
- tables.push({ name: tableName, columns, source: file, orm: 'drizzle' });
128
+ if (columns.length > 0 || tableName) {
129
+ tables.push({ name: tableName, columns, source: file, orm: 'drizzle' });
130
+ }
100
131
  }
101
132
  return tables;
102
133
  }
@@ -146,12 +177,60 @@ export async function analyzeDBSchema(cwd, options) {
146
177
  /* skip */
147
178
  }
148
179
  }
149
- // 3. Drizzle schemas
150
- const drizzleFiles = await listFiles(dir, { glob: '**/schema.{ts,js}' }).catch(() => []);
151
- for (const file of drizzleFiles) {
180
+ // 3. Drizzle schemas — check package.json first, then search multiple common locations
181
+ let hasDrizzlePackage = false;
182
+ try {
183
+ const pkgPath = path.resolve(dir, 'package.json');
184
+ const pkgContent = await readFile(pkgPath, 'utf-8');
185
+ const pkg = JSON.parse(pkgContent);
186
+ const allDeps = { ...(pkg.dependencies || {}), ...(pkg.devDependencies || {}) };
187
+ if (allDeps['drizzle-orm'] || allDeps['drizzle-kit']) {
188
+ hasDrizzlePackage = true;
189
+ orms.add('drizzle');
190
+ }
191
+ }
192
+ catch {
193
+ /* no package.json or parse error */
194
+ }
195
+ // Search for Drizzle schema files in common locations
196
+ const drizzleGlobs = [
197
+ '**/schema.{ts,js,tsx,jsx}',
198
+ '**/schema/**/*.{ts,js,tsx,jsx}',
199
+ '**/db/**/*.{ts,js,tsx,jsx}',
200
+ '**/drizzle/**/*.{ts,js,tsx,jsx}',
201
+ '**/*schema*.{ts,js,tsx,jsx}',
202
+ '**/*table*.{ts,js,tsx,jsx}',
203
+ '**/lib/db/**/*.{ts,js,tsx,jsx}',
204
+ '**/src/db/**/*.{ts,js,tsx,jsx}',
205
+ ];
206
+ const drizzleFileSet = new Set();
207
+ for (const glob of drizzleGlobs) {
208
+ const files = await listFiles(dir, { glob }).catch(() => []);
209
+ for (const f of files)
210
+ drizzleFileSet.add(f);
211
+ }
212
+ // Also search for files that import drizzle-orm
213
+ if (hasDrizzlePackage) {
214
+ // If drizzle-orm is in package.json, scan more TypeScript/JavaScript files
215
+ const tsFiles = await listFiles(dir, { glob: '**/*.{ts,js,tsx,jsx}' }).catch(() => []);
216
+ for (const f of tsFiles.slice(0, 500)) {
217
+ try {
218
+ const content = await readFile(path.resolve(dir, f), 'utf-8');
219
+ // Check for drizzle-orm imports
220
+ if (/from\s+['"]drizzle-orm|import.*drizzle-orm|require\(['"]drizzle-orm/.test(content)) {
221
+ drizzleFileSet.add(f);
222
+ }
223
+ }
224
+ catch {
225
+ /* skip */
226
+ }
227
+ }
228
+ }
229
+ for (const file of [...drizzleFileSet].slice(0, 300)) {
152
230
  try {
153
231
  const content = await readFile(path.resolve(dir, file), 'utf-8');
154
- if (/pgTable|mysqlTable|sqliteTable/.test(content)) {
232
+ // Enhanced detection: check for various Drizzle patterns
233
+ if (/pgTable|mysqlTable|sqliteTable|drizzle\.table|from\s+['"]drizzle-orm|import.*drizzle-orm/.test(content)) {
155
234
  const tables = parseDrizzleSchema(content, file);
156
235
  allTables.push(...tables);
157
236
  if (tables.length > 0)
@@ -162,13 +241,36 @@ export async function analyzeDBSchema(cwd, options) {
162
241
  /* skip */
163
242
  }
164
243
  }
165
- // 4. TypeORM / Sequelize entities (basic detection)
244
+ // 4. TypeORM / Sequelize / MikroORM entities (basic detection)
245
+ // Check package.json for ORM packages first
246
+ try {
247
+ const pkgPath = path.resolve(dir, 'package.json');
248
+ const pkgContent = await readFile(pkgPath, 'utf-8');
249
+ const pkg = JSON.parse(pkgContent);
250
+ const allDeps = { ...(pkg.dependencies || {}), ...(pkg.devDependencies || {}) };
251
+ if (allDeps['typeorm'])
252
+ orms.add('typeorm');
253
+ if (allDeps['sequelize'] || allDeps['@sequelize/core'])
254
+ orms.add('sequelize');
255
+ if (allDeps['@mikro-orm/core'] || allDeps['@mikro-orm/postgresql'] || allDeps['@mikro-orm/mysql'])
256
+ orms.add('mikroorm');
257
+ if (allDeps['knex'])
258
+ orms.add('knex');
259
+ if (allDeps['objection'])
260
+ orms.add('objection');
261
+ if (allDeps['bookshelf'])
262
+ orms.add('bookshelf');
263
+ }
264
+ catch {
265
+ /* no package.json or parse error */
266
+ }
166
267
  const entityFiles = await listFiles(dir, { glob: '**/*.entity.{ts,js}' }).catch(() => []);
167
268
  const modelFiles = await listFiles(dir, { glob: '**/models/**/*.{ts,js}' }).catch(() => []);
168
- for (const file of [...entityFiles, ...modelFiles].slice(0, 100)) {
269
+ for (const file of [...entityFiles, ...modelFiles].slice(0, 150)) {
169
270
  try {
170
271
  const content = await readFile(path.resolve(dir, file), 'utf-8');
171
- if (/@Entity/.test(content) || /sequelize/.test(content)) {
272
+ // TypeORM detection
273
+ if (/@Entity/.test(content)) {
172
274
  const classMatch = content.match(/class\s+(\w+)/);
173
275
  if (classMatch) {
174
276
  const columns = [];
@@ -180,9 +282,46 @@ export async function analyzeDBSchema(cwd, options) {
180
282
  name: classMatch[1],
181
283
  columns,
182
284
  source: file,
183
- orm: /@Entity/.test(content) ? 'typeorm' : 'sequelize',
285
+ orm: 'typeorm',
286
+ });
287
+ orms.add('typeorm');
288
+ }
289
+ }
290
+ // Sequelize detection
291
+ else if (/sequelize|Sequelize\.define/.test(content)) {
292
+ const classMatch = content.match(/class\s+(\w+)|define\s*\(\s*['"](\w+)['"]/);
293
+ if (classMatch) {
294
+ const tableName = classMatch[1] || classMatch[2];
295
+ const columns = [];
296
+ const colMatches = content.matchAll(/(\w+)\s*:\s*\{[^}]*type:\s*Sequelize\.(\w+)/g);
297
+ for (const col of colMatches) {
298
+ columns.push({ name: col[1], type: col[2] || 'unknown' });
299
+ }
300
+ allTables.push({
301
+ name: tableName,
302
+ columns,
303
+ source: file,
304
+ orm: 'sequelize',
305
+ });
306
+ orms.add('sequelize');
307
+ }
308
+ }
309
+ // MikroORM detection
310
+ else if (/@Entity\(\)|Entity\(\)/.test(content)) {
311
+ const classMatch = content.match(/class\s+(\w+)/);
312
+ if (classMatch) {
313
+ const columns = [];
314
+ const colMatches = content.matchAll(/@Property\s*\([^)]*\)\s*\n?\s*(\w+)/g);
315
+ for (const col of colMatches) {
316
+ columns.push({ name: col[1], type: 'unknown' });
317
+ }
318
+ allTables.push({
319
+ name: classMatch[1],
320
+ columns,
321
+ source: file,
322
+ orm: 'mikroorm',
184
323
  });
185
- orms.add(/@Entity/.test(content) ? 'typeorm' : 'sequelize');
324
+ orms.add('mikroorm');
186
325
  }
187
326
  }
188
327
  }
@@ -190,6 +329,289 @@ export async function analyzeDBSchema(cwd, options) {
190
329
  /* skip */
191
330
  }
192
331
  }
332
+ // 5. Knex.js schema builder detection
333
+ const knexFiles = await listFiles(dir, { glob: '**/migrations/**/*.{ts,js}' }).catch(() => []);
334
+ for (const file of knexFiles.slice(0, 50)) {
335
+ try {
336
+ const content = await readFile(path.resolve(dir, file), 'utf-8');
337
+ if (/\.createTable\s*\(|knex\.schema/.test(content)) {
338
+ const tableMatches = content.matchAll(/\.createTable\s*\(\s*['"](\w+)['"]/g);
339
+ for (const match of tableMatches) {
340
+ allTables.push({
341
+ name: match[1],
342
+ columns: [],
343
+ source: file,
344
+ orm: 'knex',
345
+ });
346
+ orms.add('knex');
347
+ }
348
+ }
349
+ }
350
+ catch {
351
+ /* skip */
352
+ }
353
+ }
354
+ // 6. Python ORMs: SQLAlchemy, Django ORM, SQLModel, Tortoise ORM, Peewee, SQLObject
355
+ const pythonFiles = await listFiles(dir, { glob: '**/*.py' }).catch(() => []);
356
+ for (const file of pythonFiles.slice(0, 200)) {
357
+ try {
358
+ const content = await readFile(path.resolve(dir, file), 'utf-8');
359
+ // SQLAlchemy detection
360
+ if (/from\s+sqlalchemy|import\s+sqlalchemy|Base\s*=\s*declarative_base/.test(content)) {
361
+ const classMatches = content.matchAll(/class\s+(\w+)\s*\([^)]*Base[^)]*\)/g);
362
+ for (const match of classMatches) {
363
+ const columns = [];
364
+ const colMatches = content.matchAll(/Column\s*\([^)]*\)/g);
365
+ for (const col of colMatches) {
366
+ const nameMatch = col[0].match(/['"](\w+)['"]/);
367
+ const typeMatch = col[0].match(/(?:Integer|String|Text|Boolean|Float|DateTime|Date|ForeignKey)/);
368
+ if (nameMatch) {
369
+ columns.push({ name: nameMatch[1], type: typeMatch ? typeMatch[1] : 'unknown' });
370
+ }
371
+ }
372
+ allTables.push({ name: match[1], columns, source: file, orm: 'sqlalchemy' });
373
+ orms.add('sqlalchemy');
374
+ }
375
+ }
376
+ // Django ORM detection
377
+ if (/from\s+django\.db|models\.Model|models\.ForeignKey/.test(content)) {
378
+ const classMatches = content.matchAll(/class\s+(\w+)\s*\([^)]*models\.Model[^)]*\)/g);
379
+ for (const match of classMatches) {
380
+ const columns = [];
381
+ const colMatches = content.matchAll(/(\w+)\s*=\s*models\.(\w+)/g);
382
+ for (const col of colMatches) {
383
+ columns.push({ name: col[1], type: col[2] || 'unknown' });
384
+ }
385
+ allTables.push({ name: match[1], columns, source: file, orm: 'django' });
386
+ orms.add('django');
387
+ }
388
+ }
389
+ // SQLModel detection
390
+ if (/from\s+sqlmodel|import\s+sqlmodel|SQLModel/.test(content)) {
391
+ const classMatches = content.matchAll(/class\s+(\w+)\s*\([^)]*SQLModel[^)]*\)/g);
392
+ for (const match of classMatches) {
393
+ const columns = [];
394
+ const colMatches = content.matchAll(/(\w+)\s*:\s*(\w+)/g);
395
+ for (const col of colMatches) {
396
+ columns.push({ name: col[1], type: col[2] || 'unknown' });
397
+ }
398
+ allTables.push({ name: match[1], columns, source: file, orm: 'sqlmodel' });
399
+ orms.add('sqlmodel');
400
+ }
401
+ }
402
+ // Tortoise ORM detection
403
+ if (/from\s+tortoise|import\s+tortoise|Model/.test(content)) {
404
+ const classMatches = content.matchAll(/class\s+(\w+)\s*\([^)]*Model[^)]*\)/g);
405
+ for (const match of classMatches) {
406
+ const columns = [];
407
+ const colMatches = content.matchAll(/(\w+)\s*=\s*(\w+)Field/g);
408
+ for (const col of colMatches) {
409
+ columns.push({ name: col[1], type: col[2] || 'unknown' });
410
+ }
411
+ allTables.push({ name: match[1], columns, source: file, orm: 'tortoise' });
412
+ orms.add('tortoise');
413
+ }
414
+ }
415
+ // Peewee detection
416
+ if (/from\s+peewee|import\s+peewee|Model/.test(content)) {
417
+ const classMatches = content.matchAll(/class\s+(\w+)\s*\([^)]*Model[^)]*\)/g);
418
+ for (const match of classMatches) {
419
+ const columns = [];
420
+ const colMatches = content.matchAll(/(\w+)\s*=\s*(\w+)Field/g);
421
+ for (const col of colMatches) {
422
+ columns.push({ name: col[1], type: col[2] || 'unknown' });
423
+ }
424
+ allTables.push({ name: match[1], columns, source: file, orm: 'peewee' });
425
+ orms.add('peewee');
426
+ }
427
+ }
428
+ }
429
+ catch {
430
+ /* skip */
431
+ }
432
+ }
433
+ // 7. Ruby ORMs: ActiveRecord, Sequel
434
+ const rubyFiles = await listFiles(dir, { glob: '**/*.rb' }).catch(() => []);
435
+ for (const file of rubyFiles.slice(0, 150)) {
436
+ try {
437
+ const content = await readFile(path.resolve(dir, file), 'utf-8');
438
+ // ActiveRecord detection
439
+ if (/class\s+\w+\s*<\s*ActiveRecord::Base|ApplicationRecord/.test(content)) {
440
+ const classMatches = content.matchAll(/class\s+(\w+)\s*<\s*(?:ActiveRecord::Base|ApplicationRecord)/g);
441
+ for (const match of classMatches) {
442
+ const columns = [];
443
+ const colMatches = content.matchAll(/(?:belongs_to|has_many|has_one|has_and_belongs_to_many)\s+:(\w+)/g);
444
+ for (const col of colMatches) {
445
+ columns.push({ name: col[1], type: 'association' });
446
+ }
447
+ allTables.push({ name: match[1], columns, source: file, orm: 'activerecord' });
448
+ orms.add('activerecord');
449
+ }
450
+ }
451
+ // Sequel detection
452
+ if (/class\s+\w+\s*<\s*Sequel::Model/.test(content)) {
453
+ const classMatches = content.matchAll(/class\s+(\w+)\s*<\s*Sequel::Model/g);
454
+ for (const match of classMatches) {
455
+ allTables.push({ name: match[1], columns: [], source: file, orm: 'sequel' });
456
+ orms.add('sequel');
457
+ }
458
+ }
459
+ }
460
+ catch {
461
+ /* skip */
462
+ }
463
+ }
464
+ // 8. Java ORMs: Hibernate, JPA, MyBatis, jOOQ
465
+ const javaFiles = await listFiles(dir, { glob: '**/*.java' }).catch(() => []);
466
+ for (const file of javaFiles.slice(0, 150)) {
467
+ try {
468
+ const content = await readFile(path.resolve(dir, file), 'utf-8');
469
+ // Hibernate/JPA detection
470
+ if (/@Entity|@Table|javax\.persistence|jakarta\.persistence/.test(content)) {
471
+ const classMatches = content.matchAll(/@Entity\s*(?:@Table\s*\([^)]*\))?\s*public\s+class\s+(\w+)/g);
472
+ for (const match of classMatches) {
473
+ const columns = [];
474
+ const colMatches = content.matchAll(/@Column\s*(?:\([^)]*\))?\s*private\s+\w+\s+(\w+)/g);
475
+ for (const col of colMatches) {
476
+ columns.push({ name: col[1], type: 'unknown' });
477
+ }
478
+ allTables.push({ name: match[1], columns, source: file, orm: 'hibernate' });
479
+ orms.add('hibernate');
480
+ }
481
+ }
482
+ // MyBatis detection
483
+ if (/@Mapper|@Select|@Insert|@Update|@Delete|mybatis/.test(content)) {
484
+ const classMatches = content.matchAll(/@Mapper\s*public\s+interface\s+(\w+)/g);
485
+ for (const match of classMatches) {
486
+ allTables.push({ name: match[1], columns: [], source: file, orm: 'mybatis' });
487
+ orms.add('mybatis');
488
+ }
489
+ }
490
+ }
491
+ catch {
492
+ /* skip */
493
+ }
494
+ }
495
+ // 9. PHP ORMs: Doctrine, Eloquent, Propel
496
+ const phpFiles = await listFiles(dir, { glob: '**/*.php' }).catch(() => []);
497
+ for (const file of phpFiles.slice(0, 150)) {
498
+ try {
499
+ const content = await readFile(path.resolve(dir, file), 'utf-8');
500
+ // Doctrine detection
501
+ if (/use\s+Doctrine|@Entity|@Table|@Column/.test(content)) {
502
+ const classMatches = content.matchAll(/class\s+(\w+)/g);
503
+ for (const match of classMatches) {
504
+ const columns = [];
505
+ const colMatches = content.matchAll(/@Column\s*(?:\([^)]*\))?\s*private\s+\$\w+/g);
506
+ for (const col of colMatches) {
507
+ const nameMatch = col[0].match(/\$(\w+)/);
508
+ if (nameMatch)
509
+ columns.push({ name: nameMatch[1], type: 'unknown' });
510
+ }
511
+ allTables.push({ name: match[1], columns, source: file, orm: 'doctrine' });
512
+ orms.add('doctrine');
513
+ }
514
+ }
515
+ // Eloquent detection
516
+ if (/extends\s+Model|use\s+Illuminate\\Database\\Eloquent\\Model/.test(content)) {
517
+ const classMatches = content.matchAll(/class\s+(\w+)\s+extends\s+Model/g);
518
+ for (const match of classMatches) {
519
+ allTables.push({ name: match[1], columns: [], source: file, orm: 'eloquent' });
520
+ orms.add('eloquent');
521
+ }
522
+ }
523
+ }
524
+ catch {
525
+ /* skip */
526
+ }
527
+ }
528
+ // 10. C# ORMs: Entity Framework, Dapper, NHibernate
529
+ const csharpFiles = await listFiles(dir, { glob: '**/*.cs' }).catch(() => []);
530
+ for (const file of csharpFiles.slice(0, 150)) {
531
+ try {
532
+ const content = await readFile(path.resolve(dir, file), 'utf-8');
533
+ // Entity Framework detection
534
+ if (/DbSet|DbContext|using\s+Microsoft\.EntityFrameworkCore/.test(content)) {
535
+ const classMatches = content.matchAll(/public\s+class\s+(\w+)/g);
536
+ for (const match of classMatches) {
537
+ const columns = [];
538
+ const colMatches = content.matchAll(/public\s+\w+\s+(\w+)\s*\{/g);
539
+ for (const col of colMatches) {
540
+ columns.push({ name: col[1], type: 'unknown' });
541
+ }
542
+ allTables.push({ name: match[1], columns, source: file, orm: 'entityframework' });
543
+ orms.add('entityframework');
544
+ }
545
+ }
546
+ // Dapper detection
547
+ if (/using\s+Dapper|Query<|QueryFirst/.test(content)) {
548
+ orms.add('dapper');
549
+ }
550
+ }
551
+ catch {
552
+ /* skip */
553
+ }
554
+ }
555
+ // 11. Go ORMs: GORM, Ent, SQLBoiler
556
+ const goFiles = await listFiles(dir, { glob: '**/*.go' }).catch(() => []);
557
+ for (const file of goFiles.slice(0, 150)) {
558
+ try {
559
+ const content = await readFile(path.resolve(dir, file), 'utf-8');
560
+ // GORM detection
561
+ if (/gorm\.Model|gorm:"|github\.com\/jinzhu\/gorm/.test(content)) {
562
+ const structMatches = content.matchAll(/type\s+(\w+)\s+struct\s*\{/g);
563
+ for (const match of structMatches) {
564
+ const columns = [];
565
+ const colMatches = content.matchAll(/(\w+)\s+\w+\s+`gorm:"[^"]*"`/g);
566
+ for (const col of colMatches) {
567
+ columns.push({ name: col[1], type: 'unknown' });
568
+ }
569
+ allTables.push({ name: match[1], columns, source: file, orm: 'gorm' });
570
+ orms.add('gorm');
571
+ }
572
+ }
573
+ // Ent detection
574
+ if (/ent\.Schema|github\.com\/facebook\/ent/.test(content)) {
575
+ const funcMatches = content.matchAll(/func\s+\(\w+\s+\*\w+\)\s+Fields\(\)\s+\[\]ent\.Field/g);
576
+ if (funcMatches) {
577
+ orms.add('ent');
578
+ }
579
+ }
580
+ }
581
+ catch {
582
+ /* skip */
583
+ }
584
+ }
585
+ // 12. Rust ORMs: Diesel, Sea-ORM, SQLx
586
+ const rustFiles = await listFiles(dir, { glob: '**/*.rs' }).catch(() => []);
587
+ for (const file of rustFiles.slice(0, 150)) {
588
+ try {
589
+ const content = await readFile(path.resolve(dir, file), 'utf-8');
590
+ // Diesel detection
591
+ if (/diesel::|table!\s*\{|Queryable/.test(content)) {
592
+ const tableMatches = content.matchAll(/table!\s*\{[\s\S]*?name\s*=\s*(\w+)/g);
593
+ for (const match of tableMatches) {
594
+ allTables.push({ name: match[1], columns: [], source: file, orm: 'diesel' });
595
+ orms.add('diesel');
596
+ }
597
+ }
598
+ // Sea-ORM detection
599
+ if (/sea_orm|EntityTrait|ActiveModelTrait/.test(content)) {
600
+ const structMatches = content.matchAll(/struct\s+(\w+)/g);
601
+ for (const match of structMatches) {
602
+ allTables.push({ name: match[1], columns: [], source: file, orm: 'sea-orm' });
603
+ orms.add('sea-orm');
604
+ }
605
+ }
606
+ // SQLx detection
607
+ if (/sqlx::|sqlx::query|sqlx::query_as/.test(content)) {
608
+ orms.add('sqlx');
609
+ }
610
+ }
611
+ catch {
612
+ /* skip */
613
+ }
614
+ }
193
615
  // Detect relationships from foreign keys / references
194
616
  const relationships = [];
195
617
  for (const table of allTables) {
@@ -213,13 +635,22 @@ export async function analyzeDBSchema(cwd, options) {
213
635
  }
214
636
  const totalColumns = allTables.reduce((sum, t) => sum + t.columns.length, 0);
215
637
  const scannedPatterns = [
216
- '**/*.sql',
217
- '**/migrations/**/*.sql',
218
- '**/migrate/**/*.sql',
219
- '**/schema.prisma',
220
- '**/schema.{ts,js} (Drizzle)',
638
+ '**/*.sql (Raw SQL)',
639
+ '**/migrations/**/*.sql (SQL Migrations)',
640
+ '**/migrate/**/*.sql (SQL Migrations)',
641
+ '**/schema.prisma (Prisma)',
642
+ '**/schema.{ts,js}, **/db/**/*.{ts,js}, **/drizzle/**/*.{ts,js} (Drizzle ORM)',
221
643
  '**/*.entity.{ts,js} (TypeORM)',
222
- '**/models/**/*.{ts,js} (Sequelize)',
644
+ '**/models/**/*.{ts,js} (Sequelize/MikroORM)',
645
+ '**/migrations/**/*.{ts,js} (Knex.js)',
646
+ '**/*.py (SQLAlchemy, Django ORM, SQLModel, Tortoise, Peewee)',
647
+ '**/*.rb (ActiveRecord, Sequel)',
648
+ '**/*.java (Hibernate, JPA, MyBatis)',
649
+ '**/*.php (Doctrine, Eloquent)',
650
+ '**/*.cs (Entity Framework, Dapper)',
651
+ '**/*.go (GORM, Ent)',
652
+ '**/*.rs (Diesel, Sea-ORM, SQLx)',
653
+ 'package.json, requirements.txt, Gemfile, pom.xml, composer.json (ORM dependencies)',
223
654
  ];
224
655
  return {
225
656
  tables: allTables,
@@ -1 +1 @@
1
- {"version":3,"file":"db-schema.js","sourceRoot":"","sources":["../../src/analyzers/db-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db-schema.js","sourceRoot":"","sources":["../../src/analyzers/db-schema.ts"],"names":[],"mappings":"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"}