PluginProbe
Gutenberg / trunk
Gutenberg vtrunk
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 → trunk 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