From 329e38afe04412815c5247b780111c6aa058faf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Fri, 6 Sep 2024 08:08:02 +0200 Subject: [PATCH] tRPC example --- src/Layers/trpc/TRPCExpressRoute.ts | 4 +-- src/Layers/trpc/tests.ts | 47 +++++++++++++++++++++-------- 2 files changed, 36 insertions(+), 15 deletions(-) diff --git a/src/Layers/trpc/TRPCExpressRoute.ts b/src/Layers/trpc/TRPCExpressRoute.ts index 8d2a911..d46e288 100644 --- a/src/Layers/trpc/TRPCExpressRoute.ts +++ b/src/Layers/trpc/TRPCExpressRoute.ts @@ -12,13 +12,13 @@ const importTRPCServerExpressAdapter = Effect.tryPromise({ export const TRPCExpressRouteLive = ( config: { - readonly path: Config.Config + readonly root: Config.Config } ) => Layer.effectDiscard(Effect.gen(function*() { const { createExpressMiddleware } = yield* importTRPCServerExpressAdapter const app = yield* ExpressApp.ExpressApp - app.use(yield* config.path, + app.use(yield* config.root, createExpressMiddleware({ router: yield* TRPCAnyRouter, createContext: (yield* TRPCUnknownContextCreator).createExpressContext, diff --git a/src/Layers/trpc/tests.ts b/src/Layers/trpc/tests.ts index 2f51664..5e3105a 100644 --- a/src/Layers/trpc/tests.ts +++ b/src/Layers/trpc/tests.ts @@ -1,18 +1,39 @@ -import { Console, Effect, identity } from "effect" +import { Config, Effect, Layer } from "effect" +import * as TRPC from "." +import { ExpressApp, ExpressNodeHTTPServer } from "../express" -const expansiveComputation = Effect.gen(function*() { - yield* Console.log("executing") - return "value" -}).pipe( - Effect.cached, +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({ + 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*() { - const cached = yield* expansiveComputation - yield* Console.log(yield* cached) - yield* Console.log(yield* cached) - yield* Console.log(yield* cached) -}).pipe( - Effect.runPromise +await Layer.launch(ServerLive).pipe( + Effect.scoped, + Effect.runPromise, )