1import * as Cloudflare from "@/Cloudflare/index.ts";
2import * as Effect from "effect/Effect";
3import { HttpServerRequest } from "effect/http/HttpServerRequest";
4import * as HttpServerResponse from "effect/http/HttpServerResponse";
5import { TestNamespace } from "./namespace.ts";
6import { writeRoutes } from "./write-routes.ts";
7
8/** Write-only access via the native Worker binding (`WriteNamespaceBinding`). */
9export default class KVWriteBindingWorker extends Cloudflare.Worker<KVWriteBindingWorker>()(
10 "KVWriteBindingWorker",
11 { main: import.meta.url },
12 Effect.gen(function* () {
13 const namespace = yield* TestNamespace;
14 const kv = yield* Cloudflare.KV.WriteNamespace(namespace);
15 return {
16 fetch: Effect.gen(function* () {
17 const request = yield* HttpServerRequest;
18 const url = new URL(request.url, "http://x");
19 const handled = yield* writeRoutes(kv, request, url);
20 return handled ?? HttpServerResponse.text("Not Found", { status: 404 });
21 }),
22 };
23 }).pipe(Effect.provide(Cloudflare.KV.WriteNamespaceBinding)),
24) {}