container.ts
Version:
Modular application framework
82 lines (81 loc) • 3.1 kB
TypeScript
import { Observable } from "rxjs/Observable";
import "rxjs/add/observable/fromEvent";
import "rxjs/add/operator/map";
import "rxjs/add/operator/mergeMap";
import "rxjs/add/operator/filter";
import "rxjs/add/operator/timeout";
import "rxjs/add/operator/takeWhile";
import { IContainerLogMessage, IContainerModuleOpts, Container } from "../../container";
import { Process } from "./Process";
/** Process message types. */
export declare enum EProcessMessageType {
Log = 0,
Metric = 1,
CallRequest = 2,
CallResponse = 3,
User = 4,
}
/** Process error object. */
export interface IProcessError {
name?: string;
message?: string;
stack?: string;
}
/** Process error class. */
export declare class ProcessError extends Error implements IProcessError {
constructor(name: string, message: string, stack: string);
}
/** Process call method options. */
export interface IProcessCallOptions {
timeout?: number;
args?: any[];
}
/** Process call function signature. */
export declare type ProcessCallType = (...args: any[]) => Observable<any>;
/** Process call request message data. */
export interface IProcessCallRequestData {
id: number;
target: string;
method: string;
args: any[];
}
/** Process call response message data. */
export interface IProcessCallResponseData {
id: number;
next?: any;
error?: IProcessError;
complete?: boolean;
}
/** Process data types. */
export declare type ProcessMessageData = IContainerLogMessage | IProcessCallRequestData | IProcessCallResponseData | any;
/** Process message interface. */
export interface IProcessMessage extends Object {
type: EProcessMessageType;
data: ProcessMessageData;
}
/** Process send method interface. */
export interface IProcessSend {
send: (type: EProcessMessageType, data: any) => void;
}
export declare class ChildProcess extends Process implements IProcessSend {
/** Default call method timeout. */
static DEFAULT_TIMEOUT: number;
/** Extract serialisable error properties to object. */
static serialiseError(error: Error): IProcessError;
/** Convert serialised error to error instance. */
static deserialiseError(error: IProcessError): ProcessError;
/** Handle method call requests. */
static handleCallRequest(emitter: IProcessSend, container: Container, data: IProcessCallRequestData): void;
/** Handle method call responses. */
static handleCallResponse<T>(messageObservable: Observable<IProcessMessage>, id: number, args: any[], timeout: number): Observable<T>;
private _message;
/** Messages received from parent process. */
readonly message: Observable<IProcessMessage>;
constructor(name: string, opts: IContainerModuleOpts);
/** Send message to parent process. */
send(type: EProcessMessageType, data: any): void;
/** Make call to module.method in parent process. */
call<T>(target: string, method: string, options?: IProcessCallOptions): Observable<T>;
/** Handle messages received from parent process. */
protected handleMessage(message: IProcessMessage): void;
}