UNPKG

@electron-forge/core

Version:

A complete tool for building modern Electron applications

73 lines (68 loc) 2.48 kB
import { ForgeListrTaskDefinition, ForgeMutatingHookFn, ForgeMutatingHookSignatures, ForgeSimpleHookFn, ForgeSimpleHookSignatures, ResolvedForgeConfig, } from '@electron-forge/shared-types'; import chalk from 'chalk'; import debug from 'debug'; const d = debug('electron-forge:hook'); // eslint-disable-next-line @typescript-eslint/no-explicit-any export const runHook = async <Hook extends keyof ForgeSimpleHookSignatures>( forgeConfig: ResolvedForgeConfig, hookName: Hook, ...hookArgs: ForgeSimpleHookSignatures[Hook] ): Promise<void> => { const { hooks } = forgeConfig; if (hooks) { d(`hook triggered: ${hookName}`); if (typeof hooks[hookName] === 'function') { d('calling hook:', hookName, 'with args:', hookArgs); await (hooks[hookName] as ForgeSimpleHookFn<Hook>)(forgeConfig, ...hookArgs); } } await forgeConfig.pluginInterface.triggerHook(hookName, hookArgs); }; export const getHookListrTasks = async <Hook extends keyof ForgeSimpleHookSignatures>( forgeConfig: ResolvedForgeConfig, hookName: Hook, ...hookArgs: ForgeSimpleHookSignatures[Hook] ): Promise<ForgeListrTaskDefinition[]> => { const { hooks } = forgeConfig; const tasks: ForgeListrTaskDefinition[] = []; if (hooks) { d(`hook triggered: ${hookName}`); if (typeof hooks[hookName] === 'function') { d('calling hook:', hookName, 'with args:', hookArgs); tasks.push({ title: `Running ${chalk.yellow(hookName)} hook from forgeConfig`, task: async () => { await (hooks[hookName] as ForgeSimpleHookFn<Hook>)(forgeConfig, ...hookArgs); }, }); } } tasks.push(...(await forgeConfig.pluginInterface.getHookListrTasks(hookName, hookArgs))); return tasks; }; export async function runMutatingHook<Hook extends keyof ForgeMutatingHookSignatures>( forgeConfig: ResolvedForgeConfig, hookName: Hook, ...item: ForgeMutatingHookSignatures[Hook] ): Promise<ForgeMutatingHookSignatures[Hook][0]> { const { hooks } = forgeConfig; if (hooks) { d(`hook triggered: ${hookName}`); if (typeof hooks[hookName] === 'function') { d('calling mutating hook:', hookName, 'with item:', item[0]); const hook = hooks[hookName] as ForgeMutatingHookFn<Hook>; const result = await hook(forgeConfig, ...item); if (typeof result !== 'undefined') { item[0] = result; } } } return forgeConfig.pluginInterface.triggerMutatingHook(hookName, item[0]); }