From ec8c54661dfdbe2044057193030cb368b358c20b Mon Sep 17 00:00:00 2001 From: Tim Date: Tue, 22 Oct 2024 11:45:04 +1300 Subject: [PATCH] add HttpServer.layerContext to platform-node/bun --- .changeset/three-horses-learn.md | 7 +++++++ packages/platform-bun/src/BunHttpServer.ts | 16 ++++++++++++++++ packages/platform-bun/src/internal/httpServer.ts | 15 +++++++++------ packages/platform-node/src/NodeHttpServer.ts | 16 ++++++++++++++++ .../platform-node/src/internal/httpServer.ts | 11 ++++++++--- packages/platform/src/HttpApiBuilder.ts | 2 ++ 6 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 .changeset/three-horses-learn.md diff --git a/.changeset/three-horses-learn.md b/.changeset/three-horses-learn.md new file mode 100644 index 0000000000..67155e546d --- /dev/null +++ b/.changeset/three-horses-learn.md @@ -0,0 +1,7 @@ +--- +"@effect/platform-node": patch +"@effect/platform-bun": patch +"@effect/platform": patch +--- + +add HttpServer.layerContext to platform-node/bun diff --git a/packages/platform-bun/src/BunHttpServer.ts b/packages/platform-bun/src/BunHttpServer.ts index 5f55e9db6d..5b76f0a7aa 100644 --- a/packages/platform-bun/src/BunHttpServer.ts +++ b/packages/platform-bun/src/BunHttpServer.ts @@ -64,3 +64,19 @@ export const layerConfig: ( Server.HttpServer | Platform.HttpPlatform | Etag.Generator | BunContext.BunContext, ConfigError.ConfigError > = internal.layerConfig + +/** + * A Layer providing the `HttpPlatform`, `FileSystem`, `Etag.Generator`, and `Path` + * services. + * + * The `FileSystem` service is a no-op implementation, so this layer is only + * useful for platforms that have no file system. + * + * @since 1.0.0 + * @category layers + */ +export const layerContext: Layer.Layer< + | Platform.HttpPlatform + | Etag.Generator + | BunContext.BunContext +> = internal.layerContext diff --git a/packages/platform-bun/src/internal/httpServer.ts b/packages/platform-bun/src/internal/httpServer.ts index eb10b0b9d7..780d3983e5 100644 --- a/packages/platform-bun/src/internal/httpServer.ts +++ b/packages/platform-bun/src/internal/httpServer.ts @@ -173,9 +173,7 @@ export const layer = ( ) => Layer.mergeAll( Layer.scoped(Server.HttpServer, make(options)), - Platform.layer, - Etag.layerWeak, - BunContext.layer + layerContext ) /** @internal */ @@ -192,11 +190,16 @@ export const layerConfig = ( ) => Layer.mergeAll( Layer.scoped(Server.HttpServer, Effect.flatMap(Config.unwrap(options), make)), - Platform.layer, - Etag.layerWeak, - BunContext.layer + layerContext ) +/** @internal */ +export const layerContext = Layer.mergeAll( + Platform.layer, + Etag.layerWeak, + BunContext.layer +) + interface WebSocketContext { readonly deferred: Deferred.Deferred> readonly closeDeferred: Deferred.Deferred diff --git a/packages/platform-node/src/NodeHttpServer.ts b/packages/platform-node/src/NodeHttpServer.ts index efac775fa0..5547a9fa99 100644 --- a/packages/platform-node/src/NodeHttpServer.ts +++ b/packages/platform-node/src/NodeHttpServer.ts @@ -112,3 +112,19 @@ export const layerTest: Layer.Layer< | NodeContext.NodeContext, ServeError > = internal.layerTest + +/** + * A Layer providing the `HttpPlatform`, `FileSystem`, `Etag.Generator`, and `Path` + * services. + * + * The `FileSystem` service is a no-op implementation, so this layer is only + * useful for platforms that have no file system. + * + * @since 1.0.0 + * @category layers + */ +export const layerContext: Layer.Layer< + | Platform.HttpPlatform + | Etag.Generator + | NodeContext.NodeContext +> = internal.layerContext diff --git a/packages/platform-node/src/internal/httpServer.ts b/packages/platform-node/src/internal/httpServer.ts index 337278b744..367cebf21d 100644 --- a/packages/platform-node/src/internal/httpServer.ts +++ b/packages/platform-node/src/internal/httpServer.ts @@ -328,11 +328,16 @@ export const layer = ( ) => Layer.mergeAll( Layer.scoped(Server.HttpServer, make(evaluate, options)), - internalPlatform.layer, - Etag.layerWeak, - NodeContext.layer + layerContext ) +/** @internal */ +export const layerContext = Layer.mergeAll( + internalPlatform.layer, + Etag.layerWeak, + NodeContext.layer +) + /** @internal */ export const layerTest = Server.layerTestClient.pipe( Layer.provide(NodeHttpClient.layerWithoutAgent), diff --git a/packages/platform/src/HttpApiBuilder.ts b/packages/platform/src/HttpApiBuilder.ts index f8d6d798fd..303110841f 100644 --- a/packages/platform/src/HttpApiBuilder.ts +++ b/packages/platform/src/HttpApiBuilder.ts @@ -137,6 +137,8 @@ export const httpApp: Effect.Effect< * const { dispose, handler } = HttpApiBuilder.toWebHandler( * Layer.mergeAll( * MyApiLive, + * // you could also use NodeHttpServer.layerContext, depending on your + * // server's platform * HttpServer.layerContext * ) * )