UNPKG

@wordpress/hooks

Version:
88 lines (86 loc) 2.97 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // packages/hooks/src/createRunHook.ts var createRunHook_exports = {}; __export(createRunHook_exports, { default: () => createRunHook_default }); module.exports = __toCommonJS(createRunHook_exports); function createRunHook(hooks, storeKey, returnFirstArg, async) { return function runHook(hookName, ...args) { const hooksStore = hooks[storeKey]; if (!hooksStore[hookName]) { hooksStore[hookName] = { handlers: [], runs: 0 }; } hooksStore[hookName].runs++; const handlers = hooksStore[hookName].handlers; if ("production" !== process.env.NODE_ENV) { if ("hookAdded" !== hookName && hooksStore.all) { handlers.push(...hooksStore.all.handlers); } } if (!handlers || !handlers.length) { return returnFirstArg ? args[0] : void 0; } const hookInfo = { name: hookName, currentIndex: 0 }; async function asyncRunner() { try { hooksStore.__current.add(hookInfo); let result = returnFirstArg ? args[0] : void 0; while (hookInfo.currentIndex < handlers.length) { const handler = handlers[hookInfo.currentIndex]; result = await handler.callback.apply(null, args); if (returnFirstArg) { args[0] = result; } hookInfo.currentIndex++; } return returnFirstArg ? result : void 0; } finally { hooksStore.__current.delete(hookInfo); } } function syncRunner() { try { hooksStore.__current.add(hookInfo); let result = returnFirstArg ? args[0] : void 0; while (hookInfo.currentIndex < handlers.length) { const handler = handlers[hookInfo.currentIndex]; result = handler.callback.apply(null, args); if (returnFirstArg) { args[0] = result; } hookInfo.currentIndex++; } return returnFirstArg ? result : void 0; } finally { hooksStore.__current.delete(hookInfo); } } return (async ? asyncRunner : syncRunner)(); }; } var createRunHook_default = createRunHook; //# sourceMappingURL=createRunHook.js.map