alchemy-effect 0.4.0 → 0.5.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/bin/alchemy-effect.js +295 -253
- package/bin/alchemy-effect.js.map +1 -1
- package/lib/apply.d.ts.map +1 -1
- package/lib/apply.js +237 -232
- package/lib/apply.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/vpc.provider.d.ts +2 -2
- package/lib/aws/ec2/vpc.provider.d.ts.map +1 -1
- package/lib/aws/ec2/vpc.provider.js +6 -7
- package/lib/aws/ec2/vpc.provider.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.provider.d.ts +1 -2
- package/lib/aws/sqs/queue.provider.d.ts.map +1 -1
- package/lib/aws/sqs/queue.provider.js +14 -7
- package/lib/aws/sqs/queue.provider.js.map +1 -1
- package/lib/cli/index.d.ts +7 -3
- package/lib/cli/index.d.ts.map +1 -1
- package/lib/cloudflare/kv/namespace.provider.d.ts.map +1 -1
- package/lib/cloudflare/kv/namespace.provider.js +11 -6
- package/lib/cloudflare/kv/namespace.provider.js.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/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.map +1 -1
- package/lib/plan.js +65 -17
- package/lib/plan.js.map +1 -1
- package/lib/provider.d.ts +0 -1
- package/lib/provider.d.ts.map +1 -1
- package/lib/provider.js.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/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/apply.ts +296 -286
- package/src/aws/dynamodb/table.provider.ts +15 -4
- package/src/aws/ec2/vpc.provider.ts +10 -9
- package/src/aws/lambda/function.provider.ts +42 -31
- package/src/aws/sqs/queue.provider.ts +15 -9
- package/src/cloudflare/kv/namespace.provider.ts +18 -14
- package/src/cloudflare/r2/bucket.binding.ts +1 -1
- package/src/cloudflare/r2/bucket.provider.ts +34 -30
- package/src/cloudflare/r2/bucket.ts +1 -1
- 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/physical-name.ts +27 -5
- package/src/plan.ts +90 -29
- package/src/provider.ts +0 -1
- package/src/resource.ts +17 -6
package/bin/alchemy-effect.js
CHANGED
|
@@ -22,7 +22,7 @@ import * as Redacted from "effect/Redacted";
|
|
|
22
22
|
import * as Schema from "effect/Schema";
|
|
23
23
|
import * as EffectSecret from "effect/Secret";
|
|
24
24
|
import * as Context from "effect/Context";
|
|
25
|
-
import * as Layer from "effect/Layer";
|
|
25
|
+
import * as Layer$1 from "effect/Layer";
|
|
26
26
|
import * as Terminal from "@effect/platform/Terminal";
|
|
27
27
|
import * as Effectable from "effect/Effectable";
|
|
28
28
|
import * as Data from "effect/Data";
|
|
@@ -43,7 +43,7 @@ import * as ConfigProvider from "effect/ConfigProvider";
|
|
|
43
43
|
import { NodeContext, NodeRuntime } from "@effect/platform-node";
|
|
44
44
|
import * as PlatformConfigProvider from "@effect/platform/PlatformConfigProvider";
|
|
45
45
|
import * as FetchHttpClient from "@effect/platform/FetchHttpClient";
|
|
46
|
-
import { pipe as pipe$1 } from "effect";
|
|
46
|
+
import { Layer, pipe as pipe$1 } from "effect";
|
|
47
47
|
import { omit } from "effect/Struct";
|
|
48
48
|
import { PassThrough, Stream } from "node:stream";
|
|
49
49
|
import process$1, { cwd, env } from "node:process";
|
|
@@ -14042,7 +14042,7 @@ const asEffect = (effect) => Effect.isEffect(effect) ? effect : Effect.succeed(e
|
|
|
14042
14042
|
|
|
14043
14043
|
//#endregion
|
|
14044
14044
|
//#region package.json
|
|
14045
|
-
var version = "0.
|
|
14045
|
+
var version = "0.5.0";
|
|
14046
14046
|
|
|
14047
14047
|
//#endregion
|
|
14048
14048
|
//#region src/resource.ts
|
|
@@ -14054,7 +14054,7 @@ const isResource = (r) => {
|
|
|
14054
14054
|
//#region src/state.ts
|
|
14055
14055
|
var StateStoreError = class extends Data.TaggedError("StateStoreError") {};
|
|
14056
14056
|
var State = class extends Context.Tag("AWS::Lambda::State")() {};
|
|
14057
|
-
const localFs = Layer.effect(State, Effect.gen(function* () {
|
|
14057
|
+
const localFs = Layer$1.effect(State, Effect.gen(function* () {
|
|
14058
14058
|
const fs$1 = yield* FileSystem.FileSystem;
|
|
14059
14059
|
const path$3 = yield* Path$1.Path;
|
|
14060
14060
|
const dotAlchemy$1 = path$3.join(process.cwd(), ".alchemy");
|
|
@@ -14093,7 +14093,7 @@ const localFs = Layer.effect(State, Effect.gen(function* () {
|
|
|
14093
14093
|
//#endregion
|
|
14094
14094
|
//#region src/app.ts
|
|
14095
14095
|
var App$1 = class extends Context.Tag("App")() {};
|
|
14096
|
-
const app = (input) => Layer.succeed(App$1, App$1.of(input));
|
|
14096
|
+
const app = (input) => Layer$1.succeed(App$1, App$1.of(input));
|
|
14097
14097
|
const make = app;
|
|
14098
14098
|
|
|
14099
14099
|
//#endregion
|
|
@@ -14102,6 +14102,8 @@ var CLI = class extends Context.Tag("CLIService")() {};
|
|
|
14102
14102
|
|
|
14103
14103
|
//#endregion
|
|
14104
14104
|
//#region src/instance-id.ts
|
|
14105
|
+
/** A 16-byte (128-bit) random hex-encoded string representing an physical instance of a logical resource */
|
|
14106
|
+
var InstanceId = class extends Context.Tag("instance-id")() {};
|
|
14105
14107
|
/**
|
|
14106
14108
|
* @returns Hex-encoded instance ID (16 random bytes)
|
|
14107
14109
|
*/
|
|
@@ -14315,7 +14317,7 @@ const plan = (..._resources) => Effect.gen(function* () {
|
|
|
14315
14317
|
instanceId: oldState.instanceId,
|
|
14316
14318
|
news: props,
|
|
14317
14319
|
output: oldState.attr
|
|
14318
|
-
}) : Effect.succeed(void 0);
|
|
14320
|
+
}).pipe(Effect.provide(Layer$1.succeed(InstanceId, oldState.instanceId))) : Effect.succeed(void 0);
|
|
14319
14321
|
const stables = [...provider.stables ?? [], ...diff$1?.stables ?? []];
|
|
14320
14322
|
const withStables = (output) => stables.length > 0 ? new ResourceExpr(resourceExpr.src, Object.fromEntries(stables.map((stable) => [stable, output?.[stable]]))) : resourceExpr;
|
|
14321
14323
|
if (diff$1 == null) {
|
|
@@ -14385,6 +14387,25 @@ const plan = (..._resources) => Effect.gen(function* () {
|
|
|
14385
14387
|
props: news,
|
|
14386
14388
|
state: oldState
|
|
14387
14389
|
});
|
|
14390
|
+
else if (oldState.status === "creating" && oldState.attr === void 0) {
|
|
14391
|
+
if (provider.read) {
|
|
14392
|
+
const attr = yield* provider.read({
|
|
14393
|
+
id,
|
|
14394
|
+
instanceId: oldState.instanceId,
|
|
14395
|
+
olds: oldState.props,
|
|
14396
|
+
output: oldState.attr,
|
|
14397
|
+
bindings
|
|
14398
|
+
});
|
|
14399
|
+
if (attr) return Node$1({
|
|
14400
|
+
action: "create",
|
|
14401
|
+
props: news,
|
|
14402
|
+
state: {
|
|
14403
|
+
...oldState,
|
|
14404
|
+
attr
|
|
14405
|
+
}
|
|
14406
|
+
});
|
|
14407
|
+
}
|
|
14408
|
+
}
|
|
14388
14409
|
const oldProps = oldState.props;
|
|
14389
14410
|
const diff$1 = yield* asEffect(provider.diff ? provider.diff({
|
|
14390
14411
|
id,
|
|
@@ -14392,7 +14413,7 @@ const plan = (..._resources) => Effect.gen(function* () {
|
|
|
14392
14413
|
instanceId: oldState.instanceId,
|
|
14393
14414
|
output: oldState.attr,
|
|
14394
14415
|
news
|
|
14395
|
-
}) : void 0).pipe(Effect.map((diff$2) => diff$2 ?? { action: arePropsChanged(oldProps, news) ? "update" : "noop" }));
|
|
14416
|
+
}).pipe(Effect.provide(Layer$1.succeed(InstanceId, oldState.instanceId))) : void 0).pipe(Effect.map((diff$2) => diff$2 ?? { action: arePropsChanged(oldProps, news) ? "update" : "noop" }));
|
|
14396
14417
|
if (oldState.status === "creating") if (diff$1.action === "noop") return Node$1({
|
|
14397
14418
|
action: "create",
|
|
14398
14419
|
props: news,
|
|
@@ -14481,19 +14502,36 @@ const plan = (..._resources) => Effect.gen(function* () {
|
|
|
14481
14502
|
stage: app$1.stage,
|
|
14482
14503
|
resourceId: id
|
|
14483
14504
|
});
|
|
14484
|
-
|
|
14485
|
-
|
|
14486
|
-
|
|
14487
|
-
|
|
14488
|
-
|
|
14489
|
-
|
|
14490
|
-
|
|
14491
|
-
|
|
14492
|
-
|
|
14493
|
-
|
|
14494
|
-
|
|
14495
|
-
|
|
14496
|
-
|
|
14505
|
+
let attr = oldState?.attr;
|
|
14506
|
+
if (oldState) {
|
|
14507
|
+
const provider = yield* getProviderByType(oldState.resourceType);
|
|
14508
|
+
if (oldState.attr === void 0) {
|
|
14509
|
+
if (provider.read) attr = yield* provider.read({
|
|
14510
|
+
id,
|
|
14511
|
+
instanceId: oldState.instanceId,
|
|
14512
|
+
olds: oldState.props,
|
|
14513
|
+
output: oldState.attr,
|
|
14514
|
+
bindings: oldState.bindings ?? []
|
|
14515
|
+
}).pipe(Effect.provide(Layer$1.succeed(InstanceId, oldState.instanceId)));
|
|
14516
|
+
if (attr === void 0) return;
|
|
14517
|
+
}
|
|
14518
|
+
return [id, {
|
|
14519
|
+
action: "delete",
|
|
14520
|
+
state: {
|
|
14521
|
+
...oldState,
|
|
14522
|
+
attr
|
|
14523
|
+
},
|
|
14524
|
+
bindings: [],
|
|
14525
|
+
provider,
|
|
14526
|
+
resource: {
|
|
14527
|
+
id,
|
|
14528
|
+
type: oldState.resourceType,
|
|
14529
|
+
attr,
|
|
14530
|
+
props: oldState.props
|
|
14531
|
+
},
|
|
14532
|
+
downstream: oldDownstreamDependencies[id] ?? []
|
|
14533
|
+
}];
|
|
14534
|
+
}
|
|
14497
14535
|
})))).filter((v) => !!v));
|
|
14498
14536
|
for (const [resourceId, deletion] of Object.entries(deletions)) {
|
|
14499
14537
|
const dependencies = deletion.state.downstream.filter((d) => d in resourceGraph);
|
|
@@ -14559,18 +14597,20 @@ const isBindingDiff = Effect.fn(function* ({ target, oldBinding: { binding: oldB
|
|
|
14559
14597
|
const provider = yield* newBinding.Tag;
|
|
14560
14598
|
if (provider.diff) {
|
|
14561
14599
|
const oldState = yield* (yield* State).get(oldCap.resource.id);
|
|
14562
|
-
|
|
14563
|
-
|
|
14564
|
-
|
|
14565
|
-
|
|
14566
|
-
|
|
14567
|
-
|
|
14568
|
-
|
|
14569
|
-
|
|
14570
|
-
|
|
14571
|
-
|
|
14572
|
-
|
|
14573
|
-
|
|
14600
|
+
if (oldState) {
|
|
14601
|
+
const diff$1 = yield* provider.diff({
|
|
14602
|
+
source: {
|
|
14603
|
+
id: oldCap.resource.id,
|
|
14604
|
+
props: newCap.resource.props,
|
|
14605
|
+
oldProps: oldState?.props,
|
|
14606
|
+
oldAttr: oldState?.attr
|
|
14607
|
+
},
|
|
14608
|
+
props: newBinding.props,
|
|
14609
|
+
attr: oldBinding.attr,
|
|
14610
|
+
target
|
|
14611
|
+
}).pipe(Effect.provide(Layer$1.succeed(InstanceId, oldState.instanceId)));
|
|
14612
|
+
if (diff$1?.action === "update" || diff$1?.action === "replace") return diff$1;
|
|
14613
|
+
}
|
|
14574
14614
|
}
|
|
14575
14615
|
return { action: oldBinding.capability.action !== newBinding.capability.action || oldBinding.capability?.resource?.id !== newBinding.capability?.resource?.id ? "update" : "noop" };
|
|
14576
14616
|
});
|
|
@@ -14714,243 +14754,245 @@ const expandAndPivot = Effect.fnUntraced(function* (plan$1, session) {
|
|
|
14714
14754
|
} else if (node.state?.instanceId) return node.state.instanceId;
|
|
14715
14755
|
return yield* Effect.dieMessage(`Instance ID not found for resource '${id}' and action is '${node.action}'`);
|
|
14716
14756
|
});
|
|
14717
|
-
|
|
14718
|
-
|
|
14719
|
-
|
|
14720
|
-
|
|
14721
|
-
|
|
14722
|
-
|
|
14723
|
-
|
|
14724
|
-
|
|
14725
|
-
|
|
14726
|
-
|
|
14727
|
-
|
|
14728
|
-
|
|
14729
|
-
|
|
14730
|
-
|
|
14731
|
-
|
|
14732
|
-
|
|
14733
|
-
|
|
14734
|
-
|
|
14757
|
+
return yield* Effect.gen(function* () {
|
|
14758
|
+
if (node.action === "create") {
|
|
14759
|
+
const news = yield* evaluate(node.props, upstream$1);
|
|
14760
|
+
const checkpoint = (attr$1) => commit({
|
|
14761
|
+
status: "creating",
|
|
14762
|
+
logicalId: id,
|
|
14763
|
+
instanceId,
|
|
14764
|
+
resourceType: node.resource.type,
|
|
14765
|
+
props: news,
|
|
14766
|
+
attr: attr$1,
|
|
14767
|
+
providerVersion: node.provider.version ?? 0,
|
|
14768
|
+
bindings: node.bindings,
|
|
14769
|
+
downstream: node.downstream
|
|
14770
|
+
});
|
|
14771
|
+
if (!node.state) yield* checkpoint(void 0);
|
|
14772
|
+
let attr;
|
|
14773
|
+
if (node.action === "create" && node.provider.precreate && node.state?.attr === void 0) {
|
|
14774
|
+
yield* report("pre-creating");
|
|
14775
|
+
attr = yield* node.provider.precreate({
|
|
14776
|
+
id,
|
|
14777
|
+
news: node.props,
|
|
14778
|
+
session: scopedSession,
|
|
14779
|
+
instanceId
|
|
14780
|
+
});
|
|
14781
|
+
yield* checkpoint(attr);
|
|
14782
|
+
}
|
|
14783
|
+
yield* report("attaching");
|
|
14784
|
+
let bindingOutputs = yield* attachBindings({
|
|
14785
|
+
resource,
|
|
14786
|
+
bindings: node.bindings,
|
|
14787
|
+
target: {
|
|
14788
|
+
id,
|
|
14789
|
+
props: news,
|
|
14790
|
+
attr
|
|
14791
|
+
}
|
|
14792
|
+
});
|
|
14793
|
+
yield* report("creating");
|
|
14794
|
+
attr = yield* node.provider.create({
|
|
14735
14795
|
id,
|
|
14736
|
-
news
|
|
14737
|
-
|
|
14738
|
-
|
|
14796
|
+
news,
|
|
14797
|
+
instanceId,
|
|
14798
|
+
bindings: bindingOutputs,
|
|
14799
|
+
session: scopedSession
|
|
14739
14800
|
});
|
|
14740
14801
|
yield* checkpoint(attr);
|
|
14741
|
-
|
|
14742
|
-
|
|
14743
|
-
|
|
14744
|
-
|
|
14745
|
-
|
|
14746
|
-
|
|
14747
|
-
|
|
14802
|
+
yield* report("post-attach");
|
|
14803
|
+
bindingOutputs = yield* postAttachBindings({
|
|
14804
|
+
resource,
|
|
14805
|
+
bindings: node.bindings,
|
|
14806
|
+
bindingOutputs,
|
|
14807
|
+
target: {
|
|
14808
|
+
id,
|
|
14809
|
+
props: news,
|
|
14810
|
+
attr
|
|
14811
|
+
}
|
|
14812
|
+
});
|
|
14813
|
+
yield* commit({
|
|
14814
|
+
status: "created",
|
|
14815
|
+
logicalId: id,
|
|
14816
|
+
instanceId,
|
|
14817
|
+
resourceType: node.resource.type,
|
|
14748
14818
|
props: news,
|
|
14749
|
-
attr
|
|
14750
|
-
|
|
14751
|
-
|
|
14752
|
-
|
|
14753
|
-
|
|
14754
|
-
|
|
14755
|
-
|
|
14756
|
-
|
|
14757
|
-
|
|
14758
|
-
|
|
14759
|
-
})
|
|
14760
|
-
|
|
14761
|
-
|
|
14762
|
-
|
|
14763
|
-
|
|
14764
|
-
|
|
14765
|
-
|
|
14766
|
-
|
|
14819
|
+
attr,
|
|
14820
|
+
bindings: node.bindings.map((binding, i) => ({
|
|
14821
|
+
...binding,
|
|
14822
|
+
attr: bindingOutputs[i]
|
|
14823
|
+
})),
|
|
14824
|
+
providerVersion: node.provider.version ?? 0,
|
|
14825
|
+
downstream: node.downstream
|
|
14826
|
+
});
|
|
14827
|
+
yield* report("created");
|
|
14828
|
+
return attr;
|
|
14829
|
+
} else if (node.action === "update") {
|
|
14830
|
+
const upstream$2 = Object.fromEntries(yield* Effect.all(Object.entries(resolveUpstream(node.props)).map(([id$1]) => resolveUpstream$1(id$1).pipe(Effect.map(({ upstreamAttr }) => [id$1, upstreamAttr])))));
|
|
14831
|
+
const news = yield* evaluate(node.props, upstream$2);
|
|
14832
|
+
const checkpoint = (attr$1) => {
|
|
14833
|
+
if (node.state.status === "replaced") return commit({
|
|
14834
|
+
...node.state,
|
|
14835
|
+
attr: attr$1,
|
|
14836
|
+
props: news
|
|
14837
|
+
});
|
|
14838
|
+
else return commit({
|
|
14839
|
+
status: "updating",
|
|
14840
|
+
logicalId: id,
|
|
14841
|
+
instanceId,
|
|
14842
|
+
resourceType: node.resource.type,
|
|
14843
|
+
props: news,
|
|
14844
|
+
attr: attr$1,
|
|
14845
|
+
providerVersion: node.provider.version ?? 0,
|
|
14846
|
+
bindings: node.bindings,
|
|
14847
|
+
downstream: node.downstream,
|
|
14848
|
+
old: node.state.status === "updating" ? node.state.old : node.state
|
|
14849
|
+
});
|
|
14850
|
+
};
|
|
14851
|
+
yield* checkpoint(node.state.attr);
|
|
14852
|
+
yield* report("attaching");
|
|
14853
|
+
let bindingOutputs = yield* attachBindings({
|
|
14854
|
+
resource,
|
|
14855
|
+
bindings: node.bindings,
|
|
14856
|
+
target: {
|
|
14857
|
+
id,
|
|
14858
|
+
props: news,
|
|
14859
|
+
attr: node.state.attr
|
|
14860
|
+
}
|
|
14861
|
+
});
|
|
14862
|
+
yield* report("updating");
|
|
14863
|
+
const attr = yield* node.provider.update({
|
|
14767
14864
|
id,
|
|
14768
|
-
|
|
14769
|
-
|
|
14770
|
-
|
|
14771
|
-
|
|
14772
|
-
|
|
14773
|
-
|
|
14774
|
-
|
|
14775
|
-
|
|
14776
|
-
|
|
14777
|
-
|
|
14778
|
-
|
|
14779
|
-
|
|
14780
|
-
|
|
14781
|
-
|
|
14782
|
-
|
|
14783
|
-
|
|
14784
|
-
|
|
14785
|
-
|
|
14786
|
-
|
|
14787
|
-
|
|
14788
|
-
} else if (node.action === "update") {
|
|
14789
|
-
const upstream$2 = Object.fromEntries(yield* Effect.all(Object.entries(resolveUpstream(node.props)).map(([id$1]) => resolveUpstream$1(id$1).pipe(Effect.map(({ upstreamAttr }) => [id$1, upstreamAttr])))));
|
|
14790
|
-
const news = yield* evaluate(node.props, upstream$2);
|
|
14791
|
-
const checkpoint = (attr$1) => {
|
|
14792
|
-
if (node.state.status === "replaced") return commit({
|
|
14865
|
+
news,
|
|
14866
|
+
instanceId,
|
|
14867
|
+
bindings: bindingOutputs,
|
|
14868
|
+
session: scopedSession,
|
|
14869
|
+
olds: node.state.status === "created" || node.state.status === "updated" || node.state.status === "replaced" ? node.state.props : node.state.old.props,
|
|
14870
|
+
output: node.state.attr
|
|
14871
|
+
});
|
|
14872
|
+
yield* checkpoint(attr);
|
|
14873
|
+
yield* report("post-attach");
|
|
14874
|
+
bindingOutputs = yield* postAttachBindings({
|
|
14875
|
+
resource,
|
|
14876
|
+
bindings: node.bindings,
|
|
14877
|
+
bindingOutputs,
|
|
14878
|
+
target: {
|
|
14879
|
+
id,
|
|
14880
|
+
props: news,
|
|
14881
|
+
attr
|
|
14882
|
+
}
|
|
14883
|
+
});
|
|
14884
|
+
if (node.state.status === "replaced") yield* commit({
|
|
14793
14885
|
...node.state,
|
|
14794
|
-
attr
|
|
14886
|
+
attr,
|
|
14795
14887
|
props: news
|
|
14796
14888
|
});
|
|
14797
|
-
else
|
|
14798
|
-
status: "
|
|
14889
|
+
else yield* commit({
|
|
14890
|
+
status: "updated",
|
|
14891
|
+
logicalId: id,
|
|
14892
|
+
instanceId,
|
|
14893
|
+
resourceType: node.resource.type,
|
|
14894
|
+
props: news,
|
|
14895
|
+
attr,
|
|
14896
|
+
bindings: node.bindings.map((binding, i) => ({
|
|
14897
|
+
...binding,
|
|
14898
|
+
attr: bindingOutputs[i]
|
|
14899
|
+
})),
|
|
14900
|
+
providerVersion: node.provider.version ?? 0,
|
|
14901
|
+
downstream: node.downstream
|
|
14902
|
+
});
|
|
14903
|
+
yield* report("updated");
|
|
14904
|
+
return attr;
|
|
14905
|
+
} else if (node.action === "replace") {
|
|
14906
|
+
if (node.state.status === "replaced") return node.state.attr;
|
|
14907
|
+
let state$1;
|
|
14908
|
+
if (node.state.status !== "replacing") yield* commit(state$1 = {
|
|
14909
|
+
status: "replacing",
|
|
14910
|
+
logicalId: id,
|
|
14911
|
+
instanceId,
|
|
14912
|
+
resourceType: node.resource.type,
|
|
14913
|
+
props: node.props,
|
|
14914
|
+
attr: node.state.attr,
|
|
14915
|
+
providerVersion: node.provider.version ?? 0,
|
|
14916
|
+
deleteFirst: node.deleteFirst,
|
|
14917
|
+
old: node.state,
|
|
14918
|
+
downstream: node.downstream
|
|
14919
|
+
});
|
|
14920
|
+
else state$1 = node.state;
|
|
14921
|
+
const upstream$2 = Object.fromEntries(yield* Effect.all(Object.entries(resolveUpstream(node.props)).map(([id$1]) => resolveUpstream$1(id$1).pipe(Effect.map(({ upstreamAttr }) => [id$1, upstreamAttr])))));
|
|
14922
|
+
const news = yield* evaluate(node.props, upstream$2);
|
|
14923
|
+
const checkpoint = ({ status, attr: attr$1, bindings }) => commit({
|
|
14924
|
+
status,
|
|
14799
14925
|
logicalId: id,
|
|
14800
14926
|
instanceId,
|
|
14801
14927
|
resourceType: node.resource.type,
|
|
14802
14928
|
props: news,
|
|
14803
14929
|
attr: attr$1,
|
|
14804
14930
|
providerVersion: node.provider.version ?? 0,
|
|
14805
|
-
bindings: node.bindings,
|
|
14931
|
+
bindings: bindings ?? node.bindings,
|
|
14806
14932
|
downstream: node.downstream,
|
|
14807
|
-
old:
|
|
14933
|
+
old: state$1.old,
|
|
14934
|
+
deleteFirst: node.deleteFirst
|
|
14808
14935
|
});
|
|
14809
|
-
|
|
14810
|
-
|
|
14811
|
-
|
|
14812
|
-
|
|
14813
|
-
|
|
14814
|
-
|
|
14815
|
-
|
|
14816
|
-
|
|
14817
|
-
|
|
14818
|
-
|
|
14819
|
-
|
|
14820
|
-
|
|
14821
|
-
|
|
14822
|
-
const attr = yield* node.provider.update({
|
|
14823
|
-
id,
|
|
14824
|
-
news,
|
|
14825
|
-
instanceId,
|
|
14826
|
-
bindings: bindingOutputs,
|
|
14827
|
-
session: scopedSession,
|
|
14828
|
-
olds: node.state.status === "created" || node.state.status === "updated" || node.state.status === "replaced" ? node.state.props : node.state.old.props,
|
|
14829
|
-
output: node.state.attr
|
|
14830
|
-
});
|
|
14831
|
-
yield* checkpoint(attr);
|
|
14832
|
-
yield* report("post-attach");
|
|
14833
|
-
bindingOutputs = yield* postAttachBindings({
|
|
14834
|
-
resource,
|
|
14835
|
-
bindings: node.bindings,
|
|
14836
|
-
bindingOutputs,
|
|
14837
|
-
target: {
|
|
14838
|
-
id,
|
|
14839
|
-
props: news,
|
|
14840
|
-
attr
|
|
14936
|
+
let attr;
|
|
14937
|
+
if (node.provider.precreate && node.state?.attr === void 0) {
|
|
14938
|
+
yield* report("pre-creating");
|
|
14939
|
+
attr = yield* node.provider.precreate({
|
|
14940
|
+
id,
|
|
14941
|
+
news: node.props,
|
|
14942
|
+
session: scopedSession,
|
|
14943
|
+
instanceId
|
|
14944
|
+
});
|
|
14945
|
+
yield* checkpoint({
|
|
14946
|
+
status: "replacing",
|
|
14947
|
+
attr
|
|
14948
|
+
});
|
|
14841
14949
|
}
|
|
14842
|
-
|
|
14843
|
-
|
|
14844
|
-
|
|
14845
|
-
|
|
14846
|
-
|
|
14847
|
-
|
|
14848
|
-
|
|
14849
|
-
|
|
14850
|
-
|
|
14851
|
-
|
|
14852
|
-
|
|
14853
|
-
|
|
14854
|
-
attr,
|
|
14855
|
-
bindings: node.bindings.map((binding, i) => ({
|
|
14856
|
-
...binding,
|
|
14857
|
-
attr: bindingOutputs[i]
|
|
14858
|
-
})),
|
|
14859
|
-
providerVersion: node.provider.version ?? 0,
|
|
14860
|
-
downstream: node.downstream
|
|
14861
|
-
});
|
|
14862
|
-
yield* report("updated");
|
|
14863
|
-
return attr;
|
|
14864
|
-
} else if (node.action === "replace") {
|
|
14865
|
-
if (node.state.status === "replaced") return node.state.attr;
|
|
14866
|
-
let state$1;
|
|
14867
|
-
if (node.state.status !== "replacing") yield* commit(state$1 = {
|
|
14868
|
-
status: "replacing",
|
|
14869
|
-
logicalId: id,
|
|
14870
|
-
instanceId,
|
|
14871
|
-
resourceType: node.resource.type,
|
|
14872
|
-
props: node.props,
|
|
14873
|
-
attr: node.state.attr,
|
|
14874
|
-
providerVersion: node.provider.version ?? 0,
|
|
14875
|
-
deleteFirst: node.deleteFirst,
|
|
14876
|
-
old: node.state,
|
|
14877
|
-
downstream: node.downstream
|
|
14878
|
-
});
|
|
14879
|
-
else state$1 = node.state;
|
|
14880
|
-
const upstream$2 = Object.fromEntries(yield* Effect.all(Object.entries(resolveUpstream(node.props)).map(([id$1]) => resolveUpstream$1(id$1).pipe(Effect.map(({ upstreamAttr }) => [id$1, upstreamAttr])))));
|
|
14881
|
-
const news = yield* evaluate(node.props, upstream$2);
|
|
14882
|
-
const checkpoint = ({ status, attr: attr$1, bindings }) => commit({
|
|
14883
|
-
status,
|
|
14884
|
-
logicalId: id,
|
|
14885
|
-
instanceId,
|
|
14886
|
-
resourceType: node.resource.type,
|
|
14887
|
-
props: news,
|
|
14888
|
-
attr: attr$1,
|
|
14889
|
-
providerVersion: node.provider.version ?? 0,
|
|
14890
|
-
bindings: bindings ?? node.bindings,
|
|
14891
|
-
downstream: node.downstream,
|
|
14892
|
-
old: state$1.old,
|
|
14893
|
-
deleteFirst: node.deleteFirst
|
|
14894
|
-
});
|
|
14895
|
-
let attr;
|
|
14896
|
-
if (node.provider.precreate && node.state?.attr === void 0) {
|
|
14897
|
-
yield* report("pre-creating");
|
|
14898
|
-
attr = yield* node.provider.precreate({
|
|
14950
|
+
yield* report("attaching");
|
|
14951
|
+
let bindingOutputs = yield* attachBindings({
|
|
14952
|
+
resource,
|
|
14953
|
+
bindings: node.bindings,
|
|
14954
|
+
target: {
|
|
14955
|
+
id,
|
|
14956
|
+
props: news,
|
|
14957
|
+
attr
|
|
14958
|
+
}
|
|
14959
|
+
});
|
|
14960
|
+
yield* report("creating replacement");
|
|
14961
|
+
attr = yield* node.provider.create({
|
|
14899
14962
|
id,
|
|
14900
|
-
news
|
|
14901
|
-
|
|
14902
|
-
|
|
14963
|
+
news,
|
|
14964
|
+
instanceId,
|
|
14965
|
+
bindings: bindingOutputs,
|
|
14966
|
+
session: scopedSession
|
|
14903
14967
|
});
|
|
14904
14968
|
yield* checkpoint({
|
|
14905
14969
|
status: "replacing",
|
|
14906
14970
|
attr
|
|
14907
14971
|
});
|
|
14972
|
+
yield* report("post-attach");
|
|
14973
|
+
bindingOutputs = yield* postAttachBindings({
|
|
14974
|
+
resource,
|
|
14975
|
+
bindings: node.bindings,
|
|
14976
|
+
bindingOutputs,
|
|
14977
|
+
target: {
|
|
14978
|
+
id,
|
|
14979
|
+
props: news,
|
|
14980
|
+
attr
|
|
14981
|
+
}
|
|
14982
|
+
});
|
|
14983
|
+
yield* checkpoint({
|
|
14984
|
+
status: "replaced",
|
|
14985
|
+
attr,
|
|
14986
|
+
bindings: node.bindings.map((binding, i) => ({
|
|
14987
|
+
...binding,
|
|
14988
|
+
attr: bindingOutputs[i]
|
|
14989
|
+
}))
|
|
14990
|
+
});
|
|
14991
|
+
yield* report("created");
|
|
14992
|
+
return attr;
|
|
14908
14993
|
}
|
|
14909
|
-
yield*
|
|
14910
|
-
|
|
14911
|
-
resource,
|
|
14912
|
-
bindings: node.bindings,
|
|
14913
|
-
target: {
|
|
14914
|
-
id,
|
|
14915
|
-
props: news,
|
|
14916
|
-
attr
|
|
14917
|
-
}
|
|
14918
|
-
});
|
|
14919
|
-
yield* report("creating replacement");
|
|
14920
|
-
attr = yield* node.provider.create({
|
|
14921
|
-
id,
|
|
14922
|
-
news,
|
|
14923
|
-
instanceId,
|
|
14924
|
-
bindings: bindingOutputs,
|
|
14925
|
-
session: scopedSession
|
|
14926
|
-
});
|
|
14927
|
-
yield* checkpoint({
|
|
14928
|
-
status: "replacing",
|
|
14929
|
-
attr
|
|
14930
|
-
});
|
|
14931
|
-
yield* report("post-attach");
|
|
14932
|
-
bindingOutputs = yield* postAttachBindings({
|
|
14933
|
-
resource,
|
|
14934
|
-
bindings: node.bindings,
|
|
14935
|
-
bindingOutputs,
|
|
14936
|
-
target: {
|
|
14937
|
-
id,
|
|
14938
|
-
props: news,
|
|
14939
|
-
attr
|
|
14940
|
-
}
|
|
14941
|
-
});
|
|
14942
|
-
yield* checkpoint({
|
|
14943
|
-
status: "replaced",
|
|
14944
|
-
attr,
|
|
14945
|
-
bindings: node.bindings.map((binding, i) => ({
|
|
14946
|
-
...binding,
|
|
14947
|
-
attr: bindingOutputs[i]
|
|
14948
|
-
}))
|
|
14949
|
-
});
|
|
14950
|
-
yield* report("created");
|
|
14951
|
-
return attr;
|
|
14952
|
-
}
|
|
14953
|
-
return yield* Effect.dieMessage(`Unknown action: ${node.action}`);
|
|
14994
|
+
return yield* Effect.dieMessage(`Unknown action: ${node.action}`);
|
|
14995
|
+
}).pipe(Effect.provide(Layer.succeed(InstanceId, instanceId)));
|
|
14954
14996
|
}));
|
|
14955
14997
|
});
|
|
14956
14998
|
return Object.fromEntries(yield* Effect.all(Object.entries(plan$1.resources).map(Effect.fn(function* ([id, node]) {
|
|
@@ -15051,7 +15093,7 @@ const collectGarbage = Effect.fnUntraced(function* (plan$1, session) {
|
|
|
15051
15093
|
});
|
|
15052
15094
|
yield* report("replaced");
|
|
15053
15095
|
}
|
|
15054
|
-
}));
|
|
15096
|
+
}).pipe(Effect.provide(Layer.succeed(InstanceId, instanceId))));
|
|
15055
15097
|
});
|
|
15056
15098
|
yield* Effect.all(Object.values(deletionGraph).filter((node) => node !== void 0).map(deleteResource));
|
|
15057
15099
|
});
|
|
@@ -15059,7 +15101,7 @@ const collectGarbage = Effect.fnUntraced(function* (plan$1, session) {
|
|
|
15059
15101
|
//#endregion
|
|
15060
15102
|
//#region src/dot-alchemy.ts
|
|
15061
15103
|
var DotAlchemy = class extends Context.Tag(".alchemy")() {};
|
|
15062
|
-
const dotAlchemy = Layer.effect(DotAlchemy, Effect.gen(function* () {
|
|
15104
|
+
const dotAlchemy = Layer$1.effect(DotAlchemy, Effect.gen(function* () {
|
|
15063
15105
|
const fs$1 = yield* FileSystem.FileSystem;
|
|
15064
15106
|
const dir = (yield* Path$1.Path).join(process.cwd(), ".alchemy");
|
|
15065
15107
|
yield* fs$1.makeDirectory(dir, { recursive: true });
|
|
@@ -55235,7 +55277,7 @@ function useGlobalSpinner(intervalMs = 80) {
|
|
|
55235
55277
|
|
|
55236
55278
|
//#endregion
|
|
55237
55279
|
//#region src/cli/ink-service.tsx
|
|
55238
|
-
const inkCLI = () => Layer.succeed(CLI, CLI.of({
|
|
55280
|
+
const inkCLI = () => Layer$1.succeed(CLI, CLI.of({
|
|
55239
55281
|
approvePlan,
|
|
55240
55282
|
displayPlan,
|
|
55241
55283
|
startApplySession
|
|
@@ -55325,10 +55367,10 @@ const execStack = Effect.fn(function* ({ main: main$1, stage: stage$1, envFile:
|
|
|
55325
55367
|
if (!stack) return yield* Effect.die(/* @__PURE__ */ new Error(`Main file '${main$1}' must export a default stack definition (export default defineStack({...}))`));
|
|
55326
55368
|
const stackName = stack.name;
|
|
55327
55369
|
const configProvider = Option.isSome(envFile$1) ? ConfigProvider.orElse(yield* PlatformConfigProvider.fromDotEnv(envFile$1.value), ConfigProvider.fromEnv) : ConfigProvider.fromEnv();
|
|
55328
|
-
const stageConfig = yield* asEffect(stack.stages.config(stage$1)).pipe(Effect.provide(stack.layers ?? Layer.empty), Effect.withConfigProvider(configProvider));
|
|
55329
|
-
const platform$1 = Layer.mergeAll(NodeContext.layer, FetchHttpClient.layer, Logger.pretty);
|
|
55330
|
-
const alchemy = Layer.mergeAll(stack.state ?? localFs, stack.cli ?? inkCLI(), dotAlchemy);
|
|
55331
|
-
const layers = Layer.provideMerge(Layer.provideMerge(stack.providers, alchemy), Layer.mergeAll(platform$1, make({
|
|
55370
|
+
const stageConfig = yield* asEffect(stack.stages.config(stage$1)).pipe(Effect.provide(stack.layers ?? Layer$1.empty), Effect.withConfigProvider(configProvider));
|
|
55371
|
+
const platform$1 = Layer$1.mergeAll(NodeContext.layer, FetchHttpClient.layer, Logger.pretty);
|
|
55372
|
+
const alchemy = Layer$1.mergeAll(stack.state ?? localFs, stack.cli ?? inkCLI(), dotAlchemy);
|
|
55373
|
+
const layers = Layer$1.provideMerge(Layer$1.provideMerge(stack.providers, alchemy), Layer$1.mergeAll(platform$1, make({
|
|
55332
55374
|
name: stackName,
|
|
55333
55375
|
stage: stage$1,
|
|
55334
55376
|
config: stageConfig
|
|
@@ -55342,7 +55384,7 @@ const execStack = Effect.fn(function* ({ main: main$1, stage: stage$1, envFile:
|
|
|
55342
55384
|
if (!(yield* cli.approvePlan(updatePlan))) return;
|
|
55343
55385
|
}
|
|
55344
55386
|
const outputs = yield* applyPlan(updatePlan);
|
|
55345
|
-
if (outputs && stack.tap) yield* stack.tap(outputs).pipe(Effect.provide(stack.layers ?? Layer.empty));
|
|
55387
|
+
if (outputs && stack.tap) yield* stack.tap(outputs).pipe(Effect.provide(stack.layers ?? Layer$1.empty));
|
|
55346
55388
|
}
|
|
55347
55389
|
}).pipe(Effect.provide(layers), Effect.withConfigProvider(configProvider));
|
|
55348
55390
|
});
|