UNPKG

@deepkit/app

Version:

Deepkit App, CLI framework and service container

77 lines (76 loc) 3.13 kB
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[];