22 lines
674 B
TypeScript
22 lines
674 B
TypeScript
import { Config, Context, Effect, Layer } from "effect"
|
|
import type { Express } from "express"
|
|
|
|
|
|
export class ExpressApp extends Context.Tag("ExpressApp")<ExpressApp, Express>() {}
|
|
|
|
|
|
const importExpress = Effect.tryPromise({
|
|
try: () => import("express"),
|
|
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*() {
|
|
const app = (yield* importExpress).default()
|
|
app.set("trust proxy", yield* config.trustProxy || Config.succeed(false))
|
|
return app
|
|
}))
|