@wordpress/core-data 7.27.0 → 7.28.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.
Files changed (69) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +2 -2
  3. package/build/actions.js +7 -0
  4. package/build/actions.js.map +1 -1
  5. package/build/entities.js +15 -2
  6. package/build/entities.js.map +1 -1
  7. package/build/hooks/use-resource-permissions.js +1 -1
  8. package/build/hooks/use-resource-permissions.js.map +1 -1
  9. package/build/index.js +50 -8
  10. package/build/index.js.map +1 -1
  11. package/build/private-actions.js +99 -0
  12. package/build/private-actions.js.map +1 -1
  13. package/build/private-selectors.js +3 -0
  14. package/build/private-selectors.js.map +1 -1
  15. package/build/resolvers.js +1 -1
  16. package/build/resolvers.js.map +1 -1
  17. package/build/selectors.js +26 -1
  18. package/build/selectors.js.map +1 -1
  19. package/build/utils/log-entity-deprecation.js +63 -0
  20. package/build/utils/log-entity-deprecation.js.map +1 -0
  21. package/build-module/actions.js +7 -0
  22. package/build-module/actions.js.map +1 -1
  23. package/build-module/entities.js +14 -1
  24. package/build-module/entities.js.map +1 -1
  25. package/build-module/hooks/use-resource-permissions.js +1 -1
  26. package/build-module/hooks/use-resource-permissions.js.map +1 -1
  27. package/build-module/index.js +50 -8
  28. package/build-module/index.js.map +1 -1
  29. package/build-module/private-actions.js +96 -0
  30. package/build-module/private-actions.js.map +1 -1
  31. package/build-module/private-selectors.js +2 -0
  32. package/build-module/private-selectors.js.map +1 -1
  33. package/build-module/resolvers.js +1 -1
  34. package/build-module/resolvers.js.map +1 -1
  35. package/build-module/selectors.js +26 -1
  36. package/build-module/selectors.js.map +1 -1
  37. package/build-module/utils/log-entity-deprecation.js +55 -0
  38. package/build-module/utils/log-entity-deprecation.js.map +1 -0
  39. package/build-types/actions.d.ts.map +1 -1
  40. package/build-types/entities.d.ts +29 -18
  41. package/build-types/entities.d.ts.map +1 -1
  42. package/build-types/index.d.ts.map +1 -1
  43. package/build-types/private-actions.d.ts +24 -0
  44. package/build-types/private-actions.d.ts.map +1 -1
  45. package/build-types/private-selectors.d.ts +1 -1
  46. package/build-types/private-selectors.d.ts.map +1 -1
  47. package/build-types/reducer.d.ts +3 -3
  48. package/build-types/reducer.d.ts.map +1 -1
  49. package/build-types/selectors.d.ts +1 -1
  50. package/build-types/selectors.d.ts.map +1 -1
  51. package/build-types/utils/log-entity-deprecation.d.ts +15 -0
  52. package/build-types/utils/log-entity-deprecation.d.ts.map +1 -0
  53. package/package.json +18 -18
  54. package/src/actions.js +11 -0
  55. package/src/entities.js +14 -0
  56. package/src/hooks/test/use-resource-permissions.js +3 -3
  57. package/src/hooks/use-resource-permissions.ts +1 -1
  58. package/src/index.js +54 -14
  59. package/src/private-actions.js +118 -0
  60. package/src/private-selectors.ts +2 -0
  61. package/src/resolvers.js +1 -1
  62. package/src/selectors.ts +29 -1
  63. package/src/test/deprecated-entity-logging.js +291 -0
  64. package/src/test/private-actions.js +213 -0
  65. package/src/test/resolvers.js +7 -7
  66. package/src/test/selectors.js +18 -7
  67. package/src/utils/log-entity-deprecation.ts +67 -0
  68. package/src/utils/test/log-entity-deprecation.js +130 -0
  69. package/tsconfig.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["_changeCase","require","_url","_htmlEntities","_apiFetch","_interopRequireDefault","_name","_entities","_utils","_sync","_fetch","getAuthors","query","dispatch","path","addQueryArgs","users","apiFetch","receiveUserQuery","exports","getCurrentUser","currentUser","receiveCurrentUser","getEntityRecord","kind","name","key","select","registry","resolveSelect","configs","getEntitiesConfig","entityConfig","find","config","lock","__unstableAcquireStoreLock","STORE_NAME","exclusive","window","__experimentalEnableSync","syncConfig","globalThis","IS_GUTENBERG_PLUGIN","objectId","getSyncObjectId","getSyncProvider","bootstrap","syncObjectType","record","receiveEntityRecords","type","recordId","edits","meta","undo","undefined","_fields","Set","getNormalizedCommaSeparable","DEFAULT_ENTITY_KEY","join","baseURL","baseURLParams","include","hasRecords","hasEntityRecords","response","parse","json","permissions","getUserPermissionsFromAllowHeader","headers","get","canUserResolutionsArgs","receiveUserPermissionArgs","action","ALLOWED_RESOURCE_ACTIONS","getUserPermissionCacheKey","id","push","batch","receiveUserPermissions","finishResolutions","__unstableReleaseStoreLock","getRawEntityRecord","forwardResolver","getEditedEntityRecord","getEntityRecords","getResolutionsArgs","records","filter","map","supportsPagination","per_page","Object","values","totalItems","parseInt","totalPages","RECEIVE_INTERMEDIATE_RESULTS","page","pageRecords","length","split","forEach","field","hasOwnProperty","context","targetHints","_links","self","allow","targetHint","e","shouldInvalidate","invalidateCache","getCurrentTheme","activeThemes","status","receiveCurrentTheme","getThemeSupports","getEmbedPreview","url","embedProxyResponse","receiveEmbedPreview","error","canUser","requestedAction","resource","includes","Error","hasStartedResolution","relatedAction","isAlreadyResolving","resourcePath","method","receiveUserPermission","finishResolution","canUserEditEntityRecord","getAutosaves","postType","postId","rest_base","restBase","rest_namespace","restNamespace","supports","getPostType","autosave","autosaves","receiveAutosaves","getAutosave","__experimentalGetCurrentGlobalStylesId","globalStylesURL","href","matches","match","Number","__experimentalReceiveCurrentGlobalStylesId","__experimentalGetCurrentThemeBaseGlobalStyles","currentTheme","themeGlobalStyles","stylesheet","__experimentalReceiveThemeBaseGlobalStyles","__experimentalGetCurrentThemeGlobalStylesVariations","variations","__experimentalReceiveThemeGlobalStyleVariations","getCurrentThemeGlobalStylesRevisions","globalStylesId","revisionsURL","resetRevisions","revisions","revision","fromEntries","entries","value","camelCase","receiveThemeGlobalStyleRevisions","getBlockPatterns","patterns","fetchBlockPatterns","getBlockPatternCategories","categories","getUserPatternCategories","patternCategories","mappedPatternCategories","userCategory","label","decodeEntities","slug","getNavigationFallbackId","fallback","_embed","_embedded","receiveNavigationFallbackId","existingFallbackEntityRecord","invalidateNavigationQueries","getDefaultTemplateId","template","receiveDefaultTemplateId","getRevisions","recordKey","revisionKey","getRevisionsUrl","isPaginated","receiveRevisions","resolutionsArgs","getRevision","getRegisteredPostMeta","options","receiveRegisteredPostMeta","schema","properties","loader","additionalEntityConfigLoaders","l","loadEntities","addEntities"],"sources":["@wordpress/core-data/src/resolvers.js"],"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 {\n\tforwardResolver,\n\tgetNormalizedCommaSeparable,\n\tgetUserPermissionCacheKey,\n\tgetUserPermissionsFromAllowHeader,\n\tALLOWED_RESOURCE_ACTIONS,\n\tRECEIVE_INTERMEDIATE_RESULTS,\n} from './utils';\nimport { getSyncProvider } from './sync';\nimport { fetchBlockPatterns } from './fetch';\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\t// Entity supports configs,\n\t\t\t// use the sync algorithm instead of the old fetch behavior.\n\t\t\tif (\n\t\t\t\twindow.__experimentalEnableSync &&\n\t\t\t\tentityConfig.syncConfig &&\n\t\t\t\t! query\n\t\t\t) {\n\t\t\t\tif ( globalThis.IS_GUTENBERG_PLUGIN ) {\n\t\t\t\t\tconst objectId = entityConfig.getSyncObjectId( key );\n\n\t\t\t\t\t// Loads the persisted document.\n\t\t\t\t\tawait getSyncProvider().bootstrap(\n\t\t\t\t\t\tentityConfig.syncObjectType,\n\t\t\t\t\t\tobjectId,\n\t\t\t\t\t\t( record ) => {\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\trecord,\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\n\t\t\t\t\t// Bootstraps the edited document as well (and load from peers).\n\t\t\t\t\tawait getSyncProvider().bootstrap(\n\t\t\t\t\t\tentityConfig.syncObjectType + '--edit',\n\t\t\t\t\t\tobjectId,\n\t\t\t\t\t\t( record ) => {\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: record,\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} );\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( query !== undefined && query._fields ) {\n\t\t\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t\t\t// the ID.\n\t\t\t\t\tquery = {\n\t\t\t\t\t\t...query,\n\t\t\t\t\t\t_fields: [\n\t\t\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t\t\t...( getNormalizedCommaSeparable(\n\t\t\t\t\t\t\t\t\tquery._fields\n\t\t\t\t\t\t\t\t) || [] ),\n\t\t\t\t\t\t\t\tentityConfig.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t\t\t] ),\n\t\t\t\t\t\t].join(),\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Disable reason: While true that an early return could leave `path`\n\t\t\t\t// unused, it's important that path is derived using the query prior to\n\t\t\t\t// additional query modifications in the condition below, since those\n\t\t\t\t// modifications are relevant to how the data is tracked in state, and not\n\t\t\t\t// for how the request is made to the REST API.\n\n\t\t\t\t// eslint-disable-next-line @wordpress/no-unused-vars-before-return\n\t\t\t\tconst path = addQueryArgs(\n\t\t\t\t\tentityConfig.baseURL + ( key ? '/' + key : '' ),\n\t\t\t\t\t{\n\t\t\t\t\t\t...entityConfig.baseURLParams,\n\t\t\t\t\t\t...query,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tif ( query !== undefined && query._fields ) {\n\t\t\t\t\tquery = { ...query, include: [ key ] };\n\n\t\t\t\t\t// The resolution cache won't consider query as reusable based on the\n\t\t\t\t\t// fields, so it's tested here, prior to initiating the REST request,\n\t\t\t\t\t// and without causing `getEntityRecords` resolution to occur.\n\t\t\t\t\tconst hasRecords = select.hasEntityRecords(\n\t\t\t\t\t\tkind,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tquery\n\t\t\t\t\t);\n\t\t\t\t\tif ( hasRecords ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst response = await apiFetch( { path, parse: false } );\n\t\t\t\tconst record = await response.json();\n\t\t\t\tconst permissions = getUserPermissionsFromAllowHeader(\n\t\t\t\t\tresponse.headers?.get( 'allow' )\n\t\t\t\t);\n\n\t\t\t\tconst canUserResolutionsArgs = [];\n\t\t\t\tconst receiveUserPermissionArgs = {};\n\t\t\t\tfor ( const action of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\t\t\treceiveUserPermissionArgs[\n\t\t\t\t\t\tgetUserPermissionCacheKey( action, {\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tid: key,\n\t\t\t\t\t\t} )\n\t\t\t\t\t] = permissions[ action ];\n\n\t\t\t\t\tcanUserResolutionsArgs.push( [\n\t\t\t\t\t\taction,\n\t\t\t\t\t\t{ kind, name, id: key },\n\t\t\t\t\t] );\n\t\t\t\t}\n\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\tdispatch.receiveEntityRecords( kind, name, record, query );\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\t\t\t}\n\t\t} finally {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\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\tconst key = entityConfig.key || DEFAULT_ENTITY_KEY;\n\n\t\tfunction getResolutionsArgs( records ) {\n\t\t\treturn records\n\t\t\t\t.filter( ( record ) => record?.[ key ] )\n\t\t\t\t.map( ( record ) => [ kind, name, record[ key ] ] );\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\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\tconst path = addQueryArgs( entityConfig.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\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);\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 )\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\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} 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\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\t// When requesting all fields, the list of results can be used to resolve\n\t\t\t\t// the `getEntityRecord` and `canUser` selectors in addition to `getEntityRecords`.\n\t\t\t\t// See https://github.com/WordPress/gutenberg/pull/26575\n\t\t\t\t// See https://github.com/WordPress/gutenberg/pull/64504\n\t\t\t\t// See https://github.com/WordPress/gutenberg/pull/70738\n\t\t\t\tif ( ! query.context ) {\n\t\t\t\t\tconst targetHints = records\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t( record ) =>\n\t\t\t\t\t\t\t\t!! record?.[ key ] &&\n\t\t\t\t\t\t\t\t!! record?._links?.self?.[ 0 ]?.targetHints\n\t\t\t\t\t\t\t\t\t?.allow\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map( ( record ) => ( {\n\t\t\t\t\t\t\tid: record[ key ],\n\t\t\t\t\t\t\tpermissions: getUserPermissionsFromAllowHeader(\n\t\t\t\t\t\t\t\trecord._links.self[ 0 ].targetHints.allow\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t} ) );\n\n\t\t\t\t\tconst canUserResolutionsArgs = [];\n\t\t\t\t\tconst receiveUserPermissionArgs = {};\n\t\t\t\t\tfor ( const targetHint of targetHints ) {\n\t\t\t\t\t\tfor ( const action of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\t\t\t\t\tcanUserResolutionsArgs.push( [\n\t\t\t\t\t\t\t\taction,\n\t\t\t\t\t\t\t\t{ kind, name, id: targetHint.id },\n\t\t\t\t\t\t\t] );\n\n\t\t\t\t\t\t\treceiveUserPermissionArgs[\n\t\t\t\t\t\t\t\tgetUserPermissionCacheKey( action, {\n\t\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\tid: targetHint.id,\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t] = targetHint.permissions[ action ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( targetHints.length > 0 ) {\n\t\t\t\t\t\tdispatch.receiveUserPermissions(\n\t\t\t\t\t\t\treceiveUserPermissionArgs\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdispatch.finishResolutions(\n\t\t\t\t\t\t\t'canUser',\n\t\t\t\t\t\t\tcanUserResolutionsArgs\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! query?._fields ) {\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( records )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\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 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: 'root', name: 'media', 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\tregistry.batch( () => {\n\t\t\tfor ( const action of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\t\tconst key = getUserPermissionCacheKey( action, resource, id );\n\n\t\t\t\tdispatch.receiveUserPermission( key, permissions[ action ] );\n\n\t\t\t\t// Mark related action resolutions as finished.\n\t\t\t\tif ( action !== requestedAction ) {\n\t\t\t\t\tdispatch.finishResolution( 'canUser', [\n\t\t\t\t\t\taction,\n\t\t\t\t\t\tresource,\n\t\t\t\t\t\tid,\n\t\t\t\t\t] );\n\t\t\t\t}\n\t\t\t}\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// Endpoint may return an empty object if no template is found.\n\t\tif ( template?.id ) {\n\t\t\tregistry.batch( () => {\n\t\t\t\tdispatch.receiveDefaultTemplateId( query, template.id );\n\t\t\t\tdispatch.receiveEntityRecords( 'postType', 'wp_template', [\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\t'wp_template',\n\t\t\t\t\ttemplate.id,\n\t\t\t\t] );\n\t\t\t} );\n\t\t}\n\t};\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.key || 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"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_changeCase","require","_url","_htmlEntities","_apiFetch","_interopRequireDefault","_name","_entities","_utils","_sync","_fetch","getAuthors","query","dispatch","path","addQueryArgs","users","apiFetch","receiveUserQuery","exports","getCurrentUser","currentUser","receiveCurrentUser","getEntityRecord","kind","name","key","select","registry","resolveSelect","configs","getEntitiesConfig","entityConfig","find","config","lock","__unstableAcquireStoreLock","STORE_NAME","exclusive","window","__experimentalEnableSync","syncConfig","globalThis","IS_GUTENBERG_PLUGIN","objectId","getSyncObjectId","getSyncProvider","bootstrap","syncObjectType","record","receiveEntityRecords","type","recordId","edits","meta","undo","undefined","_fields","Set","getNormalizedCommaSeparable","DEFAULT_ENTITY_KEY","join","baseURL","baseURLParams","include","hasRecords","hasEntityRecords","response","parse","json","permissions","getUserPermissionsFromAllowHeader","headers","get","canUserResolutionsArgs","receiveUserPermissionArgs","action","ALLOWED_RESOURCE_ACTIONS","getUserPermissionCacheKey","id","push","batch","receiveUserPermissions","finishResolutions","__unstableReleaseStoreLock","getRawEntityRecord","forwardResolver","getEditedEntityRecord","getEntityRecords","getResolutionsArgs","records","filter","map","supportsPagination","per_page","Object","values","totalItems","parseInt","totalPages","RECEIVE_INTERMEDIATE_RESULTS","page","pageRecords","length","split","forEach","field","hasOwnProperty","context","targetHints","_links","self","allow","targetHint","e","shouldInvalidate","invalidateCache","getCurrentTheme","activeThemes","status","receiveCurrentTheme","getThemeSupports","getEmbedPreview","url","embedProxyResponse","receiveEmbedPreview","error","canUser","requestedAction","resource","includes","Error","hasStartedResolution","relatedAction","isAlreadyResolving","resourcePath","method","receiveUserPermission","finishResolution","canUserEditEntityRecord","getAutosaves","postType","postId","rest_base","restBase","rest_namespace","restNamespace","supports","getPostType","autosave","autosaves","receiveAutosaves","getAutosave","__experimentalGetCurrentGlobalStylesId","globalStylesURL","href","matches","match","Number","__experimentalReceiveCurrentGlobalStylesId","__experimentalGetCurrentThemeBaseGlobalStyles","currentTheme","themeGlobalStyles","stylesheet","__experimentalReceiveThemeBaseGlobalStyles","__experimentalGetCurrentThemeGlobalStylesVariations","variations","__experimentalReceiveThemeGlobalStyleVariations","getCurrentThemeGlobalStylesRevisions","globalStylesId","revisionsURL","resetRevisions","revisions","revision","fromEntries","entries","value","camelCase","receiveThemeGlobalStyleRevisions","getBlockPatterns","patterns","fetchBlockPatterns","getBlockPatternCategories","categories","getUserPatternCategories","patternCategories","mappedPatternCategories","userCategory","label","decodeEntities","slug","getNavigationFallbackId","fallback","_embed","_embedded","receiveNavigationFallbackId","existingFallbackEntityRecord","invalidateNavigationQueries","getDefaultTemplateId","template","receiveDefaultTemplateId","getRevisions","recordKey","revisionKey","getRevisionsUrl","isPaginated","receiveRevisions","resolutionsArgs","getRevision","getRegisteredPostMeta","options","receiveRegisteredPostMeta","schema","properties","loader","additionalEntityConfigLoaders","l","loadEntities","addEntities"],"sources":["@wordpress/core-data/src/resolvers.js"],"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 {\n\tforwardResolver,\n\tgetNormalizedCommaSeparable,\n\tgetUserPermissionCacheKey,\n\tgetUserPermissionsFromAllowHeader,\n\tALLOWED_RESOURCE_ACTIONS,\n\tRECEIVE_INTERMEDIATE_RESULTS,\n} from './utils';\nimport { getSyncProvider } from './sync';\nimport { fetchBlockPatterns } from './fetch';\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\t// Entity supports configs,\n\t\t\t// use the sync algorithm instead of the old fetch behavior.\n\t\t\tif (\n\t\t\t\twindow.__experimentalEnableSync &&\n\t\t\t\tentityConfig.syncConfig &&\n\t\t\t\t! query\n\t\t\t) {\n\t\t\t\tif ( globalThis.IS_GUTENBERG_PLUGIN ) {\n\t\t\t\t\tconst objectId = entityConfig.getSyncObjectId( key );\n\n\t\t\t\t\t// Loads the persisted document.\n\t\t\t\t\tawait getSyncProvider().bootstrap(\n\t\t\t\t\t\tentityConfig.syncObjectType,\n\t\t\t\t\t\tobjectId,\n\t\t\t\t\t\t( record ) => {\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\trecord,\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\n\t\t\t\t\t// Bootstraps the edited document as well (and load from peers).\n\t\t\t\t\tawait getSyncProvider().bootstrap(\n\t\t\t\t\t\tentityConfig.syncObjectType + '--edit',\n\t\t\t\t\t\tobjectId,\n\t\t\t\t\t\t( record ) => {\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: record,\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} );\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( query !== undefined && query._fields ) {\n\t\t\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t\t\t// the ID.\n\t\t\t\t\tquery = {\n\t\t\t\t\t\t...query,\n\t\t\t\t\t\t_fields: [\n\t\t\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t\t\t...( getNormalizedCommaSeparable(\n\t\t\t\t\t\t\t\t\tquery._fields\n\t\t\t\t\t\t\t\t) || [] ),\n\t\t\t\t\t\t\t\tentityConfig.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t\t\t] ),\n\t\t\t\t\t\t].join(),\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Disable reason: While true that an early return could leave `path`\n\t\t\t\t// unused, it's important that path is derived using the query prior to\n\t\t\t\t// additional query modifications in the condition below, since those\n\t\t\t\t// modifications are relevant to how the data is tracked in state, and not\n\t\t\t\t// for how the request is made to the REST API.\n\n\t\t\t\t// eslint-disable-next-line @wordpress/no-unused-vars-before-return\n\t\t\t\tconst path = addQueryArgs(\n\t\t\t\t\tentityConfig.baseURL + ( key ? '/' + key : '' ),\n\t\t\t\t\t{\n\t\t\t\t\t\t...entityConfig.baseURLParams,\n\t\t\t\t\t\t...query,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tif ( query !== undefined && query._fields ) {\n\t\t\t\t\tquery = { ...query, include: [ key ] };\n\n\t\t\t\t\t// The resolution cache won't consider query as reusable based on the\n\t\t\t\t\t// fields, so it's tested here, prior to initiating the REST request,\n\t\t\t\t\t// and without causing `getEntityRecords` resolution to occur.\n\t\t\t\t\tconst hasRecords = select.hasEntityRecords(\n\t\t\t\t\t\tkind,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tquery\n\t\t\t\t\t);\n\t\t\t\t\tif ( hasRecords ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst response = await apiFetch( { path, parse: false } );\n\t\t\t\tconst record = await response.json();\n\t\t\t\tconst permissions = getUserPermissionsFromAllowHeader(\n\t\t\t\t\tresponse.headers?.get( 'allow' )\n\t\t\t\t);\n\n\t\t\t\tconst canUserResolutionsArgs = [];\n\t\t\t\tconst receiveUserPermissionArgs = {};\n\t\t\t\tfor ( const action of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\t\t\treceiveUserPermissionArgs[\n\t\t\t\t\t\tgetUserPermissionCacheKey( action, {\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tid: key,\n\t\t\t\t\t\t} )\n\t\t\t\t\t] = permissions[ action ];\n\n\t\t\t\t\tcanUserResolutionsArgs.push( [\n\t\t\t\t\t\taction,\n\t\t\t\t\t\t{ kind, name, id: key },\n\t\t\t\t\t] );\n\t\t\t\t}\n\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\tdispatch.receiveEntityRecords( kind, name, record, query );\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\t\t\t}\n\t\t} finally {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\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\tconst key = entityConfig.key || DEFAULT_ENTITY_KEY;\n\n\t\tfunction getResolutionsArgs( records ) {\n\t\t\treturn records\n\t\t\t\t.filter( ( record ) => record?.[ key ] )\n\t\t\t\t.map( ( record ) => [ kind, name, record[ key ] ] );\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\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\tconst path = addQueryArgs( entityConfig.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\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);\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 )\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\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} 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\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\t// When requesting all fields, the list of results can be used to resolve\n\t\t\t\t// the `getEntityRecord` and `canUser` selectors in addition to `getEntityRecords`.\n\t\t\t\t// See https://github.com/WordPress/gutenberg/pull/26575\n\t\t\t\t// See https://github.com/WordPress/gutenberg/pull/64504\n\t\t\t\t// See https://github.com/WordPress/gutenberg/pull/70738\n\t\t\t\tif ( ! query.context ) {\n\t\t\t\t\tconst targetHints = records\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t( record ) =>\n\t\t\t\t\t\t\t\t!! record?.[ key ] &&\n\t\t\t\t\t\t\t\t!! record?._links?.self?.[ 0 ]?.targetHints\n\t\t\t\t\t\t\t\t\t?.allow\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map( ( record ) => ( {\n\t\t\t\t\t\t\tid: record[ key ],\n\t\t\t\t\t\t\tpermissions: getUserPermissionsFromAllowHeader(\n\t\t\t\t\t\t\t\trecord._links.self[ 0 ].targetHints.allow\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t} ) );\n\n\t\t\t\t\tconst canUserResolutionsArgs = [];\n\t\t\t\t\tconst receiveUserPermissionArgs = {};\n\t\t\t\t\tfor ( const targetHint of targetHints ) {\n\t\t\t\t\t\tfor ( const action of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\t\t\t\t\tcanUserResolutionsArgs.push( [\n\t\t\t\t\t\t\t\taction,\n\t\t\t\t\t\t\t\t{ kind, name, id: targetHint.id },\n\t\t\t\t\t\t\t] );\n\n\t\t\t\t\t\t\treceiveUserPermissionArgs[\n\t\t\t\t\t\t\t\tgetUserPermissionCacheKey( action, {\n\t\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\tid: targetHint.id,\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t] = targetHint.permissions[ action ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( targetHints.length > 0 ) {\n\t\t\t\t\t\tdispatch.receiveUserPermissions(\n\t\t\t\t\t\t\treceiveUserPermissionArgs\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdispatch.finishResolutions(\n\t\t\t\t\t\t\t'canUser',\n\t\t\t\t\t\t\tcanUserResolutionsArgs\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! query?._fields ) {\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( records )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\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 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\tregistry.batch( () => {\n\t\t\tfor ( const action of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\t\tconst key = getUserPermissionCacheKey( action, resource, id );\n\n\t\t\t\tdispatch.receiveUserPermission( key, permissions[ action ] );\n\n\t\t\t\t// Mark related action resolutions as finished.\n\t\t\t\tif ( action !== requestedAction ) {\n\t\t\t\t\tdispatch.finishResolution( 'canUser', [\n\t\t\t\t\t\taction,\n\t\t\t\t\t\tresource,\n\t\t\t\t\t\tid,\n\t\t\t\t\t] );\n\t\t\t\t}\n\t\t\t}\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// Endpoint may return an empty object if no template is found.\n\t\tif ( template?.id ) {\n\t\t\tregistry.batch( () => {\n\t\t\t\tdispatch.receiveDefaultTemplateId( query, template.id );\n\t\t\t\tdispatch.receiveEntityRecords( 'postType', 'wp_template', [\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\t'wp_template',\n\t\t\t\t\ttemplate.id,\n\t\t\t\t] );\n\t\t\t} );\n\t\t}\n\t};\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.key || 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"],"mappings":"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","ignoreList":[]}
@@ -56,6 +56,7 @@ var _name = require("./name");
56
56
  var _queriedData = require("./queried-data");
57
57
  var _entities = require("./entities");
58
58
  var _utils = require("./utils");
59
+ var _logEntityDeprecation = _interopRequireDefault(require("./utils/log-entity-deprecation"));
59
60
  /**
60
61
  * WordPress dependencies
61
62
  */
@@ -199,6 +200,7 @@ function getEntity(state, kind, name) {
199
200
  * @return Entity config
200
201
  */
201
202
  function getEntityConfig(state, kind, name) {
203
+ (0, _logEntityDeprecation.default)(kind, name, 'getEntityConfig');
202
204
  return state.entities.config?.find(config => config.kind === kind && config.name === name);
203
205
  }
204
206
 
@@ -243,6 +245,7 @@ function getEntityConfig(state, kind, name) {
243
245
  */
244
246
  const getEntityRecord = exports.getEntityRecord = (0, _data.createSelector)((state, kind, name, key, query) => {
245
247
  var _query$context;
248
+ (0, _logEntityDeprecation.default)(kind, name, 'getEntityRecord');
246
249
  const queriedState = state.entities.records?.[kind]?.[name]?.queriedData;
247
250
  if (!queriedState) {
248
251
  return undefined;
@@ -318,6 +321,7 @@ function __experimentalGetEntityRecordNoResolver(state, kind, name, key) {
318
321
  * @return Object with the entity's raw attributes.
319
322
  */
320
323
  const getRawEntityRecord = exports.getRawEntityRecord = (0, _data.createSelector)((state, kind, name, key) => {
324
+ (0, _logEntityDeprecation.default)(kind, name, 'getRawEntityRecord');
321
325
  const record = getEntityRecord(state, kind, name, key);
322
326
  return record && Object.keys(record).reduce((accumulator, _key) => {
323
327
  if ((0, _utils.isRawAttribute)(getEntityConfig(state, kind, name), _key)) {
@@ -348,6 +352,7 @@ const getRawEntityRecord = exports.getRawEntityRecord = (0, _data.createSelector
348
352
  * @return Whether entity records have been received.
349
353
  */
350
354
  function hasEntityRecords(state, kind, name, query) {
355
+ (0, _logEntityDeprecation.default)(kind, name, 'hasEntityRecords');
351
356
  return Array.isArray(getEntityRecords(state, kind, name, query));
352
357
  }
353
358
 
@@ -372,6 +377,8 @@ function hasEntityRecords(state, kind, name, query) {
372
377
  * @return Records.
373
378
  */
374
379
  const getEntityRecords = (state, kind, name, query) => {
380
+ (0, _logEntityDeprecation.default)(kind, name, 'getEntityRecords');
381
+
375
382
  // Queried data state is prepopulated for all known entities. If this is not
376
383
  // assigned for the given parameters, then it is known to not exist.
377
384
  const queriedState = state.entities.records?.[kind]?.[name]?.queriedData;
@@ -394,6 +401,8 @@ const getEntityRecords = (state, kind, name, query) => {
394
401
  */
395
402
  exports.getEntityRecords = getEntityRecords;
396
403
  const getEntityRecordsTotalItems = (state, kind, name, query) => {
404
+ (0, _logEntityDeprecation.default)(kind, name, 'getEntityRecordsTotalItems');
405
+
397
406
  // Queried data state is prepopulated for all known entities. If this is not
398
407
  // assigned for the given parameters, then it is known to not exist.
399
408
  const queriedState = state.entities.records?.[kind]?.[name]?.queriedData;
@@ -416,6 +425,8 @@ const getEntityRecordsTotalItems = (state, kind, name, query) => {
416
425
  */
417
426
  exports.getEntityRecordsTotalItems = getEntityRecordsTotalItems;
418
427
  const getEntityRecordsTotalPages = (state, kind, name, query) => {
428
+ (0, _logEntityDeprecation.default)(kind, name, 'getEntityRecordsTotalPages');
429
+
419
430
  // Queried data state is prepopulated for all known entities. If this is not
420
431
  // assigned for the given parameters, then it is known to not exist.
421
432
  const queriedState = state.entities.records?.[kind]?.[name]?.queriedData;
@@ -523,6 +534,7 @@ const __experimentalGetEntitiesBeingSaved = exports.__experimentalGetEntitiesBei
523
534
  * @return The entity record's edits.
524
535
  */
525
536
  function getEntityRecordEdits(state, kind, name, recordId) {
537
+ (0, _logEntityDeprecation.default)(kind, name, 'getEntityRecordEdits');
526
538
  return state.entities.records?.[kind]?.[name]?.edits?.[recordId];
527
539
  }
528
540
 
@@ -541,6 +553,7 @@ function getEntityRecordEdits(state, kind, name, recordId) {
541
553
  * @return The entity record's non transient edits.
542
554
  */
543
555
  const getEntityRecordNonTransientEdits = exports.getEntityRecordNonTransientEdits = (0, _data.createSelector)((state, kind, name, recordId) => {
556
+ (0, _logEntityDeprecation.default)(kind, name, 'getEntityRecordNonTransientEdits');
544
557
  const {
545
558
  transientEdits
546
559
  } = getEntityConfig(state, kind, name) || {};
@@ -568,6 +581,7 @@ const getEntityRecordNonTransientEdits = exports.getEntityRecordNonTransientEdit
568
581
  * @return Whether the entity record has edits or not.
569
582
  */
570
583
  function hasEditsForEntityRecord(state, kind, name, recordId) {
584
+ (0, _logEntityDeprecation.default)(kind, name, 'hasEditsForEntityRecord');
571
585
  return isSavingEntityRecord(state, kind, name, recordId) || Object.keys(getEntityRecordNonTransientEdits(state, kind, name, recordId)).length > 0;
572
586
  }
573
587
 
@@ -582,6 +596,7 @@ function hasEditsForEntityRecord(state, kind, name, recordId) {
582
596
  * @return The entity record, merged with its edits.
583
597
  */
584
598
  const getEditedEntityRecord = exports.getEditedEntityRecord = (0, _data.createSelector)((state, kind, name, recordId) => {
599
+ (0, _logEntityDeprecation.default)(kind, name, 'getEditedEntityRecord');
585
600
  const raw = getRawEntityRecord(state, kind, name, recordId);
586
601
  const edited = getEntityRecordEdits(state, kind, name, recordId);
587
602
  // Never return a non-falsy empty object. Unfortunately we can't return
@@ -613,6 +628,7 @@ const getEditedEntityRecord = exports.getEditedEntityRecord = (0, _data.createSe
613
628
  */
614
629
  function isAutosavingEntityRecord(state, kind, name, recordId) {
615
630
  var _state$entities$recor;
631
+ (0, _logEntityDeprecation.default)(kind, name, 'isAutosavingEntityRecord');
616
632
  const {
617
633
  pending,
618
634
  isAutosave
@@ -632,6 +648,7 @@ function isAutosavingEntityRecord(state, kind, name, recordId) {
632
648
  */
633
649
  function isSavingEntityRecord(state, kind, name, recordId) {
634
650
  var _state$entities$recor2;
651
+ (0, _logEntityDeprecation.default)(kind, name, 'isSavingEntityRecord');
635
652
  return (_state$entities$recor2 = state.entities.records?.[kind]?.[name]?.saving?.[recordId]?.pending) !== null && _state$entities$recor2 !== void 0 ? _state$entities$recor2 : false;
636
653
  }
637
654
 
@@ -647,6 +664,7 @@ function isSavingEntityRecord(state, kind, name, recordId) {
647
664
  */
648
665
  function isDeletingEntityRecord(state, kind, name, recordId) {
649
666
  var _state$entities$recor3;
667
+ (0, _logEntityDeprecation.default)(kind, name, 'isDeletingEntityRecord');
650
668
  return (_state$entities$recor3 = state.entities.records?.[kind]?.[name]?.deleting?.[recordId]?.pending) !== null && _state$entities$recor3 !== void 0 ? _state$entities$recor3 : false;
651
669
  }
652
670
 
@@ -661,6 +679,7 @@ function isDeletingEntityRecord(state, kind, name, recordId) {
661
679
  * @return The entity record's save error.
662
680
  */
663
681
  function getLastEntitySaveError(state, kind, name, recordId) {
682
+ (0, _logEntityDeprecation.default)(kind, name, 'getLastEntitySaveError');
664
683
  return state.entities.records?.[kind]?.[name]?.saving?.[recordId]?.error;
665
684
  }
666
685
 
@@ -675,6 +694,7 @@ function getLastEntitySaveError(state, kind, name, recordId) {
675
694
  * @return The entity record's save error.
676
695
  */
677
696
  function getLastEntityDeleteError(state, kind, name, recordId) {
697
+ (0, _logEntityDeprecation.default)(kind, name, 'getLastEntityDeleteError');
678
698
  return state.entities.records?.[kind]?.[name]?.deleting?.[recordId]?.error;
679
699
  }
680
700
 
@@ -821,7 +841,7 @@ function isPreviewEmbedFallback(state, url) {
821
841
  *
822
842
  * @param state Data state.
823
843
  * @param action Action to check. One of: 'create', 'read', 'update', 'delete'.
824
- * @param resource Entity resource to check. Accepts entity object `{ kind: 'root', name: 'media', id: 1 }`
844
+ * @param resource Entity resource to check. Accepts entity object `{ kind: 'postType', name: 'attachment', id: 1 }`
825
845
  * or REST base as a string - `media`.
826
846
  * @param id Optional ID of the rest resource to check.
827
847
  *
@@ -833,6 +853,9 @@ function canUser(state, action, resource, id) {
833
853
  if (isEntity && (!resource.kind || !resource.name)) {
834
854
  return false;
835
855
  }
856
+ if (isEntity) {
857
+ (0, _logEntityDeprecation.default)(resource.kind, resource.name, 'canUser');
858
+ }
836
859
  const key = (0, _utils.getUserPermissionCacheKey)(action, resource, id);
837
860
  return state.userPermissions[key];
838
861
  }
@@ -1043,6 +1066,7 @@ function getDefaultTemplateId(state, query) {
1043
1066
  * @return Record.
1044
1067
  */
1045
1068
  const getRevisions = (state, kind, name, recordKey, query) => {
1069
+ (0, _logEntityDeprecation.default)(kind, name, 'getRevisions');
1046
1070
  const queriedStateRevisions = state.entities.records?.[kind]?.[name]?.revisions?.[recordKey];
1047
1071
  if (!queriedStateRevisions) {
1048
1072
  return null;
@@ -1066,6 +1090,7 @@ const getRevisions = (state, kind, name, recordKey, query) => {
1066
1090
  exports.getRevisions = getRevisions;
1067
1091
  const getRevision = exports.getRevision = (0, _data.createSelector)((state, kind, name, recordKey, revisionKey, query) => {
1068
1092
  var _query$context5;
1093
+ (0, _logEntityDeprecation.default)(kind, name, 'getRevision');
1069
1094
  const queriedState = state.entities.records?.[kind]?.[name]?.revisions?.[recordKey];
1070
1095
  if (!queriedState) {
1071
1096
  return undefined;