///
import path from 'path';
import { EventEmitter } from 'events';
import { ExecCore } from '../exec';
import { SharedQueue } from './queue';
import { DynamicLoader } from './dyld';
declare class Proc extends EventEmitter {
core: ExecCore;
opts: ProcOptions;
sigvec: SignalVector;
childq: ChildProcessQueue;
dyld: DynamicLoader;
childset: Set;
onJoin: (onset: ExecvCall | Error) => void;
pending: (() => void)[];
funcTable?: WebAssembly.Table;
debug: (...args: any) => void;
constructor(core: ExecCore, opts?: ProcOptions);
init(): void;
get import(): {
__indirect_function_table: WebAssembly.Table;
debug: (message: string) => void;
};
get extlib(): {};
get path(): {
resolve: (dir: string, ...paths: string[]) => string;
normalize(p: string): string;
join(...paths: string[]): string;
isAbsolute(p: string): boolean;
relative(from: string, to: string): string;
dirname(p: string): string;
basename(p: string, ext?: string): string;
extname(p: string): string;
sep: string;
delimiter: string;
parse(p: string): path.ParsedPath;
format(pP: path.FormatInputPathObject): string;
toNamespacedPath(path: string): string;
posix: path.PlatformPath;
win32: path.PlatformPath;
};
get mem(): DataView;
get membuf(): Buffer;
/**
* This is a nasty hack and so deserves an apology.
*/
sorry(): void;
getenv_all(): {
[name: string]: string;
};
parse_env(environ: i32): {
[name: string]: string;
};
_parse_envvar(buf: Uint8Array, d: object): void;
progname_get(pbuf: i32): number;
login_get(pbuf: i32): number;
geteuid(): number;
trace(message: i32): void;
realpath(file_name: i32, resolved_name: i32): number;
newfd(minfd?: number): number;
dupfd(fd: i32, minfd: i32, cloexec: boolean): number;
dupdesc(desc: {
real: number;
}): any;
strmode(mode: i32, buf: i32): void;
__control_setjmp(env: i32, block: i32): any;
__control_setjmp_with_return(env: i32, block: i32): any;
setjmp(env: i32): number;
longjmp(env: i32, val: i32): void;
sigsetjmp(env: i32, save_mask: i32): number;
siglongjmp(env: i32, val: i32): void;
vfork(): number;
__control_fork(v1: i32, v2: i32, block: i32): void;
execve(path: i32, argv: i32, envp: i32): void;
posix_spawn(pid: i32, path: i32, file_actions: i32, attrp: i32, argv: i32, envp: i32): number;
wait(stat_loc: i32): number;
wait3(stat_loc: i32, options: i32, rusage: i32): number;
waitBase(stat_loc: i32): number;
userGetCString(addr: i32): Buffer;
userGetCStrings(addr: i32): any[];
userCStringMalloc(s: string, pbuf: i32): number;
/**
* Used to invoke blocks: returns a function
* @param block a C block pointer
*/
blockImpl(block: i32): (...args: any) => any;
sigkill(signum: number): void;
sigsuspend(): void;
sigaction(signum: i32, act: i32, oact: i32): void;
getpagesize(): number;
}
declare type ProcOptions = {
funcTableSz?: number;
};
declare class SignalVector extends EventEmitter {
wait: Int32Array;
_snapshot?: Int32Array;
handlers: sighandler[];
debug: (...args: any) => void;
constructor(_from?: SignalVectorProps);
static from(props: SignalVectorProps): SignalVector;
to(): SignalVectorProps;
send(signum: number): void;
receive(signums?: number[]): number;
sweep(signums?: number[]): void;
}
declare type SignalVectorProps = {
wait?: Int32Array;
};
declare type i32 = number;
declare type sighandler = (signum: number) => void;
declare type ChildProcessQueue = SharedQueue;
declare class ExecvCall {
prog: string;
argv: Buffer[];
envp: Buffer[];
constructor(prog: string, argv: Buffer[], envp: Buffer[]);
/**
* (internal) This is needed in order to transfer the `ExecvCall`
* via `postMessage`.
*/
copy(): ExecvCall;
}
export { Proc, ProcOptions, SignalVector, ChildProcessQueue };