import { ExecException, ExecSyncOptions, PromiseWithChild, ChildProcess, ExecFileSyncOptions, SpawnSyncOptions, SpawnSyncReturns } from 'child_process';
export { ChildProcess, ChildProcessByStdio, ChildProcessWithoutNullStreams, CommonExecOptions, CommonOptions, CommonSpawnOptions, ExecException, ExecFileException, ExecFileOptions, ExecFileOptionsWithBufferEncoding, ExecFileOptionsWithOtherEncoding, ExecFileOptionsWithStringEncoding, ExecFileSyncOptions, ExecFileSyncOptionsWithBufferEncoding, ExecFileSyncOptionsWithStringEncoding, ExecOptions, ExecOptionsWithBufferEncoding, ExecOptionsWithStringEncoding, ForkOptions, IOType, MessageOptions, MessagingOptions, ProcessEnvOptions, PromiseWithChild, SendHandle, Serializable, SerializationType, SpawnOptions, SpawnOptionsWithStdioTuple, SpawnOptionsWithoutStdio, SpawnSyncOptions, SpawnSyncOptionsWithBufferEncoding, SpawnSyncOptionsWithStringEncoding, SpawnSyncReturns, StdioNull, StdioOptions, StdioPipe, StdioPipeNamed, execFileSync, execSync, fork, spawn, spawnSync } from 'child_process';

/**
 * Return value from exec*Async().
 * [📘](https://github.com/nodef/extra-child-process/wiki/ExecAsyncReturns)
 */
interface ExecAsyncReturns {
    /** Standard output written by child process. */
    stdout: string | Buffer;
    /** Standard error written by child process. */
    stderr: string | Buffer;
}
/**
 * Error from exec*Async().
 * [📘](https://github.com/nodef/extra-child-process/wiki/ExecAsyncException)
 */
interface ExecAsyncException extends ExecException, ExecAsyncReturns {
}
/**
 * Callback for exec*().
 * [📘](https://github.com/nodef/extra-child-process/wiki/ExecCallback)
 * @param error exec error
 * @param stdout standard output after exec
 * @param stderr standard error after exec
 */
type ExecCallback = (error: ExecException, stdout: string | Buffer, stderr: string | Buffer) => void;
/**
 * Execute a command within a shell, buffering any output.
 * [📘](https://github.com/nodef/extra-child-process/wiki/execAsync)
 * @param command command to run, with space-separated arguments
 * @param options options \{cwd, env, ...\}
 * @returns output \{stdout, stderr\}
 */
declare function execAsync(command: string, options?: ExecSyncOptions): PromiseWithChild<ExecAsyncReturns>;
/**
 * Execute a command within a shell, buffering any output.
 * [📘](https://github.com/nodef/extra-child-process/wiki/exec)
 * @param command command to run, with space-separated arguments
 * @param callback callback function (err, stdout, stderr)
 * @returns child process
 */
declare function exec(command: string, callback: ExecCallback): ChildProcess;
/**
 * Execute a command within a shell, buffering any output.
 * [📘](https://github.com/nodef/extra-child-process/wiki/exec)
 * @param command command to run, with space-separated arguments
 * @param options options \{cwd, env, ...\}
 * @param callback callback function (err, stdout, stderr)
 * @returns child process
 */
declare function exec(command: string, options: ExecSyncOptions, callback: ExecCallback): ChildProcess;
/**
 * Execute a command within a shell, buffering any output.
 * [📘](https://github.com/nodef/extra-child-process/wiki/exec)
 * @param command command to run, with space-separated arguments
 * @param options options \{cwd, env, ...\}
 * @returns output \{stdout, stderr\}
 */
declare function exec(command: string, options?: ExecSyncOptions): PromiseWithChild<ExecAsyncReturns>;
/**
 * Execute an executable without a shell by default, buffering any output.
 * [📘](https://github.com/nodef/extra-child-process/wiki/execFileAsync)
 * @param file name or path of executable file
 * @param options options \{cwd, env, ...\}
 * @returns output \{stdout, stderr\}
 */
declare function execFileAsync(file: string, options?: ExecFileSyncOptions): PromiseWithChild<ExecAsyncReturns>;
/**
 * Execute an executable without a shell by default, buffering any output.
 * [📘](https://github.com/nodef/extra-child-process/wiki/execFileAsync)
 * @param file name or path of executable file
 * @param args list of arguments
 * @param options options \{cwd, env, ...\}
 * @returns output \{stdout, stderr\}
 */
declare function execFileAsync(file: string, args: string[], options?: ExecFileSyncOptions): PromiseWithChild<ExecAsyncReturns>;
/**
 * Execute an executable without a shell by default, buffering any output.
 * [📘](https://github.com/nodef/extra-child-process/wiki/execFile)
 * @param file name or path of executable file
 * @param callback callback function (err, stdout, stderr)
 * @returns child process
 */
declare function execFile(file: string, callback: ExecCallback): ChildProcess;
/**
 * Execute an executable without a shell by default, buffering any output.
 * [📘](https://github.com/nodef/extra-child-process/wiki/execFile)
 * @param file name or path of executable file
 * @param options options \{cwd, env, ...\}
 * @param callback callback function (err, stdout, stderr)
 * @returns child process
 */
declare function execFile(file: string, options: ExecFileSyncOptions, callback: ExecCallback): ChildProcess;
/**
 * Execute an executable without a shell by default, buffering any output.
 * [📘](https://github.com/nodef/extra-child-process/wiki/execFile)
 * @param file name or path of executable file
 * @param args list of arguments
 * @param callback callback function (err, stdout, stderr)
 * @returns child process
 */
declare function execFile(file: string, args: string[], callback: ExecCallback): ChildProcess;
/**
 * Execute an executable without a shell by default, buffering any output.
 * [📘](https://github.com/nodef/extra-child-process/wiki/execFile)
 * @param file name or path of executable file
 * @param args list of arguments
 * @param options options \{cwd, env, ...\}
 * @param callback callback function (err, stdout, stderr)
 * @returns child process
 */
declare function execFile(file: string, args: string[], options: ExecFileSyncOptions, callback: ExecCallback): ChildProcess;
/**
 * Execute an executable without a shell by default, buffering any output.
 * [📘](https://github.com/nodef/extra-child-process/wiki/execFile)
 * @param file name or path of executable file
 * @param options options \{cwd, env, ...\}
 * @returns output \{stdout, stderr\}
 */
declare function execFile(file: string, options?: ExecFileSyncOptions): PromiseWithChild<ExecAsyncReturns>;
/**
 * Execute an executable without a shell by default, buffering any output.
 * [📘](https://github.com/nodef/extra-child-process/wiki/execFile)
 * @param file name or path of executable file
 * @param args list of arguments
 * @param options options \{cwd, env, ...\}
 * @returns output \{stdout, stderr\}
 */
declare function execFile(file: string, args: string[], options?: ExecFileSyncOptions): PromiseWithChild<ExecAsyncReturns>;
/**
 * Spawn new process using given command and arguments.
 * [📘](https://github.com/nodef/extra-child-process/wiki/spawnAsync)
 * @param command command to run
 * @param options options \{cwd, env, ...\}
 * @returns output \{pid, output, stdout, stderr, status, signal\}
 */
declare function spawnAsync(command: string, options?: SpawnSyncOptions): PromiseWithChild<SpawnSyncReturns<string | Buffer>>;
/**
 * Spawn new process using given command and arguments.
 * [📘](https://github.com/nodef/extra-child-process/wiki/spawnAsync)
 * @param command command to run
 * @param args list of arguments
 * @param options options \{cwd, env, ...\}
 * @returns output \{pid, output, stdout, stderr, status, signal\}
 */
declare function spawnAsync(command: string, args: string[], options?: SpawnSyncOptions): PromiseWithChild<SpawnSyncReturns<string | Buffer>>;
interface WhichOptions {
    /** Current working directory (win32 only). */
    cwd?: string;
    /** Paths to search for. */
    paths?: string[];
    /** Extension names to match (win32 only). */
    extnames?: string[];
}
/**
 * Check whether a file satisfies a test.
 * [📘](https://github.com/nodef/extra-child-process/wiki/FileTestFunction)
 * @param file name of file
 * @returns whether test is satisfied
 */
type FileTestFunction = (file: string) => boolean;
/**
 * Callback for which*().
 * [📘](https://github.com/nodef/extra-child-process/wiki/WhichCallback)
 * @param error which error
 * @param path executable path
 */
type WhichCallback = (error: NodeJS.ErrnoException, path?: string) => void;
/**
 * Callback for whichAll*().
 * [📘](https://github.com/nodef/extra-child-process/wiki/WhichAllCallback)
 * @param error which error
 * @param paths executable paths
 */
type WhichAllCallback = (error: NodeJS.ErrnoException, paths?: string[]) => void;
/**
 * Locate path of executable for given command.
 * [📘](https://github.com/nodef/extra-child-process/wiki/whichSync)
 * @param cmd command to locate
 * @param options which options \{cwd, paths\}
 * @returns path of executable
 */
declare function whichSync(cmd: string | RegExp | FileTestFunction, options?: WhichOptions): string;
/**
 * Locate paths of all matching executables for given command.
 * [📘](https://github.com/nodef/extra-child-process/wiki/whichAllSync)
 * @param cmd command to locate
 * @param options which options \{cwd, paths\}
 * @returns paths of executables
 */
declare function whichAllSync(cmd: string | RegExp | FileTestFunction, options?: WhichOptions): string[];
/**
 * Locate path of executable for given command.
 * [📘](https://github.com/nodef/extra-child-process/wiki/whichAsync)
 * @param cmd command to locate
 * @param options which options \{cwd, paths\}
 * @returns path of executable
 */
declare function whichAsync(cmd: string | RegExp | FileTestFunction, options?: WhichOptions): Promise<string>;
/**
 * Locate paths of all matching executables for given command.
 * [📘](https://github.com/nodef/extra-child-process/wiki/whichAllAsync)
 * @param cmd command to locate
 * @param options which options \{cwd, paths\}
 * @returns paths of executables
 */
declare function whichAllAsync(cmd: string | RegExp | FileTestFunction, options?: WhichOptions): Promise<string[]>;
/**
 * Locate path of executable for given command.
 * [📘](https://github.com/nodef/extra-child-process/wiki/which)
 * @param cmd command to locate
 * @param callback callback function (err, path)
 */
declare function which(cmd: string | RegExp | FileTestFunction, callback: WhichCallback): void;
/**
 * Locate path of executable for given command.
 * [📘](https://github.com/nodef/extra-child-process/wiki/which)
 * @param cmd command to locate
 * @param options which options \{cwd, paths\}
 * @param callback callback function (err, path)
 */
declare function which(cmd: string | RegExp | FileTestFunction, options: WhichOptions, callback: WhichCallback): void;
/**
 * Locate path of executable for given command.
 * [📘](https://github.com/nodef/extra-child-process/wiki/which)
 * @param cmd command to locate
 * @param options which options \{cwd, paths\}
 * @returns path of executable
 */
declare function which(cmd: string | RegExp | FileTestFunction, options?: WhichOptions): Promise<string>;
/**
 * Locate paths of all matching executables for given command.
 * [📘](https://github.com/nodef/extra-child-process/wiki/whichAll)
 * @param cmd command to locate
 * @param callback callback function (err, path)
 */
declare function whichAll(cmd: string | RegExp | FileTestFunction, callback: WhichAllCallback): void;
/**
 * Locate paths of all matching executables for given command.
 * [📘](https://github.com/nodef/extra-child-process/wiki/whichAll)
 * @param cmd command to locate
 * @param options which options \{cwd, paths\}
 * @param callback callback function (err, path)
 */
declare function whichAll(cmd: string | RegExp | FileTestFunction, options: WhichOptions, callback: WhichAllCallback): void;
/**
 * Locate paths of all matching executables for given command.
 * [📘](https://github.com/nodef/extra-child-process/wiki/whichAll)
 * @param cmd command to locate
 * @param options which options \{cwd, paths\}
 * @returns paths of executables
 */
declare function whichAll(cmd: string | RegExp | FileTestFunction, options?: WhichOptions): Promise<string[]>;

export { ExecAsyncException, ExecAsyncReturns, ExecCallback, FileTestFunction, WhichAllCallback, WhichCallback, WhichOptions, exec, execAsync, execFile, execFileAsync, spawnAsync, which, whichAll, whichAllAsync, whichAllSync, whichAsync, whichSync };
