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.
- package/README.md +13 -7
- package/bin/alchemy-effect.js +307 -266
- package/bin/alchemy-effect.js.map +1 -1
- package/lib/apply.d.ts.map +1 -1
- package/lib/apply.js +253 -246
- package/lib/apply.js.map +1 -1
- package/lib/aws/client.d.ts.map +1 -1
- package/lib/aws/client.js +15 -2
- package/lib/aws/client.js.map +1 -1
- package/lib/aws/dynamodb/secondary-index.d.ts.map +1 -1
- package/lib/aws/dynamodb/table.d.ts.map +1 -1
- package/lib/aws/dynamodb/table.js.map +1 -1
- package/lib/aws/dynamodb/table.provider.d.ts.map +1 -1
- package/lib/aws/dynamodb/table.provider.js +10 -2
- package/lib/aws/dynamodb/table.provider.js.map +1 -1
- package/lib/aws/ec2/egress-only-igw.d.ts +55 -0
- package/lib/aws/ec2/egress-only-igw.d.ts.map +1 -0
- package/lib/aws/ec2/egress-only-igw.js +4 -0
- package/lib/aws/ec2/egress-only-igw.js.map +1 -0
- package/lib/aws/ec2/egress-only-igw.provider.d.ts +6 -0
- package/lib/aws/ec2/egress-only-igw.provider.d.ts.map +1 -0
- package/lib/aws/ec2/egress-only-igw.provider.js +114 -0
- package/lib/aws/ec2/egress-only-igw.provider.js.map +1 -0
- package/lib/aws/ec2/eip.d.ts +85 -0
- package/lib/aws/ec2/eip.d.ts.map +1 -0
- package/lib/aws/ec2/eip.js +4 -0
- package/lib/aws/ec2/eip.js.map +1 -0
- package/lib/aws/ec2/eip.provider.d.ts +6 -0
- package/lib/aws/ec2/eip.provider.d.ts.map +1 -0
- package/lib/aws/ec2/eip.provider.js +135 -0
- package/lib/aws/ec2/eip.provider.js.map +1 -0
- package/lib/aws/ec2/index.d.ts +18 -0
- package/lib/aws/ec2/index.d.ts.map +1 -1
- package/lib/aws/ec2/index.js +18 -0
- package/lib/aws/ec2/index.js.map +1 -1
- package/lib/aws/ec2/internet-gateway.d.ts.map +1 -1
- package/lib/aws/ec2/internet-gateway.provider.d.ts.map +1 -1
- package/lib/aws/ec2/internet-gateway.provider.js +9 -5
- package/lib/aws/ec2/internet-gateway.provider.js.map +1 -1
- package/lib/aws/ec2/nat-gateway.d.ts +127 -0
- package/lib/aws/ec2/nat-gateway.d.ts.map +1 -0
- package/lib/aws/ec2/nat-gateway.js +4 -0
- package/lib/aws/ec2/nat-gateway.js.map +1 -0
- package/lib/aws/ec2/nat-gateway.provider.d.ts +6 -0
- package/lib/aws/ec2/nat-gateway.provider.d.ts.map +1 -0
- package/lib/aws/ec2/nat-gateway.provider.js +222 -0
- package/lib/aws/ec2/nat-gateway.provider.js.map +1 -0
- package/lib/aws/ec2/network-acl-association.d.ts +44 -0
- package/lib/aws/ec2/network-acl-association.d.ts.map +1 -0
- package/lib/aws/ec2/network-acl-association.js +4 -0
- package/lib/aws/ec2/network-acl-association.js.map +1 -0
- package/lib/aws/ec2/network-acl-association.provider.d.ts +4 -0
- package/lib/aws/ec2/network-acl-association.provider.d.ts.map +1 -0
- package/lib/aws/ec2/network-acl-association.provider.js +115 -0
- package/lib/aws/ec2/network-acl-association.provider.js.map +1 -0
- package/lib/aws/ec2/network-acl-entry.d.ts +118 -0
- package/lib/aws/ec2/network-acl-entry.d.ts.map +1 -0
- package/lib/aws/ec2/network-acl-entry.js +3 -0
- package/lib/aws/ec2/network-acl-entry.js.map +1 -0
- package/lib/aws/ec2/network-acl-entry.provider.d.ts +4 -0
- package/lib/aws/ec2/network-acl-entry.provider.d.ts.map +1 -0
- package/lib/aws/ec2/network-acl-entry.provider.js +129 -0
- package/lib/aws/ec2/network-acl-entry.provider.js.map +1 -0
- package/lib/aws/ec2/network-acl.d.ts +82 -0
- package/lib/aws/ec2/network-acl.d.ts.map +1 -0
- package/lib/aws/ec2/network-acl.js +4 -0
- package/lib/aws/ec2/network-acl.js.map +1 -0
- package/lib/aws/ec2/network-acl.provider.d.ts +6 -0
- package/lib/aws/ec2/network-acl.provider.d.ts.map +1 -0
- package/lib/aws/ec2/network-acl.provider.js +136 -0
- package/lib/aws/ec2/network-acl.provider.js.map +1 -0
- package/lib/aws/ec2/route-table-association.d.ts.map +1 -1
- package/lib/aws/ec2/route-table-association.provider.d.ts.map +1 -1
- package/lib/aws/ec2/route-table-association.provider.js.map +1 -1
- package/lib/aws/ec2/route-table.d.ts.map +1 -1
- package/lib/aws/ec2/route-table.provider.d.ts.map +1 -1
- package/lib/aws/ec2/route-table.provider.js.map +1 -1
- package/lib/aws/ec2/route.d.ts.map +1 -1
- package/lib/aws/ec2/route.provider.d.ts.map +1 -1
- package/lib/aws/ec2/route.provider.js.map +1 -1
- package/lib/aws/ec2/security-group-rule.d.ts +118 -0
- package/lib/aws/ec2/security-group-rule.d.ts.map +1 -0
- package/lib/aws/ec2/security-group-rule.js +4 -0
- package/lib/aws/ec2/security-group-rule.js.map +1 -0
- package/lib/aws/ec2/security-group-rule.provider.d.ts +4 -0
- package/lib/aws/ec2/security-group-rule.provider.d.ts.map +1 -0
- package/lib/aws/ec2/security-group-rule.provider.js +193 -0
- package/lib/aws/ec2/security-group-rule.provider.js.map +1 -0
- package/lib/aws/ec2/security-group.d.ts +147 -0
- package/lib/aws/ec2/security-group.d.ts.map +1 -0
- package/lib/aws/ec2/security-group.js +4 -0
- package/lib/aws/ec2/security-group.js.map +1 -0
- package/lib/aws/ec2/security-group.provider.d.ts +6 -0
- package/lib/aws/ec2/security-group.provider.d.ts.map +1 -0
- package/lib/aws/ec2/security-group.provider.js +291 -0
- package/lib/aws/ec2/security-group.provider.js.map +1 -0
- package/lib/aws/ec2/subnet.d.ts.map +1 -1
- package/lib/aws/ec2/subnet.provider.d.ts.map +1 -1
- package/lib/aws/ec2/subnet.provider.js +33 -30
- package/lib/aws/ec2/subnet.provider.js.map +1 -1
- package/lib/aws/ec2/vpc-endpoint.d.ts +176 -0
- package/lib/aws/ec2/vpc-endpoint.d.ts.map +1 -0
- package/lib/aws/ec2/vpc-endpoint.js +4 -0
- package/lib/aws/ec2/vpc-endpoint.js.map +1 -0
- package/lib/aws/ec2/vpc-endpoint.provider.d.ts +6 -0
- package/lib/aws/ec2/vpc-endpoint.provider.d.ts.map +1 -0
- package/lib/aws/ec2/vpc-endpoint.provider.js +315 -0
- package/lib/aws/ec2/vpc-endpoint.provider.js.map +1 -0
- package/lib/aws/ec2/vpc.d.ts.map +1 -1
- package/lib/aws/ec2/vpc.provider.d.ts.map +1 -1
- package/lib/aws/ec2/vpc.provider.js +38 -32
- package/lib/aws/ec2/vpc.provider.js.map +1 -1
- package/lib/aws/index.d.ts +2 -2
- package/lib/aws/index.d.ts.map +1 -1
- package/lib/aws/index.js +1 -1
- package/lib/aws/index.js.map +1 -1
- package/lib/aws/lambda/function.d.ts.map +1 -1
- package/lib/aws/lambda/function.invoke.d.ts.map +1 -1
- package/lib/aws/lambda/function.invoke.js.map +1 -1
- package/lib/aws/lambda/function.js.map +1 -1
- package/lib/aws/lambda/function.provider.d.ts.map +1 -1
- package/lib/aws/lambda/function.provider.js +19 -23
- package/lib/aws/lambda/function.provider.js.map +1 -1
- package/lib/aws/sqs/queue.d.ts +1 -2
- package/lib/aws/sqs/queue.d.ts.map +1 -1
- package/lib/aws/sqs/queue.event-source.d.ts.map +1 -1
- package/lib/aws/sqs/queue.event-source.js +2 -2
- package/lib/aws/sqs/queue.event-source.js.map +1 -1
- package/lib/aws/sqs/queue.js.map +1 -1
- package/lib/aws/sqs/queue.provider.d.ts +1 -2
- package/lib/aws/sqs/queue.provider.d.ts.map +1 -1
- package/lib/aws/sqs/queue.provider.js +35 -20
- package/lib/aws/sqs/queue.provider.js.map +1 -1
- package/lib/aws/sqs/queue.send-message.d.ts.map +1 -1
- package/lib/aws/sqs/queue.send-message.js.map +1 -1
- package/lib/binding.d.ts.map +1 -1
- package/lib/cli/components/PlanProgress.d.ts.map +1 -1
- package/lib/cli/components/PlanProgress.js.map +1 -1
- package/lib/cli/index.d.ts +8 -4
- package/lib/cli/index.d.ts.map +1 -1
- package/lib/cli/index.js.map +1 -1
- package/lib/cloudflare/kv/namespace.binding.d.ts.map +1 -1
- package/lib/cloudflare/kv/namespace.binding.js.map +1 -1
- package/lib/cloudflare/kv/namespace.d.ts.map +1 -1
- package/lib/cloudflare/kv/namespace.provider.d.ts +1 -2
- package/lib/cloudflare/kv/namespace.provider.d.ts.map +1 -1
- package/lib/cloudflare/kv/namespace.provider.js +11 -8
- package/lib/cloudflare/kv/namespace.provider.js.map +1 -1
- package/lib/cloudflare/r2/bucket.binding.d.ts.map +1 -1
- package/lib/cloudflare/r2/bucket.binding.js +1 -1
- package/lib/cloudflare/r2/bucket.binding.js.map +1 -1
- package/lib/cloudflare/r2/bucket.d.ts +1 -1
- package/lib/cloudflare/r2/bucket.d.ts.map +1 -1
- package/lib/cloudflare/r2/bucket.provider.d.ts +1 -2
- package/lib/cloudflare/r2/bucket.provider.d.ts.map +1 -1
- package/lib/cloudflare/r2/bucket.provider.js +20 -14
- package/lib/cloudflare/r2/bucket.provider.js.map +1 -1
- package/lib/cloudflare/worker/worker.d.ts +2 -2
- package/lib/cloudflare/worker/worker.d.ts.map +1 -1
- package/lib/cloudflare/worker/worker.provider.d.ts +1 -2
- package/lib/cloudflare/worker/worker.provider.d.ts.map +1 -1
- package/lib/cloudflare/worker/worker.provider.js +40 -13
- package/lib/cloudflare/worker/worker.provider.js.map +1 -1
- package/lib/instance-id.d.ts +5 -1
- package/lib/instance-id.d.ts.map +1 -1
- package/lib/instance-id.js +4 -0
- package/lib/instance-id.js.map +1 -1
- package/lib/output.d.ts.map +1 -1
- package/lib/output.js.map +1 -1
- package/lib/physical-name.d.ts +15 -4
- package/lib/physical-name.d.ts.map +1 -1
- package/lib/physical-name.js +12 -3
- package/lib/physical-name.js.map +1 -1
- package/lib/plan.d.ts +2 -2
- package/lib/plan.d.ts.map +1 -1
- package/lib/plan.js +73 -24
- package/lib/plan.js.map +1 -1
- package/lib/provider.d.ts +1 -2
- package/lib/provider.d.ts.map +1 -1
- package/lib/resource.d.ts +3 -2
- package/lib/resource.d.ts.map +1 -1
- package/lib/resource.js.map +1 -1
- package/lib/runtime.d.ts.map +1 -1
- package/lib/tags.d.ts +12 -0
- package/lib/tags.d.ts.map +1 -1
- package/lib/tags.js +24 -0
- package/lib/tags.js.map +1 -1
- package/lib/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +51 -51
- package/src/apply.ts +316 -297
- package/src/aws/client.ts +22 -1
- package/src/aws/dynamodb/secondary-index.ts +5 -5
- package/src/aws/dynamodb/table.provider.ts +15 -4
- package/src/aws/dynamodb/table.ts +8 -11
- package/src/aws/ec2/egress-only-igw.provider.ts +181 -0
- package/src/aws/ec2/egress-only-igw.ts +77 -0
- package/src/aws/ec2/eip.provider.ts +191 -0
- package/src/aws/ec2/eip.ts +106 -0
- package/src/aws/ec2/index.ts +18 -0
- package/src/aws/ec2/internet-gateway.provider.ts +15 -6
- package/src/aws/ec2/internet-gateway.ts +6 -6
- package/src/aws/ec2/nat-gateway.provider.ts +341 -0
- package/src/aws/ec2/nat-gateway.ts +155 -0
- package/src/aws/ec2/network-acl-association.provider.ts +181 -0
- package/src/aws/ec2/network-acl-association.ts +60 -0
- package/src/aws/ec2/network-acl-entry.provider.ts +218 -0
- package/src/aws/ec2/network-acl-entry.ts +140 -0
- package/src/aws/ec2/network-acl.provider.ts +195 -0
- package/src/aws/ec2/network-acl.ts +102 -0
- package/src/aws/ec2/route-table-association.provider.ts +1 -2
- package/src/aws/ec2/route-table-association.ts +6 -6
- package/src/aws/ec2/route-table.provider.ts +1 -2
- package/src/aws/ec2/route-table.ts +6 -6
- package/src/aws/ec2/route.provider.ts +1 -2
- package/src/aws/ec2/route.ts +6 -6
- package/src/aws/ec2/security-group-rule.provider.ts +264 -0
- package/src/aws/ec2/security-group-rule.ts +151 -0
- package/src/aws/ec2/security-group.provider.ts +392 -0
- package/src/aws/ec2/security-group.ts +182 -0
- package/src/aws/ec2/subnet.provider.ts +57 -56
- package/src/aws/ec2/subnet.ts +6 -6
- package/src/aws/ec2/vpc-endpoint.provider.ts +466 -0
- package/src/aws/ec2/vpc-endpoint.ts +213 -0
- package/src/aws/ec2/vpc.provider.ts +60 -52
- package/src/aws/ec2/vpc.ts +6 -6
- package/src/aws/index.ts +9 -0
- package/src/aws/lambda/function.invoke.ts +4 -2
- package/src/aws/lambda/function.provider.ts +42 -31
- package/src/aws/lambda/function.ts +4 -2
- package/src/aws/sqs/queue.event-source.ts +12 -14
- package/src/aws/sqs/queue.provider.ts +40 -24
- package/src/aws/sqs/queue.send-message.ts +4 -2
- package/src/aws/sqs/queue.ts +1 -8
- package/src/binding.ts +7 -7
- package/src/cli/components/PlanProgress.tsx +3 -2
- package/src/cloudflare/kv/namespace.binding.ts +4 -2
- package/src/cloudflare/kv/namespace.provider.ts +18 -16
- package/src/cloudflare/kv/namespace.ts +6 -6
- package/src/cloudflare/r2/bucket.binding.ts +5 -3
- package/src/cloudflare/r2/bucket.provider.ts +34 -30
- package/src/cloudflare/r2/bucket.ts +7 -7
- package/src/cloudflare/worker/worker.provider.ts +39 -13
- package/src/cloudflare/worker/worker.ts +2 -2
- package/src/instance-id.ts +5 -1
- package/src/output.ts +5 -3
- package/src/physical-name.ts +27 -5
- package/src/plan.ts +108 -41
- package/src/provider.ts +12 -12
- package/src/resource.ts +17 -6
- package/src/runtime.ts +2 -2
- 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!
|