UNPKG

promisify-child-process

Version:

seriously like the best async child process library

69 lines 4.68 kB
import { ChildProcess, IOType } from 'child_process'; import child_process from 'child_process'; import Stream, { Pipe, Readable, Writable } from 'stream'; type StdioElement = IOType | Stream | number | null | undefined; type StdioOptions = IOType | [StdioElement, StdioElement, StdioElement, ...Array<StdioElement | 'ipc'>] | Array<StdioElement | 'ipc'>; interface IOOptions { silent?: boolean; stdio?: StdioOptions; encoding?: BufferEncoding | 'buffer' | null; maxBuffer?: number; } type ChunkTypeHelper<MaxBuffer, Encoding> = MaxBuffer extends number ? Encoding extends BufferEncoding ? string : Buffer : Encoding extends BufferEncoding ? string : Encoding extends 'buffer' ? Buffer : undefined; type ChunkType<Options extends IOOptions> = ChunkTypeHelper<'maxBuffer' extends keyof Options ? Options['maxBuffer'] : undefined, 'encoding' extends keyof Options ? Options['encoding'] : undefined>; type IsPipeHelper<Stdio, Silent, Fd extends 0 | 1 | 2> = Stdio extends unknown[] ? Stdio[Fd] extends infer Value ? Value extends 'pipe' | 'overlapped' ? true : false : false : Stdio extends null | undefined | 'pipe' | 'overlapped' ? true : Stdio extends null | undefined ? Silent extends true ? false : true : false; type IsPipe<Options extends IOOptions, Fd extends 0 | 1 | 2> = IsPipeHelper<'stdio' extends keyof Options ? Options['stdio'] : undefined, 'silent' extends keyof Options ? Options['silent'] : undefined, Fd>; type Contains<A, T> = A extends [infer Head, ...infer Tail] ? Head extends T ? true : Contains<Tail, T> : false; export interface ChildProcessResult<Options extends IOOptions> { stdout: IsPipe<Options, 1> extends true ? ChunkType<Options> : undefined; stderr: IsPipe<Options, 2> extends true ? ChunkType<Options> : undefined; code: number | null; signal: string | null; killed: boolean; } type StdioStreams<Stdio> = { [K in keyof Stdio]: Stdio[K] extends 'pipe' | 'overlapped' ? K extends 0 | '0' ? Writable : Readable : null }; export interface ChildProcessPromise<Options extends IOOptions> extends ChildProcess, Promise<ChildProcessResult<Options>> { stdin: IsPipe<Options, 0> extends true ? Writable : null; stdout: IsPipe<Options, 1> extends true ? Readable : null; stderr: IsPipe<Options, 2> extends true ? Readable : null; readonly channel: Options['stdio'] extends infer Stdio ? Contains<Stdio, 'ipc'> extends true ? Pipe : undefined : undefined; readonly stdio: Options['stdio'] extends infer Stdio ? Stdio extends unknown[] ? StdioStreams<Stdio> : Stdio extends null | undefined | 'pipe' | 'overlapped' ? [Writable, Readable, Readable, undefined, undefined] : [null, null, null, undefined, undefined] : [null, null, null, undefined, undefined]; } interface PromisifyChildProcessBaseOptions extends IOOptions { killSignal?: NodeJS.Signals | number; } export declare function promisifyChildProcess<Options extends PromisifyChildProcessBaseOptions>(child: ChildProcess, options?: Options): ChildProcessPromise<Options>; export interface SpawnOptions extends child_process.SpawnOptions { stdio?: StdioOptions; encoding?: BufferEncoding; maxBuffer?: number; } export declare function spawn<Options extends SpawnOptions>(command: string, args: readonly string[], options?: Options): ChildProcessPromise<Options>; export declare function spawn<Options extends SpawnOptions>(command: string, options?: Options): ChildProcessPromise<Options>; export interface ForkOptions extends child_process.ForkOptions { stdio?: StdioOptions; encoding?: BufferEncoding; maxBuffer?: number; } export declare function fork<Options extends ForkOptions>(module: string, args: Array<string>, options?: Options): ChildProcessPromise<Options>; export declare function fork<Options extends ForkOptions>(module: string, options?: Options): ChildProcessPromise<Options>; export interface ExecOptions extends child_process.ExecOptions { encoding?: BufferEncoding | 'buffer'; } export declare const exec: <Options extends ExecOptions>(command: string, options?: Options) => ChildProcessPromise<Options>; export interface ExecFileOptions extends child_process.ExecFileOptions { encoding?: BufferEncoding | 'buffer'; } export declare const execFile: { <Options extends ExecFileOptions>(file: string, args: readonly string[], options?: Options): ChildProcessPromise<Options>; <Options extends ExecFileOptions>(file: string, options?: Options): ChildProcessPromise<Options>; }; export declare function isChildProcessError(error: unknown): error is Error & { code: number | null; signal: NodeJS.Signals | null; killed: boolean; stdout?: string | Buffer; stderr?: string | Buffer; }; export {}; //# sourceMappingURL=index.d.cts.map