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