buffer-messages.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import {checkIpcMaxBuffer} from '../io/max-buffer.js';
  2. import {shouldLogIpc, logIpcOutput} from '../verbose/ipc.js';
  3. import {getFdSpecificValue} from '../arguments/specific.js';
  4. import {loopOnMessages} from './get-each.js';
  5. // Iterate through IPC messages sent by the subprocess
  6. export const waitForIpcOutput = async ({
  7. subprocess,
  8. buffer: bufferArray,
  9. maxBuffer: maxBufferArray,
  10. ipc,
  11. ipcOutput,
  12. verboseInfo,
  13. }) => {
  14. if (!ipc) {
  15. return ipcOutput;
  16. }
  17. const isVerbose = shouldLogIpc(verboseInfo);
  18. const buffer = getFdSpecificValue(bufferArray, 'ipc');
  19. const maxBuffer = getFdSpecificValue(maxBufferArray, 'ipc');
  20. for await (const message of loopOnMessages({
  21. anyProcess: subprocess,
  22. channel: subprocess.channel,
  23. isSubprocess: false,
  24. ipc,
  25. shouldAwait: false,
  26. reference: true,
  27. })) {
  28. if (buffer) {
  29. checkIpcMaxBuffer(subprocess, ipcOutput, maxBuffer);
  30. ipcOutput.push(message);
  31. }
  32. if (isVerbose) {
  33. logIpcOutput(message, verboseInfo);
  34. }
  35. }
  36. return ipcOutput;
  37. };
  38. export const getBufferedIpcOutput = async (ipcOutputPromise, ipcOutput) => {
  39. await Promise.allSettled([ipcOutputPromise]);
  40. return ipcOutput;
  41. };