import { LazyServiceIdentifier, ServiceIdentifier } from '@inversifyjs/common';
import { MetadataName, MetadataTag } from '@inversifyjs/core';
export type ResolvedValueInjectOptions<T> = LazyServiceIdentifier<T> | ResolvedValueMetadataInjectOptions<T> | ServiceIdentifier<T>;
export type ResolvedValueMetadataInjectOptions<T> = [T] extends [
    (infer U)[] | undefined
] ? [T] extends [U[]] ? MultipleResolvedValueMetadataInjectOptions<U> | BaseResolvedValueMetadataInjectOptions<T> : MultipleOptionalResolvedValueMetadataInjectOptions<U> | OptionalResolvedValueMetadataInjectOptions<T> : T extends undefined ? OptionalResolvedValueMetadataInjectOptions<T> : BaseResolvedValueMetadataInjectOptions<T>;
interface BaseResolvedValueMetadataInjectOptions<T> {
    name?: MetadataName;
    serviceIdentifier: ServiceIdentifier<T> | LazyServiceIdentifier<T>;
    tags?: ResolvedValueMetadataInjectTagOptions[];
}
interface BaseMultipleResolvedValueMetadataInjectOptions {
    chained?: boolean;
    isMultiple: true;
}
interface BaseOptionalResolvedValueMetadataInjectOptions {
    optional: true;
}
export interface MultipleResolvedValueMetadataInjectOptions<T> extends BaseResolvedValueMetadataInjectOptions<T>, BaseMultipleResolvedValueMetadataInjectOptions {
}
interface MultipleOptionalResolvedValueMetadataInjectOptions<T> extends BaseResolvedValueMetadataInjectOptions<T>, BaseMultipleResolvedValueMetadataInjectOptions, BaseOptionalResolvedValueMetadataInjectOptions {
}
export interface OptionalResolvedValueMetadataInjectOptions<T> extends BaseResolvedValueMetadataInjectOptions<T>, BaseOptionalResolvedValueMetadataInjectOptions {
}
export interface ResolvedValueMetadataInjectTagOptions {
    key: MetadataTag;
    value: unknown;
}
export {};
//# sourceMappingURL=ResolvedValueInjectOptions.d.ts.map