UNPKG

takin

Version:

Front end engineering base toolchain and scaffold

80 lines 3.01 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createHooks = exports.registerHooks = exports.registerHook = exports.isHookRegistered = void 0; const tapable_1 = require("tapable"); const errors_1 = require("../errors"); const logger_1 = require("../logger"); // 自定义 hook const CUSTOM_HOOK_FACTORIES = {}; /** * 判定自定义 hook 工厂函数是否已被注册 * @param hookName - hook 名称 * @retuns `true` or `false` */ function isHookRegistered(hookName) { return !!CUSTOM_HOOK_FACTORIES[hookName]; } exports.isHookRegistered = isHookRegistered; /** * 自定义 hook 工厂, 用于拓展 RunnerHooks * @param hookName - hook 名称 * @param hookFactory - 工厂函数 */ function registerHook(hookName, hookFactory) { if (hookName in CUSTOM_HOOK_FACTORIES) { throw new errors_1.HookError(`自定义 HookFactory: ${hookName} 已被注册, 请检查`); } CUSTOM_HOOK_FACTORIES[hookName] = hookFactory; } exports.registerHook = registerHook; /** * 批量注册 hook 工厂函数 * @param hooks - Hook 工厂对象 */ function registerHooks(hooks) { Object.keys(hooks).forEach(function (hook) { const hookName = hook; registerHook(hookName, hooks[hookName]); }); } exports.registerHooks = registerHooks; /** * 创建 Runner 相关默认 Hooks * @returns 创建的 hooks */ function createHooks() { const hooks = { initialize: new tapable_1.SyncHook(['runner']), cli: new tapable_1.SyncHook(['cli']), matchedCommand: new tapable_1.AsyncSeriesHook(['command']), loadConfig: new tapable_1.AsyncSeriesHook(['command']), modifyUserConfig: new tapable_1.AsyncSeriesWaterfallHook(['userConfig', 'command']), registerUserConfig: new tapable_1.AsyncSeriesWaterfallHook(['schema', 'zod']), shouldRun: new tapable_1.SyncBailHook(['runner']), shouldValidateUserConfig: new tapable_1.SyncBailHook(['runner']), userConfigValidated: new tapable_1.AsyncSeriesHook(['userConfig']), beforeRun: new tapable_1.AsyncSeriesHook(['runner']), run: new tapable_1.HookMap(() => new tapable_1.AsyncParallelHook(['command'])), done: new tapable_1.AsyncParallelHook(['runner']), failed: new tapable_1.AsyncSeriesHook(['error']), shutdown: new tapable_1.AsyncSeriesHook(['runner']) }; // 设置自定义 hook function setCustomHook(name, hookFactory) { if (hooks[name]) { logger_1.logger.warn(`自定义 Hook: ${name} 已忽略, 原因: 已存在相同名称的 Hook`); return; } hooks[name] = hookFactory(); } // 添加自定义 hook for (const hook in CUSTOM_HOOK_FACTORIES) { const hookName = hook; const hookFactory = CUSTOM_HOOK_FACTORIES[hookName]; if (hookFactory) setCustomHook(hookName, hookFactory); } return hooks; } exports.createHooks = createHooks; //# sourceMappingURL=hooks.js.map