import { Provider, Type, InjectionToken } from '@zetapush/core'; /** * An effective configurer must implement this interface. * * It provides a getProviders method that provides a list of dependencies * to instantiate a concrete class used by the workflow. */ export interface Configurer { getProviders(): Promise; } export declare type Class = Type | Function; export interface Decorator { providerOrDependencyToDecorate: Provider | T; dependencies: any[]; decorate: (decoree: T, ...dependencies: any[]) => any; } export interface Validation { validate(providers: Provider[]): Error | undefined | null; } export declare class Scope { private name; private parent?; constructor(name: string, parent?: Scope | undefined); push(name: string): Scope; getKey(): string; } export declare const scoped: (scope: Scope, provide: Class) => InjectionToken; export declare const scopedDependency: (scope: string | Scope, dep: Class) => InjectionToken; export interface ProviderRegistry { registerConfigurer(...configurer: Array): Promise; registerProvider(...provider: Array): void; registerFactory(provide: Class | InjectionToken, dependencies: any[], factory: (...dependencies: any[]) => T): void; registerDecorator(providerOrDependencyToDecorate: Provider | T | Error | null, dependencies: any[], decorate: (decoree: T, ...dependencies: any[]) => any): void; registerInstance(provide: Class | InjectionToken, instance: T): void; registerValue(token: string, value: string): void; registerClass(provide: Class | InjectionToken, clazz?: Class): void; required(provides: Array | InjectionToken>, error?: Error): void; required(provide: Class | InjectionToken, error?: Error): void; getProviders(): Provider[]; } export declare class SimpleProviderRegistry implements ProviderRegistry { private providers; private decorators; private validations; static counter: number; registerConfigurer(...configurer: Array): Promise; registerProvider(...provider: Array): void; registerFactory(provide: Class | InjectionToken, dependencies: any[], factory: (...dependencies: any[]) => T): void; registerDecorator(providerOrDependencyToDecorate: Provider | T | Error | null, dependencies: any[], decorate: (decoree: T, ...dependencies: any[]) => any): void; registerInstance(provide: Class | InjectionToken, instance: T): void; registerValue(token: string, value?: string): void; registerClass(provide: Class | InjectionToken, clazz?: Class): void; required(provide: Class | InjectionToken, error?: Error): void; required(provides: Array | InjectionToken>, error?: Error): void; getProviders(): Provider[]; private checkValid; private applyDecorators; private applyDecorator; private addAll; } export declare class RequiredClassOrToken implements Validation { private provides; private err?; constructor(provides: Array | InjectionToken>, err?: Error | undefined); validate(providers: Provider[]): Error | undefined | null; private names; private name; }