@travetto/registry
Version:
Patterns and utilities for handling registration of metadata and functionality for run-time use
38 lines (33 loc) • 888 B
text/typescript
import type { Class } from '@travetto/runtime';
export type RegistrationMethods = `register${string}` | `finalize${string}`;
/**
* Interface for registry adapters to implement
*/
export interface RegistryAdapter<C extends {} = {}> {
register(...data: Partial<C>[]): C;
finalize?(parent?: C): void;
get(): C;
}
export type RegistryIndexClass = {
new(source: unknown): RegistryIndex;
};
/**
* Simple store interface for registry indexes
*/
export interface RegistrySimpleStore {
has(cls: Class): boolean;
finalize(cls: Class): void;
finalized(cls: Class): boolean;
getClasses(): Class[];
};
/**
* Registry index definition
* @concrete
*/
export interface RegistryIndex {
store: RegistrySimpleStore;
finalize?(cls: Class): void;
onCreate?(cls: Class): void;
onChangeSetComplete?(events: Class[]): void;
beforeChangeSetComplete?(events: Class[]): void;
}