44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
import { Config, Context, Effect, Layer } from "effect"
|
|
import * as TRPC from "."
|
|
import { ExpressApp, ExpressNodeHTTPServer } from "../express"
|
|
|
|
|
|
type Services = never
|
|
|
|
const { TRPCContextCreator, TRPCContextCreatorLive } = TRPC.TRPCContextCreator.make<Services>()
|
|
const { TRPCBuilder, TRPCBuilderLive } = TRPC.TRPCBuilder.make<Services>()
|
|
|
|
|
|
const router = TRPCBuilder.pipe(Effect.map(t => t.router({
|
|
ping: t.procedure.query(({ ctx }) => ctx.run(
|
|
Effect.succeed("pong")
|
|
)),
|
|
})))
|
|
|
|
const { TRPCRouter, TRPCRouterLive } = TRPC.TRPCRouter.make(router)
|
|
|
|
|
|
const ServerLive = Layer.empty.pipe(
|
|
Layer.provideMerge(TRPC.TRPCExpressRoute.TRPCExpressRouteLive(TRPCRouter, {
|
|
root: Config.succeed("/rpc")
|
|
})),
|
|
|
|
Layer.provideMerge(TRPCRouterLive),
|
|
Layer.provideMerge(TRPCBuilderLive),
|
|
Layer.provideMerge(TRPCContextCreatorLive),
|
|
|
|
Layer.provideMerge(ExpressNodeHTTPServer.ExpressNodeHTTPServerLive({
|
|
port: Config.succeed(3000)
|
|
})),
|
|
Layer.provideMerge(ExpressApp.ExpressAppLive())
|
|
)
|
|
|
|
await Effect.gen(function*() {
|
|
// yield* TRPCRouter
|
|
|
|
return yield* Layer.launch(ServerLive)
|
|
}).pipe(
|
|
Effect.scoped,
|
|
Effect.runPromise,
|
|
)
|