1import * as FileSystem from "effect/FileSystem";
2import * as Layer from "effect/Layer";
3import * as Path from "effect/Path";
4import * as Etag from "effect/http/Etag";
5import * as HttpPlatform from "effect/http/HttpPlatform";
6import * as HttpRouter from "effect/http/HttpRouter";
7import * as HttpApiBuilder from "effect/http-api/HttpApiBuilder";
8import { BackendClient } from "./BackendClient";
9import { FrontendApi } from "./NextApi";
10import { FrontendHandlers } from "./NextHandlers";
11
12const platformLayer = Layer.mergeAll(
13 Etag.layer,
14 HttpPlatform.layer.pipe(Layer.provide(FileSystem.layerNoop({}))),
15 FileSystem.layerNoop({}),
16 Path.layer,
17);
18
19const FrontendLive = HttpApiBuilder.layer(FrontendApi).pipe(
20 Layer.provide(FrontendHandlers.pipe(Layer.provide(BackendClient.Default))),
21 Layer.provide(platformLayer),
22);
23
24const httpHandler = HttpRouter.toWebHandler(FrontendLive, {
25 disableLogger: true,
26});
27
28export const handleApiRequest = (request: Request) =>
29 httpHandler.handler(request);