shared.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import {finished} from 'node:stream/promises';
  2. import {isStreamAbort} from '../resolve/wait-stream.js';
  3. export const safeWaitForSubprocessStdin = async subprocessStdin => {
  4. if (subprocessStdin === undefined) {
  5. return;
  6. }
  7. try {
  8. await waitForSubprocessStdin(subprocessStdin);
  9. } catch {}
  10. };
  11. export const safeWaitForSubprocessStdout = async subprocessStdout => {
  12. if (subprocessStdout === undefined) {
  13. return;
  14. }
  15. try {
  16. await waitForSubprocessStdout(subprocessStdout);
  17. } catch {}
  18. };
  19. export const waitForSubprocessStdin = async subprocessStdin => {
  20. await finished(subprocessStdin, {cleanup: true, readable: false, writable: true});
  21. };
  22. export const waitForSubprocessStdout = async subprocessStdout => {
  23. await finished(subprocessStdout, {cleanup: true, readable: true, writable: false});
  24. };
  25. // When `readable` or `writable` aborts/errors, awaits the subprocess, for the reason mentioned above
  26. export const waitForSubprocess = async (subprocess, error) => {
  27. await subprocess;
  28. if (error) {
  29. throw error;
  30. }
  31. };
  32. export const destroyOtherStream = (stream, isOpen, error) => {
  33. if (error && !isStreamAbort(error)) {
  34. stream.destroy(error);
  35. } else if (isOpen) {
  36. stream.destroy();
  37. }
  38. };