@deepkit/app
Version:
Deepkit App, CLI framework and service container
77 lines (76 loc) • 3.13 kB
TypeScript
import { ClassType } from '@deepkit/core';
import { EventDispatcher, EventListenerRegistered } from '@deepkit/event';
import { AppModule, MiddlewareConfig, ModuleDefinition } from './module.js';
import { Injector, InjectorContext, InjectorModule, ProviderWithScope, Token } from '@deepkit/injector';
import { WorkflowDefinition } from '@deepkit/workflow';
import { ReflectionClass } from '@deepkit/type';
/**
* @reflection never
*/
export interface ControllerConfig {
controller?: ClassType;
name?: string;
for?: string;
callback?: Function;
module: InjectorModule;
}
export declare class CliControllerRegistry {
readonly controllers: ControllerConfig[];
}
export type MiddlewareRegistryEntry = {
config: MiddlewareConfig;
module: AppModule<any>;
};
export declare class MiddlewareRegistry {
readonly configs: MiddlewareRegistryEntry[];
}
export declare class WorkflowRegistry {
readonly workflows: WorkflowDefinition<any>[];
constructor(workflows: WorkflowDefinition<any>[]);
get(name: string): WorkflowDefinition<any>;
add(workflow: WorkflowDefinition<any>): void;
}
export interface ConfigLoader {
load(module: AppModule<any>, config: {
[name: string]: any;
}, schema: ReflectionClass<any>): void;
}
export declare class ServiceContainer {
appModule: AppModule<any>;
readonly cliControllerRegistry: CliControllerRegistry;
readonly middlewareRegistry: MiddlewareRegistry;
readonly workflowRegistry: WorkflowRegistry;
protected injectorContext?: InjectorContext;
protected eventDispatcher: EventDispatcher;
protected configLoaders: ConfigLoader[];
/**
* All modules in the whole module tree.
* This is stored to call service container hooks like processController/processProvider.
*/
protected modules: Set<AppModule<any>>;
constructor(appModule: AppModule<any>);
addConfigLoader(loader: ConfigLoader): void;
/**
* Builds the whole module tree, processes all providers, controllers, and listeners.
* Makes InjectorContext available. Is usually automatically called when the injector is requested.
*/
process(): void;
protected postProcess(): void;
protected findModules(module: AppModule<any>): void;
getInjectorContext(): InjectorContext;
private setupHook;
protected bootstrapModules(): void;
getInjector<T extends AppModule<any>>(moduleOrClass: ClassType<T> | T): Injector;
getModule(moduleClass: ClassType<AppModule<any>>): AppModule<any>;
/**
* Returns all known instantiated modules.
*/
getModules(): AppModule<any>[];
getRootInjector(): Injector;
protected processModule(module: AppModule<ModuleDefinition>): void;
protected processListener(module: AppModule<any>, listener: EventListenerRegistered): void;
protected processController(module: AppModule<any>, controller: ControllerConfig): void;
protected processProvider(module: AppModule<any>, token: Token, provider: ProviderWithScope): void;
}
export declare type __ΩMiddlewareRegistryEntry = any[];
export declare type __ΩConfigLoader = any[];