@lzehrung/codegraph 2.3.20 → 2.3.22
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 +6 -5
- package/THIRD_PARTY_NOTICES +4 -4
- package/codegraph-skill/codegraph/SKILL.md +97 -281
- package/dist/agent/call-hierarchy.d.ts +28 -0
- package/dist/agent/call-hierarchy.d.ts.map +1 -0
- package/dist/agent/call-hierarchy.js +82 -0
- package/dist/agent/call-hierarchy.js.map +1 -0
- package/dist/agent/candidate-tests.d.ts +12 -0
- package/dist/agent/candidate-tests.d.ts.map +1 -0
- package/dist/agent/candidate-tests.js +17 -0
- package/dist/agent/candidate-tests.js.map +1 -0
- package/dist/agent/explain.d.ts +8 -2
- package/dist/agent/explain.d.ts.map +1 -1
- package/dist/agent/explain.js +17 -3
- package/dist/agent/explain.js.map +1 -1
- package/dist/agent/explore.d.ts +3 -3
- package/dist/agent/explore.d.ts.map +1 -1
- package/dist/agent/explore.js +2 -2
- package/dist/agent/explore.js.map +1 -1
- package/dist/agent/file-view.d.ts +55 -0
- package/dist/agent/file-view.d.ts.map +1 -0
- package/dist/agent/file-view.js +521 -0
- package/dist/agent/file-view.js.map +1 -0
- package/dist/agent/follow-ups.d.ts +10 -0
- package/dist/agent/follow-ups.d.ts.map +1 -0
- package/dist/agent/follow-ups.js +175 -0
- package/dist/agent/follow-ups.js.map +1 -0
- package/dist/agent/normalize.d.ts +1 -1
- package/dist/agent/normalize.d.ts.map +1 -1
- package/dist/agent/normalize.js +2 -2
- package/dist/agent/normalize.js.map +1 -1
- package/dist/agent/orient.d.ts +1 -1
- package/dist/agent/orient.d.ts.map +1 -1
- package/dist/agent/orient.js +2 -2
- package/dist/agent/orient.js.map +1 -1
- package/dist/agent/packet.d.ts +1 -1
- package/dist/agent/packet.d.ts.map +1 -1
- package/dist/agent/packet.js +1 -1
- package/dist/agent/packet.js.map +1 -1
- package/dist/agent/query-index/candidates.d.ts +8 -2
- package/dist/agent/query-index/candidates.d.ts.map +1 -1
- package/dist/agent/query-index/candidates.js +12 -5
- package/dist/agent/query-index/candidates.js.map +1 -1
- package/dist/agent/query-index/content.js +2 -2
- package/dist/agent/query-index/content.js.map +1 -1
- package/dist/agent/query-index/query-index-worker.d.ts +8 -0
- package/dist/agent/query-index/query-index-worker.d.ts.map +1 -0
- package/dist/agent/query-index/query-index-worker.js +11 -0
- package/dist/agent/query-index/query-index-worker.js.map +1 -0
- package/dist/agent/query-index/session-store.d.ts +5 -0
- package/dist/agent/query-index/session-store.d.ts.map +1 -0
- package/dist/agent/query-index/session-store.js +69 -0
- package/dist/agent/query-index/session-store.js.map +1 -0
- package/dist/agent/query-index/source-identity.d.ts +3 -0
- package/dist/agent/query-index/source-identity.d.ts.map +1 -0
- package/dist/agent/query-index/source-identity.js +12 -0
- package/dist/agent/query-index/source-identity.js.map +1 -0
- package/dist/agent/query-index/store.d.ts +5 -1
- package/dist/agent/query-index/store.d.ts.map +1 -1
- package/dist/agent/query-index/store.js +98 -31
- package/dist/agent/query-index/store.js.map +1 -1
- package/dist/agent/query-index/update.js +3 -3
- package/dist/agent/query-index/update.js.map +1 -1
- package/dist/agent/query-index/worker-pool.d.ts +27 -0
- package/dist/agent/query-index/worker-pool.d.ts.map +1 -0
- package/dist/agent/query-index/worker-pool.js +114 -0
- package/dist/agent/query-index/worker-pool.js.map +1 -0
- package/dist/agent/refactor-plan.d.ts +40 -0
- package/dist/agent/refactor-plan.d.ts.map +1 -0
- package/dist/agent/refactor-plan.js +226 -0
- package/dist/agent/refactor-plan.js.map +1 -0
- package/dist/agent/rename-preview.d.ts +57 -0
- package/dist/agent/rename-preview.d.ts.map +1 -0
- package/dist/agent/rename-preview.js +1062 -0
- package/dist/agent/rename-preview.js.map +1 -0
- package/dist/agent/search.d.ts +8 -2
- package/dist/agent/search.d.ts.map +1 -1
- package/dist/agent/search.js +26 -9
- package/dist/agent/search.js.map +1 -1
- package/dist/agent/semantic-symbols.d.ts +16 -0
- package/dist/agent/semantic-symbols.d.ts.map +1 -0
- package/dist/agent/semantic-symbols.js +97 -0
- package/dist/agent/semantic-symbols.js.map +1 -0
- package/dist/agent/semantic.d.ts +1 -1
- package/dist/agent/semantic.d.ts.map +1 -1
- package/dist/agent/session-lifecycle.d.ts +5 -0
- package/dist/agent/session-lifecycle.d.ts.map +1 -0
- package/dist/agent/session-lifecycle.js +18 -0
- package/dist/agent/session-lifecycle.js.map +1 -0
- package/dist/agent/session.d.ts +3 -3
- package/dist/agent/session.d.ts.map +1 -1
- package/dist/agent/session.js +73 -26
- package/dist/agent/session.js.map +1 -1
- package/dist/agent/symbol-lookup.d.ts +12 -0
- package/dist/agent/symbol-lookup.d.ts.map +1 -0
- package/dist/agent/symbol-lookup.js +26 -0
- package/dist/agent/symbol-lookup.js.map +1 -0
- package/dist/agent/type-hierarchy.d.ts +39 -0
- package/dist/agent/type-hierarchy.d.ts.map +1 -0
- package/dist/agent/type-hierarchy.js +125 -0
- package/dist/agent/type-hierarchy.js.map +1 -0
- package/dist/agent/workspace-symbols.d.ts +18 -0
- package/dist/agent/workspace-symbols.d.ts.map +1 -0
- package/dist/agent/workspace-symbols.js +75 -0
- package/dist/agent/workspace-symbols.js.map +1 -0
- package/dist/agent-tools.d.ts +6 -6
- package/dist/agent-tools.d.ts.map +1 -1
- package/dist/agent-tools.js +6 -6
- package/dist/agent-tools.js.map +1 -1
- package/dist/agent.d.ts +18 -18
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +10 -10
- package/dist/agent.js.map +1 -1
- package/dist/analysis-summary.d.ts +19 -0
- package/dist/analysis-summary.d.ts.map +1 -0
- package/dist/analysis-summary.js +80 -0
- package/dist/analysis-summary.js.map +1 -0
- package/dist/bin/cli.js +37347 -36812
- package/dist/bin/query-index-worker.js +4382 -0
- package/dist/bin/raw-query-worker.js +383 -0
- package/dist/bootstrap/tree-sitter-languages.d.ts +5 -0
- package/dist/bootstrap/tree-sitter-languages.d.ts.map +1 -0
- package/dist/bootstrap/tree-sitter-languages.js +41 -0
- package/dist/bootstrap/tree-sitter-languages.js.map +1 -0
- package/dist/chunking/chunk-blocks.d.ts +9 -0
- package/dist/chunking/chunk-blocks.d.ts.map +1 -0
- package/dist/chunking/chunk-blocks.js +60 -0
- package/dist/chunking/chunk-blocks.js.map +1 -0
- package/dist/chunking/chunk-file.d.ts +39 -0
- package/dist/chunking/chunk-file.d.ts.map +1 -0
- package/dist/chunking/chunk-file.js +152 -0
- package/dist/chunking/chunk-file.js.map +1 -0
- package/dist/chunking/chunk-id.d.ts +7 -0
- package/dist/chunking/chunk-id.d.ts.map +1 -0
- package/dist/chunking/chunk-id.js +30 -0
- package/dist/chunking/chunk-id.js.map +1 -0
- package/dist/chunking/chunk-matches.d.ts +4 -0
- package/dist/chunking/chunk-matches.d.ts.map +1 -0
- package/dist/chunking/chunk-matches.js +65 -0
- package/dist/chunking/chunk-matches.js.map +1 -0
- package/dist/chunking/chunk-merge.d.ts +4 -0
- package/dist/chunking/chunk-merge.d.ts.map +1 -0
- package/dist/chunking/chunk-merge.js +144 -0
- package/dist/chunking/chunk-merge.js.map +1 -0
- package/dist/chunking/chunk-sfc.d.ts +18 -0
- package/dist/chunking/chunk-sfc.d.ts.map +1 -0
- package/dist/chunking/chunk-sfc.js +165 -0
- package/dist/chunking/chunk-sfc.js.map +1 -0
- package/dist/chunking/chunk-split.d.ts +6 -0
- package/dist/chunking/chunk-split.d.ts.map +1 -0
- package/dist/chunking/chunk-split.js +155 -0
- package/dist/chunking/chunk-split.js.map +1 -0
- package/dist/chunking/chunk-text-file.d.ts +28 -0
- package/dist/chunking/chunk-text-file.d.ts.map +1 -0
- package/dist/chunking/chunk-text-file.js +107 -0
- package/dist/chunking/chunk-text-file.js.map +1 -0
- package/dist/chunking/language-config.d.ts +35 -0
- package/dist/chunking/language-config.d.ts.map +1 -0
- package/dist/chunking/language-config.js +24 -0
- package/dist/chunking/language-config.js.map +1 -0
- package/dist/cli/affected.js +1 -1
- package/dist/cli/affected.js.map +1 -1
- package/dist/cli/call-hierarchy.d.ts +6 -0
- package/dist/cli/call-hierarchy.d.ts.map +1 -0
- package/dist/cli/call-hierarchy.js +72 -0
- package/dist/cli/call-hierarchy.js.map +1 -0
- package/dist/cli/chunk.js +5 -5
- package/dist/cli/chunk.js.map +1 -1
- package/dist/cli/command-catalog.d.ts +14 -0
- package/dist/cli/command-catalog.d.ts.map +1 -0
- package/dist/cli/command-catalog.js +118 -0
- package/dist/cli/command-catalog.js.map +1 -0
- package/dist/cli/command-table.d.ts +16 -0
- package/dist/cli/command-table.d.ts.map +1 -0
- package/dist/cli/command-table.js +758 -0
- package/dist/cli/command-table.js.map +1 -0
- package/dist/cli/compile-cache.d.ts +22 -0
- package/dist/cli/compile-cache.d.ts.map +1 -0
- package/dist/cli/compile-cache.js +81 -0
- package/dist/cli/compile-cache.js.map +1 -0
- package/dist/cli/discovery-globs.d.ts +11 -0
- package/dist/cli/discovery-globs.d.ts.map +1 -0
- package/dist/cli/discovery-globs.js +74 -0
- package/dist/cli/discovery-globs.js.map +1 -0
- package/dist/cli/doctor.d.ts +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +3 -3
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/drift.d.ts +1 -1
- package/dist/cli/drift.d.ts.map +1 -1
- package/dist/cli/duplicate-similarity.d.ts +10 -0
- package/dist/cli/duplicate-similarity.d.ts.map +1 -0
- package/dist/cli/duplicate-similarity.js +20 -0
- package/dist/cli/duplicate-similarity.js.map +1 -0
- package/dist/cli/file.js +2 -2
- package/dist/cli/file.js.map +1 -1
- package/dist/cli/graph-delta.d.ts +25 -0
- package/dist/cli/graph-delta.d.ts.map +1 -0
- package/dist/cli/graph-delta.js +80 -0
- package/dist/cli/graph-delta.js.map +1 -0
- package/dist/cli/graph-queries.d.ts +23 -0
- package/dist/cli/graph-queries.d.ts.map +1 -0
- package/dist/cli/graph-queries.js +265 -0
- package/dist/cli/graph-queries.js.map +1 -0
- package/dist/cli/graph.d.ts +2 -2
- package/dist/cli/graph.d.ts.map +1 -1
- package/dist/cli/graph.js +2 -2
- package/dist/cli/graph.js.map +1 -1
- package/dist/cli/grep.d.ts +1 -1
- package/dist/cli/grep.d.ts.map +1 -1
- package/dist/cli/grep.js +1 -1
- package/dist/cli/grep.js.map +1 -1
- package/dist/cli/help.d.ts +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +2 -2
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/impact.d.ts +2 -2
- package/dist/cli/impact.d.ts.map +1 -1
- package/dist/cli/impact.js +4 -4
- package/dist/cli/impact.js.map +1 -1
- package/dist/cli/index-policy.d.ts +36 -0
- package/dist/cli/index-policy.d.ts.map +1 -0
- package/dist/cli/index-policy.js +169 -0
- package/dist/cli/index-policy.js.map +1 -0
- package/dist/cli/index.d.ts +2 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/inspect.d.ts +2 -2
- package/dist/cli/inspect.d.ts.map +1 -1
- package/dist/cli/inspect.js +2 -2
- package/dist/cli/inspect.js.map +1 -1
- package/dist/cli/invocation-context.d.ts +77 -0
- package/dist/cli/invocation-context.d.ts.map +1 -0
- package/dist/cli/invocation-context.js +423 -0
- package/dist/cli/invocation-context.js.map +1 -0
- package/dist/cli/links.d.ts +2 -2
- package/dist/cli/links.d.ts.map +1 -1
- package/dist/cli/links.js +1 -1
- package/dist/cli/links.js.map +1 -1
- package/dist/cli/location.d.ts +1 -1
- package/dist/cli/location.d.ts.map +1 -1
- package/dist/cli/location.js +1 -1
- package/dist/cli/location.js.map +1 -1
- package/dist/cli/navigation.d.ts +2 -2
- package/dist/cli/navigation.d.ts.map +1 -1
- package/dist/cli/navigation.js +2 -2
- package/dist/cli/navigation.js.map +1 -1
- package/dist/cli/packet.js +1 -1
- package/dist/cli/packet.js.map +1 -1
- package/dist/cli/project-file.d.ts +13 -0
- package/dist/cli/project-file.d.ts.map +1 -0
- package/dist/cli/project-file.js +23 -0
- package/dist/cli/project-file.js.map +1 -0
- package/dist/cli/refactor-plan.d.ts +6 -0
- package/dist/cli/refactor-plan.d.ts.map +1 -0
- package/dist/cli/refactor-plan.js +84 -0
- package/dist/cli/refactor-plan.js.map +1 -0
- package/dist/cli/rename-preview.d.ts +4 -0
- package/dist/cli/rename-preview.d.ts.map +1 -0
- package/dist/cli/rename-preview.js +92 -0
- package/dist/cli/rename-preview.js.map +1 -0
- package/dist/cli/review.d.ts +2 -2
- package/dist/cli/review.d.ts.map +1 -1
- package/dist/cli/review.js +4 -4
- package/dist/cli/review.js.map +1 -1
- package/dist/cli/root-policy.d.ts +53 -0
- package/dist/cli/root-policy.d.ts.map +1 -0
- package/dist/cli/root-policy.js +221 -0
- package/dist/cli/root-policy.js.map +1 -0
- package/dist/cli/server.js +5 -5
- package/dist/cli/server.js.map +1 -1
- package/dist/cli/skill.js +1 -1
- package/dist/cli/skill.js.map +1 -1
- package/dist/cli/symbols.js +1 -1
- package/dist/cli/symbols.js.map +1 -1
- package/dist/cli/type-hierarchy.d.ts +6 -0
- package/dist/cli/type-hierarchy.d.ts.map +1 -0
- package/dist/cli/type-hierarchy.js +90 -0
- package/dist/cli/type-hierarchy.js.map +1 -0
- package/dist/cli/viewer.js +2 -2
- package/dist/cli/viewer.js.map +1 -1
- package/dist/cli-bootstrap.d.ts +3 -0
- package/dist/cli-bootstrap.d.ts.map +1 -0
- package/dist/cli-bootstrap.js +10 -0
- package/dist/cli-bootstrap.js.map +1 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +5 -5
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -1
- package/dist/config.js.map +1 -1
- package/dist/document-links/asciidoc.d.ts.map +1 -0
- package/dist/document-links/asciidoc.js.map +1 -0
- package/dist/document-links/check.d.ts +32 -0
- package/dist/document-links/check.d.ts.map +1 -0
- package/dist/document-links/check.js +286 -0
- package/dist/document-links/check.js.map +1 -0
- package/dist/document-links/html.d.ts.map +1 -0
- package/dist/document-links/html.js.map +1 -0
- package/dist/document-links/markdown.d.ts.map +1 -0
- package/dist/document-links/markdown.js.map +1 -0
- package/dist/document-links/rst.d.ts.map +1 -0
- package/dist/document-links/rst.js.map +1 -0
- package/dist/document-links/sfc.d.ts.map +1 -0
- package/dist/document-links/sfc.js.map +1 -0
- package/dist/document-links/shared.d.ts.map +1 -0
- package/dist/document-links/shared.js.map +1 -0
- package/dist/document-links.d.ts +12 -0
- package/dist/document-links.d.ts.map +1 -0
- package/dist/document-links.js +49 -0
- package/dist/document-links.js.map +1 -0
- package/dist/drift/snapshot.js +2 -2
- package/dist/drift/snapshot.js.map +1 -1
- package/dist/drift/types.d.ts +2 -2
- package/dist/drift/types.d.ts.map +1 -1
- package/dist/duplicates/unit-cache.d.ts +46 -0
- package/dist/duplicates/unit-cache.d.ts.map +1 -0
- package/dist/duplicates/unit-cache.js +512 -0
- package/dist/duplicates/unit-cache.js.map +1 -0
- package/dist/duplicates/units.d.ts +1 -1
- package/dist/duplicates/units.d.ts.map +1 -1
- package/dist/duplicates/units.js +6 -6
- package/dist/duplicates/units.js.map +1 -1
- package/dist/duplicates-leads.d.ts +39 -0
- package/dist/duplicates-leads.d.ts.map +1 -0
- package/dist/duplicates-leads.js +112 -0
- package/dist/duplicates-leads.js.map +1 -0
- package/dist/duplicates.d.ts +1 -1
- package/dist/duplicates.d.ts.map +1 -1
- package/dist/duplicates.js +2 -2
- package/dist/duplicates.js.map +1 -1
- package/dist/graph-builder.d.ts +1 -1
- package/dist/graph-builder.d.ts.map +1 -1
- package/dist/graph-builder.js +4 -4
- package/dist/graph-builder.js.map +1 -1
- package/dist/graph-edge-collector.d.ts +3 -3
- package/dist/graph-edge-collector.d.ts.map +1 -1
- package/dist/graph-edge-collector.js +6 -6
- package/dist/graph-edge-collector.js.map +1 -1
- package/dist/graphs/cycles.js +1 -1
- package/dist/graphs/cycles.js.map +1 -1
- package/dist/graphs/edge-resolution.d.ts +25 -0
- package/dist/graphs/edge-resolution.d.ts.map +1 -0
- package/dist/graphs/edge-resolution.js +97 -0
- package/dist/graphs/edge-resolution.js.map +1 -0
- package/dist/graphs/grep.d.ts +1 -1
- package/dist/graphs/grep.d.ts.map +1 -1
- package/dist/graphs/grep.js +4 -4
- package/dist/graphs/grep.js.map +1 -1
- package/dist/graphs/specifiers.d.ts +1 -1
- package/dist/graphs/specifiers.d.ts.map +1 -1
- package/dist/graphs/specifiers.js +5 -5
- package/dist/graphs/specifiers.js.map +1 -1
- package/dist/graphs/symbol-graph-detailed/ast.d.ts +0 -1
- package/dist/graphs/symbol-graph-detailed/ast.d.ts.map +1 -1
- package/dist/graphs/symbol-graph-detailed/ast.js +1 -8
- package/dist/graphs/symbol-graph-detailed/ast.js.map +1 -1
- package/dist/graphs/symbol-graph-detailed/edge-passes.d.ts +35 -0
- package/dist/graphs/symbol-graph-detailed/edge-passes.d.ts.map +1 -0
- package/dist/graphs/symbol-graph-detailed/edge-passes.js +676 -0
- package/dist/graphs/symbol-graph-detailed/edge-passes.js.map +1 -0
- package/dist/graphs/symbol-graph-detailed/import-aliases.d.ts +10 -0
- package/dist/graphs/symbol-graph-detailed/import-aliases.d.ts.map +1 -0
- package/dist/graphs/symbol-graph-detailed/import-aliases.js +44 -0
- package/dist/graphs/symbol-graph-detailed/import-aliases.js.map +1 -0
- package/dist/graphs/symbol-graph-detailed/member-chains.d.ts +17 -0
- package/dist/graphs/symbol-graph-detailed/member-chains.d.ts.map +1 -0
- package/dist/graphs/symbol-graph-detailed/member-chains.js +30 -0
- package/dist/graphs/symbol-graph-detailed/member-chains.js.map +1 -0
- package/dist/graphs/symbol-graph-detailed/receiver-calls.d.ts +69 -0
- package/dist/graphs/symbol-graph-detailed/receiver-calls.d.ts.map +1 -0
- package/dist/graphs/symbol-graph-detailed/receiver-calls.js +408 -0
- package/dist/graphs/symbol-graph-detailed/receiver-calls.js.map +1 -0
- package/dist/graphs/symbol-graph-detailed.d.ts.map +1 -1
- package/dist/graphs/symbol-graph-detailed.js +22 -12
- package/dist/graphs/symbol-graph-detailed.js.map +1 -1
- package/dist/graphs/types.d.ts +1 -1
- package/dist/graphs/types.d.ts.map +1 -1
- package/dist/graphs/unresolved.js +1 -1
- package/dist/graphs/unresolved.js.map +1 -1
- package/dist/impact/analyzer.js +4 -4
- package/dist/impact/analyzer.js.map +1 -1
- package/dist/impact/call-compatibility/text-scanner.d.ts +23 -0
- package/dist/impact/call-compatibility/text-scanner.d.ts.map +1 -0
- package/dist/impact/call-compatibility/text-scanner.js +615 -0
- package/dist/impact/call-compatibility/text-scanner.js.map +1 -0
- package/dist/impact/call-compatibility.d.ts +24 -0
- package/dist/impact/call-compatibility.d.ts.map +1 -0
- package/dist/impact/call-compatibility.js +1023 -0
- package/dist/impact/call-compatibility.js.map +1 -0
- package/dist/impact/context.js +1 -1
- package/dist/impact/context.js.map +1 -1
- package/dist/impact/direct.d.ts +1 -1
- package/dist/impact/direct.d.ts.map +1 -1
- package/dist/impact/index.d.ts +1 -1
- package/dist/impact/index.d.ts.map +1 -1
- package/dist/impact/index.js +1 -1
- package/dist/impact/index.js.map +1 -1
- package/dist/impact/map.js +1 -1
- package/dist/impact/map.js.map +1 -1
- package/dist/impact/member-resolution-coverage.d.ts +14 -0
- package/dist/impact/member-resolution-coverage.d.ts.map +1 -0
- package/dist/impact/member-resolution-coverage.js +42 -0
- package/dist/impact/member-resolution-coverage.js.map +1 -0
- package/dist/impact/reference-cache.d.ts +12 -0
- package/dist/impact/reference-cache.d.ts.map +1 -0
- package/dist/impact/reference-cache.js +101 -0
- package/dist/impact/reference-cache.js.map +1 -0
- package/dist/impact/report-compact.d.ts +8 -0
- package/dist/impact/report-compact.d.ts.map +1 -0
- package/dist/impact/report-compact.js +153 -0
- package/dist/impact/report-compact.js.map +1 -0
- package/dist/impact/report-full.d.ts +10 -0
- package/dist/impact/report-full.d.ts.map +1 -0
- package/dist/impact/report-full.js +67 -0
- package/dist/impact/report-full.js.map +1 -0
- package/dist/impact/report-parts.d.ts +51 -0
- package/dist/impact/report-parts.d.ts.map +1 -0
- package/dist/impact/report-parts.js +2 -0
- package/dist/impact/report-parts.js.map +1 -0
- package/dist/impact/report-shared.d.ts +76 -0
- package/dist/impact/report-shared.d.ts.map +1 -0
- package/dist/impact/report-shared.js +130 -0
- package/dist/impact/report-shared.js.map +1 -0
- package/dist/impact/report-suggestions.js +2 -2
- package/dist/impact/report-suggestions.js.map +1 -1
- package/dist/impact/report.js +5 -5
- package/dist/impact/report.js.map +1 -1
- package/dist/impact/streaming.d.ts +1 -1
- package/dist/impact/streaming.d.ts.map +1 -1
- package/dist/impact/streaming.js +2 -2
- package/dist/impact/streaming.js.map +1 -1
- package/dist/impact/test-patterns.d.ts +6 -0
- package/dist/impact/test-patterns.d.ts.map +1 -0
- package/dist/impact/test-patterns.js +65 -0
- package/dist/impact/test-patterns.js.map +1 -0
- package/dist/impact/transitive.js +1 -1
- package/dist/impact/transitive.js.map +1 -1
- package/dist/impact/types.d.ts +3 -3
- package/dist/impact/types.d.ts.map +1 -1
- package/dist/impact/types.js +1 -1
- package/dist/impact/types.js.map +1 -1
- package/dist/index.d.ts +10 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -9
- package/dist/index.js.map +1 -1
- package/dist/indexer/build-cache/manifest.d.ts +4 -4
- package/dist/indexer/build-cache/manifest.d.ts.map +1 -1
- package/dist/indexer/build-cache/manifest.js +9 -34
- package/dist/indexer/build-cache/manifest.js.map +1 -1
- package/dist/indexer/build-cache/module-cache.d.ts +1 -1
- package/dist/indexer/build-cache/module-cache.d.ts.map +1 -1
- package/dist/indexer/build-cache/module-cache.js +4 -4
- package/dist/indexer/build-cache/module-cache.js.map +1 -1
- package/dist/indexer/build-cache/options.d.ts +6 -4
- package/dist/indexer/build-cache/options.d.ts.map +1 -1
- package/dist/indexer/build-cache/options.js +9 -7
- package/dist/indexer/build-cache/options.js.map +1 -1
- package/dist/indexer/build-cache/project-snapshot.d.ts +1 -1
- package/dist/indexer/build-cache/project-snapshot.d.ts.map +1 -1
- package/dist/indexer/build-cache/project-snapshot.js +16 -19
- package/dist/indexer/build-cache/project-snapshot.js.map +1 -1
- package/dist/indexer/build-cache/reports.js +1 -1
- package/dist/indexer/build-cache/reports.js.map +1 -1
- package/dist/indexer/build-cache/resolver-environment.d.ts +6 -2
- package/dist/indexer/build-cache/resolver-environment.d.ts.map +1 -1
- package/dist/indexer/build-cache/resolver-environment.js +41 -5
- package/dist/indexer/build-cache/resolver-environment.js.map +1 -1
- package/dist/indexer/build-index.d.ts.map +1 -1
- package/dist/indexer/build-index.js +63 -29
- package/dist/indexer/build-index.js.map +1 -1
- package/dist/indexer/build-manifest.d.ts +3 -0
- package/dist/indexer/build-manifest.d.ts.map +1 -1
- package/dist/indexer/build-manifest.js +1 -1
- package/dist/indexer/build-manifest.js.map +1 -1
- package/dist/indexer/build-workers.d.ts +1 -1
- package/dist/indexer/build-workers.d.ts.map +1 -1
- package/dist/indexer/build-workers.js +6 -6
- package/dist/indexer/build-workers.js.map +1 -1
- package/dist/indexer/finalize.d.ts +3 -2
- package/dist/indexer/finalize.d.ts.map +1 -1
- package/dist/indexer/finalize.js +2 -1
- package/dist/indexer/finalize.js.map +1 -1
- package/dist/indexer/imports/graph-only.d.ts +13 -0
- package/dist/indexer/imports/graph-only.d.ts.map +1 -0
- package/dist/indexer/imports/graph-only.js +40 -0
- package/dist/indexer/imports/graph-only.js.map +1 -0
- package/dist/indexer/imports/js-text-imports.d.ts +9 -0
- package/dist/indexer/imports/js-text-imports.d.ts.map +1 -0
- package/dist/indexer/imports/js-text-imports.js +181 -0
- package/dist/indexer/imports/js-text-imports.js.map +1 -0
- package/dist/indexer/imports/language-specific.d.ts +26 -0
- package/dist/indexer/imports/language-specific.d.ts.map +1 -0
- package/dist/indexer/imports/language-specific.js +449 -0
- package/dist/indexer/imports/language-specific.js.map +1 -0
- package/dist/indexer/imports/native-captures.d.ts +16 -0
- package/dist/indexer/imports/native-captures.d.ts.map +1 -0
- package/dist/indexer/imports/native-captures.js +142 -0
- package/dist/indexer/imports/native-captures.js.map +1 -0
- package/dist/indexer/imports.d.ts +1 -1
- package/dist/indexer/imports.d.ts.map +1 -1
- package/dist/indexer/imports.js +7 -7
- package/dist/indexer/imports.js.map +1 -1
- package/dist/indexer/incremental-plan.d.ts +4 -3
- package/dist/indexer/incremental-plan.d.ts.map +1 -1
- package/dist/indexer/incremental-plan.js +9 -5
- package/dist/indexer/incremental-plan.js.map +1 -1
- package/dist/indexer/locals-and-exports.d.ts +1 -1
- package/dist/indexer/locals-and-exports.d.ts.map +1 -1
- package/dist/indexer/locals-and-exports.js +5 -5
- package/dist/indexer/locals-and-exports.js.map +1 -1
- package/dist/indexer/navigation-goto.js +1 -1
- package/dist/indexer/navigation-goto.js.map +1 -1
- package/dist/indexer/navigation-local.d.ts +2 -1
- package/dist/indexer/navigation-local.d.ts.map +1 -1
- package/dist/indexer/navigation-local.js +26 -21
- package/dist/indexer/navigation-local.js.map +1 -1
- package/dist/indexer/navigation.js +1 -1
- package/dist/indexer/navigation.js.map +1 -1
- package/dist/indexer/parse-context.d.ts +2 -2
- package/dist/indexer/parse-context.d.ts.map +1 -1
- package/dist/indexer/parse-context.js +5 -5
- package/dist/indexer/parse-context.js.map +1 -1
- package/dist/indexer/scope.d.ts +1 -1
- package/dist/indexer/scope.d.ts.map +1 -1
- package/dist/indexer/scope.js +2 -2
- package/dist/indexer/scope.js.map +1 -1
- package/dist/indexer/shared.d.ts +1 -1
- package/dist/indexer/shared.d.ts.map +1 -1
- package/dist/indexer/shared.js +1 -1
- package/dist/indexer/shared.js.map +1 -1
- package/dist/indexer/symbols.js +1 -1
- package/dist/indexer/symbols.js.map +1 -1
- package/dist/indexer/types.d.ts +4 -2
- package/dist/indexer/types.d.ts.map +1 -1
- package/dist/indexer.d.ts +2 -2
- package/dist/indexer.d.ts.map +1 -1
- package/dist/installer/locks.js +1 -1
- package/dist/installer/locks.js.map +1 -1
- package/dist/installer/registry.js +1 -1
- package/dist/installer/registry.js.map +1 -1
- package/dist/languages/definitions/adoc.js +1 -1
- package/dist/languages/definitions/adoc.js.map +1 -1
- package/dist/languages/definitions/astro.js +1 -1
- package/dist/languages/definitions/astro.js.map +1 -1
- package/dist/languages/definitions/c-family.d.ts +34 -0
- package/dist/languages/definitions/c-family.d.ts.map +1 -0
- package/dist/languages/definitions/c-family.js +177 -0
- package/dist/languages/definitions/c-family.js.map +1 -0
- package/dist/languages/definitions/c.js +1 -1
- package/dist/languages/definitions/c.js.map +1 -1
- package/dist/languages/definitions/cpp.js +1 -1
- package/dist/languages/definitions/cpp.js.map +1 -1
- package/dist/languages/definitions/css-like.d.ts +5 -0
- package/dist/languages/definitions/css-like.d.ts.map +1 -0
- package/dist/languages/definitions/css-like.js +32 -0
- package/dist/languages/definitions/css-like.js.map +1 -0
- package/dist/languages/definitions/css.js +1 -1
- package/dist/languages/definitions/css.js.map +1 -1
- package/dist/languages/definitions/hbs.js +1 -1
- package/dist/languages/definitions/hbs.js.map +1 -1
- package/dist/languages/definitions/html-stub.d.ts +18 -0
- package/dist/languages/definitions/html-stub.d.ts.map +1 -0
- package/dist/languages/definitions/html-stub.js +36 -0
- package/dist/languages/definitions/html-stub.js.map +1 -0
- package/dist/languages/definitions/javascript.js +1 -1
- package/dist/languages/definitions/javascript.js.map +1 -1
- package/dist/languages/definitions/js-family.d.ts +5 -0
- package/dist/languages/definitions/js-family.d.ts.map +1 -0
- package/dist/languages/definitions/js-family.js +75 -0
- package/dist/languages/definitions/js-family.js.map +1 -0
- package/dist/languages/definitions/less.js +1 -1
- package/dist/languages/definitions/less.js.map +1 -1
- package/dist/languages/definitions/markdown.js +1 -1
- package/dist/languages/definitions/markdown.js.map +1 -1
- package/dist/languages/definitions/mdx.js +1 -1
- package/dist/languages/definitions/mdx.js.map +1 -1
- package/dist/languages/definitions/rst.js +1 -1
- package/dist/languages/definitions/rst.js.map +1 -1
- package/dist/languages/definitions/typescript.js +1 -1
- package/dist/languages/definitions/typescript.js.map +1 -1
- package/dist/languages/file-prep.d.ts +36 -0
- package/dist/languages/file-prep.d.ts.map +1 -0
- package/dist/languages/file-prep.js +76 -0
- package/dist/languages/file-prep.js.map +1 -0
- package/dist/languages/import-statement-parsers.d.ts +57 -0
- package/dist/languages/import-statement-parsers.d.ts.map +1 -0
- package/dist/languages/import-statement-parsers.js +383 -0
- package/dist/languages/import-statement-parsers.js.map +1 -0
- package/dist/languages/query-generator.d.ts +6 -0
- package/dist/languages/query-generator.d.ts.map +1 -0
- package/dist/languages/query-generator.js +46 -0
- package/dist/languages/query-generator.js.map +1 -0
- package/dist/lifecycle/manifest.d.ts +1 -1
- package/dist/lifecycle/manifest.d.ts.map +1 -1
- package/dist/lifecycle/manifest.js +6 -4
- package/dist/lifecycle/manifest.js.map +1 -1
- package/dist/mcp/handlers.d.ts +7 -7
- package/dist/mcp/handlers.d.ts.map +1 -1
- package/dist/mcp/handlers.js +12 -15
- package/dist/mcp/handlers.js.map +1 -1
- package/dist/mcp/http-transport.d.ts +14 -0
- package/dist/mcp/http-transport.d.ts.map +1 -0
- package/dist/mcp/http-transport.js +185 -0
- package/dist/mcp/http-transport.js.map +1 -0
- package/dist/mcp/legacy-sessions.d.ts +38 -0
- package/dist/mcp/legacy-sessions.d.ts.map +1 -0
- package/dist/mcp/legacy-sessions.js +264 -0
- package/dist/mcp/legacy-sessions.js.map +1 -0
- package/dist/mcp/lifecycle-health.d.ts +12 -0
- package/dist/mcp/lifecycle-health.d.ts.map +1 -0
- package/dist/mcp/lifecycle-health.js +37 -0
- package/dist/mcp/lifecycle-health.js.map +1 -0
- package/dist/mcp/protocol.d.ts +1 -1
- package/dist/mcp/protocol.d.ts.map +1 -1
- package/dist/mcp/protocol.js +3 -3
- package/dist/mcp/protocol.js.map +1 -1
- package/dist/mcp/security.js +1 -1
- package/dist/mcp/security.js.map +1 -1
- package/dist/mcp/server.d.ts +4 -4
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +6 -6
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/sqlite-guard.d.ts +3 -0
- package/dist/mcp/sqlite-guard.d.ts.map +1 -0
- package/dist/mcp/sqlite-guard.js +35 -0
- package/dist/mcp/sqlite-guard.js.map +1 -0
- package/dist/mcp/stdio-lifecycle.d.ts +23 -0
- package/dist/mcp/stdio-lifecycle.d.ts.map +1 -0
- package/dist/mcp/stdio-lifecycle.js +83 -0
- package/dist/mcp/stdio-lifecycle.js.map +1 -0
- package/dist/mcp/tools.js +2 -2
- package/dist/mcp/tools.js.map +1 -1
- package/dist/native/binding-loader.d.ts +51 -0
- package/dist/native/binding-loader.d.ts.map +1 -0
- package/dist/native/binding-loader.js +223 -0
- package/dist/native/binding-loader.js.map +1 -0
- package/dist/native/byte-index.d.ts +26 -0
- package/dist/native/byte-index.d.ts.map +1 -0
- package/dist/native/byte-index.js +70 -0
- package/dist/native/byte-index.js.map +1 -0
- package/dist/native/execution.js +1 -1
- package/dist/native/execution.js.map +1 -1
- package/dist/native/js-bridge.d.ts +7 -0
- package/dist/native/js-bridge.d.ts.map +1 -0
- package/dist/native/js-bridge.js +20 -0
- package/dist/native/js-bridge.js.map +1 -0
- package/dist/native/native-backend-report.d.ts +22 -0
- package/dist/native/native-backend-report.d.ts.map +1 -0
- package/dist/native/native-backend-report.js +102 -0
- package/dist/native/native-backend-report.js.map +1 -0
- package/dist/native/projected-tree.d.ts +53 -0
- package/dist/native/projected-tree.d.ts.map +1 -0
- package/dist/native/projected-tree.js +180 -0
- package/dist/native/projected-tree.js.map +1 -0
- package/dist/native/query-results.d.ts +12 -0
- package/dist/native/query-results.d.ts.map +1 -0
- package/dist/native/query-results.js +34 -0
- package/dist/native/query-results.js.map +1 -0
- package/dist/native/runtime-cache.d.ts +128 -0
- package/dist/native/runtime-cache.d.ts.map +1 -0
- package/dist/native/runtime-cache.js +667 -0
- package/dist/native/runtime-cache.js.map +1 -0
- package/dist/native/runtime.js +3 -3
- package/dist/native/runtime.js.map +1 -1
- package/dist/native/tree-shape.d.ts +21 -0
- package/dist/native/tree-shape.d.ts.map +1 -0
- package/dist/native/tree-shape.js +28 -0
- package/dist/native/tree-shape.js.map +1 -0
- package/dist/native/tree-sitter-native.d.ts +6 -0
- package/dist/native/tree-sitter-native.d.ts.map +1 -0
- package/dist/native/tree-sitter-native.js +5 -0
- package/dist/native/tree-sitter-native.js.map +1 -0
- package/dist/review/deleted.js +2 -2
- package/dist/review/deleted.js.map +1 -1
- package/dist/review/report.d.ts +3 -3
- package/dist/review/report.d.ts.map +1 -1
- package/dist/review/report.js +2 -2
- package/dist/review/report.js.map +1 -1
- package/dist/review/summaries.js +3 -3
- package/dist/review/summaries.js.map +1 -1
- package/dist/review/types.d.ts +3 -3
- package/dist/review/types.d.ts.map +1 -1
- package/dist/review.js +3 -3
- package/dist/review.js.map +1 -1
- package/dist/runtime-identity.d.ts +27 -0
- package/dist/runtime-identity.d.ts.map +1 -0
- package/dist/runtime-identity.js +75 -0
- package/dist/runtime-identity.js.map +1 -0
- package/dist/session.js +1 -1
- package/dist/session.js.map +1 -1
- package/dist/sql/classify-sql-file.d.ts +3 -0
- package/dist/sql/classify-sql-file.d.ts.map +1 -0
- package/dist/sql/classify-sql-file.js +42 -0
- package/dist/sql/classify-sql-file.js.map +1 -0
- package/dist/sql/extract-facts.d.ts +4 -0
- package/dist/sql/extract-facts.d.ts.map +1 -0
- package/dist/sql/extract-facts.js +511 -0
- package/dist/sql/extract-facts.js.map +1 -0
- package/dist/sql/graph.js +1 -1
- package/dist/sql/graph.js.map +1 -1
- package/dist/sql/index.d.ts +2 -2
- package/dist/sql/index.d.ts.map +1 -1
- package/dist/sql/index.js +2 -2
- package/dist/sql/index.js.map +1 -1
- package/dist/sql/navigation.js +1 -1
- package/dist/sql/navigation.js.map +1 -1
- package/dist/sql/review.js +2 -2
- package/dist/sql/review.js.map +1 -1
- package/dist/sql/source-graph.d.ts +19 -0
- package/dist/sql/source-graph.d.ts.map +1 -0
- package/dist/sql/source-graph.js +195 -0
- package/dist/sql/source-graph.js.map +1 -0
- package/dist/sqlite/query.d.ts +2 -2
- package/dist/sqlite/query.d.ts.map +1 -1
- package/dist/sqlite/query.js +3 -3
- package/dist/sqlite/query.js.map +1 -1
- package/dist/sqlite/raw-query-worker-pool.d.ts +66 -0
- package/dist/sqlite/raw-query-worker-pool.d.ts.map +1 -0
- package/dist/sqlite/raw-query-worker-pool.js +146 -0
- package/dist/sqlite/raw-query-worker-pool.js.map +1 -0
- package/dist/sqlite/raw-query-worker.d.ts +22 -0
- package/dist/sqlite/raw-query-worker.d.ts.map +1 -0
- package/dist/sqlite/raw-query-worker.js +31 -0
- package/dist/sqlite/raw-query-worker.js.map +1 -0
- package/dist/sqlite/row-bounds.d.ts +24 -0
- package/dist/sqlite/row-bounds.d.ts.map +1 -0
- package/dist/sqlite/row-bounds.js +95 -0
- package/dist/sqlite/row-bounds.js.map +1 -0
- package/dist/sqlite-driver.js +1 -1
- package/dist/sqlite-driver.js.map +1 -1
- package/dist/util/bloom-filter.d.ts +100 -0
- package/dist/util/bloom-filter.d.ts.map +1 -0
- package/dist/util/bloom-filter.js +206 -0
- package/dist/util/bloom-filter.js.map +1 -0
- package/dist/util/confined-file.d.ts +48 -0
- package/dist/util/confined-file.d.ts.map +1 -0
- package/dist/util/confined-file.js +164 -0
- package/dist/util/confined-file.js.map +1 -0
- package/dist/util/discovery-path.d.ts +3 -0
- package/dist/util/discovery-path.d.ts.map +1 -0
- package/dist/util/discovery-path.js +19 -0
- package/dist/util/discovery-path.js.map +1 -0
- package/dist/util/git.d.ts +13 -10
- package/dist/util/git.d.ts.map +1 -1
- package/dist/util/git.js +29 -25
- package/dist/util/git.js.map +1 -1
- package/dist/util/graph-edges.d.ts +5 -0
- package/dist/util/graph-edges.d.ts.map +1 -0
- package/dist/util/graph-edges.js +42 -0
- package/dist/util/graph-edges.js.map +1 -0
- package/dist/util/graph-only-extensions.d.ts +5 -0
- package/dist/util/graph-only-extensions.d.ts.map +1 -0
- package/dist/util/graph-only-extensions.js +12 -0
- package/dist/util/graph-only-extensions.js.map +1 -0
- package/dist/util/include-roots.d.ts +6 -0
- package/dist/util/include-roots.d.ts.map +1 -0
- package/dist/util/include-roots.js +53 -0
- package/dist/util/include-roots.js.map +1 -0
- package/dist/util/lazy-symbols.d.ts +166 -0
- package/dist/util/lazy-symbols.d.ts.map +1 -0
- package/dist/util/lazy-symbols.js +365 -0
- package/dist/util/lazy-symbols.js.map +1 -0
- package/dist/util/lru-map.d.ts +3 -0
- package/dist/util/lru-map.d.ts.map +1 -0
- package/dist/util/lru-map.js +22 -0
- package/dist/util/lru-map.js.map +1 -0
- package/dist/util/member-access.d.ts +26 -0
- package/dist/util/member-access.d.ts.map +1 -0
- package/dist/util/member-access.js +185 -0
- package/dist/util/member-access.js.map +1 -0
- package/dist/util/package-exports.d.ts +25 -0
- package/dist/util/package-exports.d.ts.map +1 -0
- package/dist/util/package-exports.js +79 -0
- package/dist/util/package-exports.js.map +1 -0
- package/dist/util/package-info.d.ts +12 -0
- package/dist/util/package-info.d.ts.map +1 -0
- package/dist/util/package-info.js +57 -0
- package/dist/util/package-info.js.map +1 -0
- package/dist/util/partial-results.d.ts +81 -0
- package/dist/util/partial-results.d.ts.map +1 -0
- package/dist/util/partial-results.js +290 -0
- package/dist/util/partial-results.js.map +1 -0
- package/dist/util/project-files/definitions.d.ts +40 -0
- package/dist/util/project-files/definitions.d.ts.map +1 -0
- package/dist/util/project-files/definitions.js.map +1 -0
- package/dist/util/project-files/parsers.d.ts.map +1 -0
- package/dist/util/project-files/parsers.js.map +1 -0
- package/dist/util/project-files.d.ts +153 -0
- package/dist/util/project-files.d.ts.map +1 -0
- package/dist/util/project-files.js +1460 -0
- package/dist/util/project-files.js.map +1 -0
- package/dist/util/resolution/find-first-existing.d.ts +2 -0
- package/dist/util/resolution/find-first-existing.d.ts.map +1 -0
- package/dist/util/resolution/find-first-existing.js +13 -0
- package/dist/util/resolution/find-first-existing.js.map +1 -0
- package/dist/util/resolution/jvm.js +1 -1
- package/dist/util/resolution/jvm.js.map +1 -1
- package/dist/util/resolution/node.d.ts +1 -1
- package/dist/util/resolution/node.d.ts.map +1 -1
- package/dist/util/resolution/node.js +2 -2
- package/dist/util/resolution/node.js.map +1 -1
- package/dist/util/resolution/php-composer.d.ts +17 -0
- package/dist/util/resolution/php-composer.d.ts.map +1 -0
- package/dist/util/resolution/php-composer.js +269 -0
- package/dist/util/resolution/php-composer.js.map +1 -0
- package/dist/util/resolution/php.d.ts +1 -1
- package/dist/util/resolution/php.d.ts.map +1 -1
- package/dist/util/resolution/php.js +4 -4
- package/dist/util/resolution/php.js.map +1 -1
- package/dist/util/resolution/project-symbols.d.ts +14 -0
- package/dist/util/resolution/project-symbols.d.ts.map +1 -0
- package/dist/util/resolution/project-symbols.js +70 -0
- package/dist/util/resolution/project-symbols.js.map +1 -0
- package/dist/util/resolution/tsconfig.d.ts +7 -0
- package/dist/util/resolution/tsconfig.d.ts.map +1 -1
- package/dist/util/resolution/tsconfig.js +23 -8
- package/dist/util/resolution/tsconfig.js.map +1 -1
- package/dist/util/resolution-candidates.d.ts +5 -0
- package/dist/util/resolution-candidates.d.ts.map +1 -0
- package/dist/util/resolution-candidates.js +70 -0
- package/dist/util/resolution-candidates.js.map +1 -0
- package/dist/util/resolution.d.ts +2 -2
- package/dist/util/resolution.d.ts.map +1 -1
- package/dist/util/resolution.js +6 -6
- package/dist/util/resolution.js.map +1 -1
- package/dist/util/rust-test-modules.d.ts +3 -0
- package/dist/util/rust-test-modules.d.ts.map +1 -0
- package/dist/util/rust-test-modules.js +71 -0
- package/dist/util/rust-test-modules.js.map +1 -0
- package/dist/util/source-location.d.ts +8 -0
- package/dist/util/source-location.d.ts.map +1 -0
- package/dist/util/source-location.js +19 -0
- package/dist/util/source-location.js.map +1 -0
- package/dist/util/sqlite-schema.d.ts +28 -0
- package/dist/util/sqlite-schema.d.ts.map +1 -0
- package/dist/util/sqlite-schema.js +75 -0
- package/dist/util/sqlite-schema.js.map +1 -0
- package/dist/util/symbol-hash.d.ts +59 -0
- package/dist/util/symbol-hash.d.ts.map +1 -0
- package/dist/util/symbol-hash.js +84 -0
- package/dist/util/symbol-hash.js.map +1 -0
- package/dist/util/windows-process-drain.d.ts +23 -0
- package/dist/util/windows-process-drain.d.ts.map +1 -0
- package/dist/util/windows-process-drain.js +51 -0
- package/dist/util/windows-process-drain.js.map +1 -0
- package/dist/util/worker-threads.d.ts +12 -0
- package/dist/util/worker-threads.d.ts.map +1 -0
- package/dist/util/worker-threads.js +19 -0
- package/dist/util/worker-threads.js.map +1 -0
- package/dist/util/workspace.d.ts +1 -1
- package/dist/util/workspace.d.ts.map +1 -1
- package/dist/util/workspace.js +2 -2
- package/dist/util/workspace.js.map +1 -1
- package/dist/util.d.ts +2 -2
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +1 -1
- package/dist/util.js.map +1 -1
- package/dist/worker/native-extract-worker.d.ts +77 -0
- package/dist/worker/native-extract-worker.d.ts.map +1 -0
- package/dist/worker/native-extract-worker.js +272 -0
- package/dist/worker/native-extract-worker.js.map +1 -0
- package/dist/worker/native-worker-pool.d.ts +16 -0
- package/dist/worker/native-worker-pool.d.ts.map +1 -0
- package/dist/worker/native-worker-pool.js +54 -0
- package/dist/worker/native-worker-pool.js.map +1 -0
- package/docs/mcp.md +2 -2
- package/package.json +4 -4
- package/dist/agent/callHierarchy.d.ts +0 -28
- package/dist/agent/callHierarchy.d.ts.map +0 -1
- package/dist/agent/callHierarchy.js +0 -82
- package/dist/agent/callHierarchy.js.map +0 -1
- package/dist/agent/candidateTests.d.ts +0 -12
- package/dist/agent/candidateTests.d.ts.map +0 -1
- package/dist/agent/candidateTests.js +0 -17
- package/dist/agent/candidateTests.js.map +0 -1
- package/dist/agent/fileView.d.ts +0 -55
- package/dist/agent/fileView.d.ts.map +0 -1
- package/dist/agent/fileView.js +0 -521
- package/dist/agent/fileView.js.map +0 -1
- package/dist/agent/followUps.d.ts +0 -10
- package/dist/agent/followUps.d.ts.map +0 -1
- package/dist/agent/followUps.js +0 -175
- package/dist/agent/followUps.js.map +0 -1
- package/dist/agent/query-index/queryIndexWorker.d.ts +0 -8
- package/dist/agent/query-index/queryIndexWorker.d.ts.map +0 -1
- package/dist/agent/query-index/queryIndexWorker.js +0 -11
- package/dist/agent/query-index/queryIndexWorker.js.map +0 -1
- package/dist/agent/query-index/sessionStore.d.ts +0 -5
- package/dist/agent/query-index/sessionStore.d.ts.map +0 -1
- package/dist/agent/query-index/sessionStore.js +0 -69
- package/dist/agent/query-index/sessionStore.js.map +0 -1
- package/dist/agent/query-index/sourceIdentity.d.ts +0 -3
- package/dist/agent/query-index/sourceIdentity.d.ts.map +0 -1
- package/dist/agent/query-index/sourceIdentity.js +0 -12
- package/dist/agent/query-index/sourceIdentity.js.map +0 -1
- package/dist/agent/query-index/workerPool.d.ts +0 -27
- package/dist/agent/query-index/workerPool.d.ts.map +0 -1
- package/dist/agent/query-index/workerPool.js +0 -114
- package/dist/agent/query-index/workerPool.js.map +0 -1
- package/dist/agent/refactorPlan.d.ts +0 -40
- package/dist/agent/refactorPlan.d.ts.map +0 -1
- package/dist/agent/refactorPlan.js +0 -226
- package/dist/agent/refactorPlan.js.map +0 -1
- package/dist/agent/renamePreview.d.ts +0 -57
- package/dist/agent/renamePreview.d.ts.map +0 -1
- package/dist/agent/renamePreview.js +0 -1062
- package/dist/agent/renamePreview.js.map +0 -1
- package/dist/agent/semanticSymbols.d.ts +0 -16
- package/dist/agent/semanticSymbols.d.ts.map +0 -1
- package/dist/agent/semanticSymbols.js +0 -97
- package/dist/agent/semanticSymbols.js.map +0 -1
- package/dist/agent/sessionLifecycle.d.ts +0 -5
- package/dist/agent/sessionLifecycle.d.ts.map +0 -1
- package/dist/agent/sessionLifecycle.js +0 -18
- package/dist/agent/sessionLifecycle.js.map +0 -1
- package/dist/agent/symbolLookup.d.ts +0 -12
- package/dist/agent/symbolLookup.d.ts.map +0 -1
- package/dist/agent/symbolLookup.js +0 -26
- package/dist/agent/symbolLookup.js.map +0 -1
- package/dist/agent/typeHierarchy.d.ts +0 -39
- package/dist/agent/typeHierarchy.d.ts.map +0 -1
- package/dist/agent/typeHierarchy.js +0 -125
- package/dist/agent/typeHierarchy.js.map +0 -1
- package/dist/agent/workspaceSymbols.d.ts +0 -18
- package/dist/agent/workspaceSymbols.d.ts.map +0 -1
- package/dist/agent/workspaceSymbols.js +0 -75
- package/dist/agent/workspaceSymbols.js.map +0 -1
- package/dist/analysisSummary.d.ts +0 -19
- package/dist/analysisSummary.d.ts.map +0 -1
- package/dist/analysisSummary.js +0 -80
- package/dist/analysisSummary.js.map +0 -1
- package/dist/bin/queryIndexWorker.js +0 -4382
- package/dist/bin/rawQueryWorker.js +0 -383
- package/dist/bootstrap/treeSitterLanguages.d.ts +0 -5
- package/dist/bootstrap/treeSitterLanguages.d.ts.map +0 -1
- package/dist/bootstrap/treeSitterLanguages.js +0 -41
- package/dist/bootstrap/treeSitterLanguages.js.map +0 -1
- package/dist/chunking/chunkBlocks.d.ts +0 -9
- package/dist/chunking/chunkBlocks.d.ts.map +0 -1
- package/dist/chunking/chunkBlocks.js +0 -60
- package/dist/chunking/chunkBlocks.js.map +0 -1
- package/dist/chunking/chunkFile.d.ts +0 -39
- package/dist/chunking/chunkFile.d.ts.map +0 -1
- package/dist/chunking/chunkFile.js +0 -152
- package/dist/chunking/chunkFile.js.map +0 -1
- package/dist/chunking/chunkId.d.ts +0 -7
- package/dist/chunking/chunkId.d.ts.map +0 -1
- package/dist/chunking/chunkId.js +0 -30
- package/dist/chunking/chunkId.js.map +0 -1
- package/dist/chunking/chunkMatches.d.ts +0 -4
- package/dist/chunking/chunkMatches.d.ts.map +0 -1
- package/dist/chunking/chunkMatches.js +0 -65
- package/dist/chunking/chunkMatches.js.map +0 -1
- package/dist/chunking/chunkMerge.d.ts +0 -4
- package/dist/chunking/chunkMerge.d.ts.map +0 -1
- package/dist/chunking/chunkMerge.js +0 -144
- package/dist/chunking/chunkMerge.js.map +0 -1
- package/dist/chunking/chunkSFC.d.ts +0 -18
- package/dist/chunking/chunkSFC.d.ts.map +0 -1
- package/dist/chunking/chunkSFC.js +0 -165
- package/dist/chunking/chunkSFC.js.map +0 -1
- package/dist/chunking/chunkSplit.d.ts +0 -6
- package/dist/chunking/chunkSplit.d.ts.map +0 -1
- package/dist/chunking/chunkSplit.js +0 -155
- package/dist/chunking/chunkSplit.js.map +0 -1
- package/dist/chunking/chunkTextFile.d.ts +0 -28
- package/dist/chunking/chunkTextFile.d.ts.map +0 -1
- package/dist/chunking/chunkTextFile.js +0 -107
- package/dist/chunking/chunkTextFile.js.map +0 -1
- package/dist/chunking/languageConfig.d.ts +0 -35
- package/dist/chunking/languageConfig.d.ts.map +0 -1
- package/dist/chunking/languageConfig.js +0 -24
- package/dist/chunking/languageConfig.js.map +0 -1
- package/dist/cli/callHierarchy.d.ts +0 -6
- package/dist/cli/callHierarchy.d.ts.map +0 -1
- package/dist/cli/callHierarchy.js +0 -72
- package/dist/cli/callHierarchy.js.map +0 -1
- package/dist/cli/commandCatalog.d.ts +0 -14
- package/dist/cli/commandCatalog.d.ts.map +0 -1
- package/dist/cli/commandCatalog.js +0 -118
- package/dist/cli/commandCatalog.js.map +0 -1
- package/dist/cli/commandTable.d.ts +0 -16
- package/dist/cli/commandTable.d.ts.map +0 -1
- package/dist/cli/commandTable.js +0 -758
- package/dist/cli/commandTable.js.map +0 -1
- package/dist/cli/compileCache.d.ts +0 -22
- package/dist/cli/compileCache.d.ts.map +0 -1
- package/dist/cli/compileCache.js +0 -81
- package/dist/cli/compileCache.js.map +0 -1
- package/dist/cli/discoveryGlobs.d.ts +0 -11
- package/dist/cli/discoveryGlobs.d.ts.map +0 -1
- package/dist/cli/discoveryGlobs.js +0 -74
- package/dist/cli/discoveryGlobs.js.map +0 -1
- package/dist/cli/duplicateSimilarity.d.ts +0 -10
- package/dist/cli/duplicateSimilarity.d.ts.map +0 -1
- package/dist/cli/duplicateSimilarity.js +0 -20
- package/dist/cli/duplicateSimilarity.js.map +0 -1
- package/dist/cli/graphDelta.d.ts +0 -25
- package/dist/cli/graphDelta.d.ts.map +0 -1
- package/dist/cli/graphDelta.js +0 -80
- package/dist/cli/graphDelta.js.map +0 -1
- package/dist/cli/graphQueries.d.ts +0 -23
- package/dist/cli/graphQueries.d.ts.map +0 -1
- package/dist/cli/graphQueries.js +0 -265
- package/dist/cli/graphQueries.js.map +0 -1
- package/dist/cli/indexPolicy.d.ts +0 -36
- package/dist/cli/indexPolicy.d.ts.map +0 -1
- package/dist/cli/indexPolicy.js +0 -169
- package/dist/cli/indexPolicy.js.map +0 -1
- package/dist/cli/invocationContext.d.ts +0 -77
- package/dist/cli/invocationContext.d.ts.map +0 -1
- package/dist/cli/invocationContext.js +0 -423
- package/dist/cli/invocationContext.js.map +0 -1
- package/dist/cli/projectFile.d.ts +0 -13
- package/dist/cli/projectFile.d.ts.map +0 -1
- package/dist/cli/projectFile.js +0 -23
- package/dist/cli/projectFile.js.map +0 -1
- package/dist/cli/refactorPlan.d.ts +0 -6
- package/dist/cli/refactorPlan.d.ts.map +0 -1
- package/dist/cli/refactorPlan.js +0 -84
- package/dist/cli/refactorPlan.js.map +0 -1
- package/dist/cli/renamePreview.d.ts +0 -4
- package/dist/cli/renamePreview.d.ts.map +0 -1
- package/dist/cli/renamePreview.js +0 -92
- package/dist/cli/renamePreview.js.map +0 -1
- package/dist/cli/rootPolicy.d.ts +0 -53
- package/dist/cli/rootPolicy.d.ts.map +0 -1
- package/dist/cli/rootPolicy.js +0 -221
- package/dist/cli/rootPolicy.js.map +0 -1
- package/dist/cli/typeHierarchy.d.ts +0 -6
- package/dist/cli/typeHierarchy.d.ts.map +0 -1
- package/dist/cli/typeHierarchy.js +0 -90
- package/dist/cli/typeHierarchy.js.map +0 -1
- package/dist/cliBootstrap.d.ts +0 -3
- package/dist/cliBootstrap.d.ts.map +0 -1
- package/dist/cliBootstrap.js +0 -10
- package/dist/cliBootstrap.js.map +0 -1
- package/dist/documentLinks/asciidoc.d.ts.map +0 -1
- package/dist/documentLinks/asciidoc.js.map +0 -1
- package/dist/documentLinks/check.d.ts +0 -32
- package/dist/documentLinks/check.d.ts.map +0 -1
- package/dist/documentLinks/check.js +0 -286
- package/dist/documentLinks/check.js.map +0 -1
- package/dist/documentLinks/html.d.ts.map +0 -1
- package/dist/documentLinks/html.js.map +0 -1
- package/dist/documentLinks/markdown.d.ts.map +0 -1
- package/dist/documentLinks/markdown.js.map +0 -1
- package/dist/documentLinks/rst.d.ts.map +0 -1
- package/dist/documentLinks/rst.js.map +0 -1
- package/dist/documentLinks/sfc.d.ts.map +0 -1
- package/dist/documentLinks/sfc.js.map +0 -1
- package/dist/documentLinks/shared.d.ts.map +0 -1
- package/dist/documentLinks/shared.js.map +0 -1
- package/dist/documentLinks.d.ts +0 -12
- package/dist/documentLinks.d.ts.map +0 -1
- package/dist/documentLinks.js +0 -49
- package/dist/documentLinks.js.map +0 -1
- package/dist/duplicates/unitCache.d.ts +0 -46
- package/dist/duplicates/unitCache.d.ts.map +0 -1
- package/dist/duplicates/unitCache.js +0 -512
- package/dist/duplicates/unitCache.js.map +0 -1
- package/dist/duplicatesLeads.d.ts +0 -39
- package/dist/duplicatesLeads.d.ts.map +0 -1
- package/dist/duplicatesLeads.js +0 -112
- package/dist/duplicatesLeads.js.map +0 -1
- package/dist/graphs/edgeResolution.d.ts +0 -25
- package/dist/graphs/edgeResolution.d.ts.map +0 -1
- package/dist/graphs/edgeResolution.js +0 -97
- package/dist/graphs/edgeResolution.js.map +0 -1
- package/dist/graphs/symbol-graph-detailed/edgePasses.d.ts +0 -35
- package/dist/graphs/symbol-graph-detailed/edgePasses.d.ts.map +0 -1
- package/dist/graphs/symbol-graph-detailed/edgePasses.js +0 -586
- package/dist/graphs/symbol-graph-detailed/edgePasses.js.map +0 -1
- package/dist/graphs/symbol-graph-detailed/importAliases.d.ts +0 -10
- package/dist/graphs/symbol-graph-detailed/importAliases.d.ts.map +0 -1
- package/dist/graphs/symbol-graph-detailed/importAliases.js +0 -44
- package/dist/graphs/symbol-graph-detailed/importAliases.js.map +0 -1
- package/dist/graphs/symbol-graph-detailed/memberChains.d.ts +0 -17
- package/dist/graphs/symbol-graph-detailed/memberChains.d.ts.map +0 -1
- package/dist/graphs/symbol-graph-detailed/memberChains.js +0 -30
- package/dist/graphs/symbol-graph-detailed/memberChains.js.map +0 -1
- package/dist/graphs/symbol-graph-detailed/receiverCalls.d.ts +0 -69
- package/dist/graphs/symbol-graph-detailed/receiverCalls.d.ts.map +0 -1
- package/dist/graphs/symbol-graph-detailed/receiverCalls.js +0 -408
- package/dist/graphs/symbol-graph-detailed/receiverCalls.js.map +0 -1
- package/dist/impact/call-compatibility/textScanner.d.ts +0 -23
- package/dist/impact/call-compatibility/textScanner.d.ts.map +0 -1
- package/dist/impact/call-compatibility/textScanner.js +0 -615
- package/dist/impact/call-compatibility/textScanner.js.map +0 -1
- package/dist/impact/callCompatibility.d.ts +0 -24
- package/dist/impact/callCompatibility.d.ts.map +0 -1
- package/dist/impact/callCompatibility.js +0 -1023
- package/dist/impact/callCompatibility.js.map +0 -1
- package/dist/impact/memberResolutionCoverage.d.ts +0 -14
- package/dist/impact/memberResolutionCoverage.d.ts.map +0 -1
- package/dist/impact/memberResolutionCoverage.js +0 -42
- package/dist/impact/memberResolutionCoverage.js.map +0 -1
- package/dist/impact/referenceCache.d.ts +0 -12
- package/dist/impact/referenceCache.d.ts.map +0 -1
- package/dist/impact/referenceCache.js +0 -101
- package/dist/impact/referenceCache.js.map +0 -1
- package/dist/impact/reportCompact.d.ts +0 -8
- package/dist/impact/reportCompact.d.ts.map +0 -1
- package/dist/impact/reportCompact.js +0 -153
- package/dist/impact/reportCompact.js.map +0 -1
- package/dist/impact/reportFull.d.ts +0 -10
- package/dist/impact/reportFull.d.ts.map +0 -1
- package/dist/impact/reportFull.js +0 -67
- package/dist/impact/reportFull.js.map +0 -1
- package/dist/impact/reportParts.d.ts +0 -51
- package/dist/impact/reportParts.d.ts.map +0 -1
- package/dist/impact/reportParts.js +0 -2
- package/dist/impact/reportParts.js.map +0 -1
- package/dist/impact/reportShared.d.ts +0 -76
- package/dist/impact/reportShared.d.ts.map +0 -1
- package/dist/impact/reportShared.js +0 -130
- package/dist/impact/reportShared.js.map +0 -1
- package/dist/impact/testPatterns.d.ts +0 -6
- package/dist/impact/testPatterns.d.ts.map +0 -1
- package/dist/impact/testPatterns.js +0 -65
- package/dist/impact/testPatterns.js.map +0 -1
- package/dist/indexer/imports/graphOnly.d.ts +0 -13
- package/dist/indexer/imports/graphOnly.d.ts.map +0 -1
- package/dist/indexer/imports/graphOnly.js +0 -40
- package/dist/indexer/imports/graphOnly.js.map +0 -1
- package/dist/indexer/imports/jsTextImports.d.ts +0 -9
- package/dist/indexer/imports/jsTextImports.d.ts.map +0 -1
- package/dist/indexer/imports/jsTextImports.js +0 -181
- package/dist/indexer/imports/jsTextImports.js.map +0 -1
- package/dist/indexer/imports/languageSpecific.d.ts +0 -26
- package/dist/indexer/imports/languageSpecific.d.ts.map +0 -1
- package/dist/indexer/imports/languageSpecific.js +0 -449
- package/dist/indexer/imports/languageSpecific.js.map +0 -1
- package/dist/indexer/imports/nativeCaptures.d.ts +0 -16
- package/dist/indexer/imports/nativeCaptures.d.ts.map +0 -1
- package/dist/indexer/imports/nativeCaptures.js +0 -142
- package/dist/indexer/imports/nativeCaptures.js.map +0 -1
- package/dist/languages/definitions/cFamily.d.ts +0 -34
- package/dist/languages/definitions/cFamily.d.ts.map +0 -1
- package/dist/languages/definitions/cFamily.js +0 -177
- package/dist/languages/definitions/cFamily.js.map +0 -1
- package/dist/languages/definitions/cssLike.d.ts +0 -5
- package/dist/languages/definitions/cssLike.d.ts.map +0 -1
- package/dist/languages/definitions/cssLike.js +0 -32
- package/dist/languages/definitions/cssLike.js.map +0 -1
- package/dist/languages/definitions/htmlStub.d.ts +0 -18
- package/dist/languages/definitions/htmlStub.d.ts.map +0 -1
- package/dist/languages/definitions/htmlStub.js +0 -36
- package/dist/languages/definitions/htmlStub.js.map +0 -1
- package/dist/languages/definitions/jsFamily.d.ts +0 -5
- package/dist/languages/definitions/jsFamily.d.ts.map +0 -1
- package/dist/languages/definitions/jsFamily.js +0 -75
- package/dist/languages/definitions/jsFamily.js.map +0 -1
- package/dist/languages/filePrep.d.ts +0 -36
- package/dist/languages/filePrep.d.ts.map +0 -1
- package/dist/languages/filePrep.js +0 -76
- package/dist/languages/filePrep.js.map +0 -1
- package/dist/languages/importStatementParsers.d.ts +0 -57
- package/dist/languages/importStatementParsers.d.ts.map +0 -1
- package/dist/languages/importStatementParsers.js +0 -383
- package/dist/languages/importStatementParsers.js.map +0 -1
- package/dist/languages/queryGenerator.d.ts +0 -6
- package/dist/languages/queryGenerator.d.ts.map +0 -1
- package/dist/languages/queryGenerator.js +0 -46
- package/dist/languages/queryGenerator.js.map +0 -1
- package/dist/mcp/httpTransport.d.ts +0 -14
- package/dist/mcp/httpTransport.d.ts.map +0 -1
- package/dist/mcp/httpTransport.js +0 -185
- package/dist/mcp/httpTransport.js.map +0 -1
- package/dist/mcp/legacySessions.d.ts +0 -38
- package/dist/mcp/legacySessions.d.ts.map +0 -1
- package/dist/mcp/legacySessions.js +0 -264
- package/dist/mcp/legacySessions.js.map +0 -1
- package/dist/mcp/lifecycleHealth.d.ts +0 -12
- package/dist/mcp/lifecycleHealth.d.ts.map +0 -1
- package/dist/mcp/lifecycleHealth.js +0 -37
- package/dist/mcp/lifecycleHealth.js.map +0 -1
- package/dist/mcp/sqliteGuard.d.ts +0 -3
- package/dist/mcp/sqliteGuard.d.ts.map +0 -1
- package/dist/mcp/sqliteGuard.js +0 -35
- package/dist/mcp/sqliteGuard.js.map +0 -1
- package/dist/mcp/stdioLifecycle.d.ts +0 -23
- package/dist/mcp/stdioLifecycle.d.ts.map +0 -1
- package/dist/mcp/stdioLifecycle.js +0 -83
- package/dist/mcp/stdioLifecycle.js.map +0 -1
- package/dist/native/bindingLoader.d.ts +0 -51
- package/dist/native/bindingLoader.d.ts.map +0 -1
- package/dist/native/bindingLoader.js +0 -223
- package/dist/native/bindingLoader.js.map +0 -1
- package/dist/native/byteIndex.d.ts +0 -26
- package/dist/native/byteIndex.d.ts.map +0 -1
- package/dist/native/byteIndex.js +0 -70
- package/dist/native/byteIndex.js.map +0 -1
- package/dist/native/jsBridge.d.ts +0 -7
- package/dist/native/jsBridge.d.ts.map +0 -1
- package/dist/native/jsBridge.js +0 -25
- package/dist/native/jsBridge.js.map +0 -1
- package/dist/native/nativeBackendReport.d.ts +0 -22
- package/dist/native/nativeBackendReport.d.ts.map +0 -1
- package/dist/native/nativeBackendReport.js +0 -102
- package/dist/native/nativeBackendReport.js.map +0 -1
- package/dist/native/projectedTree.d.ts +0 -53
- package/dist/native/projectedTree.d.ts.map +0 -1
- package/dist/native/projectedTree.js +0 -180
- package/dist/native/projectedTree.js.map +0 -1
- package/dist/native/queryResults.d.ts +0 -12
- package/dist/native/queryResults.d.ts.map +0 -1
- package/dist/native/queryResults.js +0 -34
- package/dist/native/queryResults.js.map +0 -1
- package/dist/native/runtimeCache.d.ts +0 -128
- package/dist/native/runtimeCache.d.ts.map +0 -1
- package/dist/native/runtimeCache.js +0 -667
- package/dist/native/runtimeCache.js.map +0 -1
- package/dist/native/treeShape.d.ts +0 -21
- package/dist/native/treeShape.d.ts.map +0 -1
- package/dist/native/treeShape.js +0 -28
- package/dist/native/treeShape.js.map +0 -1
- package/dist/native/treeSitterNative.d.ts +0 -6
- package/dist/native/treeSitterNative.d.ts.map +0 -1
- package/dist/native/treeSitterNative.js +0 -5
- package/dist/native/treeSitterNative.js.map +0 -1
- package/dist/runtimeIdentity.d.ts +0 -27
- package/dist/runtimeIdentity.d.ts.map +0 -1
- package/dist/runtimeIdentity.js +0 -75
- package/dist/runtimeIdentity.js.map +0 -1
- package/dist/sql/classifySqlFile.d.ts +0 -3
- package/dist/sql/classifySqlFile.d.ts.map +0 -1
- package/dist/sql/classifySqlFile.js +0 -42
- package/dist/sql/classifySqlFile.js.map +0 -1
- package/dist/sql/extractFacts.d.ts +0 -4
- package/dist/sql/extractFacts.d.ts.map +0 -1
- package/dist/sql/extractFacts.js +0 -511
- package/dist/sql/extractFacts.js.map +0 -1
- package/dist/sql/sourceGraph.d.ts +0 -19
- package/dist/sql/sourceGraph.d.ts.map +0 -1
- package/dist/sql/sourceGraph.js +0 -195
- package/dist/sql/sourceGraph.js.map +0 -1
- package/dist/sqlite/rawQueryWorker.d.ts +0 -22
- package/dist/sqlite/rawQueryWorker.d.ts.map +0 -1
- package/dist/sqlite/rawQueryWorker.js +0 -31
- package/dist/sqlite/rawQueryWorker.js.map +0 -1
- package/dist/sqlite/rawQueryWorkerPool.d.ts +0 -66
- package/dist/sqlite/rawQueryWorkerPool.d.ts.map +0 -1
- package/dist/sqlite/rawQueryWorkerPool.js +0 -146
- package/dist/sqlite/rawQueryWorkerPool.js.map +0 -1
- package/dist/sqlite/rowBounds.d.ts +0 -24
- package/dist/sqlite/rowBounds.d.ts.map +0 -1
- package/dist/sqlite/rowBounds.js +0 -95
- package/dist/sqlite/rowBounds.js.map +0 -1
- package/dist/util/bloomFilter.d.ts +0 -100
- package/dist/util/bloomFilter.d.ts.map +0 -1
- package/dist/util/bloomFilter.js +0 -206
- package/dist/util/bloomFilter.js.map +0 -1
- package/dist/util/confinedFile.d.ts +0 -48
- package/dist/util/confinedFile.d.ts.map +0 -1
- package/dist/util/confinedFile.js +0 -164
- package/dist/util/confinedFile.js.map +0 -1
- package/dist/util/discoveryPath.d.ts +0 -3
- package/dist/util/discoveryPath.d.ts.map +0 -1
- package/dist/util/discoveryPath.js +0 -19
- package/dist/util/discoveryPath.js.map +0 -1
- package/dist/util/graphEdges.d.ts +0 -5
- package/dist/util/graphEdges.d.ts.map +0 -1
- package/dist/util/graphEdges.js +0 -42
- package/dist/util/graphEdges.js.map +0 -1
- package/dist/util/graphOnlyExtensions.d.ts +0 -5
- package/dist/util/graphOnlyExtensions.d.ts.map +0 -1
- package/dist/util/graphOnlyExtensions.js +0 -12
- package/dist/util/graphOnlyExtensions.js.map +0 -1
- package/dist/util/includeRoots.d.ts +0 -6
- package/dist/util/includeRoots.d.ts.map +0 -1
- package/dist/util/includeRoots.js +0 -53
- package/dist/util/includeRoots.js.map +0 -1
- package/dist/util/lazySymbols.d.ts +0 -166
- package/dist/util/lazySymbols.d.ts.map +0 -1
- package/dist/util/lazySymbols.js +0 -365
- package/dist/util/lazySymbols.js.map +0 -1
- package/dist/util/lruMap.d.ts +0 -3
- package/dist/util/lruMap.d.ts.map +0 -1
- package/dist/util/lruMap.js +0 -22
- package/dist/util/lruMap.js.map +0 -1
- package/dist/util/memberAccess.d.ts +0 -26
- package/dist/util/memberAccess.d.ts.map +0 -1
- package/dist/util/memberAccess.js +0 -185
- package/dist/util/memberAccess.js.map +0 -1
- package/dist/util/packageExports.d.ts +0 -25
- package/dist/util/packageExports.d.ts.map +0 -1
- package/dist/util/packageExports.js +0 -79
- package/dist/util/packageExports.js.map +0 -1
- package/dist/util/packageInfo.d.ts +0 -12
- package/dist/util/packageInfo.d.ts.map +0 -1
- package/dist/util/packageInfo.js +0 -57
- package/dist/util/packageInfo.js.map +0 -1
- package/dist/util/partialResults.d.ts +0 -81
- package/dist/util/partialResults.d.ts.map +0 -1
- package/dist/util/partialResults.js +0 -290
- package/dist/util/partialResults.js.map +0 -1
- package/dist/util/projectFiles/definitions.d.ts +0 -21
- package/dist/util/projectFiles/definitions.d.ts.map +0 -1
- package/dist/util/projectFiles/definitions.js.map +0 -1
- package/dist/util/projectFiles/parsers.d.ts.map +0 -1
- package/dist/util/projectFiles/parsers.js.map +0 -1
- package/dist/util/projectFiles.d.ts +0 -102
- package/dist/util/projectFiles.d.ts.map +0 -1
- package/dist/util/projectFiles.js +0 -1209
- package/dist/util/projectFiles.js.map +0 -1
- package/dist/util/resolution/findFirstExisting.d.ts +0 -2
- package/dist/util/resolution/findFirstExisting.d.ts.map +0 -1
- package/dist/util/resolution/findFirstExisting.js +0 -13
- package/dist/util/resolution/findFirstExisting.js.map +0 -1
- package/dist/util/resolution/phpComposer.d.ts +0 -17
- package/dist/util/resolution/phpComposer.d.ts.map +0 -1
- package/dist/util/resolution/phpComposer.js +0 -269
- package/dist/util/resolution/phpComposer.js.map +0 -1
- package/dist/util/resolution/projectSymbols.d.ts +0 -14
- package/dist/util/resolution/projectSymbols.d.ts.map +0 -1
- package/dist/util/resolution/projectSymbols.js +0 -70
- package/dist/util/resolution/projectSymbols.js.map +0 -1
- package/dist/util/resolutionCandidates.d.ts +0 -5
- package/dist/util/resolutionCandidates.d.ts.map +0 -1
- package/dist/util/resolutionCandidates.js +0 -70
- package/dist/util/resolutionCandidates.js.map +0 -1
- package/dist/util/rustTestModules.d.ts +0 -3
- package/dist/util/rustTestModules.d.ts.map +0 -1
- package/dist/util/rustTestModules.js +0 -71
- package/dist/util/rustTestModules.js.map +0 -1
- package/dist/util/sourceLocation.d.ts +0 -8
- package/dist/util/sourceLocation.d.ts.map +0 -1
- package/dist/util/sourceLocation.js +0 -19
- package/dist/util/sourceLocation.js.map +0 -1
- package/dist/util/sqliteSchema.d.ts +0 -28
- package/dist/util/sqliteSchema.d.ts.map +0 -1
- package/dist/util/sqliteSchema.js +0 -75
- package/dist/util/sqliteSchema.js.map +0 -1
- package/dist/util/symbolHash.d.ts +0 -59
- package/dist/util/symbolHash.d.ts.map +0 -1
- package/dist/util/symbolHash.js +0 -84
- package/dist/util/symbolHash.js.map +0 -1
- package/dist/util/windowsProcessDrain.d.ts +0 -23
- package/dist/util/windowsProcessDrain.d.ts.map +0 -1
- package/dist/util/windowsProcessDrain.js +0 -51
- package/dist/util/windowsProcessDrain.js.map +0 -1
- package/dist/util/workerThreads.d.ts +0 -12
- package/dist/util/workerThreads.d.ts.map +0 -1
- package/dist/util/workerThreads.js +0 -16
- package/dist/util/workerThreads.js.map +0 -1
- package/dist/worker/nativeExtractWorker.d.ts +0 -77
- package/dist/worker/nativeExtractWorker.d.ts.map +0 -1
- package/dist/worker/nativeExtractWorker.js +0 -272
- package/dist/worker/nativeExtractWorker.js.map +0 -1
- package/dist/worker/nativeWorkerPool.d.ts +0 -16
- package/dist/worker/nativeWorkerPool.d.ts.map +0 -1
- package/dist/worker/nativeWorkerPool.js +0 -54
- package/dist/worker/nativeWorkerPool.js.map +0 -1
- package/docs/graph-visualization/viewer-selected-node.webp +0 -0
- /package/dist/{documentLinks → document-links}/asciidoc.d.ts +0 -0
- /package/dist/{documentLinks → document-links}/asciidoc.js +0 -0
- /package/dist/{documentLinks → document-links}/html.d.ts +0 -0
- /package/dist/{documentLinks → document-links}/html.js +0 -0
- /package/dist/{documentLinks → document-links}/markdown.d.ts +0 -0
- /package/dist/{documentLinks → document-links}/markdown.js +0 -0
- /package/dist/{documentLinks → document-links}/rst.d.ts +0 -0
- /package/dist/{documentLinks → document-links}/rst.js +0 -0
- /package/dist/{documentLinks → document-links}/sfc.d.ts +0 -0
- /package/dist/{documentLinks → document-links}/sfc.js +0 -0
- /package/dist/{documentLinks → document-links}/shared.d.ts +0 -0
- /package/dist/{documentLinks → document-links}/shared.js +0 -0
- /package/dist/util/{projectFiles → project-files}/definitions.js +0 -0
- /package/dist/util/{projectFiles → project-files}/parsers.d.ts +0 -0
- /package/dist/util/{projectFiles → project-files}/parsers.js +0 -0
- /package/{docs/graph-visualization → src/viewer}/app.js +0 -0
- /package/{docs/graph-visualization → src/viewer}/file-tree-filters.js +0 -0
- /package/{docs/graph-visualization → src/viewer}/file-tree-model.js +0 -0
- /package/{docs/graph-visualization → src/viewer}/graph-builder.js +0 -0
- /package/{docs/graph-visualization → src/viewer}/index.html +0 -0
- /package/{docs/graph-visualization → src/viewer}/styles.css +0 -0
- /package/{docs/graph-visualization → src/viewer}/vendor/LICENSE.graphology-layout-forceatlas2.txt +0 -0
- /package/{docs/graph-visualization → src/viewer}/vendor/LICENSE.graphology.txt +0 -0
- /package/{docs/graph-visualization → src/viewer}/vendor/LICENSE.sigma.txt +0 -0
- /package/{docs/graph-visualization → src/viewer}/vendor/graphology-layout-forceatlas2.js +0 -0
- /package/{docs/graph-visualization → src/viewer}/vendor/graphology.js +0 -0
- /package/{docs/graph-visualization → src/viewer}/vendor/sigma.js +0 -0
|
@@ -1,1209 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs";
|
|
2
|
-
import fsp from "node:fs/promises";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
import fg from "fast-glob";
|
|
5
|
-
import picomatch from "picomatch";
|
|
6
|
-
import { performance } from "node:perf_hooks";
|
|
7
|
-
import { logWithLevel } from "../logging.js";
|
|
8
|
-
import { stringifyUnknown } from "./ast.js";
|
|
9
|
-
import { fileIdentityKey, isFilePathWithinRoot, normalizePath } from "./paths.js";
|
|
10
|
-
import { isRelativePathInside, matchesDiscoveryGlob } from "./discoveryPath.js";
|
|
11
|
-
export { isRelativePathInside, matchesDiscoveryGlob } from "./discoveryPath.js";
|
|
12
|
-
import { PROJECT_FILE_DEFINITIONS, } from "./projectFiles/definitions.js";
|
|
13
|
-
import { trimToNull } from "./projectFiles/parsers.js";
|
|
14
|
-
import { mapLimitSemaphore } from "./concurrency.js";
|
|
15
|
-
import { getGitRepositoryRoot, isGitProjectRootIgnored, isGitRepo, isGitTimeoutError, listGitExcludeFiles, listGitStageSpecialPaths, listTrackedFiles, listUntrackedFiles, } from "./git.js";
|
|
16
|
-
export const DEFAULT_PROJECT_FILE_IGNORES = [
|
|
17
|
-
"**/node_modules/**",
|
|
18
|
-
"**/.git/**",
|
|
19
|
-
// Never treat Codegraph's own on-disk state as project input. `.codegraph/` contains
|
|
20
|
-
// lifecycle metadata and the indexer disk cache. Keep the legacy cache ignore so
|
|
21
|
-
// pre-migration checkouts stay excluded from discovery.
|
|
22
|
-
"**/.codegraph/**",
|
|
23
|
-
"**/.codegraph-cache/**",
|
|
24
|
-
"**/dist/**",
|
|
25
|
-
"**/build/**",
|
|
26
|
-
"**/target/**",
|
|
27
|
-
"**/.venv/**",
|
|
28
|
-
"**/venv/**",
|
|
29
|
-
"**/site-packages/**",
|
|
30
|
-
"**/__pycache__/**",
|
|
31
|
-
"**/vendor/bundle/**",
|
|
32
|
-
"**/.build/**",
|
|
33
|
-
"**/Pods/**",
|
|
34
|
-
];
|
|
35
|
-
export const DEFAULT_PROJECT_MANIFESTS = [
|
|
36
|
-
"package.json",
|
|
37
|
-
"package-lock.json",
|
|
38
|
-
"pnpm-lock.yaml",
|
|
39
|
-
"yarn.lock",
|
|
40
|
-
"bun.lockb",
|
|
41
|
-
"pnpm-workspace.yaml",
|
|
42
|
-
"lerna.json",
|
|
43
|
-
"nx.json",
|
|
44
|
-
"turbo.json",
|
|
45
|
-
"tsconfig.json",
|
|
46
|
-
"jsconfig.json",
|
|
47
|
-
"requirements.txt",
|
|
48
|
-
"requirements.in",
|
|
49
|
-
"pyproject.toml",
|
|
50
|
-
"Pipfile",
|
|
51
|
-
"Pipfile.lock",
|
|
52
|
-
"poetry.lock",
|
|
53
|
-
"setup.py",
|
|
54
|
-
"setup.cfg",
|
|
55
|
-
"Cargo.toml",
|
|
56
|
-
"Cargo.lock",
|
|
57
|
-
"rust-toolchain",
|
|
58
|
-
"rust-toolchain.toml",
|
|
59
|
-
"go.mod",
|
|
60
|
-
"go.sum",
|
|
61
|
-
"go.work",
|
|
62
|
-
"Gemfile",
|
|
63
|
-
"Gemfile.lock",
|
|
64
|
-
"*.gemspec",
|
|
65
|
-
"pom.xml",
|
|
66
|
-
"mvnw",
|
|
67
|
-
"build.gradle",
|
|
68
|
-
"build.gradle.kts",
|
|
69
|
-
"settings.gradle",
|
|
70
|
-
"settings.gradle.kts",
|
|
71
|
-
"gradle.properties",
|
|
72
|
-
"gradlew",
|
|
73
|
-
"*.csproj",
|
|
74
|
-
"*.fsproj",
|
|
75
|
-
"*.vbproj",
|
|
76
|
-
"*.sln",
|
|
77
|
-
"Directory.Build.props",
|
|
78
|
-
"Directory.Build.targets",
|
|
79
|
-
"global.json",
|
|
80
|
-
"composer.json",
|
|
81
|
-
"composer.lock",
|
|
82
|
-
"Package.swift",
|
|
83
|
-
"Package.resolved",
|
|
84
|
-
"CMakeLists.txt",
|
|
85
|
-
"CMakePresets.json",
|
|
86
|
-
"CMakeUserPresets.json",
|
|
87
|
-
"Makefile",
|
|
88
|
-
"makefile",
|
|
89
|
-
"GNUmakefile",
|
|
90
|
-
"configure.ac",
|
|
91
|
-
"configure.in",
|
|
92
|
-
"meson.build",
|
|
93
|
-
"meson_options.txt",
|
|
94
|
-
"conanfile.txt",
|
|
95
|
-
"conanfile.py",
|
|
96
|
-
"vcpkg.json",
|
|
97
|
-
];
|
|
98
|
-
export const DEFAULT_PROJECT_PATTERNS = [
|
|
99
|
-
"**/*.{ts,tsx,js,jsx,mts,cts,mjs,cjs,py,pyi,php,vue,svelte,astro,hbs,handlebars,md,mdx,rst,adoc,asciidoc,go,java,cs,rb,rs,html,htm,css,scss,less,kt,kts,swift,zig,c,h,cc,cpp,cxx,c++,hpp,hh,hxx,ipp,tpp,inl,sql}",
|
|
100
|
-
...DEFAULT_PROJECT_MANIFESTS.map((name) => `**/${name}`),
|
|
101
|
-
];
|
|
102
|
-
const REALPATH_FILTER_CONCURRENCY = 64;
|
|
103
|
-
function emitDiscoveryActivity(report, activity, current = 0, total = 0) {
|
|
104
|
-
report?.({ activity, current, total });
|
|
105
|
-
}
|
|
106
|
-
function emitDiscoveryTiming(record, name, startedAt) {
|
|
107
|
-
record?.({ name, ms: Math.round(performance.now() - startedAt) });
|
|
108
|
-
}
|
|
109
|
-
function createPathCheckProgressReporter(total, onProgress) {
|
|
110
|
-
onProgress?.(0, total);
|
|
111
|
-
let completed = 0;
|
|
112
|
-
return () => {
|
|
113
|
-
completed += 1;
|
|
114
|
-
if (completed === total || completed % 100 === 0)
|
|
115
|
-
onProgress?.(completed, total);
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
function isPresent(value) {
|
|
119
|
-
return value !== undefined;
|
|
120
|
-
}
|
|
121
|
-
function normalizeGlobPattern(globPattern) {
|
|
122
|
-
return globPattern.trim().replace(/\\/g, "/");
|
|
123
|
-
}
|
|
124
|
-
const DIRECTORY_METADATA_EXTENSIONS = new Set();
|
|
125
|
-
const DIRECTORY_METADATA_BASENAMES = new Set();
|
|
126
|
-
for (const definition of PROJECT_FILE_DEFINITIONS) {
|
|
127
|
-
if (definition.kind !== "dir")
|
|
128
|
-
continue;
|
|
129
|
-
for (const pattern of definition.patterns) {
|
|
130
|
-
if (!pattern.includes("*") && !pattern.includes("?")) {
|
|
131
|
-
DIRECTORY_METADATA_BASENAMES.add(pattern.toLowerCase());
|
|
132
|
-
continue;
|
|
133
|
-
}
|
|
134
|
-
const trimmed = pattern.replaceAll("*", "").replaceAll("?", "");
|
|
135
|
-
const lastDot = trimmed.lastIndexOf(".");
|
|
136
|
-
if (lastDot < 0)
|
|
137
|
-
continue;
|
|
138
|
-
DIRECTORY_METADATA_EXTENSIONS.add(trimmed.slice(lastDot).toLowerCase());
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Git lists files, not directories. A directory symlink still appears as one path.
|
|
143
|
-
* Ordinary data files (`row.json`) are not directory links, so probing every Git
|
|
144
|
-
* candidate spent one lstat per JSON/CSV. Tracked symlinks are identified by Git
|
|
145
|
-
* mode 120000 regardless of extension. Untracked paths and Windows checkouts that
|
|
146
|
-
* do not record 120000 still need this name heuristic: no extension, a bundle
|
|
147
|
-
* directory marker such as `App.xcodeproj`, or a literal directory name such as `.idea`.
|
|
148
|
-
*/
|
|
149
|
-
function couldBeDirectorySymlink(filePath) {
|
|
150
|
-
const basename = path.posix.basename(normalizePath(filePath));
|
|
151
|
-
if (DIRECTORY_METADATA_BASENAMES.has(basename.toLowerCase()))
|
|
152
|
-
return true;
|
|
153
|
-
const extension = path.posix.extname(basename);
|
|
154
|
-
if (!extension)
|
|
155
|
-
return true;
|
|
156
|
-
return DIRECTORY_METADATA_EXTENSIONS.has(extension.toLowerCase());
|
|
157
|
-
}
|
|
158
|
-
function isProjectMetadataDirectoryName(dirPath) {
|
|
159
|
-
const basename = path.posix.basename(normalizePath(dirPath));
|
|
160
|
-
if (DIRECTORY_METADATA_BASENAMES.has(basename.toLowerCase()))
|
|
161
|
-
return true;
|
|
162
|
-
const extension = path.posix.extname(basename);
|
|
163
|
-
return Boolean(extension) && DIRECTORY_METADATA_EXTENSIONS.has(extension.toLowerCase());
|
|
164
|
-
}
|
|
165
|
-
function globLiteralPrefix(globPattern) {
|
|
166
|
-
const prefix = [];
|
|
167
|
-
let seenLiteral = false;
|
|
168
|
-
for (const segment of globPattern.split("/")) {
|
|
169
|
-
if (!segment)
|
|
170
|
-
continue;
|
|
171
|
-
if (!seenLiteral && segment === "**")
|
|
172
|
-
continue;
|
|
173
|
-
if (segment.includes("*") || segment.includes("?"))
|
|
174
|
-
break;
|
|
175
|
-
seenLiteral = true;
|
|
176
|
-
prefix.push(segment);
|
|
177
|
-
}
|
|
178
|
-
return prefix;
|
|
179
|
-
}
|
|
180
|
-
function isSegmentPrefix(prefix, pathSegments) {
|
|
181
|
-
if (!prefix.length || prefix.length > pathSegments.length)
|
|
182
|
-
return false;
|
|
183
|
-
return prefix.every((segment, index) => pathSegments[index] === segment);
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Whether an include glob explicitly re-opens a default-ignored root, so a default ignore
|
|
187
|
-
* should stay active for every OTHER root the includes never mention. A parent include
|
|
188
|
-
* such as vendor/ re-opens a nested ignore such as vendor/bundle. Compares
|
|
189
|
-
* literal path segments rather than attempting general glob-vs-glob intersection.
|
|
190
|
-
*/
|
|
191
|
-
function isIgnoreGlobReopenedByIncludes(ignoreGlob, includeGlobs) {
|
|
192
|
-
const ignoreLiterals = ignoreGlob.split("/").filter((segment) => segment && !segment.includes("*"));
|
|
193
|
-
if (!ignoreLiterals.length)
|
|
194
|
-
return false;
|
|
195
|
-
return includeGlobs.some((includeGlob) => {
|
|
196
|
-
const includeSegments = includeGlob.split("/");
|
|
197
|
-
if (ignoreLiterals.every((segment) => includeSegments.includes(segment)))
|
|
198
|
-
return true;
|
|
199
|
-
const includePrefix = globLiteralPrefix(includeGlob);
|
|
200
|
-
return isSegmentPrefix(includePrefix, ignoreLiterals) || isSegmentPrefix(ignoreLiterals, includePrefix);
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
function isLocationIndependentGlob(globPattern) {
|
|
204
|
-
return globPattern.startsWith("**/");
|
|
205
|
-
}
|
|
206
|
-
export function translateGlobRootIgnoreGlobsForScanRoot(scanRoot, globRoot, ignoreGlobs) {
|
|
207
|
-
const relativeScanRoot = normalizePath(path.relative(globRoot, scanRoot));
|
|
208
|
-
if (!relativeScanRoot || !isRelativePathInside(relativeScanRoot)) {
|
|
209
|
-
return ignoreGlobs.map(normalizeGlobPattern).filter(Boolean);
|
|
210
|
-
}
|
|
211
|
-
const rootPrefix = `${relativeScanRoot}/`;
|
|
212
|
-
return ignoreGlobs
|
|
213
|
-
.map(normalizeGlobPattern)
|
|
214
|
-
.filter(Boolean)
|
|
215
|
-
.map((globPattern) => {
|
|
216
|
-
const rootRelativePattern = globPattern.startsWith("/") ? globPattern.slice(1) : globPattern;
|
|
217
|
-
if (isLocationIndependentGlob(rootRelativePattern))
|
|
218
|
-
return rootRelativePattern;
|
|
219
|
-
if (rootRelativePattern === relativeScanRoot || rootRelativePattern === `${relativeScanRoot}/**`)
|
|
220
|
-
return "**";
|
|
221
|
-
if (rootRelativePattern.startsWith(rootPrefix))
|
|
222
|
-
return rootRelativePattern.slice(rootPrefix.length) || "**";
|
|
223
|
-
return undefined;
|
|
224
|
-
})
|
|
225
|
-
.filter(isPresent);
|
|
226
|
-
}
|
|
227
|
-
function stripGitignoreTrailingSpaces(line) {
|
|
228
|
-
let end = line.length;
|
|
229
|
-
while (end > 0 && line[end - 1] === " ") {
|
|
230
|
-
let slashCount = 0;
|
|
231
|
-
for (let i = end - 2; i >= 0 && line[i] === "\\"; i -= 1) {
|
|
232
|
-
slashCount += 1;
|
|
233
|
-
}
|
|
234
|
-
if (slashCount % 2 === 1) {
|
|
235
|
-
break;
|
|
236
|
-
}
|
|
237
|
-
end -= 1;
|
|
238
|
-
}
|
|
239
|
-
return line.slice(0, end);
|
|
240
|
-
}
|
|
241
|
-
function parseGitignoreRule(baseDir, rawLine) {
|
|
242
|
-
const trimmedLine = stripGitignoreTrailingSpaces(rawLine);
|
|
243
|
-
if (!trimmedLine)
|
|
244
|
-
return null;
|
|
245
|
-
if (trimmedLine.startsWith("#"))
|
|
246
|
-
return null;
|
|
247
|
-
const negated = trimmedLine.startsWith("!");
|
|
248
|
-
let pattern = negated ? trimmedLine.slice(1) : trimmedLine;
|
|
249
|
-
if (!pattern || pattern === "/")
|
|
250
|
-
return null;
|
|
251
|
-
const dirOnly = pattern.endsWith("/");
|
|
252
|
-
if (dirOnly) {
|
|
253
|
-
pattern = pattern.slice(0, -1);
|
|
254
|
-
}
|
|
255
|
-
if (pattern.startsWith("/")) {
|
|
256
|
-
pattern = pattern.slice(1);
|
|
257
|
-
}
|
|
258
|
-
pattern = pattern.replace(/^\\([#!])/, "$1").replace(/\\/g, "/");
|
|
259
|
-
if (!pattern)
|
|
260
|
-
return null;
|
|
261
|
-
const anchored = trimmedLine.startsWith("/") || (negated && trimmedLine.startsWith("!/"));
|
|
262
|
-
const baseMatcherPattern = anchored || pattern.includes("/") ? pattern : `**/${pattern}`;
|
|
263
|
-
const matcherPattern = dirOnly ? `${baseMatcherPattern}/**` : [baseMatcherPattern, `${baseMatcherPattern}/**`];
|
|
264
|
-
const matches = picomatch(matcherPattern, { dot: true });
|
|
265
|
-
return {
|
|
266
|
-
baseDir: normalizePath(baseDir),
|
|
267
|
-
negated,
|
|
268
|
-
dirOnly,
|
|
269
|
-
matches,
|
|
270
|
-
};
|
|
271
|
-
}
|
|
272
|
-
const EMPTY_GITIGNORE_INDEX = {
|
|
273
|
-
hasRules: false,
|
|
274
|
-
repositoryRoots: [],
|
|
275
|
-
repositoryAliases: [],
|
|
276
|
-
byBaseDir: new Map(),
|
|
277
|
-
};
|
|
278
|
-
/**
|
|
279
|
-
* Parse `.gitignore` rules from an already-discovered set of `.gitignore` files.
|
|
280
|
-
*
|
|
281
|
-
* Ordered by path depth, not lexically: a directory segment collating before `.` (for
|
|
282
|
-
* example `-vendor` or `!keep`) would otherwise place a child's rule file ahead of its
|
|
283
|
-
* parent's, so a parent could no longer suppress a child whose rules it ignores, and a
|
|
284
|
-
* child negation could re-include files. Depth-first ordering also keeps the "last match
|
|
285
|
-
* wins" order deeper files depend on, and drops the locale sensitivity of `localeCompare`.
|
|
286
|
-
*/
|
|
287
|
-
async function buildGitignoreIndex(sources, repositoryRoots = [], repositoryAliases = []) {
|
|
288
|
-
const sorted = [...sources]
|
|
289
|
-
.map(({ file, baseDir, repositoryRoot, priority }) => ({
|
|
290
|
-
file: normalizePath(file),
|
|
291
|
-
baseDir: normalizePath(baseDir),
|
|
292
|
-
priority: priority ?? 2,
|
|
293
|
-
...(repositoryRoot === undefined ? {} : { repositoryRoot: normalizePath(repositoryRoot) }),
|
|
294
|
-
}))
|
|
295
|
-
.sort((left, right) => {
|
|
296
|
-
const baseDepthDelta = left.baseDir.split("/").length - right.baseDir.split("/").length;
|
|
297
|
-
if (baseDepthDelta !== 0)
|
|
298
|
-
return baseDepthDelta;
|
|
299
|
-
const priorityDelta = left.priority - right.priority;
|
|
300
|
-
if (priorityDelta !== 0)
|
|
301
|
-
return priorityDelta;
|
|
302
|
-
if (left.file < right.file)
|
|
303
|
-
return -1;
|
|
304
|
-
return left.file > right.file ? 1 : 0;
|
|
305
|
-
});
|
|
306
|
-
const gitignoreIndex = {
|
|
307
|
-
hasRules: false,
|
|
308
|
-
repositoryRoots: Array.from(new Set(repositoryRoots.map(normalizePath))).sort((left, right) => right.length - left.length),
|
|
309
|
-
repositoryAliases: Array.from(new Map(repositoryAliases.map(({ path: aliasPath, repositoryRoot }) => [
|
|
310
|
-
fileIdentityKey(aliasPath),
|
|
311
|
-
{ path: normalizePath(aliasPath), repositoryRoot: normalizePath(repositoryRoot) },
|
|
312
|
-
])).values()).sort((left, right) => right.path.length - left.path.length),
|
|
313
|
-
byBaseDir: new Map(),
|
|
314
|
-
};
|
|
315
|
-
for (const { file, baseDir, repositoryRoot } of sorted) {
|
|
316
|
-
if (isIgnoredByGitignore(path.dirname(file), gitignoreIndex, true)) {
|
|
317
|
-
continue;
|
|
318
|
-
}
|
|
319
|
-
let raw;
|
|
320
|
-
try {
|
|
321
|
-
raw = await fsp.readFile(file, "utf8");
|
|
322
|
-
}
|
|
323
|
-
catch {
|
|
324
|
-
continue;
|
|
325
|
-
}
|
|
326
|
-
const baseKey = fileIdentityKey(baseDir);
|
|
327
|
-
for (const line of raw.split(/\r?\n/)) {
|
|
328
|
-
const rule = parseGitignoreRule(baseDir, line);
|
|
329
|
-
if (!rule)
|
|
330
|
-
continue;
|
|
331
|
-
const existing = gitignoreIndex.byBaseDir.get(baseKey);
|
|
332
|
-
if (existing)
|
|
333
|
-
existing.rules.push(rule);
|
|
334
|
-
else
|
|
335
|
-
gitignoreIndex.byBaseDir.set(baseKey, { baseDir, repositoryRoot, rules: [rule] });
|
|
336
|
-
gitignoreIndex.hasRules = true;
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
return gitignoreIndex;
|
|
340
|
-
}
|
|
341
|
-
async function findGitignoreFiles(projectRoot) {
|
|
342
|
-
return await fg(["**/.gitignore"], {
|
|
343
|
-
cwd: projectRoot,
|
|
344
|
-
absolute: true,
|
|
345
|
-
dot: true,
|
|
346
|
-
followSymbolicLinks: false,
|
|
347
|
-
ignore: DEFAULT_PROJECT_FILE_IGNORES,
|
|
348
|
-
});
|
|
349
|
-
}
|
|
350
|
-
async function loadGitignoreIndexForRootAliases(projectRoot) {
|
|
351
|
-
const roots = [projectRoot];
|
|
352
|
-
const realRoot = await fsp.realpath(projectRoot);
|
|
353
|
-
if (normalizePath(realRoot) !== normalizePath(projectRoot)) {
|
|
354
|
-
roots.push(realRoot);
|
|
355
|
-
}
|
|
356
|
-
const sources = [];
|
|
357
|
-
for (const root of roots) {
|
|
358
|
-
for (const file of await findGitignoreFiles(root)) {
|
|
359
|
-
sources.push({ file, baseDir: path.dirname(file) });
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
return await buildGitignoreIndex(sources);
|
|
363
|
-
}
|
|
364
|
-
/**
|
|
365
|
-
* Whether `.gitignore` rules ignore `absolutePath`.
|
|
366
|
-
*
|
|
367
|
-
* Only a `.gitignore` on the path's own ancestor chain can match it, so this walks that
|
|
368
|
-
* chain rather than testing every rule in the project. The skipped rules are exactly the
|
|
369
|
-
* ones whose relative-path check would have rejected them, and applying the chain
|
|
370
|
-
* shallowest-first reproduces the flat list's ordering, so the answer is unchanged.
|
|
371
|
-
* Testing every rule cost O(files x rules): on an Unreal project that meant 55,983
|
|
372
|
-
* candidates against 2,266 rules from 173 `.gitignore` files, or 253.7M evaluations and
|
|
373
|
-
* roughly 21.7s of a 26.1s discovery.
|
|
374
|
-
*
|
|
375
|
-
* The relative path is computed once per declaring directory rather than once per rule.
|
|
376
|
-
* Every rule in a group shares that directory, so the per-rule form repeated identical
|
|
377
|
-
* `path.relative` and normalization work; on the same project that repetition was the
|
|
378
|
-
* dominant remaining cost, at 2.6s of a 3.8s discovery.
|
|
379
|
-
*/
|
|
380
|
-
function isIgnoredByGitignore(absolutePath, gitignoreIndex, isDirectory = false) {
|
|
381
|
-
if (!gitignoreIndex.hasRules)
|
|
382
|
-
return false;
|
|
383
|
-
const owningRepositoryRoot = gitignoreIndex.repositoryRoots.find((root) => isFilePathWithinRoot(root, absolutePath)) ??
|
|
384
|
-
gitignoreIndex.repositoryAliases.find(({ path: aliasPath }) => isFilePathWithinRoot(aliasPath, absolutePath))
|
|
385
|
-
?.repositoryRoot;
|
|
386
|
-
const chain = [];
|
|
387
|
-
let current = normalizePath(path.dirname(absolutePath));
|
|
388
|
-
for (;;) {
|
|
389
|
-
const group = gitignoreIndex.byBaseDir.get(fileIdentityKey(current));
|
|
390
|
-
if (group)
|
|
391
|
-
chain.push(group);
|
|
392
|
-
const parent = normalizePath(path.dirname(current));
|
|
393
|
-
if (parent === current)
|
|
394
|
-
break;
|
|
395
|
-
current = parent;
|
|
396
|
-
}
|
|
397
|
-
let ignored = false;
|
|
398
|
-
for (let depth = chain.length - 1; depth >= 0; depth -= 1) {
|
|
399
|
-
const group = chain[depth];
|
|
400
|
-
if (group.repositoryRoot !== undefined &&
|
|
401
|
-
owningRepositoryRoot !== undefined &&
|
|
402
|
-
fileIdentityKey(group.repositoryRoot) !== fileIdentityKey(owningRepositoryRoot)) {
|
|
403
|
-
continue;
|
|
404
|
-
}
|
|
405
|
-
const relativePath = path.relative(group.baseDir, absolutePath);
|
|
406
|
-
if (!isRelativePathInside(relativePath)) {
|
|
407
|
-
continue;
|
|
408
|
-
}
|
|
409
|
-
const normalizedRelativePath = normalizePath(relativePath);
|
|
410
|
-
const hasSeparator = normalizedRelativePath.includes("/");
|
|
411
|
-
for (const rule of group.rules) {
|
|
412
|
-
if (rule.dirOnly && !hasSeparator && !isDirectory) {
|
|
413
|
-
continue;
|
|
414
|
-
}
|
|
415
|
-
const matchesDirectory = isDirectory && rule.dirOnly && rule.matches(`${normalizedRelativePath}/.directory`);
|
|
416
|
-
if (rule.matches(normalizedRelativePath) || matchesDirectory) {
|
|
417
|
-
ignored = !rule.negated;
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
return ignored;
|
|
422
|
-
}
|
|
423
|
-
async function ensureDirectoryReadable(directoryPath, label) {
|
|
424
|
-
const resolvedPath = path.resolve(directoryPath);
|
|
425
|
-
let stats;
|
|
426
|
-
try {
|
|
427
|
-
stats = await fsp.stat(resolvedPath);
|
|
428
|
-
}
|
|
429
|
-
catch (error) {
|
|
430
|
-
throw new Error(`${label} does not exist or is not readable: ${resolvedPath} (${stringifyUnknown(error)})`);
|
|
431
|
-
}
|
|
432
|
-
if (!stats.isDirectory()) {
|
|
433
|
-
throw new Error(`${label} is not a directory: ${resolvedPath}`);
|
|
434
|
-
}
|
|
435
|
-
return resolvedPath;
|
|
436
|
-
}
|
|
437
|
-
/**
|
|
438
|
-
* Every directory on the ancestor chain of `files`, up to and including `root`.
|
|
439
|
-
*
|
|
440
|
-
* The ignore matcher only consults rules declared at a path's own ancestors, so this is
|
|
441
|
-
* exactly the set of directories whose `.gitignore` can affect a candidate.
|
|
442
|
-
*/
|
|
443
|
-
function collectCandidateAncestorDirectories(root, files) {
|
|
444
|
-
const rootKey = fileIdentityKey(root);
|
|
445
|
-
const seen = new Set([rootKey]);
|
|
446
|
-
const directories = [normalizePath(root)];
|
|
447
|
-
for (const file of files) {
|
|
448
|
-
let current = normalizePath(path.dirname(file));
|
|
449
|
-
while (fileIdentityKey(current) !== rootKey) {
|
|
450
|
-
if (seen.has(fileIdentityKey(current)))
|
|
451
|
-
break;
|
|
452
|
-
seen.add(fileIdentityKey(current));
|
|
453
|
-
directories.push(current);
|
|
454
|
-
const parent = normalizePath(path.dirname(current));
|
|
455
|
-
if (parent === current)
|
|
456
|
-
break;
|
|
457
|
-
current = parent;
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
return directories;
|
|
461
|
-
}
|
|
462
|
-
export function owningGitIgnoreSourceRoot(file, roots, realpathMemo) {
|
|
463
|
-
const normalized = normalizePath(file);
|
|
464
|
-
let owning;
|
|
465
|
-
for (const root of roots) {
|
|
466
|
-
if (!isFilePathWithinRoot(root.path, normalized, realpathMemo) &&
|
|
467
|
-
!isFilePathWithinRoot(root.repositoryRoot, normalized, realpathMemo)) {
|
|
468
|
-
continue;
|
|
469
|
-
}
|
|
470
|
-
if (!owning || root.repositoryRoot.length > owning.repositoryRoot.length) {
|
|
471
|
-
owning = root;
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
return owning;
|
|
475
|
-
}
|
|
476
|
-
/**
|
|
477
|
-
* Ownership is pure path containment, so every candidate in the same parent directory
|
|
478
|
-
* shares one answer. The lookup and its realpath memo live only for this discovery pass,
|
|
479
|
-
* so a long-lived process cannot serve a stale owner after the tree changes.
|
|
480
|
-
*/
|
|
481
|
-
export function createGitIgnoreSourceOwnershipLookup(roots, realpathMemo) {
|
|
482
|
-
const ownershipByDirectory = new Map();
|
|
483
|
-
return (file) => {
|
|
484
|
-
const directory = normalizePath(path.dirname(file));
|
|
485
|
-
const key = fileIdentityKey(directory);
|
|
486
|
-
if (ownershipByDirectory.has(key)) {
|
|
487
|
-
return ownershipByDirectory.get(key);
|
|
488
|
-
}
|
|
489
|
-
const owning = owningGitIgnoreSourceRoot(directory, roots, realpathMemo);
|
|
490
|
-
ownershipByDirectory.set(key, owning);
|
|
491
|
-
return owning;
|
|
492
|
-
};
|
|
493
|
-
}
|
|
494
|
-
async function gitignoreFileIfPresent(directory) {
|
|
495
|
-
const file = normalizePath(path.join(directory, ".gitignore"));
|
|
496
|
-
try {
|
|
497
|
-
const stat = await fsp.stat(file);
|
|
498
|
-
return stat.isFile() ? file : undefined;
|
|
499
|
-
}
|
|
500
|
-
catch {
|
|
501
|
-
return undefined;
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
/**
|
|
505
|
-
* Locate the `.gitignore` files that can affect the Git candidates, plus Git's
|
|
506
|
-
* other ignore sources.
|
|
507
|
-
*
|
|
508
|
-
* A `.gitignore` only applies beneath its directory. After Git has listed tracked
|
|
509
|
-
* and untracked candidates, the ignore files that can affect those paths live on
|
|
510
|
-
* their ancestor chains up to the owning repository root, including parents of a
|
|
511
|
-
* nested scan root, and at each source root. Stopping at the scan root would miss
|
|
512
|
-
* `packages/.gitignore` when listing `packages/app`. Asking Git for ignored
|
|
513
|
-
* `.gitignore` files walks every gitignored tree looking for them, which times
|
|
514
|
-
* out on a large ignored data directory even after file listing already finished.
|
|
515
|
-
*/
|
|
516
|
-
async function findGitIgnoreSources(sourceRoots, candidateFiles) {
|
|
517
|
-
const roots = Array.from(new Map(sourceRoots.map(({ path: sourceRoot, repositoryRoot }) => [
|
|
518
|
-
fileIdentityKey(sourceRoot),
|
|
519
|
-
{ path: normalizePath(sourceRoot), repositoryRoot: normalizePath(repositoryRoot) },
|
|
520
|
-
])).values());
|
|
521
|
-
const directories = new Map();
|
|
522
|
-
const walkedDirectoryKeys = new Set();
|
|
523
|
-
const addDirectory = (directory, repositoryRoot) => {
|
|
524
|
-
const dir = normalizePath(directory);
|
|
525
|
-
const key = fileIdentityKey(dir);
|
|
526
|
-
if (!directories.has(key))
|
|
527
|
-
directories.set(key, { dir, repositoryRoot: normalizePath(repositoryRoot) });
|
|
528
|
-
};
|
|
529
|
-
for (const { path: sourceRoot, repositoryRoot } of roots) {
|
|
530
|
-
addDirectory(sourceRoot, repositoryRoot);
|
|
531
|
-
}
|
|
532
|
-
const realpathMemo = new Map();
|
|
533
|
-
const owningOf = createGitIgnoreSourceOwnershipLookup(roots, realpathMemo);
|
|
534
|
-
for (const file of candidateFiles) {
|
|
535
|
-
const owning = owningOf(file);
|
|
536
|
-
if (!owning)
|
|
537
|
-
continue;
|
|
538
|
-
let dir = normalizePath(path.dirname(file));
|
|
539
|
-
const stopKey = fileIdentityKey(owning.repositoryRoot);
|
|
540
|
-
while (true) {
|
|
541
|
-
const dirKey = fileIdentityKey(dir);
|
|
542
|
-
const walkKey = `${dirKey}\0${stopKey}`;
|
|
543
|
-
if (walkedDirectoryKeys.has(walkKey))
|
|
544
|
-
break;
|
|
545
|
-
addDirectory(dir, owning.repositoryRoot);
|
|
546
|
-
walkedDirectoryKeys.add(walkKey);
|
|
547
|
-
if (dirKey === stopKey)
|
|
548
|
-
break;
|
|
549
|
-
const parent = normalizePath(path.dirname(dir));
|
|
550
|
-
if (parent === dir ||
|
|
551
|
-
(!isFilePathWithinRoot(owning.path, parent, realpathMemo) &&
|
|
552
|
-
!isFilePathWithinRoot(owning.repositoryRoot, parent, realpathMemo))) {
|
|
553
|
-
break;
|
|
554
|
-
}
|
|
555
|
-
dir = parent;
|
|
556
|
-
}
|
|
557
|
-
}
|
|
558
|
-
const uniqueRepositoryRoots = Array.from(new Set(roots.map((root) => root.repositoryRoot)));
|
|
559
|
-
const [gitignoreHits, excludeLists] = await Promise.all([
|
|
560
|
-
mapLimitSemaphore(Array.from(directories.values()), REALPATH_FILTER_CONCURRENCY, async ({ dir, repositoryRoot }) => {
|
|
561
|
-
const file = await gitignoreFileIfPresent(dir);
|
|
562
|
-
return file ? [{ file, baseDir: dir, repositoryRoot, priority: 2 }] : [];
|
|
563
|
-
}),
|
|
564
|
-
Promise.all(uniqueRepositoryRoots.map((repositoryRoot) => listGitExcludeFiles(repositoryRoot))),
|
|
565
|
-
]);
|
|
566
|
-
return [
|
|
567
|
-
...gitignoreHits.flat(),
|
|
568
|
-
...excludeLists.flat().map((source) => ({
|
|
569
|
-
...source,
|
|
570
|
-
repositoryRoot: source.baseDir,
|
|
571
|
-
})),
|
|
572
|
-
];
|
|
573
|
-
}
|
|
574
|
-
/**
|
|
575
|
-
* Enumerate candidate project files through Git, or `null` when Git cannot answer.
|
|
576
|
-
*
|
|
577
|
-
* Tracked plus untracked-but-not-ignored files are Git candidates. Submodule files retain
|
|
578
|
-
* their own repository boundary, and source roots cover logical and physical aliases.
|
|
579
|
-
*/
|
|
580
|
-
async function listGitCandidateFiles(root, logLevel, opts) {
|
|
581
|
-
let gitListStart;
|
|
582
|
-
let gitIgnoreStart;
|
|
583
|
-
try {
|
|
584
|
-
const realRoot = normalizePath(await fsp.realpath(root));
|
|
585
|
-
const gitRoot = (await isGitRepo(root)) ? root : realRoot;
|
|
586
|
-
if (!(await isGitRepo(gitRoot)))
|
|
587
|
-
return null;
|
|
588
|
-
if (await isGitProjectRootIgnored(realRoot))
|
|
589
|
-
return null;
|
|
590
|
-
const gitRepositoryRoot = await getGitRepositoryRoot(gitRoot);
|
|
591
|
-
if (!gitRepositoryRoot)
|
|
592
|
-
return null;
|
|
593
|
-
emitDiscoveryActivity(opts?.onDiscoveryProgress, "Listing Git files");
|
|
594
|
-
const listStartedAt = performance.now();
|
|
595
|
-
gitListStart = listStartedAt;
|
|
596
|
-
const [tracked, untracked, stageSpecial] = await Promise.all([
|
|
597
|
-
listTrackedFiles(gitRoot, { recurseSubmodules: true, ...(logLevel === undefined ? {} : { logLevel }) }),
|
|
598
|
-
listUntrackedFiles(gitRoot, { respectGitignore: true }),
|
|
599
|
-
listGitStageSpecialPaths(gitRoot, { recurse: true }),
|
|
600
|
-
]);
|
|
601
|
-
const submoduleDirectories = stageSpecial.gitlinks;
|
|
602
|
-
const submoduleRoots = await Promise.all(submoduleDirectories.map(async (logicalPath) => ({
|
|
603
|
-
logicalPath: normalizePath(logicalPath),
|
|
604
|
-
physicalPath: normalizePath(await fsp.realpath(logicalPath).catch(() => logicalPath)),
|
|
605
|
-
})));
|
|
606
|
-
const submoduleUntracked = await Promise.all(submoduleRoots.map(async ({ physicalPath }) => await listUntrackedFiles(physicalPath, { respectGitignore: true })));
|
|
607
|
-
const rawFiles = Array.from(new Set([...tracked, ...untracked, ...submoduleUntracked.flat()])).sort();
|
|
608
|
-
const needsLogicalRemap = normalizePath(gitRoot) !== normalizePath(root);
|
|
609
|
-
const files = Array.from(new Set(rawFiles.map((file) => needsLogicalRemap && isFilePathWithinRoot(realRoot, file)
|
|
610
|
-
? normalizePath(path.resolve(root, path.relative(realRoot, file)))
|
|
611
|
-
: normalizePath(file)))).sort();
|
|
612
|
-
const remapGitPath = (file) => needsLogicalRemap && isFilePathWithinRoot(realRoot, file)
|
|
613
|
-
? normalizePath(path.resolve(root, path.relative(realRoot, file)))
|
|
614
|
-
: normalizePath(file);
|
|
615
|
-
const symlinkCandidatePaths = Array.from(new Set([...stageSpecial.symlinks.map(remapGitPath), ...files.filter((file) => couldBeDirectorySymlink(file))])).sort();
|
|
616
|
-
const gitignoreRoots = [gitRepositoryRoot, ...submoduleRoots.map(({ physicalPath }) => physicalPath)].map(normalizePath);
|
|
617
|
-
const sourceRoots = [
|
|
618
|
-
{ path: root, repositoryRoot: gitRepositoryRoot },
|
|
619
|
-
{ path: realRoot, repositoryRoot: gitRepositoryRoot },
|
|
620
|
-
{ path: gitRepositoryRoot, repositoryRoot: gitRepositoryRoot },
|
|
621
|
-
...submoduleRoots.flatMap(({ logicalPath, physicalPath }) => [
|
|
622
|
-
{ path: logicalPath, repositoryRoot: physicalPath },
|
|
623
|
-
{ path: physicalPath, repositoryRoot: physicalPath },
|
|
624
|
-
]),
|
|
625
|
-
];
|
|
626
|
-
emitDiscoveryTiming(opts?.onDiscoveryTiming, "git-list", listStartedAt);
|
|
627
|
-
gitListStart = undefined;
|
|
628
|
-
emitDiscoveryActivity(opts?.onDiscoveryProgress, "Listing Git files", files.length, files.length);
|
|
629
|
-
emitDiscoveryActivity(opts?.onDiscoveryProgress, "Listing Git ignore files");
|
|
630
|
-
const ignoreStartedAt = performance.now();
|
|
631
|
-
gitIgnoreStart = ignoreStartedAt;
|
|
632
|
-
const gitignoreFiles = await findGitIgnoreSources(sourceRoots, files);
|
|
633
|
-
emitDiscoveryTiming(opts?.onDiscoveryTiming, "git-ignore", ignoreStartedAt);
|
|
634
|
-
gitIgnoreStart = undefined;
|
|
635
|
-
emitDiscoveryActivity(opts?.onDiscoveryProgress, "Listing Git ignore files", gitignoreFiles.length, gitignoreFiles.length);
|
|
636
|
-
return {
|
|
637
|
-
files,
|
|
638
|
-
symlinkCandidatePaths,
|
|
639
|
-
gitignoreFiles,
|
|
640
|
-
gitignoreRoots,
|
|
641
|
-
gitignoreAliases: sourceRoots,
|
|
642
|
-
};
|
|
643
|
-
}
|
|
644
|
-
catch (error) {
|
|
645
|
-
const listingTimedOut = isGitTimeoutError(error) && (gitIgnoreStart !== undefined || gitListStart !== undefined);
|
|
646
|
-
if (gitIgnoreStart !== undefined) {
|
|
647
|
-
emitDiscoveryTiming(opts?.onDiscoveryTiming, "git-ignore", gitIgnoreStart);
|
|
648
|
-
}
|
|
649
|
-
else if (gitListStart !== undefined) {
|
|
650
|
-
emitDiscoveryTiming(opts?.onDiscoveryTiming, "git-list", gitListStart);
|
|
651
|
-
}
|
|
652
|
-
if (listingTimedOut) {
|
|
653
|
-
logWithLevel(logLevel, "warn", "Warning: Git listing timed out; scanning the filesystem instead. Ignore large untracked trees in .gitignore to keep discovery fast.");
|
|
654
|
-
}
|
|
655
|
-
else {
|
|
656
|
-
logWithLevel(logLevel, "debug", `Git discovery unavailable for ${root}: ${stringifyUnknown(error)}`);
|
|
657
|
-
}
|
|
658
|
-
return null;
|
|
659
|
-
}
|
|
660
|
-
}
|
|
661
|
-
export async function listProjectFiles(projectRoot, patterns = DEFAULT_PROJECT_PATTERNS, options) {
|
|
662
|
-
return await listProjectFilesInternal(projectRoot, patterns, options);
|
|
663
|
-
}
|
|
664
|
-
export async function listProjectFilesWithGitCandidates(projectRoot, patterns = DEFAULT_PROJECT_PATTERNS, options) {
|
|
665
|
-
return await listProjectFilesInternal(projectRoot, patterns, options);
|
|
666
|
-
}
|
|
667
|
-
async function listProjectFilesInternal(projectRoot, patterns = DEFAULT_PROJECT_PATTERNS, options) {
|
|
668
|
-
const root = await ensureDirectoryReadable(projectRoot, "Project root");
|
|
669
|
-
const globRoot = options?.globRoot ? await ensureDirectoryReadable(options.globRoot, "Glob root") : root;
|
|
670
|
-
const includeGlobs = (options?.includeGlobs ?? []).map(normalizeGlobPattern).filter(Boolean);
|
|
671
|
-
const includeMatchers = includeGlobs.map((globPattern) => picomatch(globPattern, { dot: true }));
|
|
672
|
-
const userIgnoreGlobs = (options?.ignoreGlobs ?? []).map(normalizeGlobPattern).filter(Boolean);
|
|
673
|
-
const userIgnoreMatchers = userIgnoreGlobs.map((globPattern) => picomatch(globPattern, { dot: true }));
|
|
674
|
-
const defaultIgnoreMatchers = DEFAULT_PROJECT_FILE_IGNORES.map((globPattern) => picomatch(globPattern, { dot: true }));
|
|
675
|
-
const patternMatchers = patterns.map((pattern) => picomatch(normalizeGlobPattern(pattern), { dot: true }));
|
|
676
|
-
const translatedUserIgnoreGlobs = translateGlobRootIgnoreGlobsForScanRoot(root, globRoot, userIgnoreGlobs);
|
|
677
|
-
const fastGlobIgnoreGlobs = [...DEFAULT_PROJECT_FILE_IGNORES, ...translatedUserIgnoreGlobs];
|
|
678
|
-
// Include globs are an explicit request to re-open otherwise ignored roots. Probe
|
|
679
|
-
// those roots for safe directory links before the later filter reapplies the default
|
|
680
|
-
// ignores, so an included link is not lost before it can be traversed. Default ignores
|
|
681
|
-
// an include never mentions (e.g. node_modules when only src/** is included) stay
|
|
682
|
-
// active, so the probe does not walk unrelated large ignored trees.
|
|
683
|
-
const symlinkProbeIgnoreGlobs = includeGlobs.length
|
|
684
|
-
? [
|
|
685
|
-
...translatedUserIgnoreGlobs,
|
|
686
|
-
...DEFAULT_PROJECT_FILE_IGNORES.filter((ignoreGlob) => !isIgnoreGlobReopenedByIncludes(ignoreGlob, includeGlobs)),
|
|
687
|
-
]
|
|
688
|
-
: fastGlobIgnoreGlobs;
|
|
689
|
-
try {
|
|
690
|
-
const useGitignore = options?.useGitignore ?? true;
|
|
691
|
-
const realRoot = await fsp.realpath(root);
|
|
692
|
-
// Enumerate through Git when Git's ignore rules are the ones this call wants anyway.
|
|
693
|
-
// Git applies them while walking, so ignored trees are never descended into and never
|
|
694
|
-
// reach the realpath and gitignore checks below. Scanning instead costs O(files on
|
|
695
|
-
// disk): on an Unreal project holding 100,168 files (818 tracked) the scan produced
|
|
696
|
-
// 55,983 pattern-matching candidates, nearly all generated sources under a gitignored
|
|
697
|
-
// `Intermediate/` tree, and discovery took 26.1s. Git lists 4,010 in about 111ms.
|
|
698
|
-
// An aliased root or a gitignore-root override that points elsewhere means Git's notion
|
|
699
|
-
// of the project is not this call's, so those fall back to the scan. Passing
|
|
700
|
-
// `gitignoreRoot` equal to the scan root (the CLI's historical whole-project form) still
|
|
701
|
-
// wants this repository's ignore rules, so keep the Git candidate path. On a 501-file
|
|
702
|
-
// Git repo with a 20,000-file gitignored tree, `gitignoreRoot: scanRoot` otherwise
|
|
703
|
-
// forced a filesystem scan plus a full-tree symlink probe (~403ms) instead of Git
|
|
704
|
-
// listing (~66ms) of the 502 tracked paths.
|
|
705
|
-
// Compare by identity key, not slash normalization: on a case-insensitive filesystem a
|
|
706
|
-
// casing or drive-letter difference still names the same directory, and calling that a
|
|
707
|
-
// mismatch would silently drop back to the slow scan this fast path exists to avoid.
|
|
708
|
-
const scanRootKey = fileIdentityKey(root);
|
|
709
|
-
const gitignoreRootMatchesScanRoot = options?.gitignoreRoot === undefined || fileIdentityKey(options.gitignoreRoot) === scanRootKey;
|
|
710
|
-
const attemptedGitCandidates = useGitignore && gitignoreRootMatchesScanRoot && fileIdentityKey(realRoot) === scanRootKey;
|
|
711
|
-
const gitDiscoveryCallbacks = {
|
|
712
|
-
...(options?.onDiscoveryProgress ? { onDiscoveryProgress: options.onDiscoveryProgress } : {}),
|
|
713
|
-
...(options?.onDiscoveryTiming ? { onDiscoveryTiming: options.onDiscoveryTiming } : {}),
|
|
714
|
-
};
|
|
715
|
-
const gitCandidates = attemptedGitCandidates
|
|
716
|
-
? await listGitCandidateFiles(root, options?.logLevel, gitDiscoveryCallbacks)
|
|
717
|
-
: null;
|
|
718
|
-
// Report only when this call actually asked Git, including a null result. Callers that
|
|
719
|
-
// already enumerated candidates (build-index) can hand the same set to metadata discovery
|
|
720
|
-
// and skip a second Git spawn; omitting the callback keeps prior caller behavior.
|
|
721
|
-
if (attemptedGitCandidates) {
|
|
722
|
-
options?.onGitCandidatesDiscovered?.(gitCandidates);
|
|
723
|
-
}
|
|
724
|
-
let gitignoreIndex = EMPTY_GITIGNORE_INDEX;
|
|
725
|
-
if (useGitignore && gitCandidates) {
|
|
726
|
-
gitignoreIndex = await buildGitignoreIndex(gitCandidates.gitignoreFiles, gitCandidates.gitignoreRoots, gitCandidates.gitignoreAliases);
|
|
727
|
-
}
|
|
728
|
-
else if (useGitignore) {
|
|
729
|
-
const gitignoreRoot = options?.gitignoreRoot
|
|
730
|
-
? await ensureDirectoryReadable(options.gitignoreRoot, "Gitignore root")
|
|
731
|
-
: root;
|
|
732
|
-
gitignoreIndex = await loadGitignoreIndexForRootAliases(gitignoreRoot);
|
|
733
|
-
}
|
|
734
|
-
// Git returns a candidate set, not a filtered result: the pattern, include,
|
|
735
|
-
// default-ignore, and gitignore checks below still decide what is indexable.
|
|
736
|
-
let files;
|
|
737
|
-
if (gitCandidates) {
|
|
738
|
-
files = gitCandidates.files;
|
|
739
|
-
}
|
|
740
|
-
else {
|
|
741
|
-
emitDiscoveryActivity(options?.onDiscoveryProgress, "Scanning project files");
|
|
742
|
-
const scanStart = performance.now();
|
|
743
|
-
files = await fg(patterns, {
|
|
744
|
-
cwd: root,
|
|
745
|
-
absolute: true,
|
|
746
|
-
dot: true,
|
|
747
|
-
followSymbolicLinks: false,
|
|
748
|
-
ignore: fastGlobIgnoreGlobs,
|
|
749
|
-
});
|
|
750
|
-
emitDiscoveryTiming(options?.onDiscoveryTiming, "filesystem-scan", scanStart);
|
|
751
|
-
emitDiscoveryActivity(options?.onDiscoveryProgress, "Scanning project files", files.length, files.length);
|
|
752
|
-
}
|
|
753
|
-
// Explicit includeGlobs may re-open default-ignored trees (for example vendored
|
|
754
|
-
// dependency dirs). Scan those include patterns without default ignores, then keep
|
|
755
|
-
// only paths that still match the project patterns and include globs below.
|
|
756
|
-
//
|
|
757
|
-
// Only needed on the scan path. Git never applied this project's default ignores, so
|
|
758
|
-
// its listing already contains those files and the include globs below re-open them.
|
|
759
|
-
// Running the scan anyway would also re-add paths Git excluded through its own
|
|
760
|
-
// exclude files, contradicting the rule that Git's ignores still win here.
|
|
761
|
-
const includedOverrideFiles = includeGlobs.length && !gitCandidates
|
|
762
|
-
? await fg(translateGlobRootIgnoreGlobsForScanRoot(root, globRoot, includeGlobs), {
|
|
763
|
-
cwd: root,
|
|
764
|
-
absolute: true,
|
|
765
|
-
dot: true,
|
|
766
|
-
followSymbolicLinks: false,
|
|
767
|
-
ignore: translatedUserIgnoreGlobs,
|
|
768
|
-
})
|
|
769
|
-
: [];
|
|
770
|
-
const reportSourceSymlinkChecks = options?.onDiscoveryProgress
|
|
771
|
-
? (current, total) => options.onDiscoveryProgress?.({ activity: "Checking source symlinks", current, total })
|
|
772
|
-
: undefined;
|
|
773
|
-
const reportSourcePathChecks = options?.onDiscoveryProgress
|
|
774
|
-
? (current, total) => options.onDiscoveryProgress?.({ activity: "Checking source file paths", current, total })
|
|
775
|
-
: undefined;
|
|
776
|
-
const symlinkOptions = {
|
|
777
|
-
globRoot,
|
|
778
|
-
...(gitCandidates ? { candidatePaths: gitCandidates.symlinkCandidatePaths } : {}),
|
|
779
|
-
...(options?.knownSymlinkDirectories !== undefined
|
|
780
|
-
? { knownSymlinkDirectories: options.knownSymlinkDirectories }
|
|
781
|
-
: {}),
|
|
782
|
-
...(options?.onSymlinkDirectoriesDiscovered
|
|
783
|
-
? { onSymlinkDirectoriesDiscovered: options.onSymlinkDirectoriesDiscovered }
|
|
784
|
-
: {}),
|
|
785
|
-
...(reportSourceSymlinkChecks ? { onPathCheckProgress: reportSourceSymlinkChecks } : {}),
|
|
786
|
-
};
|
|
787
|
-
const safeSymlinkDirectories = await resolveSafeSymlinkDirectories(root, realRoot, symlinkProbeIgnoreGlobs, symlinkOptions);
|
|
788
|
-
const linkedFiles = await listEntriesFromSafeSymlinkDirectories(root, realRoot, patterns, fastGlobIgnoreGlobs, {
|
|
789
|
-
...symlinkOptions,
|
|
790
|
-
filterIgnoreGlobs: [...DEFAULT_PROJECT_FILE_IGNORES, ...userIgnoreGlobs],
|
|
791
|
-
resolvedSafeSymlinkDirectories: safeSymlinkDirectories,
|
|
792
|
-
});
|
|
793
|
-
const linkedOverrideFiles = includeGlobs.length === 0
|
|
794
|
-
? []
|
|
795
|
-
: await listEntriesFromSafeSymlinkDirectories(root, realRoot, patterns, translatedUserIgnoreGlobs, {
|
|
796
|
-
globRoot,
|
|
797
|
-
filterIgnoreGlobs: userIgnoreGlobs,
|
|
798
|
-
resolvedSafeSymlinkDirectories: safeSymlinkDirectories,
|
|
799
|
-
});
|
|
800
|
-
// Cheap path predicates run before the realpath confinement probe. Git enumerates
|
|
801
|
-
// every tracked and untracked file it knows about, including trees this project
|
|
802
|
-
// always ignores (virtualenvs, build output, caches), so probing first spent one
|
|
803
|
-
// realpath syscall per ignored candidate: a Python project with a 20k-file untracked
|
|
804
|
-
// virtualenv took 1.0s of syscalls to return 7 files. Only candidates that can still
|
|
805
|
-
// become project files need their physical path resolved.
|
|
806
|
-
const candidatePaths = [...files, ...includedOverrideFiles, ...linkedFiles, ...linkedOverrideFiles];
|
|
807
|
-
const seen = new Set();
|
|
808
|
-
const indexableCandidates = [];
|
|
809
|
-
for (const candidatePath of candidatePaths) {
|
|
810
|
-
const filePath = normalizePath(candidatePath);
|
|
811
|
-
if (seen.has(filePath))
|
|
812
|
-
continue;
|
|
813
|
-
seen.add(filePath);
|
|
814
|
-
const rootRelative = normalizePath(path.relative(root, filePath));
|
|
815
|
-
if (!isRelativePathInside(rootRelative))
|
|
816
|
-
continue;
|
|
817
|
-
if (!patternMatchers.some((matcher) => matcher(rootRelative)))
|
|
818
|
-
continue;
|
|
819
|
-
if (includeMatchers.length &&
|
|
820
|
-
!includeMatchers.some((matcher) => matchesDiscoveryGlob(filePath, globRoot, matcher))) {
|
|
821
|
-
continue;
|
|
822
|
-
}
|
|
823
|
-
if (userIgnoreMatchers.some((matcher) => matchesDiscoveryGlob(filePath, globRoot, matcher)))
|
|
824
|
-
continue;
|
|
825
|
-
// Explicit include globs are a deliberate request to re-open default-ignored trees.
|
|
826
|
-
if (!includeMatchers.length && defaultIgnoreMatchers.some((matcher) => matcher(rootRelative)))
|
|
827
|
-
continue;
|
|
828
|
-
if (isIgnoredByGitignore(filePath, gitignoreIndex))
|
|
829
|
-
continue;
|
|
830
|
-
indexableCandidates.push(filePath);
|
|
831
|
-
}
|
|
832
|
-
const rootSafeFiles = await filterRealPathsWithinRootEntries(indexableCandidates, realRoot, reportSourcePathChecks);
|
|
833
|
-
return rootSafeFiles
|
|
834
|
-
.filter(({ path: filePath, realPath }) =>
|
|
835
|
-
// The real path only differs when the entry was reached through a symlink, so
|
|
836
|
-
// testing it again for every ordinary file doubled the matcher work for nothing.
|
|
837
|
-
normalizePath(realPath) === filePath || !isIgnoredByGitignore(realPath, gitignoreIndex))
|
|
838
|
-
.map(({ path: filePath }) => filePath);
|
|
839
|
-
}
|
|
840
|
-
catch (error) {
|
|
841
|
-
logWithLevel(options?.logLevel, "debug", `listProjectFiles failed for ${root}: ${stringifyUnknown(error)}`);
|
|
842
|
-
throw new Error(`Failed to list files in ${root}: ${stringifyUnknown(error)}`);
|
|
843
|
-
}
|
|
844
|
-
}
|
|
845
|
-
/**
|
|
846
|
-
* Build a predicate that answers "does this absolute path belong in the project file
|
|
847
|
-
* set" without walking the filesystem. Mirrors the pattern/ignore-glob filtering that
|
|
848
|
-
* `listProjectFiles()` applies during its scan, so it can be reused to test candidate
|
|
849
|
-
* paths sourced elsewhere (e.g. `git ls-files --others`) against the same discovery
|
|
850
|
-
* rules. Does not evaluate `.gitignore`; callers sourcing candidates from Git already
|
|
851
|
-
* get gitignore-aware filtering for free and should not reuse this for arbitrary,
|
|
852
|
-
* non-Git-sourced candidate paths without also checking gitignore separately.
|
|
853
|
-
*/
|
|
854
|
-
export function createDiscoveredFileMatcher(root, globRoot, patterns, options) {
|
|
855
|
-
const patternMatchers = patterns.map((pattern) => picomatch(normalizeGlobPattern(pattern), { dot: true }));
|
|
856
|
-
const defaultIgnoreMatchers = DEFAULT_PROJECT_FILE_IGNORES.map((pattern) => picomatch(normalizeGlobPattern(pattern), { dot: true }));
|
|
857
|
-
const includeMatchers = (options?.includeGlobs ?? [])
|
|
858
|
-
.map(normalizeGlobPattern)
|
|
859
|
-
.filter(Boolean)
|
|
860
|
-
.map((pattern) => picomatch(pattern, { dot: true }));
|
|
861
|
-
const userIgnoreMatchers = (options?.ignoreGlobs ?? [])
|
|
862
|
-
.map(normalizeGlobPattern)
|
|
863
|
-
.filter(Boolean)
|
|
864
|
-
.map((pattern) => picomatch(pattern, { dot: true }));
|
|
865
|
-
return (absolutePath) => {
|
|
866
|
-
const rootRelative = path.relative(root, absolutePath);
|
|
867
|
-
if (!isRelativePathInside(rootRelative))
|
|
868
|
-
return false;
|
|
869
|
-
const normalizedRootRelative = normalizePath(rootRelative);
|
|
870
|
-
if (!patternMatchers.some((matcher) => matcher(normalizedRootRelative)))
|
|
871
|
-
return false;
|
|
872
|
-
const matchesInclude = !includeMatchers.length ||
|
|
873
|
-
includeMatchers.some((matcher) => matchesDiscoveryGlob(absolutePath, globRoot, matcher));
|
|
874
|
-
if (!matchesInclude)
|
|
875
|
-
return false;
|
|
876
|
-
if (defaultIgnoreMatchers.some((matcher) => matcher(normalizedRootRelative))) {
|
|
877
|
-
if (!(includeMatchers.length > 0 && matchesInclude))
|
|
878
|
-
return false;
|
|
879
|
-
}
|
|
880
|
-
return !userIgnoreMatchers.some((matcher) => matchesDiscoveryGlob(absolutePath, globRoot, matcher));
|
|
881
|
-
};
|
|
882
|
-
}
|
|
883
|
-
/**
|
|
884
|
-
* Whether `linkPath` is a directory symlink that is safe to crawl for project files.
|
|
885
|
-
*
|
|
886
|
-
* `lstat` runs before `realpath` and `stat` so a candidate that is not a symlink costs
|
|
887
|
-
* one syscall rather than three. That matters for callers screening a broad candidate
|
|
888
|
-
* list, where nearly every entry is an ordinary file, and costs nothing for callers
|
|
889
|
-
* passing entries a walk already identified as links.
|
|
890
|
-
*/
|
|
891
|
-
async function isSafeSymlinkDirectory(root, linkPath, realRoot) {
|
|
892
|
-
try {
|
|
893
|
-
if (!isRelativePathInside(path.relative(root, linkPath)))
|
|
894
|
-
return false;
|
|
895
|
-
if (!(await fsp.lstat(linkPath)).isSymbolicLink())
|
|
896
|
-
return false;
|
|
897
|
-
const [realPath, targetStats] = await Promise.all([fsp.realpath(linkPath), fsp.stat(linkPath)]);
|
|
898
|
-
if (!targetStats.isDirectory())
|
|
899
|
-
return false;
|
|
900
|
-
if (!isFilePathWithinRoot(realRoot, realPath))
|
|
901
|
-
return false;
|
|
902
|
-
return normalizePath(realPath) !== normalizePath(realRoot);
|
|
903
|
-
}
|
|
904
|
-
catch {
|
|
905
|
-
return false;
|
|
906
|
-
}
|
|
907
|
-
}
|
|
908
|
-
async function verifySafeSymlinkDirectories(root, realRoot, paths, onPathCheckProgress) {
|
|
909
|
-
const reportPathCheck = createPathCheckProgressReporter(paths.length, onPathCheckProgress);
|
|
910
|
-
const verified = await mapLimitSemaphore(Array.from(paths), REALPATH_FILTER_CONCURRENCY, async (linkPath) => {
|
|
911
|
-
try {
|
|
912
|
-
return (await isSafeSymlinkDirectory(root, linkPath, realRoot)) ? linkPath : null;
|
|
913
|
-
}
|
|
914
|
-
finally {
|
|
915
|
-
reportPathCheck();
|
|
916
|
-
}
|
|
917
|
-
});
|
|
918
|
-
return verified.filter((entry) => entry !== null);
|
|
919
|
-
}
|
|
920
|
-
/**
|
|
921
|
-
* Resolve the symlinked directories under `root` that are safe to crawl.
|
|
922
|
-
*
|
|
923
|
-
* When `knownSymlinkDirectories` is provided, this re-verifies each previously
|
|
924
|
-
* discovered path directly. Otherwise a Git-derived `candidatePaths` list avoids a
|
|
925
|
-
* separate full-tree scan: Git already enumerated every tracked and non-ignored
|
|
926
|
-
* untracked entry, including symlinks. Callers pass `symlinkCandidatePaths` so ordinary
|
|
927
|
-
* data files are not lstat'd, while Git mode 120000 still screens extension-bearing
|
|
928
|
-
* directory links. Non-Git discovery retains the existing
|
|
929
|
-
* `fg(["**\/*"])` fallback. Every path still passes the same lstat, target-directory,
|
|
930
|
-
* and realpath-confinement checks before it can be crawled.
|
|
931
|
-
*/
|
|
932
|
-
async function resolveSafeSymlinkDirectories(root, realRoot, ignore, options) {
|
|
933
|
-
if (options.knownSymlinkDirectories !== undefined) {
|
|
934
|
-
const resolved = await verifySafeSymlinkDirectories(root, realRoot, Array.from(new Set(options.knownSymlinkDirectories)), options.onPathCheckProgress);
|
|
935
|
-
options.onSymlinkDirectoriesDiscovered?.(resolved, "known");
|
|
936
|
-
return resolved;
|
|
937
|
-
}
|
|
938
|
-
if (options.candidatePaths !== undefined) {
|
|
939
|
-
const ignoreMatchers = ignore
|
|
940
|
-
.map(normalizeGlobPattern)
|
|
941
|
-
.filter(Boolean)
|
|
942
|
-
.map((pattern) => picomatch(pattern, { dot: true }));
|
|
943
|
-
const candidatePaths = Array.from(new Set(options.candidatePaths)).filter((candidatePath) => {
|
|
944
|
-
const relativePath = normalizePath(path.relative(root, candidatePath));
|
|
945
|
-
if (!isRelativePathInside(relativePath))
|
|
946
|
-
return false;
|
|
947
|
-
if (ignoreMatchers.some((matcher) => matcher(relativePath)))
|
|
948
|
-
return false;
|
|
949
|
-
return true;
|
|
950
|
-
});
|
|
951
|
-
const discovered = await verifySafeSymlinkDirectories(root, realRoot, candidatePaths, options.onPathCheckProgress);
|
|
952
|
-
options.onSymlinkDirectoriesDiscovered?.(discovered, "git-candidates");
|
|
953
|
-
return discovered;
|
|
954
|
-
}
|
|
955
|
-
const entries = (await fg(["**/*"], {
|
|
956
|
-
cwd: root,
|
|
957
|
-
absolute: true,
|
|
958
|
-
dot: true,
|
|
959
|
-
onlyFiles: false,
|
|
960
|
-
followSymbolicLinks: false,
|
|
961
|
-
objectMode: true,
|
|
962
|
-
ignore,
|
|
963
|
-
}));
|
|
964
|
-
const discovered = await verifySafeSymlinkDirectories(root, realRoot, entries.filter((entry) => entry.dirent.isSymbolicLink()).map((entry) => entry.path), options.onPathCheckProgress);
|
|
965
|
-
options.onSymlinkDirectoriesDiscovered?.(discovered, "filesystem");
|
|
966
|
-
return discovered;
|
|
967
|
-
}
|
|
968
|
-
async function listEntriesFromSafeSymlinkDirectories(root, realRoot, patterns, ignore, options = {}) {
|
|
969
|
-
const globRoot = options.globRoot ?? root;
|
|
970
|
-
const filterIgnoreGlobs = options.filterIgnoreGlobs ?? ignore;
|
|
971
|
-
const rootRelativeIgnoreMatchers = filterIgnoreGlobs
|
|
972
|
-
.map(normalizeGlobPattern)
|
|
973
|
-
.filter(Boolean)
|
|
974
|
-
.map((globPattern) => picomatch(globPattern, { dot: true }));
|
|
975
|
-
const locationIndependentIgnores = ignore.map(normalizeGlobPattern).filter(isLocationIndependentGlob);
|
|
976
|
-
const safeSymlinkDirectories = options.resolvedSafeSymlinkDirectories ?? (await resolveSafeSymlinkDirectories(root, realRoot, ignore, options));
|
|
977
|
-
if (!safeSymlinkDirectories.length)
|
|
978
|
-
return [];
|
|
979
|
-
const filesByPath = new Map();
|
|
980
|
-
const filesByDirectory = await mapLimitSemaphore(Array.from(safeSymlinkDirectories), REALPATH_FILTER_CONCURRENCY, async (directory) => (await fg(patterns, {
|
|
981
|
-
cwd: directory,
|
|
982
|
-
absolute: true,
|
|
983
|
-
dot: true,
|
|
984
|
-
followSymbolicLinks: false,
|
|
985
|
-
ignore: locationIndependentIgnores,
|
|
986
|
-
...(options.onlyFiles !== undefined ? { onlyFiles: options.onlyFiles } : {}),
|
|
987
|
-
...(options.markDirectories !== undefined ? { markDirectories: options.markDirectories } : {}),
|
|
988
|
-
})).filter((filePath) => {
|
|
989
|
-
const cleanPath = filePath.endsWith("/") ? filePath.slice(0, -1) : filePath;
|
|
990
|
-
return !rootRelativeIgnoreMatchers.some((matcher) => matchesDiscoveryGlob(cleanPath, globRoot, matcher));
|
|
991
|
-
}));
|
|
992
|
-
for (const files of filesByDirectory) {
|
|
993
|
-
for (const file of files) {
|
|
994
|
-
filesByPath.set(normalizePath(file), file);
|
|
995
|
-
}
|
|
996
|
-
}
|
|
997
|
-
return [...filesByPath.values()];
|
|
998
|
-
}
|
|
999
|
-
async function filterRealPathsWithinRootEntries(paths, realRoot, onPathCheckProgress) {
|
|
1000
|
-
const reportPathCheck = createPathCheckProgressReporter(paths.length, onPathCheckProgress);
|
|
1001
|
-
const filtered = await mapLimitSemaphore(paths, REALPATH_FILTER_CONCURRENCY, async (filePath) => {
|
|
1002
|
-
try {
|
|
1003
|
-
const realPath = await fsp.realpath(filePath);
|
|
1004
|
-
return isFilePathWithinRoot(realRoot, realPath) ? { path: filePath, realPath } : null;
|
|
1005
|
-
}
|
|
1006
|
-
catch {
|
|
1007
|
-
return null;
|
|
1008
|
-
}
|
|
1009
|
-
finally {
|
|
1010
|
-
reportPathCheck();
|
|
1011
|
-
}
|
|
1012
|
-
});
|
|
1013
|
-
return filtered.filter((entry) => entry !== null);
|
|
1014
|
-
}
|
|
1015
|
-
export async function filterRealPathsWithinRoot(paths, realRoot, onPathCheckProgress) {
|
|
1016
|
-
const entries = await filterRealPathsWithinRootEntries(paths, realRoot, onPathCheckProgress);
|
|
1017
|
-
return entries.map((entry) => entry.path);
|
|
1018
|
-
}
|
|
1019
|
-
function toProjectGlob(pattern) {
|
|
1020
|
-
return pattern.startsWith("**/") ? pattern : `**/${pattern}`;
|
|
1021
|
-
}
|
|
1022
|
-
async function buildProjectFileInfo(def, filePath) {
|
|
1023
|
-
const normalizedPath = normalizePath(filePath);
|
|
1024
|
-
const projectRoot = normalizePath(path.dirname(filePath));
|
|
1025
|
-
let name = null;
|
|
1026
|
-
if (def.parseName && def.kind === "file") {
|
|
1027
|
-
try {
|
|
1028
|
-
const raw = await fsp.readFile(filePath, "utf8");
|
|
1029
|
-
name = def.parseName(raw, filePath);
|
|
1030
|
-
}
|
|
1031
|
-
catch {
|
|
1032
|
-
name = null;
|
|
1033
|
-
}
|
|
1034
|
-
}
|
|
1035
|
-
if (!name && def.nameFromPath) {
|
|
1036
|
-
if (def.nameFromPath === "file") {
|
|
1037
|
-
name = trimToNull(path.basename(filePath, path.extname(filePath)));
|
|
1038
|
-
}
|
|
1039
|
-
else {
|
|
1040
|
-
name = trimToNull(path.basename(projectRoot));
|
|
1041
|
-
}
|
|
1042
|
-
}
|
|
1043
|
-
return {
|
|
1044
|
-
path: normalizedPath,
|
|
1045
|
-
kind: def.kind,
|
|
1046
|
-
type: def.type,
|
|
1047
|
-
role: def.role,
|
|
1048
|
-
projectRoot,
|
|
1049
|
-
...(name ? { name } : {}),
|
|
1050
|
-
};
|
|
1051
|
-
}
|
|
1052
|
-
export async function discoverProjectFiles(projectRoot, options) {
|
|
1053
|
-
return await discoverProjectFilesInternal(projectRoot, options);
|
|
1054
|
-
}
|
|
1055
|
-
export async function discoverProjectFilesWithGitCandidates(projectRoot, options) {
|
|
1056
|
-
return await discoverProjectFilesInternal(projectRoot, options);
|
|
1057
|
-
}
|
|
1058
|
-
async function discoverProjectFilesInternal(projectRoot, options) {
|
|
1059
|
-
const root = await ensureDirectoryReadable(projectRoot, "Project root");
|
|
1060
|
-
try {
|
|
1061
|
-
const realRoot = await fsp.realpath(root);
|
|
1062
|
-
const projectFileDefinitionMatchers = PROJECT_FILE_DEFINITIONS.map((definition) => definition.patterns.map((pattern) => pattern.includes("*") || pattern.includes("?")
|
|
1063
|
-
? new RegExp("^" + pattern.replace(/\./g, "\\.").replace(/\*/g, ".*") + "$")
|
|
1064
|
-
: undefined));
|
|
1065
|
-
const matchesDefinition = (fileName, definitionIndex) => {
|
|
1066
|
-
const definition = PROJECT_FILE_DEFINITIONS[definitionIndex];
|
|
1067
|
-
return definition.patterns.some((pattern, patternIndex) => {
|
|
1068
|
-
const matcher = projectFileDefinitionMatchers[definitionIndex][patternIndex];
|
|
1069
|
-
return matcher ? matcher.test(fileName) : pattern === fileName;
|
|
1070
|
-
});
|
|
1071
|
-
};
|
|
1072
|
-
let gitCandidates;
|
|
1073
|
-
if (options?.knownGitCandidates !== undefined) {
|
|
1074
|
-
gitCandidates = options.knownGitCandidates;
|
|
1075
|
-
}
|
|
1076
|
-
else {
|
|
1077
|
-
gitCandidates = await listGitCandidateFiles(root, options?.logLevel, {
|
|
1078
|
-
...(options?.onDiscoveryProgress ? { onDiscoveryProgress: options.onDiscoveryProgress } : {}),
|
|
1079
|
-
...(options?.onDiscoveryTiming ? { onDiscoveryTiming: options.onDiscoveryTiming } : {}),
|
|
1080
|
-
});
|
|
1081
|
-
}
|
|
1082
|
-
options?.onGitCandidatesDiscovered?.(gitCandidates);
|
|
1083
|
-
const reportMetadataSymlinkChecks = options?.onDiscoveryProgress
|
|
1084
|
-
? (current, total) => options.onDiscoveryProgress?.({ activity: "Checking project metadata symlinks", current, total })
|
|
1085
|
-
: undefined;
|
|
1086
|
-
const reportMetadataFileChecks = options?.onDiscoveryProgress
|
|
1087
|
-
? (current, total) => options.onDiscoveryProgress?.({ activity: "Checking project metadata files", current, total })
|
|
1088
|
-
: undefined;
|
|
1089
|
-
const reportMetadataDirectoryChecks = options?.onDiscoveryProgress
|
|
1090
|
-
? (current, total) => options.onDiscoveryProgress?.({ activity: "Checking project metadata directories", current, total })
|
|
1091
|
-
: undefined;
|
|
1092
|
-
let rootSafeMatches;
|
|
1093
|
-
if (gitCandidates) {
|
|
1094
|
-
const gitignoreIndex = await buildGitignoreIndex(gitCandidates.gitignoreFiles, gitCandidates.gitignoreRoots, gitCandidates.gitignoreAliases);
|
|
1095
|
-
const defaultIgnoreMatchers = DEFAULT_PROJECT_FILE_IGNORES.map((globPattern) => picomatch(globPattern, { dot: true }));
|
|
1096
|
-
const filterGitIgnoredEntries = (entries, directoryKeys = new Set()) => entries
|
|
1097
|
-
.map(({ path: filePath, realPath }) => ({ filePath: normalizePath(filePath), realPath }))
|
|
1098
|
-
.filter(({ filePath, realPath }) => {
|
|
1099
|
-
const isDirectory = directoryKeys.has(fileIdentityKey(filePath));
|
|
1100
|
-
const rootRelative = normalizePath(path.relative(root, filePath));
|
|
1101
|
-
if (!isRelativePathInside(rootRelative))
|
|
1102
|
-
return false;
|
|
1103
|
-
if (defaultIgnoreMatchers.some((matcher) => matcher(rootRelative)))
|
|
1104
|
-
return false;
|
|
1105
|
-
if (isIgnoredByGitignore(filePath, gitignoreIndex, isDirectory))
|
|
1106
|
-
return false;
|
|
1107
|
-
return normalizePath(realPath) === filePath || !isIgnoredByGitignore(realPath, gitignoreIndex, isDirectory);
|
|
1108
|
-
})
|
|
1109
|
-
.map(({ filePath }) => filePath);
|
|
1110
|
-
const symlinkOptions = {
|
|
1111
|
-
candidatePaths: gitCandidates.symlinkCandidatePaths,
|
|
1112
|
-
...(options?.knownSymlinkDirectories !== undefined
|
|
1113
|
-
? { knownSymlinkDirectories: options.knownSymlinkDirectories }
|
|
1114
|
-
: {}),
|
|
1115
|
-
...(options?.onSymlinkDirectoriesDiscovered
|
|
1116
|
-
? { onSymlinkDirectoriesDiscovered: options.onSymlinkDirectoriesDiscovered }
|
|
1117
|
-
: {}),
|
|
1118
|
-
...(reportMetadataSymlinkChecks ? { onPathCheckProgress: reportMetadataSymlinkChecks } : {}),
|
|
1119
|
-
};
|
|
1120
|
-
const safeSymlinkDirectories = await resolveSafeSymlinkDirectories(root, realRoot, DEFAULT_PROJECT_FILE_IGNORES, symlinkOptions);
|
|
1121
|
-
const allPatterns = PROJECT_FILE_DEFINITIONS.flatMap((definition) => definition.patterns.map(toProjectGlob));
|
|
1122
|
-
const linkedMatches = await listEntriesFromSafeSymlinkDirectories(root, realRoot, allPatterns, DEFAULT_PROJECT_FILE_IGNORES, {
|
|
1123
|
-
markDirectories: true,
|
|
1124
|
-
onlyFiles: false,
|
|
1125
|
-
resolvedSafeSymlinkDirectories: safeSymlinkDirectories,
|
|
1126
|
-
});
|
|
1127
|
-
const candidateFiles = Array.from(new Set(gitCandidates.files.map(normalizePath)));
|
|
1128
|
-
// Only a candidate whose basename can name a manifest becomes a metadata entry, so
|
|
1129
|
-
// resolve physical paths for those alone. Probing every Git candidate first cost a
|
|
1130
|
-
// realpath syscall per ignored file: the same 20k-file untracked virtualenv spent
|
|
1131
|
-
// 0.6s here. Ancestor directories come from the candidate paths themselves and are
|
|
1132
|
-
// confined by their own realpath check below.
|
|
1133
|
-
const metadataCandidates = candidateFiles.filter((file) => PROJECT_FILE_DEFINITIONS.some((definition, definitionIndex) => definition.kind === "file" && matchesDefinition(path.basename(file), definitionIndex)));
|
|
1134
|
-
const fileMatches = filterGitIgnoredEntries(await filterRealPathsWithinRootEntries(metadataCandidates, realRoot, reportMetadataFileChecks));
|
|
1135
|
-
// Directory metadata is identified by the directory name (.idea, App.xcodeproj).
|
|
1136
|
-
// Walking every Git-listed JSON or CSV still produced one realpath per data folder.
|
|
1137
|
-
const rawCandidateDirectories = collectCandidateAncestorDirectories(root, candidateFiles).filter(isProjectMetadataDirectoryName);
|
|
1138
|
-
const candidateDirectoryKeys = new Set(rawCandidateDirectories.map(fileIdentityKey));
|
|
1139
|
-
const safeSymlinkDirectoryKeys = new Set(safeSymlinkDirectories.map(fileIdentityKey));
|
|
1140
|
-
const directoryMatches = [
|
|
1141
|
-
...filterGitIgnoredEntries(await filterRealPathsWithinRootEntries(rawCandidateDirectories, realRoot, reportMetadataDirectoryChecks), candidateDirectoryKeys),
|
|
1142
|
-
...filterGitIgnoredEntries(await filterRealPathsWithinRootEntries(safeSymlinkDirectories, realRoot, reportMetadataDirectoryChecks), safeSymlinkDirectoryKeys),
|
|
1143
|
-
].filter((directory) => PROJECT_FILE_DEFINITIONS.some((definition, definitionIndex) => definition.kind === "dir" && matchesDefinition(path.basename(directory), definitionIndex)));
|
|
1144
|
-
const linkedDirectoryKeys = new Set(linkedMatches.filter((match) => match.endsWith("/")).map((match) => fileIdentityKey(match.slice(0, -1))));
|
|
1145
|
-
const rootSafeLinked = filterGitIgnoredEntries(await filterRealPathsWithinRootEntries(linkedMatches.map((match) => (match.endsWith("/") ? match.slice(0, -1) : match)), realRoot, reportMetadataFileChecks), linkedDirectoryKeys);
|
|
1146
|
-
rootSafeMatches = [...fileMatches, ...directoryMatches, ...rootSafeLinked];
|
|
1147
|
-
}
|
|
1148
|
-
else {
|
|
1149
|
-
const allPatterns = PROJECT_FILE_DEFINITIONS.flatMap((definition) => definition.patterns.map(toProjectGlob));
|
|
1150
|
-
const matches = await fg(allPatterns, {
|
|
1151
|
-
cwd: root,
|
|
1152
|
-
absolute: true,
|
|
1153
|
-
dot: true,
|
|
1154
|
-
followSymbolicLinks: false,
|
|
1155
|
-
ignore: DEFAULT_PROJECT_FILE_IGNORES,
|
|
1156
|
-
markDirectories: true,
|
|
1157
|
-
onlyFiles: false,
|
|
1158
|
-
});
|
|
1159
|
-
const linkedMatches = await listEntriesFromSafeSymlinkDirectories(root, realRoot, allPatterns, DEFAULT_PROJECT_FILE_IGNORES, {
|
|
1160
|
-
markDirectories: true,
|
|
1161
|
-
onlyFiles: false,
|
|
1162
|
-
...(options?.knownSymlinkDirectories !== undefined
|
|
1163
|
-
? { knownSymlinkDirectories: options.knownSymlinkDirectories }
|
|
1164
|
-
: {}),
|
|
1165
|
-
...(options?.onSymlinkDirectoriesDiscovered
|
|
1166
|
-
? { onSymlinkDirectoriesDiscovered: options.onSymlinkDirectoriesDiscovered }
|
|
1167
|
-
: {}),
|
|
1168
|
-
...(reportMetadataSymlinkChecks ? { onPathCheckProgress: reportMetadataSymlinkChecks } : {}),
|
|
1169
|
-
});
|
|
1170
|
-
rootSafeMatches = await filterRealPathsWithinRoot([...matches, ...linkedMatches].map((match) => (match.endsWith("/") ? match.slice(0, -1) : match)), realRoot, reportMetadataFileChecks);
|
|
1171
|
-
}
|
|
1172
|
-
const entries = [];
|
|
1173
|
-
const matchTasks = rootSafeMatches.map(async (cleanMatch) => {
|
|
1174
|
-
const stats = await fsp.stat(cleanMatch);
|
|
1175
|
-
const isDir = stats.isDirectory();
|
|
1176
|
-
const fileName = path.basename(cleanMatch);
|
|
1177
|
-
for (let definitionIndex = 0; definitionIndex < PROJECT_FILE_DEFINITIONS.length; definitionIndex++) {
|
|
1178
|
-
const def = PROJECT_FILE_DEFINITIONS[definitionIndex];
|
|
1179
|
-
if (isDir && def.kind !== "dir")
|
|
1180
|
-
continue;
|
|
1181
|
-
if (!isDir && def.kind !== "file")
|
|
1182
|
-
continue;
|
|
1183
|
-
const matchesPattern = matchesDefinition(fileName, definitionIndex);
|
|
1184
|
-
if (matchesPattern) {
|
|
1185
|
-
entries.push(await buildProjectFileInfo(def, cleanMatch));
|
|
1186
|
-
}
|
|
1187
|
-
}
|
|
1188
|
-
});
|
|
1189
|
-
await Promise.all(matchTasks);
|
|
1190
|
-
const byKey = new Map();
|
|
1191
|
-
for (const entry of entries) {
|
|
1192
|
-
const key = `${entry.path}::${entry.type}::${entry.role}`;
|
|
1193
|
-
const existing = byKey.get(key);
|
|
1194
|
-
if (!existing || (!existing.name && entry.name)) {
|
|
1195
|
-
byKey.set(key, entry);
|
|
1196
|
-
}
|
|
1197
|
-
}
|
|
1198
|
-
return Array.from(byKey.values()).sort((a, b) => {
|
|
1199
|
-
if (a.path === b.path)
|
|
1200
|
-
return a.type.localeCompare(b.type);
|
|
1201
|
-
return a.path.localeCompare(b.path);
|
|
1202
|
-
});
|
|
1203
|
-
}
|
|
1204
|
-
catch (error) {
|
|
1205
|
-
logWithLevel(options?.logLevel, "debug", `discoverProjectFiles failed for ${root}: ${stringifyUnknown(error)}`);
|
|
1206
|
-
throw new Error(`Failed to discover project files in ${root}: ${stringifyUnknown(error)}`);
|
|
1207
|
-
}
|
|
1208
|
-
}
|
|
1209
|
-
//# sourceMappingURL=projectFiles.js.map
|