import { Layer } from "effect"; import { LinuxUserService } from "./LinuxUserService"; import { DirectoryService } from "./DirectoryService"; import { QuotaService } from "./QuotaService"; import { UserManagementService } from "./UserManagementService"; /** * User Management Layer Composition * * Provides Effect-TS layers for dependency injection of user management services. */ // Independent services (no dependencies) const IndependentServices = Layer.mergeAll( LinuxUserService.Live, DirectoryService.Live, QuotaService.Live ); // User management service depends on all base services const UserManagementWithDeps = Layer.provide( UserManagementService.Live, IndependentServices ); // Complete layer with all services export const UserManagementLayer = Layer.mergeAll( IndependentServices, UserManagementWithDeps ); /** * Create a complete user management layer * * Usage: * ```typescript * const layer = createUserManagementLayer(); * const runtime = ManagedRuntime.make(layer); * * const result = await runtime.runPromise( * Effect.gen(function* () { * const userMgmt = yield* UserManagementService; * return yield* userMgmt.createUser({ * username: "john", * email: "john@example.com", * }); * }) * ); * ``` */ export const createUserManagementLayer = () => UserManagementLayer;