///
import { Container } from './containers';
import { LifeTime } from './annotations';
import http = require('http');
import { IRequestContext } from '../pipeline/common';
export declare enum BusUsage {
all = 0,
commandOnly = 1,
eventOnly = 2,
}
/**
* Register direct route
* @param verb Http verb in uppercase
* @param path Path to compare
* @param handler Request
*/
export declare class NativeEndpoint {
kind: "SSE" | "HTTP";
verb: string;
path: string;
handler: Function;
}
export interface IContainer {
registerHTTPEndpoint(verb: string, path: string, handler: (req: http.IncomingMessage, res: http.ServerResponse) => void): any;
registerSSEEndpoint(path: string, handler: (ctx: IRequestContext) => void, verb?: string): any;
getCustomEndpoints(): Array;
injectInstance(fn: any, name: string): IContainer;
injectSingleton(fn: any, ...args: any[]): IContainer;
injectSingleton(fn: any, name?: string, ...args: any[]): IContainer;
injectSingleton(fn: any, nameOrArray: string | Array, ...args: any[]): IContainer;
injectTransient(fn: any, ...args: any[]): IContainer;
injectTransient(fn: any, name?: string, ...args: any[]): IContainer;
injectTransient(fn: any, nameOrArray: string | Array, ...args: any[]): IContainer;
injectScoped(fn: any, ...args: any[]): IContainer;
injectScoped(fn: any, name?: string, ...args: any[]): IContainer;
injectScoped(fn: any, nameOrArray: string | Array, ...args: any[]): IContainer;
/**
* Inject all components founded recursively in a folder.
*
* @param {string} path Root folder relative to current folder
* @returns {IContainer}
*/
injectFrom(path: string): IContainer;
/**
* Get a component by name
*
* @template T
* @param {string} name Component name
* @param {boolean} [optional] if true doesn't throw an exception if the component doesn't exist
* @param {LifeTime} [assertLifeTime] If provided check if the component has been injected with the same lifetime value
* @returns {T} A component
*/
get(name: string, optional?: boolean, assertLifeTime?: LifeTime): T;
getList(name: string): T[];
/**
* Create a new component resolving all its dependencies
*
* @param {any} fn A component class
* @param {any} args Custom arguments
*/
resolve(fn: any, ...args: any[]): any;
dispose(): any;
useRabbitBusAdapter(address?: string, usage?: BusUsage): any;
useMongoProvider(uri?: string, mongoOptions?: any): any;
useMemoryProvider(folder?: string): any;
inject(name: string, fn: any, lifeTime: LifeTime): any;
}
export interface IInjectionNotification {
onInjectionCompleted(): any;
}
export interface IResolver {
lifeTime: LifeTime;
resolve(container: Container, name?: string, parentContainer?: Container): any;
}
export declare class InstanceResolver implements IResolver {
private instance;
lifeTime: LifeTime;
constructor(instance: any);
resolve(container: Container, name?: string): any;
}
export declare class Resolver implements IResolver {
private fn;
lifeTime: LifeTime;
private args;
static nb: number;
constructor(fn: any, lifeTime: LifeTime, args?: Array);
resolve(container: Container, name?: string): any;
private injectProperties(container, name, component);
private injectArguments(container, name, params);
}
export declare class SingletonResolver extends Resolver {
constructor(fn: any, args?: Array);
resolve(container: Container, name?: string, parentContainer?: Container): any;
}
export declare class ScopedResolver extends Resolver {
constructor(fn: any, args?: Array);
resolve(container: Container, name?: string): any;
}