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 { Config, Effect, Layer } from "effect"
|
||||||
import { ExpressApp } from "../express/ExpressApp"
|
import { ExpressApp } from "../express/ExpressApp"
|
||||||
import { CreateTRPCContext } from "../trpc/CreateTRPCContext"
|
import { CreateTRPCContext } from "../trpc/CreateTRPCContext"
|
||||||
import { router } from "./routers"
|
import { appRouter } from "./routers"
|
||||||
|
|
||||||
|
|
||||||
export module RPCServer {
|
export module RPCServer {
|
||||||
@@ -13,7 +13,7 @@ export module RPCServer {
|
|||||||
yield* Config.string("RPC_ROOT").pipe(Config.withDefault("/rpc")),
|
yield* Config.string("RPC_ROOT").pipe(Config.withDefault("/rpc")),
|
||||||
|
|
||||||
createExpressMiddleware({
|
createExpressMiddleware({
|
||||||
router: yield* router,
|
router: yield* appRouter,
|
||||||
createContext: yield* CreateTRPCContext,
|
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 { Effect } from "effect"
|
||||||
import { TRPCBuilder } from "../../trpc/TRPCBuilder"
|
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 t = yield* TRPCBuilder
|
||||||
const proc = yield* procedure
|
const procedure = yield* RPCProcedure
|
||||||
|
|
||||||
return t.router({
|
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