@wordpress/core-data 7.41.0 → 7.41.2-next.v.202603102151.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/build/actions.cjs +8 -6
- package/build/actions.cjs.map +2 -2
- package/build/entity-provider.cjs +15 -6
- package/build/entity-provider.cjs.map +2 -2
- package/build/hooks/use-entity-prop.cjs +32 -2
- package/build/hooks/use-entity-prop.cjs.map +2 -2
- package/build/private-actions.cjs +1 -1
- package/build/private-actions.cjs.map +2 -2
- package/build/queried-data/actions.cjs +1 -1
- package/build/queried-data/actions.cjs.map +2 -2
- package/build/queried-data/reducer.cjs +19 -13
- package/build/queried-data/reducer.cjs.map +2 -2
- package/build/reducer.cjs +2 -1
- package/build/reducer.cjs.map +2 -2
- package/build/resolvers.cjs +4 -2
- package/build/resolvers.cjs.map +2 -2
- package/build/sync.cjs +3 -0
- package/build/sync.cjs.map +2 -2
- package/build/utils/crdt-blocks.cjs +22 -26
- package/build/utils/crdt-blocks.cjs.map +2 -2
- package/build/utils/crdt.cjs +1 -3
- package/build/utils/crdt.cjs.map +2 -2
- package/build/utils/user-permissions.cjs +1 -4
- package/build/utils/user-permissions.cjs.map +2 -2
- package/build-module/actions.mjs +13 -7
- package/build-module/actions.mjs.map +2 -2
- package/build-module/entity-provider.mjs +15 -6
- package/build-module/entity-provider.mjs.map +2 -2
- package/build-module/hooks/use-entity-prop.mjs +33 -3
- package/build-module/hooks/use-entity-prop.mjs.map +2 -2
- package/build-module/private-actions.mjs +1 -1
- package/build-module/private-actions.mjs.map +2 -2
- package/build-module/queried-data/actions.mjs +1 -1
- package/build-module/queried-data/actions.mjs.map +2 -2
- package/build-module/queried-data/reducer.mjs +19 -13
- package/build-module/queried-data/reducer.mjs.map +2 -2
- package/build-module/reducer.mjs +2 -1
- package/build-module/reducer.mjs.map +2 -2
- package/build-module/resolvers.mjs +4 -2
- package/build-module/resolvers.mjs.map +2 -2
- package/build-module/sync.mjs +2 -0
- package/build-module/sync.mjs.map +2 -2
- package/build-module/utils/crdt-blocks.mjs +22 -26
- package/build-module/utils/crdt-blocks.mjs.map +2 -2
- package/build-module/utils/crdt.mjs +1 -3
- package/build-module/utils/crdt.mjs.map +2 -2
- package/build-module/utils/user-permissions.mjs +1 -4
- package/build-module/utils/user-permissions.mjs.map +2 -2
- package/build-types/actions.d.ts.map +1 -1
- package/build-types/entity-provider.d.ts +11 -6
- package/build-types/entity-provider.d.ts.map +1 -1
- package/build-types/hooks/use-entity-prop.d.ts.map +1 -1
- package/build-types/index.d.ts.map +1 -1
- package/build-types/queried-data/reducer.d.ts.map +1 -1
- package/build-types/reducer.d.ts.map +1 -1
- package/build-types/resolvers.d.ts.map +1 -1
- package/build-types/sync.d.ts +2 -2
- package/build-types/sync.d.ts.map +1 -1
- package/build-types/utils/crdt-blocks.d.ts.map +1 -1
- package/build-types/utils/crdt.d.ts.map +1 -1
- package/build-types/utils/user-permissions.d.ts.map +1 -1
- package/package.json +18 -18
- package/src/actions.js +24 -10
- package/src/entity-provider.js +24 -11
- package/src/hooks/use-entity-prop.js +41 -3
- package/src/private-actions.js +1 -1
- package/src/queried-data/actions.js +1 -1
- package/src/queried-data/reducer.js +26 -14
- package/src/reducer.js +4 -1
- package/src/resolvers.js +5 -3
- package/src/sync.ts +2 -0
- package/src/test/private-actions.js +1 -1
- package/src/test/resolvers.js +24 -3
- package/src/test/store.js +116 -0
- package/src/utils/crdt-blocks.ts +47 -54
- package/src/utils/crdt.ts +2 -5
- package/src/utils/test/crdt-blocks.ts +42 -24
- package/src/utils/user-permissions.js +4 -5
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/queried-data/reducer.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { combineReducers } from '@wordpress/data';\nimport { compose } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport {\n\tconservativeMapItem,\n\tifMatchingAction,\n\treplaceAction,\n\tonSubKey,\n} from '../utils';\nimport { DEFAULT_ENTITY_KEY } from '../entities';\nimport getQueryParts from './get-query-parts';\n\nfunction getContextFromAction( action ) {\n\tconst { query } = action;\n\tif ( ! query ) {\n\t\treturn 'default';\n\t}\n\n\tconst queryParts = getQueryParts( query );\n\treturn queryParts.context;\n}\n\n/**\n * Returns a merged array of item IDs, given details of the received paginated\n * items. The array is sparse-like with `undefined` entries where holes exist.\n *\n * @param {?Array<number>} itemIds Original item IDs (default empty array).\n * @param {number[]} nextItemIds Item IDs to merge.\n * @param {number} page Page of items merged.\n * @param {number} perPage Number of items per page.\n *\n * @return {number[]} Merged array of item IDs.\n */\nexport function getMergedItemIds( itemIds, nextItemIds, page, perPage ) {\n\tconst receivedAllIds = page === 1 && perPage === -1;\n\tif ( receivedAllIds ) {\n\t\treturn nextItemIds;\n\t}\n\tconst nextItemIdsStartIndex = ( page - 1 ) * perPage;\n\n\t// If later page has already been received, default to the larger known\n\t// size of the existing array, else calculate as extending the existing.\n\tconst size = Math.max(\n\t\titemIds?.length ?? 0,\n\t\tnextItemIdsStartIndex + nextItemIds.length\n\t);\n\n\t// Preallocate array since size is known.\n\tconst mergedItemIds = new Array( size );\n\n\tfor ( let i = 0; i < size; i++ ) {\n\t\t// Preserve existing item ID except for subset of range of next items.\n\t\t// We need to check against the possible maximum upper boundary because\n\t\t// a page could receive fewer than what was previously stored.\n\t\tconst isInNextItemsRange =\n\t\t\ti >= nextItemIdsStartIndex && i < nextItemIdsStartIndex + perPage;\n\t\tmergedItemIds[ i ] = isInNextItemsRange\n\t\t\t? nextItemIds[ i - nextItemIdsStartIndex ]\n\t\t\t: itemIds?.[ i ];\n\t}\n\n\treturn mergedItemIds;\n}\n\n/**\n * Helper function to filter out entities with certain IDs.\n * Entities are keyed by their ID.\n *\n * @param {Object} entities Entity objects, keyed by entity ID.\n * @param {Array} ids Entity IDs to filter out.\n *\n * @return {Object} Filtered entities.\n */\nfunction removeEntitiesById( entities, ids ) {\n\treturn Object.fromEntries(\n\t\tObject.entries( entities ).filter(\n\t\t\t( [ id ] ) =>\n\t\t\t\t! ids.some( ( itemId ) => {\n\t\t\t\t\tif ( Number.isInteger( itemId ) ) {\n\t\t\t\t\t\treturn itemId === +id;\n\t\t\t\t\t}\n\t\t\t\t\treturn itemId === id;\n\t\t\t\t} )\n\t\t)\n\t);\n}\n\n/**\n * Reducer tracking items state, keyed by ID. Items are assumed to be normal,\n * where identifiers are common across all queries.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Next state.\n */\nexport function items( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_ITEMS': {\n\t\t\tconst context = getContextFromAction( action );\n\t\t\tconst key = action.key || DEFAULT_ENTITY_KEY;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ context ]: {\n\t\t\t\t\t...state[ context ],\n\t\t\t\t\t...
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAAgC;AAChC,qBAAwB;AAKxB,mBAKO;AACP,sBAAmC;AACnC,6BAA0B;AAE1B,SAAS,qBAAsB,QAAS;AACvC,QAAM,EAAE,MAAM,IAAI;AAClB,MAAK,CAAE,OAAQ;AACd,WAAO;AAAA,EACR;AAEA,QAAM,iBAAa,uBAAAA,SAAe,KAAM;AACxC,SAAO,WAAW;AACnB;AAaO,SAAS,iBAAkB,SAAS,aAAa,MAAM,SAAU;AACvE,QAAM,iBAAiB,SAAS,KAAK,YAAY;AACjD,MAAK,gBAAiB;AACrB,WAAO;AAAA,EACR;AACA,QAAM,yBAA0B,OAAO,KAAM;AAI7C,QAAM,OAAO,KAAK;AAAA,IACjB,SAAS,UAAU;AAAA,IACnB,wBAAwB,YAAY;AAAA,EACrC;AAGA,QAAM,gBAAgB,IAAI,MAAO,IAAK;AAEtC,WAAU,IAAI,GAAG,IAAI,MAAM,KAAM;AAIhC,UAAM,qBACL,KAAK,yBAAyB,IAAI,wBAAwB;AAC3D,kBAAe,CAAE,IAAI,qBAClB,YAAa,IAAI,qBAAsB,IACvC,UAAW,CAAE;AAAA,EACjB;AAEA,SAAO;AACR;AAWA,SAAS,mBAAoB,UAAU,KAAM;AAC5C,SAAO,OAAO;AAAA,IACb,OAAO,QAAS,QAAS,EAAE;AAAA,MAC1B,CAAE,CAAE,EAAG,MACN,CAAE,IAAI,KAAM,CAAE,WAAY;AACzB,YAAK,OAAO,UAAW,MAAO,GAAI;AACjC,iBAAO,WAAW,CAAC;AAAA,QACpB;AACA,eAAO,WAAW;AAAA,MACnB,CAAE;AAAA,IACJ;AAAA,EACD;AACD;AAWO,SAAS,MAAO,QAAQ,CAAC,GAAG,QAAS;AAC3C,UAAS,OAAO,MAAO;AAAA,IACtB,KAAK,iBAAiB;AACrB,YAAM,UAAU,qBAAsB,MAAO;AAC7C,YAAM,MAAM,OAAO,OAAO;AAC1B,aAAO;AAAA,QACN,GAAG;AAAA,QACH,CAAE,OAAQ,GAAG;AAAA,UACZ,GAAG,MAAO,OAAQ;AAAA,UAClB,GAAG,OAAO,
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { combineReducers } from '@wordpress/data';\nimport { compose } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport {\n\tconservativeMapItem,\n\tifMatchingAction,\n\treplaceAction,\n\tonSubKey,\n} from '../utils';\nimport { DEFAULT_ENTITY_KEY } from '../entities';\nimport getQueryParts from './get-query-parts';\n\nfunction getContextFromAction( action ) {\n\tconst { query } = action;\n\tif ( ! query ) {\n\t\treturn 'default';\n\t}\n\n\tconst queryParts = getQueryParts( query );\n\treturn queryParts.context;\n}\n\n/**\n * Returns a merged array of item IDs, given details of the received paginated\n * items. The array is sparse-like with `undefined` entries where holes exist.\n *\n * @param {?Array<number>} itemIds Original item IDs (default empty array).\n * @param {number[]} nextItemIds Item IDs to merge.\n * @param {number} page Page of items merged.\n * @param {number} perPage Number of items per page.\n *\n * @return {number[]} Merged array of item IDs.\n */\nexport function getMergedItemIds( itemIds, nextItemIds, page, perPage ) {\n\tconst receivedAllIds = page === 1 && perPage === -1;\n\tif ( receivedAllIds ) {\n\t\treturn nextItemIds;\n\t}\n\tconst nextItemIdsStartIndex = ( page - 1 ) * perPage;\n\n\t// If later page has already been received, default to the larger known\n\t// size of the existing array, else calculate as extending the existing.\n\tconst size = Math.max(\n\t\titemIds?.length ?? 0,\n\t\tnextItemIdsStartIndex + nextItemIds.length\n\t);\n\n\t// Preallocate array since size is known.\n\tconst mergedItemIds = new Array( size );\n\n\tfor ( let i = 0; i < size; i++ ) {\n\t\t// Preserve existing item ID except for subset of range of next items.\n\t\t// We need to check against the possible maximum upper boundary because\n\t\t// a page could receive fewer than what was previously stored.\n\t\tconst isInNextItemsRange =\n\t\t\ti >= nextItemIdsStartIndex && i < nextItemIdsStartIndex + perPage;\n\t\tmergedItemIds[ i ] = isInNextItemsRange\n\t\t\t? nextItemIds[ i - nextItemIdsStartIndex ]\n\t\t\t: itemIds?.[ i ];\n\t}\n\n\treturn mergedItemIds;\n}\n\n/**\n * Helper function to filter out entities with certain IDs.\n * Entities are keyed by their ID.\n *\n * @param {Object} entities Entity objects, keyed by entity ID.\n * @param {Array} ids Entity IDs to filter out.\n *\n * @return {Object} Filtered entities.\n */\nfunction removeEntitiesById( entities, ids ) {\n\treturn Object.fromEntries(\n\t\tObject.entries( entities ).filter(\n\t\t\t( [ id ] ) =>\n\t\t\t\t! ids.some( ( itemId ) => {\n\t\t\t\t\tif ( Number.isInteger( itemId ) ) {\n\t\t\t\t\t\treturn itemId === +id;\n\t\t\t\t\t}\n\t\t\t\t\treturn itemId === id;\n\t\t\t\t} )\n\t\t)\n\t);\n}\n\n/**\n * Reducer tracking items state, keyed by ID. Items are assumed to be normal,\n * where identifiers are common across all queries.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Next state.\n */\nexport function items( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_ITEMS': {\n\t\t\tconst context = getContextFromAction( action );\n\t\t\tconst key = action.key || DEFAULT_ENTITY_KEY;\n\t\t\tconst itemsList = Array.isArray( action.items )\n\t\t\t\t? action.items\n\t\t\t\t: [ action.items ];\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ context ]: {\n\t\t\t\t\t...state[ context ],\n\t\t\t\t\t...Object.fromEntries(\n\t\t\t\t\t\titemsList.map( ( item ) => [\n\t\t\t\t\t\t\titem?.[ key ],\n\t\t\t\t\t\t\tconservativeMapItem(\n\t\t\t\t\t\t\t\tstate?.[ context ]?.[ item?.[ key ] ],\n\t\t\t\t\t\t\t\titem\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t] )\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tcase 'REMOVE_ITEMS':\n\t\t\treturn Object.fromEntries(\n\t\t\t\tObject.entries( state ).map( ( [ itemId, contextState ] ) => [\n\t\t\t\t\titemId,\n\t\t\t\t\tremoveEntitiesById( contextState, action.itemIds ),\n\t\t\t\t] )\n\t\t\t);\n\t}\n\treturn state;\n}\n\n/**\n * Reducer tracking item completeness, keyed by ID. A complete item is one for\n * which all fields are known. This is used in supporting `_fields` queries,\n * where not all properties associated with an entity are necessarily returned.\n * In such cases, completeness is used as an indication of whether it would be\n * safe to use queried data for a non-`_fields`-limited request.\n *\n * @param {Object<string,Object<string,boolean>>} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object<string,Object<string,boolean>>} Next state.\n */\nexport function itemIsComplete( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_ITEMS': {\n\t\t\tconst context = getContextFromAction( action );\n\t\t\tconst { query, key = DEFAULT_ENTITY_KEY } = action;\n\t\t\tconst itemsList = Array.isArray( action.items )\n\t\t\t\t? action.items\n\t\t\t\t: [ action.items ];\n\n\t\t\t// An item is considered complete if it is received without an associated\n\t\t\t// fields query. Ideally, this would be implemented in such a way where the\n\t\t\t// complete aggregate of all fields would satisfy completeness. Since the\n\t\t\t// fields are not consistent across all entities, this would require\n\t\t\t// introspection on the REST schema for each entity to know which fields\n\t\t\t// compose a complete item for that entity.\n\t\t\tconst queryParts = query ? getQueryParts( query ) : {};\n\t\t\tconst isCompleteQuery =\n\t\t\t\t! query || ! Array.isArray( queryParts.fields );\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ context ]: {\n\t\t\t\t\t...state[ context ],\n\t\t\t\t\t...itemsList.reduce( ( result, item ) => {\n\t\t\t\t\t\tconst itemId = item?.[ key ];\n\n\t\t\t\t\t\t// Defer to completeness if already assigned. Technically the\n\t\t\t\t\t\t// data may be outdated if receiving items for a field subset.\n\t\t\t\t\t\tresult[ itemId ] =\n\t\t\t\t\t\t\tstate?.[ context ]?.[ itemId ] || isCompleteQuery;\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}, {} ),\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tcase 'REMOVE_ITEMS':\n\t\t\treturn Object.fromEntries(\n\t\t\t\tObject.entries( state ).map( ( [ itemId, contextState ] ) => [\n\t\t\t\t\titemId,\n\t\t\t\t\tremoveEntitiesById( contextState, action.itemIds ),\n\t\t\t\t] )\n\t\t\t);\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer tracking queries state, keyed by stable query key. Each reducer\n * query object includes `itemIds` and `requestingPageByPerPage`.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Next state.\n */\nconst receiveQueries = compose( [\n\t// Limit to matching action type so we don't attempt to replace action on\n\t// an unhandled action.\n\tifMatchingAction( ( action ) => 'query' in action ),\n\n\t// Inject query parts into action for use both in `onSubKey` and reducer.\n\treplaceAction( ( action ) => {\n\t\t// `ifMatchingAction` still passes on initialization, where state is\n\t\t// undefined and a query is not assigned. Avoid attempting to parse\n\t\t// parts. `onSubKey` will omit by lack of `stableKey`.\n\t\tif ( action.query ) {\n\t\t\treturn {\n\t\t\t\t...action,\n\t\t\t\t...getQueryParts( action.query ),\n\t\t\t};\n\t\t}\n\n\t\treturn action;\n\t} ),\n\n\tonSubKey( 'context' ),\n\n\t// Queries shape is shared, but keyed by query `stableKey` part. Original\n\t// reducer tracks only a single query object.\n\tonSubKey( 'stableKey' ),\n] )( ( state = {}, action ) => {\n\tif ( action.type !== 'RECEIVE_ITEMS' ) {\n\t\treturn state;\n\t}\n\n\t// Single items don't have page or total count metadata\n\t// (only collection query responses do), so skip updating itemIds.\n\tif ( ! Array.isArray( action.items ) ) {\n\t\treturn state;\n\t}\n\n\tconst key = action.key ?? DEFAULT_ENTITY_KEY;\n\n\treturn {\n\t\titemIds: getMergedItemIds(\n\t\t\tstate?.itemIds || [],\n\t\t\taction.items.map( ( item ) => item?.[ key ] ).filter( Boolean ),\n\t\t\taction.page,\n\t\t\taction.perPage\n\t\t),\n\t\tmeta: action.meta,\n\t};\n} );\n\n/**\n * Reducer tracking queries state.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Next state.\n */\nconst queries = ( state = {}, action ) => {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_ITEMS':\n\t\t\treturn receiveQueries( state, action );\n\t\tcase 'REMOVE_ITEMS':\n\t\t\tconst removedItems = action.itemIds.reduce( ( result, itemId ) => {\n\t\t\t\tresult[ itemId ] = true;\n\t\t\t\treturn result;\n\t\t\t}, {} );\n\n\t\t\treturn Object.fromEntries(\n\t\t\t\tObject.entries( state ).map(\n\t\t\t\t\t( [ queryGroup, contextQueries ] ) => [\n\t\t\t\t\t\tqueryGroup,\n\t\t\t\t\t\tObject.fromEntries(\n\t\t\t\t\t\t\tObject.entries( contextQueries ).map(\n\t\t\t\t\t\t\t\t( [ query, queryItems ] ) => [\n\t\t\t\t\t\t\t\t\tquery,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t...queryItems,\n\t\t\t\t\t\t\t\t\t\titemIds: queryItems.itemIds.filter(\n\t\t\t\t\t\t\t\t\t\t\t( queryId ) =>\n\t\t\t\t\t\t\t\t\t\t\t\t! removedItems[ queryId ]\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t),\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t);\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n\nexport default combineReducers( {\n\titems,\n\titemIsComplete,\n\tqueries,\n} );\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["getQueryParts"]
|
|
7
7
|
}
|
package/build/reducer.cjs
CHANGED
|
@@ -177,7 +177,8 @@ function entity(entityConfig) {
|
|
|
177
177
|
return state;
|
|
178
178
|
}
|
|
179
179
|
const nextState = { ...state };
|
|
180
|
-
|
|
180
|
+
const itemsList = Array.isArray(action.items) ? action.items : [action.items];
|
|
181
|
+
for (const record of itemsList) {
|
|
181
182
|
const recordId = record?.[action.key];
|
|
182
183
|
const edits = nextState[recordId];
|
|
183
184
|
if (!edits) {
|
package/build/reducer.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/reducer.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6/index.js';\n\n/**\n * WordPress dependencies\n */\nimport { compose } from '@wordpress/compose';\nimport { combineReducers } from '@wordpress/data';\nimport { createUndoManager } from '@wordpress/undo-manager';\n\n/**\n * Internal dependencies\n */\nimport { ifMatchingAction, replaceAction } from './utils';\nimport { reducer as queriedDataReducer } from './queried-data';\nimport { rootEntitiesConfig, DEFAULT_ENTITY_KEY } from './entities';\n\n/** @typedef {import('./types').AnyFunction} AnyFunction */\n\n/**\n * Reducer managing authors state. Keyed by id.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function users( state = { byId: {}, queries: {} }, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_USER_QUERY':\n\t\t\treturn {\n\t\t\t\tbyId: {\n\t\t\t\t\t...state.byId,\n\t\t\t\t\t// Key users by their ID.\n\t\t\t\t\t...action.users.reduce(\n\t\t\t\t\t\t( newUsers, user ) => ( {\n\t\t\t\t\t\t\t...newUsers,\n\t\t\t\t\t\t\t[ user.id ]: user,\n\t\t\t\t\t\t} ),\n\t\t\t\t\t\t{}\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\tqueries: {\n\t\t\t\t\t...state.queries,\n\t\t\t\t\t[ action.queryID ]: action.users.map( ( user ) => user.id ),\n\t\t\t\t},\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing current user state.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function currentUser( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_USER':\n\t\t\treturn action.currentUser;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the current theme.\n *\n * @param {string|undefined} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string|undefined} Updated state.\n */\nexport function currentTheme( state = undefined, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_THEME':\n\t\t\treturn action.currentTheme.stylesheet;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the current global styles id.\n *\n * @param {string|undefined} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string|undefined} Updated state.\n */\nexport function currentGlobalStylesId( state = undefined, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_GLOBAL_STYLES_ID':\n\t\t\treturn action.id;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the theme base global styles.\n *\n * @param {Record<string, object>} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Record<string, object>} Updated state.\n */\nexport function themeBaseGlobalStyles( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_THEME_GLOBAL_STYLES':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.stylesheet ]: action.globalStyles,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the theme global styles variations.\n *\n * @param {Record<string, object>} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Record<string, object>} Updated state.\n */\nexport function themeGlobalStyleVariations( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_THEME_GLOBAL_STYLE_VARIATIONS':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.stylesheet ]: action.variations,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\nconst withMultiEntityRecordEdits = ( reducer ) => ( state, action ) => {\n\tif ( action.type === 'UNDO' || action.type === 'REDO' ) {\n\t\tconst { record } = action;\n\n\t\tlet newState = state;\n\t\trecord.forEach( ( { id: { kind, name, recordId }, changes } ) => {\n\t\t\tnewState = reducer( newState, {\n\t\t\t\ttype: 'EDIT_ENTITY_RECORD',\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\trecordId,\n\t\t\t\tedits: Object.entries( changes ).reduce(\n\t\t\t\t\t( acc, [ key, value ] ) => {\n\t\t\t\t\t\tacc[ key ] =\n\t\t\t\t\t\t\taction.type === 'UNDO' ? value.from : value.to;\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{}\n\t\t\t\t),\n\t\t\t} );\n\t\t} );\n\t\treturn newState;\n\t}\n\n\treturn reducer( state, action );\n};\n\n/**\n * Higher Order Reducer for a given entity config. It supports:\n *\n * - Fetching\n * - Editing\n * - Saving\n *\n * @param {Object} entityConfig Entity config.\n *\n * @return {AnyFunction} Reducer.\n */\nfunction entity( entityConfig ) {\n\treturn compose( [\n\t\twithMultiEntityRecordEdits,\n\n\t\t// Limit to matching action type so we don't attempt to replace action on\n\t\t// an unhandled action.\n\t\tifMatchingAction(\n\t\t\t( action ) =>\n\t\t\t\taction.name &&\n\t\t\t\taction.kind &&\n\t\t\t\taction.name === entityConfig.name &&\n\t\t\t\taction.kind === entityConfig.kind\n\t\t),\n\n\t\t// Inject the entity config into the action.\n\t\treplaceAction( ( action ) => {\n\t\t\treturn {\n\t\t\t\tkey: entityConfig.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t...action,\n\t\t\t};\n\t\t} ),\n\t] )(\n\t\tcombineReducers( {\n\t\t\tqueriedData: queriedDataReducer,\n\t\t\tedits: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'RECEIVE_ITEMS':\n\t\t\t\t\t\tconst context = action?.query?.context ?? 'default';\n\t\t\t\t\t\tif ( context !== 'default' ) {\n\t\t\t\t\t\t\treturn state;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst nextState = { ...state };\n\n\t\t\t\t\t\tfor ( const record of action.items ) {\n\t\t\t\t\t\t\tconst recordId = record?.[ action.key ];\n\t\t\t\t\t\t\tconst edits = nextState[ recordId ];\n\t\t\t\t\t\t\tif ( ! edits ) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst nextEdits = Object.keys( edits ).reduce(\n\t\t\t\t\t\t\t\t( acc, key ) => {\n\t\t\t\t\t\t\t\t\t// If the edited value is still different to the persisted value,\n\t\t\t\t\t\t\t\t\t// keep the edited value in edits.\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t// Edits are the \"raw\" attribute values, but records may have\n\t\t\t\t\t\t\t\t\t\t// objects with more properties, so we use `get` here for the\n\t\t\t\t\t\t\t\t\t\t// comparison.\n\t\t\t\t\t\t\t\t\t\t! fastDeepEqual(\n\t\t\t\t\t\t\t\t\t\t\tedits[ key ],\n\t\t\t\t\t\t\t\t\t\t\trecord[ key ]?.raw ?? record[ key ]\n\t\t\t\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t\t\t\t// Sometimes the server alters the sent value which means\n\t\t\t\t\t\t\t\t\t\t// we need to also remove the edits before the api request.\n\t\t\t\t\t\t\t\t\t\t( ! action.persistedEdits ||\n\t\t\t\t\t\t\t\t\t\t\t! fastDeepEqual(\n\t\t\t\t\t\t\t\t\t\t\t\tedits[ key ],\n\t\t\t\t\t\t\t\t\t\t\t\taction.persistedEdits[ key ]\n\t\t\t\t\t\t\t\t\t\t\t) )\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tacc[ key ] = edits[ key ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn acc;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif ( Object.keys( nextEdits ).length ) {\n\t\t\t\t\t\t\t\tnextState[ recordId ] = nextEdits;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdelete nextState[ recordId ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn nextState;\n\n\t\t\t\t\tcase 'EDIT_ENTITY_RECORD':\n\t\t\t\t\t\tconst nextEdits = {\n\t\t\t\t\t\t\t...state[ action.recordId ],\n\t\t\t\t\t\t\t...action.edits,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tObject.keys( nextEdits ).forEach( ( key ) => {\n\t\t\t\t\t\t\t// Delete cleared edits so that the properties\n\t\t\t\t\t\t\t// are not considered dirty.\n\t\t\t\t\t\t\tif ( nextEdits[ key ] === undefined ) {\n\t\t\t\t\t\t\t\tdelete nextEdits[ key ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: nextEdits,\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\n\t\t\tsaving: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'SAVE_ENTITY_RECORD_START':\n\t\t\t\t\tcase 'SAVE_ENTITY_RECORD_FINISH':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: {\n\t\t\t\t\t\t\t\tpending:\n\t\t\t\t\t\t\t\t\taction.type === 'SAVE_ENTITY_RECORD_START',\n\t\t\t\t\t\t\t\terror: action.error,\n\t\t\t\t\t\t\t\tisAutosave: action.isAutosave,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\n\t\t\tdeleting: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'DELETE_ENTITY_RECORD_START':\n\t\t\t\t\tcase 'DELETE_ENTITY_RECORD_FINISH':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: {\n\t\t\t\t\t\t\t\tpending:\n\t\t\t\t\t\t\t\t\taction.type ===\n\t\t\t\t\t\t\t\t\t'DELETE_ENTITY_RECORD_START',\n\t\t\t\t\t\t\t\terror: action.error,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\n\t\t\trevisions: ( state = {}, action ) => {\n\t\t\t\t// Use the same queriedDataReducer shape for revisions.\n\t\t\t\tif ( action.type === 'RECEIVE_ITEM_REVISIONS' ) {\n\t\t\t\t\tconst recordKey = action.recordKey;\n\t\t\t\t\tdelete action.recordKey;\n\t\t\t\t\tconst newState = queriedDataReducer( state[ recordKey ], {\n\t\t\t\t\t\t...action,\n\t\t\t\t\t\ttype: 'RECEIVE_ITEMS',\n\t\t\t\t\t} );\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...state,\n\t\t\t\t\t\t[ recordKey ]: newState,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif ( action.type === 'REMOVE_ITEMS' ) {\n\t\t\t\t\treturn Object.fromEntries(\n\t\t\t\t\t\tObject.entries( state ).filter(\n\t\t\t\t\t\t\t( [ id ] ) =>\n\t\t\t\t\t\t\t\t! action.itemIds.some( ( itemId ) => {\n\t\t\t\t\t\t\t\t\tif ( Number.isInteger( itemId ) ) {\n\t\t\t\t\t\t\t\t\t\treturn itemId === +id;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn itemId === id;\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\t\t} )\n\t);\n}\n\n/**\n * Reducer keeping track of the registered entities.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function entitiesConfig( state = rootEntitiesConfig, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'ADD_ENTITIES':\n\t\t\treturn [ ...state, ...action.entities ];\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer keeping track of the registered entities config and data.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport const entities = ( state = {}, action ) => {\n\tconst newConfig = entitiesConfig( state.config, action );\n\n\t// Generates a reducer for the entities nested by `kind` and `name`.\n\t// A config array with shape:\n\t// ```\n\t// [\n\t// { kind: 'taxonomy', name: 'category' },\n\t// { kind: 'taxonomy', name: 'post_tag' },\n\t// { kind: 'postType', name: 'post' },\n\t// { kind: 'postType', name: 'page' },\n\t// ]\n\t// ```\n\t// generates a reducer for state tree with shape:\n\t// ```\n\t// {\n\t// taxonomy: {\n\t// category,\n\t// post_tag,\n\t// },\n\t// postType: {\n\t// post,\n\t// page,\n\t// },\n\t// }\n\t// ```\n\tlet entitiesDataReducer = state.reducer;\n\tif ( ! entitiesDataReducer || newConfig !== state.config ) {\n\t\tconst entitiesByKind = newConfig.reduce( ( acc, record ) => {\n\t\t\tconst { kind } = record;\n\t\t\tif ( ! acc[ kind ] ) {\n\t\t\t\tacc[ kind ] = [];\n\t\t\t}\n\t\t\tacc[ kind ].push( record );\n\t\t\treturn acc;\n\t\t}, {} );\n\n\t\tentitiesDataReducer = combineReducers(\n\t\t\tObject.fromEntries(\n\t\t\t\tObject.entries( entitiesByKind ).map(\n\t\t\t\t\t( [ kind, subEntities ] ) => {\n\t\t\t\t\t\tconst kindReducer = combineReducers(\n\t\t\t\t\t\t\tObject.fromEntries(\n\t\t\t\t\t\t\t\tsubEntities.map( ( entityConfig ) => [\n\t\t\t\t\t\t\t\t\tentityConfig.name,\n\t\t\t\t\t\t\t\t\tentity( entityConfig ),\n\t\t\t\t\t\t\t\t] )\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn [ kind, kindReducer ];\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t}\n\n\tconst newData = entitiesDataReducer( state.records, action );\n\n\tif (\n\t\tnewData === state.records &&\n\t\tnewConfig === state.config &&\n\t\tentitiesDataReducer === state.reducer\n\t) {\n\t\treturn state;\n\t}\n\n\treturn {\n\t\treducer: entitiesDataReducer,\n\t\trecords: newData,\n\t\tconfig: newConfig,\n\t};\n};\n\n/**\n * @type {UndoManager}\n */\nexport function undoManager( state = createUndoManager() ) {\n\treturn state;\n}\n\nexport function editsReference( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'EDIT_ENTITY_RECORD':\n\t\tcase 'UNDO':\n\t\tcase 'REDO':\n\t\t\treturn {};\n\t}\n\treturn state;\n}\n\n/**\n * Reducer managing embed preview data.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function embedPreviews( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_EMBED_PREVIEW':\n\t\t\tconst { url, preview } = action;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ url ]: preview,\n\t\t\t};\n\t}\n\treturn state;\n}\n\n/**\n * State which tracks whether the user can perform an action on a REST\n * resource.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function userPermissions( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_USER_PERMISSION':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.key ]: action.isAllowed,\n\t\t\t};\n\t\tcase 'RECEIVE_USER_PERMISSIONS':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t...action.permissions,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning autosaves keyed by their parent's post id.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function autosaves( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_AUTOSAVES':\n\t\t\tconst { postId, autosaves: autosavesData } = action;\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ postId ]: autosavesData,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\nexport function blockPatterns( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_BLOCK_PATTERNS':\n\t\t\treturn action.patterns;\n\t}\n\n\treturn state;\n}\n\nexport function blockPatternCategories( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_BLOCK_PATTERN_CATEGORIES':\n\t\t\treturn action.categories;\n\t}\n\n\treturn state;\n}\n\nexport function userPatternCategories( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_USER_PATTERN_CATEGORIES':\n\t\t\treturn action.patternCategories;\n\t}\n\treturn state;\n}\n\nexport function navigationFallbackId( state = null, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_NAVIGATION_FALLBACK_ID':\n\t\t\treturn action.fallbackId;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the theme global styles revisions.\n *\n * @param {Record<string, object>} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Record<string, object>} Updated state.\n */\nexport function themeGlobalStyleRevisions( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_THEME_GLOBAL_STYLE_REVISIONS':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.currentId ]: action.revisions,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the template lookup per query.\n *\n * @param {Record<string, string>} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Record<string, string>} Updated state.\n */\nexport function defaultTemplates( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_DEFAULT_TEMPLATE':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ JSON.stringify( action.query ) ]: action.templateId,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning an object of registered post meta.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function registeredPostMeta( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_REGISTERED_POST_META':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.postType ]: action.registeredPostMeta,\n\t\t\t};\n\t}\n\treturn state;\n}\n\n/**\n * Reducer managing editor settings.\n *\n * @param {Object} state Current state.\n * @param {Object} action Action object.\n *\n * @return {Object} Updated state.\n */\nexport function editorSettings( state = null, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_EDITOR_SETTINGS':\n\t\t\treturn action.settings;\n\t}\n\treturn state;\n}\n\n/**\n * Reducer managing editor assets.\n *\n * @param {Object} state Current state.\n * @param {Object} action Action object.\n *\n * @return {Object} Updated state.\n */\nexport function editorAssets( state = null, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_EDITOR_ASSETS':\n\t\t\treturn action.assets;\n\t}\n\treturn state;\n}\n\n/**\n * Reducer managing sync connection states for entities.\n * Keyed by \"kind/name:id\" (e.g., \"postType/post:123\").\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function syncConnectionStatuses( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_SYNC_CONNECTION_STATUS': {\n\t\t\tconst key = `${ action.kind }/${ action.name }:${ action.key }`;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ key ]: action.status,\n\t\t\t};\n\t\t}\n\t\tcase 'CLEAR_SYNC_CONNECTION_STATUS': {\n\t\t\tconst key = `${ action.kind }/${ action.name }:${ action.key }`;\n\t\t\tconst { [ key ]: _, ...rest } = state;\n\t\t\treturn rest;\n\t\t}\n\t}\n\treturn state;\n}\n\n/**\n * Reducer managing whether collaboration is supported.\n *\n * Default to true, as collaboration is supported by default\n * unless explicitly disabled due to unsupported conditions\n * such as metaboxes.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function collaborationSupported( state = true, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_COLLABORATION_SUPPORTED':\n\t\t\treturn action.supported;\n\t}\n\treturn state;\n}\n\nexport default combineReducers( {\n\tusers,\n\tcurrentTheme,\n\tcurrentGlobalStylesId,\n\tcurrentUser,\n\tthemeGlobalStyleVariations,\n\tthemeBaseGlobalStyles,\n\tthemeGlobalStyleRevisions,\n\tentities,\n\teditsReference,\n\tundoManager,\n\tembedPreviews,\n\tuserPermissions,\n\tautosaves,\n\tblockPatterns,\n\tblockPatternCategories,\n\tuserPatternCategories,\n\tnavigationFallbackId,\n\tdefaultTemplates,\n\tregisteredPostMeta,\n\teditorSettings,\n\teditorAssets,\n\tsyncConnectionStatuses,\n\tcollaborationSupported,\n} );\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6/index.js';\n\n/**\n * WordPress dependencies\n */\nimport { compose } from '@wordpress/compose';\nimport { combineReducers } from '@wordpress/data';\nimport { createUndoManager } from '@wordpress/undo-manager';\n\n/**\n * Internal dependencies\n */\nimport { ifMatchingAction, replaceAction } from './utils';\nimport { reducer as queriedDataReducer } from './queried-data';\nimport { rootEntitiesConfig, DEFAULT_ENTITY_KEY } from './entities';\n\n/** @typedef {import('./types').AnyFunction} AnyFunction */\n\n/**\n * Reducer managing authors state. Keyed by id.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function users( state = { byId: {}, queries: {} }, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_USER_QUERY':\n\t\t\treturn {\n\t\t\t\tbyId: {\n\t\t\t\t\t...state.byId,\n\t\t\t\t\t// Key users by their ID.\n\t\t\t\t\t...action.users.reduce(\n\t\t\t\t\t\t( newUsers, user ) => ( {\n\t\t\t\t\t\t\t...newUsers,\n\t\t\t\t\t\t\t[ user.id ]: user,\n\t\t\t\t\t\t} ),\n\t\t\t\t\t\t{}\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\tqueries: {\n\t\t\t\t\t...state.queries,\n\t\t\t\t\t[ action.queryID ]: action.users.map( ( user ) => user.id ),\n\t\t\t\t},\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing current user state.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function currentUser( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_USER':\n\t\t\treturn action.currentUser;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the current theme.\n *\n * @param {string|undefined} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string|undefined} Updated state.\n */\nexport function currentTheme( state = undefined, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_THEME':\n\t\t\treturn action.currentTheme.stylesheet;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the current global styles id.\n *\n * @param {string|undefined} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string|undefined} Updated state.\n */\nexport function currentGlobalStylesId( state = undefined, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_GLOBAL_STYLES_ID':\n\t\t\treturn action.id;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the theme base global styles.\n *\n * @param {Record<string, object>} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Record<string, object>} Updated state.\n */\nexport function themeBaseGlobalStyles( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_THEME_GLOBAL_STYLES':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.stylesheet ]: action.globalStyles,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the theme global styles variations.\n *\n * @param {Record<string, object>} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Record<string, object>} Updated state.\n */\nexport function themeGlobalStyleVariations( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_THEME_GLOBAL_STYLE_VARIATIONS':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.stylesheet ]: action.variations,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\nconst withMultiEntityRecordEdits = ( reducer ) => ( state, action ) => {\n\tif ( action.type === 'UNDO' || action.type === 'REDO' ) {\n\t\tconst { record } = action;\n\n\t\tlet newState = state;\n\t\trecord.forEach( ( { id: { kind, name, recordId }, changes } ) => {\n\t\t\tnewState = reducer( newState, {\n\t\t\t\ttype: 'EDIT_ENTITY_RECORD',\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\trecordId,\n\t\t\t\tedits: Object.entries( changes ).reduce(\n\t\t\t\t\t( acc, [ key, value ] ) => {\n\t\t\t\t\t\tacc[ key ] =\n\t\t\t\t\t\t\taction.type === 'UNDO' ? value.from : value.to;\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{}\n\t\t\t\t),\n\t\t\t} );\n\t\t} );\n\t\treturn newState;\n\t}\n\n\treturn reducer( state, action );\n};\n\n/**\n * Higher Order Reducer for a given entity config. It supports:\n *\n * - Fetching\n * - Editing\n * - Saving\n *\n * @param {Object} entityConfig Entity config.\n *\n * @return {AnyFunction} Reducer.\n */\nfunction entity( entityConfig ) {\n\treturn compose( [\n\t\twithMultiEntityRecordEdits,\n\n\t\t// Limit to matching action type so we don't attempt to replace action on\n\t\t// an unhandled action.\n\t\tifMatchingAction(\n\t\t\t( action ) =>\n\t\t\t\taction.name &&\n\t\t\t\taction.kind &&\n\t\t\t\taction.name === entityConfig.name &&\n\t\t\t\taction.kind === entityConfig.kind\n\t\t),\n\n\t\t// Inject the entity config into the action.\n\t\treplaceAction( ( action ) => {\n\t\t\treturn {\n\t\t\t\tkey: entityConfig.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t...action,\n\t\t\t};\n\t\t} ),\n\t] )(\n\t\tcombineReducers( {\n\t\t\tqueriedData: queriedDataReducer,\n\t\t\tedits: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'RECEIVE_ITEMS':\n\t\t\t\t\t\tconst context = action?.query?.context ?? 'default';\n\t\t\t\t\t\tif ( context !== 'default' ) {\n\t\t\t\t\t\t\treturn state;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst nextState = { ...state };\n\t\t\t\t\t\tconst itemsList = Array.isArray( action.items )\n\t\t\t\t\t\t\t? action.items\n\t\t\t\t\t\t\t: [ action.items ];\n\n\t\t\t\t\t\tfor ( const record of itemsList ) {\n\t\t\t\t\t\t\tconst recordId = record?.[ action.key ];\n\t\t\t\t\t\t\tconst edits = nextState[ recordId ];\n\t\t\t\t\t\t\tif ( ! edits ) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst nextEdits = Object.keys( edits ).reduce(\n\t\t\t\t\t\t\t\t( acc, key ) => {\n\t\t\t\t\t\t\t\t\t// If the edited value is still different to the persisted value,\n\t\t\t\t\t\t\t\t\t// keep the edited value in edits.\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t// Edits are the \"raw\" attribute values, but records may have\n\t\t\t\t\t\t\t\t\t\t// objects with more properties, so we use `get` here for the\n\t\t\t\t\t\t\t\t\t\t// comparison.\n\t\t\t\t\t\t\t\t\t\t! fastDeepEqual(\n\t\t\t\t\t\t\t\t\t\t\tedits[ key ],\n\t\t\t\t\t\t\t\t\t\t\trecord[ key ]?.raw ?? record[ key ]\n\t\t\t\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t\t\t\t// Sometimes the server alters the sent value which means\n\t\t\t\t\t\t\t\t\t\t// we need to also remove the edits before the api request.\n\t\t\t\t\t\t\t\t\t\t( ! action.persistedEdits ||\n\t\t\t\t\t\t\t\t\t\t\t! fastDeepEqual(\n\t\t\t\t\t\t\t\t\t\t\t\tedits[ key ],\n\t\t\t\t\t\t\t\t\t\t\t\taction.persistedEdits[ key ]\n\t\t\t\t\t\t\t\t\t\t\t) )\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tacc[ key ] = edits[ key ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn acc;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif ( Object.keys( nextEdits ).length ) {\n\t\t\t\t\t\t\t\tnextState[ recordId ] = nextEdits;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdelete nextState[ recordId ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn nextState;\n\n\t\t\t\t\tcase 'EDIT_ENTITY_RECORD':\n\t\t\t\t\t\tconst nextEdits = {\n\t\t\t\t\t\t\t...state[ action.recordId ],\n\t\t\t\t\t\t\t...action.edits,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tObject.keys( nextEdits ).forEach( ( key ) => {\n\t\t\t\t\t\t\t// Delete cleared edits so that the properties\n\t\t\t\t\t\t\t// are not considered dirty.\n\t\t\t\t\t\t\tif ( nextEdits[ key ] === undefined ) {\n\t\t\t\t\t\t\t\tdelete nextEdits[ key ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: nextEdits,\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\n\t\t\tsaving: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'SAVE_ENTITY_RECORD_START':\n\t\t\t\t\tcase 'SAVE_ENTITY_RECORD_FINISH':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: {\n\t\t\t\t\t\t\t\tpending:\n\t\t\t\t\t\t\t\t\taction.type === 'SAVE_ENTITY_RECORD_START',\n\t\t\t\t\t\t\t\terror: action.error,\n\t\t\t\t\t\t\t\tisAutosave: action.isAutosave,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\n\t\t\tdeleting: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'DELETE_ENTITY_RECORD_START':\n\t\t\t\t\tcase 'DELETE_ENTITY_RECORD_FINISH':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: {\n\t\t\t\t\t\t\t\tpending:\n\t\t\t\t\t\t\t\t\taction.type ===\n\t\t\t\t\t\t\t\t\t'DELETE_ENTITY_RECORD_START',\n\t\t\t\t\t\t\t\terror: action.error,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\n\t\t\trevisions: ( state = {}, action ) => {\n\t\t\t\t// Use the same queriedDataReducer shape for revisions.\n\t\t\t\tif ( action.type === 'RECEIVE_ITEM_REVISIONS' ) {\n\t\t\t\t\tconst recordKey = action.recordKey;\n\t\t\t\t\tdelete action.recordKey;\n\t\t\t\t\tconst newState = queriedDataReducer( state[ recordKey ], {\n\t\t\t\t\t\t...action,\n\t\t\t\t\t\ttype: 'RECEIVE_ITEMS',\n\t\t\t\t\t} );\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...state,\n\t\t\t\t\t\t[ recordKey ]: newState,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif ( action.type === 'REMOVE_ITEMS' ) {\n\t\t\t\t\treturn Object.fromEntries(\n\t\t\t\t\t\tObject.entries( state ).filter(\n\t\t\t\t\t\t\t( [ id ] ) =>\n\t\t\t\t\t\t\t\t! action.itemIds.some( ( itemId ) => {\n\t\t\t\t\t\t\t\t\tif ( Number.isInteger( itemId ) ) {\n\t\t\t\t\t\t\t\t\t\treturn itemId === +id;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn itemId === id;\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\t\t} )\n\t);\n}\n\n/**\n * Reducer keeping track of the registered entities.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function entitiesConfig( state = rootEntitiesConfig, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'ADD_ENTITIES':\n\t\t\treturn [ ...state, ...action.entities ];\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer keeping track of the registered entities config and data.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport const entities = ( state = {}, action ) => {\n\tconst newConfig = entitiesConfig( state.config, action );\n\n\t// Generates a reducer for the entities nested by `kind` and `name`.\n\t// A config array with shape:\n\t// ```\n\t// [\n\t// { kind: 'taxonomy', name: 'category' },\n\t// { kind: 'taxonomy', name: 'post_tag' },\n\t// { kind: 'postType', name: 'post' },\n\t// { kind: 'postType', name: 'page' },\n\t// ]\n\t// ```\n\t// generates a reducer for state tree with shape:\n\t// ```\n\t// {\n\t// taxonomy: {\n\t// category,\n\t// post_tag,\n\t// },\n\t// postType: {\n\t// post,\n\t// page,\n\t// },\n\t// }\n\t// ```\n\tlet entitiesDataReducer = state.reducer;\n\tif ( ! entitiesDataReducer || newConfig !== state.config ) {\n\t\tconst entitiesByKind = newConfig.reduce( ( acc, record ) => {\n\t\t\tconst { kind } = record;\n\t\t\tif ( ! acc[ kind ] ) {\n\t\t\t\tacc[ kind ] = [];\n\t\t\t}\n\t\t\tacc[ kind ].push( record );\n\t\t\treturn acc;\n\t\t}, {} );\n\n\t\tentitiesDataReducer = combineReducers(\n\t\t\tObject.fromEntries(\n\t\t\t\tObject.entries( entitiesByKind ).map(\n\t\t\t\t\t( [ kind, subEntities ] ) => {\n\t\t\t\t\t\tconst kindReducer = combineReducers(\n\t\t\t\t\t\t\tObject.fromEntries(\n\t\t\t\t\t\t\t\tsubEntities.map( ( entityConfig ) => [\n\t\t\t\t\t\t\t\t\tentityConfig.name,\n\t\t\t\t\t\t\t\t\tentity( entityConfig ),\n\t\t\t\t\t\t\t\t] )\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn [ kind, kindReducer ];\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t}\n\n\tconst newData = entitiesDataReducer( state.records, action );\n\n\tif (\n\t\tnewData === state.records &&\n\t\tnewConfig === state.config &&\n\t\tentitiesDataReducer === state.reducer\n\t) {\n\t\treturn state;\n\t}\n\n\treturn {\n\t\treducer: entitiesDataReducer,\n\t\trecords: newData,\n\t\tconfig: newConfig,\n\t};\n};\n\n/**\n * @type {UndoManager}\n */\nexport function undoManager( state = createUndoManager() ) {\n\treturn state;\n}\n\nexport function editsReference( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'EDIT_ENTITY_RECORD':\n\t\tcase 'UNDO':\n\t\tcase 'REDO':\n\t\t\treturn {};\n\t}\n\treturn state;\n}\n\n/**\n * Reducer managing embed preview data.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function embedPreviews( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_EMBED_PREVIEW':\n\t\t\tconst { url, preview } = action;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ url ]: preview,\n\t\t\t};\n\t}\n\treturn state;\n}\n\n/**\n * State which tracks whether the user can perform an action on a REST\n * resource.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function userPermissions( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_USER_PERMISSION':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.key ]: action.isAllowed,\n\t\t\t};\n\t\tcase 'RECEIVE_USER_PERMISSIONS':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t...action.permissions,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning autosaves keyed by their parent's post id.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function autosaves( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_AUTOSAVES':\n\t\t\tconst { postId, autosaves: autosavesData } = action;\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ postId ]: autosavesData,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\nexport function blockPatterns( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_BLOCK_PATTERNS':\n\t\t\treturn action.patterns;\n\t}\n\n\treturn state;\n}\n\nexport function blockPatternCategories( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_BLOCK_PATTERN_CATEGORIES':\n\t\t\treturn action.categories;\n\t}\n\n\treturn state;\n}\n\nexport function userPatternCategories( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_USER_PATTERN_CATEGORIES':\n\t\t\treturn action.patternCategories;\n\t}\n\treturn state;\n}\n\nexport function navigationFallbackId( state = null, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_NAVIGATION_FALLBACK_ID':\n\t\t\treturn action.fallbackId;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the theme global styles revisions.\n *\n * @param {Record<string, object>} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Record<string, object>} Updated state.\n */\nexport function themeGlobalStyleRevisions( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_THEME_GLOBAL_STYLE_REVISIONS':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.currentId ]: action.revisions,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the template lookup per query.\n *\n * @param {Record<string, string>} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Record<string, string>} Updated state.\n */\nexport function defaultTemplates( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_DEFAULT_TEMPLATE':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ JSON.stringify( action.query ) ]: action.templateId,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning an object of registered post meta.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function registeredPostMeta( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_REGISTERED_POST_META':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.postType ]: action.registeredPostMeta,\n\t\t\t};\n\t}\n\treturn state;\n}\n\n/**\n * Reducer managing editor settings.\n *\n * @param {Object} state Current state.\n * @param {Object} action Action object.\n *\n * @return {Object} Updated state.\n */\nexport function editorSettings( state = null, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_EDITOR_SETTINGS':\n\t\t\treturn action.settings;\n\t}\n\treturn state;\n}\n\n/**\n * Reducer managing editor assets.\n *\n * @param {Object} state Current state.\n * @param {Object} action Action object.\n *\n * @return {Object} Updated state.\n */\nexport function editorAssets( state = null, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_EDITOR_ASSETS':\n\t\t\treturn action.assets;\n\t}\n\treturn state;\n}\n\n/**\n * Reducer managing sync connection states for entities.\n * Keyed by \"kind/name:id\" (e.g., \"postType/post:123\").\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function syncConnectionStatuses( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_SYNC_CONNECTION_STATUS': {\n\t\t\tconst key = `${ action.kind }/${ action.name }:${ action.key }`;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ key ]: action.status,\n\t\t\t};\n\t\t}\n\t\tcase 'CLEAR_SYNC_CONNECTION_STATUS': {\n\t\t\tconst key = `${ action.kind }/${ action.name }:${ action.key }`;\n\t\t\tconst { [ key ]: _, ...rest } = state;\n\t\t\treturn rest;\n\t\t}\n\t}\n\treturn state;\n}\n\n/**\n * Reducer managing whether collaboration is supported.\n *\n * Default to true, as collaboration is supported by default\n * unless explicitly disabled due to unsupported conditions\n * such as metaboxes.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function collaborationSupported( state = true, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_COLLABORATION_SUPPORTED':\n\t\t\treturn action.supported;\n\t}\n\treturn state;\n}\n\nexport default combineReducers( {\n\tusers,\n\tcurrentTheme,\n\tcurrentGlobalStylesId,\n\tcurrentUser,\n\tthemeGlobalStyleVariations,\n\tthemeBaseGlobalStyles,\n\tthemeGlobalStyleRevisions,\n\tentities,\n\teditsReference,\n\tundoManager,\n\tembedPreviews,\n\tuserPermissions,\n\tautosaves,\n\tblockPatterns,\n\tblockPatternCategories,\n\tuserPatternCategories,\n\tnavigationFallbackId,\n\tdefaultTemplates,\n\tregisteredPostMeta,\n\teditorSettings,\n\teditorAssets,\n\tsyncConnectionStatuses,\n\tcollaborationSupported,\n} );\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["queriedDataReducer", "nextEdits", "fastDeepEqual"]
|
|
7
7
|
}
|
package/build/resolvers.cjs
CHANGED
|
@@ -692,9 +692,11 @@ var getDefaultTemplateId = (query) => async ({ dispatch, registry, resolveSelect
|
|
|
692
692
|
template.id = id;
|
|
693
693
|
registry.batch(() => {
|
|
694
694
|
dispatch.receiveDefaultTemplateId(query, id);
|
|
695
|
-
dispatch.receiveEntityRecords(
|
|
695
|
+
dispatch.receiveEntityRecords(
|
|
696
|
+
"postType",
|
|
697
|
+
template.type,
|
|
696
698
|
template
|
|
697
|
-
|
|
699
|
+
);
|
|
698
700
|
dispatch.finishResolution("getEntityRecord", [
|
|
699
701
|
"postType",
|
|
700
702
|
template.type,
|
package/build/resolvers.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/resolvers.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * External dependencies\n */\nimport { camelCase } from 'change-case';\n\n/**\n * WordPress dependencies\n */\nimport { addQueryArgs } from '@wordpress/url';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport apiFetch from '@wordpress/api-fetch';\n\n/**\n * Internal dependencies\n */\nimport { STORE_NAME } from './name';\nimport { additionalEntityConfigLoaders, DEFAULT_ENTITY_KEY } from './entities';\nimport { getSyncManager } from './sync';\nimport {\n\tforwardResolver,\n\tgetNormalizedCommaSeparable,\n\tgetUserPermissionCacheKey,\n\tgetUserPermissionsFromAllowHeader,\n\tALLOWED_RESOURCE_ACTIONS,\n\tRECEIVE_INTERMEDIATE_RESULTS,\n\tisNumericID,\n} from './utils';\nimport { fetchBlockPatterns } from './fetch';\nimport { restoreSelection, getSelectionHistory } from './utils/crdt-selection';\n\n/**\n * Requests authors from the REST API.\n *\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request.\n */\nexport const getAuthors =\n\t( query ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst path = addQueryArgs(\n\t\t\t'/wp/v2/users/?who=authors&per_page=100',\n\t\t\tquery\n\t\t);\n\t\tconst users = await apiFetch( { path } );\n\t\tdispatch.receiveUserQuery( path, users );\n\t};\n\n/**\n * Requests the current user from the REST API.\n */\nexport const getCurrentUser =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst currentUser = await apiFetch( { path: '/wp/v2/users/me' } );\n\t\tdispatch.receiveCurrentUser( currentUser );\n\t};\n\n/**\n * Requests an entity's record from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} key Record's key\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request. If requesting specific\n * fields, fields must always include the ID.\n */\nexport const getEntityRecord =\n\t( kind, name, key = '', query ) =>\n\tasync ( { select, dispatch, registry, resolveSelect } ) => {\n\t\tconst configs = await resolveSelect.getEntitiesConfig( kind );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\t\tif ( ! entityConfig ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\t\tSTORE_NAME,\n\t\t\t[ 'entities', 'records', kind, name, key ],\n\t\t\t{ exclusive: false }\n\t\t);\n\n\t\ttry {\n\t\t\tif ( query !== undefined && query._fields ) {\n\t\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t\t// the ID.\n\t\t\t\tquery = {\n\t\t\t\t\t...query,\n\t\t\t\t\t_fields: [\n\t\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\t\tentityConfig.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t\t] ),\n\t\t\t\t\t].join(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif ( query !== undefined && query._fields ) {\n\t\t\t\t// The resolution cache won't consider query as reusable based on the\n\t\t\t\t// fields, so it's tested here, prior to initiating the REST request,\n\t\t\t\t// and without causing `getEntityRecord` resolution to occur.\n\t\t\t\tconst hasRecord = select.hasEntityRecord(\n\t\t\t\t\tkind,\n\t\t\t\t\tname,\n\t\t\t\t\tkey,\n\t\t\t\t\tquery\n\t\t\t\t);\n\t\t\t\tif ( hasRecord ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet { baseURL } = entityConfig;\n\n\t\t\t// For \"string\" IDs, use the old templates endpoint.\n\t\t\tif (\n\t\t\t\tkind === 'postType' &&\n\t\t\t\tname === 'wp_template' &&\n\t\t\t\t( ( key && typeof key === 'string' && ! /^\\d+$/.test( key ) ) ||\n\t\t\t\t\t! window?.__experimentalTemplateActivate )\n\t\t\t) {\n\t\t\t\tbaseURL =\n\t\t\t\t\tbaseURL.slice( 0, baseURL.lastIndexOf( '/' ) ) +\n\t\t\t\t\t'/templates';\n\t\t\t}\n\n\t\t\tconst path = addQueryArgs( baseURL + ( key ? '/' + key : '' ), {\n\t\t\t\t...entityConfig.baseURLParams,\n\t\t\t\t...query,\n\t\t\t} );\n\t\t\tconst response = await apiFetch( { path, parse: false } );\n\t\t\tconst record = await response.json();\n\t\t\tconst permissions = getUserPermissionsFromAllowHeader(\n\t\t\t\tresponse.headers?.get( 'allow' )\n\t\t\t);\n\n\t\t\tconst canUserResolutionsArgs = [];\n\t\t\tconst receiveUserPermissionArgs = {};\n\t\t\tfor ( const action of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\t\treceiveUserPermissionArgs[\n\t\t\t\t\tgetUserPermissionCacheKey( action, {\n\t\t\t\t\t\tkind,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tid: key,\n\t\t\t\t\t} )\n\t\t\t\t] = permissions[ action ];\n\n\t\t\t\tcanUserResolutionsArgs.push( [\n\t\t\t\t\taction,\n\t\t\t\t\t{ kind, name, id: key },\n\t\t\t\t] );\n\t\t\t}\n\n\t\t\t// Entity supports syncing.\n\t\t\tif ( entityConfig.syncConfig && isNumericID( key ) && ! query ) {\n\t\t\t\tconst objectType = `${ kind }/${ name }`;\n\t\t\t\tconst objectId = key;\n\n\t\t\t\t// Use the new transient \"read/write\" config to compute transients for\n\t\t\t\t// the sync manager. Otherwise these transients are not available\n\t\t\t\t// if / until the record is edited. Use a copy of the record so that\n\t\t\t\t// it does not change the behavior outside this experimental flag.\n\t\t\t\tconst recordWithTransients = { ...record };\n\t\t\t\tObject.entries( entityConfig.transientEdits ?? {} )\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t( [ propName, transientConfig ] ) =>\n\t\t\t\t\t\t\tundefined === recordWithTransients[ propName ] &&\n\t\t\t\t\t\t\ttransientConfig &&\n\t\t\t\t\t\t\t'object' === typeof transientConfig &&\n\t\t\t\t\t\t\t'read' in transientConfig &&\n\t\t\t\t\t\t\t'function' === typeof transientConfig.read\n\t\t\t\t\t)\n\t\t\t\t\t.forEach( ( [ propName, transientConfig ] ) => {\n\t\t\t\t\t\trecordWithTransients[ propName ] =\n\t\t\t\t\t\t\ttransientConfig.read( recordWithTransients );\n\t\t\t\t\t} );\n\n\t\t\t\t// Load the entity record for syncing. Do not await promise.\n\t\t\t\tvoid getSyncManager()?.load(\n\t\t\t\t\tentityConfig.syncConfig,\n\t\t\t\t\tobjectType,\n\t\t\t\t\tobjectId,\n\t\t\t\t\trecordWithTransients,\n\t\t\t\t\t{\n\t\t\t\t\t\t// Handle edits sourced from the sync manager.\n\t\t\t\t\t\teditRecord: ( edits, options = {} ) => {\n\t\t\t\t\t\t\tif ( ! Object.keys( edits ).length ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdispatch( {\n\t\t\t\t\t\t\t\ttype: 'EDIT_ENTITY_RECORD',\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\trecordId: key,\n\t\t\t\t\t\t\t\tedits,\n\t\t\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\t\t\tundo: undefined,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t},\n\t\t\t\t\t\t// Get the current entity record (with edits)\n\t\t\t\t\t\tgetEditedRecord: async () =>\n\t\t\t\t\t\t\tawait resolveSelect.getEditedEntityRecord(\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tkey\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t// Handle sync connection status changes.\n\t\t\t\t\t\tonStatusChange: ( status ) => {\n\t\t\t\t\t\t\tdispatch.setSyncConnectionStatus(\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tstatus\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t// Refetch the current entity record from the database.\n\t\t\t\t\t\trefetchRecord: async () => {\n\t\t\t\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tawait apiFetch( { path, parse: true } ),\n\t\t\t\t\t\t\t\tquery\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t// Save the current entity record, whether or not it has unsaved\n\t\t\t\t\t\t// edits. This is used to trigger a persisted CRDT document.\n\t\t\t\t\t\tsaveRecord: () => {\n\t\t\t\t\t\t\tresolveSelect\n\t\t\t\t\t\t\t\t.getEditedEntityRecord( kind, name, key )\n\t\t\t\t\t\t\t\t.then( ( editedRecord ) => {\n\t\t\t\t\t\t\t\t\t// Don't trigger a save if the record is still an auto-draft.\n\t\t\t\t\t\t\t\t\tconst { status } = editedRecord;\n\t\t\t\t\t\t\t\t\tif ( 'auto-draft' === status ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tdispatch.saveEntityRecord(\n\t\t\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\t\teditedRecord\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t},\n\t\t\t\t\t\taddUndoMeta: ( ydoc, meta ) => {\n\t\t\t\t\t\t\tconst selectionHistory =\n\t\t\t\t\t\t\t\tgetSelectionHistory( ydoc );\n\n\t\t\t\t\t\t\tif ( selectionHistory ) {\n\t\t\t\t\t\t\t\tmeta.set(\n\t\t\t\t\t\t\t\t\t'selectionHistory',\n\t\t\t\t\t\t\t\t\tselectionHistory\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\trestoreUndoMeta: ( ydoc, meta ) => {\n\t\t\t\t\t\t\tconst selectionHistory =\n\t\t\t\t\t\t\t\tmeta.get( 'selectionHistory' );\n\n\t\t\t\t\t\t\tif ( selectionHistory ) {\n\t\t\t\t\t\t\t\t// Because Yjs initiates an undo, we need to\n\t\t\t\t\t\t\t\t// wait until the content is restored before\n\t\t\t\t\t\t\t\t// we can update the selection.\n\t\t\t\t\t\t\t\t// Use setTimeout() to wait until content is\n\t\t\t\t\t\t\t\t// finished updating, and then set the correct\n\t\t\t\t\t\t\t\t// selection.\n\t\t\t\t\t\t\t\tsetTimeout( () => {\n\t\t\t\t\t\t\t\t\trestoreSelection( selectionHistory, ydoc );\n\t\t\t\t\t\t\t\t}, 0 );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tregistry.batch( () => {\n\t\t\t\tdispatch.receiveEntityRecords( kind, name, record, query );\n\t\t\t\tdispatch.receiveUserPermissions( receiveUserPermissionArgs );\n\t\t\t\tdispatch.finishResolutions( 'canUser', canUserResolutionsArgs );\n\t\t\t} );\n\t\t} finally {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\n\n// Whenever a template is saved, the active templates might be updated, so\n// invalidate the site settings when a template is updated or deleted.\ngetEntityRecord.shouldInvalidate = ( action, kind, name ) => {\n\treturn (\n\t\tkind === 'root' &&\n\t\tname === 'site' &&\n\t\t( ( action.type === 'RECEIVE_ITEMS' &&\n\t\t\t// Making sure persistedEdits is set seems to be the only way of\n\t\t\t// knowing whether it's an update or fetch. Only an update would\n\t\t\t// have persistedEdits.\n\t\t\taction.persistedEdits &&\n\t\t\taction.persistedEdits.status !== 'auto-draft' ) ||\n\t\t\taction.type === 'REMOVE_ITEMS' ) &&\n\t\taction.kind === 'postType' &&\n\t\taction.name === 'wp_template'\n\t);\n};\n\n/**\n * Requests an entity's record from the REST API.\n */\nexport const getRawEntityRecord = forwardResolver( 'getEntityRecord' );\n\n/**\n * Requests an entity's record from the REST API.\n */\nexport const getEditedEntityRecord = forwardResolver( 'getEntityRecord' );\n\n/**\n * Requests the entity's records from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {?Object} query Query Object. If requesting specific fields, fields\n * must always include the ID.\n */\nexport const getEntityRecords =\n\t( kind, name, query = {} ) =>\n\tasync ( { dispatch, registry, resolveSelect } ) => {\n\t\tconst configs = await resolveSelect.getEntitiesConfig( kind );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\t\tif ( ! entityConfig ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\t\tSTORE_NAME,\n\t\t\t[ 'entities', 'records', kind, name ],\n\t\t\t{ exclusive: false }\n\t\t);\n\n\t\t// Keep a copy of the original query for later use in getResolutionsArgs.\n\t\t// The query object may be modified below (for example, when _fields is\n\t\t// specified), but we want to use the original query when marking\n\t\t// resolutions as finished.\n\t\tconst rawQuery = { ...query };\n\t\tconst key = entityConfig.key || DEFAULT_ENTITY_KEY;\n\n\t\tfunction getResolutionsArgs( records, recordsQuery ) {\n\t\t\tconst queryArgs = Object.fromEntries(\n\t\t\t\tObject.entries( recordsQuery ).filter( ( [ k, v ] ) => {\n\t\t\t\t\treturn [ 'context', '_fields' ].includes( k ) && !! v;\n\t\t\t\t} )\n\t\t\t);\n\t\t\treturn records\n\t\t\t\t.filter( ( record ) => record?.[ key ] )\n\t\t\t\t.map( ( record ) => [\n\t\t\t\t\tkind,\n\t\t\t\t\tname,\n\t\t\t\t\trecord[ key ],\n\t\t\t\t\tObject.keys( queryArgs ).length > 0 ? queryArgs : undefined,\n\t\t\t\t] );\n\t\t}\n\n\t\ttry {\n\t\t\tif ( query._fields ) {\n\t\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t\t// the ID.\n\t\t\t\tquery = {\n\t\t\t\t\t...query,\n\t\t\t\t\t_fields: [\n\t\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t] ),\n\t\t\t\t\t].join(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet { baseURL } = entityConfig;\n\t\t\t// `combinedTemplates` means that we fetch templates from the \"old\"\n\t\t\t// /templates endpoint, which combines active user templates with\n\t\t\t// the registered templates and rewrites IDs in the form of\n\t\t\t// `theme-slug/template-slug`. When turned off, we only fetch\n\t\t\t// database templates (posts). To fetch registered templates without\n\t\t\t// edits applied, use the `registeredTemplate` entity.\n\t\t\tconst { combinedTemplates = true } = query;\n\n\t\t\tif (\n\t\t\t\tkind === 'postType' &&\n\t\t\t\tname === 'wp_template' &&\n\t\t\t\tcombinedTemplates\n\t\t\t) {\n\t\t\t\tbaseURL =\n\t\t\t\t\tbaseURL.slice( 0, baseURL.lastIndexOf( '/' ) ) +\n\t\t\t\t\t'/templates';\n\t\t\t}\n\n\t\t\tconst path = addQueryArgs( baseURL, {\n\t\t\t\t...entityConfig.baseURLParams,\n\t\t\t\t...query,\n\t\t\t} );\n\n\t\t\tlet records = [],\n\t\t\t\tmeta;\n\t\t\tif ( entityConfig.supportsPagination && query.per_page !== -1 ) {\n\t\t\t\tconst response = await apiFetch( { path, parse: false } );\n\t\t\t\trecords = Object.values( await response.json() );\n\t\t\t\tmeta = {\n\t\t\t\t\ttotalItems: parseInt(\n\t\t\t\t\t\tresponse.headers.get( 'X-WP-Total' )\n\t\t\t\t\t),\n\t\t\t\t\ttotalPages: parseInt(\n\t\t\t\t\t\tresponse.headers.get( 'X-WP-TotalPages' )\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t} else if (\n\t\t\t\tquery.per_page === -1 &&\n\t\t\t\tquery[ RECEIVE_INTERMEDIATE_RESULTS ] === true\n\t\t\t) {\n\t\t\t\tlet page = 1;\n\t\t\t\tlet totalPages;\n\n\t\t\t\tdo {\n\t\t\t\t\tconst response = await apiFetch( {\n\t\t\t\t\t\tpath: addQueryArgs( path, { page, per_page: 100 } ),\n\t\t\t\t\t\tparse: false,\n\t\t\t\t\t} );\n\t\t\t\t\tconst pageRecords = Object.values( await response.json() );\n\n\t\t\t\t\ttotalPages = parseInt(\n\t\t\t\t\t\tresponse.headers.get( 'X-WP-TotalPages' )\n\t\t\t\t\t);\n\n\t\t\t\t\tif ( ! meta ) {\n\t\t\t\t\t\tmeta = {\n\t\t\t\t\t\t\ttotalItems: parseInt(\n\t\t\t\t\t\t\t\tresponse.headers.get( 'X-WP-Total' )\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\ttotalPages: 1,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\trecords.push( ...pageRecords );\n\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\trecords,\n\t\t\t\t\t\t\tquery,\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\tmeta\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdispatch.finishResolutions(\n\t\t\t\t\t\t\t'getEntityRecord',\n\t\t\t\t\t\t\tgetResolutionsArgs( pageRecords, rawQuery )\n\t\t\t\t\t\t);\n\t\t\t\t\t} );\n\t\t\t\t\tpage++;\n\t\t\t\t} while ( page <= totalPages );\n\t\t\t} else {\n\t\t\t\trecords = Object.values( await apiFetch( { path } ) );\n\t\t\t\tmeta = {\n\t\t\t\t\ttotalItems: records.length,\n\t\t\t\t\ttotalPages: 1,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif ( entityConfig.syncConfig && -1 === query.per_page ) {\n\t\t\t\tconst objectType = `${ kind }/${ name }`;\n\t\t\t\tgetSyncManager()?.loadCollection(\n\t\t\t\t\tentityConfig.syncConfig,\n\t\t\t\t\tobjectType,\n\t\t\t\t\t{\n\t\t\t\t\t\tonStatusChange: ( status ) => {\n\t\t\t\t\t\t\tdispatch.setSyncConnectionStatus(\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\tstatus\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t\trefetchRecords: async () => {\n\t\t\t\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tawait apiFetch( { path, parse: true } ),\n\t\t\t\t\t\t\t\tquery\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// If we request fields but the result doesn't contain the fields,\n\t\t\t// explicitly set these fields as \"undefined\"\n\t\t\t// that way we consider the query \"fulfilled\".\n\t\t\tif ( query._fields ) {\n\t\t\t\trecords = records.map( ( record ) => {\n\t\t\t\t\tquery._fields.split( ',' ).forEach( ( field ) => {\n\t\t\t\t\t\tif ( ! record.hasOwnProperty( field ) ) {\n\t\t\t\t\t\t\trecord[ field ] = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn record;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tregistry.batch( () => {\n\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\tkind,\n\t\t\t\t\tname,\n\t\t\t\t\trecords,\n\t\t\t\t\tquery,\n\t\t\t\t\tfalse,\n\t\t\t\t\tundefined,\n\t\t\t\t\tmeta\n\t\t\t\t);\n\n\t\t\t\tconst targetHints = records\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t( record ) =>\n\t\t\t\t\t\t\t!! record?.[ key ] &&\n\t\t\t\t\t\t\t!! record?._links?.self?.[ 0 ]?.targetHints?.allow\n\t\t\t\t\t)\n\t\t\t\t\t.map( ( record ) => ( {\n\t\t\t\t\t\tid: record[ key ],\n\t\t\t\t\t\tpermissions: getUserPermissionsFromAllowHeader(\n\t\t\t\t\t\t\trecord._links.self[ 0 ].targetHints.allow\n\t\t\t\t\t\t),\n\t\t\t\t\t} ) );\n\n\t\t\t\tconst canUserResolutionsArgs = [];\n\t\t\t\tconst receiveUserPermissionArgs = {};\n\t\t\t\tfor ( const targetHint of targetHints ) {\n\t\t\t\t\tfor ( const action of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\t\t\t\tcanUserResolutionsArgs.push( [\n\t\t\t\t\t\t\taction,\n\t\t\t\t\t\t\t{ kind, name, id: targetHint.id },\n\t\t\t\t\t\t] );\n\n\t\t\t\t\t\treceiveUserPermissionArgs[\n\t\t\t\t\t\t\tgetUserPermissionCacheKey( action, {\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tid: targetHint.id,\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t] = targetHint.permissions[ action ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( targetHints.length > 0 ) {\n\t\t\t\t\tdispatch.receiveUserPermissions(\n\t\t\t\t\t\treceiveUserPermissionArgs\n\t\t\t\t\t);\n\t\t\t\t\tdispatch.finishResolutions(\n\t\t\t\t\t\t'canUser',\n\t\t\t\t\t\tcanUserResolutionsArgs\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tdispatch.finishResolutions(\n\t\t\t\t\t'getEntityRecord',\n\t\t\t\t\tgetResolutionsArgs( records, rawQuery )\n\t\t\t\t);\n\n\t\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t\t} );\n\t\t} catch ( e ) {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\n\ngetEntityRecords.shouldInvalidate = ( action, kind, name ) => {\n\treturn (\n\t\t( action.type === 'RECEIVE_ITEMS' || action.type === 'REMOVE_ITEMS' ) &&\n\t\taction.invalidateCache &&\n\t\tkind === action.kind &&\n\t\tname === action.name\n\t);\n};\n\n/**\n * Requests the total number of entity records.\n */\nexport const getEntityRecordsTotalItems = forwardResolver( 'getEntityRecords' );\n\n/**\n * Requests the number of available pages for the given query.\n */\nexport const getEntityRecordsTotalPages = forwardResolver( 'getEntityRecords' );\n\n/**\n * Requests the current theme.\n */\nexport const getCurrentTheme =\n\t() =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst activeThemes = await resolveSelect.getEntityRecords(\n\t\t\t'root',\n\t\t\t'theme',\n\t\t\t{ status: 'active' }\n\t\t);\n\n\t\tdispatch.receiveCurrentTheme( activeThemes[ 0 ] );\n\t};\n\n/**\n * Requests theme supports data from the index.\n */\nexport const getThemeSupports = forwardResolver( 'getCurrentTheme' );\n\n/**\n * Requests a preview from the Embed API.\n *\n * @param {string} url URL to get the preview for.\n */\nexport const getEmbedPreview =\n\t( url ) =>\n\tasync ( { dispatch } ) => {\n\t\ttry {\n\t\t\tconst embedProxyResponse = await apiFetch( {\n\t\t\t\tpath: addQueryArgs( '/oembed/1.0/proxy', { url } ),\n\t\t\t} );\n\t\t\tdispatch.receiveEmbedPreview( url, embedProxyResponse );\n\t\t} catch ( error ) {\n\t\t\t// Embed API 404s if the URL cannot be embedded, so we have to catch the error from the apiRequest here.\n\t\t\tdispatch.receiveEmbedPreview( url, false );\n\t\t}\n\t};\n\n/**\n * Checks whether the current user can perform the given action on the given\n * REST resource.\n *\n * @param {string} requestedAction Action to check. One of: 'create', 'read', 'update',\n * 'delete'.\n * @param {string|Object} resource Entity resource to check. Accepts entity object `{ kind: 'postType', name: 'attachment', id: 1 }`\n * or REST base as a string - `media`.\n * @param {?string} id ID of the rest resource to check.\n */\nexport const canUser =\n\t( requestedAction, resource, id ) =>\n\tasync ( { dispatch, registry, resolveSelect } ) => {\n\t\tif ( ! ALLOWED_RESOURCE_ACTIONS.includes( requestedAction ) ) {\n\t\t\tthrow new Error( `'${ requestedAction }' is not a valid action.` );\n\t\t}\n\n\t\tconst { hasStartedResolution } = registry.select( STORE_NAME );\n\n\t\t// Prevent resolving the same resource twice.\n\t\tfor ( const relatedAction of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\tif ( relatedAction === requestedAction ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst isAlreadyResolving = hasStartedResolution( 'canUser', [\n\t\t\t\trelatedAction,\n\t\t\t\tresource,\n\t\t\t\tid,\n\t\t\t] );\n\t\t\tif ( isAlreadyResolving ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tlet resourcePath = null;\n\t\tif ( typeof resource === 'object' ) {\n\t\t\tif ( ! resource.kind || ! resource.name ) {\n\t\t\t\tthrow new Error( 'The entity resource object is not valid.' );\n\t\t\t}\n\n\t\t\tconst configs = await resolveSelect.getEntitiesConfig(\n\t\t\t\tresource.kind\n\t\t\t);\n\t\t\tconst entityConfig = configs.find(\n\t\t\t\t( config ) =>\n\t\t\t\t\tconfig.name === resource.name &&\n\t\t\t\t\tconfig.kind === resource.kind\n\t\t\t);\n\t\t\tif ( ! entityConfig ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresourcePath =\n\t\t\t\tentityConfig.baseURL + ( resource.id ? '/' + resource.id : '' );\n\t\t} else {\n\t\t\tresourcePath = `/wp/v2/${ resource }` + ( id ? '/' + id : '' );\n\t\t}\n\n\t\tlet response;\n\t\ttry {\n\t\t\tresponse = await apiFetch( {\n\t\t\t\tpath: resourcePath,\n\t\t\t\tmethod: 'OPTIONS',\n\t\t\t\tparse: false,\n\t\t\t} );\n\t\t} catch ( error ) {\n\t\t\t// Do nothing if our OPTIONS request comes back with an API error (4xx or\n\t\t\t// 5xx). The previously determined isAllowed value will remain in the store.\n\t\t\treturn;\n\t\t}\n\n\t\t// Optional chaining operator is used here because the API requests don't\n\t\t// return the expected result in the React native version. Instead, API requests\n\t\t// only return the result, without including response properties like the headers.\n\t\tconst permissions = getUserPermissionsFromAllowHeader(\n\t\t\tresponse.headers?.get( 'allow' )\n\t\t);\n\t\tconst receiveUserPermissionArgs = {};\n\t\tconst canUserResolutionsArgs = [];\n\t\tfor ( const action of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\treceiveUserPermissionArgs[\n\t\t\t\tgetUserPermissionCacheKey( action, resource, id )\n\t\t\t] = permissions[ action ];\n\n\t\t\t// Mark related action resolutions as finished.\n\t\t\tif ( action !== requestedAction ) {\n\t\t\t\tcanUserResolutionsArgs.push( [ action, resource, id ] );\n\t\t\t}\n\t\t}\n\t\tregistry.batch( () => {\n\t\t\tdispatch.receiveUserPermissions( receiveUserPermissionArgs );\n\t\t\tdispatch.finishResolutions( 'canUser', canUserResolutionsArgs );\n\t\t} );\n\t};\n\n/**\n * Checks whether the current user can perform the given action on the given\n * REST resource.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordId Record's id.\n */\nexport const canUserEditEntityRecord =\n\t( kind, name, recordId ) =>\n\tasync ( { dispatch } ) => {\n\t\tawait dispatch( canUser( 'update', { kind, name, id: recordId } ) );\n\t};\n\n/**\n * Request autosave data from the REST API.\n *\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n */\nexport const getAutosaves =\n\t( postType, postId ) =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst {\n\t\t\trest_base: restBase,\n\t\t\trest_namespace: restNamespace = 'wp/v2',\n\t\t\tsupports,\n\t\t} = await resolveSelect.getPostType( postType );\n\t\tif ( ! supports?.autosave ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst autosaves = await apiFetch( {\n\t\t\tpath: `/${ restNamespace }/${ restBase }/${ postId }/autosaves?context=edit`,\n\t\t} );\n\n\t\tif ( autosaves && autosaves.length ) {\n\t\t\tdispatch.receiveAutosaves( postId, autosaves );\n\t\t}\n\t};\n\n/**\n * Request autosave data from the REST API.\n *\n * This resolver exists to ensure the underlying autosaves are fetched via\n * `getAutosaves` when a call to the `getAutosave` selector is made.\n *\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n */\nexport const getAutosave =\n\t( postType, postId ) =>\n\tasync ( { resolveSelect } ) => {\n\t\tawait resolveSelect.getAutosaves( postType, postId );\n\t};\n\nexport const __experimentalGetCurrentGlobalStylesId =\n\t() =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst activeThemes = await resolveSelect.getEntityRecords(\n\t\t\t'root',\n\t\t\t'theme',\n\t\t\t{ status: 'active' }\n\t\t);\n\t\tconst globalStylesURL =\n\t\t\tactiveThemes?.[ 0 ]?._links?.[ 'wp:user-global-styles' ]?.[ 0 ]\n\t\t\t\t?.href;\n\t\tif ( ! globalStylesURL ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Regex matches the ID at the end of a URL or immediately before\n\t\t// the query string.\n\t\tconst matches = globalStylesURL.match( /\\/(\\d+)(?:\\?|$)/ );\n\t\tconst id = matches ? Number( matches[ 1 ] ) : null;\n\n\t\tif ( id ) {\n\t\t\tdispatch.__experimentalReceiveCurrentGlobalStylesId( id );\n\t\t}\n\t};\n\nexport const __experimentalGetCurrentThemeBaseGlobalStyles =\n\t() =>\n\tasync ( { resolveSelect, dispatch } ) => {\n\t\tconst currentTheme = await resolveSelect.getCurrentTheme();\n\t\t// Please adjust the preloaded requests if this changes!\n\t\tconst themeGlobalStyles = await apiFetch( {\n\t\t\tpath: `/wp/v2/global-styles/themes/${ currentTheme.stylesheet }?context=view`,\n\t\t} );\n\t\tdispatch.__experimentalReceiveThemeBaseGlobalStyles(\n\t\t\tcurrentTheme.stylesheet,\n\t\t\tthemeGlobalStyles\n\t\t);\n\t};\n\nexport const __experimentalGetCurrentThemeGlobalStylesVariations =\n\t() =>\n\tasync ( { resolveSelect, dispatch } ) => {\n\t\tconst currentTheme = await resolveSelect.getCurrentTheme();\n\t\t// Please adjust the preloaded requests if this changes!\n\t\tconst variations = await apiFetch( {\n\t\t\tpath: `/wp/v2/global-styles/themes/${ currentTheme.stylesheet }/variations?context=view`,\n\t\t} );\n\t\tdispatch.__experimentalReceiveThemeGlobalStyleVariations(\n\t\t\tcurrentTheme.stylesheet,\n\t\t\tvariations\n\t\t);\n\t};\n\n/**\n * Fetches and returns the revisions of the current global styles theme.\n */\nexport const getCurrentThemeGlobalStylesRevisions =\n\t() =>\n\tasync ( { resolveSelect, dispatch } ) => {\n\t\tconst globalStylesId =\n\t\t\tawait resolveSelect.__experimentalGetCurrentGlobalStylesId();\n\t\tconst record = globalStylesId\n\t\t\t? await resolveSelect.getEntityRecord(\n\t\t\t\t\t'root',\n\t\t\t\t\t'globalStyles',\n\t\t\t\t\tglobalStylesId\n\t\t\t )\n\t\t\t: undefined;\n\t\tconst revisionsURL = record?._links?.[ 'version-history' ]?.[ 0 ]?.href;\n\n\t\tif ( revisionsURL ) {\n\t\t\tconst resetRevisions = await apiFetch( {\n\t\t\t\turl: revisionsURL,\n\t\t\t} );\n\t\t\tconst revisions = resetRevisions?.map( ( revision ) =>\n\t\t\t\tObject.fromEntries(\n\t\t\t\t\tObject.entries( revision ).map( ( [ key, value ] ) => [\n\t\t\t\t\t\tcamelCase( key ),\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t] )\n\t\t\t\t)\n\t\t\t);\n\t\t\tdispatch.receiveThemeGlobalStyleRevisions(\n\t\t\t\tglobalStylesId,\n\t\t\t\trevisions\n\t\t\t);\n\t\t}\n\t};\n\ngetCurrentThemeGlobalStylesRevisions.shouldInvalidate = ( action ) => {\n\treturn (\n\t\taction.type === 'SAVE_ENTITY_RECORD_FINISH' &&\n\t\taction.kind === 'root' &&\n\t\t! action.error &&\n\t\taction.name === 'globalStyles'\n\t);\n};\n\nexport const getBlockPatterns =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst patterns = await fetchBlockPatterns();\n\t\tdispatch( { type: 'RECEIVE_BLOCK_PATTERNS', patterns } );\n\t};\n\nexport const getBlockPatternCategories =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst categories = await apiFetch( {\n\t\t\tpath: '/wp/v2/block-patterns/categories',\n\t\t} );\n\t\tdispatch( { type: 'RECEIVE_BLOCK_PATTERN_CATEGORIES', categories } );\n\t};\n\nexport const getUserPatternCategories =\n\t() =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst patternCategories = await resolveSelect.getEntityRecords(\n\t\t\t'taxonomy',\n\t\t\t'wp_pattern_category',\n\t\t\t{\n\t\t\t\tper_page: -1,\n\t\t\t\t_fields: 'id,name,description,slug',\n\t\t\t\tcontext: 'view',\n\t\t\t}\n\t\t);\n\n\t\tconst mappedPatternCategories =\n\t\t\tpatternCategories?.map( ( userCategory ) => ( {\n\t\t\t\t...userCategory,\n\t\t\t\tlabel: decodeEntities( userCategory.name ),\n\t\t\t\tname: userCategory.slug,\n\t\t\t} ) ) || [];\n\n\t\tdispatch( {\n\t\t\ttype: 'RECEIVE_USER_PATTERN_CATEGORIES',\n\t\t\tpatternCategories: mappedPatternCategories,\n\t\t} );\n\t};\n\nexport const getNavigationFallbackId =\n\t() =>\n\tasync ( { dispatch, select, registry } ) => {\n\t\tconst fallback = await apiFetch( {\n\t\t\tpath: addQueryArgs( '/wp-block-editor/v1/navigation-fallback', {\n\t\t\t\t_embed: true,\n\t\t\t} ),\n\t\t} );\n\n\t\tconst record = fallback?._embedded?.self;\n\n\t\tregistry.batch( () => {\n\t\t\tdispatch.receiveNavigationFallbackId( fallback?.id );\n\n\t\t\tif ( ! record ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the fallback is already in the store, don't invalidate navigation queries.\n\t\t\t// Otherwise, invalidate the cache for the scenario where there were no Navigation\n\t\t\t// posts in the state and the fallback created one.\n\t\t\tconst existingFallbackEntityRecord = select.getEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'wp_navigation',\n\t\t\t\tfallback.id\n\t\t\t);\n\t\t\tconst invalidateNavigationQueries = ! existingFallbackEntityRecord;\n\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t'postType',\n\t\t\t\t'wp_navigation',\n\t\t\t\trecord,\n\t\t\t\tundefined,\n\t\t\t\tinvalidateNavigationQueries\n\t\t\t);\n\n\t\t\t// Resolve to avoid further network requests.\n\t\t\tdispatch.finishResolution( 'getEntityRecord', [\n\t\t\t\t'postType',\n\t\t\t\t'wp_navigation',\n\t\t\t\tfallback.id,\n\t\t\t] );\n\t\t} );\n\t};\n\nexport const getDefaultTemplateId =\n\t( query ) =>\n\tasync ( { dispatch, registry, resolveSelect } ) => {\n\t\tconst template = await apiFetch( {\n\t\t\tpath: addQueryArgs( '/wp/v2/templates/lookup', query ),\n\t\t} );\n\t\t// Wait for the the entities config to be loaded, otherwise receiving\n\t\t// the template as an entity will not work.\n\t\tawait resolveSelect.getEntitiesConfig( 'postType' );\n\t\t// When active_templates experiment is enabled, use numeric wp_id if it\n\t\t// exists, otherwise fall back to string ID format (theme//slug) as the\n\t\t// frontend expects string IDs for templates.\n\t\tconst id = window?.__experimentalTemplateActivate\n\t\t\t? template?.wp_id || template?.id\n\t\t\t: template?.id;\n\t\t// Endpoint may return an empty object if no template is found.\n\t\tif ( id ) {\n\t\t\ttemplate.id = id;\n\t\t\tregistry.batch( () => {\n\t\t\t\tdispatch.receiveDefaultTemplateId( query, id );\n\t\t\t\tdispatch.receiveEntityRecords( 'postType', template.type, [\n\t\t\t\t\ttemplate,\n\t\t\t\t] );\n\t\t\t\t// Avoid further network requests.\n\t\t\t\tdispatch.finishResolution( 'getEntityRecord', [\n\t\t\t\t\t'postType',\n\t\t\t\t\ttemplate.type,\n\t\t\t\t\tid,\n\t\t\t\t] );\n\t\t\t} );\n\t\t}\n\t};\n\ngetDefaultTemplateId.shouldInvalidate = ( action ) => {\n\treturn (\n\t\taction.type === 'RECEIVE_ITEMS' &&\n\t\taction.kind === 'root' &&\n\t\taction.name === 'site'\n\t);\n};\n\n/**\n * Requests an entity's revisions from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordKey The key of the entity record whose revisions you want to fetch.\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request. If requesting specific\n * fields, fields must always include the ID.\n */\nexport const getRevisions =\n\t( kind, name, recordKey, query = {} ) =>\n\tasync ( { dispatch, registry, resolveSelect } ) => {\n\t\tconst configs = await resolveSelect.getEntitiesConfig( kind );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\n\t\tif ( ! entityConfig ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( query._fields ) {\n\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t// the ID.\n\t\t\tquery = {\n\t\t\t\t...query,\n\t\t\t\t_fields: [\n\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\tentityConfig.revisionKey || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t] ),\n\t\t\t\t].join(),\n\t\t\t};\n\t\t}\n\n\t\tconst path = addQueryArgs(\n\t\t\tentityConfig.getRevisionsUrl( recordKey ),\n\t\t\tquery\n\t\t);\n\n\t\tlet records, response;\n\t\tconst meta = {};\n\t\tconst isPaginated =\n\t\t\tentityConfig.supportsPagination && query.per_page !== -1;\n\t\ttry {\n\t\t\tresponse = await apiFetch( { path, parse: ! isPaginated } );\n\t\t} catch ( error ) {\n\t\t\t// Do nothing if our request comes back with an API error.\n\t\t\treturn;\n\t\t}\n\n\t\tif ( response ) {\n\t\t\tif ( isPaginated ) {\n\t\t\t\trecords = Object.values( await response.json() );\n\t\t\t\tmeta.totalItems = parseInt(\n\t\t\t\t\tresponse.headers.get( 'X-WP-Total' )\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\trecords = Object.values( response );\n\t\t\t}\n\n\t\t\t// If we request fields but the result doesn't contain the fields,\n\t\t\t// explicitly set these fields as \"undefined\"\n\t\t\t// that way we consider the query \"fulfilled\".\n\t\t\tif ( query._fields ) {\n\t\t\t\trecords = records.map( ( record ) => {\n\t\t\t\t\tquery._fields.split( ',' ).forEach( ( field ) => {\n\t\t\t\t\t\tif ( ! record.hasOwnProperty( field ) ) {\n\t\t\t\t\t\t\trecord[ field ] = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn record;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tregistry.batch( () => {\n\t\t\t\tdispatch.receiveRevisions(\n\t\t\t\t\tkind,\n\t\t\t\t\tname,\n\t\t\t\t\trecordKey,\n\t\t\t\t\trecords,\n\t\t\t\t\tquery,\n\t\t\t\t\tfalse,\n\t\t\t\t\tmeta\n\t\t\t\t);\n\n\t\t\t\t// When requesting all fields, the list of results can be used to\n\t\t\t\t// resolve the `getRevision` selector in addition to `getRevisions`.\n\t\t\t\tif ( ! query?._fields && ! query.context ) {\n\t\t\t\t\tconst key = entityConfig.revisionKey || DEFAULT_ENTITY_KEY;\n\t\t\t\t\tconst resolutionsArgs = records\n\t\t\t\t\t\t.filter( ( record ) => record[ key ] )\n\t\t\t\t\t\t.map( ( record ) => [\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\trecordKey,\n\t\t\t\t\t\t\trecord[ key ],\n\t\t\t\t\t\t] );\n\n\t\t\t\t\tdispatch.finishResolutions(\n\t\t\t\t\t\t'getRevision',\n\t\t\t\t\t\tresolutionsArgs\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t};\n\n// Invalidate cache when a new revision is created.\ngetRevisions.shouldInvalidate = ( action, kind, name, recordKey ) =>\n\taction.type === 'SAVE_ENTITY_RECORD_FINISH' &&\n\tname === action.name &&\n\tkind === action.kind &&\n\t! action.error &&\n\trecordKey === action.recordId;\n\n/**\n * Requests a specific Entity revision from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordKey The key of the entity record whose revisions you want to fetch.\n * @param {number|string} revisionKey The revision's key.\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request. If requesting specific\n * fields, fields must always include the ID.\n */\nexport const getRevision =\n\t( kind, name, recordKey, revisionKey, query ) =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst configs = await resolveSelect.getEntitiesConfig( kind );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\n\t\tif ( ! entityConfig ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( query !== undefined && query._fields ) {\n\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t// the ID.\n\t\t\tquery = {\n\t\t\t\t...query,\n\t\t\t\t_fields: [\n\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\tentityConfig.revisionKey || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t] ),\n\t\t\t\t].join(),\n\t\t\t};\n\t\t}\n\t\tconst path = addQueryArgs(\n\t\t\tentityConfig.getRevisionsUrl( recordKey, revisionKey ),\n\t\t\tquery\n\t\t);\n\n\t\tlet record;\n\t\ttry {\n\t\t\trecord = await apiFetch( { path } );\n\t\t} catch ( error ) {\n\t\t\t// Do nothing if our request comes back with an API error.\n\t\t\treturn;\n\t\t}\n\n\t\tif ( record ) {\n\t\t\tdispatch.receiveRevisions( kind, name, recordKey, record, query );\n\t\t}\n\t};\n\n/**\n * Requests a specific post type options from the REST API.\n *\n * @param {string} postType Post type slug.\n */\nexport const getRegisteredPostMeta =\n\t( postType ) =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tlet options;\n\t\ttry {\n\t\t\tconst {\n\t\t\t\trest_namespace: restNamespace = 'wp/v2',\n\t\t\t\trest_base: restBase,\n\t\t\t} = ( await resolveSelect.getPostType( postType ) ) || {};\n\t\t\toptions = await apiFetch( {\n\t\t\t\tpath: `${ restNamespace }/${ restBase }/?context=edit`,\n\t\t\t\tmethod: 'OPTIONS',\n\t\t\t} );\n\t\t} catch ( error ) {\n\t\t\t// Do nothing if the request comes back with an API error.\n\t\t\treturn;\n\t\t}\n\n\t\tif ( options ) {\n\t\t\tdispatch.receiveRegisteredPostMeta(\n\t\t\t\tpostType,\n\t\t\t\toptions?.schema?.properties?.meta?.properties\n\t\t\t);\n\t\t}\n\t};\n\n/**\n * Requests entity configs for the given kind from the REST API.\n *\n * @param {string} kind Entity kind.\n */\nexport const getEntitiesConfig =\n\t( kind ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst loader = additionalEntityConfigLoaders.find(\n\t\t\t( l ) => l.kind === kind\n\t\t);\n\n\t\tif ( ! loader ) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst configs = await loader.loadEntities();\n\t\t\tif ( ! configs.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdispatch.addEntities( configs );\n\t\t} catch {\n\t\t\t// Do nothing if the request comes back with an API error.\n\t\t}\n\t};\n\n/**\n * Requests editor settings from the REST API.\n */\nexport const getEditorSettings =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst settings = await apiFetch( {\n\t\t\tpath: '/wp-block-editor/v1/settings',\n\t\t} );\n\t\tdispatch.receiveEditorSettings( settings );\n\t};\n\n/**\n * Requests editor assets from the REST API.\n */\nexport const getEditorAssets =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst assets = await apiFetch( {\n\t\t\tpath: '/wp-block-editor/v1/assets',\n\t\t} );\n\t\tdispatch.receiveEditorAssets( assets );\n\t};\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/**\n * External dependencies\n */\nimport { camelCase } from 'change-case';\n\n/**\n * WordPress dependencies\n */\nimport { addQueryArgs } from '@wordpress/url';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport apiFetch from '@wordpress/api-fetch';\n\n/**\n * Internal dependencies\n */\nimport { STORE_NAME } from './name';\nimport { additionalEntityConfigLoaders, DEFAULT_ENTITY_KEY } from './entities';\nimport { getSyncManager } from './sync';\nimport {\n\tforwardResolver,\n\tgetNormalizedCommaSeparable,\n\tgetUserPermissionCacheKey,\n\tgetUserPermissionsFromAllowHeader,\n\tALLOWED_RESOURCE_ACTIONS,\n\tRECEIVE_INTERMEDIATE_RESULTS,\n\tisNumericID,\n} from './utils';\nimport { fetchBlockPatterns } from './fetch';\nimport { restoreSelection, getSelectionHistory } from './utils/crdt-selection';\n\n/**\n * Requests authors from the REST API.\n *\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request.\n */\nexport const getAuthors =\n\t( query ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst path = addQueryArgs(\n\t\t\t'/wp/v2/users/?who=authors&per_page=100',\n\t\t\tquery\n\t\t);\n\t\tconst users = await apiFetch( { path } );\n\t\tdispatch.receiveUserQuery( path, users );\n\t};\n\n/**\n * Requests the current user from the REST API.\n */\nexport const getCurrentUser =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst currentUser = await apiFetch( { path: '/wp/v2/users/me' } );\n\t\tdispatch.receiveCurrentUser( currentUser );\n\t};\n\n/**\n * Requests an entity's record from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} key Record's key\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request. If requesting specific\n * fields, fields must always include the ID.\n */\nexport const getEntityRecord =\n\t( kind, name, key = '', query ) =>\n\tasync ( { select, dispatch, registry, resolveSelect } ) => {\n\t\tconst configs = await resolveSelect.getEntitiesConfig( kind );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\t\tif ( ! entityConfig ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\t\tSTORE_NAME,\n\t\t\t[ 'entities', 'records', kind, name, key ],\n\t\t\t{ exclusive: false }\n\t\t);\n\n\t\ttry {\n\t\t\tif ( query !== undefined && query._fields ) {\n\t\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t\t// the ID.\n\t\t\t\tquery = {\n\t\t\t\t\t...query,\n\t\t\t\t\t_fields: [\n\t\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\t\tentityConfig.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t\t] ),\n\t\t\t\t\t].join(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif ( query !== undefined && query._fields ) {\n\t\t\t\t// The resolution cache won't consider query as reusable based on the\n\t\t\t\t// fields, so it's tested here, prior to initiating the REST request,\n\t\t\t\t// and without causing `getEntityRecord` resolution to occur.\n\t\t\t\tconst hasRecord = select.hasEntityRecord(\n\t\t\t\t\tkind,\n\t\t\t\t\tname,\n\t\t\t\t\tkey,\n\t\t\t\t\tquery\n\t\t\t\t);\n\t\t\t\tif ( hasRecord ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet { baseURL } = entityConfig;\n\n\t\t\t// For \"string\" IDs, use the old templates endpoint.\n\t\t\tif (\n\t\t\t\tkind === 'postType' &&\n\t\t\t\tname === 'wp_template' &&\n\t\t\t\t( ( key && typeof key === 'string' && ! /^\\d+$/.test( key ) ) ||\n\t\t\t\t\t! window?.__experimentalTemplateActivate )\n\t\t\t) {\n\t\t\t\tbaseURL =\n\t\t\t\t\tbaseURL.slice( 0, baseURL.lastIndexOf( '/' ) ) +\n\t\t\t\t\t'/templates';\n\t\t\t}\n\n\t\t\tconst path = addQueryArgs( baseURL + ( key ? '/' + key : '' ), {\n\t\t\t\t...entityConfig.baseURLParams,\n\t\t\t\t...query,\n\t\t\t} );\n\t\t\tconst response = await apiFetch( { path, parse: false } );\n\t\t\tconst record = await response.json();\n\t\t\tconst permissions = getUserPermissionsFromAllowHeader(\n\t\t\t\tresponse.headers?.get( 'allow' )\n\t\t\t);\n\n\t\t\tconst canUserResolutionsArgs = [];\n\t\t\tconst receiveUserPermissionArgs = {};\n\t\t\tfor ( const action of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\t\treceiveUserPermissionArgs[\n\t\t\t\t\tgetUserPermissionCacheKey( action, {\n\t\t\t\t\t\tkind,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tid: key,\n\t\t\t\t\t} )\n\t\t\t\t] = permissions[ action ];\n\n\t\t\t\tcanUserResolutionsArgs.push( [\n\t\t\t\t\taction,\n\t\t\t\t\t{ kind, name, id: key },\n\t\t\t\t] );\n\t\t\t}\n\n\t\t\t// Entity supports syncing.\n\t\t\tif ( entityConfig.syncConfig && isNumericID( key ) && ! query ) {\n\t\t\t\tconst objectType = `${ kind }/${ name }`;\n\t\t\t\tconst objectId = key;\n\n\t\t\t\t// Use the new transient \"read/write\" config to compute transients for\n\t\t\t\t// the sync manager. Otherwise these transients are not available\n\t\t\t\t// if / until the record is edited. Use a copy of the record so that\n\t\t\t\t// it does not change the behavior outside this experimental flag.\n\t\t\t\tconst recordWithTransients = { ...record };\n\t\t\t\tObject.entries( entityConfig.transientEdits ?? {} )\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t( [ propName, transientConfig ] ) =>\n\t\t\t\t\t\t\tundefined === recordWithTransients[ propName ] &&\n\t\t\t\t\t\t\ttransientConfig &&\n\t\t\t\t\t\t\t'object' === typeof transientConfig &&\n\t\t\t\t\t\t\t'read' in transientConfig &&\n\t\t\t\t\t\t\t'function' === typeof transientConfig.read\n\t\t\t\t\t)\n\t\t\t\t\t.forEach( ( [ propName, transientConfig ] ) => {\n\t\t\t\t\t\trecordWithTransients[ propName ] =\n\t\t\t\t\t\t\ttransientConfig.read( recordWithTransients );\n\t\t\t\t\t} );\n\n\t\t\t\t// Load the entity record for syncing. Do not await promise.\n\t\t\t\tvoid getSyncManager()?.load(\n\t\t\t\t\tentityConfig.syncConfig,\n\t\t\t\t\tobjectType,\n\t\t\t\t\tobjectId,\n\t\t\t\t\trecordWithTransients,\n\t\t\t\t\t{\n\t\t\t\t\t\t// Handle edits sourced from the sync manager.\n\t\t\t\t\t\teditRecord: ( edits, options = {} ) => {\n\t\t\t\t\t\t\tif ( ! Object.keys( edits ).length ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdispatch( {\n\t\t\t\t\t\t\t\ttype: 'EDIT_ENTITY_RECORD',\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\trecordId: key,\n\t\t\t\t\t\t\t\tedits,\n\t\t\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\t\t\tundo: undefined,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t},\n\t\t\t\t\t\t// Get the current entity record (with edits)\n\t\t\t\t\t\tgetEditedRecord: async () =>\n\t\t\t\t\t\t\tawait resolveSelect.getEditedEntityRecord(\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tkey\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t// Handle sync connection status changes.\n\t\t\t\t\t\tonStatusChange: ( status ) => {\n\t\t\t\t\t\t\tdispatch.setSyncConnectionStatus(\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tstatus\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t// Refetch the current entity record from the database.\n\t\t\t\t\t\trefetchRecord: async () => {\n\t\t\t\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tawait apiFetch( { path, parse: true } ),\n\t\t\t\t\t\t\t\tquery\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t// Save the current entity record, whether or not it has unsaved\n\t\t\t\t\t\t// edits. This is used to trigger a persisted CRDT document.\n\t\t\t\t\t\tsaveRecord: () => {\n\t\t\t\t\t\t\tresolveSelect\n\t\t\t\t\t\t\t\t.getEditedEntityRecord( kind, name, key )\n\t\t\t\t\t\t\t\t.then( ( editedRecord ) => {\n\t\t\t\t\t\t\t\t\t// Don't trigger a save if the record is still an auto-draft.\n\t\t\t\t\t\t\t\t\tconst { status } = editedRecord;\n\t\t\t\t\t\t\t\t\tif ( 'auto-draft' === status ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tdispatch.saveEntityRecord(\n\t\t\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\t\teditedRecord\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t},\n\t\t\t\t\t\taddUndoMeta: ( ydoc, meta ) => {\n\t\t\t\t\t\t\tconst selectionHistory =\n\t\t\t\t\t\t\t\tgetSelectionHistory( ydoc );\n\n\t\t\t\t\t\t\tif ( selectionHistory ) {\n\t\t\t\t\t\t\t\tmeta.set(\n\t\t\t\t\t\t\t\t\t'selectionHistory',\n\t\t\t\t\t\t\t\t\tselectionHistory\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\trestoreUndoMeta: ( ydoc, meta ) => {\n\t\t\t\t\t\t\tconst selectionHistory =\n\t\t\t\t\t\t\t\tmeta.get( 'selectionHistory' );\n\n\t\t\t\t\t\t\tif ( selectionHistory ) {\n\t\t\t\t\t\t\t\t// Because Yjs initiates an undo, we need to\n\t\t\t\t\t\t\t\t// wait until the content is restored before\n\t\t\t\t\t\t\t\t// we can update the selection.\n\t\t\t\t\t\t\t\t// Use setTimeout() to wait until content is\n\t\t\t\t\t\t\t\t// finished updating, and then set the correct\n\t\t\t\t\t\t\t\t// selection.\n\t\t\t\t\t\t\t\tsetTimeout( () => {\n\t\t\t\t\t\t\t\t\trestoreSelection( selectionHistory, ydoc );\n\t\t\t\t\t\t\t\t}, 0 );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tregistry.batch( () => {\n\t\t\t\tdispatch.receiveEntityRecords( kind, name, record, query );\n\t\t\t\tdispatch.receiveUserPermissions( receiveUserPermissionArgs );\n\t\t\t\tdispatch.finishResolutions( 'canUser', canUserResolutionsArgs );\n\t\t\t} );\n\t\t} finally {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\n\n// Whenever a template is saved, the active templates might be updated, so\n// invalidate the site settings when a template is updated or deleted.\ngetEntityRecord.shouldInvalidate = ( action, kind, name ) => {\n\treturn (\n\t\tkind === 'root' &&\n\t\tname === 'site' &&\n\t\t( ( action.type === 'RECEIVE_ITEMS' &&\n\t\t\t// Making sure persistedEdits is set seems to be the only way of\n\t\t\t// knowing whether it's an update or fetch. Only an update would\n\t\t\t// have persistedEdits.\n\t\t\taction.persistedEdits &&\n\t\t\taction.persistedEdits.status !== 'auto-draft' ) ||\n\t\t\taction.type === 'REMOVE_ITEMS' ) &&\n\t\taction.kind === 'postType' &&\n\t\taction.name === 'wp_template'\n\t);\n};\n\n/**\n * Requests an entity's record from the REST API.\n */\nexport const getRawEntityRecord = forwardResolver( 'getEntityRecord' );\n\n/**\n * Requests an entity's record from the REST API.\n */\nexport const getEditedEntityRecord = forwardResolver( 'getEntityRecord' );\n\n/**\n * Requests the entity's records from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {?Object} query Query Object. If requesting specific fields, fields\n * must always include the ID.\n */\nexport const getEntityRecords =\n\t( kind, name, query = {} ) =>\n\tasync ( { dispatch, registry, resolveSelect } ) => {\n\t\tconst configs = await resolveSelect.getEntitiesConfig( kind );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\t\tif ( ! entityConfig ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\t\tSTORE_NAME,\n\t\t\t[ 'entities', 'records', kind, name ],\n\t\t\t{ exclusive: false }\n\t\t);\n\n\t\t// Keep a copy of the original query for later use in getResolutionsArgs.\n\t\t// The query object may be modified below (for example, when _fields is\n\t\t// specified), but we want to use the original query when marking\n\t\t// resolutions as finished.\n\t\tconst rawQuery = { ...query };\n\t\tconst key = entityConfig.key || DEFAULT_ENTITY_KEY;\n\n\t\tfunction getResolutionsArgs( records, recordsQuery ) {\n\t\t\tconst queryArgs = Object.fromEntries(\n\t\t\t\tObject.entries( recordsQuery ).filter( ( [ k, v ] ) => {\n\t\t\t\t\treturn [ 'context', '_fields' ].includes( k ) && !! v;\n\t\t\t\t} )\n\t\t\t);\n\t\t\treturn records\n\t\t\t\t.filter( ( record ) => record?.[ key ] )\n\t\t\t\t.map( ( record ) => [\n\t\t\t\t\tkind,\n\t\t\t\t\tname,\n\t\t\t\t\trecord[ key ],\n\t\t\t\t\tObject.keys( queryArgs ).length > 0 ? queryArgs : undefined,\n\t\t\t\t] );\n\t\t}\n\n\t\ttry {\n\t\t\tif ( query._fields ) {\n\t\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t\t// the ID.\n\t\t\t\tquery = {\n\t\t\t\t\t...query,\n\t\t\t\t\t_fields: [\n\t\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t] ),\n\t\t\t\t\t].join(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet { baseURL } = entityConfig;\n\t\t\t// `combinedTemplates` means that we fetch templates from the \"old\"\n\t\t\t// /templates endpoint, which combines active user templates with\n\t\t\t// the registered templates and rewrites IDs in the form of\n\t\t\t// `theme-slug/template-slug`. When turned off, we only fetch\n\t\t\t// database templates (posts). To fetch registered templates without\n\t\t\t// edits applied, use the `registeredTemplate` entity.\n\t\t\tconst { combinedTemplates = true } = query;\n\n\t\t\tif (\n\t\t\t\tkind === 'postType' &&\n\t\t\t\tname === 'wp_template' &&\n\t\t\t\tcombinedTemplates\n\t\t\t) {\n\t\t\t\tbaseURL =\n\t\t\t\t\tbaseURL.slice( 0, baseURL.lastIndexOf( '/' ) ) +\n\t\t\t\t\t'/templates';\n\t\t\t}\n\n\t\t\tconst path = addQueryArgs( baseURL, {\n\t\t\t\t...entityConfig.baseURLParams,\n\t\t\t\t...query,\n\t\t\t} );\n\n\t\t\tlet records = [],\n\t\t\t\tmeta;\n\t\t\tif ( entityConfig.supportsPagination && query.per_page !== -1 ) {\n\t\t\t\tconst response = await apiFetch( { path, parse: false } );\n\t\t\t\trecords = Object.values( await response.json() );\n\t\t\t\tmeta = {\n\t\t\t\t\ttotalItems: parseInt(\n\t\t\t\t\t\tresponse.headers.get( 'X-WP-Total' )\n\t\t\t\t\t),\n\t\t\t\t\ttotalPages: parseInt(\n\t\t\t\t\t\tresponse.headers.get( 'X-WP-TotalPages' )\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t} else if (\n\t\t\t\tquery.per_page === -1 &&\n\t\t\t\tquery[ RECEIVE_INTERMEDIATE_RESULTS ] === true\n\t\t\t) {\n\t\t\t\tlet page = 1;\n\t\t\t\tlet totalPages;\n\n\t\t\t\tdo {\n\t\t\t\t\tconst response = await apiFetch( {\n\t\t\t\t\t\tpath: addQueryArgs( path, { page, per_page: 100 } ),\n\t\t\t\t\t\tparse: false,\n\t\t\t\t\t} );\n\t\t\t\t\tconst pageRecords = Object.values( await response.json() );\n\n\t\t\t\t\ttotalPages = parseInt(\n\t\t\t\t\t\tresponse.headers.get( 'X-WP-TotalPages' )\n\t\t\t\t\t);\n\n\t\t\t\t\tif ( ! meta ) {\n\t\t\t\t\t\tmeta = {\n\t\t\t\t\t\t\ttotalItems: parseInt(\n\t\t\t\t\t\t\t\tresponse.headers.get( 'X-WP-Total' )\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\ttotalPages: 1,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\trecords.push( ...pageRecords );\n\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\trecords,\n\t\t\t\t\t\t\tquery,\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\tmeta\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdispatch.finishResolutions(\n\t\t\t\t\t\t\t'getEntityRecord',\n\t\t\t\t\t\t\tgetResolutionsArgs( pageRecords, rawQuery )\n\t\t\t\t\t\t);\n\t\t\t\t\t} );\n\t\t\t\t\tpage++;\n\t\t\t\t} while ( page <= totalPages );\n\t\t\t} else {\n\t\t\t\trecords = Object.values( await apiFetch( { path } ) );\n\t\t\t\tmeta = {\n\t\t\t\t\ttotalItems: records.length,\n\t\t\t\t\ttotalPages: 1,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif ( entityConfig.syncConfig && -1 === query.per_page ) {\n\t\t\t\tconst objectType = `${ kind }/${ name }`;\n\t\t\t\tgetSyncManager()?.loadCollection(\n\t\t\t\t\tentityConfig.syncConfig,\n\t\t\t\t\tobjectType,\n\t\t\t\t\t{\n\t\t\t\t\t\tonStatusChange: ( status ) => {\n\t\t\t\t\t\t\tdispatch.setSyncConnectionStatus(\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\tstatus\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t\trefetchRecords: async () => {\n\t\t\t\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tawait apiFetch( { path, parse: true } ),\n\t\t\t\t\t\t\t\tquery\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// If we request fields but the result doesn't contain the fields,\n\t\t\t// explicitly set these fields as \"undefined\"\n\t\t\t// that way we consider the query \"fulfilled\".\n\t\t\tif ( query._fields ) {\n\t\t\t\trecords = records.map( ( record ) => {\n\t\t\t\t\tquery._fields.split( ',' ).forEach( ( field ) => {\n\t\t\t\t\t\tif ( ! record.hasOwnProperty( field ) ) {\n\t\t\t\t\t\t\trecord[ field ] = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn record;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tregistry.batch( () => {\n\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\tkind,\n\t\t\t\t\tname,\n\t\t\t\t\trecords,\n\t\t\t\t\tquery,\n\t\t\t\t\tfalse,\n\t\t\t\t\tundefined,\n\t\t\t\t\tmeta\n\t\t\t\t);\n\n\t\t\t\tconst targetHints = records\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t( record ) =>\n\t\t\t\t\t\t\t!! record?.[ key ] &&\n\t\t\t\t\t\t\t!! record?._links?.self?.[ 0 ]?.targetHints?.allow\n\t\t\t\t\t)\n\t\t\t\t\t.map( ( record ) => ( {\n\t\t\t\t\t\tid: record[ key ],\n\t\t\t\t\t\tpermissions: getUserPermissionsFromAllowHeader(\n\t\t\t\t\t\t\trecord._links.self[ 0 ].targetHints.allow\n\t\t\t\t\t\t),\n\t\t\t\t\t} ) );\n\n\t\t\t\tconst canUserResolutionsArgs = [];\n\t\t\t\tconst receiveUserPermissionArgs = {};\n\t\t\t\tfor ( const targetHint of targetHints ) {\n\t\t\t\t\tfor ( const action of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\t\t\t\tcanUserResolutionsArgs.push( [\n\t\t\t\t\t\t\taction,\n\t\t\t\t\t\t\t{ kind, name, id: targetHint.id },\n\t\t\t\t\t\t] );\n\n\t\t\t\t\t\treceiveUserPermissionArgs[\n\t\t\t\t\t\t\tgetUserPermissionCacheKey( action, {\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tid: targetHint.id,\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t] = targetHint.permissions[ action ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( targetHints.length > 0 ) {\n\t\t\t\t\tdispatch.receiveUserPermissions(\n\t\t\t\t\t\treceiveUserPermissionArgs\n\t\t\t\t\t);\n\t\t\t\t\tdispatch.finishResolutions(\n\t\t\t\t\t\t'canUser',\n\t\t\t\t\t\tcanUserResolutionsArgs\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tdispatch.finishResolutions(\n\t\t\t\t\t'getEntityRecord',\n\t\t\t\t\tgetResolutionsArgs( records, rawQuery )\n\t\t\t\t);\n\n\t\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t\t} );\n\t\t} catch ( e ) {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\n\ngetEntityRecords.shouldInvalidate = ( action, kind, name ) => {\n\treturn (\n\t\t( action.type === 'RECEIVE_ITEMS' || action.type === 'REMOVE_ITEMS' ) &&\n\t\taction.invalidateCache &&\n\t\tkind === action.kind &&\n\t\tname === action.name\n\t);\n};\n\n/**\n * Requests the total number of entity records.\n */\nexport const getEntityRecordsTotalItems = forwardResolver( 'getEntityRecords' );\n\n/**\n * Requests the number of available pages for the given query.\n */\nexport const getEntityRecordsTotalPages = forwardResolver( 'getEntityRecords' );\n\n/**\n * Requests the current theme.\n */\nexport const getCurrentTheme =\n\t() =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst activeThemes = await resolveSelect.getEntityRecords(\n\t\t\t'root',\n\t\t\t'theme',\n\t\t\t{ status: 'active' }\n\t\t);\n\n\t\tdispatch.receiveCurrentTheme( activeThemes[ 0 ] );\n\t};\n\n/**\n * Requests theme supports data from the index.\n */\nexport const getThemeSupports = forwardResolver( 'getCurrentTheme' );\n\n/**\n * Requests a preview from the Embed API.\n *\n * @param {string} url URL to get the preview for.\n */\nexport const getEmbedPreview =\n\t( url ) =>\n\tasync ( { dispatch } ) => {\n\t\ttry {\n\t\t\tconst embedProxyResponse = await apiFetch( {\n\t\t\t\tpath: addQueryArgs( '/oembed/1.0/proxy', { url } ),\n\t\t\t} );\n\t\t\tdispatch.receiveEmbedPreview( url, embedProxyResponse );\n\t\t} catch ( error ) {\n\t\t\t// Embed API 404s if the URL cannot be embedded, so we have to catch the error from the apiRequest here.\n\t\t\tdispatch.receiveEmbedPreview( url, false );\n\t\t}\n\t};\n\n/**\n * Checks whether the current user can perform the given action on the given\n * REST resource.\n *\n * @param {string} requestedAction Action to check. One of: 'create', 'read', 'update',\n * 'delete'.\n * @param {string|Object} resource Entity resource to check. Accepts entity object `{ kind: 'postType', name: 'attachment', id: 1 }`\n * or REST base as a string - `media`.\n * @param {?string} id ID of the rest resource to check.\n */\nexport const canUser =\n\t( requestedAction, resource, id ) =>\n\tasync ( { dispatch, registry, resolveSelect } ) => {\n\t\tif ( ! ALLOWED_RESOURCE_ACTIONS.includes( requestedAction ) ) {\n\t\t\tthrow new Error( `'${ requestedAction }' is not a valid action.` );\n\t\t}\n\n\t\tconst { hasStartedResolution } = registry.select( STORE_NAME );\n\n\t\t// Prevent resolving the same resource twice.\n\t\tfor ( const relatedAction of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\tif ( relatedAction === requestedAction ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst isAlreadyResolving = hasStartedResolution( 'canUser', [\n\t\t\t\trelatedAction,\n\t\t\t\tresource,\n\t\t\t\tid,\n\t\t\t] );\n\t\t\tif ( isAlreadyResolving ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tlet resourcePath = null;\n\t\tif ( typeof resource === 'object' ) {\n\t\t\tif ( ! resource.kind || ! resource.name ) {\n\t\t\t\tthrow new Error( 'The entity resource object is not valid.' );\n\t\t\t}\n\n\t\t\tconst configs = await resolveSelect.getEntitiesConfig(\n\t\t\t\tresource.kind\n\t\t\t);\n\t\t\tconst entityConfig = configs.find(\n\t\t\t\t( config ) =>\n\t\t\t\t\tconfig.name === resource.name &&\n\t\t\t\t\tconfig.kind === resource.kind\n\t\t\t);\n\t\t\tif ( ! entityConfig ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresourcePath =\n\t\t\t\tentityConfig.baseURL + ( resource.id ? '/' + resource.id : '' );\n\t\t} else {\n\t\t\tresourcePath = `/wp/v2/${ resource }` + ( id ? '/' + id : '' );\n\t\t}\n\n\t\tlet response;\n\t\ttry {\n\t\t\tresponse = await apiFetch( {\n\t\t\t\tpath: resourcePath,\n\t\t\t\tmethod: 'OPTIONS',\n\t\t\t\tparse: false,\n\t\t\t} );\n\t\t} catch ( error ) {\n\t\t\t// Do nothing if our OPTIONS request comes back with an API error (4xx or\n\t\t\t// 5xx). The previously determined isAllowed value will remain in the store.\n\t\t\treturn;\n\t\t}\n\n\t\t// Optional chaining operator is used here because the API requests don't\n\t\t// return the expected result in the React native version. Instead, API requests\n\t\t// only return the result, without including response properties like the headers.\n\t\tconst permissions = getUserPermissionsFromAllowHeader(\n\t\t\tresponse.headers?.get( 'allow' )\n\t\t);\n\t\tconst receiveUserPermissionArgs = {};\n\t\tconst canUserResolutionsArgs = [];\n\t\tfor ( const action of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\treceiveUserPermissionArgs[\n\t\t\t\tgetUserPermissionCacheKey( action, resource, id )\n\t\t\t] = permissions[ action ];\n\n\t\t\t// Mark related action resolutions as finished.\n\t\t\tif ( action !== requestedAction ) {\n\t\t\t\tcanUserResolutionsArgs.push( [ action, resource, id ] );\n\t\t\t}\n\t\t}\n\t\tregistry.batch( () => {\n\t\t\tdispatch.receiveUserPermissions( receiveUserPermissionArgs );\n\t\t\tdispatch.finishResolutions( 'canUser', canUserResolutionsArgs );\n\t\t} );\n\t};\n\n/**\n * Checks whether the current user can perform the given action on the given\n * REST resource.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordId Record's id.\n */\nexport const canUserEditEntityRecord =\n\t( kind, name, recordId ) =>\n\tasync ( { dispatch } ) => {\n\t\tawait dispatch( canUser( 'update', { kind, name, id: recordId } ) );\n\t};\n\n/**\n * Request autosave data from the REST API.\n *\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n */\nexport const getAutosaves =\n\t( postType, postId ) =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst {\n\t\t\trest_base: restBase,\n\t\t\trest_namespace: restNamespace = 'wp/v2',\n\t\t\tsupports,\n\t\t} = await resolveSelect.getPostType( postType );\n\t\tif ( ! supports?.autosave ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst autosaves = await apiFetch( {\n\t\t\tpath: `/${ restNamespace }/${ restBase }/${ postId }/autosaves?context=edit`,\n\t\t} );\n\n\t\tif ( autosaves && autosaves.length ) {\n\t\t\tdispatch.receiveAutosaves( postId, autosaves );\n\t\t}\n\t};\n\n/**\n * Request autosave data from the REST API.\n *\n * This resolver exists to ensure the underlying autosaves are fetched via\n * `getAutosaves` when a call to the `getAutosave` selector is made.\n *\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n */\nexport const getAutosave =\n\t( postType, postId ) =>\n\tasync ( { resolveSelect } ) => {\n\t\tawait resolveSelect.getAutosaves( postType, postId );\n\t};\n\nexport const __experimentalGetCurrentGlobalStylesId =\n\t() =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst activeThemes = await resolveSelect.getEntityRecords(\n\t\t\t'root',\n\t\t\t'theme',\n\t\t\t{ status: 'active' }\n\t\t);\n\t\tconst globalStylesURL =\n\t\t\tactiveThemes?.[ 0 ]?._links?.[ 'wp:user-global-styles' ]?.[ 0 ]\n\t\t\t\t?.href;\n\t\tif ( ! globalStylesURL ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Regex matches the ID at the end of a URL or immediately before\n\t\t// the query string.\n\t\tconst matches = globalStylesURL.match( /\\/(\\d+)(?:\\?|$)/ );\n\t\tconst id = matches ? Number( matches[ 1 ] ) : null;\n\n\t\tif ( id ) {\n\t\t\tdispatch.__experimentalReceiveCurrentGlobalStylesId( id );\n\t\t}\n\t};\n\nexport const __experimentalGetCurrentThemeBaseGlobalStyles =\n\t() =>\n\tasync ( { resolveSelect, dispatch } ) => {\n\t\tconst currentTheme = await resolveSelect.getCurrentTheme();\n\t\t// Please adjust the preloaded requests if this changes!\n\t\tconst themeGlobalStyles = await apiFetch( {\n\t\t\tpath: `/wp/v2/global-styles/themes/${ currentTheme.stylesheet }?context=view`,\n\t\t} );\n\t\tdispatch.__experimentalReceiveThemeBaseGlobalStyles(\n\t\t\tcurrentTheme.stylesheet,\n\t\t\tthemeGlobalStyles\n\t\t);\n\t};\n\nexport const __experimentalGetCurrentThemeGlobalStylesVariations =\n\t() =>\n\tasync ( { resolveSelect, dispatch } ) => {\n\t\tconst currentTheme = await resolveSelect.getCurrentTheme();\n\t\t// Please adjust the preloaded requests if this changes!\n\t\tconst variations = await apiFetch( {\n\t\t\tpath: `/wp/v2/global-styles/themes/${ currentTheme.stylesheet }/variations?context=view`,\n\t\t} );\n\t\tdispatch.__experimentalReceiveThemeGlobalStyleVariations(\n\t\t\tcurrentTheme.stylesheet,\n\t\t\tvariations\n\t\t);\n\t};\n\n/**\n * Fetches and returns the revisions of the current global styles theme.\n */\nexport const getCurrentThemeGlobalStylesRevisions =\n\t() =>\n\tasync ( { resolveSelect, dispatch } ) => {\n\t\tconst globalStylesId =\n\t\t\tawait resolveSelect.__experimentalGetCurrentGlobalStylesId();\n\t\tconst record = globalStylesId\n\t\t\t? await resolveSelect.getEntityRecord(\n\t\t\t\t\t'root',\n\t\t\t\t\t'globalStyles',\n\t\t\t\t\tglobalStylesId\n\t\t\t )\n\t\t\t: undefined;\n\t\tconst revisionsURL = record?._links?.[ 'version-history' ]?.[ 0 ]?.href;\n\n\t\tif ( revisionsURL ) {\n\t\t\tconst resetRevisions = await apiFetch( {\n\t\t\t\turl: revisionsURL,\n\t\t\t} );\n\t\t\tconst revisions = resetRevisions?.map( ( revision ) =>\n\t\t\t\tObject.fromEntries(\n\t\t\t\t\tObject.entries( revision ).map( ( [ key, value ] ) => [\n\t\t\t\t\t\tcamelCase( key ),\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t] )\n\t\t\t\t)\n\t\t\t);\n\t\t\tdispatch.receiveThemeGlobalStyleRevisions(\n\t\t\t\tglobalStylesId,\n\t\t\t\trevisions\n\t\t\t);\n\t\t}\n\t};\n\ngetCurrentThemeGlobalStylesRevisions.shouldInvalidate = ( action ) => {\n\treturn (\n\t\taction.type === 'SAVE_ENTITY_RECORD_FINISH' &&\n\t\taction.kind === 'root' &&\n\t\t! action.error &&\n\t\taction.name === 'globalStyles'\n\t);\n};\n\nexport const getBlockPatterns =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst patterns = await fetchBlockPatterns();\n\t\tdispatch( { type: 'RECEIVE_BLOCK_PATTERNS', patterns } );\n\t};\n\nexport const getBlockPatternCategories =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst categories = await apiFetch( {\n\t\t\tpath: '/wp/v2/block-patterns/categories',\n\t\t} );\n\t\tdispatch( { type: 'RECEIVE_BLOCK_PATTERN_CATEGORIES', categories } );\n\t};\n\nexport const getUserPatternCategories =\n\t() =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst patternCategories = await resolveSelect.getEntityRecords(\n\t\t\t'taxonomy',\n\t\t\t'wp_pattern_category',\n\t\t\t{\n\t\t\t\tper_page: -1,\n\t\t\t\t_fields: 'id,name,description,slug',\n\t\t\t\tcontext: 'view',\n\t\t\t}\n\t\t);\n\n\t\tconst mappedPatternCategories =\n\t\t\tpatternCategories?.map( ( userCategory ) => ( {\n\t\t\t\t...userCategory,\n\t\t\t\tlabel: decodeEntities( userCategory.name ),\n\t\t\t\tname: userCategory.slug,\n\t\t\t} ) ) || [];\n\n\t\tdispatch( {\n\t\t\ttype: 'RECEIVE_USER_PATTERN_CATEGORIES',\n\t\t\tpatternCategories: mappedPatternCategories,\n\t\t} );\n\t};\n\nexport const getNavigationFallbackId =\n\t() =>\n\tasync ( { dispatch, select, registry } ) => {\n\t\tconst fallback = await apiFetch( {\n\t\t\tpath: addQueryArgs( '/wp-block-editor/v1/navigation-fallback', {\n\t\t\t\t_embed: true,\n\t\t\t} ),\n\t\t} );\n\n\t\tconst record = fallback?._embedded?.self;\n\n\t\tregistry.batch( () => {\n\t\t\tdispatch.receiveNavigationFallbackId( fallback?.id );\n\n\t\t\tif ( ! record ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the fallback is already in the store, don't invalidate navigation queries.\n\t\t\t// Otherwise, invalidate the cache for the scenario where there were no Navigation\n\t\t\t// posts in the state and the fallback created one.\n\t\t\tconst existingFallbackEntityRecord = select.getEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'wp_navigation',\n\t\t\t\tfallback.id\n\t\t\t);\n\t\t\tconst invalidateNavigationQueries = ! existingFallbackEntityRecord;\n\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t'postType',\n\t\t\t\t'wp_navigation',\n\t\t\t\trecord,\n\t\t\t\tundefined,\n\t\t\t\tinvalidateNavigationQueries\n\t\t\t);\n\n\t\t\t// Resolve to avoid further network requests.\n\t\t\tdispatch.finishResolution( 'getEntityRecord', [\n\t\t\t\t'postType',\n\t\t\t\t'wp_navigation',\n\t\t\t\tfallback.id,\n\t\t\t] );\n\t\t} );\n\t};\n\nexport const getDefaultTemplateId =\n\t( query ) =>\n\tasync ( { dispatch, registry, resolveSelect } ) => {\n\t\tconst template = await apiFetch( {\n\t\t\tpath: addQueryArgs( '/wp/v2/templates/lookup', query ),\n\t\t} );\n\t\t// Wait for the the entities config to be loaded, otherwise receiving\n\t\t// the template as an entity will not work.\n\t\tawait resolveSelect.getEntitiesConfig( 'postType' );\n\t\t// When active_templates experiment is enabled, use numeric wp_id if it\n\t\t// exists, otherwise fall back to string ID format (theme//slug) as the\n\t\t// frontend expects string IDs for templates.\n\t\tconst id = window?.__experimentalTemplateActivate\n\t\t\t? template?.wp_id || template?.id\n\t\t\t: template?.id;\n\t\t// Endpoint may return an empty object if no template is found.\n\t\tif ( id ) {\n\t\t\ttemplate.id = id;\n\t\t\tregistry.batch( () => {\n\t\t\t\tdispatch.receiveDefaultTemplateId( query, id );\n\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\t'postType',\n\t\t\t\t\ttemplate.type,\n\t\t\t\t\ttemplate\n\t\t\t\t);\n\t\t\t\t// Avoid further network requests.\n\t\t\t\tdispatch.finishResolution( 'getEntityRecord', [\n\t\t\t\t\t'postType',\n\t\t\t\t\ttemplate.type,\n\t\t\t\t\tid,\n\t\t\t\t] );\n\t\t\t} );\n\t\t}\n\t};\n\ngetDefaultTemplateId.shouldInvalidate = ( action ) => {\n\treturn (\n\t\taction.type === 'RECEIVE_ITEMS' &&\n\t\taction.kind === 'root' &&\n\t\taction.name === 'site'\n\t);\n};\n\n/**\n * Requests an entity's revisions from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordKey The key of the entity record whose revisions you want to fetch.\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request. If requesting specific\n * fields, fields must always include the ID.\n */\nexport const getRevisions =\n\t( kind, name, recordKey, query = {} ) =>\n\tasync ( { dispatch, registry, resolveSelect } ) => {\n\t\tconst configs = await resolveSelect.getEntitiesConfig( kind );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\n\t\tif ( ! entityConfig ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( query._fields ) {\n\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t// the ID.\n\t\t\tquery = {\n\t\t\t\t...query,\n\t\t\t\t_fields: [\n\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\tentityConfig.revisionKey || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t] ),\n\t\t\t\t].join(),\n\t\t\t};\n\t\t}\n\n\t\tconst path = addQueryArgs(\n\t\t\tentityConfig.getRevisionsUrl( recordKey ),\n\t\t\tquery\n\t\t);\n\n\t\tlet records, response;\n\t\tconst meta = {};\n\t\tconst isPaginated =\n\t\t\tentityConfig.supportsPagination && query.per_page !== -1;\n\t\ttry {\n\t\t\tresponse = await apiFetch( { path, parse: ! isPaginated } );\n\t\t} catch ( error ) {\n\t\t\t// Do nothing if our request comes back with an API error.\n\t\t\treturn;\n\t\t}\n\n\t\tif ( response ) {\n\t\t\tif ( isPaginated ) {\n\t\t\t\trecords = Object.values( await response.json() );\n\t\t\t\tmeta.totalItems = parseInt(\n\t\t\t\t\tresponse.headers.get( 'X-WP-Total' )\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\trecords = Object.values( response );\n\t\t\t}\n\n\t\t\t// If we request fields but the result doesn't contain the fields,\n\t\t\t// explicitly set these fields as \"undefined\"\n\t\t\t// that way we consider the query \"fulfilled\".\n\t\t\tif ( query._fields ) {\n\t\t\t\trecords = records.map( ( record ) => {\n\t\t\t\t\tquery._fields.split( ',' ).forEach( ( field ) => {\n\t\t\t\t\t\tif ( ! record.hasOwnProperty( field ) ) {\n\t\t\t\t\t\t\trecord[ field ] = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn record;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tregistry.batch( () => {\n\t\t\t\tdispatch.receiveRevisions(\n\t\t\t\t\tkind,\n\t\t\t\t\tname,\n\t\t\t\t\trecordKey,\n\t\t\t\t\trecords,\n\t\t\t\t\tquery,\n\t\t\t\t\tfalse,\n\t\t\t\t\tmeta\n\t\t\t\t);\n\n\t\t\t\t// When requesting all fields, the list of results can be used to\n\t\t\t\t// resolve the `getRevision` selector in addition to `getRevisions`.\n\t\t\t\tif ( ! query?._fields && ! query.context ) {\n\t\t\t\t\tconst key = entityConfig.revisionKey || DEFAULT_ENTITY_KEY;\n\t\t\t\t\tconst resolutionsArgs = records\n\t\t\t\t\t\t.filter( ( record ) => record[ key ] )\n\t\t\t\t\t\t.map( ( record ) => [\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\trecordKey,\n\t\t\t\t\t\t\trecord[ key ],\n\t\t\t\t\t\t] );\n\n\t\t\t\t\tdispatch.finishResolutions(\n\t\t\t\t\t\t'getRevision',\n\t\t\t\t\t\tresolutionsArgs\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t};\n\n// Invalidate cache when a new revision is created.\ngetRevisions.shouldInvalidate = ( action, kind, name, recordKey ) =>\n\taction.type === 'SAVE_ENTITY_RECORD_FINISH' &&\n\tname === action.name &&\n\tkind === action.kind &&\n\t! action.error &&\n\trecordKey === action.recordId;\n\n/**\n * Requests a specific Entity revision from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordKey The key of the entity record whose revisions you want to fetch.\n * @param {number|string} revisionKey The revision's key.\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request. If requesting specific\n * fields, fields must always include the ID.\n */\nexport const getRevision =\n\t( kind, name, recordKey, revisionKey, query ) =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst configs = await resolveSelect.getEntitiesConfig( kind );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\n\t\tif ( ! entityConfig ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( query !== undefined && query._fields ) {\n\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t// the ID.\n\t\t\tquery = {\n\t\t\t\t...query,\n\t\t\t\t_fields: [\n\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\tentityConfig.revisionKey || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t] ),\n\t\t\t\t].join(),\n\t\t\t};\n\t\t}\n\t\tconst path = addQueryArgs(\n\t\t\tentityConfig.getRevisionsUrl( recordKey, revisionKey ),\n\t\t\tquery\n\t\t);\n\n\t\tlet record;\n\t\ttry {\n\t\t\trecord = await apiFetch( { path } );\n\t\t} catch ( error ) {\n\t\t\t// Do nothing if our request comes back with an API error.\n\t\t\treturn;\n\t\t}\n\n\t\tif ( record ) {\n\t\t\tdispatch.receiveRevisions( kind, name, recordKey, record, query );\n\t\t}\n\t};\n\n/**\n * Requests a specific post type options from the REST API.\n *\n * @param {string} postType Post type slug.\n */\nexport const getRegisteredPostMeta =\n\t( postType ) =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tlet options;\n\t\ttry {\n\t\t\tconst {\n\t\t\t\trest_namespace: restNamespace = 'wp/v2',\n\t\t\t\trest_base: restBase,\n\t\t\t} = ( await resolveSelect.getPostType( postType ) ) || {};\n\t\t\toptions = await apiFetch( {\n\t\t\t\tpath: `${ restNamespace }/${ restBase }/?context=edit`,\n\t\t\t\tmethod: 'OPTIONS',\n\t\t\t} );\n\t\t} catch ( error ) {\n\t\t\t// Do nothing if the request comes back with an API error.\n\t\t\treturn;\n\t\t}\n\n\t\tif ( options ) {\n\t\t\tdispatch.receiveRegisteredPostMeta(\n\t\t\t\tpostType,\n\t\t\t\toptions?.schema?.properties?.meta?.properties\n\t\t\t);\n\t\t}\n\t};\n\n/**\n * Requests entity configs for the given kind from the REST API.\n *\n * @param {string} kind Entity kind.\n */\nexport const getEntitiesConfig =\n\t( kind ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst loader = additionalEntityConfigLoaders.find(\n\t\t\t( l ) => l.kind === kind\n\t\t);\n\n\t\tif ( ! loader ) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst configs = await loader.loadEntities();\n\t\t\tif ( ! configs.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdispatch.addEntities( configs );\n\t\t} catch {\n\t\t\t// Do nothing if the request comes back with an API error.\n\t\t}\n\t};\n\n/**\n * Requests editor settings from the REST API.\n */\nexport const getEditorSettings =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst settings = await apiFetch( {\n\t\t\tpath: '/wp-block-editor/v1/settings',\n\t\t} );\n\t\tdispatch.receiveEditorSettings( settings );\n\t};\n\n/**\n * Requests editor assets from the REST API.\n */\nexport const getEditorAssets =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst assets = await apiFetch( {\n\t\t\tpath: '/wp-block-editor/v1/assets',\n\t\t} );\n\t\tdispatch.receiveEditorAssets( assets );\n\t};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["apiFetch"]
|
|
7
7
|
}
|
package/build/sync.cjs
CHANGED
|
@@ -24,6 +24,7 @@ __export(sync_exports, {
|
|
|
24
24
|
CRDT_RECORD_MAP_KEY: () => CRDT_RECORD_MAP_KEY,
|
|
25
25
|
Delta: () => Delta,
|
|
26
26
|
LOCAL_EDITOR_ORIGIN: () => LOCAL_EDITOR_ORIGIN,
|
|
27
|
+
LOCAL_UNDO_IGNORED_ORIGIN: () => LOCAL_UNDO_IGNORED_ORIGIN,
|
|
27
28
|
getSyncManager: () => getSyncManager,
|
|
28
29
|
retrySyncConnection: () => retrySyncConnection
|
|
29
30
|
});
|
|
@@ -36,6 +37,7 @@ var {
|
|
|
36
37
|
CRDT_DOC_META_PERSISTENCE_KEY,
|
|
37
38
|
CRDT_RECORD_MAP_KEY,
|
|
38
39
|
LOCAL_EDITOR_ORIGIN,
|
|
40
|
+
LOCAL_UNDO_IGNORED_ORIGIN,
|
|
39
41
|
retrySyncConnection
|
|
40
42
|
} = (0, import_lock_unlock.unlock)(import_sync.privateApis);
|
|
41
43
|
var syncManager;
|
|
@@ -52,6 +54,7 @@ function getSyncManager() {
|
|
|
52
54
|
CRDT_RECORD_MAP_KEY,
|
|
53
55
|
Delta,
|
|
54
56
|
LOCAL_EDITOR_ORIGIN,
|
|
57
|
+
LOCAL_UNDO_IGNORED_ORIGIN,
|
|
55
58
|
getSyncManager,
|
|
56
59
|
retrySyncConnection
|
|
57
60
|
});
|
package/build/sync.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/sync.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {\n\tprivateApis as syncPrivateApis,\n\ttype SyncManager,\n} from '@wordpress/sync';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from './lock-unlock';\n\nconst {\n\tcreateSyncManager,\n\tDelta,\n\tCRDT_DOC_META_PERSISTENCE_KEY,\n\tCRDT_RECORD_MAP_KEY,\n\tLOCAL_EDITOR_ORIGIN,\n\tretrySyncConnection,\n} = unlock( syncPrivateApis );\n\nexport {\n\tDelta,\n\tCRDT_DOC_META_PERSISTENCE_KEY,\n\tCRDT_RECORD_MAP_KEY,\n\tLOCAL_EDITOR_ORIGIN,\n\tretrySyncConnection,\n};\n\nlet syncManager: SyncManager;\n\nexport function getSyncManager(): SyncManager | undefined {\n\tif ( syncManager ) {\n\t\treturn syncManager;\n\t}\n\n\tsyncManager = createSyncManager();\n\n\treturn syncManager;\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAGO;AAKP,yBAAuB;AAEvB,IAAM;AAAA,EACL;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,QAAI,2BAAQ,YAAAA,WAAgB;
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {\n\tprivateApis as syncPrivateApis,\n\ttype SyncManager,\n} from '@wordpress/sync';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from './lock-unlock';\n\nconst {\n\tcreateSyncManager,\n\tDelta,\n\tCRDT_DOC_META_PERSISTENCE_KEY,\n\tCRDT_RECORD_MAP_KEY,\n\tLOCAL_EDITOR_ORIGIN,\n\tLOCAL_UNDO_IGNORED_ORIGIN,\n\tretrySyncConnection,\n} = unlock( syncPrivateApis );\n\nexport {\n\tDelta,\n\tCRDT_DOC_META_PERSISTENCE_KEY,\n\tCRDT_RECORD_MAP_KEY,\n\tLOCAL_EDITOR_ORIGIN,\n\tLOCAL_UNDO_IGNORED_ORIGIN,\n\tretrySyncConnection,\n};\n\nlet syncManager: SyncManager;\n\nexport function getSyncManager(): SyncManager | undefined {\n\tif ( syncManager ) {\n\t\treturn syncManager;\n\t}\n\n\tsyncManager = createSyncManager();\n\n\treturn syncManager;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAGO;AAKP,yBAAuB;AAEvB,IAAM;AAAA,EACL;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,QAAI,2BAAQ,YAAAA,WAAgB;AAW5B,IAAI;AAEG,SAAS,iBAA0C;AACzD,MAAK,aAAc;AAClB,WAAO;AAAA,EACR;AAEA,gBAAc,kBAAkB;AAEhC,SAAO;AACR;",
|
|
6
6
|
"names": ["syncPrivateApis"]
|
|
7
7
|
}
|