codesift-mcp 0.15.3 → 0.17.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/dist/cli/auto-prune.d.ts +16 -0
- package/dist/cli/auto-prune.d.ts.map +1 -0
- package/dist/cli/auto-prune.js +87 -0
- package/dist/cli/auto-prune.js.map +1 -0
- package/dist/cli/commands-admin.d.ts.map +1 -1
- package/dist/cli/commands-admin.js +11 -0
- package/dist/cli/commands-admin.js.map +1 -1
- package/dist/cli/commands-daemon.d.ts.map +1 -1
- package/dist/cli/commands-daemon.js +9 -0
- package/dist/cli/commands-daemon.js.map +1 -1
- package/dist/cli/commands-index.d.ts.map +1 -1
- package/dist/cli/commands-index.js +8 -0
- package/dist/cli/commands-index.js.map +1 -1
- package/dist/cli/embed-child.js +5 -1
- package/dist/cli/embed-child.js.map +1 -1
- package/dist/cli/help.js +1 -1
- package/dist/cli/hooks/pre-tool-use.d.ts.map +1 -1
- package/dist/cli/hooks/pre-tool-use.js +11 -5
- package/dist/cli/hooks/pre-tool-use.js.map +1 -1
- package/dist/cli/hooks/shared.d.ts +1 -1
- package/dist/cli/hooks/shared.d.ts.map +1 -1
- package/dist/cli/hooks/shared.js +34 -2
- package/dist/cli/hooks/shared.js.map +1 -1
- package/dist/cli/orphan-guard.d.ts +22 -0
- package/dist/cli/orphan-guard.d.ts.map +1 -1
- package/dist/cli/orphan-guard.js +30 -0
- package/dist/cli/orphan-guard.js.map +1 -1
- package/dist/cli/service.d.ts +43 -0
- package/dist/cli/service.d.ts.map +1 -1
- package/dist/cli/service.js +84 -4
- package/dist/cli/service.js.map +1 -1
- package/dist/cli/setup/codex-project-auto.d.ts +27 -0
- package/dist/cli/setup/codex-project-auto.d.ts.map +1 -0
- package/dist/cli/setup/codex-project-auto.js +98 -0
- package/dist/cli/setup/codex-project-auto.js.map +1 -0
- package/dist/cli/setup/codex.d.ts.map +1 -1
- package/dist/cli/setup/codex.js +101 -6
- package/dist/cli/setup/codex.js.map +1 -1
- package/dist/cli/setup/cursor.d.ts.map +1 -1
- package/dist/cli/setup/cursor.js +9 -1
- package/dist/cli/setup/cursor.js.map +1 -1
- package/dist/cli/setup/gemini.d.ts.map +1 -1
- package/dist/cli/setup/gemini.js +21 -0
- package/dist/cli/setup/gemini.js.map +1 -1
- package/dist/cli/setup/mcp.d.ts +37 -1
- package/dist/cli/setup/mcp.d.ts.map +1 -1
- package/dist/cli/setup/mcp.js +57 -4
- package/dist/cli/setup/mcp.js.map +1 -1
- package/dist/cli/setup/types.d.ts +19 -1
- package/dist/cli/setup/types.d.ts.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +30 -6
- package/dist/config.js.map +1 -1
- package/dist/formatters-core.d.ts +2 -0
- package/dist/formatters-core.d.ts.map +1 -1
- package/dist/formatters-core.js +18 -3
- package/dist/formatters-core.js.map +1 -1
- package/dist/formatters-shortening.d.ts.map +1 -1
- package/dist/formatters-shortening.js +8 -2
- package/dist/formatters-shortening.js.map +1 -1
- package/dist/instructions.d.ts +17 -0
- package/dist/instructions.d.ts.map +1 -1
- package/dist/instructions.js +35 -0
- package/dist/instructions.js.map +1 -1
- package/dist/lsp/lsp-servers.d.ts.map +1 -1
- package/dist/lsp/lsp-servers.js +4 -1
- package/dist/lsp/lsp-servers.js.map +1 -1
- package/dist/parser/parse-cache.d.ts.map +1 -1
- package/dist/parser/parse-cache.js +36 -1
- package/dist/parser/parse-cache.js.map +1 -1
- package/dist/register-tool-groups/analysis.d.ts.map +1 -1
- package/dist/register-tool-groups/analysis.js +10 -1
- package/dist/register-tool-groups/analysis.js.map +1 -1
- package/dist/register-tool-groups/core/index.d.ts.map +1 -1
- package/dist/register-tool-groups/core/index.js +26 -3
- package/dist/register-tool-groups/core/index.js.map +1 -1
- package/dist/register-tool-groups/core/meta.d.ts.map +1 -1
- package/dist/register-tool-groups/core/meta.js +23 -1
- package/dist/register-tool-groups/core/meta.js.map +1 -1
- package/dist/register-tool-groups/core/search.d.ts +15 -0
- package/dist/register-tool-groups/core/search.d.ts.map +1 -1
- package/dist/register-tool-groups/core/search.js +60 -2
- package/dist/register-tool-groups/core/search.js.map +1 -1
- package/dist/register-tool-groups/core/symbols.d.ts.map +1 -1
- package/dist/register-tool-groups/core/symbols.js +13 -2
- package/dist/register-tool-groups/core/symbols.js.map +1 -1
- package/dist/register-tool-groups/meta.d.ts.map +1 -1
- package/dist/register-tool-groups/meta.js +23 -0
- package/dist/register-tool-groups/meta.js.map +1 -1
- package/dist/register-tools/discovery.d.ts +22 -5
- package/dist/register-tools/discovery.d.ts.map +1 -1
- package/dist/register-tools/discovery.js +95 -9
- package/dist/register-tools/discovery.js.map +1 -1
- package/dist/register-tools/runtime.d.ts +9 -1
- package/dist/register-tools/runtime.d.ts.map +1 -1
- package/dist/register-tools/runtime.js +19 -2
- package/dist/register-tools/runtime.js.map +1 -1
- package/dist/register-tools.d.ts +4 -2
- package/dist/register-tools.d.ts.map +1 -1
- package/dist/register-tools.js +20 -8
- package/dist/register-tools.js.map +1 -1
- package/dist/search/bm25-store.d.ts +6 -0
- package/dist/search/bm25-store.d.ts.map +1 -0
- package/dist/search/bm25-store.js +164 -0
- package/dist/search/bm25-store.js.map +1 -0
- package/dist/search/bm25.d.ts +30 -0
- package/dist/search/bm25.d.ts.map +1 -1
- package/dist/search/bm25.js +159 -34
- package/dist/search/bm25.js.map +1 -1
- package/dist/search/embed-gate.d.ts +17 -0
- package/dist/search/embed-gate.d.ts.map +1 -0
- package/dist/search/embed-gate.js +64 -0
- package/dist/search/embed-gate.js.map +1 -0
- package/dist/search/semantic.d.ts.map +1 -1
- package/dist/search/semantic.js +5 -2
- package/dist/search/semantic.js.map +1 -1
- package/dist/server-helpers/health-vitals.d.ts +45 -0
- package/dist/server-helpers/health-vitals.d.ts.map +1 -0
- package/dist/server-helpers/health-vitals.js +77 -0
- package/dist/server-helpers/health-vitals.js.map +1 -0
- package/dist/server-helpers/repo-resolution.d.ts.map +1 -1
- package/dist/server-helpers/repo-resolution.js +23 -3
- package/dist/server-helpers/repo-resolution.js.map +1 -1
- package/dist/server-helpers/request-context.d.ts +34 -4
- package/dist/server-helpers/request-context.d.ts.map +1 -1
- package/dist/server-helpers/request-context.js +4 -0
- package/dist/server-helpers/request-context.js.map +1 -1
- package/dist/server-helpers/response-hints.d.ts +1 -4
- package/dist/server-helpers/response-hints.d.ts.map +1 -1
- package/dist/server-helpers/response-hints.js +44 -1
- package/dist/server-helpers/response-hints.js.map +1 -1
- package/dist/server-helpers.d.ts.map +1 -1
- package/dist/server-helpers.js +20 -0
- package/dist/server-helpers.js.map +1 -1
- package/dist/server.d.ts +10 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +165 -8
- package/dist/server.js.map +1 -1
- package/dist/storage/_shared.d.ts +1 -1
- package/dist/storage/_shared.d.ts.map +1 -1
- package/dist/storage/_shared.js +41 -3
- package/dist/storage/_shared.js.map +1 -1
- package/dist/storage/index-migration.d.ts.map +1 -1
- package/dist/storage/index-migration.js +6 -2
- package/dist/storage/index-migration.js.map +1 -1
- package/dist/storage/index-store.d.ts +29 -0
- package/dist/storage/index-store.d.ts.map +1 -1
- package/dist/storage/index-store.js +112 -0
- package/dist/storage/index-store.js.map +1 -1
- package/dist/storage/registry.d.ts +14 -0
- package/dist/storage/registry.d.ts.map +1 -1
- package/dist/storage/registry.js +46 -7
- package/dist/storage/registry.js.map +1 -1
- package/dist/storage/sqlite/accessors.d.ts +17 -0
- package/dist/storage/sqlite/accessors.d.ts.map +1 -1
- package/dist/storage/sqlite/accessors.js +20 -0
- package/dist/storage/sqlite/accessors.js.map +1 -1
- package/dist/storage/sqlite/connection.d.ts +20 -0
- package/dist/storage/sqlite/connection.d.ts.map +1 -1
- package/dist/storage/sqlite/connection.js +61 -0
- package/dist/storage/sqlite/connection.js.map +1 -1
- package/dist/storage/sqlite/index-io.d.ts +5 -0
- package/dist/storage/sqlite/index-io.d.ts.map +1 -1
- package/dist/storage/sqlite/index-io.js +98 -9
- package/dist/storage/sqlite/index-io.js.map +1 -1
- package/dist/storage/sqlite/meta.d.ts +7 -0
- package/dist/storage/sqlite/meta.d.ts.map +1 -1
- package/dist/storage/sqlite/meta.js.map +1 -1
- package/dist/storage/sqlite/queries.d.ts +66 -0
- package/dist/storage/sqlite/queries.d.ts.map +1 -0
- package/dist/storage/sqlite/queries.js +196 -0
- package/dist/storage/sqlite/queries.js.map +1 -0
- package/dist/storage/sqlite/schema.d.ts +2 -2
- package/dist/storage/sqlite/schema.d.ts.map +1 -1
- package/dist/storage/sqlite/schema.js +36 -0
- package/dist/storage/sqlite/schema.js.map +1 -1
- package/dist/storage/sqlite-index-store.d.ts +3 -1
- package/dist/storage/sqlite-index-store.d.ts.map +1 -1
- package/dist/storage/sqlite-index-store.js +4 -1
- package/dist/storage/sqlite-index-store.js.map +1 -1
- package/dist/storage/telemetry/uploader.js +1 -1
- package/dist/storage/telemetry/uploader.js.map +1 -1
- package/dist/storage/usage-tracker.d.ts.map +1 -1
- package/dist/storage/usage-tracker.js +54 -2
- package/dist/storage/usage-tracker.js.map +1 -1
- package/dist/tools/boundary-tools.js +2 -2
- package/dist/tools/boundary-tools.js.map +1 -1
- package/dist/tools/community-tools.d.ts +7 -0
- package/dist/tools/community-tools.d.ts.map +1 -1
- package/dist/tools/community-tools.js +31 -14
- package/dist/tools/community-tools.js.map +1 -1
- package/dist/tools/complexity-tools.d.ts.map +1 -1
- package/dist/tools/complexity-tools.js +65 -45
- package/dist/tools/complexity-tools.js.map +1 -1
- package/dist/tools/conversation-index-tools.js +2 -2
- package/dist/tools/conversation-index-tools.js.map +1 -1
- package/dist/tools/conversation-search-tools.js +2 -2
- package/dist/tools/conversation-search-tools.js.map +1 -1
- package/dist/tools/coupling-tools.d.ts +2 -2
- package/dist/tools/coupling-tools.d.ts.map +1 -1
- package/dist/tools/coupling-tools.js +8 -13
- package/dist/tools/coupling-tools.js.map +1 -1
- package/dist/tools/diff-tools.d.ts.map +1 -1
- package/dist/tools/diff-tools.js +11 -14
- package/dist/tools/diff-tools.js.map +1 -1
- package/dist/tools/git-exec.d.ts +42 -0
- package/dist/tools/git-exec.d.ts.map +1 -0
- package/dist/tools/git-exec.js +53 -0
- package/dist/tools/git-exec.js.map +1 -0
- package/dist/tools/git-tree-guard.d.ts +23 -0
- package/dist/tools/git-tree-guard.d.ts.map +1 -0
- package/dist/tools/git-tree-guard.js +33 -0
- package/dist/tools/git-tree-guard.js.map +1 -0
- package/dist/tools/graph-tools.d.ts.map +1 -1
- package/dist/tools/graph-tools.js +5 -2
- package/dist/tools/graph-tools.js.map +1 -1
- package/dist/tools/hotspot-tools.d.ts +25 -0
- package/dist/tools/hotspot-tools.d.ts.map +1 -1
- package/dist/tools/hotspot-tools.js +24 -3
- package/dist/tools/hotspot-tools.js.map +1 -1
- package/dist/tools/impact-tools.d.ts.map +1 -1
- package/dist/tools/impact-tools.js +8 -9
- package/dist/tools/impact-tools.js.map +1 -1
- package/dist/tools/index-tools/file-indexer.d.ts +6 -0
- package/dist/tools/index-tools/file-indexer.d.ts.map +1 -1
- package/dist/tools/index-tools/file-indexer.js +184 -18
- package/dist/tools/index-tools/file-indexer.js.map +1 -1
- package/dist/tools/index-tools/folder-indexer.d.ts.map +1 -1
- package/dist/tools/index-tools/folder-indexer.js +59 -7
- package/dist/tools/index-tools/folder-indexer.js.map +1 -1
- package/dist/tools/index-tools/load-gate.d.ts +15 -0
- package/dist/tools/index-tools/load-gate.d.ts.map +1 -0
- package/dist/tools/index-tools/load-gate.js +57 -0
- package/dist/tools/index-tools/load-gate.js.map +1 -0
- package/dist/tools/index-tools/overload-guard.d.ts +16 -0
- package/dist/tools/index-tools/overload-guard.d.ts.map +1 -0
- package/dist/tools/index-tools/overload-guard.js +68 -0
- package/dist/tools/index-tools/overload-guard.js.map +1 -0
- package/dist/tools/index-tools/parse.d.ts +9 -0
- package/dist/tools/index-tools/parse.d.ts.map +1 -1
- package/dist/tools/index-tools/parse.js +9 -2
- package/dist/tools/index-tools/parse.js.map +1 -1
- package/dist/tools/index-tools/registry.d.ts +25 -1
- package/dist/tools/index-tools/registry.d.ts.map +1 -1
- package/dist/tools/index-tools/registry.js +149 -8
- package/dist/tools/index-tools/registry.js.map +1 -1
- package/dist/tools/index-tools/state.d.ts +46 -0
- package/dist/tools/index-tools/state.d.ts.map +1 -1
- package/dist/tools/index-tools/state.js +132 -0
- package/dist/tools/index-tools/state.js.map +1 -1
- package/dist/tools/index-tools/watcher.d.ts.map +1 -1
- package/dist/tools/index-tools/watcher.js +13 -5
- package/dist/tools/index-tools/watcher.js.map +1 -1
- package/dist/tools/index-tools/worktree-seed.d.ts +42 -1
- package/dist/tools/index-tools/worktree-seed.d.ts.map +1 -1
- package/dist/tools/index-tools/worktree-seed.js +165 -24
- package/dist/tools/index-tools/worktree-seed.js.map +1 -1
- package/dist/tools/index-tools.d.ts +2 -2
- package/dist/tools/index-tools.d.ts.map +1 -1
- package/dist/tools/index-tools.js +2 -2
- package/dist/tools/index-tools.js.map +1 -1
- package/dist/tools/journal-generator-helpers.d.ts.map +1 -1
- package/dist/tools/journal-generator-helpers.js +3 -1
- package/dist/tools/journal-generator-helpers.js.map +1 -1
- package/dist/tools/nest-guard-tools.d.ts +8 -0
- package/dist/tools/nest-guard-tools.d.ts.map +1 -1
- package/dist/tools/nest-guard-tools.js +7 -1
- package/dist/tools/nest-guard-tools.js.map +1 -1
- package/dist/tools/nest-pipeline-tools.d.ts.map +1 -1
- package/dist/tools/nest-pipeline-tools.js +5 -1
- package/dist/tools/nest-pipeline-tools.js.map +1 -1
- package/dist/tools/outline-tools.d.ts +4 -1
- package/dist/tools/outline-tools.d.ts.map +1 -1
- package/dist/tools/outline-tools.js +41 -4
- package/dist/tools/outline-tools.js.map +1 -1
- package/dist/tools/patterns/execution.d.ts.map +1 -1
- package/dist/tools/patterns/execution.js +28 -10
- package/dist/tools/patterns/execution.js.map +1 -1
- package/dist/tools/review-diff/checks/coupling.js +1 -1
- package/dist/tools/review-diff/checks/coupling.js.map +1 -1
- package/dist/tools/review-diff/constants.d.ts +9 -0
- package/dist/tools/review-diff/constants.d.ts.map +1 -1
- package/dist/tools/review-diff/constants.js +9 -0
- package/dist/tools/review-diff/constants.js.map +1 -1
- package/dist/tools/review-diff/orchestrator.d.ts.map +1 -1
- package/dist/tools/review-diff/orchestrator.js +35 -2
- package/dist/tools/review-diff/orchestrator.js.map +1 -1
- package/dist/tools/review-diff/types.d.ts +5 -0
- package/dist/tools/review-diff/types.d.ts.map +1 -1
- package/dist/tools/route-tools/file-sources.d.ts.map +1 -1
- package/dist/tools/route-tools/file-sources.js +8 -1
- package/dist/tools/route-tools/file-sources.js.map +1 -1
- package/dist/tools/route-tools/hono.d.ts.map +1 -1
- package/dist/tools/route-tools/hono.js +18 -4
- package/dist/tools/route-tools/hono.js.map +1 -1
- package/dist/tools/route-tools/laravel.js +1 -1
- package/dist/tools/route-tools/laravel.js.map +1 -1
- package/dist/tools/route-tools/mermaid-call-chain.d.ts.map +1 -1
- package/dist/tools/route-tools/mermaid-call-chain.js +9 -1
- package/dist/tools/route-tools/mermaid-call-chain.js.map +1 -1
- package/dist/tools/route-tools/nest.js +2 -2
- package/dist/tools/route-tools/nest.js.map +1 -1
- package/dist/tools/route-tools/next-trace.d.ts.map +1 -1
- package/dist/tools/route-tools/next-trace.js +16 -1
- package/dist/tools/route-tools/next-trace.js.map +1 -1
- package/dist/tools/route-tools/next.d.ts.map +1 -1
- package/dist/tools/route-tools/next.js +10 -3
- package/dist/tools/route-tools/next.js.map +1 -1
- package/dist/tools/route-tools/route-mermaid.d.ts.map +1 -1
- package/dist/tools/route-tools/route-mermaid.js +7 -1
- package/dist/tools/route-tools/route-mermaid.js.map +1 -1
- package/dist/tools/route-tools/spring-kotlin.d.ts.map +1 -1
- package/dist/tools/route-tools/spring-kotlin.js +4 -1
- package/dist/tools/route-tools/spring-kotlin.js.map +1 -1
- package/dist/tools/route-tools/trace-route.d.ts.map +1 -1
- package/dist/tools/route-tools/trace-route.js +12 -4
- package/dist/tools/route-tools/trace-route.js.map +1 -1
- package/dist/tools/route-tools/yii2.d.ts.map +1 -1
- package/dist/tools/route-tools/yii2.js +14 -9
- package/dist/tools/route-tools/yii2.js.map +1 -1
- package/dist/tools/secret-detectors.d.ts +10 -1
- package/dist/tools/secret-detectors.d.ts.map +1 -1
- package/dist/tools/secret-detectors.js +16 -2
- package/dist/tools/secret-detectors.js.map +1 -1
- package/dist/tools/secret-file-scanner.d.ts +3 -1
- package/dist/tools/secret-file-scanner.d.ts.map +1 -1
- package/dist/tools/secret-file-scanner.js +4 -2
- package/dist/tools/secret-file-scanner.js.map +1 -1
- package/dist/tools/secret-tools.d.ts +7 -0
- package/dist/tools/secret-tools.d.ts.map +1 -1
- package/dist/tools/secret-tools.js +62 -5
- package/dist/tools/secret-tools.js.map +1 -1
- package/dist/tools/status-tools.d.ts +20 -0
- package/dist/tools/status-tools.d.ts.map +1 -1
- package/dist/tools/status-tools.js +46 -0
- package/dist/tools/status-tools.js.map +1 -1
- package/dist/tools/symbol-analysis-tools.d.ts.map +1 -1
- package/dist/tools/symbol-analysis-tools.js +27 -2
- package/dist/tools/symbol-analysis-tools.js.map +1 -1
- package/dist/tools/symbol-reference-tools.d.ts +17 -0
- package/dist/tools/symbol-reference-tools.d.ts.map +1 -1
- package/dist/tools/symbol-reference-tools.js +23 -4
- package/dist/tools/symbol-reference-tools.js.map +1 -1
- package/dist/tools/symbol-tool-internals.d.ts +10 -0
- package/dist/tools/symbol-tool-internals.d.ts.map +1 -1
- package/dist/tools/symbol-tool-internals.js +16 -1
- package/dist/tools/symbol-tool-internals.js.map +1 -1
- package/dist/tools/test-impact-tools.d.ts +3 -0
- package/dist/tools/test-impact-tools.d.ts.map +1 -1
- package/dist/tools/test-impact-tools.js +26 -4
- package/dist/tools/test-impact-tools.js.map +1 -1
- package/dist/tools/wiki-overview-sources.d.ts.map +1 -1
- package/dist/tools/wiki-overview-sources.js +3 -0
- package/dist/tools/wiki-overview-sources.js.map +1 -1
- package/dist/utils/import-graph/collect.d.ts +2 -3
- package/dist/utils/import-graph/collect.d.ts.map +1 -1
- package/dist/utils/import-graph/collect.js +73 -8
- package/dist/utils/import-graph/collect.js.map +1 -1
- package/dist/utils/import-graph/edge-accumulator.d.ts.map +1 -1
- package/dist/utils/import-graph/edge-accumulator.js +5 -0
- package/dist/utils/import-graph/edge-accumulator.js.map +1 -1
- package/dist/utils/import-graph/edge-cache.d.ts +15 -0
- package/dist/utils/import-graph/edge-cache.d.ts.map +1 -0
- package/dist/utils/import-graph/edge-cache.js +98 -0
- package/dist/utils/import-graph/edge-cache.js.map +1 -0
- package/dist/utils/import-graph/language-imports.d.ts +2 -2
- package/dist/utils/import-graph/language-imports.d.ts.map +1 -1
- package/dist/utils/import-graph/language-imports.js.map +1 -1
- package/dist/utils/import-graph/path-map.d.ts +2 -2
- package/dist/utils/import-graph/path-map.d.ts.map +1 -1
- package/dist/utils/import-graph/path-map.js.map +1 -1
- package/dist/utils/import-graph/python-php-edge-collectors.d.ts +11 -4
- package/dist/utils/import-graph/python-php-edge-collectors.d.ts.map +1 -1
- package/dist/utils/import-graph/python-php-edge-collectors.js +22 -5
- package/dist/utils/import-graph/python-php-edge-collectors.js.map +1 -1
- package/dist/utils/import-graph/source-edge-collector.d.ts +2 -3
- package/dist/utils/import-graph/source-edge-collector.d.ts.map +1 -1
- package/dist/utils/import-graph/source-edge-collector.js +7 -2
- package/dist/utils/import-graph/source-edge-collector.js.map +1 -1
- package/dist/utils/import-graph/types.d.ts +36 -1
- package/dist/utils/import-graph/types.d.ts.map +1 -1
- package/dist/utils/import-graph/typescript-edge-collector.d.ts +2 -3
- package/dist/utils/import-graph/typescript-edge-collector.d.ts.map +1 -1
- package/dist/utils/import-graph/typescript-edge-collector.js +6 -2
- package/dist/utils/import-graph/typescript-edge-collector.js.map +1 -1
- package/dist/utils/import-graph/workspace-alias.d.ts +2 -2
- package/dist/utils/import-graph/workspace-alias.d.ts.map +1 -1
- package/dist/utils/import-graph/workspace-alias.js.map +1 -1
- package/dist/utils/language-detect.d.ts +2 -4
- package/dist/utils/language-detect.d.ts.map +1 -1
- package/dist/utils/language-detect.js +26 -4
- package/dist/utils/language-detect.js.map +1 -1
- package/dist/utils/python-imports.d.ts +20 -0
- package/dist/utils/python-imports.d.ts.map +1 -1
- package/dist/utils/python-imports.js +52 -0
- package/dist/utils/python-imports.js.map +1 -1
- package/dist/utils/ts-imports.d.ts +16 -0
- package/dist/utils/ts-imports.d.ts.map +1 -1
- package/dist/utils/ts-imports.js +65 -3
- package/dist/utils/ts-imports.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-sources.d.ts","sourceRoot":"","sources":["../../../src/tools/route-tools/file-sources.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GACjC,OAAO,CAAC,iBAAiB,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"file-sources.d.ts","sourceRoot":"","sources":["../../../src/tools/route-tools/file-sources.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GACjC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAmB9B"}
|
|
@@ -6,7 +6,14 @@ export async function readIndexedFiles(index, matches) {
|
|
|
6
6
|
try {
|
|
7
7
|
return { path: file.path, source: await readFile(join(index.root, file.path), "utf-8") };
|
|
8
8
|
}
|
|
9
|
-
catch {
|
|
9
|
+
catch (err) {
|
|
10
|
+
// Every read failure became "file absent", so a permission or I/O error looked exactly like
|
|
11
|
+
// a project with no routes. ENOENT is genuinely unremarkable — the index can outlive a file.
|
|
12
|
+
// Anything else is an operational problem the caller has no other way to learn about.
|
|
13
|
+
if (err.code !== "ENOENT") {
|
|
14
|
+
console.error(`[codesift] route source unreadable: ${file.path} — `
|
|
15
|
+
+ `${err instanceof Error ? err.message : String(err)}. Routes in it will be missing.`);
|
|
16
|
+
}
|
|
10
17
|
return null;
|
|
11
18
|
}
|
|
12
19
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-sources.js","sourceRoot":"","sources":["../../../src/tools/route-tools/file-sources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQjC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAgB,EAChB,OAAkC;IAElC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QAC9D,IAAI,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"file-sources.js","sourceRoot":"","sources":["../../../src/tools/route-tools/file-sources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQjC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAgB,EAChB,OAAkC;IAElC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QAC9D,IAAI,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,4FAA4F;YAC5F,6FAA6F;YAC7F,sFAAsF;YACtF,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrD,OAAO,CAAC,KAAK,CACX,uCAAuC,IAAI,CAAC,IAAI,KAAK;sBACnD,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,iCAAiC,CACvF,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC,CAAC;IACJ,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAA+B,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;AAClF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hono.d.ts","sourceRoot":"","sources":["../../../src/tools/route-tools/hono.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,gBAAgB,CAAC;AAG5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"hono.d.ts","sourceRoot":"","sources":["../../../src/tools/route-tools/hono.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,gBAAgB,CAAC;AAG5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAoE/C,0EAA0E;AAC1E,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC,CAazB"}
|
|
@@ -1,9 +1,15 @@
|
|
|
1
|
-
import { join } from "node:path";
|
|
1
|
+
import { join, relative } from "node:path";
|
|
2
2
|
import { stripSource } from "../graph-tools.js";
|
|
3
3
|
import { matchPath } from "../route-shared.js";
|
|
4
4
|
function resolveHonoEntryFile(index) {
|
|
5
|
-
|
|
5
|
+
// `.find()` took whichever app the index happened to list first, so a fixture or a sub-app in a
|
|
6
|
+
// test file could shadow the real one. Still a heuristic — but a test file is never the routed
|
|
7
|
+
// application, and that is the case this actually hit.
|
|
8
|
+
const candidates = index.symbols.filter((symbol) => symbol.source &&
|
|
6
9
|
/new\s+(?:Hono|OpenAPIHono)\s*(?:<[^>]*>)?\s*\(/.test(symbol.source));
|
|
10
|
+
const entrySymbol = candidates.find((s) => !/(^|\/)(tests?|__tests__)\//.test(s.file)
|
|
11
|
+
&& !/\.(test|spec)\.[jt]sx?$/.test(s.file))
|
|
12
|
+
?? candidates[0];
|
|
7
13
|
return entrySymbol ? join(index.root, entrySymbol.file) : null;
|
|
8
14
|
}
|
|
9
15
|
async function loadHonoModel(repo, entryFile) {
|
|
@@ -12,12 +18,20 @@ async function loadHonoModel(repo, entryFile) {
|
|
|
12
18
|
const { HonoExtractor } = await import("../../parser/extractors/hono.js");
|
|
13
19
|
return await honoCache.get(repo, entryFile, new HonoExtractor());
|
|
14
20
|
}
|
|
15
|
-
catch {
|
|
21
|
+
catch (err) {
|
|
22
|
+
// An extractor failure and "this repo has no Hono app" produced the same empty result, so a
|
|
23
|
+
// broken parse read as a project with no routes. Same shape as the swallowed parse failures in
|
|
24
|
+
// the indexer and the swallowed reads in file-sources.
|
|
25
|
+
console.error(`[codesift] Hono model extraction failed for ${entryFile}: `
|
|
26
|
+
+ `${err instanceof Error ? err.message : String(err)} — reporting no routes for this app.`);
|
|
16
27
|
return null;
|
|
17
28
|
}
|
|
18
29
|
}
|
|
19
30
|
function routeHandlerSymbol(repo, index, route) {
|
|
20
|
-
|
|
31
|
+
// `.replace(index.root + "/", "")` hardcoded the POSIX separator, so on win32 the prefix never
|
|
32
|
+
// matched, `relativeFile` stayed absolute, and the symbol lookup below missed every time —
|
|
33
|
+
// silently, as "no handler". Three of the installs reporting telemetry are win32.
|
|
34
|
+
const relativeFile = relative(index.root, route.handler.file);
|
|
21
35
|
return index.symbols.find((symbol) => symbol.file === relativeFile &&
|
|
22
36
|
symbol.name === route.handler.name &&
|
|
23
37
|
Math.abs(symbol.start_line - route.handler.line) <= 2) ?? {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hono.js","sourceRoot":"","sources":["../../../src/tools/route-tools/hono.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"hono.js","sourceRoot":"","sources":["../../../src/tools/route-tools/hono.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,7 +29,7 @@ function laravelHandler(index, file, method, match) {
|
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
31
|
function scanLaravelMethod(index, file, source, searchPath, method) {
|
|
32
|
-
const pattern = new RegExp(`Route::${method}\\s*\\(\\s*['"\`]([^'"\`]+)['"\`]\\s*,\\s*(?:\\[([\\w\\\\]+)::class\\s*,\\s*['"\`](\\w+)['"\`]\\]|['"\`](\\w+)@(\\w+)['"\`])`, "gi");
|
|
32
|
+
const pattern = new RegExp(`Route::${method}\\s*\\(\\s*['"\`]([^'"\`]+)['"\`]\\s*,\\s*(?:\\[([\\w\\\\]+)::class\\s*,\\s*['"\`](\\w+)['"\`]\\]|['"\`]([\\w\\\\]+)@(\\w+)['"\`])`, "gi");
|
|
33
33
|
return [...source.matchAll(pattern)]
|
|
34
34
|
.filter((match) => matchPath(match[1] ?? "", searchPath))
|
|
35
35
|
.map((match) => laravelHandler(index, file, method, match));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"laravel.js","sourceRoot":"","sources":["../../../src/tools/route-tools/laravel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGrD,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAElE,SAAS,oBAAoB,CAC3B,KAAgB,EAChB,cAAsB,EACtB,UAAkB;IAElB,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CACvB,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,UAAU;QAC1C,SAAS,CAAC,IAAI,KAAK,QAAQ;QAC3B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAC5B,MAAM,CAAC,EAAE,KAAK,SAAS,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,CACjE,CACJ,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,KAAgB,EAChB,IAAY,EACZ,MAAc,EACd,KAAuB;IAEvB,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACnD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,cAAc,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,eAAe,CAAC;IAC5E,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;IACvE,OAAO;QACL,MAAM,EAAE,MAAM;YACZ,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC;YACrB,CAAC,CAAC;gBACE,EAAE,EAAE,GAAG,cAAc,KAAK,UAAU,EAAE;gBACtC,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,IAAI;gBACJ,UAAU,EAAE,CAAC;gBACb,QAAQ,EAAE,CAAC;aACsB;QACvC,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI;QAC1B,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;QAC5B,SAAS,EAAE,SAAS;KACrB,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,KAAgB,EAChB,IAAY,EACZ,MAAc,EACd,UAAkB,EAClB,MAAc;IAEd,MAAM,OAAO,GAAG,IAAI,MAAM,CACxB,UAAU,MAAM,
|
|
1
|
+
{"version":3,"file":"laravel.js","sourceRoot":"","sources":["../../../src/tools/route-tools/laravel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mermaid-call-chain.d.ts","sourceRoot":"","sources":["../../../src/tools/route-tools/mermaid-call-chain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"mermaid-call-chain.d.ts","sourceRoot":"","sources":["../../../src/tools/route-tools/mermaid-call-chain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAwD1E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAqBjF"}
|
|
@@ -4,7 +4,15 @@ function nodeAlias(node, aliases) {
|
|
|
4
4
|
if (existing)
|
|
5
5
|
return existing;
|
|
6
6
|
const baseName = node.file.split("/").pop()?.replace(/\.\w+$/, "") ?? node.name;
|
|
7
|
-
|
|
7
|
+
// Collapsing every non-alphanumeric to `_` made distinct participants share one alias:
|
|
8
|
+
// `user-service.ts:getAll` and `user.service.ts:getAll` both became `user_service_getAll`, so
|
|
9
|
+
// two nodes merged into one lifeline and the diagram silently misrepresented the call chain.
|
|
10
|
+
// A per-alias counter keeps them apart without changing the readable prefix.
|
|
11
|
+
const base = `${baseName}_${node.name}`.replace(/[^a-zA-Z0-9_]/g, "_");
|
|
12
|
+
const taken = new Set(aliases.values());
|
|
13
|
+
let alias = base;
|
|
14
|
+
for (let n = 2; taken.has(alias); n++)
|
|
15
|
+
alias = `${base}_${n}`;
|
|
8
16
|
aliases.set(key, alias);
|
|
9
17
|
return alias;
|
|
10
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mermaid-call-chain.js","sourceRoot":"","sources":["../../../src/tools/route-tools/mermaid-call-chain.ts"],"names":[],"mappings":"AAOA,SAAS,SAAS,CAChB,IAA0C,EAC1C,OAA4B;IAE5B,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;IAChF,MAAM,
|
|
1
|
+
{"version":3,"file":"mermaid-call-chain.js","sourceRoot":"","sources":["../../../src/tools/route-tools/mermaid-call-chain.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@ function addNestHandler(input) {
|
|
|
26
26
|
}
|
|
27
27
|
function appendPathDecorators(context, decorator) {
|
|
28
28
|
const { handlers, index, filePath, source, controllerPrefix, searchPath } = context;
|
|
29
|
-
const pattern = new RegExp(`@${decorator}\\s*\\(\\s*['"\`]([^'"\`]*)['"\`]\\s*\\)\\s*(?:\\n\\s*@[^\\n]+)*\\n\\s*(?:async\\s+)
|
|
29
|
+
const pattern = new RegExp(`@${decorator}\\s*\\(\\s*['"\`]([^'"\`]*)['"\`]\\s*\\)\\s*(?:\\n\\s*@[^\\n]+)*\\n\\s*(?:(?:public|private|protected|static|readonly|override|async)\\s+)*(\\w+)`, "g");
|
|
30
30
|
for (const match of source.matchAll(pattern)) {
|
|
31
31
|
const fullPath = `/${controllerPrefix}/${match[1] ?? ""}`.replace(/\/+/g, "/");
|
|
32
32
|
if (matchPath(fullPath, searchPath)) {
|
|
@@ -43,7 +43,7 @@ function appendPathDecorators(context, decorator) {
|
|
|
43
43
|
}
|
|
44
44
|
function appendEmptyDecorators(context, decorator) {
|
|
45
45
|
const { handlers, index, filePath, source, controllerPrefix, searchPath } = context;
|
|
46
|
-
const pattern = new RegExp(`@${decorator}\\s*\\(\\s*\\)\\s*(?:\\n\\s*@[^\\n]+)*\\n\\s*(?:async\\s+)
|
|
46
|
+
const pattern = new RegExp(`@${decorator}\\s*\\(\\s*\\)\\s*(?:\\n\\s*@[^\\n]+)*\\n\\s*(?:(?:public|private|protected|static|readonly|override|async)\\s+)*(\\w+)`, "g");
|
|
47
47
|
const fullPath = `/${controllerPrefix}`.replace(/\/+/g, "/") || "/";
|
|
48
48
|
if (!matchPath(fullPath, searchPath))
|
|
49
49
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nest.js","sourceRoot":"","sources":["../../../src/tools/route-tools/nest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAqBrD,SAAS,cAAc,CAAC,KAAuB;IAC7C,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAC/E,IAAI,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAC3C,OAAO,CAAC,IAAI,KAAK,QAAQ;QACzB,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY;QACpC,OAAO,CAAC,MAAM,KAAK,MAAM,CAC1B;QAAE,OAAO;IAEV,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAC/B,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,KAAK,YAAY,CAC9E,CAAC;IACF,QAAQ,CAAC,IAAI,CAAC;QACZ,MAAM,EAAE,MAAM;YACZ,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC;YACrB,CAAC,CAAC;gBACE,EAAE,EAAE,GAAG,QAAQ,IAAI,YAAY,EAAE;gBACjC,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,CAAC;gBACb,QAAQ,EAAE,CAAC;aACsB;QACvC,IAAI,EAAE,QAAQ;QACd,MAAM;QACN,SAAS,EAAE,QAAQ;KACpB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAAwB,EACxB,SAAiB;IAEjB,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IACpF,MAAM,OAAO,GAAG,IAAI,MAAM,CACxB,IAAI,SAAS,
|
|
1
|
+
{"version":3,"file":"nest.js","sourceRoot":"","sources":["../../../src/tools/route-tools/nest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next-trace.d.ts","sourceRoot":"","sources":["../../../src/tools/route-tools/next-trace.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"next-trace.d.ts","sourceRoot":"","sources":["../../../src/tools/route-tools/next-trace.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AA0CjE,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,YAAY,EAAE,EACxB,aAAa,EAAE,UAAU,EAAE,GAC1B,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
|
|
@@ -12,10 +12,25 @@ async function findServerActions(repoRoot, calleeSymbols, callChain) {
|
|
|
12
12
|
if (!hasServerDirective.get(symbol.file))
|
|
13
13
|
continue;
|
|
14
14
|
const callerIndex = callChain.findIndex((node) => node.file === symbol.file && node.name === symbol.name);
|
|
15
|
+
// `callChain[callerIndex - 1]` treated a FLATTENED depth-first list as if adjacency meant
|
|
16
|
+
// "calls". For the first child of a sibling subtree the previous element is that sibling's
|
|
17
|
+
// deepest descendant, so `called_from` named a function that never calls this one. The parent
|
|
18
|
+
// is the nearest PRECEDING entry one level shallower.
|
|
19
|
+
const node = callerIndex >= 0 ? callChain[callerIndex] : undefined;
|
|
20
|
+
let calledFrom;
|
|
21
|
+
if (node && callerIndex > 0) {
|
|
22
|
+
for (let i = callerIndex - 1; i >= 0; i--) {
|
|
23
|
+
const candidate = callChain[i];
|
|
24
|
+
if (candidate && candidate.depth === node.depth - 1) {
|
|
25
|
+
calledFrom = candidate.name;
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
15
30
|
actions.push({
|
|
16
31
|
name: symbol.name,
|
|
17
32
|
file: symbol.file,
|
|
18
|
-
called_from:
|
|
33
|
+
called_from: calledFrom,
|
|
19
34
|
});
|
|
20
35
|
}
|
|
21
36
|
return actions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next-trace.js","sourceRoot":"","sources":["../../../src/tools/route-tools/next-trace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG3F,KAAK,UAAU,iBAAiB,CAC9B,QAAgB,EAChB,aAA2B,EAC3B,SAAyC;IAEzC,MAAM,OAAO,GAAoD,EAAE,CAAC;IACpE,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;QACzE,IAAI;QACJ,MAAM,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,KAAK,YAAY;KAClD,CAAC,CAAC,CAAC;IACb,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAErD,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACnC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,SAAS;QAEnD,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,CACrC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CACjE,CAAC;QACF,
|
|
1
|
+
{"version":3,"file":"next-trace.js","sourceRoot":"","sources":["../../../src/tools/route-tools/next-trace.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../../src/tools/route-tools/next.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAI5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../../src/tools/route-tools/next.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAI5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAqC/C,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,EAAE,CAgBvF;AAwBD,2FAA2F;AAC3F,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,EAAE,CAa5F"}
|
|
@@ -12,7 +12,11 @@ function syntheticHandler(file, name) {
|
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
14
|
function appHandlersForFile(index, file) {
|
|
15
|
-
const symbols = index.symbols.filter(
|
|
15
|
+
const symbols = index.symbols.filter(
|
|
16
|
+
// HEAD and OPTIONS are route exports like any other. Omitting them did not just lose the
|
|
17
|
+
// method — a file exporting only HEAD fell into the `symbols.length === 0` branch below and
|
|
18
|
+
// was reported as an un-methoded synthetic "route".
|
|
19
|
+
(symbol) => symbol.file === file && /^(GET|POST|PUT|DELETE|PATCH|HEAD|OPTIONS)$/.test(symbol.name));
|
|
16
20
|
if (symbols.length === 0) {
|
|
17
21
|
return [{
|
|
18
22
|
symbol: syntheticHandler(file, "route"),
|
|
@@ -34,10 +38,13 @@ export function findNextJSHandlers(index, searchPath) {
|
|
|
34
38
|
const handlers = [];
|
|
35
39
|
const normalizedSearch = searchPath.replace(/^\/|\/$/g, "");
|
|
36
40
|
for (const file of index.files) {
|
|
37
|
-
|
|
41
|
+
// `(.*?)/route.` required at least one segment between `app/` and the file, so the ROOT route
|
|
42
|
+
// `app/route.ts` — a real and common Next.js route for `/` — could never match. The segment
|
|
43
|
+
// group is now optional, and an absent group means the root path.
|
|
44
|
+
const routeMatch = /app\/(?:(.*)\/)?route\.[jt]sx?$/.exec(file.path);
|
|
38
45
|
if (!routeMatch)
|
|
39
46
|
continue;
|
|
40
|
-
const routePath = routeMatch[1].replace(/\([^)]+\)\/?/g, "");
|
|
47
|
+
const routePath = (routeMatch[1] ?? "").replace(/\([^)]+\)\/?/g, "");
|
|
41
48
|
if (matchPath(routePath, normalizedSearch)) {
|
|
42
49
|
handlers.push(...appHandlersForFile(index, file.path));
|
|
43
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next.js","sourceRoot":"","sources":["../../../src/tools/route-tools/next.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,SAAS,gBAAgB,CAAC,IAAY,EAAE,IAAY;IAClD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,IAAI;QACJ,IAAI,EAAE,UAAU;QAChB,IAAI;QACJ,UAAU,EAAE,CAAC;QACb,QAAQ,EAAE,CAAC;KACE,CAAC;AAClB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAgB,EAAE,IAAY;IACxD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"next.js","sourceRoot":"","sources":["../../../src/tools/route-tools/next.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-mermaid.d.ts","sourceRoot":"","sources":["../../../src/tools/route-tools/route-mermaid.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"route-mermaid.d.ts","sourceRoot":"","sources":["../../../src/tools/route-tools/route-mermaid.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAiDnD,0DAA0D;AAC1D,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAY/D"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { appendTracedCalls } from "./mermaid-call-chain.js";
|
|
2
2
|
function mermaidText(value) {
|
|
3
|
-
|
|
3
|
+
// Newlines were the only thing escaped, but Mermaid also breaks on quotes and bracket/brace
|
|
4
|
+
// characters — and route labels are full of them (`/users/{id}`, `[slug]`). A single such path
|
|
5
|
+
// corrupted the whole diagram, which fails as unparseable output rather than as a wrong label.
|
|
6
|
+
return value
|
|
7
|
+
.replace(/[\r\n]+/g, " ")
|
|
8
|
+
.replace(/"/g, "'")
|
|
9
|
+
.replace(/[[\]{}()<>;#|]/g, "_");
|
|
4
10
|
}
|
|
5
11
|
function appendRequest(lines, result, method) {
|
|
6
12
|
if (result.middleware?.applies) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-mermaid.js","sourceRoot":"","sources":["../../../src/tools/route-tools/route-mermaid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG5D,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"route-mermaid.js","sourceRoot":"","sources":["../../../src/tools/route-tools/route-mermaid.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spring-kotlin.d.ts","sourceRoot":"","sources":["../../../src/tools/route-tools/spring-kotlin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"spring-kotlin.d.ts","sourceRoot":"","sources":["../../../src/tools/route-tools/spring-kotlin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAwE/C,4EAA4E;AAC5E,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC,CAGzB"}
|
|
@@ -39,7 +39,10 @@ function scanMapping(context, mapping) {
|
|
|
39
39
|
function scanSpringFile(index, file, source, searchPath) {
|
|
40
40
|
if (!/@(?:RestController|Controller)\b/.test(source))
|
|
41
41
|
return [];
|
|
42
|
-
|
|
42
|
+
// `.exec(source)` took the FIRST @RequestMapping anywhere in the file. A method-level mapping
|
|
43
|
+
// declared above the class annotation therefore became the prefix for every route in it. Anchor
|
|
44
|
+
// on the one that actually precedes the class declaration.
|
|
45
|
+
const classPrefix = /@RequestMapping\s*\(\s*(?:value\s*=\s*)?["']([^"']*)["'][\s\S]{0,400}?\bclass\b/
|
|
43
46
|
.exec(source)?.[1] ?? "";
|
|
44
47
|
const context = { index, file, source, classPrefix, searchPath };
|
|
45
48
|
return MAPPINGS.flatMap((mapping) => scanMapping(context, mapping));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spring-kotlin.js","sourceRoot":"","sources":["../../../src/tools/route-tools/spring-kotlin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGrD,MAAM,QAAQ,GAAG;IACf,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE;IAC3C,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE;IAC7C,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE;IAC3C,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE;IACjD,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE;CAChD,CAAC;AAUF,SAAS,WAAW,CAClB,OAA0B,EAC1B,OAAgC;IAEhC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IACjE,MAAM,OAAO,GAAG,IAAI,MAAM,CACxB,IAAI,OAAO,CAAC,UAAU,6FAA6F,EACnH,GAAG,CACJ,CAAC;IACF,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,MAAM,QAAQ,GAAG,GAAG,WAAW,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACzE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC;YAAE,SAAS;QAE/C,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAC/B,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,IAAI,SAAS,CAAC,IAAI,KAAK,YAAY,CAC1E,CAAC;QACF,QAAQ,CAAC,IAAI,CAAC;YACZ,MAAM,EAAE,MAAM;gBACZ,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC;gBACrB,CAAC,CAAC;oBACE,EAAE,EAAE,GAAG,IAAI,IAAI,YAAY,EAAE;oBAC7B,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,QAAQ;oBACd,IAAI;oBACJ,UAAU,EAAE,CAAC;oBACb,QAAQ,EAAE,CAAC;iBACsB;YACvC,IAAI;YACJ,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE,eAAe;SAC3B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CACrB,KAAgB,EAChB,IAAY,EACZ,MAAc,EACd,UAAkB;IAElB,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IAEhE,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"spring-kotlin.js","sourceRoot":"","sources":["../../../src/tools/route-tools/spring-kotlin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-route.d.ts","sourceRoot":"","sources":["../../../src/tools/route-tools/trace-route.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAgB,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"trace-route.d.ts","sourceRoot":"","sources":["../../../src/tools/route-tools/trace-route.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAgB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAyCjE,oFAAoF;AACpF,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,GAChC,OAAO,CAAC,gBAAgB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA0BjD"}
|
|
@@ -23,9 +23,12 @@ function traceHandlerCalls(index, handlers) {
|
|
|
23
23
|
const fullSymbol = index.symbols.find((symbol) => symbol.file === handler.symbol.file &&
|
|
24
24
|
symbol.name === handler.symbol.name &&
|
|
25
25
|
symbol.start_line === handler.symbol.start_line);
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
// Synthetic handlers (framework files with no extracted symbol) carry start_line 1 and never
|
|
27
|
+
// match a real symbol, so this used to `continue` — the route came back with an EMPTY call
|
|
28
|
+
// chain and nothing saying why. Falling back to the handler's own symbol keeps the handler
|
|
29
|
+
// itself in the chain; it simply has no callees to walk.
|
|
30
|
+
const startSymbol = fullSymbol ?? handler.symbol;
|
|
31
|
+
appendCallTree(buildCallTree(startSymbol, adjacency, "callees", 3), 0, accumulator);
|
|
29
32
|
}
|
|
30
33
|
return accumulator;
|
|
31
34
|
}
|
|
@@ -39,11 +42,16 @@ export async function traceRoute(repo, path, outputFormat) {
|
|
|
39
42
|
return { path, handlers: [], call_chain: [], db_calls: [] };
|
|
40
43
|
}
|
|
41
44
|
const { callChain, calleeSymbols } = traceHandlerCalls(index, handlers);
|
|
45
|
+
// Handlers in one file (GET + POST) walk overlapping callee trees, so the same symbol arrived
|
|
46
|
+
// once per handler that reached it and findDbCalls — which does not dedupe either — emitted the
|
|
47
|
+
// same database call several times. Deduped by identity, not by name: two distinct symbols may
|
|
48
|
+
// share a name.
|
|
49
|
+
const uniqueCallees = [...new Map(calleeSymbols.map((s) => [`${s.file}:${s.name}:${s.start_line}`, s])).values()];
|
|
42
50
|
const result = {
|
|
43
51
|
path,
|
|
44
52
|
handlers,
|
|
45
53
|
call_chain: callChain,
|
|
46
|
-
db_calls: findDbCalls(
|
|
54
|
+
db_calls: findDbCalls(uniqueCallees),
|
|
47
55
|
};
|
|
48
56
|
await enrichNextjsTrace(result, index, handlers, calleeSymbols);
|
|
49
57
|
return outputFormat === "mermaid"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-route.js","sourceRoot":"","sources":["../../../src/tools/route-tools/trace-route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAQlD,SAAS,cAAc,CAAC,IAAc,EAAE,KAAa,EAAE,WAA6B;IAClF,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC;QACzB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;QACtB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;QACtB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;QACtB,KAAK;KACN,CAAC,CAAC;IACH,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAgB,EAAE,QAAwB;IACnE,MAAM,WAAW,GAAqB,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;IAC3E,MAAM,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAE5D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CACnC,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,IAAI;YACnC,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,IAAI;YACnC,MAAM,CAAC,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,UAAU,CAClD,CAAC;QACF,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"trace-route.js","sourceRoot":"","sources":["../../../src/tools/route-tools/trace-route.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yii2.d.ts","sourceRoot":"","sources":["../../../src/tools/route-tools/yii2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"yii2.d.ts","sourceRoot":"","sources":["../../../src/tools/route-tools/yii2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA4E/C,8EAA8E;AAC9E,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC,CAWzB"}
|
|
@@ -41,19 +41,24 @@ function configRuleHandler(index, route, method) {
|
|
|
41
41
|
return handler ? { ...handler, method } : null;
|
|
42
42
|
}
|
|
43
43
|
async function findYii2HandlersFromConfig(index, searchPath) {
|
|
44
|
-
const [config] =
|
|
45
|
-
|
|
44
|
+
// `const [config] = ...` took the FIRST config/web.php and ignored the rest. A Yii2 application
|
|
45
|
+
// template has one per app (frontend, backend, console), so every route defined outside whichever
|
|
46
|
+
// file the walker happened to return first was invisible.
|
|
47
|
+
const configs = await readIndexedFiles(index, (path) => /config\/web\.php$/.test(path));
|
|
48
|
+
if (configs.length === 0)
|
|
46
49
|
return [];
|
|
47
50
|
const normalizedSearch = searchPath.replace(/^\/|\/$/g, "").toLowerCase();
|
|
48
51
|
const pattern = /['"](?:(GET|POST|PUT|DELETE|PATCH)\s+)?([^'"]+)['"]\s*=>\s*['"]([^'"]+)['"]/g;
|
|
49
52
|
const handlers = [];
|
|
50
|
-
for (const
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
for (const config of configs) {
|
|
54
|
+
for (const match of config.source.matchAll(pattern)) {
|
|
55
|
+
const rulePath = match[2].replace(/<\w+(?::[^>]+)?>/g, "[param]").toLowerCase();
|
|
56
|
+
if (!matchPath(rulePath, normalizedSearch))
|
|
57
|
+
continue;
|
|
58
|
+
const handler = configRuleHandler(index, match[3], match[1]?.toUpperCase() ?? "GET");
|
|
59
|
+
if (handler)
|
|
60
|
+
handlers.push(handler);
|
|
61
|
+
}
|
|
57
62
|
}
|
|
58
63
|
return handlers;
|
|
59
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yii2.js","sourceRoot":"","sources":["../../../src/tools/route-tools/yii2.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGrD,SAAS,QAAQ,CAAC,KAAa;IAC7B,OAAO,KAAK;SACT,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,QAAkB;IACrC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC3D,CAAC;IACD,OAAO;QACL,YAAY,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAE;QAC5C,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAE;KACzC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,KAAgB,EAChB,YAAoB,EACpB,QAAgB;IAEhB,MAAM,cAAc,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC;IAC7D,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CACnC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,CACtE,CAAC;IACF,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAE7B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAC/B,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,EAAE,CAC1E,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,IAAI,UAAU,CAAC;IACpC,OAAO;QACL,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC;QAC3B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpC,SAAS,EAAE,MAAM;KAClB,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAgB,EAAE,KAAa,EAAE,MAAc;IACxE,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/E,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,0BAA0B,CACvC,KAAgB,EAChB,UAAkB;IAElB,
|
|
1
|
+
{"version":3,"file":"yii2.js","sourceRoot":"","sources":["../../../src/tools/route-tools/yii2.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,5 +8,14 @@ export declare function getSeverity(rule: string): SecretSeverity;
|
|
|
8
8
|
export declare function isAllowlisted(lines: string[], lineNumber: number): boolean;
|
|
9
9
|
export declare function offsetToLine(content: string, offset: number): number;
|
|
10
10
|
export declare function enrichWithSymbolContext(finding: SecretFinding, symbols: CodeSymbol[]): SecretFinding;
|
|
11
|
-
|
|
11
|
+
/**
|
|
12
|
+
* `resolveSymbols` is a callback, not an array, because symbols are only needed to ATTRIBUTE a
|
|
13
|
+
* finding to the symbol containing it — and almost no file contains a secret.
|
|
14
|
+
*
|
|
15
|
+
* Passing the array meant the caller had to have every symbol in the repository resident before
|
|
16
|
+
* scanning the first file: 352,166 objects and 349 MB on the largest index here, to answer a
|
|
17
|
+
* question that, for the overwhelming majority of files, is never asked. Now the lookup happens
|
|
18
|
+
* once per file that actually matched, and not at all otherwise.
|
|
19
|
+
*/
|
|
20
|
+
export declare function collectSecretFindings(content: string, relPath: string, resolveSymbols: () => CodeSymbol[] | Promise<CodeSymbol[]>): Promise<SecretFinding[]>;
|
|
12
21
|
//# sourceMappingURL=secret-detectors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secret-detectors.d.ts","sourceRoot":"","sources":["../../src/tools/secret-detectors.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAQ3F,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAQvD,CAAC;AAEF,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAUvE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAExD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAK1E;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAMpE;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,UAAU,EAAE,GACpB,aAAa,CAaf;AAED,
|
|
1
|
+
{"version":3,"file":"secret-detectors.d.ts","sourceRoot":"","sources":["../../src/tools/secret-detectors.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAQ3F,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAQvD,CAAC;AAEF,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAUvE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAExD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAK1E;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAMpE;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,UAAU,EAAE,GACpB,aAAa,CAaf;AAED;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,GACzD,OAAO,CAAC,aAAa,EAAE,CAAC,CAmB1B"}
|
|
@@ -66,10 +66,24 @@ export function enrichWithSymbolContext(finding, symbols) {
|
|
|
66
66
|
}
|
|
67
67
|
return enriched;
|
|
68
68
|
}
|
|
69
|
-
|
|
69
|
+
/**
|
|
70
|
+
* `resolveSymbols` is a callback, not an array, because symbols are only needed to ATTRIBUTE a
|
|
71
|
+
* finding to the symbol containing it — and almost no file contains a secret.
|
|
72
|
+
*
|
|
73
|
+
* Passing the array meant the caller had to have every symbol in the repository resident before
|
|
74
|
+
* scanning the first file: 352,166 objects and 349 MB on the largest index here, to answer a
|
|
75
|
+
* question that, for the overwhelming majority of files, is never asked. Now the lookup happens
|
|
76
|
+
* once per file that actually matched, and not at all otherwise.
|
|
77
|
+
*/
|
|
78
|
+
export async function collectSecretFindings(content, relPath, resolveSymbols) {
|
|
70
79
|
const lines = content.split("\n");
|
|
71
80
|
const contextType = classifyContext(relPath);
|
|
72
|
-
|
|
81
|
+
const raw = scan(content);
|
|
82
|
+
// The early return is the whole optimisation: no secret, no symbol lookup.
|
|
83
|
+
if (raw.length === 0)
|
|
84
|
+
return [];
|
|
85
|
+
const symbols = await resolveSymbols();
|
|
86
|
+
return raw.flatMap((secret) => {
|
|
73
87
|
const line = offsetToLine(content, secret.start);
|
|
74
88
|
if (isAllowlisted(lines, line))
|
|
75
89
|
return [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secret-detectors.js","sourceRoot":"","sources":["../../src/tools/secret-detectors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAInD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAChE,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IAC3D,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU;CACtC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAmC;IAC1D,GAAG,EAAE,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU;IACxE,GAAG,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU;IAC7D,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM;IAC1E,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IACrE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;IAC1E,iBAAiB,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ;IACpD,4BAA4B,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ;CACtD,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IACrC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,OAAO,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,IAAI,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,SAAS,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;WACzE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;WACxE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;QACzF,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAe,EAAE,UAAkB;IAC/D,MAAM,OAAO,GAAG,UAAU,GAAG,CAAC,CAAC;IAC/B,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAChC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CACjG,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,MAAc;IAC1D,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtD,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,IAAI,EAAE,CAAC;IAClC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,OAAsB,EACtB,OAAqB;IAErB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI;WACrE,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC;IACjF,IAAI,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC;IAC5B,MAAM,QAAQ,GAAkB;QAC9B,GAAG,OAAO;QACV,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE;KACpF,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,CAAC,GAAG,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAC7E,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC;IAC9B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,qBAAqB,
|
|
1
|
+
{"version":3,"file":"secret-detectors.js","sourceRoot":"","sources":["../../src/tools/secret-detectors.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,5 +3,7 @@ import type { SecretFinding, SecretSeverity } from "./secret-scan-types.js";
|
|
|
3
3
|
export declare function severityAtLeast(severity: SecretSeverity, minimum: SecretSeverity): boolean;
|
|
4
4
|
export declare function isMissingFileError(err: unknown): boolean;
|
|
5
5
|
export declare function shouldSkipFile(filePath: string): boolean;
|
|
6
|
-
export declare function scanFileForSecrets(filePath: string, relPath: string, repo: string,
|
|
6
|
+
export declare function scanFileForSecrets(filePath: string, relPath: string, repo: string,
|
|
7
|
+
/** Called only if the file actually contains a candidate secret — see collectSecretFindings. */
|
|
8
|
+
resolveSymbols: () => CodeSymbol[] | Promise<CodeSymbol[]>): Promise<SecretFinding[]>;
|
|
7
9
|
//# sourceMappingURL=secret-file-scanner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secret-file-scanner.d.ts","sourceRoot":"","sources":["../../src/tools/secret-file-scanner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,OAAO,KAAK,EAAoB,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAM9F,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAG1F;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAGxD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAKxD;AAoBD,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"secret-file-scanner.d.ts","sourceRoot":"","sources":["../../src/tools/secret-file-scanner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,OAAO,KAAK,EAAoB,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAM9F,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAG1F;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAGxD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAKxD;AAoBD,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM;AACZ,gGAAgG;AAChG,cAAc,EAAE,MAAM,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,GACzD,OAAO,CAAC,aAAa,EAAE,CAAC,CAkB1B"}
|