From c0df42c9a97ad549077b269e8f237cbec7460bc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 12 Sep 2025 00:26:32 +0200 Subject: [PATCH] Work --- packages/server/package.json | 2 +- packages/server/src/config/ServerConfig.ts | 10 ++++++++++ packages/server/src/config/index.ts | 1 + packages/server/src/entrypoint.bun.ts | 0 packages/server/src/http.ts | 18 +++++++++++++++++ packages/server/src/index.ts | 1 - packages/server/src/server.ts | 23 ++++++++++++++++++++++ 7 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 packages/server/src/config/ServerConfig.ts create mode 100644 packages/server/src/config/index.ts create mode 100644 packages/server/src/entrypoint.bun.ts create mode 100644 packages/server/src/http.ts delete mode 100644 packages/server/src/index.ts create mode 100644 packages/server/src/server.ts diff --git a/packages/server/package.json b/packages/server/package.json index fd07fc5..046646a 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -2,7 +2,7 @@ "name": "@website/server", "private": true, "type": "module", - "module": "./src/index.ts", + "module": "./src/entrypoint.bun.ts", "dependencies": { "@effect/platform": "^0.90.8", "@effect/platform-bun": "^0.79.0", diff --git a/packages/server/src/config/ServerConfig.ts b/packages/server/src/config/ServerConfig.ts new file mode 100644 index 0000000..e5c80cb --- /dev/null +++ b/packages/server/src/config/ServerConfig.ts @@ -0,0 +1,10 @@ +import { Config, Schema } from "effect" + + +export const mode = Schema.Config("NODE_ENV", + Schema.compose(Schema.String, Schema.Literal("development", "production")) +).pipe( + Config.withDefault("development") +) + +export const httpPort = Config.withDefault(Config.port("SERVER_HTTP_PORT"), 80) diff --git a/packages/server/src/config/index.ts b/packages/server/src/config/index.ts new file mode 100644 index 0000000..eef3151 --- /dev/null +++ b/packages/server/src/config/index.ts @@ -0,0 +1 @@ +export * as ServerConfig from "./ServerConfig" diff --git a/packages/server/src/entrypoint.bun.ts b/packages/server/src/entrypoint.bun.ts new file mode 100644 index 0000000..e69de29 diff --git a/packages/server/src/http.ts b/packages/server/src/http.ts new file mode 100644 index 0000000..aac860c --- /dev/null +++ b/packages/server/src/http.ts @@ -0,0 +1,18 @@ +import { HttpMiddleware, HttpRouter, HttpServer } from "@effect/platform" +import { Effect, flow, Layer } from "effect" +import { ServerConfig } from "./config" + + +const router = HttpRouter.empty + +export const HttpAppLive = ServerConfig.mode.pipe( + Effect.map(mode => HttpRouter.empty.pipe( + HttpServer.serve(flow( + HttpMiddleware.logger, + HttpMiddleware.xForwardedHeaders, + )), + HttpServer.withLogAddress, + )), + + Layer.unwrapEffect, +) diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts deleted file mode 100644 index f67b2c6..0000000 --- a/packages/server/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -console.log("Hello via Bun!"); \ No newline at end of file diff --git a/packages/server/src/server.ts b/packages/server/src/server.ts new file mode 100644 index 0000000..957c58f --- /dev/null +++ b/packages/server/src/server.ts @@ -0,0 +1,23 @@ +import { Effect, flow, Layer, Match } from "effect" +import { ServerConfig } from "./config" +import { HttpAppLive } from "./http" + + +const ServerDevelopment = Layer.empty.pipe( + Layer.provideMerge(HttpAppLive), +) + +const ServerProduction = Layer.empty.pipe( + Layer.provideMerge(HttpAppLive), +) + +export const Server = ServerConfig.mode.pipe( + Effect.map(flow( + Match.value, + Match.when("development", () => ServerDevelopment), + Match.when("production", () => ServerProduction), + Match.exhaustive, + )), + + Layer.unwrapEffect, +)