alchemy-effect 0.4.0 → 0.6.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 (251) hide show
  1. package/README.md +13 -7
  2. package/bin/alchemy-effect.js +307 -266
  3. package/bin/alchemy-effect.js.map +1 -1
  4. package/lib/apply.d.ts.map +1 -1
  5. package/lib/apply.js +253 -246
  6. package/lib/apply.js.map +1 -1
  7. package/lib/aws/client.d.ts.map +1 -1
  8. package/lib/aws/client.js +15 -2
  9. package/lib/aws/client.js.map +1 -1
  10. package/lib/aws/dynamodb/secondary-index.d.ts.map +1 -1
  11. package/lib/aws/dynamodb/table.d.ts.map +1 -1
  12. package/lib/aws/dynamodb/table.js.map +1 -1
  13. package/lib/aws/dynamodb/table.provider.d.ts.map +1 -1
  14. package/lib/aws/dynamodb/table.provider.js +10 -2
  15. package/lib/aws/dynamodb/table.provider.js.map +1 -1
  16. package/lib/aws/ec2/egress-only-igw.d.ts +55 -0
  17. package/lib/aws/ec2/egress-only-igw.d.ts.map +1 -0
  18. package/lib/aws/ec2/egress-only-igw.js +4 -0
  19. package/lib/aws/ec2/egress-only-igw.js.map +1 -0
  20. package/lib/aws/ec2/egress-only-igw.provider.d.ts +6 -0
  21. package/lib/aws/ec2/egress-only-igw.provider.d.ts.map +1 -0
  22. package/lib/aws/ec2/egress-only-igw.provider.js +114 -0
  23. package/lib/aws/ec2/egress-only-igw.provider.js.map +1 -0
  24. package/lib/aws/ec2/eip.d.ts +85 -0
  25. package/lib/aws/ec2/eip.d.ts.map +1 -0
  26. package/lib/aws/ec2/eip.js +4 -0
  27. package/lib/aws/ec2/eip.js.map +1 -0
  28. package/lib/aws/ec2/eip.provider.d.ts +6 -0
  29. package/lib/aws/ec2/eip.provider.d.ts.map +1 -0
  30. package/lib/aws/ec2/eip.provider.js +135 -0
  31. package/lib/aws/ec2/eip.provider.js.map +1 -0
  32. package/lib/aws/ec2/index.d.ts +18 -0
  33. package/lib/aws/ec2/index.d.ts.map +1 -1
  34. package/lib/aws/ec2/index.js +18 -0
  35. package/lib/aws/ec2/index.js.map +1 -1
  36. package/lib/aws/ec2/internet-gateway.d.ts.map +1 -1
  37. package/lib/aws/ec2/internet-gateway.provider.d.ts.map +1 -1
  38. package/lib/aws/ec2/internet-gateway.provider.js +9 -5
  39. package/lib/aws/ec2/internet-gateway.provider.js.map +1 -1
  40. package/lib/aws/ec2/nat-gateway.d.ts +127 -0
  41. package/lib/aws/ec2/nat-gateway.d.ts.map +1 -0
  42. package/lib/aws/ec2/nat-gateway.js +4 -0
  43. package/lib/aws/ec2/nat-gateway.js.map +1 -0
  44. package/lib/aws/ec2/nat-gateway.provider.d.ts +6 -0
  45. package/lib/aws/ec2/nat-gateway.provider.d.ts.map +1 -0
  46. package/lib/aws/ec2/nat-gateway.provider.js +222 -0
  47. package/lib/aws/ec2/nat-gateway.provider.js.map +1 -0
  48. package/lib/aws/ec2/network-acl-association.d.ts +44 -0
  49. package/lib/aws/ec2/network-acl-association.d.ts.map +1 -0
  50. package/lib/aws/ec2/network-acl-association.js +4 -0
  51. package/lib/aws/ec2/network-acl-association.js.map +1 -0
  52. package/lib/aws/ec2/network-acl-association.provider.d.ts +4 -0
  53. package/lib/aws/ec2/network-acl-association.provider.d.ts.map +1 -0
  54. package/lib/aws/ec2/network-acl-association.provider.js +115 -0
  55. package/lib/aws/ec2/network-acl-association.provider.js.map +1 -0
  56. package/lib/aws/ec2/network-acl-entry.d.ts +118 -0
  57. package/lib/aws/ec2/network-acl-entry.d.ts.map +1 -0
  58. package/lib/aws/ec2/network-acl-entry.js +3 -0
  59. package/lib/aws/ec2/network-acl-entry.js.map +1 -0
  60. package/lib/aws/ec2/network-acl-entry.provider.d.ts +4 -0
  61. package/lib/aws/ec2/network-acl-entry.provider.d.ts.map +1 -0
  62. package/lib/aws/ec2/network-acl-entry.provider.js +129 -0
  63. package/lib/aws/ec2/network-acl-entry.provider.js.map +1 -0
  64. package/lib/aws/ec2/network-acl.d.ts +82 -0
  65. package/lib/aws/ec2/network-acl.d.ts.map +1 -0
  66. package/lib/aws/ec2/network-acl.js +4 -0
  67. package/lib/aws/ec2/network-acl.js.map +1 -0
  68. package/lib/aws/ec2/network-acl.provider.d.ts +6 -0
  69. package/lib/aws/ec2/network-acl.provider.d.ts.map +1 -0
  70. package/lib/aws/ec2/network-acl.provider.js +136 -0
  71. package/lib/aws/ec2/network-acl.provider.js.map +1 -0
  72. package/lib/aws/ec2/route-table-association.d.ts.map +1 -1
  73. package/lib/aws/ec2/route-table-association.provider.d.ts.map +1 -1
  74. package/lib/aws/ec2/route-table-association.provider.js.map +1 -1
  75. package/lib/aws/ec2/route-table.d.ts.map +1 -1
  76. package/lib/aws/ec2/route-table.provider.d.ts.map +1 -1
  77. package/lib/aws/ec2/route-table.provider.js.map +1 -1
  78. package/lib/aws/ec2/route.d.ts.map +1 -1
  79. package/lib/aws/ec2/route.provider.d.ts.map +1 -1
  80. package/lib/aws/ec2/route.provider.js.map +1 -1
  81. package/lib/aws/ec2/security-group-rule.d.ts +118 -0
  82. package/lib/aws/ec2/security-group-rule.d.ts.map +1 -0
  83. package/lib/aws/ec2/security-group-rule.js +4 -0
  84. package/lib/aws/ec2/security-group-rule.js.map +1 -0
  85. package/lib/aws/ec2/security-group-rule.provider.d.ts +4 -0
  86. package/lib/aws/ec2/security-group-rule.provider.d.ts.map +1 -0
  87. package/lib/aws/ec2/security-group-rule.provider.js +193 -0
  88. package/lib/aws/ec2/security-group-rule.provider.js.map +1 -0
  89. package/lib/aws/ec2/security-group.d.ts +147 -0
  90. package/lib/aws/ec2/security-group.d.ts.map +1 -0
  91. package/lib/aws/ec2/security-group.js +4 -0
  92. package/lib/aws/ec2/security-group.js.map +1 -0
  93. package/lib/aws/ec2/security-group.provider.d.ts +6 -0
  94. package/lib/aws/ec2/security-group.provider.d.ts.map +1 -0
  95. package/lib/aws/ec2/security-group.provider.js +291 -0
  96. package/lib/aws/ec2/security-group.provider.js.map +1 -0
  97. package/lib/aws/ec2/subnet.d.ts.map +1 -1
  98. package/lib/aws/ec2/subnet.provider.d.ts.map +1 -1
  99. package/lib/aws/ec2/subnet.provider.js +33 -30
  100. package/lib/aws/ec2/subnet.provider.js.map +1 -1
  101. package/lib/aws/ec2/vpc-endpoint.d.ts +176 -0
  102. package/lib/aws/ec2/vpc-endpoint.d.ts.map +1 -0
  103. package/lib/aws/ec2/vpc-endpoint.js +4 -0
  104. package/lib/aws/ec2/vpc-endpoint.js.map +1 -0
  105. package/lib/aws/ec2/vpc-endpoint.provider.d.ts +6 -0
  106. package/lib/aws/ec2/vpc-endpoint.provider.d.ts.map +1 -0
  107. package/lib/aws/ec2/vpc-endpoint.provider.js +315 -0
  108. package/lib/aws/ec2/vpc-endpoint.provider.js.map +1 -0
  109. package/lib/aws/ec2/vpc.d.ts.map +1 -1
  110. package/lib/aws/ec2/vpc.provider.d.ts.map +1 -1
  111. package/lib/aws/ec2/vpc.provider.js +38 -32
  112. package/lib/aws/ec2/vpc.provider.js.map +1 -1
  113. package/lib/aws/index.d.ts +2 -2
  114. package/lib/aws/index.d.ts.map +1 -1
  115. package/lib/aws/index.js +1 -1
  116. package/lib/aws/index.js.map +1 -1
  117. package/lib/aws/lambda/function.d.ts.map +1 -1
  118. package/lib/aws/lambda/function.invoke.d.ts.map +1 -1
  119. package/lib/aws/lambda/function.invoke.js.map +1 -1
  120. package/lib/aws/lambda/function.js.map +1 -1
  121. package/lib/aws/lambda/function.provider.d.ts.map +1 -1
  122. package/lib/aws/lambda/function.provider.js +19 -23
  123. package/lib/aws/lambda/function.provider.js.map +1 -1
  124. package/lib/aws/sqs/queue.d.ts +1 -2
  125. package/lib/aws/sqs/queue.d.ts.map +1 -1
  126. package/lib/aws/sqs/queue.event-source.d.ts.map +1 -1
  127. package/lib/aws/sqs/queue.event-source.js +2 -2
  128. package/lib/aws/sqs/queue.event-source.js.map +1 -1
  129. package/lib/aws/sqs/queue.js.map +1 -1
  130. package/lib/aws/sqs/queue.provider.d.ts +1 -2
  131. package/lib/aws/sqs/queue.provider.d.ts.map +1 -1
  132. package/lib/aws/sqs/queue.provider.js +35 -20
  133. package/lib/aws/sqs/queue.provider.js.map +1 -1
  134. package/lib/aws/sqs/queue.send-message.d.ts.map +1 -1
  135. package/lib/aws/sqs/queue.send-message.js.map +1 -1
  136. package/lib/binding.d.ts.map +1 -1
  137. package/lib/cli/components/PlanProgress.d.ts.map +1 -1
  138. package/lib/cli/components/PlanProgress.js.map +1 -1
  139. package/lib/cli/index.d.ts +8 -4
  140. package/lib/cli/index.d.ts.map +1 -1
  141. package/lib/cli/index.js.map +1 -1
  142. package/lib/cloudflare/kv/namespace.binding.d.ts.map +1 -1
  143. package/lib/cloudflare/kv/namespace.binding.js.map +1 -1
  144. package/lib/cloudflare/kv/namespace.d.ts.map +1 -1
  145. package/lib/cloudflare/kv/namespace.provider.d.ts +1 -2
  146. package/lib/cloudflare/kv/namespace.provider.d.ts.map +1 -1
  147. package/lib/cloudflare/kv/namespace.provider.js +11 -8
  148. package/lib/cloudflare/kv/namespace.provider.js.map +1 -1
  149. package/lib/cloudflare/r2/bucket.binding.d.ts.map +1 -1
  150. package/lib/cloudflare/r2/bucket.binding.js +1 -1
  151. package/lib/cloudflare/r2/bucket.binding.js.map +1 -1
  152. package/lib/cloudflare/r2/bucket.d.ts +1 -1
  153. package/lib/cloudflare/r2/bucket.d.ts.map +1 -1
  154. package/lib/cloudflare/r2/bucket.provider.d.ts +1 -2
  155. package/lib/cloudflare/r2/bucket.provider.d.ts.map +1 -1
  156. package/lib/cloudflare/r2/bucket.provider.js +20 -14
  157. package/lib/cloudflare/r2/bucket.provider.js.map +1 -1
  158. package/lib/cloudflare/worker/worker.d.ts +2 -2
  159. package/lib/cloudflare/worker/worker.d.ts.map +1 -1
  160. package/lib/cloudflare/worker/worker.provider.d.ts +1 -2
  161. package/lib/cloudflare/worker/worker.provider.d.ts.map +1 -1
  162. package/lib/cloudflare/worker/worker.provider.js +40 -13
  163. package/lib/cloudflare/worker/worker.provider.js.map +1 -1
  164. package/lib/instance-id.d.ts +5 -1
  165. package/lib/instance-id.d.ts.map +1 -1
  166. package/lib/instance-id.js +4 -0
  167. package/lib/instance-id.js.map +1 -1
  168. package/lib/output.d.ts.map +1 -1
  169. package/lib/output.js.map +1 -1
  170. package/lib/physical-name.d.ts +15 -4
  171. package/lib/physical-name.d.ts.map +1 -1
  172. package/lib/physical-name.js +12 -3
  173. package/lib/physical-name.js.map +1 -1
  174. package/lib/plan.d.ts +2 -2
  175. package/lib/plan.d.ts.map +1 -1
  176. package/lib/plan.js +73 -24
  177. package/lib/plan.js.map +1 -1
  178. package/lib/provider.d.ts +1 -2
  179. package/lib/provider.d.ts.map +1 -1
  180. package/lib/resource.d.ts +3 -2
  181. package/lib/resource.d.ts.map +1 -1
  182. package/lib/resource.js.map +1 -1
  183. package/lib/runtime.d.ts.map +1 -1
  184. package/lib/tags.d.ts +12 -0
  185. package/lib/tags.d.ts.map +1 -1
  186. package/lib/tags.js +24 -0
  187. package/lib/tags.js.map +1 -1
  188. package/lib/tsconfig.test.tsbuildinfo +1 -1
  189. package/package.json +51 -51
  190. package/src/apply.ts +316 -297
  191. package/src/aws/client.ts +22 -1
  192. package/src/aws/dynamodb/secondary-index.ts +5 -5
  193. package/src/aws/dynamodb/table.provider.ts +15 -4
  194. package/src/aws/dynamodb/table.ts +8 -11
  195. package/src/aws/ec2/egress-only-igw.provider.ts +181 -0
  196. package/src/aws/ec2/egress-only-igw.ts +77 -0
  197. package/src/aws/ec2/eip.provider.ts +191 -0
  198. package/src/aws/ec2/eip.ts +106 -0
  199. package/src/aws/ec2/index.ts +18 -0
  200. package/src/aws/ec2/internet-gateway.provider.ts +15 -6
  201. package/src/aws/ec2/internet-gateway.ts +6 -6
  202. package/src/aws/ec2/nat-gateway.provider.ts +341 -0
  203. package/src/aws/ec2/nat-gateway.ts +155 -0
  204. package/src/aws/ec2/network-acl-association.provider.ts +181 -0
  205. package/src/aws/ec2/network-acl-association.ts +60 -0
  206. package/src/aws/ec2/network-acl-entry.provider.ts +218 -0
  207. package/src/aws/ec2/network-acl-entry.ts +140 -0
  208. package/src/aws/ec2/network-acl.provider.ts +195 -0
  209. package/src/aws/ec2/network-acl.ts +102 -0
  210. package/src/aws/ec2/route-table-association.provider.ts +1 -2
  211. package/src/aws/ec2/route-table-association.ts +6 -6
  212. package/src/aws/ec2/route-table.provider.ts +1 -2
  213. package/src/aws/ec2/route-table.ts +6 -6
  214. package/src/aws/ec2/route.provider.ts +1 -2
  215. package/src/aws/ec2/route.ts +6 -6
  216. package/src/aws/ec2/security-group-rule.provider.ts +264 -0
  217. package/src/aws/ec2/security-group-rule.ts +151 -0
  218. package/src/aws/ec2/security-group.provider.ts +392 -0
  219. package/src/aws/ec2/security-group.ts +182 -0
  220. package/src/aws/ec2/subnet.provider.ts +57 -56
  221. package/src/aws/ec2/subnet.ts +6 -6
  222. package/src/aws/ec2/vpc-endpoint.provider.ts +466 -0
  223. package/src/aws/ec2/vpc-endpoint.ts +213 -0
  224. package/src/aws/ec2/vpc.provider.ts +60 -52
  225. package/src/aws/ec2/vpc.ts +6 -6
  226. package/src/aws/index.ts +9 -0
  227. package/src/aws/lambda/function.invoke.ts +4 -2
  228. package/src/aws/lambda/function.provider.ts +42 -31
  229. package/src/aws/lambda/function.ts +4 -2
  230. package/src/aws/sqs/queue.event-source.ts +12 -14
  231. package/src/aws/sqs/queue.provider.ts +40 -24
  232. package/src/aws/sqs/queue.send-message.ts +4 -2
  233. package/src/aws/sqs/queue.ts +1 -8
  234. package/src/binding.ts +7 -7
  235. package/src/cli/components/PlanProgress.tsx +3 -2
  236. package/src/cloudflare/kv/namespace.binding.ts +4 -2
  237. package/src/cloudflare/kv/namespace.provider.ts +18 -16
  238. package/src/cloudflare/kv/namespace.ts +6 -6
  239. package/src/cloudflare/r2/bucket.binding.ts +5 -3
  240. package/src/cloudflare/r2/bucket.provider.ts +34 -30
  241. package/src/cloudflare/r2/bucket.ts +7 -7
  242. package/src/cloudflare/worker/worker.provider.ts +39 -13
  243. package/src/cloudflare/worker/worker.ts +2 -2
  244. package/src/instance-id.ts +5 -1
  245. package/src/output.ts +5 -3
  246. package/src/physical-name.ts +27 -5
  247. package/src/plan.ts +108 -41
  248. package/src/provider.ts +12 -12
  249. package/src/resource.ts +17 -6
  250. package/src/runtime.ts +2 -2
  251. package/src/tags.ts +29 -0
@@ -1 +1 @@
1
- {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../src/apply.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,OAAO,EAEL,GAAG,EAEJ,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAIL,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,KAAK,EACV,KAAK,SAAS,EACf,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EASL,KAAK,EACL,eAAe,EAChB,MAAM,YAAY,CAAC;AAIpB,MAAM,MAAM,WAAW,CACrB,CAAC,SAAS,KAAK,EACf,GAAG,GAAG,KAAK,EACX,GAAG,GAAG,KAAK,IACT,MAAM,CAAC,MAAM,CACf;KACG,CAAC,IAAI,MAAM,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/C,EACD,GAAG,EACH,GAAG,CACJ,CAAC;AAEF,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,KAAK,IAAI;KACxC,EAAE,IAAI,MAAM,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,SAC5C,MAAM,CAAC,QAAQ,CAAC,GAChB,SAAS,GACT,KAAK,GACL,KAAK,GACL,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;CACrD,CAAC;AAEF,eAAO,MAAM,KAAK,GAChB,KAAK,CAAC,SAAS,SAAS,CAAC,UAAU,GAAG,WAAW,CAAC,EAAE,GAAG,KAAK,EAE5D,GAAG,WAAW,SAAS,KACtB,WAAW,CACZ,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EACvC,KAAK,EACL,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAKtC,CAAC;AAEX,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,KAAK,EAAE,MAAM,CAAC,sBAqB3C,CAAC,gGAEJ,CAAC"}
1
+ {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../src/apply.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,OAAO,EAGL,GAAG,EACJ,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAGL,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,KAAK,EACV,KAAK,SAAS,EAEf,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EASL,KAAK,EACL,eAAe,EAChB,MAAM,YAAY,CAAC;AAGpB,MAAM,MAAM,WAAW,CACrB,CAAC,SAAS,KAAK,EACf,GAAG,GAAG,KAAK,EACX,GAAG,GAAG,KAAK,IACT,MAAM,CAAC,MAAM,CACf;KACG,CAAC,IAAI,MAAM,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/C,EACD,GAAG,EACH,GAAG,CACJ,CAAC;AAEF,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,KAAK,IAAI;KACxC,EAAE,IAAI,MAAM,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,SAC5C,MAAM,CAAC,QAAQ,CAAC,GAChB,SAAS,GACT,KAAK,GACL,KAAK,GACL,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;CACrD,CAAC;AAEF,eAAO,MAAM,KAAK,GAChB,KAAK,CAAC,SAAS,SAAS,CAAC,UAAU,GAAG,WAAW,CAAC,EAAE,GAAG,KAAK,EAE5D,GAAG,WAAW,SAAS,KACtB,WAAW,CACZ,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EACvC,KAAK,EACL,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAKtC,CAAC;AAEX,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,KAAK,EAAE,MAAM,CAAC,sBAqB3C,CAAC,gGAEJ,CAAC"}
package/lib/apply.js CHANGED
@@ -1,13 +1,14 @@
1
+ import { Layer } from "effect";
1
2
  import * as Context from "effect/Context";
2
3
  import * as Effect from "effect/Effect";
3
4
  import { App } from "./app.js";
4
5
  import { CLI, } from "./cli/service.js";
5
- import { generateInstanceId } from "./instance-id.js";
6
+ import { generateInstanceId, InstanceId } from "./instance-id.js";
6
7
  import * as Output from "./output.js";
7
8
  import { plan, } from "./plan.js";
9
+ import { getProviderByType } from "./provider.js";
8
10
  import { State, StateStoreError, } from "./state.js";
9
11
  import { asEffect } from "./util.js";
10
- import { getProviderByType } from "./provider.js";
11
12
  export const apply = (...resources) => plan(...resources).pipe(Effect.flatMap((p) => applyPlan(p)));
12
13
  export const applyPlan = (plan) => Effect.gen(function* () {
13
14
  const cli = yield* CLI;
@@ -101,7 +102,7 @@ const expandAndPivot = Effect.fnUntraced(function* (plan, session) {
101
102
  };
102
103
  }
103
104
  return oldBindingOutput;
104
- })));
105
+ })), { concurrency: "unbounded" });
105
106
  const apply = (node) => Effect.gen(function* () {
106
107
  const commit = (value) => state.set({
107
108
  stack: app.name,
@@ -130,7 +131,7 @@ const expandAndPivot = Effect.fnUntraced(function* (plan, session) {
130
131
  return node.state.attr;
131
132
  }
132
133
  // resolve upstream dependencies before committing any changes to state
133
- const upstream = Object.fromEntries(yield* Effect.all(Object.entries(Output.resolveUpstream(node.props)).map(([id]) => resolveUpstream(id).pipe(Effect.map(({ upstreamAttr }) => [id, upstreamAttr])))));
134
+ const upstream = Object.fromEntries(yield* Effect.all(Object.entries(Output.resolveUpstream(node.props)).map(([id]) => resolveUpstream(id).pipe(Effect.map(({ upstreamAttr }) => [id, upstreamAttr]))), { concurrency: "unbounded" }));
134
135
  const instanceId = yield* Effect.gen(function* () {
135
136
  if (node.action === "create" && !node.state?.instanceId) {
136
137
  const instanceId = yield* generateInstanceId();
@@ -174,281 +175,285 @@ const expandAndPivot = Effect.fnUntraced(function* (plan, session) {
174
175
  // this should never happen
175
176
  return yield* Effect.dieMessage(`Instance ID not found for resource '${id}' and action is '${node.action}'`);
176
177
  });
177
- if (node.action === "create") {
178
- const news = (yield* Output.evaluate(node.props, upstream));
179
- const checkpoint = (attr) => commit({
180
- status: "creating",
181
- logicalId: id,
182
- instanceId,
183
- resourceType: node.resource.type,
184
- props: news,
185
- attr,
186
- providerVersion: node.provider.version ?? 0,
187
- bindings: node.bindings,
188
- downstream: node.downstream,
189
- });
190
- if (!node.state) {
191
- yield* checkpoint(undefined);
192
- }
193
- let attr;
194
- if (node.action === "create" &&
195
- node.provider.precreate &&
196
- // pre-create is only designed to ensure the resource exists, if we have state.attr, then it already exists and should be skipped
197
- node.state?.attr === undefined) {
198
- yield* report("pre-creating");
199
- // stub the resource prior to resolving upstream resources or bindings if a stub is available
200
- attr = yield* node.provider.precreate({
178
+ const apply = Effect.gen(function* () {
179
+ if (node.action === "create") {
180
+ const news = (yield* Output.evaluate(node.props, upstream));
181
+ const checkpoint = (attr) => commit({
182
+ status: "creating",
183
+ logicalId: id,
184
+ instanceId,
185
+ resourceType: node.resource.type,
186
+ props: news,
187
+ attr,
188
+ providerVersion: node.provider.version ?? 0,
189
+ bindings: node.bindings,
190
+ downstream: node.downstream,
191
+ });
192
+ if (!node.state) {
193
+ yield* checkpoint(undefined);
194
+ }
195
+ let attr;
196
+ if (node.action === "create" &&
197
+ node.provider.precreate &&
198
+ // pre-create is only designed to ensure the resource exists, if we have state.attr, then it already exists and should be skipped
199
+ node.state?.attr === undefined) {
200
+ yield* report("pre-creating");
201
+ // stub the resource prior to resolving upstream resources or bindings if a stub is available
202
+ attr = yield* node.provider.precreate({
203
+ id,
204
+ news: node.props,
205
+ session: scopedSession,
206
+ instanceId,
207
+ });
208
+ yield* checkpoint(attr);
209
+ }
210
+ yield* report("attaching");
211
+ let bindingOutputs = yield* attachBindings({
212
+ resource,
213
+ bindings: node.bindings,
214
+ target: {
215
+ id,
216
+ props: news,
217
+ attr,
218
+ },
219
+ });
220
+ yield* report("creating");
221
+ attr = yield* node.provider.create({
201
222
  id,
202
- news: node.props,
203
- session: scopedSession,
223
+ news,
204
224
  instanceId,
225
+ bindings: bindingOutputs,
226
+ session: scopedSession,
205
227
  });
206
228
  yield* checkpoint(attr);
207
- }
208
- yield* report("attaching");
209
- let bindingOutputs = yield* attachBindings({
210
- resource,
211
- bindings: node.bindings,
212
- target: {
213
- id,
229
+ yield* report("post-attach");
230
+ bindingOutputs = yield* postAttachBindings({
231
+ resource,
232
+ bindings: node.bindings,
233
+ bindingOutputs,
234
+ target: {
235
+ id,
236
+ props: news,
237
+ attr,
238
+ },
239
+ });
240
+ yield* commit({
241
+ status: "created",
242
+ logicalId: id,
243
+ instanceId,
244
+ resourceType: node.resource.type,
214
245
  props: news,
215
246
  attr,
216
- },
217
- });
218
- yield* report("creating");
219
- attr = yield* node.provider.create({
220
- id,
221
- news,
222
- instanceId,
223
- bindings: bindingOutputs,
224
- session: scopedSession,
225
- });
226
- yield* checkpoint(attr);
227
- yield* report("post-attach");
228
- bindingOutputs = yield* postAttachBindings({
229
- resource,
230
- bindings: node.bindings,
231
- bindingOutputs,
232
- target: {
247
+ bindings: node.bindings.map((binding, i) => ({
248
+ ...binding,
249
+ attr: bindingOutputs[i],
250
+ })),
251
+ providerVersion: node.provider.version ?? 0,
252
+ downstream: node.downstream,
253
+ });
254
+ yield* report("created");
255
+ return attr;
256
+ }
257
+ else if (node.action === "update") {
258
+ const upstream = Object.fromEntries(yield* Effect.all(Object.entries(Output.resolveUpstream(node.props)).map(([id]) => resolveUpstream(id).pipe(Effect.map(({ upstreamAttr }) => [id, upstreamAttr]))), { concurrency: "unbounded" }));
259
+ const news = (yield* Output.evaluate(node.props, upstream));
260
+ const checkpoint = (attr) => {
261
+ if (node.state.status === "replaced") {
262
+ return commit({
263
+ ...node.state,
264
+ attr,
265
+ props: news,
266
+ });
267
+ }
268
+ else {
269
+ return commit({
270
+ status: "updating",
271
+ logicalId: id,
272
+ instanceId,
273
+ resourceType: node.resource.type,
274
+ props: news,
275
+ attr,
276
+ providerVersion: node.provider.version ?? 0,
277
+ bindings: node.bindings,
278
+ downstream: node.downstream,
279
+ old: node.state.status === "updating"
280
+ ? node.state.old
281
+ : node.state,
282
+ });
283
+ }
284
+ };
285
+ yield* checkpoint(node.state.attr);
286
+ yield* report("attaching");
287
+ let bindingOutputs = yield* attachBindings({
288
+ resource,
289
+ bindings: node.bindings,
290
+ target: {
291
+ id,
292
+ props: news,
293
+ attr: node.state.attr,
294
+ },
295
+ });
296
+ yield* report("updating");
297
+ const attr = yield* node.provider.update({
233
298
  id,
234
- props: news,
235
- attr,
236
- },
237
- });
238
- yield* commit({
239
- status: "created",
240
- logicalId: id,
241
- instanceId,
242
- resourceType: node.resource.type,
243
- props: news,
244
- attr,
245
- bindings: node.bindings.map((binding, i) => ({
246
- ...binding,
247
- attr: bindingOutputs[i],
248
- })),
249
- providerVersion: node.provider.version ?? 0,
250
- downstream: node.downstream,
251
- });
252
- yield* report("created");
253
- return attr;
254
- }
255
- else if (node.action === "update") {
256
- const upstream = Object.fromEntries(yield* Effect.all(Object.entries(Output.resolveUpstream(node.props)).map(([id]) => resolveUpstream(id).pipe(Effect.map(({ upstreamAttr }) => [id, upstreamAttr])))));
257
- const news = (yield* Output.evaluate(node.props, upstream));
258
- const checkpoint = (attr) => {
299
+ news,
300
+ instanceId,
301
+ bindings: bindingOutputs,
302
+ session: scopedSession,
303
+ olds: node.state.status === "created" ||
304
+ node.state.status === "updated" ||
305
+ node.state.status === "replaced"
306
+ ? node.state.props
307
+ : node.state.old.props,
308
+ output: node.state.attr,
309
+ });
310
+ yield* checkpoint(attr);
311
+ yield* report("post-attach");
312
+ bindingOutputs = yield* postAttachBindings({
313
+ resource,
314
+ bindings: node.bindings,
315
+ bindingOutputs,
316
+ target: {
317
+ id,
318
+ props: news,
319
+ attr,
320
+ },
321
+ });
259
322
  if (node.state.status === "replaced") {
260
- return commit({
323
+ yield* commit({
261
324
  ...node.state,
262
325
  attr,
263
326
  props: news,
264
327
  });
265
328
  }
266
329
  else {
267
- return commit({
268
- status: "updating",
330
+ yield* commit({
331
+ status: "updated",
269
332
  logicalId: id,
270
333
  instanceId,
271
334
  resourceType: node.resource.type,
272
335
  props: news,
273
336
  attr,
337
+ bindings: node.bindings.map((binding, i) => ({
338
+ ...binding,
339
+ attr: bindingOutputs[i],
340
+ })),
274
341
  providerVersion: node.provider.version ?? 0,
275
- bindings: node.bindings,
276
342
  downstream: node.downstream,
277
- old: node.state.status === "updating"
278
- ? node.state.old
279
- : node.state,
280
343
  });
281
344
  }
282
- };
283
- yield* checkpoint(node.state.attr);
284
- yield* report("attaching");
285
- let bindingOutputs = yield* attachBindings({
286
- resource,
287
- bindings: node.bindings,
288
- target: {
289
- id,
290
- props: news,
291
- attr: node.state.attr,
292
- },
293
- });
294
- yield* report("updating");
295
- const attr = yield* node.provider.update({
296
- id,
297
- news,
298
- instanceId,
299
- bindings: bindingOutputs,
300
- session: scopedSession,
301
- olds: node.state.status === "created" ||
302
- node.state.status === "updated" ||
303
- node.state.status === "replaced"
304
- ? node.state.props
305
- : node.state.old.props,
306
- output: node.state.attr,
307
- });
308
- yield* checkpoint(attr);
309
- yield* report("post-attach");
310
- bindingOutputs = yield* postAttachBindings({
311
- resource,
312
- bindings: node.bindings,
313
- bindingOutputs,
314
- target: {
315
- id,
316
- props: news,
317
- attr,
318
- },
319
- });
320
- if (node.state.status === "replaced") {
321
- yield* commit({
322
- ...node.state,
323
- attr,
324
- props: news,
325
- });
345
+ yield* report("updated");
346
+ return attr;
326
347
  }
327
- else {
328
- yield* commit({
329
- status: "updated",
348
+ else if (node.action === "replace") {
349
+ if (node.state.status === "replaced") {
350
+ // we've already created the replacement resource, return the output
351
+ return node.state.attr;
352
+ }
353
+ let state;
354
+ if (node.state.status !== "replacing") {
355
+ yield* commit((state = {
356
+ status: "replacing",
357
+ logicalId: id,
358
+ instanceId,
359
+ resourceType: node.resource.type,
360
+ props: node.props,
361
+ attr: node.state.attr,
362
+ providerVersion: node.provider.version ?? 0,
363
+ deleteFirst: node.deleteFirst,
364
+ old: node.state,
365
+ downstream: node.downstream,
366
+ }));
367
+ }
368
+ else {
369
+ state = node.state;
370
+ }
371
+ const upstream = Object.fromEntries(yield* Effect.all(Object.entries(Output.resolveUpstream(node.props)).map(([id]) => resolveUpstream(id).pipe(Effect.map(({ upstreamAttr }) => [id, upstreamAttr]))), { concurrency: "unbounded" }));
372
+ const news = (yield* Output.evaluate(node.props, upstream));
373
+ const checkpoint = ({ status, attr, bindings, }) => commit({
374
+ status,
330
375
  logicalId: id,
331
376
  instanceId,
332
377
  resourceType: node.resource.type,
333
378
  props: news,
334
379
  attr,
335
- bindings: node.bindings.map((binding, i) => ({
336
- ...binding,
337
- attr: bindingOutputs[i],
338
- })),
339
380
  providerVersion: node.provider.version ?? 0,
381
+ bindings: bindings ?? node.bindings,
340
382
  downstream: node.downstream,
341
- });
342
- }
343
- yield* report("updated");
344
- return attr;
345
- }
346
- else if (node.action === "replace") {
347
- if (node.state.status === "replaced") {
348
- // we've already created the replacement resource, return the output
349
- return node.state.attr;
350
- }
351
- let state;
352
- if (node.state.status !== "replacing") {
353
- yield* commit((state = {
354
- status: "replacing",
355
- logicalId: id,
356
- instanceId,
357
- resourceType: node.resource.type,
358
- props: node.props,
359
- attr: node.state.attr,
360
- providerVersion: node.provider.version ?? 0,
383
+ old: state.old,
361
384
  deleteFirst: node.deleteFirst,
362
- old: node.state,
363
- downstream: node.downstream,
364
- }));
365
- }
366
- else {
367
- state = node.state;
368
- }
369
- const upstream = Object.fromEntries(yield* Effect.all(Object.entries(Output.resolveUpstream(node.props)).map(([id]) => resolveUpstream(id).pipe(Effect.map(({ upstreamAttr }) => [id, upstreamAttr])))));
370
- const news = (yield* Output.evaluate(node.props, upstream));
371
- const checkpoint = ({ status, attr, bindings, }) => commit({
372
- status,
373
- logicalId: id,
374
- instanceId,
375
- resourceType: node.resource.type,
376
- props: news,
377
- attr,
378
- providerVersion: node.provider.version ?? 0,
379
- bindings: bindings ?? node.bindings,
380
- downstream: node.downstream,
381
- old: state.old,
382
- deleteFirst: node.deleteFirst,
383
- });
384
- let attr;
385
- if (node.provider.precreate &&
386
- // pre-create is only designed to ensure the resource exists, if we have state.attr, then it already exists and should be skipped
387
- node.state?.attr === undefined) {
388
- yield* report("pre-creating");
389
- // stub the resource prior to resolving upstream resources or bindings if a stub is available
390
- attr = yield* node.provider.precreate({
385
+ });
386
+ let attr;
387
+ if (node.provider.precreate &&
388
+ // pre-create is only designed to ensure the resource exists, if we have state.attr, then it already exists and should be skipped
389
+ node.state?.attr === undefined) {
390
+ yield* report("pre-creating");
391
+ // stub the resource prior to resolving upstream resources or bindings if a stub is available
392
+ attr = yield* node.provider.precreate({
393
+ id,
394
+ news: node.props,
395
+ session: scopedSession,
396
+ instanceId,
397
+ });
398
+ yield* checkpoint({
399
+ status: "replacing",
400
+ attr,
401
+ });
402
+ }
403
+ yield* report("attaching");
404
+ let bindingOutputs = yield* attachBindings({
405
+ resource,
406
+ bindings: node.bindings,
407
+ target: {
408
+ id,
409
+ props: news,
410
+ attr,
411
+ },
412
+ });
413
+ yield* report("creating replacement");
414
+ attr = yield* node.provider.create({
391
415
  id,
392
- news: node.props,
393
- session: scopedSession,
416
+ news,
394
417
  instanceId,
418
+ bindings: bindingOutputs,
419
+ session: scopedSession,
395
420
  });
396
421
  yield* checkpoint({
397
422
  status: "replacing",
398
423
  attr,
399
424
  });
400
- }
401
- yield* report("attaching");
402
- let bindingOutputs = yield* attachBindings({
403
- resource,
404
- bindings: node.bindings,
405
- target: {
406
- id,
407
- props: news,
408
- attr,
409
- },
410
- });
411
- yield* report("creating replacement");
412
- attr = yield* node.provider.create({
413
- id,
414
- news,
415
- instanceId,
416
- bindings: bindingOutputs,
417
- session: scopedSession,
418
- });
419
- yield* checkpoint({
420
- status: "replacing",
421
- attr,
422
- });
423
- yield* report("post-attach");
424
- bindingOutputs = yield* postAttachBindings({
425
- resource,
426
- bindings: node.bindings,
427
- bindingOutputs,
428
- target: {
429
- id,
430
- props: news,
425
+ yield* report("post-attach");
426
+ bindingOutputs = yield* postAttachBindings({
427
+ resource,
428
+ bindings: node.bindings,
429
+ bindingOutputs,
430
+ target: {
431
+ id,
432
+ props: news,
433
+ attr,
434
+ },
435
+ });
436
+ yield* checkpoint({
437
+ status: "replaced",
431
438
  attr,
432
- },
433
- });
434
- yield* checkpoint({
435
- status: "replaced",
436
- attr,
437
- bindings: node.bindings.map((binding, i) => ({
438
- ...binding,
439
- attr: bindingOutputs[i],
440
- })),
441
- });
442
- yield* report("created");
443
- return attr;
444
- }
445
- // @ts-expect-error
446
- return yield* Effect.dieMessage(`Unknown action: ${node.action}`);
439
+ bindings: node.bindings.map((binding, i) => ({
440
+ ...binding,
441
+ attr: bindingOutputs[i],
442
+ })),
443
+ });
444
+ yield* report("created");
445
+ return attr;
446
+ }
447
+ // @ts-expect-error
448
+ return yield* Effect.dieMessage(`Unknown action: ${node.action}`);
449
+ });
450
+ // provide the resource-specific context (InstanceId, etc.)
451
+ return yield* apply.pipe(Effect.provide(Layer.succeed(InstanceId, instanceId)));
447
452
  })));
448
453
  });
449
454
  return Object.fromEntries(yield* Effect.all(Object.entries(plan.resources).map(Effect.fn(function* ([id, node]) {
450
455
  return [id, yield* apply(node)];
451
- }))));
456
+ })), { concurrency: "unbounded" }));
452
457
  });
453
458
  const collectGarbage = Effect.fnUntraced(function* (plan, session) {
454
459
  const state = yield* State;
@@ -507,7 +512,7 @@ const collectGarbage = Effect.fnUntraced(function* (plan, session) {
507
512
  return yield* (deletions[logicalId] ??= yield* Effect.cached(Effect.gen(function* () {
508
513
  yield* Effect.all(downstream.map((dep) => dep in deletionGraph
509
514
  ? deleteResource(deletionGraph[dep])
510
- : Effect.void));
515
+ : Effect.void), { concurrency: "unbounded" });
511
516
  yield* report("deleting");
512
517
  if (isDeleteNode(node)) {
513
518
  yield* commit({
@@ -522,14 +527,16 @@ const collectGarbage = Effect.fnUntraced(function* (plan, session) {
522
527
  bindings: node.bindings,
523
528
  });
524
529
  }
525
- yield* provider.delete({
526
- id: logicalId,
527
- instanceId,
528
- olds: props,
529
- output: attr,
530
- session: scopedSession,
531
- bindings: [],
532
- });
530
+ if (attr !== undefined) {
531
+ yield* provider.delete({
532
+ id: logicalId,
533
+ instanceId,
534
+ olds: props,
535
+ output: attr,
536
+ session: scopedSession,
537
+ bindings: [],
538
+ });
539
+ }
533
540
  if (isDeleteNode(node)) {
534
541
  // TODO(sam): should we commit a tombstone instead? and then clean up tombstones after all deletions are complete?
535
542
  yield* state.delete({
@@ -553,10 +560,10 @@ const collectGarbage = Effect.fnUntraced(function* (plan, session) {
553
560
  });
554
561
  yield* report("replaced");
555
562
  }
556
- })));
563
+ }).pipe(Effect.provide(Layer.succeed(InstanceId, instanceId)))));
557
564
  });
558
565
  yield* Effect.all(Object.values(deletionGraph)
559
566
  .filter((node) => node !== undefined)
560
- .map(deleteResource));
567
+ .map(deleteResource), { concurrency: "unbounded" });
561
568
  });
562
569
  //# sourceMappingURL=apply.js.map