@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,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WASM parser opener (default runtime) + native-availability probe.
|
|
3
|
+
*
|
|
4
|
+
* WASM is the default parse runtime as of Node 24 / M5. The native
|
|
5
|
+
* `tree-sitter` N-API addon is still fully supported and is opt-in via
|
|
6
|
+
* `OCH_NATIVE_PARSER=1` (or `--native-parser` on the CLI) — useful on
|
|
7
|
+
* Node 22 developer boxes where native parsing is measurably faster.
|
|
8
|
+
* Exotic environments (musl-libc Alpine, Cloudflare Workers, sandboxed
|
|
9
|
+
* Electron renderers, AWS Lambda ARM64 custom runtimes, restricted CI)
|
|
10
|
+
* can't load `.node` addons at all; on those hosts the default WASM
|
|
11
|
+
* path Just Works and `isNativeAvailable()` returns false.
|
|
12
|
+
*
|
|
13
|
+
* `openWasmParser(lang)` lazily initializes the web-tree-sitter runtime
|
|
14
|
+
* once per process and resolves the grammar WASM from the installed
|
|
15
|
+
* `tree-sitter-<lang>` package. Per-grammar cache means repeated calls
|
|
16
|
+
* are O(1).
|
|
17
|
+
*
|
|
18
|
+
* Query execution uses the same unified S-expression bodies from
|
|
19
|
+
* `unified-queries.ts`; the parse-phase consumer receives byte-
|
|
20
|
+
* identical ParseCapture output whether the runtime was native or WASM
|
|
21
|
+
* (asserted by the parity test in `wasm-parity.test.ts`).
|
|
22
|
+
*/
|
|
23
|
+
import type { LanguageId } from "./types.js";
|
|
24
|
+
/**
|
|
25
|
+
* Returns true when `require('tree-sitter')` succeeds in the current process.
|
|
26
|
+
* Result is cached — subsequent calls are O(1).
|
|
27
|
+
*
|
|
28
|
+
* Call this at worker startup rather than on every parse.
|
|
29
|
+
*/
|
|
30
|
+
export declare function isNativeAvailable(): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* For tests and diagnostics: reset the cached detection result.
|
|
33
|
+
*/
|
|
34
|
+
export declare function resetNativeAvailabilityCache(): void;
|
|
35
|
+
/**
|
|
36
|
+
* Minimal shape of what `openWasmParser` returns — enough to run the
|
|
37
|
+
* same capture loop the native worker implements. Intentionally
|
|
38
|
+
* decoupled from the `web-tree-sitter` types so test code can stub it.
|
|
39
|
+
*/
|
|
40
|
+
export interface WasmParserHandle {
|
|
41
|
+
readonly language: LanguageId;
|
|
42
|
+
/** Parse a source string and return the underlying tree. */
|
|
43
|
+
parse(source: string): WasmTree;
|
|
44
|
+
/**
|
|
45
|
+
* Execute the unified query and return the flat capture list. Callers
|
|
46
|
+
* translate into `ParseCapture` via the normal coordinate remapping
|
|
47
|
+
* (1-indexed lines, 0-indexed columns).
|
|
48
|
+
*/
|
|
49
|
+
runQuery(queryText: string, source: string): readonly WasmCapture[];
|
|
50
|
+
}
|
|
51
|
+
export interface WasmTree {
|
|
52
|
+
readonly rootNode: WasmNode;
|
|
53
|
+
}
|
|
54
|
+
export interface WasmNode {
|
|
55
|
+
readonly type: string;
|
|
56
|
+
readonly text: string;
|
|
57
|
+
readonly startPosition: {
|
|
58
|
+
readonly row: number;
|
|
59
|
+
readonly column: number;
|
|
60
|
+
};
|
|
61
|
+
readonly endPosition: {
|
|
62
|
+
readonly row: number;
|
|
63
|
+
readonly column: number;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export interface WasmCapture {
|
|
67
|
+
readonly name: string;
|
|
68
|
+
readonly node: WasmNode;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Attempt to open a WASM-backed parser for `lang`. Returns `null` when
|
|
72
|
+
* either the `web-tree-sitter` runtime or the grammar's bundled `.wasm`
|
|
73
|
+
* could not be resolved — callers log a debug note and skip that file.
|
|
74
|
+
*/
|
|
75
|
+
export declare function openWasmParser(lang: LanguageId): Promise<WasmParserHandle | null>;
|
|
76
|
+
/**
|
|
77
|
+
* Test hook: clear the per-process WASM parser cache. Never call in
|
|
78
|
+
* production paths — it would force a re-init of every grammar.
|
|
79
|
+
*/
|
|
80
|
+
export declare function _resetWasmCacheForTests(): void;
|
|
81
|
+
/**
|
|
82
|
+
* Test hook: expose the grammar-path resolver so unit tests can assert
|
|
83
|
+
* the two-stage cascade (per-grammar package → tree-sitter-wasms
|
|
84
|
+
* catalog) resolves kotlin/swift/dart correctly. Not part of the public
|
|
85
|
+
* API — callers in production paths must go through `openWasmParser`.
|
|
86
|
+
*/
|
|
87
|
+
export declare function _resolveGrammarWasmPathForTests(lang: LanguageId): string | undefined;
|
|
88
|
+
//# sourceMappingURL=wasm-fallback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-fallback.d.ts","sourceRoot":"","sources":["../../src/parse/wasm-fallback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAgB7C;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAW3C;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD;AAMD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,4DAA4D;IAC5D,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,WAAW,EAAE,CAAC;CACrE;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1E,QAAQ,CAAC,WAAW,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACzE;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;CACzB;AAsCD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAwCvF;AA+HD;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAG9C;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAEpF"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WASM parser opener (default runtime) + native-availability probe.
|
|
3
|
+
*
|
|
4
|
+
* WASM is the default parse runtime as of Node 24 / M5. The native
|
|
5
|
+
* `tree-sitter` N-API addon is still fully supported and is opt-in via
|
|
6
|
+
* `OCH_NATIVE_PARSER=1` (or `--native-parser` on the CLI) — useful on
|
|
7
|
+
* Node 22 developer boxes where native parsing is measurably faster.
|
|
8
|
+
* Exotic environments (musl-libc Alpine, Cloudflare Workers, sandboxed
|
|
9
|
+
* Electron renderers, AWS Lambda ARM64 custom runtimes, restricted CI)
|
|
10
|
+
* can't load `.node` addons at all; on those hosts the default WASM
|
|
11
|
+
* path Just Works and `isNativeAvailable()` returns false.
|
|
12
|
+
*
|
|
13
|
+
* `openWasmParser(lang)` lazily initializes the web-tree-sitter runtime
|
|
14
|
+
* once per process and resolves the grammar WASM from the installed
|
|
15
|
+
* `tree-sitter-<lang>` package. Per-grammar cache means repeated calls
|
|
16
|
+
* are O(1).
|
|
17
|
+
*
|
|
18
|
+
* Query execution uses the same unified S-expression bodies from
|
|
19
|
+
* `unified-queries.ts`; the parse-phase consumer receives byte-
|
|
20
|
+
* identical ParseCapture output whether the runtime was native or WASM
|
|
21
|
+
* (asserted by the parity test in `wasm-parity.test.ts`).
|
|
22
|
+
*/
|
|
23
|
+
import { createRequire } from "node:module";
|
|
24
|
+
import path from "node:path";
|
|
25
|
+
import { fileURLToPath } from "node:url";
|
|
26
|
+
const requireFn = createRequire(import.meta.url);
|
|
27
|
+
// Resolve packages/ingestion/vendor/wasms/ relative to this module regardless
|
|
28
|
+
// of whether we're running from src/ (ts-node-style) or dist/ (compiled).
|
|
29
|
+
// `vendor/` lives at the package root, so we walk up from the file's dirname
|
|
30
|
+
// until we find it. Computed once at module load.
|
|
31
|
+
const VENDOR_WASMS_DIR = (() => {
|
|
32
|
+
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
33
|
+
// src → <pkg>/src/parse; dist → <pkg>/dist/parse — both 2 levels up
|
|
34
|
+
return path.resolve(here, "..", "..", "vendor", "wasms");
|
|
35
|
+
})();
|
|
36
|
+
let cached;
|
|
37
|
+
/**
|
|
38
|
+
* Returns true when `require('tree-sitter')` succeeds in the current process.
|
|
39
|
+
* Result is cached — subsequent calls are O(1).
|
|
40
|
+
*
|
|
41
|
+
* Call this at worker startup rather than on every parse.
|
|
42
|
+
*/
|
|
43
|
+
export function isNativeAvailable() {
|
|
44
|
+
if (cached !== undefined) {
|
|
45
|
+
return cached;
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
requireFn("tree-sitter");
|
|
49
|
+
cached = true;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
cached = false;
|
|
53
|
+
}
|
|
54
|
+
return cached;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* For tests and diagnostics: reset the cached detection result.
|
|
58
|
+
*/
|
|
59
|
+
export function resetNativeAvailabilityCache() {
|
|
60
|
+
cached = undefined;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Per-LanguageId cache of WASM grammar handles. Populated lazily.
|
|
64
|
+
* `null` entries mean "tried and failed" — we don't retry forever.
|
|
65
|
+
*/
|
|
66
|
+
const wasmCache = new Map();
|
|
67
|
+
let wasmRuntime;
|
|
68
|
+
/**
|
|
69
|
+
* Attempt to open a WASM-backed parser for `lang`. Returns `null` when
|
|
70
|
+
* either the `web-tree-sitter` runtime or the grammar's bundled `.wasm`
|
|
71
|
+
* could not be resolved — callers log a debug note and skip that file.
|
|
72
|
+
*/
|
|
73
|
+
export async function openWasmParser(lang) {
|
|
74
|
+
const cached = wasmCache.get(lang);
|
|
75
|
+
if (cached !== undefined)
|
|
76
|
+
return cached;
|
|
77
|
+
try {
|
|
78
|
+
const runtime = await ensureWasmRuntime();
|
|
79
|
+
if (runtime === undefined) {
|
|
80
|
+
wasmCache.set(lang, null);
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
const wasmPath = resolveGrammarWasmPath(lang);
|
|
84
|
+
if (wasmPath === undefined) {
|
|
85
|
+
wasmCache.set(lang, null);
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
const tsLanguage = await runtime.Language.load(wasmPath);
|
|
89
|
+
const Parser = runtime.Parser;
|
|
90
|
+
const parser = new Parser();
|
|
91
|
+
parser.setLanguage(tsLanguage);
|
|
92
|
+
const handle = {
|
|
93
|
+
language: lang,
|
|
94
|
+
parse: (source) => parser.parse(source),
|
|
95
|
+
runQuery: (queryText, source) => {
|
|
96
|
+
// Fresh Query per call so state stays clean between bodies.
|
|
97
|
+
// Query construction is cheap relative to the parse itself.
|
|
98
|
+
const q = new runtime.Query(tsLanguage, queryText);
|
|
99
|
+
const tree = parser.parse(source);
|
|
100
|
+
const out = [];
|
|
101
|
+
for (const m of q.matches(tree.rootNode)) {
|
|
102
|
+
for (const cap of m.captures)
|
|
103
|
+
out.push(cap);
|
|
104
|
+
}
|
|
105
|
+
return out;
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
wasmCache.set(lang, handle);
|
|
109
|
+
return handle;
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
wasmCache.set(lang, null);
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Load the web-tree-sitter runtime on demand and initialize it. Returns
|
|
118
|
+
* `undefined` when the package isn't installed or the runtime refuses to
|
|
119
|
+
* init (sandboxed, missing WebAssembly, etc.).
|
|
120
|
+
*/
|
|
121
|
+
async function ensureWasmRuntime() {
|
|
122
|
+
if (wasmRuntime?.initialized === true)
|
|
123
|
+
return wasmRuntime;
|
|
124
|
+
let mod;
|
|
125
|
+
try {
|
|
126
|
+
mod = requireFn("web-tree-sitter");
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
if (typeof mod.Parser.init === "function") {
|
|
133
|
+
await mod.Parser.init();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
wasmRuntime = {
|
|
140
|
+
Parser: mod.Parser,
|
|
141
|
+
Query: mod.Query,
|
|
142
|
+
Language: mod.Language,
|
|
143
|
+
initialized: true,
|
|
144
|
+
};
|
|
145
|
+
return wasmRuntime;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Resolve the `.wasm` grammar asset for `lang`. Two-stage cascade:
|
|
149
|
+
*
|
|
150
|
+
* 1. Per-grammar-package lookup — for the 11 languages whose
|
|
151
|
+
* `tree-sitter-<lang>` npm package ships its own `.wasm` alongside
|
|
152
|
+
* the `.node` addon (typescript, tsx, javascript, python, go, rust,
|
|
153
|
+
* java, csharp, c, cpp, ruby, php).
|
|
154
|
+
* 2. Vendored-WASM fallback — for kotlin, swift, and dart, whose
|
|
155
|
+
* per-grammar packages do NOT ship a `.wasm`. We build these once
|
|
156
|
+
* from the same grammar sources npm pins (zero drift) and commit
|
|
157
|
+
* them to `packages/ingestion/vendor/wasms/`. See
|
|
158
|
+
* `scripts/build-vendor-wasms.sh` and `vendor/wasms/README.md`.
|
|
159
|
+
*
|
|
160
|
+
* Returns `undefined` when neither stage resolves (package not
|
|
161
|
+
* installed, or language not in either table).
|
|
162
|
+
*/
|
|
163
|
+
function resolveGrammarWasmPath(lang) {
|
|
164
|
+
const direct = tryPerGrammarPackage(lang);
|
|
165
|
+
if (direct !== undefined)
|
|
166
|
+
return direct;
|
|
167
|
+
return tryVendoredWasm(lang);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Stage 1: resolve a `.wasm` that ships inside the per-grammar
|
|
171
|
+
* `tree-sitter-<lang>` npm package. Returns `undefined` when the
|
|
172
|
+
* language has no entry in this table or the package is not installed.
|
|
173
|
+
*/
|
|
174
|
+
function tryPerGrammarPackage(lang) {
|
|
175
|
+
// `tree-sitter-typescript` ships two wasms in one package — select by
|
|
176
|
+
// language variant.
|
|
177
|
+
if (lang === "typescript" || lang === "tsx") {
|
|
178
|
+
const pkgDir = resolvePackageDir("tree-sitter-typescript");
|
|
179
|
+
if (pkgDir === undefined)
|
|
180
|
+
return undefined;
|
|
181
|
+
const fname = lang === "typescript" ? "tree-sitter-typescript.wasm" : "tree-sitter-tsx.wasm";
|
|
182
|
+
return path.join(pkgDir, fname);
|
|
183
|
+
}
|
|
184
|
+
const mapping = {
|
|
185
|
+
javascript: { pkg: "tree-sitter-javascript", file: "tree-sitter-javascript.wasm" },
|
|
186
|
+
python: { pkg: "tree-sitter-python", file: "tree-sitter-python.wasm" },
|
|
187
|
+
go: { pkg: "tree-sitter-go", file: "tree-sitter-go.wasm" },
|
|
188
|
+
rust: { pkg: "tree-sitter-rust", file: "tree-sitter-rust.wasm" },
|
|
189
|
+
java: { pkg: "tree-sitter-java", file: "tree-sitter-java.wasm" },
|
|
190
|
+
// c-sharp publishes `tree-sitter-c_sharp.wasm` (underscore, not hyphen).
|
|
191
|
+
csharp: { pkg: "tree-sitter-c-sharp", file: "tree-sitter-c_sharp.wasm" },
|
|
192
|
+
c: { pkg: "tree-sitter-c", file: "tree-sitter-c.wasm" },
|
|
193
|
+
cpp: { pkg: "tree-sitter-cpp", file: "tree-sitter-cpp.wasm" },
|
|
194
|
+
ruby: { pkg: "tree-sitter-ruby", file: "tree-sitter-ruby.wasm" },
|
|
195
|
+
// Use php_only (pure PHP, no HTML template injection) to match native loader (grammar-registry.ts:244-254).
|
|
196
|
+
php: { pkg: "tree-sitter-php", file: "tree-sitter-php_only.wasm" },
|
|
197
|
+
};
|
|
198
|
+
const entry = mapping[lang];
|
|
199
|
+
if (entry === undefined)
|
|
200
|
+
return undefined;
|
|
201
|
+
const pkgDir = resolvePackageDir(entry.pkg);
|
|
202
|
+
if (pkgDir === undefined)
|
|
203
|
+
return undefined;
|
|
204
|
+
return path.join(pkgDir, entry.file);
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Stage 2: resolve from the vendored WASM directory at
|
|
208
|
+
* `packages/ingestion/vendor/wasms/`. Only opted-in for languages whose
|
|
209
|
+
* per-grammar npm package does NOT ship a `.wasm` — kotlin, swift, dart.
|
|
210
|
+
*
|
|
211
|
+
* These are built once from the same grammar sources our package.json
|
|
212
|
+
* pins (zero version drift vs native) and committed to the repo. The
|
|
213
|
+
* upstream `tree-sitter-wasms` catalog can't be used because its 0.1.13
|
|
214
|
+
* artifacts were built with tree-sitter-cli 0.20.x and ship the legacy
|
|
215
|
+
* `dylink` section, which web-tree-sitter 0.26+ refuses to load (it
|
|
216
|
+
* requires the standardized `dylink.0` section).
|
|
217
|
+
*
|
|
218
|
+
* Keep this table minimal — adding a language here is a deliberate
|
|
219
|
+
* architectural choice. See `scripts/build-vendor-wasms.sh`.
|
|
220
|
+
*/
|
|
221
|
+
function tryVendoredWasm(lang) {
|
|
222
|
+
const catalog = {
|
|
223
|
+
kotlin: "tree-sitter-kotlin.wasm",
|
|
224
|
+
swift: "tree-sitter-swift.wasm",
|
|
225
|
+
dart: "tree-sitter-dart.wasm",
|
|
226
|
+
};
|
|
227
|
+
const fname = catalog[lang];
|
|
228
|
+
if (fname === undefined)
|
|
229
|
+
return undefined;
|
|
230
|
+
return path.join(VENDOR_WASMS_DIR, fname);
|
|
231
|
+
}
|
|
232
|
+
function resolvePackageDir(pkgName) {
|
|
233
|
+
try {
|
|
234
|
+
const manifestPath = requireFn.resolve(`${pkgName}/package.json`);
|
|
235
|
+
return path.dirname(manifestPath);
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
return undefined;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Test hook: clear the per-process WASM parser cache. Never call in
|
|
243
|
+
* production paths — it would force a re-init of every grammar.
|
|
244
|
+
*/
|
|
245
|
+
export function _resetWasmCacheForTests() {
|
|
246
|
+
wasmCache.clear();
|
|
247
|
+
wasmRuntime = undefined;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Test hook: expose the grammar-path resolver so unit tests can assert
|
|
251
|
+
* the two-stage cascade (per-grammar package → tree-sitter-wasms
|
|
252
|
+
* catalog) resolves kotlin/swift/dart correctly. Not part of the public
|
|
253
|
+
* API — callers in production paths must go through `openWasmParser`.
|
|
254
|
+
*/
|
|
255
|
+
export function _resolveGrammarWasmPathForTests(lang) {
|
|
256
|
+
return resolveGrammarWasmPath(lang);
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=wasm-fallback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-fallback.js","sourceRoot":"","sources":["../../src/parse/wasm-fallback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Piscina-backed worker pool wrapper with byte-budget chunking.
|
|
3
|
+
*
|
|
4
|
+
* Callers pass a list of tasks; the pool chunks them into batches respecting
|
|
5
|
+
* a byte budget (default 20 MB) and file cap (default 200 files), dispatches
|
|
6
|
+
* each batch to one worker, and collects the results. Output is sorted by
|
|
7
|
+
* `filePath` so two runs with identical inputs produce byte-identical output
|
|
8
|
+
* regardless of worker completion order.
|
|
9
|
+
*
|
|
10
|
+
* Sizing: by default `maxThreads = clamp(os.availableParallelism(), 2, 8)`.
|
|
11
|
+
* Beyond 8 the bottleneck shifts to main-thread GC pressure and file I/O, so
|
|
12
|
+
* we cap there. Callers can override.
|
|
13
|
+
*/
|
|
14
|
+
import type { ParseResult, ParseTask } from "./types.js";
|
|
15
|
+
/** Options for a single dispatch() call. */
|
|
16
|
+
export interface DispatchOptions {
|
|
17
|
+
/** Max cumulative bytes per worker batch. Default 20 MB. */
|
|
18
|
+
readonly byteBudget?: number;
|
|
19
|
+
/** Max files per worker batch (guards against many-tiny-files). Default 200. */
|
|
20
|
+
readonly fileCap?: number;
|
|
21
|
+
}
|
|
22
|
+
/** Options passed at pool construction. */
|
|
23
|
+
export interface ParsePoolOptions {
|
|
24
|
+
readonly minThreads?: number;
|
|
25
|
+
readonly maxThreads?: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Main-thread wrapper around the piscina pool.
|
|
29
|
+
*/
|
|
30
|
+
export declare class ParsePool {
|
|
31
|
+
#private;
|
|
32
|
+
constructor(opts?: ParsePoolOptions);
|
|
33
|
+
/**
|
|
34
|
+
* Dispatch a set of parse tasks across the pool.
|
|
35
|
+
*
|
|
36
|
+
* Results are always sorted by `filePath` so output is deterministic
|
|
37
|
+
* regardless of worker completion order.
|
|
38
|
+
*/
|
|
39
|
+
dispatch(tasks: readonly ParseTask[], opts?: DispatchOptions): Promise<readonly ParseResult[]>;
|
|
40
|
+
/** Shut down the pool; pending tasks are aborted. */
|
|
41
|
+
destroy(): Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Walk tasks in input order, accumulating into batches until either the
|
|
45
|
+
* byte budget or file cap is reached. Exported for testing.
|
|
46
|
+
*/
|
|
47
|
+
export declare function chunkTasks(tasks: readonly ParseTask[], byteBudget: number, fileCap: number): ParseTask[][];
|
|
48
|
+
//# sourceMappingURL=worker-pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-pool.d.ts","sourceRoot":"","sources":["../../src/parse/worker-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAc,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAMrE,4CAA4C;AAC5C,MAAM,WAAW,eAAe;IAC9B,4DAA4D;IAC5D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,gFAAgF;IAChF,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,2CAA2C;AAC3C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAUD;;GAEG;AACH,qBAAa,SAAS;;gBAGR,IAAI,GAAE,gBAAqB;IAUvC;;;;;OAKG;IACG,QAAQ,CACZ,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC;IAsBlC,qDAAqD;IAC/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,SAAS,EAAE,EAAE,CAwBf"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Piscina-backed worker pool wrapper with byte-budget chunking.
|
|
3
|
+
*
|
|
4
|
+
* Callers pass a list of tasks; the pool chunks them into batches respecting
|
|
5
|
+
* a byte budget (default 20 MB) and file cap (default 200 files), dispatches
|
|
6
|
+
* each batch to one worker, and collects the results. Output is sorted by
|
|
7
|
+
* `filePath` so two runs with identical inputs produce byte-identical output
|
|
8
|
+
* regardless of worker completion order.
|
|
9
|
+
*
|
|
10
|
+
* Sizing: by default `maxThreads = clamp(os.availableParallelism(), 2, 8)`.
|
|
11
|
+
* Beyond 8 the bottleneck shifts to main-thread GC pressure and file I/O, so
|
|
12
|
+
* we cap there. Callers can override.
|
|
13
|
+
*/
|
|
14
|
+
import { availableParallelism } from "node:os";
|
|
15
|
+
import { fileURLToPath } from "node:url";
|
|
16
|
+
import { Piscina } from "piscina";
|
|
17
|
+
// When we compile with tsc, __filename resolution is via import.meta.url.
|
|
18
|
+
// The worker file sits next to this one as `parse-worker.js` in dist/.
|
|
19
|
+
const WORKER_FILENAME = fileURLToPath(new URL("./parse-worker.js", import.meta.url));
|
|
20
|
+
const DEFAULT_BYTE_BUDGET = 20 * 1024 * 1024;
|
|
21
|
+
const DEFAULT_FILE_CAP = 200;
|
|
22
|
+
function defaultMaxThreads() {
|
|
23
|
+
const cpus = availableParallelism();
|
|
24
|
+
return Math.max(2, Math.min(cpus, 8));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Main-thread wrapper around the piscina pool.
|
|
28
|
+
*/
|
|
29
|
+
export class ParsePool {
|
|
30
|
+
#pool;
|
|
31
|
+
constructor(opts = {}) {
|
|
32
|
+
const minThreads = opts.minThreads ?? 2;
|
|
33
|
+
const maxThreads = opts.maxThreads ?? defaultMaxThreads();
|
|
34
|
+
this.#pool = new Piscina({
|
|
35
|
+
filename: WORKER_FILENAME,
|
|
36
|
+
minThreads,
|
|
37
|
+
maxThreads,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Dispatch a set of parse tasks across the pool.
|
|
42
|
+
*
|
|
43
|
+
* Results are always sorted by `filePath` so output is deterministic
|
|
44
|
+
* regardless of worker completion order.
|
|
45
|
+
*/
|
|
46
|
+
async dispatch(tasks, opts = {}) {
|
|
47
|
+
if (tasks.length === 0) {
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
const byteBudget = opts.byteBudget ?? DEFAULT_BYTE_BUDGET;
|
|
51
|
+
const fileCap = opts.fileCap ?? DEFAULT_FILE_CAP;
|
|
52
|
+
const batches = chunkTasks(tasks, byteBudget, fileCap);
|
|
53
|
+
const batchResults = await Promise.all(batches.map((batch) => this.#pool.run({ tasks: batch })));
|
|
54
|
+
const flat = [];
|
|
55
|
+
for (const br of batchResults) {
|
|
56
|
+
for (const r of br) {
|
|
57
|
+
flat.push(r);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
flat.sort((a, b) => (a.filePath < b.filePath ? -1 : a.filePath > b.filePath ? 1 : 0));
|
|
61
|
+
return flat;
|
|
62
|
+
}
|
|
63
|
+
/** Shut down the pool; pending tasks are aborted. */
|
|
64
|
+
async destroy() {
|
|
65
|
+
await this.#pool.destroy();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Walk tasks in input order, accumulating into batches until either the
|
|
70
|
+
* byte budget or file cap is reached. Exported for testing.
|
|
71
|
+
*/
|
|
72
|
+
export function chunkTasks(tasks, byteBudget, fileCap) {
|
|
73
|
+
const batches = [];
|
|
74
|
+
let current = [];
|
|
75
|
+
let currentBytes = 0;
|
|
76
|
+
for (const t of tasks) {
|
|
77
|
+
const size = t.content.byteLength;
|
|
78
|
+
// Flush the current batch BEFORE appending if either:
|
|
79
|
+
// (a) adding this task would meet or exceed the byte budget, or
|
|
80
|
+
// (b) the batch is already full by file count.
|
|
81
|
+
// The `>=` on bytes ensures that when a task's size hits the budget exactly
|
|
82
|
+
// it starts a new batch — matching the documented behavior on borderline
|
|
83
|
+
// inputs such as three 5MB files with a 10MB budget → three batches.
|
|
84
|
+
if (current.length > 0 && (currentBytes + size >= byteBudget || current.length >= fileCap)) {
|
|
85
|
+
batches.push(current);
|
|
86
|
+
current = [];
|
|
87
|
+
currentBytes = 0;
|
|
88
|
+
}
|
|
89
|
+
current.push(t);
|
|
90
|
+
currentBytes += size;
|
|
91
|
+
}
|
|
92
|
+
if (current.length > 0) {
|
|
93
|
+
batches.push(current);
|
|
94
|
+
}
|
|
95
|
+
return batches;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=worker-pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-pool.js","sourceRoot":"","sources":["../../src/parse/worker-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Go ecosystem manifest parser.
|
|
3
|
+
*
|
|
4
|
+
* Supported inputs:
|
|
5
|
+
* - `go.sum` — one module per line, format
|
|
6
|
+
* `<module> <version>[/go.mod] <h1:hash>`
|
|
7
|
+
* We consume only the 2-column (module, version) projection and skip
|
|
8
|
+
* the `/go.mod` discriminator so each module is emitted once.
|
|
9
|
+
* - `go.mod` — uses the text format specified at https://go.dev/ref/mod.
|
|
10
|
+
* We parse the `require` block (single- or multi-line form), capture
|
|
11
|
+
* `<module> <version>` pairs, and skip `replace` / `exclude` directives.
|
|
12
|
+
*
|
|
13
|
+
* The version is the raw Go module pseudo-version string (e.g.
|
|
14
|
+
* `v1.2.3`, or `v0.0.0-20231201123456-abcdef012345`) exactly as it appears
|
|
15
|
+
* in the source file.
|
|
16
|
+
*
|
|
17
|
+
* License detection: neither go.mod nor go.sum carries license metadata.
|
|
18
|
+
* The canonical source is `pkg.go.dev` + the module's `LICENSE` file,
|
|
19
|
+
* both of which live behind a network boundary this phase forbids.
|
|
20
|
+
* Per-dep `license` therefore stays undefined and the dependencies
|
|
21
|
+
* phase maps that to the `"UNKNOWN"` sentinel.
|
|
22
|
+
*/
|
|
23
|
+
import type { ParseDepsFn } from "./types.js";
|
|
24
|
+
export declare const parseGoDeps: ParseDepsFn;
|
|
25
|
+
//# sourceMappingURL=go.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../../src/pipeline/dep-parsers/go.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,YAAY,CAAC;AAIhE,eAAO,MAAM,WAAW,EAAE,WAgBzB,CAAC"}
|