diff --git a/packages/server/src/entrypoint.bun.ts b/packages/server/src/entrypoint.bun.ts index e69de29..6624e09 100644 --- a/packages/server/src/entrypoint.bun.ts +++ b/packages/server/src/entrypoint.bun.ts @@ -0,0 +1,14 @@ +import { BunContext, BunHttpServer, BunRuntime } from "@effect/platform-bun" +import { Effect, Layer } from "effect" +import { ServerConfig } from "./config" +import { Server } from "./server" + + +Layer.launch(Server).pipe( + Effect.provide(ServerConfig.httpPort.pipe( + Effect.map(port => BunHttpServer.layer({ port })), + Layer.unwrapEffect, + )), + Effect.provide(BunContext.layer), + BunRuntime.runMain, +) diff --git a/packages/server/src/http.ts b/packages/server/src/http.ts index aac860c..6746a02 100644 --- a/packages/server/src/http.ts +++ b/packages/server/src/http.ts @@ -1,16 +1,27 @@ -import { HttpMiddleware, HttpRouter, HttpServer } from "@effect/platform" +import { HttpMiddleware, HttpRouter, HttpServer, HttpServerResponse, Path } from "@effect/platform" import { Effect, flow, Layer } from "effect" -import { ServerConfig } from "./config" -const router = HttpRouter.empty +const router = HttpRouter.empty.pipe( +) -export const HttpAppLive = ServerConfig.mode.pipe( - Effect.map(mode => HttpRouter.empty.pipe( - HttpServer.serve(flow( - HttpMiddleware.logger, - HttpMiddleware.xForwardedHeaders, - )), +export const HttpAppDevelopment = router.pipe( + HttpServer.serve(flow( + HttpMiddleware.logger, + HttpMiddleware.xForwardedHeaders, + )), + HttpServer.withLogAddress, +) + +export const HttpAppProduction = Effect.all([ + Path.Path, + Effect.succeed(import.meta.resolve("@website/webapp")), +]).pipe( + Effect.map(([path, webappDist]) => router.pipe( + HttpRouter.all("/", HttpServerResponse.file(path.join(webappDist, "index.html"))), + HttpRouter.all("/assets", HttpServerResponse.file(path.join(webappDist, "assets"))), + + HttpServer.serve(HttpMiddleware.xForwardedHeaders), HttpServer.withLogAddress, )), diff --git a/packages/server/src/server.ts b/packages/server/src/server.ts index 957c58f..496ac44 100644 --- a/packages/server/src/server.ts +++ b/packages/server/src/server.ts @@ -1,14 +1,14 @@ -import { Effect, flow, Layer, Match } from "effect" +import { Effect, flow, Layer, Logger, Match } from "effect" import { ServerConfig } from "./config" -import { HttpAppLive } from "./http" +import { HttpAppDevelopment, HttpAppProduction } from "./http" const ServerDevelopment = Layer.empty.pipe( - Layer.provideMerge(HttpAppLive), + Layer.provideMerge(HttpAppDevelopment), ) const ServerProduction = Layer.empty.pipe( - Layer.provideMerge(HttpAppLive), + Layer.provideMerge(HttpAppProduction), ) export const Server = ServerConfig.mode.pipe( @@ -20,4 +20,5 @@ export const Server = ServerConfig.mode.pipe( )), Layer.unwrapEffect, + Layer.provideMerge(Logger.pretty), ) diff --git a/packages/webapp/package.json b/packages/webapp/package.json index ee56b90..50694eb 100644 --- a/packages/webapp/package.json +++ b/packages/webapp/package.json @@ -2,6 +2,7 @@ "name": "@website/webapp", "private": true, "type": "module", + "module": "./dist", "scripts": { "dev": "vite", "build": "tsc -b && vite build",