TRPCEffectRunner

This commit is contained in:
Julien Valverdé
2024-07-03 00:14:03 +02:00
parent 73d1925509
commit 147b105100
3 changed files with 31 additions and 11 deletions

View File

@@ -0,0 +1,9 @@
import { Layer } from "effect"
import { TodoRepositoryLive } from "./TodoRepository"
export const MainLive = Layer.mergeAll(
TodoRepositoryLive
)
export type MainR = Layer.Layer.Success<typeof MainLive>

View File

@@ -2,7 +2,8 @@ import { BunRuntime } from "@effect/platform-bun"
import { Todo } from "@todo-tests/common/data" import { Todo } from "@todo-tests/common/data"
import { Identifiable } from "@todo-tests/common/traits" import { Identifiable } from "@todo-tests/common/traits"
import { Array, Duration, Effect, Fiber, Option, Stream } from "effect" 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*() { const watchTodoChanges = Effect.gen(function*() {
@@ -53,8 +54,6 @@ const main = Effect.gen(function*() {
yield* Fiber.join(watcher) yield* Fiber.join(watcher)
}) })
const runnableMain = main.pipe( BunRuntime.runMain(
Effect.provide(TodoRepositoryLive) main.pipe(Effect.provide(MainLive))
) )
BunRuntime.runMain(runnableMain)

View File

@@ -1,13 +1,25 @@
import { initTRPC } from "@trpc/server" 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" import { TodoRepository } from "./TodoRepository"
export const t = initTRPC.create() export class TRPCEffectRunner extends Context.Tag("TRPCEffectRunner")<TRPCEffectRunner,
<A, E>(
self: Effect.Effect<A, E, MainR>,
options?: Runtime.RunForkOptions,
) => RuntimeFiber<A, E>
>() {}
export const makeRunner = Effect.runtime().pipe( export const TRPCEffectRunnerLive = Layer.effect(TRPCEffectRunner,
Effect.runtime<MainR>().pipe(
Effect.map(Runtime.runFork) Effect.map(Runtime.runFork)
) )
)
export const t = initTRPC.create()
// export const run = < // export const run = <
// Args extends unknown[], // Args extends unknown[],
@@ -21,7 +33,7 @@ export const makeRunner = Effect.runtime().pipe(
// ) // )
const testRouter = Effect.gen(function*() { const testRouter = Effect.gen(function*() {
const run = yield* makeRunner const run = yield* TRPCEffectRunner
return t.router({ return t.router({
// test1: t.procedure.query( // test1: t.procedure.query(
@@ -33,7 +45,7 @@ const testRouter = Effect.gen(function*() {
test1: t.procedure.query( test1: t.procedure.query(
(opts) => run(Effect.gen(function*() { (opts) => run(Effect.gen(function*() {
// const todos = yield* TodoRepository const todos = yield* TodoRepository
return "test" return "test"
})) }))
), ),