From 4f5e3e1799c36cefb7c236a8a72763895910dd5a Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 17 Mar 2026 05:53:26 +0000 Subject: [PATCH] refactor(plugins): share claiming hook loop --- src/plugins/hooks.ts | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/plugins/hooks.ts b/src/plugins/hooks.ts index cffafd6645d..e8e1e2aa163 100644 --- a/src/plugins/hooks.ts +++ b/src/plugins/hooks.ts @@ -317,20 +317,7 @@ export function createHookRunner(registry: PluginRegistry, options: HookRunnerOp logger?.debug?.(`[hooks] running ${hookName} (${hooks.length} handlers, first-claim wins)`); - for (const hook of hooks) { - try { - const handlerResult = await ( - hook.handler as (event: unknown, ctx: unknown) => Promise - )(event, ctx); - if (handlerResult?.handled) { - return handlerResult; - } - } catch (err) { - handleHookError({ hookName, pluginId: hook.pluginId, error: err }); - } - } - - return undefined; + return await runClaimingHooksList(hooks, hookName, event, ctx); } async function runClaimingHookForPlugin< @@ -351,6 +338,18 @@ export function createHookRunner(registry: PluginRegistry, options: HookRunnerOp `[hooks] running ${hookName} for ${pluginId} (${hooks.length} handlers, targeted)`, ); + return await runClaimingHooksList(hooks, hookName, event, ctx); + } + + async function runClaimingHooksList< + K extends PluginHookName, + TResult extends { handled: boolean }, + >( + hooks: Array & { pluginId: string }>, + hookName: K, + event: Parameters["handler"]>>[0], + ctx: Parameters["handler"]>>[1], + ): Promise { for (const hook of hooks) { try { const handlerResult = await (