1import { Compute } from "@/Prisma/Compute.ts";
2import { ReadBucket, ReadBucketBinding } from "@/Prisma/ReadBucket.ts";
3import * as Effect from "effect/Effect";
4import { HttpServerRequest } from "effect/http/HttpServerRequest";
5import * as HttpServerResponse from "effect/http/HttpServerResponse";
6import { TestBucket, TestProject } from "./bucket.ts";
7import { readRoutes } from "./read-routes.ts";
8
9/** Read-only access via the native Compute binding (`ReadBucketBinding`). */
10export default Compute(
11 "PrismaReadBucketCompute",
12 Effect.gen(function* () {
13 const project = yield* TestProject;
14 return {
15 project,
16 appName: "alchemy-bucket-binding-read",
17 main: import.meta.filename,
18 port: 8080,
19 timeoutSeconds: 240,
20 destroyOldDeployment: true,
21 };
22 }),
23 Effect.gen(function* () {
24 const bucket = yield* TestBucket;
25 const store = yield* ReadBucket(bucket);
26 return {
27 fetch: Effect.gen(function* () {
28 const request = yield* HttpServerRequest;
29 const url = new URL(request.url, "http://x");
30 const handled = yield* readRoutes(store, url);
31 return handled ?? HttpServerResponse.text("Not Found", { status: 404 });
32 }),
33 };
34 }).pipe(Effect.provide(ReadBucketBinding)),
35);