RPCPlayground

This commit is contained in:
Julien Valverdé
2024-07-05 17:25:10 +02:00
parent a27a185759
commit 0f1d9c5ba6
4 changed files with 29 additions and 1 deletions

BIN
bun.lockb

Binary file not shown.

View File

@@ -11,7 +11,8 @@
"@todo-tests/common": "workspace:*", "@todo-tests/common": "workspace:*",
"@trpc/server": "^10.45.2", "@trpc/server": "^10.45.2",
"effect": "^3.4.6", "effect": "^3.4.6",
"express": "^4.19.2" "express": "^4.19.2",
"trpc-playground": "^1.0.4"
}, },
"devDependencies": { "devDependencies": {
"@types/express": "^4.17.21", "@types/express": "^4.17.21",

View File

@@ -6,6 +6,7 @@ import { ServicesLive } from "./Services"
import { TodoRepository, createDefaultTodos } from "./TodoRepository" import { TodoRepository, createDefaultTodos } from "./TodoRepository"
import { ExpressApp } from "./express/ExpressApp" import { ExpressApp } from "./express/ExpressApp"
import { ExpressHTTPServer } from "./express/ExpressHTTPServer" import { ExpressHTTPServer } from "./express/ExpressHTTPServer"
import { RPCPlayground } from "./rpc/RPCPlayground"
import { RPCServer } from "./rpc/RPCServer" import { RPCServer } from "./rpc/RPCServer"
import { RPCProcedureBuilder } from "./rpc/procedures/RPCProcedureBuilder" import { RPCProcedureBuilder } from "./rpc/procedures/RPCProcedureBuilder"
import { TRPCBuilder } from "./trpc/TRPCBuilder" import { TRPCBuilder } from "./trpc/TRPCBuilder"
@@ -14,6 +15,7 @@ import { TRPCContextCreator } from "./trpc/TRPCContextCreator"
const ServerLive = ExpressHTTPServer.Live.pipe( const ServerLive = ExpressHTTPServer.Live.pipe(
Layer.provide(RPCServer.Live), Layer.provide(RPCServer.Live),
Layer.provide(RPCPlayground.Dev),
Layer.provide(RPCProcedureBuilder.Live), Layer.provide(RPCProcedureBuilder.Live),
Layer.provide(TRPCBuilder.Live), Layer.provide(TRPCBuilder.Live),
Layer.provide(TRPCContextCreator.Live), Layer.provide(TRPCContextCreator.Live),

View File

@@ -0,0 +1,25 @@
import { Config, Effect, Layer } from "effect"
import { expressHandler } from "trpc-playground/handlers/express"
import { ExpressApp } from "../express/ExpressApp"
import { appRouter } from "./routers"
export module RPCPlayground {
export const Live = Layer.empty
export const Dev = Layer.effectDiscard(Effect.gen(function*() {
const app = yield* ExpressApp
const router = yield* appRouter
const playgroundEndpoint = yield* Config.string("RPC_PANEL_ROOT").pipe(Config.withDefault("/rpc/playground"))
const trpcApiEndpoint = yield* Config.string("RPC_ROOT").pipe(Config.withDefault("/rpc"))
app.use(playgroundEndpoint,
yield* Effect.promise(() => expressHandler({
trpcApiEndpoint,
playgroundEndpoint,
router,
}))
)
}))
}