@electron-forge/core
Version:
A complete tool for building modern Electron applications
73 lines (68 loc) • 2.48 kB
text/typescript
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]);
}