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() const { TRPCBuilder, TRPCBuilderLive } = TRPC.TRPCBuilder.make() 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, )