diff --git a/packages/server/src/rpc/RPCRoute.ts b/packages/server/src/rpc/RPCRoute.ts index b5d5ee9..e5e7593 100644 --- a/packages/server/src/rpc/RPCRoute.ts +++ b/packages/server/src/rpc/RPCRoute.ts @@ -3,7 +3,6 @@ import { Effect, Layer } from "effect" import { rpcHTTPRoot } from "../config" import { ExpressApp } from "../http/ExpressApp" import { TRPCContextCreator } from "../trpc/TRPCContextCreator" -import { contextCreatorExpressAdapter } from "../trpc/adapters" import { RPCRouter } from "./RPCRouter" @@ -14,7 +13,7 @@ export module RPCRoute { app.use(yield* rpcHTTPRoot, createExpressMiddleware({ router: yield* RPCRouter, - createContext: contextCreatorExpressAdapter(yield* TRPCContextCreator), + createContext: (yield* TRPCContextCreator).createExpressContext, }), ) })) diff --git a/packages/server/src/rpc/RPCWebSocketHandler.ts b/packages/server/src/rpc/RPCWebSocketHandler.ts index a8df918..52df8f8 100644 --- a/packages/server/src/rpc/RPCWebSocketHandler.ts +++ b/packages/server/src/rpc/RPCWebSocketHandler.ts @@ -2,7 +2,6 @@ import { applyWSSHandler } from "@trpc/server/adapters/ws" import { Effect, Layer } from "effect" import { WebSocketServer } from "../http/WebSocketServer" import { TRPCContextCreator } from "../trpc/TRPCContextCreator" -import { contextCreatorWSSAdapter } from "../trpc/adapters" import { RPCRouter } from "./RPCRouter" @@ -12,7 +11,7 @@ export module RPCWebSocketHandler { return applyWSSHandler({ wss: yield* WebSocketServer, router: yield* RPCRouter, - createContext: contextCreatorWSSAdapter(yield* TRPCContextCreator), + createContext: (yield* TRPCContextCreator).createWebSocketContext, }) }), diff --git a/packages/server/src/trpc/TRPCContextCreator.ts b/packages/server/src/trpc/TRPCContextCreator.ts index be86c1f..67df8c2 100644 --- a/packages/server/src/trpc/TRPCContextCreator.ts +++ b/packages/server/src/trpc/TRPCContextCreator.ts @@ -1,15 +1,19 @@ import { TRPCError } from "@trpc/server" +import type { CreateExpressContextOptions } from "@trpc/server/adapters/express" +import type { CreateWSSContextFnOptions } from "@trpc/server/adapters/ws" import { Context, Effect, Layer, Runtime } from "effect" import type { Services } from "../Services" -import type { TRPCContext, TRPCContextTransaction } from "./TRPCContext" +import { TRPCContextTransactionEnum, type TRPCContext, type TRPCContextTransaction } from "./TRPCContext" /** - * Provides a function that instantiates a fresh context for each tRPC procedure call + * Provides functions that instantiate a fresh context for each tRPC procedure call */ -export class TRPCContextCreator extends Context.Tag("TRPCContextCreator") TRPCContext ->() {} +export class TRPCContextCreator extends Context.Tag("TRPCContextCreator") TRPCContext + createExpressContext: (context: CreateExpressContextOptions) => TRPCContext + createWebSocketContext: (context: CreateWSSContextFnOptions) => TRPCContext +}>() {} export module TRPCContextCreator { export const Live = Layer.effect(TRPCContextCreator, Effect.gen(function*() { @@ -31,12 +35,19 @@ export module TRPCContextCreator { options, ) - return transaction => ({ + + const createContext = (transaction: TRPCContextTransaction) => ({ runtime, run, fork, transaction, }) + + return { + createContext, + createExpressContext: context => createContext(TRPCContextTransactionEnum.Express(context)), + createWebSocketContext: context => createContext(TRPCContextTransactionEnum.WebSocket(context)), + } })) } diff --git a/packages/server/src/trpc/adapters.ts b/packages/server/src/trpc/adapters.ts deleted file mode 100644 index 5540097..0000000 --- a/packages/server/src/trpc/adapters.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { type CreateExpressContextOptions } from "@trpc/server/adapters/express" -import type { CreateWSSContextFnOptions } from "@trpc/server/adapters/ws" -import type { Context } from "effect" -import { TRPCContextTransactionEnum } from "./TRPCContext" -import { TRPCContextCreator } from "./TRPCContextCreator" - - -export const contextCreatorExpressAdapter = ( - createContext: Context.Tag.Service -) => - (opts: CreateExpressContextOptions) => - createContext(TRPCContextTransactionEnum.Express(opts)) - -export const contextCreatorWSSAdapter = ( - createContext: Context.Tag.Service -) => - (opts: CreateWSSContextFnOptions) => - createContext(TRPCContextTransactionEnum.WebSocket(opts))