| ... | @@ -22,30 +22,31 @@ export interface ProviderAdapterRegistryLiveOptions { | ... | @@ -22,30 +22,31 @@ export interface ProviderAdapterRegistryLiveOptions { |
| 22 | readonly adapters?: ReadonlyArray<ProviderAdapterShape<ProviderAdapterError>>; | 22 | readonly adapters?: ReadonlyArray<ProviderAdapterShape<ProviderAdapterError>>; |
| 23 | } | 23 | } |
| 24 | | 24 | |
| 25 | const makeProviderAdapterRegistry = (options?: ProviderAdapterRegistryLiveOptions) => | 25 | const makeProviderAdapterRegistry = Effect.fn("makeProviderAdapterRegistry")(function* ( |
| 26 | Effect.gen(function* () { | 26 | options?: ProviderAdapterRegistryLiveOptions, |
| 27 | const adapters = | 27 | ) { |
| 28 | options?.adapters !== undefined | 28 | const adapters = |
| 29 | ? options.adapters | 29 | options?.adapters !== undefined |
| 30 | : [yield* CodexAdapter, yield* ClaudeAdapter]; | 30 | ? options.adapters |
| 31 | const byProvider = new Map(adapters.map((adapter) => [adapter.provider, adapter])); | 31 | : [yield* CodexAdapter, yield* ClaudeAdapter]; |
| | 32 | const byProvider = new Map(adapters.map((adapter) => [adapter.provider, adapter])); |
| 32 | | 33 | |
| 33 | const getByProvider: ProviderAdapterRegistryShape["getByProvider"] = (provider) => { | 34 | const getByProvider: ProviderAdapterRegistryShape["getByProvider"] = (provider) => { |
| 34 | const adapter = byProvider.get(provider); | 35 | const adapter = byProvider.get(provider); |
| 35 | if (!adapter) { | 36 | if (!adapter) { |
| 36 | return Effect.fail(new ProviderUnsupportedError({ provider })); | 37 | return Effect.fail(new ProviderUnsupportedError({ provider })); |
| 37 | } | 38 | } |
| 38 | return Effect.succeed(adapter); | 39 | return Effect.succeed(adapter); |
| 39 | }; | 40 | }; |
| 40 | | 41 | |
| 41 | const listProviders: ProviderAdapterRegistryShape["listProviders"] = () => | 42 | const listProviders: ProviderAdapterRegistryShape["listProviders"] = () => |
| 42 | Effect.sync(() => Array.from(byProvider.keys())); | 43 | Effect.sync(() => Array.from(byProvider.keys())); |
| 43 | | 44 | |
| 44 | return { | 45 | return { |
| 45 | getByProvider, | 46 | getByProvider, |
| 46 | listProviders, | 47 | listProviders, |
| 47 | } satisfies ProviderAdapterRegistryShape; | 48 | } satisfies ProviderAdapterRegistryShape; |
| 48 | }); | 49 | }); |
| 49 | | 50 | |
| 50 | export const ProviderAdapterRegistryLive = Layer.effect( | 51 | export const ProviderAdapterRegistryLive = Layer.effect( |
| 51 | ProviderAdapterRegistry, | 52 | ProviderAdapterRegistry, |