@opencodehub/ingestion 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +69 -0
- package/dist/extract/index.d.ts +8 -0
- package/dist/extract/index.d.ts.map +1 -0
- package/dist/extract/index.js +6 -0
- package/dist/extract/index.js.map +1 -0
- package/dist/extract/orm-detector.d.ts +19 -0
- package/dist/extract/orm-detector.d.ts.map +1 -0
- package/dist/extract/orm-detector.js +209 -0
- package/dist/extract/orm-detector.js.map +1 -0
- package/dist/extract/property-access.d.ts +76 -0
- package/dist/extract/property-access.d.ts.map +1 -0
- package/dist/extract/property-access.js +260 -0
- package/dist/extract/property-access.js.map +1 -0
- package/dist/extract/receiver-resolver.d.ts +86 -0
- package/dist/extract/receiver-resolver.d.ts.map +1 -0
- package/dist/extract/receiver-resolver.js +77 -0
- package/dist/extract/receiver-resolver.js.map +1 -0
- package/dist/extract/route-detector-java.d.ts +29 -0
- package/dist/extract/route-detector-java.d.ts.map +1 -0
- package/dist/extract/route-detector-java.js +190 -0
- package/dist/extract/route-detector-java.js.map +1 -0
- package/dist/extract/route-detector-nestjs.d.ts +30 -0
- package/dist/extract/route-detector-nestjs.d.ts.map +1 -0
- package/dist/extract/route-detector-nestjs.js +134 -0
- package/dist/extract/route-detector-nestjs.js.map +1 -0
- package/dist/extract/route-detector-python.d.ts +28 -0
- package/dist/extract/route-detector-python.d.ts.map +1 -0
- package/dist/extract/route-detector-python.js +100 -0
- package/dist/extract/route-detector-python.js.map +1 -0
- package/dist/extract/route-detector-rails.d.ts +28 -0
- package/dist/extract/route-detector-rails.d.ts.map +1 -0
- package/dist/extract/route-detector-rails.js +162 -0
- package/dist/extract/route-detector-rails.js.map +1 -0
- package/dist/extract/route-detector.d.ts +45 -0
- package/dist/extract/route-detector.d.ts.map +1 -0
- package/dist/extract/route-detector.js +467 -0
- package/dist/extract/route-detector.js.map +1 -0
- package/dist/extract/tool-detector.d.ts +26 -0
- package/dist/extract/tool-detector.d.ts.map +1 -0
- package/dist/extract/tool-detector.js +364 -0
- package/dist/extract/tool-detector.js.map +1 -0
- package/dist/extract/types.d.ts +89 -0
- package/dist/extract/types.d.ts.map +1 -0
- package/dist/extract/types.js +11 -0
- package/dist/extract/types.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/parse/cobol-regex.d.ts +85 -0
- package/dist/parse/cobol-regex.d.ts.map +1 -0
- package/dist/parse/cobol-regex.js +355 -0
- package/dist/parse/cobol-regex.js.map +1 -0
- package/dist/parse/grammar-registry.d.ts +115 -0
- package/dist/parse/grammar-registry.d.ts.map +1 -0
- package/dist/parse/grammar-registry.js +278 -0
- package/dist/parse/grammar-registry.js.map +1 -0
- package/dist/parse/index.d.ts +14 -0
- package/dist/parse/index.d.ts.map +1 -0
- package/dist/parse/index.js +10 -0
- package/dist/parse/index.js.map +1 -0
- package/dist/parse/language-detector.d.ts +17 -0
- package/dist/parse/language-detector.d.ts.map +1 -0
- package/dist/parse/language-detector.js +104 -0
- package/dist/parse/language-detector.js.map +1 -0
- package/dist/parse/parse-worker.d.ts +24 -0
- package/dist/parse/parse-worker.d.ts.map +1 -0
- package/dist/parse/parse-worker.js +230 -0
- package/dist/parse/parse-worker.js.map +1 -0
- package/dist/parse/types.d.ts +49 -0
- package/dist/parse/types.d.ts.map +1 -0
- package/dist/parse/types.js +11 -0
- package/dist/parse/types.js.map +1 -0
- package/dist/parse/unified-queries.d.ts +37 -0
- package/dist/parse/unified-queries.d.ts.map +1 -0
- package/dist/parse/unified-queries.js +623 -0
- package/dist/parse/unified-queries.js.map +1 -0
- package/dist/parse/wasm-fallback.d.ts +88 -0
- package/dist/parse/wasm-fallback.d.ts.map +1 -0
- package/dist/parse/wasm-fallback.js +258 -0
- package/dist/parse/wasm-fallback.js.map +1 -0
- package/dist/parse/worker-pool.d.ts +48 -0
- package/dist/parse/worker-pool.d.ts.map +1 -0
- package/dist/parse/worker-pool.js +97 -0
- package/dist/parse/worker-pool.js.map +1 -0
- package/dist/pipeline/dep-parsers/go.d.ts +25 -0
- package/dist/pipeline/dep-parsers/go.d.ts.map +1 -0
- package/dist/pipeline/dep-parsers/go.js +146 -0
- package/dist/pipeline/dep-parsers/go.js.map +1 -0
- package/dist/pipeline/dep-parsers/index.d.ts +17 -0
- package/dist/pipeline/dep-parsers/index.d.ts.map +1 -0
- package/dist/pipeline/dep-parsers/index.js +16 -0
- package/dist/pipeline/dep-parsers/index.js.map +1 -0
- package/dist/pipeline/dep-parsers/maven.d.ts +24 -0
- package/dist/pipeline/dep-parsers/maven.d.ts.map +1 -0
- package/dist/pipeline/dep-parsers/maven.js +131 -0
- package/dist/pipeline/dep-parsers/maven.js.map +1 -0
- package/dist/pipeline/dep-parsers/npm.d.ts +30 -0
- package/dist/pipeline/dep-parsers/npm.d.ts.map +1 -0
- package/dist/pipeline/dep-parsers/npm.js +309 -0
- package/dist/pipeline/dep-parsers/npm.js.map +1 -0
- package/dist/pipeline/dep-parsers/nuget.d.ts +24 -0
- package/dist/pipeline/dep-parsers/nuget.d.ts.map +1 -0
- package/dist/pipeline/dep-parsers/nuget.js +178 -0
- package/dist/pipeline/dep-parsers/nuget.js.map +1 -0
- package/dist/pipeline/dep-parsers/python.d.ts +21 -0
- package/dist/pipeline/dep-parsers/python.d.ts.map +1 -0
- package/dist/pipeline/dep-parsers/python.js +369 -0
- package/dist/pipeline/dep-parsers/python.js.map +1 -0
- package/dist/pipeline/dep-parsers/rust.d.ts +18 -0
- package/dist/pipeline/dep-parsers/rust.d.ts.map +1 -0
- package/dist/pipeline/dep-parsers/rust.js +134 -0
- package/dist/pipeline/dep-parsers/rust.js.map +1 -0
- package/dist/pipeline/dep-parsers/spdx-normalize.d.ts +15 -0
- package/dist/pipeline/dep-parsers/spdx-normalize.d.ts.map +1 -0
- package/dist/pipeline/dep-parsers/spdx-normalize.js +31 -0
- package/dist/pipeline/dep-parsers/spdx-normalize.js.map +1 -0
- package/dist/pipeline/dep-parsers/types.d.ts +63 -0
- package/dist/pipeline/dep-parsers/types.d.ts.map +1 -0
- package/dist/pipeline/dep-parsers/types.js +56 -0
- package/dist/pipeline/dep-parsers/types.js.map +1 -0
- package/dist/pipeline/gitignore-stack.d.ts +44 -0
- package/dist/pipeline/gitignore-stack.d.ts.map +1 -0
- package/dist/pipeline/gitignore-stack.js +69 -0
- package/dist/pipeline/gitignore-stack.js.map +1 -0
- package/dist/pipeline/gitignore.d.ts +67 -0
- package/dist/pipeline/gitignore.d.ts.map +1 -0
- package/dist/pipeline/gitignore.js +210 -0
- package/dist/pipeline/gitignore.js.map +1 -0
- package/dist/pipeline/index.d.ts +53 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +29 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/orchestrator.d.ts +105 -0
- package/dist/pipeline/orchestrator.d.ts.map +1 -0
- package/dist/pipeline/orchestrator.js +175 -0
- package/dist/pipeline/orchestrator.js.map +1 -0
- package/dist/pipeline/ownership-helpers/drift.d.ts +41 -0
- package/dist/pipeline/ownership-helpers/drift.d.ts.map +1 -0
- package/dist/pipeline/ownership-helpers/drift.js +122 -0
- package/dist/pipeline/ownership-helpers/drift.js.map +1 -0
- package/dist/pipeline/ownership-helpers/gini-community.d.ts +24 -0
- package/dist/pipeline/ownership-helpers/gini-community.d.ts.map +1 -0
- package/dist/pipeline/ownership-helpers/gini-community.js +32 -0
- package/dist/pipeline/ownership-helpers/gini-community.js.map +1 -0
- package/dist/pipeline/ownership-helpers/git-blame-batcher.d.ts +71 -0
- package/dist/pipeline/ownership-helpers/git-blame-batcher.d.ts.map +1 -0
- package/dist/pipeline/ownership-helpers/git-blame-batcher.js +178 -0
- package/dist/pipeline/ownership-helpers/git-blame-batcher.js.map +1 -0
- package/dist/pipeline/ownership-helpers/line-overlap.d.ts +35 -0
- package/dist/pipeline/ownership-helpers/line-overlap.d.ts.map +1 -0
- package/dist/pipeline/ownership-helpers/line-overlap.js +62 -0
- package/dist/pipeline/ownership-helpers/line-overlap.js.map +1 -0
- package/dist/pipeline/ownership-helpers/orphan.d.ts +73 -0
- package/dist/pipeline/ownership-helpers/orphan.d.ts.map +1 -0
- package/dist/pipeline/ownership-helpers/orphan.js +117 -0
- package/dist/pipeline/ownership-helpers/orphan.js.map +1 -0
- package/dist/pipeline/phases/accesses.d.ts +44 -0
- package/dist/pipeline/phases/accesses.d.ts.map +1 -0
- package/dist/pipeline/phases/accesses.js +194 -0
- package/dist/pipeline/phases/accesses.js.map +1 -0
- package/dist/pipeline/phases/annotate.d.ts +28 -0
- package/dist/pipeline/phases/annotate.d.ts.map +1 -0
- package/dist/pipeline/phases/annotate.js +60 -0
- package/dist/pipeline/phases/annotate.js.map +1 -0
- package/dist/pipeline/phases/cochange.d.ts +42 -0
- package/dist/pipeline/phases/cochange.d.ts.map +1 -0
- package/dist/pipeline/phases/cochange.js +0 -0
- package/dist/pipeline/phases/cochange.js.map +1 -0
- package/dist/pipeline/phases/communities.d.ts +34 -0
- package/dist/pipeline/phases/communities.d.ts.map +1 -0
- package/dist/pipeline/phases/communities.js +412 -0
- package/dist/pipeline/phases/communities.js.map +1 -0
- package/dist/pipeline/phases/complexity.d.ts +50 -0
- package/dist/pipeline/phases/complexity.d.ts.map +1 -0
- package/dist/pipeline/phases/complexity.js +794 -0
- package/dist/pipeline/phases/complexity.js.map +1 -0
- package/dist/pipeline/phases/confidence-demote.d.ts +23 -0
- package/dist/pipeline/phases/confidence-demote.d.ts.map +1 -0
- package/dist/pipeline/phases/confidence-demote.js +113 -0
- package/dist/pipeline/phases/confidence-demote.js.map +1 -0
- package/dist/pipeline/phases/content-cache.d.ts +166 -0
- package/dist/pipeline/phases/content-cache.d.ts.map +1 -0
- package/dist/pipeline/phases/content-cache.js +323 -0
- package/dist/pipeline/phases/content-cache.js.map +1 -0
- package/dist/pipeline/phases/coverage-parsers/cobertura.d.ts +25 -0
- package/dist/pipeline/phases/coverage-parsers/cobertura.d.ts.map +1 -0
- package/dist/pipeline/phases/coverage-parsers/cobertura.js +139 -0
- package/dist/pipeline/phases/coverage-parsers/cobertura.js.map +1 -0
- package/dist/pipeline/phases/coverage-parsers/coverage-py.d.ts +25 -0
- package/dist/pipeline/phases/coverage-parsers/coverage-py.d.ts.map +1 -0
- package/dist/pipeline/phases/coverage-parsers/coverage-py.js +51 -0
- package/dist/pipeline/phases/coverage-parsers/coverage-py.js.map +1 -0
- package/dist/pipeline/phases/coverage-parsers/jacoco.d.ts +32 -0
- package/dist/pipeline/phases/coverage-parsers/jacoco.d.ts.map +1 -0
- package/dist/pipeline/phases/coverage-parsers/jacoco.js +98 -0
- package/dist/pipeline/phases/coverage-parsers/jacoco.js.map +1 -0
- package/dist/pipeline/phases/coverage-parsers/lcov.d.ts +21 -0
- package/dist/pipeline/phases/coverage-parsers/lcov.d.ts.map +1 -0
- package/dist/pipeline/phases/coverage-parsers/lcov.js +104 -0
- package/dist/pipeline/phases/coverage-parsers/lcov.js.map +1 -0
- package/dist/pipeline/phases/coverage-parsers/types.d.ts +27 -0
- package/dist/pipeline/phases/coverage-parsers/types.d.ts.map +1 -0
- package/dist/pipeline/phases/coverage-parsers/types.js +39 -0
- package/dist/pipeline/phases/coverage-parsers/types.js.map +1 -0
- package/dist/pipeline/phases/coverage.d.ts +39 -0
- package/dist/pipeline/phases/coverage.d.ts.map +1 -0
- package/dist/pipeline/phases/coverage.js +154 -0
- package/dist/pipeline/phases/coverage.js.map +1 -0
- package/dist/pipeline/phases/cross-file.d.ts +40 -0
- package/dist/pipeline/phases/cross-file.d.ts.map +1 -0
- package/dist/pipeline/phases/cross-file.js +411 -0
- package/dist/pipeline/phases/cross-file.js.map +1 -0
- package/dist/pipeline/phases/dead-code.d.ts +28 -0
- package/dist/pipeline/phases/dead-code.d.ts.map +1 -0
- package/dist/pipeline/phases/dead-code.js +157 -0
- package/dist/pipeline/phases/dead-code.js.map +1 -0
- package/dist/pipeline/phases/default-set.d.ts +24 -0
- package/dist/pipeline/phases/default-set.d.ts.map +1 -0
- package/dist/pipeline/phases/default-set.js +133 -0
- package/dist/pipeline/phases/default-set.js.map +1 -0
- package/dist/pipeline/phases/dependencies.d.ts +59 -0
- package/dist/pipeline/phases/dependencies.d.ts.map +1 -0
- package/dist/pipeline/phases/dependencies.js +281 -0
- package/dist/pipeline/phases/dependencies.js.map +1 -0
- package/dist/pipeline/phases/embedder-pool.d.ts +31 -0
- package/dist/pipeline/phases/embedder-pool.d.ts.map +1 -0
- package/dist/pipeline/phases/embedder-pool.js +79 -0
- package/dist/pipeline/phases/embedder-pool.js.map +1 -0
- package/dist/pipeline/phases/embedder-worker.d.ts +28 -0
- package/dist/pipeline/phases/embedder-worker.d.ts.map +1 -0
- package/dist/pipeline/phases/embedder-worker.js +43 -0
- package/dist/pipeline/phases/embedder-worker.js.map +1 -0
- package/dist/pipeline/phases/embeddings.d.ts +117 -0
- package/dist/pipeline/phases/embeddings.d.ts.map +1 -0
- package/dist/pipeline/phases/embeddings.js +697 -0
- package/dist/pipeline/phases/embeddings.js.map +1 -0
- package/dist/pipeline/phases/fetches.d.ts +47 -0
- package/dist/pipeline/phases/fetches.d.ts.map +1 -0
- package/dist/pipeline/phases/fetches.js +207 -0
- package/dist/pipeline/phases/fetches.js.map +1 -0
- package/dist/pipeline/phases/incremental-helper.d.ts +96 -0
- package/dist/pipeline/phases/incremental-helper.d.ts.map +1 -0
- package/dist/pipeline/phases/incremental-helper.js +125 -0
- package/dist/pipeline/phases/incremental-helper.js.map +1 -0
- package/dist/pipeline/phases/incremental-scope.d.ts +67 -0
- package/dist/pipeline/phases/incremental-scope.d.ts.map +1 -0
- package/dist/pipeline/phases/incremental-scope.js +225 -0
- package/dist/pipeline/phases/incremental-scope.js.map +1 -0
- package/dist/pipeline/phases/markdown.d.ts +29 -0
- package/dist/pipeline/phases/markdown.d.ts.map +1 -0
- package/dist/pipeline/phases/markdown.js +298 -0
- package/dist/pipeline/phases/markdown.js.map +1 -0
- package/dist/pipeline/phases/mro.d.ts +24 -0
- package/dist/pipeline/phases/mro.d.ts.map +1 -0
- package/dist/pipeline/phases/mro.js +303 -0
- package/dist/pipeline/phases/mro.js.map +1 -0
- package/dist/pipeline/phases/openapi.d.ts +52 -0
- package/dist/pipeline/phases/openapi.d.ts.map +1 -0
- package/dist/pipeline/phases/openapi.js +285 -0
- package/dist/pipeline/phases/openapi.js.map +1 -0
- package/dist/pipeline/phases/orm.d.ts +26 -0
- package/dist/pipeline/phases/orm.d.ts.map +1 -0
- package/dist/pipeline/phases/orm.js +183 -0
- package/dist/pipeline/phases/orm.js.map +1 -0
- package/dist/pipeline/phases/ownership.d.ts +88 -0
- package/dist/pipeline/phases/ownership.d.ts.map +1 -0
- package/dist/pipeline/phases/ownership.js +479 -0
- package/dist/pipeline/phases/ownership.js.map +1 -0
- package/dist/pipeline/phases/parse.d.ts +63 -0
- package/dist/pipeline/phases/parse.d.ts.map +1 -0
- package/dist/pipeline/phases/parse.js +994 -0
- package/dist/pipeline/phases/parse.js.map +1 -0
- package/dist/pipeline/phases/processes.d.ts +47 -0
- package/dist/pipeline/phases/processes.d.ts.map +1 -0
- package/dist/pipeline/phases/processes.js +620 -0
- package/dist/pipeline/phases/processes.js.map +1 -0
- package/dist/pipeline/phases/profile.d.ts +33 -0
- package/dist/pipeline/phases/profile.d.ts.map +1 -0
- package/dist/pipeline/phases/profile.js +91 -0
- package/dist/pipeline/phases/profile.js.map +1 -0
- package/dist/pipeline/phases/repo-node.d.ts +112 -0
- package/dist/pipeline/phases/repo-node.d.ts.map +1 -0
- package/dist/pipeline/phases/repo-node.js +272 -0
- package/dist/pipeline/phases/repo-node.js.map +1 -0
- package/dist/pipeline/phases/risk-snapshot.d.ts +34 -0
- package/dist/pipeline/phases/risk-snapshot.d.ts.map +1 -0
- package/dist/pipeline/phases/risk-snapshot.js +63 -0
- package/dist/pipeline/phases/risk-snapshot.js.map +1 -0
- package/dist/pipeline/phases/routes.d.ts +31 -0
- package/dist/pipeline/phases/routes.d.ts.map +1 -0
- package/dist/pipeline/phases/routes.js +262 -0
- package/dist/pipeline/phases/routes.js.map +1 -0
- package/dist/pipeline/phases/sbom.d.ts +45 -0
- package/dist/pipeline/phases/sbom.d.ts.map +1 -0
- package/dist/pipeline/phases/sbom.js +289 -0
- package/dist/pipeline/phases/sbom.js.map +1 -0
- package/dist/pipeline/phases/scan.d.ts +54 -0
- package/dist/pipeline/phases/scan.d.ts.map +1 -0
- package/dist/pipeline/phases/scan.js +340 -0
- package/dist/pipeline/phases/scan.js.map +1 -0
- package/dist/pipeline/phases/scip-index.d.ts +54 -0
- package/dist/pipeline/phases/scip-index.d.ts.map +1 -0
- package/dist/pipeline/phases/scip-index.js +469 -0
- package/dist/pipeline/phases/scip-index.js.map +1 -0
- package/dist/pipeline/phases/structure.d.ts +21 -0
- package/dist/pipeline/phases/structure.d.ts.map +1 -0
- package/dist/pipeline/phases/structure.js +115 -0
- package/dist/pipeline/phases/structure.js.map +1 -0
- package/dist/pipeline/phases/summarize.d.ts +126 -0
- package/dist/pipeline/phases/summarize.d.ts.map +1 -0
- package/dist/pipeline/phases/summarize.js +401 -0
- package/dist/pipeline/phases/summarize.js.map +1 -0
- package/dist/pipeline/phases/temporal-helpers/branch-divergence.d.ts +42 -0
- package/dist/pipeline/phases/temporal-helpers/branch-divergence.d.ts.map +1 -0
- package/dist/pipeline/phases/temporal-helpers/branch-divergence.js +96 -0
- package/dist/pipeline/phases/temporal-helpers/branch-divergence.js.map +1 -0
- package/dist/pipeline/phases/temporal-helpers/churn-decay.d.ts +22 -0
- package/dist/pipeline/phases/temporal-helpers/churn-decay.d.ts.map +1 -0
- package/dist/pipeline/phases/temporal-helpers/churn-decay.js +32 -0
- package/dist/pipeline/phases/temporal-helpers/churn-decay.js.map +1 -0
- package/dist/pipeline/phases/temporal-helpers/conventional-commits.d.ts +21 -0
- package/dist/pipeline/phases/temporal-helpers/conventional-commits.d.ts.map +1 -0
- package/dist/pipeline/phases/temporal-helpers/conventional-commits.js +37 -0
- package/dist/pipeline/phases/temporal-helpers/conventional-commits.js.map +1 -0
- package/dist/pipeline/phases/temporal-helpers/gini.d.ts +32 -0
- package/dist/pipeline/phases/temporal-helpers/gini.d.ts.map +1 -0
- package/dist/pipeline/phases/temporal-helpers/gini.js +78 -0
- package/dist/pipeline/phases/temporal-helpers/gini.js.map +1 -0
- package/dist/pipeline/phases/temporal-helpers/revert-detect.d.ts +14 -0
- package/dist/pipeline/phases/temporal-helpers/revert-detect.d.ts.map +1 -0
- package/dist/pipeline/phases/temporal-helpers/revert-detect.js +25 -0
- package/dist/pipeline/phases/temporal-helpers/revert-detect.js.map +1 -0
- package/dist/pipeline/phases/temporal-helpers/test-pair.d.ts +18 -0
- package/dist/pipeline/phases/temporal-helpers/test-pair.d.ts.map +1 -0
- package/dist/pipeline/phases/temporal-helpers/test-pair.js +119 -0
- package/dist/pipeline/phases/temporal-helpers/test-pair.js.map +1 -0
- package/dist/pipeline/phases/temporal.d.ts +65 -0
- package/dist/pipeline/phases/temporal.d.ts.map +1 -0
- package/dist/pipeline/phases/temporal.js +621 -0
- package/dist/pipeline/phases/temporal.js.map +1 -0
- package/dist/pipeline/phases/tools.d.ts +21 -0
- package/dist/pipeline/phases/tools.d.ts.map +1 -0
- package/dist/pipeline/phases/tools.js +118 -0
- package/dist/pipeline/phases/tools.js.map +1 -0
- package/dist/pipeline/profile-detectors/api-contracts.d.ts +18 -0
- package/dist/pipeline/profile-detectors/api-contracts.d.ts.map +1 -0
- package/dist/pipeline/profile-detectors/api-contracts.js +78 -0
- package/dist/pipeline/profile-detectors/api-contracts.js.map +1 -0
- package/dist/pipeline/profile-detectors/framework-detector.d.ts +11 -0
- package/dist/pipeline/profile-detectors/framework-detector.d.ts.map +1 -0
- package/dist/pipeline/profile-detectors/framework-detector.js +11 -0
- package/dist/pipeline/profile-detectors/framework-detector.js.map +1 -0
- package/dist/pipeline/profile-detectors/frameworks-catalog.d.ts +7 -0
- package/dist/pipeline/profile-detectors/frameworks-catalog.d.ts.map +1 -0
- package/dist/pipeline/profile-detectors/frameworks-catalog.js +7 -0
- package/dist/pipeline/profile-detectors/frameworks-catalog.js.map +1 -0
- package/dist/pipeline/profile-detectors/frameworks.d.ts +7 -0
- package/dist/pipeline/profile-detectors/frameworks.d.ts.map +1 -0
- package/dist/pipeline/profile-detectors/frameworks.js +7 -0
- package/dist/pipeline/profile-detectors/frameworks.js.map +1 -0
- package/dist/pipeline/profile-detectors/iac.d.ts +22 -0
- package/dist/pipeline/profile-detectors/iac.d.ts.map +1 -0
- package/dist/pipeline/profile-detectors/iac.js +97 -0
- package/dist/pipeline/profile-detectors/iac.js.map +1 -0
- package/dist/pipeline/profile-detectors/languages.d.ts +18 -0
- package/dist/pipeline/profile-detectors/languages.d.ts.map +1 -0
- package/dist/pipeline/profile-detectors/languages.js +60 -0
- package/dist/pipeline/profile-detectors/languages.js.map +1 -0
- package/dist/pipeline/profile-detectors/manifests.d.ts +7 -0
- package/dist/pipeline/profile-detectors/manifests.d.ts.map +1 -0
- package/dist/pipeline/profile-detectors/manifests.js +7 -0
- package/dist/pipeline/profile-detectors/manifests.js.map +1 -0
- package/dist/pipeline/profile-detectors/src-dirs.d.ts +17 -0
- package/dist/pipeline/profile-detectors/src-dirs.d.ts.map +1 -0
- package/dist/pipeline/profile-detectors/src-dirs.js +89 -0
- package/dist/pipeline/profile-detectors/src-dirs.js.map +1 -0
- package/dist/pipeline/profile-detectors/variant-detectors.d.ts +7 -0
- package/dist/pipeline/profile-detectors/variant-detectors.d.ts.map +1 -0
- package/dist/pipeline/profile-detectors/variant-detectors.js +7 -0
- package/dist/pipeline/profile-detectors/variant-detectors.js.map +1 -0
- package/dist/pipeline/runner.d.ts +54 -0
- package/dist/pipeline/runner.d.ts.map +1 -0
- package/dist/pipeline/runner.js +247 -0
- package/dist/pipeline/runner.js.map +1 -0
- package/dist/pipeline/types.d.ts +235 -0
- package/dist/pipeline/types.d.ts.map +1 -0
- package/dist/pipeline/types.js +15 -0
- package/dist/pipeline/types.js.map +1 -0
- package/dist/providers/c.d.ts +3 -0
- package/dist/providers/c.d.ts.map +1 -0
- package/dist/providers/c.js +162 -0
- package/dist/providers/c.js.map +1 -0
- package/dist/providers/cobol.d.ts +19 -0
- package/dist/providers/cobol.d.ts.map +1 -0
- package/dist/providers/cobol.js +44 -0
- package/dist/providers/cobol.js.map +1 -0
- package/dist/providers/cpp.d.ts +3 -0
- package/dist/providers/cpp.d.ts.map +1 -0
- package/dist/providers/cpp.js +200 -0
- package/dist/providers/cpp.js.map +1 -0
- package/dist/providers/csharp.d.ts +3 -0
- package/dist/providers/csharp.d.ts.map +1 -0
- package/dist/providers/csharp.js +292 -0
- package/dist/providers/csharp.js.map +1 -0
- package/dist/providers/dart.d.ts +3 -0
- package/dist/providers/dart.d.ts.map +1 -0
- package/dist/providers/dart.js +214 -0
- package/dist/providers/dart.js.map +1 -0
- package/dist/providers/definition-ids.d.ts +18 -0
- package/dist/providers/definition-ids.d.ts.map +1 -0
- package/dist/providers/definition-ids.js +23 -0
- package/dist/providers/definition-ids.js.map +1 -0
- package/dist/providers/extract-helpers.d.ts +60 -0
- package/dist/providers/extract-helpers.d.ts.map +1 -0
- package/dist/providers/extract-helpers.js +296 -0
- package/dist/providers/extract-helpers.js.map +1 -0
- package/dist/providers/extraction-types.d.ts +85 -0
- package/dist/providers/extraction-types.d.ts.map +1 -0
- package/dist/providers/extraction-types.js +13 -0
- package/dist/providers/extraction-types.js.map +1 -0
- package/dist/providers/go.d.ts +3 -0
- package/dist/providers/go.d.ts.map +1 -0
- package/dist/providers/go.js +359 -0
- package/dist/providers/go.js.map +1 -0
- package/dist/providers/http-detect.d.ts +44 -0
- package/dist/providers/http-detect.d.ts.map +1 -0
- package/dist/providers/http-detect.js +307 -0
- package/dist/providers/http-detect.js.map +1 -0
- package/dist/providers/index.d.ts +38 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +33 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/java.d.ts +3 -0
- package/dist/providers/java.d.ts.map +1 -0
- package/dist/providers/java.js +259 -0
- package/dist/providers/java.js.map +1 -0
- package/dist/providers/javascript.d.ts +3 -0
- package/dist/providers/javascript.d.ts.map +1 -0
- package/dist/providers/javascript.js +139 -0
- package/dist/providers/javascript.js.map +1 -0
- package/dist/providers/kotlin.d.ts +3 -0
- package/dist/providers/kotlin.d.ts.map +1 -0
- package/dist/providers/kotlin.js +175 -0
- package/dist/providers/kotlin.js.map +1 -0
- package/dist/providers/php.d.ts +3 -0
- package/dist/providers/php.d.ts.map +1 -0
- package/dist/providers/php.js +218 -0
- package/dist/providers/php.js.map +1 -0
- package/dist/providers/python-accesses.d.ts +9 -0
- package/dist/providers/python-accesses.d.ts.map +1 -0
- package/dist/providers/python-accesses.js +22 -0
- package/dist/providers/python-accesses.js.map +1 -0
- package/dist/providers/python.d.ts +3 -0
- package/dist/providers/python.d.ts.map +1 -0
- package/dist/providers/python.js +323 -0
- package/dist/providers/python.js.map +1 -0
- package/dist/providers/registry.d.ts +4 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +46 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/resolution/c3.d.ts +6 -0
- package/dist/providers/resolution/c3.d.ts.map +1 -0
- package/dist/providers/resolution/c3.js +76 -0
- package/dist/providers/resolution/c3.js.map +1 -0
- package/dist/providers/resolution/context.d.ts +38 -0
- package/dist/providers/resolution/context.d.ts.map +1 -0
- package/dist/providers/resolution/context.js +45 -0
- package/dist/providers/resolution/context.js.map +1 -0
- package/dist/providers/resolution/first-wins.d.ts +3 -0
- package/dist/providers/resolution/first-wins.d.ts.map +1 -0
- package/dist/providers/resolution/first-wins.js +27 -0
- package/dist/providers/resolution/first-wins.js.map +1 -0
- package/dist/providers/resolution/mro.d.ts +16 -0
- package/dist/providers/resolution/mro.d.ts.map +1 -0
- package/dist/providers/resolution/mro.js +14 -0
- package/dist/providers/resolution/mro.js.map +1 -0
- package/dist/providers/resolution/none.d.ts +3 -0
- package/dist/providers/resolution/none.d.ts.map +1 -0
- package/dist/providers/resolution/none.js +11 -0
- package/dist/providers/resolution/none.js.map +1 -0
- package/dist/providers/resolution/python-all-filter.d.ts +25 -0
- package/dist/providers/resolution/python-all-filter.d.ts.map +1 -0
- package/dist/providers/resolution/python-all-filter.js +64 -0
- package/dist/providers/resolution/python-all-filter.js.map +1 -0
- package/dist/providers/resolution/resolver-strategy.d.ts +42 -0
- package/dist/providers/resolution/resolver-strategy.d.ts.map +1 -0
- package/dist/providers/resolution/resolver-strategy.js +50 -0
- package/dist/providers/resolution/resolver-strategy.js.map +1 -0
- package/dist/providers/resolution/single-inheritance.d.ts +3 -0
- package/dist/providers/resolution/single-inheritance.d.ts.map +1 -0
- package/dist/providers/resolution/single-inheritance.js +21 -0
- package/dist/providers/resolution/single-inheritance.js.map +1 -0
- package/dist/providers/resolution/stack-graphs/__fixtures__/mock-tree.d.ts +16 -0
- package/dist/providers/resolution/stack-graphs/__fixtures__/mock-tree.d.ts.map +1 -0
- package/dist/providers/resolution/stack-graphs/__fixtures__/mock-tree.js +50 -0
- package/dist/providers/resolution/stack-graphs/__fixtures__/mock-tree.js.map +1 -0
- package/dist/providers/resolution/stack-graphs/glue.d.ts +15 -0
- package/dist/providers/resolution/stack-graphs/glue.d.ts.map +1 -0
- package/dist/providers/resolution/stack-graphs/glue.js +44 -0
- package/dist/providers/resolution/stack-graphs/glue.js.map +1 -0
- package/dist/providers/resolution/stack-graphs/node-edge-builder.d.ts +30 -0
- package/dist/providers/resolution/stack-graphs/node-edge-builder.d.ts.map +1 -0
- package/dist/providers/resolution/stack-graphs/node-edge-builder.js +366 -0
- package/dist/providers/resolution/stack-graphs/node-edge-builder.js.map +1 -0
- package/dist/providers/resolution/stack-graphs/partial-path-engine.d.ts +9 -0
- package/dist/providers/resolution/stack-graphs/partial-path-engine.d.ts.map +1 -0
- package/dist/providers/resolution/stack-graphs/partial-path-engine.js +152 -0
- package/dist/providers/resolution/stack-graphs/partial-path-engine.js.map +1 -0
- package/dist/providers/resolution/stack-graphs/rule-parser.d.ts +11 -0
- package/dist/providers/resolution/stack-graphs/rule-parser.d.ts.map +1 -0
- package/dist/providers/resolution/stack-graphs/rule-parser.js +247 -0
- package/dist/providers/resolution/stack-graphs/rule-parser.js.map +1 -0
- package/dist/providers/resolution/stack-graphs/types.d.ts +93 -0
- package/dist/providers/resolution/stack-graphs/types.d.ts.map +1 -0
- package/dist/providers/resolution/stack-graphs/types.js +11 -0
- package/dist/providers/resolution/stack-graphs/types.js.map +1 -0
- package/dist/providers/resolution/stack-graphs-python.d.ts +27 -0
- package/dist/providers/resolution/stack-graphs-python.d.ts.map +1 -0
- package/dist/providers/resolution/stack-graphs-python.js +104 -0
- package/dist/providers/resolution/stack-graphs-python.js.map +1 -0
- package/dist/providers/resolution/stack-graphs-ts.d.ts +134 -0
- package/dist/providers/resolution/stack-graphs-ts.d.ts.map +1 -0
- package/dist/providers/resolution/stack-graphs-ts.js +372 -0
- package/dist/providers/resolution/stack-graphs-ts.js.map +1 -0
- package/dist/providers/ruby.d.ts +3 -0
- package/dist/providers/ruby.d.ts.map +1 -0
- package/dist/providers/ruby.js +259 -0
- package/dist/providers/ruby.js.map +1 -0
- package/dist/providers/rust.d.ts +3 -0
- package/dist/providers/rust.d.ts.map +1 -0
- package/dist/providers/rust.js +318 -0
- package/dist/providers/rust.js.map +1 -0
- package/dist/providers/swift.d.ts +3 -0
- package/dist/providers/swift.d.ts.map +1 -0
- package/dist/providers/swift.js +177 -0
- package/dist/providers/swift.js.map +1 -0
- package/dist/providers/test-helpers.d.ts +24 -0
- package/dist/providers/test-helpers.d.ts.map +1 -0
- package/dist/providers/test-helpers.js +33 -0
- package/dist/providers/test-helpers.js.map +1 -0
- package/dist/providers/ts-shared.d.ts +30 -0
- package/dist/providers/ts-shared.d.ts.map +1 -0
- package/dist/providers/ts-shared.js +328 -0
- package/dist/providers/ts-shared.js.map +1 -0
- package/dist/providers/tsx.d.ts +7 -0
- package/dist/providers/tsx.d.ts.map +1 -0
- package/dist/providers/tsx.js +79 -0
- package/dist/providers/tsx.js.map +1 -0
- package/dist/providers/types.d.ts +166 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +7 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/providers/typescript-family-accesses.d.ts +14 -0
- package/dist/providers/typescript-family-accesses.d.ts.map +1 -0
- package/dist/providers/typescript-family-accesses.js +27 -0
- package/dist/providers/typescript-family-accesses.js.map +1 -0
- package/dist/providers/typescript.d.ts +9 -0
- package/dist/providers/typescript.d.ts.map +1 -0
- package/dist/providers/typescript.js +84 -0
- package/dist/providers/typescript.js.map +1 -0
- package/package.json +108 -0
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Incremental scope phase.
|
|
3
|
+
*
|
|
4
|
+
* Given a prior-run graph projection ({@link PreviousGraph}) and the current
|
|
5
|
+
* scan output, compute the **import closure** of files whose content hash
|
|
6
|
+
* changed since the last run. Downstream phases can consult this output to
|
|
7
|
+
* narrow their working set — today it is purely **passive**: the phase emits
|
|
8
|
+
* the closure and stats without modifying what crossFile / mro / communities
|
|
9
|
+
* / processes actually process. That's a deliberate v1.0 choice: wiring each
|
|
10
|
+
* downstream phase to honour the closure is invasive and risky for the first
|
|
11
|
+
* iteration. We keep the pipeline observably correct (full reindex always
|
|
12
|
+
* runs) while recording the *intended* savings so a followup can flip the
|
|
13
|
+
* active switch behind a feature flag.
|
|
14
|
+
*
|
|
15
|
+
* ## Algorithm
|
|
16
|
+
*
|
|
17
|
+
* 1. Read `options.incrementalFrom`. If absent, or if `options.force` is set,
|
|
18
|
+
* emit `mode="full"` covering every scanned file. Bail early.
|
|
19
|
+
* 2. Walk the scan output and compute `changedFiles` = files whose
|
|
20
|
+
* `contentSha` is unknown to the prior graph OR differs from it. For
|
|
21
|
+
* content-hash comparison we treat a file that is present in both the
|
|
22
|
+
* prior `files[]` and the current scan as "unchanged" only when the hash
|
|
23
|
+
* actually matches. Prior-graph consumers (`analyze.ts`) supply the hash
|
|
24
|
+
* by reading the persisted scan state; phases that need richer metadata
|
|
25
|
+
* (e.g. `defines` edges) can extend {@link PreviousGraph} later without a
|
|
26
|
+
* breaking change here.
|
|
27
|
+
* 3. BFS forward from `changedFiles` along IMPORTS edges to depth 2 (who
|
|
28
|
+
* *uses* the changed files — "downstream" in consumer sense).
|
|
29
|
+
* 4. BFS backward from `changedFiles` along IMPORTS edges to depth 2 (what
|
|
30
|
+
* the changed files *use* — "upstream" in producer sense).
|
|
31
|
+
* 5. Take one hop of heritage ancestors + descendants (EXTENDS / IMPLEMENTS)
|
|
32
|
+
* for each changed file so subtype MROs refresh when a base class moves.
|
|
33
|
+
* 6. If the union exceeds 30% of the current total file count, fall back to
|
|
34
|
+
* a full reindex (`mode="full"`, `fullReindexBecause="closure-too-large"`).
|
|
35
|
+
* The safety valve prevents pathological "touched a universally-imported
|
|
36
|
+
* utility" cases from running an incremental pass that ends up bigger
|
|
37
|
+
* than a cold build.
|
|
38
|
+
*
|
|
39
|
+
* ## Determinism
|
|
40
|
+
*
|
|
41
|
+
* All emitted arrays (`changedFiles`, `closureFiles`) are sorted
|
|
42
|
+
* alphabetically. The BFS keeps its frontier sorted at every step; visited
|
|
43
|
+
* order has no effect on the final set, but sorting at emission time makes
|
|
44
|
+
* the logs reproducible across runs for the same input.
|
|
45
|
+
*/
|
|
46
|
+
import { SCAN_PHASE_NAME } from "./scan.js";
|
|
47
|
+
/** Depth of the forward + backward IMPORTS BFS per the research spec. */
|
|
48
|
+
const IMPORTS_BFS_DEPTH = 2;
|
|
49
|
+
/** Safety valve threshold. Closure size ratios above this fall back to full. */
|
|
50
|
+
const FULL_REINDEX_THRESHOLD = 0.3;
|
|
51
|
+
export const INCREMENTAL_SCOPE_PHASE_NAME = "incremental-scope";
|
|
52
|
+
export const incrementalScopePhase = {
|
|
53
|
+
name: INCREMENTAL_SCOPE_PHASE_NAME,
|
|
54
|
+
deps: [SCAN_PHASE_NAME],
|
|
55
|
+
async run(ctx, deps) {
|
|
56
|
+
const scan = deps.get(SCAN_PHASE_NAME);
|
|
57
|
+
if (scan === undefined) {
|
|
58
|
+
throw new Error("incremental-scope: scan output missing from dependency map");
|
|
59
|
+
}
|
|
60
|
+
const totalFiles = scan.files.length;
|
|
61
|
+
const allPaths = scan.files.map((f) => f.relPath);
|
|
62
|
+
// The scanned set is already deterministically sorted by `runScan`, but
|
|
63
|
+
// we re-sort defensively: incremental-scope must never trust a caller's
|
|
64
|
+
// ordering invariants for a hot-path output.
|
|
65
|
+
const allSorted = [...allPaths].sort();
|
|
66
|
+
const prior = ctx.options.incrementalFrom;
|
|
67
|
+
const force = ctx.options.force === true;
|
|
68
|
+
if (force) {
|
|
69
|
+
return {
|
|
70
|
+
mode: "full",
|
|
71
|
+
changedFiles: [],
|
|
72
|
+
closureFiles: allSorted,
|
|
73
|
+
fullReindexBecause: "force-flag",
|
|
74
|
+
totalFiles,
|
|
75
|
+
closureRatio: totalFiles === 0 ? 0 : 1,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
if (prior === undefined) {
|
|
79
|
+
return {
|
|
80
|
+
mode: "full",
|
|
81
|
+
changedFiles: [],
|
|
82
|
+
closureFiles: allSorted,
|
|
83
|
+
fullReindexBecause: "no-prior-graph",
|
|
84
|
+
totalFiles,
|
|
85
|
+
closureRatio: totalFiles === 0 ? 0 : 1,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
const changedFiles = computeChangedFiles(scan.files, prior);
|
|
89
|
+
if (changedFiles.length === 0) {
|
|
90
|
+
// No content drift: closure is empty. We still emit mode="incremental"
|
|
91
|
+
// so downstream phases can observe "nothing to do" without inferring
|
|
92
|
+
// it from an ambiguous full-mode marker.
|
|
93
|
+
return {
|
|
94
|
+
mode: "incremental",
|
|
95
|
+
changedFiles: [],
|
|
96
|
+
closureFiles: [],
|
|
97
|
+
totalFiles,
|
|
98
|
+
closureRatio: 0,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
// ---- Build adjacency maps from the prior graph. --------------------
|
|
102
|
+
//
|
|
103
|
+
// `importForward` mirrors the on-graph direction (importer -> target);
|
|
104
|
+
// `importBackward` inverts it so we can walk "who imports me" in one
|
|
105
|
+
// step. Heritage is a single symmetric map because the closure wants
|
|
106
|
+
// both ancestors and descendants in one hop.
|
|
107
|
+
const importForward = new Map();
|
|
108
|
+
const importBackward = new Map();
|
|
109
|
+
for (const edge of prior.importEdges) {
|
|
110
|
+
pushIntoBucket(importForward, edge.importer, edge.target);
|
|
111
|
+
pushIntoBucket(importBackward, edge.target, edge.importer);
|
|
112
|
+
}
|
|
113
|
+
const heritage = new Map();
|
|
114
|
+
for (const edge of prior.heritageEdges) {
|
|
115
|
+
pushIntoBucket(heritage, edge.childFile, edge.parentFile);
|
|
116
|
+
pushIntoBucket(heritage, edge.parentFile, edge.childFile);
|
|
117
|
+
}
|
|
118
|
+
// Sort every adjacency list so BFS frontier order is a pure function
|
|
119
|
+
// of the input graph, regardless of edge insertion order.
|
|
120
|
+
for (const map of [importForward, importBackward, heritage]) {
|
|
121
|
+
for (const [k, v] of map) {
|
|
122
|
+
map.set(k, [...v].sort());
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
const closure = new Set(changedFiles);
|
|
126
|
+
bfsBounded(closure, importForward, changedFiles, IMPORTS_BFS_DEPTH);
|
|
127
|
+
bfsBounded(closure, importBackward, changedFiles, IMPORTS_BFS_DEPTH);
|
|
128
|
+
// Heritage is a single-hop expansion per the research algorithm.
|
|
129
|
+
for (const f of changedFiles) {
|
|
130
|
+
const neighbours = heritage.get(f);
|
|
131
|
+
if (neighbours === undefined)
|
|
132
|
+
continue;
|
|
133
|
+
for (const n of neighbours)
|
|
134
|
+
closure.add(n);
|
|
135
|
+
}
|
|
136
|
+
// Prune closure to files that still exist in the current scan — a file
|
|
137
|
+
// deleted between runs should not propagate into a re-analysis target.
|
|
138
|
+
const currentSet = new Set(allPaths);
|
|
139
|
+
const pruned = [...closure].filter((f) => currentSet.has(f)).sort();
|
|
140
|
+
const ratio = totalFiles === 0 ? 0 : pruned.length / totalFiles;
|
|
141
|
+
if (ratio > FULL_REINDEX_THRESHOLD) {
|
|
142
|
+
ctx.onProgress?.({
|
|
143
|
+
phase: INCREMENTAL_SCOPE_PHASE_NAME,
|
|
144
|
+
kind: "note",
|
|
145
|
+
message: `incremental-scope: closure ${pruned.length}/${totalFiles} ` +
|
|
146
|
+
`(${(ratio * 100).toFixed(1)}%) exceeds ${FULL_REINDEX_THRESHOLD * 100}% threshold — ` +
|
|
147
|
+
`falling back to full reindex`,
|
|
148
|
+
});
|
|
149
|
+
return {
|
|
150
|
+
mode: "full",
|
|
151
|
+
changedFiles: [...changedFiles].sort(),
|
|
152
|
+
closureFiles: allSorted,
|
|
153
|
+
fullReindexBecause: "closure-too-large",
|
|
154
|
+
totalFiles,
|
|
155
|
+
closureRatio: ratio,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
mode: "incremental",
|
|
160
|
+
changedFiles: [...changedFiles].sort(),
|
|
161
|
+
closureFiles: pruned,
|
|
162
|
+
totalFiles,
|
|
163
|
+
closureRatio: ratio,
|
|
164
|
+
};
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
/**
|
|
168
|
+
* Compute the set of files whose content hash differs from the prior graph.
|
|
169
|
+
*
|
|
170
|
+
* Semantics:
|
|
171
|
+
* - File present in both and hash matches → unchanged.
|
|
172
|
+
* - File present in both and hash differs → changed.
|
|
173
|
+
* - File only in current scan (newly added) → changed.
|
|
174
|
+
* - File only in prior graph (deleted) → ignored (cannot re-process what
|
|
175
|
+
* no longer exists; downstream phases must detect deletions through the
|
|
176
|
+
* upsert pipeline instead).
|
|
177
|
+
*/
|
|
178
|
+
function computeChangedFiles(current, prior) {
|
|
179
|
+
const priorHashByPath = new Map();
|
|
180
|
+
for (const f of prior.files)
|
|
181
|
+
priorHashByPath.set(f.relPath, f.contentSha);
|
|
182
|
+
const changed = [];
|
|
183
|
+
for (const f of current) {
|
|
184
|
+
const priorHash = priorHashByPath.get(f.relPath);
|
|
185
|
+
if (priorHash === undefined || priorHash !== f.sha256) {
|
|
186
|
+
changed.push(f.relPath);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return changed.sort();
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Breadth-first walk capped at `maxDepth` hops. `closure` accumulates the
|
|
193
|
+
* visited set; starting seeds are assumed to already live in `closure`.
|
|
194
|
+
*
|
|
195
|
+
* The frontier is re-sorted at every depth so BFS visitation order is a
|
|
196
|
+
* deterministic function of the graph, not of Map iteration order.
|
|
197
|
+
*/
|
|
198
|
+
function bfsBounded(closure, adj, seeds, maxDepth) {
|
|
199
|
+
let frontier = [...seeds].sort();
|
|
200
|
+
for (let depth = 0; depth < maxDepth && frontier.length > 0; depth += 1) {
|
|
201
|
+
const nextFrontier = [];
|
|
202
|
+
for (const node of frontier) {
|
|
203
|
+
const neighbours = adj.get(node);
|
|
204
|
+
if (neighbours === undefined)
|
|
205
|
+
continue;
|
|
206
|
+
for (const n of neighbours) {
|
|
207
|
+
if (!closure.has(n)) {
|
|
208
|
+
closure.add(n);
|
|
209
|
+
nextFrontier.push(n);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
nextFrontier.sort();
|
|
214
|
+
frontier = nextFrontier;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
function pushIntoBucket(m, key, value) {
|
|
218
|
+
const existing = m.get(key);
|
|
219
|
+
if (existing === undefined) {
|
|
220
|
+
m.set(key, [value]);
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
existing.push(value);
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=incremental-scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incremental-scope.js","sourceRoot":"","sources":["../../../src/pipeline/phases/incremental-scope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown phase — projects prose documents onto the graph.
|
|
3
|
+
*
|
|
4
|
+
* Consumes the structure phase output (for its pathSet) and scans every file
|
|
5
|
+
* whose extension matches `.md`, `.mdx`, or `.markdown`. For each such file
|
|
6
|
+
* the phase:
|
|
7
|
+
* 1. Emits a `Section` node per H1..H6 heading.
|
|
8
|
+
* 2. Links sections to their owning file via CONTAINS (top-level sections)
|
|
9
|
+
* and to each other along the heading hierarchy (parent → child).
|
|
10
|
+
* 3. Scans the body for `[text](./path.md)` or `[text](./path.md#anchor)`
|
|
11
|
+
* style internal links and emits REFERENCES edges from the containing
|
|
12
|
+
* section (falling back to the file when no section encloses the link)
|
|
13
|
+
* to the target file — but only if the target path resolves against the
|
|
14
|
+
* structure phase pathSet.
|
|
15
|
+
*
|
|
16
|
+
* Determinism: input files are iterated in the sorted relPath order supplied
|
|
17
|
+
* by the scan phase, headings are processed in source order, and link target
|
|
18
|
+
* resolution is deterministic given the pathSet.
|
|
19
|
+
*
|
|
20
|
+
* No new dependencies — heading and link parsing is done with compiled regex.
|
|
21
|
+
*/
|
|
22
|
+
import type { PipelinePhase } from "../types.js";
|
|
23
|
+
export interface MarkdownOutput {
|
|
24
|
+
readonly sectionCount: number;
|
|
25
|
+
readonly linkCount: number;
|
|
26
|
+
}
|
|
27
|
+
export declare const MARKDOWN_PHASE_NAME = "markdown";
|
|
28
|
+
export declare const markdownPhase: PipelinePhase<MarkdownOutput>;
|
|
29
|
+
//# sourceMappingURL=markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../../src/pipeline/phases/markdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH,OAAO,KAAK,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAalE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAE9C,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,cAAc,CAiBvD,CAAC"}
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown phase — projects prose documents onto the graph.
|
|
3
|
+
*
|
|
4
|
+
* Consumes the structure phase output (for its pathSet) and scans every file
|
|
5
|
+
* whose extension matches `.md`, `.mdx`, or `.markdown`. For each such file
|
|
6
|
+
* the phase:
|
|
7
|
+
* 1. Emits a `Section` node per H1..H6 heading.
|
|
8
|
+
* 2. Links sections to their owning file via CONTAINS (top-level sections)
|
|
9
|
+
* and to each other along the heading hierarchy (parent → child).
|
|
10
|
+
* 3. Scans the body for `[text](./path.md)` or `[text](./path.md#anchor)`
|
|
11
|
+
* style internal links and emits REFERENCES edges from the containing
|
|
12
|
+
* section (falling back to the file when no section encloses the link)
|
|
13
|
+
* to the target file — but only if the target path resolves against the
|
|
14
|
+
* structure phase pathSet.
|
|
15
|
+
*
|
|
16
|
+
* Determinism: input files are iterated in the sorted relPath order supplied
|
|
17
|
+
* by the scan phase, headings are processed in source order, and link target
|
|
18
|
+
* resolution is deterministic given the pathSet.
|
|
19
|
+
*
|
|
20
|
+
* No new dependencies — heading and link parsing is done with compiled regex.
|
|
21
|
+
*/
|
|
22
|
+
import { promises as fs } from "node:fs";
|
|
23
|
+
import path from "node:path";
|
|
24
|
+
import { makeNodeId } from "@opencodehub/core-types";
|
|
25
|
+
import { SCAN_PHASE_NAME } from "./scan.js";
|
|
26
|
+
import { STRUCTURE_PHASE_NAME } from "./structure.js";
|
|
27
|
+
/** File extensions treated as markdown. Lowercase, leading dot. */
|
|
28
|
+
const MARKDOWN_EXTS = new Set([".md", ".mdx", ".markdown"]);
|
|
29
|
+
/** Match ATX-style headings `#`-`######` followed by the heading text. */
|
|
30
|
+
const HEADING_RE = /^(#{1,6})\s+(.+?)\s*#*\s*$/;
|
|
31
|
+
/** Match `[anchor](target)` links. Captures only the target. */
|
|
32
|
+
const LINK_RE = /\[(?:[^\]]*)\]\(([^)\s]+)(?:\s+"[^"]*")?\)/g;
|
|
33
|
+
export const MARKDOWN_PHASE_NAME = "markdown";
|
|
34
|
+
export const markdownPhase = {
|
|
35
|
+
name: MARKDOWN_PHASE_NAME,
|
|
36
|
+
deps: [STRUCTURE_PHASE_NAME],
|
|
37
|
+
async run(ctx, deps) {
|
|
38
|
+
const structure = deps.get(STRUCTURE_PHASE_NAME);
|
|
39
|
+
if (structure === undefined) {
|
|
40
|
+
throw new Error("markdown: structure output missing from dependency map");
|
|
41
|
+
}
|
|
42
|
+
// markdown reads the scan output indirectly via phaseOutputs — it is not
|
|
43
|
+
// declared as a direct dep (structure already consumes it and we prefer
|
|
44
|
+
// a single declared dep chain) but the full phaseOutputs map is visible.
|
|
45
|
+
const scan = ctx.phaseOutputs.get(SCAN_PHASE_NAME);
|
|
46
|
+
if (scan === undefined) {
|
|
47
|
+
throw new Error("markdown: scan output missing from phase outputs");
|
|
48
|
+
}
|
|
49
|
+
return runMarkdown(ctx, scan, structure);
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
async function runMarkdown(ctx, scan, structure) {
|
|
53
|
+
const markdownFiles = scan.files.filter((f) => MARKDOWN_EXTS.has(extOf(f.relPath)));
|
|
54
|
+
let sectionCount = 0;
|
|
55
|
+
let linkCount = 0;
|
|
56
|
+
for (const file of markdownFiles) {
|
|
57
|
+
let content;
|
|
58
|
+
try {
|
|
59
|
+
const buf = await fs.readFile(file.absPath);
|
|
60
|
+
content = buf.toString("utf8");
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
ctx.onProgress?.({
|
|
64
|
+
phase: MARKDOWN_PHASE_NAME,
|
|
65
|
+
kind: "warn",
|
|
66
|
+
message: `markdown: cannot read ${file.relPath}: ${err.message}`,
|
|
67
|
+
});
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const headings = parseHeadings(content);
|
|
71
|
+
const sectionsOnFile = emitSectionsAndContains(ctx, file, headings);
|
|
72
|
+
sectionCount += sectionsOnFile.length;
|
|
73
|
+
linkCount += emitReferenceLinks(ctx, file, content, sectionsOnFile, structure.pathSet);
|
|
74
|
+
}
|
|
75
|
+
return { sectionCount, linkCount };
|
|
76
|
+
}
|
|
77
|
+
function parseHeadings(content) {
|
|
78
|
+
const out = [];
|
|
79
|
+
let lineNum = 1;
|
|
80
|
+
let lineStart = 0;
|
|
81
|
+
let inFence = false;
|
|
82
|
+
const len = content.length;
|
|
83
|
+
for (let i = 0; i <= len; i += 1) {
|
|
84
|
+
const ch = i === len ? "\n" : content.charAt(i);
|
|
85
|
+
if (ch === "\n") {
|
|
86
|
+
const line = content.slice(lineStart, i);
|
|
87
|
+
const trimmed = line.trimEnd();
|
|
88
|
+
// Toggle code-fence state on lines starting with ``` or ~~~.
|
|
89
|
+
if (/^(?:```|~~~)/.test(trimmed)) {
|
|
90
|
+
inFence = !inFence;
|
|
91
|
+
}
|
|
92
|
+
else if (!inFence) {
|
|
93
|
+
const m = HEADING_RE.exec(trimmed);
|
|
94
|
+
if (m !== null) {
|
|
95
|
+
const hashes = m[1];
|
|
96
|
+
const text = m[2];
|
|
97
|
+
if (hashes !== undefined && text !== undefined) {
|
|
98
|
+
const level = hashes.length;
|
|
99
|
+
const cleaned = text.trim();
|
|
100
|
+
if (cleaned.length > 0) {
|
|
101
|
+
out.push({ level, text: cleaned, line: lineNum, offset: lineStart });
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
lineStart = i + 1;
|
|
107
|
+
lineNum += 1;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return out;
|
|
111
|
+
}
|
|
112
|
+
function emitSectionsAndContains(ctx, file, headings) {
|
|
113
|
+
const fileId = makeNodeId("File", file.relPath, file.relPath);
|
|
114
|
+
// Guarantee the File node exists even if structure was skipped. addNode
|
|
115
|
+
// is idempotent on repeat calls.
|
|
116
|
+
const fileNode = {
|
|
117
|
+
id: fileId,
|
|
118
|
+
kind: "File",
|
|
119
|
+
name: basename(file.relPath),
|
|
120
|
+
filePath: file.relPath,
|
|
121
|
+
...(file.language !== undefined ? { language: file.language } : {}),
|
|
122
|
+
contentHash: file.sha256,
|
|
123
|
+
};
|
|
124
|
+
ctx.graph.addNode(fileNode);
|
|
125
|
+
// Track the chain of currently-open sections by level so each new heading
|
|
126
|
+
// can find its parent and produce a stable qualified key.
|
|
127
|
+
const stack = [];
|
|
128
|
+
const bindings = [];
|
|
129
|
+
for (const h of headings) {
|
|
130
|
+
while (stack.length > 0 &&
|
|
131
|
+
stack[stack.length - 1].heading.level >= h.level) {
|
|
132
|
+
stack.pop();
|
|
133
|
+
}
|
|
134
|
+
const parent = stack.length > 0 ? stack[stack.length - 1] : undefined;
|
|
135
|
+
const parentHeadingText = parent?.heading.text ?? "";
|
|
136
|
+
const id = makeNodeId("Section", file.relPath, `${parentHeadingText}/${h.text}`, {
|
|
137
|
+
parameterCount: h.level,
|
|
138
|
+
});
|
|
139
|
+
const node = {
|
|
140
|
+
id,
|
|
141
|
+
kind: "Section",
|
|
142
|
+
name: h.text,
|
|
143
|
+
filePath: file.relPath,
|
|
144
|
+
level: h.level,
|
|
145
|
+
startLine: h.line,
|
|
146
|
+
};
|
|
147
|
+
ctx.graph.addNode(node);
|
|
148
|
+
const binding = {
|
|
149
|
+
heading: h,
|
|
150
|
+
id,
|
|
151
|
+
bodyStart: h.offset,
|
|
152
|
+
bodyEnd: Number.POSITIVE_INFINITY,
|
|
153
|
+
};
|
|
154
|
+
bindings.push(binding);
|
|
155
|
+
if (parent === undefined) {
|
|
156
|
+
ctx.graph.addEdge({
|
|
157
|
+
from: fileId,
|
|
158
|
+
to: id,
|
|
159
|
+
type: "CONTAINS",
|
|
160
|
+
confidence: 1,
|
|
161
|
+
reason: "file-to-section",
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
ctx.graph.addEdge({
|
|
166
|
+
from: parent.id,
|
|
167
|
+
to: id,
|
|
168
|
+
type: "CONTAINS",
|
|
169
|
+
confidence: 1,
|
|
170
|
+
reason: "section-to-subsection",
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
stack.push(binding);
|
|
174
|
+
}
|
|
175
|
+
// Close body offsets: each section body ends where the next heading of
|
|
176
|
+
// equal-or-lower level starts.
|
|
177
|
+
for (let i = 0; i < bindings.length; i += 1) {
|
|
178
|
+
const current = bindings[i];
|
|
179
|
+
for (let j = i + 1; j < bindings.length; j += 1) {
|
|
180
|
+
const next = bindings[j];
|
|
181
|
+
if (next.heading.level <= current.heading.level) {
|
|
182
|
+
current.bodyEnd = next.heading.offset;
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return bindings;
|
|
188
|
+
}
|
|
189
|
+
function emitReferenceLinks(ctx, file, content, sections, pathSet) {
|
|
190
|
+
const fileId = makeNodeId("File", file.relPath, file.relPath);
|
|
191
|
+
const importerDir = parentDir(file.relPath);
|
|
192
|
+
let linkCount = 0;
|
|
193
|
+
LINK_RE.lastIndex = 0;
|
|
194
|
+
let match = LINK_RE.exec(content);
|
|
195
|
+
while (match !== null) {
|
|
196
|
+
const target = match[1];
|
|
197
|
+
const matchIdx = match.index;
|
|
198
|
+
match = LINK_RE.exec(content);
|
|
199
|
+
if (target === undefined)
|
|
200
|
+
continue;
|
|
201
|
+
// Drop external links, anchors-only, or obviously non-file URIs.
|
|
202
|
+
if (/^[a-z][a-z0-9+.-]*:/i.test(target))
|
|
203
|
+
continue;
|
|
204
|
+
if (target.startsWith("#"))
|
|
205
|
+
continue;
|
|
206
|
+
if (target.startsWith("mailto:"))
|
|
207
|
+
continue;
|
|
208
|
+
// Separate anchor from path.
|
|
209
|
+
const hashIdx = target.indexOf("#");
|
|
210
|
+
const rawPath = hashIdx === -1 ? target : target.slice(0, hashIdx);
|
|
211
|
+
if (rawPath.length === 0)
|
|
212
|
+
continue;
|
|
213
|
+
const resolved = resolveLinkTarget(rawPath, importerDir, pathSet);
|
|
214
|
+
if (resolved === undefined)
|
|
215
|
+
continue;
|
|
216
|
+
const targetId = makeNodeId("File", resolved, resolved);
|
|
217
|
+
const ownerId = ownerSectionFor(sections, matchIdx) ?? fileId;
|
|
218
|
+
ctx.graph.addEdge({
|
|
219
|
+
from: ownerId,
|
|
220
|
+
to: targetId,
|
|
221
|
+
type: "REFERENCES",
|
|
222
|
+
confidence: 0.8,
|
|
223
|
+
reason: "markdown-link",
|
|
224
|
+
});
|
|
225
|
+
linkCount += 1;
|
|
226
|
+
}
|
|
227
|
+
return linkCount;
|
|
228
|
+
}
|
|
229
|
+
function ownerSectionFor(sections, offset) {
|
|
230
|
+
// Pick the deepest section whose body bracket contains `offset`.
|
|
231
|
+
let best;
|
|
232
|
+
for (const s of sections) {
|
|
233
|
+
if (offset >= s.bodyStart && offset < s.bodyEnd) {
|
|
234
|
+
if (best === undefined || s.heading.level > best.heading.level) {
|
|
235
|
+
best = s;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return best?.id;
|
|
240
|
+
}
|
|
241
|
+
function resolveLinkTarget(rawPath, importerDir, pathSet) {
|
|
242
|
+
// Decode percent-escapes and strip leading `./`.
|
|
243
|
+
let p = rawPath;
|
|
244
|
+
try {
|
|
245
|
+
p = decodeURIComponent(p);
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
// leave raw path in place if it's not valid percent-encoded
|
|
249
|
+
}
|
|
250
|
+
if (p.startsWith("/")) {
|
|
251
|
+
const candidate = p.slice(1);
|
|
252
|
+
return pathSet.has(candidate) ? candidate : undefined;
|
|
253
|
+
}
|
|
254
|
+
const joined = posixJoin(importerDir, p);
|
|
255
|
+
const normalized = normalizePath(joined);
|
|
256
|
+
if (pathSet.has(normalized))
|
|
257
|
+
return normalized;
|
|
258
|
+
return undefined;
|
|
259
|
+
}
|
|
260
|
+
function extOf(relPath) {
|
|
261
|
+
const e = path.extname(relPath);
|
|
262
|
+
return e.toLowerCase();
|
|
263
|
+
}
|
|
264
|
+
function basename(p) {
|
|
265
|
+
const idx = p.lastIndexOf("/");
|
|
266
|
+
if (idx < 0)
|
|
267
|
+
return p;
|
|
268
|
+
return p.slice(idx + 1);
|
|
269
|
+
}
|
|
270
|
+
function parentDir(p) {
|
|
271
|
+
const idx = p.lastIndexOf("/");
|
|
272
|
+
if (idx <= 0)
|
|
273
|
+
return "";
|
|
274
|
+
return p.slice(0, idx);
|
|
275
|
+
}
|
|
276
|
+
function posixJoin(dir, rel) {
|
|
277
|
+
if (dir === "")
|
|
278
|
+
return rel;
|
|
279
|
+
if (rel === "")
|
|
280
|
+
return dir;
|
|
281
|
+
return `${dir}/${rel}`;
|
|
282
|
+
}
|
|
283
|
+
function normalizePath(p) {
|
|
284
|
+
const parts = p.split("/");
|
|
285
|
+
const out = [];
|
|
286
|
+
for (const part of parts) {
|
|
287
|
+
if (part === "" || part === ".")
|
|
288
|
+
continue;
|
|
289
|
+
if (part === "..") {
|
|
290
|
+
if (out.length > 0)
|
|
291
|
+
out.pop();
|
|
292
|
+
continue;
|
|
293
|
+
}
|
|
294
|
+
out.push(part);
|
|
295
|
+
}
|
|
296
|
+
return out.join("/");
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../../src/pipeline/phases/markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MRO phase — emit `METHOD_OVERRIDES` / `METHOD_IMPLEMENTS` edges by
|
|
3
|
+
* linearising each class's ancestor chain with its language-specific
|
|
4
|
+
* strategy.
|
|
5
|
+
*
|
|
6
|
+
* Strategy-per-language table:
|
|
7
|
+
* - `python` → `c3` (raises on ambiguity; caught + skipped per-class).
|
|
8
|
+
* - `typescript`, `tsx`, `javascript`, `rust` → `first-wins`.
|
|
9
|
+
* - `java`, `csharp` → `single-inheritance`; interfaces drive
|
|
10
|
+
* `METHOD_IMPLEMENTS` edges separately.
|
|
11
|
+
* - `go` → `none`; no class-based inheritance. Skipped entirely.
|
|
12
|
+
*
|
|
13
|
+
* Determinism: parents and methods are iterated in sorted-id order, so the
|
|
14
|
+
* edge set is byte-identical across runs.
|
|
15
|
+
*/
|
|
16
|
+
import type { PipelinePhase } from "../types.js";
|
|
17
|
+
export declare const MRO_PHASE_NAME = "mro";
|
|
18
|
+
export interface MroOutput {
|
|
19
|
+
readonly overridesCount: number;
|
|
20
|
+
readonly implementsCount: number;
|
|
21
|
+
readonly conflictCount: number;
|
|
22
|
+
}
|
|
23
|
+
export declare const mroPhase: PipelinePhase<MroOutput>;
|
|
24
|
+
//# sourceMappingURL=mro.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mro.d.ts","sourceRoot":"","sources":["../../../src/pipeline/phases/mro.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,OAAO,KAAK,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAUlE,eAAO,MAAM,cAAc,QAAQ,CAAC;AAEpC,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAOD,eAAO,MAAM,QAAQ,EAAE,aAAa,CAAC,SAAS,CAM7C,CAAC"}
|