@opensip-cli/graph 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/NOTICE +8 -0
- package/README.md +31 -0
- package/dist/__tests__/baseline-plane.test.d.ts +11 -0
- package/dist/__tests__/baseline-plane.test.d.ts.map +1 -0
- package/dist/__tests__/baseline-plane.test.js +60 -0
- package/dist/__tests__/baseline-plane.test.js.map +1 -0
- package/dist/__tests__/cache/engine-version.test.d.ts +12 -0
- package/dist/__tests__/cache/engine-version.test.d.ts.map +1 -0
- package/dist/__tests__/cache/engine-version.test.js +79 -0
- package/dist/__tests__/cache/engine-version.test.js.map +1 -0
- package/dist/__tests__/cache/invalidate.test.d.ts +9 -0
- package/dist/__tests__/cache/invalidate.test.d.ts.map +1 -0
- package/dist/__tests__/cache/invalidate.test.js +228 -0
- package/dist/__tests__/cache/invalidate.test.js.map +1 -0
- package/dist/__tests__/cli/contribution-from-signals.test.d.ts +17 -0
- package/dist/__tests__/cli/contribution-from-signals.test.d.ts.map +1 -0
- package/dist/__tests__/cli/contribution-from-signals.test.js +89 -0
- package/dist/__tests__/cli/contribution-from-signals.test.js.map +1 -0
- package/dist/__tests__/cli/detect.test.d.ts +2 -0
- package/dist/__tests__/cli/detect.test.d.ts.map +1 -0
- package/dist/__tests__/cli/detect.test.js +96 -0
- package/dist/__tests__/cli/detect.test.js.map +1 -0
- package/dist/__tests__/cli/graph-config.test.d.ts +9 -0
- package/dist/__tests__/cli/graph-config.test.d.ts.map +1 -0
- package/dist/__tests__/cli/graph-config.test.js +113 -0
- package/dist/__tests__/cli/graph-config.test.js.map +1 -0
- package/dist/__tests__/cli/graph-execute.test.d.ts +9 -0
- package/dist/__tests__/cli/graph-execute.test.d.ts.map +1 -0
- package/dist/__tests__/cli/graph-execute.test.js +434 -0
- package/dist/__tests__/cli/graph-execute.test.js.map +1 -0
- package/dist/__tests__/cli/graph.test.d.ts +12 -0
- package/dist/__tests__/cli/graph.test.d.ts.map +1 -0
- package/dist/__tests__/cli/graph.test.js +589 -0
- package/dist/__tests__/cli/graph.test.js.map +1 -0
- package/dist/__tests__/cli/heap-preflight.test.d.ts +11 -0
- package/dist/__tests__/cli/heap-preflight.test.d.ts.map +1 -0
- package/dist/__tests__/cli/heap-preflight.test.js +150 -0
- package/dist/__tests__/cli/heap-preflight.test.js.map +1 -0
- package/dist/__tests__/cli/language-mismatch.test.d.ts +10 -0
- package/dist/__tests__/cli/language-mismatch.test.d.ts.map +1 -0
- package/dist/__tests__/cli/language-mismatch.test.js +155 -0
- package/dist/__tests__/cli/language-mismatch.test.js.map +1 -0
- package/dist/__tests__/cli/lookup.test.d.ts +7 -0
- package/dist/__tests__/cli/lookup.test.d.ts.map +1 -0
- package/dist/__tests__/cli/lookup.test.js +104 -0
- package/dist/__tests__/cli/lookup.test.js.map +1 -0
- package/dist/__tests__/cli/orchestrate.test.d.ts +12 -0
- package/dist/__tests__/cli/orchestrate.test.d.ts.map +1 -0
- package/dist/__tests__/cli/orchestrate.test.js +315 -0
- package/dist/__tests__/cli/orchestrate.test.js.map +1 -0
- package/dist/__tests__/cli/positional-paths.test.d.ts +5 -0
- package/dist/__tests__/cli/positional-paths.test.d.ts.map +1 -0
- package/dist/__tests__/cli/positional-paths.test.js +87 -0
- package/dist/__tests__/cli/positional-paths.test.js.map +1 -0
- package/dist/__tests__/cli/pressure-monitor.test.d.ts +11 -0
- package/dist/__tests__/cli/pressure-monitor.test.d.ts.map +1 -0
- package/dist/__tests__/cli/pressure-monitor.test.js +94 -0
- package/dist/__tests__/cli/pressure-monitor.test.js.map +1 -0
- package/dist/__tests__/cli/sarif-export.test.d.ts +8 -0
- package/dist/__tests__/cli/sarif-export.test.d.ts.map +1 -0
- package/dist/__tests__/cli/sarif-export.test.js +94 -0
- package/dist/__tests__/cli/sarif-export.test.js.map +1 -0
- package/dist/__tests__/cli/session-contract.test.d.ts +17 -0
- package/dist/__tests__/cli/session-contract.test.d.ts.map +1 -0
- package/dist/__tests__/cli/session-contract.test.js +225 -0
- package/dist/__tests__/cli/session-contract.test.js.map +1 -0
- package/dist/__tests__/cli/symbol-index.test.d.ts +7 -0
- package/dist/__tests__/cli/symbol-index.test.d.ts.map +1 -0
- package/dist/__tests__/cli/symbol-index.test.js +117 -0
- package/dist/__tests__/cli/symbol-index.test.js.map +1 -0
- package/dist/__tests__/cli/tool-show-mode.test.d.ts +10 -0
- package/dist/__tests__/cli/tool-show-mode.test.d.ts.map +1 -0
- package/dist/__tests__/cli/tool-show-mode.test.js +128 -0
- package/dist/__tests__/cli/tool-show-mode.test.js.map +1 -0
- package/dist/__tests__/cli/workspace-runner-polyglot.test.d.ts +10 -0
- package/dist/__tests__/cli/workspace-runner-polyglot.test.d.ts.map +1 -0
- package/dist/__tests__/cli/workspace-runner-polyglot.test.js +120 -0
- package/dist/__tests__/cli/workspace-runner-polyglot.test.js.map +1 -0
- package/dist/__tests__/graph-catalog-drift.test.d.ts +24 -0
- package/dist/__tests__/graph-catalog-drift.test.d.ts.map +1 -0
- package/dist/__tests__/graph-catalog-drift.test.js +34 -0
- package/dist/__tests__/graph-catalog-drift.test.js.map +1 -0
- package/dist/__tests__/internal-surface.test.d.ts +17 -0
- package/dist/__tests__/internal-surface.test.d.ts.map +1 -0
- package/dist/__tests__/internal-surface.test.js +45 -0
- package/dist/__tests__/internal-surface.test.js.map +1 -0
- package/dist/__tests__/lang-adapter/body-digest.test.d.ts +13 -0
- package/dist/__tests__/lang-adapter/body-digest.test.d.ts.map +1 -0
- package/dist/__tests__/lang-adapter/body-digest.test.js +51 -0
- package/dist/__tests__/lang-adapter/body-digest.test.js.map +1 -0
- package/dist/__tests__/lang-adapter/edge-helpers.test.d.ts +12 -0
- package/dist/__tests__/lang-adapter/edge-helpers.test.d.ts.map +1 -0
- package/dist/__tests__/lang-adapter/edge-helpers.test.js +147 -0
- package/dist/__tests__/lang-adapter/edge-helpers.test.js.map +1 -0
- package/dist/__tests__/lang-adapter/registry.test.d.ts +9 -0
- package/dist/__tests__/lang-adapter/registry.test.d.ts.map +1 -0
- package/dist/__tests__/lang-adapter/registry.test.js +228 -0
- package/dist/__tests__/lang-adapter/registry.test.js.map +1 -0
- package/dist/__tests__/persistence/catalog-repo.test.d.ts +2 -0
- package/dist/__tests__/persistence/catalog-repo.test.d.ts.map +1 -0
- package/dist/__tests__/persistence/catalog-repo.test.js +188 -0
- package/dist/__tests__/persistence/catalog-repo.test.js.map +1 -0
- package/dist/__tests__/persistence/session-payload.test.d.ts +2 -0
- package/dist/__tests__/persistence/session-payload.test.d.ts.map +1 -0
- package/dist/__tests__/persistence/session-payload.test.js +81 -0
- package/dist/__tests__/persistence/session-payload.test.js.map +1 -0
- package/dist/__tests__/persistence/session-replay.test.d.ts +10 -0
- package/dist/__tests__/persistence/session-replay.test.d.ts.map +1 -0
- package/dist/__tests__/persistence/session-replay.test.js +196 -0
- package/dist/__tests__/persistence/session-replay.test.js.map +1 -0
- package/dist/__tests__/public-api.test.d.ts +19 -0
- package/dist/__tests__/public-api.test.d.ts.map +1 -0
- package/dist/__tests__/public-api.test.js +96 -0
- package/dist/__tests__/public-api.test.js.map +1 -0
- package/dist/__tests__/render/catalog-json-types.test.d.ts +10 -0
- package/dist/__tests__/render/catalog-json-types.test.d.ts.map +1 -0
- package/dist/__tests__/render/catalog-json-types.test.js +121 -0
- package/dist/__tests__/render/catalog-json-types.test.js.map +1 -0
- package/dist/__tests__/render/catalog-json.test.d.ts +19 -0
- package/dist/__tests__/render/catalog-json.test.d.ts.map +1 -0
- package/dist/__tests__/render/catalog-json.test.js +435 -0
- package/dist/__tests__/render/catalog-json.test.js.map +1 -0
- package/dist/__tests__/render/opensip-id-derivation.test.d.ts +21 -0
- package/dist/__tests__/render/opensip-id-derivation.test.d.ts.map +1 -0
- package/dist/__tests__/render/opensip-id-derivation.test.js +159 -0
- package/dist/__tests__/render/opensip-id-derivation.test.js.map +1 -0
- package/dist/__tests__/render/rule-id-mapping.test.d.ts +13 -0
- package/dist/__tests__/render/rule-id-mapping.test.d.ts.map +1 -0
- package/dist/__tests__/render/rule-id-mapping.test.js +50 -0
- package/dist/__tests__/render/rule-id-mapping.test.js.map +1 -0
- package/dist/__tests__/render/sarif-opensip.test.d.ts +20 -0
- package/dist/__tests__/render/sarif-opensip.test.d.ts.map +1 -0
- package/dist/__tests__/render/sarif-opensip.test.js +235 -0
- package/dist/__tests__/render/sarif-opensip.test.js.map +1 -0
- package/dist/__tests__/resolution-mode.test.d.ts +10 -0
- package/dist/__tests__/resolution-mode.test.d.ts.map +1 -0
- package/dist/__tests__/resolution-mode.test.js +96 -0
- package/dist/__tests__/resolution-mode.test.js.map +1 -0
- package/dist/__tests__/resolve-callee.test.d.ts +2 -0
- package/dist/__tests__/resolve-callee.test.d.ts.map +1 -0
- package/dist/__tests__/resolve-callee.test.js +119 -0
- package/dist/__tests__/resolve-callee.test.js.map +1 -0
- package/dist/__tests__/rules/_entry-points.test.d.ts +8 -0
- package/dist/__tests__/rules/_entry-points.test.d.ts.map +1 -0
- package/dist/__tests__/rules/_entry-points.test.js +74 -0
- package/dist/__tests__/rules/_entry-points.test.js.map +1 -0
- package/dist/__tests__/rules/_helpers.d.ts +18 -0
- package/dist/__tests__/rules/_helpers.d.ts.map +1 -0
- package/dist/__tests__/rules/_helpers.js +72 -0
- package/dist/__tests__/rules/_helpers.js.map +1 -0
- package/dist/__tests__/rules/always-throws-branch.test.d.ts +9 -0
- package/dist/__tests__/rules/always-throws-branch.test.d.ts.map +1 -0
- package/dist/__tests__/rules/always-throws-branch.test.js +113 -0
- package/dist/__tests__/rules/always-throws-branch.test.js.map +1 -0
- package/dist/__tests__/rules/cycle-and-coupling.test.d.ts +13 -0
- package/dist/__tests__/rules/cycle-and-coupling.test.d.ts.map +1 -0
- package/dist/__tests__/rules/cycle-and-coupling.test.js +224 -0
- package/dist/__tests__/rules/cycle-and-coupling.test.js.map +1 -0
- package/dist/__tests__/rules/duplicated-function-body-config.test.d.ts +8 -0
- package/dist/__tests__/rules/duplicated-function-body-config.test.d.ts.map +1 -0
- package/dist/__tests__/rules/duplicated-function-body-config.test.js +132 -0
- package/dist/__tests__/rules/duplicated-function-body-config.test.js.map +1 -0
- package/dist/__tests__/rules/duplicated-function-body-cross-package.test.d.ts +10 -0
- package/dist/__tests__/rules/duplicated-function-body-cross-package.test.d.ts.map +1 -0
- package/dist/__tests__/rules/duplicated-function-body-cross-package.test.js +274 -0
- package/dist/__tests__/rules/duplicated-function-body-cross-package.test.js.map +1 -0
- package/dist/__tests__/rules/feature-column-parity.test.d.ts +11 -0
- package/dist/__tests__/rules/feature-column-parity.test.d.ts.map +1 -0
- package/dist/__tests__/rules/feature-column-parity.test.js +169 -0
- package/dist/__tests__/rules/feature-column-parity.test.js.map +1 -0
- package/dist/__tests__/rules/high-blast-untested.test.d.ts +13 -0
- package/dist/__tests__/rules/high-blast-untested.test.d.ts.map +1 -0
- package/dist/__tests__/rules/high-blast-untested.test.js +108 -0
- package/dist/__tests__/rules/high-blast-untested.test.js.map +1 -0
- package/dist/__tests__/rules/large-function.test.d.ts +11 -0
- package/dist/__tests__/rules/large-function.test.d.ts.map +1 -0
- package/dist/__tests__/rules/large-function.test.js +105 -0
- package/dist/__tests__/rules/large-function.test.js.map +1 -0
- package/dist/__tests__/rules/no-side-effect-path.test.d.ts +10 -0
- package/dist/__tests__/rules/no-side-effect-path.test.d.ts.map +1 -0
- package/dist/__tests__/rules/no-side-effect-path.test.js +301 -0
- package/dist/__tests__/rules/no-side-effect-path.test.js.map +1 -0
- package/dist/__tests__/rules/orphan-subtree-config.test.d.ts +8 -0
- package/dist/__tests__/rules/orphan-subtree-config.test.d.ts.map +1 -0
- package/dist/__tests__/rules/orphan-subtree-config.test.js +176 -0
- package/dist/__tests__/rules/orphan-subtree-config.test.js.map +1 -0
- package/dist/__tests__/rules/registry.test.d.ts +11 -0
- package/dist/__tests__/rules/registry.test.d.ts.map +1 -0
- package/dist/__tests__/rules/registry.test.js +50 -0
- package/dist/__tests__/rules/registry.test.js.map +1 -0
- package/dist/__tests__/rules/severity-override.test.d.ts +11 -0
- package/dist/__tests__/rules/severity-override.test.d.ts.map +1 -0
- package/dist/__tests__/rules/severity-override.test.js +67 -0
- package/dist/__tests__/rules/severity-override.test.js.map +1 -0
- package/dist/__tests__/rules/test-only-reachable.test.d.ts +9 -0
- package/dist/__tests__/rules/test-only-reachable.test.d.ts.map +1 -0
- package/dist/__tests__/rules/test-only-reachable.test.js +142 -0
- package/dist/__tests__/rules/test-only-reachable.test.js.map +1 -0
- package/dist/__tests__/rules/wide-function.test.d.ts +9 -0
- package/dist/__tests__/rules/wide-function.test.d.ts.map +1 -0
- package/dist/__tests__/rules/wide-function.test.js +64 -0
- package/dist/__tests__/rules/wide-function.test.js.map +1 -0
- package/dist/__tests__/test-utils/with-graph-scope.d.ts +14 -0
- package/dist/__tests__/test-utils/with-graph-scope.d.ts.map +1 -0
- package/dist/__tests__/test-utils/with-graph-scope.js +26 -0
- package/dist/__tests__/test-utils/with-graph-scope.js.map +1 -0
- package/dist/__tests__/tool-branches.test.d.ts +18 -0
- package/dist/__tests__/tool-branches.test.d.ts.map +1 -0
- package/dist/__tests__/tool-branches.test.js +262 -0
- package/dist/__tests__/tool-branches.test.js.map +1 -0
- package/dist/__tests__/tool-register.test.d.ts +16 -0
- package/dist/__tests__/tool-register.test.d.ts.map +1 -0
- package/dist/__tests__/tool-register.test.js +419 -0
- package/dist/__tests__/tool-register.test.js.map +1 -0
- package/dist/__tests__/tool.test.d.ts +18 -0
- package/dist/__tests__/tool.test.d.ts.map +1 -0
- package/dist/__tests__/tool.test.js +65 -0
- package/dist/__tests__/tool.test.js.map +1 -0
- package/dist/baseline-strategy.d.ts +28 -0
- package/dist/baseline-strategy.d.ts.map +1 -0
- package/dist/baseline-strategy.js +27 -0
- package/dist/baseline-strategy.js.map +1 -0
- package/dist/cache/engine-version.d.ts +69 -0
- package/dist/cache/engine-version.d.ts.map +1 -0
- package/dist/cache/engine-version.js +60 -0
- package/dist/cache/engine-version.js.map +1 -0
- package/dist/cache/invalidate.d.ts +60 -0
- package/dist/cache/invalidate.d.ts.map +1 -0
- package/dist/cache/invalidate.js +120 -0
- package/dist/cache/invalidate.js.map +1 -0
- package/dist/cli/__tests__/build-envelope.test.d.ts +8 -0
- package/dist/cli/__tests__/build-envelope.test.d.ts.map +1 -0
- package/dist/cli/__tests__/build-envelope.test.js +70 -0
- package/dist/cli/__tests__/build-envelope.test.js.map +1 -0
- package/dist/cli/__tests__/dispatch-envelope.test.d.ts +15 -0
- package/dist/cli/__tests__/dispatch-envelope.test.d.ts.map +1 -0
- package/dist/cli/__tests__/dispatch-envelope.test.js +73 -0
- package/dist/cli/__tests__/dispatch-envelope.test.js.map +1 -0
- package/dist/cli/__tests__/dispatch-suppression-root.test.d.ts +18 -0
- package/dist/cli/__tests__/dispatch-suppression-root.test.d.ts.map +1 -0
- package/dist/cli/__tests__/dispatch-suppression-root.test.js +91 -0
- package/dist/cli/__tests__/dispatch-suppression-root.test.js.map +1 -0
- package/dist/cli/__tests__/graph-config-schema.test.d.ts +7 -0
- package/dist/cli/__tests__/graph-config-schema.test.d.ts.map +1 -0
- package/dist/cli/__tests__/graph-config-schema.test.js +60 -0
- package/dist/cli/__tests__/graph-config-schema.test.js.map +1 -0
- package/dist/cli/__tests__/graph-gate-mode.test.d.ts +15 -0
- package/dist/cli/__tests__/graph-gate-mode.test.d.ts.map +1 -0
- package/dist/cli/__tests__/graph-gate-mode.test.js +99 -0
- package/dist/cli/__tests__/graph-gate-mode.test.js.map +1 -0
- package/dist/cli/__tests__/graph-recipes.test.d.ts +7 -0
- package/dist/cli/__tests__/graph-recipes.test.d.ts.map +1 -0
- package/dist/cli/__tests__/graph-recipes.test.js +24 -0
- package/dist/cli/__tests__/graph-recipes.test.js.map +1 -0
- package/dist/cli/__tests__/graph-report.test.d.ts +7 -0
- package/dist/cli/__tests__/graph-report.test.d.ts.map +1 -0
- package/dist/cli/__tests__/graph-report.test.js +138 -0
- package/dist/cli/__tests__/graph-report.test.js.map +1 -0
- package/dist/cli/__tests__/graph-tracer.test.d.ts +11 -0
- package/dist/cli/__tests__/graph-tracer.test.d.ts.map +1 -0
- package/dist/cli/__tests__/graph-tracer.test.js +41 -0
- package/dist/cli/__tests__/graph-tracer.test.js.map +1 -0
- package/dist/cli/__tests__/graph-worker.test.d.ts +13 -0
- package/dist/cli/__tests__/graph-worker.test.d.ts.map +1 -0
- package/dist/cli/__tests__/graph-worker.test.js +127 -0
- package/dist/cli/__tests__/graph-worker.test.js.map +1 -0
- package/dist/cli/__tests__/list-files.test.d.ts +12 -0
- package/dist/cli/__tests__/list-files.test.d.ts.map +1 -0
- package/dist/cli/__tests__/list-files.test.js +146 -0
- package/dist/cli/__tests__/list-files.test.js.map +1 -0
- package/dist/cli/__tests__/live-suppression-parity.test.d.ts +23 -0
- package/dist/cli/__tests__/live-suppression-parity.test.d.ts.map +1 -0
- package/dist/cli/__tests__/live-suppression-parity.test.js +136 -0
- package/dist/cli/__tests__/live-suppression-parity.test.js.map +1 -0
- package/dist/cli/__tests__/orchestrate-spans.test.d.ts +18 -0
- package/dist/cli/__tests__/orchestrate-spans.test.d.ts.map +1 -0
- package/dist/cli/__tests__/orchestrate-spans.test.js +108 -0
- package/dist/cli/__tests__/orchestrate-spans.test.js.map +1 -0
- package/dist/cli/__tests__/shard-worker.test.d.ts +10 -0
- package/dist/cli/__tests__/shard-worker.test.d.ts.map +1 -0
- package/dist/cli/__tests__/shard-worker.test.js +153 -0
- package/dist/cli/__tests__/shard-worker.test.js.map +1 -0
- package/dist/cli/__tests__/workspace-report.test.d.ts +6 -0
- package/dist/cli/__tests__/workspace-report.test.d.ts.map +1 -0
- package/dist/cli/__tests__/workspace-report.test.js +89 -0
- package/dist/cli/__tests__/workspace-report.test.js.map +1 -0
- package/dist/cli/apply-suppressions.d.ts +86 -0
- package/dist/cli/apply-suppressions.d.ts.map +1 -0
- package/dist/cli/apply-suppressions.js +101 -0
- package/dist/cli/apply-suppressions.js.map +1 -0
- package/dist/cli/apply-suppressions.test.d.ts +12 -0
- package/dist/cli/apply-suppressions.test.d.ts.map +1 -0
- package/dist/cli/apply-suppressions.test.js +85 -0
- package/dist/cli/apply-suppressions.test.js.map +1 -0
- package/dist/cli/build-envelope.d.ts +53 -0
- package/dist/cli/build-envelope.d.ts.map +1 -0
- package/dist/cli/build-envelope.js +88 -0
- package/dist/cli/build-envelope.js.map +1 -0
- package/dist/cli/detect.d.ts +37 -0
- package/dist/cli/detect.d.ts.map +1 -0
- package/dist/cli/detect.js +60 -0
- package/dist/cli/detect.js.map +1 -0
- package/dist/cli/equivalence-check-command.d.ts +45 -0
- package/dist/cli/equivalence-check-command.d.ts.map +1 -0
- package/dist/cli/equivalence-check-command.js +196 -0
- package/dist/cli/equivalence-check-command.js.map +1 -0
- package/dist/cli/graph/graph-aux-command-specs.d.ts +60 -0
- package/dist/cli/graph/graph-aux-command-specs.d.ts.map +1 -0
- package/dist/cli/graph/graph-aux-command-specs.js +390 -0
- package/dist/cli/graph/graph-aux-command-specs.js.map +1 -0
- package/dist/cli/graph/graph-command-spec.d.ts +43 -0
- package/dist/cli/graph/graph-command-spec.d.ts.map +1 -0
- package/dist/cli/graph/graph-command-spec.js +456 -0
- package/dist/cli/graph/graph-command-spec.js.map +1 -0
- package/dist/cli/graph-config-schema.d.ts +70 -0
- package/dist/cli/graph-config-schema.d.ts.map +1 -0
- package/dist/cli/graph-config-schema.js +68 -0
- package/dist/cli/graph-config-schema.js.map +1 -0
- package/dist/cli/graph-config.d.ts +53 -0
- package/dist/cli/graph-config.d.ts.map +1 -0
- package/dist/cli/graph-config.js +111 -0
- package/dist/cli/graph-config.js.map +1 -0
- package/dist/cli/graph-modes.d.ts +36 -0
- package/dist/cli/graph-modes.d.ts.map +1 -0
- package/dist/cli/graph-modes.js +161 -0
- package/dist/cli/graph-modes.js.map +1 -0
- package/dist/cli/graph-options.d.ts +143 -0
- package/dist/cli/graph-options.d.ts.map +1 -0
- package/dist/cli/graph-options.js +15 -0
- package/dist/cli/graph-options.js.map +1 -0
- package/dist/cli/graph-progress.d.ts +31 -0
- package/dist/cli/graph-progress.d.ts.map +1 -0
- package/dist/cli/graph-progress.js +56 -0
- package/dist/cli/graph-progress.js.map +1 -0
- package/dist/cli/graph-recipes.d.ts +23 -0
- package/dist/cli/graph-recipes.d.ts.map +1 -0
- package/dist/cli/graph-recipes.js +44 -0
- package/dist/cli/graph-recipes.js.map +1 -0
- package/dist/cli/graph-report.d.ts +79 -0
- package/dist/cli/graph-report.d.ts.map +1 -0
- package/dist/cli/graph-report.js +186 -0
- package/dist/cli/graph-report.js.map +1 -0
- package/dist/cli/graph-runner.d.ts +106 -0
- package/dist/cli/graph-runner.d.ts.map +1 -0
- package/dist/cli/graph-runner.js +274 -0
- package/dist/cli/graph-runner.js.map +1 -0
- package/dist/cli/graph-tracer.d.ts +27 -0
- package/dist/cli/graph-tracer.d.ts.map +1 -0
- package/dist/cli/graph-tracer.js +33 -0
- package/dist/cli/graph-tracer.js.map +1 -0
- package/dist/cli/graph-worker.d.ts +29 -0
- package/dist/cli/graph-worker.d.ts.map +1 -0
- package/dist/cli/graph-worker.js +86 -0
- package/dist/cli/graph-worker.js.map +1 -0
- package/dist/cli/graph.d.ts +171 -0
- package/dist/cli/graph.d.ts.map +1 -0
- package/dist/cli/graph.js +1041 -0
- package/dist/cli/graph.js.map +1 -0
- package/dist/cli/heap-preflight.d.ts +62 -0
- package/dist/cli/heap-preflight.d.ts.map +1 -0
- package/dist/cli/heap-preflight.js +176 -0
- package/dist/cli/heap-preflight.js.map +1 -0
- package/dist/cli/list-files.d.ts +37 -0
- package/dist/cli/list-files.d.ts.map +1 -0
- package/dist/cli/list-files.js +166 -0
- package/dist/cli/list-files.js.map +1 -0
- package/dist/cli/lookup.d.ts +19 -0
- package/dist/cli/lookup.d.ts.map +1 -0
- package/dist/cli/lookup.js +87 -0
- package/dist/cli/lookup.js.map +1 -0
- package/dist/cli/orchestrate/__tests__/_equivalence-harness.d.ts +47 -0
- package/dist/cli/orchestrate/__tests__/_equivalence-harness.d.ts.map +1 -0
- package/dist/cli/orchestrate/__tests__/_equivalence-harness.js +331 -0
- package/dist/cli/orchestrate/__tests__/_equivalence-harness.js.map +1 -0
- package/dist/cli/orchestrate/__tests__/_flat-large-fixture.d.ts +69 -0
- package/dist/cli/orchestrate/__tests__/_flat-large-fixture.d.ts.map +1 -0
- package/dist/cli/orchestrate/__tests__/_flat-large-fixture.js +181 -0
- package/dist/cli/orchestrate/__tests__/_flat-large-fixture.js.map +1 -0
- package/dist/cli/orchestrate/__tests__/canonical-file-set.test.d.ts +8 -0
- package/dist/cli/orchestrate/__tests__/canonical-file-set.test.d.ts.map +1 -0
- package/dist/cli/orchestrate/__tests__/canonical-file-set.test.js +51 -0
- package/dist/cli/orchestrate/__tests__/canonical-file-set.test.js.map +1 -0
- package/dist/cli/orchestrate/__tests__/catalog-builder-incremental.test.d.ts +9 -0
- package/dist/cli/orchestrate/__tests__/catalog-builder-incremental.test.d.ts.map +1 -0
- package/dist/cli/orchestrate/__tests__/catalog-builder-incremental.test.js +147 -0
- package/dist/cli/orchestrate/__tests__/catalog-builder-incremental.test.js.map +1 -0
- package/dist/cli/orchestrate/__tests__/cross-shard-resolve.test.d.ts +12 -0
- package/dist/cli/orchestrate/__tests__/cross-shard-resolve.test.d.ts.map +1 -0
- package/dist/cli/orchestrate/__tests__/cross-shard-resolve.test.js +509 -0
- package/dist/cli/orchestrate/__tests__/cross-shard-resolve.test.js.map +1 -0
- package/dist/cli/orchestrate/__tests__/determinism.test.d.ts +19 -0
- package/dist/cli/orchestrate/__tests__/determinism.test.d.ts.map +1 -0
- package/dist/cli/orchestrate/__tests__/determinism.test.js +163 -0
- package/dist/cli/orchestrate/__tests__/determinism.test.js.map +1 -0
- package/dist/cli/orchestrate/__tests__/edge-identity.test.d.ts +9 -0
- package/dist/cli/orchestrate/__tests__/edge-identity.test.d.ts.map +1 -0
- package/dist/cli/orchestrate/__tests__/edge-identity.test.js +103 -0
- package/dist/cli/orchestrate/__tests__/edge-identity.test.js.map +1 -0
- package/dist/cli/orchestrate/__tests__/equivalence-check.test.d.ts +10 -0
- package/dist/cli/orchestrate/__tests__/equivalence-check.test.d.ts.map +1 -0
- package/dist/cli/orchestrate/__tests__/equivalence-check.test.js +277 -0
- package/dist/cli/orchestrate/__tests__/equivalence-check.test.js.map +1 -0
- package/dist/cli/orchestrate/__tests__/equivalence-repo-scale.test.d.ts +51 -0
- package/dist/cli/orchestrate/__tests__/equivalence-repo-scale.test.d.ts.map +1 -0
- package/dist/cli/orchestrate/__tests__/equivalence-repo-scale.test.js +183 -0
- package/dist/cli/orchestrate/__tests__/equivalence-repo-scale.test.js.map +1 -0
- package/dist/cli/orchestrate/__tests__/equivalence.test.d.ts +47 -0
- package/dist/cli/orchestrate/__tests__/equivalence.test.d.ts.map +1 -0
- package/dist/cli/orchestrate/__tests__/equivalence.test.js +259 -0
- package/dist/cli/orchestrate/__tests__/equivalence.test.js.map +1 -0
- package/dist/cli/orchestrate/__tests__/exact-boundary-recovery.test.d.ts +9 -0
- package/dist/cli/orchestrate/__tests__/exact-boundary-recovery.test.d.ts.map +1 -0
- package/dist/cli/orchestrate/__tests__/exact-boundary-recovery.test.js +105 -0
- package/dist/cli/orchestrate/__tests__/exact-boundary-recovery.test.js.map +1 -0
- package/dist/cli/orchestrate/__tests__/export-index.test.d.ts +12 -0
- package/dist/cli/orchestrate/__tests__/export-index.test.d.ts.map +1 -0
- package/dist/cli/orchestrate/__tests__/export-index.test.js +346 -0
- package/dist/cli/orchestrate/__tests__/export-index.test.js.map +1 -0
- package/dist/cli/orchestrate/__tests__/flat-large-fixture.test.d.ts +16 -0
- package/dist/cli/orchestrate/__tests__/flat-large-fixture.test.d.ts.map +1 -0
- package/dist/cli/orchestrate/__tests__/flat-large-fixture.test.js +99 -0
- package/dist/cli/orchestrate/__tests__/flat-large-fixture.test.js.map +1 -0
- package/dist/cli/orchestrate/__tests__/flat-monorepo-strategy.test.d.ts +11 -0
- package/dist/cli/orchestrate/__tests__/flat-monorepo-strategy.test.d.ts.map +1 -0
- package/dist/cli/orchestrate/__tests__/flat-monorepo-strategy.test.js +271 -0
- package/dist/cli/orchestrate/__tests__/flat-monorepo-strategy.test.js.map +1 -0
- package/dist/cli/orchestrate/__tests__/function-set-parity.test.d.ts +38 -0
- package/dist/cli/orchestrate/__tests__/function-set-parity.test.d.ts.map +1 -0
- package/dist/cli/orchestrate/__tests__/function-set-parity.test.js +163 -0
- package/dist/cli/orchestrate/__tests__/function-set-parity.test.js.map +1 -0
- package/dist/cli/orchestrate/__tests__/incremental-merge.test.d.ts +8 -0
- package/dist/cli/orchestrate/__tests__/incremental-merge.test.d.ts.map +1 -0
- package/dist/cli/orchestrate/__tests__/incremental-merge.test.js +153 -0
- package/dist/cli/orchestrate/__tests__/incremental-merge.test.js.map +1 -0
- package/dist/cli/orchestrate/__tests__/partition-files.test.d.ts +10 -0
- package/dist/cli/orchestrate/__tests__/partition-files.test.d.ts.map +1 -0
- package/dist/cli/orchestrate/__tests__/partition-files.test.js +104 -0
- package/dist/cli/orchestrate/__tests__/partition-files.test.js.map +1 -0
- package/dist/cli/orchestrate/__tests__/resolution-completeness-floor.test.d.ts +21 -0
- package/dist/cli/orchestrate/__tests__/resolution-completeness-floor.test.d.ts.map +1 -0
- package/dist/cli/orchestrate/__tests__/resolution-completeness-floor.test.js +59 -0
- package/dist/cli/orchestrate/__tests__/resolution-completeness-floor.test.js.map +1 -0
- package/dist/cli/orchestrate/__tests__/shard-model.test.d.ts +8 -0
- package/dist/cli/orchestrate/__tests__/shard-model.test.d.ts.map +1 -0
- package/dist/cli/orchestrate/__tests__/shard-model.test.js +77 -0
- package/dist/cli/orchestrate/__tests__/shard-model.test.js.map +1 -0
- package/dist/cli/orchestrate/__tests__/shard-runner-spawn.test.d.ts +13 -0
- package/dist/cli/orchestrate/__tests__/shard-runner-spawn.test.d.ts.map +1 -0
- package/dist/cli/orchestrate/__tests__/shard-runner-spawn.test.js +103 -0
- package/dist/cli/orchestrate/__tests__/shard-runner-spawn.test.js.map +1 -0
- package/dist/cli/orchestrate/__tests__/sharded-graph.test.d.ts +13 -0
- package/dist/cli/orchestrate/__tests__/sharded-graph.test.d.ts.map +1 -0
- package/dist/cli/orchestrate/__tests__/sharded-graph.test.js +257 -0
- package/dist/cli/orchestrate/__tests__/sharded-graph.test.js.map +1 -0
- package/dist/cli/orchestrate/__tests__/worker-pool.test.d.ts +6 -0
- package/dist/cli/orchestrate/__tests__/worker-pool.test.d.ts.map +1 -0
- package/dist/cli/orchestrate/__tests__/worker-pool.test.js +38 -0
- package/dist/cli/orchestrate/__tests__/worker-pool.test.js.map +1 -0
- package/dist/cli/orchestrate/cache-orchestrator.d.ts +42 -0
- package/dist/cli/orchestrate/cache-orchestrator.d.ts.map +1 -0
- package/dist/cli/orchestrate/cache-orchestrator.js +92 -0
- package/dist/cli/orchestrate/cache-orchestrator.js.map +1 -0
- package/dist/cli/orchestrate/canonical-file-set.d.ts +51 -0
- package/dist/cli/orchestrate/canonical-file-set.d.ts.map +1 -0
- package/dist/cli/orchestrate/canonical-file-set.js +58 -0
- package/dist/cli/orchestrate/canonical-file-set.js.map +1 -0
- package/dist/cli/orchestrate/catalog-builder.d.ts +121 -0
- package/dist/cli/orchestrate/catalog-builder.d.ts.map +1 -0
- package/dist/cli/orchestrate/catalog-builder.js +279 -0
- package/dist/cli/orchestrate/catalog-builder.js.map +1 -0
- package/dist/cli/orchestrate/catalog-stats.d.ts +31 -0
- package/dist/cli/orchestrate/catalog-stats.d.ts.map +1 -0
- package/dist/cli/orchestrate/catalog-stats.js +52 -0
- package/dist/cli/orchestrate/catalog-stats.js.map +1 -0
- package/dist/cli/orchestrate/cross-shard-resolve.d.ts +190 -0
- package/dist/cli/orchestrate/cross-shard-resolve.d.ts.map +1 -0
- package/dist/cli/orchestrate/cross-shard-resolve.js +523 -0
- package/dist/cli/orchestrate/cross-shard-resolve.js.map +1 -0
- package/dist/cli/orchestrate/edge-identity.d.ts +48 -0
- package/dist/cli/orchestrate/edge-identity.d.ts.map +1 -0
- package/dist/cli/orchestrate/edge-identity.js +68 -0
- package/dist/cli/orchestrate/edge-identity.js.map +1 -0
- package/dist/cli/orchestrate/equivalence-check.d.ts +227 -0
- package/dist/cli/orchestrate/equivalence-check.d.ts.map +1 -0
- package/dist/cli/orchestrate/equivalence-check.js +264 -0
- package/dist/cli/orchestrate/equivalence-check.js.map +1 -0
- package/dist/cli/orchestrate/exact-boundary-recovery.d.ts +33 -0
- package/dist/cli/orchestrate/exact-boundary-recovery.d.ts.map +1 -0
- package/dist/cli/orchestrate/exact-boundary-recovery.js +62 -0
- package/dist/cli/orchestrate/exact-boundary-recovery.js.map +1 -0
- package/dist/cli/orchestrate/flat-monorepo-strategy.d.ts +171 -0
- package/dist/cli/orchestrate/flat-monorepo-strategy.d.ts.map +1 -0
- package/dist/cli/orchestrate/flat-monorepo-strategy.js +328 -0
- package/dist/cli/orchestrate/flat-monorepo-strategy.js.map +1 -0
- package/dist/cli/orchestrate/incremental-merge.d.ts +46 -0
- package/dist/cli/orchestrate/incremental-merge.d.ts.map +1 -0
- package/dist/cli/orchestrate/incremental-merge.js +236 -0
- package/dist/cli/orchestrate/incremental-merge.js.map +1 -0
- package/dist/cli/orchestrate/partition-chunk.d.ts +36 -0
- package/dist/cli/orchestrate/partition-chunk.d.ts.map +1 -0
- package/dist/cli/orchestrate/partition-chunk.js +37 -0
- package/dist/cli/orchestrate/partition-chunk.js.map +1 -0
- package/dist/cli/orchestrate/partition-files.d.ts +52 -0
- package/dist/cli/orchestrate/partition-files.d.ts.map +1 -0
- package/dist/cli/orchestrate/partition-files.js +94 -0
- package/dist/cli/orchestrate/partition-files.js.map +1 -0
- package/dist/cli/orchestrate/resolution-trace.d.ts +11 -0
- package/dist/cli/orchestrate/resolution-trace.d.ts.map +1 -0
- package/dist/cli/orchestrate/resolution-trace.js +27 -0
- package/dist/cli/orchestrate/resolution-trace.js.map +1 -0
- package/dist/cli/orchestrate/shard-model.d.ts +99 -0
- package/dist/cli/orchestrate/shard-model.d.ts.map +1 -0
- package/dist/cli/orchestrate/shard-model.js +23 -0
- package/dist/cli/orchestrate/shard-model.js.map +1 -0
- package/dist/cli/orchestrate/shard-runner.d.ts +65 -0
- package/dist/cli/orchestrate/shard-runner.d.ts.map +1 -0
- package/dist/cli/orchestrate/shard-runner.js +169 -0
- package/dist/cli/orchestrate/shard-runner.js.map +1 -0
- package/dist/cli/orchestrate/sharded-graph.d.ts +86 -0
- package/dist/cli/orchestrate/sharded-graph.d.ts.map +1 -0
- package/dist/cli/orchestrate/sharded-graph.js +227 -0
- package/dist/cli/orchestrate/sharded-graph.js.map +1 -0
- package/dist/cli/orchestrate/types.d.ts +31 -0
- package/dist/cli/orchestrate/types.d.ts.map +1 -0
- package/dist/cli/orchestrate/types.js +24 -0
- package/dist/cli/orchestrate/types.js.map +1 -0
- package/dist/cli/orchestrate/worker-pool.d.ts +16 -0
- package/dist/cli/orchestrate/worker-pool.d.ts.map +1 -0
- package/dist/cli/orchestrate/worker-pool.js +39 -0
- package/dist/cli/orchestrate/worker-pool.js.map +1 -0
- package/dist/cli/orchestrate.d.ts +106 -0
- package/dist/cli/orchestrate.d.ts.map +1 -0
- package/dist/cli/orchestrate.js +228 -0
- package/dist/cli/orchestrate.js.map +1 -0
- package/dist/cli/positional-paths.d.ts +23 -0
- package/dist/cli/positional-paths.d.ts.map +1 -0
- package/dist/cli/positional-paths.js +64 -0
- package/dist/cli/positional-paths.js.map +1 -0
- package/dist/cli/pressure-monitor.d.ts +62 -0
- package/dist/cli/pressure-monitor.d.ts.map +1 -0
- package/dist/cli/pressure-monitor.js +110 -0
- package/dist/cli/pressure-monitor.js.map +1 -0
- package/dist/cli/profile.d.ts +82 -0
- package/dist/cli/profile.d.ts.map +1 -0
- package/dist/cli/profile.js +120 -0
- package/dist/cli/profile.js.map +1 -0
- package/dist/cli/report-data.d.ts +46 -0
- package/dist/cli/report-data.d.ts.map +1 -0
- package/dist/cli/report-data.js +48 -0
- package/dist/cli/report-data.js.map +1 -0
- package/dist/cli/resolve-adapters.d.ts +19 -0
- package/dist/cli/resolve-adapters.d.ts.map +1 -0
- package/dist/cli/resolve-adapters.js +38 -0
- package/dist/cli/resolve-adapters.js.map +1 -0
- package/dist/cli/sarif-export.d.ts +40 -0
- package/dist/cli/sarif-export.d.ts.map +1 -0
- package/dist/cli/sarif-export.js +69 -0
- package/dist/cli/sarif-export.js.map +1 -0
- package/dist/cli/shard-worker.d.ts +25 -0
- package/dist/cli/shard-worker.d.ts.map +1 -0
- package/dist/cli/shard-worker.js +98 -0
- package/dist/cli/shard-worker.js.map +1 -0
- package/dist/cli/symbol-index.d.ts +51 -0
- package/dist/cli/symbol-index.d.ts.map +1 -0
- package/dist/cli/symbol-index.js +120 -0
- package/dist/cli/symbol-index.js.map +1 -0
- package/dist/cli/workspace-report.d.ts +32 -0
- package/dist/cli/workspace-report.d.ts.map +1 -0
- package/dist/cli/workspace-report.js +107 -0
- package/dist/cli/workspace-report.js.map +1 -0
- package/dist/cli/workspace-runner.d.ts +104 -0
- package/dist/cli/workspace-runner.d.ts.map +1 -0
- package/dist/cli/workspace-runner.js +166 -0
- package/dist/cli/workspace-runner.js.map +1 -0
- package/dist/cross-package/export-index.d.ts +118 -0
- package/dist/cross-package/export-index.d.ts.map +1 -0
- package/dist/cross-package/export-index.js +296 -0
- package/dist/cross-package/export-index.js.map +1 -0
- package/dist/cross-package/posix-path.d.ts +16 -0
- package/dist/cross-package/posix-path.d.ts.map +1 -0
- package/dist/cross-package/posix-path.js +18 -0
- package/dist/cross-package/posix-path.js.map +1 -0
- package/dist/cross-package/resolve.d.ts +68 -0
- package/dist/cross-package/resolve.d.ts.map +1 -0
- package/dist/cross-package/resolve.js +83 -0
- package/dist/cross-package/resolve.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/internal.d.ts +25 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +38 -0
- package/dist/internal.js.map +1 -0
- package/dist/lang-adapter/body-digest.d.ts +46 -0
- package/dist/lang-adapter/body-digest.d.ts.map +1 -0
- package/dist/lang-adapter/body-digest.js +49 -0
- package/dist/lang-adapter/body-digest.js.map +1 -0
- package/dist/lang-adapter/edge-helpers.d.ts +104 -0
- package/dist/lang-adapter/edge-helpers.d.ts.map +1 -0
- package/dist/lang-adapter/edge-helpers.js +120 -0
- package/dist/lang-adapter/edge-helpers.js.map +1 -0
- package/dist/lang-adapter/registry.d.ts +59 -0
- package/dist/lang-adapter/registry.d.ts.map +1 -0
- package/dist/lang-adapter/registry.js +100 -0
- package/dist/lang-adapter/registry.js.map +1 -0
- package/dist/lang-adapter/selector.d.ts +39 -0
- package/dist/lang-adapter/selector.d.ts.map +1 -0
- package/dist/lang-adapter/selector.js +140 -0
- package/dist/lang-adapter/selector.js.map +1 -0
- package/dist/lang-adapter/types.d.ts +217 -0
- package/dist/lang-adapter/types.d.ts.map +1 -0
- package/dist/lang-adapter/types.js +18 -0
- package/dist/lang-adapter/types.js.map +1 -0
- package/dist/owner-key.d.ts +22 -0
- package/dist/owner-key.d.ts.map +1 -0
- package/dist/owner-key.js +25 -0
- package/dist/owner-key.js.map +1 -0
- package/dist/persistence/__tests__/shard-fragment-cache.test.d.ts +8 -0
- package/dist/persistence/__tests__/shard-fragment-cache.test.d.ts.map +1 -0
- package/dist/persistence/__tests__/shard-fragment-cache.test.js +126 -0
- package/dist/persistence/__tests__/shard-fragment-cache.test.js.map +1 -0
- package/dist/persistence/catalog-repo.d.ts +77 -0
- package/dist/persistence/catalog-repo.d.ts.map +1 -0
- package/dist/persistence/catalog-repo.js +229 -0
- package/dist/persistence/catalog-repo.js.map +1 -0
- package/dist/persistence/schema.d.ts +249 -0
- package/dist/persistence/schema.d.ts.map +1 -0
- package/dist/persistence/schema.js +53 -0
- package/dist/persistence/schema.js.map +1 -0
- package/dist/persistence/session-payload.d.ts +96 -0
- package/dist/persistence/session-payload.d.ts.map +1 -0
- package/dist/persistence/session-payload.js +116 -0
- package/dist/persistence/session-payload.js.map +1 -0
- package/dist/persistence/session-replay.d.ts +15 -0
- package/dist/persistence/session-replay.d.ts.map +1 -0
- package/dist/persistence/session-replay.js +80 -0
- package/dist/persistence/session-replay.js.map +1 -0
- package/dist/pipeline/__tests__/assign-packages.test.d.ts +2 -0
- package/dist/pipeline/__tests__/assign-packages.test.d.ts.map +1 -0
- package/dist/pipeline/__tests__/assign-packages.test.js +88 -0
- package/dist/pipeline/__tests__/assign-packages.test.js.map +1 -0
- package/dist/pipeline/__tests__/constrain-edges.test.d.ts +2 -0
- package/dist/pipeline/__tests__/constrain-edges.test.d.ts.map +1 -0
- package/dist/pipeline/__tests__/constrain-edges.test.js +228 -0
- package/dist/pipeline/__tests__/constrain-edges.test.js.map +1 -0
- package/dist/pipeline/__tests__/features.test.d.ts +9 -0
- package/dist/pipeline/__tests__/features.test.d.ts.map +1 -0
- package/dist/pipeline/__tests__/features.test.js +458 -0
- package/dist/pipeline/__tests__/features.test.js.map +1 -0
- package/dist/pipeline/__tests__/indexes-imports.test.d.ts +2 -0
- package/dist/pipeline/__tests__/indexes-imports.test.d.ts.map +1 -0
- package/dist/pipeline/__tests__/indexes-imports.test.js +114 -0
- package/dist/pipeline/__tests__/indexes-imports.test.js.map +1 -0
- package/dist/pipeline/assign-packages.d.ts +18 -0
- package/dist/pipeline/assign-packages.d.ts.map +1 -0
- package/dist/pipeline/assign-packages.js +86 -0
- package/dist/pipeline/assign-packages.js.map +1 -0
- package/dist/pipeline/constrain-edges.d.ts +34 -0
- package/dist/pipeline/constrain-edges.d.ts.map +1 -0
- package/dist/pipeline/constrain-edges.js +139 -0
- package/dist/pipeline/constrain-edges.js.map +1 -0
- package/dist/pipeline/feature-deps.d.ts +19 -0
- package/dist/pipeline/feature-deps.d.ts.map +1 -0
- package/dist/pipeline/feature-deps.js +28 -0
- package/dist/pipeline/feature-deps.js.map +1 -0
- package/dist/pipeline/features.d.ts +50 -0
- package/dist/pipeline/features.d.ts.map +1 -0
- package/dist/pipeline/features.js +462 -0
- package/dist/pipeline/features.js.map +1 -0
- package/dist/pipeline/indexes.d.ts +27 -0
- package/dist/pipeline/indexes.d.ts.map +1 -0
- package/dist/pipeline/indexes.js +159 -0
- package/dist/pipeline/indexes.js.map +1 -0
- package/dist/recipes/__tests__/built-in-recipes.test.d.ts +5 -0
- package/dist/recipes/__tests__/built-in-recipes.test.d.ts.map +1 -0
- package/dist/recipes/__tests__/built-in-recipes.test.js +24 -0
- package/dist/recipes/__tests__/built-in-recipes.test.js.map +1 -0
- package/dist/recipes/__tests__/registry.test.d.ts +7 -0
- package/dist/recipes/__tests__/registry.test.d.ts.map +1 -0
- package/dist/recipes/__tests__/registry.test.js +34 -0
- package/dist/recipes/__tests__/registry.test.js.map +1 -0
- package/dist/recipes/__tests__/resolve.test.d.ts +10 -0
- package/dist/recipes/__tests__/resolve.test.d.ts.map +1 -0
- package/dist/recipes/__tests__/resolve.test.js +38 -0
- package/dist/recipes/__tests__/resolve.test.js.map +1 -0
- package/dist/recipes/built-in-recipes.d.ts +26 -0
- package/dist/recipes/built-in-recipes.d.ts.map +1 -0
- package/dist/recipes/built-in-recipes.js +43 -0
- package/dist/recipes/built-in-recipes.js.map +1 -0
- package/dist/recipes/registry.d.ts +31 -0
- package/dist/recipes/registry.d.ts.map +1 -0
- package/dist/recipes/registry.js +48 -0
- package/dist/recipes/registry.js.map +1 -0
- package/dist/recipes/resolve.d.ts +31 -0
- package/dist/recipes/resolve.d.ts.map +1 -0
- package/dist/recipes/resolve.js +70 -0
- package/dist/recipes/resolve.js.map +1 -0
- package/dist/recipes/types.d.ts +58 -0
- package/dist/recipes/types.d.ts.map +1 -0
- package/dist/recipes/types.js +39 -0
- package/dist/recipes/types.js.map +1 -0
- package/dist/render/__tests__/catalog-json.test.d.ts +9 -0
- package/dist/render/__tests__/catalog-json.test.d.ts.map +1 -0
- package/dist/render/__tests__/catalog-json.test.js +132 -0
- package/dist/render/__tests__/catalog-json.test.js.map +1 -0
- package/dist/render/catalog-json-types.d.ts +114 -0
- package/dist/render/catalog-json-types.d.ts.map +1 -0
- package/dist/render/catalog-json-types.js +23 -0
- package/dist/render/catalog-json-types.js.map +1 -0
- package/dist/render/catalog-json.d.ts +43 -0
- package/dist/render/catalog-json.d.ts.map +1 -0
- package/dist/render/catalog-json.js +303 -0
- package/dist/render/catalog-json.js.map +1 -0
- package/dist/render/opensip-id-derivation.d.ts +73 -0
- package/dist/render/opensip-id-derivation.d.ts.map +1 -0
- package/dist/render/opensip-id-derivation.js +65 -0
- package/dist/render/opensip-id-derivation.js.map +1 -0
- package/dist/render/rule-id-mapping.d.ts +61 -0
- package/dist/render/rule-id-mapping.d.ts.map +1 -0
- package/dist/render/rule-id-mapping.js +82 -0
- package/dist/render/rule-id-mapping.js.map +1 -0
- package/dist/resolve-callee.d.ts +50 -0
- package/dist/resolve-callee.d.ts.map +1 -0
- package/dist/resolve-callee.js +80 -0
- package/dist/resolve-callee.js.map +1 -0
- package/dist/rules/__tests__/__fixtures__/catalog.fixture.d.ts +22 -0
- package/dist/rules/__tests__/__fixtures__/catalog.fixture.d.ts.map +1 -0
- package/dist/rules/__tests__/__fixtures__/catalog.fixture.js +143 -0
- package/dist/rules/__tests__/__fixtures__/catalog.fixture.js.map +1 -0
- package/dist/rules/__tests__/create-graph-signal.test.d.ts +8 -0
- package/dist/rules/__tests__/create-graph-signal.test.d.ts.map +1 -0
- package/dist/rules/__tests__/create-graph-signal.test.js +55 -0
- package/dist/rules/__tests__/create-graph-signal.test.js.map +1 -0
- package/dist/rules/__tests__/define-rule.test.d.ts +13 -0
- package/dist/rules/__tests__/define-rule.test.d.ts.map +1 -0
- package/dist/rules/__tests__/define-rule.test.js +102 -0
- package/dist/rules/__tests__/define-rule.test.js.map +1 -0
- package/dist/rules/__tests__/fingerprint-golden.test.d.ts +21 -0
- package/dist/rules/__tests__/fingerprint-golden.test.d.ts.map +1 -0
- package/dist/rules/__tests__/fingerprint-golden.test.js +69 -0
- package/dist/rules/__tests__/fingerprint-golden.test.js.map +1 -0
- package/dist/rules/__tests__/registry.test.d.ts +6 -0
- package/dist/rules/__tests__/registry.test.d.ts.map +1 -0
- package/dist/rules/__tests__/registry.test.js +37 -0
- package/dist/rules/__tests__/registry.test.js.map +1 -0
- package/dist/rules/__tests__/rule-behaviors.test.d.ts +9 -0
- package/dist/rules/__tests__/rule-behaviors.test.d.ts.map +1 -0
- package/dist/rules/__tests__/rule-behaviors.test.js +204 -0
- package/dist/rules/__tests__/rule-behaviors.test.js.map +1 -0
- package/dist/rules/__tests__/signal-output.snapshot.test.d.ts +11 -0
- package/dist/rules/__tests__/signal-output.snapshot.test.d.ts.map +1 -0
- package/dist/rules/__tests__/signal-output.snapshot.test.js +55 -0
- package/dist/rules/__tests__/signal-output.snapshot.test.js.map +1 -0
- package/dist/rules/_approximation.d.ts +23 -0
- package/dist/rules/_approximation.d.ts.map +1 -0
- package/dist/rules/_approximation.js +28 -0
- package/dist/rules/_approximation.js.map +1 -0
- package/dist/rules/_entry-points.d.ts +27 -0
- package/dist/rules/_entry-points.d.ts.map +1 -0
- package/dist/rules/_entry-points.js +81 -0
- package/dist/rules/_entry-points.js.map +1 -0
- package/dist/rules/_severity-override.d.ts +32 -0
- package/dist/rules/_severity-override.d.ts.map +1 -0
- package/dist/rules/_severity-override.js +33 -0
- package/dist/rules/_severity-override.js.map +1 -0
- package/dist/rules/always-throws-branch.d.ts +26 -0
- package/dist/rules/always-throws-branch.d.ts.map +1 -0
- package/dist/rules/always-throws-branch.js +66 -0
- package/dist/rules/always-throws-branch.js.map +1 -0
- package/dist/rules/create-graph-signal.d.ts +38 -0
- package/dist/rules/create-graph-signal.d.ts.map +1 -0
- package/dist/rules/create-graph-signal.js +35 -0
- package/dist/rules/create-graph-signal.js.map +1 -0
- package/dist/rules/cycle.d.ts +29 -0
- package/dist/rules/cycle.d.ts.map +1 -0
- package/dist/rules/cycle.js +166 -0
- package/dist/rules/cycle.js.map +1 -0
- package/dist/rules/cycle.memberlocations.test.d.ts +11 -0
- package/dist/rules/cycle.memberlocations.test.d.ts.map +1 -0
- package/dist/rules/cycle.memberlocations.test.js +84 -0
- package/dist/rules/cycle.memberlocations.test.js.map +1 -0
- package/dist/rules/define-rule.d.ts +67 -0
- package/dist/rules/define-rule.d.ts.map +1 -0
- package/dist/rules/define-rule.js +66 -0
- package/dist/rules/define-rule.js.map +1 -0
- package/dist/rules/duplicated-function-body.d.ts +40 -0
- package/dist/rules/duplicated-function-body.d.ts.map +1 -0
- package/dist/rules/duplicated-function-body.js +232 -0
- package/dist/rules/duplicated-function-body.js.map +1 -0
- package/dist/rules/high-blast-untested.d.ts +26 -0
- package/dist/rules/high-blast-untested.d.ts.map +1 -0
- package/dist/rules/high-blast-untested.js +82 -0
- package/dist/rules/high-blast-untested.js.map +1 -0
- package/dist/rules/large-function.d.ts +22 -0
- package/dist/rules/large-function.d.ts.map +1 -0
- package/dist/rules/large-function.js +72 -0
- package/dist/rules/large-function.js.map +1 -0
- package/dist/rules/no-side-effect-path.d.ts +31 -0
- package/dist/rules/no-side-effect-path.d.ts.map +1 -0
- package/dist/rules/no-side-effect-path.js +217 -0
- package/dist/rules/no-side-effect-path.js.map +1 -0
- package/dist/rules/orphan-subtree.d.ts +11 -0
- package/dist/rules/orphan-subtree.d.ts.map +1 -0
- package/dist/rules/orphan-subtree.js +104 -0
- package/dist/rules/orphan-subtree.js.map +1 -0
- package/dist/rules/registry.d.ts +35 -0
- package/dist/rules/registry.d.ts.map +1 -0
- package/dist/rules/registry.js +96 -0
- package/dist/rules/registry.js.map +1 -0
- package/dist/rules/test-only-reachable.d.ts +9 -0
- package/dist/rules/test-only-reachable.d.ts.map +1 -0
- package/dist/rules/test-only-reachable.js +101 -0
- package/dist/rules/test-only-reachable.js.map +1 -0
- package/dist/rules/unexpected-coupling.d.ts +29 -0
- package/dist/rules/unexpected-coupling.d.ts.map +1 -0
- package/dist/rules/unexpected-coupling.js +0 -0
- package/dist/rules/unexpected-coupling.js.map +1 -0
- package/dist/rules/wide-function.d.ts +18 -0
- package/dist/rules/wide-function.d.ts.map +1 -0
- package/dist/rules/wide-function.js +58 -0
- package/dist/rules/wide-function.js.map +1 -0
- package/dist/scope-augmentation.d.ts +58 -0
- package/dist/scope-augmentation.d.ts.map +1 -0
- package/dist/scope-augmentation.js +29 -0
- package/dist/scope-augmentation.js.map +1 -0
- package/dist/tool.d.ts +29 -0
- package/dist/tool.d.ts.map +1 -0
- package/dist/tool.js +241 -0
- package/dist/tool.js.map +1 -0
- package/dist/types.d.ts +642 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +136 -0
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
// @fitness-ignore-file batch-operation-limits -- pure in-memory linear/BFS scans over the already-materialized catalog + indexes (bounded by repo size); data→data, no DB/IO/unbounded-async to batch or paginate.
|
|
2
|
+
/**
|
|
3
|
+
* Stage 3.5 — Feature derivation.
|
|
4
|
+
*
|
|
5
|
+
* Pure data→data over the catalog + indexes. A *plain view* by default
|
|
6
|
+
* (ADR-0006): only the columns the caller requests are computed
|
|
7
|
+
* (lazy/needed-only), and the in-engine rules consume the result without it
|
|
8
|
+
* ever being persisted for their sake. The dashboard columns (blast / scc /
|
|
9
|
+
* packageCoupling) are materialized into the catalog JSON only when the
|
|
10
|
+
* producing run requests them.
|
|
11
|
+
*
|
|
12
|
+
* Algorithms here are ports of analyses that first lived in dashboard-side
|
|
13
|
+
* JavaScript (`code-paths/indexes.ts` blast, `code-paths/scc.ts` Tarjan,
|
|
14
|
+
* `code-paths/view-coupling.ts` coupling) or inline inside individual rules
|
|
15
|
+
* (the `endLine − line + 1` span, `orphan-subtree`'s reachability BFS,
|
|
16
|
+
* `test-only-reachable`'s prod BFS). The engine is now the canonical home for
|
|
17
|
+
* computed feature columns; dashboard helpers still assemble view-local
|
|
18
|
+
* indexes and drilldowns from the catalog plus the precomputed features.
|
|
19
|
+
*/
|
|
20
|
+
import { logger } from '@opensip-cli/core';
|
|
21
|
+
import { occId, pkgOf, resolveCallee } from '../resolve-callee.js';
|
|
22
|
+
import { inferEntryPoints } from '../rules/_entry-points.js';
|
|
23
|
+
/**
|
|
24
|
+
* Maximum BFS depth used when computing per-function blast radius. Ported
|
|
25
|
+
* verbatim from the dashboard's former `code-paths/indexes.ts`: bounded depth
|
|
26
|
+
* keeps cost predictable; a slight under-count for deep chains is acceptable
|
|
27
|
+
* for a "what's risky to touch" heuristic.
|
|
28
|
+
*/
|
|
29
|
+
const BLAST_MAX_DEPTH = 5;
|
|
30
|
+
const EMPTY_FUNCTION = new Map();
|
|
31
|
+
const EMPTY_PACKAGE = new Map();
|
|
32
|
+
const EMPTY_SCC = [];
|
|
33
|
+
const EMPTY_EDGE = [];
|
|
34
|
+
/** True when any function-grain column is requested. */
|
|
35
|
+
function wantsFunctionGrain(set) {
|
|
36
|
+
return (set.has('bodyLines') ||
|
|
37
|
+
set.has('blast') ||
|
|
38
|
+
set.has('reachableFromEntry') ||
|
|
39
|
+
set.has('reachableOnlyFromTests'));
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Compute the requested feature columns over the catalog + indexes. Only the
|
|
43
|
+
* entities whose driving columns are present are populated; everything else
|
|
44
|
+
* is the shared empty value. An empty `requested` ⇒ an all-empty table.
|
|
45
|
+
*/
|
|
46
|
+
export function buildFeatures(catalog, indexes, config, requested) {
|
|
47
|
+
const set = new Set(requested);
|
|
48
|
+
if (set.size === 0) {
|
|
49
|
+
return { function: EMPTY_FUNCTION, package: EMPTY_PACKAGE, scc: EMPTY_SCC, edge: EMPTY_EDGE };
|
|
50
|
+
}
|
|
51
|
+
const fn = wantsFunctionGrain(set)
|
|
52
|
+
? buildFunctionFeatures(catalog, indexes, config, set)
|
|
53
|
+
: EMPTY_FUNCTION;
|
|
54
|
+
let pkg = EMPTY_PACKAGE;
|
|
55
|
+
let edge = EMPTY_EDGE;
|
|
56
|
+
if (set.has('packageCoupling')) {
|
|
57
|
+
const coupling = computePackageCoupling(indexes);
|
|
58
|
+
pkg = coupling.package;
|
|
59
|
+
edge = coupling.edge;
|
|
60
|
+
}
|
|
61
|
+
const scc = set.has('scc') ? computeSccs(indexes) : EMPTY_SCC;
|
|
62
|
+
logger.info({
|
|
63
|
+
evt: 'graph.features.build.complete',
|
|
64
|
+
module: 'graph:features',
|
|
65
|
+
columns: [...set],
|
|
66
|
+
functions: fn.size,
|
|
67
|
+
packages: pkg.size,
|
|
68
|
+
sccs: scc.length,
|
|
69
|
+
edges: edge.length,
|
|
70
|
+
});
|
|
71
|
+
return { function: fn, package: pkg, scc, edge };
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Assemble per-function rows, attaching only the requested columns. `bodyLines`
|
|
75
|
+
* is always present for the function grain (cheap + always-computable);
|
|
76
|
+
* `blast` / `reachableFromEntry` / `testReachable` / `reachableOnlyFromTests`
|
|
77
|
+
* ride along only when their column was requested.
|
|
78
|
+
*/
|
|
79
|
+
function buildFunctionFeatures(catalog, indexes, config, set) {
|
|
80
|
+
const blast = set.has('blast') ? computeBlast(indexes) : undefined;
|
|
81
|
+
const reachableFromEntry = set.has('reachableFromEntry')
|
|
82
|
+
? computeReachableFromEntry(catalog, indexes, config)
|
|
83
|
+
: undefined;
|
|
84
|
+
// Both `testReachable` and `reachableOnlyFromTests` ride on this request.
|
|
85
|
+
const needsTestReach = set.has('reachableOnlyFromTests');
|
|
86
|
+
const prodReachable = needsTestReach ? computeProdReachable(catalog, indexes) : undefined;
|
|
87
|
+
const testReachable = needsTestReach ? computeTestReachable(indexes) : undefined;
|
|
88
|
+
const out = new Map();
|
|
89
|
+
for (const [hash, occ] of indexes.byBodyHash) {
|
|
90
|
+
const row = {
|
|
91
|
+
bodyLines: occ.endLine - occ.line + 1,
|
|
92
|
+
};
|
|
93
|
+
if (blast)
|
|
94
|
+
row.blast = blast.get(hash);
|
|
95
|
+
if (reachableFromEntry)
|
|
96
|
+
row.reachableFromEntry = reachableFromEntry.has(hash);
|
|
97
|
+
if (prodReachable && testReachable) {
|
|
98
|
+
// `testReachable` = "exercised by a test" — reachable from a test-file
|
|
99
|
+
// function (NOT merely the negation of production-reachability, which is
|
|
100
|
+
// what this used to compute and which mislabeled production-reachable
|
|
101
|
+
// utilities as 'not reached by any test').
|
|
102
|
+
row.testReachable = testReachable.has(hash);
|
|
103
|
+
row.reachableOnlyFromTests = isReachableOnlyFromTests(hash, indexes, prodReachable);
|
|
104
|
+
}
|
|
105
|
+
out.set(hash, row);
|
|
106
|
+
}
|
|
107
|
+
return out;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* The `test-only-reachable` reachability predicate, lifted verbatim: a function
|
|
111
|
+
* is reachable-only-from-tests when it is NOT reachable from any production
|
|
112
|
+
* entry point, HAS callers, and ALL of its callers live in test files.
|
|
113
|
+
*/
|
|
114
|
+
function isReachableOnlyFromTests(hash, indexes, prodReachable) {
|
|
115
|
+
if (prodReachable.has(hash))
|
|
116
|
+
return false;
|
|
117
|
+
const callers = indexes.callers.get(hash) ?? [];
|
|
118
|
+
if (callers.length === 0)
|
|
119
|
+
return false;
|
|
120
|
+
return callers.every((h) => indexes.byBodyHash.get(h)?.inTestFile === true);
|
|
121
|
+
}
|
|
122
|
+
// ── Blast (verbatim port of dashboard code-paths/indexes.ts) ───────
|
|
123
|
+
/**
|
|
124
|
+
* Bounded reverse BFS over `callers`: depth-1 reaches are `direct`, depth
|
|
125
|
+
* 2..BLAST_MAX_DEPTH reaches are `transitive` (set-deduplicated, per-source
|
|
126
|
+
* visited set seeded with `[start, ...directSet]` so cycles short-circuit
|
|
127
|
+
* without inflating counts). `score = direct + 0.5 × transitive`.
|
|
128
|
+
*/
|
|
129
|
+
function bfsBlast(start, callers) {
|
|
130
|
+
const directCallers = callers.get(start) ?? [];
|
|
131
|
+
const directSet = new Set(directCallers);
|
|
132
|
+
const visited = new Set([start, ...directSet]);
|
|
133
|
+
const transitiveSet = new Set();
|
|
134
|
+
let frontier = [...directSet];
|
|
135
|
+
for (let depth = 2; depth <= BLAST_MAX_DEPTH && frontier.length > 0; depth++) {
|
|
136
|
+
const next = [];
|
|
137
|
+
for (const node of frontier) {
|
|
138
|
+
const parents = callers.get(node) ?? [];
|
|
139
|
+
for (const parent of parents) {
|
|
140
|
+
if (visited.has(parent))
|
|
141
|
+
continue;
|
|
142
|
+
visited.add(parent);
|
|
143
|
+
transitiveSet.add(parent);
|
|
144
|
+
next.push(parent);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
frontier = next;
|
|
148
|
+
}
|
|
149
|
+
const direct = directSet.size;
|
|
150
|
+
const transitive = transitiveSet.size;
|
|
151
|
+
return { direct, transitive, score: direct + 0.5 * transitive };
|
|
152
|
+
}
|
|
153
|
+
/** One blast score per `byBodyHash` node. */
|
|
154
|
+
function computeBlast(indexes) {
|
|
155
|
+
const out = new Map();
|
|
156
|
+
for (const target of indexes.byBodyHash.keys()) {
|
|
157
|
+
out.set(target, bfsBlast(target, indexes.callers));
|
|
158
|
+
}
|
|
159
|
+
return out;
|
|
160
|
+
}
|
|
161
|
+
// ── Reachability (verbatim ports of the two rule-local BFS passes) ──
|
|
162
|
+
/**
|
|
163
|
+
* Reachable from any inferred entry point. Lifted from `orphan-subtree`'s
|
|
164
|
+
* `computeReachable`: seeds = `inferEntryPoints` ∪ `config.entryPointHashes`;
|
|
165
|
+
* BFS over `callees`.
|
|
166
|
+
*/
|
|
167
|
+
function computeReachableFromEntry(catalog, indexes, config) {
|
|
168
|
+
const seeds = new Set();
|
|
169
|
+
for (const ep of inferEntryPoints(catalog, indexes))
|
|
170
|
+
seeds.add(ep.bodyHash);
|
|
171
|
+
for (const h of config.entryPointHashes ?? [])
|
|
172
|
+
seeds.add(h);
|
|
173
|
+
return bfsForward(seeds, indexes);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Reachable from a NON-test (production) entry point. Lifted from
|
|
177
|
+
* `test-only-reachable`'s `computeProductionEntries` + `bfsReachable`: seeds =
|
|
178
|
+
* `inferEntryPoints` filtered to non-test occurrences; BFS over `callees`.
|
|
179
|
+
*/
|
|
180
|
+
function computeProdReachable(catalog, indexes) {
|
|
181
|
+
const seeds = new Set();
|
|
182
|
+
for (const ep of inferEntryPoints(catalog, indexes)) {
|
|
183
|
+
const occ = indexes.byBodyHash.get(ep.bodyHash);
|
|
184
|
+
/* v8 ignore next */
|
|
185
|
+
if (!occ)
|
|
186
|
+
continue;
|
|
187
|
+
if (occ.inTestFile)
|
|
188
|
+
continue;
|
|
189
|
+
seeds.add(ep.bodyHash);
|
|
190
|
+
}
|
|
191
|
+
return bfsForward(seeds, indexes);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Reachable from a TEST — i.e. exercised by a test. Seeds = EVERY function
|
|
195
|
+
* defined in a test file (each is a potential test entry); forward BFS over
|
|
196
|
+
* `callees`. A production function in the result set is transitively called by
|
|
197
|
+
* some test, so `testReachable` is true. This is the correct companion to the
|
|
198
|
+
* high-blast-untested rule ("not reached by any test" ⇔ not in this set) — it
|
|
199
|
+
* replaces the old `!prodReachable` definition, which conflated "unreachable
|
|
200
|
+
* from production" with "tested".
|
|
201
|
+
*/
|
|
202
|
+
function computeTestReachable(indexes) {
|
|
203
|
+
const seeds = new Set();
|
|
204
|
+
for (const [hash, occ] of indexes.byBodyHash) {
|
|
205
|
+
if (occ.inTestFile)
|
|
206
|
+
seeds.add(hash);
|
|
207
|
+
}
|
|
208
|
+
return bfsForward(seeds, indexes);
|
|
209
|
+
}
|
|
210
|
+
/** Forward BFS over the `callees` adjacency from a seed set. */
|
|
211
|
+
function bfsForward(seeds, indexes) {
|
|
212
|
+
const visited = new Set();
|
|
213
|
+
const queue = [...seeds];
|
|
214
|
+
while (queue.length > 0) {
|
|
215
|
+
const cur = queue.shift();
|
|
216
|
+
/* v8 ignore next */
|
|
217
|
+
if (cur === undefined || visited.has(cur))
|
|
218
|
+
continue;
|
|
219
|
+
visited.add(cur);
|
|
220
|
+
for (const n of indexes.callees.get(cur) ?? []) {
|
|
221
|
+
if (!visited.has(n))
|
|
222
|
+
queue.push(n);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return visited;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Build the occurrence-level node graph: every occurrence is a node keyed by
|
|
229
|
+
* occId; each call edge's targets are resolved via `resolveCallee` to the
|
|
230
|
+
* occurrence the caller actually reaches, then mapped to that callee's occId.
|
|
231
|
+
* Neighbors are deduped (a Set per node) so the Tarjan adjacency stays tight.
|
|
232
|
+
*/
|
|
233
|
+
function buildOccGraph(indexes) {
|
|
234
|
+
const byOccId = new Map();
|
|
235
|
+
const adj = new Map();
|
|
236
|
+
for (const occs of indexes.occurrencesByHash.values()) {
|
|
237
|
+
for (const occ of occs) {
|
|
238
|
+
const id = occId(occ);
|
|
239
|
+
byOccId.set(id, occ);
|
|
240
|
+
const neighbors = new Set();
|
|
241
|
+
for (const callEdge of occ.calls) {
|
|
242
|
+
for (const target of callEdge.to) {
|
|
243
|
+
const callee = resolveCallee(target, occ, indexes);
|
|
244
|
+
if (callee)
|
|
245
|
+
neighbors.add(occId(callee));
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
adj.set(id, [...neighbors]);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return { nodes: [...byOccId.keys()], byOccId, adj };
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Iterative Tarjan over the occurrence-level graph (`buildOccGraph`). Singletons
|
|
255
|
+
* included by the algorithm; each component's members sorted; result ordering
|
|
256
|
+
* preserved (push-on-root-close). Each component is mapped to an `SccFeatures`
|
|
257
|
+
* whose members are occIds, with a stable member-derived id and
|
|
258
|
+
* `crossesPackages` over the members' resolved packages. Irreducible iterative
|
|
259
|
+
* Tarjan (no recursion, to survive deep call graphs) — splitting it would
|
|
260
|
+
* obscure the well-known algorithm.
|
|
261
|
+
*
|
|
262
|
+
* Exported so the equivalence diff (`cross-shard-resolve.diffCatalogs`) can run
|
|
263
|
+
* the SAME occId-keyed SCC computation over both the exact and the sharded
|
|
264
|
+
* catalog and diff component membership — the Phase-4 cycle-finding gate. There
|
|
265
|
+
* is exactly one SCC implementation; the diff reuses it rather than reimplement.
|
|
266
|
+
*/
|
|
267
|
+
// eslint-disable-next-line sonarjs/cognitive-complexity -- iterative Tarjan, see above
|
|
268
|
+
export function computeSccs(indexes) {
|
|
269
|
+
const graph = buildOccGraph(indexes);
|
|
270
|
+
const result = [];
|
|
271
|
+
const index = new Map();
|
|
272
|
+
const lowlink = new Map();
|
|
273
|
+
const onStack = new Set();
|
|
274
|
+
const stack = [];
|
|
275
|
+
let nextIndex = 0;
|
|
276
|
+
const adj = (v) => graph.adj.get(v) ?? [];
|
|
277
|
+
for (const start of graph.nodes) {
|
|
278
|
+
if (index.has(start))
|
|
279
|
+
continue;
|
|
280
|
+
const work = [{ v: start, ai: 0 }];
|
|
281
|
+
while (work.length > 0) {
|
|
282
|
+
const frame = work.at(-1);
|
|
283
|
+
const v = frame.v;
|
|
284
|
+
if (frame.ai === 0) {
|
|
285
|
+
index.set(v, nextIndex);
|
|
286
|
+
lowlink.set(v, nextIndex);
|
|
287
|
+
nextIndex++;
|
|
288
|
+
stack.push(v);
|
|
289
|
+
onStack.add(v);
|
|
290
|
+
}
|
|
291
|
+
const adjV = adj(v);
|
|
292
|
+
let descended = false;
|
|
293
|
+
while (frame.ai < adjV.length) {
|
|
294
|
+
const w = adjV[frame.ai++];
|
|
295
|
+
if (!index.has(w)) {
|
|
296
|
+
work.push({ v: w, ai: 0 });
|
|
297
|
+
descended = true;
|
|
298
|
+
break;
|
|
299
|
+
}
|
|
300
|
+
else if (onStack.has(w)) {
|
|
301
|
+
const iw = index.get(w);
|
|
302
|
+
if (iw < lowlink.get(v))
|
|
303
|
+
lowlink.set(v, iw);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
if (descended)
|
|
307
|
+
continue;
|
|
308
|
+
if (lowlink.get(v) === index.get(v)) {
|
|
309
|
+
const members = [];
|
|
310
|
+
for (;;) {
|
|
311
|
+
const w = stack.pop();
|
|
312
|
+
onStack.delete(w);
|
|
313
|
+
members.push(w);
|
|
314
|
+
if (w === v)
|
|
315
|
+
break;
|
|
316
|
+
}
|
|
317
|
+
members.sort();
|
|
318
|
+
result.push(toSccFeatures(members, graph.byOccId));
|
|
319
|
+
}
|
|
320
|
+
work.pop();
|
|
321
|
+
if (work.length > 0) {
|
|
322
|
+
const parent = work.at(-1).v;
|
|
323
|
+
if (lowlink.get(v) < lowlink.get(parent)) {
|
|
324
|
+
lowlink.set(parent, lowlink.get(v));
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
return result;
|
|
330
|
+
}
|
|
331
|
+
/** Build an `SccFeatures` row from sorted member occIds. */
|
|
332
|
+
function toSccFeatures(members, byOccId) {
|
|
333
|
+
const packages = new Set();
|
|
334
|
+
for (const id of members) {
|
|
335
|
+
const occ = byOccId.get(id);
|
|
336
|
+
if (occ)
|
|
337
|
+
packages.add(pkgOf(occ));
|
|
338
|
+
}
|
|
339
|
+
return {
|
|
340
|
+
id: `scc:${members[0] ?? ''}`,
|
|
341
|
+
members,
|
|
342
|
+
sccSize: members.length,
|
|
343
|
+
crossesPackages: packages.size > 1,
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
// ── Package coupling (port of dashboard view-coupling.ts, using the
|
|
347
|
+
// engine's canonical resolveCallee instead of the browser replica) ──
|
|
348
|
+
/**
|
|
349
|
+
* Single pass over `byBodyHash`: for each occurrence (caller), resolve every
|
|
350
|
+
* call-edge target to a callee occurrence via the canonical `resolveCallee`
|
|
351
|
+
* (body-hash collision disambiguation), bucket by `(callerPkg, calleePkg)`.
|
|
352
|
+
* Emits the unfiltered whole-graph matrix — the dashboard's `passesFilter` is
|
|
353
|
+
* a UI concern, applied client-side. Self-edges (diagonal) are kept (the
|
|
354
|
+
* matrix counts them). Single pass (nested caller→edge→target loops + degree
|
|
355
|
+
* rollups); a verbatim port of the dashboard's former client coupling view.
|
|
356
|
+
*/
|
|
357
|
+
// eslint-disable-next-line sonarjs/cognitive-complexity -- single-pass coupling aggregation, see above
|
|
358
|
+
function computePackageCoupling(indexes) {
|
|
359
|
+
const counts = new Map();
|
|
360
|
+
for (const occ of indexes.byBodyHash.values()) {
|
|
361
|
+
// Package coupling is a PRODUCTION-architecture gate (graph:unexpected-coupling).
|
|
362
|
+
// Test-file occurrences are not production architecture — and, because an
|
|
363
|
+
// anonymous body duplicated between packages can resolve to a same-hash
|
|
364
|
+
// occurrence in another package's test file, counting them manufactures
|
|
365
|
+
// phantom cross-package edges (and phantom cycles). Skip test occurrences on
|
|
366
|
+
// BOTH ends, mirroring how every other production-gating rule skips
|
|
367
|
+
// `occ.inTestFile`.
|
|
368
|
+
if (occ.inTestFile)
|
|
369
|
+
continue;
|
|
370
|
+
const callerPkg = pkgOf(occ);
|
|
371
|
+
for (const callEdge of occ.calls) {
|
|
372
|
+
for (const target of callEdge.to) {
|
|
373
|
+
const callee = resolveCallee(target, occ, indexes);
|
|
374
|
+
if (!callee || callee.inTestFile)
|
|
375
|
+
continue;
|
|
376
|
+
const calleePkg = pkgOf(callee);
|
|
377
|
+
let row = counts.get(callerPkg);
|
|
378
|
+
if (!row) {
|
|
379
|
+
row = new Map();
|
|
380
|
+
counts.set(callerPkg, row);
|
|
381
|
+
}
|
|
382
|
+
row.set(calleePkg, (row.get(calleePkg) ?? 0) + 1);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
// edge rows: flatten, sorted by (callerPackage, calleePackage).
|
|
387
|
+
const edge = [];
|
|
388
|
+
for (const [callerPackage, row] of counts) {
|
|
389
|
+
for (const [calleePackage, count] of row) {
|
|
390
|
+
edge.push({ callerPackage, calleePackage, count });
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
edge.sort((a, b) => {
|
|
394
|
+
const x = a.callerPackage === b.callerPackage ? a.calleePackage : a.callerPackage;
|
|
395
|
+
const y = a.callerPackage === b.callerPackage ? b.calleePackage : b.callerPackage;
|
|
396
|
+
return Number(x > y) - Number(x < y);
|
|
397
|
+
});
|
|
398
|
+
// package rows: couplingOut = distinct callee packages per caller;
|
|
399
|
+
// couplingIn = distinct caller packages per callee. Self-edges included
|
|
400
|
+
// (the matrix diagonal), so the degrees match the matrix.
|
|
401
|
+
const outDistinct = new Map();
|
|
402
|
+
const inDistinct = new Map();
|
|
403
|
+
for (const { callerPackage, calleePackage } of edge) {
|
|
404
|
+
addDistinct(outDistinct, callerPackage, calleePackage);
|
|
405
|
+
addDistinct(inDistinct, calleePackage, callerPackage);
|
|
406
|
+
}
|
|
407
|
+
const pkg = new Map();
|
|
408
|
+
const allPkgs = new Set([...outDistinct.keys(), ...inDistinct.keys()]);
|
|
409
|
+
for (const name of allPkgs) {
|
|
410
|
+
pkg.set(name, {
|
|
411
|
+
couplingOut: outDistinct.get(name)?.size ?? 0,
|
|
412
|
+
couplingIn: inDistinct.get(name)?.size ?? 0,
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
return { package: pkg, edge };
|
|
416
|
+
}
|
|
417
|
+
function addDistinct(map, key, value) {
|
|
418
|
+
let s = map.get(key);
|
|
419
|
+
if (!s) {
|
|
420
|
+
s = new Set();
|
|
421
|
+
map.set(key, s);
|
|
422
|
+
}
|
|
423
|
+
s.add(value);
|
|
424
|
+
}
|
|
425
|
+
// ── FeatureTable ↔ PersistedFeatures projection (Phase 4 consumes) ──
|
|
426
|
+
/**
|
|
427
|
+
* Project a `FeatureTable` to the JSON-safe `PersistedFeatures`, OMITTING any
|
|
428
|
+
* entity whose driving column was not requested (so an empty-request table
|
|
429
|
+
* projects to `{}` and a lean default-run persists no blob). Maps → records;
|
|
430
|
+
* arrays pass through.
|
|
431
|
+
*/
|
|
432
|
+
export function toPersistedFeatures(table, requested) {
|
|
433
|
+
const set = new Set(requested);
|
|
434
|
+
const out = {};
|
|
435
|
+
if (wantsFunctionGrain(set) && table.function.size > 0) {
|
|
436
|
+
const record = {};
|
|
437
|
+
for (const [hash, row] of table.function)
|
|
438
|
+
record[hash] = row;
|
|
439
|
+
out.function = record;
|
|
440
|
+
}
|
|
441
|
+
if (set.has('packageCoupling')) {
|
|
442
|
+
if (table.package.size > 0) {
|
|
443
|
+
const record = {};
|
|
444
|
+
for (const [name, row] of table.package)
|
|
445
|
+
record[name] = row;
|
|
446
|
+
out.package = record;
|
|
447
|
+
}
|
|
448
|
+
out.edge = table.edge;
|
|
449
|
+
}
|
|
450
|
+
if (set.has('scc'))
|
|
451
|
+
out.scc = table.scc;
|
|
452
|
+
return out;
|
|
453
|
+
}
|
|
454
|
+
/** True when no entity is present (or every present entity is empty). */
|
|
455
|
+
export function isPersistedFeaturesEmpty(persisted) {
|
|
456
|
+
const hasFn = persisted.function !== undefined && Object.keys(persisted.function).length > 0;
|
|
457
|
+
const hasPkg = persisted.package !== undefined && Object.keys(persisted.package).length > 0;
|
|
458
|
+
const hasScc = persisted.scc !== undefined && persisted.scc.length > 0;
|
|
459
|
+
const hasEdge = persisted.edge !== undefined && persisted.edge.length > 0;
|
|
460
|
+
return !hasFn && !hasPkg && !hasScc && !hasEdge;
|
|
461
|
+
}
|
|
462
|
+
//# sourceMappingURL=features.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features.js","sourceRoot":"","sources":["../../src/pipeline/features.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stage 3 — Index build.
|
|
3
|
+
*
|
|
4
|
+
* Pure linear scans over the catalog. No TS, no AST, no filesystem.
|
|
5
|
+
* Data → data.
|
|
6
|
+
*/
|
|
7
|
+
import type { Catalog, FunctionOccurrence, Indexes } from '../types.js';
|
|
8
|
+
/** The content-keyed maps a single linear scan of the catalog produces. */
|
|
9
|
+
export interface HashMaps {
|
|
10
|
+
readonly byBodyHash: Map<string, FunctionOccurrence>;
|
|
11
|
+
readonly occurrencesByHash: Map<string, FunctionOccurrence[]>;
|
|
12
|
+
readonly bySimpleName: Map<string, string[]>;
|
|
13
|
+
/** `${filePath}:${line}:${column}` → occurrence (package-unique node id). */
|
|
14
|
+
readonly byOccId: Map<string, FunctionOccurrence>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* One linear pass over `catalog.functions` producing the content-keyed maps:
|
|
18
|
+
* `byBodyHash` (last-writer-wins, content-dedup), `occurrencesByHash` (all
|
|
19
|
+
* occurrences per hash — collision-preserving), `bySimpleName`, and `byOccId`
|
|
20
|
+
* (per-occurrence location id — the SCC/cycle node identity). Shared by
|
|
21
|
+
* `buildIndexes` and the cross-package edge-constraint pass so both derive
|
|
22
|
+
* package identity from the same scan.
|
|
23
|
+
*/
|
|
24
|
+
export declare function buildHashMaps(catalog: Catalog): HashMaps;
|
|
25
|
+
/** Builds query-side indexes (by-body-hash, by-occ-id, by-simple-name, adjacency) over the catalog. */
|
|
26
|
+
export declare function buildIndexes(catalog: Catalog): Indexes;
|
|
27
|
+
//# sourceMappingURL=indexes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexes.d.ts","sourceRoot":"","sources":["../../src/pipeline/indexes.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAExE,2EAA2E;AAC3E,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACrD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC9D,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7C,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CACnD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAWxD;AAED,uGAAuG;AACvG,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CA4BtD"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
// @fitness-ignore-file batch-operation-limits -- pure in-memory linear scans over the already-materialized catalog (bounded by repo size); the for-of loops build data→data indexes, with no DB/IO/unbounded-async to batch or paginate.
|
|
2
|
+
/**
|
|
3
|
+
* Stage 3 — Index build.
|
|
4
|
+
*
|
|
5
|
+
* Pure linear scans over the catalog. No TS, no AST, no filesystem.
|
|
6
|
+
* Data → data.
|
|
7
|
+
*/
|
|
8
|
+
import { logger, withSpan } from '@opensip-cli/core';
|
|
9
|
+
import { occId, pkgOf } from '../resolve-callee.js';
|
|
10
|
+
/**
|
|
11
|
+
* One linear pass over `catalog.functions` producing the content-keyed maps:
|
|
12
|
+
* `byBodyHash` (last-writer-wins, content-dedup), `occurrencesByHash` (all
|
|
13
|
+
* occurrences per hash — collision-preserving), `bySimpleName`, and `byOccId`
|
|
14
|
+
* (per-occurrence location id — the SCC/cycle node identity). Shared by
|
|
15
|
+
* `buildIndexes` and the cross-package edge-constraint pass so both derive
|
|
16
|
+
* package identity from the same scan.
|
|
17
|
+
*/
|
|
18
|
+
export function buildHashMaps(catalog) {
|
|
19
|
+
const maps = {
|
|
20
|
+
byBodyHash: new Map(),
|
|
21
|
+
occurrencesByHash: new Map(),
|
|
22
|
+
bySimpleName: new Map(),
|
|
23
|
+
byOccId: new Map(),
|
|
24
|
+
};
|
|
25
|
+
for (const name of Object.keys(catalog.functions)) {
|
|
26
|
+
indexNameBucket(catalog, name, maps);
|
|
27
|
+
}
|
|
28
|
+
return maps;
|
|
29
|
+
}
|
|
30
|
+
/** Builds query-side indexes (by-body-hash, by-occ-id, by-simple-name, adjacency) over the catalog. */
|
|
31
|
+
export function buildIndexes(catalog) {
|
|
32
|
+
return withSpan('opensip-cli-graph', 'graph.indexes', () => {
|
|
33
|
+
const { byBodyHash, occurrencesByHash, bySimpleName, byOccId } = buildHashMaps(catalog);
|
|
34
|
+
const { callees, callers } = buildAdjacency(occurrencesByHash, byBodyHash);
|
|
35
|
+
const importedPackagesByFile = buildImportedPackagesByFile(occurrencesByHash, byBodyHash);
|
|
36
|
+
logger.info({
|
|
37
|
+
evt: 'graph.indexes.build.complete',
|
|
38
|
+
module: 'graph:indexes',
|
|
39
|
+
nodes: byBodyHash.size,
|
|
40
|
+
edges: [...callees.values()].reduce((n, arr) => n + arr.length, 0),
|
|
41
|
+
});
|
|
42
|
+
return {
|
|
43
|
+
byBodyHash,
|
|
44
|
+
byOccId,
|
|
45
|
+
occurrencesByHash,
|
|
46
|
+
importedPackagesByFile,
|
|
47
|
+
bySimpleName,
|
|
48
|
+
callees,
|
|
49
|
+
callers,
|
|
50
|
+
};
|
|
51
|
+
}, { 'graph.indexes.nodes': /* approximate */ 0 });
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* filePath → set of package groups it imports. Reads each file's module-init
|
|
55
|
+
* `dependencies[]` (the resolved import targets) and maps each to its
|
|
56
|
+
* package via `packageOf`. Files without resolved imports (and all files in
|
|
57
|
+
* `fast` mode, which has no `dependencies[]`) get no entry.
|
|
58
|
+
*/
|
|
59
|
+
function buildImportedPackagesByFile(occurrencesByHash, byBodyHash) {
|
|
60
|
+
const out = new Map();
|
|
61
|
+
for (const occs of occurrencesByHash.values()) {
|
|
62
|
+
for (const occ of occs) {
|
|
63
|
+
const pkgs = importedPackagesOf(occ, byBodyHash);
|
|
64
|
+
if (pkgs.size > 0)
|
|
65
|
+
unionInto(out, occ.filePath, pkgs);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return out;
|
|
69
|
+
}
|
|
70
|
+
/** Package groups one module-init occurrence imports (resolved via byBodyHash). */
|
|
71
|
+
function importedPackagesOf(occ, byBodyHash) {
|
|
72
|
+
const set = new Set();
|
|
73
|
+
for (const dep of occ.dependencies ?? []) {
|
|
74
|
+
for (const targetHash of dep.to) {
|
|
75
|
+
const target = byBodyHash.get(targetHash);
|
|
76
|
+
if (target)
|
|
77
|
+
set.add(pkgOf(target));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return set;
|
|
81
|
+
}
|
|
82
|
+
function unionInto(map, key, values) {
|
|
83
|
+
let set = map.get(key);
|
|
84
|
+
if (!set) {
|
|
85
|
+
set = new Set();
|
|
86
|
+
map.set(key, set);
|
|
87
|
+
}
|
|
88
|
+
for (const v of values)
|
|
89
|
+
set.add(v);
|
|
90
|
+
}
|
|
91
|
+
function indexNameBucket(catalog, name, maps) {
|
|
92
|
+
const occs = catalog.functions[name];
|
|
93
|
+
/* v8 ignore next */
|
|
94
|
+
if (!occs)
|
|
95
|
+
return;
|
|
96
|
+
for (const o of occs) {
|
|
97
|
+
maps.byBodyHash.set(o.bodyHash, o);
|
|
98
|
+
pushTo(maps.occurrencesByHash, o.bodyHash, o);
|
|
99
|
+
pushTo(maps.bySimpleName, name, o.bodyHash);
|
|
100
|
+
maps.byOccId.set(occId(o), o);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/** Append `value` to the array stored at `key`, creating it if absent. */
|
|
104
|
+
function pushTo(map, key, value) {
|
|
105
|
+
let arr = map.get(key);
|
|
106
|
+
if (!arr) {
|
|
107
|
+
arr = [];
|
|
108
|
+
map.set(key, arr);
|
|
109
|
+
}
|
|
110
|
+
arr.push(value);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Build the callees/callers adjacency, **twin-aware** (ADR-0003): a body hash's
|
|
114
|
+
* out-edges are the UNION of every occurrence sharing that hash, deduplicated to
|
|
115
|
+
* distinct neighbors. Iterating `byBodyHash` winners instead (last-writer-wins)
|
|
116
|
+
* would erase losing body-twins' out-edges from the graph — which made
|
|
117
|
+
* reachability rules (`orphan-subtree`, `test-only-reachable`) report false
|
|
118
|
+
* orphans for any function reached only through a twin that lost the slot.
|
|
119
|
+
*/
|
|
120
|
+
function buildAdjacency(occurrencesByHash, byBodyHash) {
|
|
121
|
+
const callees = new Map();
|
|
122
|
+
const callerSets = new Map();
|
|
123
|
+
for (const [ownerHash, occs] of occurrencesByHash) {
|
|
124
|
+
const out = collectOutgoing(occs, byBodyHash);
|
|
125
|
+
if (out.size === 0)
|
|
126
|
+
continue;
|
|
127
|
+
callees.set(ownerHash, [...out]);
|
|
128
|
+
for (const target of out)
|
|
129
|
+
pushCaller(callerSets, target, ownerHash);
|
|
130
|
+
}
|
|
131
|
+
const callers = new Map();
|
|
132
|
+
for (const [target, owners] of callerSets)
|
|
133
|
+
callers.set(target, [...owners]);
|
|
134
|
+
return { callees, callers };
|
|
135
|
+
}
|
|
136
|
+
/** Distinct in-catalog call targets across every occurrence sharing a body hash. */
|
|
137
|
+
function collectOutgoing(occs, byBodyHash) {
|
|
138
|
+
const out = new Set();
|
|
139
|
+
for (const occ of occs) {
|
|
140
|
+
for (const edge of occ.calls) {
|
|
141
|
+
for (const target of edge.to) {
|
|
142
|
+
/* v8 ignore next */
|
|
143
|
+
if (!byBodyHash.has(target))
|
|
144
|
+
continue;
|
|
145
|
+
out.add(target);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return out;
|
|
150
|
+
}
|
|
151
|
+
function pushCaller(callers, target, caller) {
|
|
152
|
+
let inb = callers.get(target);
|
|
153
|
+
if (!inb) {
|
|
154
|
+
inb = new Set();
|
|
155
|
+
callers.set(target, inb);
|
|
156
|
+
}
|
|
157
|
+
inb.add(caller);
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=indexes.js.map
|