@kevinrabun/judges 2.1.0 → 2.3.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 (133) hide show
  1. package/README.md +60 -9
  2. package/dist/evaluators/accessibility.d.ts.map +1 -1
  3. package/dist/evaluators/accessibility.js +32 -0
  4. package/dist/evaluators/accessibility.js.map +1 -1
  5. package/dist/evaluators/agent-instructions.d.ts.map +1 -1
  6. package/dist/evaluators/agent-instructions.js +59 -0
  7. package/dist/evaluators/agent-instructions.js.map +1 -1
  8. package/dist/evaluators/ai-code-safety.d.ts +9 -0
  9. package/dist/evaluators/ai-code-safety.d.ts.map +1 -0
  10. package/dist/evaluators/ai-code-safety.js +511 -0
  11. package/dist/evaluators/ai-code-safety.js.map +1 -0
  12. package/dist/evaluators/api-design.d.ts.map +1 -1
  13. package/dist/evaluators/api-design.js +31 -16
  14. package/dist/evaluators/api-design.js.map +1 -1
  15. package/dist/evaluators/authentication.d.ts.map +1 -1
  16. package/dist/evaluators/authentication.js +68 -10
  17. package/dist/evaluators/authentication.js.map +1 -1
  18. package/dist/evaluators/backwards-compatibility.d.ts.map +1 -1
  19. package/dist/evaluators/backwards-compatibility.js +25 -3
  20. package/dist/evaluators/backwards-compatibility.js.map +1 -1
  21. package/dist/evaluators/caching.d.ts.map +1 -1
  22. package/dist/evaluators/caching.js +25 -4
  23. package/dist/evaluators/caching.js.map +1 -1
  24. package/dist/evaluators/ci-cd.d.ts.map +1 -1
  25. package/dist/evaluators/ci-cd.js +34 -12
  26. package/dist/evaluators/ci-cd.js.map +1 -1
  27. package/dist/evaluators/cloud-readiness.d.ts.map +1 -1
  28. package/dist/evaluators/cloud-readiness.js +26 -0
  29. package/dist/evaluators/cloud-readiness.js.map +1 -1
  30. package/dist/evaluators/code-structure.d.ts.map +1 -1
  31. package/dist/evaluators/code-structure.js +17 -0
  32. package/dist/evaluators/code-structure.js.map +1 -1
  33. package/dist/evaluators/compliance.d.ts.map +1 -1
  34. package/dist/evaluators/compliance.js +34 -5
  35. package/dist/evaluators/compliance.js.map +1 -1
  36. package/dist/evaluators/concurrency.d.ts.map +1 -1
  37. package/dist/evaluators/concurrency.js +20 -0
  38. package/dist/evaluators/concurrency.js.map +1 -1
  39. package/dist/evaluators/configuration-management.d.ts.map +1 -1
  40. package/dist/evaluators/configuration-management.js +50 -11
  41. package/dist/evaluators/configuration-management.js.map +1 -1
  42. package/dist/evaluators/cost-effectiveness.d.ts.map +1 -1
  43. package/dist/evaluators/cost-effectiveness.js +26 -0
  44. package/dist/evaluators/cost-effectiveness.js.map +1 -1
  45. package/dist/evaluators/cybersecurity.d.ts.map +1 -1
  46. package/dist/evaluators/cybersecurity.js +140 -0
  47. package/dist/evaluators/cybersecurity.js.map +1 -1
  48. package/dist/evaluators/data-security.d.ts.map +1 -1
  49. package/dist/evaluators/data-security.js +105 -0
  50. package/dist/evaluators/data-security.js.map +1 -1
  51. package/dist/evaluators/data-sovereignty.d.ts.map +1 -1
  52. package/dist/evaluators/data-sovereignty.js +85 -0
  53. package/dist/evaluators/data-sovereignty.js.map +1 -1
  54. package/dist/evaluators/database.d.ts.map +1 -1
  55. package/dist/evaluators/database.js +33 -9
  56. package/dist/evaluators/database.js.map +1 -1
  57. package/dist/evaluators/dependency-health.d.ts.map +1 -1
  58. package/dist/evaluators/dependency-health.js +71 -9
  59. package/dist/evaluators/dependency-health.js.map +1 -1
  60. package/dist/evaluators/documentation.d.ts.map +1 -1
  61. package/dist/evaluators/documentation.js +20 -0
  62. package/dist/evaluators/documentation.js.map +1 -1
  63. package/dist/evaluators/error-handling.d.ts.map +1 -1
  64. package/dist/evaluators/error-handling.js +89 -24
  65. package/dist/evaluators/error-handling.js.map +1 -1
  66. package/dist/evaluators/ethics-bias.d.ts.map +1 -1
  67. package/dist/evaluators/ethics-bias.js +20 -0
  68. package/dist/evaluators/ethics-bias.js.map +1 -1
  69. package/dist/evaluators/index.d.ts +2 -1
  70. package/dist/evaluators/index.d.ts.map +1 -1
  71. package/dist/evaluators/index.js +56 -2
  72. package/dist/evaluators/index.js.map +1 -1
  73. package/dist/evaluators/internationalization.d.ts.map +1 -1
  74. package/dist/evaluators/internationalization.js +43 -0
  75. package/dist/evaluators/internationalization.js.map +1 -1
  76. package/dist/evaluators/logging-privacy.d.ts.map +1 -1
  77. package/dist/evaluators/logging-privacy.js +66 -30
  78. package/dist/evaluators/logging-privacy.js.map +1 -1
  79. package/dist/evaluators/maintainability.d.ts.map +1 -1
  80. package/dist/evaluators/maintainability.js +38 -17
  81. package/dist/evaluators/maintainability.js.map +1 -1
  82. package/dist/evaluators/observability.d.ts.map +1 -1
  83. package/dist/evaluators/observability.js +20 -0
  84. package/dist/evaluators/observability.js.map +1 -1
  85. package/dist/evaluators/performance.d.ts.map +1 -1
  86. package/dist/evaluators/performance.js +30 -0
  87. package/dist/evaluators/performance.js.map +1 -1
  88. package/dist/evaluators/portability.d.ts.map +1 -1
  89. package/dist/evaluators/portability.js +22 -0
  90. package/dist/evaluators/portability.js.map +1 -1
  91. package/dist/evaluators/rate-limiting.d.ts.map +1 -1
  92. package/dist/evaluators/rate-limiting.js +33 -10
  93. package/dist/evaluators/rate-limiting.js.map +1 -1
  94. package/dist/evaluators/reliability.d.ts.map +1 -1
  95. package/dist/evaluators/reliability.js +20 -0
  96. package/dist/evaluators/reliability.js.map +1 -1
  97. package/dist/evaluators/scalability.d.ts.map +1 -1
  98. package/dist/evaluators/scalability.js +24 -0
  99. package/dist/evaluators/scalability.js.map +1 -1
  100. package/dist/evaluators/shared.d.ts.map +1 -1
  101. package/dist/evaluators/shared.js +1 -0
  102. package/dist/evaluators/shared.js.map +1 -1
  103. package/dist/evaluators/software-practices.d.ts.map +1 -1
  104. package/dist/evaluators/software-practices.js +47 -0
  105. package/dist/evaluators/software-practices.js.map +1 -1
  106. package/dist/evaluators/testing.d.ts.map +1 -1
  107. package/dist/evaluators/testing.js +20 -0
  108. package/dist/evaluators/testing.js.map +1 -1
  109. package/dist/evaluators/ux.d.ts.map +1 -1
  110. package/dist/evaluators/ux.js +24 -0
  111. package/dist/evaluators/ux.js.map +1 -1
  112. package/dist/evaluators/v2.d.ts.map +1 -1
  113. package/dist/evaluators/v2.js +6 -4
  114. package/dist/evaluators/v2.js.map +1 -1
  115. package/dist/index.js +25 -1
  116. package/dist/index.js.map +1 -1
  117. package/dist/judges/ai-code-safety.d.ts +3 -0
  118. package/dist/judges/ai-code-safety.d.ts.map +1 -0
  119. package/dist/judges/ai-code-safety.js +45 -0
  120. package/dist/judges/ai-code-safety.js.map +1 -0
  121. package/dist/judges/index.d.ts.map +1 -1
  122. package/dist/judges/index.js +2 -0
  123. package/dist/judges/index.js.map +1 -1
  124. package/dist/language-patterns.js +1 -1
  125. package/dist/language-patterns.js.map +1 -1
  126. package/dist/reports/public-repo-report.d.ts +3 -1
  127. package/dist/reports/public-repo-report.d.ts.map +1 -1
  128. package/dist/reports/public-repo-report.js +136 -9
  129. package/dist/reports/public-repo-report.js.map +1 -1
  130. package/dist/types.d.ts +24 -0
  131. package/dist/types.d.ts.map +1 -1
  132. package/package.json +4 -2
  133. package/server.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"data-security.js","sourceRoot":"","sources":["../../src/evaluators/data-security.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-security.js","sourceRoot":"","sources":["../../src/evaluators/data-security.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"data-sovereignty.d.ts","sourceRoot":"","sources":["../../src/evaluators/data-sovereignty.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE,CAyIhF"}
1
+ {"version":3,"file":"data-sovereignty.d.ts","sourceRoot":"","sources":["../../src/evaluators/data-sovereignty.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE,CAkPhF"}
@@ -24,6 +24,8 @@ export function analyzeDataSovereignty(code, language) {
24
24
  lineNumbers: hardcodedGlobalOrForeignLines.slice(0, 10),
25
25
  recommendation: "Enforce a strict approved-region allowlist and reject deployments/requests outside permitted jurisdictions.",
26
26
  reference: "Data Residency Governance / GDPR Chapter V",
27
+ suggestedFix: "Add an approved-region allowlist: const ALLOWED_REGIONS = ['eu-west-1', 'eu-central-1']; and validate before deployment/request routing.",
28
+ confidence: 0.85,
27
29
  });
28
30
  }
29
31
  const crossBorderEgressLines = [];
@@ -42,6 +44,8 @@ export function analyzeDataSovereignty(code, language) {
42
44
  lineNumbers: crossBorderEgressLines.slice(0, 10),
43
45
  recommendation: "Add egress controls that validate destination jurisdiction, data classification, and lawful transfer conditions before sending data.",
44
46
  reference: "GDPR Articles 44-49 / Cross-Border Transfer Controls",
47
+ suggestedFix: "Add egress validation: if (!approvedJurisdictions.includes(getDestinationRegion(url))) throw new SovereigntyError('Cross-border transfer blocked');",
48
+ confidence: 0.8,
45
49
  });
46
50
  }
47
51
  const replicationLines = [];
@@ -59,6 +63,8 @@ export function analyzeDataSovereignty(code, language) {
59
63
  lineNumbers: replicationLines.slice(0, 10),
60
64
  recommendation: "Pin replication and backup targets to approved jurisdictions and document DR geography constraints.",
61
65
  reference: "Data Localization Controls / Operational Resilience",
66
+ suggestedFix: "Pin replicas to approved regions: replication: { regions: ALLOWED_REGIONS } and add sovereignty tags to backup configurations.",
67
+ confidence: 0.85,
62
68
  });
63
69
  }
64
70
  const exportLines = [];
@@ -76,6 +82,8 @@ export function analyzeDataSovereignty(code, language) {
76
82
  lineNumbers: exportLines.slice(0, 10),
77
83
  recommendation: "Apply policy checks to export paths (region eligibility, minimization, anonymization) and block disallowed exports.",
78
84
  reference: "Data Governance / Transfer Risk Mitigation",
85
+ suggestedFix: "Gate export paths with policy checks: if (!exportPolicy.isAllowed(dataClass, targetRegion)) throw new Error('Export blocked by sovereignty policy');",
86
+ confidence: 0.8,
79
87
  });
80
88
  }
81
89
  const geoRoutingSignals = /(country|locale|region|jurisdiction|tenantRegion|dataBoundary)/i.test(code);
@@ -89,6 +97,81 @@ export function analyzeDataSovereignty(code, language) {
89
97
  lineNumbers: regionMentionLines.slice(0, 10),
90
98
  recommendation: "Implement explicit enforcement branches that block operations violating residency or transfer policy.",
91
99
  reference: "Policy-as-Code Enforcement Best Practices",
100
+ suggestedFix: "Add enforcement branches: if (region !== allowedRegion) { throw new PolicyViolationError('Data residency violation'); } before data operations.",
101
+ confidence: 0.75,
102
+ });
103
+ }
104
+ // CDN or third-party asset loading from external origins
105
+ const cdnLines = [];
106
+ lines.forEach((line, index) => {
107
+ if (/(?:cdn\.|cloudflare|unpkg|jsdelivr|cdnjs|googleapis|bootstrapcdn|cloudfront|akamai|maxcdn|stackpath)/i.test(line) &&
108
+ !/integrity\s*=|crossorigin|nonce|hash/i.test(line)) {
109
+ cdnLines.push(index + 1);
110
+ }
111
+ });
112
+ if (cdnLines.length > 0 && !hasRegionPolicy) {
113
+ findings.push({
114
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
115
+ severity: "medium",
116
+ title: "External CDN/third-party assets loaded without integrity checks",
117
+ description: "Code loads assets from external CDN origins without Subresource Integrity (SRI) hashes or approved-origin policies. These assets are served from globally distributed infrastructure whose data processing locations may not comply with sovereignty requirements.",
118
+ lineNumbers: cdnLines.slice(0, 10),
119
+ recommendation: "Add SRI integrity attributes for CDN-loaded scripts/styles. Maintain an approved CDN origin allowlist. Consider self-hosting critical assets within sovereign infrastructure.",
120
+ reference: "Subresource Integrity (SRI) / Data Sovereignty Asset Controls",
121
+ suggestedFix: "Add SRI hashes to CDN assets: <script src='cdn-url' integrity='sha384-...' crossorigin='anonymous'> and maintain an approved CDN origin allowlist.",
122
+ confidence: 0.85,
123
+ });
124
+ }
125
+ // Telemetry / analytics to external services
126
+ const telemetryLines = [];
127
+ lines.forEach((line, index) => {
128
+ if (/(?:google.?analytics|gtag|mixpanel|segment|amplitude|hotjar|heap|fullstory|posthog|sentry|datadog|newrelic|appinsights|applicationinsights|bugsnag|rollbar|logrocket)/i.test(line) &&
129
+ !/dsn.*localhost|endpoint.*localhost|self.?hosted|on.?premises?/i.test(line)) {
130
+ telemetryLines.push(index + 1);
131
+ }
132
+ });
133
+ if (telemetryLines.length > 0) {
134
+ findings.push({
135
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
136
+ severity: "high",
137
+ title: "Telemetry/analytics data sent to external service",
138
+ description: "Code integrates with external telemetry or analytics services that may process and store user behavior data, IP addresses, or session information in jurisdictions outside sovereignty boundaries.",
139
+ lineNumbers: telemetryLines.slice(0, 10),
140
+ recommendation: "Verify the analytics provider's data residency options and configure region-specific endpoints. Consider self-hosted alternatives (Plausible, Matomo, self-hosted PostHog) for sovereign environments. Ensure DPAs cover data processing locations.",
141
+ reference: "GDPR Articles 44-49 / Telemetry Data Sovereignty",
142
+ suggestedFix: "Configure region-specific telemetry endpoints or use self-hosted alternatives (Plausible, self-hosted PostHog). Ensure DPAs cover data processing locations.",
143
+ confidence: 0.85,
144
+ });
145
+ }
146
+ // PII stored without geographic partitioning
147
+ const hasPiiFields = /(?:email|phone|ssn|social.?security|date.?of.?birth|address|first.?name|last.?name|national.?id|passport|driver.?license)/i.test(code);
148
+ const hasGeoPartitioning = /(?:partition|shard|region.*key|tenant.*region|geo.*route|data.*boundary|residency.*tag|region.*id)/i.test(code);
149
+ const hasDbOps = /(?:create|insert|save|store|persist|write|update|upsert|put)/i.test(code);
150
+ if (hasPiiFields && hasDbOps && !hasGeoPartitioning && code.split("\n").length > 20) {
151
+ findings.push({
152
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
153
+ severity: "medium",
154
+ title: "PII stored without geographic partitioning indicator",
155
+ description: "Code stores PII fields (email, phone, national ID, etc.) with database operations but has no visible geographic partitioning, tenant-region routing, or data boundary tagging. Without explicit geo-aware storage, PII may be co-mingled across jurisdictions.",
156
+ recommendation: "Tag PII records with a region/jurisdiction identifier. Use tenant-scoped region routing for multi-tenant systems. Implement database-level partitioning by geography for regulated data.",
157
+ reference: "Data Residency Partitioning / Multi-Tenant Sovereignty",
158
+ suggestedFix: "Add region tagging to PII records: { ...userData, _region: tenantRegion } and partition storage by jurisdiction.",
159
+ confidence: 0.8,
160
+ });
161
+ }
162
+ // Region configuration without server-side enforcement
163
+ const hasClientRegionConfig = /(?:region|location|zone)\s*[:=]\s*["'`][^"'`]+["'`]/i.test(code);
164
+ const hasServerValidation = /(?:validateRegion|checkRegion|regionGuard|verifyJurisdiction|enforceResidency|assertRegion|regionPolicy)/i.test(code);
165
+ if (hasClientRegionConfig && !hasServerValidation && !hasPolicyEnforcement && code.split("\n").length > 15) {
166
+ findings.push({
167
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
168
+ severity: "medium",
169
+ title: "Region configuration without server-side enforcement",
170
+ description: "A region or location is configured as a string value but no server-side validation or enforcement function is visible. Client-side region settings can be bypassed — sovereignty controls must be enforced server-side.",
171
+ recommendation: "Implement server-side region validation that rejects requests targeting unauthorized regions. Use infrastructure-level guardrails (Azure Policy, AWS SCP, GCP Organization Policy) to enforce region boundaries.",
172
+ reference: "Policy-as-Code / Server-Side Sovereignty Enforcement",
173
+ suggestedFix: "Add server-side region validation: function validateRegion(region: string) { if (!ALLOWED_REGIONS.includes(region)) throw new Error('Unauthorized region'); }",
174
+ confidence: 0.8,
92
175
  });
93
176
  }
94
177
  if (findings.length === 0 && code.length > 0) {
@@ -101,6 +184,8 @@ export function analyzeDataSovereignty(code, language) {
101
184
  description: "Data handling is present, but sovereignty controls (policy references, jurisdiction checks, transfer guardrails) are not explicitly visible in this code segment.",
102
185
  recommendation: "Add explicit sovereignty control points in code/config and link them to auditable policy artifacts.",
103
186
  reference: "Data Sovereignty Assurance Guidance",
187
+ suggestedFix: "Add explicit sovereignty annotations: // @sovereignty: compliant, region=eu-west-1, policy=gdpr-ch5 — and link to auditable policy artifacts.",
188
+ confidence: 0.7,
104
189
  });
105
190
  }
106
191
  }
@@ -1 +1 @@
1
- {"version":3,"file":"data-sovereignty.js","sourceRoot":"","sources":["../../src/evaluators/data-sovereignty.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-sovereignty.js","sourceRoot":"","sources":["../../src/evaluators/data-sovereignty.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/evaluators/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAItC,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE,CA6LzE"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/evaluators/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAItC,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE,CAoNzE"}
@@ -1,21 +1,23 @@
1
- import { getLineNumbers, getLangFamily } from "./shared.js";
1
+ import { getLineNumbers, getLangLineNumbers, getLangFamily } from "./shared.js";
2
+ import * as LP from "../language-patterns.js";
2
3
  export function analyzeDatabase(code, language) {
3
4
  const findings = [];
4
5
  let ruleNum = 1;
5
6
  const prefix = "DB";
6
7
  const lang = getLangFamily(language);
7
- // SQL injection via string concatenation
8
- const sqlInjectionPattern = /(?:execute|query|raw|prepare)\s*\(\s*(?:`[^`]*(?:\$\{[^}]*\b(?:req|request|params|query|body|input|user|id|name|email)\b|\$\{[^}]*\+)|['"][^'"]*['"]\s*\+\s*(?:req\.|request\.|params\.|query\.|body\.|input|user|id|name|email)|['"][^'"]*['"]\s*\.\s*concat\s*\()/gi;
9
- const sqlInjectionLines = getLineNumbers(code, sqlInjectionPattern);
8
+ // SQL injection via string concatenation (multi-language)
9
+ const sqlInjectionLines = getLangLineNumbers(code, language, LP.SQL_INJECTION);
10
10
  if (sqlInjectionLines.length > 0) {
11
11
  findings.push({
12
12
  ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
13
13
  severity: "critical",
14
14
  title: "SQL injection via string concatenation",
15
- description: `Found ${sqlInjectionLines.length} instance(s) of SQL queries built with string concatenation or template literals containing user input. This is the most common and dangerous database vulnerability.`,
15
+ description: `Found ${sqlInjectionLines.length} instance(s) of SQL queries built with string concatenation or interpolation containing user input. This is the most common and dangerous database vulnerability.`,
16
16
  lineNumbers: sqlInjectionLines,
17
17
  recommendation: "Use parameterized queries (placeholders) or prepared statements. ORMs handle this automatically. Never concatenate user input into SQL strings.",
18
18
  reference: "OWASP SQL Injection Prevention Cheat Sheet / CWE-89",
19
+ suggestedFix: "Use parameterized queries: db.query('SELECT * FROM users WHERE id = $1', [userId]) (JS), cursor.execute('...WHERE id = %s', (uid,)) (Python), db.Query('...WHERE id = $1', id) (Go).",
20
+ confidence: 0.95,
19
21
  });
20
22
  }
21
23
  // SELECT * usage
@@ -30,24 +32,28 @@ export function analyzeDatabase(code, language) {
30
32
  lineNumbers: selectStarLines,
31
33
  recommendation: "Select only the columns you need: SELECT id, name, email FROM users. This reduces network transfer, memory usage, and improves query plan optimization.",
32
34
  reference: "SQL Performance Best Practices",
35
+ suggestedFix: "Replace SELECT * with explicit columns: SELECT id, name, email FROM users WHERE active = true; — reduces data transfer and enables index-only scans.",
36
+ confidence: 0.9,
33
37
  });
34
38
  }
35
- // N+1 query pattern (query in a loop)
39
+ // N+1 query pattern (query in a loop) (multi-language)
36
40
  const lines = code.split("\n");
37
41
  const n1Lines = [];
42
+ const dbQueryLines = new Set(getLangLineNumbers(code, language, LP.DB_QUERY));
43
+ const loopLines = new Set(getLangLineNumbers(code, language, LP.FOR_LOOP));
38
44
  let inLoop = false;
39
45
  let loopDepth = 0;
40
46
  for (let i = 0; i < lines.length; i++) {
41
47
  const line = lines[i];
42
- if (/\b(?:for|while|forEach|\.map|\.each)\b/.test(line)) {
48
+ if (loopLines.has(i + 1) || /\b(?:for|while|forEach|\.map|\.each)\b/.test(line)) {
43
49
  inLoop = true;
44
50
  loopDepth++;
45
51
  }
46
- if (inLoop && /(?:await\s+)?(?:db\.|query|find|findOne|findMany|execute|select|fetch)\s*\(/.test(line)) {
52
+ if (inLoop && (dbQueryLines.has(i + 1) || /(?:await\s+)?(?:db\.|query|find|findOne|findMany|execute|select|fetch)\s*\(/.test(line))) {
47
53
  n1Lines.push(i + 1);
48
54
  }
49
55
  if (inLoop) {
50
- const opens = (line.match(/\{/g) || []).length;
56
+ const opens = (line.match(/\{/g) || []).length + (line.match(/:\s*$/g) || []).length;
51
57
  const closes = (line.match(/\}/g) || []).length;
52
58
  loopDepth += opens - closes;
53
59
  if (loopDepth <= 0) {
@@ -65,6 +71,8 @@ export function analyzeDatabase(code, language) {
65
71
  lineNumbers: n1Lines,
66
72
  recommendation: "Use batch queries (WHERE id IN (...)), JOINs, or ORM eager loading (include/populate) to fetch related data in a single query.",
67
73
  reference: "N+1 Query Problem / ORM Performance Patterns",
74
+ suggestedFix: "Batch queries: const items = await db.query('SELECT * FROM items WHERE parent_id = ANY($1)', [parentIds]); instead of querying in a loop.",
75
+ confidence: 0.75,
68
76
  });
69
77
  }
70
78
  // No connection pooling
@@ -78,6 +86,8 @@ export function analyzeDatabase(code, language) {
78
86
  description: "Database connection created without visible connection pooling. Creating a new connection per request is expensive and unsustainable under load.",
79
87
  recommendation: "Use connection pooling (e.g., pg.Pool, mysql2.createPool, mongoose connection pooling). Configure pool size based on expected concurrent connections.",
80
88
  reference: "Database Connection Pooling Best Practices",
89
+ suggestedFix: "Use connection pool: const pool = new Pool({ max: 20, idleTimeoutMillis: 30000 }); const client = await pool.connect(); try { ... } finally { client.release(); }",
90
+ confidence: 0.7,
81
91
  });
82
92
  }
83
93
  // Raw SQL queries (no ORM/query builder)
@@ -92,6 +102,8 @@ export function analyzeDatabase(code, language) {
92
102
  lineNumbers: rawSqlLines.slice(0, 5),
93
103
  recommendation: "Consider using a query builder (Knex, Prisma, Drizzle, SQLAlchemy) or ORM for type safety, parameterization, and database portability.",
94
104
  reference: "ORM vs Raw SQL Best Practices",
105
+ suggestedFix: "Use a query builder: const users = await knex('users').select('id', 'name').where({ active: true }); — provides parameterization and type safety.",
106
+ confidence: 0.8,
95
107
  });
96
108
  }
97
109
  // No transaction handling
@@ -105,6 +117,8 @@ export function analyzeDatabase(code, language) {
105
117
  description: "Data is modified (INSERT/UPDATE/DELETE) without transaction wrappers. If an error occurs mid-operation, data could be left in an inconsistent state.",
106
118
  recommendation: "Wrap multi-step data mutations in transactions. Use BEGIN/COMMIT/ROLLBACK or ORM transaction APIs to ensure atomicity.",
107
119
  reference: "ACID Properties / Database Transaction Best Practices",
120
+ suggestedFix: "Wrap mutations in transaction: await db.transaction(async (trx) => { await trx('orders').insert(order); await trx('inventory').decrement('qty', 1); });",
121
+ confidence: 0.7,
108
122
  });
109
123
  }
110
124
  // Hardcoded connection strings
@@ -119,6 +133,8 @@ export function analyzeDatabase(code, language) {
119
133
  lineNumbers: connStringLines,
120
134
  recommendation: "Use environment variables for connection strings. Store credentials in a secrets manager. Use different connection strings per environment.",
121
135
  reference: "12-Factor App: Config / OWASP Secrets Management",
136
+ suggestedFix: "Use env vars: const connectionString = process.env.DATABASE_URL; never hardcode credentials in source code.",
137
+ confidence: 0.9,
122
138
  });
123
139
  }
124
140
  // DROP TABLE / TRUNCATE without safeguards
@@ -133,6 +149,8 @@ export function analyzeDatabase(code, language) {
133
149
  lineNumbers: destructiveDbLines,
134
150
  recommendation: "Never run destructive DDL from application code. Use migration tools (Prisma, Flyway, Alembic) with review and rollback support. Require elevated permissions for DDL.",
135
151
  reference: "Database Migration Best Practices / Least Privilege",
152
+ suggestedFix: "Move DDL to migration files: npx prisma migrate dev --name drop_legacy_table; never embed DROP TABLE in application code.",
153
+ confidence: 0.95,
136
154
  });
137
155
  }
138
156
  // No migration tooling
@@ -146,6 +164,8 @@ export function analyzeDatabase(code, language) {
146
164
  description: "DDL statements (CREATE TABLE, ALTER TABLE) found without migration tooling. Manual schema changes are unreproducible and error-prone across environments.",
147
165
  recommendation: "Use a database migration tool (Prisma, Knex, Flyway, Alembic) to version schema changes. Migrations should be idempotent and reversible.",
148
166
  reference: "Database Migration Best Practices / Evolutionary Database Design",
167
+ suggestedFix: "Use migration tool: npx prisma migrate dev --name add_users_table; or knex migrate:make create_users — version-controlled, reversible schema changes.",
168
+ confidence: 0.7,
149
169
  });
150
170
  }
151
171
  // Missing database indexes heuristic
@@ -159,6 +179,8 @@ export function analyzeDatabase(code, language) {
159
179
  description: "SQL queries filter on columns but no index creation is visible. Without indexes, queries perform full table scans which degrade exponentially with data volume.",
160
180
  recommendation: "Create indexes on columns used in WHERE, JOIN, and ORDER BY clauses. Monitor slow query logs. Use EXPLAIN to verify query plans.",
161
181
  reference: "SQL Indexing Best Practices / Use The Index, Luke!",
182
+ suggestedFix: "Add indexes: CREATE INDEX idx_users_email ON users(email); CREATE INDEX idx_orders_user_date ON orders(user_id, created_at); use EXPLAIN to verify.",
183
+ confidence: 0.7,
162
184
  });
163
185
  }
164
186
  // Database credentials in connection string
@@ -173,6 +195,8 @@ export function analyzeDatabase(code, language) {
173
195
  lineNumbers: credInConnLines,
174
196
  recommendation: "Use separate credential parameters or environment variables. Consider IAM/managed identity for passwordless database connections in cloud environments.",
175
197
  reference: "OWASP: Credential Management / Azure Managed Identity",
198
+ suggestedFix: "Use env vars: const client = new Client({ host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASSWORD });",
199
+ confidence: 0.9,
176
200
  });
177
201
  }
178
202
  return findings;
@@ -1 +1 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/evaluators/database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/evaluators/database.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dependency-health.d.ts","sourceRoot":"","sources":["../../src/evaluators/dependency-health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAItC,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE,CA+MjF"}
1
+ {"version":3,"file":"dependency-health.d.ts","sourceRoot":"","sources":["../../src/evaluators/dependency-health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAItC,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE,CA6QjF"}
@@ -1,4 +1,5 @@
1
- import { getLangFamily } from "./shared.js";
1
+ import { getLangLineNumbers, getLangFamily } from "./shared.js";
2
+ import * as LP from "../language-patterns.js";
2
3
  export function analyzeDependencyHealth(code, language) {
3
4
  const findings = [];
4
5
  const lines = code.split("\n");
@@ -21,6 +22,8 @@ export function analyzeDependencyHealth(code, language) {
21
22
  lineNumbers: wildcardLines,
22
23
  recommendation: "Pin dependencies to specific versions or use caret (^) ranges at minimum. Use a lockfile (package-lock.json, yarn.lock).",
23
24
  reference: "Dependency Management Best Practices",
25
+ suggestedFix: "Replace `\"*\"` or `\"latest\"` with a pinned version such as `\"^2.1.0\"` and run `npm install` to regenerate the lockfile.",
26
+ confidence: 0.9,
24
27
  });
25
28
  }
26
29
  // Detect importing from deprecated or risky packages
@@ -40,6 +43,8 @@ export function analyzeDependencyHealth(code, language) {
40
43
  lineNumbers: riskyPkgLines,
41
44
  recommendation: "Replace deprecated packages: moment->date-fns/luxon, request->node-fetch/axios, underscore->lodash-es or native methods.",
42
45
  reference: "npm deprecation notices / package health scores",
46
+ suggestedFix: "Replace the deprecated import with its modern alternative, e.g. change `require('request')` to `require('node-fetch')` or `require('axios')`.",
47
+ confidence: 0.9,
43
48
  });
44
49
  }
45
50
  // Detect excessive dependencies for simple tasks
@@ -58,6 +63,8 @@ export function analyzeDependencyHealth(code, language) {
58
63
  lineNumbers: importLines.slice(0, 5),
59
64
  recommendation: "Evaluate whether all dependencies are necessary. Consider implementing simple utilities natively to reduce the dependency tree.",
60
65
  reference: "Dependency Minimization / Supply Chain Security",
66
+ suggestedFix: "Remove unused imports and replace trivial utility packages (e.g. `is-odd`, `left-pad`) with inline implementations.",
67
+ confidence: 0.75,
61
68
  });
62
69
  }
63
70
  // Detect relative import depth issues
@@ -76,6 +83,8 @@ export function analyzeDependencyHealth(code, language) {
76
83
  lineNumbers: deepImportLines,
77
84
  recommendation: "Configure path aliases (tsconfig paths, webpack aliases, babel module resolver) for cleaner imports.",
78
85
  reference: "TypeScript Path Mapping / Module Resolution",
86
+ suggestedFix: "Add a path alias in `tsconfig.json` (e.g. `\"@src/*\": [\"src/*\"]`) and replace deep `../../../` imports with the alias.",
87
+ confidence: 0.85,
79
88
  });
80
89
  }
81
90
  // Detect multiple packages for same purpose (e.g., multiple HTTP clients)
@@ -99,6 +108,8 @@ export function analyzeDependencyHealth(code, language) {
99
108
  lineNumbers: httpClientLines,
100
109
  recommendation: "Standardize on a single HTTP client library across the project. Wrap it in an abstraction if needed.",
101
110
  reference: "Dependency Consolidation",
111
+ suggestedFix: "Pick one HTTP client (e.g. `axios` or native `fetch`) and replace all other HTTP client imports with it.",
112
+ confidence: 0.9,
102
113
  });
103
114
  }
104
115
  // Detect too-broad version ranges
@@ -117,6 +128,8 @@ export function analyzeDependencyHealth(code, language) {
117
128
  lineNumbers: broadVersionLines,
118
129
  recommendation: "Use caret (^) for minor updates or tilde (~) for patch updates. Avoid >= ranges in production dependencies.",
119
130
  reference: "Semantic Versioning / npm Version Ranges",
131
+ suggestedFix: "Replace `>=` version ranges with caret ranges, e.g. change `\">=3.0.0\"` to `\"^3.0.0\"` to allow only non-breaking updates.",
132
+ confidence: 0.85,
120
133
  });
121
134
  }
122
135
  // Detect missing lockfile indicators
@@ -131,28 +144,31 @@ export function analyzeDependencyHealth(code, language) {
131
144
  description: "No engines field specifying required Node.js version. Different Node versions may have incompatible behavior.",
132
145
  recommendation: "Add an 'engines' field to specify minimum Node.js and npm versions: \"engines\": { \"node\": \">=18.0.0\" }.",
133
146
  reference: "package.json engines field",
147
+ suggestedFix: "Add `\"engines\": { \"node\": \">=18.0.0\" }` to the top level of `package.json`.",
148
+ confidence: 0.7,
134
149
  });
135
150
  }
136
151
  }
137
- // Detect importing specific vs barrel imports
152
+ // Detect importing specific vs barrel imports (multi-language wildcard detection)
138
153
  const barrelImportLines = [];
154
+ const wildcardImportLines = getLangLineNumbers(code, language, LP.WILDCARD_IMPORT);
139
155
  lines.forEach((line, i) => {
140
156
  if (/import\s+\{[^}]{100,}\}\s+from/i.test(line)) {
141
157
  barrelImportLines.push(i + 1);
142
158
  }
143
- if (/import\s+\*\s+as\s+\w+\s+from\s+["'](?!.*node_modules)/i.test(line)) {
144
- barrelImportLines.push(i + 1);
145
- }
146
159
  });
147
- if (barrelImportLines.length > 0) {
160
+ const allBarrelLines = [...new Set([...barrelImportLines, ...wildcardImportLines])].sort((a, b) => a - b);
161
+ if (allBarrelLines.length > 0) {
148
162
  findings.push({
149
163
  ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
150
164
  severity: "low",
151
- title: "Barrel imports may prevent tree-shaking",
152
- description: "Importing everything from a barrel file or using 'import *' can prevent tree-shaking and increase bundle size.",
153
- lineNumbers: barrelImportLines,
165
+ title: "Barrel or wildcard imports may prevent tree-shaking",
166
+ description: "Importing everything from a barrel file or using wildcard imports (import *, from x import *, using static *) can prevent tree-shaking and increase bundle size.",
167
+ lineNumbers: allBarrelLines,
154
168
  recommendation: "Import directly from specific module files instead of barrel/index files for better tree-shaking.",
155
169
  reference: "Tree Shaking / Module Bundling",
170
+ suggestedFix: "Replace wildcard or barrel imports (e.g. `import * from 'lib'`) with named imports from specific sub-modules (e.g. `import { fn } from 'lib/fn'`).",
171
+ confidence: 0.9,
156
172
  });
157
173
  }
158
174
  // Detect dev dependencies in production code paths
@@ -174,6 +190,8 @@ export function analyzeDependencyHealth(code, language) {
174
190
  lineNumbers: devDepLines,
175
191
  recommendation: "Move test imports to test files. Ensure devDependencies are only used in test/config files.",
176
192
  reference: "npm devDependencies vs dependencies",
193
+ suggestedFix: "Remove the dev-only `require('jest')` (or similar) from this production file and move it to a `.test.ts` or `.spec.ts` file.",
194
+ confidence: 0.85,
177
195
  });
178
196
  }
179
197
  // Detect packages with known supply chain risks
@@ -192,6 +210,50 @@ export function analyzeDependencyHealth(code, language) {
192
210
  lineNumbers: supplyChainLines,
193
211
  recommendation: "Audit install scripts carefully. Use --ignore-scripts flag and allowlists. Consider using npm audit signatures.",
194
212
  reference: "Supply Chain Security / npm install scripts",
213
+ suggestedFix: "Remove or audit the `postinstall`/`preinstall` script and run `npm install --ignore-scripts` to prevent automatic execution.",
214
+ confidence: 0.9,
215
+ });
216
+ }
217
+ // Potential typosquatting — misspelled popular package names
218
+ const typosquatTargets = {
219
+ lodash: ["lod-ash", "lodashs", "lodahs", "1odash", "lodash-utils"],
220
+ axios: ["axois", "axio", "axxios", "axioss", "axious"],
221
+ express: ["expresss", "expres", "xpress", "exress"],
222
+ react: ["reacrt", "raect", "reactt", "reakt"],
223
+ mongoose: ["mongose", "mongoosse", "mongooes", "mongoos"],
224
+ chalk: ["chalks", "chalkk", "chalck"],
225
+ commander: ["comander", "commanderr", "comanderr"],
226
+ dotenv: ["dotnev", "dotenvs", "dotenev"],
227
+ webpack: ["webpackk", "weback", "webpac"],
228
+ "cross-env": ["crossenv", "cross-envv"],
229
+ "event-stream": ["event-streams", "events-stream", "eventstream"],
230
+ colors: ["colour", "colorsss"],
231
+ };
232
+ const typosquatLines = [];
233
+ const typosquatNames = [];
234
+ lines.forEach((line, i) => {
235
+ const match = line.match(/(?:require\s*\(\s*["']|from\s+["'])([^"'/]+)["']/);
236
+ if (match) {
237
+ const pkg = match[1].toLowerCase();
238
+ for (const [legit, squats] of Object.entries(typosquatTargets)) {
239
+ if (squats.includes(pkg)) {
240
+ typosquatLines.push(i + 1);
241
+ typosquatNames.push(`"${pkg}" (likely meant "${legit}")`);
242
+ }
243
+ }
244
+ }
245
+ });
246
+ if (typosquatLines.length > 0) {
247
+ findings.push({
248
+ ruleId: `${prefix}-${String(ruleNum++).padStart(3, "0")}`,
249
+ severity: "critical",
250
+ title: "Potential typosquatting package import",
251
+ description: `Suspicious package name(s) detected: ${typosquatNames.join(", ")}. Typosquatting attacks publish malicious packages with names similar to popular ones to steal credentials, inject backdoors, or mine cryptocurrency.`,
252
+ lineNumbers: typosquatLines,
253
+ recommendation: "Verify the package name is correct. Use 'npm info <package>' to check if it's a legitimate package. Enable npm audit and consider using Socket.dev or Snyk for supply chain monitoring.",
254
+ reference: "Supply Chain Attack — Typosquatting / CWE-1357",
255
+ suggestedFix: "Correct the misspelled package name in the import statement, e.g. change `require('axois')` to `require('axios')`.",
256
+ confidence: 0.9,
195
257
  });
196
258
  }
197
259
  return findings;