@intentius/chant 0.124.46 → 0.124.49
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/dist/__golden__/wave-loop/op-by-apply-after-fails.json +10 -0
- package/dist/__golden__/wave-loop/op-by-apply-hold.json +10 -0
- package/dist/__golden__/wave-loop/op-by-apply-ignored.json +10 -0
- package/dist/__golden__/wave-loop/op-by-apply-pass.json +10 -0
- package/dist/__golden__/wave-loop/op-by-apply-skip.json +10 -0
- package/dist/__golden__/wave-loop/op-cost-member-clash.json +6 -0
- package/dist/__golden__/wave-loop/op-cost-member.json +13 -0
- package/dist/__golden__/wave-loop/op-denied-source.json +16 -0
- package/dist/__golden__/wave-loop/op-denied.json +16 -0
- package/dist/__golden__/wave-loop/op-discover-rest-short.json +6 -0
- package/dist/__golden__/wave-loop/op-discover-rest-stops.json +13 -0
- package/dist/__golden__/wave-loop/op-discover-rest.json +26 -0
- package/dist/__golden__/wave-loop/op-discover-wide.json +26 -0
- package/dist/__golden__/wave-loop/op-held-on-again.json +16 -0
- package/dist/__golden__/wave-loop/op-held-on-before-apply.json +16 -0
- package/dist/__golden__/wave-loop/op-held-on.json +16 -0
- package/dist/__golden__/wave-loop/op-hooks-apply-fails.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-fail-after-apply.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-fail-before-apply.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-fail-before-plan.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-held.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-hold-before-apply.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-pass.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-refused-at-base.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-share.json +33 -0
- package/dist/__golden__/wave-loop/op-outcome-held.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-replan-approved.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-replan-forever.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-replan.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-stood-down.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-unreadable.json +10 -0
- package/dist/__golden__/wave-loop/op-overridden.json +16 -0
- package/dist/__golden__/wave-loop/op-per-run.json +20 -0
- package/dist/__golden__/wave-loop/op-point.json +13 -0
- package/dist/__golden__/wave-loop/op-pr-review.json +10 -0
- package/dist/__golden__/wave-loop/op-sealed.json +10 -0
- package/dist/__golden__/wave-loop/op-spend-change-only.json +10 -0
- package/dist/__golden__/wave-loop/op-spend.json +10 -0
- package/dist/__golden__/wave-loop/op-wave-commands.json +55 -0
- package/dist/__golden__/wave-loop/op-wide-refused.json +26 -0
- package/dist/__golden__/wave-loop/op-wide-waiting.json +29 -0
- package/dist/__golden__/wave-loop/op-wide.json +39 -0
- package/dist/action-pins.d.ts +61 -0
- package/dist/action-pins.d.ts.map +1 -0
- package/dist/action-pins.js +77 -0
- package/dist/cli/commands/carve.d.ts +3 -0
- package/dist/cli/commands/carve.d.ts.map +1 -1
- package/dist/cli/commands/carve.js +36 -7
- package/dist/cli/commands/import-report.d.ts +26 -0
- package/dist/cli/commands/import-report.d.ts.map +1 -0
- package/dist/cli/commands/import-report.js +65 -0
- package/dist/cli/commands/import.d.ts +11 -1
- package/dist/cli/commands/import.d.ts.map +1 -1
- package/dist/cli/commands/import.js +22 -3
- package/dist/cli/commands/migrate.d.ts +13 -1
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +134 -10
- package/dist/cli/handlers/approve.d.ts.map +1 -1
- package/dist/cli/handlers/approve.js +41 -14
- package/dist/cli/handlers/build.d.ts.map +1 -1
- package/dist/cli/handlers/build.js +6 -1
- package/dist/cli/handlers/graph-reader.d.ts +26 -0
- package/dist/cli/handlers/graph-reader.d.ts.map +1 -0
- package/dist/cli/handlers/graph-reader.js +41 -0
- package/dist/cli/handlers/graph.d.ts.map +1 -1
- package/dist/cli/handlers/graph.js +14 -0
- package/dist/cli/handlers/ledger.d.ts +3 -0
- package/dist/cli/handlers/ledger.d.ts.map +1 -0
- package/dist/cli/handlers/ledger.js +55 -0
- package/dist/cli/handlers/migrate.d.ts.map +1 -1
- package/dist/cli/handlers/migrate.js +18 -11
- package/dist/cli/handlers/misc.d.ts.map +1 -1
- package/dist/cli/handlers/misc.js +12 -1
- package/dist/cli/handlers/pr-env.js +2 -2
- package/dist/cli/handlers/pr.d.ts +15 -1
- package/dist/cli/handlers/pr.d.ts.map +1 -1
- package/dist/cli/handlers/pr.js +183 -40
- package/dist/cli/handlers/query.d.ts +7 -2
- package/dist/cli/handlers/query.d.ts.map +1 -1
- package/dist/cli/handlers/query.js +16 -4
- package/dist/cli/handlers/release.d.ts.map +1 -1
- package/dist/cli/handlers/release.js +6 -3
- package/dist/cli/handlers/search.d.ts +2 -4
- package/dist/cli/handlers/search.d.ts.map +1 -1
- package/dist/cli/handlers/search.js +13 -39
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +87 -14
- package/dist/cli/parse-args.d.ts.map +1 -1
- package/dist/cli/parse-args.js +47 -2
- package/dist/cli/registry.d.ts +22 -4
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/components/builders.d.ts +5 -1
- package/dist/components/builders.d.ts.map +1 -1
- package/dist/components/builders.js +5 -0
- package/dist/components/capability-plugin-loader.d.ts.map +1 -1
- package/dist/components/capability-plugin-loader.js +16 -1
- package/dist/components/capability-plugin.d.ts +14 -0
- package/dist/components/capability-plugin.d.ts.map +1 -1
- package/dist/components/pr-hooks.d.ts +21 -1
- package/dist/components/pr-hooks.d.ts.map +1 -1
- package/dist/components/pr-hooks.js +72 -4
- package/dist/components/pr-pipeline.d.ts +45 -10
- package/dist/components/pr-pipeline.d.ts.map +1 -1
- package/dist/components/pr-pipeline.js +47 -14
- package/dist/components/pr-policy.d.ts +36 -0
- package/dist/components/pr-policy.d.ts.map +1 -1
- package/dist/components/pr-policy.js +36 -0
- package/dist/components/pr-run.d.ts +3 -0
- package/dist/components/pr-run.d.ts.map +1 -1
- package/dist/components/pr-run.js +1 -0
- package/dist/components/starter-plugin.d.ts +1 -0
- package/dist/components/starter-plugin.d.ts.map +1 -1
- package/dist/components/starter-plugin.js +5 -1
- package/dist/components/verbs/index.d.ts +2 -0
- package/dist/components/verbs/index.d.ts.map +1 -1
- package/dist/components/verbs/index.js +2 -0
- package/dist/components/verbs/publish-artifact.d.ts +65 -0
- package/dist/components/verbs/publish-artifact.d.ts.map +1 -0
- package/dist/components/verbs/publish-artifact.js +74 -0
- package/dist/components/verbs/publish-image.d.ts +129 -0
- package/dist/components/verbs/publish-image.d.ts.map +1 -0
- package/dist/components/verbs/publish-image.js +145 -0
- package/dist/config-environments.d.ts +20 -0
- package/dist/config-environments.d.ts.map +1 -1
- package/dist/config-environments.js +12 -0
- package/dist/config.d.ts +25 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +10 -2
- package/dist/gate-decision.d.ts +20 -2
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +30 -3
- package/dist/graph-ir.d.ts +25 -0
- package/dist/graph-ir.d.ts.map +1 -1
- package/dist/graph-walk.d.ts +66 -0
- package/dist/graph-walk.d.ts.map +1 -0
- package/dist/graph-walk.js +70 -0
- package/dist/import/parser.d.ts +19 -0
- package/dist/import/parser.d.ts.map +1 -1
- package/dist/lexicon.d.ts +94 -6
- package/dist/lexicon.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.d.ts +11 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/git.d.ts +2 -5
- package/dist/lifecycle/git.d.ts.map +1 -1
- package/dist/lifecycle/ledger-read.d.ts +65 -0
- package/dist/lifecycle/ledger-read.d.ts.map +1 -0
- package/dist/lifecycle/ledger-read.js +160 -0
- package/dist/lifecycle/release-workstation.d.ts +7 -0
- package/dist/lifecycle/release-workstation.d.ts.map +1 -1
- package/dist/lifecycle/release-workstation.js +25 -0
- package/dist/lifecycle/run-ledger.d.ts +4 -3
- package/dist/lifecycle/run-ledger.d.ts.map +1 -1
- package/dist/lifecycle/run-ledger.js +1 -0
- package/dist/lint/discover.js +3 -1
- package/dist/lint/post-synth.d.ts +127 -1
- package/dist/lint/post-synth.d.ts.map +1 -1
- package/dist/lint/post-synth.js +84 -2
- package/dist/lint/rules/op/index.d.ts +1 -0
- package/dist/lint/rules/op/index.d.ts.map +1 -1
- package/dist/lint/rules/op/index.js +2 -0
- package/dist/lint/rules/op/ops019-workspace-op-target.d.ts +32 -0
- package/dist/lint/rules/op/ops019-workspace-op-target.d.ts.map +1 -0
- package/dist/lint/rules/op/ops019-workspace-op-target.js +63 -0
- package/dist/op/activities/activity-contracts.d.ts +9 -6
- package/dist/op/activities/activity-contracts.d.ts.map +1 -1
- package/dist/op/activities/activity-contracts.js +5 -2
- package/dist/op/activities/index.d.ts +2 -2
- package/dist/op/activities/index.d.ts.map +1 -1
- package/dist/op/activities/index.js +1 -1
- package/dist/op/activities/review-agent.d.ts +90 -4
- package/dist/op/activities/review-agent.d.ts.map +1 -1
- package/dist/op/activities/review-agent.js +217 -19
- package/dist/op/activities/work-evidence.d.ts +8 -1
- package/dist/op/activities/work-evidence.d.ts.map +1 -1
- package/dist/op/activities/work-evidence.js +1 -0
- package/dist/op/builders.d.ts +9 -5
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/op/builders.js +9 -5
- package/dist/op/composites/apply-op.d.ts +29 -2
- package/dist/op/composites/apply-op.d.ts.map +1 -1
- package/dist/op/composites/apply-op.js +20 -1
- package/dist/op/gate-approval-base.d.ts +25 -0
- package/dist/op/gate-approval-base.d.ts.map +1 -0
- package/dist/op/gate-approval-base.js +71 -0
- package/dist/op/gate-approval.d.ts +18 -9
- package/dist/op/gate-approval.d.ts.map +1 -1
- package/dist/op/gate-approval.js +13 -31
- package/dist/op/gate-name.d.ts +13 -0
- package/dist/op/gate-name.d.ts.map +1 -1
- package/dist/op/gate-name.js +14 -1
- package/dist/op/gate-quorum.d.ts +100 -3
- package/dist/op/gate-quorum.d.ts.map +1 -1
- package/dist/op/gate-quorum.js +108 -6
- package/dist/op/gate-review.d.ts +9 -0
- package/dist/op/gate-review.d.ts.map +1 -1
- package/dist/op/gate-review.js +13 -0
- package/dist/op/gate.d.ts +47 -5
- package/dist/op/gate.d.ts.map +1 -1
- package/dist/op/gate.js +25 -4
- package/dist/op/index.d.ts +3 -3
- package/dist/op/index.d.ts.map +1 -1
- package/dist/op/index.js +1 -1
- package/dist/op/local-executor.d.ts +45 -3
- package/dist/op/local-executor.d.ts.map +1 -1
- package/dist/op/local-executor.js +68 -7
- package/dist/op/op-waves-run.d.ts +26 -1
- package/dist/op/op-waves-run.d.ts.map +1 -1
- package/dist/op/op-waves-run.js +259 -13
- package/dist/op/op-waves.d.ts +72 -5
- package/dist/op/op-waves.d.ts.map +1 -1
- package/dist/op/op-waves.js +110 -15
- package/dist/op/runtime.d.ts +11 -0
- package/dist/op/runtime.d.ts.map +1 -1
- package/dist/op/schedule-overdue.d.ts +16 -0
- package/dist/op/schedule-overdue.d.ts.map +1 -1
- package/dist/op/schedule-overdue.js +36 -0
- package/dist/op/stage-hooks.d.ts +9 -2
- package/dist/op/stage-hooks.d.ts.map +1 -1
- package/dist/op/stage-hooks.js +7 -5
- package/dist/op/workspace-run-env.d.ts +22 -0
- package/dist/op/workspace-run-env.d.ts.map +1 -0
- package/dist/op/workspace-run-env.js +21 -0
- package/dist/pr-forge.d.ts +24 -0
- package/dist/pr-forge.d.ts.map +1 -1
- package/dist/pr-forge.js +47 -0
- package/dist/pr-loop.d.ts +10 -0
- package/dist/pr-loop.d.ts.map +1 -1
- package/dist/pr-loop.js +4 -0
- package/dist/pr-migrations.d.ts +62 -0
- package/dist/pr-migrations.d.ts.map +1 -0
- package/dist/pr-migrations.js +50 -0
- package/dist/pr-post.d.ts +42 -0
- package/dist/pr-post.d.ts.map +1 -1
- package/dist/pr-post.js +68 -2
- package/dist/read-filter.d.ts +65 -0
- package/dist/read-filter.d.ts.map +1 -0
- package/dist/read-filter.js +179 -0
- package/dist/run-event.d.ts +1 -1
- package/dist/run-event.d.ts.map +1 -1
- package/dist/terraform/carve.d.ts +24 -3
- package/dist/terraform/carve.d.ts.map +1 -1
- package/dist/terraform/carve.js +32 -14
- package/dist/terraform/cuts.d.ts +97 -0
- package/dist/terraform/cuts.d.ts.map +1 -0
- package/dist/terraform/cuts.js +138 -0
- package/dist/terraform/folds.d.ts +26 -0
- package/dist/terraform/folds.d.ts.map +1 -0
- package/dist/terraform/folds.js +38 -0
- package/dist/terraform/graph.d.ts.map +1 -1
- package/dist/terraform/graph.js +10 -0
- package/dist/terraform/reach.d.ts +140 -0
- package/dist/terraform/reach.d.ts.map +1 -0
- package/dist/terraform/reach.js +170 -0
- package/dist/terraform/score.d.ts +14 -0
- package/dist/terraform/score.d.ts.map +1 -1
- package/dist/terraform/score.js +14 -31
- package/dist/terraform/state.d.ts.map +1 -1
- package/dist/terraform/state.js +4 -2
- package/dist/terraform/types.d.ts +8 -0
- package/dist/terraform/types.d.ts.map +1 -1
- package/dist/wave-blocked.d.ts +10 -1
- package/dist/wave-blocked.d.ts.map +1 -1
- package/dist/wave-blocked.js +31 -3
- package/dist/wave-runtime.mjs +264 -254
- package/dist/workspace/check.schema.json +13 -2
- package/dist/workspace/checks/ci-branch.d.ts +44 -0
- package/dist/workspace/checks/ci-branch.d.ts.map +1 -0
- package/dist/workspace/checks/ci-branch.js +133 -0
- package/dist/workspace/checks/gate-approval.d.ts +58 -0
- package/dist/workspace/checks/gate-approval.d.ts.map +1 -0
- package/dist/workspace/checks/gate-approval.js +103 -0
- package/dist/workspace/checks/links.d.ts +3 -0
- package/dist/workspace/checks/links.d.ts.map +1 -1
- package/dist/workspace/checks/links.js +12 -1
- package/dist/workspace/checks/org.d.ts +48 -0
- package/dist/workspace/checks/org.d.ts.map +1 -0
- package/dist/workspace/checks/org.js +156 -0
- package/dist/workspace/checks.d.ts +12 -1
- package/dist/workspace/checks.d.ts.map +1 -1
- package/dist/workspace/checks.js +63 -7
- package/dist/workspace/ci-branches.d.ts +16 -0
- package/dist/workspace/ci-branches.d.ts.map +1 -1
- package/dist/workspace/ci-branches.js +27 -0
- package/dist/workspace/ci-green-cli.js +7 -7
- package/dist/workspace/ci-green-workflow.d.ts +1 -1
- package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
- package/dist/workspace/ci-green-workflow.js +13 -8
- package/dist/workspace/ci-green.d.ts +14 -0
- package/dist/workspace/ci-green.d.ts.map +1 -1
- package/dist/workspace/ci-green.js +44 -11
- package/dist/workspace/ci-run.d.ts +9 -1
- package/dist/workspace/ci-run.d.ts.map +1 -1
- package/dist/workspace/ci-run.js +67 -6
- package/dist/workspace/ci-serve.d.ts +9 -0
- package/dist/workspace/ci-serve.d.ts.map +1 -1
- package/dist/workspace/ci-serve.js +114 -76
- package/dist/workspace/compose-graph.d.ts +14 -0
- package/dist/workspace/compose-graph.d.ts.map +1 -1
- package/dist/workspace/composites.d.ts +4 -1
- package/dist/workspace/composites.d.ts.map +1 -1
- package/dist/workspace/composites.js +5 -2
- package/dist/workspace/composites.schema.json +22 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +105 -1
- package/dist/workspace/cross-root-lint.d.ts +56 -0
- package/dist/workspace/cross-root-lint.d.ts.map +1 -0
- package/dist/workspace/cross-root-lint.js +111 -0
- package/dist/workspace/dbt-models-reader.d.ts +44 -0
- package/dist/workspace/dbt-models-reader.d.ts.map +1 -0
- package/dist/workspace/dbt-models-reader.js +356 -0
- package/dist/workspace/dbt-project-common.d.ts +40 -0
- package/dist/workspace/dbt-project-common.d.ts.map +1 -0
- package/dist/workspace/dbt-project-common.js +106 -0
- package/dist/workspace/dbt-project-reader.d.ts +4 -3
- package/dist/workspace/dbt-project-reader.d.ts.map +1 -1
- package/dist/workspace/dbt-project-reader.js +14 -108
- package/dist/workspace/decision-rank.d.ts +26 -0
- package/dist/workspace/decision-rank.d.ts.map +1 -0
- package/dist/workspace/decision-rank.js +16 -0
- package/dist/workspace/declaration.d.ts +50 -2
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.js +57 -11
- package/dist/workspace/declaration.schema.json +166 -24
- package/dist/workspace/environments.d.ts +26 -2
- package/dist/workspace/environments.d.ts.map +1 -1
- package/dist/workspace/environments.js +26 -2
- package/dist/workspace/exit-cli.d.ts +44 -0
- package/dist/workspace/exit-cli.d.ts.map +1 -0
- package/dist/workspace/exit-cli.js +198 -0
- package/dist/workspace/exit.d.ts +159 -0
- package/dist/workspace/exit.d.ts.map +1 -0
- package/dist/workspace/exit.js +480 -0
- package/dist/workspace/exit.schema.json +257 -0
- package/dist/workspace/flyway-dir.d.ts +39 -0
- package/dist/workspace/flyway-dir.d.ts.map +1 -0
- package/dist/workspace/flyway-dir.js +104 -0
- package/dist/workspace/flyway-layout.d.ts +96 -0
- package/dist/workspace/flyway-layout.d.ts.map +1 -0
- package/dist/workspace/flyway-layout.js +308 -0
- package/dist/workspace/graph-cache.d.ts +3 -1
- package/dist/workspace/graph-cache.d.ts.map +1 -1
- package/dist/workspace/graph-cache.js +12 -1
- package/dist/workspace/graph-cli.d.ts.map +1 -1
- package/dist/workspace/graph-cli.js +26 -8
- package/dist/workspace/graph.schema.json +34 -0
- package/dist/workspace/import-fetch.d.ts +38 -0
- package/dist/workspace/import-fetch.d.ts.map +1 -0
- package/dist/workspace/import-fetch.js +99 -0
- package/dist/workspace/import-init.d.ts +26 -0
- package/dist/workspace/import-init.d.ts.map +1 -0
- package/dist/workspace/import-init.js +130 -0
- package/dist/workspace/import-source.d.ts +147 -0
- package/dist/workspace/import-source.d.ts.map +1 -0
- package/dist/workspace/import-source.js +370 -0
- package/dist/workspace/init.d.ts +4 -0
- package/dist/workspace/init.d.ts.map +1 -1
- package/dist/workspace/init.js +70 -3
- package/dist/workspace/intent.d.ts +2 -3
- package/dist/workspace/intent.d.ts.map +1 -1
- package/dist/workspace/intent.js +5 -9
- package/dist/workspace/kind-link-readers.d.ts +59 -2
- package/dist/workspace/kind-link-readers.d.ts.map +1 -1
- package/dist/workspace/kind-link-readers.js +17 -1
- package/dist/workspace/kind-readers.d.ts +6 -0
- package/dist/workspace/kind-readers.d.ts.map +1 -1
- package/dist/workspace/kind-readers.js +18 -0
- package/dist/workspace/kinds.d.ts +90 -3
- package/dist/workspace/kinds.d.ts.map +1 -1
- package/dist/workspace/kinds.js +161 -7
- package/dist/workspace/ledger.schema.json +158 -0
- package/dist/workspace/lexicon-outputs.d.ts +20 -1
- package/dist/workspace/lexicon-outputs.d.ts.map +1 -1
- package/dist/workspace/lexicon-outputs.js +102 -10
- package/dist/workspace/lineage-check.d.ts +3 -0
- package/dist/workspace/lineage-check.d.ts.map +1 -1
- package/dist/workspace/lineage-check.js +23 -4
- package/dist/workspace/lineage-upgrade.d.ts.map +1 -1
- package/dist/workspace/lineage-upgrade.js +13 -4
- package/dist/workspace/links.d.ts +8 -1
- package/dist/workspace/links.d.ts.map +1 -1
- package/dist/workspace/links.js +25 -1
- package/dist/workspace/ls.d.ts +8 -0
- package/dist/workspace/ls.d.ts.map +1 -1
- package/dist/workspace/ls.js +7 -1
- package/dist/workspace/ls.schema.json +7 -0
- package/dist/workspace/member-commands.d.ts.map +1 -1
- package/dist/workspace/member-commands.js +54 -5
- package/dist/workspace/migrate-links.d.ts +45 -0
- package/dist/workspace/migrate-links.d.ts.map +1 -0
- package/dist/workspace/migrate-links.js +100 -0
- package/dist/workspace/migration-dirs.d.ts +74 -0
- package/dist/workspace/migration-dirs.d.ts.map +1 -0
- package/dist/workspace/migration-dirs.js +254 -0
- package/dist/workspace/new-migrations.d.ts +47 -0
- package/dist/workspace/new-migrations.d.ts.map +1 -0
- package/dist/workspace/new-migrations.js +91 -0
- package/dist/workspace/pr-report.schema.json +46 -0
- package/dist/workspace/promote.d.ts +96 -0
- package/dist/workspace/promote.d.ts.map +1 -0
- package/dist/workspace/promote.js +263 -0
- package/dist/workspace/reason-codes.d.ts +21 -0
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/reason-codes.js +25 -0
- package/dist/workspace/records-cli.d.ts +11 -0
- package/dist/workspace/records-cli.d.ts.map +1 -1
- package/dist/workspace/records-cli.js +57 -5
- package/dist/workspace/records.schema.json +5 -0
- package/dist/workspace/release-candidates.d.ts +2 -0
- package/dist/workspace/release-candidates.d.ts.map +1 -1
- package/dist/workspace/release-candidates.js +5 -2
- package/dist/workspace/release-train.d.ts +53 -0
- package/dist/workspace/release-train.d.ts.map +1 -0
- package/dist/workspace/release-train.js +134 -0
- package/dist/workspace/release-workflow.d.ts.map +1 -1
- package/dist/workspace/release-workflow.js +4 -3
- package/dist/workspace/repo-ref.d.ts +45 -0
- package/dist/workspace/repo-ref.d.ts.map +1 -0
- package/dist/workspace/repo-ref.js +114 -0
- package/dist/workspace/run-event.schema.json +2 -2
- package/dist/workspace/runs-cli.d.ts +9 -0
- package/dist/workspace/runs-cli.d.ts.map +1 -1
- package/dist/workspace/runs-cli.js +48 -3
- package/dist/workspace/runs.schema.json +7 -0
- package/dist/workspace/search-contract.d.ts +1 -1
- package/dist/workspace/search-contract.d.ts.map +1 -1
- package/dist/workspace/status-decisions.d.ts +37 -0
- package/dist/workspace/status-decisions.d.ts.map +1 -0
- package/dist/workspace/status-decisions.js +147 -0
- package/dist/workspace/status-gates.d.ts +9 -0
- package/dist/workspace/status-gates.d.ts.map +1 -1
- package/dist/workspace/status.d.ts +4 -0
- package/dist/workspace/status.d.ts.map +1 -1
- package/dist/workspace/status.js +14 -2
- package/dist/workspace/status.schema.json +6 -0
- package/dist/workspace/work-cli.d.ts.map +1 -1
- package/dist/workspace/work-cli.js +5 -3
- package/dist/workspace/work-evidence-ops.d.ts +83 -0
- package/dist/workspace/work-evidence-ops.d.ts.map +1 -0
- package/dist/workspace/work-evidence-ops.js +169 -0
- package/dist/workspace/work-evidence.d.ts +12 -2
- package/dist/workspace/work-evidence.d.ts.map +1 -1
- package/dist/workspace/work-evidence.js +21 -3
- package/dist/workspace/work-evidence.schema.json +49 -2
- package/dist/workspace/workspace-gates.d.ts +110 -0
- package/dist/workspace/workspace-gates.d.ts.map +1 -0
- package/dist/workspace/workspace-gates.js +140 -0
- package/dist/workspace/workspace-kinds.schema.json +108 -10
- package/dist/workspace/workspace-ledger.d.ts +76 -0
- package/dist/workspace/workspace-ledger.d.ts.map +1 -0
- package/dist/workspace/workspace-ledger.js +91 -0
- package/dist/workspace/workspace-run.d.ts +112 -0
- package/dist/workspace/workspace-run.d.ts.map +1 -0
- package/dist/workspace/workspace-run.js +432 -0
- package/package.json +1 -1
- package/src/__golden__/wave-loop/op-by-apply-after-fails.json +10 -0
- package/src/__golden__/wave-loop/op-by-apply-hold.json +10 -0
- package/src/__golden__/wave-loop/op-by-apply-ignored.json +10 -0
- package/src/__golden__/wave-loop/op-by-apply-pass.json +10 -0
- package/src/__golden__/wave-loop/op-by-apply-skip.json +10 -0
- package/src/__golden__/wave-loop/op-cost-member-clash.json +6 -0
- package/src/__golden__/wave-loop/op-cost-member.json +13 -0
- package/src/__golden__/wave-loop/op-denied-source.json +16 -0
- package/src/__golden__/wave-loop/op-denied.json +16 -0
- package/src/__golden__/wave-loop/op-discover-rest-short.json +6 -0
- package/src/__golden__/wave-loop/op-discover-rest-stops.json +13 -0
- package/src/__golden__/wave-loop/op-discover-rest.json +26 -0
- package/src/__golden__/wave-loop/op-discover-wide.json +26 -0
- package/src/__golden__/wave-loop/op-held-on-again.json +16 -0
- package/src/__golden__/wave-loop/op-held-on-before-apply.json +16 -0
- package/src/__golden__/wave-loop/op-held-on.json +16 -0
- package/src/__golden__/wave-loop/op-hooks-apply-fails.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-fail-after-apply.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-fail-before-apply.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-fail-before-plan.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-held.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-hold-before-apply.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-pass.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-refused-at-base.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-share.json +33 -0
- package/src/__golden__/wave-loop/op-outcome-held.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-replan-approved.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-replan-forever.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-replan.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-stood-down.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-unreadable.json +10 -0
- package/src/__golden__/wave-loop/op-overridden.json +16 -0
- package/src/__golden__/wave-loop/op-per-run.json +20 -0
- package/src/__golden__/wave-loop/op-point.json +13 -0
- package/src/__golden__/wave-loop/op-pr-review.json +10 -0
- package/src/__golden__/wave-loop/op-sealed.json +10 -0
- package/src/__golden__/wave-loop/op-spend-change-only.json +10 -0
- package/src/__golden__/wave-loop/op-spend.json +10 -0
- package/src/__golden__/wave-loop/op-wave-commands.json +55 -0
- package/src/__golden__/wave-loop/op-wide-refused.json +26 -0
- package/src/__golden__/wave-loop/op-wide-waiting.json +29 -0
- package/src/__golden__/wave-loop/op-wide.json +39 -0
- package/src/action-pins.test.ts +78 -0
- package/src/action-pins.ts +92 -0
- package/src/cli/commands/carve-score-once.test.ts +99 -0
- package/src/cli/commands/carve.ts +37 -6
- package/src/cli/commands/check-lexicon.test.ts +2 -2
- package/src/cli/commands/import-report.ts +71 -0
- package/src/cli/commands/import.ts +33 -3
- package/src/cli/commands/migrate-dialect.test.ts +145 -0
- package/src/cli/commands/migrate.ts +132 -11
- package/src/cli/handlers/__snapshots__/build-member.test.ts.snap +4 -4
- package/src/cli/handlers/approve.ts +33 -4
- package/src/cli/handlers/build.ts +7 -1
- package/src/cli/handlers/graph-reader.test.ts +31 -0
- package/src/cli/handlers/graph-reader.ts +51 -0
- package/src/cli/handlers/graph.ts +14 -0
- package/src/cli/handlers/ledger.ts +54 -0
- package/src/cli/handlers/migrate.ts +21 -12
- package/src/cli/handlers/misc.ts +10 -1
- package/src/cli/handlers/pr-env.ts +2 -2
- package/src/cli/handlers/pr.ts +176 -37
- package/src/cli/handlers/query.ts +16 -4
- package/src/cli/handlers/release.ts +6 -3
- package/src/cli/handlers/search.ts +13 -34
- package/src/cli/main.test.ts +17 -0
- package/src/cli/main.ts +87 -14
- package/src/cli/parse-args.ts +35 -2
- package/src/cli/registry.ts +22 -4
- package/src/components/builders.ts +8 -0
- package/src/components/capability-plugin-loader.ts +13 -1
- package/src/components/capability-plugin.ts +16 -0
- package/src/components/pr-env-run-bundle.test.ts +1 -0
- package/src/components/pr-hooks.test.ts +73 -5
- package/src/components/pr-hooks.ts +95 -5
- package/src/components/pr-pipeline.ts +64 -16
- package/src/components/pr-policy.test.ts +64 -1
- package/src/components/pr-policy.ts +53 -0
- package/src/components/pr-run.ts +4 -0
- package/src/components/registry.test.ts +1 -1
- package/src/components/starter-plugin.ts +6 -0
- package/src/components/verbs/index.ts +2 -0
- package/src/components/verbs/publish-artifact.test.ts +60 -0
- package/src/components/verbs/publish-artifact.ts +122 -0
- package/src/components/verbs/publish-image.test.ts +101 -0
- package/src/components/verbs/publish-image.ts +265 -0
- package/src/config-environments.ts +28 -1
- package/src/config.ts +24 -1
- package/src/gate-decision-bundle.test.ts +5 -2
- package/src/gate-decision-identity.test.ts +20 -0
- package/src/gate-decision.ts +46 -3
- package/src/graph-ir.ts +27 -0
- package/src/graph-walk.test.ts +44 -0
- package/src/graph-walk.ts +102 -0
- package/src/import/parser.ts +20 -0
- package/src/lexicon.ts +98 -6
- package/src/lifecycle/gate-ledger.ts +8 -0
- package/src/lifecycle/git.ts +2 -2
- package/src/lifecycle/ledger-read.test.ts +107 -0
- package/src/lifecycle/ledger-read.ts +195 -0
- package/src/lifecycle/release-workstation.ts +24 -0
- package/src/lifecycle/run-ledger.ts +5 -2
- package/src/lint/cross-root.test.ts +122 -0
- package/src/lint/discover.ts +3 -1
- package/src/lint/post-synth.ts +212 -2
- package/src/lint/rules/op/index.ts +2 -0
- package/src/lint/rules/op/ops019-workspace-op-target.ts +89 -0
- package/src/op/activities/activity-contracts.ts +5 -2
- package/src/op/activities/index.ts +2 -2
- package/src/op/activities/review-agent.test.ts +221 -4
- package/src/op/activities/review-agent.ts +265 -22
- package/src/op/activities/work-evidence.ts +9 -1
- package/src/op/builders.ts +9 -5
- package/src/op/composites/apply-op.test.ts +108 -0
- package/src/op/composites/apply-op.ts +37 -2
- package/src/op/gate-approval-at-base.test.ts +97 -0
- package/src/op/gate-approval-base.ts +72 -0
- package/src/op/gate-approval.test.ts +6 -1
- package/src/op/gate-approval.ts +22 -27
- package/src/op/gate-name.ts +16 -1
- package/src/op/gate-quorum-at-base.test.ts +211 -0
- package/src/op/gate-quorum.ts +156 -8
- package/src/op/gate-review.ts +14 -0
- package/src/op/gate.ts +69 -9
- package/src/op/index.ts +3 -2
- package/src/op/local-executor.ts +91 -11
- package/src/op/op-waves-depends-on.test.ts +81 -0
- package/src/op/op-waves-hook-targets.test.ts +4 -2
- package/src/op/op-waves-quorum-product.test.ts +158 -0
- package/src/op/op-waves-run.ts +288 -14
- package/src/op/op-waves.ts +143 -14
- package/src/op/runtime.ts +8 -0
- package/src/op/schedule-overdue.ts +33 -0
- package/src/op/stage-hooks.ts +13 -5
- package/src/op/workspace-run-env.ts +29 -0
- package/src/pr-forge-bundle.test.ts +2 -2
- package/src/pr-forge.test.ts +47 -0
- package/src/pr-forge.ts +68 -0
- package/src/pr-loop-bundle.test.ts +3 -2
- package/src/pr-loop.test.ts +52 -0
- package/src/pr-loop.ts +12 -0
- package/src/pr-migrations.ts +97 -0
- package/src/pr-post-open.e2e.test.ts +36 -0
- package/src/pr-post.test.ts +102 -3
- package/src/pr-post.ts +90 -2
- package/src/read-filter.test.ts +54 -0
- package/src/read-filter.ts +193 -0
- package/src/run-event.ts +1 -1
- package/src/stage-hooks-bundle.test.ts +1 -0
- package/src/terraform/carve.ts +52 -15
- package/src/terraform/cuts.test.ts +173 -0
- package/src/terraform/cuts.ts +188 -0
- package/src/terraform/folds.ts +44 -0
- package/src/terraform/graph.ts +9 -0
- package/src/terraform/radius.test.ts +90 -0
- package/src/terraform/reach.test.ts +146 -0
- package/src/terraform/reach.ts +247 -0
- package/src/terraform/score.ts +27 -29
- package/src/terraform/state.ts +3 -1
- package/src/terraform/types.ts +8 -0
- package/src/wave-blocked.ts +28 -3
- package/src/wave-loop-golden.test.ts +4 -3
- package/src/workspace/__fixtures__/import/spacelift.json +9 -0
- package/src/workspace/__fixtures__/import/tfc.json +13 -0
- package/src/workspace/behold-kinds.test.ts +2 -1
- package/src/workspace/check-contract.test.ts +8 -6
- package/src/workspace/check.schema.json +13 -2
- package/src/workspace/checks/ci-branch.test.ts +128 -0
- package/src/workspace/checks/ci-branch.ts +141 -0
- package/src/workspace/checks/gate-approval.test.ts +77 -0
- package/src/workspace/checks/gate-approval.ts +121 -0
- package/src/workspace/checks/links.ts +12 -1
- package/src/workspace/checks/org.ts +169 -0
- package/src/workspace/checks.ts +68 -7
- package/src/workspace/ci-branches.ts +31 -0
- package/src/workspace/ci-green-branches.test.ts +153 -0
- package/src/workspace/ci-green-cli.ts +7 -7
- package/src/workspace/ci-green-workflow.test.ts +4 -3
- package/src/workspace/ci-green-workflow.ts +13 -9
- package/src/workspace/ci-green.ts +49 -12
- package/src/workspace/ci-run.test.ts +72 -1
- package/src/workspace/ci-run.ts +68 -8
- package/src/workspace/ci-serve.test.ts +95 -0
- package/src/workspace/ci-serve.ts +106 -65
- package/src/workspace/component-environments.test.ts +25 -2
- package/src/workspace/compose-graph.ts +9 -2
- package/src/workspace/composites.schema.json +22 -0
- package/src/workspace/composites.test.ts +39 -8
- package/src/workspace/composites.ts +6 -2
- package/src/workspace/conformance/__writer_fixture__/work/work.schema.json +105 -1
- package/src/workspace/cross-root-lint.test.ts +90 -0
- package/src/workspace/cross-root-lint.ts +126 -0
- package/src/workspace/dbt-kind.test.ts +3 -2
- package/src/workspace/dbt-models-reader.ts +362 -0
- package/src/workspace/dbt-models.test.ts +248 -0
- package/src/workspace/dbt-project-common.ts +113 -0
- package/src/workspace/dbt-project-reader.ts +29 -112
- package/src/workspace/decision-rank.ts +40 -0
- package/src/workspace/declaration.schema.json +166 -24
- package/src/workspace/declaration.ts +101 -15
- package/src/workspace/environments.ts +40 -4
- package/src/workspace/exit-cli.ts +219 -0
- package/src/workspace/exit.schema.json +257 -0
- package/src/workspace/exit.test.ts +185 -0
- package/src/workspace/exit.ts +560 -0
- package/src/workspace/flyway-dir.ts +113 -0
- package/src/workspace/flyway-layout.ts +337 -0
- package/src/workspace/graph-cache.ts +12 -2
- package/src/workspace/graph-cli.ts +25 -10
- package/src/workspace/graph-contract.test.ts +4 -2
- package/src/workspace/graph.schema.json +34 -0
- package/src/workspace/identity.test.ts +29 -2
- package/src/workspace/import-fetch.ts +151 -0
- package/src/workspace/import-init.ts +147 -0
- package/src/workspace/import-source.test.ts +183 -0
- package/src/workspace/import-source.ts +462 -0
- package/src/workspace/init.test.ts +55 -1
- package/src/workspace/init.ts +66 -4
- package/src/workspace/intent.ts +6 -14
- package/src/workspace/kind-link-readers.ts +68 -3
- package/src/workspace/kind-readers.test.ts +36 -0
- package/src/workspace/kind-readers.ts +18 -1
- package/src/workspace/kinds.test.ts +35 -7
- package/src/workspace/kinds.ts +212 -11
- package/src/workspace/ledger.schema.json +158 -0
- package/src/workspace/lexicon-outputs.ts +132 -13
- package/src/workspace/lineage-check.ts +30 -7
- package/src/workspace/lineage-upgrade.test.ts +20 -0
- package/src/workspace/lineage-upgrade.ts +16 -7
- package/src/workspace/links.ts +24 -1
- package/src/workspace/ls-contract.test.ts +1 -1
- package/src/workspace/ls.schema.json +7 -0
- package/src/workspace/ls.ts +10 -1
- package/src/workspace/member-commands.ts +60 -2
- package/src/workspace/member-file-schema.test.ts +124 -0
- package/src/workspace/migrate-links.test.ts +99 -0
- package/src/workspace/migrate-links.ts +108 -0
- package/src/workspace/migration-dirs.test.ts +272 -0
- package/src/workspace/migration-dirs.ts +267 -0
- package/src/workspace/new-migrations.test.ts +98 -0
- package/src/workspace/new-migrations.ts +109 -0
- package/src/workspace/org-scope.test.ts +238 -0
- package/src/workspace/pr-report.schema.json +46 -0
- package/src/workspace/promote.test.ts +114 -0
- package/src/workspace/promote.ts +302 -0
- package/src/workspace/reason-codes.test.ts +10 -1
- package/src/workspace/reason-codes.ts +25 -0
- package/src/workspace/records-cli.ts +58 -5
- package/src/workspace/records.schema.json +5 -0
- package/src/workspace/release-candidates.ts +7 -2
- package/src/workspace/release-train.ts +157 -0
- package/src/workspace/release-workflow.ts +4 -3
- package/src/workspace/repo-ref.ts +113 -0
- package/src/workspace/run-event.schema.json +2 -2
- package/src/workspace/runs-cli.ts +48 -4
- package/src/workspace/runs.schema.json +7 -0
- package/src/workspace/status-contract.test.ts +46 -1
- package/src/workspace/status-decisions.test.ts +100 -0
- package/src/workspace/status-decisions.ts +151 -0
- package/src/workspace/status-gates.ts +9 -0
- package/src/workspace/status.schema.json +6 -0
- package/src/workspace/status.ts +17 -3
- package/src/workspace/where-filters.test.ts +39 -0
- package/src/workspace/work-cli.ts +5 -3
- package/src/workspace/work-evidence-ops.test.ts +176 -0
- package/src/workspace/work-evidence-ops.ts +189 -0
- package/src/workspace/work-evidence.schema.json +49 -2
- package/src/workspace/work-evidence.ts +22 -3
- package/src/workspace/workspace-gates.ts +200 -0
- package/src/workspace/workspace-kinds.schema.json +108 -10
- package/src/workspace/workspace-ledger.ts +130 -0
- package/src/workspace/workspace-run.test.ts +322 -0
- package/src/workspace/workspace-run.ts +461 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fold detection for the carve graph, shared by the scorer and the walks.
|
|
3
|
+
*
|
|
4
|
+
* A sub-resource whose type inlines into a parent (`foldParentOf`) carves with
|
|
5
|
+
* that parent when the parent is in the estate under the same name:
|
|
6
|
+
* `aws_s3_bucket_versioning.assets` goes with `aws_s3_bucket.assets`. The
|
|
7
|
+
* scorer drops it from the ranking and discounts its edge to the parent; the
|
|
8
|
+
* walks in `reach.ts` contract it into the parent before stepping, since an
|
|
9
|
+
* uncontracted walk counts the child as a separate dependent (#2325 measured a
|
|
10
|
+
* 100% overstatement on the sample estate). It lived privately in `score.ts`
|
|
11
|
+
* until the walks needed it.
|
|
12
|
+
*/
|
|
13
|
+
import { foldParentOf } from "./tier-map.js";
|
|
14
|
+
/**
|
|
15
|
+
* Build the set of addresses that fold into a parent present in the estate, plus
|
|
16
|
+
* the reverse lookup (parent → its folded children), so a parent can discount
|
|
17
|
+
* inbound edges coming from its own folded sub-resources.
|
|
18
|
+
*/
|
|
19
|
+
export function computeFolds(graph) {
|
|
20
|
+
const byAddress = new Map(graph.nodes.map((n) => [n.address, n]));
|
|
21
|
+
const folded = new Set();
|
|
22
|
+
const childrenOf = new Map();
|
|
23
|
+
for (const node of graph.nodes) {
|
|
24
|
+
if (node.kind !== "resource" || !node.type)
|
|
25
|
+
continue;
|
|
26
|
+
const parentType = foldParentOf(node.type);
|
|
27
|
+
if (!parentType)
|
|
28
|
+
continue;
|
|
29
|
+
const parentAddress = `${parentType}.${node.name}`;
|
|
30
|
+
if (!byAddress.has(parentAddress))
|
|
31
|
+
continue; // sub-resource without its parent → score it on its own
|
|
32
|
+
folded.add(node.address);
|
|
33
|
+
if (!childrenOf.has(parentAddress))
|
|
34
|
+
childrenOf.set(parentAddress, new Set());
|
|
35
|
+
childrenOf.get(parentAddress).add(node.address);
|
|
36
|
+
}
|
|
37
|
+
return { folded, childrenOf };
|
|
38
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/terraform/graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAU,MAAM,SAAS,CAAC;AAErE;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;AAKpE,UAAU,MAAM;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA4BD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe/D;AAiBD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE,CAiB/D;
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/terraform/graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAU,MAAM,SAAS,CAAC;AAErE;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;AAKpE,UAAU,MAAM;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA4BD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe/D;AAiBD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE,CAiB/D;AAqMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAwFhF;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAEtE;AAED,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAEvE"}
|
package/dist/terraform/graph.js
CHANGED
|
@@ -266,6 +266,14 @@ function throughReferrers(refs, resolved) {
|
|
|
266
266
|
function blockHasMeta(block, key) {
|
|
267
267
|
return !!block && typeof block === "object" && key in block;
|
|
268
268
|
}
|
|
269
|
+
/** Which expansion meta-argument a block carries, as a spreadable `TfNode` field (#2325). */
|
|
270
|
+
function expansionOf(block) {
|
|
271
|
+
if (blockHasMeta(block, "count"))
|
|
272
|
+
return { expansion: "count" };
|
|
273
|
+
if (blockHasMeta(block, "for_each"))
|
|
274
|
+
return { expansion: "for_each" };
|
|
275
|
+
return {};
|
|
276
|
+
}
|
|
269
277
|
/**
|
|
270
278
|
* The literal string at a dotted path into a block, or undefined when the path
|
|
271
279
|
* misses or lands on an interpolation. A dotted path walks nested blocks —
|
|
@@ -365,6 +373,7 @@ export function buildGraph(tree, exprRefs) {
|
|
|
365
373
|
name,
|
|
366
374
|
instances: 1,
|
|
367
375
|
hasDynamic: dynamic || touchesData,
|
|
376
|
+
...expansionOf(block),
|
|
368
377
|
identity: literalIdentity(block, type),
|
|
369
378
|
dataSourceValues: dataSourceValues(block, type),
|
|
370
379
|
});
|
|
@@ -384,6 +393,7 @@ export function buildGraph(tree, exprRefs) {
|
|
|
384
393
|
name,
|
|
385
394
|
instances: 1,
|
|
386
395
|
hasDynamic: dynamic || touchesData,
|
|
396
|
+
...expansionOf(block),
|
|
387
397
|
});
|
|
388
398
|
}
|
|
389
399
|
// Output blocks: referrers without being nodes (#1638). Their pseudo-address
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transitive reachability over the carve graph (#2325).
|
|
3
|
+
*
|
|
4
|
+
* `inboundEdges`/`outboundEdges` in `graph.ts` answer one hop with a linear
|
|
5
|
+
* scan, which is right for the scorer's depth-1 counts and wrong as the step of
|
|
6
|
+
* a walk: calling it per node per step is O(V²E). This module builds one
|
|
7
|
+
* index per graph instead, and walks it with the same breadth-first walk
|
|
8
|
+
* `chant search` uses (`graph-walk.ts`).
|
|
9
|
+
*
|
|
10
|
+
* Four rules from the spike (docs/design/carve-dependency-blast-radius-spike.md)
|
|
11
|
+
* hold for every walk here and for the set functions in `cuts.ts` built on it:
|
|
12
|
+
*
|
|
13
|
+
* - Folds contract first. A folded sub-resource is its parent for the walk, so
|
|
14
|
+
* `aws_s3_bucket_versioning.assets` is never a dependent of
|
|
15
|
+
* `aws_s3_bucket.assets`, and a node reading the child depends on the
|
|
16
|
+
* parent.
|
|
17
|
+
* - Outputs are terminal and counted apart. An `output.<name>` pseudo-address
|
|
18
|
+
* has no inbound edges, so it never extends a path; it is reported in its
|
|
19
|
+
* own list.
|
|
20
|
+
* - Modules and unresolved `count`/`for_each` hide how much a node holds. A
|
|
21
|
+
* `module.x` node is one node whatever it contains, and `count = 20` is one
|
|
22
|
+
* node until `--state` resolves it. They are walked through and named, so a
|
|
23
|
+
* caller can say `unknown` instead of a number.
|
|
24
|
+
* - Cross-stack hops are told apart. On the CDK path an `Fn::ImportValue` edge
|
|
25
|
+
* carries `crossStack: true`; what is reachable only through one is listed
|
|
26
|
+
* separately.
|
|
27
|
+
*
|
|
28
|
+
* Pure, like the rest of the carve analysis. `src/cdk/graph.ts` emits the same
|
|
29
|
+
* `TfGraph`, so one implementation covers both sources.
|
|
30
|
+
*/
|
|
31
|
+
import { type Adjacency } from "../graph-walk.js";
|
|
32
|
+
import type { TfEdge, TfGraph, TfNode } from "./types.js";
|
|
33
|
+
/** An edge with both ends contracted to their fold parents. `edge` is the edge as the graph holds it. */
|
|
34
|
+
export interface ContractedEdge extends TfEdge {
|
|
35
|
+
edge: TfEdge;
|
|
36
|
+
}
|
|
37
|
+
/** The index every walk over one graph shares. Built once per graph; see {@link carveIndex}. */
|
|
38
|
+
export interface CarveIndex {
|
|
39
|
+
graph: TfGraph;
|
|
40
|
+
/** Every node by address, folded sub-resources included. */
|
|
41
|
+
nodes: Map<string, TfNode>;
|
|
42
|
+
/** The address a walk sees for `address`: its fold parent, or itself. */
|
|
43
|
+
rep(address: string): string;
|
|
44
|
+
/** A walked node's own blocks: itself first, then what folds into it, sorted. */
|
|
45
|
+
membersOf(address: string): string[];
|
|
46
|
+
/** Contracted edges by both ends. An edge internal to one fold is dropped. */
|
|
47
|
+
adj: Adjacency<ContractedEdge>;
|
|
48
|
+
/** The graph has at least one `crossStack` edge (a CDK assembly of several stacks). */
|
|
49
|
+
crossStack: boolean;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The fold-contracted adjacency index for a graph, built on first use and
|
|
53
|
+
* cached against the graph object. O(V+E) to build; every walk after that is
|
|
54
|
+
* O(V+E). A caller that mutates `graph.edges` after the first walk must pass a
|
|
55
|
+
* new graph object (`applyStateCounts` only touches node instance counts, which
|
|
56
|
+
* the index reads live).
|
|
57
|
+
*/
|
|
58
|
+
export declare function carveIndex(graph: TfGraph): CarveIndex;
|
|
59
|
+
/** `output.<name>`: a pseudo-address `buildGraph` gives an output block's edges (#1638). */
|
|
60
|
+
export declare function isOutputAddress(address: string): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Whether a node stands for an amount of infrastructure the graph cannot see:
|
|
63
|
+
* a Terraform `module` block (one node, whatever it holds; state is not read
|
|
64
|
+
* inside modules), or a `count`/`for_each` block whose instance count no
|
|
65
|
+
* `.tfstate` resolved. A CDK L3 construct is also `kind: "module"`, but its
|
|
66
|
+
* members are listed and its address is a construct path, so it hides nothing.
|
|
67
|
+
*/
|
|
68
|
+
export declare function hidesContents(node: TfNode): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Which way a walk steps: `in` follows who reads a node (its dependents), `out`
|
|
71
|
+
* what it reads, `both` either (weak connectivity, #3909). An output is
|
|
72
|
+
* terminal every way: it is reached, never stepped from.
|
|
73
|
+
*/
|
|
74
|
+
export type WalkDirection = "in" | "out" | "both";
|
|
75
|
+
/**
|
|
76
|
+
* Walk from `seeds` (already contracted) and return every node reached with its
|
|
77
|
+
* shortest depth, seeds excluded. `sameStack` refuses `crossStack` edges.
|
|
78
|
+
*/
|
|
79
|
+
export declare function walkFrom(index: CarveIndex, seeds: Iterable<string>, direction: WalkDirection, opts?: {
|
|
80
|
+
sameStack?: boolean;
|
|
81
|
+
}): Map<string, number>;
|
|
82
|
+
/** What a walk from one node reached. Every list is sorted and holds contracted addresses. */
|
|
83
|
+
export interface Reach {
|
|
84
|
+
/** The node the walk started from: the requested address, or its fold parent. */
|
|
85
|
+
address: string;
|
|
86
|
+
/** Resource and module nodes reached, the start excluded. */
|
|
87
|
+
resources: string[];
|
|
88
|
+
/** `output.<name>` pseudo-addresses reached; terminal, never in `resources`. */
|
|
89
|
+
outputs: string[];
|
|
90
|
+
/** The longest shortest path to anything reached, outputs included; 0 when nothing was. */
|
|
91
|
+
depth: number;
|
|
92
|
+
/** Of `resources`, those reached only through a `crossStack` edge. Empty off the CDK path. */
|
|
93
|
+
crossStack: string[];
|
|
94
|
+
/** Of `resources`, those that hide how much they hold (see {@link hidesContents}). */
|
|
95
|
+
hidden: string[];
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Everything reachable from `address` (#2325). Direction `in` (the default)
|
|
99
|
+
* walks dependents: what a change to `address` reaches, its blast radius.
|
|
100
|
+
* Direction `out` walks dependencies: what `address` needs.
|
|
101
|
+
*
|
|
102
|
+
* Throws when `address` is not a node of the graph.
|
|
103
|
+
*/
|
|
104
|
+
export declare function reach(graph: TfGraph, address: string, opts?: {
|
|
105
|
+
direction?: WalkDirection;
|
|
106
|
+
}): Reach;
|
|
107
|
+
/** Code-point order, as `buildGraph` sorts: locale-independent. */
|
|
108
|
+
export declare function cmp(a: string, b: string): number;
|
|
109
|
+
/**
|
|
110
|
+
* How far a change to one node reaches, as `carve advise` reports it (#2326):
|
|
111
|
+
* its own axis beside the peelability score, never a penalty term. Every score
|
|
112
|
+
* term is a unit of work (an inbound edge is one data-source patch); a
|
|
113
|
+
* transitive dependent is not work, nobody patches it, and its count can run
|
|
114
|
+
* far past what a 0-100 score carries.
|
|
115
|
+
*/
|
|
116
|
+
export interface BlastRadius {
|
|
117
|
+
/**
|
|
118
|
+
* Resources and modules that depend on the node, directly or not, weighted by
|
|
119
|
+
* instance count when `--state` resolved it. `"unknown"` when one of them is
|
|
120
|
+
* a module or a `count`/`for_each` no state resolved: see `hiddenBy`.
|
|
121
|
+
*/
|
|
122
|
+
resources: number | "unknown";
|
|
123
|
+
/** `output` blocks that read the node or one of its dependents. */
|
|
124
|
+
outputs: number;
|
|
125
|
+
/** Hops to the farthest dependent, outputs included; 0 when nothing depends on it. */
|
|
126
|
+
depth: number;
|
|
127
|
+
/**
|
|
128
|
+
* Of `resources`, those reachable only through a `crossStack` edge (a CDK
|
|
129
|
+
* `Fn::ImportValue`), weighted the same way. Present only when the graph has
|
|
130
|
+
* such an edge.
|
|
131
|
+
*/
|
|
132
|
+
crossStack?: number | "unknown";
|
|
133
|
+
/** The dependents that make a count `"unknown"`. Present only when one does. */
|
|
134
|
+
hiddenBy?: string[];
|
|
135
|
+
}
|
|
136
|
+
/** The instances `addresses` stand for, or `"unknown"` when one of them hides its contents. */
|
|
137
|
+
export declare function weigh(index: CarveIndex, addresses: readonly string[]): number | "unknown";
|
|
138
|
+
/** The {@link BlastRadius} of `address`: its {@link reach} through dependents, counted. */
|
|
139
|
+
export declare function blastRadius(graph: TfGraph, address: string): BlastRadius;
|
|
140
|
+
//# sourceMappingURL=reach.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reach.d.ts","sourceRoot":"","sources":["../../src/terraform/reach.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transitive reachability over the carve graph (#2325).
|
|
3
|
+
*
|
|
4
|
+
* `inboundEdges`/`outboundEdges` in `graph.ts` answer one hop with a linear
|
|
5
|
+
* scan, which is right for the scorer's depth-1 counts and wrong as the step of
|
|
6
|
+
* a walk: calling it per node per step is O(V²E). This module builds one
|
|
7
|
+
* index per graph instead, and walks it with the same breadth-first walk
|
|
8
|
+
* `chant search` uses (`graph-walk.ts`).
|
|
9
|
+
*
|
|
10
|
+
* Four rules from the spike (docs/design/carve-dependency-blast-radius-spike.md)
|
|
11
|
+
* hold for every walk here and for the set functions in `cuts.ts` built on it:
|
|
12
|
+
*
|
|
13
|
+
* - Folds contract first. A folded sub-resource is its parent for the walk, so
|
|
14
|
+
* `aws_s3_bucket_versioning.assets` is never a dependent of
|
|
15
|
+
* `aws_s3_bucket.assets`, and a node reading the child depends on the
|
|
16
|
+
* parent.
|
|
17
|
+
* - Outputs are terminal and counted apart. An `output.<name>` pseudo-address
|
|
18
|
+
* has no inbound edges, so it never extends a path; it is reported in its
|
|
19
|
+
* own list.
|
|
20
|
+
* - Modules and unresolved `count`/`for_each` hide how much a node holds. A
|
|
21
|
+
* `module.x` node is one node whatever it contains, and `count = 20` is one
|
|
22
|
+
* node until `--state` resolves it. They are walked through and named, so a
|
|
23
|
+
* caller can say `unknown` instead of a number.
|
|
24
|
+
* - Cross-stack hops are told apart. On the CDK path an `Fn::ImportValue` edge
|
|
25
|
+
* carries `crossStack: true`; what is reachable only through one is listed
|
|
26
|
+
* separately.
|
|
27
|
+
*
|
|
28
|
+
* Pure, like the rest of the carve analysis. `src/cdk/graph.ts` emits the same
|
|
29
|
+
* `TfGraph`, so one implementation covers both sources.
|
|
30
|
+
*/
|
|
31
|
+
import { adjacencyOf, walkBreadthFirst } from "../graph-walk.js";
|
|
32
|
+
import { computeFolds } from "./folds.js";
|
|
33
|
+
const indexes = new WeakMap();
|
|
34
|
+
/**
|
|
35
|
+
* The fold-contracted adjacency index for a graph, built on first use and
|
|
36
|
+
* cached against the graph object. O(V+E) to build; every walk after that is
|
|
37
|
+
* O(V+E). A caller that mutates `graph.edges` after the first walk must pass a
|
|
38
|
+
* new graph object (`applyStateCounts` only touches node instance counts, which
|
|
39
|
+
* the index reads live).
|
|
40
|
+
*/
|
|
41
|
+
export function carveIndex(graph) {
|
|
42
|
+
const cached = indexes.get(graph);
|
|
43
|
+
if (cached)
|
|
44
|
+
return cached;
|
|
45
|
+
const nodes = new Map(graph.nodes.map((n) => [n.address, n]));
|
|
46
|
+
const parentOf = new Map();
|
|
47
|
+
const { childrenOf } = computeFolds(graph);
|
|
48
|
+
for (const [parent, children] of childrenOf)
|
|
49
|
+
for (const child of children)
|
|
50
|
+
parentOf.set(child, parent);
|
|
51
|
+
const rep = (address) => parentOf.get(address) ?? address;
|
|
52
|
+
const contracted = [];
|
|
53
|
+
for (const e of graph.edges) {
|
|
54
|
+
const from = rep(e.from);
|
|
55
|
+
const to = rep(e.to);
|
|
56
|
+
if (from === to)
|
|
57
|
+
continue; // a folded child reading its own parent is not an edge of the fold
|
|
58
|
+
contracted.push({ ...e, from, to, edge: e });
|
|
59
|
+
}
|
|
60
|
+
const index = {
|
|
61
|
+
graph,
|
|
62
|
+
nodes,
|
|
63
|
+
rep,
|
|
64
|
+
membersOf: (address) => [address, ...[...(childrenOf.get(address) ?? [])].sort()],
|
|
65
|
+
adj: adjacencyOf(contracted),
|
|
66
|
+
crossStack: graph.edges.some((e) => e.crossStack),
|
|
67
|
+
};
|
|
68
|
+
indexes.set(graph, index);
|
|
69
|
+
return index;
|
|
70
|
+
}
|
|
71
|
+
/** `output.<name>`: a pseudo-address `buildGraph` gives an output block's edges (#1638). */
|
|
72
|
+
export function isOutputAddress(address) {
|
|
73
|
+
return address.startsWith("output.");
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Whether a node stands for an amount of infrastructure the graph cannot see:
|
|
77
|
+
* a Terraform `module` block (one node, whatever it holds; state is not read
|
|
78
|
+
* inside modules), or a `count`/`for_each` block whose instance count no
|
|
79
|
+
* `.tfstate` resolved. A CDK L3 construct is also `kind: "module"`, but its
|
|
80
|
+
* members are listed and its address is a construct path, so it hides nothing.
|
|
81
|
+
*/
|
|
82
|
+
export function hidesContents(node) {
|
|
83
|
+
if (node.kind === "module" && node.address.startsWith("module."))
|
|
84
|
+
return true;
|
|
85
|
+
return node.expansion !== undefined && node.instancesFrom !== "state";
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Walk from `seeds` (already contracted) and return every node reached with its
|
|
89
|
+
* shortest depth, seeds excluded. `sameStack` refuses `crossStack` edges.
|
|
90
|
+
*/
|
|
91
|
+
export function walkFrom(index, seeds, direction, opts = {}) {
|
|
92
|
+
const start = new Set(seeds);
|
|
93
|
+
const reached = new Map();
|
|
94
|
+
const stepsAlong = (edges, far) => (edges ?? []).filter((e) => !(opts.sameStack && e.crossStack)).map((e) => ({ far: e[far], hops: [] }));
|
|
95
|
+
walkBreadthFirst(start, {
|
|
96
|
+
steps: (id) => {
|
|
97
|
+
if (isOutputAddress(id) && !start.has(id))
|
|
98
|
+
return [];
|
|
99
|
+
const steps = [];
|
|
100
|
+
if (direction !== "out")
|
|
101
|
+
steps.push(...stepsAlong(index.adj.in.get(id), "from"));
|
|
102
|
+
if (direction !== "in")
|
|
103
|
+
steps.push(...stepsAlong(index.adj.out.get(id), "to"));
|
|
104
|
+
return steps;
|
|
105
|
+
},
|
|
106
|
+
arrive: ({ id, depth }) => {
|
|
107
|
+
if (!start.has(id) && !reached.has(id))
|
|
108
|
+
reached.set(id, depth);
|
|
109
|
+
return false;
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
return reached;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Everything reachable from `address` (#2325). Direction `in` (the default)
|
|
116
|
+
* walks dependents: what a change to `address` reaches, its blast radius.
|
|
117
|
+
* Direction `out` walks dependencies: what `address` needs.
|
|
118
|
+
*
|
|
119
|
+
* Throws when `address` is not a node of the graph.
|
|
120
|
+
*/
|
|
121
|
+
export function reach(graph, address, opts = {}) {
|
|
122
|
+
const index = carveIndex(graph);
|
|
123
|
+
if (!index.nodes.has(address))
|
|
124
|
+
throw new Error(`reach: ${address} is not a resource or module in this graph`);
|
|
125
|
+
const start = index.rep(address);
|
|
126
|
+
const direction = opts.direction ?? "in";
|
|
127
|
+
const reached = walkFrom(index, [start], direction);
|
|
128
|
+
const sorted = [...reached.keys()].sort(cmp);
|
|
129
|
+
const resources = sorted.filter((a) => !isOutputAddress(a));
|
|
130
|
+
let crossStack = [];
|
|
131
|
+
if (index.crossStack) {
|
|
132
|
+
const inStack = walkFrom(index, [start], direction, { sameStack: true });
|
|
133
|
+
crossStack = resources.filter((a) => !inStack.has(a));
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
address: start,
|
|
137
|
+
resources,
|
|
138
|
+
outputs: sorted.filter(isOutputAddress),
|
|
139
|
+
depth: Math.max(0, ...reached.values()),
|
|
140
|
+
crossStack,
|
|
141
|
+
hidden: resources.filter((a) => hidesContents(index.nodes.get(a))),
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/** Code-point order, as `buildGraph` sorts: locale-independent. */
|
|
145
|
+
export function cmp(a, b) {
|
|
146
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
147
|
+
}
|
|
148
|
+
/** The instances `addresses` stand for, or `"unknown"` when one of them hides its contents. */
|
|
149
|
+
export function weigh(index, addresses) {
|
|
150
|
+
let total = 0;
|
|
151
|
+
for (const address of addresses) {
|
|
152
|
+
const node = index.nodes.get(address);
|
|
153
|
+
if (hidesContents(node))
|
|
154
|
+
return "unknown";
|
|
155
|
+
total += node.instances;
|
|
156
|
+
}
|
|
157
|
+
return total;
|
|
158
|
+
}
|
|
159
|
+
/** The {@link BlastRadius} of `address`: its {@link reach} through dependents, counted. */
|
|
160
|
+
export function blastRadius(graph, address) {
|
|
161
|
+
const index = carveIndex(graph);
|
|
162
|
+
const r = reach(graph, address);
|
|
163
|
+
return {
|
|
164
|
+
resources: weigh(index, r.resources),
|
|
165
|
+
outputs: r.outputs.length,
|
|
166
|
+
depth: r.depth,
|
|
167
|
+
...(index.crossStack ? { crossStack: weigh(index, r.crossStack) } : {}),
|
|
168
|
+
...(r.hidden.length ? { hiddenBy: r.hidden } : {}),
|
|
169
|
+
};
|
|
170
|
+
}
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
* scorer. Everything else — the six penalty terms, the clamp, the bands — is
|
|
30
30
|
* shared verbatim.
|
|
31
31
|
*/
|
|
32
|
+
import { type BlastRadius } from "./reach.js";
|
|
32
33
|
import { type TierInfo } from "./tier-map.js";
|
|
33
34
|
import type { TfGraph, TfNode } from "./types.js";
|
|
34
35
|
export type PeelabilityBand = "clean leaf" | "carvable w/ edits" | "leave in Terraform";
|
|
@@ -90,6 +91,12 @@ export interface Peelability {
|
|
|
90
91
|
notes?: string[];
|
|
91
92
|
/** The source units folded into this node (#1056). */
|
|
92
93
|
members?: CarveUnitMember[];
|
|
94
|
+
/**
|
|
95
|
+
* How far a change to this node reaches through its dependents (#2326). Its
|
|
96
|
+
* own axis: it never feeds `score`, so `100 + sum(breakdown.penalties)`
|
|
97
|
+
* still reproduces the score.
|
|
98
|
+
*/
|
|
99
|
+
radius?: BlastRadius;
|
|
93
100
|
}
|
|
94
101
|
/**
|
|
95
102
|
* Source-specific scoring input for one node, layered on the shared model.
|
|
@@ -117,11 +124,18 @@ export interface ScoreOptions {
|
|
|
117
124
|
*/
|
|
118
125
|
tierOf?: (type: string) => TierInfo | null;
|
|
119
126
|
signalsFor?: (node: TfNode) => ScoreSignals;
|
|
127
|
+
/**
|
|
128
|
+
* Compute each node's blast radius (#2326). Default true; a caller that only
|
|
129
|
+
* wants the score (`boundaryReport`) turns it off rather than walk the graph
|
|
130
|
+
* once per node for a field it drops.
|
|
131
|
+
*/
|
|
132
|
+
radius?: boolean;
|
|
120
133
|
}
|
|
121
134
|
export declare function bandFor(score: number): PeelabilityBand;
|
|
122
135
|
/**
|
|
123
136
|
* Score every carvable node in the estate, ranked most-peelable first. Folded
|
|
124
137
|
* sub-resources are omitted (they carve with their parent, not on their own).
|
|
138
|
+
* Each carries its blast radius (#2326) beside the score, not in it.
|
|
125
139
|
*/
|
|
126
140
|
export declare function scoreEstate(graph: TfGraph, opts?: ScoreOptions): Peelability[];
|
|
127
141
|
//# sourceMappingURL=score.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"score.d.ts","sourceRoot":"","sources":["../../src/terraform/score.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;
|
|
1
|
+
{"version":3,"file":"score.d.ts","sourceRoot":"","sources":["../../src/terraform/score.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAIH,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EAAU,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEvD,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,mBAAmB,GAAG,oBAAoB,CAAC;AAExF,MAAM,WAAW,oBAAoB;IACnC,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,SAAS,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;KACxB,CAAC;CACH;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,EAAE,EAAE,MAAM,CAAC;IACX,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,eAAe,CAAC;IACtB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,oBAAoB,CAAC;IAChC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,sDAAsD;IACtD,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B;;;;OAIG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,YAAY,CAAC;IAC5C;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAUD,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAItD;AAmFD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,GAAE,YAAiB,GAAG,WAAW,EAAE,CAWlF"}
|
package/dist/terraform/score.js
CHANGED
|
@@ -29,8 +29,10 @@
|
|
|
29
29
|
* scorer. Everything else — the six penalty terms, the clamp, the bands — is
|
|
30
30
|
* shared verbatim.
|
|
31
31
|
*/
|
|
32
|
-
import {
|
|
33
|
-
import {
|
|
32
|
+
import { adjacencyOf } from "../graph-walk.js";
|
|
33
|
+
import { computeFolds } from "./folds.js";
|
|
34
|
+
import { blastRadius } from "./reach.js";
|
|
35
|
+
import { resolveTier } from "./tier-map.js";
|
|
34
36
|
const clamp = (n) => Math.max(0, Math.min(100, n));
|
|
35
37
|
/**
|
|
36
38
|
* `-12 * 0` is `-0`, and JSON has no notation for it — a report written to a
|
|
@@ -46,38 +48,13 @@ export function bandFor(score) {
|
|
|
46
48
|
}
|
|
47
49
|
/** Module tier: a module maps to a chant composite — reshaping, so tier 2 by default. */
|
|
48
50
|
const MODULE_TIER = 2;
|
|
49
|
-
|
|
50
|
-
* Build the set of addresses that fold into a parent present in the estate, plus
|
|
51
|
-
* the reverse lookup (parent → its folded children), so a parent can discount
|
|
52
|
-
* inbound edges coming from its own folded sub-resources.
|
|
53
|
-
*/
|
|
54
|
-
function computeFolds(graph) {
|
|
55
|
-
const byAddress = new Map(graph.nodes.map((n) => [n.address, n]));
|
|
56
|
-
const folded = new Set();
|
|
57
|
-
const childrenOf = new Map();
|
|
58
|
-
for (const node of graph.nodes) {
|
|
59
|
-
if (node.kind !== "resource" || !node.type)
|
|
60
|
-
continue;
|
|
61
|
-
const parentType = foldParentOf(node.type);
|
|
62
|
-
if (!parentType)
|
|
63
|
-
continue;
|
|
64
|
-
const parentAddress = `${parentType}.${node.name}`;
|
|
65
|
-
if (!byAddress.has(parentAddress))
|
|
66
|
-
continue; // sub-resource without its parent → score it on its own
|
|
67
|
-
folded.add(node.address);
|
|
68
|
-
if (!childrenOf.has(parentAddress))
|
|
69
|
-
childrenOf.set(parentAddress, new Set());
|
|
70
|
-
childrenOf.get(parentAddress).add(node.address);
|
|
71
|
-
}
|
|
72
|
-
return { folded, childrenOf };
|
|
73
|
-
}
|
|
74
|
-
function scoreNode(node, graph, foldedChildren, opts) {
|
|
51
|
+
function scoreNode(node, adj, foldedChildren, opts) {
|
|
75
52
|
// Inbound excludes edges from this node's own folded sub-resources, and
|
|
76
53
|
// counts output blocks separately — they cost less to bridge (#1638).
|
|
77
|
-
const inboundAll =
|
|
54
|
+
const inboundAll = (adj.in.get(node.address) ?? []).filter((e) => !foldedChildren.has(e.from));
|
|
78
55
|
const inbound = inboundAll.filter((e) => e.fromKind !== "output").length;
|
|
79
56
|
const outputs = inboundAll.length - inbound;
|
|
80
|
-
const outbound =
|
|
57
|
+
const outbound = (adj.out.get(node.address) ?? []).length;
|
|
81
58
|
const signals = opts.signalsFor?.(node) ?? {};
|
|
82
59
|
const extra = { ...(signals.penalties ?? {}) };
|
|
83
60
|
const trimmings = {
|
|
@@ -141,11 +118,17 @@ function scoreNode(node, graph, foldedChildren, opts) {
|
|
|
141
118
|
/**
|
|
142
119
|
* Score every carvable node in the estate, ranked most-peelable first. Folded
|
|
143
120
|
* sub-resources are omitted (they carve with their parent, not on their own).
|
|
121
|
+
* Each carries its blast radius (#2326) beside the score, not in it.
|
|
144
122
|
*/
|
|
145
123
|
export function scoreEstate(graph, opts = {}) {
|
|
146
124
|
const { folded, childrenOf } = computeFolds(graph);
|
|
125
|
+
// One edge index for the whole pass: a per-node edge filter is O(E) each, O(V·E) in all (#4391).
|
|
126
|
+
const adj = adjacencyOf(graph.edges);
|
|
147
127
|
return graph.nodes
|
|
148
128
|
.filter((n) => !folded.has(n.address))
|
|
149
|
-
.map((n) =>
|
|
129
|
+
.map((n) => {
|
|
130
|
+
const scored = scoreNode(n, adj, childrenOf.get(n.address) ?? new Set(), opts);
|
|
131
|
+
return opts.radius === false ? scored : { ...scored, radius: blastRadius(graph, n.address) };
|
|
132
|
+
})
|
|
150
133
|
.sort((a, b) => b.score - a.score || (a.address < b.address ? -1 : a.address > b.address ? 1 : 0));
|
|
151
134
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/terraform/state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAevC,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAU1F;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAW9E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/terraform/state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAevC,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAU1F;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAW9E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAQrF"}
|
package/dist/terraform/state.js
CHANGED
|
@@ -60,8 +60,10 @@ export function readStateInstanceCounts(statePath) {
|
|
|
60
60
|
export function applyStateCounts(graph, counts) {
|
|
61
61
|
for (const node of graph.nodes) {
|
|
62
62
|
const n = counts.get(node.address);
|
|
63
|
-
if (n
|
|
64
|
-
|
|
63
|
+
if (n === undefined)
|
|
64
|
+
continue;
|
|
65
|
+
node.instances = Math.max(1, n);
|
|
66
|
+
node.instancesFrom = "state";
|
|
65
67
|
}
|
|
66
68
|
return graph;
|
|
67
69
|
}
|
|
@@ -27,6 +27,14 @@ export interface TfNode {
|
|
|
27
27
|
instances: number;
|
|
28
28
|
/** `count`, `for_each`, a `data` source, or an unresolved interpolation is present. */
|
|
29
29
|
hasDynamic: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* The block's own expansion meta-argument, when it has one (#2325). Unlike
|
|
32
|
+
* `hasDynamic`, which a `data` read also sets, this says the node stands for
|
|
33
|
+
* an unknown number of instances until state resolves it.
|
|
34
|
+
*/
|
|
35
|
+
expansion?: "count" | "for_each";
|
|
36
|
+
/** `"state"` once `applyStateCounts` read this node's instance count from a `.tfstate` (#2325). */
|
|
37
|
+
instancesFrom?: "state";
|
|
30
38
|
/**
|
|
31
39
|
* The resource's physical name, when it is a plain literal in the HCL (e.g.
|
|
32
40
|
* `bucket = "myapp-assets-prod"`). Used to build the live-import selector on
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/terraform/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,+EAA+E;AAC/E,MAAM,WAAW,MAAM;IACrB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC5B,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,uFAAuF;IACvF,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,8DAA8D;IAC9D,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB;;;;;OAKG;IACH,GAAG,EAAE,MAAM,EAAE,CAAC;IACd;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACjD,8FAA8F;IAC9F,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACnC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/terraform/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,+EAA+E;AAC/E,MAAM,WAAW,MAAM;IACrB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC5B,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,uFAAuF;IACvF,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACjC,mGAAmG;IACnG,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,8DAA8D;IAC9D,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB;;;;;OAKG;IACH,GAAG,EAAE,MAAM,EAAE,CAAC;IACd;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACjD,8FAA8F;IAC9F,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACnC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB"}
|
package/dist/wave-blocked.d.ts
CHANGED
|
@@ -66,7 +66,8 @@ export declare function writeWaveOutcomeFile(dir: string, wave: number, part: {
|
|
|
66
66
|
* The outcome of each member of the waves before `wave`, as their jobs wrote
|
|
67
67
|
* them under `dirs`, and the earliest such wave that holds every later
|
|
68
68
|
* member, if any. For a member more than one job wrote (a re-run, or a split
|
|
69
|
-
* wave's deciding job and the share that applied it), the newest
|
|
69
|
+
* wave's deciding job and the share that applied it), the newest, and on a
|
|
70
|
+
* tie the share's rather than the deciding job's `decided`. A file
|
|
70
71
|
* that does not parse, or is of another version, is skipped.
|
|
71
72
|
*/
|
|
72
73
|
export declare function earlierWaveOutcomes(dirs: readonly string[], wave: number): {
|
|
@@ -76,4 +77,12 @@ export declare function earlierWaveOutcomes(dirs: readonly string[], wave: numbe
|
|
|
76
77
|
}>;
|
|
77
78
|
holdsAll?: number;
|
|
78
79
|
};
|
|
80
|
+
/**
|
|
81
|
+
* The newest outcome file named `name` under `dirs` (#4322), as
|
|
82
|
+
* {@link waveOutcomeFileName} names one job's: a split wave's share job
|
|
83
|
+
* reads its deciding job's, `outcome-wave-<k>.json`, to learn which runs that
|
|
84
|
+
* job decided and which it blocked. Undefined when there is none, or none
|
|
85
|
+
* that parses at this version.
|
|
86
|
+
*/
|
|
87
|
+
export declare function readWaveOutcomeFile(dirs: readonly string[], name: string): WaveOutcomeFile | undefined;
|
|
79
88
|
//# sourceMappingURL=wave-blocked.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wave-blocked.d.ts","sourceRoot":"","sources":["../src/wave-blocked.ts"],"names":[],"mappings":"AAgDA,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;AAElI,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,gBAAgB,CAAC;IACzB,gGAAgG;IAChG,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,oBAAoB,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC3C,qEAAqE;IACrE,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAID,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAE7E;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAChD,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,EAC5B,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAChD,QAAQ,CAAC,EAAE,MAAM,GAChB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBrB;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,EACrC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAChD,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAC/C;IAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAgBnE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,OAAO,CAUrF;AAID,gIAAgI;AAChI,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAIzE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,MAAM,GAAG,SAAS,CAUpF;AAED,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAIvG;AAED,0FAA0F;AAC1F,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAC1C,EAAE,SAA2B,EAC7B,QAAQ,UAAQ,GACf,MAAM,CAWR;AA6BD
|
|
1
|
+
{"version":3,"file":"wave-blocked.d.ts","sourceRoot":"","sources":["../src/wave-blocked.ts"],"names":[],"mappings":"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"}
|