26 lines
801 B
TypeScript
26 lines
801 B
TypeScript
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")<TRPCContextCreator,
|
|
(opts: CreateExpressContextOptions) => TRPCContext
|
|
>() {}
|
|
|
|
export module TRPCContextCreator {
|
|
export const Live = Layer.effect(TRPCContextCreator, Effect.gen(function*() {
|
|
const run = yield* Effect.runtime<Services>().pipe(
|
|
Effect.map(Runtime.runPromise)
|
|
)
|
|
|
|
return ({ req }) => ({
|
|
req,
|
|
run,
|
|
})
|
|
}))
|
|
}
|