@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,155 @@
1
+ /**
2
+ * Maven Registry — package verification against Maven Central.
3
+ *
4
+ * Supports:
5
+ * - groupId:artifactId format (e.g. 'org.springframework.boot:spring-boot')
6
+ * - Java package name lookup (e.g. 'org.springframework.boot')
7
+ * - Custom Nexus/Artifactory URLs
8
+ *
9
+ * Used for both Java and Kotlin packages.
10
+ *
11
+ * @since 0.4.0 (V4)
12
+ */
13
+ import { RegistryCache } from './cache.js';
14
+ import { JAVA_BUILTINS } from './builtins/java-builtins.js';
15
+ export class MavenRegistry {
16
+ name = 'maven';
17
+ language = 'java';
18
+ baseUrl;
19
+ token;
20
+ timeout;
21
+ cacheTtl;
22
+ cache;
23
+ constructor(config, cache) {
24
+ this.baseUrl = config?.url || 'https://search.maven.org';
25
+ this.token = config?.token;
26
+ this.timeout = config?.timeoutMs || 5000;
27
+ this.cacheTtl = config?.cacheTtlSeconds || 86400;
28
+ this.cache = cache || new RegistryCache();
29
+ }
30
+ /**
31
+ * Check if a Java/Kotlin import is a standard library package.
32
+ * Matches against top-level prefixes (e.g. 'java.util' matches 'java.util.List').
33
+ */
34
+ isBuiltin(packageName) {
35
+ for (const builtin of JAVA_BUILTINS) {
36
+ if (packageName === builtin || packageName.startsWith(builtin + '.')) {
37
+ return true;
38
+ }
39
+ }
40
+ return false;
41
+ }
42
+ /**
43
+ * Extract groupId from a package name or groupId:artifactId format.
44
+ *
45
+ * Formats:
46
+ * - "org.springframework.boot:spring-boot" → groupId: "org.springframework.boot"
47
+ * - "org.springframework.boot" → groupId: "org.springframework.boot"
48
+ * - "com.google.guava" → groupId: "com.google.guava"
49
+ */
50
+ extractGroupId(packageName) {
51
+ if (packageName.includes(':')) {
52
+ const [groupId, artifactId] = packageName.split(':', 2);
53
+ return { groupId, artifactId };
54
+ }
55
+ return { groupId: packageName };
56
+ }
57
+ /**
58
+ * Verify if a Maven package/group exists.
59
+ *
60
+ * 1. Check if it's a Java/Kotlin standard library package
61
+ * 2. Check cache
62
+ * 3. Query Maven Central Search API:
63
+ * GET {baseUrl}/solrsearch/select?q=g:{groupId}&rows=1&wt=json
64
+ * - response.numFound > 0 → exists
65
+ * - response.numFound === 0 → does not exist
66
+ * - error → assume exists (conservative)
67
+ */
68
+ async verify(packageName) {
69
+ const start = Date.now();
70
+ // Check standard library first
71
+ if (this.isBuiltin(packageName)) {
72
+ return {
73
+ exists: true,
74
+ name: packageName,
75
+ source: 'builtin',
76
+ latencyMs: Date.now() - start,
77
+ };
78
+ }
79
+ // Check cache
80
+ const cacheKey = `maven:${packageName}`;
81
+ const cached = await this.cache.get(cacheKey);
82
+ if (cached) {
83
+ return { ...cached, name: packageName, latencyMs: Date.now() - start };
84
+ }
85
+ // Query Maven Central
86
+ try {
87
+ const { groupId, artifactId } = this.extractGroupId(packageName);
88
+ let query;
89
+ if (artifactId) {
90
+ query = `g:${encodeURIComponent(groupId)}+AND+a:${encodeURIComponent(artifactId)}`;
91
+ }
92
+ else {
93
+ query = `g:${encodeURIComponent(groupId)}`;
94
+ }
95
+ const url = `${this.baseUrl}/solrsearch/select?q=${query}&rows=1&wt=json`;
96
+ const headers = {
97
+ Accept: 'application/json',
98
+ };
99
+ if (this.token) {
100
+ headers['Authorization'] = `Bearer ${this.token}`;
101
+ }
102
+ const response = await fetch(url, {
103
+ method: 'GET',
104
+ headers,
105
+ signal: AbortSignal.timeout(this.timeout),
106
+ });
107
+ const latencyMs = Date.now() - start;
108
+ if (!response.ok) {
109
+ // Non-200 → assume exists (conservative)
110
+ return {
111
+ exists: true,
112
+ name: packageName,
113
+ source: 'registry',
114
+ latencyMs,
115
+ };
116
+ }
117
+ const data = await response.json();
118
+ const numFound = data.response?.numFound || 0;
119
+ const exists = numFound > 0;
120
+ let version;
121
+ if (exists && data.response?.docs?.[0]) {
122
+ version = data.response.docs[0].latestVersion || data.response.docs[0].v;
123
+ }
124
+ const result = {
125
+ exists,
126
+ name: packageName,
127
+ version,
128
+ source: 'registry',
129
+ latencyMs,
130
+ };
131
+ await this.cache.set(cacheKey, result, this.cacheTtl);
132
+ return result;
133
+ }
134
+ catch {
135
+ // Network error → assume exists (conservative)
136
+ return {
137
+ exists: true,
138
+ name: packageName,
139
+ source: 'registry',
140
+ latencyMs: Date.now() - start,
141
+ };
142
+ }
143
+ }
144
+ /**
145
+ * Check if a Maven package is deprecated.
146
+ * Maven Central doesn't have a native deprecation field.
147
+ * This is a best-effort check — returns null in most cases.
148
+ */
149
+ async checkDeprecated(_packageName, _version) {
150
+ // Maven Central does not provide deprecation info via API.
151
+ // Future: could check POM metadata or known deprecation databases.
152
+ return null;
153
+ }
154
+ }
155
+ //# sourceMappingURL=maven-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maven-registry.js","sourceRoot":"","sources":["../../src/registry/maven-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * npm Registry — package verification against the npm registry.
3
+ *
4
+ * Supports:
5
+ * - Regular packages (e.g. 'lodash')
6
+ * - Scoped packages (e.g. '@scope/name')
7
+ * - Custom registry URLs (enterprise Nexus/Artifactory)
8
+ * - Auth token headers
9
+ *
10
+ * @since 0.4.0 (V4)
11
+ */
12
+ import type { PackageRegistry, PackageVerifyResult, DeprecationInfo, RegistryConfig } from './types.js';
13
+ import { RegistryCache } from './cache.js';
14
+ export declare class NpmRegistry implements PackageRegistry {
15
+ readonly name = "npm";
16
+ readonly language = "typescript";
17
+ private baseUrl;
18
+ private token?;
19
+ private timeout;
20
+ private cacheTtl;
21
+ private cache;
22
+ constructor(config?: RegistryConfig, cache?: RegistryCache);
23
+ /**
24
+ * Verify if an npm package exists.
25
+ *
26
+ * 1. Check if it's a Node.js built-in module
27
+ * 2. Check cache
28
+ * 3. Query registry: GET {baseUrl}/{packageName}
29
+ * - 200 → exists, extract version from dist-tags.latest
30
+ * - 404 → does not exist
31
+ * - timeout/error → assume exists (conservative)
32
+ */
33
+ verify(packageName: string): Promise<PackageVerifyResult>;
34
+ /**
35
+ * Check if an npm package is deprecated.
36
+ * GET {baseUrl}/{packageName}/latest and check the deprecated field.
37
+ */
38
+ checkDeprecated(packageName: string): Promise<DeprecationInfo | null>;
39
+ }
40
+ //# sourceMappingURL=npm-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-registry.d.ts","sourceRoot":"","sources":["../../src/registry/npm-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACxG,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,qBAAa,WAAY,YAAW,eAAe;IACjD,QAAQ,CAAC,IAAI,SAAS;IACtB,QAAQ,CAAC,QAAQ,gBAAgB;IAEjC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAgB;gBAEjB,MAAM,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,aAAa;IAQ1D;;;;;;;;;OASG;IACG,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAyF/D;;;OAGG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;CAqC5E"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * npm Registry — package verification against the npm registry.
3
+ *
4
+ * Supports:
5
+ * - Regular packages (e.g. 'lodash')
6
+ * - Scoped packages (e.g. '@scope/name')
7
+ * - Custom registry URLs (enterprise Nexus/Artifactory)
8
+ * - Auth token headers
9
+ *
10
+ * @since 0.4.0 (V4)
11
+ */
12
+ import { RegistryCache } from './cache.js';
13
+ import { NODE_BUILTINS } from './builtins/node-builtins.js';
14
+ export class NpmRegistry {
15
+ name = 'npm';
16
+ language = 'typescript';
17
+ baseUrl;
18
+ token;
19
+ timeout;
20
+ cacheTtl;
21
+ cache;
22
+ constructor(config, cache) {
23
+ this.baseUrl = config?.url || 'https://registry.npmjs.org';
24
+ this.token = config?.token;
25
+ this.timeout = config?.timeoutMs || 5000;
26
+ this.cacheTtl = config?.cacheTtlSeconds || 86400;
27
+ this.cache = cache || new RegistryCache();
28
+ }
29
+ /**
30
+ * Verify if an npm package exists.
31
+ *
32
+ * 1. Check if it's a Node.js built-in module
33
+ * 2. Check cache
34
+ * 3. Query registry: GET {baseUrl}/{packageName}
35
+ * - 200 → exists, extract version from dist-tags.latest
36
+ * - 404 → does not exist
37
+ * - timeout/error → assume exists (conservative)
38
+ */
39
+ async verify(packageName) {
40
+ const start = Date.now();
41
+ // Check built-in modules first
42
+ const normalizedName = packageName.startsWith('node:')
43
+ ? packageName
44
+ : packageName;
45
+ if (NODE_BUILTINS.has(normalizedName) || NODE_BUILTINS.has(`node:${normalizedName}`)) {
46
+ return {
47
+ exists: true,
48
+ name: packageName,
49
+ source: 'builtin',
50
+ latencyMs: Date.now() - start,
51
+ };
52
+ }
53
+ // Check cache
54
+ const cacheKey = `npm:${packageName}`;
55
+ const cached = await this.cache.get(cacheKey);
56
+ if (cached) {
57
+ return { ...cached, latencyMs: Date.now() - start };
58
+ }
59
+ // Query registry
60
+ try {
61
+ // Scoped packages: @scope/name → @scope%2Fname
62
+ const encodedName = packageName.startsWith('@')
63
+ ? `@${encodeURIComponent(packageName.slice(1))}`
64
+ : encodeURIComponent(packageName);
65
+ const url = `${this.baseUrl}/${encodedName}`;
66
+ const headers = {
67
+ Accept: 'application/vnd.npm.install-v1+json',
68
+ };
69
+ if (this.token) {
70
+ headers['Authorization'] = `Bearer ${this.token}`;
71
+ }
72
+ const response = await fetch(url, {
73
+ method: 'GET',
74
+ headers,
75
+ signal: AbortSignal.timeout(this.timeout),
76
+ });
77
+ const latencyMs = Date.now() - start;
78
+ if (response.status === 404) {
79
+ const result = {
80
+ exists: false,
81
+ name: packageName,
82
+ source: 'registry',
83
+ latencyMs,
84
+ };
85
+ await this.cache.set(cacheKey, result, this.cacheTtl);
86
+ return result;
87
+ }
88
+ // Parse response to get version info
89
+ let version;
90
+ try {
91
+ const data = await response.json();
92
+ const distTags = data['dist-tags'];
93
+ version = distTags?.latest;
94
+ }
95
+ catch {
96
+ // Could not parse response body, but status was OK
97
+ }
98
+ const result = {
99
+ exists: true,
100
+ name: packageName,
101
+ version,
102
+ source: 'registry',
103
+ latencyMs,
104
+ };
105
+ await this.cache.set(cacheKey, result, this.cacheTtl);
106
+ return result;
107
+ }
108
+ catch {
109
+ // Network error or timeout → assume exists (conservative, avoid false positives)
110
+ return {
111
+ exists: true,
112
+ name: packageName,
113
+ source: 'registry',
114
+ latencyMs: Date.now() - start,
115
+ };
116
+ }
117
+ }
118
+ /**
119
+ * Check if an npm package is deprecated.
120
+ * GET {baseUrl}/{packageName}/latest and check the deprecated field.
121
+ */
122
+ async checkDeprecated(packageName) {
123
+ try {
124
+ const encodedName = packageName.startsWith('@')
125
+ ? `@${encodeURIComponent(packageName.slice(1))}`
126
+ : encodeURIComponent(packageName);
127
+ const url = `${this.baseUrl}/${encodedName}/latest`;
128
+ const headers = {};
129
+ if (this.token) {
130
+ headers['Authorization'] = `Bearer ${this.token}`;
131
+ }
132
+ const response = await fetch(url, {
133
+ method: 'GET',
134
+ headers,
135
+ signal: AbortSignal.timeout(this.timeout),
136
+ });
137
+ if (!response.ok) {
138
+ return null;
139
+ }
140
+ const data = await response.json();
141
+ const deprecated = data['deprecated'];
142
+ if (deprecated) {
143
+ return {
144
+ deprecated: true,
145
+ message: deprecated,
146
+ };
147
+ }
148
+ return null;
149
+ }
150
+ catch {
151
+ return null;
152
+ }
153
+ }
154
+ }
155
+ //# sourceMappingURL=npm-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-registry.js","sourceRoot":"","sources":["../../src/registry/npm-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * PyPI Registry — package verification against the Python Package Index.
3
+ *
4
+ * Supports:
5
+ * - Regular packages (e.g. 'requests')
6
+ * - Name normalization (hyphens ↔ underscores, case-insensitive)
7
+ * - Deprecation detection from classifiers and description
8
+ * - Custom registry URLs (enterprise)
9
+ *
10
+ * @since 0.4.0 (V4)
11
+ */
12
+ import type { PackageRegistry, PackageVerifyResult, DeprecationInfo, RegistryConfig } from './types.js';
13
+ import { RegistryCache } from './cache.js';
14
+ export declare class PyPIRegistry implements PackageRegistry {
15
+ readonly name = "pypi";
16
+ readonly language = "python";
17
+ private baseUrl;
18
+ private token?;
19
+ private timeout;
20
+ private cacheTtl;
21
+ private cache;
22
+ constructor(config?: RegistryConfig, cache?: RegistryCache);
23
+ /**
24
+ * Normalize a PyPI package name.
25
+ * PyPI package names are case-insensitive and treat hyphens, underscores,
26
+ * and periods as equivalent.
27
+ * PEP 503: normalize by lowering and replacing [-_.] with hyphens.
28
+ */
29
+ private normalizeName;
30
+ /**
31
+ * Verify if a Python package exists on PyPI.
32
+ *
33
+ * 1. Check if it's a Python standard library module
34
+ * 2. Check cache
35
+ * 3. Query PyPI JSON API: GET {baseUrl}/pypi/{packageName}/json
36
+ * - 200 → exists
37
+ * - 404 → does not exist
38
+ * - error → assume exists (conservative)
39
+ */
40
+ verify(packageName: string): Promise<PackageVerifyResult>;
41
+ /**
42
+ * Check if a Python package is deprecated.
43
+ * Looks for:
44
+ * - "Development Status :: 7 - Inactive" in classifiers
45
+ * - Deprecation notices in summary/description
46
+ */
47
+ checkDeprecated(packageName: string): Promise<DeprecationInfo | null>;
48
+ }
49
+ //# sourceMappingURL=pypi-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pypi-registry.d.ts","sourceRoot":"","sources":["../../src/registry/pypi-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACxG,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,qBAAa,YAAa,YAAW,eAAe;IAClD,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,QAAQ,YAAY;IAE7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAgB;gBAEjB,MAAM,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,aAAa;IAQ1D;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAIrB;;;;;;;;;OASG;IACG,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAkF/D;;;;;OAKG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;CA+D5E"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * PyPI Registry — package verification against the Python Package Index.
3
+ *
4
+ * Supports:
5
+ * - Regular packages (e.g. 'requests')
6
+ * - Name normalization (hyphens ↔ underscores, case-insensitive)
7
+ * - Deprecation detection from classifiers and description
8
+ * - Custom registry URLs (enterprise)
9
+ *
10
+ * @since 0.4.0 (V4)
11
+ */
12
+ import { RegistryCache } from './cache.js';
13
+ import { PYTHON_BUILTINS } from './builtins/python-builtins.js';
14
+ export class PyPIRegistry {
15
+ name = 'pypi';
16
+ language = 'python';
17
+ baseUrl;
18
+ token;
19
+ timeout;
20
+ cacheTtl;
21
+ cache;
22
+ constructor(config, cache) {
23
+ this.baseUrl = config?.url || 'https://pypi.org';
24
+ this.token = config?.token;
25
+ this.timeout = config?.timeoutMs || 5000;
26
+ this.cacheTtl = config?.cacheTtlSeconds || 86400;
27
+ this.cache = cache || new RegistryCache();
28
+ }
29
+ /**
30
+ * Normalize a PyPI package name.
31
+ * PyPI package names are case-insensitive and treat hyphens, underscores,
32
+ * and periods as equivalent.
33
+ * PEP 503: normalize by lowering and replacing [-_.] with hyphens.
34
+ */
35
+ normalizeName(name) {
36
+ return name.toLowerCase().replace(/[-_.]+/g, '-');
37
+ }
38
+ /**
39
+ * Verify if a Python package exists on PyPI.
40
+ *
41
+ * 1. Check if it's a Python standard library module
42
+ * 2. Check cache
43
+ * 3. Query PyPI JSON API: GET {baseUrl}/pypi/{packageName}/json
44
+ * - 200 → exists
45
+ * - 404 → does not exist
46
+ * - error → assume exists (conservative)
47
+ */
48
+ async verify(packageName) {
49
+ const start = Date.now();
50
+ // Check Python stdlib first
51
+ // Python imports use the top-level module name
52
+ const topLevel = packageName.split('.')[0];
53
+ if (PYTHON_BUILTINS.has(topLevel)) {
54
+ return {
55
+ exists: true,
56
+ name: packageName,
57
+ source: 'builtin',
58
+ latencyMs: Date.now() - start,
59
+ };
60
+ }
61
+ // Normalize name for cache and lookup
62
+ const normalized = this.normalizeName(packageName);
63
+ const cacheKey = `pypi:${normalized}`;
64
+ const cached = await this.cache.get(cacheKey);
65
+ if (cached) {
66
+ return { ...cached, name: packageName, latencyMs: Date.now() - start };
67
+ }
68
+ // Query PyPI
69
+ try {
70
+ const url = `${this.baseUrl}/pypi/${encodeURIComponent(normalized)}/json`;
71
+ const headers = {
72
+ Accept: 'application/json',
73
+ };
74
+ if (this.token) {
75
+ headers['Authorization'] = `Bearer ${this.token}`;
76
+ }
77
+ const response = await fetch(url, {
78
+ method: 'GET',
79
+ headers,
80
+ signal: AbortSignal.timeout(this.timeout),
81
+ });
82
+ const latencyMs = Date.now() - start;
83
+ if (response.status === 404) {
84
+ const result = {
85
+ exists: false,
86
+ name: packageName,
87
+ source: 'registry',
88
+ latencyMs,
89
+ };
90
+ await this.cache.set(cacheKey, result, this.cacheTtl);
91
+ return result;
92
+ }
93
+ // Extract version from response
94
+ let version;
95
+ try {
96
+ const data = await response.json();
97
+ version = data.info?.version;
98
+ }
99
+ catch {
100
+ // Could not parse, but the package exists
101
+ }
102
+ const result = {
103
+ exists: true,
104
+ name: packageName,
105
+ version,
106
+ source: 'registry',
107
+ latencyMs,
108
+ };
109
+ await this.cache.set(cacheKey, result, this.cacheTtl);
110
+ return result;
111
+ }
112
+ catch {
113
+ // Network error → assume exists (conservative)
114
+ return {
115
+ exists: true,
116
+ name: packageName,
117
+ source: 'registry',
118
+ latencyMs: Date.now() - start,
119
+ };
120
+ }
121
+ }
122
+ /**
123
+ * Check if a Python package is deprecated.
124
+ * Looks for:
125
+ * - "Development Status :: 7 - Inactive" in classifiers
126
+ * - Deprecation notices in summary/description
127
+ */
128
+ async checkDeprecated(packageName) {
129
+ try {
130
+ const normalized = this.normalizeName(packageName);
131
+ const url = `${this.baseUrl}/pypi/${encodeURIComponent(normalized)}/json`;
132
+ const headers = {};
133
+ if (this.token) {
134
+ headers['Authorization'] = `Bearer ${this.token}`;
135
+ }
136
+ const response = await fetch(url, {
137
+ method: 'GET',
138
+ headers,
139
+ signal: AbortSignal.timeout(this.timeout),
140
+ });
141
+ if (!response.ok) {
142
+ return null;
143
+ }
144
+ const data = await response.json();
145
+ const info = data.info;
146
+ if (!info)
147
+ return null;
148
+ // Check classifiers for inactive status
149
+ const classifiers = info.classifiers || [];
150
+ const isInactive = classifiers.some((c) => c.includes('Development Status :: 7 - Inactive'));
151
+ if (isInactive) {
152
+ return {
153
+ deprecated: true,
154
+ message: 'Package is marked as inactive (Development Status :: 7 - Inactive)',
155
+ };
156
+ }
157
+ // Check summary for deprecation notice
158
+ const summary = (info.summary || '').toLowerCase();
159
+ const description = (info.description || '').toLowerCase();
160
+ if (summary.includes('deprecated') ||
161
+ summary.includes('no longer maintained') ||
162
+ description.startsWith('deprecated')) {
163
+ return {
164
+ deprecated: true,
165
+ message: info.summary || 'Package appears to be deprecated',
166
+ };
167
+ }
168
+ return null;
169
+ }
170
+ catch {
171
+ return null;
172
+ }
173
+ }
174
+ }
175
+ //# sourceMappingURL=pypi-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pypi-registry.js","sourceRoot":"","sources":["../../src/registry/pypi-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Registry Manager — manages all language-specific registries.
3
+ *
4
+ * Provides a unified interface for verifying packages across
5
+ * all supported languages. Routes verification requests to the
6
+ * appropriate registry based on language.
7
+ *
8
+ * @since 0.4.0 (V4)
9
+ */
10
+ import type { PackageRegistry, PackageVerifyResult, RegistryOptions } from './types.js';
11
+ import { RegistryCache } from './cache.js';
12
+ export declare class RegistryManager {
13
+ private registries;
14
+ private cache;
15
+ constructor(options?: RegistryOptions, cache?: RegistryCache);
16
+ /**
17
+ * Get the registry for a given language.
18
+ */
19
+ getRegistry(language: string): PackageRegistry | undefined;
20
+ /**
21
+ * Verify a package exists for a given language.
22
+ * If no registry is configured for the language, returns a graceful result.
23
+ */
24
+ verifyPackage(language: string, packageName: string): Promise<PackageVerifyResult>;
25
+ /**
26
+ * Batch verify multiple packages concurrently with rate limiting.
27
+ *
28
+ * @param language Target language
29
+ * @param packageNames Packages to verify
30
+ * @param concurrency Max concurrent verifications (default: 5)
31
+ */
32
+ verifyBatch(language: string, packageNames: string[], concurrency?: number): Promise<Map<string, PackageVerifyResult>>;
33
+ /**
34
+ * Get cache statistics.
35
+ */
36
+ cacheStats(): {
37
+ entries: number;
38
+ hitRate: number;
39
+ };
40
+ /**
41
+ * Persist the cache to disk.
42
+ */
43
+ persistCache(): Promise<void>;
44
+ }
45
+ //# sourceMappingURL=registry-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-manager.d.ts","sourceRoot":"","sources":["../../src/registry/registry-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAM3C,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAA2C;IAC7D,OAAO,CAAC,KAAK,CAAgB;gBAEjB,OAAO,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,aAAa;IAiB5D;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI1D;;;OAGG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAaxF;;;;;;OAMG;IACG,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EAAE,EACtB,WAAW,GAAE,MAAU,GACtB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAqC5C;;OAEG;IACH,UAAU,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAQlD;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;CAGpC"}