gather-ts
Version:
A powerful code analysis and packaging tool designed for creating AI-friendly code representations for javascript and typescript projects.
61 lines (60 loc) • 1.91 kB
TypeScript
import { IService } from "@/types/services";
export interface IServiceIdentifier {
toString(): string;
}
export interface IServiceFactory<T extends IService> {
(): T | Promise<T>;
}
export interface IServiceRegistration<T extends IService = any> {
token: IServiceIdentifier;
factory: IServiceFactory<T>;
instance?: T;
dependencies?: IServiceIdentifier[];
}
export interface IContainerEvents {
"service:registered": {
token: string;
timestamp: number;
};
"service:resolved": {
token: string;
timestamp: number;
};
"service:error": {
token: string;
error: Error;
timestamp: number;
};
"initialization:start": {
timestamp: number;
};
"initialization:complete": {
timestamp: number;
};
"cleanup:start": {
timestamp: number;
};
"cleanup:complete": {
timestamp: number;
};
}
export interface IContainer extends IService {
register<T extends IService>(token: IServiceIdentifier, instance: T): void;
registerFactory<T extends IService>(token: IServiceIdentifier, factory: IServiceFactory<T>): void;
resolve<T extends IService>(token: IServiceIdentifier): T;
hasService(token: IServiceIdentifier): boolean;
clear(): void;
on<K extends keyof IContainerEvents>(event: K, listener: (data: IContainerEvents[K]) => void): this;
off<K extends keyof IContainerEvents>(event: K, listener: (data: IContainerEvents[K]) => void): this;
emit<K extends keyof IContainerEvents>(event: K, data: IContainerEvents[K]): boolean;
}
export interface IContainerConfiguration {
configureContainer(rootDir: string, options?: IContainerOptions): Promise<IContainer>;
}
export interface IContainerOptions {
debug?: boolean;
maxCacheAge?: number;
fileExtensions?: string[];
customTsConfigPath?: string;
batchSize?: number;
}