alchemy-effect 0.2.0 → 0.4.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 (494) hide show
  1. package/bin/alchemy-effect.js +55354 -8
  2. package/bin/alchemy-effect.js.map +1 -1
  3. package/bin/alchemy-effect.ts +266 -10
  4. package/lib/$.d.ts +5 -0
  5. package/lib/$.d.ts.map +1 -0
  6. package/lib/$.js +9 -0
  7. package/lib/$.js.map +1 -0
  8. package/lib/app.d.ts +4 -17
  9. package/lib/app.d.ts.map +1 -1
  10. package/lib/app.js +0 -20
  11. package/lib/app.js.map +1 -1
  12. package/lib/apply.d.ts +15 -75
  13. package/lib/apply.d.ts.map +1 -1
  14. package/lib/apply.js +439 -154
  15. package/lib/apply.js.map +1 -1
  16. package/lib/assert-never.d.ts +12 -0
  17. package/lib/assert-never.d.ts.map +1 -0
  18. package/lib/assert-never.js +11 -0
  19. package/lib/assert-never.js.map +1 -0
  20. package/lib/aws/account.d.ts +10 -1
  21. package/lib/aws/account.d.ts.map +1 -1
  22. package/lib/aws/account.js +18 -3
  23. package/lib/aws/account.js.map +1 -1
  24. package/lib/aws/client.d.ts.map +1 -1
  25. package/lib/aws/client.js +0 -1
  26. package/lib/aws/client.js.map +1 -1
  27. package/lib/aws/config.d.ts +15 -0
  28. package/lib/aws/config.d.ts.map +1 -0
  29. package/lib/aws/config.js +1 -0
  30. package/lib/aws/config.js.map +1 -0
  31. package/lib/aws/credentials.d.ts +10 -0
  32. package/lib/aws/credentials.d.ts.map +1 -1
  33. package/lib/aws/credentials.js +73 -47
  34. package/lib/aws/credentials.js.map +1 -1
  35. package/lib/aws/dynamodb/client.d.ts +1 -1
  36. package/lib/aws/dynamodb/client.d.ts.map +1 -1
  37. package/lib/aws/dynamodb/index.d.ts +2 -1
  38. package/lib/aws/dynamodb/index.d.ts.map +1 -1
  39. package/lib/aws/dynamodb/index.js +1 -2
  40. package/lib/aws/dynamodb/index.js.map +1 -1
  41. package/lib/aws/dynamodb/secondary-index.d.ts +5 -4
  42. package/lib/aws/dynamodb/secondary-index.d.ts.map +1 -1
  43. package/lib/aws/dynamodb/table.d.ts +23 -20
  44. package/lib/aws/dynamodb/table.d.ts.map +1 -1
  45. package/lib/aws/dynamodb/table.get-item.d.ts +8 -6
  46. package/lib/aws/dynamodb/table.get-item.d.ts.map +1 -1
  47. package/lib/aws/dynamodb/table.get-item.js +4 -2
  48. package/lib/aws/dynamodb/table.get-item.js.map +1 -1
  49. package/lib/aws/dynamodb/table.js.map +1 -1
  50. package/lib/aws/dynamodb/table.provider.d.ts +3 -4
  51. package/lib/aws/dynamodb/table.provider.d.ts.map +1 -1
  52. package/lib/aws/dynamodb/table.provider.js +18 -29
  53. package/lib/aws/dynamodb/table.provider.js.map +1 -1
  54. package/lib/aws/ec2/client.d.ts +1 -1
  55. package/lib/aws/ec2/client.d.ts.map +1 -1
  56. package/lib/aws/ec2/index.d.ts +11 -0
  57. package/lib/aws/ec2/index.d.ts.map +1 -1
  58. package/lib/aws/ec2/index.js +11 -0
  59. package/lib/aws/ec2/index.js.map +1 -1
  60. package/lib/aws/ec2/internet-gateway.d.ts +65 -0
  61. package/lib/aws/ec2/internet-gateway.d.ts.map +1 -0
  62. package/lib/aws/ec2/internet-gateway.js +4 -0
  63. package/lib/aws/ec2/internet-gateway.js.map +1 -0
  64. package/lib/aws/ec2/internet-gateway.provider.d.ts +6 -0
  65. package/lib/aws/ec2/internet-gateway.provider.d.ts.map +1 -0
  66. package/lib/aws/ec2/internet-gateway.provider.js +193 -0
  67. package/lib/aws/ec2/internet-gateway.provider.js.map +1 -0
  68. package/lib/aws/ec2/route-table-association.d.ts +63 -0
  69. package/lib/aws/ec2/route-table-association.d.ts.map +1 -0
  70. package/lib/aws/ec2/route-table-association.js +4 -0
  71. package/lib/aws/ec2/route-table-association.js.map +1 -0
  72. package/lib/aws/ec2/route-table-association.provider.d.ts +4 -0
  73. package/lib/aws/ec2/route-table-association.provider.d.ts.map +1 -0
  74. package/lib/aws/ec2/route-table-association.provider.js +121 -0
  75. package/lib/aws/ec2/route-table-association.provider.js.map +1 -0
  76. package/lib/aws/ec2/route-table.d.ts +159 -0
  77. package/lib/aws/ec2/route-table.d.ts.map +1 -0
  78. package/lib/aws/ec2/route-table.js +4 -0
  79. package/lib/aws/ec2/route-table.js.map +1 -0
  80. package/lib/aws/ec2/route-table.provider.d.ts +6 -0
  81. package/lib/aws/ec2/route-table.provider.d.ts.map +1 -0
  82. package/lib/aws/ec2/route-table.provider.js +213 -0
  83. package/lib/aws/ec2/route-table.provider.js.map +1 -0
  84. package/lib/aws/ec2/route.d.ts +155 -0
  85. package/lib/aws/ec2/route.d.ts.map +1 -0
  86. package/lib/aws/ec2/route.js +3 -0
  87. package/lib/aws/ec2/route.js.map +1 -0
  88. package/lib/aws/ec2/route.provider.d.ts +4 -0
  89. package/lib/aws/ec2/route.provider.d.ts.map +1 -0
  90. package/lib/aws/ec2/route.provider.js +166 -0
  91. package/lib/aws/ec2/route.provider.js.map +1 -0
  92. package/lib/aws/ec2/subnet.d.ts +175 -0
  93. package/lib/aws/ec2/subnet.d.ts.map +1 -0
  94. package/lib/aws/ec2/subnet.js +4 -0
  95. package/lib/aws/ec2/subnet.js.map +1 -0
  96. package/lib/aws/ec2/subnet.provider.d.ts +4 -0
  97. package/lib/aws/ec2/subnet.provider.d.ts.map +1 -0
  98. package/lib/aws/ec2/subnet.provider.js +250 -0
  99. package/lib/aws/ec2/subnet.provider.js.map +1 -0
  100. package/lib/aws/ec2/vpc.d.ts +13 -8
  101. package/lib/aws/ec2/vpc.d.ts.map +1 -1
  102. package/lib/aws/ec2/vpc.js +1 -0
  103. package/lib/aws/ec2/vpc.js.map +1 -1
  104. package/lib/aws/ec2/vpc.provider.d.ts +1 -2
  105. package/lib/aws/ec2/vpc.provider.d.ts.map +1 -1
  106. package/lib/aws/ec2/vpc.provider.js +45 -37
  107. package/lib/aws/ec2/vpc.provider.js.map +1 -1
  108. package/lib/aws/index.d.ts +15 -19
  109. package/lib/aws/index.d.ts.map +1 -1
  110. package/lib/aws/index.js +8 -10
  111. package/lib/aws/index.js.map +1 -1
  112. package/lib/aws/lambda/consume.d.ts +10 -11
  113. package/lib/aws/lambda/consume.d.ts.map +1 -1
  114. package/lib/aws/lambda/consume.js +3 -3
  115. package/lib/aws/lambda/consume.js.map +1 -1
  116. package/lib/aws/lambda/function.d.ts +7 -7
  117. package/lib/aws/lambda/function.d.ts.map +1 -1
  118. package/lib/aws/lambda/function.handler.d.ts +1 -1
  119. package/lib/aws/lambda/function.handler.d.ts.map +1 -1
  120. package/lib/aws/lambda/function.handler.js.map +1 -1
  121. package/lib/aws/lambda/function.invoke.d.ts +6 -4
  122. package/lib/aws/lambda/function.invoke.d.ts.map +1 -1
  123. package/lib/aws/lambda/function.invoke.js +3 -1
  124. package/lib/aws/lambda/function.invoke.js.map +1 -1
  125. package/lib/aws/lambda/function.js +1 -1
  126. package/lib/aws/lambda/function.js.map +1 -1
  127. package/lib/aws/lambda/function.provider.d.ts +3 -2
  128. package/lib/aws/lambda/function.provider.d.ts.map +1 -1
  129. package/lib/aws/lambda/function.provider.js +28 -25
  130. package/lib/aws/lambda/function.provider.js.map +1 -1
  131. package/lib/aws/lambda/index.d.ts +1 -0
  132. package/lib/aws/lambda/index.d.ts.map +1 -1
  133. package/lib/aws/lambda/index.js +1 -0
  134. package/lib/aws/lambda/index.js.map +1 -1
  135. package/lib/aws/lambda/serve.d.ts +2 -4
  136. package/lib/aws/lambda/serve.d.ts.map +1 -1
  137. package/lib/aws/profile.d.ts +2 -2
  138. package/lib/aws/profile.d.ts.map +1 -1
  139. package/lib/aws/profile.js +1 -1
  140. package/lib/aws/profile.js.map +1 -1
  141. package/lib/aws/region.d.ts +14 -2
  142. package/lib/aws/region.d.ts.map +1 -1
  143. package/lib/aws/region.js +26 -1
  144. package/lib/aws/region.js.map +1 -1
  145. package/lib/aws/sqs/client.d.ts +1 -1
  146. package/lib/aws/sqs/client.d.ts.map +1 -1
  147. package/lib/aws/sqs/index.d.ts +1 -0
  148. package/lib/aws/sqs/index.d.ts.map +1 -1
  149. package/lib/aws/sqs/index.js +1 -0
  150. package/lib/aws/sqs/index.js.map +1 -1
  151. package/lib/aws/sqs/queue.consume.d.ts +1 -1
  152. package/lib/aws/sqs/queue.consume.d.ts.map +1 -1
  153. package/lib/aws/sqs/queue.consume.js +0 -1
  154. package/lib/aws/sqs/queue.consume.js.map +1 -1
  155. package/lib/aws/sqs/queue.d.ts +6 -4
  156. package/lib/aws/sqs/queue.d.ts.map +1 -1
  157. package/lib/aws/sqs/queue.event-source.d.ts +8 -6
  158. package/lib/aws/sqs/queue.event-source.d.ts.map +1 -1
  159. package/lib/aws/sqs/queue.event-source.js +26 -44
  160. package/lib/aws/sqs/queue.event-source.js.map +1 -1
  161. package/lib/aws/sqs/queue.js +1 -1
  162. package/lib/aws/sqs/queue.js.map +1 -1
  163. package/lib/aws/sqs/queue.provider.d.ts +2 -2
  164. package/lib/aws/sqs/queue.provider.d.ts.map +1 -1
  165. package/lib/aws/sqs/queue.provider.js +2 -1
  166. package/lib/aws/sqs/queue.provider.js.map +1 -1
  167. package/lib/aws/sqs/queue.send-message.d.ts +7 -5
  168. package/lib/aws/sqs/queue.send-message.d.ts.map +1 -1
  169. package/lib/aws/sqs/queue.send-message.js +4 -2
  170. package/lib/aws/sqs/queue.send-message.js.map +1 -1
  171. package/lib/binding.d.ts +12 -12
  172. package/lib/binding.d.ts.map +1 -1
  173. package/lib/binding.js.map +1 -1
  174. package/lib/cli/components/ApprovePlan.d.ts +2 -2
  175. package/lib/cli/components/ApprovePlan.d.ts.map +1 -1
  176. package/lib/cli/components/ApprovePlan.js.map +1 -1
  177. package/lib/cli/components/Plan.d.ts +2 -2
  178. package/lib/cli/components/Plan.d.ts.map +1 -1
  179. package/lib/cli/components/Plan.js.map +1 -1
  180. package/lib/cli/components/PlanProgress.d.ts +8 -4
  181. package/lib/cli/components/PlanProgress.d.ts.map +1 -1
  182. package/lib/cli/components/PlanProgress.js +11 -1
  183. package/lib/cli/components/PlanProgress.js.map +1 -1
  184. package/lib/cli/index.d.ts +384 -264
  185. package/lib/cli/index.d.ts.map +1 -1
  186. package/lib/cli/index.js +57 -65
  187. package/lib/cli/index.js.map +1 -1
  188. package/lib/cli/ink-service.d.ts +4 -0
  189. package/lib/cli/ink-service.d.ts.map +1 -0
  190. package/lib/cli/ink-service.js +43 -0
  191. package/lib/cli/ink-service.js.map +1 -0
  192. package/lib/cli/service.d.ts +21 -0
  193. package/lib/cli/service.d.ts.map +1 -0
  194. package/lib/cli/service.js +5 -0
  195. package/lib/cli/service.js.map +1 -0
  196. package/lib/cloudflare/account.d.ts +10 -0
  197. package/lib/cloudflare/account.d.ts.map +1 -0
  198. package/lib/cloudflare/account.js +24 -0
  199. package/lib/cloudflare/account.js.map +1 -0
  200. package/lib/cloudflare/api.d.ts +7 -7
  201. package/lib/cloudflare/api.d.ts.map +1 -1
  202. package/lib/cloudflare/api.js +18 -17
  203. package/lib/cloudflare/api.js.map +1 -1
  204. package/lib/cloudflare/config.d.ts +9 -0
  205. package/lib/cloudflare/config.d.ts.map +1 -0
  206. package/lib/cloudflare/config.js +1 -0
  207. package/lib/cloudflare/config.js.map +1 -0
  208. package/lib/cloudflare/index.d.ts +3 -1
  209. package/lib/cloudflare/index.d.ts.map +1 -1
  210. package/lib/cloudflare/index.js +3 -0
  211. package/lib/cloudflare/index.js.map +1 -1
  212. package/lib/cloudflare/kv/namespace.binding.d.ts +5 -3
  213. package/lib/cloudflare/kv/namespace.binding.d.ts.map +1 -1
  214. package/lib/cloudflare/kv/namespace.binding.js +1 -1
  215. package/lib/cloudflare/kv/namespace.binding.js.map +1 -1
  216. package/lib/cloudflare/kv/namespace.client.d.ts +1 -1
  217. package/lib/cloudflare/kv/namespace.d.ts +3 -2
  218. package/lib/cloudflare/kv/namespace.d.ts.map +1 -1
  219. package/lib/cloudflare/kv/namespace.js.map +1 -1
  220. package/lib/cloudflare/kv/namespace.provider.d.ts +3 -2
  221. package/lib/cloudflare/kv/namespace.provider.d.ts.map +1 -1
  222. package/lib/cloudflare/kv/namespace.provider.js +9 -7
  223. package/lib/cloudflare/kv/namespace.provider.js.map +1 -1
  224. package/lib/cloudflare/live.d.ts +5 -5
  225. package/lib/cloudflare/live.d.ts.map +1 -1
  226. package/lib/cloudflare/live.js +5 -8
  227. package/lib/cloudflare/live.js.map +1 -1
  228. package/lib/cloudflare/r2/bucket.binding.d.ts +5 -3
  229. package/lib/cloudflare/r2/bucket.binding.d.ts.map +1 -1
  230. package/lib/cloudflare/r2/bucket.binding.js +1 -1
  231. package/lib/cloudflare/r2/bucket.binding.js.map +1 -1
  232. package/lib/cloudflare/r2/bucket.d.ts +3 -2
  233. package/lib/cloudflare/r2/bucket.d.ts.map +1 -1
  234. package/lib/cloudflare/r2/bucket.js.map +1 -1
  235. package/lib/cloudflare/r2/bucket.provider.d.ts +3 -2
  236. package/lib/cloudflare/r2/bucket.provider.d.ts.map +1 -1
  237. package/lib/cloudflare/r2/bucket.provider.js +14 -8
  238. package/lib/cloudflare/r2/bucket.provider.js.map +1 -1
  239. package/lib/cloudflare/worker/assets.fetch.d.ts +3 -2
  240. package/lib/cloudflare/worker/assets.fetch.d.ts.map +1 -1
  241. package/lib/cloudflare/worker/assets.fetch.js +2 -1
  242. package/lib/cloudflare/worker/assets.fetch.js.map +1 -1
  243. package/lib/cloudflare/worker/assets.provider.d.ts +1 -1
  244. package/lib/cloudflare/worker/assets.provider.d.ts.map +1 -1
  245. package/lib/cloudflare/worker/index.d.ts +0 -1
  246. package/lib/cloudflare/worker/index.d.ts.map +1 -1
  247. package/lib/cloudflare/worker/worker.d.ts +5 -6
  248. package/lib/cloudflare/worker/worker.d.ts.map +1 -1
  249. package/lib/cloudflare/worker/worker.handler.d.ts +1 -1
  250. package/lib/cloudflare/worker/worker.handler.d.ts.map +1 -1
  251. package/lib/cloudflare/worker/worker.handler.js.map +1 -1
  252. package/lib/cloudflare/worker/worker.js.map +1 -1
  253. package/lib/cloudflare/worker/worker.provider.d.ts +3 -2
  254. package/lib/cloudflare/worker/worker.provider.d.ts.map +1 -1
  255. package/lib/cloudflare/worker/worker.provider.js +12 -7
  256. package/lib/cloudflare/worker/worker.provider.js.map +1 -1
  257. package/lib/cloudflare/worker/worker.serve.d.ts +7 -7
  258. package/lib/cloudflare/worker/worker.serve.d.ts.map +1 -1
  259. package/lib/cloudflare/worker/worker.serve.js.map +1 -1
  260. package/lib/data.d.ts +3 -0
  261. package/lib/data.d.ts.map +1 -0
  262. package/lib/data.js +8 -0
  263. package/lib/data.js.map +1 -0
  264. package/lib/destroy.d.ts +1 -1
  265. package/lib/destroy.d.ts.map +1 -1
  266. package/lib/destroy.js +1 -4
  267. package/lib/destroy.js.map +1 -1
  268. package/lib/diff.d.ts +18 -0
  269. package/lib/diff.d.ts.map +1 -0
  270. package/lib/diff.js +22 -0
  271. package/lib/diff.js.map +1 -0
  272. package/lib/env.d.ts +5 -0
  273. package/lib/env.d.ts.map +1 -1
  274. package/lib/env.js +15 -29
  275. package/lib/env.js.map +1 -1
  276. package/lib/event.d.ts +1 -1
  277. package/lib/event.d.ts.map +1 -1
  278. package/lib/exports.d.ts +9 -0
  279. package/lib/exports.d.ts.map +1 -0
  280. package/lib/exports.js +13 -0
  281. package/lib/exports.js.map +1 -0
  282. package/lib/index.d.ts +10 -2
  283. package/lib/index.d.ts.map +1 -1
  284. package/lib/index.js +10 -5
  285. package/lib/index.js.map +1 -1
  286. package/lib/input.d.ts +32 -0
  287. package/lib/input.d.ts.map +1 -0
  288. package/lib/input.js +1 -0
  289. package/lib/input.js.map +1 -0
  290. package/lib/instance-id.d.ts +8 -0
  291. package/lib/instance-id.d.ts.map +1 -0
  292. package/lib/instance-id.js +12 -0
  293. package/lib/instance-id.js.map +1 -0
  294. package/lib/output.d.ts +145 -0
  295. package/lib/output.d.ts.map +1 -0
  296. package/lib/output.js +283 -0
  297. package/lib/output.js.map +1 -0
  298. package/lib/physical-name.d.ts +14 -1
  299. package/lib/physical-name.d.ts.map +1 -1
  300. package/lib/physical-name.js +41 -2
  301. package/lib/physical-name.js.map +1 -1
  302. package/lib/plan.d.ts +84 -58
  303. package/lib/plan.d.ts.map +1 -1
  304. package/lib/plan.js +504 -166
  305. package/lib/plan.js.map +1 -1
  306. package/lib/policy.d.ts +3 -4
  307. package/lib/policy.d.ts.map +1 -1
  308. package/lib/policy.js +0 -1
  309. package/lib/policy.js.map +1 -1
  310. package/lib/provider.d.ts +39 -24
  311. package/lib/provider.d.ts.map +1 -1
  312. package/lib/provider.js +9 -0
  313. package/lib/provider.js.map +1 -1
  314. package/lib/ref.d.ts +14 -0
  315. package/lib/ref.d.ts.map +1 -0
  316. package/lib/ref.js +21 -0
  317. package/lib/ref.js.map +1 -0
  318. package/lib/resource.d.ts +13 -8
  319. package/lib/resource.d.ts.map +1 -1
  320. package/lib/resource.js.map +1 -1
  321. package/lib/runtime.d.ts +7 -6
  322. package/lib/runtime.d.ts.map +1 -1
  323. package/lib/runtime.js.map +1 -1
  324. package/lib/service.d.ts +9 -6
  325. package/lib/service.d.ts.map +1 -1
  326. package/lib/service.js.map +1 -1
  327. package/lib/stack.d.ts +60 -0
  328. package/lib/stack.d.ts.map +1 -0
  329. package/lib/stack.js +11 -0
  330. package/lib/stack.js.map +1 -0
  331. package/lib/stage.d.ts +39 -0
  332. package/lib/stage.d.ts.map +1 -0
  333. package/lib/stage.js +32 -0
  334. package/lib/stage.js.map +1 -0
  335. package/lib/state.d.ts +135 -17
  336. package/lib/state.d.ts.map +1 -1
  337. package/lib/state.js +34 -30
  338. package/lib/state.js.map +1 -1
  339. package/lib/tags.d.ts +15 -0
  340. package/lib/tags.d.ts.map +1 -1
  341. package/lib/tags.js +27 -0
  342. package/lib/tags.js.map +1 -1
  343. package/lib/test.d.ts +25 -4
  344. package/lib/test.d.ts.map +1 -1
  345. package/lib/test.js +54 -14
  346. package/lib/test.js.map +1 -1
  347. package/lib/todo.d.ts +3 -0
  348. package/lib/todo.d.ts.map +1 -0
  349. package/lib/todo.js +3 -0
  350. package/lib/todo.js.map +1 -0
  351. package/lib/tsconfig.test.tsbuildinfo +1 -1
  352. package/lib/type.d.ts +3 -0
  353. package/lib/type.d.ts.map +1 -1
  354. package/lib/unknown.d.ts +4 -0
  355. package/lib/unknown.d.ts.map +1 -0
  356. package/lib/unknown.js +4 -0
  357. package/lib/unknown.js.map +1 -0
  358. package/lib/user.d.ts +3 -0
  359. package/lib/user.d.ts.map +1 -0
  360. package/lib/user.js +3 -0
  361. package/lib/user.js.map +1 -0
  362. package/lib/util.d.ts +6 -0
  363. package/lib/util.d.ts.map +1 -0
  364. package/lib/util.js +9 -0
  365. package/lib/util.js.map +1 -0
  366. package/package.json +18 -12
  367. package/src/$.ts +17 -0
  368. package/src/app.ts +3 -32
  369. package/src/apply.ts +824 -452
  370. package/src/assert-never.ts +18 -0
  371. package/src/aws/account.ts +23 -3
  372. package/src/aws/client.ts +0 -1
  373. package/src/aws/config.ts +16 -0
  374. package/src/aws/credentials.ts +212 -177
  375. package/src/aws/dynamodb/index.ts +3 -3
  376. package/src/aws/dynamodb/table.get-item.ts +5 -9
  377. package/src/aws/dynamodb/table.provider.ts +36 -39
  378. package/src/aws/dynamodb/table.ts +29 -84
  379. package/src/aws/ec2/index.ts +12 -0
  380. package/src/aws/ec2/internet-gateway.provider.ts +316 -0
  381. package/src/aws/ec2/internet-gateway.ts +79 -0
  382. package/src/aws/ec2/route-table-association.provider.ts +214 -0
  383. package/src/aws/ec2/route-table-association.ts +82 -0
  384. package/src/aws/ec2/route-table.provider.ts +306 -0
  385. package/src/aws/ec2/route-table.ts +175 -0
  386. package/src/aws/ec2/route.provider.ts +213 -0
  387. package/src/aws/ec2/route.ts +192 -0
  388. package/src/aws/ec2/subnet.provider.ts +358 -0
  389. package/src/aws/ec2/subnet.ts +213 -0
  390. package/src/aws/ec2/vpc.provider.ts +58 -50
  391. package/src/aws/ec2/vpc.ts +21 -8
  392. package/src/aws/index.ts +49 -40
  393. package/src/aws/lambda/consume.ts +8 -7
  394. package/src/aws/lambda/function.handler.ts +1 -1
  395. package/src/aws/lambda/function.invoke.ts +6 -2
  396. package/src/aws/lambda/function.provider.ts +41 -32
  397. package/src/aws/lambda/function.ts +7 -4
  398. package/src/aws/lambda/index.ts +2 -0
  399. package/src/aws/profile.ts +1 -4
  400. package/src/aws/region.ts +42 -3
  401. package/src/aws/sqs/index.ts +2 -0
  402. package/src/aws/sqs/queue.consume.ts +1 -1
  403. package/src/aws/sqs/queue.event-source.ts +29 -55
  404. package/src/aws/sqs/queue.provider.ts +10 -2
  405. package/src/aws/sqs/queue.send-message.ts +5 -8
  406. package/src/aws/sqs/queue.ts +9 -4
  407. package/src/binding.ts +19 -19
  408. package/src/cli/components/ApprovePlan.tsx +2 -2
  409. package/src/cli/components/Plan.tsx +3 -2
  410. package/src/cli/components/PlanProgress.tsx +32 -14
  411. package/src/cli/index.ts +2 -6
  412. package/src/cli/ink-service.tsx +61 -0
  413. package/src/cli/service.ts +23 -0
  414. package/src/cloudflare/account.ts +37 -0
  415. package/src/cloudflare/api.ts +33 -29
  416. package/src/cloudflare/config.ts +7 -0
  417. package/src/cloudflare/index.ts +3 -1
  418. package/src/cloudflare/kv/namespace.binding.ts +3 -1
  419. package/src/cloudflare/kv/namespace.provider.ts +10 -8
  420. package/src/cloudflare/kv/namespace.ts +3 -2
  421. package/src/cloudflare/live.ts +11 -17
  422. package/src/cloudflare/r2/bucket.binding.ts +3 -1
  423. package/src/cloudflare/r2/bucket.provider.ts +16 -9
  424. package/src/cloudflare/r2/bucket.ts +8 -2
  425. package/src/cloudflare/worker/assets.fetch.ts +3 -1
  426. package/src/cloudflare/worker/assets.provider.ts +1 -1
  427. package/src/cloudflare/worker/index.ts +0 -2
  428. package/src/cloudflare/worker/worker.handler.ts +1 -1
  429. package/src/cloudflare/worker/worker.provider.ts +21 -14
  430. package/src/cloudflare/worker/worker.serve.ts +5 -2
  431. package/src/cloudflare/worker/worker.ts +4 -3
  432. package/src/data.ts +18 -0
  433. package/src/destroy.ts +1 -5
  434. package/src/diff.ts +48 -0
  435. package/src/env.ts +20 -32
  436. package/src/event.ts +6 -0
  437. package/src/exports.ts +21 -0
  438. package/src/index.ts +10 -5
  439. package/src/input.ts +81 -0
  440. package/src/instance-id.ts +16 -0
  441. package/src/output.ts +542 -0
  442. package/src/physical-name.ts +57 -2
  443. package/src/plan.ts +757 -278
  444. package/src/policy.ts +3 -5
  445. package/src/provider.ts +70 -31
  446. package/src/ref.ts +48 -0
  447. package/src/resource.ts +70 -10
  448. package/src/runtime.ts +15 -8
  449. package/src/service.ts +11 -7
  450. package/src/stack.ts +116 -0
  451. package/src/stage.ts +85 -0
  452. package/src/state.ts +269 -76
  453. package/src/tags.ts +31 -0
  454. package/src/test.ts +118 -17
  455. package/src/todo.ts +4 -0
  456. package/src/type.ts +4 -0
  457. package/src/unknown.ts +6 -0
  458. package/src/user.ts +4 -0
  459. package/src/util.ts +21 -0
  460. package/lib/approve.d.ts +0 -15
  461. package/lib/approve.d.ts.map +0 -1
  462. package/lib/approve.js +0 -7
  463. package/lib/approve.js.map +0 -1
  464. package/lib/cli/approve.d.ts +0 -4
  465. package/lib/cli/approve.d.ts.map +0 -1
  466. package/lib/cli/approve.js +0 -18
  467. package/lib/cli/approve.js.map +0 -1
  468. package/lib/cli/clack.d.ts +0 -14
  469. package/lib/cli/clack.d.ts.map +0 -1
  470. package/lib/cli/clack.js +0 -12
  471. package/lib/cli/clack.js.map +0 -1
  472. package/lib/cli/main.d.ts +0 -2
  473. package/lib/cli/main.d.ts.map +0 -1
  474. package/lib/cli/main.js +0 -1
  475. package/lib/cli/main.js.map +0 -1
  476. package/lib/cli/plan.d.ts +0 -13
  477. package/lib/cli/plan.d.ts.map +0 -1
  478. package/lib/cli/plan.js +0 -1
  479. package/lib/cli/plan.js.map +0 -1
  480. package/lib/cli/progress.d.ts +0 -7
  481. package/lib/cli/progress.d.ts.map +0 -1
  482. package/lib/cli/progress.js +0 -30
  483. package/lib/cli/progress.js.map +0 -1
  484. package/lib/cli/spinner.d.ts +0 -2
  485. package/lib/cli/spinner.d.ts.map +0 -1
  486. package/lib/cli/spinner.js +0 -13
  487. package/lib/cli/spinner.js.map +0 -1
  488. package/src/approve.ts +0 -13
  489. package/src/cli/approve.tsx +0 -30
  490. package/src/cli/clack.ts +0 -22
  491. package/src/cli/main.ts +0 -0
  492. package/src/cli/plan.ts +0 -16
  493. package/src/cli/progress.tsx +0 -46
  494. package/src/cli/spinner.ts +0 -14
@@ -1,45 +1,149 @@
1
1
  #!/usr/bin/env node
2
- import * as Layer from "effect/Layer";
3
2
  import * as Effect$1 from "effect/Effect";
4
3
  import { Effect } from "effect/Effect";
5
4
  import * as Context from "effect/Context";
6
- import "@effect/platform/FileSystem";
7
- import "@effect/platform/Path";
5
+ import * as Layer from "effect/Layer";
8
6
  import * as S from "effect/Schema";
9
- import * as effect_Types0 from "effect/Types";
10
- import * as effect_Cause0 from "effect/Cause";
11
7
  import { Types } from "effect";
8
+ import "@effect/platform/FileSystem";
9
+ import "@effect/platform/Path";
12
10
 
13
- //#region src/resource.d.ts
14
- interface Resource<Type extends string = string, ID$1 extends string = string, Props = unknown, Attrs = unknown> {
15
- id: ID$1;
16
- type: Type;
17
- props: Props;
18
- attr: Attrs;
19
- parent: unknown;
20
- new (): Resource<Type, ID$1, Props, Attrs>;
11
+ //#region src/diff.d.ts
12
+ type Diff = NoopDiff | UpdateDiff | ReplaceDiff;
13
+ interface NoopDiff {
14
+ action: "noop";
15
+ stables?: undefined;
21
16
  }
22
- interface ResourceTags<R extends Resource> {
23
- of<S$1 extends ProviderService<R>>(service: S$1): S$1;
24
- tag: Context.TagClass<Provider<R>, R["type"], ProviderService<R>>;
25
- effect<Err, Req>(eff: Effect<ProviderService<R>, Err, Req>): Layer.Layer<Provider<R>, Err, Req>;
26
- succeed(service: ProviderService<R>): Layer.Layer<Provider<R>>;
17
+ interface UpdateDiff {
18
+ action: "update";
19
+ /** properties that won't change as part of this update */
20
+ stables?: string[];
27
21
  }
28
- declare const Resource: <Ctor extends (id: string, props: any) => Resource>(type: ReturnType<Ctor>["type"]) => Ctor & {
29
- new (): ReturnType<Ctor> & {
30
- parent: ReturnType<Ctor>;
22
+ interface ReplaceDiff {
23
+ action: "replace";
24
+ deleteFirst?: boolean;
25
+ stables?: undefined;
26
+ }
27
+ //#endregion
28
+ //#region src/data.d.ts
29
+ type Primitive = never | undefined | null | boolean | number | string | bigint | symbol;
30
+ //#endregion
31
+ //#region src/state.d.ts
32
+ type Props$1 = Record<string, any>;
33
+ type Attr = Record<string, any>;
34
+ type ResourceStatus = ResourceState["status"];
35
+ interface BaseResourceState {
36
+ resourceType: string;
37
+ /** Logical ID of the Resource (stable across creates, updates, deletes and replaces) */
38
+ logicalId: string;
39
+ /** A unique randomly generated token used to seed ID generation (only changes when replaced) */
40
+ instanceId: string;
41
+ /** The version of the provider that was used to create/update the resource. */
42
+ providerVersion: number;
43
+ /** Current status of the logical Resource */
44
+ status: ResourceStatus;
45
+ /** List of logical IDs of resources that depend on this resource */
46
+ downstream: string[];
47
+ /** List of Bindings attached to this Resource */
48
+ bindings?: BindNode[];
49
+ /** Desired state (input props) of this Resource */
50
+ props?: Props$1;
51
+ /** The output attributes of this Resource (if it has been created) */
52
+ attr?: Attr;
53
+ }
54
+ interface CreatingResourceState extends BaseResourceState {
55
+ status: "creating";
56
+ /** The new resource properties that are being (or have been) applied. */
57
+ props: Props$1;
58
+ }
59
+ interface CreatedResourceState extends BaseResourceState {
60
+ status: "created";
61
+ /** The new resource properties that have been applied. */
62
+ props: Props$1;
63
+ /** The output attributes of the created resource */
64
+ attr: Attr;
65
+ }
66
+ interface UpdatingReourceState extends BaseResourceState {
67
+ status: "updating";
68
+ /** The new resource properties that are being (or have been) applied. */
69
+ props: Props$1;
70
+ old: {
71
+ /** The old resource properties that have been successfully applied. */
72
+ props: Props$1;
73
+ /** The old output properties that have been successfully applied. */
74
+ attr: Attr;
31
75
  };
32
- type: ReturnType<Ctor>["type"];
33
- provider: ResourceTags<ReturnType<Ctor>>;
34
- } & {
35
- type: ReturnType<Ctor>["type"];
36
- provider: ResourceTags<ReturnType<Ctor>>;
76
+ }
77
+ interface UpdatedResourceState extends BaseResourceState {
78
+ status: "updated";
79
+ /** The new resource properties that are being (or have been) applied. */
80
+ props: Props$1;
81
+ /** The output attributes of the created resource */
82
+ attr: Attr;
83
+ }
84
+ interface DeletingResourceState extends BaseResourceState {
85
+ status: "deleting";
86
+ /** Attributes of the resource being deleted */
87
+ attr: Attr | undefined;
88
+ }
89
+ interface ReplacingResourceState extends BaseResourceState {
90
+ status: "replacing";
91
+ /** Desired properties of the new resource (the replacement) */
92
+ props: Props$1;
93
+ /** Reference to the state of the old resource (the one being replaced) */
94
+ old: CreatedResourceState | UpdatedResourceState | CreatingResourceState | UpdatingReourceState | DeletingResourceState;
95
+ /** Whether the resource should be deleted before or after replacements */
96
+ deleteFirst: boolean;
97
+ }
98
+ interface ReplacedResourceState extends BaseResourceState {
99
+ status: "replaced";
100
+ /** Desired properties of the new resource (the replacement) */
101
+ props: Props$1;
102
+ /** Output attributes of the new resource (the replacement) */
103
+ attr: Attr;
104
+ /** Reference to the state of the old resource (the one being replaced) */
105
+ old: CreatingResourceState | CreatedResourceState | UpdatingReourceState | UpdatedResourceState | DeletingResourceState;
106
+ /** Whether the resource should be deleted before or after replacements */
107
+ deleteFirst: boolean;
108
+ }
109
+ type ResourceState = CreatingResourceState | CreatedResourceState | UpdatingReourceState | UpdatedResourceState | DeletingResourceState | ReplacingResourceState | ReplacedResourceState;
110
+ //#endregion
111
+ //#region src/output.d.ts
112
+ interface Output<A = any, Src$1 extends Resource = any, Req$1 = any> {
113
+ readonly kind: string;
114
+ readonly src: Src$1;
115
+ readonly req: Req$1;
116
+ apply<B>(fn: (value: A) => B): Output.Of<B, Src$1, Req$1>;
117
+ effect<B, Req2$1>(fn: (value: A) => Effect$1.Effect<B, never, Req2$1>): Output.Of<B, Src$1, Req$1 | Req2$1>;
118
+ }
119
+ declare namespace Output {
120
+ type Of<A, Src$1 extends Resource = any, Req$1 = never> = [Extract<A, object>] extends [never] ? Output<A, Src$1, Req$1> : [Extract<A, any[]>] extends [never] ? Object$1<{ [attr in keyof A]: A[attr] }, Src$1, Req$1> : Array<Extract<A, any[]>, Src$1, Req$1>;
121
+ }
122
+ type Object$1<A, Src$1 extends Resource, Req$1 = any> = Output<A, Src$1, Req$1> & { [Prop in keyof Exclude<A, undefined>]-?: Output.Of<Exclude<A, undefined>[Prop] | Extract<A, undefined>, Src$1, Req$1> };
123
+ type Array<A extends any[], Src$1 extends Resource, Req$1 = any> = Output<A, Src$1, Req$1> & { [i in Extract<keyof A, number>]: Output.Of<A[i], Src$1, Req$1> };
124
+ //#endregion
125
+ //#region src/input.d.ts
126
+ type Function = (...args: any[]) => any;
127
+ type Constructor = new (...args: any[]) => any;
128
+ type PolicyLike = {
129
+ kind: "alchemy/Policy";
37
130
  };
131
+ type Input<T> = T | (T extends S.Schema<any> ? never : Output<T, any, any> | (T extends Primitive ? never : T extends any[] ? number extends T["length"] ? Input<T[number]>[] : Inputs<T> : T extends object ? { [K in keyof T]: Input<T[K]> } : never));
132
+ declare namespace Input {
133
+ type Resolve<T> = T extends Output<infer U> ? U : T extends Primitive | Constructor | Function | S.Schema<any> | PolicyLike ? T : T extends any[] ? ResolveArray<T> : T extends Record<string, any> ? { [k in keyof T]: Input.Resolve<T[k]> } : never;
134
+ type ResolveArray<T extends any[]> = number extends T["length"] ? Resolve<T[number]>[] : ResolveTuple<T>;
135
+ type ResolveTuple<T extends any[], Accum extends any[] = []> = T extends [infer H, ...infer Tail] ? ResolveTuple<Tail, [...Accum, Input.Resolve<H>]> : Accum;
136
+ type ResolveProps<Props$2 extends Record<string, any>> = { [k in keyof Props$2]: Input.Resolve<Props$2[k]> };
137
+ type ResolveOpaque<T> = true extends IsOut<T> ? ResolveOut<T> : Resolve<T>;
138
+ type IsOut<T> = T extends Output<infer U> ? true : never;
139
+ type ResolveOut<T> = T extends Output<infer U> ? U : never;
140
+ }
141
+ type Inputs<T extends any[], Out extends any[] = []> = T extends [infer H, ...infer T] ? Inputs<T, [...Out, Input<H>]> : Out;
38
142
  //#endregion
39
143
  //#region src/service.d.ts
40
- interface IService<ID$1 extends string = string, F extends Runtime = Runtime, Handler extends RuntimeHandler = RuntimeHandler, Props extends RuntimeProps<F, any> = RuntimeProps<F, any>, Attr = (F & {
41
- props: Props;
42
- })["attr"]> extends Resource<F["type"], ID$1, Props, Attr> {
144
+ interface IService<ID$1 extends string = string, F extends IRuntime = IRuntime, Handler extends RuntimeHandler = RuntimeHandler, Props$2 extends RuntimeProps<F, any> = RuntimeProps<F, any>, Attr$1 = (F & {
145
+ props: Props$2;
146
+ })["attr"], Base = unknown> extends IResource<F["type"], ID$1, Props$2, Attr$1, F> {
43
147
  kind: "Service";
44
148
  type: F["type"];
45
149
  id: ID$1;
@@ -54,193 +158,146 @@ interface IService<ID$1 extends string = string, F extends Runtime = Runtime, Ha
54
158
  * An Effect that produces a handler stripped of its Infrastructure-time-only Capabilities.
55
159
  */
56
160
  handler: Effect<(...inputs: Parameters<Handler>) => Effect<Effect.Success<ReturnType<Handler>>, Effect.Error<ReturnType<Handler>>, never>, never, Exclude<Effect.Context<ReturnType<Handler>>, Capability>>;
57
- props: Props;
161
+ props: Props$2;
58
162
  /** @internal phantom type of this resource's output attributes */
59
- attr: Attr;
163
+ attr: Attr$1;
60
164
  /** @internal phantom type of this resource's parent */
61
165
  parent: unknown;
166
+ new (): Service<ID$1, F, Handler, Props$2, Attr$1, Base>;
62
167
  }
63
- interface Service<ID$1 extends string = string, F extends Runtime = Runtime, Handler extends RuntimeHandler = RuntimeHandler, Props extends RuntimeProps<F, any> = RuntimeProps<F, any>, Attr = (F & {
64
- props: Props;
65
- })["attr"]> extends IService<ID$1, F, Handler, Props, Attr>, Resource<F["type"], ID$1, Props, Attr> {}
66
- //#endregion
67
- //#region src/event.d.ts
68
- type ApplyStatus = "pending" | "creating" | "created" | "updating" | "updated" | "deleting" | "deleted" | "success" | "fail";
69
- type ApplyEvent = AnnotateEvent | StatusChangeEvent;
70
- interface AnnotateEvent {
71
- kind: "annotate";
72
- id: string;
73
- message: string;
74
- }
75
- interface StatusChangeEvent {
76
- kind: "status-change";
77
- id: string;
78
- type: string;
79
- status: ApplyStatus;
80
- message?: string;
81
- bindingId?: string;
82
- }
83
- //#endregion
84
- //#region src/apply.d.ts
85
- interface PlanStatusSession {
86
- emit: (event: ApplyEvent) => Effect$1.Effect<void>;
87
- done: () => Effect$1.Effect<void>;
88
- }
89
- interface ScopedPlanStatusSession extends PlanStatusSession {
90
- note: (note: string) => Effect$1.Effect<void>;
91
- }
92
- declare const PlanStatusReporter_base: Context.TagClass<PlanStatusReporter, "PlanStatusReporter", {
93
- start(plan: Plan): Effect$1.Effect<PlanStatusSession, never>;
94
- }>;
95
- declare class PlanStatusReporter extends PlanStatusReporter_base {}
168
+ interface Service<ID$1 extends string = string, F extends IRuntime = IRuntime, Handler extends RuntimeHandler = RuntimeHandler, Props$2 extends RuntimeProps<F, any> = RuntimeProps<F, any>, Attr$1 = (F & {
169
+ props: Props$2;
170
+ })["attr"], Base = unknown> extends IService<ID$1, F, Handler, Props$2, Attr$1, Base> {}
96
171
  //#endregion
97
172
  //#region src/provider.d.ts
98
- type Provider<R extends Resource> = Context.TagClass<Provider<R>, R["type"], ProviderService<R>>;
99
- type Diff = {
100
- action: "update" | "noop";
101
- deleteFirst?: undefined;
102
- } | {
103
- action: "replace";
104
- deleteFirst?: boolean;
105
- };
173
+ interface Provider<R extends Resource | Service> extends Context.TagClass<Provider<R>, R["type"], ProviderService<any>> {}
106
174
  type BindingData<Res extends Resource> = [Res] extends [Runtime] ? Res["binding"][] : any[];
107
- interface ProviderService<Res extends Resource = Resource> {
175
+ type Props<Res extends Resource> = Input.ResolveOpaque<Res["props"]>;
176
+ interface ProviderService<Res extends Resource = Resource, ReadReq = never, DiffReq = never, PrecreateReq = never, CreateReq = never, UpdateReq = never, DeleteReq = never> {
177
+ /**
178
+ * The version of the provider.
179
+ *
180
+ * @default 0
181
+ */
182
+ version?: number;
108
183
  read?(input: {
109
184
  id: string;
110
- olds: Res["props"] | undefined;
185
+ instanceId: string;
186
+ olds: Props<Res> | undefined;
111
187
  output: Res["attr"] | undefined;
112
188
  session: ScopedPlanStatusSession;
113
189
  bindings: BindingData<Res>;
114
- }): Effect$1.Effect<Res["attr"] | undefined, any, never>;
190
+ }): Effect$1.Effect<Res["attr"] | undefined, any, ReadReq>;
191
+ /**
192
+ * Properties that are always stable across any update.
193
+ */
194
+ stables?: Extract<keyof Res["attr"], string>[];
115
195
  diff?(input: {
116
196
  id: string;
117
- olds: Res["props"];
197
+ olds: Props<Res>;
198
+ instanceId: string;
118
199
  news: Res["props"];
119
200
  output: Res["attr"];
120
- }): Effect$1.Effect<Diff | void, never, never>;
201
+ }): Effect$1.Effect<Diff | void, never, DiffReq>;
121
202
  precreate?(input: {
122
203
  id: string;
123
- news: Res["props"];
204
+ news: Props<Res>;
205
+ instanceId: string;
124
206
  session: ScopedPlanStatusSession;
125
- }): Effect$1.Effect<Res["attr"], any, never>;
207
+ }): Effect$1.Effect<Res["attr"], any, PrecreateReq>;
126
208
  create(input: {
127
209
  id: string;
128
- news: Res["props"];
210
+ instanceId: string;
211
+ news: Props<Res>;
129
212
  session: ScopedPlanStatusSession;
130
213
  bindings: BindingData<Res>;
131
- }): Effect$1.Effect<Res["attr"], any, never>;
214
+ }): Effect$1.Effect<Res["attr"], any, CreateReq>;
132
215
  update(input: {
133
216
  id: string;
134
- news: Res["props"];
135
- olds: Res["props"];
217
+ instanceId: string;
218
+ news: Props<Res>;
219
+ olds: Props<Res>;
136
220
  output: Res["attr"];
137
221
  session: ScopedPlanStatusSession;
138
222
  bindings: BindingData<Res>;
139
- }): Effect$1.Effect<Res["attr"], any, never>;
223
+ }): Effect$1.Effect<Res["attr"], any, UpdateReq>;
140
224
  delete(input: {
141
225
  id: string;
142
- olds: Res["props"];
226
+ instanceId: string;
227
+ olds: Props<Res>;
143
228
  output: Res["attr"];
144
229
  session: ScopedPlanStatusSession;
145
230
  bindings: BindingData<Res>;
146
- }): Effect$1.Effect<void, any, never>;
231
+ }): Effect$1.Effect<void, any, DeleteReq>;
147
232
  }
148
233
  //#endregion
149
- //#region src/binding.d.ts
150
- type AnyBinding<F extends Runtime = any> = Binding<F, any, any, any, string, boolean>;
151
- interface Binding<Run extends Runtime<any, any, any>, Cap extends Capability = Capability, Props = any, Attr extends Run["binding"] = any, Tag extends string = Cap["type"], IsCustom extends boolean = (Cap["type"] extends Tag ? false : true)> {
152
- runtime: Run;
153
- capability: Cap;
154
- tag: Tag;
155
- props: Props;
156
- attr: Attr;
157
- isCustom: IsCustom;
158
- }
159
- /** Tag for a Service that can bind a Capability to a Runtime */
160
- interface Bind<F extends Runtime, Cap extends Capability, Tag extends string> extends Context.Tag<`${F["type"]}(${Cap["type"]}, ${Tag})`, BindingService<F, Extract<Extract<Cap["resource"], Resource>["parent"], Resource>, F["props"]>> {
234
+ //#region src/resource.d.ts
235
+ type AnyResource = Resource<string, string, any, any>;
236
+ interface IResource<Type extends string = string, ID$1 extends string = string, Props$2 = unknown, Attrs = unknown, Base = unknown> {
237
+ id: ID$1;
238
+ type: Type;
239
+ Props: unknown;
240
+ props: Props$2;
241
+ base: Base;
161
242
  /** @internal phantom */
162
- name: Tag;
243
+ attr: Attrs;
163
244
  }
164
- declare const Binding: {
165
- <F extends (resource: any, props?: any) => AnyBinding & {
166
- isCustom: true;
167
- }>(runtime: ReturnType<F>["runtime"], type: ReturnType<F>["capability"]["type"], tag: ReturnType<F>["tag"]): F & BindingDeclaration<ReturnType<F>["runtime"], F>;
168
- <F extends (resource: any, props?: any) => AnyBinding & {
169
- isCustom: false;
170
- }>(runtime: ReturnType<F>["runtime"], type: ReturnType<F>["capability"]["type"]): F & BindingDeclaration<ReturnType<F>["runtime"], F>;
171
- };
172
- interface BindingDeclaration<Run extends Runtime, F extends (target: any, props?: any) => AnyBinding<Run>, Tag extends string = ReturnType<F>["tag"], Cap extends Capability = ReturnType<F>["capability"]> {
173
- provider: {
174
- effect<Err, Req>(eff: Effect<BindingService<Run, Parameters<F>[0], Parameters<F>[1], ReturnType<F>["attr"]>, Err, Req>): Layer.Layer<Bind<Run, Cap, Tag>, Err, Req>;
175
- succeed(service: BindingService<Run, Parameters<F>[0], Parameters<F>[1], ReturnType<F>["attr"]>): Layer.Layer<Bind<Run, Cap, Tag>>;
176
- };
245
+ interface Resource<Type extends string = string, ID$1 extends string = string, Props$2 = unknown, Attrs = unknown, Base = unknown> extends IResource<Type, ID$1, Props$2, Attrs, Base> {
246
+ new (): Resource<Type, ID$1, Props$2, Attrs, Base>;
177
247
  }
178
- interface BindingDiffProps<Source extends Resource = Resource, Target extends Resource = Resource, Props = any, Attr = any> {
179
- source: {
180
- id: string;
181
- props: Source["props"];
182
- oldProps?: Source["props"];
183
- oldAttr?: Source["attr"];
184
- };
185
- props: Props;
186
- attr: Attr | undefined;
187
- target: {
188
- id: string;
189
- props: Target["props"];
190
- oldProps?: Target["props"];
191
- oldAttr?: Target["attr"];
192
- };
248
+ interface ResourceTags<R extends Resource<string, string, any, any>> {
249
+ of<S$1 extends ProviderService<R>>(service: S$1): S$1;
250
+ tag: Provider<R>;
251
+ effect<Err, Req$1, ReadReq = never, DiffReq = never, PrecreateReq = never, CreateReq = never, UpdateReq = never, DeleteReq = never>(eff: Effect<ProviderService<R, ReadReq, DiffReq, PrecreateReq, CreateReq, UpdateReq, DeleteReq>, Err, Req$1>): Layer.Layer<Provider<R>, Err, Req$1 | ReadReq | DiffReq | PrecreateReq | CreateReq | UpdateReq | DeleteReq>;
252
+ succeed<ReadReq = never, DiffReq = never, PrecreateReq = never, CreateReq = never, UpdateReq = never, DeleteReq = never>(service: ProviderService<R, ReadReq, DiffReq, PrecreateReq, CreateReq, UpdateReq, DeleteReq>): Layer.Layer<Provider<R>, never, ReadReq | DiffReq | PrecreateReq | CreateReq | UpdateReq | DeleteReq>;
193
253
  }
194
- interface BindingAttachProps<Source extends Resource, Target extends Resource, Props, Attr> {
195
- source: {
196
- id: string;
197
- attr: Source["attr"];
198
- props: Source["props"];
199
- };
200
- props: Props;
201
- attr: Attr | undefined;
202
- target: {
203
- id: string;
204
- props: Target["props"];
205
- attr: Target["attr"];
254
+ declare const Resource: <Ctor extends (id: string, props: any) => Resource>(type: ReturnType<Ctor>["type"]) => Ctor & {
255
+ new (): ReturnType<Ctor> & {
256
+ parent: ReturnType<Ctor>;
206
257
  };
258
+ type: ReturnType<Ctor>["type"];
259
+ parent: ReturnType<Ctor>;
260
+ provider: ResourceTags<ReturnType<Ctor>>;
261
+ } & {
262
+ type: ReturnType<Ctor>["type"];
263
+ provider: ResourceTags<ReturnType<Ctor>>;
264
+ };
265
+ //#endregion
266
+ //#region src/runtime.d.ts
267
+ type RuntimeHandler<Inputs$1 extends any[] = any[], Output$1 = any, Err = any, Req$1 = any> = (...inputs: Inputs$1) => Effect$1.Effect<Output$1, Err, Req$1>;
268
+ declare namespace RuntimeHandler {
269
+ type Caps<H$1 extends RuntimeHandler | unknown> = Extract<Effect$1.Effect.Context<ReturnType<Extract<H$1, RuntimeHandler>>>, Capability>;
207
270
  }
208
- interface BindingReattachProps<Source extends Resource, Target extends Resource, Props, Attr> {
209
- source: {
210
- id: string;
211
- attr: Source["attr"];
212
- props: Source["props"];
213
- };
214
- props: Props;
215
- attr: Attr;
216
- target: {
217
- id: string;
218
- props: Target["props"];
219
- attr: Target["attr"];
271
+ declare namespace Runtime {
272
+ type Binding<F, Cap> = F extends {
273
+ readonly Binding: unknown;
274
+ } ? (F & {
275
+ readonly cap: Cap;
276
+ })["Binding"] : {
277
+ readonly F: F;
278
+ readonly cap: Types.Contravariant<Cap>;
220
279
  };
221
280
  }
222
- interface BindingDetachProps<Source extends Resource, Target extends Resource, Props, Attr> {
223
- source: {
224
- id: string;
225
- attr: Source["attr"];
226
- props: Source["props"];
227
- };
228
- props: Props;
229
- attr: Attr | undefined;
230
- target: {
231
- id: string;
232
- props: Target["props"];
233
- attr: Target["attr"];
234
- };
281
+ interface RuntimeProps<Run extends IRuntime, Req$1> {
282
+ bindings: Policy<Run, Extract<Req$1, Capability>, unknown>;
235
283
  }
236
- type BindingService<Target extends Runtime = any, Source extends Resource = Resource, Props = any, Attr extends Target["binding"] = any, DiffReq = never, PreReattachReq = never, AttachReq = never, ReattachReq = never, DetachReq = never, PostAttachReq = never> = {
237
- diff?: (props: BindingDiffProps<Source, Target, Props>) => Effect<Diff, never, DiffReq>;
238
- preattach?: (props: BindingAttachProps<Source, Target, Props, Attr>) => Effect<Partial<Target["attr"]>, never, PreReattachReq>;
239
- attach: (props: BindingAttachProps<Source, Target, Props, Attr>) => Effect<Attr, never, AttachReq> | Attr;
240
- postattach?: (props: BindingAttachProps<Source, Target, Props, Attr>) => Effect<Omit<Attr, keyof Target["binding"]>, never, PostAttachReq>;
241
- reattach?: (props: BindingReattachProps<Source, Target, Props, Attr>) => Effect<Attr, never, ReattachReq> | Attr;
242
- detach?: (props: BindingDetachProps<Source, Target, Props, Attr>) => Effect<void, never, DetachReq> | void;
243
- };
284
+ interface IRuntime<Type extends string = string, Handler = unknown, Props$2 = unknown> extends IResource<Type, string, Props$2> {
285
+ type: Type;
286
+ props: Props$2;
287
+ handler: Handler;
288
+ binding: unknown;
289
+ /** @internal phantom */
290
+ capability: unknown;
291
+ }
292
+ interface Runtime<Type extends string = string, Handler = unknown, Props$2 = unknown> extends IRuntime<Type, Handler, Props$2>, Resource<Type, string, Props$2> {
293
+ provider: ResourceTags<this>;
294
+ <const ID$1 extends string, Inputs$1 extends any[], Output$1, Err, Req$1, Handler extends RuntimeHandler<Inputs$1, Output$1, Err, Req$1>>(id: ID$1, {
295
+ handle
296
+ }: {
297
+ handle: Handler;
298
+ }): <const Props$2 extends this["props"]>(props: Props$2) => Service<ID$1, this, Handler, Props$2>;
299
+ }
300
+ declare const Runtime: <const Type extends string>(type: Type) => <Self extends Runtime>() => Self;
244
301
  //#endregion
245
302
  //#region src/policy.d.ts
246
303
  /**
@@ -252,7 +309,8 @@ type BindingService<Target extends Runtime = any, Source extends Resource = Reso
252
309
  *
253
310
  * A Policy is invariant over the set of Capabilities to ensure least-privilege.
254
311
  */
255
- interface Policy<F extends Runtime, in out Capabilities, Tags = unknown> {
312
+ interface Policy<F extends IRuntime, in out Capabilities, Tags = unknown> {
313
+ readonly kind: "alchemy/Policy";
256
314
  readonly runtime: F;
257
315
  readonly tags: Tags[];
258
316
  readonly capabilities: Capabilities[];
@@ -300,9 +358,9 @@ declare namespace Capability {
300
358
  resource: c["resource"];
301
359
  constraint: Constraint.Simplify<c["constraint"]>;
302
360
  })["Reduce"] : never;
303
- type KeysWithNever<T> = { [K in keyof T]: T[K] extends never | Policy.AnyOf<never> ? K : never }[keyof T];
361
+ type KeysWithNever<T> = { [K in keyof T]: T[K$1] extends never | Policy.AnyOf<never> ? K$1 : never }[keyof T];
304
362
  type DropIrrelevant<T> = T extends any ? { [k in keyof Omit<T, KeysWithNever<T>>]: Omit<T, KeysWithNever<T>>[k] } : never;
305
- type Get<T, K extends string | number | symbol> = T extends { [k in K]: infer V } ? V : never;
363
+ type Get<T, K$1 extends string | number | symbol> = T extends { [k in K$1]: infer V } ? V : never;
306
364
  type Keys<T> = T extends any ? keyof T : never;
307
365
  type BoxPolicy<T> = [T] extends [{
308
366
  anyOf: (infer U)[];
@@ -312,44 +370,102 @@ declare namespace Capability {
312
370
  }
313
371
  }
314
372
  //#endregion
315
- //#region src/runtime.d.ts
316
- type RuntimeHandler<Inputs extends any[] = any[], Output = any, Err = any, Req = any> = (...inputs: Inputs) => Effect$1.Effect<Output, Err, Req>;
317
- declare namespace RuntimeHandler {
318
- type Caps<H extends RuntimeHandler | unknown> = Extract<Effect$1.Effect.Context<ReturnType<Extract<H, RuntimeHandler>>>, Capability>;
373
+ //#region src/binding.d.ts
374
+ type AnyBinding<F extends IRuntime = any> = Binding<F, any, any, any, string, boolean>;
375
+ interface Binding<Run extends IRuntime<any, any, any>, Cap extends Capability = Capability, Props$2 = any, Attr$1 extends Run["binding"] = any, Tag extends string = Cap["type"], IsCustom extends boolean = (Cap["type"] extends Tag ? false : true)> {
376
+ runtime: Run;
377
+ capability: Cap;
378
+ tag: Tag;
379
+ props: Props$2;
380
+ attr: Attr$1;
381
+ isCustom: IsCustom;
319
382
  }
320
- declare namespace Runtime {
321
- type Binding<F, Cap> = F extends {
322
- readonly Binding: unknown;
323
- } ? (F & {
324
- readonly cap: Cap;
325
- })["Binding"] : {
326
- readonly F: F;
327
- readonly cap: Types.Contravariant<Cap>;
383
+ /** Tag for a Service that can bind a Capability to a Runtime */
384
+ interface Bind<F extends IRuntime, Cap extends Capability, Tag extends string> extends Context.Tag<`${F["type"]}(${Cap["type"]}, ${Tag})`, BindingService<F, Extract<Extract<Cap["resource"], Resource>["base"], Resource>, F["props"]>> {
385
+ /** @internal phantom */
386
+ name: Tag;
387
+ }
388
+ declare const Binding: {
389
+ <F extends (resource: any, props?: any) => AnyBinding & {
390
+ isCustom: true;
391
+ }>(runtime: ReturnType<F>["runtime"], type: ReturnType<F>["capability"]["type"], tag: ReturnType<F>["tag"]): F & BindingDeclaration<ReturnType<F>["runtime"], F>;
392
+ <F extends (resource: any, props?: any) => AnyBinding & {
393
+ isCustom: false;
394
+ }>(runtime: ReturnType<F>["runtime"], type: ReturnType<F>["capability"]["type"]): F & BindingDeclaration<ReturnType<F>["runtime"], F>;
395
+ };
396
+ interface BindingDeclaration<Run extends IRuntime, F extends (target: any, props?: any) => AnyBinding<Run>, Tag extends string = ReturnType<F>["tag"], Cap extends Capability = ReturnType<F>["capability"]> {
397
+ provider: {
398
+ effect<Err, Req$1>(eff: Effect<BindingService<Run, Parameters<F>[0], Parameters<F>[1], ReturnType<F>["attr"]>, Err, Req$1>): Layer.Layer<Bind<Run, Cap, Tag>, Err, Req$1>;
399
+ succeed(service: BindingService<Run, Parameters<F>[0], Parameters<F>[1], ReturnType<F>["attr"]>): Layer.Layer<Bind<Run, Cap, Tag>>;
328
400
  };
329
401
  }
330
- interface RuntimeProps<Run extends Runtime, Req> {
331
- bindings: Policy<Run, Extract<Req, Capability>, unknown>;
402
+ interface BindingDiffProps<Source extends IResource = IResource, Target extends IResource = IResource, Props$2 = any, Attr$1 = any> {
403
+ source: {
404
+ id: string;
405
+ props: Source["props"];
406
+ oldProps?: Source["props"];
407
+ oldAttr?: Source["attr"];
408
+ };
409
+ props: Props$2;
410
+ attr: Attr$1 | undefined;
411
+ target: {
412
+ id: string;
413
+ props: Target["props"];
414
+ oldProps?: Target["props"];
415
+ oldAttr?: Target["attr"];
416
+ };
332
417
  }
333
- interface Runtime<Type extends string = string, Handler = unknown, Props = unknown> extends Resource<Type, string, Props, unknown> {
334
- type: Type;
335
- props: Props;
336
- handler: Handler;
337
- binding: unknown;
338
- /** @internal phantom */
339
- capability: unknown;
340
- <const ID$1 extends string, Inputs extends any[], Output, Err, Req, Handler extends RuntimeHandler<Inputs, Output, Err, Req>>(id: ID$1, {
341
- handle
342
- }: {
343
- handle: Handler;
344
- }): <const Props extends this["props"]>(props: Props) => Service<ID$1, this, Handler, Props>;
418
+ interface BindingAttachProps<Source extends IResource, Target extends IResource, Props$2, Attr$1> {
419
+ source: {
420
+ id: string;
421
+ attr: Source["attr"];
422
+ props: Source["props"];
423
+ };
424
+ props: Props$2;
425
+ attr: Attr$1 | undefined;
426
+ target: {
427
+ id: string;
428
+ props: Target["props"];
429
+ attr: Target["attr"];
430
+ };
431
+ }
432
+ interface BindingReattachProps<Source extends IResource, Target extends IResource, Props$2, Attr$1> {
433
+ source: {
434
+ id: string;
435
+ attr: Source["attr"];
436
+ props: Source["props"];
437
+ };
438
+ props: Props$2;
439
+ attr: Attr$1;
440
+ target: {
441
+ id: string;
442
+ props: Target["props"];
443
+ attr: Target["attr"];
444
+ };
345
445
  }
346
- declare const Runtime: <const Type extends string>(type: Type) => <Self extends Runtime>() => Self & {
347
- provider: ResourceTags<Self>;
446
+ interface BindingDetachProps<Source extends IResource, Target extends IResource, Props$2, Attr$1> {
447
+ source: {
448
+ id: string;
449
+ attr: Source["attr"];
450
+ props: Source["props"];
451
+ };
452
+ props: Props$2;
453
+ attr: Attr$1 | undefined;
454
+ target: {
455
+ id: string;
456
+ props: Target["props"];
457
+ attr: Target["attr"];
458
+ };
459
+ }
460
+ type BindingService<Target extends IRuntime = any, Source extends IResource = IResource, Props$2 = any, Attr$1 extends Target["binding"] = any, DiffReq = never, PreReattachReq = never, AttachReq = never, ReattachReq = never, DetachReq = never, PostAttachReq = never> = {
461
+ diff?: (props: BindingDiffProps<Source, Target, Props$2>) => Effect<Diff, never, DiffReq>;
462
+ preattach?: (props: BindingAttachProps<Source, Target, Props$2, Attr$1>) => Effect<Partial<Target["attr"]>, never, PreReattachReq>;
463
+ attach: (props: BindingAttachProps<Source, Target, Props$2, Attr$1>) => Effect<Attr$1, never, AttachReq> | Attr$1;
464
+ postattach?: (props: BindingAttachProps<Source, Target, Props$2, Attr$1>) => Effect<Omit<Attr$1, keyof Target["binding"]>, never, PostAttachReq>;
465
+ reattach?: (props: BindingReattachProps<Source, Target, Props$2, Attr$1>) => Effect<Attr$1, never, ReattachReq> | Attr$1;
466
+ detach?: (props: BindingDetachProps<Source, Target, Props$2, Attr$1>) => Effect<void, never, DetachReq> | void;
348
467
  };
349
468
  //#endregion
350
- //#region src/phase.d.ts
351
- type Phase = "update" | "destroy";
352
- //#endregion
353
469
  //#region src/plan.d.ts
354
470
  /**
355
471
  * A node in the plan that represents a binding operation acting on a resource.
@@ -377,73 +493,77 @@ type NoopBind<B extends AnyBinding = AnyBinding> = {
377
493
  binding: B;
378
494
  attr: B["attr"];
379
495
  };
380
- /**
381
- * A node in the plan that represents a resource CRUD operation.
382
- */
383
- type CRUD<R extends Resource = Resource> = Create<R> | Update<R> | Delete<R> | Replace<R> | NoopUpdate<R>;
384
- type Create<R extends Resource> = {
385
- action: "create";
496
+ type Apply<R extends Resource = AnyResource> = Create<R> | Update<R> | Replace<R> | NoopUpdate<R>;
497
+ interface BaseNode<R extends Resource = AnyResource> {
386
498
  resource: R;
387
- news: any;
388
- provider: ProviderService;
389
- attributes: R["attr"];
499
+ provider: ProviderService<R>;
390
500
  bindings: BindNode[];
391
- };
392
- type Update<R extends Resource> = {
501
+ downstream: string[];
502
+ }
503
+ interface Create<R extends Resource = AnyResource> extends BaseNode<R> {
504
+ action: "create";
505
+ props: any;
506
+ state: CreatingResourceState | undefined;
507
+ }
508
+ interface Update<R extends Resource = AnyResource> extends BaseNode<R> {
393
509
  action: "update";
394
- resource: R;
395
- olds: any;
396
- news: any;
397
- output: any;
398
- provider: ProviderService;
399
- attributes: R["attr"];
400
- bindings: BindNode[];
401
- };
402
- type Delete<R extends Resource> = {
510
+ props: any;
511
+ state: CreatedResourceState | UpdatedResourceState | UpdatingReourceState | ReplacedResourceState;
512
+ }
513
+ interface Delete<R extends Resource = AnyResource> extends BaseNode<R> {
403
514
  action: "delete";
404
- resource: R;
405
- olds: any;
406
- output: any;
407
- provider: ProviderService;
408
- bindings: BindNode[];
409
- attributes: R["attr"];
410
- downstream: string[];
411
- };
412
- type NoopUpdate<R extends Resource> = {
515
+ state: ResourceState;
516
+ }
517
+ interface NoopUpdate<R extends Resource = AnyResource> extends BaseNode<R> {
413
518
  action: "noop";
414
- resource: R;
415
- attributes: R["attr"];
416
- bindings: BindNode[];
417
- };
418
- type Replace<R extends Resource> = {
519
+ state: CreatedResourceState | UpdatedResourceState;
520
+ }
521
+ interface Replace<R extends Resource = AnyResource> extends BaseNode<R> {
419
522
  action: "replace";
420
- resource: R;
421
- olds: any;
422
- news: any;
423
- output: any;
424
- provider: ProviderService;
425
- bindings: BindNode[];
426
- attributes: R["attr"];
427
- deleteFirst?: boolean;
428
- };
429
- type Plan = {
430
- phase: Phase;
431
- resources: { [id in string]: CRUD };
523
+ props: any;
524
+ deleteFirst: boolean;
525
+ state: CreatingResourceState | CreatedResourceState | UpdatingReourceState | UpdatedResourceState | ReplacingResourceState | ReplacedResourceState;
526
+ }
527
+ type IPlan = {
528
+ resources: { [id in string]: Apply<any> };
432
529
  deletions: { [id in string]?: Delete<Resource> };
433
530
  };
434
531
  //#endregion
435
- //#region src/approve.d.ts
436
- declare const PlanRejected_base: new <A extends Record<string, any> = {}>(args: effect_Types0.Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }) => effect_Cause0.YieldableError & {
437
- readonly _tag: "PlanRejected";
438
- } & Readonly<A>;
439
- declare class PlanRejected extends PlanRejected_base<{}> {}
440
- declare const PlanReviewer_base: Context.TagClass<PlanReviewer, "PlanReviewer", {
441
- approve: <P$1 extends Plan>(plan: P$1) => Effect$1.Effect<void, PlanRejected>;
442
- }>;
443
- declare class PlanReviewer extends PlanReviewer_base {}
532
+ //#region src/event.d.ts
533
+ type ApplyStatus = "attaching" | "post-attach" | "pending" | "pre-creating" | "creating" | "creating replacement" | "created" | "updating" | "updated" | "deleting" | "deleted" | "replacing" | "replaced" | "success" | "fail";
534
+ type ApplyEvent = AnnotateEvent | StatusChangeEvent;
535
+ interface AnnotateEvent {
536
+ kind: "annotate";
537
+ id: string;
538
+ message: string;
539
+ }
540
+ interface StatusChangeEvent {
541
+ kind: "status-change";
542
+ id: string;
543
+ type: string;
544
+ status: ApplyStatus;
545
+ message?: string;
546
+ bindingId?: string;
547
+ }
548
+ //#endregion
549
+ //#region src/cli/service.d.ts
550
+ interface PlanStatusSession {
551
+ emit: (event: ApplyEvent) => Effect$1.Effect<void>;
552
+ done: () => Effect$1.Effect<void>;
553
+ }
554
+ interface ScopedPlanStatusSession extends PlanStatusSession {
555
+ note: (note: string) => Effect$1.Effect<void>;
556
+ }
557
+ interface CLIService {
558
+ approvePlan: <P$1 extends IPlan>(plan: P$1) => Effect$1.Effect<boolean>;
559
+ displayPlan: <P$1 extends IPlan>(plan: P$1) => Effect$1.Effect<void>;
560
+ startApplySession: <P$1 extends IPlan>(plan: P$1) => Effect$1.Effect<PlanStatusSession>;
561
+ }
562
+ declare const CLI_base: Context.TagClass<CLI, "CLIService", CLIService>;
563
+ declare class CLI extends CLI_base {}
444
564
  //#endregion
445
- //#region src/cli/index.d.ts
446
- declare const layer: Layer.Layer<PlanReviewer | PlanStatusReporter, never, never>;
565
+ //#region src/cli/ink-service.d.ts
566
+ declare const inkCLI: () => Layer.Layer<CLI, never, never>;
447
567
  //#endregion
448
- export { layer };
568
+ export { CLI, CLIService, PlanStatusSession, ScopedPlanStatusSession, inkCLI };
449
569
  //# sourceMappingURL=index.d.ts.map