@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,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shard model and the serializable worker-boundary contract.
|
|
3
|
+
*
|
|
4
|
+
* A sharded build splits a multi-package project into independent shards
|
|
5
|
+
* (one workspace package, one `--packages` unit, or one flat-monorepo
|
|
6
|
+
* partition), builds each in its own worker process, and merges the
|
|
7
|
+
* per-shard catalog fragments — recovering the cross-package edges the
|
|
8
|
+
* old fan-out modes silently dropped.
|
|
9
|
+
*
|
|
10
|
+
* The load-bearing constraint: a worker process cannot hand back a
|
|
11
|
+
* `ts.Node` / `ts.Program` (not structured-cloneable). So every type that
|
|
12
|
+
* crosses the worker boundary here is JSON-safe by construction — a
|
|
13
|
+
* primitive, an array, or a `Catalog` (already the plain shape persisted
|
|
14
|
+
* to the datastore today). The boundary carries DATA, never ASTs.
|
|
15
|
+
*
|
|
16
|
+
* Lifecycle:
|
|
17
|
+
* discovery → Shard[] (workspace/packages/partition)
|
|
18
|
+
* worker(Shard) → ShardBuildResult (Phase 1, per process)
|
|
19
|
+
* merge(fragments) + resolve(boundaryCalls) (Phase 2, main thread)
|
|
20
|
+
* cache(fragment by shardId+fingerprint) (Phase 3)
|
|
21
|
+
*/
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=shard-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shard-model.js","sourceRoot":"","sources":["../../../src/cli/orchestrate/shard-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shard runner — drives N shard workers in parallel and collects their
|
|
3
|
+
* serializable `ShardBuildResult` fragments.
|
|
4
|
+
*
|
|
5
|
+
* Each shard is built in its own child process (`graph-shard-worker`), so
|
|
6
|
+
* heap is isolated per shard: N shards × per-shard budget ≈ total budget,
|
|
7
|
+
* the same memory-scaling property the legacy `--workspace` runner has.
|
|
8
|
+
* Concurrency is capped at `cpus()-1` by default. A worker that exits
|
|
9
|
+
* non-zero is surfaced as a `ShardFailure` attributable to its shard id
|
|
10
|
+
* rather than aborting the whole build.
|
|
11
|
+
*
|
|
12
|
+
* The spec is handed to the worker via a temp FILE (not argv) because a
|
|
13
|
+
* shard can enumerate thousands of files, well past the OS argv limit.
|
|
14
|
+
*/
|
|
15
|
+
import type { Shard, ShardBuildResult } from './shard-model.js';
|
|
16
|
+
import type { GraphLanguageAdapter } from '../../lang-adapter/types.js';
|
|
17
|
+
import type { CatalogRepo } from '../../persistence/catalog-repo.js';
|
|
18
|
+
import type { ResolutionMode } from '../../types.js';
|
|
19
|
+
export interface RunShardsInput {
|
|
20
|
+
readonly shards: readonly Shard[];
|
|
21
|
+
/** Common project root — every fragment's filePaths resolve against it. */
|
|
22
|
+
readonly projectRoot: string;
|
|
23
|
+
/** CLI entry script (`process.argv[1]`); children run `node <cliScript> graph-shard-worker <spec>`. */
|
|
24
|
+
readonly cliScript: string;
|
|
25
|
+
/** Optional adapter id requested by the parent `graph --language <id>` run. */
|
|
26
|
+
readonly language?: string;
|
|
27
|
+
readonly resolutionMode: ResolutionMode;
|
|
28
|
+
/** Concurrency cap. Default: `max(1, cpus()-1)`. */
|
|
29
|
+
readonly concurrency?: number;
|
|
30
|
+
}
|
|
31
|
+
/** A shard whose worker exited non-zero — attributable, non-fatal. */
|
|
32
|
+
export interface ShardFailure {
|
|
33
|
+
readonly shardId: string;
|
|
34
|
+
readonly exitCode: number;
|
|
35
|
+
readonly stderr: string;
|
|
36
|
+
}
|
|
37
|
+
export interface RunShardsOutput {
|
|
38
|
+
readonly fragments: readonly ShardBuildResult[];
|
|
39
|
+
readonly failures: readonly ShardFailure[];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Build every shard in a bounded parallel pool. Always resolves; per-shard
|
|
43
|
+
* failures are collected in `failures` (never thrown) so one bad shard
|
|
44
|
+
* doesn't sink the build.
|
|
45
|
+
*/
|
|
46
|
+
export declare function runShardsInParallel(input: RunShardsInput): Promise<RunShardsOutput>;
|
|
47
|
+
/** Partition of a build's shards into reusable-from-cache vs needs-rebuild. */
|
|
48
|
+
export interface ShardWorkPlan {
|
|
49
|
+
/** Fragments loaded verbatim from the per-shard cache — no worker runs. */
|
|
50
|
+
readonly cached: readonly ShardBuildResult[];
|
|
51
|
+
/** Shards whose files (or config/mode) changed — a worker must rebuild them. */
|
|
52
|
+
readonly toBuild: readonly Shard[];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Decide, per shard, whether its cached fragment is still valid (config
|
|
56
|
+
* key + files fingerprint match) and can be reused without a worker, or
|
|
57
|
+
* whether the shard must be rebuilt. This is the incremental-parse fix:
|
|
58
|
+
* unchanged shards skip parse entirely. With `useCache=false` (or no
|
|
59
|
+
* repo) every shard is rebuilt.
|
|
60
|
+
*
|
|
61
|
+
* Cheap by design — it stats each shard's files (fingerprint) and reads
|
|
62
|
+
* each shard's config (cacheKey); no parsing, no worker spawn.
|
|
63
|
+
*/
|
|
64
|
+
export declare function planShardWork(shards: readonly Shard[], repo: CatalogRepo | null, adapter: GraphLanguageAdapter, resolutionMode: ResolutionMode, useCache: boolean): ShardWorkPlan;
|
|
65
|
+
//# sourceMappingURL=shard-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shard-runner.d.ts","sourceRoot":"","sources":["../../../src/cli/orchestrate/shard-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAcH,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAmB,MAAM,kBAAkB,CAAC;AACjF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;IAClC,2EAA2E;IAC3E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,uGAAuG;IACvG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,oDAAoD;IACpD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,sEAAsE;AACtE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;CAC5C;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAoCzF;AAED,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC7C,gFAAgF;IAChF,QAAQ,CAAC,OAAO,EAAE,SAAS,KAAK,EAAE,CAAC;CACpC;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,KAAK,EAAE,EACxB,IAAI,EAAE,WAAW,GAAG,IAAI,EACxB,OAAO,EAAE,oBAAoB,EAC7B,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,OAAO,GAChB,aAAa,CA2Bf"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shard runner — drives N shard workers in parallel and collects their
|
|
3
|
+
* serializable `ShardBuildResult` fragments.
|
|
4
|
+
*
|
|
5
|
+
* Each shard is built in its own child process (`graph-shard-worker`), so
|
|
6
|
+
* heap is isolated per shard: N shards × per-shard budget ≈ total budget,
|
|
7
|
+
* the same memory-scaling property the legacy `--workspace` runner has.
|
|
8
|
+
* Concurrency is capped at `cpus()-1` by default. A worker that exits
|
|
9
|
+
* non-zero is surfaced as a `ShardFailure` attributable to its shard id
|
|
10
|
+
* rather than aborting the whole build.
|
|
11
|
+
*
|
|
12
|
+
* The spec is handed to the worker via a temp FILE (not argv) because a
|
|
13
|
+
* shard can enumerate thousands of files, well past the OS argv limit.
|
|
14
|
+
*/
|
|
15
|
+
import { spawn } from 'node:child_process';
|
|
16
|
+
import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
17
|
+
import { cpus, tmpdir } from 'node:os';
|
|
18
|
+
import { join } from 'node:path';
|
|
19
|
+
import { currentTraceparent, logger } from '@opensip-cli/core';
|
|
20
|
+
import { stampEngineVersion } from '../../cache/engine-version.js';
|
|
21
|
+
import { computeFilesFingerprint } from '../../cache/invalidate.js';
|
|
22
|
+
import { runWorkerPool } from './worker-pool.js';
|
|
23
|
+
/**
|
|
24
|
+
* Build every shard in a bounded parallel pool. Always resolves; per-shard
|
|
25
|
+
* failures are collected in `failures` (never thrown) so one bad shard
|
|
26
|
+
* doesn't sink the build.
|
|
27
|
+
*/
|
|
28
|
+
export async function runShardsInParallel(input) {
|
|
29
|
+
const concurrency = Math.max(1, input.concurrency ?? Math.max(1, cpus().length - 1));
|
|
30
|
+
logger.info({
|
|
31
|
+
evt: 'graph.shard.runner.start',
|
|
32
|
+
module: 'graph:shard-runner',
|
|
33
|
+
shards: input.shards.length,
|
|
34
|
+
concurrency,
|
|
35
|
+
});
|
|
36
|
+
const outcomes = await runWorkerPool(input.shards, concurrency, (shard) => spawnShardWorker(shard, input.projectRoot, input.cliScript, input.resolutionMode, input.language));
|
|
37
|
+
const fragments = [];
|
|
38
|
+
const failures = [];
|
|
39
|
+
for (const o of outcomes) {
|
|
40
|
+
if (o.result)
|
|
41
|
+
fragments.push(o.result);
|
|
42
|
+
else
|
|
43
|
+
failures.push({ shardId: o.shardId, exitCode: o.exitCode, stderr: o.stderr });
|
|
44
|
+
}
|
|
45
|
+
// Deterministic order regardless of completion order.
|
|
46
|
+
fragments.sort((a, b) => Number(a.shardId > b.shardId) - Number(a.shardId < b.shardId));
|
|
47
|
+
failures.sort((a, b) => Number(a.shardId > b.shardId) - Number(a.shardId < b.shardId));
|
|
48
|
+
logger.info({
|
|
49
|
+
evt: 'graph.shard.runner.complete',
|
|
50
|
+
module: 'graph:shard-runner',
|
|
51
|
+
built: fragments.length,
|
|
52
|
+
failed: failures.length,
|
|
53
|
+
});
|
|
54
|
+
return { fragments, failures };
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Decide, per shard, whether its cached fragment is still valid (config
|
|
58
|
+
* key + files fingerprint match) and can be reused without a worker, or
|
|
59
|
+
* whether the shard must be rebuilt. This is the incremental-parse fix:
|
|
60
|
+
* unchanged shards skip parse entirely. With `useCache=false` (or no
|
|
61
|
+
* repo) every shard is rebuilt.
|
|
62
|
+
*
|
|
63
|
+
* Cheap by design — it stats each shard's files (fingerprint) and reads
|
|
64
|
+
* each shard's config (cacheKey); no parsing, no worker spawn.
|
|
65
|
+
*/
|
|
66
|
+
export function planShardWork(shards, repo, adapter, resolutionMode, useCache) {
|
|
67
|
+
if (!useCache || !repo)
|
|
68
|
+
return { cached: [], toBuild: [...shards] };
|
|
69
|
+
const cached = [];
|
|
70
|
+
const toBuild = [];
|
|
71
|
+
for (const shard of shards) {
|
|
72
|
+
const cacheKey = stampEngineVersion(adapter.cacheKey({
|
|
73
|
+
projectDirAbs: shard.rootDir,
|
|
74
|
+
configPathAbs: shard.configPathAbs,
|
|
75
|
+
resolutionMode,
|
|
76
|
+
}),
|
|
77
|
+
// Shard fragments only ever feed the sharded engine; stamp the mode so a
|
|
78
|
+
// fragment row can never be confused with a single-program (exact) build.
|
|
79
|
+
'sharded');
|
|
80
|
+
const fingerprint = computeFilesFingerprint(shard.files);
|
|
81
|
+
const fragment = repo.loadValidShardFragment(shard.id, cacheKey, fingerprint);
|
|
82
|
+
if (fragment)
|
|
83
|
+
cached.push(fragment);
|
|
84
|
+
else
|
|
85
|
+
toBuild.push(shard);
|
|
86
|
+
}
|
|
87
|
+
logger.info({
|
|
88
|
+
evt: 'graph.shard.plan',
|
|
89
|
+
module: 'graph:shard-runner',
|
|
90
|
+
reused: cached.length,
|
|
91
|
+
rebuild: toBuild.length,
|
|
92
|
+
});
|
|
93
|
+
return { cached, toBuild };
|
|
94
|
+
}
|
|
95
|
+
function spawnShardWorker(shard, projectRoot, cliScript, resolutionMode, language) {
|
|
96
|
+
return new Promise((resolvePromise) => {
|
|
97
|
+
const specDir = mkdtempSync(join(tmpdir(), 'graph-shard-'));
|
|
98
|
+
const specPath = join(specDir, 'spec.json');
|
|
99
|
+
const spec = {
|
|
100
|
+
shard,
|
|
101
|
+
projectRoot,
|
|
102
|
+
resolutionMode,
|
|
103
|
+
...(language ? { language } : {}),
|
|
104
|
+
};
|
|
105
|
+
writeFileSync(specPath, JSON.stringify(spec), 'utf8');
|
|
106
|
+
const cleanup = () => rmSync(specDir, { recursive: true, force: true });
|
|
107
|
+
// Propagate the active trace context (the parent's sharded-build span) to
|
|
108
|
+
// the worker as TRACEPARENT, so the worker's per-stage spans nest under our
|
|
109
|
+
// build trace instead of forming orphan traces. `currentTraceparent()` is
|
|
110
|
+
// undefined for standalone runs (no SDK), so TRACEPARENT is simply absent
|
|
111
|
+
// and the worker emits no spans, exactly as before.
|
|
112
|
+
const traceparent = currentTraceparent();
|
|
113
|
+
// Inherit the PARENT's cwd (the opensip-cli project dir) so the
|
|
114
|
+
// child's CLI bootstrap resolves the project + adapter registry. The
|
|
115
|
+
// shard's own files are built from `shard.rootDir` in the spec, not from
|
|
116
|
+
// cwd — so the shard need not be a project itself. The full parent env is
|
|
117
|
+
// forwarded (the child needs PATH/HOME/OTEL_* etc.) into spawn's env option
|
|
118
|
+
// only — never logged.
|
|
119
|
+
const child = spawn(process.execPath, [cliScript, 'graph-shard-worker', specPath], {
|
|
120
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
121
|
+
env: {
|
|
122
|
+
...process.env,
|
|
123
|
+
...(traceparent ? { TRACEPARENT: traceparent } : {}),
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
let stdout = '';
|
|
127
|
+
let stderr = '';
|
|
128
|
+
// setEncoding routes chunks through a StringDecoder that buffers
|
|
129
|
+
// partial multi-byte UTF-8 sequences across 'data' chunk boundaries.
|
|
130
|
+
// Without it, a non-ASCII char split across two chunks (likely for
|
|
131
|
+
// large fragments arriving in many chunks) decodes to replacement
|
|
132
|
+
// chars and corrupts the JSON parsed in the close handler.
|
|
133
|
+
child.stdout.setEncoding('utf8');
|
|
134
|
+
child.stderr.setEncoding('utf8');
|
|
135
|
+
child.stdout.on('data', (c) => {
|
|
136
|
+
stdout += c;
|
|
137
|
+
});
|
|
138
|
+
child.stderr.on('data', (c) => {
|
|
139
|
+
stderr += c;
|
|
140
|
+
});
|
|
141
|
+
child.on('error', (err) => {
|
|
142
|
+
/* v8 ignore start */
|
|
143
|
+
cleanup();
|
|
144
|
+
resolvePromise({ shardId: shard.id, exitCode: -1, stderr: `spawn failed: ${err.message}` });
|
|
145
|
+
/* v8 ignore stop */
|
|
146
|
+
});
|
|
147
|
+
child.on('close', (code) => {
|
|
148
|
+
cleanup();
|
|
149
|
+
if (code !== 0) {
|
|
150
|
+
resolvePromise({ shardId: shard.id, exitCode: code ?? -1, stderr });
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
try {
|
|
154
|
+
const result = JSON.parse(stdout);
|
|
155
|
+
resolvePromise({ shardId: shard.id, result, exitCode: 0, stderr });
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
/* v8 ignore start */
|
|
159
|
+
resolvePromise({
|
|
160
|
+
shardId: shard.id,
|
|
161
|
+
exitCode: 1,
|
|
162
|
+
stderr: `unparseable worker output: ${error instanceof Error ? error.message : String(error)}`,
|
|
163
|
+
});
|
|
164
|
+
/* v8 ignore stop */
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=shard-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shard-runner.js","sourceRoot":"","sources":["../../../src/cli/orchestrate/shard-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sharded build pipeline (plan #2, Phase 4).
|
|
3
|
+
*
|
|
4
|
+
* Ties the shard substrate together into a single unified build:
|
|
5
|
+
* plan (reuse cached fragments) → run changed shards in parallel →
|
|
6
|
+
* merge fragments + recover cross-package edges → persist → derive
|
|
7
|
+
* indexes + run rules → return the same RunGraphResult the
|
|
8
|
+
* single-process path produces.
|
|
9
|
+
*
|
|
10
|
+
* The result's catalog is unified: intra-shard edges keep their original
|
|
11
|
+
* (semantic, in exact mode) fidelity; cross-package edges are recovered
|
|
12
|
+
* by the boundary pass and labeled `crossShard: true` / `'syntactic'`.
|
|
13
|
+
*/
|
|
14
|
+
import { type Signal } from '@opensip-cli/core';
|
|
15
|
+
import type { Shard, ShardRunStats } from './shard-model.js';
|
|
16
|
+
import type { GraphProgressCallback } from './types.js';
|
|
17
|
+
import type { GraphLanguageAdapter } from '../../lang-adapter/types.js';
|
|
18
|
+
import type { CatalogRepo } from '../../persistence/catalog-repo.js';
|
|
19
|
+
import type { Catalog, FeatureColumn, FeatureTable, GraphConfig, Indexes, ResolutionMode, ResolutionStats, Rule } from '../../types.js';
|
|
20
|
+
/**
|
|
21
|
+
* Input to {@link runShardedGraph}: the planned shards plus the shared build
|
|
22
|
+
* context (project root, worker entry script, language adapter, resolution
|
|
23
|
+
* tier, cache/persistence handles, and optional rules/config overrides).
|
|
24
|
+
*/
|
|
25
|
+
export interface RunShardedInput {
|
|
26
|
+
readonly shards: readonly Shard[];
|
|
27
|
+
/** Common project root — every fragment's filePaths resolve against it. */
|
|
28
|
+
readonly projectRoot: string;
|
|
29
|
+
/** CLI entry script (`process.argv[1]`) for spawning shard workers. */
|
|
30
|
+
readonly cliScript: string;
|
|
31
|
+
readonly adapter: GraphLanguageAdapter;
|
|
32
|
+
/** Optional adapter id requested by the parent `graph --language <id>` run. */
|
|
33
|
+
readonly language?: string;
|
|
34
|
+
readonly resolutionMode: ResolutionMode;
|
|
35
|
+
readonly concurrency?: number;
|
|
36
|
+
readonly useCache: boolean;
|
|
37
|
+
readonly catalogRepo: CatalogRepo | null;
|
|
38
|
+
readonly config?: GraphConfig;
|
|
39
|
+
readonly rules?: readonly Rule[];
|
|
40
|
+
/**
|
|
41
|
+
* Dashboard feature columns to materialize into the persisted catalog
|
|
42
|
+
* (ADR-0006). The sharded build is the producing run for multi-package
|
|
43
|
+
* repos, so it persists the same columns as the single path. Unioned with
|
|
44
|
+
* the rule set's `featureDeps`.
|
|
45
|
+
*/
|
|
46
|
+
readonly emitFeatures?: readonly FeatureColumn[];
|
|
47
|
+
/**
|
|
48
|
+
* Optional structured progress callback (ADR-0032). The sharded build maps its
|
|
49
|
+
* work onto the SAME seven canonical {@link GraphStage}s the single-program
|
|
50
|
+
* (`runGraph`) path emits, so the live renderer (`graph-runner.tsx`) shows the
|
|
51
|
+
* identical "Code Graph" checklist for the sharded default and `--exact`:
|
|
52
|
+
* - `discover` — total file count across all shards
|
|
53
|
+
* - `parse` — the parallel shard phase (sub-label: shard count)
|
|
54
|
+
* - `walk` — merge the per-shard fragments into the unified catalog
|
|
55
|
+
* - `resolve` — recover cross-package edges across shard boundaries
|
|
56
|
+
* - `index` — derive reverse indexes over the merged catalog
|
|
57
|
+
* - `features` — derive the feature columns
|
|
58
|
+
* - `rules` — evaluate the rule set
|
|
59
|
+
* Non-interactive callers (json/gate/report) leave it undefined — a no-op.
|
|
60
|
+
*/
|
|
61
|
+
readonly onProgress?: GraphProgressCallback;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Result of {@link runShardedGraph}: the unified catalog and derived indexes,
|
|
65
|
+
* the rule signals evaluated over it, cross-shard resolution stats, and
|
|
66
|
+
* cache/failure metadata (whether every shard was a cache hit, and the ids of
|
|
67
|
+
* any shards whose worker failed).
|
|
68
|
+
*/
|
|
69
|
+
export interface RunShardedResult {
|
|
70
|
+
readonly catalog: Catalog;
|
|
71
|
+
readonly indexes: Indexes;
|
|
72
|
+
readonly signals: readonly Signal[];
|
|
73
|
+
readonly resolutionStats: ResolutionStats;
|
|
74
|
+
/** True when every shard was reused from cache (no worker ran). */
|
|
75
|
+
readonly cacheHit: boolean;
|
|
76
|
+
/** Shard ids whose worker failed (build proceeds with the rest). */
|
|
77
|
+
readonly failedShardIds: readonly string[];
|
|
78
|
+
/** Engine-computed feature table over the merged global catalog (only the
|
|
79
|
+
* requested columns populated). */
|
|
80
|
+
readonly features: FeatureTable;
|
|
81
|
+
/** Per-run sharded-build statistics (mirrored into the --profile summary). */
|
|
82
|
+
readonly shardStats: ShardRunStats;
|
|
83
|
+
}
|
|
84
|
+
/** Run the full sharded build and return a unified RunGraphResult-shaped value. */
|
|
85
|
+
export declare function runShardedGraph(input: RunShardedInput): Promise<RunShardedResult>;
|
|
86
|
+
//# sourceMappingURL=sharded-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sharded-graph.d.ts","sourceRoot":"","sources":["../../../src/cli/orchestrate/sharded-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAA0C,KAAK,MAAM,EAAa,MAAM,mBAAmB,CAAC;AAqBnG,OAAO,KAAK,EAAE,KAAK,EAAoB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,KAAK,EAAE,qBAAqB,EAAc,MAAM,YAAY,CAAC;AACpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EACb,YAAY,EACZ,WAAW,EACX,OAAO,EACP,cAAc,EACd,eAAe,EACf,IAAI,EACL,MAAM,gBAAgB,CAAC;AAExB;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;IAClC,2EAA2E;IAC3E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,uEAAuE;IACvE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;IACvC,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC;IACjC;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACjD;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,qBAAqB,CAAC;CAC7C;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,oEAAoE;IACpE,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C;wCACoC;IACpC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;CACpC;AAED,mFAAmF;AACnF,wBAAsB,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAWvF"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sharded build pipeline (plan #2, Phase 4).
|
|
3
|
+
*
|
|
4
|
+
* Ties the shard substrate together into a single unified build:
|
|
5
|
+
* plan (reuse cached fragments) → run changed shards in parallel →
|
|
6
|
+
* merge fragments + recover cross-package edges → persist → derive
|
|
7
|
+
* indexes + run rules → return the same RunGraphResult the
|
|
8
|
+
* single-process path produces.
|
|
9
|
+
*
|
|
10
|
+
* The result's catalog is unified: intra-shard edges keep their original
|
|
11
|
+
* (semantic, in exact mode) fidelity; cross-package edges are recovered
|
|
12
|
+
* by the boundary pass and labeled `crossShard: true` / `'syntactic'`.
|
|
13
|
+
*/
|
|
14
|
+
import { logger, ValidationError, withSpanAsync } from '@opensip-cli/core';
|
|
15
|
+
import { buildPackageManifestIndex } from '../../cross-package/export-index.js';
|
|
16
|
+
import { unionFeatureDeps } from '../../pipeline/feature-deps.js';
|
|
17
|
+
import { buildFeatures, isPersistedFeaturesEmpty, toPersistedFeatures, } from '../../pipeline/features.js';
|
|
18
|
+
import { buildIndexes } from '../../pipeline/indexes.js';
|
|
19
|
+
import { currentRules } from '../../rules/registry.js';
|
|
20
|
+
import { GRAPH_TRACER } from '../graph-tracer.js';
|
|
21
|
+
import { countCatalogCallSites, countCatalogFunctions } from './catalog-stats.js';
|
|
22
|
+
import { mergeShardFragments, resolveCrossBoundaryCalls, stampAndConstrainPackages, } from './cross-shard-resolve.js';
|
|
23
|
+
import { planShardWork, runShardsInParallel } from './shard-runner.js';
|
|
24
|
+
/** Run the full sharded build and return a unified RunGraphResult-shaped value. */
|
|
25
|
+
export async function runShardedGraph(input) {
|
|
26
|
+
// One parent span for the whole sharded build. withSpanAsync keeps it open
|
|
27
|
+
// across the awaited parallel work, so the per-shard worker spans — which
|
|
28
|
+
// inherit our context via the TRACEPARENT the runner propagates — nest under
|
|
29
|
+
// it instead of forming orphan traces. Hard no-op when no SDK is registered.
|
|
30
|
+
return withSpanAsync(GRAPH_TRACER, 'opensip_cli.graph.sharded_build', (span) => buildShardedGraph(input, span), { 'opensip_cli.graph.shard_count': input.shards.length });
|
|
31
|
+
}
|
|
32
|
+
async function buildShardedGraph(input, span) {
|
|
33
|
+
const { shards, projectRoot, cliScript, adapter, resolutionMode, useCache, catalogRepo } = input;
|
|
34
|
+
const onProgress = input.onProgress;
|
|
35
|
+
// 0. Fail loud on duplicate shard ids. The shard id is the per-shard
|
|
36
|
+
// fragment-cache PRIMARY KEY (`graph_shard_fragment.shard_id`); two shards
|
|
37
|
+
// sharing an id silently overwrite each other's cache row, so the warm
|
|
38
|
+
// build never reaches a stable all-cached state and the function/entry-
|
|
39
|
+
// point counts drift run-to-run. A duplicate id is a discovery bug (e.g. a
|
|
40
|
+
// workspace-unit id derived by bare basename collapsing nested packages),
|
|
41
|
+
// never a recoverable runtime condition — so we throw rather than return a
|
|
42
|
+
// quietly-wrong graph.
|
|
43
|
+
// @fitness-ignore-next-line detached-promises -- assertUniqueShardIds is a synchronous void assertion (throws on a duplicate id); there is no promise to await.
|
|
44
|
+
assertUniqueShardIds(shards);
|
|
45
|
+
// The seven canonical stages, mapped onto the sharded work so the live view
|
|
46
|
+
// shows the same "Code Graph" checklist as the exact engine (ADR-0032). The
|
|
47
|
+
// file set is fixed before any phase runs (shards are pre-enumerated), so the
|
|
48
|
+
// `discover` stage is a zero-cost report of the partitioned total.
|
|
49
|
+
const allFiles = shards.flatMap((s) => s.files);
|
|
50
|
+
emitStageStart(onProgress, 'discover');
|
|
51
|
+
emitStage(onProgress, 'discover', 0, `${String(allFiles.length)} files`);
|
|
52
|
+
// 1. Decide which shards can be reused from cache vs must be rebuilt, then
|
|
53
|
+
// 2. build the changed shards in parallel worker processes. Both fold into
|
|
54
|
+
// the `parse` stage (the heavy per-shard parse/walk/resolve runs inside the
|
|
55
|
+
// subprocesses) — its sub-label reflects the shard count.
|
|
56
|
+
const parseStart = Date.now();
|
|
57
|
+
emitStageStart(onProgress, 'parse');
|
|
58
|
+
const plan = planShardWork(shards, catalogRepo, adapter, resolutionMode, useCache);
|
|
59
|
+
const built = await runShardsInParallel({
|
|
60
|
+
shards: plan.toBuild,
|
|
61
|
+
projectRoot,
|
|
62
|
+
cliScript,
|
|
63
|
+
resolutionMode,
|
|
64
|
+
concurrency: input.concurrency,
|
|
65
|
+
...(input.language === undefined ? {} : { language: input.language }),
|
|
66
|
+
});
|
|
67
|
+
for (const failure of built.failures) {
|
|
68
|
+
logger.error({
|
|
69
|
+
evt: 'graph.sharded.shard_failed',
|
|
70
|
+
module: 'graph:sharded',
|
|
71
|
+
shardId: failure.shardId,
|
|
72
|
+
exitCode: failure.exitCode,
|
|
73
|
+
stderr: failure.stderr.slice(0, 500),
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
const shardWord = shards.length === 1 ? 'shard' : 'shards';
|
|
77
|
+
emitStage(onProgress, 'parse', Date.now() - parseStart, `${String(shards.length)} ${shardWord}`);
|
|
78
|
+
// 3a. Merge cached + freshly-built fragments — the `walk` stage. Mirrors the
|
|
79
|
+
// single-program walk: it assembles the per-file occurrences into one
|
|
80
|
+
// catalog, so its sub-label reports the resulting function count.
|
|
81
|
+
const fragments = [...plan.cached, ...built.fragments];
|
|
82
|
+
// The export linker keys packages by name; build the manifest index once from
|
|
83
|
+
// the resolved shard set (each shard.rootDir holds a package.json) so the
|
|
84
|
+
// boundary resolver can turn a bare specifier into a target package group.
|
|
85
|
+
const manifestIndex = buildPackageManifestIndex(shards, projectRoot);
|
|
86
|
+
const walkStart = Date.now();
|
|
87
|
+
emitStageStart(onProgress, 'walk');
|
|
88
|
+
const merged = mergeShardFragments(fragments.map((f) => f.fragment), allFiles);
|
|
89
|
+
emitStage(onProgress, 'walk', Date.now() - walkStart, `${String(countCatalogFunctions(merged))} functions`);
|
|
90
|
+
// 3b. Resolve the cross-shard boundary calls against the export index — graph's
|
|
91
|
+
// main-thread analogue of the single-program `resolve` stage — then stamp
|
|
92
|
+
// packages + drop name-guessed cross-package edges that contradict the import
|
|
93
|
+
// graph (same correction as the single-program path). Timed for REAL (not a
|
|
94
|
+
// hardcoded 0): the per-shard intra-package resolution already ran inside the
|
|
95
|
+
// shard subprocesses (the `parse`/build-shards stage), so this stage is the
|
|
96
|
+
// cross-package linking + constraint pass. Sub-label is the catalog-derived
|
|
97
|
+
// resolved-call-site count, identical metric to the exact path.
|
|
98
|
+
const resolveStart = Date.now();
|
|
99
|
+
emitStageStart(onProgress, 'resolve');
|
|
100
|
+
const boundaryCalls = fragments.flatMap((f) => f.boundaryCalls);
|
|
101
|
+
const { catalog: resolved, boundaryStats } = resolveCrossBoundaryCalls(merged, boundaryCalls, manifestIndex);
|
|
102
|
+
const catalog = stampAndConstrainPackages(resolved, projectRoot);
|
|
103
|
+
emitStage(onProgress, 'resolve', Date.now() - resolveStart, `${String(countCatalogCallSites(catalog))} call site(s)`);
|
|
104
|
+
// 4. Derive indexes + features over the unified catalog. Features run once
|
|
105
|
+
// here on the merged global catalog (not per shard), after merge / before
|
|
106
|
+
// rules — the same stage order as the single-program path.
|
|
107
|
+
const indexStart = Date.now();
|
|
108
|
+
emitStageStart(onProgress, 'index');
|
|
109
|
+
const indexes = buildIndexes(catalog);
|
|
110
|
+
emitStage(onProgress, 'index', Date.now() - indexStart);
|
|
111
|
+
const ruleSet = input.rules ?? currentRules();
|
|
112
|
+
const config = input.config ?? {};
|
|
113
|
+
const requestedColumns = unionFeatureDeps(ruleSet, input.emitFeatures);
|
|
114
|
+
const featuresStart = Date.now();
|
|
115
|
+
emitStageStart(onProgress, 'features');
|
|
116
|
+
const features = buildFeatures(catalog, indexes, config, requestedColumns);
|
|
117
|
+
emitStage(onProgress, 'features', Date.now() - featuresStart);
|
|
118
|
+
const persistedFeatures = toPersistedFeatures(features, requestedColumns);
|
|
119
|
+
const persisted = isPersistedFeaturesEmpty(persistedFeatures) ? undefined : persistedFeatures;
|
|
120
|
+
// The catalog persisted (and returned) carries the materialized dashboard
|
|
121
|
+
// columns when requested; otherwise the bare catalog (lean default).
|
|
122
|
+
const catalogToPersist = persisted ? { ...catalog, features: persisted } : catalog;
|
|
123
|
+
// 5. Persist: each rebuilt shard's fragment, prune removed shards, and the
|
|
124
|
+
// unified full catalog (with materialized features when requested) so
|
|
125
|
+
// whole-catalog consumers (incl. the dashboard) still work.
|
|
126
|
+
if (useCache && catalogRepo) {
|
|
127
|
+
// @fitness-ignore-next-line detached-promises -- persistShardedCatalog is a synchronous void helper (better-sqlite3/Drizzle writes); there is no promise to await.
|
|
128
|
+
persistShardedCatalog(catalogRepo, built.fragments, shards, catalogToPersist);
|
|
129
|
+
}
|
|
130
|
+
// 6. Run rules over the unified catalog, threading the feature table (5th arg).
|
|
131
|
+
const rulesStart = Date.now();
|
|
132
|
+
emitStageStart(onProgress, 'rules');
|
|
133
|
+
const signals = [];
|
|
134
|
+
for (const rule of ruleSet) {
|
|
135
|
+
// Indexed append rather than spread-in-loop — avoids re-allocating the
|
|
136
|
+
// accumulator on every rule (O(n²)) over a potentially large rule set.
|
|
137
|
+
const ruleSignals = rule.evaluate(catalog, indexes, config, adapter.ruleHints, features);
|
|
138
|
+
for (const signal of ruleSignals)
|
|
139
|
+
signals.push(signal);
|
|
140
|
+
}
|
|
141
|
+
emitStage(onProgress, 'rules', Date.now() - rulesStart, `${String(ruleSet.length)} rule(s), ${String(signals.length)} signal(s)`);
|
|
142
|
+
span.setAttributes({
|
|
143
|
+
'opensip_cli.graph.shards_built': plan.toBuild.length,
|
|
144
|
+
'opensip_cli.graph.shards_cached': plan.cached.length,
|
|
145
|
+
'opensip_cli.graph.shards_failed': built.failures.length,
|
|
146
|
+
});
|
|
147
|
+
const shardStats = {
|
|
148
|
+
shardCount: shards.length,
|
|
149
|
+
shardsBuilt: plan.toBuild.length,
|
|
150
|
+
shardsCached: plan.cached.length,
|
|
151
|
+
shardSizes: shards.map((s) => s.files.length).sort((a, b) => b - a),
|
|
152
|
+
boundaryCallSites: boundaryCalls.length,
|
|
153
|
+
};
|
|
154
|
+
return {
|
|
155
|
+
catalog: catalogToPersist,
|
|
156
|
+
indexes,
|
|
157
|
+
signals,
|
|
158
|
+
resolutionStats: boundaryStats,
|
|
159
|
+
cacheHit: plan.toBuild.length === 0,
|
|
160
|
+
failedShardIds: built.failures.map((f) => f.shardId),
|
|
161
|
+
features,
|
|
162
|
+
shardStats,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Persist the rebuilt shard fragments, prune fragments for removed shards, and
|
|
167
|
+
* write the unified catalog — best-effort (a failed catalog write is logged, not
|
|
168
|
+
* thrown: the freshly-built result is returned regardless). Extracted so
|
|
169
|
+
* {@link buildShardedGraph} stays under the cognitive-complexity bound.
|
|
170
|
+
*/
|
|
171
|
+
function persistShardedCatalog(catalogRepo, builtFragments, shards, catalogToPersist) {
|
|
172
|
+
// @fitness-ignore-next-line detached-promises -- CatalogRepo is synchronous (better-sqlite3/Drizzle); upsertShardFragment returns void, not a Promise.
|
|
173
|
+
for (const fragment of builtFragments)
|
|
174
|
+
catalogRepo.upsertShardFragment(fragment);
|
|
175
|
+
// @fitness-ignore-next-line detached-promises -- CatalogRepo is synchronous (better-sqlite3/Drizzle); pruneShardFragmentsExcept returns void, not a Promise.
|
|
176
|
+
catalogRepo.pruneShardFragmentsExcept(shards.map((s) => s.id));
|
|
177
|
+
try {
|
|
178
|
+
catalogRepo.replaceAll(catalogToPersist);
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
/* v8 ignore next */
|
|
182
|
+
// Best-effort write: the freshly-built catalog is returned regardless.
|
|
183
|
+
// replaceAll already logged the underlying error; note the continuation
|
|
184
|
+
// so the swallow isn't silent.
|
|
185
|
+
logger.debug({
|
|
186
|
+
evt: 'graph.sharded.cache_write_skipped',
|
|
187
|
+
module: 'graph:sharded',
|
|
188
|
+
err: error instanceof Error ? error.message : String(error),
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/** Emit a `stage-start` for `stage` (no-op when no callback). */
|
|
193
|
+
function emitStageStart(onProgress, stage) {
|
|
194
|
+
onProgress?.({ type: 'stage-start', stage });
|
|
195
|
+
}
|
|
196
|
+
/** Emit a `stage-done` for `stage` with its duration + optional checklist detail. */
|
|
197
|
+
function emitStage(onProgress, stage, durationMs, detail) {
|
|
198
|
+
onProgress?.({
|
|
199
|
+
type: 'stage-done',
|
|
200
|
+
stage,
|
|
201
|
+
durationMs,
|
|
202
|
+
...(detail === undefined ? {} : { detail }),
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Throw if any two shards share an id. The shard id is the per-shard
|
|
207
|
+
* fragment-cache primary key, so a collision corrupts the warm-build cache and
|
|
208
|
+
* makes the graph non-deterministic — a class of bug that must fail loud, never
|
|
209
|
+
* silently return a wrong graph. Lists the offending ids in the error.
|
|
210
|
+
*/
|
|
211
|
+
function assertUniqueShardIds(shards) {
|
|
212
|
+
const seen = new Set();
|
|
213
|
+
const duplicates = new Set();
|
|
214
|
+
for (const shard of shards) {
|
|
215
|
+
if (seen.has(shard.id))
|
|
216
|
+
duplicates.add(shard.id);
|
|
217
|
+
seen.add(shard.id);
|
|
218
|
+
}
|
|
219
|
+
if (duplicates.size > 0) {
|
|
220
|
+
const ids = [...duplicates].sort().join(', ');
|
|
221
|
+
throw new ValidationError(`Duplicate shard id(s) [${ids}] in the sharded build — shard ids must be ` +
|
|
222
|
+
`unique (they are the per-shard fragment-cache primary key). This is a ` +
|
|
223
|
+
`workspace-unit discovery bug (e.g. ids derived by bare basename ` +
|
|
224
|
+
`collapsing nested packages); fix id derivation to be root-relative.`);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=sharded-graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sharded-graph.js","sourceRoot":"","sources":["../../../src/cli/orchestrate/sharded-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for the graph orchestration pipeline. Extracted into a
|
|
3
|
+
* leaf module so the orchestrator (`../orchestrate.ts`) and its
|
|
4
|
+
* helpers (`cache-orchestrator.ts`, `catalog-builder.ts`) can all
|
|
5
|
+
* reference the same `GraphStage` / `GraphProgressCallback` shapes
|
|
6
|
+
* without forming a file-level cycle.
|
|
7
|
+
*
|
|
8
|
+
* Previously these lived in `../orchestrate.ts` and the helpers
|
|
9
|
+
* type-imported them back from there — closing a cycle the
|
|
10
|
+
* `circular-import-detection` check flagged. Hosting the types here
|
|
11
|
+
* inverts the dependency: the orchestrator and both helpers now
|
|
12
|
+
* import from this leaf, and nothing in this file imports back.
|
|
13
|
+
*/
|
|
14
|
+
/** Canonical pipeline stages, in execution order. */
|
|
15
|
+
export type GraphStage = 'discover' | 'parse' | 'walk' | 'resolve' | 'index' | 'features' | 'rules';
|
|
16
|
+
/** Stage order — consumed by the live view to render the checklist. */
|
|
17
|
+
export declare const GRAPH_STAGES: readonly GraphStage[];
|
|
18
|
+
/**
|
|
19
|
+
* Structured progress event. `stage-cached` fires for parse/walk/resolve
|
|
20
|
+
* when the on-disk catalog cache satisfies the run; the view renders
|
|
21
|
+
* those stages as "(cached)" instead of running them.
|
|
22
|
+
*/
|
|
23
|
+
export interface GraphProgressEvent {
|
|
24
|
+
readonly type: 'stage-start' | 'stage-done' | 'stage-cached';
|
|
25
|
+
readonly stage: GraphStage;
|
|
26
|
+
readonly durationMs?: number;
|
|
27
|
+
readonly detail?: string;
|
|
28
|
+
}
|
|
29
|
+
/** Callback invoked with each {@link GraphProgressEvent} during graph orchestration. */
|
|
30
|
+
export type GraphProgressCallback = (event: GraphProgressEvent) => void;
|
|
31
|
+
//# sourceMappingURL=types.d.ts.map
|