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