diff --git a/src/Layers/trpc/TRPCBuilder.ts b/src/Layers/trpc/TRPCBuilder.ts new file mode 100644 index 0000000..d8472f5 --- /dev/null +++ b/src/Layers/trpc/TRPCBuilder.ts @@ -0,0 +1,18 @@ +import { initTRPC } from "@trpc/server" +import { Context, Layer } from "effect" +import { type TRPCContext } from "./TRPCContext" + + +const createTRPC = () => initTRPC.context>().create() + +export class TRPCUnknownBuilder extends Context.Tag("@thilalib/TRPC/TRPCBuilder")> +>() {} + + +export const make = () => { + class TRPCBuilder extends Context.Tag("@thilalib/TRPC/TRPCBuilder")>>() {} + const TRPCBuilderLive = Layer.sync(TRPCBuilder, createTRPC) + + return { TRPCBuilder, TRPCBuilderLive } +} diff --git a/src/Layers/trpc/TRPCContextCreator.ts b/src/Layers/trpc/TRPCContextCreator.ts index 5115929..49425c2 100644 --- a/src/Layers/trpc/TRPCContextCreator.ts +++ b/src/Layers/trpc/TRPCContextCreator.ts @@ -5,17 +5,21 @@ import { createTRCPErrorMapper } from "./createTRCPErrorMapper" import { TRPCContextTransactionEnum, type TRPCContext, type TRPCContextTransaction } from "./TRPCContext" -export { TRPCErrorCause } from "./createTRCPErrorMapper" -export { TRPCContextTransactionEnum } from "./TRPCContext" -export type { TRPCContext, TRPCContextTransaction } from "./TRPCContext" +export interface TRPCContextCreatorService { + readonly createContext: (transaction: TRPCContextTransaction) => TRPCContext + readonly createExpressContext: (context: CreateExpressContextOptions) => TRPCContext + readonly createWebSocketContext: (context: CreateWSSContextFnOptions) => TRPCContext +} + +export class TRPCUnknownContextCreator extends Context.Tag("@thilalib/TRPC/TRPCContextCreator") +>() {} export const make = () => { - class TRPCContextCreator extends Context.Tag("TRPCContextCreator") TRPCContext - readonly createExpressContext: (context: CreateExpressContextOptions) => TRPCContext - readonly createWebSocketContext: (context: CreateWSSContextFnOptions) => TRPCContext - }>() {} + class TRPCContextCreator extends Context.Tag("@thilalib/TRPC/TRPCContextCreator") + >() {} const TRPCContextCreatorLive = Layer.effect(TRPCContextCreator, Effect.gen(function*() { const runtime = yield* Effect.runtime() @@ -37,14 +41,12 @@ export const make = () => { options, ) - const createContext = (transaction: TRPCContextTransaction) => ({ runtime, run, fork, transaction, }) - const createExpressContext = (context: CreateExpressContextOptions) => createContext(TRPCContextTransactionEnum.Express(context)) const createWebSocketContext = (context: CreateWSSContextFnOptions) => createContext(TRPCContextTransactionEnum.WebSocket(context)) diff --git a/src/Layers/trpc/TRPCRouter.ts b/src/Layers/trpc/TRPCRouter.ts new file mode 100644 index 0000000..5ab2263 --- /dev/null +++ b/src/Layers/trpc/TRPCRouter.ts @@ -0,0 +1,18 @@ +import type { AnyRouterDef, Router } from "@trpc/server" +import { Context, Effect, Layer } from "effect" + + +export class TRPCAnyRouter extends Context.Tag("@thilalib/TRCP/TRPCRouter") +>() {} + + +export const make = < + A extends Router, + E, R, +>(router: Effect.Effect) => { + class TRPCRouter extends Context.Tag("@thilalib/TRCP/TRPCRouter")() {} + const TRPCRouterLive = Layer.effect(TRPCRouter, router) + + return { TRPCRouter, TRPCRouterLive } +} diff --git a/src/Layers/trpc/createTRCPErrorMapper.ts b/src/Layers/trpc/createTRCPErrorMapper.ts index 405d636..5a5953c 100644 --- a/src/Layers/trpc/createTRCPErrorMapper.ts +++ b/src/Layers/trpc/createTRCPErrorMapper.ts @@ -60,7 +60,7 @@ export const createTRCPErrorMapper = importTRPCServer.pipe(Effect.map(({ TRPCErr ) )) -export class TRPCErrorCause extends Error { +class TRPCErrorCause extends Error { constructor(readonly cause: Cause.Cause) { super() } diff --git a/src/Layers/trpc/index.ts b/src/Layers/trpc/index.ts index b34aba4..b3b8299 100644 --- a/src/Layers/trpc/index.ts +++ b/src/Layers/trpc/index.ts @@ -1 +1,4 @@ +export * as TRPCBuilder from "./TRPCBuilder" +export * as TRPCContext from "./TRPCContext" export * as TRPCContextCreator from "./TRPCContextCreator" +export * as TRPCRouter from "./TRPCRouter"