From 147b1051005a486a2cf8700c163346b80db43cbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Wed, 3 Jul 2024 00:14:03 +0200 Subject: [PATCH] TRPCEffectRunner --- packages/server/src/Main.ts | 9 +++++++++ packages/server/src/index.ts | 9 ++++----- packages/server/src/trpc.ts | 24 ++++++++++++++++++------ 3 files changed, 31 insertions(+), 11 deletions(-) create mode 100644 packages/server/src/Main.ts diff --git a/packages/server/src/Main.ts b/packages/server/src/Main.ts new file mode 100644 index 0000000..4f05ff5 --- /dev/null +++ b/packages/server/src/Main.ts @@ -0,0 +1,9 @@ +import { Layer } from "effect" +import { TodoRepositoryLive } from "./TodoRepository" + + +export const MainLive = Layer.mergeAll( + TodoRepositoryLive +) + +export type MainR = Layer.Layer.Success diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index 4f4d644..7519f94 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -2,7 +2,8 @@ import { BunRuntime } from "@effect/platform-bun" import { Todo } from "@todo-tests/common/data" import { Identifiable } from "@todo-tests/common/traits" import { Array, Duration, Effect, Fiber, Option, Stream } from "effect" -import { TodoRepository, TodoRepositoryLive, createDefaultTodos } from "./TodoRepository" +import { MainLive } from "./Main" +import { TodoRepository, createDefaultTodos } from "./TodoRepository" const watchTodoChanges = Effect.gen(function*() { @@ -53,8 +54,6 @@ const main = Effect.gen(function*() { yield* Fiber.join(watcher) }) -const runnableMain = main.pipe( - Effect.provide(TodoRepositoryLive) +BunRuntime.runMain( + main.pipe(Effect.provide(MainLive)) ) - -BunRuntime.runMain(runnableMain) diff --git a/packages/server/src/trpc.ts b/packages/server/src/trpc.ts index f771ba5..61948b2 100644 --- a/packages/server/src/trpc.ts +++ b/packages/server/src/trpc.ts @@ -1,14 +1,26 @@ import { initTRPC } from "@trpc/server" -import { Effect, FiberSet, Runtime } from "effect" +import { Context, Effect, Layer, Runtime } from "effect" +import type { RuntimeFiber } from "effect/Fiber" +import type { MainR } from "./Main" import { TodoRepository } from "./TodoRepository" -export const t = initTRPC.create() +export class TRPCEffectRunner extends Context.Tag("TRPCEffectRunner")( + self: Effect.Effect, + options?: Runtime.RunForkOptions, + ) => RuntimeFiber +>() {} -export const makeRunner = Effect.runtime().pipe( - Effect.map(Runtime.runFork) +export const TRPCEffectRunnerLive = Layer.effect(TRPCEffectRunner, + Effect.runtime().pipe( + Effect.map(Runtime.runFork) + ) ) + +export const t = initTRPC.create() + // export const run = < // Args extends unknown[], // A, E, R @@ -21,7 +33,7 @@ export const makeRunner = Effect.runtime().pipe( // ) const testRouter = Effect.gen(function*() { - const run = yield* makeRunner + const run = yield* TRPCEffectRunner return t.router({ // test1: t.procedure.query( @@ -33,7 +45,7 @@ const testRouter = Effect.gen(function*() { test1: t.procedure.query( (opts) => run(Effect.gen(function*() { - // const todos = yield* TodoRepository + const todos = yield* TodoRepository return "test" })) ),