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, +)