// Type definitions for inversify 2.0.0-alpha.3 // Project: https://github.com/inversify/InversifyJS // Definitions by: inversify // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped /// declare namespace inversify { interface IKernelConstructor { new(options?: IKernelOptions): IKernel; } export interface IKernel { bind(runtimeIdentifier: string): IBindingToSyntax; unbind(runtimeIdentifier: string): void; unbindAll(): void; get(runtimeIdentifier: string): T; getAll(runtimeIdentifier: string): T[]; } export interface IKernelOptions { middleware?: IMiddleware[]; modules?: IKernelModule[]; } interface IMiddleware extends Function { (...args: any[]): any; } export interface IKernelModule extends Function { (kernel: IKernel): void; } interface IBindingToSyntax { to(constructor: { new(...args: any[]): T; }): IBindingInWhenProxySyntax; toValue(value: T): IBindingInWhenProxySyntax; toConstructor(constructor: INewable): IBindingInWhenProxySyntax; toFactory(factory: IFactoryCreator): IBindingInWhenProxySyntax; toAutoFactory(): IBindingInWhenProxySyntax; toProvider(provider: IProviderCreator): IBindingInWhenProxySyntax; } interface IBindingInWhenProxySyntax { inTransientScope(): IBindingInWhenProxySyntax; inSingletonScope(): IBindingInWhenProxySyntax; when(constraint: (request: IRequest) => boolean): IBindingInWhenProxySyntax; whenTargetNamed(name: string): IBindingInWhenProxySyntax; whenTargetTagged(tag: string, value: any): IBindingInWhenProxySyntax; proxy(fn: (injectable: T) => T): IBindingInWhenProxySyntax; } export interface IFactory extends Function { (): T; } interface IFactoryCreator extends Function { (context: IContext): IFactory; } export interface INewable { new(...args: any[]): T; } export interface IProvider extends Function { (): Promise; } interface IProviderCreator extends Function { (context: IContext): IProvider; } export interface IContext { kernel: IKernel; plan: IPlan; addPlan(plan: IPlan): void; } export interface IPlan { parentContext: IContext; rootRequest: IRequest; } export interface IRequest { service: string; parentContext: IContext; parentRequest: IRequest; childRequests: IRequest[]; target: ITarget; bindings: IBinding[]; addChildRequest( service: string, bindings: (IBinding|IBinding[]), target: ITarget): IRequest; } export interface IBinding { runtimeIdentifier: string; implementationType: INewable; factory: IFactoryCreator; provider: IProviderCreator; constraint: (request: IRequest) => boolean; proxyMaker: (injectable: T) => T; cache: T; scope: number; // BindingScope type: number; // BindingType } export interface ITarget { service: IQueryableString; name: IQueryableString; metadata: Array; isArray(): boolean; isNamed(): boolean; isTagged(): boolean; matchesName(name: string): boolean; matchesTag(name: IMetadata): boolean; } export interface IQueryableString { startsWith(searchString: string): boolean; endsWith(searchString: string): boolean; contains(searchString: string): boolean; equals(compareString: string): boolean; value(): string; } export interface IMetadata { key: string; value: any; } export var Kernel: IKernelConstructor; export var decorate: any; export function inject(...typeIdentifiers: string[]): (typeConstructor: any) => void; export var tagged: any; export var named: any; export var paramNames: any; } declare module "inversify" { export = inversify; }