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,53 @@
1
+ /**
2
+ * JavaScript Syntax Helper Functions Module
3
+ *
4
+ * Utility functions for syntax analysis:
5
+ * - Template literal detection
6
+ * - String literal removal
7
+ * - Error line finding
8
+ * - Syntax error suggestions
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 syntax-helpers
14
+ */
15
+ /**
16
+ * Check if a line number is inside a template literal
17
+ * Template literals can span multiple lines and contain ANY content (Python, SQL, etc.)
18
+ * We must NOT analyze JavaScript syntax inside template literal strings
19
+ *
20
+ * @param code - Full source code
21
+ * @param lineNumber - Line number to check (1-indexed)
22
+ * @returns true if line is inside a template literal, false otherwise
23
+ */
24
+ export declare function isInsideTemplateLiteral(code: string, lineNumber: number): boolean;
25
+ /**
26
+ * Remove string literals from a line for variable usage analysis
27
+ * Replaces content inside strings ('...', "...", `...`) with spaces
28
+ * This prevents detecting words inside strings as variable names
29
+ *
30
+ * @param line - Line of code to clean
31
+ * @returns Line with string content replaced by spaces
32
+ *
33
+ * @example
34
+ * removeStringLiterals("console.log('Test Code')") → "console.log(' ')"
35
+ * removeStringLiterals('path: "/api/analyze"') → 'path: " "'
36
+ */
37
+ export declare function removeStringLiterals(line: string): string;
38
+ /**
39
+ * Find the line number where an error occurred based on character position
40
+ *
41
+ * @param code - Full source code
42
+ * @param pos - Character position where error occurred
43
+ * @returns Line number (1-indexed) or null if position is invalid
44
+ */
45
+ export declare function findErrorLine(code: string, pos: number): number | null;
46
+ /**
47
+ * Provide helpful suggestions for common syntax errors
48
+ *
49
+ * @param errorMessage - Error message from parser
50
+ * @returns Human-readable suggestion for fixing the error
51
+ */
52
+ export declare function getSuggestionForSyntaxError(errorMessage: string): string;
53
+ //# sourceMappingURL=syntax-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syntax-helpers.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/syntax/syntax-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAoBjF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkDzD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAItE;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAiBxE"}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ /**
3
+ * JavaScript Syntax Helper Functions Module
4
+ *
5
+ * Utility functions for syntax analysis:
6
+ * - Template literal detection
7
+ * - String literal removal
8
+ * - Error line finding
9
+ * - Syntax error suggestions
10
+ *
11
+ * Part of modularized JavaScript analyzer (150-300 LOC per module)
12
+ * Extracted from monolithic javascript-analyzer.ts (2,672 LOC)
13
+ *
14
+ * @module syntax-helpers
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.isInsideTemplateLiteral = isInsideTemplateLiteral;
18
+ exports.removeStringLiterals = removeStringLiterals;
19
+ exports.findErrorLine = findErrorLine;
20
+ exports.getSuggestionForSyntaxError = getSuggestionForSyntaxError;
21
+ /**
22
+ * Check if a line number is inside a template literal
23
+ * Template literals can span multiple lines and contain ANY content (Python, SQL, etc.)
24
+ * We must NOT analyze JavaScript syntax inside template literal strings
25
+ *
26
+ * @param code - Full source code
27
+ * @param lineNumber - Line number to check (1-indexed)
28
+ * @returns true if line is inside a template literal, false otherwise
29
+ */
30
+ function isInsideTemplateLiteral(code, lineNumber) {
31
+ const lines = code.split('\n');
32
+ let insideTemplateLiteral = false;
33
+ for (let i = 0; i < lineNumber; i++) {
34
+ const line = lines[i];
35
+ const backtickCount = (line.match(/`/g) || []).length;
36
+ // Toggle state for each backtick
37
+ for (let j = 0; j < backtickCount; j++) {
38
+ insideTemplateLiteral = !insideTemplateLiteral;
39
+ }
40
+ // If this is the target line, check if we're inside and it has no backticks
41
+ if (i === lineNumber - 1) {
42
+ return insideTemplateLiteral && backtickCount === 0;
43
+ }
44
+ }
45
+ return false;
46
+ }
47
+ /**
48
+ * Remove string literals from a line for variable usage analysis
49
+ * Replaces content inside strings ('...', "...", `...`) with spaces
50
+ * This prevents detecting words inside strings as variable names
51
+ *
52
+ * @param line - Line of code to clean
53
+ * @returns Line with string content replaced by spaces
54
+ *
55
+ * @example
56
+ * removeStringLiterals("console.log('Test Code')") → "console.log(' ')"
57
+ * removeStringLiterals('path: "/api/analyze"') → 'path: " "'
58
+ */
59
+ function removeStringLiterals(line) {
60
+ let result = '';
61
+ let inString = false;
62
+ let stringChar = '';
63
+ let escaped = false;
64
+ for (let i = 0; i < line.length; i++) {
65
+ const char = line[i];
66
+ // Handle escape sequences
67
+ if (escaped) {
68
+ result += inString ? ' ' : char;
69
+ escaped = false;
70
+ continue;
71
+ }
72
+ if (char === '\\') {
73
+ escaped = true;
74
+ result += inString ? ' ' : char;
75
+ continue;
76
+ }
77
+ // Handle string delimiters
78
+ if (char === '"' || char === "'" || char === '`') {
79
+ if (!inString) {
80
+ // Start of string
81
+ inString = true;
82
+ stringChar = char;
83
+ result += char; // Keep the quote
84
+ }
85
+ else if (char === stringChar) {
86
+ // End of string
87
+ inString = false;
88
+ stringChar = '';
89
+ result += char; // Keep the quote
90
+ }
91
+ else {
92
+ // Different quote inside string
93
+ result += ' '; // Replace with space
94
+ }
95
+ continue;
96
+ }
97
+ // Inside string - replace content with spaces
98
+ if (inString) {
99
+ result += ' ';
100
+ }
101
+ else {
102
+ result += char;
103
+ }
104
+ }
105
+ return result;
106
+ }
107
+ /**
108
+ * Find the line number where an error occurred based on character position
109
+ *
110
+ * @param code - Full source code
111
+ * @param pos - Character position where error occurred
112
+ * @returns Line number (1-indexed) or null if position is invalid
113
+ */
114
+ function findErrorLine(code, pos) {
115
+ if (!pos)
116
+ return null;
117
+ const lines = code.substring(0, pos).split('\n');
118
+ return lines.length;
119
+ }
120
+ /**
121
+ * Provide helpful suggestions for common syntax errors
122
+ *
123
+ * @param errorMessage - Error message from parser
124
+ * @returns Human-readable suggestion for fixing the error
125
+ */
126
+ function getSuggestionForSyntaxError(errorMessage) {
127
+ if (errorMessage.includes('Unexpected token')) {
128
+ if (errorMessage.includes('}')) {
129
+ return 'Check if there is a missing closing parenthesis or brace before this line';
130
+ }
131
+ if (errorMessage.includes(')')) {
132
+ return 'Add the missing closing parenthesis ")"';
133
+ }
134
+ return 'Check the code syntax and fix the identified errors';
135
+ }
136
+ if (errorMessage.includes('Unterminated string')) {
137
+ return 'Close the string with matching quotes';
138
+ }
139
+ if (errorMessage.includes('Missing comma')) {
140
+ return 'Add a comma between object properties';
141
+ }
142
+ return 'Fix the identified syntax error';
143
+ }
144
+ //# sourceMappingURL=syntax-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syntax-helpers.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/syntax/syntax-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * JavaScript/TypeScript Syntax Detection Module
3
+ *
4
+ * TypeScript-specific syntax validation:
5
+ * - TypeScript code detection
6
+ * - Interface/type validation
7
+ * - Property definition checking
8
+ * - Type annotation validation
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 typescript-syntax
14
+ */
15
+ /**
16
+ * Detect if code contains TypeScript-specific syntax
17
+ *
18
+ * @param code - Full source code
19
+ * @returns true if TypeScript syntax is detected
20
+ */
21
+ export declare function isTypeScriptCode(code: string): boolean;
22
+ /**
23
+ * Check if a line should have a semicolon
24
+ *
25
+ * @param line - Line of code to check
26
+ * @returns true if line likely needs a semicolon
27
+ */
28
+ export declare function shouldHaveSemicolon(line: string): boolean;
29
+ /**
30
+ * Check if a line has an unclosed string
31
+ *
32
+ * @param line - Line of code to check
33
+ * @returns true if line has unclosed string
34
+ */
35
+ export declare function hasUnclosedString(line: string): boolean;
36
+ /**
37
+ * Check if a property definition is valid
38
+ *
39
+ * @param line - Line of code to check
40
+ * @returns true if property definition is valid
41
+ */
42
+ export declare function isValidPropertyDefinition(line: string): boolean;
43
+ /**
44
+ * Check if a property definition is incomplete
45
+ *
46
+ * @param line - Line of code to check
47
+ * @returns true if property is incomplete
48
+ */
49
+ export declare function isIncompleteProperty(line: string): boolean;
50
+ /**
51
+ * Check if a line has a TypeScript type typo
52
+ *
53
+ * @param line - Line of code to check
54
+ * @returns true if type typo is detected
55
+ */
56
+ export declare function hasTypeScriptTypeError(line: string): boolean;
57
+ /**
58
+ * Suggest correction for TypeScript type typo
59
+ *
60
+ * @param line - Line with type typo
61
+ * @returns Suggested correction
62
+ */
63
+ export declare function suggestTypeCorrection(line: string): string;
64
+ /**
65
+ * Check if a line is missing a comma (in object/array literals)
66
+ *
67
+ * @param currentLine - Current line of code
68
+ * @param nextLine - Next line of code
69
+ * @returns true if comma is likely missing
70
+ */
71
+ export declare function isMissingComma(currentLine: string, nextLine: string): boolean;
72
+ //# sourceMappingURL=typescript-syntax.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-syntax.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/syntax/typescript-syntax.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAiBtD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAgCzD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CASvD;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA6B/D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAiC1D;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAmF5D;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA8C1D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAe7E"}
@@ -0,0 +1,314 @@
1
+ "use strict";
2
+ /**
3
+ * JavaScript/TypeScript Syntax Detection Module
4
+ *
5
+ * TypeScript-specific syntax validation:
6
+ * - TypeScript code detection
7
+ * - Interface/type validation
8
+ * - Property definition checking
9
+ * - Type annotation validation
10
+ *
11
+ * Part of modularized JavaScript analyzer (150-300 LOC per module)
12
+ * Extracted from monolithic javascript-analyzer.ts (2,672 LOC)
13
+ *
14
+ * @module typescript-syntax
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.isTypeScriptCode = isTypeScriptCode;
18
+ exports.shouldHaveSemicolon = shouldHaveSemicolon;
19
+ exports.hasUnclosedString = hasUnclosedString;
20
+ exports.isValidPropertyDefinition = isValidPropertyDefinition;
21
+ exports.isIncompleteProperty = isIncompleteProperty;
22
+ exports.hasTypeScriptTypeError = hasTypeScriptTypeError;
23
+ exports.suggestTypeCorrection = suggestTypeCorrection;
24
+ exports.isMissingComma = isMissingComma;
25
+ const code_cleaner_1 = require("../../../utils/code-cleaner");
26
+ /**
27
+ * Detect if code contains TypeScript-specific syntax
28
+ *
29
+ * @param code - Full source code
30
+ * @returns true if TypeScript syntax is detected
31
+ */
32
+ function isTypeScriptCode(code) {
33
+ const typeScriptPatterns = [
34
+ /interface\s+\w+/, // Interface declarations
35
+ /type\s+\w+\s*=/, // type aliases
36
+ /:\s*\w+(\[\])?/, // type annotations
37
+ /export\s+interface/, // exported interfaces
38
+ /export\s+type/, // exported types
39
+ /<.*>/, // generic types
40
+ /as\s+\w+/, // type assertions
41
+ /enum\s+\w+/, // enum declarations
42
+ /namespace\s+\w+/, // namespace declarations
43
+ /declare\s+/, // declare statements
44
+ /readonly\s+/, // readonly modifier
45
+ /public\s+|private\s+|protected\s+/, // access modifiers
46
+ ];
47
+ return typeScriptPatterns.some(pattern => pattern.test(code));
48
+ }
49
+ /**
50
+ * Check if a line should have a semicolon
51
+ *
52
+ * @param line - Line of code to check
53
+ * @returns true if line likely needs a semicolon
54
+ */
55
+ function shouldHaveSemicolon(line) {
56
+ const trimmed = line.trim();
57
+ // Strip comments before checking line endings
58
+ const commentIndex = trimmed.indexOf('//');
59
+ const codeOnly = commentIndex > 0
60
+ ? trimmed.substring(0, commentIndex).trimEnd()
61
+ : trimmed;
62
+ // Skip if already has semicolon, or ends with special characters
63
+ if (codeOnly.endsWith(';') || codeOnly.endsWith('{') || codeOnly.endsWith('}') ||
64
+ codeOnly.endsWith(',') || codeOnly.endsWith('(') || codeOnly.endsWith(')')) {
65
+ return false;
66
+ }
67
+ // Skip Interface/type property definitions
68
+ if (codeOnly.includes(':') && !codeOnly.includes('=') && !codeOnly.includes('(')) {
69
+ return false;
70
+ }
71
+ // Skip control structures, declarations, etc.
72
+ if (codeOnly.startsWith('if') || codeOnly.startsWith('for') || codeOnly.startsWith('while') ||
73
+ codeOnly.startsWith('Interface') || codeOnly.startsWith('type') || codeOnly.startsWith('export') ||
74
+ codeOnly.startsWith('import') || codeOnly.startsWith('class') || codeOnly.startsWith('function') ||
75
+ codeOnly.startsWith('const') || codeOnly.startsWith('let') || codeOnly.startsWith('var')) {
76
+ return false;
77
+ }
78
+ // Lines that likely need semicolons
79
+ return codeOnly.includes('=') || codeOnly.includes('return') || codeOnly.includes('throw') ||
80
+ codeOnly.includes('break') || codeOnly.includes('continue') ||
81
+ /\w+\(.*\)$/.test(codeOnly); // function calls
82
+ }
83
+ /**
84
+ * Check if a line has an unclosed string
85
+ *
86
+ * @param line - Line of code to check
87
+ * @returns true if line has unclosed string
88
+ */
89
+ function hasUnclosedString(line) {
90
+ // Remove comments before checking quotes
91
+ const lineWithoutComments = code_cleaner_1.CodeCleaner.removeLineComments(line, 'javascript');
92
+ const singleQuotes = (lineWithoutComments.match(/'/g) || []).length;
93
+ const doubleQuotes = (lineWithoutComments.match(/"/g) || []).length;
94
+ // Do NOT check backticks - template literals span multiple lines
95
+ return (singleQuotes % 2 !== 0) || (doubleQuotes % 2 !== 0);
96
+ }
97
+ /**
98
+ * Check if a property definition is valid
99
+ *
100
+ * @param line - Line of code to check
101
+ * @returns true if property definition is valid
102
+ */
103
+ function isValidPropertyDefinition(line) {
104
+ const trimmed = line.trim();
105
+ if (!trimmed.includes(':')) {
106
+ return true; // Not a property line
107
+ }
108
+ // Skip Interface declarations and other non-property lines
109
+ if (trimmed.startsWith('Interface') || trimmed.startsWith('export') ||
110
+ trimmed.includes('{') || trimmed.includes('}')) {
111
+ return true;
112
+ }
113
+ // Skip valid TypeScript patterns
114
+ if (trimmed.includes('[') && trimmed.includes(']')) {
115
+ return true; // Index signatures
116
+ }
117
+ if (trimmed.includes('(') && trimmed.includes(')')) {
118
+ return true; // Function signatures
119
+ }
120
+ if (trimmed.startsWith('//')) {
121
+ return false; // Commented property is invalid
122
+ }
123
+ // Basic pattern: word : something
124
+ const basicPattern = /^\s*(readonly\s+)?\w+\s*\??\s*:\s*.+$/;
125
+ return basicPattern.test(trimmed);
126
+ }
127
+ /**
128
+ * Check if a property definition is incomplete
129
+ *
130
+ * @param line - Line of code to check
131
+ * @returns true if property is incomplete
132
+ */
133
+ function isIncompleteProperty(line) {
134
+ const trimmed = line.trim();
135
+ // Check for commented properties
136
+ if (trimmed.startsWith('//') && trimmed.includes(':')) {
137
+ return true;
138
+ }
139
+ // Check for incomplete property syntax
140
+ if (trimmed.includes(':')) {
141
+ // Skip Interface/export lines
142
+ if (trimmed.startsWith('Interface') || trimmed.startsWith('export') ||
143
+ trimmed.includes('{') || trimmed.includes('}')) {
144
+ return false;
145
+ }
146
+ // Skip valid TypeScript patterns
147
+ if (trimmed.includes('[') && trimmed.includes(']')) {
148
+ return false; // Index signatures
149
+ }
150
+ if (trimmed.includes('(') && trimmed.includes(')')) {
151
+ return false; // Function signatures
152
+ }
153
+ // Check if it's missing type or has wrong syntax
154
+ const hasValidType = /:\s*.+/.test(trimmed);
155
+ if (!hasValidType) {
156
+ return true;
157
+ }
158
+ }
159
+ return false;
160
+ }
161
+ /**
162
+ * Check if a line has a TypeScript type typo
163
+ *
164
+ * @param line - Line of code to check
165
+ * @returns true if type typo is detected
166
+ */
167
+ function hasTypeScriptTypeError(line) {
168
+ const trimmed = line.trim();
169
+ // Skip non-property lines
170
+ if (!trimmed.includes(':') || trimmed.startsWith('Interface') || trimmed.startsWith('export') ||
171
+ trimmed.includes('{') || trimmed.includes('}')) {
172
+ return false;
173
+ }
174
+ // Skip valid TypeScript patterns
175
+ if (trimmed.includes('[') && trimmed.includes(']')) {
176
+ return false;
177
+ }
178
+ if (trimmed.includes('(') && trimmed.includes(')') && !trimmed.startsWith('function')) {
179
+ return false;
180
+ }
181
+ // Extract the type part after the colon
182
+ let colonIndex = trimmed.indexOf(':');
183
+ if (colonIndex === -1)
184
+ return false;
185
+ // For function declarations, find colon AFTER closing paren
186
+ if (trimmed.startsWith('function') && trimmed.includes(')')) {
187
+ const closingParenIndex = trimmed.lastIndexOf(')');
188
+ const colonAfterParen = trimmed.indexOf(':', closingParenIndex);
189
+ if (colonAfterParen !== -1) {
190
+ colonIndex = colonAfterParen;
191
+ }
192
+ }
193
+ const typePart = trimmed.substring(colonIndex + 1).trim();
194
+ const typeWithoutSemicolon = typePart
195
+ .split(';')[0]
196
+ .split('//')[0]
197
+ .split('/*')[0]
198
+ .split('{')[0]
199
+ .trim();
200
+ // Common TypeScript type typos
201
+ const commonTypos = {
202
+ 'strng': 'string',
203
+ 'strig': 'string',
204
+ 'stirng': 'string',
205
+ 'numbr': 'number',
206
+ 'numebr': 'number',
207
+ 'bolean': 'boolean',
208
+ 'boolea': 'boolean',
209
+ 'boolen': 'boolean',
210
+ 'undefind': 'undefined',
211
+ 'nul': 'null',
212
+ 'voic': 'void',
213
+ 'aray': 'array',
214
+ 'dat': 'Date',
215
+ 'Dat': 'Date',
216
+ 'objec': 'object'
217
+ };
218
+ // Check if type matches any known typos
219
+ for (const typo in commonTypos) {
220
+ if (typeWithoutSemicolon === typo) {
221
+ return true;
222
+ }
223
+ }
224
+ // Check for potential typos in short type names
225
+ if (typeWithoutSemicolon.length > 2 && typeWithoutSemicolon.length < 8) {
226
+ const validPrimitiveTypes = ['string', 'number', 'boolean', 'undefined', 'null', 'void', 'any', 'unknown', 'never'];
227
+ const validComplexTypes = ['Date', 'Array', 'Object', 'Function', 'Promise'];
228
+ if (!validPrimitiveTypes.includes(typeWithoutSemicolon) &&
229
+ !validComplexTypes.includes(typeWithoutSemicolon) &&
230
+ !/^[A-Z]/.test(typeWithoutSemicolon) &&
231
+ !typeWithoutSemicolon.includes('[]') &&
232
+ !typeWithoutSemicolon.includes('|') &&
233
+ !typeWithoutSemicolon.includes('&') &&
234
+ !typeWithoutSemicolon.includes('<') &&
235
+ !/^\w+$/.test(typeWithoutSemicolon)) {
236
+ return true;
237
+ }
238
+ }
239
+ return false;
240
+ }
241
+ /**
242
+ * Suggest correction for TypeScript type typo
243
+ *
244
+ * @param line - Line with type typo
245
+ * @returns Suggested correction
246
+ */
247
+ function suggestTypeCorrection(line) {
248
+ const trimmed = line.trim();
249
+ let colonIndex = trimmed.indexOf(':');
250
+ // For function declarations, find colon AFTER closing paren
251
+ if (trimmed.startsWith('function') && trimmed.includes(')')) {
252
+ const closingParenIndex = trimmed.lastIndexOf(')');
253
+ const colonAfterParen = trimmed.indexOf(':', closingParenIndex);
254
+ if (colonAfterParen !== -1) {
255
+ colonIndex = colonAfterParen;
256
+ }
257
+ }
258
+ const typePart = trimmed.substring(colonIndex + 1).trim();
259
+ const typeWithoutSemicolon = typePart
260
+ .split(';')[0]
261
+ .split('//')[0]
262
+ .split('/*')[0]
263
+ .split('{')[0]
264
+ .trim();
265
+ const commonTypos = {
266
+ 'strng': 'string',
267
+ 'strig': 'string',
268
+ 'stirng': 'string',
269
+ 'numbr': 'number',
270
+ 'numebr': 'number',
271
+ 'bolean': 'boolean',
272
+ 'boolea': 'boolean',
273
+ 'boolen': 'boolean',
274
+ 'undefind': 'undefined',
275
+ 'nul': 'null',
276
+ 'voic': 'void',
277
+ 'aray': 'array',
278
+ 'dat': 'Date',
279
+ 'Dat': 'Date',
280
+ 'objec': 'object'
281
+ };
282
+ if (commonTypos[typeWithoutSemicolon]) {
283
+ const correctedType = commonTypos[typeWithoutSemicolon];
284
+ const correctedLine = trimmed.replace(typeWithoutSemicolon, correctedType);
285
+ return `Possible typo. Suggestion: ${correctedLine}`;
286
+ }
287
+ return `Check type "${typeWithoutSemicolon}". Common types: string, number, boolean, Date`;
288
+ }
289
+ /**
290
+ * Check if a line is missing a comma (in object/array literals)
291
+ *
292
+ * @param currentLine - Current line of code
293
+ * @param nextLine - Next line of code
294
+ * @returns true if comma is likely missing
295
+ */
296
+ function isMissingComma(currentLine, nextLine) {
297
+ // Skip empty lines, comments
298
+ if (!currentLine || !nextLine)
299
+ return false;
300
+ if (currentLine.startsWith('//') || nextLine.startsWith('//'))
301
+ return false;
302
+ if (currentLine.startsWith('/*') || nextLine.startsWith('/*'))
303
+ return false;
304
+ // Skip if current line already ends with special characters
305
+ const lastChar = currentLine.trimEnd().slice(-1);
306
+ if ([',', ';', '{', '}', '[', ']'].includes(lastChar))
307
+ return false;
308
+ // Skip if next line is a closing character
309
+ if (['}', ']', ')'].includes(nextLine[0]))
310
+ return false;
311
+ // Check if current line looks like an object property
312
+ return currentLine.includes(':');
313
+ }
314
+ //# sourceMappingURL=typescript-syntax.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-syntax.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/javascript/syntax/typescript-syntax.ts"],"names":[],"mappings":"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"}