/** * Database Antipatterns Scanner * * Detects scalability and database antipatterns in JavaScript/TypeScript projects. * Drizzle-first detection with fallback to generic/raw-SQL patterns. * * Detections: * 1. Missing pagination — unbounded SELECT / findMany / db.select() with no LIMIT/take * 2. SELECT * / over-fetch — bare SELECT * or Drizzle select with no column projection * 3. Connection pool per request — new Pool/Client/neon/drizzle inside a route handler * 4. Missing index / full-table scan — Drizzle schema cross-reference for unindexed filters * 5. O(n²) nested iteration — nested for/map/forEach where inner body uses .find/.includes * 6. N+1 queries (Drizzle-aware) — await db./tx. inside .map(async / for loop body * * All suppressed in test, migration, seed, and script files (same guards as * bottleneck-detector.ts). Confidence-scored with FP guards. * * @module scanners/scale/db-antipatterns */ import type { ScannerResult } from "../types.js"; /** Rule ID constants used in ruleId fields. */ export declare const DB_ANTIPATTERN_RULES: { readonly MISSING_PAGINATION: "db-antipatterns:missing-pagination"; readonly SELECT_STAR: "db-antipatterns:select-star"; readonly POOL_PER_REQUEST: "db-antipatterns:pool-per-request"; readonly MISSING_INDEX: "db-antipatterns:missing-index"; readonly N_SQUARED: "db-antipatterns:n-squared-iteration"; readonly N_PLUS_ONE: "db-antipatterns:n-plus-one"; }; /** * Run the database antipatterns scanner against a project. * * Returns errors in the result, never throws. Gracefully degrades when no * relevant files are found (returns success: true, findings: []). */ export declare function runDbAntipatterns(projectPath: string): Promise; //# sourceMappingURL=db-antipatterns.d.ts.map