@wordpress/core-data 7.30.1-next.836ecdcae.0 → 7.31.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 (73) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +23 -1
  3. package/build/actions.js +32 -2
  4. package/build/actions.js.map +1 -1
  5. package/build/entities.js +1 -1
  6. package/build/entities.js.map +1 -1
  7. package/build/entity-types/user.js.map +1 -1
  8. package/build/hooks/index.js.map +1 -1
  9. package/build/hooks/use-entity-records.js.map +1 -1
  10. package/build/private-actions.js +8 -0
  11. package/build/private-actions.js.map +1 -1
  12. package/build/private-selectors.js +8 -1
  13. package/build/private-selectors.js.map +1 -1
  14. package/build/reducer.js +9 -1
  15. package/build/reducer.js.map +1 -1
  16. package/build/resolvers.js +80 -64
  17. package/build/resolvers.js.map +1 -1
  18. package/build/selectors.js +99 -41
  19. package/build/selectors.js.map +1 -1
  20. package/build-module/actions.js +32 -2
  21. package/build-module/actions.js.map +1 -1
  22. package/build-module/entities.js +1 -1
  23. package/build-module/entities.js.map +1 -1
  24. package/build-module/entity-types/user.js.map +1 -1
  25. package/build-module/hooks/index.js +8 -0
  26. package/build-module/hooks/index.js.map +1 -1
  27. package/build-module/hooks/use-entity-records.js.map +1 -1
  28. package/build-module/private-actions.js +7 -0
  29. package/build-module/private-actions.js.map +1 -1
  30. package/build-module/private-selectors.js +7 -1
  31. package/build-module/private-selectors.js.map +1 -1
  32. package/build-module/reducer.js +8 -1
  33. package/build-module/reducer.js.map +1 -1
  34. package/build-module/resolvers.js +76 -61
  35. package/build-module/resolvers.js.map +1 -1
  36. package/build-module/selectors.js +98 -41
  37. package/build-module/selectors.js.map +1 -1
  38. package/build-types/actions.d.ts.map +1 -1
  39. package/build-types/entity-types/user.d.ts +2 -2
  40. package/build-types/entity-types/user.d.ts.map +1 -1
  41. package/build-types/hooks/index.d.ts +8 -0
  42. package/build-types/hooks/index.d.ts.map +1 -1
  43. package/build-types/hooks/use-entity-records.d.ts +12 -2
  44. package/build-types/hooks/use-entity-records.d.ts.map +1 -1
  45. package/build-types/index.d.ts +2 -1
  46. package/build-types/index.d.ts.map +1 -1
  47. package/build-types/private-actions.d.ts +5 -0
  48. package/build-types/private-actions.d.ts.map +1 -1
  49. package/build-types/private-selectors.d.ts +1 -0
  50. package/build-types/private-selectors.d.ts.map +1 -1
  51. package/build-types/reducer.d.ts +3 -0
  52. package/build-types/reducer.d.ts.map +1 -1
  53. package/build-types/resolvers.d.ts +7 -0
  54. package/build-types/resolvers.d.ts.map +1 -1
  55. package/build-types/selectors.d.ts +18 -2
  56. package/build-types/selectors.d.ts.map +1 -1
  57. package/package.json +18 -18
  58. package/src/actions.js +43 -1
  59. package/src/entities.js +1 -1
  60. package/src/entity-types/user.ts +2 -2
  61. package/src/hooks/index.ts +9 -0
  62. package/src/hooks/use-entity-records.ts +12 -2
  63. package/src/private-actions.js +4 -0
  64. package/src/private-selectors.ts +10 -0
  65. package/src/reducer.js +7 -0
  66. package/src/resolvers.js +127 -81
  67. package/src/selectors.ts +110 -40
  68. package/src/test/actions.js +2 -2
  69. package/src/test/entities.js +32 -0
  70. package/src/test/resolvers.js +103 -12
  71. package/src/test/selectors.js +220 -13
  72. package/src/test/store.js +114 -0
  73. package/tsconfig.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["camelCase","addQueryArgs","decodeEntities","apiFetch","STORE_NAME","additionalEntityConfigLoaders","DEFAULT_ENTITY_KEY","forwardResolver","getNormalizedCommaSeparable","getUserPermissionCacheKey","getUserPermissionsFromAllowHeader","ALLOWED_RESOURCE_ACTIONS","RECEIVE_INTERMEDIATE_RESULTS","getSyncProvider","fetchBlockPatterns","getAuthors","query","dispatch","path","users","receiveUserQuery","getCurrentUser","currentUser","receiveCurrentUser","getEntityRecord","kind","name","key","select","registry","resolveSelect","configs","getEntitiesConfig","entityConfig","find","config","lock","__unstableAcquireStoreLock","exclusive","window","__experimentalEnableSync","syncConfig","globalThis","IS_GUTENBERG_PLUGIN","objectId","getSyncObjectId","bootstrap","syncObjectType","record","receiveEntityRecords","type","recordId","edits","meta","undo","undefined","_fields","Set","join","baseURL","baseURLParams","include","hasRecords","hasEntityRecords","response","parse","json","permissions","headers","get","canUserResolutionsArgs","receiveUserPermissionArgs","action","id","push","batch","receiveUserPermissions","finishResolutions","__unstableReleaseStoreLock","getRawEntityRecord","getEditedEntityRecord","getEntityRecords","getResolutionsArgs","records","filter","map","supportsPagination","per_page","Object","values","totalItems","parseInt","totalPages","page","pageRecords","length","split","forEach","field","hasOwnProperty","context","targetHints","_links","self","allow","targetHint","e","shouldInvalidate","invalidateCache","getEntityRecordsTotalItems","getEntityRecordsTotalPages","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","receiveThemeGlobalStyleRevisions","getBlockPatterns","patterns","getBlockPatternCategories","categories","getUserPatternCategories","patternCategories","mappedPatternCategories","userCategory","label","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","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\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 )\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\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 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\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":["camelCase","addQueryArgs","decodeEntities","apiFetch","STORE_NAME","additionalEntityConfigLoaders","DEFAULT_ENTITY_KEY","forwardResolver","getNormalizedCommaSeparable","getUserPermissionCacheKey","getUserPermissionsFromAllowHeader","ALLOWED_RESOURCE_ACTIONS","RECEIVE_INTERMEDIATE_RESULTS","getSyncProvider","fetchBlockPatterns","getAuthors","query","dispatch","path","users","receiveUserQuery","getCurrentUser","currentUser","receiveCurrentUser","getEntityRecord","kind","name","key","select","registry","resolveSelect","test","configs","getEntitiesConfig","entityConfig","find","config","lock","__unstableAcquireStoreLock","exclusive","window","__experimentalEnableSync","syncConfig","globalThis","IS_GUTENBERG_PLUGIN","objectId","getSyncObjectId","bootstrap","syncObjectType","record","receiveEntityRecords","type","recordId","edits","meta","undo","undefined","_fields","Set","join","hasRecord","hasEntityRecord","baseURL","baseURLParams","response","parse","json","permissions","headers","get","canUserResolutionsArgs","receiveUserPermissionArgs","action","id","push","batch","receiveUserPermissions","finishResolutions","__unstableReleaseStoreLock","getTemplateAutoDraftId","staticTemplateId","autoDraft","saveEntityRecord","status","receiveTemplateAutoDraftId","getRawEntityRecord","getEditedEntityRecord","getEntityRecords","rawQuery","getResolutionsArgs","records","recordsQuery","queryArgs","Object","fromEntries","entries","filter","k","v","includes","map","keys","length","supportsPagination","per_page","values","totalItems","parseInt","totalPages","page","pageRecords","split","forEach","field","hasOwnProperty","targetHints","_links","self","allow","targetHint","e","shouldInvalidate","invalidateCache","getEntityRecordsTotalItems","getEntityRecordsTotalPages","getCurrentTheme","activeThemes","receiveCurrentTheme","getThemeSupports","getEmbedPreview","url","embedProxyResponse","receiveEmbedPreview","error","canUser","requestedAction","resource","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","value","receiveThemeGlobalStyleRevisions","getBlockPatterns","patterns","getBlockPatternCategories","categories","getUserPatternCategories","patternCategories","context","mappedPatternCategories","userCategory","label","slug","getNavigationFallbackId","fallback","_embed","_embedded","receiveNavigationFallbackId","existingFallbackEntityRecord","invalidateNavigationQueries","getDefaultTemplateId","template","wp_id","receiveDefaultTemplateId","getRevisions","recordKey","revisionKey","getRevisionsUrl","isPaginated","receiveRevisions","resolutionsArgs","getRevision","getRegisteredPostMeta","options","receiveRegisteredPostMeta","schema","properties","loader","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\t// For back-compat, we allow querying for static templates through\n\t\t// wp_template.\n\t\tif (\n\t\t\tkind === 'postType' &&\n\t\t\tname === 'wp_template' &&\n\t\t\ttypeof key === 'string' &&\n\t\t\t// __experimentalGetDirtyEntityRecords always calls getEntityRecord\n\t\t\t// with a string key, so we need that it's not a numeric ID.\n\t\t\t! /^\\d+$/.test( key )\n\t\t) {\n\t\t\tname = 'wp_registered_template';\n\t\t}\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\tif ( query !== undefined && query._fields ) {\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 `getEntityRecord` resolution to occur.\n\t\t\t\t\tconst hasRecord = select.hasEntityRecord(\n\t\t\t\t\t\tkind,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tquery\n\t\t\t\t\t);\n\t\t\t\t\tif ( hasRecord ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\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\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\nexport const getTemplateAutoDraftId =\n\t( staticTemplateId ) =>\n\tasync ( { resolveSelect, dispatch } ) => {\n\t\tconst record = await resolveSelect.getEntityRecord(\n\t\t\t'postType',\n\t\t\t'wp_registered_template',\n\t\t\tstaticTemplateId\n\t\t);\n\t\tconst autoDraft = await dispatch.saveEntityRecord(\n\t\t\t'postType',\n\t\t\t'wp_template',\n\t\t\t{\n\t\t\t\t...record,\n\t\t\t\tid: undefined,\n\t\t\t\ttype: 'wp_template',\n\t\t\t\tstatus: 'auto-draft',\n\t\t\t}\n\t\t);\n\t\tawait dispatch.receiveTemplateAutoDraftId(\n\t\t\tstaticTemplateId,\n\t\t\tautoDraft.id\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\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\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\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\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\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\tconst id = template?.wp_id || 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\ttemplate.type =\n\t\t\t\ttypeof id === 'string'\n\t\t\t\t\t? 'wp_registered_template'\n\t\t\t\t\t: 'wp_template';\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 === 'EDIT_ENTITY_RECORD' &&\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.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":"AAAA;AACA;AACA;AACA,SAASA,SAAS,QAAQ,aAAa;;AAEvC;AACA;AACA;AACA,SAASC,YAAY,QAAQ,gBAAgB;AAC7C,SAASC,cAAc,QAAQ,0BAA0B;AACzD,OAAOC,QAAQ,MAAM,sBAAsB;;AAE3C;AACA;AACA;AACA,SAASC,UAAU,QAAQ,QAAQ;AACnC,SAASC,6BAA6B,EAAEC,kBAAkB,QAAQ,YAAY;AAC9E,SACCC,eAAe,EACfC,2BAA2B,EAC3BC,yBAAyB,EACzBC,iCAAiC,EACjCC,wBAAwB,EACxBC,4BAA4B,QACtB,SAAS;AAChB,SAASC,eAAe,QAAQ,QAAQ;AACxC,SAASC,kBAAkB,QAAQ,SAAS;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,UAAU,GACpBC,KAAK,IACP,OAAQ;EAAEC;AAAS,CAAC,KAAM;EACzB,MAAMC,IAAI,GAAGjB,YAAY,CACxB,wCAAwC,EACxCe,KACD,CAAC;EACD,MAAMG,KAAK,GAAG,MAAMhB,QAAQ,CAAE;IAAEe;EAAK,CAAE,CAAC;EACxCD,QAAQ,CAACG,gBAAgB,CAAEF,IAAI,EAAEC,KAAM,CAAC;AACzC,CAAC;;AAEF;AACA;AACA;AACA,OAAO,MAAME,cAAc,GAC1BA,CAAA,KACA,OAAQ;EAAEJ;AAAS,CAAC,KAAM;EACzB,MAAMK,WAAW,GAAG,MAAMnB,QAAQ,CAAE;IAAEe,IAAI,EAAE;EAAkB,CAAE,CAAC;EACjED,QAAQ,CAACM,kBAAkB,CAAED,WAAY,CAAC;AAC3C,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAME,eAAe,GAC3BA,CAAEC,IAAI,EAAEC,IAAI,EAAEC,GAAG,GAAG,EAAE,EAAEX,KAAK,KAC7B,OAAQ;EAAEY,MAAM;EAAEX,QAAQ;EAAEY,QAAQ;EAAEC;AAAc,CAAC,KAAM;EAC1D;EACA;EACA,IACCL,IAAI,KAAK,UAAU,IACnBC,IAAI,KAAK,aAAa,IACtB,OAAOC,GAAG,KAAK,QAAQ;EACvB;EACA;EACA,CAAE,OAAO,CAACI,IAAI,CAAEJ,GAAI,CAAC,EACpB;IACDD,IAAI,GAAG,wBAAwB;EAChC;EACA,MAAMM,OAAO,GAAG,MAAMF,aAAa,CAACG,iBAAiB,CAAER,IAAK,CAAC;EAC7D,MAAMS,YAAY,GAAGF,OAAO,CAACG,IAAI,CAC9BC,MAAM,IAAMA,MAAM,CAACV,IAAI,KAAKA,IAAI,IAAIU,MAAM,CAACX,IAAI,KAAKA,IACvD,CAAC;EACD,IAAK,CAAES,YAAY,EAAG;IACrB;EACD;EAEA,MAAMG,IAAI,GAAG,MAAMpB,QAAQ,CAACqB,0BAA0B,CACrDlC,UAAU,EACV,CAAE,UAAU,EAAE,SAAS,EAAEqB,IAAI,EAAEC,IAAI,EAAEC,GAAG,CAAE,EAC1C;IAAEY,SAAS,EAAE;EAAM,CACpB,CAAC;EAED,IAAI;IACH;IACA;IACA,IACCC,MAAM,CAACC,wBAAwB,IAC/BP,YAAY,CAACQ,UAAU,IACvB,CAAE1B,KAAK,EACN;MACD,IAAK2B,UAAU,CAACC,mBAAmB,EAAG;QACrC,MAAMC,QAAQ,GAAGX,YAAY,CAACY,eAAe,CAAEnB,GAAI,CAAC;;QAEpD;QACA,MAAMd,eAAe,CAAC,CAAC,CAACkC,SAAS,CAChCb,YAAY,CAACc,cAAc,EAC3BH,QAAQ,EACNI,MAAM,IAAM;UACbhC,QAAQ,CAACiC,oBAAoB,CAC5BzB,IAAI,EACJC,IAAI,EACJuB,MAAM,EACNjC,KACD,CAAC;QACF,CACD,CAAC;;QAED;QACA,MAAMH,eAAe,CAAC,CAAC,CAACkC,SAAS,CAChCb,YAAY,CAACc,cAAc,GAAG,QAAQ,EACtCH,QAAQ,EACNI,MAAM,IAAM;UACbhC,QAAQ,CAAE;YACTkC,IAAI,EAAE,oBAAoB;YAC1B1B,IAAI;YACJC,IAAI;YACJ0B,QAAQ,EAAEzB,GAAG;YACb0B,KAAK,EAAEJ,MAAM;YACbK,IAAI,EAAE;cACLC,IAAI,EAAEC;YACP;UACD,CAAE,CAAC;QACJ,CACD,CAAC;MACF;IACD,CAAC,MAAM;MACN,IAAKxC,KAAK,KAAKwC,SAAS,IAAIxC,KAAK,CAACyC,OAAO,EAAG;QAC3C;QACA;QACA;QACAzC,KAAK,GAAG;UACP,GAAGA,KAAK;UACRyC,OAAO,EAAE,CACR,GAAG,IAAIC,GAAG,CAAE,CACX,IAAKlD,2BAA2B,CAC/BQ,KAAK,CAACyC,OACP,CAAC,IAAI,EAAE,CAAE,EACTvB,YAAY,CAACP,GAAG,IAAIrB,kBAAkB,CACrC,CAAC,CACH,CAACqD,IAAI,CAAC;QACR,CAAC;MACF;MAEA,IAAK3C,KAAK,KAAKwC,SAAS,IAAIxC,KAAK,CAACyC,OAAO,EAAG;QAC3C;QACA;QACA;QACA,MAAMG,SAAS,GAAGhC,MAAM,CAACiC,eAAe,CACvCpC,IAAI,EACJC,IAAI,EACJC,GAAG,EACHX,KACD,CAAC;QACD,IAAK4C,SAAS,EAAG;UAChB;QACD;MACD;MAEA,MAAM1C,IAAI,GAAGjB,YAAY,CACxBiC,YAAY,CAAC4B,OAAO,IAAKnC,GAAG,GAAG,GAAG,GAAGA,GAAG,GAAG,EAAE,CAAE,EAC/C;QACC,GAAGO,YAAY,CAAC6B,aAAa;QAC7B,GAAG/C;MACJ,CACD,CAAC;MACD,MAAMgD,QAAQ,GAAG,MAAM7D,QAAQ,CAAE;QAAEe,IAAI;QAAE+C,KAAK,EAAE;MAAM,CAAE,CAAC;MACzD,MAAMhB,MAAM,GAAG,MAAMe,QAAQ,CAACE,IAAI,CAAC,CAAC;MACpC,MAAMC,WAAW,GAAGzD,iCAAiC,CACpDsD,QAAQ,CAACI,OAAO,EAAEC,GAAG,CAAE,OAAQ,CAChC,CAAC;MAED,MAAMC,sBAAsB,GAAG,EAAE;MACjC,MAAMC,yBAAyB,GAAG,CAAC,CAAC;MACpC,KAAM,MAAMC,MAAM,IAAI7D,wBAAwB,EAAG;QAChD4D,yBAAyB,CACxB9D,yBAAyB,CAAE+D,MAAM,EAAE;UAClC/C,IAAI;UACJC,IAAI;UACJ+C,EAAE,EAAE9C;QACL,CAAE,CAAC,CACH,GAAGwC,WAAW,CAAEK,MAAM,CAAE;QAEzBF,sBAAsB,CAACI,IAAI,CAAE,CAC5BF,MAAM,EACN;UAAE/C,IAAI;UAAEC,IAAI;UAAE+C,EAAE,EAAE9C;QAAI,CAAC,CACtB,CAAC;MACJ;MAEAE,QAAQ,CAAC8C,KAAK,CAAE,MAAM;QACrB1D,QAAQ,CAACiC,oBAAoB,CAAEzB,IAAI,EAAEC,IAAI,EAAEuB,MAAM,EAAEjC,KAAM,CAAC;QAC1DC,QAAQ,CAAC2D,sBAAsB,CAC9BL,yBACD,CAAC;QACDtD,QAAQ,CAAC4D,iBAAiB,CACzB,SAAS,EACTP,sBACD,CAAC;MACF,CAAE,CAAC;IACJ;EACD,CAAC,SAAS;IACTrD,QAAQ,CAAC6D,0BAA0B,CAAEzC,IAAK,CAAC;EAC5C;AACD,CAAC;AAEF,OAAO,MAAM0C,sBAAsB,GAChCC,gBAAgB,IAClB,OAAQ;EAAElD,aAAa;EAAEb;AAAS,CAAC,KAAM;EACxC,MAAMgC,MAAM,GAAG,MAAMnB,aAAa,CAACN,eAAe,CACjD,UAAU,EACV,wBAAwB,EACxBwD,gBACD,CAAC;EACD,MAAMC,SAAS,GAAG,MAAMhE,QAAQ,CAACiE,gBAAgB,CAChD,UAAU,EACV,aAAa,EACb;IACC,GAAGjC,MAAM;IACTwB,EAAE,EAAEjB,SAAS;IACbL,IAAI,EAAE,aAAa;IACnBgC,MAAM,EAAE;EACT,CACD,CAAC;EACD,MAAMlE,QAAQ,CAACmE,0BAA0B,CACxCJ,gBAAgB,EAChBC,SAAS,CAACR,EACX,CAAC;AACF,CAAC;;AAEF;AACA;AACA;AACA,OAAO,MAAMY,kBAAkB,GAAG9E,eAAe,CAAE,iBAAkB,CAAC;;AAEtE;AACA;AACA;AACA,OAAO,MAAM+E,qBAAqB,GAAG/E,eAAe,CAAE,iBAAkB,CAAC;;AAEzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMgF,gBAAgB,GAC5BA,CAAE9D,IAAI,EAAEC,IAAI,EAAEV,KAAK,GAAG,CAAC,CAAC,KACxB,OAAQ;EAAEC,QAAQ;EAAEY,QAAQ;EAAEC;AAAc,CAAC,KAAM;EAClD,MAAME,OAAO,GAAG,MAAMF,aAAa,CAACG,iBAAiB,CAAER,IAAK,CAAC;EAC7D,MAAMS,YAAY,GAAGF,OAAO,CAACG,IAAI,CAC9BC,MAAM,IAAMA,MAAM,CAACV,IAAI,KAAKA,IAAI,IAAIU,MAAM,CAACX,IAAI,KAAKA,IACvD,CAAC;EACD,IAAK,CAAES,YAAY,EAAG;IACrB;EACD;EAEA,MAAMG,IAAI,GAAG,MAAMpB,QAAQ,CAACqB,0BAA0B,CACrDlC,UAAU,EACV,CAAE,UAAU,EAAE,SAAS,EAAEqB,IAAI,EAAEC,IAAI,CAAE,EACrC;IAAEa,SAAS,EAAE;EAAM,CACpB,CAAC;;EAED;EACA;EACA;EACA;EACA,MAAMiD,QAAQ,GAAG;IAAE,GAAGxE;EAAM,CAAC;EAC7B,MAAMW,GAAG,GAAGO,YAAY,CAACP,GAAG,IAAIrB,kBAAkB;EAElD,SAASmF,kBAAkBA,CAAEC,OAAO,EAAEC,YAAY,EAAG;IACpD,MAAMC,SAAS,GAAGC,MAAM,CAACC,WAAW,CACnCD,MAAM,CAACE,OAAO,CAAEJ,YAAa,CAAC,CAACK,MAAM,CAAE,CAAE,CAAEC,CAAC,EAAEC,CAAC,CAAE,KAAM;MACtD,OAAO,CAAE,SAAS,EAAE,SAAS,CAAE,CAACC,QAAQ,CAAEF,CAAE,CAAC,IAAI,CAAC,CAAEC,CAAC;IACtD,CAAE,CACH,CAAC;IACD,OAAOR,OAAO,CACZM,MAAM,CAAI/C,MAAM,IAAMA,MAAM,GAAItB,GAAG,CAAG,CAAC,CACvCyE,GAAG,CAAInD,MAAM,IAAM,CACnBxB,IAAI,EACJC,IAAI,EACJuB,MAAM,CAAEtB,GAAG,CAAE,EACbkE,MAAM,CAACQ,IAAI,CAAET,SAAU,CAAC,CAACU,MAAM,GAAG,CAAC,GAAGV,SAAS,GAAGpC,SAAS,CAC1D,CAAC;EACL;EAEA,IAAI;IACH,IAAKxC,KAAK,CAACyC,OAAO,EAAG;MACpB;MACA;MACA;MACAzC,KAAK,GAAG;QACP,GAAGA,KAAK;QACRyC,OAAO,EAAE,CACR,GAAG,IAAIC,GAAG,CAAE,CACX,IAAKlD,2BAA2B,CAAEQ,KAAK,CAACyC,OAAQ,CAAC,IAChD,EAAE,CAAE,EACL9B,GAAG,CACF,CAAC,CACH,CAACgC,IAAI,CAAC;MACR,CAAC;IACF;IAEA,MAAMzC,IAAI,GAAGjB,YAAY,CAAEiC,YAAY,CAAC4B,OAAO,EAAE;MAChD,GAAG5B,YAAY,CAAC6B,aAAa;MAC7B,GAAG/C;IACJ,CAAE,CAAC;IAEH,IAAI0E,OAAO,GAAG,EAAE;MACfpC,IAAI;IACL,IAAKpB,YAAY,CAACqE,kBAAkB,IAAIvF,KAAK,CAACwF,QAAQ,KAAK,CAAC,CAAC,EAAG;MAC/D,MAAMxC,QAAQ,GAAG,MAAM7D,QAAQ,CAAE;QAAEe,IAAI;QAAE+C,KAAK,EAAE;MAAM,CAAE,CAAC;MACzDyB,OAAO,GAAGG,MAAM,CAACY,MAAM,CAAE,MAAMzC,QAAQ,CAACE,IAAI,CAAC,CAAE,CAAC;MAChDZ,IAAI,GAAG;QACNoD,UAAU,EAAEC,QAAQ,CACnB3C,QAAQ,CAACI,OAAO,CAACC,GAAG,CAAE,YAAa,CACpC,CAAC;QACDuC,UAAU,EAAED,QAAQ,CACnB3C,QAAQ,CAACI,OAAO,CAACC,GAAG,CAAE,iBAAkB,CACzC;MACD,CAAC;IACF,CAAC,MAAM,IACNrD,KAAK,CAACwF,QAAQ,KAAK,CAAC,CAAC,IACrBxF,KAAK,CAAEJ,4BAA4B,CAAE,KAAK,IAAI,EAC7C;MACD,IAAIiG,IAAI,GAAG,CAAC;MACZ,IAAID,UAAU;MAEd,GAAG;QACF,MAAM5C,QAAQ,GAAG,MAAM7D,QAAQ,CAAE;UAChCe,IAAI,EAAEjB,YAAY,CAAEiB,IAAI,EAAE;YAAE2F,IAAI;YAAEL,QAAQ,EAAE;UAAI,CAAE,CAAC;UACnDvC,KAAK,EAAE;QACR,CAAE,CAAC;QACH,MAAM6C,WAAW,GAAGjB,MAAM,CAACY,MAAM,CAAE,MAAMzC,QAAQ,CAACE,IAAI,CAAC,CAAE,CAAC;QAE1D0C,UAAU,GAAGD,QAAQ,CACpB3C,QAAQ,CAACI,OAAO,CAACC,GAAG,CAAE,iBAAkB,CACzC,CAAC;QAED,IAAK,CAAEf,IAAI,EAAG;UACbA,IAAI,GAAG;YACNoD,UAAU,EAAEC,QAAQ,CACnB3C,QAAQ,CAACI,OAAO,CAACC,GAAG,CAAE,YAAa,CACpC,CAAC;YACDuC,UAAU,EAAE;UACb,CAAC;QACF;QAEAlB,OAAO,CAAChB,IAAI,CAAE,GAAGoC,WAAY,CAAC;QAC9BjF,QAAQ,CAAC8C,KAAK,CAAE,MAAM;UACrB1D,QAAQ,CAACiC,oBAAoB,CAC5BzB,IAAI,EACJC,IAAI,EACJgE,OAAO,EACP1E,KAAK,EACL,KAAK,EACLwC,SAAS,EACTF,IACD,CAAC;UACDrC,QAAQ,CAAC4D,iBAAiB,CACzB,iBAAiB,EACjBY,kBAAkB,CAAEqB,WAAW,EAAEtB,QAAS,CAC3C,CAAC;QACF,CAAE,CAAC;QACHqB,IAAI,EAAE;MACP,CAAC,QAASA,IAAI,IAAID,UAAU;IAC7B,CAAC,MAAM;MACNlB,OAAO,GAAGG,MAAM,CAACY,MAAM,CAAE,MAAMtG,QAAQ,CAAE;QAAEe;MAAK,CAAE,CAAE,CAAC;MACrDoC,IAAI,GAAG;QACNoD,UAAU,EAAEhB,OAAO,CAACY,MAAM;QAC1BM,UAAU,EAAE;MACb,CAAC;IACF;;IAEA;IACA;IACA;IACA,IAAK5F,KAAK,CAACyC,OAAO,EAAG;MACpBiC,OAAO,GAAGA,OAAO,CAACU,GAAG,CAAInD,MAAM,IAAM;QACpCjC,KAAK,CAACyC,OAAO,CAACsD,KAAK,CAAE,GAAI,CAAC,CAACC,OAAO,CAAIC,KAAK,IAAM;UAChD,IAAK,CAAEhE,MAAM,CAACiE,cAAc,CAAED,KAAM,CAAC,EAAG;YACvChE,MAAM,CAAEgE,KAAK,CAAE,GAAGzD,SAAS;UAC5B;QACD,CAAE,CAAC;QAEH,OAAOP,MAAM;MACd,CAAE,CAAC;IACJ;IAEApB,QAAQ,CAAC8C,KAAK,CAAE,MAAM;MACrB1D,QAAQ,CAACiC,oBAAoB,CAC5BzB,IAAI,EACJC,IAAI,EACJgE,OAAO,EACP1E,KAAK,EACL,KAAK,EACLwC,SAAS,EACTF,IACD,CAAC;MAED,MAAM6D,WAAW,GAAGzB,OAAO,CACzBM,MAAM,CACJ/C,MAAM,IACP,CAAC,CAAEA,MAAM,GAAItB,GAAG,CAAE,IAClB,CAAC,CAAEsB,MAAM,EAAEmE,MAAM,EAAEC,IAAI,GAAI,CAAC,CAAE,EAAEF,WAAW,EAAEG,KAC/C,CAAC,CACAlB,GAAG,CAAInD,MAAM,KAAQ;QACrBwB,EAAE,EAAExB,MAAM,CAAEtB,GAAG,CAAE;QACjBwC,WAAW,EAAEzD,iCAAiC,CAC7CuC,MAAM,CAACmE,MAAM,CAACC,IAAI,CAAE,CAAC,CAAE,CAACF,WAAW,CAACG,KACrC;MACD,CAAC,CAAG,CAAC;MAEN,MAAMhD,sBAAsB,GAAG,EAAE;MACjC,MAAMC,yBAAyB,GAAG,CAAC,CAAC;MACpC,KAAM,MAAMgD,UAAU,IAAIJ,WAAW,EAAG;QACvC,KAAM,MAAM3C,MAAM,IAAI7D,wBAAwB,EAAG;UAChD2D,sBAAsB,CAACI,IAAI,CAAE,CAC5BF,MAAM,EACN;YAAE/C,IAAI;YAAEC,IAAI;YAAE+C,EAAE,EAAE8C,UAAU,CAAC9C;UAAG,CAAC,CAChC,CAAC;UAEHF,yBAAyB,CACxB9D,yBAAyB,CAAE+D,MAAM,EAAE;YAClC/C,IAAI;YACJC,IAAI;YACJ+C,EAAE,EAAE8C,UAAU,CAAC9C;UAChB,CAAE,CAAC,CACH,GAAG8C,UAAU,CAACpD,WAAW,CAAEK,MAAM,CAAE;QACrC;MACD;MAEA,IAAK2C,WAAW,CAACb,MAAM,GAAG,CAAC,EAAG;QAC7BrF,QAAQ,CAAC2D,sBAAsB,CAC9BL,yBACD,CAAC;QACDtD,QAAQ,CAAC4D,iBAAiB,CACzB,SAAS,EACTP,sBACD,CAAC;MACF;MAEArD,QAAQ,CAAC4D,iBAAiB,CACzB,iBAAiB,EACjBY,kBAAkB,CAAEC,OAAO,EAAEF,QAAS,CACvC,CAAC;MAEDvE,QAAQ,CAAC6D,0BAA0B,CAAEzC,IAAK,CAAC;IAC5C,CAAE,CAAC;EACJ,CAAC,CAAC,OAAQmF,CAAC,EAAG;IACbvG,QAAQ,CAAC6D,0BAA0B,CAAEzC,IAAK,CAAC;EAC5C;AACD,CAAC;AAEFkD,gBAAgB,CAACkC,gBAAgB,GAAG,CAAEjD,MAAM,EAAE/C,IAAI,EAAEC,IAAI,KAAM;EAC7D,OACC,CAAE8C,MAAM,CAACrB,IAAI,KAAK,eAAe,IAAIqB,MAAM,CAACrB,IAAI,KAAK,cAAc,KACnEqB,MAAM,CAACkD,eAAe,IACtBjG,IAAI,KAAK+C,MAAM,CAAC/C,IAAI,IACpBC,IAAI,KAAK8C,MAAM,CAAC9C,IAAI;AAEtB,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMiG,0BAA0B,GAAGpH,eAAe,CAAE,kBAAmB,CAAC;;AAE/E;AACA;AACA;AACA,OAAO,MAAMqH,0BAA0B,GAAGrH,eAAe,CAAE,kBAAmB,CAAC;;AAE/E;AACA;AACA;AACA,OAAO,MAAMsH,eAAe,GAC3BA,CAAA,KACA,OAAQ;EAAE5G,QAAQ;EAAEa;AAAc,CAAC,KAAM;EACxC,MAAMgG,YAAY,GAAG,MAAMhG,aAAa,CAACyD,gBAAgB,CACxD,MAAM,EACN,OAAO,EACP;IAAEJ,MAAM,EAAE;EAAS,CACpB,CAAC;EAEDlE,QAAQ,CAAC8G,mBAAmB,CAAED,YAAY,CAAE,CAAC,CAAG,CAAC;AAClD,CAAC;;AAEF;AACA;AACA;AACA,OAAO,MAAME,gBAAgB,GAAGzH,eAAe,CAAE,iBAAkB,CAAC;;AAEpE;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM0H,eAAe,GACzBC,GAAG,IACL,OAAQ;EAAEjH;AAAS,CAAC,KAAM;EACzB,IAAI;IACH,MAAMkH,kBAAkB,GAAG,MAAMhI,QAAQ,CAAE;MAC1Ce,IAAI,EAAEjB,YAAY,CAAE,mBAAmB,EAAE;QAAEiI;MAAI,CAAE;IAClD,CAAE,CAAC;IACHjH,QAAQ,CAACmH,mBAAmB,CAAEF,GAAG,EAAEC,kBAAmB,CAAC;EACxD,CAAC,CAAC,OAAQE,KAAK,EAAG;IACjB;IACApH,QAAQ,CAACmH,mBAAmB,CAAEF,GAAG,EAAE,KAAM,CAAC;EAC3C;AACD,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMI,OAAO,GACnBA,CAAEC,eAAe,EAAEC,QAAQ,EAAE/D,EAAE,KAC/B,OAAQ;EAAExD,QAAQ;EAAEY,QAAQ;EAAEC;AAAc,CAAC,KAAM;EAClD,IAAK,CAAEnB,wBAAwB,CAACwF,QAAQ,CAAEoC,eAAgB,CAAC,EAAG;IAC7D,MAAM,IAAIE,KAAK,CAAE,IAAKF,eAAe,0BAA4B,CAAC;EACnE;EAEA,MAAM;IAAEG;EAAqB,CAAC,GAAG7G,QAAQ,CAACD,MAAM,CAAExB,UAAW,CAAC;;EAE9D;EACA,KAAM,MAAMuI,aAAa,IAAIhI,wBAAwB,EAAG;IACvD,IAAKgI,aAAa,KAAKJ,eAAe,EAAG;MACxC;IACD;IACA,MAAMK,kBAAkB,GAAGF,oBAAoB,CAAE,SAAS,EAAE,CAC3DC,aAAa,EACbH,QAAQ,EACR/D,EAAE,CACD,CAAC;IACH,IAAKmE,kBAAkB,EAAG;MACzB;IACD;EACD;EAEA,IAAIC,YAAY,GAAG,IAAI;EACvB,IAAK,OAAOL,QAAQ,KAAK,QAAQ,EAAG;IACnC,IAAK,CAAEA,QAAQ,CAAC/G,IAAI,IAAI,CAAE+G,QAAQ,CAAC9G,IAAI,EAAG;MACzC,MAAM,IAAI+G,KAAK,CAAE,0CAA2C,CAAC;IAC9D;IAEA,MAAMzG,OAAO,GAAG,MAAMF,aAAa,CAACG,iBAAiB,CACpDuG,QAAQ,CAAC/G,IACV,CAAC;IACD,MAAMS,YAAY,GAAGF,OAAO,CAACG,IAAI,CAC9BC,MAAM,IACPA,MAAM,CAACV,IAAI,KAAK8G,QAAQ,CAAC9G,IAAI,IAC7BU,MAAM,CAACX,IAAI,KAAK+G,QAAQ,CAAC/G,IAC3B,CAAC;IACD,IAAK,CAAES,YAAY,EAAG;MACrB;IACD;IAEA2G,YAAY,GACX3G,YAAY,CAAC4B,OAAO,IAAK0E,QAAQ,CAAC/D,EAAE,GAAG,GAAG,GAAG+D,QAAQ,CAAC/D,EAAE,GAAG,EAAE,CAAE;EACjE,CAAC,MAAM;IACNoE,YAAY,GAAG,UAAWL,QAAQ,EAAG,IAAK/D,EAAE,GAAG,GAAG,GAAGA,EAAE,GAAG,EAAE,CAAE;EAC/D;EAEA,IAAIT,QAAQ;EACZ,IAAI;IACHA,QAAQ,GAAG,MAAM7D,QAAQ,CAAE;MAC1Be,IAAI,EAAE2H,YAAY;MAClBC,MAAM,EAAE,SAAS;MACjB7E,KAAK,EAAE;IACR,CAAE,CAAC;EACJ,CAAC,CAAC,OAAQoE,KAAK,EAAG;IACjB;IACA;IACA;EACD;;EAEA;EACA;EACA;EACA,MAAMlE,WAAW,GAAGzD,iCAAiC,CACpDsD,QAAQ,CAACI,OAAO,EAAEC,GAAG,CAAE,OAAQ,CAChC,CAAC;EACDxC,QAAQ,CAAC8C,KAAK,CAAE,MAAM;IACrB,KAAM,MAAMH,MAAM,IAAI7D,wBAAwB,EAAG;MAChD,MAAMgB,GAAG,GAAGlB,yBAAyB,CAAE+D,MAAM,EAAEgE,QAAQ,EAAE/D,EAAG,CAAC;MAE7DxD,QAAQ,CAAC8H,qBAAqB,CAAEpH,GAAG,EAAEwC,WAAW,CAAEK,MAAM,CAAG,CAAC;;MAE5D;MACA,IAAKA,MAAM,KAAK+D,eAAe,EAAG;QACjCtH,QAAQ,CAAC+H,gBAAgB,CAAE,SAAS,EAAE,CACrCxE,MAAM,EACNgE,QAAQ,EACR/D,EAAE,CACD,CAAC;MACJ;IACD;EACD,CAAE,CAAC;AACJ,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMwE,uBAAuB,GACnCA,CAAExH,IAAI,EAAEC,IAAI,EAAE0B,QAAQ,KACtB,OAAQ;EAAEnC;AAAS,CAAC,KAAM;EACzB,MAAMA,QAAQ,CAAEqH,OAAO,CAAE,QAAQ,EAAE;IAAE7G,IAAI;IAAEC,IAAI;IAAE+C,EAAE,EAAErB;EAAS,CAAE,CAAE,CAAC;AACpE,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM8F,YAAY,GACxBA,CAAEC,QAAQ,EAAEC,MAAM,KAClB,OAAQ;EAAEnI,QAAQ;EAAEa;AAAc,CAAC,KAAM;EACxC,MAAM;IACLuH,SAAS,EAAEC,QAAQ;IACnBC,cAAc,EAAEC,aAAa,GAAG,OAAO;IACvCC;EACD,CAAC,GAAG,MAAM3H,aAAa,CAAC4H,WAAW,CAAEP,QAAS,CAAC;EAC/C,IAAK,CAAEM,QAAQ,EAAEE,QAAQ,EAAG;IAC3B;EACD;EAEA,MAAMC,SAAS,GAAG,MAAMzJ,QAAQ,CAAE;IACjCe,IAAI,EAAE,IAAKsI,aAAa,IAAMF,QAAQ,IAAMF,MAAM;EACnD,CAAE,CAAC;EAEH,IAAKQ,SAAS,IAAIA,SAAS,CAACtD,MAAM,EAAG;IACpCrF,QAAQ,CAAC4I,gBAAgB,CAAET,MAAM,EAAEQ,SAAU,CAAC;EAC/C;AACD,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAME,WAAW,GACvBA,CAAEX,QAAQ,EAAEC,MAAM,KAClB,OAAQ;EAAEtH;AAAc,CAAC,KAAM;EAC9B,MAAMA,aAAa,CAACoH,YAAY,CAAEC,QAAQ,EAAEC,MAAO,CAAC;AACrD,CAAC;AAEF,OAAO,MAAMW,sCAAsC,GAClDA,CAAA,KACA,OAAQ;EAAE9I,QAAQ;EAAEa;AAAc,CAAC,KAAM;EACxC,MAAMgG,YAAY,GAAG,MAAMhG,aAAa,CAACyD,gBAAgB,CACxD,MAAM,EACN,OAAO,EACP;IAAEJ,MAAM,EAAE;EAAS,CACpB,CAAC;EACD,MAAM6E,eAAe,GACpBlC,YAAY,GAAI,CAAC,CAAE,EAAEV,MAAM,GAAI,uBAAuB,CAAE,GAAI,CAAC,CAAE,EAC5D6C,IAAI;EACR,IAAK,CAAED,eAAe,EAAG;IACxB;EACD;;EAEA;EACA;EACA,MAAME,OAAO,GAAGF,eAAe,CAACG,KAAK,CAAE,iBAAkB,CAAC;EAC1D,MAAM1F,EAAE,GAAGyF,OAAO,GAAGE,MAAM,CAAEF,OAAO,CAAE,CAAC,CAAG,CAAC,GAAG,IAAI;EAElD,IAAKzF,EAAE,EAAG;IACTxD,QAAQ,CAACoJ,0CAA0C,CAAE5F,EAAG,CAAC;EAC1D;AACD,CAAC;AAEF,OAAO,MAAM6F,6CAA6C,GACzDA,CAAA,KACA,OAAQ;EAAExI,aAAa;EAAEb;AAAS,CAAC,KAAM;EACxC,MAAMsJ,YAAY,GAAG,MAAMzI,aAAa,CAAC+F,eAAe,CAAC,CAAC;EAC1D;EACA,MAAM2C,iBAAiB,GAAG,MAAMrK,QAAQ,CAAE;IACzCe,IAAI,EAAE,+BAAgCqJ,YAAY,CAACE,UAAU;EAC9D,CAAE,CAAC;EACHxJ,QAAQ,CAACyJ,0CAA0C,CAClDH,YAAY,CAACE,UAAU,EACvBD,iBACD,CAAC;AACF,CAAC;AAEF,OAAO,MAAMG,mDAAmD,GAC/DA,CAAA,KACA,OAAQ;EAAE7I,aAAa;EAAEb;AAAS,CAAC,KAAM;EACxC,MAAMsJ,YAAY,GAAG,MAAMzI,aAAa,CAAC+F,eAAe,CAAC,CAAC;EAC1D;EACA,MAAM+C,UAAU,GAAG,MAAMzK,QAAQ,CAAE;IAClCe,IAAI,EAAE,+BAAgCqJ,YAAY,CAACE,UAAU;EAC9D,CAAE,CAAC;EACHxJ,QAAQ,CAAC4J,+CAA+C,CACvDN,YAAY,CAACE,UAAU,EACvBG,UACD,CAAC;AACF,CAAC;;AAEF;AACA;AACA;AACA,OAAO,MAAME,oCAAoC,GAChDA,CAAA,KACA,OAAQ;EAAEhJ,aAAa;EAAEb;AAAS,CAAC,KAAM;EACxC,MAAM8J,cAAc,GACnB,MAAMjJ,aAAa,CAACiI,sCAAsC,CAAC,CAAC;EAC7D,MAAM9G,MAAM,GAAG8H,cAAc,GAC1B,MAAMjJ,aAAa,CAACN,eAAe,CACnC,MAAM,EACN,cAAc,EACduJ,cACA,CAAC,GACDvH,SAAS;EACZ,MAAMwH,YAAY,GAAG/H,MAAM,EAAEmE,MAAM,GAAI,iBAAiB,CAAE,GAAI,CAAC,CAAE,EAAE6C,IAAI;EAEvE,IAAKe,YAAY,EAAG;IACnB,MAAMC,cAAc,GAAG,MAAM9K,QAAQ,CAAE;MACtC+H,GAAG,EAAE8C;IACN,CAAE,CAAC;IACH,MAAME,SAAS,GAAGD,cAAc,EAAE7E,GAAG,CAAI+E,QAAQ,IAChDtF,MAAM,CAACC,WAAW,CACjBD,MAAM,CAACE,OAAO,CAAEoF,QAAS,CAAC,CAAC/E,GAAG,CAAE,CAAE,CAAEzE,GAAG,EAAEyJ,KAAK,CAAE,KAAM,CACrDpL,SAAS,CAAE2B,GAAI,CAAC,EAChByJ,KAAK,CACJ,CACH,CACD,CAAC;IACDnK,QAAQ,CAACoK,gCAAgC,CACxCN,cAAc,EACdG,SACD,CAAC;EACF;AACD,CAAC;AAEFJ,oCAAoC,CAACrD,gBAAgB,GAAKjD,MAAM,IAAM;EACrE,OACCA,MAAM,CAACrB,IAAI,KAAK,2BAA2B,IAC3CqB,MAAM,CAAC/C,IAAI,KAAK,MAAM,IACtB,CAAE+C,MAAM,CAAC6D,KAAK,IACd7D,MAAM,CAAC9C,IAAI,KAAK,cAAc;AAEhC,CAAC;AAED,OAAO,MAAM4J,gBAAgB,GAC5BA,CAAA,KACA,OAAQ;EAAErK;AAAS,CAAC,KAAM;EACzB,MAAMsK,QAAQ,GAAG,MAAMzK,kBAAkB,CAAC,CAAC;EAC3CG,QAAQ,CAAE;IAAEkC,IAAI,EAAE,wBAAwB;IAAEoI;EAAS,CAAE,CAAC;AACzD,CAAC;AAEF,OAAO,MAAMC,yBAAyB,GACrCA,CAAA,KACA,OAAQ;EAAEvK;AAAS,CAAC,KAAM;EACzB,MAAMwK,UAAU,GAAG,MAAMtL,QAAQ,CAAE;IAClCe,IAAI,EAAE;EACP,CAAE,CAAC;EACHD,QAAQ,CAAE;IAAEkC,IAAI,EAAE,kCAAkC;IAAEsI;EAAW,CAAE,CAAC;AACrE,CAAC;AAEF,OAAO,MAAMC,wBAAwB,GACpCA,CAAA,KACA,OAAQ;EAAEzK,QAAQ;EAAEa;AAAc,CAAC,KAAM;EACxC,MAAM6J,iBAAiB,GAAG,MAAM7J,aAAa,CAACyD,gBAAgB,CAC7D,UAAU,EACV,qBAAqB,EACrB;IACCiB,QAAQ,EAAE,CAAC,CAAC;IACZ/C,OAAO,EAAE,0BAA0B;IACnCmI,OAAO,EAAE;EACV,CACD,CAAC;EAED,MAAMC,uBAAuB,GAC5BF,iBAAiB,EAAEvF,GAAG,CAAI0F,YAAY,KAAQ;IAC7C,GAAGA,YAAY;IACfC,KAAK,EAAE7L,cAAc,CAAE4L,YAAY,CAACpK,IAAK,CAAC;IAC1CA,IAAI,EAAEoK,YAAY,CAACE;EACpB,CAAC,CAAG,CAAC,IAAI,EAAE;EAEZ/K,QAAQ,CAAE;IACTkC,IAAI,EAAE,iCAAiC;IACvCwI,iBAAiB,EAAEE;EACpB,CAAE,CAAC;AACJ,CAAC;AAEF,OAAO,MAAMI,uBAAuB,GACnCA,CAAA,KACA,OAAQ;EAAEhL,QAAQ;EAAEW,MAAM;EAAEC;AAAS,CAAC,KAAM;EAC3C,MAAMqK,QAAQ,GAAG,MAAM/L,QAAQ,CAAE;IAChCe,IAAI,EAAEjB,YAAY,CAAE,yCAAyC,EAAE;MAC9DkM,MAAM,EAAE;IACT,CAAE;EACH,CAAE,CAAC;EAEH,MAAMlJ,MAAM,GAAGiJ,QAAQ,EAAEE,SAAS,EAAE/E,IAAI;EAExCxF,QAAQ,CAAC8C,KAAK,CAAE,MAAM;IACrB1D,QAAQ,CAACoL,2BAA2B,CAAEH,QAAQ,EAAEzH,EAAG,CAAC;IAEpD,IAAK,CAAExB,MAAM,EAAG;MACf;IACD;;IAEA;IACA;IACA;IACA,MAAMqJ,4BAA4B,GAAG1K,MAAM,CAACJ,eAAe,CAC1D,UAAU,EACV,eAAe,EACf0K,QAAQ,CAACzH,EACV,CAAC;IACD,MAAM8H,2BAA2B,GAAG,CAAED,4BAA4B;IAClErL,QAAQ,CAACiC,oBAAoB,CAC5B,UAAU,EACV,eAAe,EACfD,MAAM,EACNO,SAAS,EACT+I,2BACD,CAAC;;IAED;IACAtL,QAAQ,CAAC+H,gBAAgB,CAAE,iBAAiB,EAAE,CAC7C,UAAU,EACV,eAAe,EACfkD,QAAQ,CAACzH,EAAE,CACV,CAAC;EACJ,CAAE,CAAC;AACJ,CAAC;AAEF,OAAO,MAAM+H,oBAAoB,GAC9BxL,KAAK,IACP,OAAQ;EAAEC,QAAQ;EAAEY,QAAQ;EAAEC;AAAc,CAAC,KAAM;EAClD,MAAM2K,QAAQ,GAAG,MAAMtM,QAAQ,CAAE;IAChCe,IAAI,EAAEjB,YAAY,CAAE,yBAAyB,EAAEe,KAAM;EACtD,CAAE,CAAC;EACH;EACA;EACA,MAAMc,aAAa,CAACG,iBAAiB,CAAE,UAAW,CAAC;EACnD,MAAMwC,EAAE,GAAGgI,QAAQ,EAAEC,KAAK,IAAID,QAAQ,EAAEhI,EAAE;EAC1C;EACA,IAAKA,EAAE,EAAG;IACTgI,QAAQ,CAAChI,EAAE,GAAGA,EAAE;IAChBgI,QAAQ,CAACtJ,IAAI,GACZ,OAAOsB,EAAE,KAAK,QAAQ,GACnB,wBAAwB,GACxB,aAAa;IACjB5C,QAAQ,CAAC8C,KAAK,CAAE,MAAM;MACrB1D,QAAQ,CAAC0L,wBAAwB,CAAE3L,KAAK,EAAEyD,EAAG,CAAC;MAC9CxD,QAAQ,CAACiC,oBAAoB,CAAE,UAAU,EAAEuJ,QAAQ,CAACtJ,IAAI,EAAE,CACzDsJ,QAAQ,CACP,CAAC;MACH;MACAxL,QAAQ,CAAC+H,gBAAgB,CAAE,iBAAiB,EAAE,CAC7C,UAAU,EACVyD,QAAQ,CAACtJ,IAAI,EACbsB,EAAE,CACD,CAAC;IACJ,CAAE,CAAC;EACJ;AACD,CAAC;AAEF+H,oBAAoB,CAAC/E,gBAAgB,GAAKjD,MAAM,IAAM;EACrD,OACCA,MAAM,CAACrB,IAAI,KAAK,oBAAoB,IACpCqB,MAAM,CAAC/C,IAAI,KAAK,MAAM,IACtB+C,MAAM,CAAC9C,IAAI,KAAK,MAAM;AAExB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMkL,YAAY,GACxBA,CAAEnL,IAAI,EAAEC,IAAI,EAAEmL,SAAS,EAAE7L,KAAK,GAAG,CAAC,CAAC,KACnC,OAAQ;EAAEC,QAAQ;EAAEY,QAAQ;EAAEC;AAAc,CAAC,KAAM;EAClD,MAAME,OAAO,GAAG,MAAMF,aAAa,CAACG,iBAAiB,CAAER,IAAK,CAAC;EAC7D,MAAMS,YAAY,GAAGF,OAAO,CAACG,IAAI,CAC9BC,MAAM,IAAMA,MAAM,CAACV,IAAI,KAAKA,IAAI,IAAIU,MAAM,CAACX,IAAI,KAAKA,IACvD,CAAC;EAED,IAAK,CAAES,YAAY,EAAG;IACrB;EACD;EAEA,IAAKlB,KAAK,CAACyC,OAAO,EAAG;IACpB;IACA;IACA;IACAzC,KAAK,GAAG;MACP,GAAGA,KAAK;MACRyC,OAAO,EAAE,CACR,GAAG,IAAIC,GAAG,CAAE,CACX,IAAKlD,2BAA2B,CAAEQ,KAAK,CAACyC,OAAQ,CAAC,IAChD,EAAE,CAAE,EACLvB,YAAY,CAAC4K,WAAW,IAAIxM,kBAAkB,CAC7C,CAAC,CACH,CAACqD,IAAI,CAAC;IACR,CAAC;EACF;EAEA,MAAMzC,IAAI,GAAGjB,YAAY,CACxBiC,YAAY,CAAC6K,eAAe,CAAEF,SAAU,CAAC,EACzC7L,KACD,CAAC;EAED,IAAI0E,OAAO,EAAE1B,QAAQ;EACrB,MAAMV,IAAI,GAAG,CAAC,CAAC;EACf,MAAM0J,WAAW,GAChB9K,YAAY,CAACqE,kBAAkB,IAAIvF,KAAK,CAACwF,QAAQ,KAAK,CAAC,CAAC;EACzD,IAAI;IACHxC,QAAQ,GAAG,MAAM7D,QAAQ,CAAE;MAAEe,IAAI;MAAE+C,KAAK,EAAE,CAAE+I;IAAY,CAAE,CAAC;EAC5D,CAAC,CAAC,OAAQ3E,KAAK,EAAG;IACjB;IACA;EACD;EAEA,IAAKrE,QAAQ,EAAG;IACf,IAAKgJ,WAAW,EAAG;MAClBtH,OAAO,GAAGG,MAAM,CAACY,MAAM,CAAE,MAAMzC,QAAQ,CAACE,IAAI,CAAC,CAAE,CAAC;MAChDZ,IAAI,CAACoD,UAAU,GAAGC,QAAQ,CACzB3C,QAAQ,CAACI,OAAO,CAACC,GAAG,CAAE,YAAa,CACpC,CAAC;IACF,CAAC,MAAM;MACNqB,OAAO,GAAGG,MAAM,CAACY,MAAM,CAAEzC,QAAS,CAAC;IACpC;;IAEA;IACA;IACA;IACA,IAAKhD,KAAK,CAACyC,OAAO,EAAG;MACpBiC,OAAO,GAAGA,OAAO,CAACU,GAAG,CAAInD,MAAM,IAAM;QACpCjC,KAAK,CAACyC,OAAO,CAACsD,KAAK,CAAE,GAAI,CAAC,CAACC,OAAO,CAAIC,KAAK,IAAM;UAChD,IAAK,CAAEhE,MAAM,CAACiE,cAAc,CAAED,KAAM,CAAC,EAAG;YACvChE,MAAM,CAAEgE,KAAK,CAAE,GAAGzD,SAAS;UAC5B;QACD,CAAE,CAAC;QAEH,OAAOP,MAAM;MACd,CAAE,CAAC;IACJ;IAEApB,QAAQ,CAAC8C,KAAK,CAAE,MAAM;MACrB1D,QAAQ,CAACgM,gBAAgB,CACxBxL,IAAI,EACJC,IAAI,EACJmL,SAAS,EACTnH,OAAO,EACP1E,KAAK,EACL,KAAK,EACLsC,IACD,CAAC;;MAED;MACA;MACA,IAAK,CAAEtC,KAAK,EAAEyC,OAAO,IAAI,CAAEzC,KAAK,CAAC4K,OAAO,EAAG;QAC1C,MAAMjK,GAAG,GAAGO,YAAY,CAACP,GAAG,IAAIrB,kBAAkB;QAClD,MAAM4M,eAAe,GAAGxH,OAAO,CAC7BM,MAAM,CAAI/C,MAAM,IAAMA,MAAM,CAAEtB,GAAG,CAAG,CAAC,CACrCyE,GAAG,CAAInD,MAAM,IAAM,CACnBxB,IAAI,EACJC,IAAI,EACJmL,SAAS,EACT5J,MAAM,CAAEtB,GAAG,CAAE,CACZ,CAAC;QAEJV,QAAQ,CAAC4D,iBAAiB,CACzB,aAAa,EACbqI,eACD,CAAC;MACF;IACD,CAAE,CAAC;EACJ;AACD,CAAC;;AAEF;AACAN,YAAY,CAACnF,gBAAgB,GAAG,CAAEjD,MAAM,EAAE/C,IAAI,EAAEC,IAAI,EAAEmL,SAAS,KAC9DrI,MAAM,CAACrB,IAAI,KAAK,2BAA2B,IAC3CzB,IAAI,KAAK8C,MAAM,CAAC9C,IAAI,IACpBD,IAAI,KAAK+C,MAAM,CAAC/C,IAAI,IACpB,CAAE+C,MAAM,CAAC6D,KAAK,IACdwE,SAAS,KAAKrI,MAAM,CAACpB,QAAQ;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM+J,WAAW,GACvBA,CAAE1L,IAAI,EAAEC,IAAI,EAAEmL,SAAS,EAAEC,WAAW,EAAE9L,KAAK,KAC3C,OAAQ;EAAEC,QAAQ;EAAEa;AAAc,CAAC,KAAM;EACxC,MAAME,OAAO,GAAG,MAAMF,aAAa,CAACG,iBAAiB,CAAER,IAAK,CAAC;EAC7D,MAAMS,YAAY,GAAGF,OAAO,CAACG,IAAI,CAC9BC,MAAM,IAAMA,MAAM,CAACV,IAAI,KAAKA,IAAI,IAAIU,MAAM,CAACX,IAAI,KAAKA,IACvD,CAAC;EAED,IAAK,CAAES,YAAY,EAAG;IACrB;EACD;EAEA,IAAKlB,KAAK,KAAKwC,SAAS,IAAIxC,KAAK,CAACyC,OAAO,EAAG;IAC3C;IACA;IACA;IACAzC,KAAK,GAAG;MACP,GAAGA,KAAK;MACRyC,OAAO,EAAE,CACR,GAAG,IAAIC,GAAG,CAAE,CACX,IAAKlD,2BAA2B,CAAEQ,KAAK,CAACyC,OAAQ,CAAC,IAChD,EAAE,CAAE,EACLvB,YAAY,CAAC4K,WAAW,IAAIxM,kBAAkB,CAC7C,CAAC,CACH,CAACqD,IAAI,CAAC;IACR,CAAC;EACF;EACA,MAAMzC,IAAI,GAAGjB,YAAY,CACxBiC,YAAY,CAAC6K,eAAe,CAAEF,SAAS,EAAEC,WAAY,CAAC,EACtD9L,KACD,CAAC;EAED,IAAIiC,MAAM;EACV,IAAI;IACHA,MAAM,GAAG,MAAM9C,QAAQ,CAAE;MAAEe;IAAK,CAAE,CAAC;EACpC,CAAC,CAAC,OAAQmH,KAAK,EAAG;IACjB;IACA;EACD;EAEA,IAAKpF,MAAM,EAAG;IACbhC,QAAQ,CAACgM,gBAAgB,CAAExL,IAAI,EAAEC,IAAI,EAAEmL,SAAS,EAAE5J,MAAM,EAAEjC,KAAM,CAAC;EAClE;AACD,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMoM,qBAAqB,GAC/BjE,QAAQ,IACV,OAAQ;EAAElI,QAAQ;EAAEa;AAAc,CAAC,KAAM;EACxC,IAAIuL,OAAO;EACX,IAAI;IACH,MAAM;MACL9D,cAAc,EAAEC,aAAa,GAAG,OAAO;MACvCH,SAAS,EAAEC;IACZ,CAAC,GAAG,CAAE,MAAMxH,aAAa,CAAC4H,WAAW,CAAEP,QAAS,CAAC,KAAM,CAAC,CAAC;IACzDkE,OAAO,GAAG,MAAMlN,QAAQ,CAAE;MACzBe,IAAI,EAAE,GAAIsI,aAAa,IAAMF,QAAQ,gBAAiB;MACtDR,MAAM,EAAE;IACT,CAAE,CAAC;EACJ,CAAC,CAAC,OAAQT,KAAK,EAAG;IACjB;IACA;EACD;EAEA,IAAKgF,OAAO,EAAG;IACdpM,QAAQ,CAACqM,yBAAyB,CACjCnE,QAAQ,EACRkE,OAAO,EAAEE,MAAM,EAAEC,UAAU,EAAElK,IAAI,EAAEkK,UACpC,CAAC;EACF;AACD,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMvL,iBAAiB,GAC3BR,IAAI,IACN,OAAQ;EAAER;AAAS,CAAC,KAAM;EACzB,MAAMwM,MAAM,GAAGpN,6BAA6B,CAAC8B,IAAI,CAC9CuL,CAAC,IAAMA,CAAC,CAACjM,IAAI,KAAKA,IACrB,CAAC;EAED,IAAK,CAAEgM,MAAM,EAAG;IACf;EACD;EAEA,IAAI;IACH,MAAMzL,OAAO,GAAG,MAAMyL,MAAM,CAACE,YAAY,CAAC,CAAC;IAC3C,IAAK,CAAE3L,OAAO,CAACsE,MAAM,EAAG;MACvB;IACD;IAEArF,QAAQ,CAAC2M,WAAW,CAAE5L,OAAQ,CAAC;EAChC,CAAC,CAAC,MAAM;IACP;EAAA;AAEF,CAAC","ignoreList":[]}
@@ -193,14 +193,23 @@ export function getEntityConfig(state, kind, name) {
193
193
  * @return Record.
194
194
  */
195
195
  export const getEntityRecord = createSelector((state, kind, name, key, query) => {
196
- var _query$context;
196
+ var _query$context, _getNormalizedCommaSe;
197
197
  logEntityDeprecation(kind, name, 'getEntityRecord');
198
+
199
+ // For back-compat, we allow querying for static templates through
200
+ // wp_template.
201
+ if (kind === 'postType' && name === 'wp_template' && typeof key === 'string' &&
202
+ // __experimentalGetDirtyEntityRecords always calls getEntityRecord
203
+ // with a string key, so we need that it's not a numeric ID.
204
+ !/^\d+$/.test(key)) {
205
+ name = 'wp_registered_template';
206
+ }
198
207
  const queriedState = state.entities.records?.[kind]?.[name]?.queriedData;
199
208
  if (!queriedState) {
200
209
  return undefined;
201
210
  }
202
211
  const context = (_query$context = query?.context) !== null && _query$context !== void 0 ? _query$context : 'default';
203
- if (query === undefined) {
212
+ if (!query || !query._fields) {
204
213
  // If expecting a complete item, validate that completeness.
205
214
  if (!queriedState.itemIsComplete[context]?.[key]) {
206
215
  return undefined;
@@ -208,25 +217,25 @@ export const getEntityRecord = createSelector((state, kind, name, key, query) =>
208
217
  return queriedState.items[context][key];
209
218
  }
210
219
  const item = queriedState.items[context]?.[key];
211
- if (item && query._fields) {
212
- var _getNormalizedCommaSe;
213
- const filteredItem = {};
214
- const fields = (_getNormalizedCommaSe = getNormalizedCommaSeparable(query._fields)) !== null && _getNormalizedCommaSe !== void 0 ? _getNormalizedCommaSe : [];
215
- for (let f = 0; f < fields.length; f++) {
216
- const field = fields[f].split('.');
217
- let value = item;
218
- field.forEach(fieldName => {
219
- value = value?.[fieldName];
220
- });
221
- setNestedValue(filteredItem, field, value);
222
- }
223
- return filteredItem;
220
+ if (!item) {
221
+ return item;
224
222
  }
225
- return item;
223
+ const filteredItem = {};
224
+ const fields = (_getNormalizedCommaSe = getNormalizedCommaSeparable(query._fields)) !== null && _getNormalizedCommaSe !== void 0 ? _getNormalizedCommaSe : [];
225
+ for (let f = 0; f < fields.length; f++) {
226
+ const field = fields[f].split('.');
227
+ let value = item;
228
+ field.forEach(fieldName => {
229
+ value = value?.[fieldName];
230
+ });
231
+ setNestedValue(filteredItem, field, value);
232
+ }
233
+ return filteredItem;
226
234
  }, (state, kind, name, recordId, query) => {
227
235
  var _query$context2;
228
236
  const context = (_query$context2 = query?.context) !== null && _query$context2 !== void 0 ? _query$context2 : 'default';
229
- return [state.entities.records?.[kind]?.[name]?.queriedData?.items[context]?.[recordId], state.entities.records?.[kind]?.[name]?.queriedData?.itemIsComplete[context]?.[recordId]];
237
+ const queriedState = state.entities.records?.[kind]?.[name]?.queriedData;
238
+ return [queriedState?.items[context]?.[recordId], queriedState?.itemIsComplete[context]?.[recordId]];
230
239
  });
231
240
 
232
241
  /**
@@ -244,6 +253,54 @@ getEntityRecord.__unstableNormalizeArgs = args => {
244
253
  return newArgs;
245
254
  };
246
255
 
256
+ /**
257
+ * Returns true if a record has been received for the given set of parameters, or false otherwise.
258
+ *
259
+ * Note: This action does not trigger a request for the entity record from the API
260
+ * if it's not available in the local state.
261
+ *
262
+ * @param state State tree
263
+ * @param kind Entity kind.
264
+ * @param name Entity name.
265
+ * @param key Record's key.
266
+ * @param query Optional query.
267
+ *
268
+ * @return Whether an entity record has been received.
269
+ */
270
+ export function hasEntityRecord(state, kind, name, key, query) {
271
+ var _query$context3, _getNormalizedCommaSe2;
272
+ const queriedState = state.entities.records?.[kind]?.[name]?.queriedData;
273
+ if (!queriedState) {
274
+ return false;
275
+ }
276
+ const context = (_query$context3 = query?.context) !== null && _query$context3 !== void 0 ? _query$context3 : 'default';
277
+
278
+ // If expecting a complete item, validate that completeness.
279
+ if (!query || !query._fields) {
280
+ return !!queriedState.itemIsComplete[context]?.[key];
281
+ }
282
+ const item = queriedState.items[context]?.[key];
283
+ if (!item) {
284
+ return false;
285
+ }
286
+
287
+ // When `query._fields` is provided, check that each requested field exists,
288
+ // including any nested paths, on the item; return false if any part is missing.
289
+ const fields = (_getNormalizedCommaSe2 = getNormalizedCommaSeparable(query._fields)) !== null && _getNormalizedCommaSe2 !== void 0 ? _getNormalizedCommaSe2 : [];
290
+ for (let i = 0; i < fields.length; i++) {
291
+ const path = fields[i].split('.');
292
+ let value = item;
293
+ for (let p = 0; p < path.length; p++) {
294
+ const part = path[p];
295
+ if (!value || !Object.hasOwn(value, part)) {
296
+ return false;
297
+ }
298
+ value = value[part];
299
+ }
300
+ }
301
+ return true;
302
+ }
303
+
247
304
  /**
248
305
  * Returns the Entity's record object by key. Doesn't trigger a resolver nor requests the entity records from the API if the entity record isn't available in the local state.
249
306
  *
@@ -284,8 +341,8 @@ export const getRawEntityRecord = createSelector((state, kind, name, key) => {
284
341
  return accumulator;
285
342
  }, {});
286
343
  }, (state, kind, name, recordId, query) => {
287
- var _query$context3;
288
- const context = (_query$context3 = query?.context) !== null && _query$context3 !== void 0 ? _query$context3 : 'default';
344
+ var _query$context4;
345
+ const context = (_query$context4 = query?.context) !== null && _query$context4 !== void 0 ? _query$context4 : 'default';
289
346
  return [state.entities.config, state.entities.records?.[kind]?.[name]?.queriedData?.items[context]?.[recordId], state.entities.records?.[kind]?.[name]?.queriedData?.itemIsComplete[context]?.[recordId]];
290
347
  });
291
348
 
@@ -557,8 +614,8 @@ export const getEditedEntityRecord = createSelector((state, kind, name, recordId
557
614
  ...edited
558
615
  };
559
616
  }, (state, kind, name, recordId, query) => {
560
- var _query$context4;
561
- const context = (_query$context4 = query?.context) !== null && _query$context4 !== void 0 ? _query$context4 : 'default';
617
+ var _query$context5;
618
+ const context = (_query$context5 = query?.context) !== null && _query$context5 !== void 0 ? _query$context5 : 'default';
562
619
  return [state.entities.config, state.entities.records?.[kind]?.[name]?.queriedData.items[context]?.[recordId], state.entities.records?.[kind]?.[name]?.queriedData.itemIsComplete[context]?.[recordId], state.entities.records?.[kind]?.[name]?.edits?.[recordId]];
563
620
  });
564
621
 
@@ -1034,14 +1091,14 @@ export const getRevisions = (state, kind, name, recordKey, query) => {
1034
1091
  * @return Record.
1035
1092
  */
1036
1093
  export const getRevision = createSelector((state, kind, name, recordKey, revisionKey, query) => {
1037
- var _query$context5;
1094
+ var _query$context6, _getNormalizedCommaSe3;
1038
1095
  logEntityDeprecation(kind, name, 'getRevision');
1039
1096
  const queriedState = state.entities.records?.[kind]?.[name]?.revisions?.[recordKey];
1040
1097
  if (!queriedState) {
1041
1098
  return undefined;
1042
1099
  }
1043
- const context = (_query$context5 = query?.context) !== null && _query$context5 !== void 0 ? _query$context5 : 'default';
1044
- if (query === undefined) {
1100
+ const context = (_query$context6 = query?.context) !== null && _query$context6 !== void 0 ? _query$context6 : 'default';
1101
+ if (!query || !query._fields) {
1045
1102
  // If expecting a complete item, validate that completeness.
1046
1103
  if (!queriedState.itemIsComplete[context]?.[revisionKey]) {
1047
1104
  return undefined;
@@ -1049,24 +1106,24 @@ export const getRevision = createSelector((state, kind, name, recordKey, revisio
1049
1106
  return queriedState.items[context][revisionKey];
1050
1107
  }
1051
1108
  const item = queriedState.items[context]?.[revisionKey];
1052
- if (item && query._fields) {
1053
- var _getNormalizedCommaSe2;
1054
- const filteredItem = {};
1055
- const fields = (_getNormalizedCommaSe2 = getNormalizedCommaSeparable(query._fields)) !== null && _getNormalizedCommaSe2 !== void 0 ? _getNormalizedCommaSe2 : [];
1056
- for (let f = 0; f < fields.length; f++) {
1057
- const field = fields[f].split('.');
1058
- let value = item;
1059
- field.forEach(fieldName => {
1060
- value = value?.[fieldName];
1061
- });
1062
- setNestedValue(filteredItem, field, value);
1063
- }
1064
- return filteredItem;
1109
+ if (!item) {
1110
+ return item;
1111
+ }
1112
+ const filteredItem = {};
1113
+ const fields = (_getNormalizedCommaSe3 = getNormalizedCommaSeparable(query._fields)) !== null && _getNormalizedCommaSe3 !== void 0 ? _getNormalizedCommaSe3 : [];
1114
+ for (let f = 0; f < fields.length; f++) {
1115
+ const field = fields[f].split('.');
1116
+ let value = item;
1117
+ field.forEach(fieldName => {
1118
+ value = value?.[fieldName];
1119
+ });
1120
+ setNestedValue(filteredItem, field, value);
1065
1121
  }
1066
- return item;
1122
+ return filteredItem;
1067
1123
  }, (state, kind, name, recordKey, revisionKey, query) => {
1068
- var _query$context6;
1069
- const context = (_query$context6 = query?.context) !== null && _query$context6 !== void 0 ? _query$context6 : 'default';
1070
- return [state.entities.records?.[kind]?.[name]?.revisions?.[recordKey]?.items?.[context]?.[revisionKey], state.entities.records?.[kind]?.[name]?.revisions?.[recordKey]?.itemIsComplete?.[context]?.[revisionKey]];
1124
+ var _query$context7;
1125
+ const context = (_query$context7 = query?.context) !== null && _query$context7 !== void 0 ? _query$context7 : 'default';
1126
+ const queriedState = state.entities.records?.[kind]?.[name]?.revisions?.[recordKey];
1127
+ return [queriedState?.items?.[context]?.[revisionKey], queriedState?.itemIsComplete?.[context]?.[revisionKey]];
1071
1128
  });
1072
1129
  //# sourceMappingURL=selectors.js.map