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
package/README.md CHANGED
@@ -3,13 +3,15 @@
3
3
  # `alchemy-effect`
4
4
 
5
5
  `alchemy-effect` is an **Infrastructure-as-Effects (IaE)** framework that unifies business logic and infrastructure config into a single, type-safe program with the following benefits:
6
+
6
7
  1. Type-Checked IAM Policies
7
8
  2. Optimally Tree-Shaken Bundles
8
9
  3. Testable Business Logic
9
10
  4. Re-usable Components
10
- 5. Reviewable Deployment Plans
11
+ 5. Reviewable Deployment Plans
11
12
 
12
13
  ## Install
14
+
13
15
  ```bash
14
16
  bun add alchemy-effect
15
17
  ```
@@ -27,11 +29,13 @@ You will receive a type error if you mess up your Bindings:
27
29
  > This error means you are missing the `SendMessage<Messages>` binding (you provided `never` instead of `SendMessage<Messages>`).
28
30
 
29
31
  ## Plan & Deploy
32
+
30
33
  An `alchemy-effect` program produces a Plan that can be reviewed prior to deployment:
31
34
 
32
35
  <img src="./images/alchemy-effect-plan.gif" alt="alchemy-effect plan video" width="600"/>
33
36
 
34
- ## Type-Level Plan
37
+ ## Type-Level Plan
38
+
35
39
  All knowable information about the Plan is available at compile-time:
36
40
 
37
41
  <img src="./images/alchemy-effect-plan-type.png" alt="alchemy-effect plan type" width="600"/>
@@ -50,17 +54,19 @@ export default Api.handler.pipe(
50
54
  );
51
55
  ```
52
56
 
53
- ## Pluggable Layers
57
+ ## Pluggable Layers
58
+
54
59
  Everything (including the CLI) is provided as Effect layers:
55
60
 
56
61
  <img src="./images/alchemy-effect-layers.png" alt="alchemy-effect layers" width="600"/>
57
62
 
58
63
  ## Literally Typed Outputs
64
+
59
65
  The output of deploying a stack is totally known at compile-time, e.g. the `.fifo` suffix of a SQS FIFO Queue:
60
66
 
61
67
  <img src="./images/alchemy-effect-output.png" alt="alchemy-effect output" width="600"/>
62
68
 
63
- # Concepts 🔱
69
+ # Concepts 🔱
64
70
 
65
71
  <img src="./images/alchemy-effect-triple.png" alt="alchemy-effect logo" width="600"/>
66
72
 
@@ -78,7 +84,7 @@ Resources are declared along-side your business logic as classes, e.g. a FIFO SQ
78
84
  class Messages extends SQS.Queue("Messages", {
79
85
  fifo: true,
80
86
  schema: S.String,
81
- }) {}
87
+ }) {}
82
88
  ```
83
89
 
84
90
  ## Functions
@@ -122,7 +128,7 @@ class Api extends Lambda.serve("Api", {
122
128
 
123
129
  # Components
124
130
 
125
- Infrastructure and business logic can be encapsulated as a Component using a simple function.
131
+ Infrastructure and business logic can be encapsulated as a Component using a simple function.
126
132
 
127
133
  ```ts
128
134
  const Monitor = <const ID extends string, ReqAlarm, ReqResolved>(
@@ -176,4 +182,4 @@ const Monitor = <const ID extends string, ReqAlarm, ReqResolved>(
176
182
  # Building your own Resources, Capabilities, and Bindings
177
183
 
178
184
  > [!CAUTION]
179
- > WIP - docs coming soon!
185
+ > WIP - docs coming soon!