@quadnix/octo 0.0.30 → 0.1.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 (362) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +25 -3
  3. package/dist/app.type.d.ts +143 -4
  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 +1 -1
  18. package/dist/decorators/model.decorator.js +1 -1
  19. package/dist/decorators/module.decorator.d.ts +16 -10
  20. package/dist/decorators/module.decorator.js +16 -10
  21. package/dist/decorators/module.decorator.js.map +1 -1
  22. package/dist/decorators/on-event.decorator.d.ts +5 -0
  23. package/dist/decorators/on-event.decorator.js +5 -0
  24. package/dist/decorators/on-event.decorator.js.map +1 -1
  25. package/dist/decorators/validate.decorator.d.ts +15 -1
  26. package/dist/decorators/validate.decorator.js +15 -1
  27. package/dist/decorators/validate.decorator.js.map +1 -1
  28. package/dist/errors/container.error.d.ts +18 -0
  29. package/dist/errors/container.error.js +18 -0
  30. package/dist/errors/container.error.js.map +1 -1
  31. package/dist/errors/index.d.ts +1 -0
  32. package/dist/errors/index.js +1 -0
  33. package/dist/errors/index.js.map +1 -1
  34. package/dist/errors/module.error.d.ts +6 -0
  35. package/dist/errors/module.error.js +6 -0
  36. package/dist/errors/module.error.js.map +1 -1
  37. package/dist/errors/node.error.d.ts +56 -0
  38. package/dist/errors/node.error.js +56 -0
  39. package/dist/errors/node.error.js.map +1 -1
  40. package/dist/errors/schema.error.d.ts +6 -0
  41. package/dist/errors/schema.error.js +6 -0
  42. package/dist/errors/schema.error.js.map +1 -1
  43. package/dist/errors/terraform.error.d.ts +19 -0
  44. package/dist/errors/terraform.error.js +23 -0
  45. package/dist/errors/terraform.error.js.map +1 -0
  46. package/dist/errors/transaction.error.d.ts +61 -0
  47. package/dist/errors/transaction.error.js +61 -0
  48. package/dist/errors/transaction.error.js.map +1 -1
  49. package/dist/events/action.event.d.ts +0 -2
  50. package/dist/events/action.event.js +0 -2
  51. package/dist/events/action.event.js.map +1 -1
  52. package/dist/events/event.model.d.ts +21 -5
  53. package/dist/events/event.model.js +11 -5
  54. package/dist/events/event.model.js.map +1 -1
  55. package/dist/events/hook/commit.hook.event.d.ts +0 -6
  56. package/dist/events/hook/commit.hook.event.js +0 -6
  57. package/dist/events/hook/commit.hook.event.js.map +1 -1
  58. package/dist/events/hook/hook.event.d.ts +0 -2
  59. package/dist/events/hook/hook.event.js +0 -2
  60. package/dist/events/hook/hook.event.js.map +1 -1
  61. package/dist/events/hook/model.hook.event.d.ts +0 -6
  62. package/dist/events/hook/model.hook.event.js +0 -6
  63. package/dist/events/hook/model.hook.event.js.map +1 -1
  64. package/dist/events/hook/resource.hook.event.d.ts +0 -6
  65. package/dist/events/hook/resource.hook.event.js +0 -6
  66. package/dist/events/hook/resource.hook.event.js.map +1 -1
  67. package/dist/events/index.d.ts +3 -0
  68. package/dist/events/index.js +3 -0
  69. package/dist/events/index.js.map +1 -1
  70. package/dist/events/mode-result.event.d.ts +57 -0
  71. package/dist/events/mode-result.event.js +24 -0
  72. package/dist/events/mode-result.event.js.map +1 -0
  73. package/dist/events/mode.event.d.ts +57 -0
  74. package/dist/events/mode.event.js +32 -0
  75. package/dist/events/mode.event.js.map +1 -0
  76. package/dist/events/module.event.d.ts +0 -2
  77. package/dist/events/module.event.js +0 -2
  78. package/dist/events/module.event.js.map +1 -1
  79. package/dist/events/registration.event.d.ts +18 -14
  80. package/dist/events/registration.event.js +18 -14
  81. package/dist/events/registration.event.js.map +1 -1
  82. package/dist/events/serialization.event.d.ts +15 -12
  83. package/dist/events/serialization.event.js +15 -12
  84. package/dist/events/serialization.event.js.map +1 -1
  85. package/dist/events/terraform.event.d.ts +42 -0
  86. package/dist/events/terraform.event.js +31 -0
  87. package/dist/events/terraform.event.js.map +1 -0
  88. package/dist/events/transaction.event.d.ts +0 -37
  89. package/dist/events/transaction.event.js +0 -28
  90. package/dist/events/transaction.event.js.map +1 -1
  91. package/dist/functions/container/container.d.ts +54 -13
  92. package/dist/functions/container/container.js +63 -18
  93. package/dist/functions/container/container.js.map +1 -1
  94. package/dist/functions/container/test-container.d.ts +43 -29
  95. package/dist/functions/container/test-container.js +71 -43
  96. package/dist/functions/container/test-container.js.map +1 -1
  97. package/dist/functions/dependency/dependency.d.ts +82 -8
  98. package/dist/functions/dependency/dependency.js +80 -14
  99. package/dist/functions/dependency/dependency.js.map +1 -1
  100. package/dist/functions/diff/aggregate-resource-actions.d.ts +19 -0
  101. package/dist/functions/diff/aggregate-resource-actions.js +41 -0
  102. package/dist/functions/diff/aggregate-resource-actions.js.map +1 -0
  103. package/dist/functions/diff/diff-metadata.d.ts +21 -3
  104. package/dist/functions/diff/diff-metadata.js +18 -0
  105. package/dist/functions/diff/diff-metadata.js.map +1 -1
  106. package/dist/functions/diff/diff.d.ts +55 -1
  107. package/dist/functions/diff/diff.js +44 -3
  108. package/dist/functions/diff/diff.js.map +1 -1
  109. package/dist/functions/diff/diff.utility.d.ts +17 -2
  110. package/dist/functions/diff/diff.utility.js +53 -38
  111. package/dist/functions/diff/diff.utility.js.map +1 -1
  112. package/dist/functions/hook/commit.hook.d.ts +16 -1
  113. package/dist/functions/hook/commit.hook.js +21 -6
  114. package/dist/functions/hook/commit.hook.js.map +1 -1
  115. package/dist/functions/hook/model-action.hook.d.ts +16 -1
  116. package/dist/functions/hook/model-action.hook.js +21 -6
  117. package/dist/functions/hook/model-action.hook.js.map +1 -1
  118. package/dist/functions/hook/resource-action.hook.d.ts +16 -1
  119. package/dist/functions/hook/resource-action.hook.js +21 -6
  120. package/dist/functions/hook/resource-action.hook.js.map +1 -1
  121. package/dist/functions/node/node-action.abstract.d.ts +23 -0
  122. package/dist/functions/node/node-action.abstract.js +20 -0
  123. package/dist/functions/node/node-action.abstract.js.map +1 -1
  124. package/dist/functions/node/node.abstract.d.ts +56 -5
  125. package/dist/functions/node/node.abstract.js +85 -12
  126. package/dist/functions/node/node.abstract.js.map +1 -1
  127. package/dist/functions/node/node.interface.d.ts +1 -0
  128. package/dist/functions/schema/schema.d.ts +7 -0
  129. package/dist/functions/schema/schema.js +9 -0
  130. package/dist/functions/schema/schema.js.map +1 -1
  131. package/dist/index.d.ts +5 -1
  132. package/dist/index.js +4 -1
  133. package/dist/index.js.map +1 -1
  134. package/dist/main.d.ts +244 -14
  135. package/dist/main.js +361 -72
  136. package/dist/main.js.map +1 -1
  137. package/dist/models/account/account.model.d.ts +37 -7
  138. package/dist/models/account/account.model.js +40 -8
  139. package/dist/models/account/account.model.js.map +1 -1
  140. package/dist/models/account/account.schema.d.ts +13 -1
  141. package/dist/models/account/account.schema.js +12 -0
  142. package/dist/models/account/account.schema.js.map +1 -1
  143. package/dist/models/app/app.model.d.ts +16 -1
  144. package/dist/models/app/app.model.js +19 -4
  145. package/dist/models/app/app.model.js.map +1 -1
  146. package/dist/models/app/app.schema.d.ts +6 -0
  147. package/dist/models/app/app.schema.js +6 -0
  148. package/dist/models/app/app.schema.js.map +1 -1
  149. package/dist/models/deployment/deployment.model.d.ts +13 -1
  150. package/dist/models/deployment/deployment.model.js +16 -4
  151. package/dist/models/deployment/deployment.model.js.map +1 -1
  152. package/dist/models/deployment/deployment.schema.d.ts +2 -0
  153. package/dist/models/deployment/deployment.schema.js +2 -0
  154. package/dist/models/deployment/deployment.schema.js.map +1 -1
  155. package/dist/models/environment/environment.model.d.ts +13 -1
  156. package/dist/models/environment/environment.model.js +20 -8
  157. package/dist/models/environment/environment.model.js.map +1 -1
  158. package/dist/models/environment/environment.schema.d.ts +2 -0
  159. package/dist/models/environment/environment.schema.js +2 -0
  160. package/dist/models/environment/environment.schema.js.map +1 -1
  161. package/dist/models/execution/execution.model.d.ts +20 -2
  162. package/dist/models/execution/execution.model.js +46 -28
  163. package/dist/models/execution/execution.model.js.map +1 -1
  164. package/dist/models/execution/execution.schema.d.ts +11 -0
  165. package/dist/models/execution/execution.schema.js +11 -0
  166. package/dist/models/execution/execution.schema.js.map +1 -1
  167. package/dist/models/filesystem/filesystem.model.d.ts +27 -1
  168. package/dist/models/filesystem/filesystem.model.js +30 -4
  169. package/dist/models/filesystem/filesystem.model.js.map +1 -1
  170. package/dist/models/filesystem/filesystem.schema.d.ts +5 -0
  171. package/dist/models/filesystem/filesystem.schema.js +5 -0
  172. package/dist/models/filesystem/filesystem.schema.js.map +1 -1
  173. package/dist/models/image/image.model.d.ts +17 -4
  174. package/dist/models/image/image.model.js +20 -7
  175. package/dist/models/image/image.model.js.map +1 -1
  176. package/dist/models/image/image.schema.d.ts +8 -0
  177. package/dist/models/image/image.schema.js +8 -0
  178. package/dist/models/image/image.schema.js.map +1 -1
  179. package/dist/models/model-action.interface.d.ts +17 -4
  180. package/dist/models/model.abstract.d.ts +96 -1
  181. package/dist/models/model.abstract.js +106 -7
  182. package/dist/models/model.abstract.js.map +1 -1
  183. package/dist/models/model.interface.d.ts +3 -0
  184. package/dist/models/pipeline/pipeline.model.d.ts +13 -1
  185. package/dist/models/pipeline/pipeline.model.js +18 -6
  186. package/dist/models/pipeline/pipeline.model.js.map +1 -1
  187. package/dist/models/pipeline/pipeline.schema.d.ts +8 -0
  188. package/dist/models/pipeline/pipeline.schema.js +8 -0
  189. package/dist/models/pipeline/pipeline.schema.js.map +1 -1
  190. package/dist/models/region/region.model.d.ts +16 -1
  191. package/dist/models/region/region.model.js +19 -4
  192. package/dist/models/region/region.model.js.map +1 -1
  193. package/dist/models/region/region.schema.d.ts +6 -0
  194. package/dist/models/region/region.schema.js +6 -0
  195. package/dist/models/region/region.schema.js.map +1 -1
  196. package/dist/models/server/server.model.d.ts +13 -1
  197. package/dist/models/server/server.model.js +16 -4
  198. package/dist/models/server/server.model.js.map +1 -1
  199. package/dist/models/server/server.schema.d.ts +3 -1
  200. package/dist/models/server/server.schema.js +3 -1
  201. package/dist/models/server/server.schema.js.map +1 -1
  202. package/dist/models/service/service.model.d.ts +15 -1
  203. package/dist/models/service/service.model.js +15 -1
  204. package/dist/models/service/service.model.js.map +1 -1
  205. package/dist/models/service/service.schema.d.ts +4 -1
  206. package/dist/models/service/service.schema.js +4 -1
  207. package/dist/models/service/service.schema.js.map +1 -1
  208. package/dist/models/subnet/subnet.model.d.ts +27 -3
  209. package/dist/models/subnet/subnet.model.js +40 -16
  210. package/dist/models/subnet/subnet.model.js.map +1 -1
  211. package/dist/models/subnet/subnet.schema.d.ts +9 -0
  212. package/dist/models/subnet/subnet.schema.js +9 -0
  213. package/dist/models/subnet/subnet.schema.js.map +1 -1
  214. package/dist/modes/apply-transaction.d.ts +23 -0
  215. package/dist/modes/apply-transaction.js +25 -0
  216. package/dist/modes/apply-transaction.js.map +1 -0
  217. package/dist/modes/commit.mode.d.ts +54 -0
  218. package/dist/modes/commit.mode.js +235 -0
  219. package/dist/modes/commit.mode.js.map +1 -0
  220. package/dist/modes/generate.mode.d.ts +29 -0
  221. package/dist/modes/generate.mode.js +49 -0
  222. package/dist/modes/generate.mode.js.map +1 -0
  223. package/dist/modes/run-action.mode.d.ts +30 -0
  224. package/dist/modes/run-action.mode.js +140 -0
  225. package/dist/modes/run-action.mode.js.map +1 -0
  226. package/dist/modes/validate.mode.d.ts +162 -0
  227. package/dist/modes/validate.mode.js +480 -0
  228. package/dist/modes/validate.mode.js.map +1 -0
  229. package/dist/modules/module.abstract.d.ts +51 -0
  230. package/dist/modules/module.abstract.js +36 -0
  231. package/dist/modules/module.abstract.js.map +1 -1
  232. package/dist/modules/module.container.d.ts +36 -0
  233. package/dist/modules/module.container.js +36 -0
  234. package/dist/modules/module.container.js.map +1 -1
  235. package/dist/modules/test-module.container.d.ts +139 -25
  236. package/dist/modules/test-module.container.js +410 -178
  237. package/dist/modules/test-module.container.js.map +1 -1
  238. package/dist/overlays/anchor.abstract.d.ts +32 -1
  239. package/dist/overlays/anchor.abstract.js +42 -11
  240. package/dist/overlays/anchor.abstract.js.map +1 -1
  241. package/dist/overlays/anchor.schema.d.ts +21 -0
  242. package/dist/overlays/anchor.schema.js +21 -0
  243. package/dist/overlays/anchor.schema.js.map +1 -1
  244. package/dist/overlays/overlay-data.repository.d.ts +18 -0
  245. package/dist/overlays/overlay-data.repository.js +18 -0
  246. package/dist/overlays/overlay-data.repository.js.map +1 -1
  247. package/dist/overlays/overlay.abstract.d.ts +56 -1
  248. package/dist/overlays/overlay.abstract.js +79 -20
  249. package/dist/overlays/overlay.abstract.js.map +1 -1
  250. package/dist/overlays/overlay.schema.d.ts +20 -0
  251. package/dist/overlays/overlay.schema.js +20 -0
  252. package/dist/overlays/overlay.schema.js.map +1 -1
  253. package/dist/resources/resource-action.interface.d.ts +26 -2
  254. package/dist/resources/resource-data.repository.d.ts +63 -1
  255. package/dist/resources/resource-data.repository.js +94 -4
  256. package/dist/resources/resource-data.repository.js.map +1 -1
  257. package/dist/resources/resource.abstract.d.ts +118 -3
  258. package/dist/resources/resource.abstract.js +166 -33
  259. package/dist/resources/resource.abstract.js.map +1 -1
  260. package/dist/resources/resource.schema.d.ts +29 -1
  261. package/dist/resources/resource.schema.js +28 -0
  262. package/dist/resources/resource.schema.js.map +1 -1
  263. package/dist/resources/terraform-resource.abstract.d.ts +44 -0
  264. package/dist/resources/terraform-resource.abstract.js +45 -0
  265. package/dist/resources/terraform-resource.abstract.js.map +1 -0
  266. package/dist/services/event/event.service.d.ts +30 -3
  267. package/dist/services/event/event.service.js +58 -16
  268. package/dist/services/event/event.service.js.map +1 -1
  269. package/dist/services/input/input.service.d.ts +52 -3
  270. package/dist/services/input/input.service.js +72 -8
  271. package/dist/services/input/input.service.js.map +1 -1
  272. package/dist/services/schema-translation/schema-translation.service.d.ts +9 -0
  273. package/dist/services/schema-translation/schema-translation.service.js +9 -0
  274. package/dist/services/schema-translation/schema-translation.service.js.map +1 -1
  275. package/dist/services/serialization/model/model-serialization.service.d.ts +26 -2
  276. package/dist/services/serialization/model/model-serialization.service.js +110 -62
  277. package/dist/services/serialization/model/model-serialization.service.js.map +1 -1
  278. package/dist/services/serialization/resource/resource-serialization.service.d.ts +33 -4
  279. package/dist/services/serialization/resource/resource-serialization.service.js +64 -28
  280. package/dist/services/serialization/resource/resource-serialization.service.js.map +1 -1
  281. package/dist/services/state-management/file-app-lock.utility.d.ts +43 -0
  282. package/dist/services/state-management/file-app-lock.utility.js +124 -0
  283. package/dist/services/state-management/file-app-lock.utility.js.map +1 -0
  284. package/dist/services/state-management/local-encryption.state-provider.d.ts +53 -2
  285. package/dist/services/state-management/local-encryption.state-provider.js +75 -49
  286. package/dist/services/state-management/local-encryption.state-provider.js.map +1 -1
  287. package/dist/services/state-management/local.state-provider.d.ts +49 -2
  288. package/dist/services/state-management/local.state-provider.js +70 -49
  289. package/dist/services/state-management/local.state-provider.js.map +1 -1
  290. package/dist/services/state-management/state-management.service.d.ts +141 -6
  291. package/dist/services/state-management/state-management.service.js +149 -4
  292. package/dist/services/state-management/state-management.service.js.map +1 -1
  293. package/dist/services/state-management/state-provider.interface.d.ts +55 -1
  294. package/dist/services/state-management/terraform-state.service.d.ts +76 -0
  295. package/dist/services/state-management/terraform-state.service.js +154 -0
  296. package/dist/services/state-management/terraform-state.service.js.map +1 -0
  297. package/dist/services/state-management/test.state-provider.d.ts +38 -1
  298. package/dist/services/state-management/test.state-provider.js +52 -21
  299. package/dist/services/state-management/test.state-provider.js.map +1 -1
  300. package/dist/services/terraform/terraform.service.d.ts +426 -0
  301. package/dist/services/terraform/terraform.service.js +995 -0
  302. package/dist/services/terraform/terraform.service.js.map +1 -0
  303. package/dist/services/terraform/terraform.type.d.ts +387 -0
  304. package/dist/services/terraform/terraform.type.js +579 -0
  305. package/dist/services/terraform/terraform.type.js.map +1 -0
  306. package/dist/services/transaction/transaction.service.d.ts +86 -10
  307. package/dist/services/transaction/transaction.service.js +387 -232
  308. package/dist/services/transaction/transaction.service.js.map +1 -1
  309. package/dist/services/validation/validation.service.d.ts +13 -1
  310. package/dist/services/validation/validation.service.js +12 -0
  311. package/dist/services/validation/validation.service.js.map +1 -1
  312. package/dist/utilities/array/array.utility.d.ts +3 -0
  313. package/dist/utilities/array/array.utility.js +3 -0
  314. package/dist/utilities/array/array.utility.js.map +1 -1
  315. package/dist/utilities/file/file.utility.d.ts +15 -0
  316. package/dist/utilities/file/file.utility.js +18 -1
  317. package/dist/utilities/file/file.utility.js.map +1 -1
  318. package/dist/utilities/hcl/hcl.utility.d.ts +61 -0
  319. package/dist/utilities/hcl/hcl.utility.js +229 -0
  320. package/dist/utilities/hcl/hcl.utility.js.map +1 -0
  321. package/dist/utilities/node/node.utility.d.ts +3 -0
  322. package/dist/utilities/node/node.utility.js +3 -0
  323. package/dist/utilities/node/node.utility.js.map +1 -1
  324. package/dist/utilities/object/object.utility.d.ts +12 -0
  325. package/dist/utilities/object/object.utility.js +12 -0
  326. package/dist/utilities/object/object.utility.js.map +1 -1
  327. package/dist/utilities/project/project.utility.d.ts +28 -0
  328. package/dist/utilities/project/project.utility.js +35 -0
  329. package/dist/utilities/project/project.utility.js.map +1 -0
  330. package/dist/utilities/string/string.utility.d.ts +21 -0
  331. package/dist/utilities/string/string.utility.js +39 -0
  332. package/dist/utilities/string/string.utility.js.map +1 -0
  333. package/dist/utilities/terraform/terraform.utility.d.ts +227 -0
  334. package/dist/utilities/terraform/terraform.utility.js +434 -0
  335. package/dist/utilities/terraform/terraform.utility.js.map +1 -0
  336. package/dist/utilities/test-helpers/test-classes.d.ts +18 -31
  337. package/dist/utilities/test-helpers/test-classes.js +18 -41
  338. package/dist/utilities/test-helpers/test-classes.js.map +1 -1
  339. package/dist/utilities/test-helpers/test-models.js +12 -0
  340. package/dist/utilities/test-helpers/test-models.js.map +1 -1
  341. package/dist/utilities/test-helpers/test-modes.d.ts +315 -0
  342. package/dist/utilities/test-helpers/test-modes.js +463 -0
  343. package/dist/utilities/test-helpers/test-modes.js.map +1 -0
  344. package/dist/utilities/test-helpers/test-modules.d.ts +41 -0
  345. package/dist/utilities/test-helpers/test-modules.js +79 -0
  346. package/dist/utilities/test-helpers/test-modules.js.map +1 -0
  347. package/dist/utilities/test-helpers/test-overlays.d.ts +17 -1
  348. package/dist/utilities/test-helpers/test-overlays.js +49 -5
  349. package/dist/utilities/test-helpers/test-overlays.js.map +1 -1
  350. package/dist/utilities/test-helpers/test-resources.d.ts +19 -1
  351. package/dist/utilities/test-helpers/test-resources.js +61 -3
  352. package/dist/utilities/test-helpers/test-resources.js.map +1 -1
  353. package/dist/utilities/validation/validation.utility.d.ts +24 -0
  354. package/dist/utilities/validation/validation.utility.js +24 -0
  355. package/dist/utilities/validation/validation.utility.js.map +1 -1
  356. package/package.json +6 -5
  357. package/dist/services/capture/capture.service.d.ts +0 -19
  358. package/dist/services/capture/capture.service.js +0 -43
  359. package/dist/services/capture/capture.service.js.map +0 -1
  360. package/dist/utilities/cidr/cidr.utility.d.ts +0 -10
  361. package/dist/utilities/cidr/cidr.utility.js +0 -51
  362. package/dist/utilities/cidr/cidr.utility.js.map +0 -1
@@ -0,0 +1,426 @@
1
+ import { MatchingResource, type ResourceSchema, type TerraformFolderOutput, type UnknownResource } from '../../app.type.js';
2
+ import type { BaseResourceSchema } from '../../resources/resource.schema.js';
3
+ import { HclExpression, TerraformData, type TerraformLiteralType, TerraformResource, TerraformVariable } from './terraform.type.js';
4
+ /**
5
+ * Mapping of an octo resource to terraform. It is used during:
6
+ * - Validation: (octo diff <-> TF plan comparison).
7
+ * - Commit (tfstate outputs -> response population).
8
+ */
9
+ interface OctoTerraformResourceMapping {
10
+ /**
11
+ * Set for external resources only: the single output carrying the entire response map.
12
+ */
13
+ entireResponseOutput?: string;
14
+ /**
15
+ * The terragrunt folder this octo resource lives in (one folder per octo module).
16
+ */
17
+ moduleId: string;
18
+ /**
19
+ * Per response key, and the name of the output it is published under.
20
+ * Empty array for external resources (see {@link entireResponseOutput}).
21
+ */
22
+ outputMappings: {
23
+ key: string;
24
+ outputName: string;
25
+ }[];
26
+ /**
27
+ * The octo resource context, used during validate to match a TF plan entry back to its octo resource.
28
+ */
29
+ resourceContext: string;
30
+ /**
31
+ * The octo resource's unique id, used to look it up in the registry.
32
+ */
33
+ resourceId: string;
34
+ /**
35
+ * The addresses of every TerraformResource block generated for this octo resource.
36
+ * Used during validate to check the TF plan covers them all.
37
+ */
38
+ terraformAddresses: string[];
39
+ }
40
+ /**
41
+ * One octo resource's slice of the terraform module being generated.
42
+ *
43
+ * Obtained from {@link TerraformModuleScope.addOctoTerraformResource}. Everything you emit through it
44
+ * is attributed to that octo resource, which is how Octo later maps a terraform plan entry, and a
45
+ * terraform output, back to the resource it belongs to.
46
+ *
47
+ * @group Resources
48
+ *
49
+ * @see {@link ATerraformResource} for where this is used.
50
+ */
51
+ export interface OctoTerraformResourceScope<TResponse extends BaseResourceSchema['response'] = BaseResourceSchema['response']> {
52
+ /**
53
+ * Emits one `resource "<type>" "<name>"` block for this octo resource.
54
+ * Multiple calls chain via `depends_on` in call order.
55
+ * The provider alias is applied automatically when the resource was registered with a provider context.
56
+ */
57
+ addTerraformResource(type: string, name: string, spec?: Record<string, unknown>): TerraformResource;
58
+ /**
59
+ * Declares the outputs for this resource — one entry per response key.
60
+ * Every response key must be declared; the commit phase reads exactly these outputs to
61
+ * reconstruct the full response.
62
+ */
63
+ output(outputs: Record<keyof TResponse & string, unknown>, options?: {
64
+ sensitiveKeys?: (keyof TResponse & string)[];
65
+ }): void;
66
+ }
67
+ interface TerraformModuleFiles {
68
+ mainTf: string;
69
+ outputsTf: string;
70
+ terragruntHcl: string;
71
+ variablesTf: string;
72
+ }
73
+ /**
74
+ * The terraform module folder a resource writes itself into.
75
+ *
76
+ * Octo hands one to {@link ATerraformResource.toHCL}, scoped to the folder that resource belongs to.
77
+ * It is a small HCL builder: register the octo resource, emit blocks on the scope it returns, and
78
+ * reference other resources through {@link TerraformModuleScope.getRef} rather than by writing
79
+ * addresses by hand - only `getRef` knows whether the producer lands in this folder or another one.
80
+ *
81
+ * @group Resources
82
+ *
83
+ * @see {@link ATerraformResource} for where this is used.
84
+ */
85
+ export interface TerraformModuleScope {
86
+ /**
87
+ * Wraps an octo resource whose lifecycle runs outside Terraform (e.g. a script or SDK call).
88
+ * Generates a `null_resource` + `data "external"` pair that calls `octo run-action`
89
+ * at apply time and exposes the result as outputs.
90
+ */
91
+ addOctoTerraformExternalResource<T extends UnknownResource>(octoResource: T): OctoTerraformResourceScope<ResourceSchema<T>['response']>;
92
+ /**
93
+ * Registers an octo resource as a native Terraform resource. Returns an
94
+ * {@link OctoTerraformResourceScope} on which you call `addTerraformResource()` to emit
95
+ * HCL blocks and `output()` to declare what other resources can reference.
96
+ *
97
+ * - Pass `options.explicitParents` for dependencies that aren't captured by attribute references alone.
98
+ * - Pass `options.provider` to pin the resource to a specific account/region provider.
99
+ */
100
+ addOctoTerraformResource<T extends UnknownResource>(octoResource: T, options?: {
101
+ explicitParents?: (UnknownResource | MatchingResource<BaseResourceSchema>)[];
102
+ provider?: TerraformProviderContext;
103
+ }): OctoTerraformResourceScope<ResourceSchema<T>['response']>;
104
+ /**
105
+ * Emits a `data "<type>" "<name>"` block. Use for read-only data sources that look
106
+ * up existing infrastructure (e.g. `aws_ami`, `aws_caller_identity`).
107
+ */
108
+ addTerraformData(type: string, name: string, spec?: Record<string, unknown>): TerraformData;
109
+ /**
110
+ * Returns the `<providerType>.<alias>` expression for a registered provider.
111
+ * Pass the result as the `provider` attribute when a resource must target a
112
+ * specific account/region different from the module's default.
113
+ */
114
+ getProviderAliasRef(accountId: string, regionId?: string): HclExpression;
115
+ /**
116
+ * Returns a reference to another resource's output that resolves correctly at
117
+ * render time: an inline TF expression when the producer is in the same module,
118
+ * or a `var.*` wired through terragrunt when it is in a different module.
119
+ */
120
+ getRef<T extends UnknownResource>(resource: T, key: keyof ResourceSchema<T>['response'] & string): HclExpression;
121
+ getRef<S extends BaseResourceSchema>(resource: MatchingResource<S>, key: keyof S['response'] & string): HclExpression;
122
+ /**
123
+ * Wraps a value in a `jsonencode(...)` call.
124
+ */
125
+ jsonencode(subject: object | unknown[]): HclExpression;
126
+ /**
127
+ * Returns the HCL for a file on the developer's disk, as a quoted string ready to pass to
128
+ * {@link TerraformModuleScope.raw} or to a terraform function such as `filemd5`.
129
+ *
130
+ * The path renders relative to the octo project root and is joined to `var.OCTO_PROJECT_ROOT` at
131
+ * plan time, so the generated folder holds the same text whichever machine wrote it. Terragrunt
132
+ * runs terraform from a copy of the folder, so a plain relative path would not resolve.
133
+ */
134
+ localPath(filePath: string): string;
135
+ /**
136
+ * Use `mapAttr()` when the provider schema defines a **map/object attribute** (`key = { }`).
137
+ * Use a plain JS object in the resource spec when the schema expects a **block** (`key { }`).
138
+ * The distinction matters: blocks have no `=`. Check the provider docs for each argument.
139
+ */
140
+ mapAttr(value: Record<string, unknown>): HclExpression;
141
+ /**
142
+ * The ID of the octo module this folder was generated for.
143
+ */
144
+ readonly moduleId: string;
145
+ /**
146
+ * Emits a value verbatim as a terraform expression (no quoting).
147
+ */
148
+ raw(value: unknown): HclExpression;
149
+ /**
150
+ * Returns a terraform `type(...)` expression for use in `variable` declarations.
151
+ */
152
+ type(schema: unknown): HclExpression;
153
+ /**
154
+ * Declares a user-supplied input variable for this module. Use when a value must
155
+ * be provided at apply time rather than derived from another resource's output.
156
+ */
157
+ variable(name: string, typeExpression: unknown, options: {
158
+ default: TerraformLiteralType;
159
+ sensitive: boolean;
160
+ }): TerraformVariable;
161
+ }
162
+ /**
163
+ * Every terraform resource requires a deployment target - which provider, account, and region to make the call to.
164
+ * This deployment target is automatically derived using accountId and regionId,
165
+ * rather than developers hard-coding the provider alias.
166
+ */
167
+ interface TerraformProviderContext {
168
+ accountId: string;
169
+ regionId?: string;
170
+ }
171
+ /**
172
+ * Collects what every resource emitted through {@link TerraformModuleScope}, wires the references
173
+ * between module folders, and renders the terragrunt files {@link Octo.generate} writes.
174
+ *
175
+ * @internal
176
+ */
177
+ export declare class TerraformService {
178
+ private readonly octoCommandPrefix;
179
+ private readonly indentLength;
180
+ private minTerraformVersion;
181
+ private readonly modules;
182
+ private readonly pendingExternalResourcesInputWiring;
183
+ private readonly providers;
184
+ private requiredProviders;
185
+ private readonly resourceRegistry;
186
+ private readonly sanitizedResourceIds;
187
+ /**
188
+ * @internal
189
+ */
190
+ private get step();
191
+ /**
192
+ * @internal
193
+ */
194
+ constructor(octoCommandPrefix?: string, indentLength?: number);
195
+ /**
196
+ * Sets the minimum terraform version and the `required_providers` sources/versions that render
197
+ * into every folder's config block (scoped to the providers each folder actually uses).
198
+ */
199
+ addTerraformConfig({ minTerraformVersion, providers, }?: {
200
+ minTerraformVersion?: string;
201
+ providers?: Record<string, {
202
+ minVersion?: string;
203
+ source: string;
204
+ }>;
205
+ }): void;
206
+ /**
207
+ * Registers a Terraform provider block for the given provider type, account, and region.
208
+ *
209
+ * An `aws` provider is also given `allowed_account_ids = [accountId]`, so terraform refuses at plan
210
+ * when the credentials it resolves belong to another account. It is omitted when `accountName` is
211
+ * set (the repository has asked for the id not to appear in committed terraform), when `spec`
212
+ * already carries `allowed_account_ids`, and when `spec` sets `skip_requesting_account_id`, which
213
+ * stops the provider learning the account there is to check.
214
+ *
215
+ * @param providerType - The terraform provider type, e.g. `aws`, `google`.
216
+ * @param accountId - The account/project/subscription ID.
217
+ * @param regionId - The region ID.
218
+ * @param spec - Provider arguments beyond `alias` and `region`.
219
+ * - Primitives become attributes (`key = value`).
220
+ * - Plain objects become blocks (`key { }`).
221
+ * - Wrap with `mapAttr()` when the provider schema expects a map attribute (`key = { }`).
222
+ * @param options - optional provider configurations.
223
+ * - options.accountName - What to call the account in the provider alias, in place of its id.
224
+ * `prod` renders `aws.prod-us-east-1` where the id renders `aws._123456789012-us-east-1`. Two
225
+ * accounts may not share a name within one provider type and region, and the generated terraform
226
+ * is committed, so a name is also how a repository keeps its account number out of it. It also
227
+ * drops the `allowed_account_ids` guard above, which would put that id straight back.
228
+ * - options.setRegionAttribute - Whether to write `region = <regionId>` onto the provider block.
229
+ * Defaults to true, except for the utility providers in {@link REGIONLESS_PROVIDER_TYPES}, which
230
+ * accept no arguments at all and fail the plan outright with
231
+ * `An argument named "region" is not expected here`. Set it explicitly to override either way -
232
+ * a regional provider this list does not know about still needs `false` passed by hand.
233
+ */
234
+ addTerraformProvider(providerType: string, accountId: string, regionId: string, spec?: Record<string, unknown>, { accountName, setRegionAttribute }?: {
235
+ accountName?: string;
236
+ setRegionAttribute?: boolean;
237
+ }): void;
238
+ /**
239
+ * Returns the folder record of the current sweep: one entry per folder-bearing module — a
240
+ * preloaded shell the sweep left empty is an emptied folder, not folder-bearing, so it drops out
241
+ * of the record. Call after the sweep has contributed every resource (the same point
242
+ * {@link renderAllModules} is valid).
243
+ */
244
+ getFolderRecords(): TerraformFolderOutput[];
245
+ /**
246
+ * The IDs of the module folders this run rendered.
247
+ */
248
+ getModuleIds(): string[];
249
+ /**
250
+ * How each octo resource maps into terraform, which validate and commit read to match a plan
251
+ * entry or an output back to the resource that produced it.
252
+ */
253
+ getOctoTerraformResourceMappings(): OctoTerraformResourceMapping[];
254
+ /**
255
+ * Resource→resource value-reference edges, keyed by the referenced (producer) resourceId → the set
256
+ * of resourceIds that reference it. Edges follow `getRef` value references only — the same graph
257
+ * terraform cascades replacement along (force-new). `depends_on`/explicit parents are excluded:
258
+ * an ordering edge carries no value and does not force a dependent's replacement.
259
+ *
260
+ * Used by validate to attribute terraform's transitive replacement cascade: when octo replaces a
261
+ * resource, terraform recreates everything that (transitively) references it, so those changes are
262
+ * expected rather than unattributed.
263
+ */
264
+ getResourceReferrers(): Map<string, Set<string>>;
265
+ /**
266
+ * Phase 2 of rendering: prints the four files of every folder from the wiring computed in
267
+ * phase 1. Makes no decisions — when a {@link RefHclNode} renders, its answer is looked up in the
268
+ * folder's precomputed `resolvedRefs`. Cross-folder dependency cycles throw (in phase 1).
269
+ */
270
+ renderAllModules(): Map<string, TerraformModuleFiles>;
271
+ /**
272
+ * Prints the four files of an **empty** folder from a recorded folder: a `main.tf` with the
273
+ * config block rebuilt from the recorded `required_providers` entries (plus null/external when
274
+ * the folder had external resources) and the recorded provider blocks verbatim; empty
275
+ * variables/outputs; a remote_state-only `terragrunt.hcl`.
276
+ *
277
+ * Reads no module state;
278
+ * the generate mode decides which folders are emptied and which recorded folder each renders from.
279
+ */
280
+ renderEmptyModule(record: TerraformFolderOutput): TerraformModuleFiles;
281
+ /**
282
+ * Drops everything the last run rendered, keeping the registered providers and config.
283
+ */
284
+ reset(): void;
285
+ /**
286
+ * Clears what a transaction's sweep contributed (modules, resources, wiring), keeping the
287
+ * per-process registrations (terraform config and providers) intact. Test harnesses that run
288
+ * multiple transactions in one process call this between them; a real octo process runs one
289
+ * transaction, so production code never resets.
290
+ */
291
+ resetTransactionState(): void;
292
+ /**
293
+ * The {@link TerraformModuleScope} handed to a resource's `toHCL()`, bound to one module folder.
294
+ */
295
+ scope(moduleId: string): TerraformModuleScope;
296
+ /**
297
+ * Generates the `null_resource` + `data "external"` wrapper for an external resource.
298
+ *
299
+ * Only the parts that depend on no other resource are built here:
300
+ * - the `null_resource` shell (its triggers and `local-exec` provisioners are filled in later),
301
+ * - the `data "external"` read of the response octo recorded, which terraform re-runs on every plan
302
+ * and every apply, and defers to apply time only while the `null_resource` is planned to change,
303
+ * - the single whole-result output (`data.external.<name>.result`) that carries the entire response.
304
+ *
305
+ * The external resource is never enumerated per response key: its response shape is unknown at
306
+ * generation time (the action has not run) and is, by the `data "external"` protocol, a flat map of
307
+ * strings. Refs to it (`getRef`) resolve by indexing this one expression; commit reads the whole map back.
308
+ *
309
+ * The parent-input wiring (triggers + create/destroy commands) reads every parent's outputs, which
310
+ * only all exist once registration is complete. It is therefore deferred to
311
+ * {@link wireExternalResourceInputs} (run at the start of {@link computeWiring}). This deferral is
312
+ * what lets the generate sweep contribute resources in any order, rather than parents-first.
313
+ */
314
+ private addOctoTerraformExternalResource;
315
+ /**
316
+ * @internal
317
+ */
318
+ private addOctoTerraformResource;
319
+ /**
320
+ * @internal
321
+ */
322
+ private addTerraformData;
323
+ /**
324
+ * Phase 1 of rendering: resolve every {@link RefHclNode} and compute each folder's wiring.
325
+ *
326
+ * For every folder: collect all refs made from it, then resolve each one —
327
+ * - producer in the same folder → the inline terraform expression,
328
+ * - producer in another folder → a `var.*` name, plus three recorded consequences: declare the
329
+ * variable, depend on the producer's folder, wire the input in terragrunt.hcl.
330
+ *
331
+ * Explicit parents resolve similarly: same folder → `depends_on` addresses; other folder → a
332
+ * terragrunt dependency. All ref errors and cross-folder cycles surface here — phase 2 cannot
333
+ * fail.
334
+ */
335
+ private computeWiring;
336
+ /**
337
+ * Depth-first search over folder dependencies; throws on the first cycle, naming its path and
338
+ * the refs/explicit parents forming each edge.
339
+ */
340
+ private detectModuleCycles;
341
+ /**
342
+ * Derives the registered provider for a deployment target using only `accountId` (+ `regionId`).
343
+ * The provider type was decided during provider registration.
344
+ *
345
+ * Without a `regionId` (global resources), any provider of the account matches — the first
346
+ * registered wins, since the alias only routes the region.
347
+ */
348
+ private findProvider;
349
+ /**
350
+ * @internal
351
+ */
352
+ private getProviderAliasRef;
353
+ /**
354
+ * @internal
355
+ */
356
+ private getRef;
357
+ /**
358
+ * @internal
359
+ */
360
+ private jsonencode;
361
+ /**
362
+ * Renders a local file path as `"${var.OCTO_PROJECT_ROOT}/<path from the project root>"`, and
363
+ * marks this folder as needing that variable declared.
364
+ *
365
+ * Separators are normalized to `/`, so a folder generated on Windows reads the same as one
366
+ * generated anywhere else.
367
+ */
368
+ private localPath;
369
+ /**
370
+ * @internal
371
+ */
372
+ private mapAttr;
373
+ /**
374
+ * @internal
375
+ */
376
+ private module;
377
+ /**
378
+ * @internal
379
+ */
380
+ private providerKey;
381
+ /**
382
+ * @internal
383
+ */
384
+ private raw;
385
+ /**
386
+ * Prints one folder's `terraform { required_version, required_providers }` config block.
387
+ */
388
+ private renderConfigBlock;
389
+ /**
390
+ * Prints one folder's `terragrunt.hcl`: a `dependency` block per producer folder (with
391
+ * `mock_outputs`, shallow-merged over any applied state, so `run-all plan` works both before the
392
+ * first apply and when intent renames a producer resource), and the `inputs` map wiring each auto
393
+ * variable to the producer's output.
394
+ */
395
+ private renderTerragrunt;
396
+ /**
397
+ * @internal
398
+ */
399
+ private type;
400
+ /**
401
+ * @internal
402
+ */
403
+ private variable;
404
+ /**
405
+ * Resolves the deferred parent-input wiring for every external resource: for each parent, expands
406
+ * its declared outputs into `--input` arguments on the `local-exec` create/destroy commands and
407
+ * into individual triggers (so the `when = destroy` provisioner can reach the raw values via
408
+ * `self.triggers`). Runs once all resources are registered, so it is independent of the order in
409
+ * which resources were contributed. Idempotent: clears the queue, so a repeat call is a no-op.
410
+ */
411
+ private wireExternalResourceInputs;
412
+ }
413
+ /**
414
+ * @internal
415
+ */
416
+ export declare class TerraformServiceFactory {
417
+ private static instance;
418
+ /**
419
+ * @internal
420
+ */
421
+ static create({ octoCommandPrefix, terraformFileIndentLength, }?: {
422
+ octoCommandPrefix?: string;
423
+ terraformFileIndentLength?: number;
424
+ }, forceNew?: boolean): Promise<TerraformService>;
425
+ }
426
+ export {};