@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,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* V8 heap pressure monitor.
|
|
3
|
+
*
|
|
4
|
+
* Polls `v8.getHeapStatistics()` to catch impending OOMs before V8
|
|
5
|
+
* itself SIGABRTs the process. The orchestrator calls `check()` at
|
|
6
|
+
* every stage boundary; for long-running stages the monitor also
|
|
7
|
+
* self-polls on a 1s interval. When old-gen usage crosses the
|
|
8
|
+
* configured fraction of the heap limit, `check()` throws
|
|
9
|
+
* `MemoryPressureError` and the orchestrator surfaces it through the
|
|
10
|
+
* normal error path.
|
|
11
|
+
*
|
|
12
|
+
* The 0.90 default leaves ~10% of headroom for V8 to complete one
|
|
13
|
+
* last major GC and for the exception to propagate. Below 0.85 we'd
|
|
14
|
+
* get false positives during normal GC churn; above 0.95 the bail-out
|
|
15
|
+
* itself runs out of headroom.
|
|
16
|
+
*/
|
|
17
|
+
import v8 from 'node:v8';
|
|
18
|
+
import { EnvRegistry, ToolError } from '@opensip-cli/core';
|
|
19
|
+
/**
|
|
20
|
+
* Graph-engine environment variables (launch, §5.12). Read through the
|
|
21
|
+
* {@link EnvRegistry} primitive (immutable spec table) so the env surface is
|
|
22
|
+
* governed and documentable; the `env-via-registry` guardrail forbids raw
|
|
23
|
+
* `process.env` reads. (`NODE_OPTIONS`, mutated by the heap-preflight before any
|
|
24
|
+
* opensip module loads, is a documented pre-scope exception, not registered here.)
|
|
25
|
+
*/
|
|
26
|
+
export const GRAPH_ENV_SPECS = [
|
|
27
|
+
{
|
|
28
|
+
canonical: 'OPENSIP_HEAP_NO_MONITOR',
|
|
29
|
+
coerce: (raw) => raw === '1',
|
|
30
|
+
default: false,
|
|
31
|
+
docs: 'Set to 1 to disable the V8 heap-pressure monitor (REPL embedding / custom allocators).',
|
|
32
|
+
},
|
|
33
|
+
];
|
|
34
|
+
const GRAPH_ENV = new EnvRegistry(GRAPH_ENV_SPECS);
|
|
35
|
+
const DEFAULT_THRESHOLD = 0.9;
|
|
36
|
+
const DEFAULT_POLL_INTERVAL_MS = 1000;
|
|
37
|
+
/** Thrown when heap usage crosses the configured pressure threshold during graph work. */
|
|
38
|
+
export class MemoryPressureError extends ToolError {
|
|
39
|
+
usedBytes;
|
|
40
|
+
limitBytes;
|
|
41
|
+
stage;
|
|
42
|
+
constructor(message, details, options) {
|
|
43
|
+
super(message, options?.code ?? 'MEMORY_PRESSURE', options);
|
|
44
|
+
this.name = 'MemoryPressureError';
|
|
45
|
+
this.usedBytes = details.usedBytes;
|
|
46
|
+
this.limitBytes = details.limitBytes;
|
|
47
|
+
this.stage = details.stage;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Create a pressure monitor. Disabled when `OPENSIP_HEAP_NO_MONITOR=1`
|
|
52
|
+
* — gives users an escape hatch for false positives in unusual GC
|
|
53
|
+
* scenarios (REPL embedding, custom allocators).
|
|
54
|
+
*/
|
|
55
|
+
export function createPressureMonitor(opts = {}) {
|
|
56
|
+
const threshold = opts.threshold ?? DEFAULT_THRESHOLD;
|
|
57
|
+
const pollIntervalMs = opts.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
|
|
58
|
+
const disabled = GRAPH_ENV.get('OPENSIP_HEAP_NO_MONITOR') === true;
|
|
59
|
+
let stage = 'unknown';
|
|
60
|
+
let timerId = null;
|
|
61
|
+
let lastError = null;
|
|
62
|
+
const evaluate = () => {
|
|
63
|
+
if (disabled)
|
|
64
|
+
return;
|
|
65
|
+
const stats = v8.getHeapStatistics();
|
|
66
|
+
const ratio = stats.total_heap_size / stats.heap_size_limit;
|
|
67
|
+
if (ratio < threshold)
|
|
68
|
+
return;
|
|
69
|
+
lastError = new MemoryPressureError(formatMessage(stage, stats.total_heap_size, stats.heap_size_limit), {
|
|
70
|
+
usedBytes: stats.total_heap_size,
|
|
71
|
+
limitBytes: stats.heap_size_limit,
|
|
72
|
+
stage,
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
// @fitness-ignore-next-line throws-documentation -- closure throws MemoryPressureError when heap usage crosses the limit ratio (lastError cache or fresh evaluate()); JSDoc cannot attach to a const-arrow
|
|
76
|
+
const check = () => {
|
|
77
|
+
const tripped = lastError;
|
|
78
|
+
if (tripped instanceof MemoryPressureError)
|
|
79
|
+
throw tripped;
|
|
80
|
+
evaluate();
|
|
81
|
+
const tripped2 = lastError;
|
|
82
|
+
if (tripped2 instanceof MemoryPressureError)
|
|
83
|
+
throw tripped2;
|
|
84
|
+
};
|
|
85
|
+
if (!disabled && pollIntervalMs > 0) {
|
|
86
|
+
timerId = setInterval(evaluate, pollIntervalMs);
|
|
87
|
+
timerId.unref?.();
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
setStage: (s) => {
|
|
91
|
+
stage = s;
|
|
92
|
+
},
|
|
93
|
+
check,
|
|
94
|
+
dispose: () => {
|
|
95
|
+
if (timerId) {
|
|
96
|
+
clearInterval(timerId);
|
|
97
|
+
timerId = null;
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
const BYTES_PER_GB = 1024 * 1024 * 1024;
|
|
103
|
+
function formatMessage(stage, usedBytes, limitBytes) {
|
|
104
|
+
const usedGb = (usedBytes / BYTES_PER_GB).toFixed(2);
|
|
105
|
+
const limitGb = (limitBytes / BYTES_PER_GB).toFixed(2);
|
|
106
|
+
return (`Heap headroom exhausted at stage "${stage}" (used ${usedGb} GB of ${limitGb} GB cap). ` +
|
|
107
|
+
`Aborted before V8 OOM. Try \`opensip graph --package <name>\` to scope to a single ` +
|
|
108
|
+
`workspace package, or \`--packages\` to fan out per-package (each child gets its own heap).`);
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=pressure-monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pressure-monitor.js","sourceRoot":"","sources":["../../src/cli/pressure-monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graph performance profile writer.
|
|
3
|
+
*
|
|
4
|
+
* The CLI already emits structured stage progress for the live view and spans
|
|
5
|
+
* for telemetry. This module turns the same progress stream into a portable
|
|
6
|
+
* JSON artifact users can attach to performance reports without enabling an
|
|
7
|
+
* OpenTelemetry SDK.
|
|
8
|
+
*/
|
|
9
|
+
import type { GraphProgressEvent } from './orchestrate/types.js';
|
|
10
|
+
import type { RunGraphResult } from './orchestrate.js';
|
|
11
|
+
import type { ResolutionMode } from '../types.js';
|
|
12
|
+
export interface GraphProfileStage {
|
|
13
|
+
readonly name: string;
|
|
14
|
+
readonly status: 'done' | 'cached';
|
|
15
|
+
readonly durationMs?: number;
|
|
16
|
+
readonly detail?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface GraphProfileRunSummary {
|
|
19
|
+
readonly cacheHit?: boolean;
|
|
20
|
+
readonly files?: number;
|
|
21
|
+
readonly functions?: number;
|
|
22
|
+
readonly signals?: number;
|
|
23
|
+
readonly totalCallSites?: number;
|
|
24
|
+
readonly resolvedHigh?: number;
|
|
25
|
+
readonly resolvedMedium?: number;
|
|
26
|
+
readonly resolvedLow?: number;
|
|
27
|
+
readonly unresolved?: number;
|
|
28
|
+
readonly boundaryCallSites?: number;
|
|
29
|
+
readonly shardCount?: number;
|
|
30
|
+
readonly shardsBuilt?: number;
|
|
31
|
+
readonly shardsCached?: number;
|
|
32
|
+
readonly shardSizes?: readonly number[];
|
|
33
|
+
}
|
|
34
|
+
export interface GraphProfileRun {
|
|
35
|
+
readonly label: string;
|
|
36
|
+
readonly cwd: string;
|
|
37
|
+
readonly mode: string;
|
|
38
|
+
readonly startedAt: string;
|
|
39
|
+
completedAt?: string;
|
|
40
|
+
durationMs?: number;
|
|
41
|
+
readonly stages: GraphProfileStage[];
|
|
42
|
+
summary?: GraphProfileRunSummary;
|
|
43
|
+
}
|
|
44
|
+
export interface GraphProfileDocument {
|
|
45
|
+
readonly version: '1.0';
|
|
46
|
+
readonly tool: 'graph';
|
|
47
|
+
readonly cwd: string;
|
|
48
|
+
readonly mode: string;
|
|
49
|
+
readonly resolutionMode?: ResolutionMode;
|
|
50
|
+
readonly startedAt: string;
|
|
51
|
+
completedAt?: string;
|
|
52
|
+
durationMs?: number;
|
|
53
|
+
readonly runs: GraphProfileRun[];
|
|
54
|
+
}
|
|
55
|
+
export declare class GraphProfileRunRecorder {
|
|
56
|
+
private readonly run;
|
|
57
|
+
private readonly activeStages;
|
|
58
|
+
private readonly startedMs;
|
|
59
|
+
constructor(run: GraphProfileRun);
|
|
60
|
+
readonly onProgress: (event: GraphProgressEvent) => void;
|
|
61
|
+
recordStage(name: string, durationMs?: number, detail?: string): void;
|
|
62
|
+
finish(result: RunGraphResult): void;
|
|
63
|
+
finishSummary(summary: GraphProfileRunSummary): void;
|
|
64
|
+
}
|
|
65
|
+
export declare class GraphProfileBuilder {
|
|
66
|
+
private readonly startedMs;
|
|
67
|
+
private readonly document;
|
|
68
|
+
constructor(input: {
|
|
69
|
+
readonly cwd: string;
|
|
70
|
+
readonly mode: string;
|
|
71
|
+
readonly resolutionMode?: ResolutionMode;
|
|
72
|
+
readonly startedAt?: string;
|
|
73
|
+
});
|
|
74
|
+
startRun(input: {
|
|
75
|
+
readonly label: string;
|
|
76
|
+
readonly cwd: string;
|
|
77
|
+
readonly mode: string;
|
|
78
|
+
}): GraphProfileRunRecorder;
|
|
79
|
+
complete(): GraphProfileDocument;
|
|
80
|
+
}
|
|
81
|
+
export declare function writeGraphProfile(outputPath: string, cwd: string, profile: GraphProfileDocument): string;
|
|
82
|
+
//# sourceMappingURL=profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/cli/profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graph performance profile writer.
|
|
3
|
+
*
|
|
4
|
+
* The CLI already emits structured stage progress for the live view and spans
|
|
5
|
+
* for telemetry. This module turns the same progress stream into a portable
|
|
6
|
+
* JSON artifact users can attach to performance reports without enabling an
|
|
7
|
+
* OpenTelemetry SDK.
|
|
8
|
+
*/
|
|
9
|
+
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
10
|
+
import { dirname, isAbsolute, resolve } from 'node:path';
|
|
11
|
+
export class GraphProfileRunRecorder {
|
|
12
|
+
run;
|
|
13
|
+
activeStages = new Map();
|
|
14
|
+
startedMs = Date.now();
|
|
15
|
+
constructor(run) {
|
|
16
|
+
this.run = run;
|
|
17
|
+
}
|
|
18
|
+
onProgress = (event) => {
|
|
19
|
+
if (event.type === 'stage-start') {
|
|
20
|
+
this.activeStages.set(event.stage, Date.now());
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
if (event.type === 'stage-cached') {
|
|
24
|
+
this.run.stages.push({ name: event.stage, status: 'cached' });
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
this.recordStage(event.stage, event.durationMs, event.detail);
|
|
28
|
+
};
|
|
29
|
+
recordStage(name, durationMs, detail) {
|
|
30
|
+
const started = this.activeStages.get(name);
|
|
31
|
+
const measured = durationMs ?? (started === undefined ? undefined : Date.now() - started);
|
|
32
|
+
this.activeStages.delete(name);
|
|
33
|
+
this.run.stages.push({
|
|
34
|
+
name,
|
|
35
|
+
status: 'done',
|
|
36
|
+
...(measured === undefined ? {} : { durationMs: measured }),
|
|
37
|
+
...(detail === undefined ? {} : { detail }),
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
finish(result) {
|
|
41
|
+
this.finishSummary(summaryFromResult(result));
|
|
42
|
+
}
|
|
43
|
+
finishSummary(summary) {
|
|
44
|
+
const completedAt = new Date();
|
|
45
|
+
this.run.completedAt = completedAt.toISOString();
|
|
46
|
+
this.run.durationMs = Date.now() - this.startedMs;
|
|
47
|
+
this.run.summary = summary;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export class GraphProfileBuilder {
|
|
51
|
+
startedMs = Date.now();
|
|
52
|
+
document;
|
|
53
|
+
constructor(input) {
|
|
54
|
+
this.document = {
|
|
55
|
+
version: '1.0',
|
|
56
|
+
tool: 'graph',
|
|
57
|
+
cwd: input.cwd,
|
|
58
|
+
mode: input.mode,
|
|
59
|
+
startedAt: input.startedAt ?? new Date().toISOString(),
|
|
60
|
+
runs: [],
|
|
61
|
+
...(input.resolutionMode === undefined ? {} : { resolutionMode: input.resolutionMode }),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
startRun(input) {
|
|
65
|
+
const run = {
|
|
66
|
+
label: input.label,
|
|
67
|
+
cwd: input.cwd,
|
|
68
|
+
mode: input.mode,
|
|
69
|
+
startedAt: new Date().toISOString(),
|
|
70
|
+
stages: [],
|
|
71
|
+
};
|
|
72
|
+
this.document.runs.push(run);
|
|
73
|
+
return new GraphProfileRunRecorder(run);
|
|
74
|
+
}
|
|
75
|
+
complete() {
|
|
76
|
+
this.document.completedAt = new Date().toISOString();
|
|
77
|
+
this.document.durationMs = Date.now() - this.startedMs;
|
|
78
|
+
return this.document;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export function writeGraphProfile(outputPath, cwd, profile) {
|
|
82
|
+
const resolved = isAbsolute(outputPath) ? outputPath : resolve(cwd, outputPath);
|
|
83
|
+
mkdirSync(dirname(resolved), { recursive: true });
|
|
84
|
+
writeFileSync(resolved, `${JSON.stringify(profile, null, 2)}\n`, 'utf8');
|
|
85
|
+
return resolved;
|
|
86
|
+
}
|
|
87
|
+
function summaryFromResult(result) {
|
|
88
|
+
const catalog = result.catalog;
|
|
89
|
+
return {
|
|
90
|
+
cacheHit: result.cacheHit,
|
|
91
|
+
files: catalog === null ? 0 : countCatalogFiles(catalog),
|
|
92
|
+
functions: catalog === null ? 0 : countCatalogFunctions(catalog),
|
|
93
|
+
signals: result.signals.length,
|
|
94
|
+
...(result.resolutionStats === null
|
|
95
|
+
? {}
|
|
96
|
+
: {
|
|
97
|
+
totalCallSites: result.resolutionStats.totalCallSites,
|
|
98
|
+
resolvedHigh: result.resolutionStats.resolvedHigh,
|
|
99
|
+
resolvedMedium: result.resolutionStats.resolvedMedium,
|
|
100
|
+
resolvedLow: result.resolutionStats.resolvedLow,
|
|
101
|
+
unresolved: result.resolutionStats.unresolved,
|
|
102
|
+
}),
|
|
103
|
+
...(result.shardStats === undefined ? {} : { ...result.shardStats }),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function countCatalogFiles(catalog) {
|
|
107
|
+
const files = new Set();
|
|
108
|
+
for (const occs of Object.values(catalog.functions)) {
|
|
109
|
+
for (const occ of occs)
|
|
110
|
+
files.add(occ.filePath);
|
|
111
|
+
}
|
|
112
|
+
return files.size;
|
|
113
|
+
}
|
|
114
|
+
function countCatalogFunctions(catalog) {
|
|
115
|
+
let count = 0;
|
|
116
|
+
for (const occs of Object.values(catalog.functions))
|
|
117
|
+
count += occs.length;
|
|
118
|
+
return count;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/cli/profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Graph report-data catalog builders.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors fitness's `collectFitnessReportData` (`fitness/.../cli/report-data.ts`):
|
|
5
|
+
* graph contributes a rule catalog + recipe catalog the dashboard renders on
|
|
6
|
+
* the Code Paths tab (Catalog + Recipes subtabs). These entry types are graph
|
|
7
|
+
* domain vocabulary, so they live here; the dashboard consumes them
|
|
8
|
+
* structurally via `DashboardInput` (typed `readonly unknown[]`) — the same
|
|
9
|
+
* opaque-payload model the fitness catalogs use, keeping `@opensip-cli/dashboard`
|
|
10
|
+
* decoupled from `@opensip-cli/graph`.
|
|
11
|
+
*
|
|
12
|
+
* **Distinct keys.** Graph contributes `graphRuleCatalog` / `graphRecipeCatalog`
|
|
13
|
+
* — NOT `checkCatalog` / `recipeCatalog`, which are fitness-owned globals the
|
|
14
|
+
* CLI merges via `Object.assign`. Reusing those keys would clobber fitness.
|
|
15
|
+
*/
|
|
16
|
+
import type { ToolScope } from '@opensip-cli/core';
|
|
17
|
+
/** Rule catalog entry for dashboard display. */
|
|
18
|
+
export interface GraphRuleCatalogEntry {
|
|
19
|
+
readonly slug: string;
|
|
20
|
+
readonly defaultSeverity: 'error' | 'warning';
|
|
21
|
+
readonly source: 'built-in';
|
|
22
|
+
}
|
|
23
|
+
/** Recipe catalog entry for dashboard display. */
|
|
24
|
+
export interface GraphRecipeCatalogEntry {
|
|
25
|
+
readonly name: string;
|
|
26
|
+
readonly displayName: string;
|
|
27
|
+
readonly description: string;
|
|
28
|
+
readonly tags: readonly string[];
|
|
29
|
+
readonly selectorType: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Build the rule catalog from the scope's rule registry. Built-in graph
|
|
33
|
+
* rules are first-party, so `source` is hardcoded `'built-in'` for now —
|
|
34
|
+
* graph has no community-rule namespace registry yet (documented; a richer
|
|
35
|
+
* display can land with Plan D rules). Returns `[]` when the graph subscope
|
|
36
|
+
* is absent.
|
|
37
|
+
*/
|
|
38
|
+
export declare function buildGraphRuleCatalog(scope: ToolScope): GraphRuleCatalogEntry[];
|
|
39
|
+
/**
|
|
40
|
+
* Build the recipe catalog from the scope's recipe registry. Graph recipes
|
|
41
|
+
* carry no execution block, so the entry has no `mode`/`timeout` (unlike
|
|
42
|
+
* fitness's `RecipeCatalogEntry`). Returns `[]` when the graph subscope is
|
|
43
|
+
* absent.
|
|
44
|
+
*/
|
|
45
|
+
export declare function buildGraphRecipeCatalog(scope: ToolScope): GraphRecipeCatalogEntry[];
|
|
46
|
+
//# sourceMappingURL=report-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-data.d.ts","sourceRoot":"","sources":["../../src/cli/report-data.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,gDAAgD;AAChD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,eAAe,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;CAC7B;AAED,kDAAkD;AAClD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,GAAG,qBAAqB,EAAE,CAO/E;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,GAAG,uBAAuB,EAAE,CASnF"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// @fitness-ignore-file batch-operation-limits -- getAll() reads bounded in-memory rule/recipe registries (a handful of entries per RunScope), not a data store (cf. rules/registry.ts which suppresses the same check for the same reason).
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Graph report-data catalog builders.
|
|
4
|
+
*
|
|
5
|
+
* Mirrors fitness's `collectFitnessReportData` (`fitness/.../cli/report-data.ts`):
|
|
6
|
+
* graph contributes a rule catalog + recipe catalog the dashboard renders on
|
|
7
|
+
* the Code Paths tab (Catalog + Recipes subtabs). These entry types are graph
|
|
8
|
+
* domain vocabulary, so they live here; the dashboard consumes them
|
|
9
|
+
* structurally via `DashboardInput` (typed `readonly unknown[]`) — the same
|
|
10
|
+
* opaque-payload model the fitness catalogs use, keeping `@opensip-cli/dashboard`
|
|
11
|
+
* decoupled from `@opensip-cli/graph`.
|
|
12
|
+
*
|
|
13
|
+
* **Distinct keys.** Graph contributes `graphRuleCatalog` / `graphRecipeCatalog`
|
|
14
|
+
* — NOT `checkCatalog` / `recipeCatalog`, which are fitness-owned globals the
|
|
15
|
+
* CLI merges via `Object.assign`. Reusing those keys would clobber fitness.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Build the rule catalog from the scope's rule registry. Built-in graph
|
|
19
|
+
* rules are first-party, so `source` is hardcoded `'built-in'` for now —
|
|
20
|
+
* graph has no community-rule namespace registry yet (documented; a richer
|
|
21
|
+
* display can land with Plan D rules). Returns `[]` when the graph subscope
|
|
22
|
+
* is absent.
|
|
23
|
+
*/
|
|
24
|
+
export function buildGraphRuleCatalog(scope) {
|
|
25
|
+
const rules = scope.graph?.rules.getAll() ?? [];
|
|
26
|
+
return rules.map((rule) => ({
|
|
27
|
+
slug: rule.slug,
|
|
28
|
+
defaultSeverity: rule.defaultSeverity,
|
|
29
|
+
source: 'built-in',
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Build the recipe catalog from the scope's recipe registry. Graph recipes
|
|
34
|
+
* carry no execution block, so the entry has no `mode`/`timeout` (unlike
|
|
35
|
+
* fitness's `RecipeCatalogEntry`). Returns `[]` when the graph subscope is
|
|
36
|
+
* absent.
|
|
37
|
+
*/
|
|
38
|
+
export function buildGraphRecipeCatalog(scope) {
|
|
39
|
+
const recipes = scope.graph?.recipes.getAllRecipes() ?? [];
|
|
40
|
+
return recipes.map((recipe) => ({
|
|
41
|
+
name: recipe.name,
|
|
42
|
+
displayName: recipe.displayName,
|
|
43
|
+
description: recipe.description,
|
|
44
|
+
tags: recipe.tags ?? [],
|
|
45
|
+
selectorType: recipe.rules.type,
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=report-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-data.js","sourceRoot":"","sources":["../../src/cli/report-data.ts"],"names":[],"mappings":"AAAA,4OAA4O;AAC5O;;;;;;;;;;;;;;GAcG;AAoBH;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAgB;IACpD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;IAChD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,MAAM,EAAE,UAAmB;KAC5B,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAgB;IACtD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;IAC3D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC9B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;QACvB,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;KAChC,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve which language adapters apply to a graph run.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `graph.ts` so both the full-run orchestrator
|
|
5
|
+
* (`executeGraph`) and the discovery-only `--list-files` path
|
|
6
|
+
* (`executeListFiles`) share one adapter-selection rule rather than
|
|
7
|
+
* duplicating it — and so the new list-files module does not have to
|
|
8
|
+
* import the large graph command handler just for this helper.
|
|
9
|
+
*/
|
|
10
|
+
import type { GraphCommandOptions } from './graph-options.js';
|
|
11
|
+
import type { LanguageAdapter, ToolCliContext } from '@opensip-cli/core';
|
|
12
|
+
/**
|
|
13
|
+
* Resolve which language adapters apply to this run. With `--language`
|
|
14
|
+
* set, returns exactly that adapter (errors if unregistered). Without
|
|
15
|
+
* it, runs marker-based detection and returns every adapter the repo
|
|
16
|
+
* exposes a marker for (polyglot per spec D6).
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveAdaptersForRun(opts: GraphCommandOptions, cli: ToolCliContext): readonly LanguageAdapter[];
|
|
19
|
+
//# sourceMappingURL=resolve-adapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-adapters.d.ts","sourceRoot":"","sources":["../../src/cli/resolve-adapters.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEzE;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,mBAAmB,EACzB,GAAG,EAAE,cAAc,GAClB,SAAS,eAAe,EAAE,CAkB5B"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve which language adapters apply to a graph run.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `graph.ts` so both the full-run orchestrator
|
|
5
|
+
* (`executeGraph`) and the discovery-only `--list-files` path
|
|
6
|
+
* (`executeListFiles`) share one adapter-selection rule rather than
|
|
7
|
+
* duplicating it — and so the new list-files module does not have to
|
|
8
|
+
* import the large graph command handler just for this helper.
|
|
9
|
+
*/
|
|
10
|
+
import { ConfigurationError } from '@opensip-cli/core';
|
|
11
|
+
import { detectLanguages } from './detect.js';
|
|
12
|
+
/**
|
|
13
|
+
* Resolve which language adapters apply to this run. With `--language`
|
|
14
|
+
* set, returns exactly that adapter (errors if unregistered). Without
|
|
15
|
+
* it, runs marker-based detection and returns every adapter the repo
|
|
16
|
+
* exposes a marker for (polyglot per spec D6).
|
|
17
|
+
*/
|
|
18
|
+
export function resolveAdaptersForRun(opts, cli) {
|
|
19
|
+
const registry = cli.scope.languages;
|
|
20
|
+
if (typeof opts.language === 'string' && opts.language.length > 0) {
|
|
21
|
+
const canonical = registry.canonicalize(opts.language) ?? opts.language;
|
|
22
|
+
const adapter = registry.get(canonical);
|
|
23
|
+
if (!adapter) {
|
|
24
|
+
throw new ConfigurationError(`--language '${opts.language}' is not a registered adapter.`);
|
|
25
|
+
}
|
|
26
|
+
return [adapter];
|
|
27
|
+
}
|
|
28
|
+
const detection = detectLanguages(opts.cwd, registry);
|
|
29
|
+
const adapters = [];
|
|
30
|
+
for (const id of detection.adapterIds) {
|
|
31
|
+
const adapter = registry.get(id);
|
|
32
|
+
/* v8 ignore next */
|
|
33
|
+
if (adapter)
|
|
34
|
+
adapters.push(adapter);
|
|
35
|
+
}
|
|
36
|
+
return adapters;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=resolve-adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-adapters.js","sourceRoot":"","sources":["../../src/cli/resolve-adapters.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAK9C;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAyB,EACzB,GAAmB;IAEnB,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;IACrC,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClE,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;QACxE,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,kBAAkB,CAAC,eAAe,IAAI,CAAC,QAAQ,gCAAgC,CAAC,CAAC;QAC7F,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC;IACD,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,KAAK,MAAM,EAAE,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjC,oBAAoB;QACpB,IAAI,OAAO;YAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview `sarif-export` subcommand mode helper (DEC-498, opensip
|
|
3
|
+
* Phase 2/Phase 6).
|
|
4
|
+
*
|
|
5
|
+
* Builds the run's signal envelope (applying the OpenSIP rule-ID convention —
|
|
6
|
+
* Option A — at assembly) and writes the SARIF v2.1.0 document to the
|
|
7
|
+
* `--output-sarif <path>` file via the root-owned SARIF-file sink
|
|
8
|
+
* (`cli.writeSarif`, ADR-0011 Phase 5). The opensip
|
|
9
|
+
* `EngineSubprocessPort.runSarifExport` invokes this per commit-sync /
|
|
10
|
+
* dead-code run, then lands the file on opensip's `SarifProvider`. Its
|
|
11
|
+
* external behavior (the `--output-sarif` flag, byte-identical OpenSIP SARIF)
|
|
12
|
+
* is unchanged: the canonical signal → SARIF formatter (`formatSignalSarif` in
|
|
13
|
+
* `@opensip-cli/output`) emits the same bytes graph's former adapter did
|
|
14
|
+
* once the envelope carries the OpenSIP-mapped rule IDs.
|
|
15
|
+
*
|
|
16
|
+
* Per ADR-0011 (file is a sink; the root renders/delivers), SARIF-to-file is a
|
|
17
|
+
* root seam — graph no longer imports `@opensip-cli/output`. Validates the
|
|
18
|
+
* provenance flags the consumer contract requires (`--tenant-id`/`--repo-id`)
|
|
19
|
+
* so a misinvocation fails loudly (exit 2) rather than emitting an unscoped
|
|
20
|
+
* file.
|
|
21
|
+
*/
|
|
22
|
+
import type { Signal, ToolCliContext } from '@opensip-cli/core';
|
|
23
|
+
/** Options consumed by the `sarif-export` subcommand. */
|
|
24
|
+
export interface SarifExportOptions {
|
|
25
|
+
readonly outputSarif: string;
|
|
26
|
+
readonly tenantId?: string;
|
|
27
|
+
readonly repoId?: string;
|
|
28
|
+
readonly runId?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Build the OpenSIP-convention SARIF envelope from the engine's findings and
|
|
32
|
+
* write it to `opts.outputSarif` through the root-owned `cli.writeSarif` seam.
|
|
33
|
+
*
|
|
34
|
+
* `tenantId` / `repoId` are not embedded in the SARIF body today — the SARIF
|
|
35
|
+
* shape carries no `properties` bag — but they are required at the boundary
|
|
36
|
+
* (the opensip side always supplies them and scopes the ingest by them) and
|
|
37
|
+
* `runId` is threaded into the log line for trace correlation.
|
|
38
|
+
*/
|
|
39
|
+
export declare function runSarifExportMode(opts: SarifExportOptions, signals: readonly Signal[], cli: ToolCliContext): Promise<void>;
|
|
40
|
+
//# sourceMappingURL=sarif-export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sarif-export.d.ts","sourceRoot":"","sources":["../../src/cli/sarif-export.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AASH,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIhE,yDAAyD;AACzD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,IAAI,CAAC,CAmCf"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview `sarif-export` subcommand mode helper (DEC-498, opensip
|
|
3
|
+
* Phase 2/Phase 6).
|
|
4
|
+
*
|
|
5
|
+
* Builds the run's signal envelope (applying the OpenSIP rule-ID convention —
|
|
6
|
+
* Option A — at assembly) and writes the SARIF v2.1.0 document to the
|
|
7
|
+
* `--output-sarif <path>` file via the root-owned SARIF-file sink
|
|
8
|
+
* (`cli.writeSarif`, ADR-0011 Phase 5). The opensip
|
|
9
|
+
* `EngineSubprocessPort.runSarifExport` invokes this per commit-sync /
|
|
10
|
+
* dead-code run, then lands the file on opensip's `SarifProvider`. Its
|
|
11
|
+
* external behavior (the `--output-sarif` flag, byte-identical OpenSIP SARIF)
|
|
12
|
+
* is unchanged: the canonical signal → SARIF formatter (`formatSignalSarif` in
|
|
13
|
+
* `@opensip-cli/output`) emits the same bytes graph's former adapter did
|
|
14
|
+
* once the envelope carries the OpenSIP-mapped rule IDs.
|
|
15
|
+
*
|
|
16
|
+
* Per ADR-0011 (file is a sink; the root renders/delivers), SARIF-to-file is a
|
|
17
|
+
* root seam — graph no longer imports `@opensip-cli/output`. Validates the
|
|
18
|
+
* provenance flags the consumer contract requires (`--tenant-id`/`--repo-id`)
|
|
19
|
+
* so a misinvocation fails loudly (exit 2) rather than emitting an unscoped
|
|
20
|
+
* file.
|
|
21
|
+
*/
|
|
22
|
+
import { randomUUID } from 'node:crypto';
|
|
23
|
+
import { EXIT_CODES } from '@opensip-cli/contracts';
|
|
24
|
+
import { ConfigurationError, logger } from '@opensip-cli/core';
|
|
25
|
+
import { buildGraphEnvelope } from './build-envelope.js';
|
|
26
|
+
const MODULE_GRAPH_RENDER = 'graph:render';
|
|
27
|
+
/**
|
|
28
|
+
* Build the OpenSIP-convention SARIF envelope from the engine's findings and
|
|
29
|
+
* write it to `opts.outputSarif` through the root-owned `cli.writeSarif` seam.
|
|
30
|
+
*
|
|
31
|
+
* `tenantId` / `repoId` are not embedded in the SARIF body today — the SARIF
|
|
32
|
+
* shape carries no `properties` bag — but they are required at the boundary
|
|
33
|
+
* (the opensip side always supplies them and scopes the ingest by them) and
|
|
34
|
+
* `runId` is threaded into the log line for trace correlation.
|
|
35
|
+
*/
|
|
36
|
+
export async function runSarifExportMode(opts, signals, cli) {
|
|
37
|
+
if (typeof opts.tenantId !== 'string' || opts.tenantId.length === 0) {
|
|
38
|
+
throw new ConfigurationError('--output-sarif requires --tenant-id <id>.');
|
|
39
|
+
}
|
|
40
|
+
if (typeof opts.repoId !== 'string' || opts.repoId.length === 0) {
|
|
41
|
+
throw new ConfigurationError('--output-sarif requires --repo-id <id>.');
|
|
42
|
+
}
|
|
43
|
+
const runId = opts.runId ?? randomUUID();
|
|
44
|
+
logger.info({
|
|
45
|
+
evt: 'graph.render.sarif_export.start',
|
|
46
|
+
module: MODULE_GRAPH_RENDER,
|
|
47
|
+
runId,
|
|
48
|
+
output: opts.outputSarif,
|
|
49
|
+
});
|
|
50
|
+
// Option A: the envelope's signals carry the OpenSIP-mapped rule IDs, so the
|
|
51
|
+
// shared `formatSignalSarif` (behind `cli.writeSarif`) emits the same SARIF
|
|
52
|
+
// bytes graph's former adapter produced. `runId`/`createdAt` are SARIF-body-
|
|
53
|
+
// irrelevant for this formatter, so deterministic placeholders are fine.
|
|
54
|
+
const envelope = buildGraphEnvelope({
|
|
55
|
+
signals,
|
|
56
|
+
runId,
|
|
57
|
+
createdAt: new Date().toISOString(),
|
|
58
|
+
});
|
|
59
|
+
await cli.writeSarif(envelope, opts.outputSarif);
|
|
60
|
+
logger.info({
|
|
61
|
+
evt: 'graph.render.sarif_export.complete',
|
|
62
|
+
module: MODULE_GRAPH_RENDER,
|
|
63
|
+
runId,
|
|
64
|
+
output: opts.outputSarif,
|
|
65
|
+
signalCount: signals.length,
|
|
66
|
+
});
|
|
67
|
+
cli.setExitCode(EXIT_CODES.SUCCESS);
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=sarif-export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sarif-export.js","sourceRoot":"","sources":["../../src/cli/sarif-export.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAIzD,MAAM,mBAAmB,GAAG,cAAc,CAAC;AAU3C;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAwB,EACxB,OAA0B,EAC1B,GAAmB;IAEnB,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,kBAAkB,CAAC,2CAA2C,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,kBAAkB,CAAC,yCAAyC,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,UAAU,EAAE,CAAC;IACzC,MAAM,CAAC,IAAI,CAAC;QACV,GAAG,EAAE,iCAAiC;QACtC,MAAM,EAAE,mBAAmB;QAC3B,KAAK;QACL,MAAM,EAAE,IAAI,CAAC,WAAW;KACzB,CAAC,CAAC;IAEH,6EAA6E;IAC7E,4EAA4E;IAC5E,6EAA6E;IAC7E,yEAAyE;IACzE,MAAM,QAAQ,GAAG,kBAAkB,CAAC;QAClC,OAAO;QACP,KAAK;QACL,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC,CAAC;IACH,MAAM,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAEjD,MAAM,CAAC,IAAI,CAAC;QACV,GAAG,EAAE,oCAAoC;QACzC,MAAM,EAAE,mBAAmB;QAC3B,KAAK;QACL,MAAM,EAAE,IAAI,CAAC,WAAW;QACxB,WAAW,EAAE,OAAO,CAAC,MAAM;KAC5B,CAAC,CAAC;IACH,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `graph-shard-worker <specPath>` — the per-shard build subprocess.
|
|
3
|
+
*
|
|
4
|
+
* One worker process builds ONE shard: it reads a {@link ShardWorkerSpec}
|
|
5
|
+
* JSON file, runs parse → walk → resolve over the shard's explicit file
|
|
6
|
+
* set (requesting cross-boundary descriptors), and writes a serializable
|
|
7
|
+
* {@link ShardBuildResult} JSON to stdout. The parent (the shard runner)
|
|
8
|
+
* spawns N of these under a concurrency cap and merges their fragments.
|
|
9
|
+
*
|
|
10
|
+
* This is an internal command, not a user-facing one — the shard runner
|
|
11
|
+
* invokes `node <cliScript> graph-shard-worker <specPath>`. It exists as a
|
|
12
|
+
* subcommand so the worker runs inside the bootstrapped CLI scope (the
|
|
13
|
+
* language-adapter registry is populated), letting `pickAdapter` resolve
|
|
14
|
+
* the adapter exactly as the main build does.
|
|
15
|
+
*
|
|
16
|
+
* The boundary is JSON only: no `ts.Node` / `ts.Program` ever crosses it.
|
|
17
|
+
*/
|
|
18
|
+
import type { ToolCliContext } from '@opensip-cli/core';
|
|
19
|
+
/**
|
|
20
|
+
* Build one shard and emit its `ShardBuildResult` as JSON on stdout.
|
|
21
|
+
* Exits non-zero (via setExitCode) on failure so the parent can attribute
|
|
22
|
+
* the error to this shard.
|
|
23
|
+
*/
|
|
24
|
+
export declare function executeShardWorker(specPath: string, cli: ToolCliContext): Promise<void>;
|
|
25
|
+
//# sourceMappingURL=shard-worker.d.ts.map
|