PluginProbe
Gutenberg / 24.1.0
Gutenberg v24.1.0
24.1.0 24.0.0 23.9.1 23.9.0 23.8.0 23.7.2 23.7.1 23.7.0 23.6.1 23.6.2 23.6.0 23.5.3 23.5.2 23.5.1 23.5.0 23.4.0 23.3.2 23.3.1 23.3.0 23.2.0 23.2.1 23.2.2 23.1.1 23.1.0 23.0.1 All 404 releases
← All changes | build/scripts/data/index.js +191 -70 23.0.1 → 24.1.0 View file →
@@ -1,4 +1,5 @@
1 +(function() {
1 2 "use strict";
2 3 var wp;
3 4 (wp ||= {}).data = (() => {
4 5 var __create = Object.create;
@@ -375,8 +376,15 @@
375 376 module.exports = deepmerge_1;
376 377 }
377 378 });
378 379
380 + // package-external:@wordpress/element
381 + var require_element = __commonJS({
382 + "package-external:@wordpress/element"(exports, module) {
383 + module.exports = window.wp.element;
384 + }
385 + });
386 +
379 387 // package-external:@wordpress/priority-queue
380 388 var require_priority_queue = __commonJS({
381 389 "package-external:@wordpress/priority-queue"(exports, module) {
382 390 module.exports = window.wp.priorityQueue;
@@ -382,15 +390,8 @@
382 390 module.exports = window.wp.priorityQueue;
383 391 }
384 392 });
385 393
386 - // package-external:@wordpress/element
387 - var require_element = __commonJS({
388 - "package-external:@wordpress/element"(exports, module) {
389 - module.exports = window.wp.element;
390 - }
391 - });
392 -
393 394 // package-external:@wordpress/is-shallow-equal
394 395 var require_is_shallow_equal = __commonJS({
395 396 "package-external:@wordpress/is-shallow-equal"(exports, module) {
396 397 module.exports = window.wp.isShallowEqual;
@@ -415,10 +416,11 @@
415 416 createReduxStore: () => createReduxStore,
416 417 createRegistry: () => createRegistry,
417 418 createRegistryControl: () => createRegistryControl,
418 419 createRegistrySelector: () => createRegistrySelector,
419 - createSelector: () => rememo_default,
420 + createSelector: () => createSelector,
420 421 dispatch: () => dispatch2,
422 + keyedReducer: () => keyedReducer,
421 423 plugins: () => plugins_exports,
422 424 register: () => register,
423 425 registerGenericStore: () => registerGenericStore,
424 426 registerStore: () => registerStore,
@@ -834,10 +836,10 @@
834 836
835 837 // packages/data/build-module/redux-store/metadata/reducer.mjs
836 838 var import_equivalent_key_map = __toESM(require_equivalent_key_map(), 1);
837 839
838 - // packages/data/build-module/redux-store/metadata/utils.mjs
839 - var onSubKey = (actionProperty) => (reducer) => (state = {}, action) => {
840 + // packages/data/build-module/redux-store/keyed-reducer.mjs
841 + var keyedReducer = (actionProperty) => (reducer) => (state = {}, action) => {
840 842 const key = action[actionProperty];
841 843 if (key === void 0) {
842 844 return state;
843 845 }
@@ -849,8 +851,10 @@
849 851 ...state,
850 852 [key]: nextKeyState
851 853 };
852 854 };
855 +
856 + // packages/data/build-module/redux-store/metadata/utils.mjs
853 857 function selectorArgsToStateKey(args) {
854 858 if (args === void 0 || args === null) {
855 859 return [];
856 860 }
@@ -862,9 +866,9 @@
862 866 return idx === len ? args : args.slice(0, idx);
863 867 }
864 868
865 869 // packages/data/build-module/redux-store/metadata/reducer.mjs
866 - var subKeysIsResolved = onSubKey("selectorName")((state = new import_equivalent_key_map.default(), action) => {
870 + var subKeysIsResolved = keyedReducer("selectorName")((state = new import_equivalent_key_map.default(), action) => {
867 871 switch (action.type) {
868 872 case "START_RESOLUTION": {
869 873 const nextState = new import_equivalent_key_map.default(state);
870 874 nextState.set(selectorArgsToStateKey(action.args), {
@@ -1086,8 +1090,11 @@
1086 1090 callSelector
1087 1091 );
1088 1092 }
1089 1093
1094 + // packages/data/build-module/create-selector.mjs
1095 + var createSelector = rememo_default;
1096 +
1090 1097 // packages/data/build-module/redux-store/metadata/selectors.mjs
1091 1098 function getResolutionState(state, selectorName, args) {
1092 1099 const map = state[selectorName];
1093 1100 if (!map) {
@@ -1139,9 +1146,9 @@
1139 1146 )
1140 1147 )
1141 1148 );
1142 1149 }
1143 - var countSelectorsByStatus = rememo_default(
1150 + var countSelectorsByStatus = createSelector(
1144 1151 (state) => {
1145 1152 const selectorsByStatus = {};
1146 1153 Object.values(state).forEach(
1147 1154 (selectorState) => (
@@ -1390,9 +1397,9 @@
1390 1397 selector.registry = registry;
1391 1398 }
1392 1399 return selector(state.root, ...args);
1393 1400 };
1394 - boundSelector.__unstableNormalizeArgs = selector.__unstableNormalizeArgs;
1401 + boundSelector.normalizeArgs = getNormalizeArgs(selector);
1395 1402 const resolver = resolvers[selectorName];
1396 1403 if (!resolver) {
1397 1404 boundSelector.hasResolver = false;
1398 1405 return boundSelector;
@@ -1415,8 +1422,15 @@
1415 1422 targetSelector,
1416 1423 selectorArgs
1417 1424 );
1418 1425 }
1426 + const resolver = resolvers[selectorName];
1427 + if (resolver && selectorArgs) {
1428 + selectorArgs = normalizeResolutionArgs(
1429 + resolver,
1430 + selectorArgs
1431 + );
1432 + }
1419 1433 }
1420 1434 const state = store.__unstableOriginalGetState();
1421 1435 return metaDataSelector(
1422 1436 state.metadata,
@@ -1459,8 +1473,9 @@
1459 1473 );
1460 1474 lock(selectors, allSelectors);
1461 1475 const bindResolveSelector = mapResolveSelector(
1462 1476 store,
1477 + resolvers,
1463 1478 boundMetadataSelectors
1464 1479 );
1465 1480 const resolveSelectors = mapValues(
1466 1481 boundSelectors,
@@ -1566,18 +1581,26 @@
1566 1581 { root: initialState },
1567 1582 (0, import_compose.compose)(...enhancers)
1568 1583 );
1569 1584 }
1570 - function mapResolveSelector(store, boundMetadataSelectors) {
1585 + function mapResolveSelector(store, resolvers, boundMetadataSelectors) {
1571 1586 return (selector, selectorName) => {
1572 1587 if (!selector.hasResolver) {
1573 1588 return async (...args) => selector(...args);
1574 1589 }
1575 1590 return (...args) => new Promise((resolve, reject) => {
1591 + const resolver = resolvers[selectorName];
1592 + const resolutionArgs = normalizeResolutionArgs(
1593 + resolver,
1594 + normalize(selector, args)
1595 + );
1576 1596 const hasFinished = () => {
1577 1597 return boundMetadataSelectors.hasFinishedResolution(
1578 1598 selectorName,
1579 1599 args
1600 + ) || typeof resolver.isFulfilled === "function" && resolver.isFulfilled(
1601 + store.getState(),
1602 + ...resolutionArgs
1580 1603 );
1581 1604 };
1582 1605 const finalize = (result2) => {
1583 1606 const hasFailed = boundMetadataSelectors.hasResolutionFailed(
@@ -1655,10 +1678,14 @@
1655 1678 // Add the fulfill method.
1656 1679 };
1657 1680 }
1658 1681 function mapSelectorWithResolver(selector, selectorName, resolver, store, resolversCache, boundMetadataSelectors) {
1659 - function fulfillSelector(args) {
1660 - if (resolversCache.isRunning(selectorName, args) || boundMetadataSelectors.hasStartedResolution(selectorName, args)) {
1682 + function fulfillSelector(selectorArgs) {
1683 + const args = normalizeResolutionArgs(resolver, selectorArgs);
1684 + if (resolversCache.isRunning(selectorName, args) || boundMetadataSelectors.hasStartedResolution(
1685 + selectorName,
1686 + selectorArgs
1687 + ) || typeof resolver.isFulfilled === "function" && resolver.isFulfilled(store.getState(), ...args)) {
1661 1688 return;
1662 1689 }
1663 1690 resolversCache.markAsRunning(selectorName, args);
1664 1691 setTimeout(async () => {
@@ -1666,14 +1693,11 @@
1666 1693 store.dispatch(
1667 1694 startResolution(selectorName, args)
1668 1695 );
1669 1696 try {
1670 - const isFulfilled = typeof resolver.isFulfilled === "function" && resolver.isFulfilled(store.getState(), ...args);
1671 - if (!isFulfilled) {
1672 - const action = resolver.fulfill(...args);
1673 - if (action) {
1674 - await store.dispatch(action);
1675 - }
1697 + const action = resolver.fulfill(...args);
1698 + if (action) {
1699 + await store.dispatch(action);
1676 1700 }
1677 1701 store.dispatch(
1678 1702 finishResolution(selectorName, args)
1679 1703 );
@@ -1689,16 +1713,27 @@
1689 1713 fulfillSelector(args);
1690 1714 return selector(...args);
1691 1715 };
1692 1716 selectorResolver.hasResolver = true;
1717 + selectorResolver.normalizeArgs = selector.normalizeArgs;
1693 1718 return selectorResolver;
1694 1719 }
1720 + function getNormalizeArgs(selector) {
1721 + return selector.normalizeArgs ?? selector.__unstableNormalizeArgs;
1722 + }
1695 1723 function normalize(selector, args) {
1696 - if (selector.__unstableNormalizeArgs && typeof selector.__unstableNormalizeArgs === "function" && args?.length) {
1697 - return selector.__unstableNormalizeArgs(args);
1724 + const normalizeArgs = getNormalizeArgs(selector);
1725 + if (typeof normalizeArgs === "function" && args?.length) {
1726 + return normalizeArgs(args);
1698 1727 }
1699 1728 return args;
1700 1729 }
1730 + function normalizeResolutionArgs(resolver, args) {
1731 + if (typeof resolver.getResolutionArgs === "function") {
1732 + return resolver.getResolutionArgs(...args);
1733 + }
1734 + return args;
1735 + }
1701 1736
1702 1737 // packages/data/build-module/store/index.mjs
1703 1738 var coreDataStore = {
1704 1739 name: "core/data",
@@ -1751,14 +1786,16 @@
1751 1786 function createEmitter() {
1752 1787 let isPaused = false;
1753 1788 let isPending = false;
1754 1789 const listeners = /* @__PURE__ */ new Set();
1755 - const notifyListeners = () => (
1756 - // We use Array.from to clone the listeners Set
1757 - // This ensures that we don't run a listener
1758 - // that was added as a response to another listener.
1759 - Array.from(listeners).forEach((listener) => listener())
1760 - );
1790 + let clonedListeners = null;
1791 + const notifyListeners = () => {
1792 + clonedListeners ??= Array.from(listeners);
1793 + const currentListeners = clonedListeners;
1794 + for (let i = 0; i < currentListeners.length; i++) {
1795 + currentListeners[i]();
1796 + }
1797 + };
1761 1798 return {
1762 1799 get isPaused() {
1763 1800 return isPaused;
1764 1801 },
@@ -1763,9 +1800,13 @@
1763 1800 return isPaused;
1764 1801 },
1765 1802 subscribe(listener) {
1766 1803 listeners.add(listener);
1767 - return () => listeners.delete(listener);
1804 + clonedListeners = null;
1805 + return () => {
1806 + listeners.delete(listener);
1807 + clonedListeners = null;
1808 + };
1768 1809 },
1769 1810 pause() {
1770 1811 isPaused = true;
1771 1812 },
@@ -1793,11 +1834,41 @@
1793 1834 function createRegistry(storeConfigs = {}, parent = null) {
1794 1835 const stores = {};
1795 1836 const emitter = createEmitter();
1796 1837 let listeningStores = null;
1838 + const pendingListeners = /* @__PURE__ */ new Map();
1797 1839 function globalListener() {
1798 1840 emitter.emit();
1799 1841 }
1842 + function subscribePending(storeName, listener) {
1843 + const pending = { listener };
1844 + let listeners = pendingListeners.get(storeName);
1845 + if (!listeners) {
1846 + listeners = /* @__PURE__ */ new Set();
1847 + pendingListeners.set(storeName, listeners);
1848 + }
1849 + listeners.add(pending);
1850 + return () => {
1851 + pending.unsubscribe?.();
1852 + const stillPending = pendingListeners.get(storeName);
1853 + if (stillPending) {
1854 + stillPending.delete(pending);
1855 + if (stillPending.size === 0) {
1856 + pendingListeners.delete(storeName);
1857 + }
1858 + }
1859 + };
1860 + }
1861 + function connectPendingListeners(name, store) {
1862 + const listeners = pendingListeners.get(name);
1863 + if (!listeners) {
1864 + return;
1865 + }
1866 + pendingListeners.delete(name);
1867 + for (const pending of listeners) {
1868 + pending.unsubscribe = store.subscribe(pending.listener);
1869 + }
1870 + }
1800 1871 const subscribe2 = (listener, storeNameOrDescriptor) => {
1801 1872 if (!storeNameOrDescriptor) {
1802 1873 return emitter.subscribe(listener);
1803 1874 }
@@ -1806,9 +1877,9 @@
1806 1877 if (store) {
1807 1878 return store.subscribe(listener);
1808 1879 }
1809 1880 if (!parent) {
1810 - return emitter.subscribe(listener);
1881 + return subscribePending(storeName, listener);
1811 1882 }
1812 1883 return parent.subscribe(listener, storeNameOrDescriptor);
1813 1884 };
1814 1885 function select3(storeNameOrDescriptor) {
@@ -1885,25 +1956,13 @@
1885 1956 if (typeof store.subscribe !== "function") {
1886 1957 throw new TypeError("store.subscribe must be a function");
1887 1958 }
1888 1959 store.emitter = createEmitter();
1889 - const currentSubscribe = store.subscribe;
1890 - store.subscribe = (listener) => {
1891 - const unsubscribeFromEmitter = store.emitter.subscribe(listener);
1892 - const unsubscribeFromStore = currentSubscribe(() => {
1893 - if (store.emitter.isPaused) {
1894 - store.emitter.emit();
1895 - return;
1896 - }
1897 - listener();
1898 - });
1899 - return () => {
1900 - unsubscribeFromStore?.();
1901 - unsubscribeFromEmitter?.();
1902 - };
1903 - };
1960 + store.subscribe(() => store.emitter.emit());
1961 + store.subscribe = (listener) => store.emitter.subscribe(listener);
1904 1962 stores[name] = store;
1905 1963 store.subscribe(globalListener);
1964 + connectPendingListeners(name, store);
1906 1965 if (parent) {
1907 1966 try {
1908 1967 unlock(store.store).registerPrivateActions(
1909 1968 unlock(parent).privateActionsOf(name)
@@ -2184,8 +2243,9 @@
2184 2243 });
2185 2244
2186 2245 // packages/data/build-module/components/with-select/index.mjs
2187 2246 var import_compose2 = __toESM(require_compose(), 1);
2247 + var import_element6 = __toESM(require_element(), 1);
2188 2248
2189 2249 // packages/data/build-module/components/use-select/index.mjs
2190 2250 var import_priority_queue = __toESM(require_priority_queue(), 1);
2191 2251 var import_element5 = __toESM(require_element(), 1);
@@ -2213,10 +2273,9 @@
2213 2273 // packages/data/build-module/components/async-mode-provider/context.mjs
2214 2274 var import_element3 = __toESM(require_element(), 1);
2215 2275 var Context2 = (0, import_element3.createContext)(false);
2216 2276 Context2.displayName = "AsyncModeContext";
2217 - var { Consumer: Consumer2, Provider: Provider2 } = Context2;
2218 - var context_default2 = Provider2;
2277 + var context_default2 = Context2.Provider;
2219 2278
2220 2279 // packages/data/build-module/components/async-mode-provider/use-async-mode.mjs
2221 2280 function useAsyncMode() {
2222 2281 return (0, import_element4.useContext)(Context2);
@@ -2233,8 +2292,41 @@
2233 2292 "The `useSelect` hook returns different values when called with the same state and parameters.\nThis can lead to unnecessary re-renders and performance issues if not fixed.\n\nNon-equal value keys: %s\n\n",
2234 2293 keys.join(", ")
2235 2294 );
2236 2295 }
2296 + var deferredBuckets = /* @__PURE__ */ new WeakMap();
2297 + function subscribeDeferred(registry, storeName, listener) {
2298 + let buckets = deferredBuckets.get(registry);
2299 + if (!buckets) {
2300 + buckets = /* @__PURE__ */ new Map();
2301 + deferredBuckets.set(registry, buckets);
2302 + }
2303 + let addToBucket = buckets.get(storeName);
2304 + if (!addToBucket) {
2305 + const listeners = /* @__PURE__ */ new Set();
2306 + const flush = () => {
2307 + for (const { context, callback } of listeners) {
2308 + renderQueue.add(context, callback);
2309 + }
2310 + };
2311 + const unsubscribe = registry.subscribe(
2312 + () => renderQueue.add(listeners, flush),
2313 + storeName
2314 + );
2315 + addToBucket = (newListener) => {
2316 + listeners.add(newListener);
2317 + return () => {
2318 + if (listeners.delete(newListener) && listeners.size === 0) {
2319 + buckets.delete(storeName);
2320 + renderQueue.cancel(listeners);
2321 + unsubscribe();
2322 + }
2323 + };
2324 + };
2325 + buckets.set(storeName, addToBucket);
2326 + }
2327 + return addToBucket(listener);
2328 + }
2237 2329 function Store(registry, suspense) {
2238 2330 const select3 = suspense ? registry.suspendSelect : registry.select;
2239 2331 const queueContext = {};
2240 2332 let lastMapSelect;
@@ -2262,25 +2354,34 @@
2262 2354 const onStoreChange = () => {
2263 2355 lastMapResultValid = false;
2264 2356 listener();
2265 2357 };
2266 - const onChange = () => {
2358 + function listenToStore(storeName) {
2267 2359 if (lastIsAsync) {
2268 - renderQueue.add(queueContext, onStoreChange);
2269 - } else {
2270 - onStoreChange();
2360 + return subscribeDeferred(registry, storeName, {
2361 + context: queueContext,
2362 + callback: onStoreChange
2363 + });
2271 2364 }
2272 - };
2273 - const unsubs = [];
2365 + return registry.subscribe(onStoreChange, storeName);
2366 + }
2367 + const unsubs = /* @__PURE__ */ new Map();
2274 2368 function subscribeStore(storeName) {
2275 - unsubs.push(registry.subscribe(onChange, storeName));
2369 + unsubs.set(storeName, listenToStore(storeName));
2276 2370 }
2371 + function resubscribeStores() {
2372 + for (const [storeName, unsub] of unsubs) {
2373 + unsub?.();
2374 + unsubs.set(storeName, listenToStore(storeName));
2375 + }
2376 + }
2277 2377 for (const storeName of activeStores) {
2278 2378 subscribeStore(storeName);
2279 2379 }
2280 - activeSubscriptions.add(subscribeStore);
2380 + const subscription = { subscribeStore, resubscribeStores };
2381 + activeSubscriptions.add(subscription);
2281 2382 return () => {
2282 - activeSubscriptions.delete(subscribeStore);
2383 + activeSubscriptions.delete(subscription);
2283 2384 for (const unsub of unsubs.values()) {
2284 2385 unsub?.();
2285 2386 }
2286 2387 renderQueue.cancel(queueContext);
@@ -2292,13 +2393,18 @@
2292 2393 continue;
2293 2394 }
2294 2395 activeStores.push(newStore);
2295 2396 for (const subscription of activeSubscriptions) {
2296 - subscription(newStore);
2397 + subscription.subscribeStore(newStore);
2297 2398 }
2298 2399 }
2299 2400 }
2300 - return { subscribe: subscribe2, updateStores };
2401 + function switchMode() {
2402 + for (const subscription of activeSubscriptions) {
2403 + subscription.resubscribeStores();
2404 + }
2405 + }
2406 + return { subscribe: subscribe2, updateStores, switchMode };
2301 2407 };
2302 2408 return (mapSelect, isAsync) => {
2303 2409 function updateValue() {
2304 2410 if (lastMapResultValid && mapSelect === lastMapSelect) {
@@ -2335,14 +2441,18 @@
2335 2441 function getValue() {
2336 2442 updateValue();
2337 2443 return lastMapResult;
2338 2444 }
2339 - if (lastIsAsync && !isAsync) {
2445 + const wasAsync = lastIsAsync;
2446 + lastIsAsync = isAsync;
2447 + if (wasAsync && !isAsync) {
2340 2448 lastMapResultValid = false;
2341 2449 renderQueue.cancel(queueContext);
2342 2450 }
2343 2451 updateValue();
2344 - lastIsAsync = isAsync;
2452 + if (wasAsync !== isAsync) {
2453 + subscriber.switchMode();
2454 + }
2345 2455 return { subscribe: subscriber.subscribe, getValue };
2346 2456 };
2347 2457 }
2348 2458 function _useStaticSelect(storeName) {
@@ -2379,13 +2489,22 @@
2379 2489
2380 2490 // packages/data/build-module/components/with-select/index.mjs
2381 2491 var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
2382 2492 var withSelect = (mapSelectToProps) => (0, import_compose2.createHigherOrderComponent)(
2383 - (WrappedComponent) => (0, import_compose2.pure)((ownProps) => {
2384 - const mapSelect = (select3, registry) => mapSelectToProps(select3, ownProps, registry);
2385 - const mergeProps = useSelect(mapSelect);
2386 - return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(WrappedComponent, { ...ownProps, ...mergeProps });
2387 - }),
2493 + (WrappedComponent) => (0, import_element6.memo)(
2494 + (0, import_element6.forwardRef)(function WithSelect(ownProps, ref) {
2495 + const mapSelect = (select3, registry) => mapSelectToProps(select3, ownProps, registry);
2496 + const mergeProps = useSelect(mapSelect);
2497 + return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2498 + WrappedComponent,
2499 + {
2500 + ref,
2501 + ...ownProps,
2502 + ...mergeProps
2503 + }
2504 + );
2505 + })
2506 + ),
2388 2507 "withSelect"
2389 2508 );
2390 2509 var with_select_default = withSelect;
2391 2510
@@ -2399,17 +2518,17 @@
2399 2518 };
2400 2519 var use_dispatch_default = useDispatch;
2401 2520
2402 2521 // packages/data/build-module/components/use-dispatch/use-dispatch-with-map.mjs
2403 - var import_element6 = __toESM(require_element(), 1);
2522 + var import_element7 = __toESM(require_element(), 1);
2404 2523 var import_compose3 = __toESM(require_compose(), 1);
2405 2524 var useDispatchWithMap = (dispatchMap, deps) => {
2406 2525 const registry = useRegistry();
2407 - const currentDispatchMapRef = (0, import_element6.useRef)(dispatchMap);
2526 + const currentDispatchMapRef = (0, import_element7.useRef)(dispatchMap);
2408 2527 (0, import_compose3.useIsomorphicLayoutEffect)(() => {
2409 2528 currentDispatchMapRef.current = dispatchMap;
2410 2529 });
2411 - return (0, import_element6.useMemo)(() => {
2530 + return (0, import_element7.useMemo)(() => {
2412 2531 const currentDispatchProps = currentDispatchMapRef.current(
2413 2532 registry.dispatch,
2414 2533 registry
2415 2534 );
@@ -2491,5 +2610,7 @@
2491 2610 * Copyright (c) 2014-2017, Jon Schlinkert.
2492 2611 * Released under the MIT License.
2493 2612 *)
2494 2613 */
2614 +(window.wp ||= {}).data = wp.data;
2615 +})();
2495 2616 //# sourceMappingURL=index.js.map