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,284 @@
1
+ "use strict";
2
+ /**
3
+ * JavaScript Code Pattern Detection Module
4
+ *
5
+ * Detects problematic code patterns:
6
+ * - Unintentional array mutations (.sort, .reverse, .splice)
7
+ * - Missing DOM null checks
8
+ * - Blocking operations in loops (JSON.parse, DOM manipulation, etc.)
9
+ *
10
+ * Part of modularized JavaScript analyzer (150-300 LOC per module)
11
+ * Extracted from monolithic javascript-analyzer.ts (2,672 LOC)
12
+ *
13
+ * @module code-patterns
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.detectArrayMutations = detectArrayMutations;
17
+ exports.detectDOMNullChecks = detectDOMNullChecks;
18
+ exports.detectBlockingOperations = detectBlockingOperations;
19
+ /**
20
+ * Detect unintentional array mutations
21
+ *
22
+ * @param code - Full source code
23
+ * @param isInsideTemplateLiteral - Function to check if line is in template literal
24
+ * @returns Array of detected line errors
25
+ */
26
+ function detectArrayMutations(code, isInsideTemplateLiteral) {
27
+ const lines = code.split('\n');
28
+ const lineErrors = [];
29
+ let inMultiLineComment = false;
30
+ const mutatingMethods = [
31
+ { method: '.sort(', message: '.sort() modifies the original array', suggestion: 'Use [...array].sort() or array.toSorted()' },
32
+ { method: '.reverse(', message: '.reverse() modifies the original array', suggestion: 'Use [...array].reverse() or array.toReversed()' },
33
+ { method: '.splice(', message: '.splice() modifies the original array', suggestion: 'Use .slice() or .toSpliced() if you do not want to mutate' },
34
+ { method: '.fill(', message: '.fill() modifies the original array', suggestion: 'Create a copy first: [...array].fill()' }
35
+ ];
36
+ lines.forEach((line, index) => {
37
+ const lineNumber = index + 1;
38
+ const trimmed = line.trim();
39
+ // Track multi-line comments
40
+ if (trimmed.includes('/*'))
41
+ inMultiLineComment = true;
42
+ if (trimmed.includes('*/')) {
43
+ inMultiLineComment = false;
44
+ return;
45
+ }
46
+ // Skip comments
47
+ if (!trimmed || inMultiLineComment || trimmed.startsWith('//') || trimmed.startsWith('*')) {
48
+ return;
49
+ }
50
+ // Skip lines inside template literals
51
+ if (isInsideTemplateLiteral(code, lineNumber)) {
52
+ return;
53
+ }
54
+ mutatingMethods.forEach(({ method, message, suggestion }) => {
55
+ if (line.includes(method)) {
56
+ // Check if result is being used (assigned or chained)
57
+ const beforeMethod = line.substring(0, line.indexOf(method));
58
+ const afterMethod = line.substring(line.indexOf(method) + method.length);
59
+ // If method is not assigned and not chained with dot, likely unintentional mutation
60
+ const isAssigned = beforeMethod.includes('=') || beforeMethod.includes('const ') ||
61
+ beforeMethod.includes('let ') || beforeMethod.includes('var ');
62
+ const isChained = afterMethod.trim().startsWith('.');
63
+ if (!isAssigned && !isChained) {
64
+ lineErrors.push({
65
+ line: lineNumber,
66
+ error: `Unintentional mutation: ${message}`,
67
+ suggestion,
68
+ severity: 'warning'
69
+ });
70
+ }
71
+ }
72
+ });
73
+ });
74
+ return lineErrors;
75
+ }
76
+ /**
77
+ * Detect DOM queries without null checks
78
+ *
79
+ * @param code - Full source code
80
+ * @param isInsideTemplateLiteral - Function to check if line is in template literal
81
+ * @returns Array of detected line errors
82
+ */
83
+ function detectDOMNullChecks(code, isInsideTemplateLiteral) {
84
+ const lines = code.split('\n');
85
+ const lineErrors = [];
86
+ let inMultiLineComment = false;
87
+ const domMethods = [
88
+ 'getElementById(',
89
+ 'querySelector(',
90
+ 'getElementsByClassName(',
91
+ 'getElementsByTagName(',
92
+ 'getElementsByName('
93
+ ];
94
+ lines.forEach((line, index) => {
95
+ const lineNumber = index + 1;
96
+ const trimmed = line.trim();
97
+ // Track multi-line comments
98
+ if (trimmed.includes('/*'))
99
+ inMultiLineComment = true;
100
+ if (trimmed.includes('*/')) {
101
+ inMultiLineComment = false;
102
+ return;
103
+ }
104
+ // Skip comments
105
+ if (!trimmed || inMultiLineComment || trimmed.startsWith('//') || trimmed.startsWith('*')) {
106
+ return;
107
+ }
108
+ // Skip lines inside template literals
109
+ if (isInsideTemplateLiteral(code, lineNumber)) {
110
+ return;
111
+ }
112
+ domMethods.forEach(method => {
113
+ if (line.includes(method)) {
114
+ // Check if there's a null check in the next few lines
115
+ const nextLines = lines.slice(index, Math.min(index + 3, lines.length));
116
+ const hasNullCheck = nextLines.some(l => l.includes('if (') && (l.includes('!== null') || l.includes('!= null') || l.includes('&&') || l.includes('?.')));
117
+ if (!hasNullCheck) {
118
+ lineErrors.push({
119
+ line: lineNumber,
120
+ error: `DOM query without null check: ${method}`,
121
+ suggestion: 'Add check: if (element !== null) { ... } or use optional chaining (?.))',
122
+ severity: 'warning'
123
+ });
124
+ }
125
+ }
126
+ });
127
+ });
128
+ return lineErrors;
129
+ }
130
+ /**
131
+ * Detect blocking operations that can impact performance
132
+ * - JSON.parse/stringify in loops
133
+ * - Complex regex in loops
134
+ * - DOM manipulation in loops
135
+ * - String concatenation with += in loops
136
+ * - Synchronous file operations in loops
137
+ * - Storage access in loops
138
+ * - Nested loops
139
+ *
140
+ * @param code - Full source code
141
+ * @param isInsideTemplateLiteral - Function to check if line is in template literal
142
+ * @returns Array of detected line errors
143
+ */
144
+ function detectBlockingOperations(code, isInsideTemplateLiteral) {
145
+ const lines = code.split('\n');
146
+ const lineErrors = [];
147
+ let inMultiLineComment = false;
148
+ let loopNesting = 0;
149
+ let loopStartLines = [];
150
+ let braceDepth = 0;
151
+ const loopBraceDepths = [];
152
+ lines.forEach((line, index) => {
153
+ const trimmed = line.trim();
154
+ const lineNumber = index + 1;
155
+ // Track multi-line comments
156
+ if (trimmed.includes('/*'))
157
+ inMultiLineComment = true;
158
+ if (trimmed.includes('*/')) {
159
+ inMultiLineComment = false;
160
+ return;
161
+ }
162
+ // Skip comments
163
+ if (!trimmed || inMultiLineComment || trimmed.startsWith('//') || trimmed.startsWith('*')) {
164
+ return;
165
+ }
166
+ // Skip lines inside template literals
167
+ if (isInsideTemplateLiteral(code, lineNumber)) {
168
+ return;
169
+ }
170
+ // Track brace depth for all code
171
+ const openBraces = (line.match(/\{/g) || []).length;
172
+ const closeBraces = (line.match(/\}/g) || []).length;
173
+ braceDepth += openBraces - closeBraces;
174
+ // Detect loop start
175
+ const isForLoop = /\b(for|while)\s*\(/.test(trimmed);
176
+ const isArrayMethod = /\.(forEach|map|filter|reduce|some|every|find)\s*\(/.test(trimmed);
177
+ if (isForLoop || isArrayMethod) {
178
+ loopNesting++;
179
+ loopStartLines.push(lineNumber);
180
+ loopBraceDepths.push(braceDepth);
181
+ }
182
+ // Check for blocking operations inside loops
183
+ if (loopNesting > 0) {
184
+ // 1. JSON.parse() in loops
185
+ if (trimmed.includes('JSON.parse(') && !trimmed.includes('//')) {
186
+ lineErrors.push({
187
+ line: lineNumber,
188
+ error: 'Blocking operation: JSON.parse() inside loop',
189
+ suggestion: 'Move JSON.parse() outside the loop or process the data before iteration',
190
+ severity: 'warning'
191
+ });
192
+ }
193
+ // 2. JSON.stringify() in loops
194
+ if (trimmed.includes('JSON.stringify(') && !trimmed.includes('//')) {
195
+ lineErrors.push({
196
+ line: lineNumber,
197
+ error: 'Blocking operation: JSON.stringify() inside loop',
198
+ suggestion: 'Move JSON.stringify() outside the loop to avoid repeated serialization',
199
+ severity: 'warning'
200
+ });
201
+ }
202
+ // 3. Complex regex operations in loops
203
+ const withoutComments = trimmed.split('//')[0];
204
+ const hasNewRegExp = /new\s+RegExp\(/.test(withoutComments);
205
+ const testIndex = withoutComments.indexOf('.test(');
206
+ let hasInlineRegexLiteral = false;
207
+ if (testIndex > 0) {
208
+ const charBeforeTest = withoutComments.charAt(testIndex - 1);
209
+ hasInlineRegexLiteral = charBeforeTest === '/' || /[gimuy]/.test(charBeforeTest);
210
+ }
211
+ if (hasInlineRegexLiteral || hasNewRegExp) {
212
+ lineErrors.push({
213
+ line: lineNumber,
214
+ error: 'Blocking operation: Complex regex inside loop',
215
+ suggestion: 'Define the regex outside the loop: const regex = /pattern/; before the loop',
216
+ severity: 'warning'
217
+ });
218
+ }
219
+ // 4. DOM manipulation in loops
220
+ const domMethods = [
221
+ 'getElementById', 'getElementsByClassName', 'getElementsByTagName',
222
+ 'querySelector', 'querySelectorAll', 'createElement',
223
+ 'appendChild', 'removeChild', 'insertBefore'
224
+ ];
225
+ const hasDOMManipulation = domMethods.some(method => trimmed.includes(method + '(') || trimmed.includes('.' + method + '('));
226
+ if (hasDOMManipulation && !trimmed.includes('//')) {
227
+ lineErrors.push({
228
+ line: lineNumber,
229
+ error: 'Blocking operation: DOM manipulation inside loop',
230
+ suggestion: 'Accumulate changes and manipulate DOM once after the loop (Document Fragment)',
231
+ severity: 'warning'
232
+ });
233
+ }
234
+ // 5. Large string concatenation in loops
235
+ if (/\+=\s*['"`]/.test(trimmed) && !trimmed.includes('//')) {
236
+ lineErrors.push({
237
+ line: lineNumber,
238
+ error: 'Blocking operation: String concatenation with += inside loop',
239
+ suggestion: 'Use array.push() inside the loop and array.join() at the end',
240
+ severity: 'warning'
241
+ });
242
+ }
243
+ // 6. Synchronous file operations (Node.js)
244
+ if (/fs\.(readFileSync|writeFileSync|existsSync)/.test(trimmed) && !trimmed.includes('//')) {
245
+ lineErrors.push({
246
+ line: lineNumber,
247
+ error: 'Blocking operation: Synchronous file operation inside loop',
248
+ suggestion: 'Use async versions (readFile, writeFile) or move outside the loop',
249
+ severity: 'warning'
250
+ });
251
+ }
252
+ // 7. localStorage/sessionStorage access in loops
253
+ if (/(localStorage|sessionStorage)\.(getItem|setItem|removeItem)/.test(trimmed) && !trimmed.includes('//')) {
254
+ lineErrors.push({
255
+ line: lineNumber,
256
+ error: 'Blocking operation: Storage access inside loop',
257
+ suggestion: 'Accumulate the data and perform a single storage operation after the loop',
258
+ severity: 'warning'
259
+ });
260
+ }
261
+ // 8. Nested loops (performance warning)
262
+ if (loopNesting > 2) {
263
+ if (isForLoop || isArrayMethod) {
264
+ lineErrors.push({
265
+ line: lineNumber,
266
+ error: `Performance: ${loopNesting} levels of nested loops`,
267
+ suggestion: 'Consider refactoring with optimized data structures (Map, Set) or more efficient algorithms',
268
+ severity: 'warning'
269
+ });
270
+ }
271
+ }
272
+ }
273
+ // Detect loop end by tracking brace depth
274
+ if (loopNesting > 0 && loopBraceDepths.length > 0) {
275
+ if (braceDepth < loopBraceDepths[loopBraceDepths.length - 1]) {
276
+ loopNesting--;
277
+ loopStartLines.pop();
278
+ loopBraceDepths.pop();
279
+ }
280
+ }
281
+ });
282
+ return lineErrors;
283
+ }
284
+ //# sourceMappingURL=code-patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-patterns.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/quality-checks/code-patterns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * JavaScript Comparison Issues Detection Module
3
+ *
4
+ * Detects problematic comparison operators:
5
+ * - Loose equality (== instead of ===)
6
+ * - Loose inequality (!= instead of !==)
7
+ * - Assignment in conditions (= instead of === or ==)
8
+ *
9
+ * Part of modularized JavaScript analyzer (150-300 LOC per module)
10
+ * Extracted from monolithic javascript-analyzer.ts (2,672 LOC)
11
+ *
12
+ * @module comparison-issues
13
+ */
14
+ import { LineError } from '../../types';
15
+ /**
16
+ * Helper function type for checking if a line is inside a template literal
17
+ */
18
+ export type IsInsideTemplateLiteralFn = (code: string, lineNumber: number) => boolean;
19
+ /**
20
+ * Detect comparison issues (== vs ===, != vs !==, assignment in conditions)
21
+ *
22
+ * @param code - Full source code
23
+ * @param isInsideTemplateLiteral - Function to check if line is in template literal
24
+ * @returns Array of detected line errors
25
+ */
26
+ export declare function detectComparisonIssues(code: string, isInsideTemplateLiteral: IsInsideTemplateLiteralFn): LineError[];
27
+ //# sourceMappingURL=comparison-issues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comparison-issues.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/quality-checks/comparison-issues.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;AAEtF;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,uBAAuB,EAAE,yBAAyB,GACjD,SAAS,EAAE,CAkEb"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ /**
3
+ * JavaScript Comparison Issues Detection Module
4
+ *
5
+ * Detects problematic comparison operators:
6
+ * - Loose equality (== instead of ===)
7
+ * - Loose inequality (!= instead of !==)
8
+ * - Assignment in conditions (= instead of === or ==)
9
+ *
10
+ * Part of modularized JavaScript analyzer (150-300 LOC per module)
11
+ * Extracted from monolithic javascript-analyzer.ts (2,672 LOC)
12
+ *
13
+ * @module comparison-issues
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.detectComparisonIssues = detectComparisonIssues;
17
+ /**
18
+ * Detect comparison issues (== vs ===, != vs !==, assignment in conditions)
19
+ *
20
+ * @param code - Full source code
21
+ * @param isInsideTemplateLiteral - Function to check if line is in template literal
22
+ * @returns Array of detected line errors
23
+ */
24
+ function detectComparisonIssues(code, isInsideTemplateLiteral) {
25
+ const lines = code.split('\n');
26
+ const lineErrors = [];
27
+ let inMultiLineComment = false;
28
+ lines.forEach((line, index) => {
29
+ const lineNumber = index + 1;
30
+ const trimmed = line.trim();
31
+ // Track multi-line comments
32
+ if (trimmed.includes('/*'))
33
+ inMultiLineComment = true;
34
+ if (trimmed.includes('*/')) {
35
+ inMultiLineComment = false;
36
+ return;
37
+ }
38
+ // Skip comments
39
+ if (!trimmed || inMultiLineComment || trimmed.startsWith('//') || trimmed.startsWith('*')) {
40
+ return;
41
+ }
42
+ // Skip lines inside template literals (they contain arbitrary text, not JavaScript)
43
+ if (isInsideTemplateLiteral(code, lineNumber)) {
44
+ return;
45
+ }
46
+ // Detect == (but not ===)
47
+ const looseEqualityMatch = line.match(/[^=!<>]==(=?)[^=]/);
48
+ if (looseEqualityMatch && !looseEqualityMatch[1]) { // Not ===
49
+ lineErrors.push({
50
+ line: lineNumber,
51
+ error: 'Non-strict comparison (==) detected',
52
+ suggestion: 'Use === for strict comparison (avoids type coercion)',
53
+ severity: 'warning'
54
+ });
55
+ }
56
+ // Detect != (but not !==)
57
+ const looseInequalityMatch = line.match(/!=(=?)[^=]/);
58
+ if (looseInequalityMatch && !looseInequalityMatch[1]) { // Not !==
59
+ lineErrors.push({
60
+ line: lineNumber,
61
+ error: 'Non-strict comparison (!=) detected',
62
+ suggestion: 'Use !== for strict comparison (avoids type coercion)',
63
+ severity: 'warning'
64
+ });
65
+ }
66
+ // Detect assignment in condition (= instead of == or ===)
67
+ // Pattern: if (variable = value) or while (variable = value)
68
+ // This is a critical bug where = (assignment) is used instead of === (comparison)
69
+ const assignmentInCondition = line.match(/\b(if|while|for)\s*\([^)]*[^=!<>]=[^=][^)]*\)/);
70
+ if (assignmentInCondition) {
71
+ // Verify it's not part of an arrow function or initialization (for loops)
72
+ const isForLoopInit = assignmentInCondition[1] === 'for' && (line.includes('let ') || line.includes('var ') || line.includes('const '));
73
+ const isArrowFunction = line.includes('=>');
74
+ if (!isForLoopInit && !isArrowFunction) {
75
+ lineErrors.push({
76
+ line: lineNumber,
77
+ error: 'Assignment in condition - did you mean === or == ?',
78
+ suggestion: 'Use === for comparison. If assignment is intentional, wrap in parentheses: if ((x = getValue()))',
79
+ severity: 'error'
80
+ });
81
+ }
82
+ }
83
+ });
84
+ return lineErrors;
85
+ }
86
+ //# sourceMappingURL=comparison-issues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comparison-issues.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/quality-checks/comparison-issues.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;AAgBH,wDAqEC;AA5ED;;;;;;GAMG;AACH,SAAgB,sBAAsB,CACpC,IAAY,EACZ,uBAAkD;IAElD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,UAAU,GAAgB,EAAE,CAAC;IACnC,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAE/B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,4BAA4B;QAC5B,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,kBAAkB,GAAG,IAAI,CAAC;QACtD,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,kBAAkB,GAAG,KAAK,CAAC;YAAC,OAAO;QAAC,CAAC;QAEnE,gBAAgB;QAChB,IAAI,CAAC,OAAO,IAAI,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1F,OAAO;QACT,CAAC;QAED,oFAAoF;QACpF,IAAI,uBAAuB,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,0BAA0B;QAC1B,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC3D,IAAI,kBAAkB,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU;YAC5D,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,qCAAqC;gBAC5C,UAAU,EAAE,sDAAsD;gBAClE,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC;QACL,CAAC;QAED,0BAA0B;QAC1B,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACtD,IAAI,oBAAoB,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU;YAChE,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,qCAAqC;gBAC5C,UAAU,EAAE,sDAAsD;gBAClE,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC;QACL,CAAC;QAED,0DAA0D;QAC1D,6DAA6D;QAC7D,kFAAkF;QAClF,MAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC1F,IAAI,qBAAqB,EAAE,CAAC;YAC1B,0EAA0E;YAC1E,MAAM,aAAa,GAAG,qBAAqB,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YACxI,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAE5C,IAAI,CAAC,aAAa,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvC,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE,oDAAoD;oBAC3D,UAAU,EAAE,kGAAkG;oBAC9G,QAAQ,EAAE,OAAO;iBAClB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * JavaScript Reference Error Detection Module
3
+ *
4
+ * Detects undeclared variable usage (ReferenceError at runtime):
5
+ * - Variables used before declaration
6
+ * - Typos in variable names
7
+ * - Missing imports
8
+ *
9
+ * Part of modularized JavaScript analyzer (150-300 LOC per module)
10
+ * Extracted from monolithic javascript-analyzer.ts (2,672 LOC)
11
+ *
12
+ * @module reference-errors
13
+ */
14
+ import { LineError } from '../../types';
15
+ /**
16
+ * Helper function type for checking if a line is inside a template literal
17
+ */
18
+ export type IsInsideTemplateLiteralFn = (code: string, lineNumber: number) => boolean;
19
+ /**
20
+ * Helper function type for removing string literals from a line
21
+ */
22
+ export type RemoveStringLiteralsFn = (line: string) => string;
23
+ /**
24
+ * Detect reference errors (undeclared variables)
25
+ *
26
+ * @param code - Full source code
27
+ * @param removeStringLiterals - Function to remove string literals from lines
28
+ * @param isInsideTemplateLiteral - Function to check if line is in template literal
29
+ * @returns Array of detected line errors
30
+ */
31
+ export declare function detectReferenceErrors(code: string, removeStringLiterals: RemoveStringLiteralsFn, isInsideTemplateLiteral: IsInsideTemplateLiteralFn): LineError[];
32
+ //# sourceMappingURL=reference-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-errors.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/quality-checks/reference-errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIxC;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;AAEtF;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;AAE9D;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,oBAAoB,EAAE,sBAAsB,EAC5C,uBAAuB,EAAE,yBAAyB,GACjD,SAAS,EAAE,CA6Bb"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ /**
3
+ * JavaScript Reference Error Detection Module
4
+ *
5
+ * Detects undeclared variable usage (ReferenceError at runtime):
6
+ * - Variables used before declaration
7
+ * - Typos in variable names
8
+ * - Missing imports
9
+ *
10
+ * Part of modularized JavaScript analyzer (150-300 LOC per module)
11
+ * Extracted from monolithic javascript-analyzer.ts (2,672 LOC)
12
+ *
13
+ * @module reference-errors
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.detectReferenceErrors = detectReferenceErrors;
17
+ const variable_tracker_1 = require("../../helpers/variable-tracker");
18
+ const jsx_helpers_1 = require("../../helpers/jsx-helpers");
19
+ /**
20
+ * Detect reference errors (undeclared variables)
21
+ *
22
+ * @param code - Full source code
23
+ * @param removeStringLiterals - Function to remove string literals from lines
24
+ * @param isInsideTemplateLiteral - Function to check if line is in template literal
25
+ * @returns Array of detected line errors
26
+ */
27
+ function detectReferenceErrors(code, removeStringLiterals, isInsideTemplateLiteral) {
28
+ const lines = code.split('\n');
29
+ const lineErrors = [];
30
+ // Get built-in globals and skip patterns
31
+ const builtIns = (0, variable_tracker_1.getBuiltIns)();
32
+ const skipPatterns = (0, variable_tracker_1.getSkipPatterns)();
33
+ // Find all variable declarations
34
+ const declaredVars = (0, variable_tracker_1.findDeclarations)(lines, code, isInsideTemplateLiteral);
35
+ // Find all variable usages
36
+ const usages = (0, variable_tracker_1.findUsages)(lines, code, builtIns, skipPatterns, removeStringLiterals, isInsideTemplateLiteral);
37
+ // Detect JSX in code to filter out JSX element false positives
38
+ const hasJSX = (0, jsx_helpers_1.detectJSX)(code);
39
+ // Check for undeclared variables and add to line errors
40
+ const undeclaredErrors = (0, variable_tracker_1.checkUndeclaredVariables)(usages, declaredVars, lines, hasJSX);
41
+ lineErrors.push(...undeclaredErrors);
42
+ return lineErrors;
43
+ }
44
+ //# sourceMappingURL=reference-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-errors.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/quality-checks/reference-errors.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;AAwBH,sDAiCC;AAtDD,qEAAsI;AACtI,2DAAsD;AAYtD;;;;;;;GAOG;AACH,SAAgB,qBAAqB,CACnC,IAAY,EACZ,oBAA4C,EAC5C,uBAAkD;IAElD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,UAAU,GAAgB,EAAE,CAAC;IAEnC,yCAAyC;IACzC,MAAM,QAAQ,GAAG,IAAA,8BAAW,GAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,IAAA,kCAAe,GAAE,CAAC;IAEvC,iCAAiC;IACjC,MAAM,YAAY,GAAG,IAAA,mCAAgB,EAAC,KAAK,EAAE,IAAI,EAAE,uBAAuB,CAAC,CAAC;IAE5E,2BAA2B;IAC3B,MAAM,MAAM,GAAG,IAAA,6BAAU,EACvB,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,oBAAoB,EACpB,uBAAuB,CACxB,CAAC;IAEF,+DAA+D;IAC/D,MAAM,MAAM,GAAG,IAAA,uBAAS,EAAC,IAAI,CAAC,CAAC;IAE/B,wDAAwD;IACxD,MAAM,gBAAgB,GAAG,IAAA,2CAAwB,EAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACvF,UAAU,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;IAErC,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * JavaScript Access Control Security Checks
3
+ * OWASP A01:2025 - Broken Access Control
4
+ *
5
+ * Detects missing authentication and client-side authorization vulnerabilities.
6
+ * Phase 7B Week 3 Day 11: Cross-language access control checks
7
+ */
8
+ import { SecurityVulnerability } from '../../types';
9
+ /**
10
+ * Checks for broken access control vulnerabilities in JavaScript code
11
+ *
12
+ * Covers:
13
+ * - Check #92: Missing authentication middleware on routes (HIGH)
14
+ * - Check #93: Client-side only authorization (HIGH)
15
+ * - Check #94: Insecure Direct Object Reference (IDOR) (HIGH) - NEW Dec 30, 2025
16
+ * - Check #95: Hardcoded role checks without server validation (MEDIUM) - NEW Dec 30, 2025
17
+ *
18
+ * @param lines - Array of code lines
19
+ * @returns Array of security vulnerabilities found
20
+ */
21
+ export declare function checkAccessControl(lines: string[]): SecurityVulnerability[];
22
+ //# sourceMappingURL=access-control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-control.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/security-checks/access-control.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGpD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EAAE,GACd,qBAAqB,EAAE,CAoNzB"}