learning_ai_common_plat/packages/datastore/src/factory.ts

60 lines
1.6 KiB
TypeScript

/**
* Datastore provider factory.
*
* Creates a DatastoreProvider based on DB_PROVIDER env var or explicit type.
* Defaults to 'cosmos' for backward compatibility.
*/
import { MemoryDatastoreProvider } from './providers/memory.js';
import type { DatastoreProvider, DatastoreProviderType } from './types.js';
let _provider: DatastoreProvider | null = null;
/**
* Get the singleton datastore provider.
* Lazily creates on first call based on DB_PROVIDER env var.
*
* - 'cosmos' (default) — Azure Cosmos DB
* - 'memory' — In-memory (for testing)
*/
export async function getDatastore(): Promise<DatastoreProvider> {
if (!_provider) {
const providerType = (process.env.DB_PROVIDER || 'cosmos') as DatastoreProviderType;
_provider = await createDatastoreProvider(providerType);
}
return _provider;
}
/**
* Create a datastore provider by type.
*/
export async function createDatastoreProvider(
type: DatastoreProviderType
): Promise<DatastoreProvider> {
switch (type) {
case 'cosmos': {
const { CosmosDatastoreProvider } = await import('./providers/cosmos.js');
return new CosmosDatastoreProvider();
}
case 'memory':
return new MemoryDatastoreProvider();
default:
throw new Error(`Unknown DB_PROVIDER: '${type}'. Valid: cosmos, memory`);
}
}
/**
* Set the singleton datastore provider directly (for testing or manual wiring).
*/
export function setDatastore(provider: DatastoreProvider): void {
_provider = provider;
}
/**
* Reset the singleton (for testing).
* @internal
*/
export function _resetDatastore(): void {
_provider = null;
}