@intentius/chant 0.124.52 → 0.124.54
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/audit/discover.d.ts.map +1 -1
- package/dist/audit/discover.js +3 -1
- package/dist/behaviour.d.ts +1 -1
- package/dist/behaviour.d.ts.map +1 -1
- package/dist/capabilities/templates.d.ts +65 -0
- package/dist/capabilities/templates.d.ts.map +1 -0
- package/dist/capabilities/templates.js +193 -0
- package/dist/capabilities/templates.json +145 -0
- package/dist/change-set-graph.d.ts +35 -3
- package/dist/change-set-graph.d.ts.map +1 -1
- package/dist/change-set-graph.js +60 -9
- package/dist/change-set.d.ts +65 -7
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +23 -12
- package/dist/ci-identity.d.ts +7 -2
- package/dist/ci-identity.d.ts.map +1 -1
- package/dist/ci-identity.js +4 -1
- package/dist/cli/commands/import-index.d.ts +52 -0
- package/dist/cli/commands/import-index.d.ts.map +1 -0
- package/dist/cli/commands/import-index.js +226 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +4 -2
- package/dist/cli/handlers/components.d.ts.map +1 -1
- package/dist/cli/handlers/components.js +11 -2
- package/dist/cli/handlers/fan-out.d.ts.map +1 -1
- package/dist/cli/handlers/fan-out.js +16 -3
- package/dist/cli/handlers/graph.d.ts.map +1 -1
- package/dist/cli/handlers/graph.js +22 -4
- package/dist/cli/handlers/index-cloud.d.ts +14 -0
- package/dist/cli/handlers/index-cloud.d.ts.map +1 -0
- package/dist/cli/handlers/index-cloud.js +22 -0
- package/dist/cli/handlers/index-diff.d.ts +18 -0
- package/dist/cli/handlers/index-diff.d.ts.map +1 -0
- package/dist/cli/handlers/index-diff.js +142 -0
- package/dist/cli/handlers/lifecycle-drift.d.ts +25 -0
- package/dist/cli/handlers/lifecycle-drift.d.ts.map +1 -0
- package/dist/cli/handlers/lifecycle-drift.js +64 -0
- package/dist/cli/handlers/lifecycle.d.ts.map +1 -1
- package/dist/cli/handlers/lifecycle.js +188 -28
- package/dist/cli/handlers/misc.d.ts +9 -0
- package/dist/cli/handlers/misc.d.ts.map +1 -1
- package/dist/cli/handlers/misc.js +77 -0
- package/dist/cli/handlers/pr.d.ts.map +1 -1
- package/dist/cli/handlers/pr.js +15 -2
- package/dist/cli/handlers/promote.d.ts.map +1 -1
- package/dist/cli/handlers/promote.js +89 -15
- package/dist/cli/handlers/query.d.ts.map +1 -1
- package/dist/cli/handlers/query.js +28 -4
- package/dist/cli/handlers/scenario.d.ts.map +1 -1
- package/dist/cli/handlers/scenario.js +8 -7
- package/dist/cli/handlers/search.d.ts +34 -4
- package/dist/cli/handlers/search.d.ts.map +1 -1
- package/dist/cli/handlers/search.js +216 -36
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +55 -1
- package/dist/cli/mcp/lifecycle-tools.d.ts.map +1 -1
- package/dist/cli/mcp/lifecycle-tools.js +3 -2
- package/dist/cli/mcp/resource-handlers.d.ts.map +1 -1
- package/dist/cli/mcp/resource-handlers.js +4 -3
- package/dist/cli/mcp/workspace-tools.js +1 -1
- package/dist/cli/parse-args.d.ts.map +1 -1
- package/dist/cli/parse-args.js +55 -2
- package/dist/cli/registry.d.ts +19 -1
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/cloud-lister/aws.d.ts +35 -0
- package/dist/cloud-lister/aws.d.ts.map +1 -0
- package/dist/cloud-lister/aws.js +203 -0
- package/dist/cloud-lister/azure.d.ts +34 -0
- package/dist/cloud-lister/azure.d.ts.map +1 -0
- package/dist/cloud-lister/azure.js +129 -0
- package/dist/cloud-lister/common.d.ts +40 -0
- package/dist/cloud-lister/common.d.ts.map +1 -0
- package/dist/cloud-lister/common.js +83 -0
- package/dist/cloud-lister/credentials.d.ts +50 -0
- package/dist/cloud-lister/credentials.d.ts.map +1 -0
- package/dist/cloud-lister/credentials.js +86 -0
- package/dist/cloud-lister/fakes.d.ts +27 -0
- package/dist/cloud-lister/fakes.d.ts.map +1 -0
- package/dist/cloud-lister/fakes.js +50 -0
- package/dist/cloud-lister/gcp.d.ts +42 -0
- package/dist/cloud-lister/gcp.d.ts.map +1 -0
- package/dist/cloud-lister/gcp.js +143 -0
- package/dist/cloud-lister/guard.d.ts +49 -0
- package/dist/cloud-lister/guard.d.ts.map +1 -0
- package/dist/cloud-lister/guard.js +103 -0
- package/dist/cloud-lister/ids.d.ts +23 -0
- package/dist/cloud-lister/ids.d.ts.map +1 -0
- package/dist/cloud-lister/ids.js +42 -0
- package/dist/cloud-lister/index.d.ts +67 -0
- package/dist/cloud-lister/index.d.ts.map +1 -0
- package/dist/cloud-lister/index.js +102 -0
- package/dist/cloud-lister/kubernetes.d.ts +64 -0
- package/dist/cloud-lister/kubernetes.d.ts.map +1 -0
- package/dist/cloud-lister/kubernetes.js +276 -0
- package/dist/cloud-lister/markers.d.ts +31 -0
- package/dist/cloud-lister/markers.d.ts.map +1 -0
- package/dist/cloud-lister/markers.js +73 -0
- package/dist/cloud-lister/mask.d.ts +31 -0
- package/dist/cloud-lister/mask.d.ts.map +1 -0
- package/dist/cloud-lister/mask.js +74 -0
- package/dist/cloud-lister/sigv4.d.ts +29 -0
- package/dist/cloud-lister/sigv4.d.ts.map +1 -0
- package/dist/cloud-lister/sigv4.js +54 -0
- package/dist/cloud-lister/transport.d.ts +55 -0
- package/dist/cloud-lister/transport.d.ts.map +1 -0
- package/dist/cloud-lister/transport.js +86 -0
- package/dist/cloud-lister/types.d.ts +121 -0
- package/dist/cloud-lister/types.d.ts.map +1 -0
- package/dist/cloud-lister/types.js +24 -0
- package/dist/components/capability-plugin-loader.d.ts.map +1 -1
- package/dist/components/capability-plugin-loader.js +6 -0
- package/dist/components/capability-plugin.d.ts +9 -0
- package/dist/components/capability-plugin.d.ts.map +1 -1
- package/dist/components/capability.d.ts +215 -0
- package/dist/components/capability.d.ts.map +1 -1
- package/dist/components/cli-support.d.ts +21 -0
- package/dist/components/cli-support.d.ts.map +1 -1
- package/dist/components/cli-support.js +58 -14
- package/dist/components/declared-reads.d.ts +38 -0
- package/dist/components/declared-reads.d.ts.map +1 -0
- package/dist/components/declared-reads.js +131 -0
- package/dist/components/deploy-units.d.ts.map +1 -1
- package/dist/components/deploy-units.js +4 -0
- package/dist/components/driver.d.ts +34 -1
- package/dist/components/driver.d.ts.map +1 -1
- package/dist/components/driver.js +66 -3
- package/dist/components/fan-out-run.d.ts +23 -1
- package/dist/components/fan-out-run.d.ts.map +1 -1
- package/dist/components/fan-out-run.js +82 -14
- package/dist/components/fan-out-support.d.ts +6 -0
- package/dist/components/fan-out-support.d.ts.map +1 -1
- package/dist/components/fan-out-support.js +4 -1
- package/dist/components/fan-out.d.ts +28 -0
- package/dist/components/fan-out.d.ts.map +1 -1
- package/dist/components/groups.d.ts +229 -0
- package/dist/components/groups.d.ts.map +1 -0
- package/dist/components/groups.js +760 -0
- package/dist/components/index.d.ts +6 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +4 -0
- package/dist/components/plan-shape-conformance.d.ts +48 -0
- package/dist/components/plan-shape-conformance.d.ts.map +1 -0
- package/dist/components/plan-shape-conformance.js +122 -0
- package/dist/components/pr-run.d.ts +41 -4
- package/dist/components/pr-run.d.ts.map +1 -1
- package/dist/components/pr-run.js +209 -39
- package/dist/components/promote-rounds.d.ts +9 -0
- package/dist/components/promote-rounds.d.ts.map +1 -1
- package/dist/components/promote-rounds.js +23 -2
- package/dist/components/promote.d.ts +17 -0
- package/dist/components/promote.d.ts.map +1 -1
- package/dist/components/promote.js +36 -6
- package/dist/components/release-gate.d.ts +23 -1
- package/dist/components/release-gate.d.ts.map +1 -1
- package/dist/components/release-gate.js +97 -33
- package/dist/components/run-groups.d.ts +58 -0
- package/dist/components/run-groups.d.ts.map +1 -0
- package/dist/components/run-groups.js +78 -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 +6 -1
- package/dist/components/verbs/index.d.ts +1 -0
- package/dist/components/verbs/index.d.ts.map +1 -1
- package/dist/components/verbs/index.js +1 -0
- package/dist/components/verbs/member-outputs.d.ts +187 -0
- package/dist/components/verbs/member-outputs.d.ts.map +1 -0
- package/dist/components/verbs/member-outputs.js +218 -0
- package/dist/config.d.ts +60 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +27 -0
- package/dist/deep-observation.d.ts +1 -13
- package/dist/deep-observation.d.ts.map +1 -1
- package/dist/deep-observation.js +5 -22
- package/dist/drift-record.d.ts +542 -0
- package/dist/drift-record.d.ts.map +1 -0
- package/dist/drift-record.js +886 -0
- package/dist/engine-facts.d.ts +144 -0
- package/dist/engine-facts.d.ts.map +1 -0
- package/dist/engine-facts.js +14 -0
- package/dist/graph-ir.d.ts +153 -2
- package/dist/graph-ir.d.ts.map +1 -1
- package/dist/graph-ir.js +224 -6
- package/dist/graph-refs.d.ts +145 -0
- package/dist/graph-refs.d.ts.map +1 -1
- package/dist/graph-refs.js +305 -0
- package/dist/graph-schema/fixtures/adopt.json +15 -0
- package/dist/graph-schema/fixtures/choudoufu.engine-graph.json +169 -0
- package/dist/graph-schema/fixtures/index.json +68 -0
- package/dist/graph-schema/fixtures/plunge.engine-graph.json +158 -0
- package/dist/graph-schema/fixtures.d.ts +23 -0
- package/dist/graph-schema/fixtures.d.ts.map +1 -0
- package/dist/graph-schema/fixtures.js +246 -0
- package/dist/graph-schema/generate.d.ts +15 -0
- package/dist/graph-schema/generate.d.ts.map +1 -0
- package/dist/graph-schema/generate.js +267 -0
- package/dist/graph-schema/graph.schema.json +1387 -0
- package/dist/health.schema.json +2 -1
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/instance-nodes.d.ts +159 -0
- package/dist/instance-nodes.d.ts.map +1 -0
- package/dist/instance-nodes.js +231 -0
- package/dist/lexicon.d.ts +72 -0
- package/dist/lexicon.d.ts.map +1 -1
- package/dist/lifecycle/adoption-file.d.ts +56 -0
- package/dist/lifecycle/adoption-file.d.ts.map +1 -0
- package/dist/lifecycle/adoption-file.js +123 -0
- package/dist/lifecycle/cloud-index.d.ts +186 -0
- package/dist/lifecycle/cloud-index.d.ts.map +1 -0
- package/dist/lifecycle/cloud-index.js +618 -0
- package/dist/lifecycle/derive-edges.d.ts +59 -0
- package/dist/lifecycle/derive-edges.d.ts.map +1 -0
- package/dist/lifecycle/derive-edges.js +126 -0
- package/dist/lifecycle/git.d.ts +10 -9
- package/dist/lifecycle/git.d.ts.map +1 -1
- package/dist/lifecycle/git.js +7 -1
- package/dist/lifecycle/identity-match.d.ts +133 -0
- package/dist/lifecycle/identity-match.d.ts.map +1 -0
- package/dist/lifecycle/identity-match.js +147 -0
- package/dist/lifecycle/index-diff.d.ts +224 -0
- package/dist/lifecycle/index-diff.d.ts.map +1 -0
- package/dist/lifecycle/index-diff.js +327 -0
- package/dist/lifecycle/index-document.d.ts +130 -0
- package/dist/lifecycle/index-document.d.ts.map +1 -0
- package/dist/lifecycle/index-document.js +189 -0
- package/dist/lifecycle/index-drift.d.ts +121 -0
- package/dist/lifecycle/index-drift.d.ts.map +1 -0
- package/dist/lifecycle/index-drift.js +178 -0
- package/dist/lifecycle/index-import.d.ts +168 -0
- package/dist/lifecycle/index-import.d.ts.map +1 -0
- package/dist/lifecycle/index-import.js +515 -0
- package/dist/lifecycle/index-join.d.ts +129 -0
- package/dist/lifecycle/index-join.d.ts.map +1 -0
- package/dist/lifecycle/index-join.js +248 -0
- package/dist/lifecycle/index.d.ts +4 -0
- package/dist/lifecycle/index.d.ts.map +1 -1
- package/dist/lifecycle/index.js +4 -0
- package/dist/lifecycle/observation-baseline.d.ts +61 -21
- package/dist/lifecycle/observation-baseline.d.ts.map +1 -1
- package/dist/lifecycle/observation-baseline.js +144 -19
- package/dist/lifecycle/observe.d.ts.map +1 -1
- package/dist/lifecycle/observe.js +6 -1
- package/dist/lifecycle/query.d.ts +45 -4
- package/dist/lifecycle/query.d.ts.map +1 -1
- package/dist/lifecycle/query.js +89 -7
- package/dist/lifecycle/replay.d.ts +10 -3
- package/dist/lifecycle/replay.d.ts.map +1 -1
- package/dist/lifecycle/replay.js +10 -6
- package/dist/lifecycle/scenario.d.ts +4 -3
- package/dist/lifecycle/scenario.d.ts.map +1 -1
- package/dist/lifecycle/snapshot-store-fake.d.ts +9 -0
- package/dist/lifecycle/snapshot-store-fake.d.ts.map +1 -0
- package/dist/lifecycle/snapshot-store-fake.js +21 -0
- package/dist/lifecycle/snapshot-store-s3.d.ts +102 -0
- package/dist/lifecycle/snapshot-store-s3.d.ts.map +1 -0
- package/dist/lifecycle/snapshot-store-s3.js +254 -0
- package/dist/lifecycle/snapshot-store.d.ts +170 -0
- package/dist/lifecycle/snapshot-store.d.ts.map +1 -0
- package/dist/lifecycle/snapshot-store.js +832 -0
- package/dist/lifecycle/snapshot.d.ts +11 -0
- package/dist/lifecycle/snapshot.d.ts.map +1 -1
- package/dist/lifecycle/snapshot.js +18 -5
- package/dist/lifecycle/type-listing.d.ts +148 -0
- package/dist/lifecycle/type-listing.d.ts.map +1 -0
- package/dist/lifecycle/type-listing.js +166 -0
- package/dist/lint/component-checks.d.ts +15 -1
- package/dist/lint/component-checks.d.ts.map +1 -1
- package/dist/lint/component-checks.js +1 -0
- package/dist/lint/presets/relaxed.json +2 -1
- package/dist/lint/presets/strict.json +2 -1
- package/dist/lint/rules/__fixtures__/comp/comp008/fail/dns.component.d.ts +4 -0
- package/dist/lint/rules/__fixtures__/comp/comp008/fail/dns.component.d.ts.map +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp008/fail/dns.component.js +13 -0
- package/dist/lint/rules/__fixtures__/comp/comp008/pass/dns.component.d.ts +4 -0
- package/dist/lint/rules/__fixtures__/comp/comp008/pass/dns.component.d.ts.map +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp008/pass/dns.component.js +8 -0
- package/dist/lint/rules/comp/comp008-applies-signal-only-root.d.ts +33 -0
- package/dist/lint/rules/comp/comp008-applies-signal-only-root.d.ts.map +1 -0
- package/dist/lint/rules/comp/comp008-applies-signal-only-root.js +123 -0
- package/dist/lint/rules/comp/index.d.ts +2 -1
- package/dist/lint/rules/comp/index.d.ts.map +1 -1
- package/dist/lint/rules/comp/index.js +4 -1
- package/dist/observation.d.ts +19 -2
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +18 -1
- package/dist/op/activities/activity-contracts.d.ts +1 -1
- package/dist/op/activities/activity-contracts.js +1 -1
- package/dist/op/activities/change-set.d.ts +6 -4
- package/dist/op/activities/change-set.d.ts.map +1 -1
- package/dist/op/activities/change-set.js +4 -2
- package/dist/op/activity-failure.d.ts +27 -0
- package/dist/op/activity-failure.d.ts.map +1 -1
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/index.d.ts +2 -1
- package/dist/op/index.d.ts.map +1 -1
- package/dist/op/index.js +1 -1
- package/dist/op/local-executor.d.ts +5 -1
- package/dist/op/local-executor.d.ts.map +1 -1
- package/dist/op/local-executor.js +22 -8
- package/dist/pr-loop.d.ts +56 -1
- package/dist/pr-loop.d.ts.map +1 -1
- package/dist/pr-loop.js +51 -1
- package/dist/pulumi-urn.d.ts +101 -0
- package/dist/pulumi-urn.d.ts.map +1 -0
- package/dist/pulumi-urn.js +131 -0
- package/dist/release-floors.d.ts +23 -0
- package/dist/release-floors.d.ts.map +1 -0
- package/dist/release-floors.js +22 -0
- package/dist/sensitive-key.d.ts +23 -0
- package/dist/sensitive-key.d.ts.map +1 -0
- package/dist/sensitive-key.js +31 -0
- package/dist/wave-runtime.mjs +234 -234
- package/dist/workspace/adoption-report.d.ts +53 -0
- package/dist/workspace/adoption-report.d.ts.map +1 -0
- package/dist/workspace/adoption-report.js +76 -0
- package/dist/workspace/capabilities-contract.d.ts +7 -0
- package/dist/workspace/capabilities-contract.d.ts.map +1 -1
- package/dist/workspace/capabilities-contract.js +2 -1
- package/dist/workspace/capabilities.schema.json +98 -0
- package/dist/workspace/change-set.schema.json +42 -3
- package/dist/workspace/ci-cloud-identity.d.ts +13 -1
- package/dist/workspace/ci-cloud-identity.d.ts.map +1 -1
- package/dist/workspace/ci-cloud-identity.js +30 -1
- package/dist/workspace/compose-graph.d.ts +10 -1
- package/dist/workspace/compose-graph.d.ts.map +1 -1
- package/dist/workspace/compose-graph.js +6 -1
- package/dist/workspace/conformance/index.d.ts +1 -1
- package/dist/workspace/conformance/index.d.ts.map +1 -1
- package/dist/workspace/conformance/index.js +6 -1
- package/dist/workspace/drift-cli.d.ts +81 -0
- package/dist/workspace/drift-cli.d.ts.map +1 -0
- package/dist/workspace/drift-cli.js +317 -0
- package/dist/workspace/drift.schema.json +672 -0
- package/dist/workspace/graph-cli.d.ts +2 -0
- package/dist/workspace/graph-cli.d.ts.map +1 -1
- package/dist/workspace/graph-cli.js +3 -0
- package/dist/workspace/graph.schema.json +72 -0
- package/dist/workspace/init.d.ts +5 -1
- package/dist/workspace/init.d.ts.map +1 -1
- package/dist/workspace/init.js +55 -9
- package/dist/workspace/ledger.schema.json +1 -1
- package/dist/workspace/nested-graph.d.ts.map +1 -1
- package/dist/workspace/nested-graph.js +2 -0
- package/dist/workspace/pr-report.schema.json +51 -2
- package/dist/workspace/promote-waves.d.ts +112 -0
- package/dist/workspace/promote-waves.d.ts.map +1 -0
- package/dist/workspace/promote-waves.js +290 -0
- package/dist/workspace/promote.d.ts +84 -2
- package/dist/workspace/promote.d.ts.map +1 -1
- package/dist/workspace/promote.js +347 -61
- package/dist/workspace/reason-codes.d.ts +12 -0
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/reason-codes.js +14 -0
- package/dist/workspace/search-contract.d.ts +3 -3
- package/dist/workspace/search-contract.d.ts.map +1 -1
- package/dist/workspace/search-contract.js +2 -0
- package/dist/workspace/search.schema.json +103 -5
- package/package.json +14 -1
- package/src/__fixtures__/drift-record/README.md +58 -0
- package/src/__fixtures__/drift-record/choudoufu-cone.ndjson +4 -0
- package/src/__fixtures__/drift-record/choudoufu-resource.ndjson +3 -0
- package/src/__fixtures__/drift-record/component-status-ledger.json +65 -0
- package/src/__fixtures__/drift-record/component-status.json +91 -0
- package/src/__fixtures__/drift-record/deep-diff.json +259 -0
- package/src/__fixtures__/drift-record/lifecycle-diff-live.json +825 -0
- package/src/__fixtures__/drift-record/live-diff.json +125 -0
- package/src/audit/discover.e2e.test.ts +14 -0
- package/src/audit/discover.ts +3 -1
- package/src/behaviour.ts +1 -1
- package/src/capabilities/templates.json +145 -0
- package/src/capabilities/templates.test.ts +212 -0
- package/src/capabilities/templates.ts +204 -0
- package/src/change-set-bundle.test.ts +83 -0
- package/src/change-set-graph.ts +80 -9
- package/src/change-set.test.ts +24 -0
- package/src/change-set.ts +77 -14
- package/src/ci-identity-targets.test.ts +23 -0
- package/src/ci-identity.ts +10 -4
- package/src/cli/commands/import-index.test.ts +117 -0
- package/src/cli/commands/import-index.ts +265 -0
- package/src/cli/commands/lint.ts +4 -2
- package/src/cli/handlers/components.test.ts +9 -0
- package/src/cli/handlers/components.ts +12 -2
- package/src/cli/handlers/fan-out.ts +17 -3
- package/src/cli/handlers/graph.test.ts +42 -0
- package/src/cli/handlers/graph.ts +26 -4
- package/src/cli/handlers/index-cloud.ts +32 -0
- package/src/cli/handlers/index-diff.test.ts +68 -0
- package/src/cli/handlers/index-diff.ts +146 -0
- package/src/cli/handlers/ledger-root-member.test.ts +161 -0
- package/src/cli/handlers/lifecycle-drift.ts +68 -0
- package/src/cli/handlers/lifecycle.test.ts +33 -11
- package/src/cli/handlers/lifecycle.ts +205 -30
- package/src/cli/handlers/misc.ts +73 -0
- package/src/cli/handlers/pr-waves-blocked.test.ts +37 -2
- package/src/cli/handlers/pr.ts +14 -2
- package/src/cli/handlers/promote.test.ts +64 -0
- package/src/cli/handlers/promote.ts +81 -6
- package/src/cli/handlers/query.ts +27 -4
- package/src/cli/handlers/run-declared-reads-cli.test.ts +187 -0
- package/src/cli/handlers/run-groups-cli.test.ts +229 -0
- package/src/cli/handlers/scenario.test.ts +13 -0
- package/src/cli/handlers/scenario.ts +8 -7
- package/src/cli/handlers/search-index.test.ts +255 -0
- package/src/cli/handlers/search-json.test.ts +1 -1
- package/src/cli/handlers/search-ownership.test.ts +194 -0
- package/src/cli/handlers/search.ts +271 -38
- package/src/cli/main.test.ts +7 -0
- package/src/cli/main.ts +56 -1
- package/src/cli/mcp/lifecycle-tools.ts +3 -2
- package/src/cli/mcp/resource-handlers.ts +4 -3
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/cli/parse-args.ts +40 -2
- package/src/cli/registry.ts +19 -1
- package/src/cloud-lister/aws.test.ts +202 -0
- package/src/cloud-lister/aws.ts +226 -0
- package/src/cloud-lister/azure.test.ts +132 -0
- package/src/cloud-lister/azure.ts +142 -0
- package/src/cloud-lister/common.ts +115 -0
- package/src/cloud-lister/credentials.ts +110 -0
- package/src/cloud-lister/fakes.ts +66 -0
- package/src/cloud-lister/gcp.test.ts +121 -0
- package/src/cloud-lister/gcp.ts +159 -0
- package/src/cloud-lister/guard.test.ts +198 -0
- package/src/cloud-lister/guard.ts +111 -0
- package/src/cloud-lister/ids.ts +54 -0
- package/src/cloud-lister/index.ts +134 -0
- package/src/cloud-lister/kubernetes.test.ts +160 -0
- package/src/cloud-lister/kubernetes.ts +284 -0
- package/src/cloud-lister/markers.ts +74 -0
- package/src/cloud-lister/mask.ts +77 -0
- package/src/cloud-lister/shape.test.ts +81 -0
- package/src/cloud-lister/sigv4.ts +70 -0
- package/src/cloud-lister/transport.ts +118 -0
- package/src/cloud-lister/types.ts +135 -0
- package/src/components/capability-plugin-loader.ts +4 -0
- package/src/components/capability-plugin.ts +10 -0
- package/src/components/capability.ts +229 -0
- package/src/components/cli-support.ts +70 -14
- package/src/components/declared-reads.test.ts +103 -0
- package/src/components/declared-reads.ts +134 -0
- package/src/components/deploy-units.ts +4 -0
- package/src/components/driver.ts +89 -4
- package/src/components/fan-out-run.ts +95 -15
- package/src/components/fan-out-support.ts +10 -1
- package/src/components/fan-out.ts +30 -0
- package/src/components/groups.test.ts +320 -0
- package/src/components/groups.ts +880 -0
- package/src/components/index.ts +42 -0
- package/src/components/plan-shape-conformance.ts +130 -0
- package/src/components/pr-env-run-bundle.test.ts +2 -0
- package/src/components/pr-run.test.ts +516 -3
- package/src/components/pr-run.ts +231 -41
- package/src/components/promote-rounds.ts +25 -2
- package/src/components/promote.ts +55 -5
- package/src/components/registry.test.ts +1 -1
- package/src/components/release-gate.ts +115 -30
- package/src/components/release-groups.test.ts +362 -0
- package/src/components/run-groups.ts +113 -0
- package/src/components/starter-plugin.ts +6 -0
- package/src/components/verbs/index.ts +1 -0
- package/src/components/verbs/member-outputs.test.ts +205 -0
- package/src/components/verbs/member-outputs.ts +308 -0
- package/src/config.ts +44 -0
- package/src/deep-observation.ts +5 -23
- package/src/drift-record.test.ts +596 -0
- package/src/drift-record.ts +1206 -0
- package/src/engine-facts.guard.test.ts +111 -0
- package/src/engine-facts.test.ts +178 -0
- package/src/engine-facts.ts +154 -0
- package/src/gated-waves-bundle.test.ts +2 -0
- package/src/graph-ir-live.test.ts +92 -0
- package/src/graph-ir.ts +317 -7
- package/src/graph-refs.ts +416 -0
- package/src/graph-schema/fixtures/adopt.json +15 -0
- package/src/graph-schema/fixtures/choudoufu.engine-graph.json +169 -0
- package/src/graph-schema/fixtures/index.json +68 -0
- package/src/graph-schema/fixtures/plunge.engine-graph.json +158 -0
- package/src/graph-schema/fixtures.ts +267 -0
- package/src/graph-schema/generate.ts +263 -0
- package/src/graph-schema/graph-schema.test.ts +153 -0
- package/src/graph-schema/graph.schema.json +1387 -0
- package/src/health.schema.json +2 -1
- package/src/identity.ts +2 -0
- package/src/index.ts +2 -0
- package/src/instance-nodes.ts +288 -0
- package/src/lexicon.ts +76 -0
- package/src/lifecycle/__fixtures__/index-diff/20261026T120000Z-aaaaaaaaaaaa.json +149 -0
- package/src/lifecycle/__fixtures__/index-diff/20261026T130000Z-bbbbbbbbbbbb.json +127 -0
- package/src/lifecycle/adoption-file.test.ts +100 -0
- package/src/lifecycle/adoption-file.ts +154 -0
- package/src/lifecycle/cloud-index.test.ts +517 -0
- package/src/lifecycle/cloud-index.ts +736 -0
- package/src/lifecycle/derive-edges.test.ts +193 -0
- package/src/lifecycle/derive-edges.ts +182 -0
- package/src/lifecycle/git.ts +10 -4
- package/src/lifecycle/identity-match.test.ts +308 -0
- package/src/lifecycle/identity-match.ts +257 -0
- package/src/lifecycle/index-diff.test.ts +198 -0
- package/src/lifecycle/index-diff.ts +476 -0
- package/src/lifecycle/index-document.test.ts +64 -0
- package/src/lifecycle/index-document.ts +299 -0
- package/src/lifecycle/index-drift.test.ts +191 -0
- package/src/lifecycle/index-drift.ts +304 -0
- package/src/lifecycle/index-import.test.ts +255 -0
- package/src/lifecycle/index-import.ts +634 -0
- package/src/lifecycle/index-join.test.ts +250 -0
- package/src/lifecycle/index-join.ts +304 -0
- package/src/lifecycle/index-store-load-bearing.test.ts +187 -0
- package/src/lifecycle/index.ts +4 -0
- package/src/lifecycle/member-ledger.test.ts +25 -7
- package/src/lifecycle/observation-baseline.test.ts +72 -1
- package/src/lifecycle/observation-baseline.ts +190 -27
- package/src/lifecycle/observe.ts +6 -1
- package/src/lifecycle/query.test.ts +69 -1
- package/src/lifecycle/query.ts +103 -10
- package/src/lifecycle/replay.test.ts +9 -5
- package/src/lifecycle/replay.ts +9 -5
- package/src/lifecycle/scenario.ts +4 -3
- package/src/lifecycle/snapshot-store-fake.ts +29 -0
- package/src/lifecycle/snapshot-store-s3.ts +316 -0
- package/src/lifecycle/snapshot-store.test.ts +385 -0
- package/src/lifecycle/snapshot-store.ts +981 -0
- package/src/lifecycle/snapshot.test.ts +13 -0
- package/src/lifecycle/snapshot.ts +23 -6
- package/src/lifecycle/type-listing.test.ts +166 -0
- package/src/lifecycle/type-listing.ts +309 -0
- package/src/lint/component-checks.ts +17 -1
- package/src/lint/config.test.ts +3 -0
- package/src/lint/presets/relaxed.json +2 -1
- package/src/lint/presets/strict.json +2 -1
- package/src/lint/rules/__fixtures__/comp/comp008/fail/dns.component.ts +15 -0
- package/src/lint/rules/__fixtures__/comp/comp008/pass/dns.component.ts +10 -0
- package/src/lint/rules/comp/comp.test.ts +2 -1
- package/src/lint/rules/comp/comp008-applies-signal-only-root.ts +121 -0
- package/src/lint/rules/comp/comp008.test.ts +77 -0
- package/src/lint/rules/comp/index.ts +4 -1
- package/src/observation-edges.test.ts +33 -0
- package/src/observation.ts +36 -1
- package/src/op/activities/activity-contracts.ts +1 -1
- package/src/op/activities/change-set.ts +8 -5
- package/src/op/activity-failure.ts +36 -0
- package/src/op/index.ts +2 -1
- package/src/op/local-executor.test.ts +80 -0
- package/src/op/local-executor.ts +27 -9
- package/src/pr-loop-bundle.test.ts +5 -2
- package/src/pr-loop.test.ts +43 -0
- package/src/pr-loop.ts +111 -2
- package/src/pulumi-urn.ts +151 -0
- package/src/release-floors.ts +22 -0
- package/src/sensitive-key.ts +34 -0
- package/src/workspace/adoption-report.test.ts +61 -0
- package/src/workspace/adoption-report.ts +103 -0
- package/src/workspace/capabilities-contract.test.ts +4 -0
- package/src/workspace/capabilities-contract.ts +9 -1
- package/src/workspace/capabilities.schema.json +98 -0
- package/src/workspace/change-set.schema.json +42 -3
- package/src/workspace/ci-cloud-identity.ts +31 -1
- package/src/workspace/compose-graph.test.ts +12 -0
- package/src/workspace/compose-graph.ts +12 -1
- package/src/workspace/conformance/conformance.e2e.test.ts +2 -1
- package/src/workspace/conformance/index.ts +6 -1
- package/src/workspace/drift-cli.test.ts +65 -0
- package/src/workspace/drift-cli.ts +365 -0
- package/src/workspace/drift.schema.json +672 -0
- package/src/workspace/graph-cli.ts +5 -0
- package/src/workspace/graph.schema.json +72 -0
- package/src/workspace/init.test.ts +38 -1
- package/src/workspace/init.ts +50 -8
- package/src/workspace/intent-gaps.test.ts +18 -2
- package/src/workspace/ledger.schema.json +1 -1
- package/src/workspace/nested-graph.ts +1 -0
- package/src/workspace/pr-report.schema.json +51 -2
- package/src/workspace/promote-waves.test.ts +296 -0
- package/src/workspace/promote-waves.ts +340 -0
- package/src/workspace/promote.test.ts +158 -4
- package/src/workspace/promote.ts +398 -57
- package/src/workspace/reason-codes.test.ts +4 -1
- package/src/workspace/reason-codes.ts +14 -0
- package/src/workspace/search-contract.ts +2 -0
- package/src/workspace/search.schema.json +103 -5
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `member-outputs`: another workspace member's outputs, read through the
|
|
3
|
+
* engine that member runs on, so a chant member's parameters can be planned
|
|
4
|
+
* against them (#4455, design record choudoufu#2258 lane T6).
|
|
5
|
+
*
|
|
6
|
+
* In `behold/example-three-cloud`, `dns` (a chant member) reads each cloud's
|
|
7
|
+
* endpoint as a parameter of the same name as the output the cloud's member
|
|
8
|
+
* publishes. When the Azure site is a choudoufu estate, `azureEndpoint` is a
|
|
9
|
+
* Terraform root output, and when the AWS site is a Pulumi stack it is a
|
|
10
|
+
* stack output. Neither is a chant component, so there is nothing for a
|
|
11
|
+
* `stackOutput()` reference to read. This verb is that something: a
|
|
12
|
+
* component in the consumer's project whose one step names the upstream
|
|
13
|
+
* member, and whose capability answers the two questions the components
|
|
14
|
+
* machinery already asks of an upstream:
|
|
15
|
+
*
|
|
16
|
+
* - `outputs` (applied): what the member exposes now. A pull request that
|
|
17
|
+
* does not touch the member plans the consumer against these
|
|
18
|
+
* (`deployedOutputs`, #4104).
|
|
19
|
+
* - `plan` (planned): what the member will expose once its own plan applies,
|
|
20
|
+
* with the outputs known only after apply named (`PlannedOutputs`, #3999).
|
|
21
|
+
* A pull request that touches the member plans the consumer against the
|
|
22
|
+
* known ones. A reference to an unknown one is unresolved, so the
|
|
23
|
+
* consumer's step is planned with `DeployContext.unresolvedInputs` naming
|
|
24
|
+
* the member, the pull request's report lists `<member>.<output>` under the
|
|
25
|
+
* consumer's `unknownInputs`, and the apply holds the consumer back until
|
|
26
|
+
* the member applied, then plans it again (`pr-run.ts`, "Planning again
|
|
27
|
+
* once an upstream applied"). That is the hold chant already puts on a
|
|
28
|
+
* root waiting on another root's unknown output; nothing here adds a
|
|
29
|
+
* second one.
|
|
30
|
+
*
|
|
31
|
+
* The consumer writes it as two components:
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* export const azure = memberOutputsComponent("azure");
|
|
35
|
+
* export const records: Component = {
|
|
36
|
+
* name: "records",
|
|
37
|
+
* dependsOn: ["azure"],
|
|
38
|
+
* deploy: [phase("Apply", [{ kind: "cfn-deploy", template: "dist/dns.json",
|
|
39
|
+
* inputs: { azureEndpoint: stackOutput("azure", "azureEndpoint") } }])],
|
|
40
|
+
* };
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* ## Engines: the seam
|
|
44
|
+
*
|
|
45
|
+
* The member is looked up in the workspace declaration (`chant.workspace.json`)
|
|
46
|
+
* by name, and its `kind` picks the {@link EngineOutputSource} that reads it.
|
|
47
|
+
* Sources are not capabilities: each lexicon that drives an engine
|
|
48
|
+
* contributes one through `CapabilityPlugin.engineOutputSources()`, the way
|
|
49
|
+
* the cloud lexicons contribute registry logins to `publish-image`, and the
|
|
50
|
+
* registry binds them into this one verb when it is built
|
|
51
|
+
* (`registerCapabilityPlugins`). So two engines never register the same
|
|
52
|
+
* kind, and a consumer's step does not change when the member moves between
|
|
53
|
+
* engines.
|
|
54
|
+
*
|
|
55
|
+
* - `choudoufu` (the terraform lexicon, `choudoufuOutputSource`): applied
|
|
56
|
+
* values from `choudoufu output -json` in the member's directory, which in
|
|
57
|
+
* live mode reads the estate's record store; planned values from
|
|
58
|
+
* `live-plan-set -json` over the member's root, its plan's
|
|
59
|
+
* `planned_values.outputs` with every output whose `output_changes` entry
|
|
60
|
+
* marks any part `after_unknown` named unknown (`terraformPlannedOutputs`).
|
|
61
|
+
* - `pulumi` (the pulumi lexicon, `pulumiOutputSource`): applied values
|
|
62
|
+
* from `pulumi stack output --json --show-secrets=false`, or from the
|
|
63
|
+
* member's checked-in `stack-export.json` when chant must not run pulumi
|
|
64
|
+
* (`CHANT_PULUMI_APPLIED_OUTPUTS=export`); planned values from `pulumi
|
|
65
|
+
* preview --json`, the stack step's outputs, where an output holding
|
|
66
|
+
* Pulumi's unknown sentinel is unknown. Secret outputs are left out of
|
|
67
|
+
* both. A member on plunge runs the same commands under `plunge`.
|
|
68
|
+
* Nothing in this module or in the consumer changes for it.
|
|
69
|
+
*
|
|
70
|
+
* ## Run reads, it never applies
|
|
71
|
+
*
|
|
72
|
+
* The member applies through its own pipeline. `run` checks that the
|
|
73
|
+
* member's plan has nothing left to apply (`changes` false) and answers its
|
|
74
|
+
* applied outputs; a member with changes still to apply refuses the run
|
|
75
|
+
* with {@link MemberOutputsPendingError}, so the consumer is blocked behind
|
|
76
|
+
* it and never applies against values from before the member's change. A
|
|
77
|
+
* workspace orders the member's own run before the consumer's (members that
|
|
78
|
+
* link to a producer run after it, `chant workspace run`).
|
|
79
|
+
*
|
|
80
|
+
* ## Which changes reach the member
|
|
81
|
+
*
|
|
82
|
+
* The component is a deploy unit named after the member (`DEPLOY_UNIT_RULES`),
|
|
83
|
+
* so a change signal that names the member as a changed unit puts it in the
|
|
84
|
+
* change. The terraform lexicon names it when the consumer's
|
|
85
|
+
* `terraform.roots` has an entry of that name whose files changed;
|
|
86
|
+
* `--from-affected` can name it too.
|
|
87
|
+
*/
|
|
88
|
+
import type { Capability, DeployContext, PlannedOutputs } from "../capability.js";
|
|
89
|
+
import type { Component } from "../component.js";
|
|
90
|
+
/** The step kind. */
|
|
91
|
+
export declare const MEMBER_OUTPUTS_KIND = "member-outputs";
|
|
92
|
+
/** The `member-outputs` step's input. */
|
|
93
|
+
export interface MemberOutputsInput {
|
|
94
|
+
/** The upstream member's name in the workspace declaration. Also the component's name, by convention. */
|
|
95
|
+
member: string;
|
|
96
|
+
/**
|
|
97
|
+
* Where the declaration search starts. Default: the current directory,
|
|
98
|
+
* which is the consumer's project root under `chant run`.
|
|
99
|
+
*/
|
|
100
|
+
cwd?: string;
|
|
101
|
+
}
|
|
102
|
+
/** What `run` returns: the member's applied outputs, under `outputs`, where the driver collects a stack's outputs from. */
|
|
103
|
+
export interface MemberOutputsOutput {
|
|
104
|
+
member: string;
|
|
105
|
+
outputs: Record<string, unknown>;
|
|
106
|
+
}
|
|
107
|
+
/** The upstream member a source reads, as the workspace declares it. */
|
|
108
|
+
export interface EngineMemberRef {
|
|
109
|
+
/** The member's name. */
|
|
110
|
+
member: string;
|
|
111
|
+
/** Its declared kind, which picked the source: `choudoufu`, `pulumi`. */
|
|
112
|
+
kind: string;
|
|
113
|
+
/** Its directory, absolute. */
|
|
114
|
+
dir: string;
|
|
115
|
+
/** The workspace root, absolute. A source that must run from above the member's directory runs from here. */
|
|
116
|
+
workspaceRoot: string;
|
|
117
|
+
}
|
|
118
|
+
/** What a source's plan of the member says about its outputs. */
|
|
119
|
+
export interface EnginePlannedOutputs extends PlannedOutputs {
|
|
120
|
+
/**
|
|
121
|
+
* A digest of the member's plan, the engine's own or chant's over it. The
|
|
122
|
+
* consumer's approval binds it, so a plan of the member that moves after
|
|
123
|
+
* review moves the consumer's digest too.
|
|
124
|
+
*/
|
|
125
|
+
planDigest: string;
|
|
126
|
+
/** Whether the member's plan has anything to apply. `run` refuses while it does. */
|
|
127
|
+
changes: boolean;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Reads one engine's member outputs (#4455). One per engine, contributed by
|
|
131
|
+
* the lexicon that drives it through `CapabilityPlugin.engineOutputSources()`.
|
|
132
|
+
*/
|
|
133
|
+
export interface EngineOutputSource {
|
|
134
|
+
/** The member kinds this source reads, as declared in `chant.workspace.json`. */
|
|
135
|
+
readonly kinds: readonly string[];
|
|
136
|
+
/** The member's outputs as applied now, by name. */
|
|
137
|
+
applied(ctx: DeployContext, ref: EngineMemberRef): Promise<Record<string, unknown>>;
|
|
138
|
+
/** The member's outputs once its current plan applies, the ones known only after apply named. */
|
|
139
|
+
planned(ctx: DeployContext, ref: EngineMemberRef): Promise<EnginePlannedOutputs>;
|
|
140
|
+
}
|
|
141
|
+
/** Finds a member in the workspace above `cwd`: its kind and directory. */
|
|
142
|
+
export type MemberLookup = (cwd: string, member: string) => Promise<EngineMemberRef>;
|
|
143
|
+
/** No source for the member's kind is loaded. */
|
|
144
|
+
export declare class EngineOutputSourceMissingError extends Error {
|
|
145
|
+
readonly member: string;
|
|
146
|
+
readonly kind: string;
|
|
147
|
+
readonly available: readonly string[];
|
|
148
|
+
constructor(member: string, kind: string, available: readonly string[]);
|
|
149
|
+
}
|
|
150
|
+
/** The member's plan has changes its own pipeline has not applied. Nothing was read. */
|
|
151
|
+
export declare class MemberOutputsPendingError extends Error {
|
|
152
|
+
readonly member: string;
|
|
153
|
+
constructor(member: string);
|
|
154
|
+
}
|
|
155
|
+
/** The member a {@link MemberOutputsInput} reads plans as, in the consumer's change set. */
|
|
156
|
+
export declare const memberOutputsMemberName: (member: string) => string;
|
|
157
|
+
/**
|
|
158
|
+
* The member's name in the declaration above `cwd`, with its kind and
|
|
159
|
+
* directory. Reads the working tree. Imported lazily: the verb set is
|
|
160
|
+
* loaded where the workspace reader's dependencies may not be.
|
|
161
|
+
*/
|
|
162
|
+
export declare const workspaceMemberLookup: MemberLookup;
|
|
163
|
+
/** Implemented by a capability that wants the plugins' engine output sources injected when a registry is built. */
|
|
164
|
+
export interface EngineOutputSourceConsumer {
|
|
165
|
+
withEngineOutputSources(sources: readonly EngineOutputSource[]): Capability<never, unknown>;
|
|
166
|
+
}
|
|
167
|
+
export declare function isEngineOutputSourceConsumer(value: unknown): value is EngineOutputSourceConsumer;
|
|
168
|
+
export interface MemberOutputsCapabilityOptions {
|
|
169
|
+
/** The engines' sources. Bound by the registry from the loaded plugins; empty until then. */
|
|
170
|
+
sources?: readonly EngineOutputSource[];
|
|
171
|
+
/** How a member is found. Default: {@link workspaceMemberLookup}. */
|
|
172
|
+
lookup?: MemberLookup;
|
|
173
|
+
}
|
|
174
|
+
/** `member-outputs` over the given sources. */
|
|
175
|
+
export declare function memberOutputsCapability(options?: MemberOutputsCapabilityOptions): Capability<MemberOutputsInput, MemberOutputsOutput> & EngineOutputSourceConsumer;
|
|
176
|
+
/** The starter set's `member-outputs`, with no sources until a registry binds the loaded plugins' ones. */
|
|
177
|
+
export declare const memberOutputsStarterCapability: Capability<MemberOutputsInput, MemberOutputsOutput> & EngineOutputSourceConsumer;
|
|
178
|
+
/**
|
|
179
|
+
* A component in the consumer's project that stands for workspace member
|
|
180
|
+
* `member` (#4455): one step reading its outputs. Named after the member, so
|
|
181
|
+
* `stackOutput(member, "<output>")` reads them and `dependsOn: [member]`
|
|
182
|
+
* orders the consumer after it.
|
|
183
|
+
*/
|
|
184
|
+
export declare function memberOutputsComponent(member: string, options?: {
|
|
185
|
+
cwd?: string;
|
|
186
|
+
}): Component;
|
|
187
|
+
//# sourceMappingURL=member-outputs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"member-outputs.d.ts","sourceRoot":"","sources":["../../../src/components/verbs/member-outputs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `member-outputs`: another workspace member's outputs, read through the
|
|
3
|
+
* engine that member runs on, so a chant member's parameters can be planned
|
|
4
|
+
* against them (#4455, design record choudoufu#2258 lane T6).
|
|
5
|
+
*
|
|
6
|
+
* In `behold/example-three-cloud`, `dns` (a chant member) reads each cloud's
|
|
7
|
+
* endpoint as a parameter of the same name as the output the cloud's member
|
|
8
|
+
* publishes. When the Azure site is a choudoufu estate, `azureEndpoint` is a
|
|
9
|
+
* Terraform root output, and when the AWS site is a Pulumi stack it is a
|
|
10
|
+
* stack output. Neither is a chant component, so there is nothing for a
|
|
11
|
+
* `stackOutput()` reference to read. This verb is that something: a
|
|
12
|
+
* component in the consumer's project whose one step names the upstream
|
|
13
|
+
* member, and whose capability answers the two questions the components
|
|
14
|
+
* machinery already asks of an upstream:
|
|
15
|
+
*
|
|
16
|
+
* - `outputs` (applied): what the member exposes now. A pull request that
|
|
17
|
+
* does not touch the member plans the consumer against these
|
|
18
|
+
* (`deployedOutputs`, #4104).
|
|
19
|
+
* - `plan` (planned): what the member will expose once its own plan applies,
|
|
20
|
+
* with the outputs known only after apply named (`PlannedOutputs`, #3999).
|
|
21
|
+
* A pull request that touches the member plans the consumer against the
|
|
22
|
+
* known ones. A reference to an unknown one is unresolved, so the
|
|
23
|
+
* consumer's step is planned with `DeployContext.unresolvedInputs` naming
|
|
24
|
+
* the member, the pull request's report lists `<member>.<output>` under the
|
|
25
|
+
* consumer's `unknownInputs`, and the apply holds the consumer back until
|
|
26
|
+
* the member applied, then plans it again (`pr-run.ts`, "Planning again
|
|
27
|
+
* once an upstream applied"). That is the hold chant already puts on a
|
|
28
|
+
* root waiting on another root's unknown output; nothing here adds a
|
|
29
|
+
* second one.
|
|
30
|
+
*
|
|
31
|
+
* The consumer writes it as two components:
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* export const azure = memberOutputsComponent("azure");
|
|
35
|
+
* export const records: Component = {
|
|
36
|
+
* name: "records",
|
|
37
|
+
* dependsOn: ["azure"],
|
|
38
|
+
* deploy: [phase("Apply", [{ kind: "cfn-deploy", template: "dist/dns.json",
|
|
39
|
+
* inputs: { azureEndpoint: stackOutput("azure", "azureEndpoint") } }])],
|
|
40
|
+
* };
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* ## Engines: the seam
|
|
44
|
+
*
|
|
45
|
+
* The member is looked up in the workspace declaration (`chant.workspace.json`)
|
|
46
|
+
* by name, and its `kind` picks the {@link EngineOutputSource} that reads it.
|
|
47
|
+
* Sources are not capabilities: each lexicon that drives an engine
|
|
48
|
+
* contributes one through `CapabilityPlugin.engineOutputSources()`, the way
|
|
49
|
+
* the cloud lexicons contribute registry logins to `publish-image`, and the
|
|
50
|
+
* registry binds them into this one verb when it is built
|
|
51
|
+
* (`registerCapabilityPlugins`). So two engines never register the same
|
|
52
|
+
* kind, and a consumer's step does not change when the member moves between
|
|
53
|
+
* engines.
|
|
54
|
+
*
|
|
55
|
+
* - `choudoufu` (the terraform lexicon, `choudoufuOutputSource`): applied
|
|
56
|
+
* values from `choudoufu output -json` in the member's directory, which in
|
|
57
|
+
* live mode reads the estate's record store; planned values from
|
|
58
|
+
* `live-plan-set -json` over the member's root, its plan's
|
|
59
|
+
* `planned_values.outputs` with every output whose `output_changes` entry
|
|
60
|
+
* marks any part `after_unknown` named unknown (`terraformPlannedOutputs`).
|
|
61
|
+
* - `pulumi` (the pulumi lexicon, `pulumiOutputSource`): applied values
|
|
62
|
+
* from `pulumi stack output --json --show-secrets=false`, or from the
|
|
63
|
+
* member's checked-in `stack-export.json` when chant must not run pulumi
|
|
64
|
+
* (`CHANT_PULUMI_APPLIED_OUTPUTS=export`); planned values from `pulumi
|
|
65
|
+
* preview --json`, the stack step's outputs, where an output holding
|
|
66
|
+
* Pulumi's unknown sentinel is unknown. Secret outputs are left out of
|
|
67
|
+
* both. A member on plunge runs the same commands under `plunge`.
|
|
68
|
+
* Nothing in this module or in the consumer changes for it.
|
|
69
|
+
*
|
|
70
|
+
* ## Run reads, it never applies
|
|
71
|
+
*
|
|
72
|
+
* The member applies through its own pipeline. `run` checks that the
|
|
73
|
+
* member's plan has nothing left to apply (`changes` false) and answers its
|
|
74
|
+
* applied outputs; a member with changes still to apply refuses the run
|
|
75
|
+
* with {@link MemberOutputsPendingError}, so the consumer is blocked behind
|
|
76
|
+
* it and never applies against values from before the member's change. A
|
|
77
|
+
* workspace orders the member's own run before the consumer's (members that
|
|
78
|
+
* link to a producer run after it, `chant workspace run`).
|
|
79
|
+
*
|
|
80
|
+
* ## Which changes reach the member
|
|
81
|
+
*
|
|
82
|
+
* The component is a deploy unit named after the member (`DEPLOY_UNIT_RULES`),
|
|
83
|
+
* so a change signal that names the member as a changed unit puts it in the
|
|
84
|
+
* change. The terraform lexicon names it when the consumer's
|
|
85
|
+
* `terraform.roots` has an entry of that name whose files changed;
|
|
86
|
+
* `--from-affected` can name it too.
|
|
87
|
+
*/
|
|
88
|
+
import { computePlanDigest } from "../../lifecycle/plan-digest.js";
|
|
89
|
+
/** The step kind. */
|
|
90
|
+
export const MEMBER_OUTPUTS_KIND = "member-outputs";
|
|
91
|
+
/** No source for the member's kind is loaded. */
|
|
92
|
+
export class EngineOutputSourceMissingError extends Error {
|
|
93
|
+
constructor(member, kind, available) {
|
|
94
|
+
super(`${MEMBER_OUTPUTS_KIND}: member "${member}" is kind ${kind}, and no loaded lexicon reads that engine's outputs` +
|
|
95
|
+
(available.length > 0 ? ` (loaded: ${available.join(", ")})` : "") +
|
|
96
|
+
`. ${kind === "choudoufu" ? 'Add "terraform" to the project\'s lexicons.' : kind === "pulumi" ? 'Add "pulumi" to the project\'s lexicons.' : "Load the lexicon that drives it."}`);
|
|
97
|
+
this.member = member;
|
|
98
|
+
this.kind = kind;
|
|
99
|
+
this.available = available;
|
|
100
|
+
this.name = "EngineOutputSourceMissingError";
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/** The member's plan has changes its own pipeline has not applied. Nothing was read. */
|
|
104
|
+
export class MemberOutputsPendingError extends Error {
|
|
105
|
+
constructor(member) {
|
|
106
|
+
super(`${MEMBER_OUTPUTS_KIND}: member "${member}" has changes its own pipeline has not applied yet, ` +
|
|
107
|
+
`so its outputs are still the ones from before them. Apply ${member} first; whatever reads its outputs runs after it.`);
|
|
108
|
+
this.member = member;
|
|
109
|
+
this.name = "MemberOutputsPendingError";
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/** The member a {@link MemberOutputsInput} reads plans as, in the consumer's change set. */
|
|
113
|
+
export const memberOutputsMemberName = (member) => `${member}#outputs`;
|
|
114
|
+
/**
|
|
115
|
+
* The member's name in the declaration above `cwd`, with its kind and
|
|
116
|
+
* directory. Reads the working tree. Imported lazily: the verb set is
|
|
117
|
+
* loaded where the workspace reader's dependencies may not be.
|
|
118
|
+
*/
|
|
119
|
+
export const workspaceMemberLookup = async (cwd, member) => {
|
|
120
|
+
const { locateWorkspace } = await import("../../workspace/which-chant.js");
|
|
121
|
+
const { readDeclaration } = await import("../../workspace/declaration.js");
|
|
122
|
+
const { join } = await import("node:path");
|
|
123
|
+
const located = locateWorkspace(cwd);
|
|
124
|
+
const declaration = readDeclaration(located.tree);
|
|
125
|
+
const found = declaration.members.find((m) => m.name === member);
|
|
126
|
+
if (!found) {
|
|
127
|
+
const names = declaration.members.map((m) => m.name).sort();
|
|
128
|
+
throw new Error(`${MEMBER_OUTPUTS_KIND}: the workspace at ${located.rootOnDisk} declares no member "${member}" (members: ${names.join(", ")})`);
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
member: found.name,
|
|
132
|
+
kind: found.kind,
|
|
133
|
+
dir: found.dir === "." ? located.rootOnDisk : join(located.rootOnDisk, ...found.dir.split("/")),
|
|
134
|
+
workspaceRoot: located.rootOnDisk,
|
|
135
|
+
};
|
|
136
|
+
};
|
|
137
|
+
function requireMember(input) {
|
|
138
|
+
if (typeof input?.member !== "string" || input.member === "") {
|
|
139
|
+
throw new Error(`${MEMBER_OUTPUTS_KIND}: "member" is required and names a member of the workspace`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
export function isEngineOutputSourceConsumer(value) {
|
|
143
|
+
return typeof value === "object" && value !== null && typeof value.withEngineOutputSources === "function";
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* The member's part of the consumer's change set: no entries, since the
|
|
147
|
+
* member's own pipeline plans and applies its changes, and a hole per output
|
|
148
|
+
* known only after apply, naming the member and the output.
|
|
149
|
+
*/
|
|
150
|
+
function outputsPart(member, planDigest, unknown) {
|
|
151
|
+
const holes = unknown.map((name) => ({
|
|
152
|
+
address: `${member}.${name}`,
|
|
153
|
+
type: "output",
|
|
154
|
+
reason: `${member}.${name} is known only after ${member} applies; what reads it is planned again then`,
|
|
155
|
+
}));
|
|
156
|
+
return {
|
|
157
|
+
member: { member: memberOutputsMemberName(member), lexicon: "chant", planner: "chant", status: "planned", planDigest, holes },
|
|
158
|
+
entries: [],
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/** `member-outputs` over the given sources. */
|
|
162
|
+
export function memberOutputsCapability(options = {}) {
|
|
163
|
+
const sources = options.sources ?? [];
|
|
164
|
+
const lookup = options.lookup ?? workspaceMemberLookup;
|
|
165
|
+
async function resolve(input) {
|
|
166
|
+
requireMember(input);
|
|
167
|
+
const ref = await lookup(input.cwd ?? process.cwd(), input.member);
|
|
168
|
+
const source = sources.find((s) => s.kinds.includes(ref.kind));
|
|
169
|
+
if (!source)
|
|
170
|
+
throw new EngineOutputSourceMissingError(ref.member, ref.kind, [...new Set(sources.flatMap((s) => s.kinds))].sort());
|
|
171
|
+
return { ref, source };
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
kind: MEMBER_OUTPUTS_KIND,
|
|
175
|
+
// It reads; the member's own pipeline applies. Nothing to compensate.
|
|
176
|
+
rollbackPolicy: "none-by-design",
|
|
177
|
+
targets: { refuse: "it reads another member's outputs; narrow that member's own plan instead" },
|
|
178
|
+
async plan(ctx, input) {
|
|
179
|
+
const { ref, source } = await resolve(input);
|
|
180
|
+
const planned = await source.planned(ctx, ref);
|
|
181
|
+
const unknown = [...new Set(planned.unknown)].sort();
|
|
182
|
+
const known = Object.fromEntries(Object.entries(planned.known).filter(([name]) => !unknown.includes(name)));
|
|
183
|
+
const member = memberOutputsMemberName(ref.member);
|
|
184
|
+
const planDigest = computePlanDigest(MEMBER_OUTPUTS_KIND, { env: ctx.env, member: ref.member, kind: ref.kind, plan: planned.planDigest, known, unknown });
|
|
185
|
+
return { member, planDigest, changeSet: outputsPart(ref.member, planDigest, unknown), outputs: { known, unknown } };
|
|
186
|
+
},
|
|
187
|
+
async outputs(ctx, input) {
|
|
188
|
+
const { ref, source } = await resolve(input);
|
|
189
|
+
return source.applied(ctx, ref);
|
|
190
|
+
},
|
|
191
|
+
async run(ctx, input) {
|
|
192
|
+
const { ref, source } = await resolve(input);
|
|
193
|
+
const now = await source.planned(ctx, ref);
|
|
194
|
+
if (now.changes)
|
|
195
|
+
throw new MemberOutputsPendingError(ref.member);
|
|
196
|
+
return { member: ref.member, outputs: await source.applied(ctx, ref) };
|
|
197
|
+
},
|
|
198
|
+
withEngineOutputSources(next) {
|
|
199
|
+
return memberOutputsCapability({ ...options, sources: next });
|
|
200
|
+
},
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
/** The starter set's `member-outputs`, with no sources until a registry binds the loaded plugins' ones. */
|
|
204
|
+
export const memberOutputsStarterCapability = memberOutputsCapability();
|
|
205
|
+
/**
|
|
206
|
+
* A component in the consumer's project that stands for workspace member
|
|
207
|
+
* `member` (#4455): one step reading its outputs. Named after the member, so
|
|
208
|
+
* `stackOutput(member, "<output>")` reads them and `dependsOn: [member]`
|
|
209
|
+
* orders the consumer after it.
|
|
210
|
+
*/
|
|
211
|
+
export function memberOutputsComponent(member, options = {}) {
|
|
212
|
+
return {
|
|
213
|
+
name: member,
|
|
214
|
+
archetype: "infra",
|
|
215
|
+
dependsOn: [],
|
|
216
|
+
deploy: [{ phase: "Outputs", steps: [{ kind: MEMBER_OUTPUTS_KIND, member, ...(options.cwd ? { cwd: options.cwd } : {}) }] }],
|
|
217
|
+
};
|
|
218
|
+
}
|
package/dist/config.d.ts
CHANGED
|
@@ -175,6 +175,52 @@ export declare const ChantConfigSchema: z.ZodObject<{
|
|
|
175
175
|
exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
176
176
|
include: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
177
177
|
rootOnly: z.ZodOptional<z.ZodBoolean>;
|
|
178
|
+
snapshots: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
179
|
+
store: z.ZodLiteral<"git-ref">;
|
|
180
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
181
|
+
readOrphanBranch: z.ZodOptional<z.ZodBoolean>;
|
|
182
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
183
|
+
store: z.ZodLiteral<"orphan-branch">;
|
|
184
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
185
|
+
store: z.ZodLiteral<"local">;
|
|
186
|
+
dir: z.ZodOptional<z.ZodString>;
|
|
187
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
188
|
+
bucket: z.ZodString;
|
|
189
|
+
prefix: z.ZodOptional<z.ZodString>;
|
|
190
|
+
region: z.ZodOptional<z.ZodString>;
|
|
191
|
+
endpoint: z.ZodOptional<z.ZodString>;
|
|
192
|
+
forcePathStyle: z.ZodOptional<z.ZodBoolean>;
|
|
193
|
+
credentials: z.ZodOptional<z.ZodObject<{
|
|
194
|
+
accessKeyId: z.ZodString;
|
|
195
|
+
secretAccessKey: z.ZodString;
|
|
196
|
+
sessionToken: z.ZodOptional<z.ZodString>;
|
|
197
|
+
}, z.core.$strict>>;
|
|
198
|
+
store: z.ZodLiteral<"s3">;
|
|
199
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
200
|
+
store: z.ZodLiteral<"none">;
|
|
201
|
+
}, z.core.$strict>], "store">>;
|
|
202
|
+
observationBaseline: z.ZodOptional<z.ZodObject<{
|
|
203
|
+
store: z.ZodEnum<{
|
|
204
|
+
file: "file";
|
|
205
|
+
"git-ref": "git-ref";
|
|
206
|
+
none: "none";
|
|
207
|
+
s3: "s3";
|
|
208
|
+
}>;
|
|
209
|
+
dir: z.ZodOptional<z.ZodString>;
|
|
210
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
211
|
+
s3: z.ZodOptional<z.ZodObject<{
|
|
212
|
+
bucket: z.ZodString;
|
|
213
|
+
prefix: z.ZodOptional<z.ZodString>;
|
|
214
|
+
region: z.ZodOptional<z.ZodString>;
|
|
215
|
+
endpoint: z.ZodOptional<z.ZodString>;
|
|
216
|
+
forcePathStyle: z.ZodOptional<z.ZodBoolean>;
|
|
217
|
+
credentials: z.ZodOptional<z.ZodObject<{
|
|
218
|
+
accessKeyId: z.ZodString;
|
|
219
|
+
secretAccessKey: z.ZodString;
|
|
220
|
+
sessionToken: z.ZodOptional<z.ZodString>;
|
|
221
|
+
}, z.core.$strict>>;
|
|
222
|
+
}, z.core.$strict>>;
|
|
223
|
+
}, z.core.$strict>>;
|
|
178
224
|
}, z.core.$loose>;
|
|
179
225
|
/**
|
|
180
226
|
* Top-level chant project configuration.
|
|
@@ -519,6 +565,20 @@ export interface ChantConfig {
|
|
|
519
565
|
* in a project with no `chant.workspace.json`.
|
|
520
566
|
*/
|
|
521
567
|
rootOnly?: boolean;
|
|
568
|
+
/**
|
|
569
|
+
* Where snapshots and every other index are kept (#4519): `git-ref`
|
|
570
|
+
* (default, `refs/chant/snapshots`, still reading `chant/lifecycle` for
|
|
571
|
+
* snapshots written before), `local` (a directory), `s3` (a bucket under a
|
|
572
|
+
* prefix), `none`, or `orphan-branch` (read-only). `CHANT_SNAPSHOT_STORE`
|
|
573
|
+
* and its companions override it. See `./lifecycle/snapshot-store.ts`.
|
|
574
|
+
*/
|
|
575
|
+
snapshots?: import("./lifecycle/snapshot-store.js").SnapshotStoreConfig;
|
|
576
|
+
/**
|
|
577
|
+
* Where accepted observation deviations are kept (#4519): `file` (default,
|
|
578
|
+
* `.chant/observation-baseline/<env>.json`, committed and reviewed),
|
|
579
|
+
* `git-ref`, `s3` or `none`. See `./lifecycle/observation-baseline.ts`.
|
|
580
|
+
*/
|
|
581
|
+
observationBaseline?: import("./lifecycle/observation-baseline.js").ObservationBaselineStoreConfig;
|
|
522
582
|
}
|
|
523
583
|
/**
|
|
524
584
|
* Resolved project configuration with metadata about how it was loaded.
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,mCAAmC,CAAC;AACzF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGzD,OAAO,EAA8D,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACvH,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAKpG,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,yBAAyB,EACzB,qBAAqB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,YAAY,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAA+D,KAAK,sBAAsB,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,mCAAmC,CAAC;AACzF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGzD,OAAO,EAA8D,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACvH,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAKpG,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,yBAAyB,EACzB,qBAAqB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,YAAY,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAA+D,KAAK,sBAAsB,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAyCpJ,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8Fd,CAAC;AAEjB;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAEhC;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAExC;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB;;;;;;;;;;OAUG;IACH,YAAY,CAAC,EAAE,sBAAsB,EAAE,CAAC;IAExC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,0EAA0E;QAC1E,IAAI,EAAE,MAAM,CAAC;QACb,8EAA8E;QAC9E,GAAG,EAAE,MAAM,CAAC;QACZ;mFAC2E;QAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IAEH,8DAA8D;IAC9D,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;QACzB;;;;;;;WAOG;QACH,MAAM,CAAC,EAAE;YACP,MAAM,EAAE,MAAM,CAAC;YACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SAClC,CAAC;KACH,CAAC;IAEF;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE;QACV,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB,CAAC;IAEF;;;;;OAKG;IACH,SAAS,CAAC,EAAE;QACV,2EAA2E;QAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;QACf;;;;;;;;;WASG;QACH,GAAG,CAAC,EAAE,YAAY,CAAC;QACnB,kEAAkE;QAClE,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IAEF;;OAEG;IACH,KAAK,CAAC,EAAE;QACN;;;;;;;WAOG;QACH,IAAI,CAAC,EAAE,OAAO,CAAC;QAEf;;;;;;;WAOG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IAEF;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAEhC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE;QACR,8KAA8K;QAC9K,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB;;;;WAIG;QACH,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;KAChC,CAAC;IAEF,4DAA4D;IAC5D,GAAG,CAAC,EAAE;QACJ;;;;WAIG;QACH,EAAE,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;IAEF;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE;QACL,+OAA+O;QAC/O,MAAM,CAAC,EAAE,UAAU,CAAC;QACpB,4cAA4c;QAC5c,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IAEF;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,EAAE;QACR,wJAAwJ;QACxJ,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,sRAAsR;QACtR,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,2IAA2I;QAC3I,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,0IAA0I;QAC1I,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,4UAA4U;QAC5U,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IAEF;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE;QACX,kEAAkE;QAClE,YAAY,CAAC,EAAE,QAAQ,CAAC;QACxB,2EAA2E;QAC3E,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,gEAAgE;QAChE,YAAY,CAAC,EAAE,QAAQ,CAAC;QACxB,wEAAwE;QACxE,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,0FAA0F;QAC1F,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,0FAA0F;QAC1F,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,0EAA0E;QAC1E,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,8DAA8D;QAC9D,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,wEAAwE;QACxE,yBAAyB,CAAC,EAAE,OAAO,CAAC;QACpC,+EAA+E;QAC/E,OAAO,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC;QAChD,yKAAyK;QACzK,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;QAC5B,kHAAkH;QAClH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IAEF;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE;QACV,iFAAiF;QACjF,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IAEF;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE;QACR,qFAAqF;QACrF,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IAEF;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,4BAA4B,EAAE,mBAAmB,CAAC;IAErE;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,kCAAkC,EAAE,8BAA8B,CAAC;CACjG;AAED;;GAEG;AACH;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAExF,MAAM,WAAW,cAAc;IAC7B,+BAA+B;IAC/B,MAAM,EAAE,iBAAiB,CAAC;IAE1B,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,iBAAsB,CAAC;AAE1D;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAkB1E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAIrF;AAED,sGAAsG;AACtG,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAQrG;AAED,kFAAkF;AAClF,MAAM,WAAW,cAAc;IAC7B,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAcjG;AAwBD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAY9D;AAsCD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,SAAS,oBAAoB,EAAE,GAAG,SAAS,GACvD,MAAM,GAAG,SAAS,CAiBpB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,WAAW,EACnB,WAAW,CAAC,EAAE,SAAS,oBAAoB,EAAE,GAC5C,eAAe,GAAG,SAAS,CAI7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,SAAS,oBAAoB,EAAE,GAAG,SAAS,GACvD,MAAM,GAAG,SAAS,CAWpB;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAG1F;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAIlF;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAGrF;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,CAE1F;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,uBAAuB;IACtC,gJAAgJ;IAChJ,OAAO,EAAE,OAAO,CAAC;IACjB,qIAAqI;IACrI,GAAG,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACtB,6RAA6R;IAC7R,sBAAsB,EAAE;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW,GAAG,uBAAuB,CAanF;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAiB1E;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAEpF;AAED;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IACnB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM;IAAlD,YAAY,OAAO,EAAE,MAAM,EAAW,GAAG,CAAC,EAAE,MAAM,YAAA,EAEjD;CACF"}
|
package/dist/config.js
CHANGED
|
@@ -12,6 +12,19 @@ import { PublishDeclarationSchema } from "./lifecycle/publish-declaration.js";
|
|
|
12
12
|
// needs only them stays clear of the loader below (#4356 follow-up).
|
|
13
13
|
export { environmentEndpoint, environmentExecutor, environmentName, EXECUTOR_FORGES, environmentNames, isEnvironmentPattern, isOwnershipParamRef, matchesDeclaredEnvironment, matchesEnvironmentPattern, resolveOwnershipStack, } from "./config-environments.js";
|
|
14
14
|
import { EXECUTOR_FORGES, isOwnershipParamRef, resolveOwnershipStack } from "./config-environments.js";
|
|
15
|
+
/** An s3 index store's settings (#4519, ./lifecycle/snapshot-store-s3.ts). */
|
|
16
|
+
const S3StoreSettingsShape = {
|
|
17
|
+
bucket: z.string().min(1),
|
|
18
|
+
prefix: z.string().optional(),
|
|
19
|
+
region: z.string().min(1).optional(),
|
|
20
|
+
endpoint: z.string().url().optional(),
|
|
21
|
+
forcePathStyle: z.boolean().optional(),
|
|
22
|
+
credentials: z.object({
|
|
23
|
+
accessKeyId: z.string().min(1),
|
|
24
|
+
secretAccessKey: z.string().min(1),
|
|
25
|
+
sessionToken: z.string().min(1).optional(),
|
|
26
|
+
}).strict().optional(),
|
|
27
|
+
};
|
|
15
28
|
/**
|
|
16
29
|
* Zod schema for ChantConfig validation.
|
|
17
30
|
*/
|
|
@@ -112,6 +125,20 @@ export const ChantConfigSchema = z.object({
|
|
|
112
125
|
exclude: z.array(z.string().min(1)).optional(),
|
|
113
126
|
include: z.array(z.string().min(1)).optional(),
|
|
114
127
|
rootOnly: z.boolean().optional(),
|
|
128
|
+
// Strict: a misspelt key would send snapshots somewhere nobody looks (#4519).
|
|
129
|
+
snapshots: z.discriminatedUnion("store", [
|
|
130
|
+
z.object({ store: z.literal("git-ref"), ref: z.string().regex(/^refs\/chant\//).optional(), readOrphanBranch: z.boolean().optional() }).strict(),
|
|
131
|
+
z.object({ store: z.literal("orphan-branch") }).strict(),
|
|
132
|
+
z.object({ store: z.literal("local"), dir: z.string().min(1).optional() }).strict(),
|
|
133
|
+
z.object({ store: z.literal("s3"), ...S3StoreSettingsShape }).strict(),
|
|
134
|
+
z.object({ store: z.literal("none") }).strict(),
|
|
135
|
+
]).optional(),
|
|
136
|
+
observationBaseline: z.object({
|
|
137
|
+
store: z.enum(["file", "git-ref", "s3", "none"]),
|
|
138
|
+
dir: z.string().min(1).optional(),
|
|
139
|
+
ref: z.string().regex(/^refs\/chant\//).optional(),
|
|
140
|
+
s3: z.object(S3StoreSettingsShape).strict().optional(),
|
|
141
|
+
}).strict().optional(),
|
|
115
142
|
}).passthrough();
|
|
116
143
|
/**
|
|
117
144
|
* Default configuration when no config file exists.
|
|
@@ -163,19 +163,7 @@ export declare function normalizeDeepObservation(value: DeepObservationResult |
|
|
|
163
163
|
export declare const UNRESOLVED = "<chant:unresolved>";
|
|
164
164
|
/** Value a masked (secret-bearing) property takes. Matches the thin path's convention. */
|
|
165
165
|
export declare const MASKED = "[REDACTED]";
|
|
166
|
-
|
|
167
|
-
* Property-name patterns that mark a value secret-bearing. Deliberately narrow
|
|
168
|
-
* and key-name based: broadening this to e.g. `/key/i` would mask an AWS tag's
|
|
169
|
-
* `Key` field and every `*KeyName` reference, which is how masking turns into
|
|
170
|
-
* its own drift signal.
|
|
171
|
-
*
|
|
172
|
-
* Shared with the thin snapshot path (`./lifecycle/snapshot.ts`), which warns
|
|
173
|
-
* on the same names — one list, so the two paths cannot disagree about what
|
|
174
|
-
* counts as a secret.
|
|
175
|
-
*/
|
|
176
|
-
export declare const SENSITIVE_KEY_PATTERNS: readonly RegExp[];
|
|
177
|
-
/** True when a property name looks secret-bearing (see {@link SENSITIVE_KEY_PATTERNS}). */
|
|
178
|
-
export declare function isSensitiveKey(key: string): boolean;
|
|
166
|
+
export { SENSITIVE_KEY_PATTERNS, isSensitiveKey } from "./sensitive-key.js";
|
|
179
167
|
/** Which tree a hook is being invoked on. */
|
|
180
168
|
export type DeepSide = "declared" | "live";
|
|
181
169
|
/** One node the normalization pass offers to {@link DeepNormalizationHooks.prune}. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deep-observation.d.ts","sourceRoot":"","sources":["../src/deep-observation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"deep-observation.d.ts","sourceRoot":"","sources":["../src/deep-observation.ts"],"names":[],"mappings":"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"}
|
package/dist/deep-observation.js
CHANGED
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
* when nobody declared the property.
|
|
44
44
|
*/
|
|
45
45
|
import { isHeldElsewhere, isNormalizedHeldElsewhere, normalizeHeldElsewhere } from "./held-elsewhere.js";
|
|
46
|
+
import { isSensitiveKey } from "./sensitive-key.js";
|
|
46
47
|
/** True when `value` is the versioned {@link DeepObservationResult} envelope. */
|
|
47
48
|
export function isDeepObservationResult(value) {
|
|
48
49
|
return (typeof value === "object" &&
|
|
@@ -84,28 +85,10 @@ export function normalizeDeepObservation(value) {
|
|
|
84
85
|
export const UNRESOLVED = "<chant:unresolved>";
|
|
85
86
|
/** Value a masked (secret-bearing) property takes. Matches the thin path's convention. */
|
|
86
87
|
export const MASKED = "[REDACTED]";
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
* its own drift signal.
|
|
92
|
-
*
|
|
93
|
-
* Shared with the thin snapshot path (`./lifecycle/snapshot.ts`), which warns
|
|
94
|
-
* on the same names — one list, so the two paths cannot disagree about what
|
|
95
|
-
* counts as a secret.
|
|
96
|
-
*/
|
|
97
|
-
export const SENSITIVE_KEY_PATTERNS = [
|
|
98
|
-
/password/i,
|
|
99
|
-
/secret/i,
|
|
100
|
-
/token/i,
|
|
101
|
-
/private.?key/i,
|
|
102
|
-
/credential/i,
|
|
103
|
-
/connection.?string/i,
|
|
104
|
-
];
|
|
105
|
-
/** True when a property name looks secret-bearing (see {@link SENSITIVE_KEY_PATTERNS}). */
|
|
106
|
-
export function isSensitiveKey(key) {
|
|
107
|
-
return SENSITIVE_KEY_PATTERNS.some((p) => p.test(key));
|
|
108
|
-
}
|
|
88
|
+
// The secret-key list lives in `./sensitive-key.ts` so the drift record
|
|
89
|
+
// (`./drift-record.ts`) can redact with it inside the change-set bundle,
|
|
90
|
+
// which may not import this module's normalization code.
|
|
91
|
+
export { SENSITIVE_KEY_PATTERNS, isSensitiveKey } from "./sensitive-key.js";
|
|
109
92
|
/** True for a value the pass will walk into rather than treat as a leaf. */
|
|
110
93
|
function isPlainObject(value) {
|
|
111
94
|
if (typeof value !== "object" || value === null || Array.isArray(value))
|