alchemy-effect 0.7.1 → 0.9.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 +29 -21
- package/bin/alchemy-effect.js.map +1 -1
- package/bin/alchemy-effect.ts +32 -68
- package/lib/cli/index.d.ts +1 -0
- package/lib/cli/index.d.ts.map +1 -1
- package/package.json +3 -2
- package/src/AWS/AutoScaling/LaunchTemplate.ts +5 -4
- package/src/AWS/EC2/Instance.ts +3 -4
- package/src/AWS/ECS/Task.ts +36 -34
- package/src/AWS/Lambda/Function.ts +68 -68
- package/src/Apply.ts +2 -0
- package/src/Artifacts.ts +10 -1
- package/src/Binding.ts +20 -5
- package/src/Cloudflare/Container.ts +210 -109
- package/src/Cloudflare/D1/D1Database.ts +32 -32
- package/src/Cloudflare/KV/Delete.ts +7 -5
- package/src/Cloudflare/KV/Get.ts +5 -5
- package/src/Cloudflare/KV/GetWithMetadata.ts +5 -5
- package/src/Cloudflare/KV/{Namespace.ts → KVNamespace.ts} +6 -6
- package/src/Cloudflare/KV/{NamespaceBinding.ts → KVNamespaceBinding.ts} +2 -2
- package/src/Cloudflare/KV/List.ts +5 -5
- package/src/Cloudflare/KV/Put.ts +5 -5
- package/src/Cloudflare/KV/index.ts +1 -1
- package/src/Cloudflare/Providers.ts +2 -8
- package/src/Cloudflare/R2/{Bucket.ts → R2Bucket.ts} +19 -19
- package/src/Cloudflare/R2/R2BucketBinding.ts +322 -0
- package/src/Cloudflare/R2/index.ts +2 -9
- package/src/Cloudflare/Workers/Assets.ts +11 -5
- package/src/Cloudflare/Workers/DurableObject.ts +4 -33
- package/src/Cloudflare/Workers/HttpServer.ts +1 -0
- package/src/Cloudflare/Workers/InferEnv.ts +23 -0
- package/src/Cloudflare/Workers/WebSocket.ts +4 -3
- package/src/Cloudflare/Workers/Worker.ts +480 -165
- package/src/Cloudflare/Workers/cloudflare_workers.ts +13 -21
- package/src/Cloudflare/Workers/index.ts +1 -0
- package/src/Cloudflare/index.ts +2 -2
- package/src/Platform.ts +36 -55
- package/src/Provider.ts +1 -0
- package/src/Resource.ts +3 -2
- package/src/Stack.ts +5 -4
- package/src/Test/Bun.ts +207 -0
- package/src/Util/ConfigProvider.ts +25 -0
- package/src/Util/FileLogger.ts +22 -0
- package/src/Util/effect.ts +24 -0
- package/src/Cloudflare/R2/BucketBinding.ts +0 -31
- package/src/Cloudflare/R2/CreateMultipartUpload.ts +0 -59
- package/src/Cloudflare/R2/DeleteObject.ts +0 -41
- package/src/Cloudflare/R2/GetObject.ts +0 -47
- package/src/Cloudflare/R2/HeadObject.ts +0 -41
- package/src/Cloudflare/R2/ListObjects.ts +0 -45
- package/src/Cloudflare/R2/MultipartUploadClient.ts +0 -40
- package/src/Cloudflare/R2/PutObject.ts +0 -55
- package/src/Cloudflare/R2/ResumeMultipartUpload.ts +0 -48
- package/src/Cloudflare/R2/UploadValue.ts +0 -10
package/bin/alchemy-effect.js
CHANGED
|
@@ -5,7 +5,6 @@ import * as Config from "effect/Config";
|
|
|
5
5
|
import * as ConfigProvider from "effect/ConfigProvider";
|
|
6
6
|
import * as Console from "effect/Console";
|
|
7
7
|
import * as Effect from "effect/Effect";
|
|
8
|
-
import * as FileSystem from "effect/FileSystem";
|
|
9
8
|
import * as Layer from "effect/Layer";
|
|
10
9
|
import * as Logger from "effect/Logger";
|
|
11
10
|
import * as Option from "effect/Option";
|
|
@@ -23,6 +22,7 @@ import * as Data from "effect/Data";
|
|
|
23
22
|
import { pipe } from "effect/Function";
|
|
24
23
|
import { SingleShotGen } from "effect/Utils";
|
|
25
24
|
import "effect/Pipeable";
|
|
25
|
+
import * as FileSystem from "effect/FileSystem";
|
|
26
26
|
import "@distilled.cloud/aws/sts";
|
|
27
27
|
import { Region, Region as Region$1 } from "@distilled.cloud/aws/Region";
|
|
28
28
|
import * as s3 from "@distilled.cloud/aws/s3";
|
|
@@ -69,7 +69,7 @@ var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
|
69
69
|
|
|
70
70
|
//#endregion
|
|
71
71
|
//#region package.json
|
|
72
|
-
var version = "0.
|
|
72
|
+
var version = "0.9.0";
|
|
73
73
|
|
|
74
74
|
//#endregion
|
|
75
75
|
//#region src/Artifacts.ts
|
|
@@ -706,7 +706,8 @@ const executeNode = (fqn, node, tracker, ready, terminalStatuses, session, state
|
|
|
706
706
|
id: logicalId,
|
|
707
707
|
news: node.props,
|
|
708
708
|
session: scopedSession,
|
|
709
|
-
instanceId
|
|
709
|
+
instanceId,
|
|
710
|
+
bindings: excludeDeletedBindings(node.bindings)
|
|
710
711
|
}).pipe(provideLifecycleScope(fqn, instanceId));
|
|
711
712
|
yield* commit({
|
|
712
713
|
status: "creating",
|
|
@@ -873,7 +874,8 @@ const executeNode = (fqn, node, tracker, ready, terminalStatuses, session, state
|
|
|
873
874
|
id: logicalId,
|
|
874
875
|
news: node.props,
|
|
875
876
|
session: scopedSession,
|
|
876
|
-
instanceId
|
|
877
|
+
instanceId,
|
|
878
|
+
bindings: excludeDeletedBindings(node.bindings)
|
|
877
879
|
}).pipe(provideLifecycleScope(fqn, instanceId));
|
|
878
880
|
yield* commit({
|
|
879
881
|
status: "replacing",
|
|
@@ -44641,6 +44643,27 @@ const providePlanScope = (fqn, instanceId) => (effect) => Effect.serviceOption(A
|
|
|
44641
44643
|
var DeleteResourceHasDownstreamDependencies = class extends Data.TaggedError("DeleteResourceHasDownstreamDependencies") {};
|
|
44642
44644
|
var UnsatisfiedResourceCycle = class extends Data.TaggedError("UnsatisfiedResourceCycle") {};
|
|
44643
44645
|
|
|
44646
|
+
//#endregion
|
|
44647
|
+
//#region src/Util/ConfigProvider.ts
|
|
44648
|
+
const loadConfigProvider = (envFile$1) => {
|
|
44649
|
+
if (Option.isSome(envFile$1)) return ConfigProvider.fromDotEnv({ path: envFile$1.value }).pipe(Effect.map((dotEnv) => ConfigProvider.orElse(dotEnv, ConfigProvider.fromEnv())));
|
|
44650
|
+
return Effect.gen(function* () {
|
|
44651
|
+
if (!(yield* (yield* FileSystem.FileSystem).exists(".env"))) return ConfigProvider.fromEnv();
|
|
44652
|
+
return ConfigProvider.orElse(yield* ConfigProvider.fromDotEnv({ path: ".env" }), ConfigProvider.fromEnv());
|
|
44653
|
+
});
|
|
44654
|
+
};
|
|
44655
|
+
|
|
44656
|
+
//#endregion
|
|
44657
|
+
//#region src/Util/FileLogger.ts
|
|
44658
|
+
const fileLogger = Effect.fnUntraced(function* (...segments) {
|
|
44659
|
+
const dotAlchemy$1 = yield* DotAlchemy;
|
|
44660
|
+
const fs$2 = yield* FileSystem.FileSystem;
|
|
44661
|
+
const path = yield* Path;
|
|
44662
|
+
const logFile = path.join(dotAlchemy$1, "log", ...segments);
|
|
44663
|
+
yield* fs$2.makeDirectory(path.dirname(logFile), { recursive: true });
|
|
44664
|
+
return yield* Logger.formatLogFmt.pipe(Logger.toFile(logFile, { flag: "a" }));
|
|
44665
|
+
});
|
|
44666
|
+
|
|
44644
44667
|
//#endregion
|
|
44645
44668
|
//#region bin/alchemy-effect.ts
|
|
44646
44669
|
const USER = Config.string("USER").pipe(Config.orElse(() => Config.string("USERNAME")), Config.withDefault("unknown"));
|
|
@@ -44653,21 +44676,6 @@ const envFile = Flag.file("env-file").pipe(Flag.optional, Flag.withDescription("
|
|
|
44653
44676
|
const dryRun = Flag.boolean("dry-run").pipe(Flag.withDescription("Dry run the deployment, do not actually deploy"), Flag.withDefault(false));
|
|
44654
44677
|
const yes = Flag.boolean("yes").pipe(Flag.withDescription("Yes to all prompts"), Flag.withDefault(false));
|
|
44655
44678
|
const force = Flag.boolean("force").pipe(Flag.withDescription("Force updates for resources that would otherwise no-op"), Flag.withDefault(false));
|
|
44656
|
-
const fileLogger = Effect.fnUntraced(function* (...segments) {
|
|
44657
|
-
const dotAlchemy$1 = yield* DotAlchemy;
|
|
44658
|
-
const fs$2 = yield* FileSystem.FileSystem;
|
|
44659
|
-
const path = yield* Path;
|
|
44660
|
-
const logFile = path.join(dotAlchemy$1, "log", ...segments);
|
|
44661
|
-
yield* fs$2.makeDirectory(path.dirname(logFile), { recursive: true });
|
|
44662
|
-
return yield* Logger.formatLogFmt.pipe(Logger.toFile(logFile, { flag: "a" }));
|
|
44663
|
-
});
|
|
44664
|
-
const loadConfigProvider = (envFile$1) => {
|
|
44665
|
-
if (Option.isSome(envFile$1)) return ConfigProvider.fromDotEnv({ path: envFile$1.value }).pipe(Effect.map((dotEnv) => ConfigProvider.orElse(dotEnv, ConfigProvider.fromEnv())));
|
|
44666
|
-
return Effect.gen(function* () {
|
|
44667
|
-
if (!(yield* (yield* FileSystem.FileSystem).exists(".env"))) return ConfigProvider.fromEnv();
|
|
44668
|
-
return ConfigProvider.orElse(yield* ConfigProvider.fromDotEnv({ path: ".env" }), ConfigProvider.fromEnv());
|
|
44669
|
-
});
|
|
44670
|
-
};
|
|
44671
44679
|
const main = Argument.file("main", { mustExist: true }).pipe(Argument.withDescription("Main file to deploy, defaults to alchemy.run.ts"), Argument.withDefault("alchemy.run.ts"));
|
|
44672
44680
|
const deployCommand = Command.make("deploy", {
|
|
44673
44681
|
dryRun,
|
|
@@ -44706,7 +44714,7 @@ const execStack = Effect.fn(function* ({ main: main$1, stage: stage$1, envFile:
|
|
|
44706
44714
|
yield* Effect.gen(function* () {
|
|
44707
44715
|
const cli = yield* Cli;
|
|
44708
44716
|
const stack = yield* stackEffect;
|
|
44709
|
-
yield*
|
|
44717
|
+
yield* Effect.gen(function* () {
|
|
44710
44718
|
const updatePlan = yield* make(destroy ? {
|
|
44711
44719
|
...stack,
|
|
44712
44720
|
resources: {},
|
|
@@ -44721,7 +44729,7 @@ const execStack = Effect.fn(function* ({ main: main$1, stage: stage$1, envFile:
|
|
|
44721
44729
|
const outputs = yield* apply(updatePlan);
|
|
44722
44730
|
yield* Console.log(outputs);
|
|
44723
44731
|
}
|
|
44724
|
-
})
|
|
44732
|
+
}).pipe(Effect.provide(stack.services), provideFreshArtifactStore);
|
|
44725
44733
|
}).pipe(Effect.provide(Layer.provideMerge(alchemy, Layer.mergeAll(platform$1, Layer.succeed(Stage, stage$1)))), Effect.provideService(ConfigProvider.ConfigProvider, configProvider));
|
|
44726
44734
|
});
|
|
44727
44735
|
const resourceFilter = Flag.string("filter").pipe(Flag.withDescription("Comma-separated logical resource IDs (e.g. Api,Sandbox). Only those resources are included."), Flag.optional, Flag.map(Option.getOrUndefined));
|