27 lines
997 B
TypeScript
27 lines
997 B
TypeScript
import { Context, Effect, Layer } from "effect"
|
|
import type { ImportError } from "../ImportError"
|
|
import { type TRPCContext } from "./TRPCContext"
|
|
import { importTRPCServer } from "./importTRPCServer"
|
|
|
|
|
|
const createTRPC = <R>() => importTRPCServer.pipe(Effect.map(({ initTRPC }) =>
|
|
initTRPC.context<TRPCContext<R>>().create()
|
|
))
|
|
|
|
export const make = <R>(): {
|
|
readonly TRPCBuilder: Context.TagClass<any, "@thilalib/TRPC/TRPCBuilder", Effect.Effect.Success<ReturnType<typeof createTRPC<R>>>>
|
|
readonly TRPCBuilderLive: Layer.Layer<
|
|
InstanceType<Context.TagClass<any, "@thilalib/TRPC/TRPCBuilder", Effect.Effect.Success<ReturnType<typeof createTRPC<R>>>>>,
|
|
ImportError,
|
|
never
|
|
>
|
|
} => {
|
|
class TRPCBuilder extends Context.Tag("@thilalib/TRPC/TRPCBuilder")<TRPCBuilder,
|
|
Effect.Effect.Success<ReturnType<typeof createTRPC<R>>>
|
|
>() {}
|
|
|
|
const TRPCBuilderLive = Layer.effect(TRPCBuilder, createTRPC())
|
|
|
|
return { TRPCBuilder, TRPCBuilderLive }
|
|
}
|