diff --git a/packages/server/src/Main.ts b/packages/server/src/App.ts similarity index 53% rename from packages/server/src/Main.ts rename to packages/server/src/App.ts index 4f05ff5..38df96c 100644 --- a/packages/server/src/Main.ts +++ b/packages/server/src/App.ts @@ -2,8 +2,8 @@ import { Layer } from "effect" import { TodoRepositoryLive } from "./TodoRepository" -export const MainLive = Layer.mergeAll( +export const AppLive = Layer.mergeAll( TodoRepositoryLive ) -export type MainR = Layer.Layer.Success +export type AppR = Layer.Layer.Success diff --git a/packages/server/src/TRPCEffectRuntime.ts b/packages/server/src/TRPCEffectRuntime.ts deleted file mode 100644 index ddea672..0000000 --- a/packages/server/src/TRPCEffectRuntime.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { initTRPC } from "@trpc/server" -import { Context, Effect, Layer, Runtime } from "effect" -import type { RuntimeFiber } from "effect/Fiber" -import { MainLive, type MainR } from "./Main" -import { TodoRepository } from "./TodoRepository" - - -export class TRPCEffectRuntime extends Context.Tag("TRPCEffectRuntime")( - self: Effect.Effect, - options?: Runtime.RunForkOptions, - ) => RuntimeFiber ->() {} - -export const TRPCEffectRuntimeLive = Layer.effect(TRPCEffectRuntime, - Effect.runtime().pipe( - Effect.map(Runtime.runFork) - ) -).pipe( - Layer.provide(MainLive) -) - - -export const t = initTRPC.create() - -const testRouter = Effect.gen(function*() { - const run = yield* TRPCEffectRuntime - - return t.router({ - test1: t.procedure.query(() => run(Effect.gen(function*() { - const todos = yield* TodoRepository - return "test" - }))), - }) -}) diff --git a/packages/server/src/api/trpc/index.ts b/packages/server/src/api/trpc/index.ts deleted file mode 100644 index e69de29..0000000 diff --git a/packages/server/src/express/Express.ts b/packages/server/src/express/Express.ts deleted file mode 100644 index ca06478..0000000 --- a/packages/server/src/express/Express.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Context, Layer } from "effect" -import express from "express" - - -export class Express extends Context.Tag("Express")>() {} - -export const ExpressLive = Layer.sync(Express, () => express()) diff --git a/packages/server/src/express/ExpressApp.ts b/packages/server/src/express/ExpressApp.ts new file mode 100644 index 0000000..ed7ea08 --- /dev/null +++ b/packages/server/src/express/ExpressApp.ts @@ -0,0 +1,7 @@ +import { Context, Layer } from "effect" +import express from "express" + + +export class ExpressApp extends Context.Tag("Express")>() {} + +export const ExpressAppLive = Layer.sync(ExpressApp, () => express()) diff --git a/packages/server/src/express/HTTPServer.ts b/packages/server/src/express/ExpressHTTPServer.ts similarity index 64% rename from packages/server/src/express/HTTPServer.ts rename to packages/server/src/express/ExpressHTTPServer.ts index a7a02e5..f75d603 100644 --- a/packages/server/src/express/HTTPServer.ts +++ b/packages/server/src/express/ExpressHTTPServer.ts @@ -1,9 +1,9 @@ import { Config, Effect, Layer } from "effect" -import { Express, ExpressLive } from "./Express" +import { ExpressApp, ExpressAppLive } from "./ExpressApp" -export const HTTPServerLive = Layer.scopedDiscard(Effect.gen(function*() { - const app = yield* Express +export const ExpressHTTPServerLive = Layer.scopedDiscard(Effect.gen(function*() { + const app = yield* ExpressApp const port = yield* Config.number("PORT").pipe(Config.withDefault(8080)) yield* Effect.acquireRelease( @@ -16,5 +16,5 @@ export const HTTPServerLive = Layer.scopedDiscard(Effect.gen(function*() { ), ) })).pipe( - Layer.provide(ExpressLive) + Layer.provide(ExpressAppLive) ) diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index 70a297c..6a51e66 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -2,9 +2,9 @@ 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, Layer, Option, Stream } from "effect" -import { MainLive } from "./Main" -import { TRPCEffectRuntimeLive } from "./TRPCEffectRuntime" +import { AppLive } from "./App" import { TodoRepository, createDefaultTodos } from "./TodoRepository" +import { TRPCEffectRuntimeLive } from "./trpc/TRPCEffectRuntime" const watchTodoChanges = Effect.gen(function*() { @@ -58,8 +58,8 @@ const main = Effect.gen(function*() { const runnableMain = main.pipe( Effect.provide( Layer.mergeAll( + AppLive, TRPCEffectRuntimeLive, - MainLive, ) ) ) diff --git a/packages/server/src/rpc/index.ts b/packages/server/src/rpc/index.ts new file mode 100644 index 0000000..743a976 --- /dev/null +++ b/packages/server/src/rpc/index.ts @@ -0,0 +1,13 @@ +import { Effect, Layer } from "effect" +import { TRPCBuilder, TRPCBuilderLive } from "../trpc/TRPCBuilder" + + +export const RPCRouter = Layer.effectDiscard(Effect.gen(function*() { + const t = yield* TRPCBuilder + + t.router({ + + }) +})).pipe( + Layer.provide(TRPCBuilderLive) +) diff --git a/packages/server/src/trpc/TRPCBuilder.ts b/packages/server/src/trpc/TRPCBuilder.ts new file mode 100644 index 0000000..34f4c5e --- /dev/null +++ b/packages/server/src/trpc/TRPCBuilder.ts @@ -0,0 +1,7 @@ +import { initTRPC } from "@trpc/server" +import { Context, Layer } from "effect" + + +export class TRPCBuilder extends Context.Tag("TRPCBuilder")>() {} + +export const TRPCBuilderLive = Layer.sync(TRPCBuilder, () => initTRPC.create()) diff --git a/packages/server/src/trpc/TRPCEffectRuntime.ts b/packages/server/src/trpc/TRPCEffectRuntime.ts new file mode 100644 index 0000000..207843a --- /dev/null +++ b/packages/server/src/trpc/TRPCEffectRuntime.ts @@ -0,0 +1,19 @@ +import { Context, Effect, Layer, Runtime } from "effect" +import type { RuntimeFiber } from "effect/Fiber" +import { AppLive, type AppR } from "../App" + + +export class TRPCEffectRuntime extends Context.Tag("TRPCEffectRuntime")( + self: Effect.Effect, + options?: Runtime.RunForkOptions, + ) => RuntimeFiber +>() {} + +export const TRPCEffectRuntimeLive = Layer.effect(TRPCEffectRuntime, + Effect.runtime().pipe( + Effect.map(Runtime.runFork) + ) +).pipe( + Layer.provide(AppLive) +)