diff -r 48c4eec2b7e6 -r 8c2e4d02f4ef wp/wp-includes/js/dist/hooks.js --- a/wp/wp-includes/js/dist/hooks.js Fri Sep 05 18:40:08 2025 +0200 +++ b/wp/wp-includes/js/dist/hooks.js Fri Sep 05 18:52:52 2025 +0200 @@ -43,6 +43,7 @@ addAction: () => (/* binding */ addAction), addFilter: () => (/* binding */ addFilter), applyFilters: () => (/* binding */ applyFilters), + applyFiltersAsync: () => (/* binding */ applyFiltersAsync), createHooks: () => (/* reexport */ build_module_createHooks), currentAction: () => (/* binding */ currentAction), currentFilter: () => (/* binding */ currentFilter), @@ -50,6 +51,7 @@ didAction: () => (/* binding */ didAction), didFilter: () => (/* binding */ didFilter), doAction: () => (/* binding */ doAction), + doActionAsync: () => (/* binding */ doActionAsync), doingAction: () => (/* binding */ doingAction), doingFilter: () => (/* binding */ doingFilter), filters: () => (/* binding */ filters), @@ -61,7 +63,7 @@ removeFilter: () => (/* binding */ removeFilter) }); -;// CONCATENATED MODULE: ./node_modules/@wordpress/hooks/build-module/validateNamespace.js +;// ./node_modules/@wordpress/hooks/build-module/validateNamespace.js /** * Validate a namespace string. * @@ -85,7 +87,7 @@ } /* harmony default export */ const build_module_validateNamespace = (validateNamespace); -;// CONCATENATED MODULE: ./node_modules/@wordpress/hooks/build-module/validateHookName.js +;// ./node_modules/@wordpress/hooks/build-module/validateHookName.js /** * Validate a hookName string. * @@ -115,7 +117,7 @@ } /* harmony default export */ const build_module_validateHookName = (validateHookName); -;// CONCATENATED MODULE: ./node_modules/@wordpress/hooks/build-module/createAddHook.js +;// ./node_modules/@wordpress/hooks/build-module/createAddHook.js /** * Internal dependencies */ @@ -209,7 +211,7 @@ } /* harmony default export */ const build_module_createAddHook = (createAddHook); -;// CONCATENATED MODULE: ./node_modules/@wordpress/hooks/build-module/createRemoveHook.js +;// ./node_modules/@wordpress/hooks/build-module/createRemoveHook.js /** * Internal dependencies */ @@ -289,7 +291,7 @@ } /* harmony default export */ const build_module_createRemoveHook = (createRemoveHook); -;// CONCATENATED MODULE: ./node_modules/@wordpress/hooks/build-module/createHasHook.js +;// ./node_modules/@wordpress/hooks/build-module/createHasHook.js /** * @callback HasHook * @@ -324,21 +326,21 @@ } /* harmony default export */ const build_module_createHasHook = (createHasHook); -;// CONCATENATED MODULE: ./node_modules/@wordpress/hooks/build-module/createRunHook.js +;// ./node_modules/@wordpress/hooks/build-module/createRunHook.js /** * Returns a function which, when invoked, will execute all callbacks * registered to a hook of the specified type, optionally returning the final * value of the call chain. * - * @param {import('.').Hooks} hooks Hooks instance. + * @param {import('.').Hooks} hooks Hooks instance. * @param {import('.').StoreKey} storeKey - * @param {boolean} [returnFirstArg=false] Whether each hook callback is expected to - * return its first argument. + * @param {boolean} returnFirstArg Whether each hook callback is expected to return its first argument. + * @param {boolean} async Whether the hook callback should be run asynchronously * * @return {(hookName:string, ...args: unknown[]) => undefined|unknown} Function that runs hook callbacks. */ -function createRunHook(hooks, storeKey, returnFirstArg = false) { - return function runHooks(hookName, ...args) { +function createRunHook(hooks, storeKey, returnFirstArg, async) { + return function runHook(hookName, ...args) { const hooksStore = hooks[storeKey]; if (!hooksStore[hookName]) { hooksStore[hookName] = { @@ -358,25 +360,46 @@ name: hookName, currentIndex: 0 }; - hooksStore.__current.push(hookInfo); - while (hookInfo.currentIndex < handlers.length) { - const handler = handlers[hookInfo.currentIndex]; - const result = handler.callback.apply(null, args); - if (returnFirstArg) { - args[0] = result; + async function asyncRunner() { + try { + hooksStore.__current.add(hookInfo); + let result = returnFirstArg ? args[0] : undefined; + 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 : undefined; + } finally { + hooksStore.__current.delete(hookInfo); } - hookInfo.currentIndex++; } - hooksStore.__current.pop(); - if (returnFirstArg) { - return args[0]; + function syncRunner() { + try { + hooksStore.__current.add(hookInfo); + let result = returnFirstArg ? args[0] : undefined; + 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 : undefined; + } finally { + hooksStore.__current.delete(hookInfo); + } } - return undefined; + return (async ? asyncRunner : syncRunner)(); }; } /* harmony default export */ const build_module_createRunHook = (createRunHook); -;// CONCATENATED MODULE: ./node_modules/@wordpress/hooks/build-module/createCurrentHook.js +;// ./node_modules/@wordpress/hooks/build-module/createCurrentHook.js /** * Returns a function which, when invoked, will return the name of the * currently running hook, or `null` if no hook of the given type is currently @@ -389,14 +412,15 @@ */ function createCurrentHook(hooks, storeKey) { return function currentHook() { - var _hooksStore$__current; + var _currentArray$at$name; const hooksStore = hooks[storeKey]; - return (_hooksStore$__current = hooksStore.__current[hooksStore.__current.length - 1]?.name) !== null && _hooksStore$__current !== void 0 ? _hooksStore$__current : null; + const currentArray = Array.from(hooksStore.__current); + return (_currentArray$at$name = currentArray.at(-1)?.name) !== null && _currentArray$at$name !== void 0 ? _currentArray$at$name : null; }; } /* harmony default export */ const build_module_createCurrentHook = (createCurrentHook); -;// CONCATENATED MODULE: ./node_modules/@wordpress/hooks/build-module/createDoingHook.js +;// ./node_modules/@wordpress/hooks/build-module/createDoingHook.js /** * @callback DoingHook * Returns whether a hook is currently being executed. @@ -423,16 +447,16 @@ // If the hookName was not passed, check for any current hook. if ('undefined' === typeof hookName) { - return 'undefined' !== typeof hooksStore.__current[0]; + return hooksStore.__current.size > 0; } - // Return the __current hook. - return hooksStore.__current[0] ? hookName === hooksStore.__current[0].name : false; + // Find if the `hookName` hook is in `__current`. + return Array.from(hooksStore.__current).some(hook => hook.name === hookName); }; } /* harmony default export */ const build_module_createDoingHook = (createDoingHook); -;// CONCATENATED MODULE: ./node_modules/@wordpress/hooks/build-module/createDidHook.js +;// ./node_modules/@wordpress/hooks/build-module/createDidHook.js /** * Internal dependencies */ @@ -468,7 +492,7 @@ } /* harmony default export */ const build_module_createDidHook = (createDidHook); -;// CONCATENATED MODULE: ./node_modules/@wordpress/hooks/build-module/createHooks.js +;// ./node_modules/@wordpress/hooks/build-module/createHooks.js /** * Internal dependencies */ @@ -491,11 +515,11 @@ constructor() { /** @type {import('.').Store} actions */ this.actions = Object.create(null); - this.actions.__current = []; + this.actions.__current = new Set(); /** @type {import('.').Store} filters */ this.filters = Object.create(null); - this.filters.__current = []; + this.filters.__current = new Set(); this.addAction = build_module_createAddHook(this, 'actions'); this.addFilter = build_module_createAddHook(this, 'filters'); this.removeAction = build_module_createRemoveHook(this, 'actions'); @@ -504,8 +528,10 @@ this.hasFilter = build_module_createHasHook(this, 'filters'); this.removeAllActions = build_module_createRemoveHook(this, 'actions', true); this.removeAllFilters = build_module_createRemoveHook(this, 'filters', true); - this.doAction = build_module_createRunHook(this, 'actions'); - this.applyFilters = build_module_createRunHook(this, 'filters', true); + this.doAction = build_module_createRunHook(this, 'actions', false, false); + this.doActionAsync = build_module_createRunHook(this, 'actions', false, true); + this.applyFilters = build_module_createRunHook(this, 'filters', true, false); + this.applyFiltersAsync = build_module_createRunHook(this, 'filters', true, true); this.currentAction = build_module_createCurrentHook(this, 'actions'); this.currentFilter = build_module_createCurrentHook(this, 'filters'); this.doingAction = build_module_createDoingHook(this, 'actions'); @@ -527,7 +553,7 @@ } /* harmony default export */ const build_module_createHooks = (createHooks); -;// CONCATENATED MODULE: ./node_modules/@wordpress/hooks/build-module/index.js +;// ./node_modules/@wordpress/hooks/build-module/index.js /** * Internal dependencies */ @@ -555,7 +581,7 @@ */ /** - * @typedef {Record & {__current: Current[]}} Store + * @typedef {Record & {__current: Set}} Store */ /** @@ -577,7 +603,9 @@ removeAllActions, removeAllFilters, doAction, + doActionAsync, applyFilters, + applyFiltersAsync, currentAction, currentFilter, doingAction,