1import * as Cloudflare from "@/Cloudflare";
2import * as Alchemy from "@/index";
3import * as Effect from "effect/Effect";
4import * as pathe from "pathe";
5import ImagesEffectWorker from "./effect-worker.ts";
6
7export const AsyncWorker = Cloudflare.Worker("ImagesAsyncWorker", {
8 main: pathe.resolve(import.meta.dirname, "async-worker.ts"),
9 env: {
10 MEDIA: Cloudflare.Images.Images("MEDIA"),
11 },
12});
13
14export type AsyncWorkerEnv = Cloudflare.InferEnv<typeof AsyncWorker>;
15
16export default Alchemy.Stack(
17 "ImagesBindingStack",
18 {
19 providers: Cloudflare.providers(),
20 state: Cloudflare.state(),
21 },
22 Effect.gen(function* () {
23 const asyncWorker = yield* AsyncWorker;
24 const effectWorker = yield* ImagesEffectWorker;
25
26 return {
27 asyncWorkerUrl: asyncWorker.url.as<string>(),
28 effectWorkerUrl: effectWorker.url.as<string>(),
29 };
30 }),
31);