@quadnix/octo 0.0.30 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +117 -8
  3. package/dist/app.type.d.ts +277 -19
  4. package/dist/app.type.js +80 -9
  5. package/dist/app.type.js.map +1 -1
  6. package/dist/decorators/action.decorator.d.ts +10 -6
  7. package/dist/decorators/action.decorator.js +19 -6
  8. package/dist/decorators/action.decorator.js.map +1 -1
  9. package/dist/decorators/anchor.decorator.d.ts +12 -5
  10. package/dist/decorators/anchor.decorator.js +12 -5
  11. package/dist/decorators/anchor.decorator.js.map +1 -1
  12. package/dist/decorators/enable-hook.decorator.d.ts +1 -1
  13. package/dist/decorators/enable-hook.decorator.js +1 -1
  14. package/dist/decorators/factory.decorator.d.ts +18 -34
  15. package/dist/decorators/factory.decorator.js +18 -34
  16. package/dist/decorators/factory.decorator.js.map +1 -1
  17. package/dist/decorators/model.decorator.d.ts +4 -6
  18. package/dist/decorators/model.decorator.js +2 -7
  19. package/dist/decorators/model.decorator.js.map +1 -1
  20. package/dist/decorators/module.decorator.d.ts +16 -10
  21. package/dist/decorators/module.decorator.js +16 -10
  22. package/dist/decorators/module.decorator.js.map +1 -1
  23. package/dist/decorators/on-event.decorator.d.ts +7 -2
  24. package/dist/decorators/on-event.decorator.js +5 -0
  25. package/dist/decorators/on-event.decorator.js.map +1 -1
  26. package/dist/decorators/resource.decorator.d.ts +50 -1
  27. package/dist/decorators/resource.decorator.js +38 -1
  28. package/dist/decorators/resource.decorator.js.map +1 -1
  29. package/dist/decorators/validate.decorator.d.ts +15 -1
  30. package/dist/decorators/validate.decorator.js +15 -1
  31. package/dist/decorators/validate.decorator.js.map +1 -1
  32. package/dist/errors/container.error.d.ts +18 -0
  33. package/dist/errors/container.error.js +18 -0
  34. package/dist/errors/container.error.js.map +1 -1
  35. package/dist/errors/index.d.ts +1 -0
  36. package/dist/errors/index.js +1 -0
  37. package/dist/errors/index.js.map +1 -1
  38. package/dist/errors/module.error.d.ts +6 -0
  39. package/dist/errors/module.error.js +6 -0
  40. package/dist/errors/module.error.js.map +1 -1
  41. package/dist/errors/node.error.d.ts +56 -0
  42. package/dist/errors/node.error.js +56 -0
  43. package/dist/errors/node.error.js.map +1 -1
  44. package/dist/errors/schema.error.d.ts +14 -1
  45. package/dist/errors/schema.error.js +11 -1
  46. package/dist/errors/schema.error.js.map +1 -1
  47. package/dist/errors/terraform.error.d.ts +20 -0
  48. package/dist/errors/terraform.error.js +24 -0
  49. package/dist/errors/terraform.error.js.map +1 -0
  50. package/dist/errors/transaction.error.d.ts +93 -2
  51. package/dist/errors/transaction.error.js +83 -0
  52. package/dist/errors/transaction.error.js.map +1 -1
  53. package/dist/events/action.event.d.ts +8 -4
  54. package/dist/events/action.event.js +2 -4
  55. package/dist/events/action.event.js.map +1 -1
  56. package/dist/events/command.event.d.ts +43 -0
  57. package/dist/events/command.event.js +33 -0
  58. package/dist/events/command.event.js.map +1 -0
  59. package/dist/events/event.model.d.ts +26 -8
  60. package/dist/events/event.model.js +15 -7
  61. package/dist/events/event.model.js.map +1 -1
  62. package/dist/events/hook/commit.hook.event.d.ts +1 -7
  63. package/dist/events/hook/commit.hook.event.js +0 -6
  64. package/dist/events/hook/commit.hook.event.js.map +1 -1
  65. package/dist/events/hook/hook.event.d.ts +1 -3
  66. package/dist/events/hook/hook.event.js +0 -2
  67. package/dist/events/hook/hook.event.js.map +1 -1
  68. package/dist/events/hook/model.hook.event.d.ts +1 -7
  69. package/dist/events/hook/model.hook.event.js +0 -6
  70. package/dist/events/hook/model.hook.event.js.map +1 -1
  71. package/dist/events/hook/resource.hook.event.d.ts +1 -7
  72. package/dist/events/hook/resource.hook.event.js +0 -6
  73. package/dist/events/hook/resource.hook.event.js.map +1 -1
  74. package/dist/events/index.d.ts +5 -0
  75. package/dist/events/index.js +5 -0
  76. package/dist/events/index.js.map +1 -1
  77. package/dist/events/mode-result.event.d.ts +57 -0
  78. package/dist/events/mode-result.event.js +24 -0
  79. package/dist/events/mode-result.event.js.map +1 -0
  80. package/dist/events/mode.event.d.ts +61 -0
  81. package/dist/events/mode.event.js +32 -0
  82. package/dist/events/mode.event.js.map +1 -0
  83. package/dist/events/module.event.d.ts +7 -5
  84. package/dist/events/module.event.js +3 -4
  85. package/dist/events/module.event.js.map +1 -1
  86. package/dist/events/registration.event.d.ts +19 -15
  87. package/dist/events/registration.event.js +18 -14
  88. package/dist/events/registration.event.js.map +1 -1
  89. package/dist/events/serialization.event.d.ts +16 -13
  90. package/dist/events/serialization.event.js +15 -12
  91. package/dist/events/serialization.event.js.map +1 -1
  92. package/dist/events/state.event.d.ts +102 -0
  93. package/dist/events/state.event.js +69 -0
  94. package/dist/events/state.event.js.map +1 -0
  95. package/dist/events/terraform.event.d.ts +78 -0
  96. package/dist/events/terraform.event.js +55 -0
  97. package/dist/events/terraform.event.js.map +1 -0
  98. package/dist/events/transaction.event.d.ts +3 -40
  99. package/dist/events/transaction.event.js +1 -29
  100. package/dist/events/transaction.event.js.map +1 -1
  101. package/dist/functions/container/container.d.ts +54 -13
  102. package/dist/functions/container/container.js +64 -19
  103. package/dist/functions/container/container.js.map +1 -1
  104. package/dist/functions/container/test-container.d.ts +43 -29
  105. package/dist/functions/container/test-container.js +71 -43
  106. package/dist/functions/container/test-container.js.map +1 -1
  107. package/dist/functions/dependency/dependency.d.ts +84 -23
  108. package/dist/functions/dependency/dependency.js +84 -14
  109. package/dist/functions/dependency/dependency.js.map +1 -1
  110. package/dist/functions/diff/aggregate-resource-actions.d.ts +19 -0
  111. package/dist/functions/diff/aggregate-resource-actions.js +41 -0
  112. package/dist/functions/diff/aggregate-resource-actions.js.map +1 -0
  113. package/dist/functions/diff/diff-metadata.d.ts +21 -3
  114. package/dist/functions/diff/diff-metadata.js +18 -0
  115. package/dist/functions/diff/diff-metadata.js.map +1 -1
  116. package/dist/functions/diff/diff.d.ts +68 -7
  117. package/dist/functions/diff/diff.js +44 -3
  118. package/dist/functions/diff/diff.js.map +1 -1
  119. package/dist/functions/hook/commit.hook.d.ts +16 -1
  120. package/dist/functions/hook/commit.hook.js +21 -6
  121. package/dist/functions/hook/commit.hook.js.map +1 -1
  122. package/dist/functions/hook/model-action.hook.d.ts +16 -1
  123. package/dist/functions/hook/model-action.hook.js +21 -6
  124. package/dist/functions/hook/model-action.hook.js.map +1 -1
  125. package/dist/functions/hook/resource-action.hook.d.ts +16 -1
  126. package/dist/functions/hook/resource-action.hook.js +21 -6
  127. package/dist/functions/hook/resource-action.hook.js.map +1 -1
  128. package/dist/functions/node/node-action.abstract.d.ts +23 -2
  129. package/dist/functions/node/node-action.abstract.js +22 -8
  130. package/dist/functions/node/node-action.abstract.js.map +1 -1
  131. package/dist/functions/node/node.abstract.d.ts +56 -5
  132. package/dist/functions/node/node.abstract.js +106 -22
  133. package/dist/functions/node/node.abstract.js.map +1 -1
  134. package/dist/functions/node/node.interface.d.ts +3 -1
  135. package/dist/functions/schema/schema.d.ts +7 -0
  136. package/dist/functions/schema/schema.js +10 -1
  137. package/dist/functions/schema/schema.js.map +1 -1
  138. package/dist/index.d.ts +12 -6
  139. package/dist/index.js +9 -4
  140. package/dist/index.js.map +1 -1
  141. package/dist/index.type.d.ts +5 -0
  142. package/dist/index.type.js +2 -0
  143. package/dist/index.type.js.map +1 -0
  144. package/dist/main.d.ts +245 -14
  145. package/dist/main.js +377 -72
  146. package/dist/main.js.map +1 -1
  147. package/dist/models/account/account.model.d.ts +43 -7
  148. package/dist/models/account/account.model.js +56 -8
  149. package/dist/models/account/account.model.js.map +1 -1
  150. package/dist/models/account/account.schema.d.ts +13 -1
  151. package/dist/models/account/account.schema.js +12 -0
  152. package/dist/models/account/account.schema.js.map +1 -1
  153. package/dist/models/app/app.model.d.ts +13 -8
  154. package/dist/models/app/app.model.js +17 -32
  155. package/dist/models/app/app.model.js.map +1 -1
  156. package/dist/models/app/app.schema.d.ts +6 -0
  157. package/dist/models/app/app.schema.js +6 -0
  158. package/dist/models/app/app.schema.js.map +1 -1
  159. package/dist/models/deployment/deployment.model.d.ts +13 -1
  160. package/dist/models/deployment/deployment.model.js +16 -4
  161. package/dist/models/deployment/deployment.model.js.map +1 -1
  162. package/dist/models/deployment/deployment.schema.d.ts +6 -0
  163. package/dist/models/deployment/deployment.schema.js +6 -0
  164. package/dist/models/deployment/deployment.schema.js.map +1 -1
  165. package/dist/models/environment/environment.model.d.ts +15 -3
  166. package/dist/models/environment/environment.model.js +22 -10
  167. package/dist/models/environment/environment.model.js.map +1 -1
  168. package/dist/models/environment/environment.schema.d.ts +2 -0
  169. package/dist/models/environment/environment.schema.js +2 -0
  170. package/dist/models/environment/environment.schema.js.map +1 -1
  171. package/dist/models/execution/execution.model.d.ts +21 -3
  172. package/dist/models/execution/execution.model.js +47 -29
  173. package/dist/models/execution/execution.model.js.map +1 -1
  174. package/dist/models/execution/execution.schema.d.ts +11 -0
  175. package/dist/models/execution/execution.schema.js +11 -0
  176. package/dist/models/execution/execution.schema.js.map +1 -1
  177. package/dist/models/filesystem/filesystem.model.d.ts +27 -1
  178. package/dist/models/filesystem/filesystem.model.js +30 -4
  179. package/dist/models/filesystem/filesystem.model.js.map +1 -1
  180. package/dist/models/filesystem/filesystem.schema.d.ts +5 -0
  181. package/dist/models/filesystem/filesystem.schema.js +5 -0
  182. package/dist/models/filesystem/filesystem.schema.js.map +1 -1
  183. package/dist/models/image/image.model.d.ts +19 -5
  184. package/dist/models/image/image.model.js +25 -11
  185. package/dist/models/image/image.model.js.map +1 -1
  186. package/dist/models/image/image.schema.d.ts +8 -0
  187. package/dist/models/image/image.schema.js +8 -0
  188. package/dist/models/image/image.schema.js.map +1 -1
  189. package/dist/models/model-action.interface.d.ts +17 -4
  190. package/dist/models/model.abstract.d.ts +96 -1
  191. package/dist/models/model.abstract.js +107 -8
  192. package/dist/models/model.abstract.js.map +1 -1
  193. package/dist/models/model.interface.d.ts +3 -0
  194. package/dist/models/pipeline/pipeline.model.d.ts +14 -2
  195. package/dist/models/pipeline/pipeline.model.js +19 -7
  196. package/dist/models/pipeline/pipeline.model.js.map +1 -1
  197. package/dist/models/pipeline/pipeline.schema.d.ts +8 -0
  198. package/dist/models/pipeline/pipeline.schema.js +8 -0
  199. package/dist/models/pipeline/pipeline.schema.js.map +1 -1
  200. package/dist/models/region/region.model.d.ts +16 -1
  201. package/dist/models/region/region.model.js +19 -4
  202. package/dist/models/region/region.model.js.map +1 -1
  203. package/dist/models/region/region.schema.d.ts +6 -0
  204. package/dist/models/region/region.schema.js +6 -0
  205. package/dist/models/region/region.schema.js.map +1 -1
  206. package/dist/models/server/server.model.d.ts +15 -3
  207. package/dist/models/server/server.model.js +18 -6
  208. package/dist/models/server/server.model.js.map +1 -1
  209. package/dist/models/server/server.schema.d.ts +3 -1
  210. package/dist/models/server/server.schema.js +3 -1
  211. package/dist/models/server/server.schema.js.map +1 -1
  212. package/dist/models/service/service.model.d.ts +37 -6
  213. package/dist/models/service/service.model.js +65 -11
  214. package/dist/models/service/service.model.js.map +1 -1
  215. package/dist/models/service/service.schema.d.ts +48 -1
  216. package/dist/models/service/service.schema.js +56 -1
  217. package/dist/models/service/service.schema.js.map +1 -1
  218. package/dist/models/subnet/subnet.model.d.ts +27 -3
  219. package/dist/models/subnet/subnet.model.js +40 -16
  220. package/dist/models/subnet/subnet.model.js.map +1 -1
  221. package/dist/models/subnet/subnet.schema.d.ts +9 -0
  222. package/dist/models/subnet/subnet.schema.js +9 -0
  223. package/dist/models/subnet/subnet.schema.js.map +1 -1
  224. package/dist/modes/apply-transaction.d.ts +23 -0
  225. package/dist/modes/apply-transaction.js +25 -0
  226. package/dist/modes/apply-transaction.js.map +1 -0
  227. package/dist/modes/commit.mode.d.ts +54 -0
  228. package/dist/modes/commit.mode.js +235 -0
  229. package/dist/modes/commit.mode.js.map +1 -0
  230. package/dist/modes/generate.mode.d.ts +30 -0
  231. package/dist/modes/generate.mode.js +50 -0
  232. package/dist/modes/generate.mode.js.map +1 -0
  233. package/dist/modes/run-action.mode.d.ts +30 -0
  234. package/dist/modes/run-action.mode.js +140 -0
  235. package/dist/modes/run-action.mode.js.map +1 -0
  236. package/dist/modes/validate.mode.d.ts +186 -0
  237. package/dist/modes/validate.mode.js +558 -0
  238. package/dist/modes/validate.mode.js.map +1 -0
  239. package/dist/modules/module.abstract.d.ts +51 -0
  240. package/dist/modules/module.abstract.js +36 -0
  241. package/dist/modules/module.abstract.js.map +1 -1
  242. package/dist/modules/module.container.d.ts +43 -1
  243. package/dist/modules/module.container.js +77 -5
  244. package/dist/modules/module.container.js.map +1 -1
  245. package/dist/modules/test-module.container.d.ts +139 -25
  246. package/dist/modules/test-module.container.js +383 -199
  247. package/dist/modules/test-module.container.js.map +1 -1
  248. package/dist/overlays/anchor.abstract.d.ts +32 -1
  249. package/dist/overlays/anchor.abstract.js +42 -11
  250. package/dist/overlays/anchor.abstract.js.map +1 -1
  251. package/dist/overlays/anchor.schema.d.ts +21 -0
  252. package/dist/overlays/anchor.schema.js +21 -0
  253. package/dist/overlays/anchor.schema.js.map +1 -1
  254. package/dist/overlays/overlay-data.repository.d.ts +18 -0
  255. package/dist/overlays/overlay-data.repository.js +18 -0
  256. package/dist/overlays/overlay-data.repository.js.map +1 -1
  257. package/dist/overlays/overlay.abstract.d.ts +56 -1
  258. package/dist/overlays/overlay.abstract.js +79 -20
  259. package/dist/overlays/overlay.abstract.js.map +1 -1
  260. package/dist/overlays/overlay.schema.d.ts +20 -0
  261. package/dist/overlays/overlay.schema.js +20 -0
  262. package/dist/overlays/overlay.schema.js.map +1 -1
  263. package/dist/resources/resource-action.interface.d.ts +29 -3
  264. package/dist/resources/resource-data.repository.d.ts +63 -1
  265. package/dist/resources/resource-data.repository.js +94 -4
  266. package/dist/resources/resource-data.repository.js.map +1 -1
  267. package/dist/resources/resource.abstract.d.ts +163 -6
  268. package/dist/resources/resource.abstract.js +223 -59
  269. package/dist/resources/resource.abstract.js.map +1 -1
  270. package/dist/resources/resource.interface.d.ts +0 -2
  271. package/dist/resources/resource.schema.d.ts +39 -1
  272. package/dist/resources/resource.schema.js +38 -0
  273. package/dist/resources/resource.schema.js.map +1 -1
  274. package/dist/resources/terraform-resource.abstract.d.ts +44 -0
  275. package/dist/resources/terraform-resource.abstract.js +45 -0
  276. package/dist/resources/terraform-resource.abstract.js.map +1 -0
  277. package/dist/services/event/event.service.d.ts +32 -5
  278. package/dist/services/event/event.service.js +58 -16
  279. package/dist/services/event/event.service.js.map +1 -1
  280. package/dist/services/input/input.service.d.ts +82 -5
  281. package/dist/services/input/input.service.js +143 -12
  282. package/dist/services/input/input.service.js.map +1 -1
  283. package/dist/services/schema-translation/schema-translation.service.d.ts +9 -0
  284. package/dist/services/schema-translation/schema-translation.service.js +9 -0
  285. package/dist/services/schema-translation/schema-translation.service.js.map +1 -1
  286. package/dist/services/serialization/model/model-serialization.service.d.ts +25 -3
  287. package/dist/services/serialization/model/model-serialization.service.js +113 -62
  288. package/dist/services/serialization/model/model-serialization.service.js.map +1 -1
  289. package/dist/services/serialization/resource/resource-serialization.service.d.ts +36 -6
  290. package/dist/services/serialization/resource/resource-serialization.service.js +77 -28
  291. package/dist/services/serialization/resource/resource-serialization.service.js.map +1 -1
  292. package/dist/services/state-management/local.state-provider.d.ts +67 -4
  293. package/dist/services/state-management/local.state-provider.js +168 -41
  294. package/dist/services/state-management/local.state-provider.js.map +1 -1
  295. package/dist/services/state-management/remote.state-provider.d.ts +216 -0
  296. package/dist/services/state-management/remote.state-provider.js +645 -0
  297. package/dist/services/state-management/remote.state-provider.js.map +1 -0
  298. package/dist/services/state-management/state-management.service.d.ts +195 -17
  299. package/dist/services/state-management/state-management.service.js +259 -10
  300. package/dist/services/state-management/state-management.service.js.map +1 -1
  301. package/dist/services/state-management/state-provider.interface.d.ts +98 -3
  302. package/dist/services/state-management/state-provider.interface.js +14 -1
  303. package/dist/services/state-management/state-provider.interface.js.map +1 -1
  304. package/dist/services/state-management/terraform-state.service.d.ts +99 -0
  305. package/dist/services/state-management/terraform-state.service.js +197 -0
  306. package/dist/services/state-management/terraform-state.service.js.map +1 -0
  307. package/dist/services/state-management/test.state-provider.d.ts +42 -4
  308. package/dist/services/state-management/test.state-provider.js +77 -25
  309. package/dist/services/state-management/test.state-provider.js.map +1 -1
  310. package/dist/services/terraform/terraform.service.d.ts +480 -0
  311. package/dist/services/terraform/terraform.service.js +1082 -0
  312. package/dist/services/terraform/terraform.service.js.map +1 -0
  313. package/dist/services/terraform/terraform.type.d.ts +387 -0
  314. package/dist/services/terraform/terraform.type.js +579 -0
  315. package/dist/services/terraform/terraform.type.js.map +1 -0
  316. package/dist/services/transaction/transaction.service.d.ts +110 -10
  317. package/dist/services/transaction/transaction.service.js +570 -251
  318. package/dist/services/transaction/transaction.service.js.map +1 -1
  319. package/dist/services/validation/validation.service.d.ts +15 -3
  320. package/dist/services/validation/validation.service.js +12 -0
  321. package/dist/services/validation/validation.service.js.map +1 -1
  322. package/dist/utilities/array/array.utility.d.ts +3 -0
  323. package/dist/utilities/array/array.utility.js +3 -0
  324. package/dist/utilities/array/array.utility.js.map +1 -1
  325. package/dist/{functions → utilities}/diff/diff.utility.d.ts +19 -3
  326. package/dist/{functions → utilities}/diff/diff.utility.js +57 -41
  327. package/dist/utilities/diff/diff.utility.js.map +1 -0
  328. package/dist/utilities/file/file.utility.d.ts +16 -2
  329. package/dist/utilities/file/file.utility.js +23 -61
  330. package/dist/utilities/file/file.utility.js.map +1 -1
  331. package/dist/utilities/hcl/hcl.utility.d.ts +128 -0
  332. package/dist/utilities/hcl/hcl.utility.js +402 -0
  333. package/dist/utilities/hcl/hcl.utility.js.map +1 -0
  334. package/dist/utilities/http/http.utility.d.ts +57 -0
  335. package/dist/utilities/http/http.utility.js +98 -0
  336. package/dist/utilities/http/http.utility.js.map +1 -0
  337. package/dist/utilities/node/node.utility.d.ts +3 -0
  338. package/dist/utilities/node/node.utility.js +3 -0
  339. package/dist/utilities/node/node.utility.js.map +1 -1
  340. package/dist/utilities/object/object.utility.d.ts +12 -0
  341. package/dist/utilities/object/object.utility.js +12 -0
  342. package/dist/utilities/object/object.utility.js.map +1 -1
  343. package/dist/utilities/project/project.utility.d.ts +28 -0
  344. package/dist/utilities/project/project.utility.js +35 -0
  345. package/dist/utilities/project/project.utility.js.map +1 -0
  346. package/dist/utilities/string/string.utility.d.ts +41 -0
  347. package/dist/utilities/string/string.utility.js +65 -0
  348. package/dist/utilities/string/string.utility.js.map +1 -0
  349. package/dist/utilities/terraform/terraform.utility.d.ts +276 -0
  350. package/dist/utilities/terraform/terraform.utility.js +623 -0
  351. package/dist/utilities/terraform/terraform.utility.js.map +1 -0
  352. package/dist/utilities/test-helpers/test-classes.d.ts +36 -30
  353. package/dist/utilities/test-helpers/test-classes.js +38 -39
  354. package/dist/utilities/test-helpers/test-classes.js.map +1 -1
  355. package/dist/utilities/test-helpers/test-models.d.ts +8 -1
  356. package/dist/utilities/test-helpers/test-models.js +37 -12
  357. package/dist/utilities/test-helpers/test-models.js.map +1 -1
  358. package/dist/utilities/test-helpers/test-modes.d.ts +315 -0
  359. package/dist/utilities/test-helpers/test-modes.js +486 -0
  360. package/dist/utilities/test-helpers/test-modes.js.map +1 -0
  361. package/dist/utilities/test-helpers/test-modules.d.ts +47 -0
  362. package/dist/utilities/test-helpers/test-modules.js +85 -0
  363. package/dist/utilities/test-helpers/test-modules.js.map +1 -0
  364. package/dist/utilities/test-helpers/test-overlays.d.ts +20 -2
  365. package/dist/utilities/test-helpers/test-overlays.js +56 -6
  366. package/dist/utilities/test-helpers/test-overlays.js.map +1 -1
  367. package/dist/utilities/test-helpers/test-resources.d.ts +23 -3
  368. package/dist/utilities/test-helpers/test-resources.js +83 -23
  369. package/dist/utilities/test-helpers/test-resources.js.map +1 -1
  370. package/dist/utilities/validation/validation.utility.d.ts +24 -0
  371. package/dist/utilities/validation/validation.utility.js +24 -0
  372. package/dist/utilities/validation/validation.utility.js.map +1 -1
  373. package/package.json +12 -6
  374. package/dist/functions/diff/diff.utility.js.map +0 -1
  375. package/dist/services/capture/capture.service.d.ts +0 -19
  376. package/dist/services/capture/capture.service.js +0 -43
  377. package/dist/services/capture/capture.service.js.map +0 -1
  378. package/dist/services/state-management/local-encryption.state-provider.d.ts +0 -20
  379. package/dist/services/state-management/local-encryption.state-provider.js +0 -90
  380. package/dist/services/state-management/local-encryption.state-provider.js.map +0 -1
  381. package/dist/utilities/cidr/cidr.utility.d.ts +0 -10
  382. package/dist/utilities/cidr/cidr.utility.js +0 -51
  383. package/dist/utilities/cidr/cidr.utility.js.map +0 -1
@@ -0,0 +1,140 @@
1
+ import { TransactionError } from '../errors/index.js';
2
+ import { Container } from '../functions/container/container.js';
3
+ import { DiffAction } from '../functions/diff/diff.js';
4
+ import { ResourceDataRepository } from '../resources/resource-data.repository.js';
5
+ import { AResource } from '../resources/resource.abstract.js';
6
+ import { ATerraformResource } from '../resources/terraform-resource.abstract.js';
7
+ import { StateManagementService } from '../services/state-management/state-management.service.js';
8
+ import { TransactionService } from '../services/transaction/transaction.service.js';
9
+ import { StringUtility } from '../utilities/string/string.utility.js';
10
+ /**
11
+ * Flattens a resource response to the strings terraform's `data "external"` protocol accepts - it
12
+ * takes a JSON object of strings and nothing else, so an action returning `{ Port: 80 }` fails the
13
+ * apply. This is the same contract {@link commit} enforces on the way back in, applied here so the
14
+ * CLI and the commit path cannot disagree.
15
+ *
16
+ * A `null`/`undefined` value is rejected rather than emitted as `"null"`: no resource legitimately
17
+ * emits one, so it signals a broken action, and the string would otherwise land in octo state at
18
+ * the next commit.
19
+ */
20
+ function toFlatStringResponse(resourceId, response) {
21
+ const flatResponse = {};
22
+ const nullKeys = [];
23
+ for (const [key, value] of Object.entries(response)) {
24
+ if (value === null || value === undefined) {
25
+ nullKeys.push(key);
26
+ }
27
+ else {
28
+ flatResponse[key] = String(value);
29
+ }
30
+ }
31
+ if (nullKeys.length > 0) {
32
+ throw new TransactionError(`Resource "${resourceId}" returned null response values: ${nullKeys.join(', ')}! ` +
33
+ 'Every response key must carry a value.');
34
+ }
35
+ return flatResponse;
36
+ }
37
+ /**
38
+ * Runs a single resource action, invoked by terraform mid-apply for an external resource.
39
+ *
40
+ * Octo-internal: not a step of the user's generate → validate → apply → commit run — terraform
41
+ * shells back into it from a generated `local-exec` provisioner; users never run it by hand.
42
+ *
43
+ * Boots normally, computes the full resource diff, filters to `resourceId` — the diff decides
44
+ * whether this is an add, update, delete, or noop. Explicit `inputs`
45
+ * (`<parentResourceId>.<responseKey>` keys) are injected into the parent resources' responses in
46
+ * memory before the action runs. Rejects a `resourceId` that is not an external resource.
47
+ *
48
+ * What the action made of the resource is recorded against it, and a delete clears that record.
49
+ * Repeating a call for the same inputs and the same desired properties does nothing, because that
50
+ * record says the work is already done - terraform replaces a `null_resource` by destroying and
51
+ * recreating it, so it calls back twice for one change, and octo state learns nothing of the first
52
+ * call until `commit`. Nothing else in octo state is touched.
53
+ *
54
+ * @internal
55
+ */
56
+ export async function runAction(app, { inputs = {}, resourceId }) {
57
+ const container = Container.getInstance();
58
+ const [resourceDataRepository, stateManagementService, transactionService] = await Promise.all([
59
+ container.get(ResourceDataRepository),
60
+ container.get(StateManagementService),
61
+ container.get(TransactionService),
62
+ ]);
63
+ const recordedState = await stateManagementService.getExternalResourceState(resourceId);
64
+ const diffs = await app.diff();
65
+ const transaction = transactionService.beginTransaction(diffs, {
66
+ filterResourceDiffsByResourceId: resourceId,
67
+ skipActualResourceUpdate: true,
68
+ yieldResourceDiffs: true,
69
+ yieldResourceTransaction: true,
70
+ });
71
+ const resourceDiffs = await transaction.next();
72
+ const allDiffs = resourceDiffs.value.flat();
73
+ // A terraform resource is managed by terraform and must never be run via run-action.
74
+ // Guard both paths: a changed resource surfaces in `allDiffs`; an unchanged one has no diff at all,
75
+ // so we also check the resource in the new graph directly.
76
+ const targetResource = resourceDataRepository
77
+ .getNewResourcesByProperties()
78
+ .find((r) => r.resourceId === resourceId && !r.isMarkedDeleted());
79
+ if (targetResource instanceof ATerraformResource || allDiffs.some((d) => d.node instanceof ATerraformResource)) {
80
+ throw new TransactionError(`Resource "${resourceId}" is a terraform resource and cannot be run via run-action!`);
81
+ }
82
+ if (allDiffs.length === 0) {
83
+ // Noop: still report the current response so terraform captures consistent outputs.
84
+ return { action: 'noop', resourceId, response: toFlatStringResponse(resourceId, targetResource?.response ?? {}) };
85
+ }
86
+ // The work is already done: the record says an action ran for these inputs and left the resource
87
+ // in the shape being asked for again. The diff cannot tell, because it is computed against the
88
+ // last commit either way.
89
+ if (recordedState &&
90
+ targetResource &&
91
+ StringUtility.deterministicHash(recordedState.inputs) === StringUtility.deterministicHash(inputs) &&
92
+ StringUtility.deterministicHash(recordedState.properties) ===
93
+ StringUtility.deterministicHash(targetResource.properties)) {
94
+ return { action: 'noop', resourceId, response: recordedState.response };
95
+ }
96
+ // Inject explicit inputs into the parent resources the actions will read. An input is keyed
97
+ // either as "<parentId>.<key>" (one response key, from a native parent) or bare "<parentId>"
98
+ // (an external parent's entire response map, passed as one JSON object — its keys aren't
99
+ // enumerable at generation time). Inputs not matching a parent are ignored.
100
+ for (const diff of allDiffs) {
101
+ const node = diff.node;
102
+ for (const parent of node.parents) {
103
+ const parentResource = parent instanceof AResource ? parent : parent.getActual();
104
+ for (const [inputKey, inputValue] of Object.entries(inputs)) {
105
+ const separatorIndex = inputKey.indexOf('.');
106
+ if (separatorIndex === -1) {
107
+ if (inputKey === parentResource.resourceId) {
108
+ const wholeResponse = typeof inputValue === 'string' ? JSON.parse(inputValue) : inputValue;
109
+ Object.assign(parentResource.response, wholeResponse);
110
+ }
111
+ }
112
+ else if (inputKey.substring(0, separatorIndex) === parentResource.resourceId) {
113
+ parentResource.response[inputKey.substring(separatorIndex + 1)] = inputValue;
114
+ }
115
+ }
116
+ }
117
+ }
118
+ // Run the action.
119
+ await transaction.next();
120
+ const action = allDiffs.some((d) => d.action === DiffAction.DELETE && d.field === 'resourceId')
121
+ ? 'delete'
122
+ : allDiffs.some((d) => d.action === DiffAction.ADD && d.field === 'resourceId')
123
+ ? 'add'
124
+ : 'update';
125
+ if (action === 'delete') {
126
+ await stateManagementService.deleteExternalResourceState(resourceId);
127
+ return { action, resourceId, response: {} };
128
+ }
129
+ // Record what the action made of the resource, for the next call and for the next plan.
130
+ const targetContext = allDiffs[0].node.getContext();
131
+ const resource = resourceDataRepository.getNewResourceByContext(targetContext);
132
+ const response = toFlatStringResponse(resourceId, resource?.response ?? {});
133
+ await stateManagementService.saveExternalResourceState(resourceId, {
134
+ inputs,
135
+ properties: JSON.parse(JSON.stringify(resource?.properties ?? {})),
136
+ response,
137
+ });
138
+ return { action, resourceId, response };
139
+ }
140
+ //# sourceMappingURL=run-action.mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-action.mode.js","sourceRoot":"","sources":["../../src/modes/run-action.mode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEhE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0DAA0D,CAAC;AAClG,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAQtE;;;;;;;;;GASG;AACH,SAAS,oBAAoB,CAAC,UAAkB,EAAE,QAAiC;IACjF,MAAM,YAAY,GAA2B,EAAE,CAAC;IAChD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,gBAAgB,CACxB,aAAa,UAAU,oCAAoC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YAChF,wCAAwC,CAC3C,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAQ,EACR,EAAE,MAAM,GAAG,EAAE,EAAE,UAAU,EAA4D;IAErF,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IAC1C,MAAM,CAAC,sBAAsB,EAAE,sBAAsB,EAAE,kBAAkB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC7F,SAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC;QACrC,SAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC;QACrC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC;KAClC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,MAAM,sBAAsB,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC;IAExF,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,KAAK,EAAE;QAC7D,+BAA+B,EAAE,UAAU;QAC3C,wBAAwB,EAAE,IAAI;QAC9B,kBAAkB,EAAE,IAAI;QACxB,wBAAwB,EAAE,IAAI;KAC/B,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAI,aAAa,CAAC,KAA0B,CAAC,IAAI,EAAE,CAAC;IAElE,qFAAqF;IACrF,oGAAoG;IACpG,2DAA2D;IAC3D,MAAM,cAAc,GAAG,sBAAsB;SAC1C,2BAA2B,EAAE;SAC7B,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;IACpE,IAAI,cAAc,YAAY,kBAAkB,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,YAAY,kBAAkB,CAAC,EAAE,CAAC;QAC/G,MAAM,IAAI,gBAAgB,CAAC,aAAa,UAAU,6DAA6D,CAAC,CAAC;IACnH,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,oFAAoF;QACpF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,oBAAoB,CAAC,UAAU,EAAE,cAAc,EAAE,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;IACpH,CAAC;IAED,iGAAiG;IACjG,+FAA+F;IAC/F,0BAA0B;IAC1B,IACE,aAAa;QACb,cAAc;QACd,aAAa,CAAC,iBAAiB,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,aAAa,CAAC,iBAAiB,CAAC,MAAM,CAAC;QACjG,aAAa,CAAC,iBAAiB,CAAC,aAAa,CAAC,UAAU,CAAC;YACvD,aAAa,CAAC,iBAAiB,CAAC,cAAc,CAAC,UAAU,CAAC,EAC5D,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC;IAC1E,CAAC;IAED,4FAA4F;IAC5F,6FAA6F;IAC7F,yFAAyF;IACzF,4EAA4E;IAC5E,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAuB,CAAC;QAC1C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,cAAc,GAAG,MAAM,YAAY,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACjF,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5D,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC7C,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC1B,IAAI,QAAQ,KAAK,cAAc,CAAC,UAAU,EAAE,CAAC;wBAC3C,MAAM,aAAa,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;wBAC3F,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;oBACxD,CAAC;gBACH,CAAC;qBAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,KAAK,cAAc,CAAC,UAAU,EAAE,CAAC;oBAC/E,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;gBAC/E,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;IAEzB,MAAM,MAAM,GAA8B,QAAQ,CAAC,IAAI,CACrD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAClE;QACC,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC;YAC7E,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,QAAQ,CAAC;IAEf,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,sBAAsB,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC;QACrE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC9C,CAAC;IAED,wFAAwF;IACxF,MAAM,aAAa,GAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAwB,CAAC,UAAU,EAAE,CAAC;IACzE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;IAC/E,MAAM,QAAQ,GAAG,oBAAoB,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC5E,MAAM,sBAAsB,CAAC,yBAAyB,CAAC,UAAU,EAAE;QACjE,MAAM;QACN,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC;QAClE,QAAQ;KACT,CAAC,CAAC;IAEH,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,186 @@
1
+ import type { TerraformFolderOutput, TerraformResourceOutput } from '../app.type.js';
2
+ import { type AggregatedResourceAction } from '../functions/diff/aggregate-resource-actions.js';
3
+ import type { ModelTransactionResult } from './apply-transaction.js';
4
+ /**
5
+ * One argument terraform plans to change on a resource, with the values on either side.
6
+ *
7
+ * Values are rendered, truncated strings rather than the raw payload: a report is read, not
8
+ * replayed, and the raw payload of a real resource is both enormous and a place secrets live.
9
+ */
10
+ export interface ValidateFieldChange {
11
+ field: string;
12
+ /**
13
+ * The current value. Absent on a create. `(sensitive)` when terraform marked it so.
14
+ */
15
+ from?: string;
16
+ /**
17
+ * The planned value. `(known after apply)` when terraform cannot say yet.
18
+ */
19
+ to?: string;
20
+ }
21
+ /**
22
+ * One terraform address and the actions terraform plans on it (`create`, `update`, `delete`, …).
23
+ */
24
+ export interface ValidateTerraformChange {
25
+ address: string;
26
+ /**
27
+ * Which arguments moved, for the changes where that is the whole question: an in-place `update`,
28
+ * and a `create`+`delete` where the point is *which* argument forced the replacement.
29
+ *
30
+ * Left empty on a plain create or delete, where the address and the action already say everything.
31
+ */
32
+ changedFields: ValidateFieldChange[];
33
+ /**
34
+ * How many further arguments moved that `changedFields` does not list. Absent means none were
35
+ * left out: a reader of a replace has to be able to tell a complete field list from a capped one.
36
+ */
37
+ omittedFieldCount?: number;
38
+ tfActions: string[];
39
+ }
40
+ /**
41
+ * What `validate` saw, as a report rather than a verdict.
42
+ *
43
+ * Octo's diff and terraform's plan measure different things from different baselines: octo's diff is
44
+ * `desired graph − last committed graph`, terraform's plan is `desired HCL − real cloud state`. The
45
+ * report correlates the two and explains what it can. Only being unable to read a plan makes it
46
+ * unsuccessful — see {@link ValidateReport.failures}.
47
+ */
48
+ export interface ValidateReport {
49
+ /**
50
+ * Terraform changes with no octo diff of their own that octo can explain: the resource references
51
+ * something whose identity moved, or the resource no longer renders that address.
52
+ */
53
+ attributedChanges: {
54
+ address: string;
55
+ causeKind: 'address-no-longer-rendered' | 'identity-changed';
56
+ causeResourceId: string;
57
+ moduleId: string;
58
+ tfActions: string[];
59
+ }[];
60
+ /**
61
+ * How far this report can be trusted, decided by whether intent changed.
62
+ *
63
+ * - `exact` — octo's diff is empty. Nothing is mocked and no dependency output moves, so every
64
+ * folder's plan reflects reality and drift detection is reliable.
65
+ * - `approximate` — octo's diff is non-empty. Each folder is planned alone against the *last
66
+ * applied* outputs of its dependencies, so a cross-folder consequence of this change is invisible
67
+ * until apply, and a renamed producer's outputs come from `mock_outputs`. The report may both
68
+ * understate what apply will do and overstate drift.
69
+ */
70
+ confidence: 'approximate' | 'exact';
71
+ /**
72
+ * Destroys terraform plans of a resource whose class declares that destroying it loses data, whatever
73
+ * the cause.
74
+ */
75
+ dataLoss: {
76
+ address: string;
77
+ message: string;
78
+ moduleId: string;
79
+ resourceId: string;
80
+ }[];
81
+ /**
82
+ * Terraform changes nothing in octo explains: the infrastructure moved out from under intent.
83
+ */
84
+ drift: {
85
+ address: string;
86
+ moduleId: string;
87
+ tfActions: string[];
88
+ }[];
89
+ /**
90
+ * Folders terraform could not plan. The only unsuccessful outcome, because validate cannot report
91
+ * on a folder it was unable to read.
92
+ */
93
+ failures: {
94
+ message: string;
95
+ moduleId?: string;
96
+ }[];
97
+ /**
98
+ * Octo resources that changed, each with the terraform changes correlated to it. An empty
99
+ * `terraformChanges` means the intent change carries no infrastructure cost.
100
+ */
101
+ intentChanges: {
102
+ moduleId?: string;
103
+ octoAction: AggregatedResourceAction['action'];
104
+ reason?: string;
105
+ resourceContext: string;
106
+ resourceId: string;
107
+ terraformChanges: ValidateTerraformChange[];
108
+ }[];
109
+ /**
110
+ * Resources rendered into another module folder than the one holding their terraform state. The state
111
+ * moves with them before terraform runs, so terraform updates them in place.
112
+ */
113
+ moves: {
114
+ fromModuleId: string;
115
+ moduleId: string;
116
+ resourceId: string;
117
+ }[];
118
+ /**
119
+ * Observations that judge nothing: a folder octo does not track, a delete it cannot correlate.
120
+ */
121
+ notes: {
122
+ message: string;
123
+ moduleId?: string;
124
+ }[];
125
+ /**
126
+ * Terraform changes planned against a value that may be a `mock_outputs` placeholder. Reported
127
+ * apart from {@link ValidateReport.drift}, and never as drift.
128
+ */
129
+ uncertain: {
130
+ address: string;
131
+ moduleId: string;
132
+ reason: string;
133
+ tfActions: string[];
134
+ }[];
135
+ }
136
+ /**
137
+ * One module's parsed terraform plan, i.e. the JSON produced by `terraform show -json <plan-file>`
138
+ * (run via terragrunt by the caller, so it is backend-agnostic). Only `resource_changes` is read.
139
+ */
140
+ export interface TerraformPlan {
141
+ resource_changes?: {
142
+ address: string;
143
+ change?: {
144
+ actions?: string[];
145
+ after?: Record<string, unknown> | null;
146
+ after_sensitive?: Record<string, unknown> | boolean | null;
147
+ after_unknown?: Record<string, unknown> | boolean | null;
148
+ before?: Record<string, unknown> | null;
149
+ before_sensitive?: Record<string, unknown> | boolean | null;
150
+ };
151
+ mode?: string;
152
+ }[];
153
+ }
154
+ /**
155
+ * Read-only correlation of `terraform plan` against intent. Never writes state or folders.
156
+ *
157
+ * `plans` maps each module folder's id to its parsed terraform plan, and `planErrors` maps a folder
158
+ * terraform *failed* to plan to the reason why. The two are disjoint, and a folder in neither was
159
+ * never inspected.
160
+ *
161
+ * `persistedMappings` is the octo→terraform mapping captured by the last commit. It supplies the
162
+ * addresses of resources deleted since (absent from this boot's generated files), and identifies
163
+ * producers that have never been applied, whose outputs terragrunt can only supply as a mock.
164
+ *
165
+ * Plans are partitioned by the tracked set (intent ∪ the committed folder record,
166
+ * `previousFolders`): a plan for a module the sweep filled is demanded and correlated; a plan for a
167
+ * committed-then-deleted (emptied) folder is read when supplied; a plan for a folder octo does
168
+ * **not** track is noted and excluded from all correlation, and re-declaring its module in intent
169
+ * re-adopts it.
170
+ *
171
+ * `externalResourceStateIds` names every external resource a `run-action` published and no commit
172
+ * has recorded yet, from `StateManagementService.listExternalResourceStateIds()`. Each one is
173
+ * reported as a note.
174
+ *
175
+ * By-design limit: correlation is resource-level, not field-level.
176
+ *
177
+ * @internal
178
+ */
179
+ export declare function validate({ externalResourceStateIds, persistedMappings, planErrors, plans, previousFolders, transaction, }: {
180
+ externalResourceStateIds?: string[];
181
+ persistedMappings: Map<string, TerraformResourceOutput>;
182
+ planErrors?: Map<string, string>;
183
+ plans: Map<string, TerraformPlan>;
184
+ previousFolders?: TerraformFolderOutput[];
185
+ transaction: ModelTransactionResult;
186
+ }): Promise<ValidateReport>;