codeslick-cli 1.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 (455) hide show
  1. package/README.md +458 -0
  2. package/__tests__/cli-reporter.test.ts +86 -0
  3. package/__tests__/config-loader.test.ts +247 -0
  4. package/__tests__/local-scanner.test.ts +245 -0
  5. package/bin/codeslick.cjs +153 -0
  6. package/dist/packages/cli/src/commands/auth.d.ts +36 -0
  7. package/dist/packages/cli/src/commands/auth.d.ts.map +1 -0
  8. package/dist/packages/cli/src/commands/auth.js +226 -0
  9. package/dist/packages/cli/src/commands/auth.js.map +1 -0
  10. package/dist/packages/cli/src/commands/config.d.ts +37 -0
  11. package/dist/packages/cli/src/commands/config.d.ts.map +1 -0
  12. package/dist/packages/cli/src/commands/config.js +196 -0
  13. package/dist/packages/cli/src/commands/config.js.map +1 -0
  14. package/dist/packages/cli/src/commands/init.d.ts +32 -0
  15. package/dist/packages/cli/src/commands/init.d.ts.map +1 -0
  16. package/dist/packages/cli/src/commands/init.js +171 -0
  17. package/dist/packages/cli/src/commands/init.js.map +1 -0
  18. package/dist/packages/cli/src/commands/scan.d.ts +40 -0
  19. package/dist/packages/cli/src/commands/scan.d.ts.map +1 -0
  20. package/dist/packages/cli/src/commands/scan.js +204 -0
  21. package/dist/packages/cli/src/commands/scan.js.map +1 -0
  22. package/dist/packages/cli/src/config/config-loader.d.ts +67 -0
  23. package/dist/packages/cli/src/config/config-loader.d.ts.map +1 -0
  24. package/dist/packages/cli/src/config/config-loader.js +146 -0
  25. package/dist/packages/cli/src/config/config-loader.js.map +1 -0
  26. package/dist/packages/cli/src/reporters/cli-reporter.d.ts +69 -0
  27. package/dist/packages/cli/src/reporters/cli-reporter.d.ts.map +1 -0
  28. package/dist/packages/cli/src/reporters/cli-reporter.js +244 -0
  29. package/dist/packages/cli/src/reporters/cli-reporter.js.map +1 -0
  30. package/dist/packages/cli/src/scanner/local-scanner.d.ts +92 -0
  31. package/dist/packages/cli/src/scanner/local-scanner.d.ts.map +1 -0
  32. package/dist/packages/cli/src/scanner/local-scanner.js +221 -0
  33. package/dist/packages/cli/src/scanner/local-scanner.js.map +1 -0
  34. package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.d.ts +88 -0
  35. package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.d.ts.map +1 -0
  36. package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.js +371 -0
  37. package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.js.map +1 -0
  38. package/dist/src/lib/analyzers/helpers/jsx-helpers.d.ts +63 -0
  39. package/dist/src/lib/analyzers/helpers/jsx-helpers.d.ts.map +1 -0
  40. package/dist/src/lib/analyzers/helpers/jsx-helpers.js +95 -0
  41. package/dist/src/lib/analyzers/helpers/jsx-helpers.js.map +1 -0
  42. package/dist/src/lib/analyzers/helpers/variable-tracker.d.ts +59 -0
  43. package/dist/src/lib/analyzers/helpers/variable-tracker.d.ts.map +1 -0
  44. package/dist/src/lib/analyzers/helpers/variable-tracker.js +231 -0
  45. package/dist/src/lib/analyzers/helpers/variable-tracker.js.map +1 -0
  46. package/dist/src/lib/analyzers/java/security-checks/access-control.d.ts +20 -0
  47. package/dist/src/lib/analyzers/java/security-checks/access-control.d.ts.map +1 -0
  48. package/dist/src/lib/analyzers/java/security-checks/access-control.js +129 -0
  49. package/dist/src/lib/analyzers/java/security-checks/access-control.js.map +1 -0
  50. package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.d.ts +25 -0
  51. package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.d.ts.map +1 -0
  52. package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.js +221 -0
  53. package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.js.map +1 -0
  54. package/dist/src/lib/analyzers/java/security-checks/code-quality.d.ts +18 -0
  55. package/dist/src/lib/analyzers/java/security-checks/code-quality.d.ts.map +1 -0
  56. package/dist/src/lib/analyzers/java/security-checks/code-quality.js +84 -0
  57. package/dist/src/lib/analyzers/java/security-checks/code-quality.js.map +1 -0
  58. package/dist/src/lib/analyzers/java/security-checks/crypto-validation.d.ts +18 -0
  59. package/dist/src/lib/analyzers/java/security-checks/crypto-validation.d.ts.map +1 -0
  60. package/dist/src/lib/analyzers/java/security-checks/crypto-validation.js +161 -0
  61. package/dist/src/lib/analyzers/java/security-checks/crypto-validation.js.map +1 -0
  62. package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.d.ts +20 -0
  63. package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.d.ts.map +1 -0
  64. package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.js +163 -0
  65. package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.js.map +1 -0
  66. package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.d.ts +24 -0
  67. package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.d.ts.map +1 -0
  68. package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.js +178 -0
  69. package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.js.map +1 -0
  70. package/dist/src/lib/analyzers/java/security-checks/exception-handling.d.ts +25 -0
  71. package/dist/src/lib/analyzers/java/security-checks/exception-handling.d.ts.map +1 -0
  72. package/dist/src/lib/analyzers/java/security-checks/exception-handling.js +179 -0
  73. package/dist/src/lib/analyzers/java/security-checks/exception-handling.js.map +1 -0
  74. package/dist/src/lib/analyzers/java/security-checks/file-operations.d.ts +17 -0
  75. package/dist/src/lib/analyzers/java/security-checks/file-operations.d.ts.map +1 -0
  76. package/dist/src/lib/analyzers/java/security-checks/file-operations.js +67 -0
  77. package/dist/src/lib/analyzers/java/security-checks/file-operations.js.map +1 -0
  78. package/dist/src/lib/analyzers/java/security-checks/framework-security.d.ts +25 -0
  79. package/dist/src/lib/analyzers/java/security-checks/framework-security.d.ts.map +1 -0
  80. package/dist/src/lib/analyzers/java/security-checks/framework-security.js +396 -0
  81. package/dist/src/lib/analyzers/java/security-checks/framework-security.js.map +1 -0
  82. package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.d.ts +20 -0
  83. package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.d.ts.map +1 -0
  84. package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.js +123 -0
  85. package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.js.map +1 -0
  86. package/dist/src/lib/analyzers/java/security-checks/injection-attacks.d.ts +23 -0
  87. package/dist/src/lib/analyzers/java/security-checks/injection-attacks.d.ts.map +1 -0
  88. package/dist/src/lib/analyzers/java/security-checks/injection-attacks.js +201 -0
  89. package/dist/src/lib/analyzers/java/security-checks/injection-attacks.js.map +1 -0
  90. package/dist/src/lib/analyzers/java/security-checks/insecure-design.d.ts +20 -0
  91. package/dist/src/lib/analyzers/java/security-checks/insecure-design.d.ts.map +1 -0
  92. package/dist/src/lib/analyzers/java/security-checks/insecure-design.js +121 -0
  93. package/dist/src/lib/analyzers/java/security-checks/insecure-design.js.map +1 -0
  94. package/dist/src/lib/analyzers/java/security-checks/logging-failures.d.ts +20 -0
  95. package/dist/src/lib/analyzers/java/security-checks/logging-failures.d.ts.map +1 -0
  96. package/dist/src/lib/analyzers/java/security-checks/logging-failures.js +89 -0
  97. package/dist/src/lib/analyzers/java/security-checks/logging-failures.js.map +1 -0
  98. package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.d.ts +26 -0
  99. package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.d.ts.map +1 -0
  100. package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.js +309 -0
  101. package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.js.map +1 -0
  102. package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.d.ts +18 -0
  103. package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.d.ts.map +1 -0
  104. package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.js +114 -0
  105. package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.js.map +1 -0
  106. package/dist/src/lib/analyzers/java/utils/createVulnerability.d.ts +58 -0
  107. package/dist/src/lib/analyzers/java/utils/createVulnerability.d.ts.map +1 -0
  108. package/dist/src/lib/analyzers/java/utils/createVulnerability.js +71 -0
  109. package/dist/src/lib/analyzers/java/utils/createVulnerability.js.map +1 -0
  110. package/dist/src/lib/analyzers/java-analyzer.d.ts +209 -0
  111. package/dist/src/lib/analyzers/java-analyzer.d.ts.map +1 -0
  112. package/dist/src/lib/analyzers/java-analyzer.js +1720 -0
  113. package/dist/src/lib/analyzers/java-analyzer.js.map +1 -0
  114. package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.d.ts +27 -0
  115. package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.d.ts.map +1 -0
  116. package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.js +123 -0
  117. package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.js.map +1 -0
  118. package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.d.ts +44 -0
  119. package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.d.ts.map +1 -0
  120. package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.js +224 -0
  121. package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.js.map +1 -0
  122. package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.d.ts +50 -0
  123. package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.d.ts.map +1 -0
  124. package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.js +284 -0
  125. package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.js.map +1 -0
  126. package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.d.ts +27 -0
  127. package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.d.ts.map +1 -0
  128. package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.js +86 -0
  129. package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.js.map +1 -0
  130. package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.d.ts +32 -0
  131. package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.d.ts.map +1 -0
  132. package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.js +44 -0
  133. package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.js.map +1 -0
  134. package/dist/src/lib/analyzers/javascript/security-checks/access-control.d.ts +22 -0
  135. package/dist/src/lib/analyzers/javascript/security-checks/access-control.d.ts.map +1 -0
  136. package/dist/src/lib/analyzers/javascript/security-checks/access-control.js +168 -0
  137. package/dist/src/lib/analyzers/javascript/security-checks/access-control.js.map +1 -0
  138. package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.d.ts +25 -0
  139. package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.d.ts.map +1 -0
  140. package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.js +232 -0
  141. package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.js.map +1 -0
  142. package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.d.ts +27 -0
  143. package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.d.ts.map +1 -0
  144. package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.js +222 -0
  145. package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.js.map +1 -0
  146. package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.d.ts +28 -0
  147. package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.d.ts.map +1 -0
  148. package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.js +176 -0
  149. package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.js.map +1 -0
  150. package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.d.ts +23 -0
  151. package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.d.ts.map +1 -0
  152. package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.js +113 -0
  153. package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.js.map +1 -0
  154. package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.d.ts +28 -0
  155. package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.d.ts.map +1 -0
  156. package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.js +227 -0
  157. package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.js.map +1 -0
  158. package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.d.ts +32 -0
  159. package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.d.ts.map +1 -0
  160. package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.js +260 -0
  161. package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.js.map +1 -0
  162. package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.d.ts +26 -0
  163. package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.d.ts.map +1 -0
  164. package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.js +164 -0
  165. package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.js.map +1 -0
  166. package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.d.ts +26 -0
  167. package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.d.ts.map +1 -0
  168. package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.js +775 -0
  169. package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.js.map +1 -0
  170. package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.d.ts +25 -0
  171. package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.d.ts.map +1 -0
  172. package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.js +168 -0
  173. package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.js.map +1 -0
  174. package/dist/src/lib/analyzers/javascript/security-checks/storage-security.d.ts +27 -0
  175. package/dist/src/lib/analyzers/javascript/security-checks/storage-security.d.ts.map +1 -0
  176. package/dist/src/lib/analyzers/javascript/security-checks/storage-security.js +108 -0
  177. package/dist/src/lib/analyzers/javascript/security-checks/storage-security.js.map +1 -0
  178. package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.d.ts +28 -0
  179. package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.d.ts.map +1 -0
  180. package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.js +143 -0
  181. package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.js.map +1 -0
  182. package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.d.ts +53 -0
  183. package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.d.ts.map +1 -0
  184. package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.js +144 -0
  185. package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.js.map +1 -0
  186. package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.d.ts +72 -0
  187. package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.d.ts.map +1 -0
  188. package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.js +314 -0
  189. package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.js.map +1 -0
  190. package/dist/src/lib/analyzers/javascript/utils/createVulnerability.d.ts +58 -0
  191. package/dist/src/lib/analyzers/javascript/utils/createVulnerability.d.ts.map +1 -0
  192. package/dist/src/lib/analyzers/javascript/utils/createVulnerability.js +71 -0
  193. package/dist/src/lib/analyzers/javascript/utils/createVulnerability.js.map +1 -0
  194. package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.d.ts +36 -0
  195. package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.d.ts.map +1 -0
  196. package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.js +70 -0
  197. package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.js.map +1 -0
  198. package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.d.ts +29 -0
  199. package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.d.ts.map +1 -0
  200. package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.js +55 -0
  201. package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.js.map +1 -0
  202. package/dist/src/lib/analyzers/javascript-analyzer.d.ts +95 -0
  203. package/dist/src/lib/analyzers/javascript-analyzer.d.ts.map +1 -0
  204. package/dist/src/lib/analyzers/javascript-analyzer.js +2141 -0
  205. package/dist/src/lib/analyzers/javascript-analyzer.js.map +1 -0
  206. package/dist/src/lib/analyzers/python/security-checks/access-control.d.ts +21 -0
  207. package/dist/src/lib/analyzers/python/security-checks/access-control.d.ts.map +1 -0
  208. package/dist/src/lib/analyzers/python/security-checks/access-control.js +305 -0
  209. package/dist/src/lib/analyzers/python/security-checks/access-control.js.map +1 -0
  210. package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.d.ts +25 -0
  211. package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.d.ts.map +1 -0
  212. package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.js +242 -0
  213. package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.js.map +1 -0
  214. package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.d.ts +24 -0
  215. package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.d.ts.map +1 -0
  216. package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.js +207 -0
  217. package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.js.map +1 -0
  218. package/dist/src/lib/analyzers/python/security-checks/code-quality.d.ts +27 -0
  219. package/dist/src/lib/analyzers/python/security-checks/code-quality.d.ts.map +1 -0
  220. package/dist/src/lib/analyzers/python/security-checks/code-quality.js +206 -0
  221. package/dist/src/lib/analyzers/python/security-checks/code-quality.js.map +1 -0
  222. package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.d.ts +24 -0
  223. package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.d.ts.map +1 -0
  224. package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.js +113 -0
  225. package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.js.map +1 -0
  226. package/dist/src/lib/analyzers/python/security-checks/crypto-failures.d.ts +20 -0
  227. package/dist/src/lib/analyzers/python/security-checks/crypto-failures.d.ts.map +1 -0
  228. package/dist/src/lib/analyzers/python/security-checks/crypto-failures.js +129 -0
  229. package/dist/src/lib/analyzers/python/security-checks/crypto-failures.js.map +1 -0
  230. package/dist/src/lib/analyzers/python/security-checks/data-integrity.d.ts +19 -0
  231. package/dist/src/lib/analyzers/python/security-checks/data-integrity.d.ts.map +1 -0
  232. package/dist/src/lib/analyzers/python/security-checks/data-integrity.js +90 -0
  233. package/dist/src/lib/analyzers/python/security-checks/data-integrity.js.map +1 -0
  234. package/dist/src/lib/analyzers/python/security-checks/deserialization.d.ts +20 -0
  235. package/dist/src/lib/analyzers/python/security-checks/deserialization.d.ts.map +1 -0
  236. package/dist/src/lib/analyzers/python/security-checks/deserialization.js +68 -0
  237. package/dist/src/lib/analyzers/python/security-checks/deserialization.js.map +1 -0
  238. package/dist/src/lib/analyzers/python/security-checks/django-security.d.ts +25 -0
  239. package/dist/src/lib/analyzers/python/security-checks/django-security.d.ts.map +1 -0
  240. package/dist/src/lib/analyzers/python/security-checks/django-security.js +180 -0
  241. package/dist/src/lib/analyzers/python/security-checks/django-security.js.map +1 -0
  242. package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.d.ts +23 -0
  243. package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.d.ts.map +1 -0
  244. package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.js +127 -0
  245. package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.js.map +1 -0
  246. package/dist/src/lib/analyzers/python/security-checks/exception-handling.d.ts +23 -0
  247. package/dist/src/lib/analyzers/python/security-checks/exception-handling.d.ts.map +1 -0
  248. package/dist/src/lib/analyzers/python/security-checks/exception-handling.js +120 -0
  249. package/dist/src/lib/analyzers/python/security-checks/exception-handling.js.map +1 -0
  250. package/dist/src/lib/analyzers/python/security-checks/flask-security.d.ts +24 -0
  251. package/dist/src/lib/analyzers/python/security-checks/flask-security.d.ts.map +1 -0
  252. package/dist/src/lib/analyzers/python/security-checks/flask-security.js +143 -0
  253. package/dist/src/lib/analyzers/python/security-checks/flask-security.js.map +1 -0
  254. package/dist/src/lib/analyzers/python/security-checks/injection-attacks.d.ts +28 -0
  255. package/dist/src/lib/analyzers/python/security-checks/injection-attacks.d.ts.map +1 -0
  256. package/dist/src/lib/analyzers/python/security-checks/injection-attacks.js +174 -0
  257. package/dist/src/lib/analyzers/python/security-checks/injection-attacks.js.map +1 -0
  258. package/dist/src/lib/analyzers/python/security-checks/insecure-design.d.ts +20 -0
  259. package/dist/src/lib/analyzers/python/security-checks/insecure-design.d.ts.map +1 -0
  260. package/dist/src/lib/analyzers/python/security-checks/insecure-design.js +160 -0
  261. package/dist/src/lib/analyzers/python/security-checks/insecure-design.js.map +1 -0
  262. package/dist/src/lib/analyzers/python/security-checks/logging-failures.d.ts +20 -0
  263. package/dist/src/lib/analyzers/python/security-checks/logging-failures.d.ts.map +1 -0
  264. package/dist/src/lib/analyzers/python/security-checks/logging-failures.js +121 -0
  265. package/dist/src/lib/analyzers/python/security-checks/logging-failures.js.map +1 -0
  266. package/dist/src/lib/analyzers/python/security-checks/nosql-injection.d.ts +26 -0
  267. package/dist/src/lib/analyzers/python/security-checks/nosql-injection.d.ts.map +1 -0
  268. package/dist/src/lib/analyzers/python/security-checks/nosql-injection.js +248 -0
  269. package/dist/src/lib/analyzers/python/security-checks/nosql-injection.js.map +1 -0
  270. package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.d.ts +26 -0
  271. package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.d.ts.map +1 -0
  272. package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.js +375 -0
  273. package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.js.map +1 -0
  274. package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.d.ts +26 -0
  275. package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.d.ts.map +1 -0
  276. package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.js +160 -0
  277. package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.js.map +1 -0
  278. package/dist/src/lib/analyzers/python/security-checks/web-security.d.ts +23 -0
  279. package/dist/src/lib/analyzers/python/security-checks/web-security.d.ts.map +1 -0
  280. package/dist/src/lib/analyzers/python/security-checks/web-security.js +117 -0
  281. package/dist/src/lib/analyzers/python/security-checks/web-security.js.map +1 -0
  282. package/dist/src/lib/analyzers/python/utils/createVulnerability.d.ts +58 -0
  283. package/dist/src/lib/analyzers/python/utils/createVulnerability.d.ts.map +1 -0
  284. package/dist/src/lib/analyzers/python/utils/createVulnerability.js +71 -0
  285. package/dist/src/lib/analyzers/python/utils/createVulnerability.js.map +1 -0
  286. package/dist/src/lib/analyzers/python-analyzer.d.ts +111 -0
  287. package/dist/src/lib/analyzers/python-analyzer.d.ts.map +1 -0
  288. package/dist/src/lib/analyzers/python-analyzer.js +1600 -0
  289. package/dist/src/lib/analyzers/python-analyzer.js.map +1 -0
  290. package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.d.ts +14 -0
  291. package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.d.ts.map +1 -0
  292. package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.js +47 -0
  293. package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.js.map +1 -0
  294. package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.d.ts +13 -0
  295. package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.d.ts.map +1 -0
  296. package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.js +36 -0
  297. package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.js.map +1 -0
  298. package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.d.ts +15 -0
  299. package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.d.ts.map +1 -0
  300. package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.js +68 -0
  301. package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.js.map +1 -0
  302. package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.d.ts +15 -0
  303. package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.d.ts.map +1 -0
  304. package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.js +68 -0
  305. package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.js.map +1 -0
  306. package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.d.ts +12 -0
  307. package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.d.ts.map +1 -0
  308. package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.js +45 -0
  309. package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.js.map +1 -0
  310. package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.d.ts +14 -0
  311. package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.d.ts.map +1 -0
  312. package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.js +47 -0
  313. package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.js.map +1 -0
  314. package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.d.ts +13 -0
  315. package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.d.ts.map +1 -0
  316. package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.js +36 -0
  317. package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.js.map +1 -0
  318. package/dist/src/lib/analyzers/secrets/patterns/api-keys.d.ts +15 -0
  319. package/dist/src/lib/analyzers/secrets/patterns/api-keys.d.ts.map +1 -0
  320. package/dist/src/lib/analyzers/secrets/patterns/api-keys.js +32 -0
  321. package/dist/src/lib/analyzers/secrets/patterns/api-keys.js.map +1 -0
  322. package/dist/src/lib/analyzers/secrets/patterns/credentials.d.ts +15 -0
  323. package/dist/src/lib/analyzers/secrets/patterns/credentials.d.ts.map +1 -0
  324. package/dist/src/lib/analyzers/secrets/patterns/credentials.js +68 -0
  325. package/dist/src/lib/analyzers/secrets/patterns/credentials.js.map +1 -0
  326. package/dist/src/lib/analyzers/secrets/patterns/private-keys.d.ts +16 -0
  327. package/dist/src/lib/analyzers/secrets/patterns/private-keys.d.ts.map +1 -0
  328. package/dist/src/lib/analyzers/secrets/patterns/private-keys.js +79 -0
  329. package/dist/src/lib/analyzers/secrets/patterns/private-keys.js.map +1 -0
  330. package/dist/src/lib/analyzers/secrets/patterns/tokens.d.ts +15 -0
  331. package/dist/src/lib/analyzers/secrets/patterns/tokens.d.ts.map +1 -0
  332. package/dist/src/lib/analyzers/secrets/patterns/tokens.js +58 -0
  333. package/dist/src/lib/analyzers/secrets/patterns/tokens.js.map +1 -0
  334. package/dist/src/lib/analyzers/secrets/secrets-analyzer.d.ts +88 -0
  335. package/dist/src/lib/analyzers/secrets/secrets-analyzer.d.ts.map +1 -0
  336. package/dist/src/lib/analyzers/secrets/secrets-analyzer.js +162 -0
  337. package/dist/src/lib/analyzers/secrets/secrets-analyzer.js.map +1 -0
  338. package/dist/src/lib/analyzers/secrets/validators/context-checker.d.ts +56 -0
  339. package/dist/src/lib/analyzers/secrets/validators/context-checker.d.ts.map +1 -0
  340. package/dist/src/lib/analyzers/secrets/validators/context-checker.js +199 -0
  341. package/dist/src/lib/analyzers/secrets/validators/context-checker.js.map +1 -0
  342. package/dist/src/lib/analyzers/secrets/validators/entropy-checker.d.ts +56 -0
  343. package/dist/src/lib/analyzers/secrets/validators/entropy-checker.d.ts.map +1 -0
  344. package/dist/src/lib/analyzers/secrets/validators/entropy-checker.js +102 -0
  345. package/dist/src/lib/analyzers/secrets/validators/entropy-checker.js.map +1 -0
  346. package/dist/src/lib/analyzers/security-checks/es6-security.d.ts +38 -0
  347. package/dist/src/lib/analyzers/security-checks/es6-security.d.ts.map +1 -0
  348. package/dist/src/lib/analyzers/security-checks/es6-security.js +125 -0
  349. package/dist/src/lib/analyzers/security-checks/es6-security.js.map +1 -0
  350. package/dist/src/lib/analyzers/security-checks/python-async-security.d.ts +46 -0
  351. package/dist/src/lib/analyzers/security-checks/python-async-security.d.ts.map +1 -0
  352. package/dist/src/lib/analyzers/security-checks/python-async-security.js +92 -0
  353. package/dist/src/lib/analyzers/security-checks/python-async-security.js.map +1 -0
  354. package/dist/src/lib/analyzers/security-checks/react-security.d.ts +49 -0
  355. package/dist/src/lib/analyzers/security-checks/react-security.d.ts.map +1 -0
  356. package/dist/src/lib/analyzers/security-checks/react-security.js +125 -0
  357. package/dist/src/lib/analyzers/security-checks/react-security.js.map +1 -0
  358. package/dist/src/lib/analyzers/types.d.ts +92 -0
  359. package/dist/src/lib/analyzers/types.d.ts.map +1 -0
  360. package/dist/src/lib/analyzers/types.js +3 -0
  361. package/dist/src/lib/analyzers/types.js.map +1 -0
  362. package/dist/src/lib/analyzers/typescript/security-checks/access-control.d.ts +19 -0
  363. package/dist/src/lib/analyzers/typescript/security-checks/access-control.d.ts.map +1 -0
  364. package/dist/src/lib/analyzers/typescript/security-checks/access-control.js +210 -0
  365. package/dist/src/lib/analyzers/typescript/security-checks/access-control.js.map +1 -0
  366. package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.d.ts +25 -0
  367. package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.d.ts.map +1 -0
  368. package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.js +242 -0
  369. package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.js.map +1 -0
  370. package/dist/src/lib/analyzers/typescript/security-checks/authentication.d.ts +28 -0
  371. package/dist/src/lib/analyzers/typescript/security-checks/authentication.d.ts.map +1 -0
  372. package/dist/src/lib/analyzers/typescript/security-checks/authentication.js +357 -0
  373. package/dist/src/lib/analyzers/typescript/security-checks/authentication.js.map +1 -0
  374. package/dist/src/lib/analyzers/typescript/security-checks/code-injection.d.ts +26 -0
  375. package/dist/src/lib/analyzers/typescript/security-checks/code-injection.d.ts.map +1 -0
  376. package/dist/src/lib/analyzers/typescript/security-checks/code-injection.js +380 -0
  377. package/dist/src/lib/analyzers/typescript/security-checks/code-injection.js.map +1 -0
  378. package/dist/src/lib/analyzers/typescript/security-checks/code-quality.d.ts +23 -0
  379. package/dist/src/lib/analyzers/typescript/security-checks/code-quality.d.ts.map +1 -0
  380. package/dist/src/lib/analyzers/typescript/security-checks/code-quality.js +109 -0
  381. package/dist/src/lib/analyzers/typescript/security-checks/code-quality.js.map +1 -0
  382. package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.d.ts +21 -0
  383. package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.d.ts.map +1 -0
  384. package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.js +153 -0
  385. package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.js.map +1 -0
  386. package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.d.ts +23 -0
  387. package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.d.ts.map +1 -0
  388. package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.js +146 -0
  389. package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.js.map +1 -0
  390. package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.d.ts +23 -0
  391. package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.d.ts.map +1 -0
  392. package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.js +187 -0
  393. package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.js.map +1 -0
  394. package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.d.ts +19 -0
  395. package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.d.ts.map +1 -0
  396. package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.js +97 -0
  397. package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.js.map +1 -0
  398. package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.d.ts +29 -0
  399. package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.d.ts.map +1 -0
  400. package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.js +319 -0
  401. package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.js.map +1 -0
  402. package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.d.ts +21 -0
  403. package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.d.ts.map +1 -0
  404. package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.js +121 -0
  405. package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.js.map +1 -0
  406. package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.d.ts +27 -0
  407. package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.d.ts.map +1 -0
  408. package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.js +213 -0
  409. package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.js.map +1 -0
  410. package/dist/src/lib/analyzers/typescript/security-checks/type-security.d.ts +19 -0
  411. package/dist/src/lib/analyzers/typescript/security-checks/type-security.d.ts.map +1 -0
  412. package/dist/src/lib/analyzers/typescript/security-checks/type-security.js +59 -0
  413. package/dist/src/lib/analyzers/typescript/security-checks/type-security.js.map +1 -0
  414. package/dist/src/lib/analyzers/typescript/type-checker.d.ts +17 -0
  415. package/dist/src/lib/analyzers/typescript/type-checker.d.ts.map +1 -0
  416. package/dist/src/lib/analyzers/typescript/type-checker.js +515 -0
  417. package/dist/src/lib/analyzers/typescript/type-checker.js.map +1 -0
  418. package/dist/src/lib/analyzers/typescript/utils/createVulnerability.d.ts +58 -0
  419. package/dist/src/lib/analyzers/typescript/utils/createVulnerability.d.ts.map +1 -0
  420. package/dist/src/lib/analyzers/typescript/utils/createVulnerability.js +71 -0
  421. package/dist/src/lib/analyzers/typescript/utils/createVulnerability.js.map +1 -0
  422. package/dist/src/lib/analyzers/typescript-analyzer.d.ts +116 -0
  423. package/dist/src/lib/analyzers/typescript-analyzer.d.ts.map +1 -0
  424. package/dist/src/lib/analyzers/typescript-analyzer.js +1660 -0
  425. package/dist/src/lib/analyzers/typescript-analyzer.js.map +1 -0
  426. package/dist/src/lib/security/compliance-mapping.d.ts +29 -0
  427. package/dist/src/lib/security/compliance-mapping.d.ts.map +1 -0
  428. package/dist/src/lib/security/compliance-mapping.js +1342 -0
  429. package/dist/src/lib/security/compliance-mapping.js.map +1 -0
  430. package/dist/src/lib/security/severity-scoring.d.ts +47 -0
  431. package/dist/src/lib/security/severity-scoring.d.ts.map +1 -0
  432. package/dist/src/lib/security/severity-scoring.js +965 -0
  433. package/dist/src/lib/security/severity-scoring.js.map +1 -0
  434. package/dist/src/lib/standards/references.d.ts +16 -0
  435. package/dist/src/lib/standards/references.d.ts.map +1 -0
  436. package/dist/src/lib/standards/references.js +1161 -0
  437. package/dist/src/lib/standards/references.js.map +1 -0
  438. package/dist/src/lib/types/index.d.ts +167 -0
  439. package/dist/src/lib/types/index.d.ts.map +1 -0
  440. package/dist/src/lib/types/index.js +3 -0
  441. package/dist/src/lib/types/index.js.map +1 -0
  442. package/dist/src/lib/utils/code-cleaner.d.ts +59 -0
  443. package/dist/src/lib/utils/code-cleaner.d.ts.map +1 -0
  444. package/dist/src/lib/utils/code-cleaner.js +283 -0
  445. package/dist/src/lib/utils/code-cleaner.js.map +1 -0
  446. package/package.json +51 -0
  447. package/src/commands/auth.ts +308 -0
  448. package/src/commands/config.ts +226 -0
  449. package/src/commands/init.ts +202 -0
  450. package/src/commands/scan.ts +238 -0
  451. package/src/config/config-loader.ts +175 -0
  452. package/src/reporters/cli-reporter.ts +282 -0
  453. package/src/scanner/local-scanner.ts +250 -0
  454. package/tsconfig.json +24 -0
  455. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,88 @@
1
+ /**
2
+ * AI Code Detection Utilities
3
+ *
4
+ * Shared utilities for detecting AI-generated code patterns across all languages.
5
+ *
6
+ * Features:
7
+ * - 8 code smell heuristic detectors (weighted scoring)
8
+ * - Confidence scoring system (HIGH/MEDIUM/LOW)
9
+ * - Language-agnostic pattern detection
10
+ *
11
+ * Phase 1.5, Week 5-7 (AI-Generated Code Detection)
12
+ * Created: January 8, 2026
13
+ */
14
+ /**
15
+ * Detection result with confidence level and severity
16
+ */
17
+ export interface DetectionResult {
18
+ hallucinationPatterns: number;
19
+ heuristicScore: number;
20
+ confidence: 'HIGH' | 'MEDIUM' | 'LOW';
21
+ severity: 'CRITICAL' | 'HIGH' | 'MEDIUM';
22
+ }
23
+ /**
24
+ * Heuristic scores (weighted 0.0-1.0)
25
+ */
26
+ export interface HeuristicScores {
27
+ overEngineeredErrors: number;
28
+ unnecessaryWrappers: number;
29
+ verboseComments: number;
30
+ mixedNaming: number;
31
+ redundantNullChecks: number;
32
+ unnecessaryAsync: number;
33
+ genericVariables: number;
34
+ inconsistentStrings: number;
35
+ }
36
+ /**
37
+ * 1. Detect over-engineered error handling
38
+ * Pattern: 4+ nested if/else conditions inside catch blocks
39
+ */
40
+ export declare function detectOverEngineeredErrorHandling(lines: string[]): number;
41
+ /**
42
+ * 2. Detect unnecessary wrapper functions
43
+ * Pattern: Single-line function body that only calls another function
44
+ */
45
+ export declare function detectUnnecessaryWrappers(lines: string[]): number;
46
+ /**
47
+ * 3. Detect verbose/redundant comments
48
+ * Pattern: Comment duplicates code logic exactly (>70% lexical overlap)
49
+ */
50
+ export declare function detectVerboseComments(lines: string[]): number;
51
+ /**
52
+ * 4. Detect mixed naming conventions
53
+ * Pattern: camelCase + snake_case in same 10-line window
54
+ */
55
+ export declare function detectMixedNamingConventions(lines: string[]): number;
56
+ /**
57
+ * 5. Detect redundant null checks
58
+ * Pattern: Multiple null/undefined checks on same variable within 5 lines
59
+ */
60
+ export declare function detectRedundantNullChecks(lines: string[]): number;
61
+ /**
62
+ * 6. Detect unnecessary async functions
63
+ * Pattern: async function with no await keywords
64
+ */
65
+ export declare function detectUnnecessaryAsync(lines: string[]): number;
66
+ /**
67
+ * 7. Detect generic variable name overuse
68
+ * Pattern: data, result, temp, value used >5 times in single function
69
+ */
70
+ export declare function detectGenericVariableOveruse(lines: string[]): number;
71
+ /**
72
+ * 8. Detect inconsistent string concatenation
73
+ * Pattern: Mix of +, template literals, .concat() in same function
74
+ */
75
+ export declare function detectInconsistentStringConcatenation(lines: string[]): number;
76
+ /**
77
+ * Calculate confidence score from hallucination count and heuristic scores
78
+ */
79
+ export declare function calculateAICodeConfidence(hallucinationCount: number, heuristicScores: HeuristicScores): DetectionResult | null;
80
+ /**
81
+ * Check if filename indicates a test file
82
+ */
83
+ export declare function isTestFile(filename?: string): boolean;
84
+ /**
85
+ * Remove comments and string literals from a line to avoid false positives
86
+ */
87
+ export declare function removeCommentsAndStrings(line: string, language: string): string;
88
+ //# sourceMappingURL=ai-code-detection-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-code-detection-utils.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/analyzers/helpers/ai-code-detection-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAgBD;;;GAGG;AACH,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAwCzE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAsCjE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAsC7D;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAqBpE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAwBjE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAgC9D;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAuCpE;AAED;;;GAGG;AACH,wBAAgB,qCAAqC,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAyC7E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,kBAAkB,EAAE,MAAM,EAC1B,eAAe,EAAE,eAAe,GAC/B,eAAe,GAAG,IAAI,CA4CxB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CASrD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAmB/E"}
@@ -0,0 +1,371 @@
1
+ "use strict";
2
+ /**
3
+ * AI Code Detection Utilities
4
+ *
5
+ * Shared utilities for detecting AI-generated code patterns across all languages.
6
+ *
7
+ * Features:
8
+ * - 8 code smell heuristic detectors (weighted scoring)
9
+ * - Confidence scoring system (HIGH/MEDIUM/LOW)
10
+ * - Language-agnostic pattern detection
11
+ *
12
+ * Phase 1.5, Week 5-7 (AI-Generated Code Detection)
13
+ * Created: January 8, 2026
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.detectOverEngineeredErrorHandling = detectOverEngineeredErrorHandling;
17
+ exports.detectUnnecessaryWrappers = detectUnnecessaryWrappers;
18
+ exports.detectVerboseComments = detectVerboseComments;
19
+ exports.detectMixedNamingConventions = detectMixedNamingConventions;
20
+ exports.detectRedundantNullChecks = detectRedundantNullChecks;
21
+ exports.detectUnnecessaryAsync = detectUnnecessaryAsync;
22
+ exports.detectGenericVariableOveruse = detectGenericVariableOveruse;
23
+ exports.detectInconsistentStringConcatenation = detectInconsistentStringConcatenation;
24
+ exports.calculateAICodeConfidence = calculateAICodeConfidence;
25
+ exports.isTestFile = isTestFile;
26
+ exports.removeCommentsAndStrings = removeCommentsAndStrings;
27
+ /**
28
+ * Heuristic weights (sum = 1.0)
29
+ */
30
+ const HEURISTIC_WEIGHTS = {
31
+ overEngineeredErrors: 0.15,
32
+ unnecessaryWrappers: 0.12,
33
+ verboseComments: 0.10,
34
+ mixedNaming: 0.13,
35
+ redundantNullChecks: 0.15,
36
+ unnecessaryAsync: 0.12,
37
+ genericVariables: 0.10,
38
+ inconsistentStrings: 0.13,
39
+ };
40
+ /**
41
+ * 1. Detect over-engineered error handling
42
+ * Pattern: 4+ nested if/else conditions inside catch blocks
43
+ */
44
+ function detectOverEngineeredErrorHandling(lines) {
45
+ let score = 0;
46
+ let inCatchBlock = false;
47
+ let catchBlockStart = -1;
48
+ let braceDepth = 0;
49
+ for (let i = 0; i < lines.length; i++) {
50
+ const line = lines[i].trim();
51
+ // Detect catch block start
52
+ if (line.match(/}\s*catch\s*\(/) || line.match(/except\s*:/)) {
53
+ inCatchBlock = true;
54
+ catchBlockStart = i;
55
+ braceDepth = 0;
56
+ continue;
57
+ }
58
+ if (inCatchBlock) {
59
+ // Track braces
60
+ braceDepth += (line.match(/{/g) || []).length;
61
+ braceDepth -= (line.match(/}/g) || []).length;
62
+ // Exit catch block
63
+ if (braceDepth < 0) {
64
+ inCatchBlock = false;
65
+ continue;
66
+ }
67
+ // Count nested if/else conditions
68
+ const catchBlock = lines.slice(catchBlockStart, i + 1).join('\n');
69
+ const ifElseCount = (catchBlock.match(/\b(if|else\s+if|elif)\s*\(/g) || []).length;
70
+ if (ifElseCount >= 4) {
71
+ score = 1.0; // Maximum score for this heuristic
72
+ break;
73
+ }
74
+ }
75
+ }
76
+ return score;
77
+ }
78
+ /**
79
+ * 2. Detect unnecessary wrapper functions
80
+ * Pattern: Single-line function body that only calls another function
81
+ */
82
+ function detectUnnecessaryWrappers(lines) {
83
+ let wrapperCount = 0;
84
+ let totalFunctions = 0;
85
+ for (let i = 0; i < lines.length; i++) {
86
+ const line = lines[i].trim();
87
+ // Detect function declarations
88
+ const isFunctionDeclaration = line.match(/^function\s+\w+\s*\(/) || // JavaScript function
89
+ line.match(/^def\s+\w+\s*\(/) || // Python def
90
+ line.match(/^(public|private|protected)?\s*(static)?\s+\w+\s+\w+\s*\(/); // Java method
91
+ if (isFunctionDeclaration) {
92
+ totalFunctions++;
93
+ // Check if next non-empty line is a single return/call
94
+ let nextLineIndex = i + 1;
95
+ while (nextLineIndex < lines.length && lines[nextLineIndex].trim() === '') {
96
+ nextLineIndex++;
97
+ }
98
+ if (nextLineIndex < lines.length) {
99
+ const nextLine = lines[nextLineIndex].trim();
100
+ // Single-line wrapper patterns
101
+ const isSingleLineWrapper = nextLine.match(/^return\s+\w+\([^)]*\);?\s*$/) || // return func(x);
102
+ nextLine.match(/^return\s+\w+\.\w+\([^)]*\);?\s*$/); // return obj.func(x);
103
+ if (isSingleLineWrapper) {
104
+ wrapperCount++;
105
+ }
106
+ }
107
+ }
108
+ }
109
+ return totalFunctions > 0 ? Math.min(wrapperCount / totalFunctions, 1.0) : 0;
110
+ }
111
+ /**
112
+ * 3. Detect verbose/redundant comments
113
+ * Pattern: Comment duplicates code logic exactly (>70% lexical overlap)
114
+ */
115
+ function detectVerboseComments(lines) {
116
+ let redundantCount = 0;
117
+ let totalComments = 0;
118
+ for (let i = 0; i < lines.length - 1; i++) {
119
+ const line = lines[i].trim();
120
+ const nextLine = lines[i + 1].trim();
121
+ // Detect single-line comments
122
+ const isComment = line.startsWith('//') || // JavaScript/Java
123
+ line.startsWith('#'); // Python
124
+ if (isComment && nextLine.length > 5) {
125
+ totalComments++;
126
+ // Extract comment text
127
+ const commentText = line.replace(/^(\/\/|#)\s*/, '').toLowerCase();
128
+ const codeText = nextLine.replace(/[^a-z0-9\s]/gi, ' ').toLowerCase();
129
+ // Calculate lexical overlap
130
+ const commentWords = new Set(commentText.split(/\s+/).filter(w => w.length > 2));
131
+ const codeWords = new Set(codeText.split(/\s+/).filter(w => w.length > 2));
132
+ let overlapCount = 0;
133
+ commentWords.forEach(word => {
134
+ if (codeWords.has(word))
135
+ overlapCount++;
136
+ });
137
+ const overlapRatio = commentWords.size > 0 ? overlapCount / commentWords.size : 0;
138
+ if (overlapRatio >= 0.7) {
139
+ redundantCount++;
140
+ }
141
+ }
142
+ }
143
+ return totalComments > 0 ? Math.min(redundantCount / totalComments, 1.0) : 0;
144
+ }
145
+ /**
146
+ * 4. Detect mixed naming conventions
147
+ * Pattern: camelCase + snake_case in same 10-line window
148
+ */
149
+ function detectMixedNamingConventions(lines) {
150
+ let mixedWindows = 0;
151
+ const windowSize = 10;
152
+ for (let i = 0; i <= lines.length - windowSize; i++) {
153
+ const window = lines.slice(i, i + windowSize).join('\n');
154
+ // Extract variable/function names
155
+ const camelCaseMatches = window.match(/\b[a-z][a-zA-Z0-9]*[A-Z][a-zA-Z0-9]*/g) || [];
156
+ const snakeCaseMatches = window.match(/\b[a-z][a-z0-9]*_[a-z0-9_]*/g) || [];
157
+ // Both conventions present in same window (excluding constants)
158
+ const hasBothConventions = camelCaseMatches.length > 0 && snakeCaseMatches.length > 0;
159
+ if (hasBothConventions) {
160
+ mixedWindows++;
161
+ }
162
+ }
163
+ const totalWindows = Math.max(lines.length - windowSize + 1, 1);
164
+ return Math.min(mixedWindows / totalWindows, 1.0);
165
+ }
166
+ /**
167
+ * 5. Detect redundant null checks
168
+ * Pattern: Multiple null/undefined checks on same variable within 5 lines
169
+ */
170
+ function detectRedundantNullChecks(lines) {
171
+ let redundantChecks = 0;
172
+ for (let i = 0; i < lines.length; i++) {
173
+ const window = lines.slice(i, Math.min(i + 5, lines.length)).join('\n');
174
+ // Extract all variable names in null checks
175
+ const nullCheckPattern = /(\w+)\s*(===|!==|==|!=)\s*(null|undefined)/g;
176
+ const matches = Array.from(window.matchAll(nullCheckPattern));
177
+ // Count checks per variable
178
+ const checksPerVariable = new Map();
179
+ matches.forEach(match => {
180
+ const varName = match[1];
181
+ checksPerVariable.set(varName, (checksPerVariable.get(varName) || 0) + 1);
182
+ });
183
+ // Detect variables with 2+ checks
184
+ checksPerVariable.forEach(count => {
185
+ if (count >= 2)
186
+ redundantChecks++;
187
+ });
188
+ }
189
+ return Math.min(redundantChecks / 10, 1.0); // Normalize (10 = very high)
190
+ }
191
+ /**
192
+ * 6. Detect unnecessary async functions
193
+ * Pattern: async function with no await keywords
194
+ */
195
+ function detectUnnecessaryAsync(lines) {
196
+ let unnecessaryAsyncCount = 0;
197
+ let totalAsyncFunctions = 0;
198
+ let inAsyncFunction = false;
199
+ let functionStartLine = -1;
200
+ for (let i = 0; i < lines.length; i++) {
201
+ const line = lines[i].trim();
202
+ // Detect async function start
203
+ if (line.match(/^async\s+(function|def)/)) {
204
+ inAsyncFunction = true;
205
+ functionStartLine = i;
206
+ totalAsyncFunctions++;
207
+ }
208
+ // Detect function end (closing brace or dedent in Python)
209
+ if (inAsyncFunction && line.match(/^}/)) {
210
+ const functionBody = lines.slice(functionStartLine, i + 1).join('\n');
211
+ // Check if function contains any await keywords
212
+ const hasAwait = functionBody.match(/\bawait\b/);
213
+ if (!hasAwait) {
214
+ unnecessaryAsyncCount++;
215
+ }
216
+ inAsyncFunction = false;
217
+ }
218
+ }
219
+ return totalAsyncFunctions > 0 ? Math.min(unnecessaryAsyncCount / totalAsyncFunctions, 1.0) : 0;
220
+ }
221
+ /**
222
+ * 7. Detect generic variable name overuse
223
+ * Pattern: data, result, temp, value used >5 times in single function
224
+ */
225
+ function detectGenericVariableOveruse(lines) {
226
+ const genericNames = ['data', 'result', 'temp', 'value', 'item', 'obj', 'arr'];
227
+ let overuseCount = 0;
228
+ let inFunction = false;
229
+ let functionStart = -1;
230
+ for (let i = 0; i < lines.length; i++) {
231
+ const line = lines[i].trim();
232
+ // Detect function start
233
+ const isFunctionStart = line.match(/^function\s+\w+\s*\(/) ||
234
+ line.match(/^def\s+\w+\s*\(/) ||
235
+ line.match(/^(public|private|protected)?\s*(static)?\s+\w+\s+\w+\s*\(/);
236
+ if (isFunctionStart) {
237
+ inFunction = true;
238
+ functionStart = i;
239
+ }
240
+ // Detect function end
241
+ if (inFunction && line.match(/^}/)) {
242
+ const functionBody = lines.slice(functionStart, i + 1).join('\n');
243
+ // Count generic variable usage
244
+ genericNames.forEach(name => {
245
+ const pattern = new RegExp(`\\b${name}\\b`, 'g');
246
+ const matches = functionBody.match(pattern) || [];
247
+ if (matches.length > 5) {
248
+ overuseCount++;
249
+ }
250
+ });
251
+ inFunction = false;
252
+ }
253
+ }
254
+ return Math.min(overuseCount / 5, 1.0); // Normalize (5 = very high)
255
+ }
256
+ /**
257
+ * 8. Detect inconsistent string concatenation
258
+ * Pattern: Mix of +, template literals, .concat() in same function
259
+ */
260
+ function detectInconsistentStringConcatenation(lines) {
261
+ let inconsistentFunctions = 0;
262
+ let totalFunctions = 0;
263
+ let inFunction = false;
264
+ let functionStart = -1;
265
+ for (let i = 0; i < lines.length; i++) {
266
+ const line = lines[i].trim();
267
+ // Detect function start
268
+ const isFunctionStart = line.match(/^function\s+\w+\s*\(/) ||
269
+ line.match(/^def\s+\w+\s*\(/);
270
+ if (isFunctionStart) {
271
+ inFunction = true;
272
+ functionStart = i;
273
+ totalFunctions++;
274
+ }
275
+ // Detect function end
276
+ if (inFunction && line.match(/^}/)) {
277
+ const functionBody = lines.slice(functionStart, i + 1).join('\n');
278
+ // Detect different concatenation methods
279
+ const hasPlus = functionBody.match(/['"`]\s*\+\s*['"`]/);
280
+ const hasTemplateLiteral = functionBody.match(/`[^`]*\${[^}]*}[^`]*`/);
281
+ const hasConcat = functionBody.match(/\.concat\s*\(/);
282
+ // Count methods used
283
+ const methodCount = [hasPlus, hasTemplateLiteral, hasConcat].filter(Boolean).length;
284
+ if (methodCount >= 2) {
285
+ inconsistentFunctions++;
286
+ }
287
+ inFunction = false;
288
+ }
289
+ }
290
+ return totalFunctions > 0 ? Math.min(inconsistentFunctions / totalFunctions, 1.0) : 0;
291
+ }
292
+ /**
293
+ * Calculate confidence score from hallucination count and heuristic scores
294
+ */
295
+ function calculateAICodeConfidence(hallucinationCount, heuristicScores) {
296
+ // Calculate weighted heuristic score
297
+ const heuristicScore = heuristicScores.overEngineeredErrors * HEURISTIC_WEIGHTS.overEngineeredErrors +
298
+ heuristicScores.unnecessaryWrappers * HEURISTIC_WEIGHTS.unnecessaryWrappers +
299
+ heuristicScores.verboseComments * HEURISTIC_WEIGHTS.verboseComments +
300
+ heuristicScores.mixedNaming * HEURISTIC_WEIGHTS.mixedNaming +
301
+ heuristicScores.redundantNullChecks * HEURISTIC_WEIGHTS.redundantNullChecks +
302
+ heuristicScores.unnecessaryAsync * HEURISTIC_WEIGHTS.unnecessaryAsync +
303
+ heuristicScores.genericVariables * HEURISTIC_WEIGHTS.genericVariables +
304
+ heuristicScores.inconsistentStrings * HEURISTIC_WEIGHTS.inconsistentStrings;
305
+ // HIGH confidence: 2+ hallucinations OR 1 hallucination + strong heuristics
306
+ if (hallucinationCount >= 2 || (hallucinationCount >= 1 && heuristicScore >= 0.5)) {
307
+ return {
308
+ hallucinationPatterns: hallucinationCount,
309
+ heuristicScore,
310
+ confidence: 'HIGH',
311
+ severity: 'CRITICAL',
312
+ };
313
+ }
314
+ // MEDIUM confidence: 1 hallucination OR strong heuristics
315
+ if (hallucinationCount === 1 || heuristicScore >= 0.4) {
316
+ return {
317
+ hallucinationPatterns: hallucinationCount,
318
+ heuristicScore,
319
+ confidence: 'MEDIUM',
320
+ severity: 'HIGH',
321
+ };
322
+ }
323
+ // LOW confidence: Weak heuristics only
324
+ if (heuristicScore >= 0.25) {
325
+ return {
326
+ hallucinationPatterns: 0,
327
+ heuristicScore,
328
+ confidence: 'LOW',
329
+ severity: 'MEDIUM',
330
+ };
331
+ }
332
+ // No detection
333
+ return null;
334
+ }
335
+ /**
336
+ * Check if filename indicates a test file
337
+ */
338
+ function isTestFile(filename) {
339
+ if (!filename)
340
+ return false;
341
+ const basename = filename.split('/').pop() || '';
342
+ return filename.includes('.test.') ||
343
+ filename.includes('.spec.') ||
344
+ filename.includes('__tests__/') ||
345
+ filename.endsWith('Test.java') ||
346
+ filename.endsWith('_test.py') ||
347
+ basename.startsWith('test_'); // Python: test_*.py
348
+ }
349
+ /**
350
+ * Remove comments and string literals from a line to avoid false positives
351
+ */
352
+ function removeCommentsAndStrings(line, language) {
353
+ let cleaned = line;
354
+ if (language === 'javascript' || language === 'typescript' || language === 'java') {
355
+ // Remove string literals
356
+ cleaned = cleaned.replace(/"[^"]*"/g, '""');
357
+ cleaned = cleaned.replace(/'[^']*'/g, "''");
358
+ cleaned = cleaned.replace(/`[^`]*`/g, '``');
359
+ // Remove comments
360
+ cleaned = cleaned.replace(/\/\/.*$/, '');
361
+ }
362
+ else if (language === 'python') {
363
+ // Remove string literals
364
+ cleaned = cleaned.replace(/"[^"]*"/g, '""');
365
+ cleaned = cleaned.replace(/'[^']*'/g, "''");
366
+ // Remove comments
367
+ cleaned = cleaned.replace(/#.*$/, '');
368
+ }
369
+ return cleaned;
370
+ }
371
+ //# sourceMappingURL=ai-code-detection-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-code-detection-utils.js","sourceRoot":"","sources":["../../../../../../../src/lib/analyzers/helpers/ai-code-detection-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * JSX Helpers Module
3
+ *
4
+ * Pure functions for detecting and handling JSX syntax in JavaScript/TypeScript code.
5
+ * Helps prevent false positives in variable tracking and syntax validation.
6
+ *
7
+ * @module jsx-helpers
8
+ */
9
+ /**
10
+ * Detects if code contains JSX syntax
11
+ *
12
+ * @param code - The source code to analyze
13
+ * @returns true if JSX is detected, false otherwise
14
+ *
15
+ * @example
16
+ * detectJSX('return <div>Hello</div>') // true
17
+ * detectJSX('const x = 5') // false
18
+ */
19
+ export declare function detectJSX(code: string): boolean;
20
+ /**
21
+ * Returns the set of JSX elements and attributes that should be excluded
22
+ * from variable tracking to prevent false positives.
23
+ *
24
+ * @returns Set of JSX element names and common attributes
25
+ *
26
+ * @example
27
+ * const elements = getJSXElements();
28
+ * elements.has('div') // true
29
+ * elements.has('onClick') // true
30
+ */
31
+ export declare function getJSXElements(): Set<string>;
32
+ /**
33
+ * Checks if a variable name is actually a JSX element or attribute
34
+ *
35
+ * @param varName - The variable name to check
36
+ * @param hasJSX - Whether JSX was detected in the code
37
+ * @returns true if the variable is a JSX element/attribute, false otherwise
38
+ *
39
+ * @example
40
+ * isJSXElement('div', true) // true
41
+ * isJSXElement('myVar', true) // false
42
+ * isJSXElement('div', false) // false (no JSX in code)
43
+ */
44
+ export declare function isJSXElement(varName: string, hasJSX: boolean): boolean;
45
+ /**
46
+ * Checks if a variable name appears as JSX text content (between > and </)
47
+ * This prevents false positives like:
48
+ * <a href={url}>Click here</a>
49
+ * where "here" would be flagged as an undeclared variable
50
+ *
51
+ * @param varName - The variable name to check
52
+ * @param line - The line number (1-indexed)
53
+ * @param lines - Array of all code lines
54
+ * @param hasJSX - Whether JSX was detected in the code
55
+ * @returns true if the variable is JSX text content, false otherwise
56
+ *
57
+ * @example
58
+ * const lines = ['<a href={url}>Click here</a>'];
59
+ * isJSXTextContent('here', 1, lines, true) // true
60
+ * isJSXTextContent('url', 1, lines, true) // false
61
+ */
62
+ export declare function isJSXTextContent(varName: string, line: number, lines: string[], hasJSX: boolean): boolean;
63
+ //# sourceMappingURL=jsx-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-helpers.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/analyzers/helpers/jsx-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,IAAI,GAAG,CAAC,MAAM,CAAC,CAc5C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAGtE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,OAAO,GACd,OAAO,CAMT"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ /**
3
+ * JSX Helpers Module
4
+ *
5
+ * Pure functions for detecting and handling JSX syntax in JavaScript/TypeScript code.
6
+ * Helps prevent false positives in variable tracking and syntax validation.
7
+ *
8
+ * @module jsx-helpers
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.detectJSX = detectJSX;
12
+ exports.getJSXElements = getJSXElements;
13
+ exports.isJSXElement = isJSXElement;
14
+ exports.isJSXTextContent = isJSXTextContent;
15
+ /**
16
+ * Detects if code contains JSX syntax
17
+ *
18
+ * @param code - The source code to analyze
19
+ * @returns true if JSX is detected, false otherwise
20
+ *
21
+ * @example
22
+ * detectJSX('return <div>Hello</div>') // true
23
+ * detectJSX('const x = 5') // false
24
+ */
25
+ function detectJSX(code) {
26
+ return /<[a-zA-Z][a-zA-Z0-9]*[\s>]/.test(code);
27
+ }
28
+ /**
29
+ * Returns the set of JSX elements and attributes that should be excluded
30
+ * from variable tracking to prevent false positives.
31
+ *
32
+ * @returns Set of JSX element names and common attributes
33
+ *
34
+ * @example
35
+ * const elements = getJSXElements();
36
+ * elements.has('div') // true
37
+ * elements.has('onClick') // true
38
+ */
39
+ function getJSXElements() {
40
+ return new Set([
41
+ // HTML elements
42
+ 'div', 'span', 'a', 'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',
43
+ 'button', 'input', 'form', 'label', 'select', 'option', 'textarea',
44
+ 'ul', 'ol', 'li', 'table', 'tr', 'td', 'th', 'thead', 'tbody',
45
+ 'img', 'video', 'audio', 'canvas', 'svg', 'path',
46
+ 'header', 'footer', 'nav', 'main', 'section', 'article', 'aside',
47
+ // Common JSX attributes that might be flagged
48
+ 'href', 'src', 'alt', 'id', 'className', 'style', 'onClick',
49
+ 'onChange', 'onSubmit', 'value', 'placeholder', 'type', 'name',
50
+ 'disabled', 'checked', 'selected', 'required', 'readOnly',
51
+ 'rel', 'target', 'title', 'aria', 'data'
52
+ ]);
53
+ }
54
+ /**
55
+ * Checks if a variable name is actually a JSX element or attribute
56
+ *
57
+ * @param varName - The variable name to check
58
+ * @param hasJSX - Whether JSX was detected in the code
59
+ * @returns true if the variable is a JSX element/attribute, false otherwise
60
+ *
61
+ * @example
62
+ * isJSXElement('div', true) // true
63
+ * isJSXElement('myVar', true) // false
64
+ * isJSXElement('div', false) // false (no JSX in code)
65
+ */
66
+ function isJSXElement(varName, hasJSX) {
67
+ if (!hasJSX)
68
+ return false;
69
+ return getJSXElements().has(varName);
70
+ }
71
+ /**
72
+ * Checks if a variable name appears as JSX text content (between > and </)
73
+ * This prevents false positives like:
74
+ * <a href={url}>Click here</a>
75
+ * where "here" would be flagged as an undeclared variable
76
+ *
77
+ * @param varName - The variable name to check
78
+ * @param line - The line number (1-indexed)
79
+ * @param lines - Array of all code lines
80
+ * @param hasJSX - Whether JSX was detected in the code
81
+ * @returns true if the variable is JSX text content, false otherwise
82
+ *
83
+ * @example
84
+ * const lines = ['<a href={url}>Click here</a>'];
85
+ * isJSXTextContent('here', 1, lines, true) // true
86
+ * isJSXTextContent('url', 1, lines, true) // false
87
+ */
88
+ function isJSXTextContent(varName, line, lines, hasJSX) {
89
+ if (!hasJSX)
90
+ return false;
91
+ const lineText = lines[line - 1]; // Convert 1-indexed to 0-indexed
92
+ const jsxTextPattern = new RegExp(`>[^<]*\\b${varName}\\b[^<]*</`);
93
+ return jsxTextPattern.test(lineText);
94
+ }
95
+ //# sourceMappingURL=jsx-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-helpers.js","sourceRoot":"","sources":["../../../../../../../src/lib/analyzers/helpers/jsx-helpers.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAYH,8BAEC;AAaD,wCAcC;AAcD,oCAGC;AAmBD,4CAWC;AAtFD;;;;;;;;;GASG;AACH,SAAgB,SAAS,CAAC,IAAY;IACpC,OAAO,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,cAAc;IAC5B,OAAO,IAAI,GAAG,CAAC;QACb,gBAAgB;QAChB,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC3D,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU;QAClE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;QAC7D,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM;QAChD,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO;QAChE,8CAA8C;QAC9C,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS;QAC3D,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM;QAC9D,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;QACzD,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;KACzC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,YAAY,CAAC,OAAe,EAAE,MAAe;IAC3D,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,OAAO,cAAc,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,gBAAgB,CAC9B,OAAe,EACf,IAAY,EACZ,KAAe,EACf,MAAe;IAEf,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE1B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,iCAAiC;IACnE,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,YAAY,OAAO,YAAY,CAAC,CAAC;IACnE,OAAO,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACvC,CAAC"}