diff --git a/packages/memory/src/factory.ts b/packages/memory/src/factory.ts new file mode 100644 index 0000000..fb5ebc5 --- /dev/null +++ b/packages/memory/src/factory.ts @@ -0,0 +1,18 @@ +import type { MemoryAdapter, MemoryConfig } from './types.js'; + +type MemoryType = MemoryConfig['type']; + +const registry = new Map MemoryAdapter>(); + +export function registerMemoryAdapter( + type: MemoryType, + factory: (config: MemoryConfig) => MemoryAdapter, +): void { + registry.set(type, factory); +} + +export function createMemoryAdapter(config: MemoryConfig): MemoryAdapter { + const factory = registry.get(config.type); + if (!factory) throw new Error(`No adapter registered for type: ${config.type}`); + return factory(config); +} diff --git a/packages/memory/src/index.ts b/packages/memory/src/index.ts index 3648f73..5b262a1 100644 --- a/packages/memory/src/index.ts +++ b/packages/memory/src/index.ts @@ -20,3 +20,4 @@ export type { Insight as AdapterInsight, InsightSearchResult, } from './types.js'; +export { createMemoryAdapter, registerMemoryAdapter } from './factory.js'; diff --git a/packages/queue/src/factory.ts b/packages/queue/src/factory.ts new file mode 100644 index 0000000..b18811c --- /dev/null +++ b/packages/queue/src/factory.ts @@ -0,0 +1,18 @@ +import type { QueueAdapter, QueueConfig } from './types.js'; + +type QueueType = QueueConfig['type']; + +const registry = new Map QueueAdapter>(); + +export function registerQueueAdapter( + type: QueueType, + factory: (config: QueueConfig) => QueueAdapter, +): void { + registry.set(type, factory); +} + +export function createQueueAdapter(config: QueueConfig): QueueAdapter { + const factory = registry.get(config.type); + if (!factory) throw new Error(`No adapter registered for type: ${config.type}`); + return factory(config); +} diff --git a/packages/queue/src/index.ts b/packages/queue/src/index.ts index e0d6099..4fb76c4 100644 --- a/packages/queue/src/index.ts +++ b/packages/queue/src/index.ts @@ -8,3 +8,4 @@ export { } from './queue.js'; export { type QueueAdapter, type QueueConfig as QueueAdapterConfig } from './types.js'; +export { createQueueAdapter, registerQueueAdapter } from './factory.js'; diff --git a/packages/storage/src/factory.ts b/packages/storage/src/factory.ts new file mode 100644 index 0000000..f025fa0 --- /dev/null +++ b/packages/storage/src/factory.ts @@ -0,0 +1,18 @@ +import type { StorageAdapter, StorageConfig } from './types.js'; + +type StorageType = StorageConfig['type']; + +const registry = new Map StorageAdapter>(); + +export function registerStorageAdapter( + type: StorageType, + factory: (config: StorageConfig) => StorageAdapter, +): void { + registry.set(type, factory); +} + +export function createStorageAdapter(config: StorageConfig): StorageAdapter { + const factory = registry.get(config.type); + if (!factory) throw new Error(`No adapter registered for type: ${config.type}`); + return factory(config); +} diff --git a/packages/storage/src/index.ts b/packages/storage/src/index.ts index ae787eb..52f6448 100644 --- a/packages/storage/src/index.ts +++ b/packages/storage/src/index.ts @@ -1 +1,2 @@ export type { StorageAdapter, StorageConfig } from './types.js'; +export { createStorageAdapter, registerStorageAdapter } from './factory.js';