@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.
- package/dist/ai/anthropic-provider.d.ts +41 -0
- package/dist/ai/anthropic-provider.d.ts.map +1 -0
- package/dist/ai/anthropic-provider.js +139 -0
- package/dist/ai/anthropic-provider.js.map +1 -0
- package/dist/ai/index.d.ts +39 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +41 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/ollama-provider.d.ts +46 -0
- package/dist/ai/ollama-provider.d.ts.map +1 -0
- package/dist/ai/ollama-provider.js +149 -0
- package/dist/ai/ollama-provider.js.map +1 -0
- package/dist/ai/openai-provider.d.ts +44 -0
- package/dist/ai/openai-provider.d.ts.map +1 -0
- package/dist/ai/openai-provider.js +137 -0
- package/dist/ai/openai-provider.js.map +1 -0
- package/dist/ai/orchestrator.d.ts +60 -0
- package/dist/ai/orchestrator.d.ts.map +1 -0
- package/dist/ai/orchestrator.js +188 -0
- package/dist/ai/orchestrator.js.map +1 -0
- package/dist/ai/prompts.d.ts +27 -0
- package/dist/ai/prompts.d.ts.map +1 -0
- package/dist/ai/prompts.js +112 -0
- package/dist/ai/prompts.js.map +1 -0
- package/dist/ai/types.d.ts +75 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +10 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/ai/v4/embedding/index.d.ts +10 -0
- package/dist/ai/v4/embedding/index.d.ts.map +1 -0
- package/dist/ai/v4/embedding/index.js +10 -0
- package/dist/ai/v4/embedding/index.js.map +1 -0
- package/dist/ai/v4/embedding/local.d.ts +68 -0
- package/dist/ai/v4/embedding/local.d.ts.map +1 -0
- package/dist/ai/v4/embedding/local.js +167 -0
- package/dist/ai/v4/embedding/local.js.map +1 -0
- package/dist/ai/v4/embedding/ollama.d.ts +58 -0
- package/dist/ai/v4/embedding/ollama.d.ts.map +1 -0
- package/dist/ai/v4/embedding/ollama.js +101 -0
- package/dist/ai/v4/embedding/ollama.js.map +1 -0
- package/dist/ai/v4/embedding/openai.d.ts +36 -0
- package/dist/ai/v4/embedding/openai.d.ts.map +1 -0
- package/dist/ai/v4/embedding/openai.js +76 -0
- package/dist/ai/v4/embedding/openai.js.map +1 -0
- package/dist/ai/v4/embedding/similarity.d.ts +36 -0
- package/dist/ai/v4/embedding/similarity.d.ts.map +1 -0
- package/dist/ai/v4/embedding/similarity.js +60 -0
- package/dist/ai/v4/embedding/similarity.js.map +1 -0
- package/dist/ai/v4/index.d.ts +51 -0
- package/dist/ai/v4/index.d.ts.map +1 -0
- package/dist/ai/v4/index.js +54 -0
- package/dist/ai/v4/index.js.map +1 -0
- package/dist/ai/v4/llm/anthropic.d.ts +38 -0
- package/dist/ai/v4/llm/anthropic.d.ts.map +1 -0
- package/dist/ai/v4/llm/anthropic.js +86 -0
- package/dist/ai/v4/llm/anthropic.js.map +1 -0
- package/dist/ai/v4/llm/index.d.ts +9 -0
- package/dist/ai/v4/llm/index.d.ts.map +1 -0
- package/dist/ai/v4/llm/index.js +9 -0
- package/dist/ai/v4/llm/index.js.map +1 -0
- package/dist/ai/v4/llm/ollama.d.ts +39 -0
- package/dist/ai/v4/llm/ollama.d.ts.map +1 -0
- package/dist/ai/v4/llm/ollama.js +95 -0
- package/dist/ai/v4/llm/ollama.js.map +1 -0
- package/dist/ai/v4/llm/openai.d.ts +38 -0
- package/dist/ai/v4/llm/openai.d.ts.map +1 -0
- package/dist/ai/v4/llm/openai.js +88 -0
- package/dist/ai/v4/llm/openai.js.map +1 -0
- package/dist/ai/v4/patterns/defect-patterns.d.ts +57 -0
- package/dist/ai/v4/patterns/defect-patterns.d.ts.map +1 -0
- package/dist/ai/v4/patterns/defect-patterns.js +331 -0
- package/dist/ai/v4/patterns/defect-patterns.js.map +1 -0
- package/dist/ai/v4/patterns/index.d.ts +8 -0
- package/dist/ai/v4/patterns/index.d.ts.map +1 -0
- package/dist/ai/v4/patterns/index.js +7 -0
- package/dist/ai/v4/patterns/index.js.map +1 -0
- package/dist/ai/v4/pipeline.d.ts +74 -0
- package/dist/ai/v4/pipeline.d.ts.map +1 -0
- package/dist/ai/v4/pipeline.js +381 -0
- package/dist/ai/v4/pipeline.js.map +1 -0
- package/dist/ai/v4/sla.d.ts +62 -0
- package/dist/ai/v4/sla.d.ts.map +1 -0
- package/dist/ai/v4/sla.js +136 -0
- package/dist/ai/v4/sla.js.map +1 -0
- package/dist/ai/v4/types.d.ts +117 -0
- package/dist/ai/v4/types.d.ts.map +1 -0
- package/dist/ai/v4/types.js +16 -0
- package/dist/ai/v4/types.js.map +1 -0
- package/dist/ai-healer/prompt-builder.d.ts +33 -0
- package/dist/ai-healer/prompt-builder.d.ts.map +1 -0
- package/dist/ai-healer/prompt-builder.js +89 -0
- package/dist/ai-healer/prompt-builder.js.map +1 -0
- package/dist/config/defaults.d.ts +14 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +57 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +8 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +33 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +245 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +58 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +7 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/v4-config.d.ts +77 -0
- package/dist/config/v4-config.d.ts.map +1 -0
- package/dist/config/v4-config.js +336 -0
- package/dist/config/v4-config.js.map +1 -0
- package/dist/detectors/ai-detector.d.ts +38 -0
- package/dist/detectors/ai-detector.d.ts.map +1 -0
- package/dist/detectors/ai-detector.js +62 -0
- package/dist/detectors/ai-detector.js.map +1 -0
- package/dist/detectors/context-break.d.ts +57 -0
- package/dist/detectors/context-break.d.ts.map +1 -0
- package/dist/detectors/context-break.js +199 -0
- package/dist/detectors/context-break.js.map +1 -0
- package/dist/detectors/deep-hallucination.d.ts +42 -0
- package/dist/detectors/deep-hallucination.d.ts.map +1 -0
- package/dist/detectors/deep-hallucination.js +297 -0
- package/dist/detectors/deep-hallucination.js.map +1 -0
- package/dist/detectors/duplication.d.ts +61 -0
- package/dist/detectors/duplication.d.ts.map +1 -0
- package/dist/detectors/duplication.js +204 -0
- package/dist/detectors/duplication.js.map +1 -0
- package/dist/detectors/hallucination.d.ts +80 -0
- package/dist/detectors/hallucination.d.ts.map +1 -0
- package/dist/detectors/hallucination.js +350 -0
- package/dist/detectors/hallucination.js.map +1 -0
- package/dist/detectors/index.d.ts +35 -0
- package/dist/detectors/index.d.ts.map +1 -0
- package/dist/detectors/index.js +33 -0
- package/dist/detectors/index.js.map +1 -0
- package/dist/detectors/logic-gap.d.ts +58 -0
- package/dist/detectors/logic-gap.d.ts.map +1 -0
- package/dist/detectors/logic-gap.js +284 -0
- package/dist/detectors/logic-gap.js.map +1 -0
- package/dist/detectors/over-engineering.d.ts +44 -0
- package/dist/detectors/over-engineering.d.ts.map +1 -0
- package/dist/detectors/over-engineering.js +257 -0
- package/dist/detectors/over-engineering.js.map +1 -0
- package/dist/detectors/security-pattern.d.ts +43 -0
- package/dist/detectors/security-pattern.d.ts.map +1 -0
- package/dist/detectors/security-pattern.js +235 -0
- package/dist/detectors/security-pattern.js.map +1 -0
- package/dist/detectors/stale-api.d.ts +44 -0
- package/dist/detectors/stale-api.d.ts.map +1 -0
- package/dist/detectors/stale-api.js +160 -0
- package/dist/detectors/stale-api.js.map +1 -0
- package/dist/detectors/type-safety.d.ts +41 -0
- package/dist/detectors/type-safety.d.ts.map +1 -0
- package/dist/detectors/type-safety.js +306 -0
- package/dist/detectors/type-safety.js.map +1 -0
- package/dist/detectors/v4/context-coherence.d.ts +67 -0
- package/dist/detectors/v4/context-coherence.d.ts.map +1 -0
- package/dist/detectors/v4/context-coherence.js +319 -0
- package/dist/detectors/v4/context-coherence.js.map +1 -0
- package/dist/detectors/v4/hallucinated-import.d.ts +52 -0
- package/dist/detectors/v4/hallucinated-import.d.ts.map +1 -0
- package/dist/detectors/v4/hallucinated-import.js +206 -0
- package/dist/detectors/v4/hallucinated-import.js.map +1 -0
- package/dist/detectors/v4/index.d.ts +28 -0
- package/dist/detectors/v4/index.d.ts.map +1 -0
- package/dist/detectors/v4/index.js +40 -0
- package/dist/detectors/v4/index.js.map +1 -0
- package/dist/detectors/v4/over-engineering.d.ts +69 -0
- package/dist/detectors/v4/over-engineering.d.ts.map +1 -0
- package/dist/detectors/v4/over-engineering.js +234 -0
- package/dist/detectors/v4/over-engineering.js.map +1 -0
- package/dist/detectors/v4/security-pattern.d.ts +46 -0
- package/dist/detectors/v4/security-pattern.d.ts.map +1 -0
- package/dist/detectors/v4/security-pattern.js +233 -0
- package/dist/detectors/v4/security-pattern.js.map +1 -0
- package/dist/detectors/v4/stale-api.d.ts +59 -0
- package/dist/detectors/v4/stale-api.d.ts.map +1 -0
- package/dist/detectors/v4/stale-api.js +470 -0
- package/dist/detectors/v4/stale-api.js.map +1 -0
- package/dist/detectors/v4/types.d.ts +74 -0
- package/dist/detectors/v4/types.d.ts.map +1 -0
- package/dist/detectors/v4/types.js +10 -0
- package/dist/detectors/v4/types.js.map +1 -0
- package/dist/diff/filter.d.ts +35 -0
- package/dist/diff/filter.d.ts.map +1 -0
- package/dist/diff/filter.js +65 -0
- package/dist/diff/filter.js.map +1 -0
- package/dist/diff/index.d.ts +9 -0
- package/dist/diff/index.d.ts.map +1 -0
- package/dist/diff/index.js +8 -0
- package/dist/diff/index.js.map +1 -0
- package/dist/diff/parser.d.ts +61 -0
- package/dist/diff/parser.d.ts.map +1 -0
- package/dist/diff/parser.js +203 -0
- package/dist/diff/parser.js.map +1 -0
- package/dist/i18n/en.d.ts +18 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +83 -0
- package/dist/i18n/en.js.map +1 -0
- package/dist/i18n/index.d.ts +13 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +14 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/provider.d.ts +54 -0
- package/dist/i18n/provider.d.ts.map +1 -0
- package/dist/i18n/provider.js +88 -0
- package/dist/i18n/provider.js.map +1 -0
- package/dist/i18n/types.d.ts +37 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +10 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/i18n/zh.d.ts +14 -0
- package/dist/i18n/zh.d.ts.map +1 -0
- package/dist/i18n/zh.js +83 -0
- package/dist/i18n/zh.js.map +1 -0
- package/dist/index.d.ts +113 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +106 -0
- package/dist/index.js.map +1 -0
- package/dist/ir/index.d.ts +10 -0
- package/dist/ir/index.d.ts.map +1 -0
- package/dist/ir/index.js +9 -0
- package/dist/ir/index.js.map +1 -0
- package/dist/ir/types.d.ts +126 -0
- package/dist/ir/types.d.ts.map +1 -0
- package/dist/ir/types.js +33 -0
- package/dist/ir/types.js.map +1 -0
- package/dist/languages/go/index.d.ts +7 -0
- package/dist/languages/go/index.d.ts.map +1 -0
- package/dist/languages/go/index.js +7 -0
- package/dist/languages/go/index.js.map +1 -0
- package/dist/languages/go/parser.d.ts +89 -0
- package/dist/languages/go/parser.d.ts.map +1 -0
- package/dist/languages/go/parser.js +509 -0
- package/dist/languages/go/parser.js.map +1 -0
- package/dist/languages/index.d.ts +13 -0
- package/dist/languages/index.d.ts.map +1 -0
- package/dist/languages/index.js +14 -0
- package/dist/languages/index.js.map +1 -0
- package/dist/languages/java/index.d.ts +7 -0
- package/dist/languages/java/index.d.ts.map +1 -0
- package/dist/languages/java/index.js +7 -0
- package/dist/languages/java/index.js.map +1 -0
- package/dist/languages/java/parser.d.ts +82 -0
- package/dist/languages/java/parser.d.ts.map +1 -0
- package/dist/languages/java/parser.js +492 -0
- package/dist/languages/java/parser.js.map +1 -0
- package/dist/languages/kotlin/index.d.ts +7 -0
- package/dist/languages/kotlin/index.d.ts.map +1 -0
- package/dist/languages/kotlin/index.js +7 -0
- package/dist/languages/kotlin/index.js.map +1 -0
- package/dist/languages/kotlin/parser.d.ts +84 -0
- package/dist/languages/kotlin/parser.d.ts.map +1 -0
- package/dist/languages/kotlin/parser.js +507 -0
- package/dist/languages/kotlin/parser.js.map +1 -0
- package/dist/languages/python/index.d.ts +7 -0
- package/dist/languages/python/index.d.ts.map +1 -0
- package/dist/languages/python/index.js +7 -0
- package/dist/languages/python/index.js.map +1 -0
- package/dist/languages/python/parser.d.ts +91 -0
- package/dist/languages/python/parser.d.ts.map +1 -0
- package/dist/languages/python/parser.js +375 -0
- package/dist/languages/python/parser.js.map +1 -0
- package/dist/languages/registry.d.ts +81 -0
- package/dist/languages/registry.d.ts.map +1 -0
- package/dist/languages/registry.js +150 -0
- package/dist/languages/registry.js.map +1 -0
- package/dist/languages/types.d.ts +137 -0
- package/dist/languages/types.d.ts.map +1 -0
- package/dist/languages/types.js +10 -0
- package/dist/languages/types.js.map +1 -0
- package/dist/languages/typescript/index.d.ts +7 -0
- package/dist/languages/typescript/index.d.ts.map +1 -0
- package/dist/languages/typescript/index.js +7 -0
- package/dist/languages/typescript/index.js.map +1 -0
- package/dist/languages/typescript/parser.d.ts +51 -0
- package/dist/languages/typescript/parser.d.ts.map +1 -0
- package/dist/languages/typescript/parser.js +286 -0
- package/dist/languages/typescript/parser.js.map +1 -0
- package/dist/license/generator.d.ts +43 -0
- package/dist/license/generator.d.ts.map +1 -0
- package/dist/license/generator.js +72 -0
- package/dist/license/generator.js.map +1 -0
- package/dist/license/index.d.ts +11 -0
- package/dist/license/index.d.ts.map +1 -0
- package/dist/license/index.js +12 -0
- package/dist/license/index.js.map +1 -0
- package/dist/license/types.d.ts +85 -0
- package/dist/license/types.d.ts.map +1 -0
- package/dist/license/types.js +10 -0
- package/dist/license/types.js.map +1 -0
- package/dist/license/validator.d.ts +77 -0
- package/dist/license/validator.d.ts.map +1 -0
- package/dist/license/validator.js +275 -0
- package/dist/license/validator.js.map +1 -0
- package/dist/parser/extractor.d.ts +31 -0
- package/dist/parser/extractor.d.ts.map +1 -0
- package/dist/parser/extractor.js +10 -0
- package/dist/parser/extractor.js.map +1 -0
- package/dist/parser/extractors/go.d.ts +21 -0
- package/dist/parser/extractors/go.d.ts.map +1 -0
- package/dist/parser/extractors/go.js +569 -0
- package/dist/parser/extractors/go.js.map +1 -0
- package/dist/parser/extractors/index.d.ts +13 -0
- package/dist/parser/extractors/index.d.ts.map +1 -0
- package/dist/parser/extractors/index.js +13 -0
- package/dist/parser/extractors/index.js.map +1 -0
- package/dist/parser/extractors/java.d.ts +24 -0
- package/dist/parser/extractors/java.d.ts.map +1 -0
- package/dist/parser/extractors/java.js +611 -0
- package/dist/parser/extractors/java.js.map +1 -0
- package/dist/parser/extractors/kotlin.d.ts +25 -0
- package/dist/parser/extractors/kotlin.d.ts.map +1 -0
- package/dist/parser/extractors/kotlin.js +665 -0
- package/dist/parser/extractors/kotlin.js.map +1 -0
- package/dist/parser/extractors/python.d.ts +21 -0
- package/dist/parser/extractors/python.d.ts.map +1 -0
- package/dist/parser/extractors/python.js +514 -0
- package/dist/parser/extractors/python.js.map +1 -0
- package/dist/parser/extractors/typescript.d.ts +23 -0
- package/dist/parser/extractors/typescript.d.ts.map +1 -0
- package/dist/parser/extractors/typescript.js +664 -0
- package/dist/parser/extractors/typescript.js.map +1 -0
- package/dist/parser/index.d.ts +15 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +14 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/manager.d.ts +50 -0
- package/dist/parser/manager.d.ts.map +1 -0
- package/dist/parser/manager.js +159 -0
- package/dist/parser/manager.js.map +1 -0
- package/dist/registry/builtins/go-builtins.d.ts +13 -0
- package/dist/registry/builtins/go-builtins.d.ts.map +1 -0
- package/dist/registry/builtins/go-builtins.js +63 -0
- package/dist/registry/builtins/go-builtins.js.map +1 -0
- package/dist/registry/builtins/java-builtins.d.ts +10 -0
- package/dist/registry/builtins/java-builtins.d.ts.map +1 -0
- package/dist/registry/builtins/java-builtins.js +59 -0
- package/dist/registry/builtins/java-builtins.js.map +1 -0
- package/dist/registry/builtins/kotlin-builtins.d.ts +10 -0
- package/dist/registry/builtins/kotlin-builtins.d.ts.map +1 -0
- package/dist/registry/builtins/kotlin-builtins.js +38 -0
- package/dist/registry/builtins/kotlin-builtins.js.map +1 -0
- package/dist/registry/builtins/node-builtins.d.ts +10 -0
- package/dist/registry/builtins/node-builtins.d.ts.map +1 -0
- package/dist/registry/builtins/node-builtins.js +36 -0
- package/dist/registry/builtins/node-builtins.js.map +1 -0
- package/dist/registry/builtins/python-builtins.d.ts +10 -0
- package/dist/registry/builtins/python-builtins.d.ts.map +1 -0
- package/dist/registry/builtins/python-builtins.js +43 -0
- package/dist/registry/builtins/python-builtins.js.map +1 -0
- package/dist/registry/cache.d.ts +53 -0
- package/dist/registry/cache.d.ts.map +1 -0
- package/dist/registry/cache.js +147 -0
- package/dist/registry/cache.js.map +1 -0
- package/dist/registry/go-registry.d.ts +52 -0
- package/dist/registry/go-registry.d.ts.map +1 -0
- package/dist/registry/go-registry.js +148 -0
- package/dist/registry/go-registry.js.map +1 -0
- package/dist/registry/index.d.ts +18 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +21 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/maven-registry.d.ts +57 -0
- package/dist/registry/maven-registry.d.ts.map +1 -0
- package/dist/registry/maven-registry.js +155 -0
- package/dist/registry/maven-registry.js.map +1 -0
- package/dist/registry/npm-registry.d.ts +40 -0
- package/dist/registry/npm-registry.d.ts.map +1 -0
- package/dist/registry/npm-registry.js +155 -0
- package/dist/registry/npm-registry.js.map +1 -0
- package/dist/registry/pypi-registry.d.ts +49 -0
- package/dist/registry/pypi-registry.d.ts.map +1 -0
- package/dist/registry/pypi-registry.js +175 -0
- package/dist/registry/pypi-registry.js.map +1 -0
- package/dist/registry/registry-manager.d.ts +45 -0
- package/dist/registry/registry-manager.d.ts.map +1 -0
- package/dist/registry/registry-manager.js +107 -0
- package/dist/registry/registry-manager.js.map +1 -0
- package/dist/registry/types.d.ts +83 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +12 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/reporter/html-reporter.d.ts +20 -0
- package/dist/reporter/html-reporter.d.ts.map +1 -0
- package/dist/reporter/html-reporter.js +612 -0
- package/dist/reporter/html-reporter.js.map +1 -0
- package/dist/reporter/index.d.ts +28 -0
- package/dist/reporter/index.d.ts.map +1 -0
- package/dist/reporter/index.js +48 -0
- package/dist/reporter/index.js.map +1 -0
- package/dist/reporter/markdown-reporter.d.ts +16 -0
- package/dist/reporter/markdown-reporter.d.ts.map +1 -0
- package/dist/reporter/markdown-reporter.js +182 -0
- package/dist/reporter/markdown-reporter.js.map +1 -0
- package/dist/reporter/sarif-reporter.d.ts +67 -0
- package/dist/reporter/sarif-reporter.d.ts.map +1 -0
- package/dist/reporter/sarif-reporter.js +73 -0
- package/dist/reporter/sarif-reporter.js.map +1 -0
- package/dist/reporter/terminal-reporter.d.ts +14 -0
- package/dist/reporter/terminal-reporter.d.ts.map +1 -0
- package/dist/reporter/terminal-reporter.js +126 -0
- package/dist/reporter/terminal-reporter.js.map +1 -0
- package/dist/reporter/types.d.ts +43 -0
- package/dist/reporter/types.d.ts.map +1 -0
- package/dist/reporter/types.js +10 -0
- package/dist/reporter/types.js.map +1 -0
- package/dist/reporter/v4-html.d.ts +24 -0
- package/dist/reporter/v4-html.d.ts.map +1 -0
- package/dist/reporter/v4-html.js +359 -0
- package/dist/reporter/v4-html.js.map +1 -0
- package/dist/reporter/v4-terminal.d.ts +55 -0
- package/dist/reporter/v4-terminal.d.ts.map +1 -0
- package/dist/reporter/v4-terminal.js +199 -0
- package/dist/reporter/v4-terminal.js.map +1 -0
- package/dist/scanner/index.d.ts +9 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +9 -0
- package/dist/scanner/index.js.map +1 -0
- package/dist/scanner/v4-scanner.d.ts +162 -0
- package/dist/scanner/v4-scanner.d.ts.map +1 -0
- package/dist/scanner/v4-scanner.js +327 -0
- package/dist/scanner/v4-scanner.js.map +1 -0
- package/dist/scorer/report.d.ts +52 -0
- package/dist/scorer/report.d.ts.map +1 -0
- package/dist/scorer/report.js +347 -0
- package/dist/scorer/report.js.map +1 -0
- package/dist/scorer/scoring-engine.d.ts +170 -0
- package/dist/scorer/scoring-engine.d.ts.map +1 -0
- package/dist/scorer/scoring-engine.js +308 -0
- package/dist/scorer/scoring-engine.js.map +1 -0
- package/dist/scorer/v4-adapter.d.ts +87 -0
- package/dist/scorer/v4-adapter.d.ts.map +1 -0
- package/dist/scorer/v4-adapter.js +145 -0
- package/dist/scorer/v4-adapter.js.map +1 -0
- package/dist/sla/index.d.ts +7 -0
- package/dist/sla/index.d.ts.map +1 -0
- package/dist/sla/index.js +6 -0
- package/dist/sla/index.js.map +1 -0
- package/dist/sla/tracker.d.ts +70 -0
- package/dist/sla/tracker.d.ts.map +1 -0
- package/dist/sla/tracker.js +151 -0
- package/dist/sla/tracker.js.map +1 -0
- package/dist/sla/types.d.ts +67 -0
- package/dist/sla/types.d.ts.map +1 -0
- package/dist/sla/types.js +42 -0
- package/dist/sla/types.js.map +1 -0
- package/dist/types.d.ts +172 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +69 -0
- package/dist/types.js.map +1 -0
- 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":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,OAAO,WAAW;IACb,IAAI,GAAG,KAAK,CAAC;IACb,QAAQ,GAAG,YAAY,CAAC;IAEzB,OAAO,CAAS;IAChB,KAAK,CAAU;IACf,OAAO,CAAS;IAChB,QAAQ,CAAS;IACjB,KAAK,CAAgB;IAE7B,YAAY,MAAuB,EAAE,KAAqB;QACxD,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,GAAG,IAAI,4BAA4B,CAAC;QAC3D,IAAI,CAAC,KAAK,GAAG,MAAM,EAAE,KAAK,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,SAAS,IAAI,IAAI,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,eAAe,IAAI,KAAK,CAAC;QACjD,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI,aAAa,EAAE,CAAC;IAC5C,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,MAAM,CAAC,WAAmB;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,+BAA+B;QAC/B,MAAM,cAAc,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;YACpD,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,WAAW,CAAC;QAEhB,IAAI,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,cAAc,EAAE,CAAC,EAAE,CAAC;YACrF,OAAO;gBACL,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,WAAW;gBACjB,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aAC9B,CAAC;QACJ,CAAC;QAED,cAAc;QACd,MAAM,QAAQ,GAAG,OAAO,WAAW,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QACtD,CAAC;QAED,iBAAiB;QACjB,IAAI,CAAC;YACH,+CAA+C;YAC/C,MAAM,WAAW,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC;gBAC7C,CAAC,CAAC,IAAI,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;gBAChD,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAEpC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,WAAW,EAAE,CAAC;YAC7C,MAAM,OAAO,GAA2B;gBACtC,MAAM,EAAE,qCAAqC;aAC9C,CAAC;YACF,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC;YACpD,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,KAAK;gBACb,OAAO;gBACP,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;aAC1C,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YAErC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAwB;oBAClC,MAAM,EAAE,KAAK;oBACb,IAAI,EAAE,WAAW;oBACjB,MAAM,EAAE,UAAU;oBAClB,SAAS;iBACV,CAAC;gBACF,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtD,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,qCAAqC;YACrC,IAAI,OAA2B,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA6B,CAAC;gBAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAuC,CAAC;gBACzE,OAAO,GAAG,QAAQ,EAAE,MAAM,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,mDAAmD;YACrD,CAAC;YAED,MAAM,MAAM,GAAwB;gBAClC,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,WAAW;gBACjB,OAAO;gBACP,MAAM,EAAE,UAAU;gBAClB,SAAS;aACV,CAAC;YACF,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtD,OAAO,MAAM,CAAC;QAEhB,CAAC;QAAC,MAAM,CAAC;YACP,iFAAiF;YACjF,OAAO;gBACL,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,WAAW;gBACjB,MAAM,EAAE,UAAU;gBAClB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aAC9B,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe,CAAC,WAAmB;QACvC,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC;gBAC7C,CAAC,CAAC,IAAI,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;gBAChD,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAEpC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,WAAW,SAAS,CAAC;YACpD,MAAM,OAAO,GAA2B,EAAE,CAAC;YAC3C,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC;YACpD,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,KAAK;gBACb,OAAO;gBACP,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;aAC1C,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA6B,CAAC;YAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAuB,CAAC;YAE5D,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO;oBACL,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,UAAU;iBACpB,CAAC;YACJ,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
|
|
@@ -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"}
|