codesift-mcp 0.2.18 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +143 -20
- package/dist/cache/hono-cache.d.ts +50 -0
- package/dist/cache/hono-cache.d.ts.map +1 -0
- package/dist/cache/hono-cache.js +132 -0
- package/dist/cache/hono-cache.js.map +1 -0
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +17 -2
- package/dist/cli/setup.js.map +1 -1
- package/dist/formatters-shortening.d.ts +13 -0
- package/dist/formatters-shortening.d.ts.map +1 -1
- package/dist/formatters-shortening.js +131 -0
- package/dist/formatters-shortening.js.map +1 -1
- package/dist/formatters.d.ts +38 -0
- package/dist/formatters.d.ts.map +1 -1
- package/dist/formatters.js +498 -0
- package/dist/formatters.js.map +1 -1
- package/dist/instructions.d.ts +1 -1
- package/dist/instructions.d.ts.map +1 -1
- package/dist/instructions.js +27 -26
- package/dist/instructions.js.map +1 -1
- package/dist/lsp/lsp-servers.d.ts.map +1 -1
- package/dist/lsp/lsp-servers.js +5 -0
- package/dist/lsp/lsp-servers.js.map +1 -1
- package/dist/lsp/lsp-tools.d.ts.map +1 -1
- package/dist/lsp/lsp-tools.js +1 -0
- package/dist/lsp/lsp-tools.js.map +1 -1
- package/dist/parser/astro-template.d.ts +47 -0
- package/dist/parser/astro-template.d.ts.map +1 -0
- package/dist/parser/astro-template.js +171 -0
- package/dist/parser/astro-template.js.map +1 -0
- package/dist/parser/extractors/_shared.d.ts +4 -0
- package/dist/parser/extractors/_shared.d.ts.map +1 -1
- package/dist/parser/extractors/_shared.js +8 -0
- package/dist/parser/extractors/_shared.js.map +1 -1
- package/dist/parser/extractors/astro.d.ts +4 -5
- package/dist/parser/extractors/astro.d.ts.map +1 -1
- package/dist/parser/extractors/astro.js +102 -26
- package/dist/parser/extractors/astro.js.map +1 -1
- package/dist/parser/extractors/gradle-kts.d.ts +4 -0
- package/dist/parser/extractors/gradle-kts.d.ts.map +1 -0
- package/dist/parser/extractors/gradle-kts.js +246 -0
- package/dist/parser/extractors/gradle-kts.js.map +1 -0
- package/dist/parser/extractors/hono-inline-analyzer.d.ts +34 -0
- package/dist/parser/extractors/hono-inline-analyzer.d.ts.map +1 -0
- package/dist/parser/extractors/hono-inline-analyzer.js +465 -0
- package/dist/parser/extractors/hono-inline-analyzer.js.map +1 -0
- package/dist/parser/extractors/hono-model.d.ts +196 -0
- package/dist/parser/extractors/hono-model.d.ts.map +1 -0
- package/dist/parser/extractors/hono-model.js +10 -0
- package/dist/parser/extractors/hono-model.js.map +1 -0
- package/dist/parser/extractors/hono.d.ts +118 -0
- package/dist/parser/extractors/hono.d.ts.map +1 -0
- package/dist/parser/extractors/hono.js +1527 -0
- package/dist/parser/extractors/hono.js.map +1 -0
- package/dist/parser/extractors/kotlin.d.ts +4 -0
- package/dist/parser/extractors/kotlin.d.ts.map +1 -0
- package/dist/parser/extractors/kotlin.js +521 -0
- package/dist/parser/extractors/kotlin.js.map +1 -0
- package/dist/parser/extractors/php.d.ts +22 -0
- package/dist/parser/extractors/php.d.ts.map +1 -0
- package/dist/parser/extractors/php.js +326 -0
- package/dist/parser/extractors/php.js.map +1 -0
- package/dist/parser/extractors/python.d.ts.map +1 -1
- package/dist/parser/extractors/python.js +234 -11
- package/dist/parser/extractors/python.js.map +1 -1
- package/dist/parser/extractors/sql.d.ts +33 -0
- package/dist/parser/extractors/sql.d.ts.map +1 -0
- package/dist/parser/extractors/sql.js +506 -0
- package/dist/parser/extractors/sql.js.map +1 -0
- package/dist/parser/extractors/typescript.d.ts.map +1 -1
- package/dist/parser/extractors/typescript.js +166 -3
- package/dist/parser/extractors/typescript.js.map +1 -1
- package/dist/parser/languages/tree-sitter-javascript.wasm +0 -0
- package/dist/parser/languages/tree-sitter-kotlin.wasm +0 -0
- package/dist/parser/languages/tree-sitter-php.wasm +0 -0
- package/dist/parser/languages/tree-sitter-php_only.wasm +0 -0
- package/dist/parser/languages/tree-sitter-python.wasm +0 -0
- package/dist/parser/parser-manager.d.ts +32 -0
- package/dist/parser/parser-manager.d.ts.map +1 -1
- package/dist/parser/parser-manager.js +82 -3
- package/dist/parser/parser-manager.js.map +1 -1
- package/dist/parser/symbol-extractor.d.ts.map +1 -1
- package/dist/parser/symbol-extractor.js +16 -0
- package/dist/parser/symbol-extractor.js.map +1 -1
- package/dist/register-tools.d.ts +37 -1
- package/dist/register-tools.d.ts.map +1 -1
- package/dist/register-tools.js +2657 -191
- package/dist/register-tools.js.map +1 -1
- package/dist/search/reranker.js +1 -1
- package/dist/search/reranker.js.map +1 -1
- package/dist/server-helpers.d.ts.map +1 -1
- package/dist/server-helpers.js +11 -0
- package/dist/server-helpers.js.map +1 -1
- package/dist/server.js +28 -1
- package/dist/server.js.map +1 -1
- package/dist/storage/index-store.d.ts +15 -1
- package/dist/storage/index-store.d.ts.map +1 -1
- package/dist/storage/index-store.js +27 -1
- package/dist/storage/index-store.js.map +1 -1
- package/dist/storage/session-state.d.ts +1 -1
- package/dist/storage/session-state.d.ts.map +1 -1
- package/dist/storage/session-state.js +6 -4
- package/dist/storage/session-state.js.map +1 -1
- package/dist/tools/agent-config-tools.d.ts +24 -0
- package/dist/tools/agent-config-tools.d.ts.map +1 -0
- package/dist/tools/agent-config-tools.js +119 -0
- package/dist/tools/agent-config-tools.js.map +1 -0
- package/dist/tools/architecture-tools.d.ts +23 -0
- package/dist/tools/architecture-tools.d.ts.map +1 -0
- package/dist/tools/architecture-tools.js +140 -0
- package/dist/tools/architecture-tools.js.map +1 -0
- package/dist/tools/astro-config.d.ts +33 -0
- package/dist/tools/astro-config.d.ts.map +1 -0
- package/dist/tools/astro-config.js +260 -0
- package/dist/tools/astro-config.js.map +1 -0
- package/dist/tools/astro-islands.d.ts +61 -0
- package/dist/tools/astro-islands.d.ts.map +1 -0
- package/dist/tools/astro-islands.js +240 -0
- package/dist/tools/astro-islands.js.map +1 -0
- package/dist/tools/astro-routes.d.ts +49 -0
- package/dist/tools/astro-routes.d.ts.map +1 -0
- package/dist/tools/astro-routes.js +119 -0
- package/dist/tools/astro-routes.js.map +1 -0
- package/dist/tools/audit-tools.d.ts +38 -0
- package/dist/tools/audit-tools.d.ts.map +1 -0
- package/dist/tools/audit-tools.js +248 -0
- package/dist/tools/audit-tools.js.map +1 -0
- package/dist/tools/celery-tools.d.ts +38 -0
- package/dist/tools/celery-tools.d.ts.map +1 -0
- package/dist/tools/celery-tools.js +154 -0
- package/dist/tools/celery-tools.js.map +1 -0
- package/dist/tools/clone-tools.js +1 -1
- package/dist/tools/clone-tools.js.map +1 -1
- package/dist/tools/complexity-tools.d.ts +4 -0
- package/dist/tools/complexity-tools.d.ts.map +1 -1
- package/dist/tools/complexity-tools.js +78 -4
- package/dist/tools/complexity-tools.js.map +1 -1
- package/dist/tools/compose-tools.d.ts +60 -0
- package/dist/tools/compose-tools.d.ts.map +1 -0
- package/dist/tools/compose-tools.js +203 -0
- package/dist/tools/compose-tools.js.map +1 -0
- package/dist/tools/coupling-tools.d.ts +50 -0
- package/dist/tools/coupling-tools.d.ts.map +1 -0
- package/dist/tools/coupling-tools.js +262 -0
- package/dist/tools/coupling-tools.js.map +1 -0
- package/dist/tools/dependency-audit-tools.d.ts +65 -0
- package/dist/tools/dependency-audit-tools.d.ts.map +1 -0
- package/dist/tools/dependency-audit-tools.js +553 -0
- package/dist/tools/dependency-audit-tools.js.map +1 -0
- package/dist/tools/django-settings.d.ts +22 -0
- package/dist/tools/django-settings.d.ts.map +1 -0
- package/dist/tools/django-settings.js +301 -0
- package/dist/tools/django-settings.js.map +1 -0
- package/dist/tools/frequency-tools.js +1 -1
- package/dist/tools/frequency-tools.js.map +1 -1
- package/dist/tools/graph-tools.d.ts +8 -2
- package/dist/tools/graph-tools.d.ts.map +1 -1
- package/dist/tools/graph-tools.js +44 -3
- package/dist/tools/graph-tools.js.map +1 -1
- package/dist/tools/hilt-tools.d.ts +55 -0
- package/dist/tools/hilt-tools.d.ts.map +1 -0
- package/dist/tools/hilt-tools.js +258 -0
- package/dist/tools/hilt-tools.js.map +1 -0
- package/dist/tools/hono-analyze-app.d.ts +48 -0
- package/dist/tools/hono-analyze-app.d.ts.map +1 -0
- package/dist/tools/hono-analyze-app.js +102 -0
- package/dist/tools/hono-analyze-app.js.map +1 -0
- package/dist/tools/hono-api-contract.d.ts +22 -0
- package/dist/tools/hono-api-contract.d.ts.map +1 -0
- package/dist/tools/hono-api-contract.js +80 -0
- package/dist/tools/hono-api-contract.js.map +1 -0
- package/dist/tools/hono-conditional-middleware.d.ts +27 -0
- package/dist/tools/hono-conditional-middleware.d.ts.map +1 -0
- package/dist/tools/hono-conditional-middleware.js +62 -0
- package/dist/tools/hono-conditional-middleware.js.map +1 -0
- package/dist/tools/hono-context-flow.d.ts +24 -0
- package/dist/tools/hono-context-flow.d.ts.map +1 -0
- package/dist/tools/hono-context-flow.js +78 -0
- package/dist/tools/hono-context-flow.js.map +1 -0
- package/dist/tools/hono-dead-routes.d.ts +26 -0
- package/dist/tools/hono-dead-routes.d.ts.map +1 -0
- package/dist/tools/hono-dead-routes.js +109 -0
- package/dist/tools/hono-dead-routes.js.map +1 -0
- package/dist/tools/hono-env-regression.d.ts +29 -0
- package/dist/tools/hono-env-regression.d.ts.map +1 -0
- package/dist/tools/hono-env-regression.js +157 -0
- package/dist/tools/hono-env-regression.js.map +1 -0
- package/dist/tools/hono-inline-analyze.d.ts +31 -0
- package/dist/tools/hono-inline-analyze.d.ts.map +1 -0
- package/dist/tools/hono-inline-analyze.js +67 -0
- package/dist/tools/hono-inline-analyze.js.map +1 -0
- package/dist/tools/hono-middleware-chain.d.ts +22 -0
- package/dist/tools/hono-middleware-chain.d.ts.map +1 -0
- package/dist/tools/hono-middleware-chain.js +84 -0
- package/dist/tools/hono-middleware-chain.js.map +1 -0
- package/dist/tools/hono-modules.d.ts +22 -0
- package/dist/tools/hono-modules.d.ts.map +1 -0
- package/dist/tools/hono-modules.js +126 -0
- package/dist/tools/hono-modules.js.map +1 -0
- package/dist/tools/hono-response-types.d.ts +37 -0
- package/dist/tools/hono-response-types.d.ts.map +1 -0
- package/dist/tools/hono-response-types.js +84 -0
- package/dist/tools/hono-response-types.js.map +1 -0
- package/dist/tools/hono-rpc-types.d.ts +21 -0
- package/dist/tools/hono-rpc-types.d.ts.map +1 -0
- package/dist/tools/hono-rpc-types.js +57 -0
- package/dist/tools/hono-rpc-types.js.map +1 -0
- package/dist/tools/hono-security.d.ts +21 -0
- package/dist/tools/hono-security.d.ts.map +1 -0
- package/dist/tools/hono-security.js +98 -0
- package/dist/tools/hono-security.js.map +1 -0
- package/dist/tools/hono-visualize.d.ts +13 -0
- package/dist/tools/hono-visualize.d.ts.map +1 -0
- package/dist/tools/hono-visualize.js +72 -0
- package/dist/tools/hono-visualize.js.map +1 -0
- package/dist/tools/hotspot-tools.d.ts.map +1 -1
- package/dist/tools/hotspot-tools.js +9 -7
- package/dist/tools/hotspot-tools.js.map +1 -1
- package/dist/tools/index-tools.d.ts +17 -0
- package/dist/tools/index-tools.d.ts.map +1 -1
- package/dist/tools/index-tools.js +210 -10
- package/dist/tools/index-tools.js.map +1 -1
- package/dist/tools/kotlin-tools.d.ts +142 -0
- package/dist/tools/kotlin-tools.d.ts.map +1 -0
- package/dist/tools/kotlin-tools.js +572 -0
- package/dist/tools/kotlin-tools.js.map +1 -0
- package/dist/tools/legacy-hono-conventions.d.ts +14 -0
- package/dist/tools/legacy-hono-conventions.d.ts.map +1 -0
- package/dist/tools/legacy-hono-conventions.js +152 -0
- package/dist/tools/legacy-hono-conventions.js.map +1 -0
- package/dist/tools/migration-lint-tools.d.ts +26 -0
- package/dist/tools/migration-lint-tools.d.ts.map +1 -0
- package/dist/tools/migration-lint-tools.js +247 -0
- package/dist/tools/migration-lint-tools.js.map +1 -0
- package/dist/tools/model-tools.d.ts +30 -0
- package/dist/tools/model-tools.d.ts.map +1 -0
- package/dist/tools/model-tools.js +145 -0
- package/dist/tools/model-tools.js.map +1 -0
- package/dist/tools/nest-ext-tools.d.ts +92 -0
- package/dist/tools/nest-ext-tools.d.ts.map +1 -0
- package/dist/tools/nest-ext-tools.js +359 -0
- package/dist/tools/nest-ext-tools.js.map +1 -0
- package/dist/tools/nest-tools.d.ts +171 -0
- package/dist/tools/nest-tools.d.ts.map +1 -0
- package/dist/tools/nest-tools.js +1042 -0
- package/dist/tools/nest-tools.js.map +1 -0
- package/dist/tools/nextjs-api-contract-readers.d.ts +14 -0
- package/dist/tools/nextjs-api-contract-readers.d.ts.map +1 -0
- package/dist/tools/nextjs-api-contract-readers.js +204 -0
- package/dist/tools/nextjs-api-contract-readers.js.map +1 -0
- package/dist/tools/nextjs-api-contract-tools.d.ts +57 -0
- package/dist/tools/nextjs-api-contract-tools.d.ts.map +1 -0
- package/dist/tools/nextjs-api-contract-tools.js +144 -0
- package/dist/tools/nextjs-api-contract-tools.js.map +1 -0
- package/dist/tools/nextjs-boundary-tools.d.ts +39 -0
- package/dist/tools/nextjs-boundary-tools.d.ts.map +1 -0
- package/dist/tools/nextjs-boundary-tools.js +152 -0
- package/dist/tools/nextjs-boundary-tools.js.map +1 -0
- package/dist/tools/nextjs-component-tools.d.ts +121 -0
- package/dist/tools/nextjs-component-tools.d.ts.map +1 -0
- package/dist/tools/nextjs-component-tools.js +460 -0
- package/dist/tools/nextjs-component-tools.js.map +1 -0
- package/dist/tools/nextjs-data-flow-tools.d.ts +42 -0
- package/dist/tools/nextjs-data-flow-tools.d.ts.map +1 -0
- package/dist/tools/nextjs-data-flow-tools.js +158 -0
- package/dist/tools/nextjs-data-flow-tools.js.map +1 -0
- package/dist/tools/nextjs-framework-audit-tools.d.ts +37 -0
- package/dist/tools/nextjs-framework-audit-tools.d.ts.map +1 -0
- package/dist/tools/nextjs-framework-audit-tools.js +211 -0
- package/dist/tools/nextjs-framework-audit-tools.js.map +1 -0
- package/dist/tools/nextjs-link-tools.d.ts +41 -0
- package/dist/tools/nextjs-link-tools.d.ts.map +1 -0
- package/dist/tools/nextjs-link-tools.js +157 -0
- package/dist/tools/nextjs-link-tools.js.map +1 -0
- package/dist/tools/nextjs-metadata-tools.d.ts +74 -0
- package/dist/tools/nextjs-metadata-tools.d.ts.map +1 -0
- package/dist/tools/nextjs-metadata-tools.js +252 -0
- package/dist/tools/nextjs-metadata-tools.js.map +1 -0
- package/dist/tools/nextjs-middleware-coverage-tools.d.ts +41 -0
- package/dist/tools/nextjs-middleware-coverage-tools.d.ts.map +1 -0
- package/dist/tools/nextjs-middleware-coverage-tools.js +88 -0
- package/dist/tools/nextjs-middleware-coverage-tools.js.map +1 -0
- package/dist/tools/nextjs-route-tools.d.ts +100 -0
- package/dist/tools/nextjs-route-tools.d.ts.map +1 -0
- package/dist/tools/nextjs-route-tools.js +493 -0
- package/dist/tools/nextjs-route-tools.js.map +1 -0
- package/dist/tools/nextjs-security-readers.d.ts +22 -0
- package/dist/tools/nextjs-security-readers.d.ts.map +1 -0
- package/dist/tools/nextjs-security-readers.js +318 -0
- package/dist/tools/nextjs-security-readers.js.map +1 -0
- package/dist/tools/nextjs-security-scoring.d.ts +15 -0
- package/dist/tools/nextjs-security-scoring.d.ts.map +1 -0
- package/dist/tools/nextjs-security-scoring.js +65 -0
- package/dist/tools/nextjs-security-scoring.js.map +1 -0
- package/dist/tools/nextjs-security-tools.d.ts +75 -0
- package/dist/tools/nextjs-security-tools.d.ts.map +1 -0
- package/dist/tools/nextjs-security-tools.js +153 -0
- package/dist/tools/nextjs-security-tools.js.map +1 -0
- package/dist/tools/nextjs-tools.d.ts +15 -0
- package/dist/tools/nextjs-tools.d.ts.map +1 -0
- package/dist/tools/nextjs-tools.js +15 -0
- package/dist/tools/nextjs-tools.js.map +1 -0
- package/dist/tools/outline-tools.d.ts.map +1 -1
- package/dist/tools/outline-tools.js +20 -0
- package/dist/tools/outline-tools.js.map +1 -1
- package/dist/tools/pattern-tools.d.ts +8 -0
- package/dist/tools/pattern-tools.d.ts.map +1 -1
- package/dist/tools/pattern-tools.js +561 -3
- package/dist/tools/pattern-tools.js.map +1 -1
- package/dist/tools/perf-tools.d.ts +32 -0
- package/dist/tools/perf-tools.d.ts.map +1 -0
- package/dist/tools/perf-tools.js +227 -0
- package/dist/tools/perf-tools.js.map +1 -0
- package/dist/tools/php-tools.d.ts +176 -0
- package/dist/tools/php-tools.d.ts.map +1 -0
- package/dist/tools/php-tools.js +543 -0
- package/dist/tools/php-tools.js.map +1 -0
- package/dist/tools/prisma-schema-tools.d.ts +44 -0
- package/dist/tools/prisma-schema-tools.d.ts.map +1 -0
- package/dist/tools/prisma-schema-tools.js +358 -0
- package/dist/tools/prisma-schema-tools.js.map +1 -0
- package/dist/tools/project-tools.d.ts +115 -6
- package/dist/tools/project-tools.d.ts.map +1 -1
- package/dist/tools/project-tools.js +594 -217
- package/dist/tools/project-tools.js.map +1 -1
- package/dist/tools/pyproject-tools.d.ts +23 -0
- package/dist/tools/pyproject-tools.d.ts.map +1 -0
- package/dist/tools/pyproject-tools.js +133 -0
- package/dist/tools/pyproject-tools.js.map +1 -0
- package/dist/tools/pytest-tools.d.ts +20 -0
- package/dist/tools/pytest-tools.d.ts.map +1 -0
- package/dist/tools/pytest-tools.js +106 -0
- package/dist/tools/pytest-tools.js.map +1 -0
- package/dist/tools/python-callers.d.ts +28 -0
- package/dist/tools/python-callers.d.ts.map +1 -0
- package/dist/tools/python-callers.js +110 -0
- package/dist/tools/python-callers.js.map +1 -0
- package/dist/tools/python-circular-imports.d.ts +19 -0
- package/dist/tools/python-circular-imports.d.ts.map +1 -0
- package/dist/tools/python-circular-imports.js +126 -0
- package/dist/tools/python-circular-imports.js.map +1 -0
- package/dist/tools/python-deps-analyzer.d.ts +46 -0
- package/dist/tools/python-deps-analyzer.d.ts.map +1 -0
- package/dist/tools/python-deps-analyzer.js +227 -0
- package/dist/tools/python-deps-analyzer.js.map +1 -0
- package/dist/tools/query-tools.d.ts +23 -0
- package/dist/tools/query-tools.d.ts.map +1 -0
- package/dist/tools/query-tools.js +256 -0
- package/dist/tools/query-tools.js.map +1 -0
- package/dist/tools/react-tools.d.ts +218 -0
- package/dist/tools/react-tools.d.ts.map +1 -0
- package/dist/tools/react-tools.js +714 -0
- package/dist/tools/react-tools.js.map +1 -0
- package/dist/tools/report-tools.js +47 -0
- package/dist/tools/report-tools.js.map +1 -1
- package/dist/tools/review-diff-tools.d.ts +2 -6
- package/dist/tools/review-diff-tools.d.ts.map +1 -1
- package/dist/tools/review-diff-tools.js +51 -66
- package/dist/tools/review-diff-tools.js.map +1 -1
- package/dist/tools/room-tools.d.ts +36 -0
- package/dist/tools/room-tools.d.ts.map +1 -0
- package/dist/tools/room-tools.js +147 -0
- package/dist/tools/room-tools.js.map +1 -0
- package/dist/tools/route-tools.d.ts +27 -1
- package/dist/tools/route-tools.d.ts.map +1 -1
- package/dist/tools/route-tools.js +744 -18
- package/dist/tools/route-tools.js.map +1 -1
- package/dist/tools/ruff-tools.d.ts +32 -0
- package/dist/tools/ruff-tools.d.ts.map +1 -0
- package/dist/tools/ruff-tools.js +114 -0
- package/dist/tools/ruff-tools.js.map +1 -0
- package/dist/tools/search-ranker.d.ts.map +1 -1
- package/dist/tools/search-ranker.js +7 -0
- package/dist/tools/search-ranker.js.map +1 -1
- package/dist/tools/serialization-tools.d.ts +24 -0
- package/dist/tools/serialization-tools.d.ts.map +1 -0
- package/dist/tools/serialization-tools.js +156 -0
- package/dist/tools/serialization-tools.js.map +1 -0
- package/dist/tools/sql-tools.d.ts +234 -0
- package/dist/tools/sql-tools.d.ts.map +1 -0
- package/dist/tools/sql-tools.js +1037 -0
- package/dist/tools/sql-tools.js.map +1 -0
- package/dist/tools/status-tools.d.ts +10 -0
- package/dist/tools/status-tools.d.ts.map +1 -0
- package/dist/tools/status-tools.js +32 -0
- package/dist/tools/status-tools.js.map +1 -0
- package/dist/tools/symbol-tools.d.ts +19 -0
- package/dist/tools/symbol-tools.d.ts.map +1 -1
- package/dist/tools/symbol-tools.js +78 -4
- package/dist/tools/symbol-tools.js.map +1 -1
- package/dist/tools/test-impact-tools.d.ts +29 -0
- package/dist/tools/test-impact-tools.d.ts.map +1 -0
- package/dist/tools/test-impact-tools.js +156 -0
- package/dist/tools/test-impact-tools.js.map +1 -0
- package/dist/tools/typecheck-tools.d.ts +39 -0
- package/dist/tools/typecheck-tools.d.ts.map +1 -0
- package/dist/tools/typecheck-tools.js +191 -0
- package/dist/tools/typecheck-tools.js.map +1 -0
- package/dist/tools/wiring-tools.d.ts +19 -0
- package/dist/tools/wiring-tools.d.ts.map +1 -0
- package/dist/tools/wiring-tools.js +147 -0
- package/dist/tools/wiring-tools.js.map +1 -0
- package/dist/types.d.ts +9 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/framework-detect.d.ts +18 -2
- package/dist/utils/framework-detect.d.ts.map +1 -1
- package/dist/utils/framework-detect.js +150 -3
- package/dist/utils/framework-detect.js.map +1 -1
- package/dist/utils/import-graph.d.ts +36 -0
- package/dist/utils/import-graph.d.ts.map +1 -1
- package/dist/utils/import-graph.js +212 -9
- package/dist/utils/import-graph.js.map +1 -1
- package/dist/utils/language-detect.d.ts +21 -0
- package/dist/utils/language-detect.d.ts.map +1 -0
- package/dist/utils/language-detect.js +183 -0
- package/dist/utils/language-detect.js.map +1 -0
- package/dist/utils/nextjs-ast-readers.d.ts +44 -0
- package/dist/utils/nextjs-ast-readers.d.ts.map +1 -0
- package/dist/utils/nextjs-ast-readers.js +341 -0
- package/dist/utils/nextjs-ast-readers.js.map +1 -0
- package/dist/utils/nextjs-audit-cache.d.ts +51 -0
- package/dist/utils/nextjs-audit-cache.d.ts.map +1 -0
- package/dist/utils/nextjs-audit-cache.js +116 -0
- package/dist/utils/nextjs-audit-cache.js.map +1 -0
- package/dist/utils/nextjs-metadata-readers.d.ts +65 -0
- package/dist/utils/nextjs-metadata-readers.d.ts.map +1 -0
- package/dist/utils/nextjs-metadata-readers.js +447 -0
- package/dist/utils/nextjs-metadata-readers.js.map +1 -0
- package/dist/utils/nextjs.d.ts +42 -0
- package/dist/utils/nextjs.d.ts.map +1 -0
- package/dist/utils/nextjs.js +284 -0
- package/dist/utils/nextjs.js.map +1 -0
- package/dist/utils/python-import-resolver.d.ts +42 -0
- package/dist/utils/python-import-resolver.d.ts.map +1 -0
- package/dist/utils/python-import-resolver.js +101 -0
- package/dist/utils/python-import-resolver.js.map +1 -0
- package/dist/utils/python-imports.d.ts +28 -0
- package/dist/utils/python-imports.d.ts.map +1 -0
- package/dist/utils/python-imports.js +117 -0
- package/dist/utils/python-imports.js.map +1 -0
- package/dist/utils/react-alias.d.ts +15 -0
- package/dist/utils/react-alias.d.ts.map +1 -0
- package/dist/utils/react-alias.js +31 -0
- package/dist/utils/react-alias.js.map +1 -0
- package/dist/utils/test-file.d.ts.map +1 -1
- package/dist/utils/test-file.js +7 -0
- package/dist/utils/test-file.js.map +1 -1
- package/dist/utils/walk.d.ts +22 -0
- package/dist/utils/walk.d.ts.map +1 -1
- package/dist/utils/walk.js +70 -2
- package/dist/utils/walk.js.map +1 -1
- package/package.json +3 -2
- package/rules/codesift.md +34 -5
- package/rules/codesift.mdc +34 -5
- package/rules/codex.md +34 -5
- package/rules/gemini.md +34 -5
- package/src/parser/languages/tree-sitter-javascript.wasm +0 -0
- package/src/parser/languages/tree-sitter-kotlin.wasm +0 -0
- package/src/parser/languages/tree-sitter-php.wasm +0 -0
- package/src/parser/languages/tree-sitter-php_only.wasm +0 -0
- package/src/parser/languages/tree-sitter-python.wasm +0 -0
|
@@ -1,3 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kotlin/Android annotations that mark a symbol as referenced by the runtime
|
|
3
|
+
* rather than by static imports. `find_dead_code` must treat these as live
|
|
4
|
+
* because Hilt (reflection), Compose (tooling), Room (KSP), kotlinx.serialization
|
|
5
|
+
* (JSON), and JUnit/Kotest (runner) all instantiate or invoke symbols outside
|
|
6
|
+
* the normal call graph.
|
|
7
|
+
*/
|
|
8
|
+
export const KOTLIN_FRAMEWORK_ANNOTATIONS = new Set([
|
|
9
|
+
// Hilt / Dagger DI
|
|
10
|
+
"HiltViewModel", "HiltAndroidApp", "AndroidEntryPoint",
|
|
11
|
+
"Inject", "Module", "Provides", "Binds", "InstallIn", "Singleton",
|
|
12
|
+
// Jetpack Compose + Compose tooling
|
|
13
|
+
"Composable", "Preview", "PreviewParameter",
|
|
14
|
+
// kotlinx.serialization
|
|
15
|
+
"Serializable", "SerialName", "Transient",
|
|
16
|
+
// Room persistence
|
|
17
|
+
"Entity", "Dao", "Database", "Query", "Insert", "Update", "Delete",
|
|
18
|
+
"TypeConverter", "TypeConverters", "PrimaryKey", "Embedded", "Relation",
|
|
19
|
+
// Android framework entry points
|
|
20
|
+
"Keep", "JvmStatic", "JvmOverloads", "JvmName", "JvmField",
|
|
21
|
+
// Test runners (JUnit4/5 + Kotest)
|
|
22
|
+
"Test", "BeforeEach", "AfterEach", "BeforeAll", "AfterAll",
|
|
23
|
+
"Before", "After", "BeforeClass", "AfterClass",
|
|
24
|
+
"ParameterizedTest", "RepeatedTest",
|
|
25
|
+
// Kotlin Multiplatform
|
|
26
|
+
"JsExport", "ObjCName", "Throws",
|
|
27
|
+
]);
|
|
1
28
|
const NEXT_ROUTE_FILE = /(^|\/)app\/.*\/route\.[jt]sx?$/;
|
|
2
29
|
const NEXT_APP_FILE = /(^|\/)app\/.+\.[jt]sx?$/;
|
|
3
30
|
const NEXT_PAGES_FILE = /(^|\/)pages\/.+\.[jt]sx?$/;
|
|
@@ -5,6 +32,26 @@ const NEXT_MIDDLEWARE_FILE = /(^|\/)middleware\.[jt]sx?$/;
|
|
|
5
32
|
const NEXT_ROUTE_METHODS = /^(GET|POST|PUT|DELETE|PATCH|HEAD|OPTIONS)$/;
|
|
6
33
|
const NEXT_PAGES_DATA_FUNCTIONS = /^(getServerSideProps|getStaticProps|getStaticPaths)$/;
|
|
7
34
|
const NEXT_APP_METADATA_FUNCTIONS = /^(generateMetadata|generateStaticParams)$/;
|
|
35
|
+
/** Next.js config exports that are framework entry points (not dead code) */
|
|
36
|
+
const NEXT_CONFIG_EXPORTS = /^(metadata|viewport|dynamic|revalidate|runtime|preferredRegion|maxDuration|fetchCache|dynamicParams)$/;
|
|
37
|
+
/** NestJS lifecycle hooks + decorator-based entry points */
|
|
38
|
+
const NESTJS_LIFECYCLE = /^(onModuleInit|onModuleDestroy|onApplicationBootstrap|onApplicationShutdown|beforeApplicationShutdown|handleCron|handleInterval|handleTimeout|handleEvent)$/;
|
|
39
|
+
const NESTJS_ENTRY_FILE = /\.(controller|resolver|gateway|guard|interceptor|pipe|filter)\.[jt]sx?$/;
|
|
40
|
+
const NESTJS_MAIN_FILE = /(^|\/)main\.[jt]sx?$/;
|
|
41
|
+
/** Astro file-based routing — pages/ directory with .astro, .ts, or .js files */
|
|
42
|
+
const ASTRO_PAGES_FILE = /(^|\/)src\/pages\/.+\.(astro|[jt]sx?)$/;
|
|
43
|
+
/** Astro special exports that the framework consumes implicitly */
|
|
44
|
+
const ASTRO_ENTRY_SYMBOLS = /^(getStaticPaths|prerender|GET|POST|PUT|DELETE|PATCH)$/;
|
|
45
|
+
/** React/Next.js app router file conventions — these are route entry points */
|
|
46
|
+
const REACT_ROUTE_FILE = /(^|\/)(pages|app)\/.*\.(tsx|jsx)$/;
|
|
47
|
+
/** Special Next.js/Remix file names that are always entry points regardless of export name */
|
|
48
|
+
const REACT_SPECIAL_FILE = /(^|\/)(page|layout|loading|error|not-found|global-error|default|template|head)\.(tsx|jsx)$/;
|
|
49
|
+
/** Remix convention: routes/ directory with file-based routing */
|
|
50
|
+
const REMIX_ROUTE_FILE = /(^|\/)routes\/.*\.(tsx|jsx)$/;
|
|
51
|
+
/** Exported for testing — matches next.config.{js,mjs,cjs,ts} at root or src/ */
|
|
52
|
+
export const NEXT_CONFIG_FILE = /^(src\/)?next\.config\.[mc]?[jt]s$/;
|
|
53
|
+
/** Exported for testing — App Router convention files */
|
|
54
|
+
export const NEXT_APP_CONVENTION_FILE = /(^|\/)app\/(.*\/)?(page|layout|loading|error|not-found|global-error|default|template|route)\.[jt]sx?$/;
|
|
8
55
|
export function detectFrameworks(index) {
|
|
9
56
|
const frameworks = new Set();
|
|
10
57
|
// Sample first 200 symbols' source for framework indicators
|
|
@@ -13,14 +60,80 @@ export function detectFrameworks(index) {
|
|
|
13
60
|
frameworks.add("nestjs");
|
|
14
61
|
if (sources.includes("from 'react'") || sources.includes('from "react"') || sources.includes("useState"))
|
|
15
62
|
frameworks.add("react");
|
|
16
|
-
if (index.files.some((f) => f.path.includes("app/api/") && f.path.endsWith("route.ts")))
|
|
17
|
-
frameworks.add("nextjs");
|
|
18
63
|
if (sources.includes("express()") || sources.includes("Router()"))
|
|
19
64
|
frameworks.add("express");
|
|
65
|
+
// Hono detection: check symbol sources for new Hono() / new OpenAPIHono() instantiation,
|
|
66
|
+
// or import statements (captured in some extractor flows), or hono/factory createApp
|
|
67
|
+
if (/new\s+(?:Hono|OpenAPIHono)\s*(?:<[^>]*>)?\s*\(/.test(sources) ||
|
|
68
|
+
sources.includes("from 'hono'") ||
|
|
69
|
+
sources.includes('from "hono"') ||
|
|
70
|
+
sources.includes("from '@hono/zod-openapi'") ||
|
|
71
|
+
sources.includes('from "@hono/zod-openapi"') ||
|
|
72
|
+
sources.includes("factory.createApp")) {
|
|
73
|
+
frameworks.add("hono");
|
|
74
|
+
}
|
|
75
|
+
if (sources.includes("from 'astro'") || sources.includes('from "astro"') || sources.includes("from 'astro:") || sources.includes('from "astro:') || index.files.some((f) => f.path.endsWith(".astro")))
|
|
76
|
+
frameworks.add("astro");
|
|
77
|
+
// Kotlin/Android detection: any .kt file is a signal. The annotation
|
|
78
|
+
// whitelist kicks in across all Kotlin symbols regardless of whether Hilt
|
|
79
|
+
// is actually in use — the cost of a false negative (flagging @HiltViewModel
|
|
80
|
+
// as dead code) is much higher than the cost of a false positive (allowing
|
|
81
|
+
// a few annotated symbols through when the project isn't Android).
|
|
82
|
+
if (index.files.some((f) => f.path.endsWith(".kt") || f.path.endsWith(".kts"))) {
|
|
83
|
+
frameworks.add("kotlin-android");
|
|
84
|
+
}
|
|
85
|
+
// Next.js detection: broadened to cover config file, pages/ dir, and App Router conventions
|
|
86
|
+
const hasNextConfig = index.files.some((f) => NEXT_CONFIG_FILE.test(f.path));
|
|
87
|
+
const hasPagesDir = index.files.some((f) => NEXT_PAGES_FILE.test(f.path) && /\.[jt]sx?$/.test(f.path));
|
|
88
|
+
const hasAppConvention = index.files.some((f) => NEXT_APP_CONVENTION_FILE.test(f.path));
|
|
89
|
+
if (hasNextConfig || hasPagesDir || hasAppConvention) {
|
|
90
|
+
frameworks.add("nextjs");
|
|
91
|
+
}
|
|
20
92
|
frameworks.add("test"); // always include test patterns
|
|
21
93
|
return frameworks;
|
|
22
94
|
}
|
|
23
|
-
export function isFrameworkEntryPoint(symbol, frameworks) {
|
|
95
|
+
export function isFrameworkEntryPoint(symbol, frameworks, honoModel) {
|
|
96
|
+
// Kotlin/Android: whitelisted annotations mark a symbol as runtime-referenced
|
|
97
|
+
// (Hilt, Compose, Room, serialization, Android entry points, JUnit).
|
|
98
|
+
if (frameworks.has("kotlin-android") && (symbol.file.endsWith(".kt") || symbol.file.endsWith(".kts"))) {
|
|
99
|
+
const decorators = symbol.decorators;
|
|
100
|
+
if (decorators && decorators.length > 0) {
|
|
101
|
+
for (const decorator of decorators) {
|
|
102
|
+
if (KOTLIN_FRAMEWORK_ANNOTATIONS.has(decorator))
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Fallback for symbols where the extractor didn't surface decorators yet:
|
|
107
|
+
// scan the first 400 chars of source for any whitelisted @Annotation.
|
|
108
|
+
// Cheaper than re-parsing and keeps correctness as the extractor evolves.
|
|
109
|
+
const head = symbol.source?.slice(0, 400);
|
|
110
|
+
if (head) {
|
|
111
|
+
for (const annotation of KOTLIN_FRAMEWORK_ANNOTATIONS) {
|
|
112
|
+
// Word-boundary match against "@Annotation" to avoid false matches on
|
|
113
|
+
// @HiltViewModelInternal or similar.
|
|
114
|
+
const re = new RegExp(`@${annotation}\\b`);
|
|
115
|
+
if (re.test(head))
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (frameworks.has("hono") && honoModel) {
|
|
121
|
+
// Symbol is in a file that the HonoExtractor reached
|
|
122
|
+
if (honoModel.files_used.includes(symbol.file)) {
|
|
123
|
+
// Handler function referenced by a route
|
|
124
|
+
if (honoModel.routes.some((r) => r.handler.name === symbol.name))
|
|
125
|
+
return true;
|
|
126
|
+
// Middleware referenced in any chain
|
|
127
|
+
if (honoModel.middleware_chains.some((mc) => mc.entries.some((e) => e.name === symbol.name)))
|
|
128
|
+
return true;
|
|
129
|
+
// Sub-app variable mounted via app.route()
|
|
130
|
+
if (honoModel.mounts.some((m) => m.child_var === symbol.name))
|
|
131
|
+
return true;
|
|
132
|
+
// The root Hono app variable itself
|
|
133
|
+
if (honoModel.app_variables[symbol.name])
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
24
137
|
if (frameworks.has("nextjs")) {
|
|
25
138
|
if (NEXT_ROUTE_FILE.test(symbol.file) && NEXT_ROUTE_METHODS.test(symbol.name))
|
|
26
139
|
return true;
|
|
@@ -30,6 +143,40 @@ export function isFrameworkEntryPoint(symbol, frameworks) {
|
|
|
30
143
|
return true;
|
|
31
144
|
if (NEXT_APP_FILE.test(symbol.file) && NEXT_APP_METADATA_FUNCTIONS.test(symbol.name))
|
|
32
145
|
return true;
|
|
146
|
+
if (NEXT_APP_FILE.test(symbol.file) && NEXT_CONFIG_EXPORTS.test(symbol.name))
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
if (frameworks.has("nestjs")) {
|
|
150
|
+
if (NESTJS_LIFECYCLE.test(symbol.name))
|
|
151
|
+
return true;
|
|
152
|
+
if (NESTJS_ENTRY_FILE.test(symbol.file))
|
|
153
|
+
return true;
|
|
154
|
+
if (NESTJS_MAIN_FILE.test(symbol.file) && symbol.name === "bootstrap")
|
|
155
|
+
return true;
|
|
156
|
+
}
|
|
157
|
+
if (frameworks.has("astro")) {
|
|
158
|
+
if (ASTRO_PAGES_FILE.test(symbol.file))
|
|
159
|
+
return true;
|
|
160
|
+
if (ASTRO_ENTRY_SYMBOLS.test(symbol.name))
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
// React route/layout components: any default export from a routed file
|
|
164
|
+
// (pages/, app/, or routes/) is an entry point — the framework renders it
|
|
165
|
+
// based on file path, not via explicit import. Without this, find_dead_code
|
|
166
|
+
// flags them as unused.
|
|
167
|
+
if (frameworks.has("react") || frameworks.has("nextjs")) {
|
|
168
|
+
if (REACT_SPECIAL_FILE.test(symbol.file))
|
|
169
|
+
return true;
|
|
170
|
+
if (REACT_ROUTE_FILE.test(symbol.file))
|
|
171
|
+
return true;
|
|
172
|
+
if (REMIX_ROUTE_FILE.test(symbol.file))
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
// RSC boundary: "use client" / "use server" directive → framework entry point
|
|
176
|
+
if (symbol.source && (frameworks.has("react") || frameworks.has("nextjs"))) {
|
|
177
|
+
const head = symbol.source.slice(0, 200);
|
|
178
|
+
if (/['"]use client['"]/.test(head) || /['"]use server['"]/.test(head))
|
|
179
|
+
return true;
|
|
33
180
|
}
|
|
34
181
|
return false;
|
|
35
182
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"framework-detect.js","sourceRoot":"","sources":["../../src/utils/framework-detect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"framework-detect.js","sourceRoot":"","sources":["../../src/utils/framework-detect.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,9 @@ import type { CodeIndex } from "../types.js";
|
|
|
2
2
|
export interface ImportEdge {
|
|
3
3
|
from: string;
|
|
4
4
|
to: string;
|
|
5
|
+
type_only?: boolean;
|
|
6
|
+
star_import?: boolean;
|
|
7
|
+
raw?: string;
|
|
5
8
|
}
|
|
6
9
|
/**
|
|
7
10
|
* Extract import paths from a source string.
|
|
@@ -13,6 +16,37 @@ export declare function extractImports(source: string): string[];
|
|
|
13
16
|
* Resolves "./foo" and "../bar" relative to the importer's directory.
|
|
14
17
|
*/
|
|
15
18
|
export declare function resolveImportPath(importerFile: string, importPath: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Extract PHP `use` statements (FQCN imports).
|
|
21
|
+
* Returns fully-qualified class/namespace names without the leading backslash.
|
|
22
|
+
* These are NOT file paths — they require PSR-4 resolution against composer.json.
|
|
23
|
+
*/
|
|
24
|
+
export declare function extractPhpUseStatements(source: string): string[];
|
|
25
|
+
/**
|
|
26
|
+
* Extract Kotlin `import` statements (fully-qualified names).
|
|
27
|
+
* Returns dot-separated package + class names. Wildcards (`com.example.*`) are
|
|
28
|
+
* preserved as-is. These are NOT file paths — they require heuristic resolution
|
|
29
|
+
* against the source root (usually `src/main/kotlin`, `src/commonMain/kotlin`, etc.).
|
|
30
|
+
*/
|
|
31
|
+
export declare function extractKotlinImports(source: string): string[];
|
|
32
|
+
/**
|
|
33
|
+
* Heuristically resolve a Kotlin fully-qualified import to an indexed file.
|
|
34
|
+
* Strategy: match the last segment of the FQN (the simple class name) against
|
|
35
|
+
* file basenames. For `com.example.service.UserService`, tries to find a file
|
|
36
|
+
* whose basename (without .kt/.kts) is `UserService` AND whose path contains
|
|
37
|
+
* the package path `com/example/service`.
|
|
38
|
+
*
|
|
39
|
+
* Returns the matched file path or null if no match.
|
|
40
|
+
*
|
|
41
|
+
* Limitations: single-repo heuristic. Doesn't handle wildcard imports
|
|
42
|
+
* (`com.example.*`) or multi-module setups with complex source roots.
|
|
43
|
+
*/
|
|
44
|
+
export declare function resolveKotlinImport(fqName: string, kotlinFilesByBasename: Map<string, string[]>): string | null;
|
|
45
|
+
/**
|
|
46
|
+
* Build a lookup map from Kotlin file basenames (without extension) to file paths.
|
|
47
|
+
* Used by resolveKotlinImport for heuristic FQN resolution.
|
|
48
|
+
*/
|
|
49
|
+
export declare function buildKotlinFilesByBasename(index: CodeIndex): Map<string, string[]>;
|
|
16
50
|
/**
|
|
17
51
|
* Build normalized path map for matching imports to indexed files.
|
|
18
52
|
*/
|
|
@@ -20,6 +54,8 @@ export declare function buildNormalizedPathMap(index: CodeIndex): Map<string, st
|
|
|
20
54
|
/**
|
|
21
55
|
* Collect all import edges between files in the index.
|
|
22
56
|
* Reads file source from disk to extract import statements.
|
|
57
|
+
* Handles JS/TS/PHP relative imports AND Kotlin fully-qualified imports
|
|
58
|
+
* (via heuristic basename + package-path matching).
|
|
23
59
|
*/
|
|
24
60
|
export declare function collectImportEdges(index: CodeIndex, fileFilter?: Set<string>): Promise<ImportEdge[]>;
|
|
25
61
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-graph.d.ts","sourceRoot":"","sources":["../../src/utils/import-graph.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"import-graph.d.ts","sourceRoot":"","sources":["../../src/utils/import-graph.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAM7C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA4BD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAevD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAoBlF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAShE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAS7D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAC3C,MAAM,GAAG,IAAI,CA8Bf;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAelF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAc5E;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,SAAS,EAChB,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GACvB,OAAO,CAAC,UAAU,EAAE,CAAC,CA6HvB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAYlF"}
|
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { readFile } from "node:fs/promises";
|
|
5
5
|
import { join } from "node:path";
|
|
6
|
+
import { getParser } from "../parser/parser-manager.js";
|
|
7
|
+
import { extractPythonImports } from "./python-imports.js";
|
|
8
|
+
import { resolvePythonImport, detectSrcLayout } from "./python-import-resolver.js";
|
|
9
|
+
import { resolvePhpNamespace } from "../tools/php-tools.js";
|
|
6
10
|
// Patterns for detecting import statements across common languages
|
|
7
11
|
const IMPORT_PATTERNS = [
|
|
8
12
|
// ES modules: import ... from '...' or import ... from "..."
|
|
@@ -11,7 +15,21 @@ const IMPORT_PATTERNS = [
|
|
|
11
15
|
/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,
|
|
12
16
|
// CommonJS: require('...')
|
|
13
17
|
/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,
|
|
18
|
+
// PHP: require/include with relative path string: require __DIR__ . '/helpers.php';
|
|
19
|
+
/(?:require|include)(?:_once)?\s*\(?\s*(?:__DIR__\s*\.\s*)?['"](\.\.?\/[^'"]+\.php)['"]/g,
|
|
14
20
|
];
|
|
21
|
+
// Patterns for extracting PHP `use` statements (FQCN imports — PSR-4 based).
|
|
22
|
+
// These are NOT file paths; they need PSR-4 resolution via composer.json.
|
|
23
|
+
// Exposed separately so the resolver tool can opt-in.
|
|
24
|
+
// Accepts both UpperCase (PSR-1/2 modern) and lowercase (common in older
|
|
25
|
+
// Yii2 apps: `use app\models\Survey`) namespaces. The FQCN must contain at
|
|
26
|
+
// least one backslash to exclude global/function `use` statements like
|
|
27
|
+
// `use Closure;` which would be false positives for the import graph.
|
|
28
|
+
const PHP_USE_PATTERN = /^\s*use\s+(\w+(?:\\\w+)+)(?:\s+as\s+\w+)?\s*;/gm;
|
|
29
|
+
// Patterns for extracting Kotlin `import` statements (fully-qualified names).
|
|
30
|
+
// These are NOT file paths; they need heuristic resolution against source roots.
|
|
31
|
+
// Matches: `import com.example.UserService`, `import com.example.*`, `import com.example.Foo as Bar`
|
|
32
|
+
const KOTLIN_IMPORT_PATTERN = /^\s*import\s+([\w.]+(?:\.\*)?)(?:\s+as\s+\w+)?\s*$/gm;
|
|
15
33
|
/**
|
|
16
34
|
* Extract import paths from a source string.
|
|
17
35
|
* Returns relative paths only (skips node_modules / bare specifiers).
|
|
@@ -50,34 +68,167 @@ export function resolveImportPath(importerFile, importPath) {
|
|
|
50
68
|
}
|
|
51
69
|
}
|
|
52
70
|
let resolved = parts.join("/");
|
|
53
|
-
resolved = resolved.replace(/\.(ts|tsx|js|jsx|mjs|cjs)$/, "");
|
|
71
|
+
resolved = resolved.replace(/\.(astro|ts|tsx|js|jsx|mjs|cjs|php)$/, "");
|
|
54
72
|
return resolved;
|
|
55
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Extract PHP `use` statements (FQCN imports).
|
|
76
|
+
* Returns fully-qualified class/namespace names without the leading backslash.
|
|
77
|
+
* These are NOT file paths — they require PSR-4 resolution against composer.json.
|
|
78
|
+
*/
|
|
79
|
+
export function extractPhpUseStatements(source) {
|
|
80
|
+
const uses = new Set();
|
|
81
|
+
PHP_USE_PATTERN.lastIndex = 0;
|
|
82
|
+
let match;
|
|
83
|
+
while ((match = PHP_USE_PATTERN.exec(source)) !== null) {
|
|
84
|
+
const fqcn = match[1]?.replace(/^\\/, "");
|
|
85
|
+
if (fqcn)
|
|
86
|
+
uses.add(fqcn);
|
|
87
|
+
}
|
|
88
|
+
return [...uses];
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Extract Kotlin `import` statements (fully-qualified names).
|
|
92
|
+
* Returns dot-separated package + class names. Wildcards (`com.example.*`) are
|
|
93
|
+
* preserved as-is. These are NOT file paths — they require heuristic resolution
|
|
94
|
+
* against the source root (usually `src/main/kotlin`, `src/commonMain/kotlin`, etc.).
|
|
95
|
+
*/
|
|
96
|
+
export function extractKotlinImports(source) {
|
|
97
|
+
const imports = new Set();
|
|
98
|
+
KOTLIN_IMPORT_PATTERN.lastIndex = 0;
|
|
99
|
+
let match;
|
|
100
|
+
while ((match = KOTLIN_IMPORT_PATTERN.exec(source)) !== null) {
|
|
101
|
+
const fqName = match[1];
|
|
102
|
+
if (fqName)
|
|
103
|
+
imports.add(fqName);
|
|
104
|
+
}
|
|
105
|
+
return [...imports];
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Heuristically resolve a Kotlin fully-qualified import to an indexed file.
|
|
109
|
+
* Strategy: match the last segment of the FQN (the simple class name) against
|
|
110
|
+
* file basenames. For `com.example.service.UserService`, tries to find a file
|
|
111
|
+
* whose basename (without .kt/.kts) is `UserService` AND whose path contains
|
|
112
|
+
* the package path `com/example/service`.
|
|
113
|
+
*
|
|
114
|
+
* Returns the matched file path or null if no match.
|
|
115
|
+
*
|
|
116
|
+
* Limitations: single-repo heuristic. Doesn't handle wildcard imports
|
|
117
|
+
* (`com.example.*`) or multi-module setups with complex source roots.
|
|
118
|
+
*/
|
|
119
|
+
export function resolveKotlinImport(fqName, kotlinFilesByBasename) {
|
|
120
|
+
// Skip wildcard imports — can't resolve to a single file
|
|
121
|
+
if (fqName.endsWith(".*"))
|
|
122
|
+
return null;
|
|
123
|
+
// Skip standard library / third-party (no way to index jar files)
|
|
124
|
+
if (fqName.startsWith("kotlin.") || fqName.startsWith("java.") ||
|
|
125
|
+
fqName.startsWith("javax.") || fqName.startsWith("android.") ||
|
|
126
|
+
fqName.startsWith("androidx.") || fqName.startsWith("org.jetbrains.") ||
|
|
127
|
+
fqName.startsWith("org.junit.")) {
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
const parts = fqName.split(".");
|
|
131
|
+
if (parts.length < 2)
|
|
132
|
+
return null;
|
|
133
|
+
const simpleName = parts[parts.length - 1];
|
|
134
|
+
const packagePath = parts.slice(0, -1).join("/");
|
|
135
|
+
const candidates = kotlinFilesByBasename.get(simpleName);
|
|
136
|
+
if (!candidates)
|
|
137
|
+
return null;
|
|
138
|
+
// Prefer candidate whose path contains the package path
|
|
139
|
+
for (const candidate of candidates) {
|
|
140
|
+
if (candidate.includes(packagePath))
|
|
141
|
+
return candidate;
|
|
142
|
+
}
|
|
143
|
+
// Fallback: if only one candidate, return it (common in small projects)
|
|
144
|
+
if (candidates.length === 1)
|
|
145
|
+
return candidates[0] ?? null;
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Build a lookup map from Kotlin file basenames (without extension) to file paths.
|
|
150
|
+
* Used by resolveKotlinImport for heuristic FQN resolution.
|
|
151
|
+
*/
|
|
152
|
+
export function buildKotlinFilesByBasename(index) {
|
|
153
|
+
const map = new Map();
|
|
154
|
+
for (const file of index.files) {
|
|
155
|
+
if (!/\.kts?$/.test(file.path))
|
|
156
|
+
continue;
|
|
157
|
+
const basename = file.path
|
|
158
|
+
.slice(file.path.lastIndexOf("/") + 1)
|
|
159
|
+
.replace(/\.kts?$/, "");
|
|
160
|
+
const existing = map.get(basename);
|
|
161
|
+
if (existing) {
|
|
162
|
+
existing.push(file.path);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
map.set(basename, [file.path]);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return map;
|
|
169
|
+
}
|
|
56
170
|
/**
|
|
57
171
|
* Build normalized path map for matching imports to indexed files.
|
|
58
172
|
*/
|
|
59
173
|
export function buildNormalizedPathMap(index) {
|
|
60
174
|
const normalizedPaths = new Map();
|
|
61
175
|
for (const file of index.files) {
|
|
62
|
-
const normalized = file.path.replace(/\.(ts|tsx|js|jsx|mjs|cjs)$/, "");
|
|
176
|
+
const normalized = file.path.replace(/\.(astro|ts|tsx|js|jsx|mjs|cjs|php|kt|kts|py)$/, "");
|
|
63
177
|
normalizedPaths.set(normalized, file.path);
|
|
64
178
|
if (normalized.endsWith("/index")) {
|
|
65
179
|
normalizedPaths.set(normalized.slice(0, -6), file.path);
|
|
66
180
|
}
|
|
181
|
+
// Python package index: map `foo/__init__` → `foo`
|
|
182
|
+
if (normalized.endsWith("/__init__")) {
|
|
183
|
+
normalizedPaths.set(normalized.slice(0, -9), file.path);
|
|
184
|
+
}
|
|
67
185
|
}
|
|
68
186
|
return normalizedPaths;
|
|
69
187
|
}
|
|
70
188
|
/**
|
|
71
189
|
* Collect all import edges between files in the index.
|
|
72
190
|
* Reads file source from disk to extract import statements.
|
|
191
|
+
* Handles JS/TS/PHP relative imports AND Kotlin fully-qualified imports
|
|
192
|
+
* (via heuristic basename + package-path matching).
|
|
73
193
|
*/
|
|
74
194
|
export async function collectImportEdges(index, fileFilter) {
|
|
75
195
|
const normalizedPaths = buildNormalizedPathMap(index);
|
|
196
|
+
const kotlinFilesByBasename = buildKotlinFilesByBasename(index);
|
|
76
197
|
const edgeSet = new Set();
|
|
77
198
|
const edges = [];
|
|
199
|
+
// Rollback kill switch — skip Python import extraction if env var set
|
|
200
|
+
const pythonDisabled = process.env.CODESIFT_DISABLE_PYTHON_IMPORTS === "1";
|
|
201
|
+
// Python needs the full indexed file set for package resolution — built once
|
|
202
|
+
const indexedPyFileSet = new Set(index.files.filter((f) => f.path.endsWith(".py")).map((f) => f.path));
|
|
203
|
+
const pySrcLayout = indexedPyFileSet.size > 0
|
|
204
|
+
? detectSrcLayout([...indexedPyFileSet])
|
|
205
|
+
: null;
|
|
78
206
|
const files = fileFilter
|
|
79
207
|
? index.files.filter((f) => fileFilter.has(f.path))
|
|
80
208
|
: index.files;
|
|
209
|
+
const addEdge = (from, to, extras) => {
|
|
210
|
+
if (to === from)
|
|
211
|
+
return;
|
|
212
|
+
const edgeKey = `${from}->${to}`;
|
|
213
|
+
if (edgeSet.has(edgeKey)) {
|
|
214
|
+
// Upgrade: runtime import overrides a prior type_only edge
|
|
215
|
+
if (!extras?.type_only) {
|
|
216
|
+
const existing = edges.find((e) => e.from === from && e.to === to);
|
|
217
|
+
if (existing?.type_only)
|
|
218
|
+
existing.type_only = false;
|
|
219
|
+
}
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
edgeSet.add(edgeKey);
|
|
223
|
+
const edge = { from, to };
|
|
224
|
+
if (extras?.type_only)
|
|
225
|
+
edge.type_only = true;
|
|
226
|
+
if (extras?.star_import)
|
|
227
|
+
edge.star_import = true;
|
|
228
|
+
if (extras?.raw)
|
|
229
|
+
edge.raw = extras.raw;
|
|
230
|
+
edges.push(edge);
|
|
231
|
+
};
|
|
81
232
|
for (const file of files) {
|
|
82
233
|
let source;
|
|
83
234
|
try {
|
|
@@ -86,17 +237,69 @@ export async function collectImportEdges(index, fileFilter) {
|
|
|
86
237
|
catch {
|
|
87
238
|
continue;
|
|
88
239
|
}
|
|
240
|
+
// Relative-path imports (JS/TS/PHP)
|
|
89
241
|
const importPaths = extractImports(source);
|
|
90
242
|
for (const importPath of importPaths) {
|
|
91
243
|
const resolved = resolveImportPath(file.path, importPath);
|
|
92
244
|
const targetFile = normalizedPaths.get(resolved);
|
|
93
|
-
if (
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
245
|
+
if (targetFile)
|
|
246
|
+
addEdge(file.path, targetFile);
|
|
247
|
+
}
|
|
248
|
+
// Kotlin fully-qualified imports (.kt/.kts files only)
|
|
249
|
+
if (/\.kts?$/.test(file.path)) {
|
|
250
|
+
const kotlinImports = extractKotlinImports(source);
|
|
251
|
+
for (const fqName of kotlinImports) {
|
|
252
|
+
const targetFile = resolveKotlinImport(fqName, kotlinFilesByBasename);
|
|
253
|
+
if (targetFile)
|
|
254
|
+
addEdge(file.path, targetFile);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
// PHP cross-file edges via PSR-4 `use` statement resolution.
|
|
258
|
+
// Creates edges like: PostController.php → User.php when we see
|
|
259
|
+
// `use App\Models\User;` and composer.json maps `App\` to `src/`.
|
|
260
|
+
if (file.path.endsWith(".php")) {
|
|
261
|
+
const uses = extractPhpUseStatements(source);
|
|
262
|
+
for (const fqcn of uses) {
|
|
263
|
+
try {
|
|
264
|
+
const resolved = await resolvePhpNamespace(index.repo, fqcn);
|
|
265
|
+
if (resolved.exists && resolved.file_path) {
|
|
266
|
+
const candidate = resolved.file_path.replace(/^\.\//, "");
|
|
267
|
+
// Prefer the exact indexed path (handles prefixes like "./src/")
|
|
268
|
+
const targetFile = index.files.some((f) => f.path === candidate)
|
|
269
|
+
? candidate
|
|
270
|
+
: normalizedPaths.get(candidate.replace(/\.php$/, "")) ?? null;
|
|
271
|
+
if (targetFile && targetFile !== file.path) {
|
|
272
|
+
addEdge(file.path, targetFile);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
// Missing composer.json, malformed PSR-4, etc. — skip edge, don't crash.
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// Python imports via tree-sitter AST + package-aware resolution
|
|
282
|
+
if (!pythonDisabled && file.path.endsWith(".py")) {
|
|
283
|
+
try {
|
|
284
|
+
const parser = await getParser("python");
|
|
285
|
+
if (parser) {
|
|
286
|
+
const tree = parser.parse(source);
|
|
287
|
+
const pyImports = extractPythonImports(tree);
|
|
288
|
+
for (const imp of pyImports) {
|
|
289
|
+
const targetFile = resolvePythonImport({ module: imp.module, level: imp.level }, file.path, indexedPyFileSet, pySrcLayout);
|
|
290
|
+
if (targetFile) {
|
|
291
|
+
addEdge(file.path, targetFile, {
|
|
292
|
+
type_only: imp.is_type_only,
|
|
293
|
+
star_import: imp.is_star,
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
catch (err) {
|
|
300
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
301
|
+
console.warn(`[import-graph] python extraction failed for ${file.path}: ${message}`);
|
|
302
|
+
}
|
|
100
303
|
}
|
|
101
304
|
}
|
|
102
305
|
return edges;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-graph.js","sourceRoot":"","sources":["../../src/utils/import-graph.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQjC,mEAAmE;AACnE,MAAM,eAAe,GAAG;IACtB,6DAA6D;IAC7D,yCAAyC;IACzC,gCAAgC;IAChC,sCAAsC;IACtC,2BAA2B;IAC3B,uCAAuC;CACxC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,IAAI,KAA6B,CAAC;QAClC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,YAAoB,EAAE,UAAkB;IACxE,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC5C,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACtD,CAAC,CAAC,GAAG,CAAC;IAER,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAErC,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5C,IAAI,OAAO,KAAK,GAAG;YAAE,SAAS;QAC9B,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,KAAK,CAAC,GAAG,EAAE,CAAC;QACd,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC;IAE9D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAgB;IACrD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAClD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC;QACvE,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAgB,EAChB,UAAwB;IAExB,MAAM,eAAe,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,KAAK,GAAiB,EAAE,CAAC;IAE/B,MAAM,KAAK,GAAG,UAAU;QACtB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IAEhB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAC3C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC1D,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACjD,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEtD,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC9C,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,SAAS;YACnC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAErB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAmB;IACtD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,EAAE,CAAC;YAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;YAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAErB,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;YAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAAC,CAAC;QAC3D,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
1
|
+
{"version":3,"file":"import-graph.js","sourceRoot":"","sources":["../../src/utils/import-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface ProjectLanguages {
|
|
2
|
+
python: boolean;
|
|
3
|
+
php: boolean;
|
|
4
|
+
typescript: boolean;
|
|
5
|
+
javascript: boolean;
|
|
6
|
+
kotlin: boolean;
|
|
7
|
+
go: boolean;
|
|
8
|
+
rust: boolean;
|
|
9
|
+
ruby: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Scan a directory for source file extensions, returning which languages
|
|
13
|
+
* are present. Short-circuits once all tracked languages are found.
|
|
14
|
+
*/
|
|
15
|
+
export declare function detectProjectLanguages(root: string): Promise<ProjectLanguages>;
|
|
16
|
+
/**
|
|
17
|
+
* Synchronous variant for use during server startup where top-level await
|
|
18
|
+
* isn't convenient. Uses readdirSync. Caps at MAX_FILES_SCANNED.
|
|
19
|
+
*/
|
|
20
|
+
export declare function detectProjectLanguagesSync(root: string): ProjectLanguages;
|
|
21
|
+
//# sourceMappingURL=language-detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-detect.d.ts","sourceRoot":"","sources":["../../src/utils/language-detect.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf;AAyCD;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwDpF;AAOD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CA2DzE"}
|