From 5860e7272263dd092c97add354dfa2021518eb5c Mon Sep 17 00:00:00 2001 From: Vitalii Rybachenko Date: Wed, 9 Oct 2024 15:01:12 -0400 Subject: [PATCH] fix: reading data from spawned process (#5877) --- packages/build/src/plugins/ipc.js | 4 ++-- .../tests/plugins/fixtures/process_send_object/manifest.yml | 2 ++ .../tests/plugins/fixtures/process_send_object/netlify.toml | 2 ++ .../tests/plugins/fixtures/process_send_object/plugin.js | 5 +++++ packages/build/tests/plugins/tests.js | 5 +++++ 5 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 packages/build/tests/plugins/fixtures/process_send_object/manifest.yml create mode 100644 packages/build/tests/plugins/fixtures/process_send_object/netlify.toml create mode 100644 packages/build/tests/plugins/fixtures/process_send_object/plugin.js diff --git a/packages/build/src/plugins/ipc.js b/packages/build/src/plugins/ipc.js index 19509b4d49..0dbf6955f2 100644 --- a/packages/build/src/plugins/ipc.js +++ b/packages/build/src/plugins/ipc.js @@ -39,8 +39,8 @@ export const getEventFromChild = async function (childProcess, callId) { throw getChildExitError('Could not receive event from child process because it already exited.') } - const messagePromise = pEvent(childProcess, 'message', { filter: ([actualCallId]) => actualCallId === callId }) - const errorPromise = pEvent(childProcess, 'message', { filter: ([actualCallId]) => actualCallId === 'error' }) + const messagePromise = pEvent(childProcess, 'message', { filter: (data) => data?.[0] === callId }) + const errorPromise = pEvent(childProcess, 'message', { filter: (data) => data?.[0] === 'error' }) const exitPromise = pEvent(childProcess, 'exit', { multiArgs: true }) try { return await Promise.race([getMessage(messagePromise), getError(errorPromise), getExit(exitPromise)]) diff --git a/packages/build/tests/plugins/fixtures/process_send_object/manifest.yml b/packages/build/tests/plugins/fixtures/process_send_object/manifest.yml new file mode 100644 index 0000000000..a3512f0259 --- /dev/null +++ b/packages/build/tests/plugins/fixtures/process_send_object/manifest.yml @@ -0,0 +1,2 @@ +name: test +inputs: [] diff --git a/packages/build/tests/plugins/fixtures/process_send_object/netlify.toml b/packages/build/tests/plugins/fixtures/process_send_object/netlify.toml new file mode 100644 index 0000000000..4b06556c85 --- /dev/null +++ b/packages/build/tests/plugins/fixtures/process_send_object/netlify.toml @@ -0,0 +1,2 @@ +[[plugins]] +package = "./plugin.js" diff --git a/packages/build/tests/plugins/fixtures/process_send_object/plugin.js b/packages/build/tests/plugins/fixtures/process_send_object/plugin.js new file mode 100644 index 0000000000..9a99d0ee52 --- /dev/null +++ b/packages/build/tests/plugins/fixtures/process_send_object/plugin.js @@ -0,0 +1,5 @@ +import process from 'process'; + +export const onPreBuild = function () { + process.send({}); +} diff --git a/packages/build/tests/plugins/tests.js b/packages/build/tests/plugins/tests.js index fdb4d7ffaf..0ddd21e14d 100644 --- a/packages/build/tests/plugins/tests.js +++ b/packages/build/tests/plugins/tests.js @@ -401,3 +401,8 @@ test('Plugins have a pre-populated Blobs context', async (t) => { t.is(netlifyConfig.build.command, `echo ""Hello there""`) }) + +test('Plugins can respond anything to parent process', async (t) => { + const build = await new Fixture('./fixtures/process_send_object').runBuildBinary() + t.true(build.exitCode === 0) +})