// Type definitions for inversify 2.0.0-rc.12 // Project: https://github.com/inversify/InversifyJS // Definitions by: inversify // Definitions: https://github.com/borisyankov/DefinitelyTyped /// interface Symbol { toString(): string; valueOf(): Object; } interface SymbolConstructor { (description?: string|number): Symbol; } declare var Symbol: SymbolConstructor; declare namespace inversify { namespace interfaces { export interface KernelConstructor { new(): Kernel; } export interface KernelModuleConstructor { new(registry: (bind: Bind) => void): KernelModule; } export interface Newable { new(...args: any[]): T; } export type ServiceIdentifier = (string|Symbol|Newable); export interface Binding extends Clonable> { guid: string; moduleId: string; activated: boolean; serviceIdentifier: ServiceIdentifier; implementationType: Newable; factory: FactoryCreator; provider: ProviderCreator; constraint: (request: Request) => boolean; onActivation: (context: Context, injectable: T) => T; cache: T; dynamicValue: (context: Context) => T; scope: number; // BindingScope type: number; // BindingType } export interface Factory extends Function { (...args: any[]): (((...args: any[]) => T)|T); } export interface FactoryCreator extends Function { (context: Context): Factory; } export interface Provider extends Function { (): Promise; } export interface ProviderCreator extends Function { (context: Context): Provider; } export interface PlanAndResolve { (args: PlanAndResolveArgs): T[]; } export interface PlanAndResolveArgs { multiInject: boolean; serviceIdentifier: ServiceIdentifier; target: Target; contextInterceptor: (contexts: Context) => Context; } export interface Middleware extends Function { (next: PlanAndResolve): PlanAndResolve; } export interface Context { guid: string; kernel: Kernel; plan: Plan; addPlan(plan: Plan): void; } export interface ReflectResult { [key: string]: Metadata[]; } export interface Metadata { key: string; value: any; } export interface Plan { parentContext: Context; rootRequest: Request; } export interface Planner { createContext(kernel: Kernel): Context; createPlan(parentContext: Context, binding: Binding, target: Target): Plan; getBindings(kernel: Kernel, serviceIdentifier: ServiceIdentifier): Binding[]; getActiveBindings(parentRequest: Request, target: Target): Binding[]; } export interface QueryableString { startsWith(searchString: string): boolean; endsWith(searchString: string): boolean; contains(searchString: string): boolean; equals(compareString: string): boolean; value(): string; } export interface Request { guid: string; serviceIdentifier: ServiceIdentifier; parentContext: Context; parentRequest: Request; childRequests: Request[]; target: Target; bindings: Binding[]; addChildRequest( serviceIdentifier: ServiceIdentifier, bindings: (Binding|Binding[]), target: Target ): Request; } export interface Target { guid: string; serviceIdentifier: ServiceIdentifier; type: number; // TargetType name: QueryableString; metadata: Array; hasTag(key: string): boolean; isArray(): boolean; matchesArray(name: string|Symbol|Newable): boolean; isNamed(): boolean; isTagged(): boolean; matchesNamedTag(name: string): boolean; matchesTag(key: string): (value: any) => boolean; } export interface Resolver { resolve(context: Context): T; } export interface Kernel { guid: string; parent: Kernel; bind(serviceIdentifier: ServiceIdentifier): BindingToSyntax; unbind(serviceIdentifier: ServiceIdentifier): void; unbindAll(): void; isBound(serviceIdentifier: ServiceIdentifier): boolean; get(serviceIdentifier: ServiceIdentifier): T; getNamed(serviceIdentifier: ServiceIdentifier, named: string): T; getTagged(serviceIdentifier: ServiceIdentifier, key: string, value: any): T; getAll(serviceIdentifier: ServiceIdentifier): T[]; getAllNamed(serviceIdentifier: ServiceIdentifier, named: string): T[]; getAllTagged(serviceIdentifier: ServiceIdentifier, key: string, value: any): T[]; load(...modules: KernelModule[]): void; unload(...modules: KernelModule[]): void; applyMiddleware(...middleware: Middleware[]): void; getServiceIdentifierAsString(serviceIdentifier: ServiceIdentifier): string; snapshot(): void; restore(): void; } export interface Bind extends Function { (serviceIdentifier: ServiceIdentifier): BindingToSyntax; } export interface KernelModule { guid: string; registry: (bind: Bind) => void; } export interface KernelSnapshot { bindings: Lookup>; middleware: PlanAndResolve; } export interface Clonable { clone(): T; } export interface Lookup extends Clonable> { add(serviceIdentifier: ServiceIdentifier, value: T): void; get(serviceIdentifier: ServiceIdentifier): Array; remove(serviceIdentifier: ServiceIdentifier): void; removeByModuleId(moduleId: string): void; hasKey(serviceIdentifier: ServiceIdentifier): boolean; } export interface KeyValuePair { serviceIdentifier: ServiceIdentifier; value: Array; guid: string; } export interface BindingInSyntax { inSingletonScope(): BindingWhenOnSyntax; inTransientScope(): BindingWhenOnSyntax; } export interface BindingInWhenOnSyntax extends BindingInSyntax, BindingWhenOnSyntax {} export interface BindingOnSyntax { onActivation(fn: (context: Context, injectable: T) => T): BindingWhenSyntax; } export interface BindingToSyntax { to(constructor: { new(...args: any[]): T; }): BindingInWhenOnSyntax; toSelf(): BindingInWhenOnSyntax; toConstantValue(value: T): BindingWhenOnSyntax; toDynamicValue(func: (context: Context) => T): BindingWhenOnSyntax; toConstructor(constructor: Newable): BindingWhenOnSyntax; toFactory(factory: FactoryCreator): BindingWhenOnSyntax; toFunction(func: T): BindingWhenOnSyntax; toAutoFactory(serviceIdentifier: ServiceIdentifier): BindingWhenOnSyntax; toProvider(provider: ProviderCreator): BindingWhenOnSyntax; } export interface BindingWhenOnSyntax extends BindingWhenSyntax, BindingOnSyntax {} export interface BindingWhenSyntax { when(constraint: (request: Request) => boolean): BindingOnSyntax; whenTargetNamed(name: string): BindingOnSyntax; whenTargetTagged(tag: string, value: any): BindingOnSyntax; whenInjectedInto(parent: (Function|string)): BindingOnSyntax; whenParentNamed(name: string): BindingOnSyntax; whenParentTagged(tag: string, value: any): BindingOnSyntax; whenAnyAncestorIs(ancestor: (Function|string)): BindingOnSyntax; whenNoAncestorIs(ancestor: (Function|string)): BindingOnSyntax; whenAnyAncestorNamed(name: string): BindingOnSyntax; whenAnyAncestorTagged(tag: string, value: any): BindingOnSyntax; whenNoAncestorNamed(name: string): BindingOnSyntax; whenNoAncestorTagged(tag: string, value: any): BindingOnSyntax; whenAnyAncestorMatches(constraint: (request: Request) => boolean): BindingOnSyntax; whenNoAncestorMatches(constraint: (request: Request) => boolean): BindingOnSyntax; } } export var Kernel: interfaces.KernelConstructor; export var KernelModule: interfaces.KernelModuleConstructor; export var decorate: (decorator: (ClassDecorator|ParameterDecorator), target: any, parameterIndex?: number) => void; export function injectable(): (typeConstructor: any) => void; export function tagged(metadataKey: string, metadataValue: any): (target: any, targetKey: string, index?: number) => any; export function named(name: string): (target: any, targetKey: string, index?: number) => any; export function targetName(name: string): (target: any, targetKey: string, index: number) => any; export function unmanaged(): (target: any, targetKey: string, index: number) => any; export function inject(serviceIdentifier: interfaces.ServiceIdentifier): (target: any, targetKey: string, index?: number) => any; export function guid(): string; export function multiInject( serviceIdentifier: interfaces.ServiceIdentifier ): (target: any, targetKey: string, index?: number) => any; // constraint helpers export var traverseAncerstors: (request: interfaces.Request, constraint: (request: interfaces.Request) => boolean) => boolean; export var taggedConstraint: (tag: string) => (value: any) => (request: interfaces.Request) => boolean; export var namedConstraint: (value: any) => (request: interfaces.Request) => boolean; export var typeConstraint: (type: (Function|string)) => (request: interfaces.Request) => boolean; } declare module "inversify" { export = inversify; }