@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.
Files changed (641) hide show
  1. package/README.md +14 -10
  2. package/dist/__fixtures__/pr-loop/estate.component.d.ts +7 -0
  3. package/dist/__fixtures__/pr-loop/estate.component.d.ts.map +1 -0
  4. package/dist/__fixtures__/pr-loop/estate.component.js +7 -0
  5. package/dist/__fixtures__/report/generate.d.ts +26 -0
  6. package/dist/__fixtures__/report/generate.d.ts.map +1 -0
  7. package/dist/__fixtures__/report/generate.js +58 -0
  8. package/dist/applied-state.d.ts +27 -0
  9. package/dist/applied-state.d.ts.map +1 -0
  10. package/dist/applied-state.js +44 -0
  11. package/dist/backend-config.d.ts +53 -0
  12. package/dist/backend-config.d.ts.map +1 -0
  13. package/dist/backend-config.js +136 -0
  14. package/dist/behaviour/kinds.d.ts.map +1 -1
  15. package/dist/behaviour/kinds.js +4 -0
  16. package/dist/behaviour/predict.d.ts.map +1 -1
  17. package/dist/behaviour/predict.js +6 -2
  18. package/dist/behaviour/reference-catalog.d.ts +16 -5
  19. package/dist/behaviour/reference-catalog.d.ts.map +1 -1
  20. package/dist/behaviour/reference-catalog.js +16 -5
  21. package/dist/behaviour/request.d.ts.map +1 -1
  22. package/dist/behaviour/request.js +3 -2
  23. package/dist/changed-roots.d.ts +6 -4
  24. package/dist/changed-roots.d.ts.map +1 -1
  25. package/dist/changed-roots.js +14 -18
  26. package/dist/ci-setup.d.ts +11 -0
  27. package/dist/ci-setup.d.ts.map +1 -0
  28. package/dist/ci-setup.js +41 -0
  29. package/dist/commands.d.ts.map +1 -1
  30. package/dist/commands.js +4 -3
  31. package/dist/components/capability-plugin.d.ts +105 -9
  32. package/dist/components/capability-plugin.d.ts.map +1 -1
  33. package/dist/components/capability-plugin.js +357 -36
  34. package/dist/components/compose-group.d.ts +145 -0
  35. package/dist/components/compose-group.d.ts.map +1 -0
  36. package/dist/components/compose-group.js +407 -0
  37. package/dist/components/placeholder-preview.d.ts +78 -0
  38. package/dist/components/placeholder-preview.d.ts.map +1 -0
  39. package/dist/components/placeholder-preview.js +254 -0
  40. package/dist/components/release-inputs.d.ts +29 -0
  41. package/dist/components/release-inputs.d.ts.map +1 -0
  42. package/dist/components/release-inputs.js +57 -0
  43. package/dist/components/trace-facts.d.ts +16 -0
  44. package/dist/components/trace-facts.d.ts.map +1 -0
  45. package/dist/components/trace-facts.js +19 -0
  46. package/dist/compose/apply-events.d.ts +46 -0
  47. package/dist/compose/apply-events.d.ts.map +1 -0
  48. package/dist/compose/apply-events.js +77 -0
  49. package/dist/compose/estate.d.ts +194 -0
  50. package/dist/compose/estate.d.ts.map +1 -0
  51. package/dist/compose/estate.js +363 -0
  52. package/dist/compose/hcl.d.ts +99 -0
  53. package/dist/compose/hcl.d.ts.map +1 -0
  54. package/dist/compose/hcl.js +302 -0
  55. package/dist/compose/module-address.d.ts +24 -0
  56. package/dist/compose/module-address.d.ts.map +1 -0
  57. package/dist/compose/module-address.js +43 -0
  58. package/dist/compose/root.d.ts +127 -0
  59. package/dist/compose/root.d.ts.map +1 -0
  60. package/dist/compose/root.js +586 -0
  61. package/dist/compose/run.d.ts +183 -0
  62. package/dist/compose/run.d.ts.map +1 -0
  63. package/dist/compose/run.js +447 -0
  64. package/dist/compose/slice.d.ts +102 -0
  65. package/dist/compose/slice.d.ts.map +1 -0
  66. package/dist/compose/slice.js +249 -0
  67. package/dist/compose/state-address.d.ts +28 -0
  68. package/dist/compose/state-address.d.ts.map +1 -0
  69. package/dist/compose/state-address.js +154 -0
  70. package/dist/compose/state-merge.d.ts +52 -0
  71. package/dist/compose/state-merge.d.ts.map +1 -0
  72. package/dist/compose/state-merge.js +135 -0
  73. package/dist/compose.d.ts +179 -0
  74. package/dist/compose.d.ts.map +1 -0
  75. package/dist/compose.js +482 -0
  76. package/dist/composites/terraform-apply-op.d.ts.map +1 -1
  77. package/dist/composites/terraform-apply-op.js +7 -3
  78. package/dist/cone.d.ts +53 -0
  79. package/dist/cone.d.ts.map +1 -0
  80. package/dist/cone.js +119 -0
  81. package/dist/config.d.ts +59 -13
  82. package/dist/config.d.ts.map +1 -1
  83. package/dist/config.js +43 -9
  84. package/dist/cost-hold.d.ts +27 -0
  85. package/dist/cost-hold.d.ts.map +1 -0
  86. package/dist/cost-hold.js +21 -0
  87. package/dist/describe-resources.d.ts +74 -12
  88. package/dist/describe-resources.d.ts.map +1 -1
  89. package/dist/describe-resources.js +374 -66
  90. package/dist/drift-read.d.ts +33 -0
  91. package/dist/drift-read.d.ts.map +1 -0
  92. package/dist/drift-read.js +243 -0
  93. package/dist/drift-record.d.ts +147 -0
  94. package/dist/drift-record.d.ts.map +1 -0
  95. package/dist/drift-record.js +383 -0
  96. package/dist/drift-rows.d.ts +61 -0
  97. package/dist/drift-rows.d.ts.map +1 -0
  98. package/dist/drift-rows.js +108 -0
  99. package/dist/exit-codes.d.ts +55 -0
  100. package/dist/exit-codes.d.ts.map +1 -0
  101. package/dist/exit-codes.js +48 -0
  102. package/dist/hcl/edges.d.ts.map +1 -1
  103. package/dist/hcl/edges.js +24 -1
  104. package/dist/hcl/files.d.ts +61 -0
  105. package/dist/hcl/files.d.ts.map +1 -0
  106. package/dist/hcl/files.js +221 -0
  107. package/dist/hcl/instances.d.ts +82 -0
  108. package/dist/hcl/instances.d.ts.map +1 -0
  109. package/dist/hcl/instances.js +390 -0
  110. package/dist/hcl/parse.d.ts +81 -9
  111. package/dist/hcl/parse.d.ts.map +1 -1
  112. package/dist/hcl/parse.js +114 -16
  113. package/dist/hcl/roots.d.ts.map +1 -1
  114. package/dist/hcl/roots.js +5 -0
  115. package/dist/hcl/suppressions.d.ts.map +1 -1
  116. package/dist/hcl/suppressions.js +8 -2
  117. package/dist/index.d.ts +13 -2
  118. package/dist/index.d.ts.map +1 -1
  119. package/dist/index.js +24 -2
  120. package/dist/integrity.json +8 -5
  121. package/dist/lint/audit-catalog.d.ts.map +1 -1
  122. package/dist/lint/audit-catalog.js +27 -3
  123. package/dist/lint/audit-lineage.d.ts +14 -2
  124. package/dist/lint/audit-lineage.d.ts.map +1 -1
  125. package/dist/lint/post-synth/index.d.ts.map +1 -1
  126. package/dist/lint/post-synth/index.js +4 -0
  127. package/dist/lint/post-synth/record-store.d.ts +54 -0
  128. package/dist/lint/post-synth/record-store.d.ts.map +1 -0
  129. package/dist/lint/post-synth/record-store.js +104 -0
  130. package/dist/lint/post-synth/tf001.d.ts +2 -2
  131. package/dist/lint/post-synth/tf001.js +2 -2
  132. package/dist/lint/post-synth/tf024.d.ts +35 -11
  133. package/dist/lint/post-synth/tf024.d.ts.map +1 -1
  134. package/dist/lint/post-synth/tf024.js +92 -20
  135. package/dist/lint/post-synth/tf046.d.ts +64 -0
  136. package/dist/lint/post-synth/tf046.d.ts.map +1 -0
  137. package/dist/lint/post-synth/tf046.js +175 -0
  138. package/dist/lint/post-synth/tf047.d.ts +36 -0
  139. package/dist/lint/post-synth/tf047.d.ts.map +1 -0
  140. package/dist/lint/post-synth/tf047.js +94 -0
  141. package/dist/live-plan-reasons.d.ts +21 -0
  142. package/dist/live-plan-reasons.d.ts.map +1 -0
  143. package/dist/live-plan-reasons.js +47 -0
  144. package/dist/lock-rows.d.ts +36 -0
  145. package/dist/lock-rows.d.ts.map +1 -0
  146. package/dist/lock-rows.js +60 -0
  147. package/dist/lock-timeout.d.ts +22 -0
  148. package/dist/lock-timeout.d.ts.map +1 -0
  149. package/dist/lock-timeout.js +32 -0
  150. package/dist/lsp/option-keys.d.ts.map +1 -1
  151. package/dist/lsp/option-keys.js +2 -0
  152. package/dist/manifest.json +1 -1
  153. package/dist/module-catalog/index.d.ts +69 -0
  154. package/dist/module-catalog/index.d.ts.map +1 -0
  155. package/dist/module-catalog/index.js +110 -0
  156. package/dist/module-catalog/refresh-cli.d.ts +4 -0
  157. package/dist/module-catalog/refresh-cli.d.ts.map +1 -0
  158. package/dist/module-catalog/refresh-cli.js +64 -0
  159. package/dist/module-catalog/static-tier.d.ts +6 -0
  160. package/dist/module-catalog/static-tier.d.ts.map +1 -0
  161. package/dist/module-catalog/static-tier.js +1650 -0
  162. package/dist/module-catalog/types.d.ts +65 -0
  163. package/dist/module-catalog/types.d.ts.map +1 -0
  164. package/dist/module-catalog/types.js +33 -0
  165. package/dist/okf/index.md +3 -1
  166. package/dist/okf/rules/TF024.md +2 -2
  167. package/dist/okf/rules/TF046.md +11 -0
  168. package/dist/okf/rules/TF047.md +11 -0
  169. package/dist/op/activities/index.d.ts +6 -2
  170. package/dist/op/activities/index.d.ts.map +1 -1
  171. package/dist/op/activities/index.js +5 -1
  172. package/dist/op/activities/live-detect.d.ts +4 -3
  173. package/dist/op/activities/live-detect.d.ts.map +1 -1
  174. package/dist/op/activities/live-detect.js +57 -32
  175. package/dist/op/activities/pin-rollout.d.ts +2 -0
  176. package/dist/op/activities/pin-rollout.d.ts.map +1 -1
  177. package/dist/op/activities/pin-rollout.js +1 -0
  178. package/dist/op/activities/terraform.d.ts +182 -5
  179. package/dist/op/activities/terraform.d.ts.map +1 -1
  180. package/dist/op/activities/terraform.js +224 -24
  181. package/dist/op/activity-contracts.d.ts +27 -0
  182. package/dist/op/activity-contracts.d.ts.map +1 -1
  183. package/dist/op/activity-contracts.js +19 -1
  184. package/dist/op/builders.d.ts +7 -1
  185. package/dist/op/builders.d.ts.map +1 -1
  186. package/dist/op/builders.js +9 -0
  187. package/dist/pin/consumers.d.ts +35 -0
  188. package/dist/pin/consumers.d.ts.map +1 -0
  189. package/dist/pin/consumers.js +70 -0
  190. package/dist/pin/edit.d.ts.map +1 -1
  191. package/dist/pin/edit.js +35 -0
  192. package/dist/pin/rollout.d.ts +2 -0
  193. package/dist/pin/rollout.d.ts.map +1 -1
  194. package/dist/pin/rollout.js +14 -11
  195. package/dist/plan-shape.d.ts +30 -0
  196. package/dist/plan-shape.d.ts.map +1 -0
  197. package/dist/plan-shape.js +125 -0
  198. package/dist/plugin.d.ts.map +1 -1
  199. package/dist/plugin.js +37 -18
  200. package/dist/registry/address.d.ts +63 -0
  201. package/dist/registry/address.d.ts.map +1 -0
  202. package/dist/registry/address.js +65 -0
  203. package/dist/registry/catalog-read.d.ts +14 -0
  204. package/dist/registry/catalog-read.d.ts.map +1 -0
  205. package/dist/registry/catalog-read.js +58 -0
  206. package/dist/registry/deprecated.d.ts +37 -0
  207. package/dist/registry/deprecated.d.ts.map +1 -0
  208. package/dist/registry/deprecated.js +43 -0
  209. package/dist/registry/docs.d.ts +96 -0
  210. package/dist/registry/docs.d.ts.map +1 -0
  211. package/dist/registry/docs.js +210 -0
  212. package/dist/registry/edge/edge.d.ts +46 -0
  213. package/dist/registry/edge/edge.d.ts.map +1 -0
  214. package/dist/registry/edge/edge.js +194 -0
  215. package/dist/registry/edge/index.d.ts +11 -0
  216. package/dist/registry/edge/index.d.ts.map +1 -0
  217. package/dist/registry/edge/index.js +10 -0
  218. package/dist/registry/edge/lambda-edge.d.ts +76 -0
  219. package/dist/registry/edge/lambda-edge.d.ts.map +1 -0
  220. package/dist/registry/edge/lambda-edge.js +95 -0
  221. package/dist/registry/edge/sigv4-web.d.ts +33 -0
  222. package/dist/registry/edge/sigv4-web.d.ts.map +1 -0
  223. package/dist/registry/edge/sigv4-web.js +56 -0
  224. package/dist/registry/edge/token-source.d.ts +73 -0
  225. package/dist/registry/edge/token-source.d.ts.map +1 -0
  226. package/dist/registry/edge/token-source.js +115 -0
  227. package/dist/registry/edge/worker.d.ts +45 -0
  228. package/dist/registry/edge/worker.d.ts.map +1 -0
  229. package/dist/registry/edge/worker.js +26 -0
  230. package/dist/registry/handler.d.ts +25 -0
  231. package/dist/registry/handler.d.ts.map +1 -0
  232. package/dist/registry/handler.js +75 -0
  233. package/dist/registry/headers-file.d.ts +21 -0
  234. package/dist/registry/headers-file.d.ts.map +1 -0
  235. package/dist/registry/headers-file.js +57 -0
  236. package/dist/registry/index.d.ts +31 -0
  237. package/dist/registry/index.d.ts.map +1 -0
  238. package/dist/registry/index.js +30 -0
  239. package/dist/registry/mirror-paths.d.ts +9 -0
  240. package/dist/registry/mirror-paths.d.ts.map +1 -0
  241. package/dist/registry/mirror-paths.js +8 -0
  242. package/dist/registry/mirror.d.ts +130 -0
  243. package/dist/registry/mirror.d.ts.map +1 -0
  244. package/dist/registry/mirror.js +319 -0
  245. package/dist/registry/proxies.d.ts +73 -0
  246. package/dist/registry/proxies.d.ts.map +1 -0
  247. package/dist/registry/proxies.js +111 -0
  248. package/dist/registry/reader.d.ts +57 -0
  249. package/dist/registry/reader.d.ts.map +1 -0
  250. package/dist/registry/reader.js +198 -0
  251. package/dist/registry/semver.d.ts +16 -0
  252. package/dist/registry/semver.d.ts.map +1 -0
  253. package/dist/registry/semver.js +24 -0
  254. package/dist/registry/serve.d.ts +24 -0
  255. package/dist/registry/serve.d.ts.map +1 -0
  256. package/dist/registry/serve.js +64 -0
  257. package/dist/registry/source-forms.d.ts +79 -0
  258. package/dist/registry/source-forms.d.ts.map +1 -0
  259. package/dist/registry/source-forms.js +202 -0
  260. package/dist/registry/targets/artifactory.d.ts +28 -0
  261. package/dist/registry/targets/artifactory.d.ts.map +1 -0
  262. package/dist/registry/targets/artifactory.js +206 -0
  263. package/dist/registry/targets/fake-artifactory.d.ts +30 -0
  264. package/dist/registry/targets/fake-artifactory.d.ts.map +1 -0
  265. package/dist/registry/targets/fake-artifactory.js +142 -0
  266. package/dist/registry/targets/fake-gitlab.d.ts +39 -0
  267. package/dist/registry/targets/fake-gitlab.d.ts.map +1 -0
  268. package/dist/registry/targets/fake-gitlab.js +136 -0
  269. package/dist/registry/targets/fake-hcp.d.ts +50 -0
  270. package/dist/registry/targets/fake-hcp.d.ts.map +1 -0
  271. package/dist/registry/targets/fake-hcp.js +202 -0
  272. package/dist/registry/targets/fake-http.d.ts +31 -0
  273. package/dist/registry/targets/fake-http.d.ts.map +1 -0
  274. package/dist/registry/targets/fake-http.js +87 -0
  275. package/dist/registry/targets/fake-nexus.d.ts +27 -0
  276. package/dist/registry/targets/fake-nexus.d.ts.map +1 -0
  277. package/dist/registry/targets/fake-nexus.js +137 -0
  278. package/dist/registry/targets/gitlab.d.ts +53 -0
  279. package/dist/registry/targets/gitlab.d.ts.map +1 -0
  280. package/dist/registry/targets/gitlab.js +187 -0
  281. package/dist/registry/targets/hcp.d.ts +29 -0
  282. package/dist/registry/targets/hcp.d.ts.map +1 -0
  283. package/dist/registry/targets/hcp.js +310 -0
  284. package/dist/registry/targets/hosted.d.ts +62 -0
  285. package/dist/registry/targets/hosted.d.ts.map +1 -0
  286. package/dist/registry/targets/hosted.js +74 -0
  287. package/dist/registry/targets/index.d.ts +18 -0
  288. package/dist/registry/targets/index.d.ts.map +1 -0
  289. package/dist/registry/targets/index.js +17 -0
  290. package/dist/registry/targets/module-target.d.ts +68 -0
  291. package/dist/registry/targets/module-target.d.ts.map +1 -0
  292. package/dist/registry/targets/module-target.js +63 -0
  293. package/dist/registry/targets/nexus.d.ts +43 -0
  294. package/dist/registry/targets/nexus.d.ts.map +1 -0
  295. package/dist/registry/targets/nexus.js +250 -0
  296. package/dist/registry/targets/zip.d.ts +55 -0
  297. package/dist/registry/targets/zip.d.ts.map +1 -0
  298. package/dist/registry/targets/zip.js +278 -0
  299. package/dist/registry/writer.d.ts +101 -0
  300. package/dist/registry/writer.d.ts.map +1 -0
  301. package/dist/registry/writer.js +109 -0
  302. package/dist/report.d.ts +15 -6
  303. package/dist/report.d.ts.map +1 -1
  304. package/dist/report.js +28 -55
  305. package/dist/rules/record-store.ts +122 -0
  306. package/dist/rules/tf001.ts +2 -2
  307. package/dist/rules/tf024.ts +105 -22
  308. package/dist/rules/tf046.ts +204 -0
  309. package/dist/rules/tf047.ts +114 -0
  310. package/dist/skills/chant-terraform.md +1 -1
  311. package/dist/state/azure-blob.d.ts +9 -0
  312. package/dist/state/azure-blob.d.ts.map +1 -0
  313. package/dist/state/azure-blob.js +8 -0
  314. package/dist/state/backend.d.ts +158 -0
  315. package/dist/state/backend.d.ts.map +1 -0
  316. package/dist/state/backend.js +406 -0
  317. package/dist/state/exec.d.ts +39 -0
  318. package/dist/state/exec.d.ts.map +1 -0
  319. package/dist/state/exec.js +80 -0
  320. package/dist/state/gcs.d.ts +8 -0
  321. package/dist/state/gcs.d.ts.map +1 -0
  322. package/dist/state/gcs.js +7 -0
  323. package/dist/state/index.d.ts +15 -0
  324. package/dist/state/index.d.ts.map +1 -0
  325. package/dist/state/index.js +14 -0
  326. package/dist/state/locks.d.ts +105 -0
  327. package/dist/state/locks.d.ts.map +1 -0
  328. package/dist/state/locks.js +130 -0
  329. package/dist/state/object-store.d.ts +8 -0
  330. package/dist/state/object-store.d.ts.map +1 -0
  331. package/dist/state/object-store.js +7 -0
  332. package/dist/state/root-states.d.ts +131 -0
  333. package/dist/state/root-states.d.ts.map +1 -0
  334. package/dist/state/root-states.js +241 -0
  335. package/dist/state/s3.d.ts +21 -0
  336. package/dist/state/s3.d.ts.map +1 -0
  337. package/dist/state/s3.js +19 -0
  338. package/dist/state/store.d.ts +51 -0
  339. package/dist/state/store.d.ts.map +1 -0
  340. package/dist/state/store.js +185 -0
  341. package/dist/state-ops.d.ts +255 -0
  342. package/dist/state-ops.d.ts.map +1 -0
  343. package/dist/state-ops.js +305 -0
  344. package/dist/state-reads.d.ts +57 -0
  345. package/dist/state-reads.d.ts.map +1 -0
  346. package/dist/state-reads.js +104 -0
  347. package/dist/terragrunt/affected.d.ts.map +1 -1
  348. package/dist/terragrunt/affected.js +2 -1
  349. package/dist/used-sources.d.ts +54 -0
  350. package/dist/used-sources.d.ts.map +1 -0
  351. package/dist/used-sources.js +157 -0
  352. package/package.json +24 -4
  353. package/src/__fixtures__/ACCEPTANCE.md +69 -7
  354. package/src/__fixtures__/compose/apply-failed-in-app.jsonl +12 -0
  355. package/src/__fixtures__/compose/state-app.json +66 -0
  356. package/src/__fixtures__/compose/state-edge.json +40 -0
  357. package/src/__fixtures__/compose/state-net.json +58 -0
  358. package/src/__fixtures__/compose/three-app.plan.json +184 -0
  359. package/src/__fixtures__/compose/three-composed.plan.json +509 -0
  360. package/src/__fixtures__/compose/three-edge.plan.json +144 -0
  361. package/src/__fixtures__/compose/three-net.plan.json +174 -0
  362. package/src/__fixtures__/compose/unknown-composed.plan.json +228 -0
  363. package/src/__fixtures__/compose/working-after-apply.json +145 -0
  364. package/src/__fixtures__/config-blocks/app/main.tf +61 -0
  365. package/src/__fixtures__/config-blocks/app/modules/network/main.tf +4 -0
  366. package/src/__fixtures__/config-blocks/app-json/main.tf.json +39 -0
  367. package/src/__fixtures__/config-files/shadow/main.tf +3 -0
  368. package/src/__fixtures__/config-files/shadow/main.tofu +3 -0
  369. package/src/__fixtures__/config-files/shadow/other.tf +3 -0
  370. package/src/__fixtures__/config-files/tf/main.tf +11 -0
  371. package/src/__fixtures__/config-files/tf-json/main.tf.json +18 -0
  372. package/src/__fixtures__/config-files/tofu/main.tofu +11 -0
  373. package/src/__fixtures__/config-files/tofu-json/main.tofu.json +18 -0
  374. package/src/__fixtures__/config-files/tofu-only/main.tofu +3 -0
  375. package/src/__fixtures__/drift-record/README.md +16 -0
  376. package/src/__fixtures__/drift-record/live-plan-sections.json +27 -0
  377. package/src/__fixtures__/drift-rows/live-root-plan.json +70 -0
  378. package/src/__fixtures__/drift-rows/refresh-plan.json +61 -0
  379. package/src/__fixtures__/instance-forms/app/main.tf +110 -0
  380. package/src/__fixtures__/instance-forms/app/modules/svc/main.tf +3 -0
  381. package/src/__fixtures__/instance-vars/app/main.tf +52 -0
  382. package/src/__fixtures__/instance-vars/app/modules/app/main.tf +12 -0
  383. package/src/__fixtures__/instance-vars/app/modules/edge/main.tf +3 -0
  384. package/src/__fixtures__/instance-vars/app/terraform.tfvars +1 -0
  385. package/src/__fixtures__/live-module-keyed/live-graph.json +259 -0
  386. package/src/__fixtures__/live-module-keyed/live-plan.json +87 -0
  387. package/src/__fixtures__/live-module-keyed/root/estate.chdf.hcl +1 -0
  388. package/src/__fixtures__/live-module-keyed/root/main.tf +21 -0
  389. package/src/__fixtures__/live-module-keyed/root/modules/app/main.tf +17 -0
  390. package/src/__fixtures__/live-module-keyed/root/modules/edge/main.tf +7 -0
  391. package/src/__fixtures__/live-module-keyed/root/versions.tf +30 -0
  392. package/src/__fixtures__/live-module-keyed/show-state.json +146 -0
  393. package/src/__fixtures__/pr-loop/README.md +50 -0
  394. package/src/__fixtures__/pr-loop/chant.config.json +13 -0
  395. package/src/__fixtures__/pr-loop/estate.component.ts +10 -0
  396. package/src/__fixtures__/pr-loop/roots/a/main.tf +11 -0
  397. package/src/__fixtures__/pr-loop/roots/app/main.tf +19 -0
  398. package/src/__fixtures__/pr-loop/roots/b/main.tf +7 -0
  399. package/src/__fixtures__/pr-loop/roots/dns/main.tf +3 -0
  400. package/src/__fixtures__/pr-loop/roots/net/main.tf +7 -0
  401. package/src/__fixtures__/report/applied.show.json +51 -0
  402. package/src/__fixtures__/report/generate.ts +63 -0
  403. package/src/__fixtures__/report/plan.show.json +200 -0
  404. package/src/__fixtures__/report/tf-apply/change-set.json +170 -0
  405. package/src/__fixtures__/report/tf-apply/report.json +338 -0
  406. package/src/__fixtures__/report/tf-plan/change-set.json +170 -0
  407. package/src/__fixtures__/report/tf-plan/report.json +320 -0
  408. package/src/__fixtures__/three-cloud-azure.graph.json +290 -0
  409. package/src/__fixtures__/used-sources/root/extra.tofu +1 -0
  410. package/src/__fixtures__/used-sources/root/main.tf +31 -0
  411. package/src/__fixtures__/used-sources/root/modules/net/main.tf +14 -0
  412. package/src/__fixtures__/used-sources/root/modules/net/versions.tf.json +7 -0
  413. package/src/__fixtures__/used-sources/unit/terragrunt.hcl +3 -0
  414. package/src/applied-state.ts +52 -0
  415. package/src/backend-config.test.ts +105 -0
  416. package/src/backend-config.ts +133 -0
  417. package/src/behaviour/kinds.ts +4 -0
  418. package/src/behaviour/predict.ts +5 -2
  419. package/src/behaviour/reference-catalog.plugin.test.ts +65 -0
  420. package/src/behaviour/reference-catalog.ts +16 -5
  421. package/src/behaviour/request.ts +3 -2
  422. package/src/change-set-instances.test.ts +98 -0
  423. package/src/changed-roots.ts +14 -16
  424. package/src/ci-setup.ts +42 -0
  425. package/src/commands.ts +4 -3
  426. package/src/components/capability-plugin.test.ts +198 -19
  427. package/src/components/capability-plugin.ts +383 -35
  428. package/src/components/change-set-graph.e2e.test.ts +11 -5
  429. package/src/components/compose-group.test.ts +486 -0
  430. package/src/components/compose-group.ts +489 -0
  431. package/src/components/demo-composed-roots.e2e.test.ts +440 -0
  432. package/src/components/member-outputs.test.ts +76 -0
  433. package/src/components/placeholder-preview.test.ts +147 -0
  434. package/src/components/placeholder-preview.ts +257 -0
  435. package/src/components/pr-loop-compose.tofu.e2e.test.ts +363 -0
  436. package/src/components/pr-loop.tofu.test.ts +113 -57
  437. package/src/components/release-inputs.ts +69 -0
  438. package/src/components/trace-facts.test.ts +21 -0
  439. package/src/components/trace-facts.ts +27 -0
  440. package/src/compose/apply-events.test.ts +62 -0
  441. package/src/compose/apply-events.ts +100 -0
  442. package/src/compose/estate.choudoufu.e2e.test.ts +112 -0
  443. package/src/compose/estate.test.ts +421 -0
  444. package/src/compose/estate.ts +443 -0
  445. package/src/compose/hcl.ts +311 -0
  446. package/src/compose/module-address.ts +49 -0
  447. package/src/compose/root.test.ts +416 -0
  448. package/src/compose/root.ts +592 -0
  449. package/src/compose/run.test.ts +440 -0
  450. package/src/compose/run.tofu.test.ts +176 -0
  451. package/src/compose/run.ts +527 -0
  452. package/src/compose/slice.test.ts +184 -0
  453. package/src/compose/slice.ts +290 -0
  454. package/src/compose/state-address.ts +157 -0
  455. package/src/compose/state-merge.test.ts +131 -0
  456. package/src/compose/state-merge.ts +148 -0
  457. package/src/compose.test.ts +248 -0
  458. package/src/compose.ts +627 -0
  459. package/src/composites/terraform-apply-op.test.ts +9 -0
  460. package/src/composites/terraform-apply-op.ts +7 -3
  461. package/src/cone.ts +138 -0
  462. package/src/config-file-listers.test.ts +265 -0
  463. package/src/config.ts +44 -9
  464. package/src/cost-hold.ts +29 -0
  465. package/src/describe-resources.engine-facts.test.ts +411 -0
  466. package/src/describe-resources.live-module-keyed.test.ts +290 -0
  467. package/src/describe-resources.ts +416 -70
  468. package/src/drift-read.ts +284 -0
  469. package/src/drift-record.test.ts +223 -0
  470. package/src/drift-record.ts +455 -0
  471. package/src/drift-rows.test.ts +135 -0
  472. package/src/drift-rows.ts +137 -0
  473. package/src/exit-codes.test.ts +23 -0
  474. package/src/exit-codes.ts +59 -0
  475. package/src/hcl/config-blocks.test.ts +174 -0
  476. package/src/hcl/edges.ts +21 -1
  477. package/src/hcl/files.ts +234 -0
  478. package/src/hcl/instance-forms.test.ts +94 -0
  479. package/src/hcl/instances.test.ts +137 -0
  480. package/src/hcl/instances.ts +422 -0
  481. package/src/hcl/parse.test.ts +139 -1
  482. package/src/hcl/parse.ts +149 -16
  483. package/src/hcl/roots.ts +6 -0
  484. package/src/hcl/suppressions.ts +8 -2
  485. package/src/index.ts +79 -0
  486. package/src/lint/audit-catalog.ts +29 -3
  487. package/src/lint/audit-lineage.ts +14 -2
  488. package/src/lint/post-synth/fixtures/TF024/live-with-record-store/main.tf +18 -0
  489. package/src/lint/post-synth/fixtures/TF024/sidecar-with-backend/estate.chdf.hcl +1 -0
  490. package/src/lint/post-synth/fixtures/TF024/sidecar-with-backend/main.tf +10 -0
  491. package/src/lint/post-synth/fixtures/TF046/azurerm-no-resource-group/main.tf +15 -0
  492. package/src/lint/post-synth/fixtures/TF046/backend-config-only/main.tf +14 -0
  493. package/src/lint/post-synth/fixtures/TF046/derived-s3/backend.tf +7 -0
  494. package/src/lint/post-synth/fixtures/TF046/derived-s3/main.tf +9 -0
  495. package/src/lint/post-synth/fixtures/TF046/explicit-local/main.tf +16 -0
  496. package/src/lint/post-synth/fixtures/TF046/explicit-s3-beside-local-backend/main.tf +15 -0
  497. package/src/lint/post-synth/fixtures/TF046/implied-local/main.tf +9 -0
  498. package/src/lint/post-synth/fixtures/TF046/sidecar-implied/estate.chdf.hcl +1 -0
  499. package/src/lint/post-synth/fixtures/TF046/sidecar-implied/main.tf +5 -0
  500. package/src/lint/post-synth/fixtures/TF047/clear/main.tf +12 -0
  501. package/src/lint/post-synth/fixtures/TF047/refused/main.tf +12 -0
  502. package/src/lint/post-synth/fixtures/TF047/unknown-module/main.tf +12 -0
  503. package/src/lint/post-synth/fixtures/TF047/unknown-version/main.tf +12 -0
  504. package/src/lint/post-synth/index.ts +4 -0
  505. package/src/lint/post-synth/record-store.ts +122 -0
  506. package/src/lint/post-synth/tf001.ts +2 -2
  507. package/src/lint/post-synth/tf024.test.ts +26 -5
  508. package/src/lint/post-synth/tf024.ts +105 -22
  509. package/src/lint/post-synth/tf046.test.ts +137 -0
  510. package/src/lint/post-synth/tf046.ts +204 -0
  511. package/src/lint/post-synth/tf047.test.ts +56 -0
  512. package/src/lint/post-synth/tf047.ts +114 -0
  513. package/src/live-plan-reasons.ts +54 -0
  514. package/src/lock-rows.test.ts +70 -0
  515. package/src/lock-rows.ts +82 -0
  516. package/src/lock-timeout.ts +34 -0
  517. package/src/lsp/completions.test.ts +1 -1
  518. package/src/lsp/option-keys.ts +2 -0
  519. package/src/module-catalog/index.test.ts +93 -0
  520. package/src/module-catalog/index.ts +159 -0
  521. package/src/module-catalog/refresh-cli.ts +68 -0
  522. package/src/module-catalog/static-tier.ts +1659 -0
  523. package/src/module-catalog/types.ts +88 -0
  524. package/src/op/activities/choudoufu-plan-set-op.test.ts +111 -0
  525. package/src/op/activities/index.ts +9 -0
  526. package/src/op/activities/live-detect.ts +55 -26
  527. package/src/op/activities/pin-rollout.ts +3 -0
  528. package/src/op/activities/registry.test.ts +2 -1
  529. package/src/op/activities/terraform.test.ts +55 -0
  530. package/src/op/activities/terraform.ts +312 -27
  531. package/src/op/activity-contracts.test.ts +1 -0
  532. package/src/op/activity-contracts.ts +24 -1
  533. package/src/op/builders.ts +14 -0
  534. package/src/op-wave-step.test.ts +109 -0
  535. package/src/pin/__fixtures__/consumers/live/dev/main.tf +4 -0
  536. package/src/pin/__fixtures__/consumers/live/prod/main.tf +21 -0
  537. package/src/pin/__fixtures__/consumers/units/vpc/terragrunt.hcl +7 -0
  538. package/src/pin/bundle.test.ts +2 -0
  539. package/src/pin/consumers.test.ts +57 -0
  540. package/src/pin/consumers.ts +95 -0
  541. package/src/pin/edit.ts +30 -0
  542. package/src/pin/rollout.ts +16 -11
  543. package/src/plan-shape.test.ts +148 -0
  544. package/src/plan-shape.ts +128 -0
  545. package/src/plugin.ts +39 -19
  546. package/src/registry/__fixtures__/docs/documented/.terraform-docs.yml +3 -0
  547. package/src/registry/__fixtures__/docs/documented/README.md +1 -0
  548. package/src/registry/__fixtures__/docs/documented/main.tf +8 -0
  549. package/src/registry/__fixtures__/docs/json/main.tf.json +14 -0
  550. package/src/registry/__fixtures__/docs/vpc/README.md +3 -0
  551. package/src/registry/__fixtures__/docs/vpc/examples/complete/main.tf +5 -0
  552. package/src/registry/__fixtures__/docs/vpc/examples/simple/README.md +1 -0
  553. package/src/registry/__fixtures__/docs/vpc/examples/simple/main.tf +4 -0
  554. package/src/registry/__fixtures__/docs/vpc/main.tf +14 -0
  555. package/src/registry/__fixtures__/docs/vpc/outputs.tf +9 -0
  556. package/src/registry/__fixtures__/docs/vpc/variables.tf +16 -0
  557. package/src/registry/__fixtures__/proxied-root/main.tf +12 -0
  558. package/src/registry/address.ts +100 -0
  559. package/src/registry/catalog-read.ts +56 -0
  560. package/src/registry/deprecated.test.ts +139 -0
  561. package/src/registry/deprecated.ts +76 -0
  562. package/src/registry/docs.test.ts +140 -0
  563. package/src/registry/docs.ts +299 -0
  564. package/src/registry/edge/bundle.test.ts +50 -0
  565. package/src/registry/edge/edge.test.ts +176 -0
  566. package/src/registry/edge/edge.ts +211 -0
  567. package/src/registry/edge/index.ts +10 -0
  568. package/src/registry/edge/lambda-edge.ts +127 -0
  569. package/src/registry/edge/sigv4-web.ts +79 -0
  570. package/src/registry/edge/token-source.test.ts +258 -0
  571. package/src/registry/edge/token-source.ts +169 -0
  572. package/src/registry/edge/worker.ts +61 -0
  573. package/src/registry/handler.ts +89 -0
  574. package/src/registry/headers-file.ts +61 -0
  575. package/src/registry/index.ts +31 -0
  576. package/src/registry/mirror-paths.ts +10 -0
  577. package/src/registry/mirror.test.ts +198 -0
  578. package/src/registry/mirror.ts +395 -0
  579. package/src/registry/proxies.test.ts +153 -0
  580. package/src/registry/proxies.ts +132 -0
  581. package/src/registry/reader.ts +225 -0
  582. package/src/registry/registry.test.ts +262 -0
  583. package/src/registry/semver.ts +34 -0
  584. package/src/registry/serve.ts +82 -0
  585. package/src/registry/source-forms.test.ts +87 -0
  586. package/src/registry/source-forms.ts +216 -0
  587. package/src/registry/targets/artifactory.test.ts +248 -0
  588. package/src/registry/targets/artifactory.ts +257 -0
  589. package/src/registry/targets/fake-artifactory.ts +158 -0
  590. package/src/registry/targets/fake-gitlab.ts +161 -0
  591. package/src/registry/targets/fake-hcp.ts +233 -0
  592. package/src/registry/targets/fake-http.ts +97 -0
  593. package/src/registry/targets/fake-nexus.ts +152 -0
  594. package/src/registry/targets/gitlab.test.ts +208 -0
  595. package/src/registry/targets/gitlab.ts +223 -0
  596. package/src/registry/targets/hcp.test.ts +230 -0
  597. package/src/registry/targets/hcp.ts +360 -0
  598. package/src/registry/targets/hosted.ts +117 -0
  599. package/src/registry/targets/index.ts +17 -0
  600. package/src/registry/targets/module-target.ts +131 -0
  601. package/src/registry/targets/nexus.test.ts +220 -0
  602. package/src/registry/targets/nexus.ts +314 -0
  603. package/src/registry/targets/zip.test.ts +65 -0
  604. package/src/registry/targets/zip.ts +287 -0
  605. package/src/registry/writer.ts +155 -0
  606. package/src/report.test.ts +82 -1
  607. package/src/report.ts +31 -54
  608. package/src/signal-only-root.test.ts +72 -0
  609. package/src/skills/chant-terraform.md +1 -1
  610. package/src/state/azure-blob.ts +8 -0
  611. package/src/state/backend-verdict.test.ts +187 -0
  612. package/src/state/backend.test.ts +127 -0
  613. package/src/state/backend.ts +488 -0
  614. package/src/state/exec.ts +111 -0
  615. package/src/state/gcs.ts +7 -0
  616. package/src/state/index.ts +15 -0
  617. package/src/state/locks.test.ts +84 -0
  618. package/src/state/locks.ts +201 -0
  619. package/src/state/object-store.ts +7 -0
  620. package/src/state/root-states-floci.e2e.test.ts +66 -0
  621. package/src/state/root-states.test.ts +462 -0
  622. package/src/state/root-states.ts +309 -0
  623. package/src/state/s3.ts +21 -0
  624. package/src/state/store.ts +225 -0
  625. package/src/state-ops.test.ts +182 -0
  626. package/src/state-ops.ts +462 -0
  627. package/src/state-reads.ts +116 -0
  628. package/src/terragrunt/affected.ts +2 -1
  629. package/src/used-sources.test.ts +75 -0
  630. package/src/used-sources.ts +204 -0
  631. package/src/workspace-kinds.test.ts +4 -17
  632. package/workspace-kinds.json +1 -24
  633. package/dist/workspace-member.d.ts +0 -30
  634. package/dist/workspace-member.d.ts.map +0 -1
  635. package/dist/workspace-member.js +0 -91
  636. package/schemas/pulumi.schema.json +0 -34
  637. package/src/testdata/pulumi-member/Pulumi.yaml +0 -2
  638. package/src/testdata/pulumi-member/stack-export.json +0 -53
  639. package/src/testdata/pulumi-unexported/Pulumi.yaml +0 -2
  640. package/src/workspace-member.test.ts +0 -89
  641. package/src/workspace-member.ts +0 -126
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Every module source and provider address a root uses (chant#3924), read
3
+ * from its files before `init` downloads anything, so a product can check
4
+ * them against an allow list (terragucci's `sources:`) or a proxy map
5
+ * (chant#4606) in a check job.
6
+ *
7
+ * For a root and, with `followLocal`, each local module it calls (`./` and
8
+ * `../`, followed down to the modules they call), it reads each `module`
9
+ * block's `source`, each `required_providers` entry, and the providers a
10
+ * module uses with no entry: a `provider` block, or a resource, data or
11
+ * ephemeral block's `provider` argument or type prefix, which `init` installs
12
+ * as `hashicorp/<name>`. In the root itself it also reads a Terragrunt unit's
13
+ * `terraform { source }`. Files are `.tf`, `.tofu` and their `.json` forms;
14
+ * `binary` narrows them to the set that binary reads, with OpenTofu's rule
15
+ * that `x.tofu` hides `x.tf`.
16
+ *
17
+ * Each source carries its file and its block path from the root
18
+ * (`module.a > module.b > required_providers.x`) and its normal form
19
+ * (./registry/source-forms.ts). A local call that cannot be followed
20
+ * (outside the project, or missing) is named in `unread`, since what it
21
+ * uses cannot be read.
22
+ */
23
+ import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
24
+ import { join, posix, relative, sep } from "node:path";
25
+ import { loadHcl2json } from "@intentius/chant/terraform/hcl2json";
26
+ import { isJsonConfigFile, jsonConfigTree, selectConfigFiles } from "./hcl/files.js";
27
+ import { impliedProvider, normalizeModuleSource, providerAddress, withoutQuery } from "./registry/source-forms.js";
28
+ /** A block list as hcl2json writes it (an array) or a JSON file may (one object). */
29
+ const bodies = (v) => (Array.isArray(v) ? v : v && typeof v === "object" ? [v] : []);
30
+ const ALL_SUFFIXES = [".tf", ".tofu", ".tf.json", ".tofu.json"];
31
+ /** The configuration files of one module directory, plus terragrunt.hcl when `terragrunt`. */
32
+ function moduleFiles(dir, terragrunt, binary) {
33
+ if (!existsSync(dir) || !statSync(dir).isDirectory())
34
+ return [];
35
+ const names = readdirSync(dir).filter((n) => {
36
+ try {
37
+ return statSync(join(dir, n)).isFile();
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ });
43
+ const config = binary ? selectConfigFiles(names, binary) : names.filter((n) => ALL_SUFFIXES.some((s) => n.endsWith(s))).sort();
44
+ return terragrunt && names.includes("terragrunt.hcl") ? [...config, "terragrunt.hcl"] : config;
45
+ }
46
+ /** The local name of the provider a resource, data or ephemeral block uses: its `provider` argument's, else its type's prefix. */
47
+ function providerOf(type, body) {
48
+ const ref = typeof body.provider === "string" ? /^(?:\$\{)?([A-Za-z][A-Za-z0-9_-]*)/.exec(body.provider) : null;
49
+ return ref ? ref[1] : type.split("_")[0];
50
+ }
51
+ const isLocal = (source) => /^\.\.?\//.test(source);
52
+ async function readDir(abs, shown, prefix, top, o) {
53
+ const providers = [];
54
+ const calls = [];
55
+ const declared = new Set();
56
+ const implied = new Map();
57
+ const provider = (file, block, source, what) => ({
58
+ kind: "provider",
59
+ file,
60
+ block,
61
+ source,
62
+ normal: providerAddress(source, { binary: o.binary, proxies: o.proxies }) ?? source.trim().toLowerCase(),
63
+ ...(what ? { implied: what } : {}),
64
+ });
65
+ for (const name of moduleFiles(abs, top, o.binary)) {
66
+ const file = shown === "." ? name : posix.join(shown, name);
67
+ const text = readFileSync(join(abs, name), "utf-8");
68
+ let tree;
69
+ try {
70
+ tree = (isJsonConfigFile(name) ? jsonConfigTree(text) : await o.parser.parse(file, text));
71
+ }
72
+ catch (e) {
73
+ throw new Error(`${file} could not be read (${e.message.split("\n")[0]}), so its module and provider sources are unknown`);
74
+ }
75
+ if (name === "terragrunt.hcl") {
76
+ for (const b of bodies(tree.terraform))
77
+ if (typeof b.source === "string")
78
+ calls.push({ file, block: `${prefix}terraform`, source: b.source });
79
+ continue;
80
+ }
81
+ for (const [call, list] of Object.entries(tree.module ?? {})) {
82
+ for (const b of bodies(list))
83
+ if (typeof b.source === "string")
84
+ calls.push({ file, block: `${prefix}module.${call}`, source: b.source });
85
+ }
86
+ for (const t of bodies(tree.terraform)) {
87
+ for (const req of bodies(t.required_providers)) {
88
+ for (const [local, v] of Object.entries(req)) {
89
+ declared.add(local);
90
+ const source = v && typeof v === "object" && typeof v.source === "string" ? v.source : `hashicorp/${local}`;
91
+ providers.push(provider(file, `${prefix}required_providers.${local}`, source));
92
+ }
93
+ }
94
+ }
95
+ for (const local of Object.keys(tree.provider ?? {}))
96
+ if (!implied.has(local))
97
+ implied.set(local, { file, what: `provider "${local}"` });
98
+ for (const kind of ["resource", "data", "ephemeral"]) {
99
+ for (const [type, named] of Object.entries(tree[kind] ?? {})) {
100
+ for (const [name, list] of Object.entries(named ?? {})) {
101
+ for (const b of bodies(list)) {
102
+ const local = providerOf(type, b);
103
+ if (!implied.has(local))
104
+ implied.set(local, { file, what: `${kind} "${type}" "${name}"` });
105
+ }
106
+ }
107
+ }
108
+ }
109
+ }
110
+ for (const [local, at] of implied) {
111
+ const source = declared.has(local) ? undefined : impliedProvider(local);
112
+ if (source)
113
+ providers.push(provider(at.file, `${prefix}provider.${local}`, source, at.what));
114
+ }
115
+ return { providers, calls };
116
+ }
117
+ /**
118
+ * Every module source and provider address the root at `dir` uses, and each
119
+ * local call that could not be followed. Throws, naming the file, when a
120
+ * file cannot be parsed, so a check fails loudly instead of checking less.
121
+ */
122
+ export async function usedSources(dir, options = {}) {
123
+ const project = options.project ?? dir;
124
+ const o = { ...options, parser: options.parser ?? (await loadHcl2json()) };
125
+ const follow = options.followLocal !== false;
126
+ const used = [];
127
+ const unread = [];
128
+ const shownOf = (abs) => relative(project, abs).split(sep).join("/") || ".";
129
+ const walk = async (rel, prefix, chain, top) => {
130
+ const { providers, calls } = await readDir(join(project, rel), rel, prefix, top, o);
131
+ used.push(...providers);
132
+ for (const c of calls) {
133
+ used.push({ kind: "module", file: c.file, block: c.block, source: c.source, normal: isLocal(c.source) ? withoutQuery(c.source) : normalizeModuleSource(withoutQuery(c.source), { binary: o.binary, proxies: o.proxies }) });
134
+ if (!follow || !isLocal(c.source))
135
+ continue;
136
+ // A Terragrunt source's `//` marks the directory it copies; the module is the path with it read as one `/`.
137
+ const path = withoutQuery(c.source).replace(/\/\/+/g, "/");
138
+ const next = posix.normalize(posix.join(rel, path)).replace(/\/+$/, "") || ".";
139
+ if (next === ".." || next.startsWith("../")) {
140
+ unread.push({ file: c.file, block: c.block, source: c.source, why: "it is outside the project, so the sources it uses cannot be read" });
141
+ continue;
142
+ }
143
+ if (!existsSync(join(project, next))) {
144
+ unread.push({ file: c.file, block: c.block, source: c.source, why: `${next} does not exist, so the sources it uses cannot be read` });
145
+ continue;
146
+ }
147
+ if (chain.includes(next) || moduleFiles(join(project, next), false, o.binary).length === 0)
148
+ continue;
149
+ await walk(next, `${c.block} > `, [...chain, next], false);
150
+ }
151
+ };
152
+ const start = shownOf(dir);
153
+ if (start === ".." || start.startsWith("../"))
154
+ throw new Error(`${dir} is outside the project ${project}`);
155
+ await walk(start, "", [start], true);
156
+ return { used, unread };
157
+ }
package/package.json CHANGED
@@ -1,11 +1,10 @@
1
1
  {
2
2
  "name": "@intentius/chant-lexicon-terraform",
3
- "version": "0.124.52",
3
+ "version": "0.124.55",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "src/",
7
7
  "dist/",
8
- "schemas/",
9
8
  "workspace-kinds.json"
10
9
  ],
11
10
  "exports": {
@@ -35,11 +34,31 @@
35
34
  "types": "./dist/pin/index.d.ts",
36
35
  "default": "./dist/pin/index.js"
37
36
  },
37
+ "./module-catalog": {
38
+ "development": "./src/module-catalog/index.ts",
39
+ "types": "./dist/module-catalog/index.d.ts",
40
+ "default": "./dist/module-catalog/index.js"
41
+ },
38
42
  "./terragrunt": {
39
43
  "development": "./src/terragrunt/index.ts",
40
44
  "types": "./dist/terragrunt/index.d.ts",
41
45
  "default": "./dist/terragrunt/index.js"
42
46
  },
47
+ "./state": {
48
+ "development": "./src/state/index.ts",
49
+ "types": "./dist/state/index.d.ts",
50
+ "default": "./dist/state/index.js"
51
+ },
52
+ "./registry": {
53
+ "development": "./src/registry/index.ts",
54
+ "types": "./dist/registry/index.d.ts",
55
+ "default": "./dist/registry/index.js"
56
+ },
57
+ "./registry/edge": {
58
+ "development": "./src/registry/edge/index.ts",
59
+ "types": "./dist/registry/edge/index.d.ts",
60
+ "default": "./dist/registry/edge/index.js"
61
+ },
43
62
  "./lint/post-synth": {
44
63
  "development": "./src/lint/post-synth/index.ts",
45
64
  "types": "./dist/lint/post-synth/index.d.ts",
@@ -55,7 +74,8 @@
55
74
  "docs": "npx tsx src/codegen/docs-cli.ts",
56
75
  "build": "../../scripts/tsc7.sh -p tsconfig.build.json --sourceMap false && tsc-alias -p tsconfig.build.json",
57
76
  "prepack": "npm run generate && npm run bundle && npm run validate && npm run build",
58
- "bundle": "tsx src/package-cli.ts"
77
+ "bundle": "tsx src/package-cli.ts",
78
+ "module-catalog:refresh": "npx tsx src/module-catalog/refresh-cli.ts"
59
79
  },
60
80
  "devDependencies": {
61
81
  "@cdktn/hcl2json": "^0.24.0",
@@ -68,7 +88,7 @@
68
88
  "access": "public"
69
89
  },
70
90
  "peerDependencies": {
71
- "@intentius/chant": "^0.124.52",
91
+ "@intentius/chant": "^0.124.55",
72
92
  "zod": "^4.3.6"
73
93
  },
74
94
  "description": "terraform lexicon for chant, existing Terraform root modules as declarable entities",
@@ -1,14 +1,17 @@
1
1
  # What the gated acceptance suites have actually run against
2
2
 
3
- Eight `describe` blocks across five files run this lexicon against a real
3
+ Eleven `describe` blocks across eight files run this lexicon against a real
4
4
  binary rather than a fixture, and every one of them skips rather than fails
5
5
  when its dependency is absent. A skip is silent by design, so without this
6
6
  file nothing in the tree says which of them has ever passed, against what, or
7
7
  when. The evidence had been living in PR prose (`#2157` for the live apply
8
8
  pair), which no reader of the suite can see.
9
9
 
10
- One row per gated block below: what it proves, what gates it, the command,
11
- and the last binary and emulator it is known to have passed against.
10
+ Ten sections below cover the eleven blocks, one section per block except
11
+ section 6, where `plan-read.acceptance.test.ts`'s per-binary loop makes two
12
+ blocks of one body. Each section says what the block proves, what gates it,
13
+ the command, and the last binary and emulator it is known to have passed
14
+ against, or "not recorded" when no run has been written down yet.
12
15
 
13
16
  `live-estate/README.md` next door is the sibling record for the two recorded
14
17
  documents (`../live-plan.json`, `../live-ls.json`) rather than for a suite,
@@ -31,7 +34,7 @@ same recipe one tag back
31
34
  `live/smoke/docker-compose.yml` and exported as
32
35
  `CHOUDOUFU_EMULATOR_ENDPOINT=http://localhost:<mapped port>`.
33
36
 
34
- ## The four blocks
37
+ ## The eleven blocks
35
38
 
36
39
  ### 1. `TerraformApplyOp applies a real root`
37
40
 
@@ -52,7 +55,7 @@ npx vitest run lexicons/terraform/src/composites/terraform-apply-op.acceptance.t
52
55
  Last passed: 2026-09-08, `Terraform v1.15.8` on `darwin_arm64`, with
53
56
  `hashicorp/null` resolved from the public registry for the fixture's `~> 3.2`
54
57
  constraint. No emulator is involved. Re-run by chant #2241 alongside every
55
- other block in this file, so all four rows come from one run; #2168 had run it
58
+ other block this file held then, so those four rows come from one run; #2168 had run it
56
59
  on 2026-09-07 the same way.
57
60
 
58
61
  ### 2. `TerraformApplyOp applies a live root against choudoufu's emulator`
@@ -172,7 +175,7 @@ path, which is the only thing it exists to prove.
172
175
 
173
176
  ### 5. `TerraformAdoptOp reaches its gate on a checkout that has never run init`
174
177
 
175
- Same file, third block (#2302). One test: build `TerraformAdoptOp` and drive
178
+ Same file, second block (#2302). One test: build `TerraformAdoptOp` and drive
176
179
  it through `runOpLocally`, exactly as the apply Op's own acceptance suite
177
180
  does, over a project this test creates fresh and never initializes by hand —
178
181
  no `terraformInit` call anywhere in the block. The Op's own Init phase is what
@@ -215,7 +218,8 @@ With the Init phase back, the same run reaches its gate:
215
218
 
216
219
  `../plan-read.acceptance.test.ts`, one block per binary, three tests each, over
217
220
  the `plan-read/` fixture (built-in `terraform_data`, `local` backend, so no
218
- registry, no network and no credentials). The first reads the plan depth
221
+ registry, no network and no credentials). Four tests each now; the run recorded
222
+ below had three, before #4372 added the planned-create test. The first reads the plan depth
219
223
  through `describeResources` and checks the IR attributes, `sources` reading
220
224
  `"plan"`, no secret in the result, nothing new or changed in the root, and no
221
225
  `chant-terraform-plan-*` directory left in the temp dir. The second holds the
@@ -263,6 +267,64 @@ by chant #4371. Proved red the same day: with `plan-observation.ts`'s
263
267
  redaction put back to flagging each side by its own marks, the old secret
264
268
  came through as `tags.token`'s `before`.
265
269
 
270
+ ### 8. `Terragrunt units against a real terragrunt`
271
+
272
+ `terragrunt/terragrunt.acceptance.test.ts` (#3414), four tests over the
273
+ `terragrunt/five-units/` fixture (implicit stacks, `terraform_data` only,
274
+ local state under the copied fixture, so no provider download and no cloud).
275
+ It checks that `terragrunt` is 1.1 or later, that `discoverTerragruntUnits`
276
+ lists what `terragrunt find` lists less the catalog template, that each of the
277
+ three waves plans and applies exactly its own units and that the run report's
278
+ per-unit results reach the change set with no input carrying a mock, and that
279
+ a wave keeps to its units when a `.terragrunt-filters` file selects more.
280
+
281
+ Gated on `terragrunt` and `tofu` on PATH.
282
+
283
+ ```
284
+ npx vitest run lexicons/terraform/src/terragrunt/terragrunt.acceptance.test.ts
285
+ ```
286
+
287
+ Last passed: not recorded. No run of this block has been written down; the
288
+ maintainer records the first one here (maintainer run).
289
+
290
+ ### 9. `mock outputs in Terragrunt waves against a real terragrunt`
291
+
292
+ `terragrunt/mocks.acceptance.test.ts` (#3416), one test over the same
293
+ `five-units/` fixture. Wave 2 is refused until wave 1 has applied, naming each
294
+ upstream and planning nothing. A provisional plan of wave 2 made before that
295
+ reads the mocks, is marked provisional, matches Terragrunt's own mock warning,
296
+ and is refused at apply. Once wave 1 applies, wave 2 plans on the real
297
+ upstream values and applies.
298
+
299
+ Gated on `terragrunt` and `tofu` on PATH.
300
+
301
+ ```
302
+ npx vitest run lexicons/terraform/src/terragrunt/mocks.acceptance.test.ts
303
+ ```
304
+
305
+ Last passed: not recorded. No run of this block has been written down; the
306
+ maintainer records the first one here (maintainer run).
307
+
308
+ ### 10. `affected Terragrunt units against a real terragrunt`
309
+
310
+ `terragrunt/affected.acceptance.test.ts` (#3415), over a git copy of the
311
+ `terragrunt/affected/` fixture. One test checks discovery against
312
+ `recorded/affected-find.json`; then one test per case in
313
+ `__fixtures__/terragrunt/affected-cases.ts`, each made as a commit, checks that
314
+ Terragrunt's own `[HEAD~1...HEAD]` filter selects exactly the case's
315
+ `terragrunt` column (nothing, for the three supplements) and that
316
+ `findTerragruntAffected` returns the case's expected units and reasons. Nothing
317
+ is planned.
318
+
319
+ Gated on `terragrunt` and `git` on PATH. It does not need `tofu`.
320
+
321
+ ```
322
+ npx vitest run lexicons/terraform/src/terragrunt/affected.acceptance.test.ts
323
+ ```
324
+
325
+ Last passed: not recorded. No run of this block has been written down; the
326
+ maintainer records the first one here (maintainer run).
327
+
266
328
  ## Running everything that can run on a machine with no choudoufu
267
329
 
268
330
  ```
@@ -0,0 +1,12 @@
1
+ {"@level":"info","@message":"Terraform 1.10.5","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.101000Z","terraform":"1.10.5","type":"version","ui":"1.2"}
2
+ {"@level":"info","@message":"module.net.terraform_data.vpc: Plan to update","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.412000Z","change":{"resource":{"addr":"module.net.terraform_data.vpc","module":"module.net","resource":"terraform_data.vpc","implied_provider":"terraform","resource_type":"terraform_data","resource_name":"vpc","resource_key":null},"action":"update"},"type":"planned_change"}
3
+ {"@level":"info","@message":"module.app.terraform_data.service: Plan to create","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.412100Z","change":{"resource":{"addr":"module.app.terraform_data.service","module":"module.app","resource":"terraform_data.service","implied_provider":"terraform","resource_type":"terraform_data","resource_name":"service","resource_key":null},"action":"create"},"type":"planned_change"}
4
+ {"@level":"info","@message":"module.app.module.logs.terraform_data.group: Plan to create","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.412200Z","change":{"resource":{"addr":"module.app.module.logs.terraform_data.group","module":"module.app.module.logs","resource":"terraform_data.group","implied_provider":"terraform","resource_type":"terraform_data","resource_name":"group","resource_key":null},"action":"create"},"type":"planned_change"}
5
+ {"@level":"info","@message":"module.edge.terraform_data.dns: Plan to update","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.412300Z","change":{"resource":{"addr":"module.edge.terraform_data.dns","module":"module.edge","resource":"terraform_data.dns","implied_provider":"terraform","resource_type":"terraform_data","resource_name":"dns","resource_key":null},"action":"update"},"type":"planned_change"}
6
+ {"@level":"info","@message":"Plan: 2 to add, 2 to change, 0 to destroy.","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.412400Z","changes":{"add":2,"change":2,"import":0,"remove":0,"operation":"apply"},"type":"change_summary"}
7
+ {"@level":"info","@message":"module.net.terraform_data.vpc: Modifying... [id=6f2b6c1e-0c55-4f0b-9d4e-3a1c2b7d9e01]","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.520000Z","hook":{"resource":{"addr":"module.net.terraform_data.vpc","module":"module.net","resource":"terraform_data.vpc","implied_provider":"terraform","resource_type":"terraform_data","resource_name":"vpc","resource_key":null},"action":"update","id_key":"id","id_value":"6f2b6c1e-0c55-4f0b-9d4e-3a1c2b7d9e01"},"type":"apply_start"}
8
+ {"@level":"info","@message":"module.net.terraform_data.vpc: Modifications complete after 0s [id=6f2b6c1e-0c55-4f0b-9d4e-3a1c2b7d9e01]","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.530000Z","hook":{"resource":{"addr":"module.net.terraform_data.vpc","module":"module.net","resource":"terraform_data.vpc","implied_provider":"terraform","resource_type":"terraform_data","resource_name":"vpc","resource_key":null},"action":"update","id_key":"id","id_value":"6f2b6c1e-0c55-4f0b-9d4e-3a1c2b7d9e01","elapsed_seconds":0},"type":"apply_complete"}
9
+ {"@level":"info","@message":"module.app.terraform_data.service: Creating...","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.540000Z","hook":{"resource":{"addr":"module.app.terraform_data.service","module":"module.app","resource":"terraform_data.service","implied_provider":"terraform","resource_type":"terraform_data","resource_name":"service","resource_key":null},"action":"create"},"type":"apply_start"}
10
+ {"@level":"error","@message":"module.app.terraform_data.service: Creation errored after 0s","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.550000Z","hook":{"resource":{"addr":"module.app.terraform_data.service","module":"module.app","resource":"terraform_data.service","implied_provider":"terraform","resource_type":"terraform_data","resource_name":"service","resource_key":null},"action":"create","elapsed_seconds":0},"type":"apply_errored"}
11
+ {"@level":"error","@message":"Error: Invalid input","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.551000Z","diagnostic":{"severity":"error","summary":"Invalid input","detail":"The service input is not a VPC id.\nCheck the vpc_id variable.","address":"module.app.terraform_data.service","range":{"filename":"../../roots/app/main.tf","start":{"line":1,"column":1,"byte":0},"end":{"line":1,"column":36,"byte":35}}},"type":"diagnostic"}
12
+ {"@level":"error","@message":"Error: Provider produced inconsistent final plan","@module":"terraform.ui","@timestamp":"2026-10-25T12:05:00.552000Z","diagnostic":{"severity":"error","summary":"Provider produced inconsistent final plan","detail":"This is a bug in the provider."},"type":"diagnostic"}
@@ -0,0 +1,66 @@
1
+ {
2
+ "version": 4,
3
+ "terraform_version": "1.10.5",
4
+ "serial": 3,
5
+ "lineage": "8d4e2f1a-3b5c-4d6e-9f7a-1c2b3d4e5f60",
6
+ "outputs": {
7
+ "service_id": {
8
+ "value": "0b7e4a2c-93d1-4f6e-a5b8-2c1d9e3f4a77",
9
+ "type": "string"
10
+ }
11
+ },
12
+ "resources": [
13
+ {
14
+ "module": "module.logs",
15
+ "mode": "managed",
16
+ "type": "terraform_data",
17
+ "name": "group",
18
+ "provider": "provider[\"terraform.io/builtin/terraform\"]",
19
+ "instances": [
20
+ {
21
+ "schema_version": 0,
22
+ "attributes": {
23
+ "id": "a3c5e7f9-1b2d-4c6e-8a0b-3d5f7a9c1e2f",
24
+ "input": {
25
+ "value": "app-logs",
26
+ "type": "string"
27
+ },
28
+ "output": {
29
+ "value": "app-logs",
30
+ "type": "string"
31
+ },
32
+ "triggers_replace": null
33
+ },
34
+ "sensitive_attributes": [],
35
+ "identity_schema_version": 0
36
+ }
37
+ ]
38
+ },
39
+ {
40
+ "mode": "managed",
41
+ "type": "terraform_data",
42
+ "name": "service",
43
+ "provider": "provider[\"terraform.io/builtin/terraform\"]",
44
+ "instances": [
45
+ {
46
+ "schema_version": 0,
47
+ "attributes": {
48
+ "id": "0b7e4a2c-93d1-4f6e-a5b8-2c1d9e3f4a77",
49
+ "input": {
50
+ "value": "6f2b6c1e-0c55-4f0b-9d4e-3a1c2b7d9e01",
51
+ "type": "string"
52
+ },
53
+ "output": {
54
+ "value": "6f2b6c1e-0c55-4f0b-9d4e-3a1c2b7d9e01",
55
+ "type": "string"
56
+ },
57
+ "triggers_replace": null
58
+ },
59
+ "sensitive_attributes": [],
60
+ "identity_schema_version": 0
61
+ }
62
+ ]
63
+ }
64
+ ],
65
+ "check_results": null
66
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "version": 4,
3
+ "terraform_version": "1.10.5",
4
+ "serial": 12,
5
+ "lineage": "c0ffee00-1234-4abc-8def-0123456789ab",
6
+ "outputs": {
7
+ "name": {
8
+ "value": "www",
9
+ "type": "string"
10
+ }
11
+ },
12
+ "resources": [
13
+ {
14
+ "mode": "managed",
15
+ "type": "terraform_data",
16
+ "name": "dns",
17
+ "provider": "provider[\"terraform.io/builtin/terraform\"]",
18
+ "instances": [
19
+ {
20
+ "schema_version": 0,
21
+ "attributes": {
22
+ "id": "1d9a0c55-77e2-4c1b-8f3a-5b6e2d4c7a10",
23
+ "input": {
24
+ "value": "www",
25
+ "type": "string"
26
+ },
27
+ "output": {
28
+ "value": "www",
29
+ "type": "string"
30
+ },
31
+ "triggers_replace": null
32
+ },
33
+ "sensitive_attributes": [],
34
+ "identity_schema_version": 0
35
+ }
36
+ ]
37
+ }
38
+ ],
39
+ "check_results": null
40
+ }
@@ -0,0 +1,58 @@
1
+ {
2
+ "version": 4,
3
+ "terraform_version": "1.10.5",
4
+ "serial": 7,
5
+ "lineage": "2b1f6c0a-6a1e-4c55-9f3d-7e0a1b2c3d4e",
6
+ "outputs": {
7
+ "vpc_id": {
8
+ "value": "6f2b6c1e-0c55-4f0b-9d4e-3a1c2b7d9e01",
9
+ "type": "string"
10
+ }
11
+ },
12
+ "resources": [
13
+ {
14
+ "mode": "managed",
15
+ "type": "terraform_data",
16
+ "name": "vpc",
17
+ "provider": "provider[\"terraform.io/builtin/terraform\"]",
18
+ "instances": [
19
+ {
20
+ "schema_version": 0,
21
+ "attributes": {
22
+ "id": "6f2b6c1e-0c55-4f0b-9d4e-3a1c2b7d9e01",
23
+ "input": {
24
+ "value": {
25
+ "cidr": "10.0.0.0/16",
26
+ "name": "core"
27
+ },
28
+ "type": [
29
+ "object",
30
+ {
31
+ "cidr": "string",
32
+ "name": "string"
33
+ }
34
+ ]
35
+ },
36
+ "output": {
37
+ "value": {
38
+ "cidr": "10.0.0.0/16",
39
+ "name": "core"
40
+ },
41
+ "type": [
42
+ "object",
43
+ {
44
+ "cidr": "string",
45
+ "name": "string"
46
+ }
47
+ ]
48
+ },
49
+ "triggers_replace": null
50
+ },
51
+ "sensitive_attributes": [],
52
+ "identity_schema_version": 0
53
+ }
54
+ ]
55
+ }
56
+ ],
57
+ "check_results": null
58
+ }