"use strict";
var wp;
(wp||={}).hooks=(()=> {
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);
var index_exports={};
__export(index_exports, {
actions: ()=> actions,
addAction: ()=> addAction,
addFilter: ()=> addFilter,
applyFilters: ()=> applyFilters,
applyFiltersAsync: ()=> applyFiltersAsync,
createHooks: ()=> createHooks_default,
currentAction: ()=> currentAction,
currentFilter: ()=> currentFilter,
defaultHooks: ()=> defaultHooks,
didAction: ()=> didAction,
didFilter: ()=> didFilter,
doAction: ()=> doAction,
doActionAsync: ()=> doActionAsync,
doingAction: ()=> doingAction,
doingFilter: ()=> doingFilter,
filters: ()=> filters,
hasAction: ()=> hasAction,
hasFilter: ()=> hasFilter,
removeAction: ()=> removeAction,
removeAllActions: ()=> removeAllActions,
removeAllFilters: ()=> removeAllFilters,
removeFilter: ()=> removeFilter
});
function validateNamespace(namespace){
if("string"!==typeof namespace||""===namespace){
console.error("The namespace must be a non-empty string.");
return false;
}
if(!/^[a-zA-Z][a-zA-Z0-9_.\-\/]*$/.test(namespace)){
console.error("The namespace can only contain numbers, letters, dashes, periods, underscores and slashes."
);
return false;
}
return true;
}
var validateNamespace_default=validateNamespace;
function validateHookName(hookName){
if("string"!==typeof hookName||""===hookName){
console.error("The hook name must be a non-empty string.");
return false;
}
if(/^__/.test(hookName)){
console.error("The hook name cannot begin with `__`.");
return false;
}
if(!/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(hookName)){
console.error("The hook name can only contain numbers, letters, dashes, periods and underscores."
);
return false;
}
return true;
}
var validateHookName_default=validateHookName;
function createAddHook(hooks, storeKey){
return function addHook(hookName, namespace, callback, priority=10){
const hooksStore=hooks[storeKey];
if(!validateHookName_default(hookName)){
return;
}
if(!validateNamespace_default(namespace)){
return;
}
if("function"!==typeof callback){
console.error("The hook callback must be a function.");
return;
}
if("number"!==typeof priority){
console.error("If specified, the hook priority must be a number."
);
return;
}
const handler={ callback, priority, namespace };
if(hooksStore[hookName]){
const handlers=hooksStore[hookName].handlers;
let i;
for (i=handlers.length; i > 0; i--){
if(priority >=handlers[i - 1].priority){
break;
}}
if(i===handlers.length){
handlers[i]=handler;
}else{
handlers.splice(i, 0, handler);
}
hooksStore.__current.forEach((hookInfo)=> {
if(hookInfo.name===hookName&&hookInfo.currentIndex >=i){
hookInfo.currentIndex++;
}});
}else{
hooksStore[hookName]={
handlers: [handler],
runs: 0
};}
if(hookName!=="hookAdded"){
hooks.doAction("hookAdded",
hookName,
namespace,
callback,
priority
);
}};}
var createAddHook_default=createAddHook;
function createRemoveHook(hooks, storeKey, removeAll=false){
return function removeHook(hookName, namespace){
const hooksStore=hooks[storeKey];
if(!validateHookName_default(hookName)){
return;
}
if(!removeAll&&!validateNamespace_default(namespace)){
return;
}
if(!hooksStore[hookName]){
return 0;
}
let handlersRemoved=0;
if(removeAll){
handlersRemoved=hooksStore[hookName].handlers.length;
hooksStore[hookName]={
runs: hooksStore[hookName].runs,
handlers: []
};}else{
const handlers=hooksStore[hookName].handlers;
for (let i=handlers.length - 1; i >=0; i--){
if(handlers[i].namespace===namespace){
handlers.splice(i, 1);
handlersRemoved++;
hooksStore.__current.forEach((hookInfo)=> {
if(hookInfo.name===hookName&&hookInfo.currentIndex >=i){
hookInfo.currentIndex--;
}});
}}
}
if(hookName!=="hookRemoved"){
hooks.doAction("hookRemoved", hookName, namespace);
}
return handlersRemoved;
};}
var createRemoveHook_default=createRemoveHook;
function createHasHook(hooks, storeKey){
return function hasHook(hookName, namespace){
const hooksStore=hooks[storeKey];
if("undefined"!==typeof namespace){
return hookName in hooksStore&&hooksStore[hookName].handlers.some((hook)=> hook.namespace===namespace
);
}
return hookName in hooksStore;
};}
var createHasHook_default=createHasHook;
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(true){
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;
function createCurrentHook(hooks, storeKey){
return function currentHook(){
const hooksStore=hooks[storeKey];
const currentArray=Array.from(hooksStore.__current);
return currentArray.at(-1)?.name ?? null;
};}
var createCurrentHook_default=createCurrentHook;
function createDoingHook(hooks, storeKey){
return function doingHook(hookName){
const hooksStore=hooks[storeKey];
if("undefined"===typeof hookName){
return hooksStore.__current.size > 0;
}
return Array.from(hooksStore.__current).some((hook)=> hook.name===hookName
);
};}
var createDoingHook_default=createDoingHook;
function createDidHook(hooks, storeKey){
return function didHook(hookName){
const hooksStore=hooks[storeKey];
if(!validateHookName_default(hookName)){
return;
}
return hooksStore[hookName]&&hooksStore[hookName].runs ? hooksStore[hookName].runs:0;
};}
var createDidHook_default=createDidHook;
var _Hooks=class {
actions;
filters;
addAction;
addFilter;
removeAction;
removeFilter;
hasAction;
hasFilter;
removeAllActions;
removeAllFilters;
doAction;
doActionAsync;
applyFilters;
applyFiltersAsync;
currentAction;
currentFilter;
doingAction;
doingFilter;
didAction;
didFilter;
constructor(){
this.actions= Object.create(null);
this.actions.__current= new Set();
this.filters= Object.create(null);
this.filters.__current= new Set();
this.addAction=createAddHook_default(this, "actions");
this.addFilter=createAddHook_default(this, "filters");
this.removeAction=createRemoveHook_default(this, "actions");
this.removeFilter=createRemoveHook_default(this, "filters");
this.hasAction=createHasHook_default(this, "actions");
this.hasFilter=createHasHook_default(this, "filters");
this.removeAllActions=createRemoveHook_default(this, "actions", true);
this.removeAllFilters=createRemoveHook_default(this, "filters", true);
this.doAction=createRunHook_default(this, "actions", false, false);
this.doActionAsync=createRunHook_default(this, "actions", false, true);
this.applyFilters=createRunHook_default(this, "filters", true, false);
this.applyFiltersAsync=createRunHook_default(this, "filters", true, true);
this.currentAction=createCurrentHook_default(this, "actions");
this.currentFilter=createCurrentHook_default(this, "filters");
this.doingAction=createDoingHook_default(this, "actions");
this.doingFilter=createDoingHook_default(this, "filters");
this.didAction=createDidHook_default(this, "actions");
this.didFilter=createDidHook_default(this, "filters");
}};
function createHooks(){
return new _Hooks();
}
var createHooks_default=createHooks;
var defaultHooks=createHooks_default();
var {
addAction,
addFilter,
removeAction,
removeFilter,
hasAction,
hasFilter,
removeAllActions,
removeAllFilters,
doAction,
doActionAsync,
applyFilters,
applyFiltersAsync,
currentAction,
currentFilter,
doingAction,
doingFilter,
didAction,
didFilter,
actions,
filters
}=defaultHooks;
return __toCommonJS(index_exports);
})();