TRPCEffectRunner
This commit is contained in:
9
packages/server/src/Main.ts
Normal file
9
packages/server/src/Main.ts
Normal 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>
|
||||||
@@ -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)
|
|
||||||
|
|||||||
@@ -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"
|
||||||
}))
|
}))
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user