@opencodereview/core 1.9.1

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 (453) hide show
  1. package/dist/ai/anthropic-provider.d.ts +41 -0
  2. package/dist/ai/anthropic-provider.d.ts.map +1 -0
  3. package/dist/ai/anthropic-provider.js +139 -0
  4. package/dist/ai/anthropic-provider.js.map +1 -0
  5. package/dist/ai/index.d.ts +39 -0
  6. package/dist/ai/index.d.ts.map +1 -0
  7. package/dist/ai/index.js +41 -0
  8. package/dist/ai/index.js.map +1 -0
  9. package/dist/ai/ollama-provider.d.ts +46 -0
  10. package/dist/ai/ollama-provider.d.ts.map +1 -0
  11. package/dist/ai/ollama-provider.js +149 -0
  12. package/dist/ai/ollama-provider.js.map +1 -0
  13. package/dist/ai/openai-provider.d.ts +44 -0
  14. package/dist/ai/openai-provider.d.ts.map +1 -0
  15. package/dist/ai/openai-provider.js +137 -0
  16. package/dist/ai/openai-provider.js.map +1 -0
  17. package/dist/ai/orchestrator.d.ts +60 -0
  18. package/dist/ai/orchestrator.d.ts.map +1 -0
  19. package/dist/ai/orchestrator.js +188 -0
  20. package/dist/ai/orchestrator.js.map +1 -0
  21. package/dist/ai/prompts.d.ts +27 -0
  22. package/dist/ai/prompts.d.ts.map +1 -0
  23. package/dist/ai/prompts.js +112 -0
  24. package/dist/ai/prompts.js.map +1 -0
  25. package/dist/ai/types.d.ts +75 -0
  26. package/dist/ai/types.d.ts.map +1 -0
  27. package/dist/ai/types.js +10 -0
  28. package/dist/ai/types.js.map +1 -0
  29. package/dist/ai/v4/embedding/index.d.ts +10 -0
  30. package/dist/ai/v4/embedding/index.d.ts.map +1 -0
  31. package/dist/ai/v4/embedding/index.js +10 -0
  32. package/dist/ai/v4/embedding/index.js.map +1 -0
  33. package/dist/ai/v4/embedding/local.d.ts +68 -0
  34. package/dist/ai/v4/embedding/local.d.ts.map +1 -0
  35. package/dist/ai/v4/embedding/local.js +167 -0
  36. package/dist/ai/v4/embedding/local.js.map +1 -0
  37. package/dist/ai/v4/embedding/ollama.d.ts +58 -0
  38. package/dist/ai/v4/embedding/ollama.d.ts.map +1 -0
  39. package/dist/ai/v4/embedding/ollama.js +101 -0
  40. package/dist/ai/v4/embedding/ollama.js.map +1 -0
  41. package/dist/ai/v4/embedding/openai.d.ts +36 -0
  42. package/dist/ai/v4/embedding/openai.d.ts.map +1 -0
  43. package/dist/ai/v4/embedding/openai.js +76 -0
  44. package/dist/ai/v4/embedding/openai.js.map +1 -0
  45. package/dist/ai/v4/embedding/similarity.d.ts +36 -0
  46. package/dist/ai/v4/embedding/similarity.d.ts.map +1 -0
  47. package/dist/ai/v4/embedding/similarity.js +60 -0
  48. package/dist/ai/v4/embedding/similarity.js.map +1 -0
  49. package/dist/ai/v4/index.d.ts +51 -0
  50. package/dist/ai/v4/index.d.ts.map +1 -0
  51. package/dist/ai/v4/index.js +54 -0
  52. package/dist/ai/v4/index.js.map +1 -0
  53. package/dist/ai/v4/llm/anthropic.d.ts +38 -0
  54. package/dist/ai/v4/llm/anthropic.d.ts.map +1 -0
  55. package/dist/ai/v4/llm/anthropic.js +86 -0
  56. package/dist/ai/v4/llm/anthropic.js.map +1 -0
  57. package/dist/ai/v4/llm/index.d.ts +9 -0
  58. package/dist/ai/v4/llm/index.d.ts.map +1 -0
  59. package/dist/ai/v4/llm/index.js +9 -0
  60. package/dist/ai/v4/llm/index.js.map +1 -0
  61. package/dist/ai/v4/llm/ollama.d.ts +39 -0
  62. package/dist/ai/v4/llm/ollama.d.ts.map +1 -0
  63. package/dist/ai/v4/llm/ollama.js +95 -0
  64. package/dist/ai/v4/llm/ollama.js.map +1 -0
  65. package/dist/ai/v4/llm/openai.d.ts +38 -0
  66. package/dist/ai/v4/llm/openai.d.ts.map +1 -0
  67. package/dist/ai/v4/llm/openai.js +88 -0
  68. package/dist/ai/v4/llm/openai.js.map +1 -0
  69. package/dist/ai/v4/patterns/defect-patterns.d.ts +57 -0
  70. package/dist/ai/v4/patterns/defect-patterns.d.ts.map +1 -0
  71. package/dist/ai/v4/patterns/defect-patterns.js +331 -0
  72. package/dist/ai/v4/patterns/defect-patterns.js.map +1 -0
  73. package/dist/ai/v4/patterns/index.d.ts +8 -0
  74. package/dist/ai/v4/patterns/index.d.ts.map +1 -0
  75. package/dist/ai/v4/patterns/index.js +7 -0
  76. package/dist/ai/v4/patterns/index.js.map +1 -0
  77. package/dist/ai/v4/pipeline.d.ts +74 -0
  78. package/dist/ai/v4/pipeline.d.ts.map +1 -0
  79. package/dist/ai/v4/pipeline.js +381 -0
  80. package/dist/ai/v4/pipeline.js.map +1 -0
  81. package/dist/ai/v4/sla.d.ts +62 -0
  82. package/dist/ai/v4/sla.d.ts.map +1 -0
  83. package/dist/ai/v4/sla.js +136 -0
  84. package/dist/ai/v4/sla.js.map +1 -0
  85. package/dist/ai/v4/types.d.ts +117 -0
  86. package/dist/ai/v4/types.d.ts.map +1 -0
  87. package/dist/ai/v4/types.js +16 -0
  88. package/dist/ai/v4/types.js.map +1 -0
  89. package/dist/ai-healer/prompt-builder.d.ts +33 -0
  90. package/dist/ai-healer/prompt-builder.d.ts.map +1 -0
  91. package/dist/ai-healer/prompt-builder.js +89 -0
  92. package/dist/ai-healer/prompt-builder.js.map +1 -0
  93. package/dist/config/defaults.d.ts +14 -0
  94. package/dist/config/defaults.d.ts.map +1 -0
  95. package/dist/config/defaults.js +57 -0
  96. package/dist/config/defaults.js.map +1 -0
  97. package/dist/config/index.d.ts +8 -0
  98. package/dist/config/index.d.ts.map +1 -0
  99. package/dist/config/index.js +6 -0
  100. package/dist/config/index.js.map +1 -0
  101. package/dist/config/loader.d.ts +33 -0
  102. package/dist/config/loader.d.ts.map +1 -0
  103. package/dist/config/loader.js +245 -0
  104. package/dist/config/loader.js.map +1 -0
  105. package/dist/config/types.d.ts +58 -0
  106. package/dist/config/types.d.ts.map +1 -0
  107. package/dist/config/types.js +7 -0
  108. package/dist/config/types.js.map +1 -0
  109. package/dist/config/v4-config.d.ts +77 -0
  110. package/dist/config/v4-config.d.ts.map +1 -0
  111. package/dist/config/v4-config.js +336 -0
  112. package/dist/config/v4-config.js.map +1 -0
  113. package/dist/detectors/ai-detector.d.ts +38 -0
  114. package/dist/detectors/ai-detector.d.ts.map +1 -0
  115. package/dist/detectors/ai-detector.js +62 -0
  116. package/dist/detectors/ai-detector.js.map +1 -0
  117. package/dist/detectors/context-break.d.ts +57 -0
  118. package/dist/detectors/context-break.d.ts.map +1 -0
  119. package/dist/detectors/context-break.js +199 -0
  120. package/dist/detectors/context-break.js.map +1 -0
  121. package/dist/detectors/deep-hallucination.d.ts +42 -0
  122. package/dist/detectors/deep-hallucination.d.ts.map +1 -0
  123. package/dist/detectors/deep-hallucination.js +297 -0
  124. package/dist/detectors/deep-hallucination.js.map +1 -0
  125. package/dist/detectors/duplication.d.ts +61 -0
  126. package/dist/detectors/duplication.d.ts.map +1 -0
  127. package/dist/detectors/duplication.js +204 -0
  128. package/dist/detectors/duplication.js.map +1 -0
  129. package/dist/detectors/hallucination.d.ts +80 -0
  130. package/dist/detectors/hallucination.d.ts.map +1 -0
  131. package/dist/detectors/hallucination.js +350 -0
  132. package/dist/detectors/hallucination.js.map +1 -0
  133. package/dist/detectors/index.d.ts +35 -0
  134. package/dist/detectors/index.d.ts.map +1 -0
  135. package/dist/detectors/index.js +33 -0
  136. package/dist/detectors/index.js.map +1 -0
  137. package/dist/detectors/logic-gap.d.ts +58 -0
  138. package/dist/detectors/logic-gap.d.ts.map +1 -0
  139. package/dist/detectors/logic-gap.js +284 -0
  140. package/dist/detectors/logic-gap.js.map +1 -0
  141. package/dist/detectors/over-engineering.d.ts +44 -0
  142. package/dist/detectors/over-engineering.d.ts.map +1 -0
  143. package/dist/detectors/over-engineering.js +257 -0
  144. package/dist/detectors/over-engineering.js.map +1 -0
  145. package/dist/detectors/security-pattern.d.ts +43 -0
  146. package/dist/detectors/security-pattern.d.ts.map +1 -0
  147. package/dist/detectors/security-pattern.js +235 -0
  148. package/dist/detectors/security-pattern.js.map +1 -0
  149. package/dist/detectors/stale-api.d.ts +44 -0
  150. package/dist/detectors/stale-api.d.ts.map +1 -0
  151. package/dist/detectors/stale-api.js +160 -0
  152. package/dist/detectors/stale-api.js.map +1 -0
  153. package/dist/detectors/type-safety.d.ts +41 -0
  154. package/dist/detectors/type-safety.d.ts.map +1 -0
  155. package/dist/detectors/type-safety.js +306 -0
  156. package/dist/detectors/type-safety.js.map +1 -0
  157. package/dist/detectors/v4/context-coherence.d.ts +67 -0
  158. package/dist/detectors/v4/context-coherence.d.ts.map +1 -0
  159. package/dist/detectors/v4/context-coherence.js +319 -0
  160. package/dist/detectors/v4/context-coherence.js.map +1 -0
  161. package/dist/detectors/v4/hallucinated-import.d.ts +52 -0
  162. package/dist/detectors/v4/hallucinated-import.d.ts.map +1 -0
  163. package/dist/detectors/v4/hallucinated-import.js +206 -0
  164. package/dist/detectors/v4/hallucinated-import.js.map +1 -0
  165. package/dist/detectors/v4/index.d.ts +28 -0
  166. package/dist/detectors/v4/index.d.ts.map +1 -0
  167. package/dist/detectors/v4/index.js +40 -0
  168. package/dist/detectors/v4/index.js.map +1 -0
  169. package/dist/detectors/v4/over-engineering.d.ts +69 -0
  170. package/dist/detectors/v4/over-engineering.d.ts.map +1 -0
  171. package/dist/detectors/v4/over-engineering.js +234 -0
  172. package/dist/detectors/v4/over-engineering.js.map +1 -0
  173. package/dist/detectors/v4/security-pattern.d.ts +46 -0
  174. package/dist/detectors/v4/security-pattern.d.ts.map +1 -0
  175. package/dist/detectors/v4/security-pattern.js +233 -0
  176. package/dist/detectors/v4/security-pattern.js.map +1 -0
  177. package/dist/detectors/v4/stale-api.d.ts +59 -0
  178. package/dist/detectors/v4/stale-api.d.ts.map +1 -0
  179. package/dist/detectors/v4/stale-api.js +470 -0
  180. package/dist/detectors/v4/stale-api.js.map +1 -0
  181. package/dist/detectors/v4/types.d.ts +74 -0
  182. package/dist/detectors/v4/types.d.ts.map +1 -0
  183. package/dist/detectors/v4/types.js +10 -0
  184. package/dist/detectors/v4/types.js.map +1 -0
  185. package/dist/diff/filter.d.ts +35 -0
  186. package/dist/diff/filter.d.ts.map +1 -0
  187. package/dist/diff/filter.js +65 -0
  188. package/dist/diff/filter.js.map +1 -0
  189. package/dist/diff/index.d.ts +9 -0
  190. package/dist/diff/index.d.ts.map +1 -0
  191. package/dist/diff/index.js +8 -0
  192. package/dist/diff/index.js.map +1 -0
  193. package/dist/diff/parser.d.ts +61 -0
  194. package/dist/diff/parser.d.ts.map +1 -0
  195. package/dist/diff/parser.js +203 -0
  196. package/dist/diff/parser.js.map +1 -0
  197. package/dist/i18n/en.d.ts +18 -0
  198. package/dist/i18n/en.d.ts.map +1 -0
  199. package/dist/i18n/en.js +83 -0
  200. package/dist/i18n/en.js.map +1 -0
  201. package/dist/i18n/index.d.ts +13 -0
  202. package/dist/i18n/index.d.ts.map +1 -0
  203. package/dist/i18n/index.js +14 -0
  204. package/dist/i18n/index.js.map +1 -0
  205. package/dist/i18n/provider.d.ts +54 -0
  206. package/dist/i18n/provider.d.ts.map +1 -0
  207. package/dist/i18n/provider.js +88 -0
  208. package/dist/i18n/provider.js.map +1 -0
  209. package/dist/i18n/types.d.ts +37 -0
  210. package/dist/i18n/types.d.ts.map +1 -0
  211. package/dist/i18n/types.js +10 -0
  212. package/dist/i18n/types.js.map +1 -0
  213. package/dist/i18n/zh.d.ts +14 -0
  214. package/dist/i18n/zh.d.ts.map +1 -0
  215. package/dist/i18n/zh.js +83 -0
  216. package/dist/i18n/zh.js.map +1 -0
  217. package/dist/index.d.ts +113 -0
  218. package/dist/index.d.ts.map +1 -0
  219. package/dist/index.js +106 -0
  220. package/dist/index.js.map +1 -0
  221. package/dist/ir/index.d.ts +10 -0
  222. package/dist/ir/index.d.ts.map +1 -0
  223. package/dist/ir/index.js +9 -0
  224. package/dist/ir/index.js.map +1 -0
  225. package/dist/ir/types.d.ts +126 -0
  226. package/dist/ir/types.d.ts.map +1 -0
  227. package/dist/ir/types.js +33 -0
  228. package/dist/ir/types.js.map +1 -0
  229. package/dist/languages/go/index.d.ts +7 -0
  230. package/dist/languages/go/index.d.ts.map +1 -0
  231. package/dist/languages/go/index.js +7 -0
  232. package/dist/languages/go/index.js.map +1 -0
  233. package/dist/languages/go/parser.d.ts +89 -0
  234. package/dist/languages/go/parser.d.ts.map +1 -0
  235. package/dist/languages/go/parser.js +509 -0
  236. package/dist/languages/go/parser.js.map +1 -0
  237. package/dist/languages/index.d.ts +13 -0
  238. package/dist/languages/index.d.ts.map +1 -0
  239. package/dist/languages/index.js +14 -0
  240. package/dist/languages/index.js.map +1 -0
  241. package/dist/languages/java/index.d.ts +7 -0
  242. package/dist/languages/java/index.d.ts.map +1 -0
  243. package/dist/languages/java/index.js +7 -0
  244. package/dist/languages/java/index.js.map +1 -0
  245. package/dist/languages/java/parser.d.ts +82 -0
  246. package/dist/languages/java/parser.d.ts.map +1 -0
  247. package/dist/languages/java/parser.js +492 -0
  248. package/dist/languages/java/parser.js.map +1 -0
  249. package/dist/languages/kotlin/index.d.ts +7 -0
  250. package/dist/languages/kotlin/index.d.ts.map +1 -0
  251. package/dist/languages/kotlin/index.js +7 -0
  252. package/dist/languages/kotlin/index.js.map +1 -0
  253. package/dist/languages/kotlin/parser.d.ts +84 -0
  254. package/dist/languages/kotlin/parser.d.ts.map +1 -0
  255. package/dist/languages/kotlin/parser.js +507 -0
  256. package/dist/languages/kotlin/parser.js.map +1 -0
  257. package/dist/languages/python/index.d.ts +7 -0
  258. package/dist/languages/python/index.d.ts.map +1 -0
  259. package/dist/languages/python/index.js +7 -0
  260. package/dist/languages/python/index.js.map +1 -0
  261. package/dist/languages/python/parser.d.ts +91 -0
  262. package/dist/languages/python/parser.d.ts.map +1 -0
  263. package/dist/languages/python/parser.js +375 -0
  264. package/dist/languages/python/parser.js.map +1 -0
  265. package/dist/languages/registry.d.ts +81 -0
  266. package/dist/languages/registry.d.ts.map +1 -0
  267. package/dist/languages/registry.js +150 -0
  268. package/dist/languages/registry.js.map +1 -0
  269. package/dist/languages/types.d.ts +137 -0
  270. package/dist/languages/types.d.ts.map +1 -0
  271. package/dist/languages/types.js +10 -0
  272. package/dist/languages/types.js.map +1 -0
  273. package/dist/languages/typescript/index.d.ts +7 -0
  274. package/dist/languages/typescript/index.d.ts.map +1 -0
  275. package/dist/languages/typescript/index.js +7 -0
  276. package/dist/languages/typescript/index.js.map +1 -0
  277. package/dist/languages/typescript/parser.d.ts +51 -0
  278. package/dist/languages/typescript/parser.d.ts.map +1 -0
  279. package/dist/languages/typescript/parser.js +286 -0
  280. package/dist/languages/typescript/parser.js.map +1 -0
  281. package/dist/license/generator.d.ts +43 -0
  282. package/dist/license/generator.d.ts.map +1 -0
  283. package/dist/license/generator.js +72 -0
  284. package/dist/license/generator.js.map +1 -0
  285. package/dist/license/index.d.ts +11 -0
  286. package/dist/license/index.d.ts.map +1 -0
  287. package/dist/license/index.js +12 -0
  288. package/dist/license/index.js.map +1 -0
  289. package/dist/license/types.d.ts +85 -0
  290. package/dist/license/types.d.ts.map +1 -0
  291. package/dist/license/types.js +10 -0
  292. package/dist/license/types.js.map +1 -0
  293. package/dist/license/validator.d.ts +77 -0
  294. package/dist/license/validator.d.ts.map +1 -0
  295. package/dist/license/validator.js +275 -0
  296. package/dist/license/validator.js.map +1 -0
  297. package/dist/parser/extractor.d.ts +31 -0
  298. package/dist/parser/extractor.d.ts.map +1 -0
  299. package/dist/parser/extractor.js +10 -0
  300. package/dist/parser/extractor.js.map +1 -0
  301. package/dist/parser/extractors/go.d.ts +21 -0
  302. package/dist/parser/extractors/go.d.ts.map +1 -0
  303. package/dist/parser/extractors/go.js +569 -0
  304. package/dist/parser/extractors/go.js.map +1 -0
  305. package/dist/parser/extractors/index.d.ts +13 -0
  306. package/dist/parser/extractors/index.d.ts.map +1 -0
  307. package/dist/parser/extractors/index.js +13 -0
  308. package/dist/parser/extractors/index.js.map +1 -0
  309. package/dist/parser/extractors/java.d.ts +24 -0
  310. package/dist/parser/extractors/java.d.ts.map +1 -0
  311. package/dist/parser/extractors/java.js +611 -0
  312. package/dist/parser/extractors/java.js.map +1 -0
  313. package/dist/parser/extractors/kotlin.d.ts +25 -0
  314. package/dist/parser/extractors/kotlin.d.ts.map +1 -0
  315. package/dist/parser/extractors/kotlin.js +665 -0
  316. package/dist/parser/extractors/kotlin.js.map +1 -0
  317. package/dist/parser/extractors/python.d.ts +21 -0
  318. package/dist/parser/extractors/python.d.ts.map +1 -0
  319. package/dist/parser/extractors/python.js +514 -0
  320. package/dist/parser/extractors/python.js.map +1 -0
  321. package/dist/parser/extractors/typescript.d.ts +23 -0
  322. package/dist/parser/extractors/typescript.d.ts.map +1 -0
  323. package/dist/parser/extractors/typescript.js +664 -0
  324. package/dist/parser/extractors/typescript.js.map +1 -0
  325. package/dist/parser/index.d.ts +15 -0
  326. package/dist/parser/index.d.ts.map +1 -0
  327. package/dist/parser/index.js +14 -0
  328. package/dist/parser/index.js.map +1 -0
  329. package/dist/parser/manager.d.ts +50 -0
  330. package/dist/parser/manager.d.ts.map +1 -0
  331. package/dist/parser/manager.js +159 -0
  332. package/dist/parser/manager.js.map +1 -0
  333. package/dist/registry/builtins/go-builtins.d.ts +13 -0
  334. package/dist/registry/builtins/go-builtins.d.ts.map +1 -0
  335. package/dist/registry/builtins/go-builtins.js +63 -0
  336. package/dist/registry/builtins/go-builtins.js.map +1 -0
  337. package/dist/registry/builtins/java-builtins.d.ts +10 -0
  338. package/dist/registry/builtins/java-builtins.d.ts.map +1 -0
  339. package/dist/registry/builtins/java-builtins.js +59 -0
  340. package/dist/registry/builtins/java-builtins.js.map +1 -0
  341. package/dist/registry/builtins/kotlin-builtins.d.ts +10 -0
  342. package/dist/registry/builtins/kotlin-builtins.d.ts.map +1 -0
  343. package/dist/registry/builtins/kotlin-builtins.js +38 -0
  344. package/dist/registry/builtins/kotlin-builtins.js.map +1 -0
  345. package/dist/registry/builtins/node-builtins.d.ts +10 -0
  346. package/dist/registry/builtins/node-builtins.d.ts.map +1 -0
  347. package/dist/registry/builtins/node-builtins.js +36 -0
  348. package/dist/registry/builtins/node-builtins.js.map +1 -0
  349. package/dist/registry/builtins/python-builtins.d.ts +10 -0
  350. package/dist/registry/builtins/python-builtins.d.ts.map +1 -0
  351. package/dist/registry/builtins/python-builtins.js +43 -0
  352. package/dist/registry/builtins/python-builtins.js.map +1 -0
  353. package/dist/registry/cache.d.ts +53 -0
  354. package/dist/registry/cache.d.ts.map +1 -0
  355. package/dist/registry/cache.js +147 -0
  356. package/dist/registry/cache.js.map +1 -0
  357. package/dist/registry/go-registry.d.ts +52 -0
  358. package/dist/registry/go-registry.d.ts.map +1 -0
  359. package/dist/registry/go-registry.js +148 -0
  360. package/dist/registry/go-registry.js.map +1 -0
  361. package/dist/registry/index.d.ts +18 -0
  362. package/dist/registry/index.d.ts.map +1 -0
  363. package/dist/registry/index.js +21 -0
  364. package/dist/registry/index.js.map +1 -0
  365. package/dist/registry/maven-registry.d.ts +57 -0
  366. package/dist/registry/maven-registry.d.ts.map +1 -0
  367. package/dist/registry/maven-registry.js +155 -0
  368. package/dist/registry/maven-registry.js.map +1 -0
  369. package/dist/registry/npm-registry.d.ts +40 -0
  370. package/dist/registry/npm-registry.d.ts.map +1 -0
  371. package/dist/registry/npm-registry.js +155 -0
  372. package/dist/registry/npm-registry.js.map +1 -0
  373. package/dist/registry/pypi-registry.d.ts +49 -0
  374. package/dist/registry/pypi-registry.d.ts.map +1 -0
  375. package/dist/registry/pypi-registry.js +175 -0
  376. package/dist/registry/pypi-registry.js.map +1 -0
  377. package/dist/registry/registry-manager.d.ts +45 -0
  378. package/dist/registry/registry-manager.d.ts.map +1 -0
  379. package/dist/registry/registry-manager.js +107 -0
  380. package/dist/registry/registry-manager.js.map +1 -0
  381. package/dist/registry/types.d.ts +83 -0
  382. package/dist/registry/types.d.ts.map +1 -0
  383. package/dist/registry/types.js +12 -0
  384. package/dist/registry/types.js.map +1 -0
  385. package/dist/reporter/html-reporter.d.ts +20 -0
  386. package/dist/reporter/html-reporter.d.ts.map +1 -0
  387. package/dist/reporter/html-reporter.js +612 -0
  388. package/dist/reporter/html-reporter.js.map +1 -0
  389. package/dist/reporter/index.d.ts +28 -0
  390. package/dist/reporter/index.d.ts.map +1 -0
  391. package/dist/reporter/index.js +48 -0
  392. package/dist/reporter/index.js.map +1 -0
  393. package/dist/reporter/markdown-reporter.d.ts +16 -0
  394. package/dist/reporter/markdown-reporter.d.ts.map +1 -0
  395. package/dist/reporter/markdown-reporter.js +182 -0
  396. package/dist/reporter/markdown-reporter.js.map +1 -0
  397. package/dist/reporter/sarif-reporter.d.ts +67 -0
  398. package/dist/reporter/sarif-reporter.d.ts.map +1 -0
  399. package/dist/reporter/sarif-reporter.js +73 -0
  400. package/dist/reporter/sarif-reporter.js.map +1 -0
  401. package/dist/reporter/terminal-reporter.d.ts +14 -0
  402. package/dist/reporter/terminal-reporter.d.ts.map +1 -0
  403. package/dist/reporter/terminal-reporter.js +126 -0
  404. package/dist/reporter/terminal-reporter.js.map +1 -0
  405. package/dist/reporter/types.d.ts +43 -0
  406. package/dist/reporter/types.d.ts.map +1 -0
  407. package/dist/reporter/types.js +10 -0
  408. package/dist/reporter/types.js.map +1 -0
  409. package/dist/reporter/v4-html.d.ts +24 -0
  410. package/dist/reporter/v4-html.d.ts.map +1 -0
  411. package/dist/reporter/v4-html.js +359 -0
  412. package/dist/reporter/v4-html.js.map +1 -0
  413. package/dist/reporter/v4-terminal.d.ts +55 -0
  414. package/dist/reporter/v4-terminal.d.ts.map +1 -0
  415. package/dist/reporter/v4-terminal.js +199 -0
  416. package/dist/reporter/v4-terminal.js.map +1 -0
  417. package/dist/scanner/index.d.ts +9 -0
  418. package/dist/scanner/index.d.ts.map +1 -0
  419. package/dist/scanner/index.js +9 -0
  420. package/dist/scanner/index.js.map +1 -0
  421. package/dist/scanner/v4-scanner.d.ts +162 -0
  422. package/dist/scanner/v4-scanner.d.ts.map +1 -0
  423. package/dist/scanner/v4-scanner.js +327 -0
  424. package/dist/scanner/v4-scanner.js.map +1 -0
  425. package/dist/scorer/report.d.ts +52 -0
  426. package/dist/scorer/report.d.ts.map +1 -0
  427. package/dist/scorer/report.js +347 -0
  428. package/dist/scorer/report.js.map +1 -0
  429. package/dist/scorer/scoring-engine.d.ts +170 -0
  430. package/dist/scorer/scoring-engine.d.ts.map +1 -0
  431. package/dist/scorer/scoring-engine.js +308 -0
  432. package/dist/scorer/scoring-engine.js.map +1 -0
  433. package/dist/scorer/v4-adapter.d.ts +87 -0
  434. package/dist/scorer/v4-adapter.d.ts.map +1 -0
  435. package/dist/scorer/v4-adapter.js +145 -0
  436. package/dist/scorer/v4-adapter.js.map +1 -0
  437. package/dist/sla/index.d.ts +7 -0
  438. package/dist/sla/index.d.ts.map +1 -0
  439. package/dist/sla/index.js +6 -0
  440. package/dist/sla/index.js.map +1 -0
  441. package/dist/sla/tracker.d.ts +70 -0
  442. package/dist/sla/tracker.d.ts.map +1 -0
  443. package/dist/sla/tracker.js +151 -0
  444. package/dist/sla/tracker.js.map +1 -0
  445. package/dist/sla/types.d.ts +67 -0
  446. package/dist/sla/types.d.ts.map +1 -0
  447. package/dist/sla/types.js +42 -0
  448. package/dist/sla/types.js.map +1 -0
  449. package/dist/types.d.ts +172 -0
  450. package/dist/types.d.ts.map +1 -0
  451. package/dist/types.js +69 -0
  452. package/dist/types.js.map +1 -0
  453. package/package.json +97 -0
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Language Registry
3
+ *
4
+ * Manages registered LanguageAdapters and auto-selects the appropriate
5
+ * adapter based on file extension.
6
+ *
7
+ * @since 0.3.0
8
+ */
9
+ /**
10
+ * LanguageRegistry — singleton that maps file extensions to language adapters.
11
+ *
12
+ * Usage:
13
+ * const registry = LanguageRegistry.getInstance();
14
+ * registry.register(new TypeScriptAdapter());
15
+ * const adapter = registry.getByExtension('.ts');
16
+ */
17
+ export class LanguageRegistry {
18
+ static instance = null;
19
+ /** Adapter map by language ID */
20
+ adapters = new Map();
21
+ /** Extension → language ID lookup */
22
+ extensionMap = new Map();
23
+ constructor() { }
24
+ /** Get the singleton instance */
25
+ static getInstance() {
26
+ if (!LanguageRegistry.instance) {
27
+ LanguageRegistry.instance = new LanguageRegistry();
28
+ }
29
+ return LanguageRegistry.instance;
30
+ }
31
+ /**
32
+ * Reset the singleton (for testing).
33
+ */
34
+ static resetInstance() {
35
+ LanguageRegistry.instance = null;
36
+ }
37
+ /**
38
+ * Register a language adapter.
39
+ * @param adapter The language adapter to register
40
+ * @throws If an adapter with the same ID is already registered
41
+ */
42
+ register(adapter) {
43
+ if (this.adapters.has(adapter.id)) {
44
+ throw new Error(`Language adapter '${adapter.id}' is already registered`);
45
+ }
46
+ this.adapters.set(adapter.id, adapter);
47
+ for (const ext of adapter.extensions) {
48
+ this.extensionMap.set(ext.toLowerCase(), adapter.id);
49
+ }
50
+ }
51
+ /**
52
+ * Unregister a language adapter by ID.
53
+ * @param id Language identifier
54
+ */
55
+ unregister(id) {
56
+ const adapter = this.adapters.get(id);
57
+ if (adapter) {
58
+ for (const ext of adapter.extensions) {
59
+ this.extensionMap.delete(ext.toLowerCase());
60
+ }
61
+ this.adapters.delete(id);
62
+ }
63
+ }
64
+ /**
65
+ * Get a language adapter by language ID.
66
+ * @param id Language identifier (e.g. 'typescript')
67
+ * @returns The adapter, or undefined if not registered
68
+ */
69
+ getById(id) {
70
+ return this.adapters.get(id);
71
+ }
72
+ /**
73
+ * Get a language adapter by file extension.
74
+ * @param ext File extension including dot (e.g. '.ts')
75
+ * @returns The adapter, or undefined if no adapter matches
76
+ */
77
+ getByExtension(ext) {
78
+ const langId = this.extensionMap.get(ext.toLowerCase());
79
+ if (langId) {
80
+ return this.adapters.get(langId);
81
+ }
82
+ return undefined;
83
+ }
84
+ /**
85
+ * Get a language adapter for a file path.
86
+ * Extracts the extension and looks up the adapter.
87
+ * @param filePath File path
88
+ * @returns The adapter, or undefined if no adapter matches
89
+ */
90
+ getByFilePath(filePath) {
91
+ const ext = extractExtension(filePath);
92
+ if (ext) {
93
+ return this.getByExtension(ext);
94
+ }
95
+ return undefined;
96
+ }
97
+ /**
98
+ * Detect the language for a file path.
99
+ * @param filePath File path
100
+ * @returns The language identifier, or undefined
101
+ */
102
+ detectLanguage(filePath) {
103
+ const ext = extractExtension(filePath);
104
+ if (ext) {
105
+ const langId = this.extensionMap.get(ext.toLowerCase());
106
+ return langId;
107
+ }
108
+ return undefined;
109
+ }
110
+ /**
111
+ * Get all registered language IDs.
112
+ */
113
+ getRegisteredLanguages() {
114
+ return Array.from(this.adapters.keys());
115
+ }
116
+ /**
117
+ * Get all supported extensions.
118
+ */
119
+ getSupportedExtensions() {
120
+ return Array.from(this.extensionMap.keys());
121
+ }
122
+ /**
123
+ * Check if a file extension is supported.
124
+ */
125
+ isSupported(extOrPath) {
126
+ if (extOrPath.startsWith('.')) {
127
+ return this.extensionMap.has(extOrPath.toLowerCase());
128
+ }
129
+ const ext = extractExtension(extOrPath);
130
+ return ext ? this.extensionMap.has(ext.toLowerCase()) : false;
131
+ }
132
+ }
133
+ /**
134
+ * Extract file extension from a path (including the dot).
135
+ * Handles compound extensions like .d.ts, .test.ts etc.
136
+ */
137
+ function extractExtension(filePath) {
138
+ const basename = filePath.split(/[/\\]/).pop();
139
+ if (!basename)
140
+ return undefined;
141
+ // Handle .d.ts, .d.mts, .d.cts
142
+ if (/\.d\.[mc]?ts$/.test(basename)) {
143
+ return basename.match(/\.d\.[mc]?ts$/)?.[0];
144
+ }
145
+ const dotIndex = basename.lastIndexOf('.');
146
+ if (dotIndex === -1 || dotIndex === 0)
147
+ return undefined;
148
+ return basename.slice(dotIndex);
149
+ }
150
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/languages/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Language Adapter Types
3
+ *
4
+ * Defines the unified LanguageAdapter interface that all language-specific
5
+ * adapters must implement. This enables language-agnostic detection.
6
+ *
7
+ * @since 0.3.0
8
+ */
9
+ import type { SupportedLanguage } from '../types.js';
10
+ /**
11
+ * Abstract AST node — language adapters produce their own AST structures,
12
+ * but they all go through this common interface for traversal.
13
+ */
14
+ export interface ASTNode {
15
+ type: string;
16
+ [key: string]: unknown;
17
+ }
18
+ /** Extracted import/require statement */
19
+ export interface ImportInfo {
20
+ /** The module specifier (e.g. 'lodash', './utils', 'node:fs') */
21
+ module: string;
22
+ /** Individual imported bindings (e.g. ['readFile', 'writeFile']) */
23
+ bindings: string[];
24
+ /** Line number where the import appears */
25
+ line: number;
26
+ /** Whether this is a relative import (./foo, ../bar) */
27
+ isRelative: boolean;
28
+ /** Whether this is a built-in module */
29
+ isBuiltin: boolean;
30
+ }
31
+ /** Extracted function/method call */
32
+ export interface CallInfo {
33
+ /** The fully qualified call name (e.g. 'fs.readFile', 'console.log') */
34
+ name: string;
35
+ /** Line number */
36
+ line: number;
37
+ /** Column number */
38
+ column?: number;
39
+ /** Whether this is a method call (obj.method()) */
40
+ isMethodCall: boolean;
41
+ }
42
+ /** Result of package existence verification */
43
+ export interface PackageVerifyResult {
44
+ /** Package name */
45
+ name: string;
46
+ /** Whether the package exists in the registry */
47
+ exists: boolean;
48
+ /** If deprecated, the deprecation message */
49
+ deprecation?: string;
50
+ /** When the check was performed */
51
+ checkedAt: number;
52
+ }
53
+ /** Information about a deprecated API */
54
+ export interface DeprecatedInfo {
55
+ /** The deprecated API name/pattern */
56
+ api: string;
57
+ /** Why it was deprecated */
58
+ reason: string;
59
+ /** What to use instead */
60
+ replacement?: string;
61
+ /** Since which version it was deprecated */
62
+ since?: string;
63
+ /** Reference URL */
64
+ reference?: string;
65
+ }
66
+ /** Complexity metrics for a code unit (function/file) */
67
+ export interface ComplexityMetrics {
68
+ /** Cyclomatic complexity */
69
+ cyclomatic: number;
70
+ /** Cognitive complexity */
71
+ cognitive: number;
72
+ /** Lines of code */
73
+ loc: number;
74
+ /** Number of functions */
75
+ functionCount: number;
76
+ /** Maximum nesting depth */
77
+ maxNestingDepth: number;
78
+ }
79
+ /**
80
+ * LanguageAdapter — unified interface for multi-language support.
81
+ *
82
+ * Each supported language implements this interface to provide:
83
+ * - AST parsing
84
+ * - Import/call extraction
85
+ * - Package verification
86
+ * - Deprecated API checking
87
+ * - Complexity computation
88
+ *
89
+ * Detectors use LanguageAdapter to remain language-agnostic.
90
+ */
91
+ export interface LanguageAdapter {
92
+ /** Language identifier (e.g. 'typescript', 'python') */
93
+ readonly id: SupportedLanguage;
94
+ /** Supported file extensions (e.g. ['.ts', '.tsx', '.js', '.jsx']) */
95
+ readonly extensions: string[];
96
+ /**
97
+ * Parse source code into an AST.
98
+ * @param source File content
99
+ * @param filePath File path (for error reporting)
100
+ * @returns Parsed AST
101
+ */
102
+ parse(source: string, filePath: string): Promise<ASTNode>;
103
+ /**
104
+ * Extract import/require statements from parsed AST or source.
105
+ * @param source File content
106
+ * @param ast Parsed AST (optional, for performance)
107
+ * @returns Array of import information
108
+ */
109
+ extractImports(source: string, ast?: ASTNode): ImportInfo[];
110
+ /**
111
+ * Extract function/method calls from parsed AST or source.
112
+ * @param source File content
113
+ * @param ast Parsed AST (optional, for performance)
114
+ * @returns Array of call information
115
+ */
116
+ extractCalls(source: string, ast?: ASTNode): CallInfo[];
117
+ /**
118
+ * Verify if a package exists in the language's package registry.
119
+ * @param name Package name
120
+ * @returns Verification result
121
+ */
122
+ verifyPackage(name: string): Promise<PackageVerifyResult>;
123
+ /**
124
+ * Check if an API is deprecated.
125
+ * @param api The API name/call
126
+ * @returns Deprecation info, or null if not deprecated
127
+ */
128
+ checkDeprecated(api: string): DeprecatedInfo | null;
129
+ /**
130
+ * Compute complexity metrics for a source file.
131
+ * @param source File content
132
+ * @param ast Parsed AST (optional)
133
+ * @returns Complexity metrics
134
+ */
135
+ computeComplexity(source: string, ast?: ASTNode): ComplexityMetrics;
136
+ }
137
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/languages/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIrD;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,yCAAyC;AACzC,MAAM,WAAW,UAAU;IACzB,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,UAAU,EAAE,OAAO,CAAC;IACpB,wCAAwC;IACxC,SAAS,EAAE,OAAO,CAAC;CACpB;AAID,qCAAqC;AACrC,MAAM,WAAW,QAAQ;IACvB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,YAAY,EAAE,OAAO,CAAC;CACvB;AAID,+CAA+C;AAC/C,MAAM,WAAW,mBAAmB;IAClC,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,MAAM,EAAE,OAAO,CAAC;IAChB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,yCAAyC;AACzC,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,yDAAyD;AACzD,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,0BAA0B;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,4BAA4B;IAC5B,eAAe,EAAE,MAAM,CAAC;CACzB;AAID;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,QAAQ,CAAC,EAAE,EAAE,iBAAiB,CAAC;IAE/B,sEAAsE;IACtE,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAE9B;;;;;OAKG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE1D;;;;;OAKG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,UAAU,EAAE,CAAC;IAE5D;;;;;OAKG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,CAAC;IAExD;;;;OAIG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAE1D;;;;OAIG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC;IAEpD;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;CACrE"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Language Adapter Types
3
+ *
4
+ * Defines the unified LanguageAdapter interface that all language-specific
5
+ * adapters must implement. This enables language-agnostic detection.
6
+ *
7
+ * @since 0.3.0
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/languages/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * TypeScript/JavaScript Language Adapter — Exports
3
+ *
4
+ * @since 0.3.0
5
+ */
6
+ export { TypeScriptAdapter } from './parser.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/languages/typescript/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * TypeScript/JavaScript Language Adapter — Exports
3
+ *
4
+ * @since 0.3.0
5
+ */
6
+ export { TypeScriptAdapter } from './parser.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/languages/typescript/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * TypeScript / JavaScript Language Adapter
3
+ *
4
+ * Uses oxc-parser for fast AST parsing (Tier 1).
5
+ * Provides import/call extraction, complexity metrics, and built-in module detection.
6
+ *
7
+ * @since 0.3.0
8
+ */
9
+ import type { SupportedLanguage } from '../../types.js';
10
+ import type { LanguageAdapter, ASTNode, ImportInfo, CallInfo, PackageVerifyResult, DeprecatedInfo, ComplexityMetrics } from '../types.js';
11
+ /**
12
+ * TypeScriptAdapter — LanguageAdapter implementation for TypeScript and JavaScript.
13
+ *
14
+ * Covers: .ts, .tsx, .js, .jsx, .mts, .cts, .mjs, .cjs
15
+ */
16
+ export declare class TypeScriptAdapter implements LanguageAdapter {
17
+ readonly id: SupportedLanguage;
18
+ readonly extensions: string[];
19
+ /**
20
+ * Parse source code using oxc-parser.
21
+ */
22
+ parse(source: string, filePath: string): Promise<ASTNode>;
23
+ /**
24
+ * Extract import/require statements using regex (fast, works without AST).
25
+ * This is a robust regex-based approach that matches the existing detector logic.
26
+ */
27
+ extractImports(source: string, _ast?: ASTNode): ImportInfo[];
28
+ /**
29
+ * Extract function/method calls using regex.
30
+ * This is a lightweight extraction — AST-based extraction can be added later.
31
+ */
32
+ extractCalls(source: string, _ast?: ASTNode): CallInfo[];
33
+ /**
34
+ * Verify if an npm package exists.
35
+ * Uses HEAD request to registry.npmjs.org.
36
+ * Note: This is a placeholder — actual HTTP verification will be done
37
+ * in DeepHallucinationDetector (Phase 2).
38
+ */
39
+ verifyPackage(name: string): Promise<PackageVerifyResult>;
40
+ /**
41
+ * Check if an API is deprecated.
42
+ * Placeholder — real deprecated-apis.json will be added in Phase 2 (StaleAPIDetector).
43
+ */
44
+ checkDeprecated(_api: string): DeprecatedInfo | null;
45
+ /**
46
+ * Compute complexity metrics for a TypeScript/JavaScript file.
47
+ * Uses simple heuristic counting — AST-based metrics in Phase 2.
48
+ */
49
+ computeComplexity(source: string, _ast?: ASTNode): ComplexityMetrics;
50
+ }
51
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/languages/typescript/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EACV,eAAe,EACf,OAAO,EACP,UAAU,EACV,QAAQ,EACR,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAkCrB;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,eAAe;IACvD,QAAQ,CAAC,EAAE,EAAE,iBAAiB,CAAgB;IAC9C,QAAQ,CAAC,UAAU,WAAkE;IAErF;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU/D;;;OAGG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,EAAE;IAwH5D;;;OAGG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE;IAiDxD;;;;;OAKG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAU/D;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAIpD;;;OAGG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,iBAAiB;CAmDrE"}
@@ -0,0 +1,286 @@
1
+ /**
2
+ * TypeScript / JavaScript Language Adapter
3
+ *
4
+ * Uses oxc-parser for fast AST parsing (Tier 1).
5
+ * Provides import/call extraction, complexity metrics, and built-in module detection.
6
+ *
7
+ * @since 0.3.0
8
+ */
9
+ // ─── Node.js Built-in Modules ───
10
+ const NODE_BUILTINS = new Set([
11
+ 'assert', 'async_hooks', 'buffer', 'child_process', 'cluster', 'console',
12
+ 'constants', 'crypto', 'dgram', 'diagnostics_channel', 'dns', 'domain',
13
+ 'events', 'fs', 'http', 'http2', 'https', 'inspector', 'module', 'net',
14
+ 'os', 'path', 'perf_hooks', 'process', 'punycode', 'querystring',
15
+ 'readline', 'repl', 'stream', 'string_decoder', 'test', 'timers',
16
+ 'tls', 'trace_events', 'tty', 'url', 'util', 'v8', 'vm',
17
+ 'wasi', 'worker_threads', 'zlib',
18
+ // Subpath imports
19
+ 'fs/promises', 'stream/promises', 'timers/promises',
20
+ 'dns/promises', 'readline/promises',
21
+ ]);
22
+ /**
23
+ * Check if a module specifier refers to a Node.js built-in.
24
+ */
25
+ function isNodeBuiltin(specifier) {
26
+ if (specifier.startsWith('node:')) {
27
+ return true;
28
+ }
29
+ return NODE_BUILTINS.has(specifier);
30
+ }
31
+ /**
32
+ * Check if an import specifier is a relative path.
33
+ */
34
+ function isRelativeImport(specifier) {
35
+ return specifier.startsWith('.') || specifier.startsWith('/');
36
+ }
37
+ /**
38
+ * TypeScriptAdapter — LanguageAdapter implementation for TypeScript and JavaScript.
39
+ *
40
+ * Covers: .ts, .tsx, .js, .jsx, .mts, .cts, .mjs, .cjs
41
+ */
42
+ export class TypeScriptAdapter {
43
+ id = 'typescript';
44
+ extensions = ['.ts', '.tsx', '.js', '.jsx', '.mts', '.cts', '.mjs', '.cjs'];
45
+ /**
46
+ * Parse source code using oxc-parser.
47
+ */
48
+ async parse(source, filePath) {
49
+ const { parseSync } = await import('oxc-parser');
50
+ const result = parseSync(filePath, source);
51
+ if (result.errors && result.errors.length > 0) {
52
+ // Non-fatal: return program even with parse errors
53
+ // Detectors can check for errors separately
54
+ }
55
+ return result.program;
56
+ }
57
+ /**
58
+ * Extract import/require statements using regex (fast, works without AST).
59
+ * This is a robust regex-based approach that matches the existing detector logic.
60
+ */
61
+ extractImports(source, _ast) {
62
+ const imports = [];
63
+ const lines = source.split('\n');
64
+ for (let i = 0; i < lines.length; i++) {
65
+ const line = lines[i];
66
+ const lineNum = i + 1;
67
+ // ES import: import { a, b } from 'module'
68
+ // ES import: import name from 'module'
69
+ // ES import: import * as name from 'module'
70
+ const esMatch = line.match(/import\s+(?:(?:\{([^}]*)\}|(\w+)|\*\s+as\s+(\w+))(?:\s*,\s*(?:\{([^}]*)\}|(\w+)|\*\s+as\s+(\w+)))?\s+from\s+)?['"]([^'"]+)['"]/);
71
+ if (esMatch) {
72
+ const mod = esMatch[7];
73
+ const bindings = [];
74
+ // Named imports: { a, b as c }
75
+ for (const group of [esMatch[1], esMatch[4]]) {
76
+ if (group) {
77
+ group.split(',').forEach(s => {
78
+ const name = s.trim().split(/\s+as\s+/).pop()?.trim();
79
+ if (name)
80
+ bindings.push(name);
81
+ });
82
+ }
83
+ }
84
+ // Default import
85
+ if (esMatch[2])
86
+ bindings.push(esMatch[2]);
87
+ if (esMatch[5])
88
+ bindings.push(esMatch[5]);
89
+ // Namespace import
90
+ if (esMatch[3])
91
+ bindings.push(esMatch[3]);
92
+ if (esMatch[6])
93
+ bindings.push(esMatch[6]);
94
+ imports.push({
95
+ module: mod,
96
+ bindings,
97
+ line: lineNum,
98
+ isRelative: isRelativeImport(mod),
99
+ isBuiltin: isNodeBuiltin(mod),
100
+ });
101
+ continue;
102
+ }
103
+ // Side-effect import: import 'module'
104
+ const sideEffectMatch = line.match(/import\s+['"]([^'"]+)['"]/);
105
+ if (sideEffectMatch) {
106
+ imports.push({
107
+ module: sideEffectMatch[1],
108
+ bindings: [],
109
+ line: lineNum,
110
+ isRelative: isRelativeImport(sideEffectMatch[1]),
111
+ isBuiltin: isNodeBuiltin(sideEffectMatch[1]),
112
+ });
113
+ continue;
114
+ }
115
+ // Dynamic import: import('module')
116
+ const dynamicMatch = line.match(/import\s*\(\s*['"]([^'"]+)['"]\s*\)/);
117
+ if (dynamicMatch) {
118
+ imports.push({
119
+ module: dynamicMatch[1],
120
+ bindings: [],
121
+ line: lineNum,
122
+ isRelative: isRelativeImport(dynamicMatch[1]),
123
+ isBuiltin: isNodeBuiltin(dynamicMatch[1]),
124
+ });
125
+ continue;
126
+ }
127
+ // CommonJS: const { a, b } = require('module')
128
+ const cjsDestructMatch = line.match(/(?:const|let|var)\s+\{([^}]*)\}\s*=\s*require\s*\(\s*['"]([^'"]+)['"]\s*\)/);
129
+ if (cjsDestructMatch) {
130
+ const bindings = cjsDestructMatch[1]
131
+ .split(',')
132
+ .map(s => s.trim().split(/\s+as\s+/).pop()?.trim())
133
+ .filter(Boolean);
134
+ imports.push({
135
+ module: cjsDestructMatch[2],
136
+ bindings,
137
+ line: lineNum,
138
+ isRelative: isRelativeImport(cjsDestructMatch[2]),
139
+ isBuiltin: isNodeBuiltin(cjsDestructMatch[2]),
140
+ });
141
+ continue;
142
+ }
143
+ // CommonJS: const name = require('module')
144
+ const cjsMatch = line.match(/(?:const|let|var)\s+(\w+)\s*=\s*require\s*\(\s*['"]([^'"]+)['"]\s*\)/);
145
+ if (cjsMatch) {
146
+ imports.push({
147
+ module: cjsMatch[2],
148
+ bindings: [cjsMatch[1]],
149
+ line: lineNum,
150
+ isRelative: isRelativeImport(cjsMatch[2]),
151
+ isBuiltin: isNodeBuiltin(cjsMatch[2]),
152
+ });
153
+ continue;
154
+ }
155
+ // Bare require: require('module')
156
+ const bareRequireMatch = line.match(/require\s*\(\s*['"]([^'"]+)['"]\s*\)/);
157
+ if (bareRequireMatch && !cjsDestructMatch && !cjsMatch) {
158
+ imports.push({
159
+ module: bareRequireMatch[1],
160
+ bindings: [],
161
+ line: lineNum,
162
+ isRelative: isRelativeImport(bareRequireMatch[1]),
163
+ isBuiltin: isNodeBuiltin(bareRequireMatch[1]),
164
+ });
165
+ }
166
+ }
167
+ return imports;
168
+ }
169
+ /**
170
+ * Extract function/method calls using regex.
171
+ * This is a lightweight extraction — AST-based extraction can be added later.
172
+ */
173
+ extractCalls(source, _ast) {
174
+ const calls = [];
175
+ const lines = source.split('\n');
176
+ for (let i = 0; i < lines.length; i++) {
177
+ const line = lines[i];
178
+ const lineNum = i + 1;
179
+ // Skip comments
180
+ const trimmed = line.trim();
181
+ if (trimmed.startsWith('//') || trimmed.startsWith('*') || trimmed.startsWith('/*')) {
182
+ continue;
183
+ }
184
+ // Match method calls: obj.method(...)
185
+ const methodCallPattern = /(\w+(?:\.\w+)+)\s*\(/g;
186
+ let match;
187
+ while ((match = methodCallPattern.exec(line)) !== null) {
188
+ calls.push({
189
+ name: match[1],
190
+ line: lineNum,
191
+ column: match.index + 1,
192
+ isMethodCall: true,
193
+ });
194
+ }
195
+ // Match standalone function calls: func(...)
196
+ const funcCallPattern = /(?<!\.)(?<!\w)([a-zA-Z_$]\w*)\s*\(/g;
197
+ while ((match = funcCallPattern.exec(line)) !== null) {
198
+ const name = match[1];
199
+ // Skip keywords
200
+ if (['if', 'for', 'while', 'switch', 'catch', 'return', 'throw', 'new',
201
+ 'typeof', 'instanceof', 'void', 'delete', 'await', 'yield', 'function',
202
+ 'class', 'const', 'let', 'var', 'import', 'export', 'async', 'from',
203
+ 'case', 'type', 'interface', 'enum'].includes(name)) {
204
+ continue;
205
+ }
206
+ calls.push({
207
+ name,
208
+ line: lineNum,
209
+ column: match.index + 1,
210
+ isMethodCall: false,
211
+ });
212
+ }
213
+ }
214
+ return calls;
215
+ }
216
+ /**
217
+ * Verify if an npm package exists.
218
+ * Uses HEAD request to registry.npmjs.org.
219
+ * Note: This is a placeholder — actual HTTP verification will be done
220
+ * in DeepHallucinationDetector (Phase 2).
221
+ */
222
+ async verifyPackage(name) {
223
+ // Placeholder: return exists=true for now
224
+ // Real implementation in Phase 2 (DeepHallucinationDetector)
225
+ return {
226
+ name,
227
+ exists: true,
228
+ checkedAt: Date.now(),
229
+ };
230
+ }
231
+ /**
232
+ * Check if an API is deprecated.
233
+ * Placeholder — real deprecated-apis.json will be added in Phase 2 (StaleAPIDetector).
234
+ */
235
+ checkDeprecated(_api) {
236
+ return null;
237
+ }
238
+ /**
239
+ * Compute complexity metrics for a TypeScript/JavaScript file.
240
+ * Uses simple heuristic counting — AST-based metrics in Phase 2.
241
+ */
242
+ computeComplexity(source, _ast) {
243
+ const lines = source.split('\n');
244
+ const nonEmptyLines = lines.filter(l => l.trim().length > 0);
245
+ let cyclomatic = 1; // base
246
+ let cognitive = 0;
247
+ let maxNestingDepth = 0;
248
+ let currentDepth = 0;
249
+ let functionCount = 0;
250
+ for (const line of lines) {
251
+ const trimmed = line.trim();
252
+ // Count decision points for cyclomatic complexity
253
+ const decisions = (trimmed.match(/\b(if|else\s+if|for|while|case|catch|\?\?|&&|\|\|)\b/g) || []).length;
254
+ cyclomatic += decisions;
255
+ // Count ternary operators
256
+ const ternaries = (trimmed.match(/\?[^?:]*:/g) || []).length;
257
+ cyclomatic += ternaries;
258
+ // Track nesting depth
259
+ const opens = (trimmed.match(/\{/g) || []).length;
260
+ const closes = (trimmed.match(/\}/g) || []).length;
261
+ currentDepth += opens - closes;
262
+ if (currentDepth > maxNestingDepth) {
263
+ maxNestingDepth = currentDepth;
264
+ }
265
+ // Cognitive complexity: nested conditions add more
266
+ if (/\b(if|for|while|catch)\b/.test(trimmed)) {
267
+ cognitive += 1 + Math.max(0, currentDepth - 1);
268
+ }
269
+ // Count functions
270
+ if (/\b(function|=>)\b/.test(trimmed) || /\b(async\s+)?\w+\s*\(/.test(trimmed)) {
271
+ // Very rough function counter
272
+ if (/(?:function\s+\w+|(?:const|let|var)\s+\w+\s*=\s*(?:async\s*)?\(|(?:async\s+)?(?:get|set)?\s*\w+\s*\([^)]*\)\s*(?::\s*\w+)?\s*\{)/.test(trimmed)) {
273
+ functionCount++;
274
+ }
275
+ }
276
+ }
277
+ return {
278
+ cyclomatic,
279
+ cognitive,
280
+ loc: nonEmptyLines.length,
281
+ functionCount,
282
+ maxNestingDepth,
283
+ };
284
+ }
285
+ }
286
+ //# sourceMappingURL=parser.js.map