@intentius/chant-lexicon-terraform 0.124.52 → 0.124.55
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/README.md +14 -10
- package/dist/__fixtures__/pr-loop/estate.component.d.ts +7 -0
- package/dist/__fixtures__/pr-loop/estate.component.d.ts.map +1 -0
- package/dist/__fixtures__/pr-loop/estate.component.js +7 -0
- package/dist/__fixtures__/report/generate.d.ts +26 -0
- package/dist/__fixtures__/report/generate.d.ts.map +1 -0
- package/dist/__fixtures__/report/generate.js +58 -0
- package/dist/applied-state.d.ts +27 -0
- package/dist/applied-state.d.ts.map +1 -0
- package/dist/applied-state.js +44 -0
- package/dist/backend-config.d.ts +53 -0
- package/dist/backend-config.d.ts.map +1 -0
- package/dist/backend-config.js +136 -0
- package/dist/behaviour/kinds.d.ts.map +1 -1
- package/dist/behaviour/kinds.js +4 -0
- package/dist/behaviour/predict.d.ts.map +1 -1
- package/dist/behaviour/predict.js +6 -2
- package/dist/behaviour/reference-catalog.d.ts +16 -5
- package/dist/behaviour/reference-catalog.d.ts.map +1 -1
- package/dist/behaviour/reference-catalog.js +16 -5
- package/dist/behaviour/request.d.ts.map +1 -1
- package/dist/behaviour/request.js +3 -2
- package/dist/changed-roots.d.ts +6 -4
- package/dist/changed-roots.d.ts.map +1 -1
- package/dist/changed-roots.js +14 -18
- package/dist/ci-setup.d.ts +11 -0
- package/dist/ci-setup.d.ts.map +1 -0
- package/dist/ci-setup.js +41 -0
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +4 -3
- package/dist/components/capability-plugin.d.ts +105 -9
- package/dist/components/capability-plugin.d.ts.map +1 -1
- package/dist/components/capability-plugin.js +357 -36
- package/dist/components/compose-group.d.ts +145 -0
- package/dist/components/compose-group.d.ts.map +1 -0
- package/dist/components/compose-group.js +407 -0
- package/dist/components/placeholder-preview.d.ts +78 -0
- package/dist/components/placeholder-preview.d.ts.map +1 -0
- package/dist/components/placeholder-preview.js +254 -0
- package/dist/components/release-inputs.d.ts +29 -0
- package/dist/components/release-inputs.d.ts.map +1 -0
- package/dist/components/release-inputs.js +57 -0
- package/dist/components/trace-facts.d.ts +16 -0
- package/dist/components/trace-facts.d.ts.map +1 -0
- package/dist/components/trace-facts.js +19 -0
- package/dist/compose/apply-events.d.ts +46 -0
- package/dist/compose/apply-events.d.ts.map +1 -0
- package/dist/compose/apply-events.js +77 -0
- package/dist/compose/estate.d.ts +194 -0
- package/dist/compose/estate.d.ts.map +1 -0
- package/dist/compose/estate.js +363 -0
- package/dist/compose/hcl.d.ts +99 -0
- package/dist/compose/hcl.d.ts.map +1 -0
- package/dist/compose/hcl.js +302 -0
- package/dist/compose/module-address.d.ts +24 -0
- package/dist/compose/module-address.d.ts.map +1 -0
- package/dist/compose/module-address.js +43 -0
- package/dist/compose/root.d.ts +127 -0
- package/dist/compose/root.d.ts.map +1 -0
- package/dist/compose/root.js +586 -0
- package/dist/compose/run.d.ts +183 -0
- package/dist/compose/run.d.ts.map +1 -0
- package/dist/compose/run.js +447 -0
- package/dist/compose/slice.d.ts +102 -0
- package/dist/compose/slice.d.ts.map +1 -0
- package/dist/compose/slice.js +249 -0
- package/dist/compose/state-address.d.ts +28 -0
- package/dist/compose/state-address.d.ts.map +1 -0
- package/dist/compose/state-address.js +154 -0
- package/dist/compose/state-merge.d.ts +52 -0
- package/dist/compose/state-merge.d.ts.map +1 -0
- package/dist/compose/state-merge.js +135 -0
- package/dist/compose.d.ts +179 -0
- package/dist/compose.d.ts.map +1 -0
- package/dist/compose.js +482 -0
- package/dist/composites/terraform-apply-op.d.ts.map +1 -1
- package/dist/composites/terraform-apply-op.js +7 -3
- package/dist/cone.d.ts +53 -0
- package/dist/cone.d.ts.map +1 -0
- package/dist/cone.js +119 -0
- package/dist/config.d.ts +59 -13
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +43 -9
- package/dist/cost-hold.d.ts +27 -0
- package/dist/cost-hold.d.ts.map +1 -0
- package/dist/cost-hold.js +21 -0
- package/dist/describe-resources.d.ts +74 -12
- package/dist/describe-resources.d.ts.map +1 -1
- package/dist/describe-resources.js +374 -66
- package/dist/drift-read.d.ts +33 -0
- package/dist/drift-read.d.ts.map +1 -0
- package/dist/drift-read.js +243 -0
- package/dist/drift-record.d.ts +147 -0
- package/dist/drift-record.d.ts.map +1 -0
- package/dist/drift-record.js +383 -0
- package/dist/drift-rows.d.ts +61 -0
- package/dist/drift-rows.d.ts.map +1 -0
- package/dist/drift-rows.js +108 -0
- package/dist/exit-codes.d.ts +55 -0
- package/dist/exit-codes.d.ts.map +1 -0
- package/dist/exit-codes.js +48 -0
- package/dist/hcl/edges.d.ts.map +1 -1
- package/dist/hcl/edges.js +24 -1
- package/dist/hcl/files.d.ts +61 -0
- package/dist/hcl/files.d.ts.map +1 -0
- package/dist/hcl/files.js +221 -0
- package/dist/hcl/instances.d.ts +82 -0
- package/dist/hcl/instances.d.ts.map +1 -0
- package/dist/hcl/instances.js +390 -0
- package/dist/hcl/parse.d.ts +81 -9
- package/dist/hcl/parse.d.ts.map +1 -1
- package/dist/hcl/parse.js +114 -16
- package/dist/hcl/roots.d.ts.map +1 -1
- package/dist/hcl/roots.js +5 -0
- package/dist/hcl/suppressions.d.ts.map +1 -1
- package/dist/hcl/suppressions.js +8 -2
- package/dist/index.d.ts +13 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -2
- package/dist/integrity.json +8 -5
- package/dist/lint/audit-catalog.d.ts.map +1 -1
- package/dist/lint/audit-catalog.js +27 -3
- package/dist/lint/audit-lineage.d.ts +14 -2
- package/dist/lint/audit-lineage.d.ts.map +1 -1
- package/dist/lint/post-synth/index.d.ts.map +1 -1
- package/dist/lint/post-synth/index.js +4 -0
- package/dist/lint/post-synth/record-store.d.ts +54 -0
- package/dist/lint/post-synth/record-store.d.ts.map +1 -0
- package/dist/lint/post-synth/record-store.js +104 -0
- package/dist/lint/post-synth/tf001.d.ts +2 -2
- package/dist/lint/post-synth/tf001.js +2 -2
- package/dist/lint/post-synth/tf024.d.ts +35 -11
- package/dist/lint/post-synth/tf024.d.ts.map +1 -1
- package/dist/lint/post-synth/tf024.js +92 -20
- package/dist/lint/post-synth/tf046.d.ts +64 -0
- package/dist/lint/post-synth/tf046.d.ts.map +1 -0
- package/dist/lint/post-synth/tf046.js +175 -0
- package/dist/lint/post-synth/tf047.d.ts +36 -0
- package/dist/lint/post-synth/tf047.d.ts.map +1 -0
- package/dist/lint/post-synth/tf047.js +94 -0
- package/dist/live-plan-reasons.d.ts +21 -0
- package/dist/live-plan-reasons.d.ts.map +1 -0
- package/dist/live-plan-reasons.js +47 -0
- package/dist/lock-rows.d.ts +36 -0
- package/dist/lock-rows.d.ts.map +1 -0
- package/dist/lock-rows.js +60 -0
- package/dist/lock-timeout.d.ts +22 -0
- package/dist/lock-timeout.d.ts.map +1 -0
- package/dist/lock-timeout.js +32 -0
- package/dist/lsp/option-keys.d.ts.map +1 -1
- package/dist/lsp/option-keys.js +2 -0
- package/dist/manifest.json +1 -1
- package/dist/module-catalog/index.d.ts +69 -0
- package/dist/module-catalog/index.d.ts.map +1 -0
- package/dist/module-catalog/index.js +110 -0
- package/dist/module-catalog/refresh-cli.d.ts +4 -0
- package/dist/module-catalog/refresh-cli.d.ts.map +1 -0
- package/dist/module-catalog/refresh-cli.js +64 -0
- package/dist/module-catalog/static-tier.d.ts +6 -0
- package/dist/module-catalog/static-tier.d.ts.map +1 -0
- package/dist/module-catalog/static-tier.js +1650 -0
- package/dist/module-catalog/types.d.ts +65 -0
- package/dist/module-catalog/types.d.ts.map +1 -0
- package/dist/module-catalog/types.js +33 -0
- package/dist/okf/index.md +3 -1
- package/dist/okf/rules/TF024.md +2 -2
- package/dist/okf/rules/TF046.md +11 -0
- package/dist/okf/rules/TF047.md +11 -0
- package/dist/op/activities/index.d.ts +6 -2
- package/dist/op/activities/index.d.ts.map +1 -1
- package/dist/op/activities/index.js +5 -1
- package/dist/op/activities/live-detect.d.ts +4 -3
- package/dist/op/activities/live-detect.d.ts.map +1 -1
- package/dist/op/activities/live-detect.js +57 -32
- package/dist/op/activities/pin-rollout.d.ts +2 -0
- package/dist/op/activities/pin-rollout.d.ts.map +1 -1
- package/dist/op/activities/pin-rollout.js +1 -0
- package/dist/op/activities/terraform.d.ts +182 -5
- package/dist/op/activities/terraform.d.ts.map +1 -1
- package/dist/op/activities/terraform.js +224 -24
- package/dist/op/activity-contracts.d.ts +27 -0
- package/dist/op/activity-contracts.d.ts.map +1 -1
- package/dist/op/activity-contracts.js +19 -1
- package/dist/op/builders.d.ts +7 -1
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/op/builders.js +9 -0
- package/dist/pin/consumers.d.ts +35 -0
- package/dist/pin/consumers.d.ts.map +1 -0
- package/dist/pin/consumers.js +70 -0
- package/dist/pin/edit.d.ts.map +1 -1
- package/dist/pin/edit.js +35 -0
- package/dist/pin/rollout.d.ts +2 -0
- package/dist/pin/rollout.d.ts.map +1 -1
- package/dist/pin/rollout.js +14 -11
- package/dist/plan-shape.d.ts +30 -0
- package/dist/plan-shape.d.ts.map +1 -0
- package/dist/plan-shape.js +125 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +37 -18
- package/dist/registry/address.d.ts +63 -0
- package/dist/registry/address.d.ts.map +1 -0
- package/dist/registry/address.js +65 -0
- package/dist/registry/catalog-read.d.ts +14 -0
- package/dist/registry/catalog-read.d.ts.map +1 -0
- package/dist/registry/catalog-read.js +58 -0
- package/dist/registry/deprecated.d.ts +37 -0
- package/dist/registry/deprecated.d.ts.map +1 -0
- package/dist/registry/deprecated.js +43 -0
- package/dist/registry/docs.d.ts +96 -0
- package/dist/registry/docs.d.ts.map +1 -0
- package/dist/registry/docs.js +210 -0
- package/dist/registry/edge/edge.d.ts +46 -0
- package/dist/registry/edge/edge.d.ts.map +1 -0
- package/dist/registry/edge/edge.js +194 -0
- package/dist/registry/edge/index.d.ts +11 -0
- package/dist/registry/edge/index.d.ts.map +1 -0
- package/dist/registry/edge/index.js +10 -0
- package/dist/registry/edge/lambda-edge.d.ts +76 -0
- package/dist/registry/edge/lambda-edge.d.ts.map +1 -0
- package/dist/registry/edge/lambda-edge.js +95 -0
- package/dist/registry/edge/sigv4-web.d.ts +33 -0
- package/dist/registry/edge/sigv4-web.d.ts.map +1 -0
- package/dist/registry/edge/sigv4-web.js +56 -0
- package/dist/registry/edge/token-source.d.ts +73 -0
- package/dist/registry/edge/token-source.d.ts.map +1 -0
- package/dist/registry/edge/token-source.js +115 -0
- package/dist/registry/edge/worker.d.ts +45 -0
- package/dist/registry/edge/worker.d.ts.map +1 -0
- package/dist/registry/edge/worker.js +26 -0
- package/dist/registry/handler.d.ts +25 -0
- package/dist/registry/handler.d.ts.map +1 -0
- package/dist/registry/handler.js +75 -0
- package/dist/registry/headers-file.d.ts +21 -0
- package/dist/registry/headers-file.d.ts.map +1 -0
- package/dist/registry/headers-file.js +57 -0
- package/dist/registry/index.d.ts +31 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +30 -0
- package/dist/registry/mirror-paths.d.ts +9 -0
- package/dist/registry/mirror-paths.d.ts.map +1 -0
- package/dist/registry/mirror-paths.js +8 -0
- package/dist/registry/mirror.d.ts +130 -0
- package/dist/registry/mirror.d.ts.map +1 -0
- package/dist/registry/mirror.js +319 -0
- package/dist/registry/proxies.d.ts +73 -0
- package/dist/registry/proxies.d.ts.map +1 -0
- package/dist/registry/proxies.js +111 -0
- package/dist/registry/reader.d.ts +57 -0
- package/dist/registry/reader.d.ts.map +1 -0
- package/dist/registry/reader.js +198 -0
- package/dist/registry/semver.d.ts +16 -0
- package/dist/registry/semver.d.ts.map +1 -0
- package/dist/registry/semver.js +24 -0
- package/dist/registry/serve.d.ts +24 -0
- package/dist/registry/serve.d.ts.map +1 -0
- package/dist/registry/serve.js +64 -0
- package/dist/registry/source-forms.d.ts +79 -0
- package/dist/registry/source-forms.d.ts.map +1 -0
- package/dist/registry/source-forms.js +202 -0
- package/dist/registry/targets/artifactory.d.ts +28 -0
- package/dist/registry/targets/artifactory.d.ts.map +1 -0
- package/dist/registry/targets/artifactory.js +206 -0
- package/dist/registry/targets/fake-artifactory.d.ts +30 -0
- package/dist/registry/targets/fake-artifactory.d.ts.map +1 -0
- package/dist/registry/targets/fake-artifactory.js +142 -0
- package/dist/registry/targets/fake-gitlab.d.ts +39 -0
- package/dist/registry/targets/fake-gitlab.d.ts.map +1 -0
- package/dist/registry/targets/fake-gitlab.js +136 -0
- package/dist/registry/targets/fake-hcp.d.ts +50 -0
- package/dist/registry/targets/fake-hcp.d.ts.map +1 -0
- package/dist/registry/targets/fake-hcp.js +202 -0
- package/dist/registry/targets/fake-http.d.ts +31 -0
- package/dist/registry/targets/fake-http.d.ts.map +1 -0
- package/dist/registry/targets/fake-http.js +87 -0
- package/dist/registry/targets/fake-nexus.d.ts +27 -0
- package/dist/registry/targets/fake-nexus.d.ts.map +1 -0
- package/dist/registry/targets/fake-nexus.js +137 -0
- package/dist/registry/targets/gitlab.d.ts +53 -0
- package/dist/registry/targets/gitlab.d.ts.map +1 -0
- package/dist/registry/targets/gitlab.js +187 -0
- package/dist/registry/targets/hcp.d.ts +29 -0
- package/dist/registry/targets/hcp.d.ts.map +1 -0
- package/dist/registry/targets/hcp.js +310 -0
- package/dist/registry/targets/hosted.d.ts +62 -0
- package/dist/registry/targets/hosted.d.ts.map +1 -0
- package/dist/registry/targets/hosted.js +74 -0
- package/dist/registry/targets/index.d.ts +18 -0
- package/dist/registry/targets/index.d.ts.map +1 -0
- package/dist/registry/targets/index.js +17 -0
- package/dist/registry/targets/module-target.d.ts +68 -0
- package/dist/registry/targets/module-target.d.ts.map +1 -0
- package/dist/registry/targets/module-target.js +63 -0
- package/dist/registry/targets/nexus.d.ts +43 -0
- package/dist/registry/targets/nexus.d.ts.map +1 -0
- package/dist/registry/targets/nexus.js +250 -0
- package/dist/registry/targets/zip.d.ts +55 -0
- package/dist/registry/targets/zip.d.ts.map +1 -0
- package/dist/registry/targets/zip.js +278 -0
- package/dist/registry/writer.d.ts +101 -0
- package/dist/registry/writer.d.ts.map +1 -0
- package/dist/registry/writer.js +109 -0
- package/dist/report.d.ts +15 -6
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +28 -55
- package/dist/rules/record-store.ts +122 -0
- package/dist/rules/tf001.ts +2 -2
- package/dist/rules/tf024.ts +105 -22
- package/dist/rules/tf046.ts +204 -0
- package/dist/rules/tf047.ts +114 -0
- package/dist/skills/chant-terraform.md +1 -1
- package/dist/state/azure-blob.d.ts +9 -0
- package/dist/state/azure-blob.d.ts.map +1 -0
- package/dist/state/azure-blob.js +8 -0
- package/dist/state/backend.d.ts +158 -0
- package/dist/state/backend.d.ts.map +1 -0
- package/dist/state/backend.js +406 -0
- package/dist/state/exec.d.ts +39 -0
- package/dist/state/exec.d.ts.map +1 -0
- package/dist/state/exec.js +80 -0
- package/dist/state/gcs.d.ts +8 -0
- package/dist/state/gcs.d.ts.map +1 -0
- package/dist/state/gcs.js +7 -0
- package/dist/state/index.d.ts +15 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +14 -0
- package/dist/state/locks.d.ts +105 -0
- package/dist/state/locks.d.ts.map +1 -0
- package/dist/state/locks.js +130 -0
- package/dist/state/object-store.d.ts +8 -0
- package/dist/state/object-store.d.ts.map +1 -0
- package/dist/state/object-store.js +7 -0
- package/dist/state/root-states.d.ts +131 -0
- package/dist/state/root-states.d.ts.map +1 -0
- package/dist/state/root-states.js +241 -0
- package/dist/state/s3.d.ts +21 -0
- package/dist/state/s3.d.ts.map +1 -0
- package/dist/state/s3.js +19 -0
- package/dist/state/store.d.ts +51 -0
- package/dist/state/store.d.ts.map +1 -0
- package/dist/state/store.js +185 -0
- package/dist/state-ops.d.ts +255 -0
- package/dist/state-ops.d.ts.map +1 -0
- package/dist/state-ops.js +305 -0
- package/dist/state-reads.d.ts +57 -0
- package/dist/state-reads.d.ts.map +1 -0
- package/dist/state-reads.js +104 -0
- package/dist/terragrunt/affected.d.ts.map +1 -1
- package/dist/terragrunt/affected.js +2 -1
- package/dist/used-sources.d.ts +54 -0
- package/dist/used-sources.d.ts.map +1 -0
- package/dist/used-sources.js +157 -0
- package/package.json +24 -4
- package/src/__fixtures__/ACCEPTANCE.md +69 -7
- package/src/__fixtures__/compose/apply-failed-in-app.jsonl +12 -0
- package/src/__fixtures__/compose/state-app.json +66 -0
- package/src/__fixtures__/compose/state-edge.json +40 -0
- package/src/__fixtures__/compose/state-net.json +58 -0
- package/src/__fixtures__/compose/three-app.plan.json +184 -0
- package/src/__fixtures__/compose/three-composed.plan.json +509 -0
- package/src/__fixtures__/compose/three-edge.plan.json +144 -0
- package/src/__fixtures__/compose/three-net.plan.json +174 -0
- package/src/__fixtures__/compose/unknown-composed.plan.json +228 -0
- package/src/__fixtures__/compose/working-after-apply.json +145 -0
- package/src/__fixtures__/config-blocks/app/main.tf +61 -0
- package/src/__fixtures__/config-blocks/app/modules/network/main.tf +4 -0
- package/src/__fixtures__/config-blocks/app-json/main.tf.json +39 -0
- package/src/__fixtures__/config-files/shadow/main.tf +3 -0
- package/src/__fixtures__/config-files/shadow/main.tofu +3 -0
- package/src/__fixtures__/config-files/shadow/other.tf +3 -0
- package/src/__fixtures__/config-files/tf/main.tf +11 -0
- package/src/__fixtures__/config-files/tf-json/main.tf.json +18 -0
- package/src/__fixtures__/config-files/tofu/main.tofu +11 -0
- package/src/__fixtures__/config-files/tofu-json/main.tofu.json +18 -0
- package/src/__fixtures__/config-files/tofu-only/main.tofu +3 -0
- package/src/__fixtures__/drift-record/README.md +16 -0
- package/src/__fixtures__/drift-record/live-plan-sections.json +27 -0
- package/src/__fixtures__/drift-rows/live-root-plan.json +70 -0
- package/src/__fixtures__/drift-rows/refresh-plan.json +61 -0
- package/src/__fixtures__/instance-forms/app/main.tf +110 -0
- package/src/__fixtures__/instance-forms/app/modules/svc/main.tf +3 -0
- package/src/__fixtures__/instance-vars/app/main.tf +52 -0
- package/src/__fixtures__/instance-vars/app/modules/app/main.tf +12 -0
- package/src/__fixtures__/instance-vars/app/modules/edge/main.tf +3 -0
- package/src/__fixtures__/instance-vars/app/terraform.tfvars +1 -0
- package/src/__fixtures__/live-module-keyed/live-graph.json +259 -0
- package/src/__fixtures__/live-module-keyed/live-plan.json +87 -0
- package/src/__fixtures__/live-module-keyed/root/estate.chdf.hcl +1 -0
- package/src/__fixtures__/live-module-keyed/root/main.tf +21 -0
- package/src/__fixtures__/live-module-keyed/root/modules/app/main.tf +17 -0
- package/src/__fixtures__/live-module-keyed/root/modules/edge/main.tf +7 -0
- package/src/__fixtures__/live-module-keyed/root/versions.tf +30 -0
- package/src/__fixtures__/live-module-keyed/show-state.json +146 -0
- package/src/__fixtures__/pr-loop/README.md +50 -0
- package/src/__fixtures__/pr-loop/chant.config.json +13 -0
- package/src/__fixtures__/pr-loop/estate.component.ts +10 -0
- package/src/__fixtures__/pr-loop/roots/a/main.tf +11 -0
- package/src/__fixtures__/pr-loop/roots/app/main.tf +19 -0
- package/src/__fixtures__/pr-loop/roots/b/main.tf +7 -0
- package/src/__fixtures__/pr-loop/roots/dns/main.tf +3 -0
- package/src/__fixtures__/pr-loop/roots/net/main.tf +7 -0
- package/src/__fixtures__/report/applied.show.json +51 -0
- package/src/__fixtures__/report/generate.ts +63 -0
- package/src/__fixtures__/report/plan.show.json +200 -0
- package/src/__fixtures__/report/tf-apply/change-set.json +170 -0
- package/src/__fixtures__/report/tf-apply/report.json +338 -0
- package/src/__fixtures__/report/tf-plan/change-set.json +170 -0
- package/src/__fixtures__/report/tf-plan/report.json +320 -0
- package/src/__fixtures__/three-cloud-azure.graph.json +290 -0
- package/src/__fixtures__/used-sources/root/extra.tofu +1 -0
- package/src/__fixtures__/used-sources/root/main.tf +31 -0
- package/src/__fixtures__/used-sources/root/modules/net/main.tf +14 -0
- package/src/__fixtures__/used-sources/root/modules/net/versions.tf.json +7 -0
- package/src/__fixtures__/used-sources/unit/terragrunt.hcl +3 -0
- package/src/applied-state.ts +52 -0
- package/src/backend-config.test.ts +105 -0
- package/src/backend-config.ts +133 -0
- package/src/behaviour/kinds.ts +4 -0
- package/src/behaviour/predict.ts +5 -2
- package/src/behaviour/reference-catalog.plugin.test.ts +65 -0
- package/src/behaviour/reference-catalog.ts +16 -5
- package/src/behaviour/request.ts +3 -2
- package/src/change-set-instances.test.ts +98 -0
- package/src/changed-roots.ts +14 -16
- package/src/ci-setup.ts +42 -0
- package/src/commands.ts +4 -3
- package/src/components/capability-plugin.test.ts +198 -19
- package/src/components/capability-plugin.ts +383 -35
- package/src/components/change-set-graph.e2e.test.ts +11 -5
- package/src/components/compose-group.test.ts +486 -0
- package/src/components/compose-group.ts +489 -0
- package/src/components/demo-composed-roots.e2e.test.ts +440 -0
- package/src/components/member-outputs.test.ts +76 -0
- package/src/components/placeholder-preview.test.ts +147 -0
- package/src/components/placeholder-preview.ts +257 -0
- package/src/components/pr-loop-compose.tofu.e2e.test.ts +363 -0
- package/src/components/pr-loop.tofu.test.ts +113 -57
- package/src/components/release-inputs.ts +69 -0
- package/src/components/trace-facts.test.ts +21 -0
- package/src/components/trace-facts.ts +27 -0
- package/src/compose/apply-events.test.ts +62 -0
- package/src/compose/apply-events.ts +100 -0
- package/src/compose/estate.choudoufu.e2e.test.ts +112 -0
- package/src/compose/estate.test.ts +421 -0
- package/src/compose/estate.ts +443 -0
- package/src/compose/hcl.ts +311 -0
- package/src/compose/module-address.ts +49 -0
- package/src/compose/root.test.ts +416 -0
- package/src/compose/root.ts +592 -0
- package/src/compose/run.test.ts +440 -0
- package/src/compose/run.tofu.test.ts +176 -0
- package/src/compose/run.ts +527 -0
- package/src/compose/slice.test.ts +184 -0
- package/src/compose/slice.ts +290 -0
- package/src/compose/state-address.ts +157 -0
- package/src/compose/state-merge.test.ts +131 -0
- package/src/compose/state-merge.ts +148 -0
- package/src/compose.test.ts +248 -0
- package/src/compose.ts +627 -0
- package/src/composites/terraform-apply-op.test.ts +9 -0
- package/src/composites/terraform-apply-op.ts +7 -3
- package/src/cone.ts +138 -0
- package/src/config-file-listers.test.ts +265 -0
- package/src/config.ts +44 -9
- package/src/cost-hold.ts +29 -0
- package/src/describe-resources.engine-facts.test.ts +411 -0
- package/src/describe-resources.live-module-keyed.test.ts +290 -0
- package/src/describe-resources.ts +416 -70
- package/src/drift-read.ts +284 -0
- package/src/drift-record.test.ts +223 -0
- package/src/drift-record.ts +455 -0
- package/src/drift-rows.test.ts +135 -0
- package/src/drift-rows.ts +137 -0
- package/src/exit-codes.test.ts +23 -0
- package/src/exit-codes.ts +59 -0
- package/src/hcl/config-blocks.test.ts +174 -0
- package/src/hcl/edges.ts +21 -1
- package/src/hcl/files.ts +234 -0
- package/src/hcl/instance-forms.test.ts +94 -0
- package/src/hcl/instances.test.ts +137 -0
- package/src/hcl/instances.ts +422 -0
- package/src/hcl/parse.test.ts +139 -1
- package/src/hcl/parse.ts +149 -16
- package/src/hcl/roots.ts +6 -0
- package/src/hcl/suppressions.ts +8 -2
- package/src/index.ts +79 -0
- package/src/lint/audit-catalog.ts +29 -3
- package/src/lint/audit-lineage.ts +14 -2
- package/src/lint/post-synth/fixtures/TF024/live-with-record-store/main.tf +18 -0
- package/src/lint/post-synth/fixtures/TF024/sidecar-with-backend/estate.chdf.hcl +1 -0
- package/src/lint/post-synth/fixtures/TF024/sidecar-with-backend/main.tf +10 -0
- package/src/lint/post-synth/fixtures/TF046/azurerm-no-resource-group/main.tf +15 -0
- package/src/lint/post-synth/fixtures/TF046/backend-config-only/main.tf +14 -0
- package/src/lint/post-synth/fixtures/TF046/derived-s3/backend.tf +7 -0
- package/src/lint/post-synth/fixtures/TF046/derived-s3/main.tf +9 -0
- package/src/lint/post-synth/fixtures/TF046/explicit-local/main.tf +16 -0
- package/src/lint/post-synth/fixtures/TF046/explicit-s3-beside-local-backend/main.tf +15 -0
- package/src/lint/post-synth/fixtures/TF046/implied-local/main.tf +9 -0
- package/src/lint/post-synth/fixtures/TF046/sidecar-implied/estate.chdf.hcl +1 -0
- package/src/lint/post-synth/fixtures/TF046/sidecar-implied/main.tf +5 -0
- package/src/lint/post-synth/fixtures/TF047/clear/main.tf +12 -0
- package/src/lint/post-synth/fixtures/TF047/refused/main.tf +12 -0
- package/src/lint/post-synth/fixtures/TF047/unknown-module/main.tf +12 -0
- package/src/lint/post-synth/fixtures/TF047/unknown-version/main.tf +12 -0
- package/src/lint/post-synth/index.ts +4 -0
- package/src/lint/post-synth/record-store.ts +122 -0
- package/src/lint/post-synth/tf001.ts +2 -2
- package/src/lint/post-synth/tf024.test.ts +26 -5
- package/src/lint/post-synth/tf024.ts +105 -22
- package/src/lint/post-synth/tf046.test.ts +137 -0
- package/src/lint/post-synth/tf046.ts +204 -0
- package/src/lint/post-synth/tf047.test.ts +56 -0
- package/src/lint/post-synth/tf047.ts +114 -0
- package/src/live-plan-reasons.ts +54 -0
- package/src/lock-rows.test.ts +70 -0
- package/src/lock-rows.ts +82 -0
- package/src/lock-timeout.ts +34 -0
- package/src/lsp/completions.test.ts +1 -1
- package/src/lsp/option-keys.ts +2 -0
- package/src/module-catalog/index.test.ts +93 -0
- package/src/module-catalog/index.ts +159 -0
- package/src/module-catalog/refresh-cli.ts +68 -0
- package/src/module-catalog/static-tier.ts +1659 -0
- package/src/module-catalog/types.ts +88 -0
- package/src/op/activities/choudoufu-plan-set-op.test.ts +111 -0
- package/src/op/activities/index.ts +9 -0
- package/src/op/activities/live-detect.ts +55 -26
- package/src/op/activities/pin-rollout.ts +3 -0
- package/src/op/activities/registry.test.ts +2 -1
- package/src/op/activities/terraform.test.ts +55 -0
- package/src/op/activities/terraform.ts +312 -27
- package/src/op/activity-contracts.test.ts +1 -0
- package/src/op/activity-contracts.ts +24 -1
- package/src/op/builders.ts +14 -0
- package/src/op-wave-step.test.ts +109 -0
- package/src/pin/__fixtures__/consumers/live/dev/main.tf +4 -0
- package/src/pin/__fixtures__/consumers/live/prod/main.tf +21 -0
- package/src/pin/__fixtures__/consumers/units/vpc/terragrunt.hcl +7 -0
- package/src/pin/bundle.test.ts +2 -0
- package/src/pin/consumers.test.ts +57 -0
- package/src/pin/consumers.ts +95 -0
- package/src/pin/edit.ts +30 -0
- package/src/pin/rollout.ts +16 -11
- package/src/plan-shape.test.ts +148 -0
- package/src/plan-shape.ts +128 -0
- package/src/plugin.ts +39 -19
- package/src/registry/__fixtures__/docs/documented/.terraform-docs.yml +3 -0
- package/src/registry/__fixtures__/docs/documented/README.md +1 -0
- package/src/registry/__fixtures__/docs/documented/main.tf +8 -0
- package/src/registry/__fixtures__/docs/json/main.tf.json +14 -0
- package/src/registry/__fixtures__/docs/vpc/README.md +3 -0
- package/src/registry/__fixtures__/docs/vpc/examples/complete/main.tf +5 -0
- package/src/registry/__fixtures__/docs/vpc/examples/simple/README.md +1 -0
- package/src/registry/__fixtures__/docs/vpc/examples/simple/main.tf +4 -0
- package/src/registry/__fixtures__/docs/vpc/main.tf +14 -0
- package/src/registry/__fixtures__/docs/vpc/outputs.tf +9 -0
- package/src/registry/__fixtures__/docs/vpc/variables.tf +16 -0
- package/src/registry/__fixtures__/proxied-root/main.tf +12 -0
- package/src/registry/address.ts +100 -0
- package/src/registry/catalog-read.ts +56 -0
- package/src/registry/deprecated.test.ts +139 -0
- package/src/registry/deprecated.ts +76 -0
- package/src/registry/docs.test.ts +140 -0
- package/src/registry/docs.ts +299 -0
- package/src/registry/edge/bundle.test.ts +50 -0
- package/src/registry/edge/edge.test.ts +176 -0
- package/src/registry/edge/edge.ts +211 -0
- package/src/registry/edge/index.ts +10 -0
- package/src/registry/edge/lambda-edge.ts +127 -0
- package/src/registry/edge/sigv4-web.ts +79 -0
- package/src/registry/edge/token-source.test.ts +258 -0
- package/src/registry/edge/token-source.ts +169 -0
- package/src/registry/edge/worker.ts +61 -0
- package/src/registry/handler.ts +89 -0
- package/src/registry/headers-file.ts +61 -0
- package/src/registry/index.ts +31 -0
- package/src/registry/mirror-paths.ts +10 -0
- package/src/registry/mirror.test.ts +198 -0
- package/src/registry/mirror.ts +395 -0
- package/src/registry/proxies.test.ts +153 -0
- package/src/registry/proxies.ts +132 -0
- package/src/registry/reader.ts +225 -0
- package/src/registry/registry.test.ts +262 -0
- package/src/registry/semver.ts +34 -0
- package/src/registry/serve.ts +82 -0
- package/src/registry/source-forms.test.ts +87 -0
- package/src/registry/source-forms.ts +216 -0
- package/src/registry/targets/artifactory.test.ts +248 -0
- package/src/registry/targets/artifactory.ts +257 -0
- package/src/registry/targets/fake-artifactory.ts +158 -0
- package/src/registry/targets/fake-gitlab.ts +161 -0
- package/src/registry/targets/fake-hcp.ts +233 -0
- package/src/registry/targets/fake-http.ts +97 -0
- package/src/registry/targets/fake-nexus.ts +152 -0
- package/src/registry/targets/gitlab.test.ts +208 -0
- package/src/registry/targets/gitlab.ts +223 -0
- package/src/registry/targets/hcp.test.ts +230 -0
- package/src/registry/targets/hcp.ts +360 -0
- package/src/registry/targets/hosted.ts +117 -0
- package/src/registry/targets/index.ts +17 -0
- package/src/registry/targets/module-target.ts +131 -0
- package/src/registry/targets/nexus.test.ts +220 -0
- package/src/registry/targets/nexus.ts +314 -0
- package/src/registry/targets/zip.test.ts +65 -0
- package/src/registry/targets/zip.ts +287 -0
- package/src/registry/writer.ts +155 -0
- package/src/report.test.ts +82 -1
- package/src/report.ts +31 -54
- package/src/signal-only-root.test.ts +72 -0
- package/src/skills/chant-terraform.md +1 -1
- package/src/state/azure-blob.ts +8 -0
- package/src/state/backend-verdict.test.ts +187 -0
- package/src/state/backend.test.ts +127 -0
- package/src/state/backend.ts +488 -0
- package/src/state/exec.ts +111 -0
- package/src/state/gcs.ts +7 -0
- package/src/state/index.ts +15 -0
- package/src/state/locks.test.ts +84 -0
- package/src/state/locks.ts +201 -0
- package/src/state/object-store.ts +7 -0
- package/src/state/root-states-floci.e2e.test.ts +66 -0
- package/src/state/root-states.test.ts +462 -0
- package/src/state/root-states.ts +309 -0
- package/src/state/s3.ts +21 -0
- package/src/state/store.ts +225 -0
- package/src/state-ops.test.ts +182 -0
- package/src/state-ops.ts +462 -0
- package/src/state-reads.ts +116 -0
- package/src/terragrunt/affected.ts +2 -1
- package/src/used-sources.test.ts +75 -0
- package/src/used-sources.ts +204 -0
- package/src/workspace-kinds.test.ts +4 -17
- package/workspace-kinds.json +1 -24
- package/dist/workspace-member.d.ts +0 -30
- package/dist/workspace-member.d.ts.map +0 -1
- package/dist/workspace-member.js +0 -91
- package/schemas/pulumi.schema.json +0 -34
- package/src/testdata/pulumi-member/Pulumi.yaml +0 -2
- package/src/testdata/pulumi-member/stack-export.json +0 -53
- package/src/testdata/pulumi-unexported/Pulumi.yaml +0 -2
- package/src/workspace-member.test.ts +0 -89
- package/src/workspace-member.ts +0 -126
package/dist/hcl/parse.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The one shared HCL parse for the terraform lexicon.
|
|
3
3
|
*
|
|
4
|
-
* Two entry points, one entity shape. `parseTerraformRootDir` reads the
|
|
5
|
-
* files of a directory (non-recursive, matching Terraform's own
|
|
6
|
-
* scoping
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* Two entry points, one entity shape. `parseTerraformRootDir` reads the
|
|
5
|
+
* configuration files of a directory (non-recursive, matching Terraform's own
|
|
6
|
+
* module scoping; `.tf` and `.tf.json`, plus `.tofu` and `.tofu.json` for a
|
|
7
|
+
* tofu or choudoufu root, see `./files.ts`) and is what `buildRoots()` calls.
|
|
8
|
+
* `parseTerraformRootContent` takes the joined-file string `chant audit` hands
|
|
9
|
+
* a lexicon for a discovered root module: every configuration file in filename
|
|
10
|
+
* order behind a `# file: <name>` line comment, narrowed to the same set.
|
|
9
11
|
* Both funnel through `blocksToEntities`, so an entity the audit path sees is
|
|
10
12
|
* the entity the build path sees.
|
|
11
13
|
*
|
|
@@ -17,12 +19,14 @@
|
|
|
17
19
|
* core's exports map already carries (`"./*"` to `./src/*.ts`), so nothing
|
|
18
20
|
* changed in `packages/core/package.json` for this.
|
|
19
21
|
*/
|
|
20
|
-
import { existsSync,
|
|
22
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
21
23
|
import { join } from "node:path";
|
|
22
24
|
import { loadHcl2json } from "@intentius/chant/terraform/hcl2json";
|
|
23
25
|
import { DECLARABLE_MARKER } from "@intentius/chant/declarable";
|
|
24
26
|
import { redactSensitiveBody, redactSensitiveSource } from "./redact.js";
|
|
25
27
|
import { scanSuppressions, directivesFor } from "./suppressions.js";
|
|
28
|
+
import { isJsonConfigFile, jsonConfigTree, listConfigFiles, selectConfigFiles } from "./files.js";
|
|
29
|
+
export { TERRAFORM_SUFFIXES, TOFU_SUFFIXES, isConfigFileFor, isJsonConfigFile, isTofuConfigFile, jsonConfigTree, listConfigFiles, listConfigFilesSafe, readsTofuFiles, selectConfigFiles, } from "./files.js";
|
|
26
30
|
/** `entityType` per block kind. */
|
|
27
31
|
export const TERRAFORM_TYPE = "Terraform::Terraform";
|
|
28
32
|
export const PROVIDER_TYPE = "Terraform::Provider";
|
|
@@ -34,6 +38,23 @@ export const OUTPUT_TYPE = "Terraform::Output";
|
|
|
34
38
|
export const LOCALS_TYPE = "Terraform::Locals";
|
|
35
39
|
/** A `live { estate = "..." }` block, or an `estate.chdf.hcl` sidecar's content (#2103). */
|
|
36
40
|
export const LIVE_TYPE = "Terraform::Live";
|
|
41
|
+
/**
|
|
42
|
+
* The four configuration blocks that change how a plan treats addresses
|
|
43
|
+
* rather than declaring anything (#4458): `moved`, `import`, `removed` and
|
|
44
|
+
* `check`. The first three carry no label and key as `moved`, `import`,
|
|
45
|
+
* `removed` (numbered `~2`, `~3` when a root holds several, as `locals` is);
|
|
46
|
+
* a `check` keys as `check.<name>`. Their references are edges like any other
|
|
47
|
+
* block's: a `moved` block's `from` and `to`, an `import` block's `to`, a
|
|
48
|
+
* `removed` block's `from`, and everything a `check` block's assertions and
|
|
49
|
+
* scoped `data` blocks read. A `from` usually names an address that is no
|
|
50
|
+
* longer declared, which resolves to no entity and so draws no edge, and
|
|
51
|
+
* that is all that happens: an unresolved reference is dropped, never
|
|
52
|
+
* reported (`./edges.ts`).
|
|
53
|
+
*/
|
|
54
|
+
export const MOVED_TYPE = "Terraform::Moved";
|
|
55
|
+
export const IMPORT_TYPE = "Terraform::Import";
|
|
56
|
+
export const REMOVED_TYPE = "Terraform::Removed";
|
|
57
|
+
export const CHECK_TYPE = "Terraform::Check";
|
|
37
58
|
/**
|
|
38
59
|
* Terragrunt config entities (#3417). A `terragrunt.hcl` or `root.hcl` is not
|
|
39
60
|
* a Terraform module, so its blocks are read into these types and never into
|
|
@@ -61,6 +82,58 @@ function expansionOf(body) {
|
|
|
61
82
|
return "for_each";
|
|
62
83
|
return undefined;
|
|
63
84
|
}
|
|
85
|
+
/** The most instance keys read off one literal; past it the block draws as the block alone. */
|
|
86
|
+
const MAX_LITERAL_INSTANCES = 256;
|
|
87
|
+
/**
|
|
88
|
+
* The instance keys a literal expansion gives (#4454), as Terraform prints
|
|
89
|
+
* them, or undefined when the expansion is not a literal a read of the
|
|
90
|
+
* source can count. `count` as a number (`count = 3`), `for_each` as a
|
|
91
|
+
* literal map (`{ a = 1 }`, keys in Terraform's lexical order) or
|
|
92
|
+
* `toset([...])` over string literals. Anything holding a reference is a
|
|
93
|
+
* plan-time answer.
|
|
94
|
+
*/
|
|
95
|
+
export function literalInstanceKeys(body) {
|
|
96
|
+
const keys = literalKeys(body);
|
|
97
|
+
if (keys === undefined || keys.length > MAX_LITERAL_INSTANCES)
|
|
98
|
+
return undefined;
|
|
99
|
+
return keys;
|
|
100
|
+
}
|
|
101
|
+
function literalKeys(body) {
|
|
102
|
+
if ("count" in body) {
|
|
103
|
+
const count = body.count;
|
|
104
|
+
const n = typeof count === "number" ? count
|
|
105
|
+
: typeof count === "string" && /^\$\{\s*\d+\s*\}$/.test(count.trim()) ? Number(count.trim().slice(2, -1))
|
|
106
|
+
: undefined;
|
|
107
|
+
if (n === undefined || !Number.isInteger(n) || n < 0)
|
|
108
|
+
return undefined;
|
|
109
|
+
return Array.from({ length: n }, (_, i) => `[${i}]`);
|
|
110
|
+
}
|
|
111
|
+
if ("for_each" in body) {
|
|
112
|
+
const each = body.for_each;
|
|
113
|
+
if (typeof each === "object" && each !== null && !Array.isArray(each)) {
|
|
114
|
+
const names = Object.keys(each);
|
|
115
|
+
if (names.some((k) => k.includes("${")))
|
|
116
|
+
return undefined;
|
|
117
|
+
return names.sort().map((k) => `[${JSON.stringify(k)}]`);
|
|
118
|
+
}
|
|
119
|
+
if (typeof each === "string") {
|
|
120
|
+
const m = /^\$\{\s*toset\(\s*(\[[\s\S]*\])\s*\)\s*\}$/.exec(each.trim());
|
|
121
|
+
if (!m)
|
|
122
|
+
return undefined;
|
|
123
|
+
let list;
|
|
124
|
+
try {
|
|
125
|
+
list = JSON.parse(m[1].replace(/,\s*\]$/, "]"));
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
if (!Array.isArray(list) || !list.every((v) => typeof v === "string"))
|
|
131
|
+
return undefined;
|
|
132
|
+
return [...new Set(list)].sort().map((k) => `[${JSON.stringify(k)}]`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
64
137
|
/**
|
|
65
138
|
* Build one entity. Written out rather than run through `createResource`
|
|
66
139
|
* from `@intentius/chant/runtime`: that factory is for generated resource
|
|
@@ -71,6 +144,7 @@ function expansionOf(body) {
|
|
|
71
144
|
*/
|
|
72
145
|
export function terraformEntity(entityType, address, body, file, root, extra, source = "", line, suppressions) {
|
|
73
146
|
const expansion = expansionOf(body);
|
|
147
|
+
const instanceKeys = expansion && (entityType === RESOURCE_TYPE || entityType === DATA_TYPE) ? literalInstanceKeys(body) : undefined;
|
|
74
148
|
const labels = entityType === RESOURCE_TYPE ? blockLabels(address)
|
|
75
149
|
: entityType === DATA_TYPE && address.startsWith("data.") ? blockLabels(address.slice("data.".length))
|
|
76
150
|
: undefined;
|
|
@@ -80,6 +154,7 @@ export function terraformEntity(entityType, address, body, file, root, extra, so
|
|
|
80
154
|
entityType,
|
|
81
155
|
kind: "resource",
|
|
82
156
|
stack: root,
|
|
157
|
+
...(instanceKeys ? { instanceKeys } : {}),
|
|
83
158
|
props: {
|
|
84
159
|
address,
|
|
85
160
|
...(labels ?? {}),
|
|
@@ -130,11 +205,20 @@ export function splitBundleContent(content, fallbackName = "main.tf") {
|
|
|
130
205
|
}
|
|
131
206
|
return files.filter((f) => f.source.trim() !== "");
|
|
132
207
|
}
|
|
133
|
-
/**
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
208
|
+
/**
|
|
209
|
+
* Every configuration file directly under `dir` that a root run by `binary`
|
|
210
|
+
* reads, in filename order, non-recursive: `.tf` and `.tf.json`, plus `.tofu`
|
|
211
|
+
* and `.tofu.json` for a tofu or choudoufu root, with `x.tofu` shadowing
|
|
212
|
+
* `x.tf` (chant#4457). The shared lister is `./files.ts`'s `listConfigFiles`.
|
|
213
|
+
*/
|
|
214
|
+
export function listTerraformFiles(dir, binary) {
|
|
215
|
+
return listConfigFiles(dir, binary);
|
|
216
|
+
}
|
|
217
|
+
/** One file's tree in hcl2json's shape: hcl2json for HCL, {@link jsonConfigTree} for Terraform's JSON syntax. */
|
|
218
|
+
export async function parseFileTree(parser, file) {
|
|
219
|
+
if (isJsonConfigFile(file.name))
|
|
220
|
+
return jsonConfigTree(file.source);
|
|
221
|
+
return (await parser.parse(file.name, file.source));
|
|
138
222
|
}
|
|
139
223
|
/** The Terragrunt config files directly under `dir` (`root.hcl`, `terragrunt.hcl`), in filename order like the audit's bundle. */
|
|
140
224
|
export function listTerragruntFiles(dir) {
|
|
@@ -241,7 +325,7 @@ export async function blocksToEntities(files, root, hcl2json, modeOptions, sidec
|
|
|
241
325
|
}
|
|
242
326
|
};
|
|
243
327
|
for (const file of files) {
|
|
244
|
-
const tree =
|
|
328
|
+
const tree = await parseFileTree(parser, file);
|
|
245
329
|
const scan = scanSuppressions(file.name, file.source);
|
|
246
330
|
if (isTerragruntFileName(file.name)) {
|
|
247
331
|
terragruntBlocks(tree, file, scan, add);
|
|
@@ -257,6 +341,10 @@ export async function blocksToEntities(files, root, hcl2json, modeOptions, sidec
|
|
|
257
341
|
oneLabel(tree, "output", OUTPUT_TYPE, (n) => `output.${n}`, file, scan);
|
|
258
342
|
twoLabels(tree, "resource", RESOURCE_TYPE, (t, n) => `${t}.${n}`, file, scan);
|
|
259
343
|
twoLabels(tree, "data", DATA_TYPE, (t, n) => `data.${t}.${n}`, file, scan);
|
|
344
|
+
unlabelled(tree, "moved", MOVED_TYPE, file, scan);
|
|
345
|
+
unlabelled(tree, "import", IMPORT_TYPE, file, scan);
|
|
346
|
+
unlabelled(tree, "removed", REMOVED_TYPE, file, scan);
|
|
347
|
+
oneLabel(tree, "check", CHECK_TYPE, (n) => `check.${n}`, file, scan);
|
|
260
348
|
}
|
|
261
349
|
if (sidecar) {
|
|
262
350
|
const tree = (await parser.parse(sidecar.name, sidecar.source));
|
|
@@ -319,14 +407,15 @@ function terragruntBlocks(tree, file, scan, add) {
|
|
|
319
407
|
}
|
|
320
408
|
}
|
|
321
409
|
/**
|
|
322
|
-
* Parse a root module directory. Reads
|
|
323
|
-
*
|
|
410
|
+
* Parse a root module directory. Reads the configuration files directly under
|
|
411
|
+
* `dir` that `modeOptions.binary` reads ({@link listTerraformFiles}), plus the
|
|
412
|
+
* `estate.chdf.hcl` sidecar beside them when present. Throws whatever the
|
|
324
413
|
* parser throws for malformed HCL; `buildRoots()` is where that becomes a
|
|
325
414
|
* warning.
|
|
326
415
|
*/
|
|
327
416
|
export async function parseTerraformRootDir(dir, root, hcl2json, modeOptions, callers = []) {
|
|
328
417
|
// A child module is a Terraform module, never a Terragrunt unit (#3417).
|
|
329
|
-
const names = [...listTerraformFiles(dir), ...(callers.length === 0 ? listTerragruntFiles(dir) : [])];
|
|
418
|
+
const names = [...listTerraformFiles(dir, modeOptions?.binary), ...(callers.length === 0 ? listTerragruntFiles(dir) : [])];
|
|
330
419
|
const files = names.map((name) => ({
|
|
331
420
|
name,
|
|
332
421
|
source: readFileSync(join(dir, name), "utf-8"),
|
|
@@ -349,7 +438,16 @@ export async function parseTerraformRootDir(dir, root, hcl2json, modeOptions, ca
|
|
|
349
438
|
* the same way `parseTerraformRootDir`'s callers exercise it against files.
|
|
350
439
|
*/
|
|
351
440
|
export async function parseTerraformRootContent(content, root, hcl2json, modeOptions) {
|
|
352
|
-
return blocksToEntities(splitBundleContent(content), root, hcl2json, modeOptions);
|
|
441
|
+
return blocksToEntities(bundleFilesFor(splitBundleContent(content), modeOptions?.binary), root, hcl2json, modeOptions);
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* The files of a joined bundle a root run by `binary` reads: the same set
|
|
445
|
+
* {@link listTerraformFiles} gives for a directory holding them, plus the
|
|
446
|
+
* Terragrunt files, in bundle order (chant#4457).
|
|
447
|
+
*/
|
|
448
|
+
export function bundleFilesFor(files, binary) {
|
|
449
|
+
const keep = new Set(selectConfigFiles(files.map((f) => f.name), binary));
|
|
450
|
+
return files.filter((f) => keep.has(f.name) || isTerragruntFileName(f.name));
|
|
353
451
|
}
|
|
354
452
|
/** The root name an audit of the audited directory itself parses under. */
|
|
355
453
|
export const AUDIT_ROOT_NAME = "audit-root";
|
package/dist/hcl/roots.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roots.d.ts","sourceRoot":"","sources":["../../src/hcl/roots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,OAAO,EAAwB,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAErD,OAAO,EAAyC,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"roots.d.ts","sourceRoot":"","sources":["../../src/hcl/roots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,OAAO,EAAwB,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAErD,OAAO,EAAyC,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAIvF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,2BAA2B;IAC1C,wFAAwF;IACxF,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC;IACrD;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,oBAAoB,CAAC,CAsE/B"}
|
package/dist/hcl/roots.js
CHANGED
|
@@ -31,6 +31,7 @@ import { isResourceDeclarable } from "@intentius/chant/declarable";
|
|
|
31
31
|
import { LIVE_TYPE, parseTerraformRootDir } from "./parse.js";
|
|
32
32
|
import { descendModules, resolveCallModuleType } from "./descend.js";
|
|
33
33
|
import { resolveEntityReferences } from "./edges.js";
|
|
34
|
+
import { resolveInstanceNodes } from "./instances.js";
|
|
34
35
|
/**
|
|
35
36
|
* Parse each configured root into entities keyed `<root>/<address>`, plus its
|
|
36
37
|
* local child modules, keyed `<root>/module.<name>/<address>` (#2112). Roots
|
|
@@ -71,6 +72,10 @@ export async function renderTerraformRoots(opts) {
|
|
|
71
72
|
for (const [key, entity] of descended.entities)
|
|
72
73
|
entities.set(key, entity);
|
|
73
74
|
warnings.push(...descended.warnings);
|
|
75
|
+
// Instance nodes the root's variables let the declared graph count,
|
|
76
|
+
// and those under expanded module calls (#4486). Needs the root and
|
|
77
|
+
// every child scope parsed, so it runs once the descent has.
|
|
78
|
+
await resolveInstanceNodes(entities, name, { dir, ...(root.varFiles ? { varFiles: root.varFiles } : {}), hcl2json: opts.hcl2json });
|
|
74
79
|
// A `live` block or `estate.chdf.hcl` sidecar only takes effect under
|
|
75
80
|
// choudoufu; under any other binary it parses fine but is inert, which
|
|
76
81
|
// is worth a warning rather than silence (#2103).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"suppressions.d.ts","sourceRoot":"","sources":["../../src/hcl/suppressions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAkB,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"suppressions.d.ts","sourceRoot":"","sources":["../../src/hcl/suppressions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAkB,MAAM,oCAAoC,CAAC;AAsF/F,4FAA4F;AAC5F,MAAM,WAAW,QAAQ;IACvB,mFAAmF;IACnF,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACvC,+GAA+G;IAC/G,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAClD,kHAAkH;IAClH,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACtC;AAQD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CA8D3E;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIhF;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,oBAAoB,EAAE,CAAA;CAAE,CAKvH"}
|
package/dist/hcl/suppressions.js
CHANGED
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
* queue slot in file order, same as they're numbered `~2`/`~3` in file order.
|
|
25
25
|
*/
|
|
26
26
|
/** A block header keyword with zero labels (`terraform {`, `locals {`). */
|
|
27
|
-
const BARE_RE = /^\s*(terraform|locals|remote_state)\s*\{/;
|
|
27
|
+
const BARE_RE = /^\s*(terraform|locals|remote_state|moved|import|removed)\s*\{/;
|
|
28
28
|
/** One label (`provider "aws" {`, `module "vpc" {`, `variable "x" {`, `output "x" {`). */
|
|
29
|
-
const ONE_LABEL_RE = /^\s*(provider|module|variable|output|dependency|generate)\s+"([^"]*)"\s*\{/;
|
|
29
|
+
const ONE_LABEL_RE = /^\s*(provider|module|variable|output|check|dependency|generate)\s+"([^"]*)"\s*\{/;
|
|
30
30
|
/** Two labels (`resource "aws_s3_bucket" "assets" {`, `data "aws_ami" "x" {`). */
|
|
31
31
|
const TWO_LABEL_RE = /^\s*(resource|data)\s+"([^"]*)"\s+"([^"]*)"\s*\{/;
|
|
32
32
|
/** A `#`/`//` comment naming one of the three suppression forms. */
|
|
@@ -40,6 +40,12 @@ function addressFor(keyword, labels) {
|
|
|
40
40
|
return "locals";
|
|
41
41
|
case "remote_state":
|
|
42
42
|
return "remote_state";
|
|
43
|
+
case "moved":
|
|
44
|
+
case "import":
|
|
45
|
+
case "removed":
|
|
46
|
+
return keyword;
|
|
47
|
+
case "check":
|
|
48
|
+
return `check.${labels[0]}`;
|
|
43
49
|
case "dependency":
|
|
44
50
|
return `dependency.${labels[0]}`;
|
|
45
51
|
case "generate":
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
export { terraformPlugin } from "./plugin.js";
|
|
2
|
-
export { terraformCapabilityPlugin, terraformApplyCapability, TerraformPlanMovedError, TERRAFORM_VERB_FAMILIES, type TerraformApplyStepInput, type TerraformApplyStepOutput, } from "./components/capability-plugin.js";
|
|
2
|
+
export { terraformCapabilityPlugin, terraformApplyCapability, TerraformPlanMovedError, TERRAFORM_VERB_FAMILIES, choudoufuOutputSource, choudoufuMemberPlannedOutputs, type TerraformApplyStepInput, type TerraformApplyStepOutput, } from "./components/capability-plugin.js";
|
|
3
|
+
export { mergeStates, splitState, splitStates, derivedLineage, COMPOSE_LINEAGE, type SplitState } from "./compose/state-merge.js";
|
|
4
|
+
export { slicePlan as sliceComposedPlan, sliceText, planCounts, composedReads, composedMemberPlans, type PlanCounts, type ComposedMemberRead, type ComposedMemberPlan, type ComposedMemberPlansOptions, } from "./compose/slice.js";
|
|
5
|
+
export { readApplyEvents, memberApply, composedApplyOutcomes, type ApplyEvents, type MemberApply, type MemberApplyOutcome } from "./compose/apply-events.js";
|
|
6
|
+
export { topModule, stripModule, stripChange, moduleChanges } from "./compose/module-address.js";
|
|
7
|
+
export { EstateRun, estateVersionFallback, estateOutcomes, readEstateApplyText, type ComposedRunner, type ComposedRunPlan, type ComposedRunApply, type ComposedMemberOutcome, type EstateRunOptions, } from "./compose/estate.js";
|
|
8
|
+
export { priorStateValues, stateResources, stateOutputs, type StateResourceValues } from "./applied-state.js";
|
|
9
|
+
export { ComposedRun, composedPlanDigest, changesSomething, type ComposedRunOptions, type ComposedRunStage, type StateRunPlan, type StateRunApply, type StateMemberOutcome, type ComposedStateWrite, type ComposeHook, type ComposeHookMoment, } from "./compose/run.js";
|
|
10
|
+
export { terraformPlanShape, type TerraformPlanShapeOptions } from "./plan-shape.js";
|
|
11
|
+
export { terraformLockRows, terraformLockRowsFromPart, terraformDefaultLockGrain, terraformLockGrainRefusal } from "./lock-rows.js";
|
|
12
|
+
export { compositionFor, compositionIfEnabled, composeOff, composeSet, readOrder, moduleNames, fallbackLine, withPlanFailed, identityKey, DEFAULT_COMPOSE_MAX, COMPOSE_STEP_KIND, type Composition, type CompositionInput, type ComposedRead, type ComposeFallback, type ComposeFallbackKind, type ExpectedBinary, } from "./compose.js";
|
|
3
13
|
export { terraformSerializer } from "./serializer.js";
|
|
4
14
|
export { terraformConfigSchema, terraformRootSchema, type TerraformConfig, type TerraformRootConfig, type TerraformConfigNamespace, } from "./config.js";
|
|
5
15
|
export { blocksToEntities, parseTerraformRootContent, parseTerraformRootDir, readLiveSidecarFile, splitBundleContent, terraformEntity, DATA_TYPE, LIVE_SIDECAR_FILENAME, LIVE_TYPE, LOCALS_TYPE, MODULE_TYPE, OUTPUT_TYPE, PROVIDER_TYPE, RESOURCE_TYPE, TERRAFORM_TYPE, VARIABLE_TYPE, type BlockBody, type TerraformEntity, type TerraformFile, type TerraformRootMode, type TerraformRootModeOptions, } from "./hcl/parse.js";
|
|
6
16
|
export { renderTerraformRoots, type TerraformRootsResult } from "./hcl/roots.js";
|
|
7
|
-
export { terraformInit, terraformPlan, terraformApply, terraformShow, choudoufuLivePlan, choudoufuLiveLs, choudoufuLiveCheck, choudoufuAdopt, terraformPinRollout, } from "./op/builders.js";
|
|
17
|
+
export { terraformInit, terraformPlan, terraformApply, terraformShow, choudoufuLivePlan, choudoufuLiveLs, choudoufuLiveCheck, choudoufuAdopt, choudoufuPlanSet, terraformPinRollout, } from "./op/builders.js";
|
|
8
18
|
export { parseAdoptionCommands, readAdoptionLedger, renderAdoptionLedger, type AdoptionCandidate, type AdoptionLedger, type AdoptionMatch, } from "./op/adoption.js";
|
|
9
19
|
export { TerraformApplyOp } from "./composites/terraform-apply-op.js";
|
|
10
20
|
export type { TerraformApplyOpConfig, TerraformApplyOpResources, TerraformGateMode, } from "./composites/terraform-apply-op.js";
|
|
@@ -16,4 +26,5 @@ export { TerraformPinRolloutOp } from "./composites/terraform-pin-rollout-op.js"
|
|
|
16
26
|
export type { TerraformPinRolloutOpConfig, TerraformPinRolloutOpResources } from "./composites/terraform-pin-rollout-op.js";
|
|
17
27
|
export { TERRAFORM_STATE_OWNERSHIP_KEYS } from "./state-ownership.js";
|
|
18
28
|
export { predictTerraformBehaviour, terraformBehaviourRequest, terraformPredictOptionsFrom, TERRAFORM_REFERENCE_CATALOG, type TerraformBehaviourDeps, type TerraformBehaviourEntity, type TerraformBehaviourRequest, type TerraformBehaviourRequestOptions, type TerraformLiveRead, type TerraformPredictOptions, } from "./behaviour/index.js";
|
|
29
|
+
export { terraformExitOf, terraformPlanMoved, type TerraformExitSource } from "./exit-codes.js";
|
|
19
30
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAM3C,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAM3C,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EAEvB,qBAAqB,EACrB,6BAA6B,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,GAC9B,MAAM,gCAAgC,CAAC;AAIxC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC/H,OAAO,EACL,SAAS,IAAI,iBAAiB,EAC9B,SAAS,EACT,UAAU,EACV,aAAa,EACb,mBAAmB,EACnB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,GAChC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,qBAAqB,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC1J,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG9F,OAAO,EACL,SAAS,EACT,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAI3G,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACvB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,kBAAkB,EAAE,KAAK,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAIjI,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,UAAU,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,YAAY,EACZ,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,cAAc,GACpB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAKnD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,GAC9B,MAAM,UAAU,CAAC;AAIlB,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,SAAS,EACT,qBAAqB,EACrB,SAAS,EACT,WAAW,EACX,WAAW,EACX,WAAW,EACX,aAAa,EACb,aAAa,EACb,cAAc,EACd,aAAa,EACb,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,GAC9B,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAK9E,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAKvB,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,YAAY,EACV,sBAAsB,EACtB,yBAAyB,EACzB,iBAAiB,GAClB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,YAAY,EACV,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,iCAAiC,CAAC;AAIzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,YAAY,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAIzG,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,YAAY,EAAE,2BAA2B,EAAE,8BAA8B,EAAE,MAAM,uCAAuC,CAAC;AAKzH,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AAQnE,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,2BAA2B,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,gCAAgC,EACrC,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,GAC7B,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,27 @@ export { terraformPlugin } from "./plugin.js";
|
|
|
4
4
|
// capability-plugin seam. Core loads `terraformCapabilityPlugin` when a
|
|
5
5
|
// project's chant.config lists this lexicon, so a component can deploy a root
|
|
6
6
|
// and a fan-out can run many of them in gated waves.
|
|
7
|
-
export { terraformCapabilityPlugin, terraformApplyCapability, TerraformPlanMovedError, TERRAFORM_VERB_FAMILIES,
|
|
7
|
+
export { terraformCapabilityPlugin, terraformApplyCapability, TerraformPlanMovedError, TERRAFORM_VERB_FAMILIES,
|
|
8
|
+
// #4455: a choudoufu member's outputs, read for core's `member-outputs`.
|
|
9
|
+
choudoufuOutputSource, choudoufuMemberPlannedOutputs, } from "./components/capability-plugin.js";
|
|
10
|
+
// Composed runs (#4442): the working state merged and split, the composed
|
|
11
|
+
// plan cut into one plan per member, and each member's apply outcome.
|
|
12
|
+
export { mergeStates, splitState, splitStates, derivedLineage, COMPOSE_LINEAGE } from "./compose/state-merge.js";
|
|
13
|
+
export { slicePlan as sliceComposedPlan, sliceText, planCounts, composedReads, composedMemberPlans, } from "./compose/slice.js";
|
|
14
|
+
export { readApplyEvents, memberApply, composedApplyOutcomes } from "./compose/apply-events.js";
|
|
15
|
+
export { topModule, stripModule, stripChange, moduleChanges } from "./compose/module-address.js";
|
|
16
|
+
// Composed runs of choudoufu estates (#4445): one plan and one apply, values read from a post-apply plan.
|
|
17
|
+
export { EstateRun, estateVersionFallback, estateOutcomes, readEstateApplyText, } from "./compose/estate.js";
|
|
18
|
+
export { priorStateValues, stateResources, stateOutputs } from "./applied-state.js";
|
|
19
|
+
// Composed runs over roots with state (#4444): one plan and one apply, each
|
|
20
|
+
// state written back whatever happened. Implements `ComposedRunner` (#4445).
|
|
21
|
+
export { ComposedRun, composedPlanDigest, changesSomething, } from "./compose/run.js";
|
|
22
|
+
// The plan shape of a `show -json` plan (#4436), for core's `coveredRound`.
|
|
23
|
+
export { terraformPlanShape } from "./plan-shape.js";
|
|
24
|
+
export { terraformLockRows, terraformLockRowsFromPart, terraformDefaultLockGrain, terraformLockGrainRefusal } from "./lock-rows.js";
|
|
25
|
+
// Composed runs (#4419, #4438): which roots compose, in what order, and why
|
|
26
|
+
// the others fall back. Off unless `terraform.compose.enabled` is set.
|
|
27
|
+
export { compositionFor, compositionIfEnabled, composeOff, composeSet, readOrder, moduleNames, fallbackLine, withPlanFailed, identityKey, DEFAULT_COMPOSE_MAX, COMPOSE_STEP_KIND, } from "./compose.js";
|
|
8
28
|
// Serializer
|
|
9
29
|
export { terraformSerializer } from "./serializer.js";
|
|
10
30
|
// The `terraform` config namespace. Importing this package is what brings the
|
|
@@ -18,7 +38,7 @@ export { renderTerraformRoots } from "./hcl/roots.js";
|
|
|
18
38
|
// Typed Op step builders (#2086). Same names as the activities they wrap, and
|
|
19
39
|
// like k3s's they are opt-in from the lexicon root — the activities themselves
|
|
20
40
|
// are reached by the registry through `./op/activities`, never from here.
|
|
21
|
-
export { terraformInit, terraformPlan, terraformApply, terraformShow, choudoufuLivePlan, choudoufuLiveLs, choudoufuLiveCheck, choudoufuAdopt, terraformPinRollout, } from "./op/builders.js";
|
|
41
|
+
export { terraformInit, terraformPlan, terraformApply, terraformShow, choudoufuLivePlan, choudoufuLiveLs, choudoufuLiveCheck, choudoufuAdopt, choudoufuPlanSet, terraformPinRollout, } from "./op/builders.js";
|
|
22
42
|
// The adoption ledger over `live-plan -json`'s document (#2105). Pure, and
|
|
23
43
|
// exported because the ledger's shape is what a project reading an Op's own
|
|
24
44
|
// result is reading.
|
|
@@ -44,3 +64,5 @@ export { TERRAFORM_STATE_OWNERSHIP_KEYS } from "./state-ownership.js";
|
|
|
44
64
|
// engine is injected, and defaults to core's front (#2495): this lexicon
|
|
45
65
|
// dials none.
|
|
46
66
|
export { predictTerraformBehaviour, terraformBehaviourRequest, terraformPredictOptionsFrom, TERRAFORM_REFERENCE_CATALOG, } from "./behaviour/index.js";
|
|
67
|
+
// terraform, tofu and choudoufu exit statuses on chant's exit-code table (#4553).
|
|
68
|
+
export { terraformExitOf, terraformPlanMoved } from "./exit-codes.js";
|
package/dist/integrity.json
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"algorithm": "sha256",
|
|
3
3
|
"artifacts": {
|
|
4
|
-
"manifest.json": "
|
|
4
|
+
"manifest.json": "af9cf95e7eeffef70272429ce0affe71750ff95b7413c9cedb6f6e7fffb8a7d3",
|
|
5
5
|
"meta.json": "ca3d163bab055381827226140568f3bef7eaac187cebd76878e0b63e9e442356",
|
|
6
6
|
"types/index.d.ts": "022927e6a7b351cc4cf52d5f973f60ccd140e5810e17b32fb8868965aa1db161",
|
|
7
7
|
"rules/plan-before-apply.ts": "7c10245b2c3335253b48ee7d8b075d89f43116bde20313a5d1031b343fef1282",
|
|
8
8
|
"rules/blocks.ts": "d69f65c13b44ff425ccd465644f41c160e07b4c221bd60698d3ec84bf5d9cef8",
|
|
9
9
|
"rules/flat-attributes.ts": "135b4b118cb76ea7ef7a6f2851bb5c80d0907485b86a364c017f66388d0d4cb2",
|
|
10
10
|
"rules/module-source.ts": "9e6e8f47725c3a01ee8b65b7acff6fe902bf5fc638820efdb5721f4c6ea9d95c",
|
|
11
|
+
"rules/record-store.ts": "644ef9785ea9500e8945a181160aff1c4133ad895451413b40d293abc9620066",
|
|
11
12
|
"rules/scope.ts": "a6d327d821f219c98a9d4ae6e6eed6325f3d3edf6286f3622b41be591d190dc8",
|
|
12
13
|
"rules/terragrunt.ts": "1973dbee0933db9593347aa662c71b86f02302c19a28f5ecba23a694ca96641b",
|
|
13
|
-
"rules/tf001.ts": "
|
|
14
|
+
"rules/tf001.ts": "d0c20e9e70403ec79515114cc00dff8c599c372b343ff96beb951bb7b0dbf9ba",
|
|
14
15
|
"rules/tf002.ts": "6759fe5135c85ed9016adbddd90e77743cdf243b261a98deb38e907da83c6d25",
|
|
15
16
|
"rules/tf003.ts": "7b705a08f03769f353910e524bb3f1b4cc844bcb620e240a9063288d0fd60802",
|
|
16
17
|
"rules/tf004.ts": "59ef2108aa561cc6a40cd970fc54604be60872b51a035ed3bc3c53346a31d358",
|
|
@@ -32,7 +33,7 @@
|
|
|
32
33
|
"rules/tf020.ts": "2210815c355e37459c34de0fe622f0b87b78010ee7c444135cf5abf7e048adf7",
|
|
33
34
|
"rules/tf021.ts": "ad3cd813a289437d33da866927697077e7a5b20f3c05341325193d286b57bbd5",
|
|
34
35
|
"rules/tf022.ts": "5466797cd88fd5489f6c5abd1e796d7c5d3d0e977d0e9e043d253f6ecf369cdc",
|
|
35
|
-
"rules/tf024.ts": "
|
|
36
|
+
"rules/tf024.ts": "e82bb9d29fb1645823899fb03fcb0381ca2df11039f02609acee861013278724",
|
|
36
37
|
"rules/tf025.ts": "0c31be3885e940e2b3e9ac8e023067d8d6e2b42c04f628890405c9fc6db7d1ce",
|
|
37
38
|
"rules/tf026.ts": "8cf1e61bc9563aa2d3c149f243ffa02ad4f183eebb672f861cd6c4e6fba1d310",
|
|
38
39
|
"rules/tf027.ts": "0a6062a230cdaa707f82b2353be4b34dff81322d24075d46f732a47bcef15893",
|
|
@@ -54,7 +55,9 @@
|
|
|
54
55
|
"rules/tf043.ts": "c8724a7c0734870101d73e411ed97240c03a01a1133adbf0b445a5083f40faee",
|
|
55
56
|
"rules/tf044.ts": "4e9b17a6080074d2b2e02862a9f1c9c2baf0ef32d4f3b48df1e62d9d8c362008",
|
|
56
57
|
"rules/tf045.ts": "760b1f4f385fbe7a86897efe3078fdeac11bcc9bfb806285d63db50488174b7b",
|
|
57
|
-
"
|
|
58
|
+
"rules/tf046.ts": "d3de9a40366847a832a5ad739aa8c4411249aab36815f7eeb245f9b2fdb91e42",
|
|
59
|
+
"rules/tf047.ts": "bfa86f85c4c5efff297280fc2f15104d6319fa96dfc444a31829fb7353224092",
|
|
60
|
+
"skills/chant-terraform.md": "53dd11c7b289652f92fdaf2c03766abda46d8964e31fe709e8b142ced4f19c50"
|
|
58
61
|
},
|
|
59
|
-
"composite": "
|
|
62
|
+
"composite": "2eb9399e124a118b190f5c350cf23b746058b7b97ed3ef4a3e63e9ac59c9be8b"
|
|
60
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-catalog.d.ts","sourceRoot":"","sources":["../../src/lint/audit-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAa,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AA+D1E,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"audit-catalog.d.ts","sourceRoot":"","sources":["../../src/lint/audit-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAa,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AA+D1E,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CA0f1D,CAAC"}
|
|
@@ -65,9 +65,10 @@ export const terraformAuditCatalog = {
|
|
|
65
65
|
tier: "merge-worthy",
|
|
66
66
|
fixKind: "guidance",
|
|
67
67
|
category: "correctness",
|
|
68
|
-
title: "Live root declares a backend or cloud block, which choudoufu
|
|
69
|
-
remediation: "
|
|
70
|
-
"
|
|
68
|
+
title: "Live root declares a backend or cloud block, which choudoufu ignores",
|
|
69
|
+
remediation: "Keep a `backend` block if other roots read this estate's outputs or the record store should be " +
|
|
70
|
+
"derived from its bucket; declare `record_store` to put records elsewhere. Remove a `cloud` block, " +
|
|
71
|
+
"which choudoufu drops entirely, or swap it for a `backend` block.",
|
|
71
72
|
yamlBased: false,
|
|
72
73
|
},
|
|
73
74
|
TF025: {
|
|
@@ -495,6 +496,29 @@ export const terraformAuditCatalog = {
|
|
|
495
496
|
remediation: 'Set `terragrunt_version_constraint = ">= 1.1.0"` in the root config. Off by default; judged only across the configs scanned.',
|
|
496
497
|
yamlBased: false,
|
|
497
498
|
},
|
|
499
|
+
TF046: {
|
|
500
|
+
id: "TF046",
|
|
501
|
+
tier: "report-only",
|
|
502
|
+
fixKind: "guidance",
|
|
503
|
+
category: "correctness",
|
|
504
|
+
title: "Live root resolves to the local record store in a CI run",
|
|
505
|
+
remediation: "Keep or add a `backend` block of type s3, gcs or azurerm with a literal bucket, so choudoufu " +
|
|
506
|
+
"derives the record store from it, or declare `record_store` in the live block or `estate.chdf.hcl`. " +
|
|
507
|
+
"The rule is off by default and terragucci turns it on for its users; an emulator or test lane " +
|
|
508
|
+
"that keeps the local store on purpose sets `CHANT_ALLOW_LOCAL_RECORD_STORE=1`.",
|
|
509
|
+
yamlBased: false,
|
|
510
|
+
},
|
|
511
|
+
TF047: {
|
|
512
|
+
id: "TF047",
|
|
513
|
+
tier: "report-only",
|
|
514
|
+
fixKind: "guidance",
|
|
515
|
+
category: "correctness",
|
|
516
|
+
title: "Live root pins a module version the known-module catalog has no row for, or one with refusals",
|
|
517
|
+
remediation: "Run `choudoufu live-check` on the root to see each refused site, or pin a version whose examples are clear in " +
|
|
518
|
+
"the static tier of choudoufu's module table (https://intentius.io/choudoufu/aws/compatibility/#modules). " +
|
|
519
|
+
"Off by default; terragucci turns it on for its users.",
|
|
520
|
+
yamlBased: false,
|
|
521
|
+
},
|
|
498
522
|
};
|
|
499
523
|
// Prior art credits, if any, live beside the rules in ./audit-lineage.ts (see
|
|
500
524
|
// core audit/prior-art.ts).
|
|
@@ -76,8 +76,8 @@
|
|
|
76
76
|
*
|
|
77
77
|
* TF024 (#2103, live root declares a backend/cloud block) credits choudoufu's
|
|
78
78
|
* own `RuleStateBackend`, `internal/live/lint/issue.go` of
|
|
79
|
-
* github.com/INTENTIUS/choudoufu: the
|
|
80
|
-
*
|
|
79
|
+
* github.com/INTENTIUS/choudoufu: the same condition, which choudoufu has
|
|
80
|
+
* reported as a warning since its #2213 (the block is ignored, not refused). TF025 (a live
|
|
81
81
|
* root's non-default `terraform.workspace`) has no entry: its workspace half
|
|
82
82
|
* is refused at the CLI argument-parsing layer there
|
|
83
83
|
* (`internal/command/live_mode.go`), not by a dedicated lint rule under
|
|
@@ -110,6 +110,18 @@
|
|
|
110
110
|
* a root's mode, and no surveyed tool has an Op model to read: choudoufu lints
|
|
111
111
|
* HCL, and every tflint ruleset, tfsec/trivy-checks and the Sentinel policies
|
|
112
112
|
* do the same. There is nothing upstream to credit.
|
|
113
|
+
*
|
|
114
|
+
* TF046 (chant#4561, a live root on the local record store in a CI run) has
|
|
115
|
+
* no entry. choudoufu prints where records go on every run and reports a
|
|
116
|
+
* `record_store.note` in `live-check -json` (INTENTIUS/choudoufu#2293), but
|
|
117
|
+
* it has no `internal/live/lint` rule for the local store, and no surveyed
|
|
118
|
+
* tool knows about record stores. TF044 is the nearest neighbour, for a
|
|
119
|
+
* Terragrunt state backend.
|
|
120
|
+
*
|
|
121
|
+
* TF047 (chant#4560, a live root pins a module version the known-module
|
|
122
|
+
* catalog has no row for, or one with refusals) has no entry. Its data is
|
|
123
|
+
* choudoufu's own module table (choudoufu#2292), vendored; no surveyed tool
|
|
124
|
+
* checks a module pin against a measured compatibility table.
|
|
113
125
|
*/
|
|
114
126
|
import type { Lineage } from "@intentius/chant/audit/catalog";
|
|
115
127
|
export declare const terraformAuditLineage: Record<string, Lineage[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-lineage.d.ts","sourceRoot":"","sources":["../../src/lint/audit-lineage.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"audit-lineage.d.ts","sourceRoot":"","sources":["../../src/lint/audit-lineage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4HG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAQ9D,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAob3D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAgDvE,eAAO,MAAM,eAAe,EAAE,cAAc,EA+C3C,CAAC"}
|
|
@@ -42,6 +42,8 @@ import { tf042 } from "./tf042.js";
|
|
|
42
42
|
import { tf043 } from "./tf043.js";
|
|
43
43
|
import { tf044 } from "./tf044.js";
|
|
44
44
|
import { tf045 } from "./tf045.js";
|
|
45
|
+
import { tf046 } from "./tf046.js";
|
|
46
|
+
import { tf047 } from "./tf047.js";
|
|
45
47
|
export const postSynthChecks = [
|
|
46
48
|
tf001,
|
|
47
49
|
tf002,
|
|
@@ -87,4 +89,6 @@ export const postSynthChecks = [
|
|
|
87
89
|
tf043,
|
|
88
90
|
tf044,
|
|
89
91
|
tf045,
|
|
92
|
+
tf046,
|
|
93
|
+
tf047,
|
|
90
94
|
];
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The record store a live root resolves to, read from its HCL the way
|
|
3
|
+
* choudoufu resolves it (INTENTIUS/choudoufu#2293, `internal/configs/live_derive.go`
|
|
4
|
+
* at choudoufu 74ffde956bfd97f44b8ad444424584e23321adc2). Shared by TF024,
|
|
5
|
+
* which names where records go, and TF046, which guards a CI root that ends
|
|
6
|
+
* up on the local store, so the two never disagree.
|
|
7
|
+
*
|
|
8
|
+
* The order is choudoufu's:
|
|
9
|
+
*
|
|
10
|
+
* 1. A `record_store "<kind>"` block in the `live` block or the
|
|
11
|
+
* `estate.chdf.hcl` sidecar always wins (`source: "record_store"`).
|
|
12
|
+
* 2. Otherwise the backend block choudoufu ignores under live gives the store,
|
|
13
|
+
* s3 to s3, gcs to gcs, azurerm to azurerm (`source: "backend"`). s3 and gcs
|
|
14
|
+
* need a literal `bucket`; azurerm needs literal `storage_account_name`,
|
|
15
|
+
* `container_name` and `resource_group_name`. A value passed only with
|
|
16
|
+
* `-backend-config` is not in the configuration, so choudoufu does not see
|
|
17
|
+
* it either.
|
|
18
|
+
* 3. Otherwise the store is local (`source: "implied"`), with `note` saying
|
|
19
|
+
* why a backend that was there was not used.
|
|
20
|
+
*
|
|
21
|
+
* This mirrors `record_store.source` and `record_store.note` in
|
|
22
|
+
* `choudoufu live-check -json`. A literal here is a string hcl2json hands back
|
|
23
|
+
* with no `${...}` in it, the same "not determined" reading the Terragrunt
|
|
24
|
+
* rules use (`./terragrunt.ts`).
|
|
25
|
+
*/
|
|
26
|
+
import type { BlockBody } from "../../hcl/parse.js";
|
|
27
|
+
export type RecordStoreSource = "record_store" | "backend" | "implied";
|
|
28
|
+
export interface ResolvedRecordStore {
|
|
29
|
+
/** `local`, `s3`, `gcs`, `azurerm` or `kubernetes`, or whatever label a `record_store` block carries. */
|
|
30
|
+
kind: string;
|
|
31
|
+
source: RecordStoreSource;
|
|
32
|
+
/** The backend type the store came from, or was not derived from, when there is a backend block. */
|
|
33
|
+
backend?: string;
|
|
34
|
+
/** Why a backend block that was present did not give a store. Set only with `source: "implied"`. */
|
|
35
|
+
note?: string;
|
|
36
|
+
}
|
|
37
|
+
/** Backend types choudoufu derives a record store from (INTENTIUS/choudoufu#2293). */
|
|
38
|
+
export declare const DERIVABLE_BACKENDS: ReadonlySet<string>;
|
|
39
|
+
/**
|
|
40
|
+
* The label of a `record_store "<kind>"` block in a live declaration body, or
|
|
41
|
+
* undefined when it declares none. hcl2json nests the label one level down,
|
|
42
|
+
* as it does for `backend` (see `backendTypes` in `./tf001.ts`).
|
|
43
|
+
*/
|
|
44
|
+
export declare function recordStoreKind(liveBody: BlockBody): string | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Resolve one live root's record store.
|
|
47
|
+
*
|
|
48
|
+
* `terraformBodies` are the bodies of every `terraform` block in the root (a
|
|
49
|
+
* backend can sit in a separate `backend.tf`). `liveBodies` are the root's
|
|
50
|
+
* live declarations: its `live` block and its sidecar, if any. choudoufu
|
|
51
|
+
* refuses a root that has both, so the first `record_store` found is the one.
|
|
52
|
+
*/
|
|
53
|
+
export declare function resolveRecordStore(terraformBodies: readonly BlockBody[], liveBodies: readonly BlockBody[]): ResolvedRecordStore;
|
|
54
|
+
//# sourceMappingURL=record-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-store.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/record-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIjD,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC;AAEvE,MAAM,WAAW,mBAAmB;IAClC,yGAAyG;IACzG,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,iBAAiB,CAAC;IAC1B,oGAAoG;IACpG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oGAAoG;IACpG,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,sFAAsF;AACtF,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAqC,CAAC;AAOzF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAMvE;AAmCD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,SAAS,SAAS,EAAE,EACrC,UAAU,EAAE,SAAS,SAAS,EAAE,GAC/B,mBAAmB,CAcrB"}
|