12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- import {finished} from 'node:stream/promises';
- import {isStreamAbort} from '../resolve/wait-stream.js';
- export const safeWaitForSubprocessStdin = async subprocessStdin => {
- if (subprocessStdin === undefined) {
- return;
- }
- try {
- await waitForSubprocessStdin(subprocessStdin);
- } catch {}
- };
- export const safeWaitForSubprocessStdout = async subprocessStdout => {
- if (subprocessStdout === undefined) {
- return;
- }
- try {
- await waitForSubprocessStdout(subprocessStdout);
- } catch {}
- };
- export const waitForSubprocessStdin = async subprocessStdin => {
- await finished(subprocessStdin, {cleanup: true, readable: false, writable: true});
- };
- export const waitForSubprocessStdout = async subprocessStdout => {
- await finished(subprocessStdout, {cleanup: true, readable: true, writable: false});
- };
- // When `readable` or `writable` aborts/errors, awaits the subprocess, for the reason mentioned above
- export const waitForSubprocess = async (subprocess, error) => {
- await subprocess;
- if (error) {
- throw error;
- }
- };
- export const destroyOtherStream = (stream, isOpen, error) => {
- if (error && !isStreamAbort(error)) {
- stream.destroy(error);
- } else if (isOpen) {
- stream.destroy();
- }
- };
|