import { Effect, FileSystem, Layer, Path } from "effect"; import { loadCliConfig, loadCliConfigFile, saveCliConfig } from "./io.ts"; import { CliConfigStore } from "./cli-config.service.ts"; const makeCliConfigStore = Effect.gen(function* () { const fs = yield* FileSystem.FileSystem; const path = yield* Path.Path; const providePlatform = ( effect: Effect.Effect, ): Effect.Effect => effect.pipe( Effect.provideService(FileSystem.FileSystem, fs), Effect.provideService(Path.Path, path), ); return CliConfigStore.of({ load: (cwd, options) => providePlatform(loadCliConfig(cwd, options)), loadFile: (filePath) => providePlatform(loadCliConfigFile(filePath)), save: (options) => providePlatform(saveCliConfig(options)), }); }); export const cliConfigStoreLayer = Layer.effect(CliConfigStore, makeCliConfigStore);