/// <reference types="node" />
import * as childProcess from "child_process";
import { Observable } from "rxjs/Observable";
import "rxjs/add/observable/of";
import "rxjs/add/observable/fromEvent";
import "rxjs/add/operator/switchMap";
import "rxjs/add/operator/take";
import "rxjs/add/operator/takeUntil";
import { IContainerModuleOpts, ContainerModule } from "../../container";
import { EProcessMessageType, IProcessCallOptions, IProcessMessage, IProcessSend } from "../process/ChildProcess";
/** Script process options. */
export interface IScriptOptions {
    args?: string[];
}
export declare const ENV_SCRIPTS_PATH = "SCRIPTS_PATH";
export declare const ENV_SCRIPTS_NAME = "SCRIPTS_NAME";
/** Spawned script process interface. */
export declare class ScriptProcess implements IProcessSend {
    private _scripts;
    private _target;
    private _id;
    private _process;
    private _options;
    private _exit;
    private _message;
    private _identifier;
    readonly scripts: Scripts;
    readonly target: string;
    readonly id: number;
    readonly process: childProcess.ChildProcess;
    readonly options: IScriptOptions;
    readonly exit: Observable<number | string>;
    readonly message: Observable<IProcessMessage>;
    /** Incrementing counter for unique identifiers. */
    protected readonly identifier: number;
    constructor(_scripts: Scripts, _target: string, _id: number, _process: childProcess.ChildProcess, _options?: IScriptOptions);
    /** Send message to child process. */
    send(type: EProcessMessageType, data: any): void;
    /** Make call to module.method in child process. */
    call<T>(target: string, method: string, options?: IProcessCallOptions): Observable<T>;
    /** Handle messages received from child process. */
    protected handleMessage(message: IProcessMessage): void;
}
/** Node.js scripts interface. */
export declare class Scripts extends ContainerModule {
    private _path;
    readonly path: string;
    constructor(name: string, opts: IContainerModuleOpts);
    /** Spawn new Node.js process using script file. */
    fork(target: string, options?: IScriptOptions): ScriptProcess;
}
