UNPKG

@inversifyjs/container

Version:

InversifyJs container

159 lines (147 loc) 9.11 kB
import { LazyServiceIdentifier, ServiceIdentifier, Newable } from '@inversifyjs/common'; import { MetadataName, MetadataTag, BindingConstraints, BindingActivation, BindingDeactivation, DynamicValueBuilder, Factory, ResolutionContext, Provider, GetOptionsTagConstraint, OptionalGetOptions, GetOptions, BindingScope } from '@inversifyjs/core'; interface BindingIdentifier { readonly id: number; } type ResolvedValueInjectOptions<T> = LazyServiceIdentifier<T> | ResolvedValueMetadataInjectOptions<T> | ServiceIdentifier<T>; type ResolvedValueMetadataInjectOptions<T> = [T] extends [ (infer U)[] | undefined ] ? [T] extends [U[]] ? MultipleResolvedValueMetadataInjectOptions<U> : MultipleOptionalResolvedValueMetadataInjectOptions<U> : T extends undefined ? OptionalResolvedValueMetadataInjectOptions<T> : BaseResolvedValueMetadataInjectOptions<T>; interface BaseResolvedValueMetadataInjectOptions<T> { name?: MetadataName; serviceIdentifier: ServiceIdentifier<T> | LazyServiceIdentifier<T>; tags?: ResolvedValueMetadataInjectTagOptions[]; } interface BaseMultipleResolvedValueMetadataInjectOptions { isMultiple: true; } interface BaseOptionalResolvedValueMetadataInjectOptions { optional: true; } interface MultipleResolvedValueMetadataInjectOptions<T> extends BaseResolvedValueMetadataInjectOptions<T>, BaseMultipleResolvedValueMetadataInjectOptions { } interface MultipleOptionalResolvedValueMetadataInjectOptions<T> extends BaseResolvedValueMetadataInjectOptions<T>, BaseMultipleResolvedValueMetadataInjectOptions, BaseOptionalResolvedValueMetadataInjectOptions { } interface OptionalResolvedValueMetadataInjectOptions<T> extends BaseResolvedValueMetadataInjectOptions<T>, BaseOptionalResolvedValueMetadataInjectOptions { } interface ResolvedValueMetadataInjectTagOptions { key: MetadataTag; value: unknown; } type MapToResolvedValueInjectOptions<TArgs extends unknown[]> = { [K in keyof TArgs]-?: ResolvedValueInjectOptions<TArgs[K]>; }; interface BoundServiceSyntax { getIdentifier(): BindingIdentifier; } interface BindToFluentSyntax<T> { to(type: Newable<T>): BindInWhenOnFluentSyntax<T>; toSelf(): BindInWhenOnFluentSyntax<T>; toConstantValue(value: T): BindWhenOnFluentSyntax<T>; toDynamicValue(builder: DynamicValueBuilder<T>): BindInWhenOnFluentSyntax<T>; toFactory(factory: T extends Factory<unknown, any> ? (context: ResolutionContext) => T : never): BindWhenOnFluentSyntax<T>; toProvider(provider: T extends Provider<unknown, any> ? (context: ResolutionContext) => T : never): BindWhenOnFluentSyntax<T>; toResolvedValue(factory: () => T): BindInWhenOnFluentSyntax<T>; toResolvedValue<TArgs extends unknown[] = any[]>(factory: (...args: TArgs) => T, injectOptions: MapToResolvedValueInjectOptions<TArgs>): BindInWhenOnFluentSyntax<T>; toService(service: ServiceIdentifier<T>): void; } interface BindInFluentSyntax<T> extends BoundServiceSyntax { inSingletonScope(): BindWhenOnFluentSyntax<T>; inTransientScope(): BindWhenOnFluentSyntax<T>; inRequestScope(): BindWhenOnFluentSyntax<T>; } interface BindInWhenOnFluentSyntax<T> extends BindInFluentSyntax<T>, BindWhenOnFluentSyntax<T> { } interface BindOnFluentSyntax<T> extends BoundServiceSyntax { onActivation(activation: BindingActivation<T>): BindWhenFluentSyntax<T>; onDeactivation(deactivation: BindingDeactivation<T>): BindWhenFluentSyntax<T>; } interface BindWhenOnFluentSyntax<T> extends BindWhenFluentSyntax<T>, BindOnFluentSyntax<T> { } interface BindWhenFluentSyntax<T> extends BoundServiceSyntax { when(constraint: (metadata: BindingConstraints) => boolean): BindOnFluentSyntax<T>; whenAnyAncestor(constraint: (metadata: BindingConstraints) => boolean): BindOnFluentSyntax<T>; whenAnyAncestorIs(serviceIdentifier: ServiceIdentifier): BindOnFluentSyntax<T>; whenAnyAncestorNamed(name: MetadataName): BindOnFluentSyntax<T>; whenAnyAncestorTagged(tag: MetadataTag, tagValue: unknown): BindOnFluentSyntax<T>; whenDefault(): BindOnFluentSyntax<T>; whenNamed(name: MetadataName): BindOnFluentSyntax<T>; whenNoAncestor(constraint: (metadata: BindingConstraints) => boolean): BindOnFluentSyntax<T>; whenNoAncestorIs(serviceIdentifier: ServiceIdentifier): BindOnFluentSyntax<T>; whenNoAncestorNamed(name: MetadataName): BindOnFluentSyntax<T>; whenNoAncestorTagged(tag: MetadataTag, tagValue: unknown): BindOnFluentSyntax<T>; whenNoParent(constraint: (metadata: BindingConstraints) => boolean): BindOnFluentSyntax<T>; whenNoParentIs(serviceIdentifier: ServiceIdentifier): BindOnFluentSyntax<T>; whenNoParentNamed(name: MetadataName): BindOnFluentSyntax<T>; whenNoParentTagged(tag: MetadataTag, tagValue: unknown): BindOnFluentSyntax<T>; whenParent(constraint: (metadata: BindingConstraints) => boolean): BindOnFluentSyntax<T>; whenParentIs(serviceIdentifier: ServiceIdentifier): BindOnFluentSyntax<T>; whenParentNamed(name: MetadataName): BindOnFluentSyntax<T>; whenParentTagged(tag: MetadataTag, tagValue: unknown): BindOnFluentSyntax<T>; whenTagged(tag: MetadataTag, tagValue: unknown): BindOnFluentSyntax<T>; } interface IsBoundOptions { name?: MetadataName; tag?: GetOptionsTagConstraint; } interface ContainerModuleLoadOptions { bind: <T>(serviceIdentifier: ServiceIdentifier<T>) => BindToFluentSyntax<T>; isBound: (serviceIdentifier: ServiceIdentifier, options?: IsBoundOptions) => boolean; onActivation: <T>(serviceIdentifier: ServiceIdentifier<T>, activation: BindingActivation<T>) => void; onDeactivation: <T>(serviceIdentifier: ServiceIdentifier<T>, deactivation: BindingDeactivation<T>) => void; rebind: <T>(serviceIdentifier: ServiceIdentifier<T>) => Promise<BindToFluentSyntax<T>>; rebindSync: <T>(serviceIdentifier: ServiceIdentifier<T>) => BindToFluentSyntax<T>; unbind: (identifier: BindingIdentifier | ServiceIdentifier) => Promise<void>; unbindSync: (identifier: BindingIdentifier | ServiceIdentifier) => void; } declare class ContainerModule { #private; constructor(load: (options: ContainerModuleLoadOptions) => void | Promise<void>); get id(): number; load(options: ContainerModuleLoadOptions): void | Promise<void>; } declare class Container { #private; constructor(options?: ContainerOptions); bind<T>(serviceIdentifier: ServiceIdentifier<T>): BindToFluentSyntax<T>; get<T>(serviceIdentifier: ServiceIdentifier<T>, options: OptionalGetOptions): T | undefined; get<T>(serviceIdentifier: ServiceIdentifier<T>, options?: GetOptions): T; getAll<T>(serviceIdentifier: ServiceIdentifier<T>, options?: GetOptions): T[]; getAllAsync<T>(serviceIdentifier: ServiceIdentifier<T>, options?: GetOptions): Promise<T[]>; getAsync<T>(serviceIdentifier: ServiceIdentifier<T>, options: OptionalGetOptions): Promise<T | undefined>; getAsync<T>(serviceIdentifier: ServiceIdentifier<T>, options?: GetOptions): Promise<T>; isBound(serviceIdentifier: ServiceIdentifier, options?: IsBoundOptions): boolean; isCurrentBound(serviceIdentifier: ServiceIdentifier, options?: IsBoundOptions): boolean; load(...modules: ContainerModule[]): Promise<void>; loadSync(...modules: ContainerModule[]): void; onActivation<T>(serviceIdentifier: ServiceIdentifier<T>, activation: BindingActivation<T>): void; onDeactivation<T>(serviceIdentifier: ServiceIdentifier<T>, deactivation: BindingDeactivation<T>): void; register(pluginConstructor: Newable): void; restore(): void; rebind<T>(serviceIdentifier: ServiceIdentifier<T>): Promise<BindToFluentSyntax<T>>; rebindSync<T>(serviceIdentifier: ServiceIdentifier<T>): BindToFluentSyntax<T>; snapshot(): void; unbind(identifier: BindingIdentifier | ServiceIdentifier): Promise<void>; unbindAll(): Promise<void>; unbindSync(identifier: BindingIdentifier | ServiceIdentifier): void; unload(...modules: ContainerModule[]): Promise<void>; unloadSync(...modules: ContainerModule[]): void; } interface ContainerOptions { autobind?: true; defaultScope?: BindingScope | undefined; parent?: Container | undefined; } declare enum InversifyContainerErrorKind { invalidOperation = 0 } declare const isAppErrorSymbol: unique symbol; declare class InversifyContainerError extends Error { [isAppErrorSymbol]: true; kind: InversifyContainerErrorKind; constructor(kind: InversifyContainerErrorKind, message?: string, options?: ErrorOptions); static is(value: unknown): value is InversifyContainerError; static isErrorOfKind(value: unknown, kind: InversifyContainerErrorKind): value is InversifyContainerError; } export { Container, ContainerModule, InversifyContainerError, InversifyContainerErrorKind }; export type { BindInFluentSyntax, BindInWhenOnFluentSyntax, BindOnFluentSyntax, BindToFluentSyntax, BindWhenFluentSyntax, BindWhenOnFluentSyntax, BindingIdentifier, BoundServiceSyntax, ContainerModuleLoadOptions, ContainerOptions, IsBoundOptions, ResolvedValueInjectOptions, ResolvedValueMetadataInjectOptions, ResolvedValueMetadataInjectTagOptions };