11import * as Net from "node:net" ;
22import * as Http from "node:http" ;
33
4- import * as NodeHttpClient from "@effect/platform-node/NodeHttpClient" ;
54import * as NodeHttpServer from "@effect/platform-node/NodeHttpServer" ;
65import * as NodeServices from "@effect/platform-node/NodeServices" ;
6+ import * as BunServices from "@effect/platform-bun/BunServices" ;
7+ import * as BunHttpServer from "@effect/platform-bun/BunHttpServer" ;
78import { Effect , Layer , Path } from "effect" ;
8- import { HttpRouter , HttpServer } from "effect/unstable/http" ;
9+ import { FetchHttpClient , HttpRouter , HttpServer } from "effect/unstable/http" ;
910
10- import { ServerConfig } from "./config" ;
11+ import { ServerConfig , ServerConfigShape } from "./config" ;
1112import { attachmentsRouteLayer , healthRouteLayer , staticAndDevRouteLayer } from "./http" ;
1213import { fixPath } from "./os-jank" ;
1314import { websocketRpcRouteLayer } from "./ws" ;
@@ -133,6 +134,20 @@ const runtimeServicesLayer = Layer.empty.pipe(
133134 Layer . provideMerge ( ServerLifecycleEventsLive ) ,
134135) ;
135136
137+ const HttpServerLive =
138+ typeof Bun !== "undefined"
139+ ? ( listenOptions : ServerConfigShape ) =>
140+ BunHttpServer . layer ( {
141+ port : listenOptions . port ,
142+ ...( listenOptions . host ? { hostname : listenOptions . host } : { } ) ,
143+ } )
144+ : ( listenOptions : ServerConfigShape ) =>
145+ NodeHttpServer . layer ( Http . createServer , {
146+ host : listenOptions . host ,
147+ port : listenOptions . port ,
148+ } ) ;
149+ const ServicesLive = typeof Bun !== "undefined" ? BunServices . layer : NodeServices . layer ;
150+
136151export const makeRoutesLayer = Layer . mergeAll (
137152 healthRouteLayer ,
138153 attachmentsRouteLayer ,
@@ -143,10 +158,9 @@ export const makeRoutesLayer = Layer.mergeAll(
143158export const makeServerLayer = Layer . unwrap (
144159 Effect . gen ( function * ( ) {
145160 const config = yield * ServerConfig ;
146- const listenOptions : Net . ListenOptions = config . host
147- ? { host : config . host , port : config . port }
148- : { port : config . port } ;
149- yield * Effect . sync ( fixPath ) ;
161+
162+ fixPath ( ) ;
163+
150164 const httpListeningLayer = Layer . effectDiscard (
151165 Effect . gen ( function * ( ) {
152166 yield * HttpServer . HttpServer ;
@@ -164,10 +178,10 @@ export const makeServerLayer = Layer.unwrap(
164178
165179 return serverApplicationLayer . pipe (
166180 Layer . provideMerge ( runtimeServicesLayer ) ,
167- Layer . provideMerge ( NodeHttpClient . layerUndici ) ,
168- Layer . provideMerge ( NodeServices . layer ) ,
169- Layer . provideMerge ( NodeHttpServer . layer ( Http . createServer , listenOptions ) ) ,
170- Layer . provide ( ServerLoggerLive . pipe ( Layer . provide ( NodeServices . layer ) ) ) ,
181+ Layer . provideMerge ( HttpServerLive ( config ) ) ,
182+ Layer . provide ( ServerLoggerLive ) ,
183+ Layer . provideMerge ( FetchHttpClient . layer ) ,
184+ Layer . provideMerge ( ServicesLive ) ,
171185 ) ;
172186 } ) ,
173187) ;
0 commit comments