diff --git a/inversify/inversify.d.ts b/inversify/inversify.d.ts index f3c924e82..12a8c0111 100644 --- a/inversify/inversify.d.ts +++ b/inversify/inversify.d.ts @@ -1,51 +1,143 @@ -// Type definitions for inversify 1.0.0 +// Type definitions for inversify 2.0.0-alpha.3 // Project: https://github.com/inversify/InversifyJS // Definitions by: inversify // Definitions: https://github.com/borisyankov/DefinitelyTyped -declare module inversify { - - interface TypeBindingInterface { - runtimeIdentifier : string; - implementationType : { new(): TServiceType ;}; - cache : TServiceType; - scope : number; // TypeBindingScopeEnum - } +/// - interface KernelInterface { - bind(typeBinding : TypeBindingInterface) : void; - unbind(runtimeIdentifier : string) : void; - unbindAll() : void; - resolve(runtimeIdentifier : string) : TImplementationType; - } +declare namespace inversify { - enum TypeBindingScopeEnum { - Transient = 0, - Singleton = 1, - } + interface IKernelConstructor { + new(options?: IKernelOptions): IKernel; + } - class TypeBinding implements TypeBindingInterface { - runtimeIdentifier: string; - implementationType: { - new (): TServiceType; - }; - cache: TServiceType; - scope: TypeBindingScopeEnum; - constructor(runtimeIdentifier: string, implementationType: { - new (...args: any[]): TServiceType; - }, scopeType?: TypeBindingScopeEnum); - } + export interface IKernel { + bind(runtimeIdentifier: string): IBindingToSyntax; + unbind(runtimeIdentifier: string): void; + unbindAll(): void; + get(runtimeIdentifier: string): T; + getAll(runtimeIdentifier: string): T[]; + } - class Kernel implements KernelInterface { - private _bindings; - bind(typeBinding: TypeBindingInterface): void; - unbind(runtimeIdentifier: string): void; - unbindAll(): void; - resolve(runtimeIdentifier: string): TImplementationType; - private _validateBinding(typeBinding); - private _getConstructorArguments(func); - private _injectDependencies(func); - private _construct(constr, args); - constructor(); - } + 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); + } + + 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; }