diff --git a/bun.lockb b/bun.lockb index 3fd99ab..298ad38 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/packages/server/package.json b/packages/server/package.json index a2e5620..63f7dc3 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -11,7 +11,8 @@ "@todo-tests/common": "workspace:*", "@trpc/server": "^10.45.2", "effect": "^3.4.6", - "express": "^4.19.2" + "express": "^4.19.2", + "trpc-playground": "^1.0.4" }, "devDependencies": { "@types/express": "^4.17.21", diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index e389076..8c5bc2a 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -6,6 +6,7 @@ import { ServicesLive } from "./Services" import { TodoRepository, createDefaultTodos } from "./TodoRepository" import { ExpressApp } from "./express/ExpressApp" import { ExpressHTTPServer } from "./express/ExpressHTTPServer" +import { RPCPlayground } from "./rpc/RPCPlayground" import { RPCServer } from "./rpc/RPCServer" import { RPCProcedureBuilder } from "./rpc/procedures/RPCProcedureBuilder" import { TRPCBuilder } from "./trpc/TRPCBuilder" @@ -14,6 +15,7 @@ import { TRPCContextCreator } from "./trpc/TRPCContextCreator" const ServerLive = ExpressHTTPServer.Live.pipe( Layer.provide(RPCServer.Live), + Layer.provide(RPCPlayground.Dev), Layer.provide(RPCProcedureBuilder.Live), Layer.provide(TRPCBuilder.Live), Layer.provide(TRPCContextCreator.Live), diff --git a/packages/server/src/rpc/RPCPlayground.ts b/packages/server/src/rpc/RPCPlayground.ts new file mode 100644 index 0000000..221bf65 --- /dev/null +++ b/packages/server/src/rpc/RPCPlayground.ts @@ -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, + })) + ) + })) +}