RPC work
This commit is contained in:
11
packages/server/src/rpc/RPCProcedure.ts
Normal file
11
packages/server/src/rpc/RPCProcedure.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import { Context, Effect, Layer } from "effect"
|
||||
import { TRPCBuilder } from "../trpc/TRPCBuilder"
|
||||
|
||||
|
||||
const procedure = TRPCBuilder.pipe(Effect.map(t => t.procedure))
|
||||
|
||||
export class RPCProcedure extends Context.Tag("RPCProcedure")<RPCProcedure, Effect.Effect.Success<typeof procedure>>() {}
|
||||
|
||||
export module RPCProcedure {
|
||||
export const Live = Layer.effect(RPCProcedure, procedure)
|
||||
}
|
||||
@@ -2,7 +2,7 @@ import { createExpressMiddleware } from "@trpc/server/adapters/express"
|
||||
import { Config, Effect, Layer } from "effect"
|
||||
import { ExpressApp } from "../express/ExpressApp"
|
||||
import { CreateTRPCContext } from "../trpc/CreateTRPCContext"
|
||||
import { router } from "./routers"
|
||||
import { appRouter } from "./routers"
|
||||
|
||||
|
||||
export module RPCServer {
|
||||
@@ -13,7 +13,7 @@ export module RPCServer {
|
||||
yield* Config.string("RPC_ROOT").pipe(Config.withDefault("/rpc")),
|
||||
|
||||
createExpressMiddleware({
|
||||
router: yield* router,
|
||||
router: yield* appRouter,
|
||||
createContext: yield* CreateTRPCContext,
|
||||
}),
|
||||
)
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
import { Effect } from "effect"
|
||||
import { TRPCBuilder } from "../trpc/TRPCBuilder"
|
||||
|
||||
|
||||
export const procedure = TRPCBuilder.pipe(Effect.map(t => t.procedure))
|
||||
@@ -1,13 +1,17 @@
|
||||
import { Effect } from "effect"
|
||||
import { TRPCBuilder } from "../../trpc/TRPCBuilder"
|
||||
import { procedure } from "../procedures"
|
||||
import { RPCProcedure } from "../RPCProcedure"
|
||||
|
||||
|
||||
export const router = Effect.gen(function*() {
|
||||
export const appRouter = Effect.gen(function*() {
|
||||
const t = yield* TRPCBuilder
|
||||
const proc = yield* procedure
|
||||
const procedure = yield* RPCProcedure
|
||||
|
||||
return t.router({
|
||||
ping: proc.query(({ ctx }) => ctx.run(Effect.succeed("pong")))
|
||||
ping: procedure.query(({ ctx }) =>
|
||||
ctx.run(Effect.succeed("pong"))
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
export type AppRouter = Effect.Effect.Success<typeof appRouter>
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
import { Context, Effect, Layer, Runtime } from "effect"
|
||||
import type { RuntimeFiber } from "effect/Fiber"
|
||||
import type { Services } from "../Services"
|
||||
|
||||
|
||||
export class TRPCEffectRuntime extends Context.Tag("TRPCEffectRuntime")<TRPCEffectRuntime,
|
||||
<A, E>(
|
||||
self: Effect.Effect<A, E, Services>,
|
||||
options?: Runtime.RunForkOptions,
|
||||
) => RuntimeFiber<A, E>
|
||||
>() {}
|
||||
|
||||
export module TRPCEffectRuntime {
|
||||
export const Live = Layer.effect(TRPCEffectRuntime,
|
||||
Effect.runtime<Services>().pipe(
|
||||
Effect.map(Runtime.runFork)
|
||||
)
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user