From 770e6a41d489a5f58ded38ccfda1eda5daa575b6 Mon Sep 17 00:00:00 2001 From: danielv Date: Sun, 14 Nov 2021 15:23:46 +0100 Subject: [PATCH] Add timeout to invokeHook on plugins --- packages/lib/plugin.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/lib/plugin.js b/packages/lib/plugin.js index fa438da5..796b9b6c 100644 --- a/packages/lib/plugin.js +++ b/packages/lib/plugin.js @@ -4,6 +4,7 @@ */ "use strict"; +const helpers = require("./helpers"); /** * Conceptual base for master and instance plugins. @@ -733,8 +734,16 @@ async function invokeHook(plugins, hook, ...args) { let results = []; for (let [name, plugin] of plugins) { try { - let result = await plugin[hook](...args); - if (result !== undefined) { + // Use an object to detect if the hook failed on timeout or tried to return a value looking like an error + const timeout = {}; + let result = await helpers.timeout( + plugin[hook](...args), + 15000, + timeout + ); + if (result === timeout) { + throw new Error(`Invoking hook ${hook} timed out for plugin ${name}`); + } else if (result !== undefined) { results.push(result); } } catch (err) {