@@ -1,18 +1,18 @@
|
||||
import { initTRPC } from "@trpc/server"
|
||||
import { Context, Layer } from "effect"
|
||||
import { Context, Effect, Layer } from "effect"
|
||||
import { type TRPCContext } from "./TRPCContext"
|
||||
import { importTRPCServer } from "./importTRPCServer"
|
||||
|
||||
|
||||
const createTRPC = <R>() => initTRPC.context<TRPCContext<R>>().create()
|
||||
|
||||
export class TRPCUnknownBuilder extends Context.Tag("@thilalib/TRPC/TRPCBuilder")<TRPCUnknownBuilder,
|
||||
ReturnType<typeof createTRPC<unknown>>
|
||||
>() {}
|
||||
|
||||
const createTRPC = <R>() => importTRPCServer.pipe(Effect.map(({ initTRPC }) =>
|
||||
initTRPC.context<TRPCContext<R>>().create()
|
||||
))
|
||||
|
||||
export const make = <R>() => {
|
||||
class TRPCBuilder extends Context.Tag("@thilalib/TRPC/TRPCBuilder")<TRPCBuilder, ReturnType<typeof createTRPC<R>>>() {}
|
||||
const TRPCBuilderLive = Layer.sync(TRPCBuilder, createTRPC)
|
||||
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 }
|
||||
}
|
||||
|
||||
@@ -1,9 +1,17 @@
|
||||
import { Config, Effect, Layer } from "effect"
|
||||
import * as TRPC from "."
|
||||
import { JSONWebToken } from ".."
|
||||
import { ExpressApp, ExpressNodeHTTPServer } from "../express"
|
||||
|
||||
|
||||
type Services = never
|
||||
// Context available to the router procedures
|
||||
type Services =
|
||||
| JSONWebToken.JSONWebToken
|
||||
|
||||
const ServicesLive = Layer.empty.pipe(
|
||||
Layer.provideMerge(JSONWebToken.JSONWebTokenLive)
|
||||
)
|
||||
|
||||
|
||||
const { TRPCContextCreator, TRPCContextCreatorLive } = TRPC.TRPCContextCreator.make<Services>()
|
||||
const { TRPCBuilder, TRPCBuilderLive } = TRPC.TRPCBuilder.make<Services>()
|
||||
@@ -14,9 +22,9 @@ const router = TRPCBuilder.pipe(Effect.map(t => t.router({
|
||||
Effect.succeed("pong")
|
||||
)),
|
||||
})))
|
||||
|
||||
const { TRPCRouter, TRPCRouterLive } = TRPC.TRPCRouter.make(router)
|
||||
|
||||
|
||||
const { TRPCWebSocketServer, TRPCWebSocketServerLive } = TRPC.TRPCWebSocketServer.make(TRPCRouter)
|
||||
|
||||
|
||||
@@ -43,6 +51,7 @@ await Effect.gen(function*() {
|
||||
|
||||
return yield* Layer.launch(ServerLive)
|
||||
}).pipe(
|
||||
Effect.provide(ServicesLive),
|
||||
Effect.scoped,
|
||||
Effect.runPromise,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user