@wearesage/schema
Version:
A flexible schema definition and validation system for TypeScript with multi-database support
60 lines (52 loc) • 1.59 kB
text/typescript
import { MetadataRegistry } from "./MetadataRegistry";
/**
* Interface for a registry provider
*/
export interface IRegistryProvider {
getRegistry(): MetadataRegistry;
}
/**
* Default registry provider that uses a shared registry instance
*
* Note: This no longer uses a singleton pattern via static getInstance(),
* but provides a shared instance through the provider pattern.
*/
export class DefaultRegistryProvider implements IRegistryProvider {
private static sharedRegistry: MetadataRegistry = new MetadataRegistry();
getRegistry(): MetadataRegistry {
return DefaultRegistryProvider.sharedRegistry;
}
}
/**
* Global registry provider instance - can be replaced for testing
*/
let globalRegistryProvider: IRegistryProvider = new DefaultRegistryProvider();
/**
* Get the current registry provider
*/
export function getRegistryProvider(): IRegistryProvider {
return globalRegistryProvider;
}
/**
* Set a new registry provider
* @param provider The registry provider to use
*/
export function setRegistryProvider(provider: IRegistryProvider): void {
globalRegistryProvider = provider;
}
/**
* Reset to the default registry provider
*/
export function resetRegistryProvider(): void {
globalRegistryProvider = new DefaultRegistryProvider();
}
/**
* Get the current registry instance
*
* This provides backward compatibility with existing code,
* but new code should prefer explicit dependency injection
* via constructors when possible.
*/
export function getRegistry(): MetadataRegistry {
return globalRegistryProvider.getRegistry();
}