|
- import {createWriteStream} from 'node:fs';
- import {ChildProcess} from 'node:child_process';
- import {isWritableStream} from 'is-stream';
-
- const isExecaChildProcess = target => target instanceof ChildProcess && typeof target.then === 'function';
-
- const pipeToTarget = (spawned, streamName, target) => {
- if (typeof target === 'string') {
- spawned[streamName].pipe(createWriteStream(target));
- return spawned;
- }
-
- if (isWritableStream(target)) {
- spawned[streamName].pipe(target);
- return spawned;
- }
-
- if (!isExecaChildProcess(target)) {
- throw new TypeError('The second argument must be a string, a stream or an Execa child process.');
- }
-
- if (!isWritableStream(target.stdin)) {
- throw new TypeError('The target child process\'s stdin must be available.');
- }
-
- spawned[streamName].pipe(target.stdin);
- return target;
- };
-
- export const addPipeMethods = spawned => {
- if (spawned.stdout !== null) {
- spawned.pipeStdout = pipeToTarget.bind(undefined, spawned, 'stdout');
- }
-
- if (spawned.stderr !== null) {
- spawned.pipeStderr = pipeToTarget.bind(undefined, spawned, 'stderr');
- }
-
- if (spawned.all !== undefined) {
- spawned.pipeAll = pipeToTarget.bind(undefined, spawned, 'all');
- }
- };
|