0.1.17 #18

Merged
Thilawyn merged 37 commits from next into master 2024-09-07 20:56:30 +02:00
3 changed files with 35 additions and 14 deletions
Showing only changes of commit 3879efa44e - Show all commits

View File

@@ -10,9 +10,11 @@ const importExpress = Effect.tryPromise({
catch: cause => new Error("Could not import 'express'. Make sure it is installed.", { cause }),
})
export const ExpressAppLive = (config: {
readonly trustProxy?: Config.Config<boolean>
}) => Layer.effect(ExpressApp, Effect.gen(function*() {
export const ExpressAppLive = (
config: {
readonly trustProxy?: Config.Config<boolean>
} = {}
) => Layer.effect(ExpressApp, Effect.gen(function*() {
const app = (yield* importExpress).default()
app.set("trust proxy", yield* config.trustProxy || Config.succeed(false))
return app

View File

@@ -18,17 +18,19 @@ const serverListeningMessage = Match.type<AddressInfo | string | null>().pipe(
Match.orElse(v => `HTTP server listening on ${ v.address }:${ v.port }`),
)
export const ExpressNodeHTTPServerLive = (config: {
readonly backlog?: Config.Config<number | undefined>
readonly exclusive?: Config.Config<boolean | undefined>
readonly host?: Config.Config<string | undefined>
readonly ipv6Only?: Config.Config<boolean | undefined>
readonly path?: Config.Config<string | undefined>
readonly port?: Config.Config<number | undefined>
readonly readableAll?: Config.Config<boolean | undefined>
readonly signal?: AbortSignal
readonly writableAll?: Config.Config<boolean | undefined>
}) => Layer.effect(ExpressNodeHTTPServer, Effect.acquireRelease(
export const ExpressNodeHTTPServerLive = (
config: {
readonly backlog?: Config.Config<number | undefined>
readonly exclusive?: Config.Config<boolean | undefined>
readonly host?: Config.Config<string | undefined>
readonly ipv6Only?: Config.Config<boolean | undefined>
readonly path?: Config.Config<string | undefined>
readonly port?: Config.Config<number | undefined>
readonly readableAll?: Config.Config<boolean | undefined>
readonly signal?: AbortSignal
readonly writableAll?: Config.Config<boolean | undefined>
} = {}
) => Layer.effect(ExpressNodeHTTPServer, Effect.acquireRelease(
Effect.gen(function*() {
const app = yield* ExpressApp
const http = yield* importNodeHTTP

View File

@@ -0,0 +1,17 @@
import { Config, Effect, Layer } from "effect"
import { ExpressAppLive } from "./ExpressApp"
import { ExpressNodeHTTPServerLive } from "./ExpressNodeHTTPServer"
const AppLive = ExpressAppLive()
const HTTPServerLive = ExpressNodeHTTPServerLive()
const ServerLive = Layer.empty.pipe(
Layer.provideMerge(HTTPServerLive),
Layer.provideMerge(AppLive),
)
Layer.launch(ServerLive).pipe(
Effect.scoped,
Effect.runPromise,
)