From cd0e9e449a14642049f065840d0697419726d841 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 13 Sep 2025 01:59:51 +0200 Subject: [PATCH] serveWebapp --- packages/server/src/http.ts | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/packages/server/src/http.ts b/packages/server/src/http.ts index 59936f6..b0c5d66 100644 --- a/packages/server/src/http.ts +++ b/packages/server/src/http.ts @@ -14,34 +14,26 @@ export const HttpAppDevelopment = router.pipe( ) -const serveWebappDist = Effect.fnUntraced(function*(file: string) { +const serveWebapp = HttpMiddleware.make(() => Effect.gen(function*() { const path = yield* Path.Path const fs = yield* FileSystem.FileSystem - const source = path.join( - yield* path.fromFileUrl(new URL(".", import.meta.resolve("@website/webapp"))), - "dist", file, - ) - const exists = yield* fs.stat(source).pipe( + const req = yield* HttpServerRequest.HttpServerRequest + + const dist = path.join(yield* path.fromFileUrl(new URL(".", import.meta.resolve("@website/webapp"))), "dist") + const isValid = yield* fs.stat(path.join(dist, req.url)).pipe( Effect.andThen(stat => stat.type === "File"), Effect.catchAll(() => Effect.succeed(false)), ) - return exists - ? yield* HttpServerResponse.setHeader( - yield* HttpServerResponse.file(source), - "Cache-Control", - `public, max-age=${Duration.toSeconds("365 days")}, immutable` - ) - : yield* HttpServerResponse.setStatus(HttpServerResponse.empty(), 404) -}) + return yield* HttpServerResponse.setHeader( + yield* HttpServerResponse.file(path.join(dist, isValid ? req.url : "index.html")), + "Cache-Control", + `public, max-age=${Duration.toSeconds("365 days")}, immutable` + ) +})) export const HttpAppProduction = router.pipe( - HttpRouter.all("/assets/*", Effect.andThen( - HttpServerRequest.HttpServerRequest, - req => serveWebappDist(req.url), - )), - HttpRouter.all("*", serveWebappDist("index.html")), - + serveWebapp, HttpServer.serve(flow( HttpMiddleware.logger, HttpMiddleware.xForwardedHeaders,