import { PartialServiceMap, ActivationType, ContainerKeys, TypeOfService, ILifetime, ServiceContainer } from "./interfaces"; import { primitive } from "../safe"; import { AggregateDescriptor } from "./AggregateDescriptor"; import { ValueDescriptor } from "./ValueDescriptor"; import { ReferenceDescriptor } from "./ReferenceDescriptor"; import { TypeServiceDescriptor } from "./TypeServiceDescriptor"; import { FactoryServiceDescriptor } from "./FactoryServiceDescriptor"; import { ConfigError } from "./ConfigError"; import { ICancellation } from "../interfaces"; import { LazyReferenceDescriptor } from "./LazyReferenceDescriptor"; export interface RegistrationScope { /** сервисы, которые регистрируются в контексте активации и таким образом * могут переопределять ранее зарегистрированные сервисы. за это свойство * нужно платить, кроме того порядок активации будет влиять на результат * разрешения зависимостей. */ services?: RegistrationMap; } /** * Базовый интерфейс конфигурации сервисов */ export interface ServiceRegistration extends RegistrationScope { activation?: ActivationType; params?: any; /** Специальный идентификатор используется при активации singleton, если * не указан для TypeRegistration вычисляется как oid($type) */ typeId?: string; inject?: object | object[]; cleanup?: ((instance: T) => void) | string; } export interface TypeRegistration any, S extends object> extends ServiceRegistration, S> { $type: string | C; params?: Registration, S>; } export interface StrictTypeRegistration any, S extends object> extends ServiceRegistration, S> { $type: C; params?: Registration, S>; } export interface FactoryRegistration any, S extends object> extends ServiceRegistration, S> { $factory: string | F; } export interface ValueRegistration { $value: T; parse?: boolean; } export interface DependencyRegistration = ContainerKeys> extends RegistrationScope { $dependency: K; lazy?: boolean; optional?: boolean; default?: TypeOfService; } export interface LazyDependencyRegistration = ContainerKeys> extends DependencyRegistration { lazy: true; } export declare type Registration = T extends primitive ? T : (T | { [k in keyof T]: Registration; } | TypeRegistration T, S> | FactoryRegistration<(...args: any[]) => T, S> | ValueRegistration | DependencyRegistration); export declare type RegistrationMap = { [k in keyof S]?: Registration; }; export declare function isTypeRegistration(x: any): x is TypeRegistration any, any>; export declare function isFactoryRegistration(x: any): x is FactoryRegistration<() => any, any>; export declare function isValueRegistration(x: any): x is ValueRegistration; export declare function isDependencyRegistration(x: any): x is DependencyRegistration; export declare function isActivationType(x: string): x is ActivationType; export declare type ModuleResolver = (moduleName: string, ct?: ICancellation) => any; export declare class Configuration { _hasInnerDescriptors: boolean; readonly _container: ServiceContainer; _path: Array; _configName: string | undefined; _require: ModuleResolver | undefined; constructor(container: ServiceContainer); loadConfiguration(moduleName: string, contextRequire?: any, ct?: ICancellation): Promise; applyConfiguration(data: RegistrationMap, opts: { contextRequire?: any; baseModule?: string; }, ct?: ICancellation): Promise; _applyConfiguration(data: RegistrationMap, resolver?: ModuleResolver, ct?: ICancellation): Promise; _makeError(inner: any): ConfigError; _makePath(): string; _resolveType(moduleName: string, localName: string): Promise; _loadModule(moduleName: string): any; _visitRegistrations(data: RegistrationMap, name: string): Promise>; _enter(name: string): void; _leave(): void; _visit(data: any, name: string): Promise; _visitObject(data: any, name: string): Promise; _visitArray(data: any[], name: string): Promise; _makeServiceParams(data: ServiceRegistration): any; _visitValueRegistration(data: ValueRegistration, name: string): Promise | ValueDescriptor>; _visitDependencyRegistration(data: DependencyRegistration, name: string): Promise | ReferenceDescriptor>; _visitTypeRegistration(data: TypeRegistration any, S>, name: string): Promise>; _visitFactoryRegistration(data: FactoryRegistration<() => any, S>, name: string): Promise>; _getLifetimeManager(activation: ActivationType, typeId: string | undefined): ILifetime; }