@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,364 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP / JSON-RPC tool detector.
|
|
3
|
+
*
|
|
4
|
+
* The heuristic is intentionally coarse: many agent frameworks (MCP, LangChain
|
|
5
|
+
* tools, OpenAI function schemas) converge on a `{ name, description, ... }`
|
|
6
|
+
* object literal for each tool. At MVP we only claim a match when the file
|
|
7
|
+
* path *also* signals "tool-ness", which eliminates the majority of false
|
|
8
|
+
* positives coming from generic config blocks.
|
|
9
|
+
*
|
|
10
|
+
* Pattern authored fresh — no external regex reused.
|
|
11
|
+
*/
|
|
12
|
+
/** Path-based gate: file must look like a tool definition. */
|
|
13
|
+
function filePathLooksLikeTool(filePath) {
|
|
14
|
+
const normalized = filePath.replace(/\\/g, "/").toLowerCase();
|
|
15
|
+
if (normalized.includes("/tool"))
|
|
16
|
+
return true;
|
|
17
|
+
const basename = normalized.slice(normalized.lastIndexOf("/") + 1);
|
|
18
|
+
// `*-tool.ts`, `*_tool.ts`, or `*tool*.ts` (and JS/MJS siblings).
|
|
19
|
+
if (/(^|[-_])tool([-_.]|s?\.)/.test(basename))
|
|
20
|
+
return true;
|
|
21
|
+
if (/tool/.test(basename))
|
|
22
|
+
return true;
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Match `name: "..."`, `"name": '...'`, `name: \`...\`` (no interpolation).
|
|
27
|
+
* The key itself is captured so the same regex can harvest `description:`.
|
|
28
|
+
*/
|
|
29
|
+
const STRING_PROP_RE = /(?:^|[\s,{(])(?:"([a-zA-Z_][\w]*)"|'([a-zA-Z_][\w]*)'|([a-zA-Z_][\w]*))\s*:\s*(?:"([^"\\]*(?:\\.[^"\\]*)*)"|'([^'\\]*(?:\\.[^'\\]*)*)'|`([^`$]*)`)/g;
|
|
30
|
+
function collectStringProps(content, keyName) {
|
|
31
|
+
const hits = [];
|
|
32
|
+
STRING_PROP_RE.lastIndex = 0;
|
|
33
|
+
let match = STRING_PROP_RE.exec(content);
|
|
34
|
+
while (match !== null) {
|
|
35
|
+
const key = match[1] ?? match[2] ?? match[3];
|
|
36
|
+
const value = match[4] ?? match[5] ?? match[6];
|
|
37
|
+
const idx = match.index;
|
|
38
|
+
match = STRING_PROP_RE.exec(content);
|
|
39
|
+
if (key !== keyName || value === undefined)
|
|
40
|
+
continue;
|
|
41
|
+
// Count newlines in prefix to convert byte-offset -> 1-based line number.
|
|
42
|
+
let line = 1;
|
|
43
|
+
for (let i = 0; i < idx; i++) {
|
|
44
|
+
if (content.charCodeAt(i) === 10)
|
|
45
|
+
line += 1;
|
|
46
|
+
}
|
|
47
|
+
hits.push({ line, value });
|
|
48
|
+
}
|
|
49
|
+
return hits;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Match `inputSchema:` followed by a `{ ... }` object literal. The capture
|
|
53
|
+
* begins at the opening brace; the closing brace is resolved by
|
|
54
|
+
* {@link findBalancedObjectEnd} so nested objects and strings don't confuse
|
|
55
|
+
* the match.
|
|
56
|
+
*/
|
|
57
|
+
const INPUT_SCHEMA_RE = /(?:^|[\s,{(])(?:"inputSchema"|'inputSchema'|inputSchema)\s*:\s*\{/g;
|
|
58
|
+
function collectInputSchemaLiterals(content) {
|
|
59
|
+
const hits = [];
|
|
60
|
+
INPUT_SCHEMA_RE.lastIndex = 0;
|
|
61
|
+
let match = INPUT_SCHEMA_RE.exec(content);
|
|
62
|
+
while (match !== null) {
|
|
63
|
+
const openBrace = match.index + match[0].length - 1;
|
|
64
|
+
const close = findBalancedObjectEnd(content, openBrace);
|
|
65
|
+
const idx = match.index;
|
|
66
|
+
// Resume scanning after the open brace so a malformed literal cannot
|
|
67
|
+
// wedge the loop.
|
|
68
|
+
INPUT_SCHEMA_RE.lastIndex = openBrace + 1;
|
|
69
|
+
match = INPUT_SCHEMA_RE.exec(content);
|
|
70
|
+
if (close === -1)
|
|
71
|
+
continue;
|
|
72
|
+
const rawObjectLiteral = content.slice(openBrace, close + 1);
|
|
73
|
+
let line = 1;
|
|
74
|
+
for (let i = 0; i < idx; i++) {
|
|
75
|
+
if (content.charCodeAt(i) === 10)
|
|
76
|
+
line += 1;
|
|
77
|
+
}
|
|
78
|
+
hits.push({ line, rawObjectLiteral });
|
|
79
|
+
}
|
|
80
|
+
return hits;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Walk forward from `start` (pointing at `{`) and return the index of the
|
|
84
|
+
* matching `}`, or -1 when the brace is unbalanced / the source runs out.
|
|
85
|
+
* Single-, double-, and backtick-string literals are skipped so a brace
|
|
86
|
+
* inside a string doesn't fool depth counting.
|
|
87
|
+
*/
|
|
88
|
+
function findBalancedObjectEnd(source, start) {
|
|
89
|
+
if (source.charCodeAt(start) !== 0x7b /* { */)
|
|
90
|
+
return -1;
|
|
91
|
+
let depth = 0;
|
|
92
|
+
let i = start;
|
|
93
|
+
const n = source.length;
|
|
94
|
+
while (i < n) {
|
|
95
|
+
const ch = source.charCodeAt(i);
|
|
96
|
+
if (ch === 0x22 /* " */ || ch === 0x27 /* ' */ || ch === 0x60 /* ` */) {
|
|
97
|
+
const next = skipString(source, i, ch);
|
|
98
|
+
if (next === -1)
|
|
99
|
+
return -1;
|
|
100
|
+
i = next;
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
if (ch === 0x7b /* { */) {
|
|
104
|
+
depth += 1;
|
|
105
|
+
}
|
|
106
|
+
else if (ch === 0x7d /* } */) {
|
|
107
|
+
depth -= 1;
|
|
108
|
+
if (depth === 0)
|
|
109
|
+
return i;
|
|
110
|
+
}
|
|
111
|
+
i += 1;
|
|
112
|
+
}
|
|
113
|
+
return -1;
|
|
114
|
+
}
|
|
115
|
+
function skipString(source, start, quote) {
|
|
116
|
+
const n = source.length;
|
|
117
|
+
let i = start + 1;
|
|
118
|
+
while (i < n) {
|
|
119
|
+
const ch = source.charCodeAt(i);
|
|
120
|
+
if (ch === 0x5c /* \ */) {
|
|
121
|
+
// Skip escape sequence (conservatively consume one trailing char).
|
|
122
|
+
i += 2;
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
if (ch === quote)
|
|
126
|
+
return i + 1;
|
|
127
|
+
i += 1;
|
|
128
|
+
}
|
|
129
|
+
return -1;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Translate an object literal written in relaxed JS syntax (single quotes,
|
|
133
|
+
* unquoted keys, trailing commas) into strict canonical JSON sorted by key.
|
|
134
|
+
* Returns `undefined` when the literal is too exotic to normalize safely
|
|
135
|
+
* (template strings, bareword values, computed keys).
|
|
136
|
+
*/
|
|
137
|
+
export function canonicalizeObjectLiteral(literal) {
|
|
138
|
+
const jsonLike = relaxedToJson(literal);
|
|
139
|
+
if (jsonLike === undefined)
|
|
140
|
+
return undefined;
|
|
141
|
+
let parsed;
|
|
142
|
+
try {
|
|
143
|
+
parsed = JSON.parse(jsonLike);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
return stableStringify(parsed);
|
|
149
|
+
}
|
|
150
|
+
function stableStringify(value) {
|
|
151
|
+
if (value === null || typeof value !== "object") {
|
|
152
|
+
return JSON.stringify(value);
|
|
153
|
+
}
|
|
154
|
+
if (Array.isArray(value)) {
|
|
155
|
+
return `[${value.map((v) => stableStringify(v)).join(",")}]`;
|
|
156
|
+
}
|
|
157
|
+
const entries = Object.entries(value)
|
|
158
|
+
.filter(([, v]) => v !== undefined)
|
|
159
|
+
.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
|
|
160
|
+
return `{${entries.map(([k, v]) => `${JSON.stringify(k)}:${stableStringify(v)}`).join(",")}}`;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Rewrite a JS-ish object/array literal so `JSON.parse` accepts it:
|
|
164
|
+
* - single-quoted strings to double-quoted.
|
|
165
|
+
* - unquoted identifier keys to double-quoted keys.
|
|
166
|
+
* - trailing commas stripped.
|
|
167
|
+
* Template strings and bareword values produce `undefined` so the caller
|
|
168
|
+
* falls back to "no schema captured".
|
|
169
|
+
*/
|
|
170
|
+
function relaxedToJson(literal) {
|
|
171
|
+
let out = "";
|
|
172
|
+
let i = 0;
|
|
173
|
+
const n = literal.length;
|
|
174
|
+
while (i < n) {
|
|
175
|
+
const ch = literal[i];
|
|
176
|
+
if (ch === '"') {
|
|
177
|
+
const end = findStringEnd(literal, i, 0x22);
|
|
178
|
+
if (end === -1)
|
|
179
|
+
return undefined;
|
|
180
|
+
out += literal.slice(i, end + 1);
|
|
181
|
+
i = end + 1;
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
if (ch === "'") {
|
|
185
|
+
const end = findStringEnd(literal, i, 0x27);
|
|
186
|
+
if (end === -1)
|
|
187
|
+
return undefined;
|
|
188
|
+
out += `"${jsSingleQuotedToJsonInner(literal.slice(i + 1, end))}"`;
|
|
189
|
+
i = end + 1;
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
if (ch === "`")
|
|
193
|
+
return undefined;
|
|
194
|
+
if (ch !== undefined && /[A-Za-z_$]/.test(ch)) {
|
|
195
|
+
let j = i;
|
|
196
|
+
while (j < n) {
|
|
197
|
+
const cj = literal[j];
|
|
198
|
+
if (cj === undefined || !/[A-Za-z0-9_$]/.test(cj))
|
|
199
|
+
break;
|
|
200
|
+
j += 1;
|
|
201
|
+
}
|
|
202
|
+
const ident = literal.slice(i, j);
|
|
203
|
+
if (ident === "true" || ident === "false" || ident === "null") {
|
|
204
|
+
out += ident;
|
|
205
|
+
i = j;
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
let k = j;
|
|
209
|
+
while (k < n && /\s/.test(literal[k] ?? ""))
|
|
210
|
+
k += 1;
|
|
211
|
+
if (literal[k] === ":") {
|
|
212
|
+
out += `"${ident}"`;
|
|
213
|
+
i = j;
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
return undefined;
|
|
217
|
+
}
|
|
218
|
+
if (ch === ",") {
|
|
219
|
+
let k = i + 1;
|
|
220
|
+
while (k < n && /\s/.test(literal[k] ?? ""))
|
|
221
|
+
k += 1;
|
|
222
|
+
const next = literal[k];
|
|
223
|
+
if (next === "}" || next === "]") {
|
|
224
|
+
i = k;
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
out += ch ?? "";
|
|
229
|
+
i += 1;
|
|
230
|
+
}
|
|
231
|
+
return out;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Translate the *inside* of a JS single-quoted string literal into the
|
|
235
|
+
* inside of a JSON double-quoted string literal, character by character:
|
|
236
|
+
*
|
|
237
|
+
* - `\'` (a JS-only escape) becomes `'` — not legal inside a JSON
|
|
238
|
+
* double-quoted string.
|
|
239
|
+
* - JSON-recognized escapes (`\"`, `\\`, `\/`, `\b`, `\f`, `\n`, `\r`,
|
|
240
|
+
* `\t`, `\uXXXX`) pass through unchanged.
|
|
241
|
+
* - Any other `\X` JS escape that JSON does not understand has its
|
|
242
|
+
* leading backslash doubled so the parser sees the literal characters.
|
|
243
|
+
* - A bare `"` is escaped to `\"`.
|
|
244
|
+
*
|
|
245
|
+
* The character-by-character pass replaces a chained `replace()` sequence
|
|
246
|
+
* that doubled every `\` and broke valid escapes like `\n`. Without the
|
|
247
|
+
* pass, an input containing `\"` would have produced malformed JSON —
|
|
248
|
+
* the js/incomplete-sanitization defect.
|
|
249
|
+
*/
|
|
250
|
+
function jsSingleQuotedToJsonInner(inner) {
|
|
251
|
+
const JSON_SIMPLE_ESCAPE = /^["\\/bfnrt]$/;
|
|
252
|
+
const HEX = /^[0-9a-fA-F]$/;
|
|
253
|
+
let out = "";
|
|
254
|
+
for (let i = 0; i < inner.length; i += 1) {
|
|
255
|
+
const ch = inner[i];
|
|
256
|
+
if (ch === "\\") {
|
|
257
|
+
const next = inner[i + 1] ?? "";
|
|
258
|
+
if (next === "'") {
|
|
259
|
+
// JS-only escape — drop the backslash, keep the quote.
|
|
260
|
+
out += "'";
|
|
261
|
+
i += 1;
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
if (JSON_SIMPLE_ESCAPE.test(next)) {
|
|
265
|
+
// Pass `\\`, `\"`, `\/`, `\b`, `\f`, `\n`, `\r`, `\t` through.
|
|
266
|
+
out += `\\${next}`;
|
|
267
|
+
i += 1;
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
if (next === "u" &&
|
|
271
|
+
HEX.test(inner[i + 2] ?? "") &&
|
|
272
|
+
HEX.test(inner[i + 3] ?? "") &&
|
|
273
|
+
HEX.test(inner[i + 4] ?? "") &&
|
|
274
|
+
HEX.test(inner[i + 5] ?? "")) {
|
|
275
|
+
out += inner.slice(i, i + 6);
|
|
276
|
+
i += 5;
|
|
277
|
+
continue;
|
|
278
|
+
}
|
|
279
|
+
// Unknown JS escape (e.g. `\x41`, `\0`) or a stray backslash —
|
|
280
|
+
// double it so the literal `\` survives the JSON parser.
|
|
281
|
+
out += "\\\\";
|
|
282
|
+
continue;
|
|
283
|
+
}
|
|
284
|
+
if (ch === '"') {
|
|
285
|
+
out += '\\"';
|
|
286
|
+
continue;
|
|
287
|
+
}
|
|
288
|
+
out += ch;
|
|
289
|
+
}
|
|
290
|
+
return out;
|
|
291
|
+
}
|
|
292
|
+
function findStringEnd(src, start, quote) {
|
|
293
|
+
let i = start + 1;
|
|
294
|
+
const n = src.length;
|
|
295
|
+
while (i < n) {
|
|
296
|
+
const ch = src.charCodeAt(i);
|
|
297
|
+
if (ch === 0x5c /* \ */) {
|
|
298
|
+
i += 2;
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
if (ch === quote)
|
|
302
|
+
return i;
|
|
303
|
+
i += 1;
|
|
304
|
+
}
|
|
305
|
+
return -1;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Emit one `ExtractedTool` per `{ name, description }` literal pair found in
|
|
309
|
+
* the same 5-line window. Duplicates (same `toolName` + `description`) are
|
|
310
|
+
* de-duplicated per file; cross-file de-duplication is a later phase concern.
|
|
311
|
+
*/
|
|
312
|
+
export function detectMcpTools(input) {
|
|
313
|
+
const { filePath, content } = input;
|
|
314
|
+
if (!filePathLooksLikeTool(filePath))
|
|
315
|
+
return [];
|
|
316
|
+
if (!/\bname\b/.test(content) || !/\bdescription\b/.test(content))
|
|
317
|
+
return [];
|
|
318
|
+
const names = collectStringProps(content, "name");
|
|
319
|
+
const descriptions = collectStringProps(content, "description");
|
|
320
|
+
if (names.length === 0 || descriptions.length === 0)
|
|
321
|
+
return [];
|
|
322
|
+
const schemas = collectInputSchemaLiterals(content);
|
|
323
|
+
const seen = new Set();
|
|
324
|
+
const out = [];
|
|
325
|
+
for (const name of names) {
|
|
326
|
+
// Pick the nearest description within 5 lines in either direction.
|
|
327
|
+
let best;
|
|
328
|
+
let bestDistance = Number.POSITIVE_INFINITY;
|
|
329
|
+
for (const desc of descriptions) {
|
|
330
|
+
const distance = Math.abs(desc.line - name.line);
|
|
331
|
+
if (distance <= 5 && distance < bestDistance) {
|
|
332
|
+
best = desc;
|
|
333
|
+
bestDistance = distance;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
if (best === undefined)
|
|
337
|
+
continue;
|
|
338
|
+
const key = `${name.value}\u0000${best.value}`;
|
|
339
|
+
if (seen.has(key))
|
|
340
|
+
continue;
|
|
341
|
+
seen.add(key);
|
|
342
|
+
// Pair the nearest inputSchema literal within a 10-line window. Schemas
|
|
343
|
+
// often live a few lines below the name/description pair so we allow a
|
|
344
|
+
// wider span than description pairing.
|
|
345
|
+
let bestSchema;
|
|
346
|
+
let bestSchemaDistance = Number.POSITIVE_INFINITY;
|
|
347
|
+
for (const s of schemas) {
|
|
348
|
+
const distance = Math.abs(s.line - name.line);
|
|
349
|
+
if (distance <= 10 && distance < bestSchemaDistance) {
|
|
350
|
+
bestSchema = s;
|
|
351
|
+
bestSchemaDistance = distance;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
const inputSchemaJson = bestSchema !== undefined ? canonicalizeObjectLiteral(bestSchema.rawObjectLiteral) : undefined;
|
|
355
|
+
out.push({
|
|
356
|
+
toolName: name.value,
|
|
357
|
+
handlerFile: filePath,
|
|
358
|
+
description: best.value,
|
|
359
|
+
...(inputSchemaJson !== undefined ? { inputSchemaJson } : {}),
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
return out;
|
|
363
|
+
}
|
|
364
|
+
//# sourceMappingURL=tool-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-detector.js","sourceRoot":"","sources":["../../src/extract/tool-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared extraction result shapes for the route / tool / ORM detectors.
|
|
3
|
+
*
|
|
4
|
+
* These types are deliberately minimal: they describe the evidence a detector
|
|
5
|
+
* has discovered in a single file (or, for filesystem-routed frameworks, a
|
|
6
|
+
* group of files) without taking any dependency on the graph schema. The
|
|
7
|
+
* routes / tools / orm pipeline phases turn these records into graph nodes
|
|
8
|
+
* and edges.
|
|
9
|
+
*/
|
|
10
|
+
/** A handler-to-URL mapping discovered by a route detector. */
|
|
11
|
+
export interface ExtractedRoute {
|
|
12
|
+
/** Canonical URL path with `{param}` / `{+catchAll}` placeholders. */
|
|
13
|
+
readonly url: string;
|
|
14
|
+
/** HTTP method in uppercase, or `undefined` for filesystem pages. */
|
|
15
|
+
readonly method?: string;
|
|
16
|
+
/** Repo-relative path to the file that declared the route. */
|
|
17
|
+
readonly handlerFile: string;
|
|
18
|
+
/** Middleware identifiers observed on the route chain, in source order. */
|
|
19
|
+
readonly middleware?: readonly string[];
|
|
20
|
+
/** Response payload keys scraped from the handler body (best effort). */
|
|
21
|
+
readonly responseKeys?: readonly string[];
|
|
22
|
+
/** Framework the detector is claiming. */
|
|
23
|
+
readonly framework: "nextjs" | "express" | "fastapi" | "spring" | "nestjs" | "rails" | "unknown";
|
|
24
|
+
}
|
|
25
|
+
/** A single tool definition (MCP / JSON-RPC) discovered by heuristic scan. */
|
|
26
|
+
export interface ExtractedTool {
|
|
27
|
+
/** Name string from the tool definition literal. */
|
|
28
|
+
readonly toolName: string;
|
|
29
|
+
/** Repo-relative path to the file that declared the tool. */
|
|
30
|
+
readonly handlerFile: string;
|
|
31
|
+
/** Description string from the tool definition literal, if present. */
|
|
32
|
+
readonly description?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Canonical (key-sorted) JSON-encoded `inputSchema` literal harvested
|
|
35
|
+
* from the tool definition object, when present. Absent when the
|
|
36
|
+
* detector can't find a parseable literal nearby.
|
|
37
|
+
*/
|
|
38
|
+
readonly inputSchemaJson?: string;
|
|
39
|
+
}
|
|
40
|
+
/** A file -> ORM model call edge discovered by regex scan. */
|
|
41
|
+
export interface ExtractedOrmEdge {
|
|
42
|
+
/** Repo-relative path to the caller. */
|
|
43
|
+
readonly callerFile: string;
|
|
44
|
+
/** Model / table identifier as written in source. */
|
|
45
|
+
readonly modelName: string;
|
|
46
|
+
/** Operation identifier (e.g. "findMany", "create", "select"). */
|
|
47
|
+
readonly operation: string;
|
|
48
|
+
/** ORM family this edge belongs to. */
|
|
49
|
+
readonly orm: "prisma" | "supabase";
|
|
50
|
+
/** Detector confidence in [0, 1]. */
|
|
51
|
+
readonly confidence: number;
|
|
52
|
+
/**
|
|
53
|
+
* Provenance tag: `"receiver-confirmed"` when the receiver type was
|
|
54
|
+
* confirmed via import graph or ts-morph, `"heuristic"` when the emit
|
|
55
|
+
* was based on regex alone (legacy behavior, used only when
|
|
56
|
+
* `strictDetectors` is false and no import map is available).
|
|
57
|
+
*/
|
|
58
|
+
readonly reason?: "receiver-confirmed" | "heuristic";
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Input bundle passed to file-scoped detectors. The `captures` field is
|
|
62
|
+
* reserved for a future AST-driven path and is unused at MVP; detectors rely
|
|
63
|
+
* on the file path and raw UTF-8 content.
|
|
64
|
+
*
|
|
65
|
+
* `importsByFile` + `tsMorphProject` are the P06 plumbing used by the
|
|
66
|
+
* receiver resolver to confirm that a call's receiver truly originates
|
|
67
|
+
* from the framework the detector claims. Both are optional — when
|
|
68
|
+
* absent, detectors fall back to the pre-P06 regex-only behavior unless
|
|
69
|
+
* `strictDetectors` is set.
|
|
70
|
+
*/
|
|
71
|
+
export interface ExtractInput {
|
|
72
|
+
readonly filePath: string;
|
|
73
|
+
readonly content: string;
|
|
74
|
+
readonly captures?: readonly unknown[];
|
|
75
|
+
/**
|
|
76
|
+
* Per-file import declarations the parse phase already extracted.
|
|
77
|
+
* Used by the receiver resolver's fast path.
|
|
78
|
+
*/
|
|
79
|
+
readonly importsByFile?: ReadonlyMap<string, readonly import("./receiver-resolver.js").ImportedSymbol[]>;
|
|
80
|
+
/** Optional ts-morph project for the receiver resolver's type-check path. */
|
|
81
|
+
readonly tsMorphProject?: import("./receiver-resolver.js").TsMorphProject;
|
|
82
|
+
/**
|
|
83
|
+
* When `true`, drop heuristic-only matches entirely — detectors emit
|
|
84
|
+
* only records whose receiver resolved successfully. Exposed through
|
|
85
|
+
* the `codehub analyze --strict-detectors` flag.
|
|
86
|
+
*/
|
|
87
|
+
readonly strictDetectors?: boolean;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/extract/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,8DAA8D;IAC9D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,yEAAyE;IACzE,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,0CAA0C;IAC1C,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;CAClG;AAED,8EAA8E;AAC9E,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,6DAA6D;IAC7D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,uEAAuE;IACvE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,8DAA8D;AAC9D,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,qDAAqD;IACrD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,kEAAkE;IAClE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,uCAAuC;IACvC,QAAQ,CAAC,GAAG,EAAE,QAAQ,GAAG,UAAU,CAAC;IACpC,qCAAqC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,WAAW,CAAC;CACtD;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IACvC;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAClC,MAAM,EACN,SAAS,OAAO,wBAAwB,EAAE,cAAc,EAAE,CAC3D,CAAC;IACF,6EAA6E;IAC7E,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,wBAAwB,EAAE,cAAc,CAAC;IAC1E;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACpC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared extraction result shapes for the route / tool / ORM detectors.
|
|
3
|
+
*
|
|
4
|
+
* These types are deliberately minimal: they describe the evidence a detector
|
|
5
|
+
* has discovered in a single file (or, for filesystem-routed frameworks, a
|
|
6
|
+
* group of files) without taking any dependency on the graph schema. The
|
|
7
|
+
* routes / tools / orm pipeline phases turn these records into graph nodes
|
|
8
|
+
* and edges.
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/extract/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @opencodehub/ingestion — indexing pipeline root barrel.
|
|
3
|
+
*
|
|
4
|
+
* Exports the `parse`, `providers`, and `pipeline` subsystems. Extending
|
|
5
|
+
* the default phase set does not change the exported shape.
|
|
6
|
+
*/
|
|
7
|
+
export * as parse from "./parse/index.js";
|
|
8
|
+
export * as pipeline from "./pipeline/index.js";
|
|
9
|
+
export * as providers from "./providers/index.js";
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @opencodehub/ingestion — indexing pipeline root barrel.
|
|
3
|
+
*
|
|
4
|
+
* Exports the `parse`, `providers`, and `pipeline` subsystems. Extending
|
|
5
|
+
* the default phase set does not change the exported shape.
|
|
6
|
+
*/
|
|
7
|
+
export * as parse from "./parse/index.js";
|
|
8
|
+
export * as pipeline from "./pipeline/index.js";
|
|
9
|
+
export * as providers from "./providers/index.js";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* COBOL regex hot path.
|
|
3
|
+
*
|
|
4
|
+
* Pure-function extractor for fixed-format COBOL files (`.cbl`, `.cob`,
|
|
5
|
+
* `.cpy`). Emits {@link CobolElement} records for the five targets that a
|
|
6
|
+
* human reader would use to navigate a legacy mainframe program:
|
|
7
|
+
*
|
|
8
|
+
* - `program-id` — `PROGRAM-ID. <name>.`, one per file
|
|
9
|
+
* - `paragraph` — labels in Area A: `^[ ]{7}[A-Z0-9][A-Z0-9-]*\.`
|
|
10
|
+
* - `perform` — `PERFORM <identifier>`, each occurrence (heuristic
|
|
11
|
+
* CALL-like reference; the enclosing paragraph is the
|
|
12
|
+
* caller)
|
|
13
|
+
* - `copy` — `COPY <name>`, each occurrence (copybook inclusion)
|
|
14
|
+
* - `cics` — `EXEC CICS ... END-EXEC` spans (multi-line aware)
|
|
15
|
+
*
|
|
16
|
+
* ## Fixed-format COBOL refresher
|
|
17
|
+
*
|
|
18
|
+
* Columns 1-6 sequence numbers (ignored)
|
|
19
|
+
* Column 7 indicator area: `*` or `/` = comment line, `-` =
|
|
20
|
+
* continuation, `D` = debugging aid, ` ` = normal
|
|
21
|
+
* Columns 8-11 Area A: divisions, sections, paragraphs
|
|
22
|
+
* Columns 12-72 Area B: statements
|
|
23
|
+
* Columns 73-80 identification (ignored)
|
|
24
|
+
*
|
|
25
|
+
* The default parse path runs at ≤ 1 ms on 1000-line fixtures; a p50
|
|
26
|
+
* regression in that number is a graph-ingestion regression.
|
|
27
|
+
*
|
|
28
|
+
* ## Anti-goals
|
|
29
|
+
*
|
|
30
|
+
* - NOT a full parse: `PERFORM ... THRU ... VARYING`, `COPY ... REPLACING
|
|
31
|
+
* ==tag== BY ==value==`, and nested `EXEC SQL` blocks are all resolved
|
|
32
|
+
* heuristically. The deep-parse path (ProLeap, when wired in) owns the
|
|
33
|
+
* precise AST.
|
|
34
|
+
* - NOT free-format aware: the 99% legacy estate is fixed-format;
|
|
35
|
+
* free-format COBOL (column-0 start) lands with the ProLeap backend.
|
|
36
|
+
* - NO filesystem I/O, NO subprocesses, NO external deps. The function
|
|
37
|
+
* is pure over `(path, content)`.
|
|
38
|
+
*
|
|
39
|
+
* ## Author's note
|
|
40
|
+
*
|
|
41
|
+
* The regex vocabulary here (PROGRAM-ID, PARAGRAPH, PERFORM, COPY, CICS) is
|
|
42
|
+
* explicitly allow-listed in `scripts/check-banned-strings.sh` (U2 in spec
|
|
43
|
+
* 004) because it's the standard public COBOL surface.
|
|
44
|
+
*/
|
|
45
|
+
import type { LanguageId } from "./types.js";
|
|
46
|
+
/** Tag for the kind of construct a {@link CobolElement} describes. */
|
|
47
|
+
export type CobolElementKind = "program-id" | "paragraph" | "perform" | "copy" | "cics";
|
|
48
|
+
/**
|
|
49
|
+
* One element extracted from a COBOL file. The pipeline maps these to
|
|
50
|
+
* `CodeElement` graph nodes downstream (see `pipeline/phases/parse.ts`).
|
|
51
|
+
*
|
|
52
|
+
* Line numbers are 1-indexed. `endLine` equals `startLine` for the
|
|
53
|
+
* single-line PROGRAM-ID, paragraph, PERFORM, and COPY markers; CICS
|
|
54
|
+
* spans cover the `EXEC CICS` → `END-EXEC` range.
|
|
55
|
+
*/
|
|
56
|
+
export interface CobolElement {
|
|
57
|
+
readonly kind: CobolElementKind;
|
|
58
|
+
/** Program name, paragraph label, target identifier, or copybook name. */
|
|
59
|
+
readonly name: string;
|
|
60
|
+
readonly filePath: string;
|
|
61
|
+
readonly startLine: number;
|
|
62
|
+
readonly endLine: number;
|
|
63
|
+
readonly language: LanguageId;
|
|
64
|
+
/** Regex extraction is not a parse; the confidence tier says so. */
|
|
65
|
+
readonly confidence: "heuristic";
|
|
66
|
+
/**
|
|
67
|
+
* Optional human-readable snippet — the matched line (or first line of a
|
|
68
|
+
* multi-line CICS block), whitespace-trimmed. Kept short so graph-node
|
|
69
|
+
* payloads stay deterministic and compact.
|
|
70
|
+
*/
|
|
71
|
+
readonly snippet?: string;
|
|
72
|
+
}
|
|
73
|
+
export interface CobolRegexResult {
|
|
74
|
+
readonly elements: readonly CobolElement[];
|
|
75
|
+
/** Every `COPY <name>` target referenced by this file, deduped + sorted. */
|
|
76
|
+
readonly copybookRefs: readonly string[];
|
|
77
|
+
/** Non-fatal notes (e.g. malformed CICS block). Empty on happy path. */
|
|
78
|
+
readonly diagnostics: readonly string[];
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Parse a COBOL file and return the extracted element set. Pure function;
|
|
82
|
+
* safe to call from any thread / worker.
|
|
83
|
+
*/
|
|
84
|
+
export declare function parseCobolFile(path: string, content: string): CobolRegexResult;
|
|
85
|
+
//# sourceMappingURL=cobol-regex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cobol-regex.d.ts","sourceRoot":"","sources":["../../src/parse/cobol-regex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,sEAAsE;AACtE,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAExF;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,oEAAoE;IACpE,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAgED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,gBAAgB,CA8K9E"}
|