import type { CreateExpressContextOptions } from "@trpc/server/adapters/express" import { Context, Effect, Layer, Runtime } from "effect" import type { Services } from "../Services" import type { TRPCContext } from "./TRPCContext" /** * Provides a function that instantiates a fresh context for each tRPC procedure call */ export class TRPCContextCreator extends Context.Tag("TRPCContextCreator") TRPCContext >() {} export module TRPCContextCreator { export const Live = Layer.effect(TRPCContextCreator, Effect.gen(function*() { const run = yield* Effect.runtime().pipe( Effect.map(Runtime.runPromise) ) return ({ req }) => ({ req, run, }) })) }