1import * as Cloudflare from "@/Cloudflare/index.ts";
2import * as Effect from "effect/Effect";
3import { TestDatabase } from "./database.ts";
4import { d1Routes } from "./routes.ts";
5
6/**
7 * Effect-native Worker fixture. Binds the shared {@link TestDatabase} via
8 * `Cloudflare.D1.QueryDatabase(...)` during Init (with `QueryDatabaseBinding`
9 * provided to the worker effect) and delegates to the shared
10 * {@link d1Routes}, stamping rows with `style = "effect"`.
11 */
12export default class D1EffectWorker extends Cloudflare.Worker<D1EffectWorker>()(
13 "D1EffectWorker",
14 {
15 main: import.meta.url,
16 },
17 Effect.gen(function* () {
18 const database = yield* TestDatabase;
19 const db = yield* Cloudflare.D1.QueryDatabase(database);
20 return {
21 fetch: d1Routes(db, "effect"),
22 };
23 }).pipe(Effect.provide(Cloudflare.D1.QueryDatabaseBinding)),
24) {}