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