tRPC example
Some checks failed
Lint / lint (push) Failing after 11s

This commit is contained in:
Julien Valverdé
2024-09-06 08:08:02 +02:00
parent 8b55d8d078
commit 329e38afe0
2 changed files with 36 additions and 15 deletions

View File

@@ -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<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({
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,
)