@wordpress/core-data 7.10.0 → 7.12.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 (80) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/actions.js +13 -9
  3. package/build/actions.js.map +1 -1
  4. package/build/entities.js +3 -63
  5. package/build/entities.js.map +1 -1
  6. package/build/entity-types/attachment.js.map +1 -1
  7. package/build/entity-types/settings.js.map +1 -1
  8. package/build/hooks/use-entity-block-editor.js +4 -5
  9. package/build/hooks/use-entity-block-editor.js.map +1 -1
  10. package/build/lock-unlock.js.map +1 -1
  11. package/build/private-apis.js +3 -1
  12. package/build/private-apis.js.map +1 -1
  13. package/build/resolvers.js +98 -68
  14. package/build/resolvers.js.map +1 -1
  15. package/build/selectors.js +0 -19
  16. package/build/selectors.js.map +1 -1
  17. package/build/utils/index.js +7 -0
  18. package/build/utils/index.js.map +1 -1
  19. package/build/utils/receive-intermediate-results.js +8 -0
  20. package/build/utils/receive-intermediate-results.js.map +1 -0
  21. package/build-module/actions.js +14 -10
  22. package/build-module/actions.js.map +1 -1
  23. package/build-module/entities.js +2 -61
  24. package/build-module/entities.js.map +1 -1
  25. package/build-module/entity-types/attachment.js.map +1 -1
  26. package/build-module/entity-types/settings.js.map +1 -1
  27. package/build-module/hooks/use-entity-block-editor.js +4 -5
  28. package/build-module/hooks/use-entity-block-editor.js.map +1 -1
  29. package/build-module/lock-unlock.js.map +1 -1
  30. package/build-module/private-apis.js +3 -1
  31. package/build-module/private-apis.js.map +1 -1
  32. package/build-module/resolvers.js +98 -68
  33. package/build-module/resolvers.js.map +1 -1
  34. package/build-module/selectors.js +0 -18
  35. package/build-module/selectors.js.map +1 -1
  36. package/build-module/utils/index.js +1 -0
  37. package/build-module/utils/index.js.map +1 -1
  38. package/build-module/utils/receive-intermediate-results.js +2 -0
  39. package/build-module/utils/receive-intermediate-results.js.map +1 -0
  40. package/build-types/actions.d.ts +8 -4
  41. package/build-types/actions.d.ts.map +1 -1
  42. package/build-types/entities.d.ts +0 -1
  43. package/build-types/entities.d.ts.map +1 -1
  44. package/build-types/entity-types/attachment.d.ts +36 -1
  45. package/build-types/entity-types/attachment.d.ts.map +1 -1
  46. package/build-types/entity-types/settings.d.ts +4 -0
  47. package/build-types/entity-types/settings.d.ts.map +1 -1
  48. package/build-types/hooks/use-entity-block-editor.d.ts.map +1 -1
  49. package/build-types/index.d.ts +8 -5
  50. package/build-types/index.d.ts.map +1 -1
  51. package/build-types/lock-unlock.d.ts +1 -2
  52. package/build-types/lock-unlock.d.ts.map +1 -1
  53. package/build-types/private-apis.d.ts.map +1 -1
  54. package/build-types/queried-data/reducer.d.ts +10 -2
  55. package/build-types/reducer.d.ts +24 -2
  56. package/build-types/reducer.d.ts.map +1 -1
  57. package/build-types/resolvers.d.ts +16 -13
  58. package/build-types/resolvers.d.ts.map +1 -1
  59. package/build-types/selectors.d.ts +0 -9
  60. package/build-types/selectors.d.ts.map +1 -1
  61. package/build-types/utils/index.d.ts +1 -0
  62. package/build-types/utils/receive-intermediate-results.d.ts +2 -0
  63. package/build-types/utils/receive-intermediate-results.d.ts.map +1 -0
  64. package/package.json +19 -18
  65. package/src/actions.js +10 -10
  66. package/src/entities.js +2 -64
  67. package/src/entity-types/attachment.ts +35 -1
  68. package/src/entity-types/settings.ts +4 -0
  69. package/src/hooks/test/use-entity-record.js +9 -2
  70. package/src/hooks/use-entity-block-editor.js +4 -9
  71. package/src/private-apis.js +2 -0
  72. package/src/resolvers.js +125 -90
  73. package/src/selectors.ts +0 -32
  74. package/src/test/actions.js +24 -39
  75. package/src/test/entities.js +0 -80
  76. package/src/test/resolvers.js +89 -35
  77. package/src/utils/index.js +1 -0
  78. package/src/utils/receive-intermediate-results.js +3 -0
  79. package/tsconfig.tsbuildinfo +1 -1
  80. /package/src/{lock-unlock.js → lock-unlock.ts} +0 -0
@@ -2,9 +2,11 @@
2
2
  * Internal dependencies
3
3
  */
4
4
  import { useEntityRecordsWithPermissions } from './hooks/use-entity-records';
5
+ import { RECEIVE_INTERMEDIATE_RESULTS } from './utils';
5
6
  import { lock } from './lock-unlock';
6
7
  export const privateApis = {};
7
8
  lock(privateApis, {
8
- useEntityRecordsWithPermissions
9
+ useEntityRecordsWithPermissions,
10
+ RECEIVE_INTERMEDIATE_RESULTS
9
11
  });
10
12
  //# sourceMappingURL=private-apis.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useEntityRecordsWithPermissions","lock","privateApis"],"sources":["@wordpress/core-data/src/private-apis.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport { useEntityRecordsWithPermissions } from './hooks/use-entity-records';\nimport { lock } from './lock-unlock';\n\nexport const privateApis = {};\nlock( privateApis, {\n\tuseEntityRecordsWithPermissions,\n} );\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,+BAA+B,QAAQ,4BAA4B;AAC5E,SAASC,IAAI,QAAQ,eAAe;AAEpC,OAAO,MAAMC,WAAW,GAAG,CAAC,CAAC;AAC7BD,IAAI,CAAEC,WAAW,EAAE;EAClBF;AACD,CAAE,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["useEntityRecordsWithPermissions","RECEIVE_INTERMEDIATE_RESULTS","lock","privateApis"],"sources":["@wordpress/core-data/src/private-apis.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport { useEntityRecordsWithPermissions } from './hooks/use-entity-records';\nimport { RECEIVE_INTERMEDIATE_RESULTS } from './utils';\nimport { lock } from './lock-unlock';\n\nexport const privateApis = {};\nlock( privateApis, {\n\tuseEntityRecordsWithPermissions,\n\tRECEIVE_INTERMEDIATE_RESULTS,\n} );\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,+BAA+B,QAAQ,4BAA4B;AAC5E,SAASC,4BAA4B,QAAQ,SAAS;AACtD,SAASC,IAAI,QAAQ,eAAe;AAEpC,OAAO,MAAMC,WAAW,GAAG,CAAC,CAAC;AAC7BD,IAAI,CAAEC,WAAW,EAAE;EAClBH,+BAA+B;EAC/BC;AACD,CAAE,CAAC","ignoreList":[]}
@@ -15,8 +15,8 @@ import apiFetch from '@wordpress/api-fetch';
15
15
  * Internal dependencies
16
16
  */
17
17
  import { STORE_NAME } from './name';
18
- import { getOrLoadEntitiesConfig, DEFAULT_ENTITY_KEY } from './entities';
19
- import { forwardResolver, getNormalizedCommaSeparable, getUserPermissionCacheKey, getUserPermissionsFromAllowHeader, ALLOWED_RESOURCE_ACTIONS } from './utils';
18
+ import { additionalEntityConfigLoaders, DEFAULT_ENTITY_KEY } from './entities';
19
+ import { forwardResolver, getNormalizedCommaSeparable, getUserPermissionCacheKey, getUserPermissionsFromAllowHeader, ALLOWED_RESOURCE_ACTIONS, RECEIVE_INTERMEDIATE_RESULTS } from './utils';
20
20
  import { getSyncProvider } from './sync';
21
21
  import { fetchBlockPatterns } from './fetch';
22
22
 
@@ -61,9 +61,10 @@ export const getCurrentUser = () => async ({
61
61
  export const getEntityRecord = (kind, name, key = '', query) => async ({
62
62
  select,
63
63
  dispatch,
64
- registry
64
+ registry,
65
+ resolveSelect
65
66
  }) => {
66
- const configs = await dispatch(getOrLoadEntitiesConfig(kind, name));
67
+ const configs = await resolveSelect.getEntitiesConfig(kind);
67
68
  const entityConfig = configs.find(config => config.name === name && config.kind === kind);
68
69
  if (!entityConfig) {
69
70
  return;
@@ -184,9 +185,10 @@ export const getEditedEntityRecord = forwardResolver('getEntityRecord');
184
185
  */
185
186
  export const getEntityRecords = (kind, name, query = {}) => async ({
186
187
  dispatch,
187
- registry
188
+ registry,
189
+ resolveSelect
188
190
  }) => {
189
- const configs = await dispatch(getOrLoadEntitiesConfig(kind, name));
191
+ const configs = await resolveSelect.getEntitiesConfig(kind);
190
192
  const entityConfig = configs.find(config => config.name === name && config.kind === kind);
191
193
  if (!entityConfig) {
192
194
  return;
@@ -194,6 +196,10 @@ export const getEntityRecords = (kind, name, query = {}) => async ({
194
196
  const lock = await dispatch.__unstableAcquireStoreLock(STORE_NAME, ['entities', 'records', kind, name], {
195
197
  exclusive: false
196
198
  });
199
+ const key = entityConfig.key || DEFAULT_ENTITY_KEY;
200
+ function getResolutionsArgs(records) {
201
+ return records.filter(record => record?.[key]).map(record => [kind, name, record[key]]);
202
+ }
197
203
  try {
198
204
  if (query._fields) {
199
205
  // If requesting specific fields, items and query association to said
@@ -208,7 +214,8 @@ export const getEntityRecords = (kind, name, query = {}) => async ({
208
214
  ...entityConfig.baseURLParams,
209
215
  ...query
210
216
  });
211
- let records, meta;
217
+ let records = [],
218
+ meta;
212
219
  if (entityConfig.supportsPagination && query.per_page !== -1) {
213
220
  const response = await apiFetch({
214
221
  path,
@@ -219,6 +226,30 @@ export const getEntityRecords = (kind, name, query = {}) => async ({
219
226
  totalItems: parseInt(response.headers.get('X-WP-Total')),
220
227
  totalPages: parseInt(response.headers.get('X-WP-TotalPages'))
221
228
  };
229
+ } else if (query.per_page === -1 && query[RECEIVE_INTERMEDIATE_RESULTS] === true) {
230
+ let page = 1;
231
+ let totalPages;
232
+ do {
233
+ const response = await apiFetch({
234
+ path: addQueryArgs(path, {
235
+ page,
236
+ per_page: 100
237
+ }),
238
+ parse: false
239
+ });
240
+ const pageRecords = Object.values(await response.json());
241
+ totalPages = parseInt(response.headers.get('X-WP-TotalPages'));
242
+ records.push(...pageRecords);
243
+ registry.batch(() => {
244
+ dispatch.receiveEntityRecords(kind, name, records, query);
245
+ dispatch.finishResolutions('getEntityRecord', getResolutionsArgs(pageRecords));
246
+ });
247
+ page++;
248
+ } while (page <= totalPages);
249
+ meta = {
250
+ totalItems: records.length,
251
+ totalPages: 1
252
+ };
222
253
  } else {
223
254
  records = Object.values(await apiFetch({
224
255
  path
@@ -250,8 +281,6 @@ export const getEntityRecords = (kind, name, query = {}) => async ({
250
281
  // See https://github.com/WordPress/gutenberg/pull/26575
251
282
  // See https://github.com/WordPress/gutenberg/pull/64504
252
283
  if (!query?._fields && !query.context) {
253
- const key = entityConfig.key || DEFAULT_ENTITY_KEY;
254
- const resolutionsArgs = records.filter(record => record?.[key]).map(record => [kind, name, record[key]]);
255
284
  const targetHints = records.filter(record => record?.[key]).map(record => ({
256
285
  id: record[key],
257
286
  permissions: getUserPermissionsFromAllowHeader(record?._links?.self?.[0].targetHints.allow)
@@ -273,7 +302,7 @@ export const getEntityRecords = (kind, name, query = {}) => async ({
273
302
  }
274
303
  }
275
304
  dispatch.receiveUserPermissions(receiveUserPermissionArgs);
276
- dispatch.finishResolutions('getEntityRecord', resolutionsArgs);
305
+ dispatch.finishResolutions('getEntityRecord', getResolutionsArgs(records));
277
306
  dispatch.finishResolutions('canUser', canUserResolutionsArgs);
278
307
  }
279
308
  dispatch.__unstableReleaseStoreLock(lock);
@@ -337,25 +366,12 @@ export const getEmbedPreview = url => async ({
337
366
  */
338
367
  export const canUser = (requestedAction, resource, id) => async ({
339
368
  dispatch,
340
- registry
369
+ registry,
370
+ resolveSelect
341
371
  }) => {
342
372
  if (!ALLOWED_RESOURCE_ACTIONS.includes(requestedAction)) {
343
373
  throw new Error(`'${requestedAction}' is not a valid action.`);
344
374
  }
345
- let resourcePath = null;
346
- if (typeof resource === 'object') {
347
- if (!resource.kind || !resource.name) {
348
- throw new Error('The entity resource object is not valid.');
349
- }
350
- const configs = await dispatch(getOrLoadEntitiesConfig(resource.kind, resource.name));
351
- const entityConfig = configs.find(config => config.name === resource.name && config.kind === resource.kind);
352
- if (!entityConfig) {
353
- return;
354
- }
355
- resourcePath = entityConfig.baseURL + (resource.id ? '/' + resource.id : '');
356
- } else {
357
- resourcePath = `/wp/v2/${resource}` + (id ? '/' + id : '');
358
- }
359
375
  const {
360
376
  hasStartedResolution
361
377
  } = registry.select(STORE_NAME);
@@ -370,6 +386,20 @@ export const canUser = (requestedAction, resource, id) => async ({
370
386
  return;
371
387
  }
372
388
  }
389
+ let resourcePath = null;
390
+ if (typeof resource === 'object') {
391
+ if (!resource.kind || !resource.name) {
392
+ throw new Error('The entity resource object is not valid.');
393
+ }
394
+ const configs = await resolveSelect.getEntitiesConfig(resource.kind);
395
+ const entityConfig = configs.find(config => config.name === resource.name && config.kind === resource.kind);
396
+ if (!entityConfig) {
397
+ return;
398
+ }
399
+ resourcePath = entityConfig.baseURL + (resource.id ? '/' + resource.id : '');
400
+ } else {
401
+ resourcePath = `/wp/v2/${resource}` + (id ? '/' + id : '');
402
+ }
373
403
  let response;
374
404
  try {
375
405
  response = await apiFetch({
@@ -454,43 +484,6 @@ export const getAutosave = (postType, postId) => async ({
454
484
  }) => {
455
485
  await resolveSelect.getAutosaves(postType, postId);
456
486
  };
457
-
458
- /**
459
- * Retrieve the frontend template used for a given link.
460
- *
461
- * @param {string} link Link.
462
- */
463
- export const __experimentalGetTemplateForLink = link => async ({
464
- dispatch,
465
- resolveSelect
466
- }) => {
467
- let template;
468
- try {
469
- // This is NOT calling a REST endpoint but rather ends up with a response from
470
- // an Ajax function which has a different shape from a WP_REST_Response.
471
- template = await apiFetch({
472
- url: addQueryArgs(link, {
473
- '_wp-find-template': true
474
- })
475
- }).then(({
476
- data
477
- }) => data);
478
- } catch (e) {
479
- // For non-FSE themes, it is possible that this request returns an error.
480
- }
481
- if (!template) {
482
- return;
483
- }
484
- const record = await resolveSelect.getEntityRecord('postType', 'wp_template', template.id);
485
- if (record) {
486
- dispatch.receiveEntityRecords('postType', 'wp_template', [record], {
487
- 'find-template': link
488
- });
489
- }
490
- };
491
- __experimentalGetTemplateForLink.shouldInvalidate = action => {
492
- return (action.type === 'RECEIVE_ITEMS' || action.type === 'REMOVE_ITEMS') && action.invalidateCache && action.kind === 'postType' && action.name === 'wp_template';
493
- };
494
487
  export const __experimentalGetCurrentGlobalStylesId = () => async ({
495
488
  dispatch,
496
489
  resolveSelect
@@ -516,6 +509,7 @@ export const __experimentalGetCurrentThemeBaseGlobalStyles = () => async ({
516
509
  dispatch
517
510
  }) => {
518
511
  const currentTheme = await resolveSelect.getCurrentTheme();
512
+ // Please adjust the preloaded requests if this changes!
519
513
  const themeGlobalStyles = await apiFetch({
520
514
  path: `/wp/v2/global-styles/themes/${currentTheme.stylesheet}?context=view`
521
515
  });
@@ -526,6 +520,7 @@ export const __experimentalGetCurrentThemeGlobalStylesVariations = () => async (
526
520
  dispatch
527
521
  }) => {
528
522
  const currentTheme = await resolveSelect.getCurrentTheme();
523
+ // Please adjust the preloaded requests if this changes!
529
524
  const variations = await apiFetch({
530
525
  path: `/wp/v2/global-styles/themes/${currentTheme.stylesheet}/variations?context=view`
531
526
  });
@@ -621,14 +616,24 @@ export const getNavigationFallbackId = () => async ({
621
616
  });
622
617
  };
623
618
  export const getDefaultTemplateId = query => async ({
624
- dispatch
619
+ dispatch,
620
+ registry,
621
+ resolveSelect
625
622
  }) => {
626
623
  const template = await apiFetch({
627
624
  path: addQueryArgs('/wp/v2/templates/lookup', query)
628
625
  });
626
+ // Wait for the the entities config to be loaded, otherwise receiving
627
+ // the template as an entity will not work.
628
+ await resolveSelect.getEntitiesConfig('postType');
629
629
  // Endpoint may return an empty object if no template is found.
630
630
  if (template?.id) {
631
- dispatch.receiveDefaultTemplateId(query, template.id);
631
+ registry.batch(() => {
632
+ dispatch.receiveDefaultTemplateId(query, template.id);
633
+ dispatch.receiveEntityRecords('postType', 'wp_template', [template]);
634
+ // Avoid further network requests.
635
+ dispatch.finishResolution('getEntityRecord', ['postType', 'wp_template', template.id]);
636
+ });
632
637
  }
633
638
  };
634
639
 
@@ -644,9 +649,10 @@ export const getDefaultTemplateId = query => async ({
644
649
  */
645
650
  export const getRevisions = (kind, name, recordKey, query = {}) => async ({
646
651
  dispatch,
647
- registry
652
+ registry,
653
+ resolveSelect
648
654
  }) => {
649
- const configs = await dispatch(getOrLoadEntitiesConfig(kind, name));
655
+ const configs = await resolveSelect.getEntitiesConfig(kind);
650
656
  const entityConfig = configs.find(config => config.name === name && config.kind === kind);
651
657
  if (!entityConfig) {
652
658
  return;
@@ -723,9 +729,10 @@ getRevisions.shouldInvalidate = (action, kind, name, recordKey) => action.type =
723
729
  * fields, fields must always include the ID.
724
730
  */
725
731
  export const getRevision = (kind, name, recordKey, revisionKey, query) => async ({
726
- dispatch
732
+ dispatch,
733
+ resolveSelect
727
734
  }) => {
728
- const configs = await dispatch(getOrLoadEntitiesConfig(kind, name));
735
+ const configs = await resolveSelect.getEntitiesConfig(kind);
729
736
  const entityConfig = configs.find(config => config.name === name && config.kind === kind);
730
737
  if (!entityConfig) {
731
738
  return;
@@ -781,4 +788,27 @@ export const getRegisteredPostMeta = postType => async ({
781
788
  dispatch.receiveRegisteredPostMeta(postType, options?.schema?.properties?.meta?.properties);
782
789
  }
783
790
  };
791
+
792
+ /**
793
+ * Requests entity configs for the given kind from the REST API.
794
+ *
795
+ * @param {string} kind Entity kind.
796
+ */
797
+ export const getEntitiesConfig = kind => async ({
798
+ dispatch
799
+ }) => {
800
+ const loader = additionalEntityConfigLoaders.find(l => l.kind === kind);
801
+ if (!loader) {
802
+ return;
803
+ }
804
+ try {
805
+ const configs = await loader.loadEntities();
806
+ if (!configs.length) {
807
+ return;
808
+ }
809
+ dispatch.addEntities(configs);
810
+ } catch {
811
+ // Do nothing if the request comes back with an API error.
812
+ }
813
+ };
784
814
  //# sourceMappingURL=resolvers.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["camelCase","addQueryArgs","decodeEntities","apiFetch","STORE_NAME","getOrLoadEntitiesConfig","DEFAULT_ENTITY_KEY","forwardResolver","getNormalizedCommaSeparable","getUserPermissionCacheKey","getUserPermissionsFromAllowHeader","ALLOWED_RESOURCE_ACTIONS","getSyncProvider","fetchBlockPatterns","getAuthors","query","dispatch","path","users","receiveUserQuery","getCurrentUser","currentUser","receiveCurrentUser","getEntityRecord","kind","name","key","select","registry","configs","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","records","supportsPagination","per_page","Object","values","totalItems","parseInt","totalPages","length","map","split","forEach","field","hasOwnProperty","context","resolutionsArgs","filter","targetHints","_links","self","allow","targetHint","e","shouldInvalidate","invalidateCache","getCurrentTheme","resolveSelect","activeThemes","status","receiveCurrentTheme","getThemeSupports","getEmbedPreview","url","embedProxyResponse","receiveEmbedPreview","error","canUser","requestedAction","resource","includes","Error","resourcePath","hasStartedResolution","relatedAction","isAlreadyResolving","method","receiveUserPermission","finishResolution","canUserEditEntityRecord","getAutosaves","postType","postId","rest_base","restBase","rest_namespace","restNamespace","getPostType","autosaves","receiveAutosaves","getAutosave","__experimentalGetTemplateForLink","link","template","then","data","__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","receiveDefaultTemplateId","getRevisions","recordKey","revisionKey","getRevisionsUrl","isPaginated","receiveRevisions","getRevision","getRegisteredPostMeta","options","receiveRegisteredPostMeta","schema","properties"],"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 { getOrLoadEntitiesConfig, DEFAULT_ENTITY_KEY } from './entities';\nimport {\n\tforwardResolver,\n\tgetNormalizedCommaSeparable,\n\tgetUserPermissionCacheKey,\n\tgetUserPermissionsFromAllowHeader,\n\tALLOWED_RESOURCE_ACTIONS,\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 } ) => {\n\t\tconst configs = await dispatch( getOrLoadEntitiesConfig( kind, name ) );\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// Boostraps 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 } ) => {\n\t\tconst configs = await dispatch( getOrLoadEntitiesConfig( kind, name ) );\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\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, meta;\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 {\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\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 ) => [ kind, name, record[ key ] ] );\n\n\t\t\t\t\tconst targetHints = 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\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\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'getEntityRecord',\n\t\t\t\t\t\tresolutionsArgs\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.__unstableReleaseStoreLock( lock );\n\t\t\t} );\n\t\t} catch ( e ) {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\n\ngetEntityRecords.shouldInvalidate = ( action, kind, name ) => {\n\treturn (\n\t\t( action.type === 'RECEIVE_ITEMS' || action.type === 'REMOVE_ITEMS' ) &&\n\t\taction.invalidateCache &&\n\t\tkind === action.kind &&\n\t\tname === action.name\n\t);\n};\n\n/**\n * Requests the current theme.\n */\nexport const getCurrentTheme =\n\t() =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst activeThemes = await resolveSelect.getEntityRecords(\n\t\t\t'root',\n\t\t\t'theme',\n\t\t\t{ status: 'active' }\n\t\t);\n\n\t\tdispatch.receiveCurrentTheme( activeThemes[ 0 ] );\n\t};\n\n/**\n * Requests theme supports data from the index.\n */\nexport const getThemeSupports = forwardResolver( 'getCurrentTheme' );\n\n/**\n * Requests a preview from the Embed API.\n *\n * @param {string} url URL to get the preview for.\n */\nexport const getEmbedPreview =\n\t( url ) =>\n\tasync ( { dispatch } ) => {\n\t\ttry {\n\t\t\tconst embedProxyResponse = await apiFetch( {\n\t\t\t\tpath: addQueryArgs( '/oembed/1.0/proxy', { url } ),\n\t\t\t} );\n\t\t\tdispatch.receiveEmbedPreview( url, embedProxyResponse );\n\t\t} catch ( error ) {\n\t\t\t// Embed API 404s if the URL cannot be embedded, so we have to catch the error from the apiRequest here.\n\t\t\tdispatch.receiveEmbedPreview( url, false );\n\t\t}\n\t};\n\n/**\n * Checks whether the current user can perform the given action on the given\n * REST resource.\n *\n * @param {string} requestedAction Action to check. One of: 'create', 'read', 'update',\n * 'delete'.\n * @param {string|Object} resource Entity resource to check. Accepts entity object `{ kind: 'root', name: 'media', id: 1 }`\n * or REST base as a string - `media`.\n * @param {?string} id ID of the rest resource to check.\n */\nexport const canUser =\n\t( requestedAction, resource, id ) =>\n\tasync ( { dispatch, registry } ) => {\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\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 dispatch(\n\t\t\t\tgetOrLoadEntitiesConfig( resource.kind, resource.name )\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\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 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 { rest_base: restBase, rest_namespace: restNamespace = 'wp/v2' } =\n\t\t\tawait resolveSelect.getPostType( postType );\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\n/**\n * Retrieve the frontend template used for a given link.\n *\n * @param {string} link Link.\n */\nexport const __experimentalGetTemplateForLink =\n\t( link ) =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tlet template;\n\t\ttry {\n\t\t\t// This is NOT calling a REST endpoint but rather ends up with a response from\n\t\t\t// an Ajax function which has a different shape from a WP_REST_Response.\n\t\t\ttemplate = await apiFetch( {\n\t\t\t\turl: addQueryArgs( link, {\n\t\t\t\t\t'_wp-find-template': true,\n\t\t\t\t} ),\n\t\t\t} ).then( ( { data } ) => data );\n\t\t} catch ( e ) {\n\t\t\t// For non-FSE themes, it is possible that this request returns an error.\n\t\t}\n\n\t\tif ( ! template ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst record = await resolveSelect.getEntityRecord(\n\t\t\t'postType',\n\t\t\t'wp_template',\n\t\t\ttemplate.id\n\t\t);\n\n\t\tif ( record ) {\n\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t'postType',\n\t\t\t\t'wp_template',\n\t\t\t\t[ record ],\n\t\t\t\t{\n\t\t\t\t\t'find-template': link,\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\n__experimentalGetTemplateForLink.shouldInvalidate = ( action ) => {\n\treturn (\n\t\t( action.type === 'RECEIVE_ITEMS' || action.type === 'REMOVE_ITEMS' ) &&\n\t\taction.invalidateCache &&\n\t\taction.kind === 'postType' &&\n\t\taction.name === 'wp_template'\n\t);\n};\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\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\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 } ) => {\n\t\tconst template = await apiFetch( {\n\t\t\tpath: addQueryArgs( '/wp/v2/templates/lookup', query ),\n\t\t} );\n\t\t// Endpoint may return an empty object if no template is found.\n\t\tif ( template?.id ) {\n\t\t\tdispatch.receiveDefaultTemplateId( query, template.id );\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 } ) => {\n\t\tconst configs = await dispatch( getOrLoadEntitiesConfig( kind, name ) );\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 } ) => {\n\t\tconst configs = await dispatch( getOrLoadEntitiesConfig( kind, name ) );\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"],"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","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","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","getPostType","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// Boostraps the edited document as well (and load from peers).\n\t\t\t\t\tawait getSyncProvider().bootstrap(\n\t\t\t\t\t\tentityConfig.syncObjectType + '--edit',\n\t\t\t\t\t\tobjectId,\n\t\t\t\t\t\t( record ) => {\n\t\t\t\t\t\t\tdispatch( {\n\t\t\t\t\t\t\t\ttype: 'EDIT_ENTITY_RECORD',\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\trecordId: key,\n\t\t\t\t\t\t\t\tedits: record,\n\t\t\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\t\t\tundo: undefined,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( query !== undefined && query._fields ) {\n\t\t\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t\t\t// the ID.\n\t\t\t\t\tquery = {\n\t\t\t\t\t\t...query,\n\t\t\t\t\t\t_fields: [\n\t\t\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t\t\t...( getNormalizedCommaSeparable(\n\t\t\t\t\t\t\t\t\tquery._fields\n\t\t\t\t\t\t\t\t) || [] ),\n\t\t\t\t\t\t\t\tentityConfig.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t\t\t] ),\n\t\t\t\t\t\t].join(),\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Disable reason: While true that an early return could leave `path`\n\t\t\t\t// unused, it's important that path is derived using the query prior to\n\t\t\t\t// additional query modifications in the condition below, since those\n\t\t\t\t// modifications are relevant to how the data is tracked in state, and not\n\t\t\t\t// for how the request is made to the REST API.\n\n\t\t\t\t// eslint-disable-next-line @wordpress/no-unused-vars-before-return\n\t\t\t\tconst path = addQueryArgs(\n\t\t\t\t\tentityConfig.baseURL + ( key ? '/' + key : '' ),\n\t\t\t\t\t{\n\t\t\t\t\t\t...entityConfig.baseURLParams,\n\t\t\t\t\t\t...query,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tif ( query !== undefined && query._fields ) {\n\t\t\t\t\tquery = { ...query, include: [ key ] };\n\n\t\t\t\t\t// The resolution cache won't consider query as reusable based on the\n\t\t\t\t\t// fields, so it's tested here, prior to initiating the REST request,\n\t\t\t\t\t// and without causing `getEntityRecords` resolution to occur.\n\t\t\t\t\tconst hasRecords = select.hasEntityRecords(\n\t\t\t\t\t\tkind,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tquery\n\t\t\t\t\t);\n\t\t\t\t\tif ( hasRecords ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst response = await apiFetch( { path, parse: false } );\n\t\t\t\tconst record = await response.json();\n\t\t\t\tconst permissions = getUserPermissionsFromAllowHeader(\n\t\t\t\t\tresponse.headers?.get( 'allow' )\n\t\t\t\t);\n\n\t\t\t\tconst canUserResolutionsArgs = [];\n\t\t\t\tconst receiveUserPermissionArgs = {};\n\t\t\t\tfor ( const action of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\t\t\treceiveUserPermissionArgs[\n\t\t\t\t\t\tgetUserPermissionCacheKey( action, {\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tid: key,\n\t\t\t\t\t\t} )\n\t\t\t\t\t] = permissions[ action ];\n\n\t\t\t\t\tcanUserResolutionsArgs.push( [\n\t\t\t\t\t\taction,\n\t\t\t\t\t\t{ kind, name, id: key },\n\t\t\t\t\t] );\n\t\t\t\t}\n\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\tdispatch.receiveEntityRecords( kind, name, record, query );\n\t\t\t\t\tdispatch.receiveUserPermissions(\n\t\t\t\t\t\treceiveUserPermissionArgs\n\t\t\t\t\t);\n\t\t\t\t\tdispatch.finishResolutions(\n\t\t\t\t\t\t'canUser',\n\t\t\t\t\t\tcanUserResolutionsArgs\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t}\n\t\t} finally {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\n\n/**\n * Requests an entity's record from the REST API.\n */\nexport const getRawEntityRecord = forwardResolver( 'getEntityRecord' );\n\n/**\n * Requests an entity's record from the REST API.\n */\nexport const getEditedEntityRecord = forwardResolver( 'getEntityRecord' );\n\n/**\n * Requests the entity's records from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {Object?} query Query Object. If requesting specific fields, fields\n * must always include the ID.\n */\nexport const getEntityRecords =\n\t( kind, name, query = {} ) =>\n\tasync ( { dispatch, registry, resolveSelect } ) => {\n\t\tconst configs = await resolveSelect.getEntitiesConfig( kind );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\t\tif ( ! entityConfig ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\t\tSTORE_NAME,\n\t\t\t[ 'entities', 'records', kind, name ],\n\t\t\t{ exclusive: false }\n\t\t);\n\n\t\tconst key = entityConfig.key || DEFAULT_ENTITY_KEY;\n\n\t\tfunction getResolutionsArgs( records ) {\n\t\t\treturn records\n\t\t\t\t.filter( ( record ) => record?.[ key ] )\n\t\t\t\t.map( ( record ) => [ kind, name, record[ key ] ] );\n\t\t}\n\n\t\ttry {\n\t\t\tif ( query._fields ) {\n\t\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t\t// the ID.\n\t\t\t\tquery = {\n\t\t\t\t\t...query,\n\t\t\t\t\t_fields: [\n\t\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\t\tentityConfig.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t\t] ),\n\t\t\t\t\t].join(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst path = addQueryArgs( entityConfig.baseURL, {\n\t\t\t\t...entityConfig.baseURLParams,\n\t\t\t\t...query,\n\t\t\t} );\n\n\t\t\tlet records = [],\n\t\t\t\tmeta;\n\t\t\tif ( entityConfig.supportsPagination && query.per_page !== -1 ) {\n\t\t\t\tconst response = await apiFetch( { path, parse: false } );\n\t\t\t\trecords = Object.values( await response.json() );\n\t\t\t\tmeta = {\n\t\t\t\t\ttotalItems: parseInt(\n\t\t\t\t\t\tresponse.headers.get( 'X-WP-Total' )\n\t\t\t\t\t),\n\t\t\t\t\ttotalPages: parseInt(\n\t\t\t\t\t\tresponse.headers.get( 'X-WP-TotalPages' )\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t} else if (\n\t\t\t\tquery.per_page === -1 &&\n\t\t\t\tquery[ RECEIVE_INTERMEDIATE_RESULTS ] === true\n\t\t\t) {\n\t\t\t\tlet page = 1;\n\t\t\t\tlet totalPages;\n\n\t\t\t\tdo {\n\t\t\t\t\tconst response = await apiFetch( {\n\t\t\t\t\t\tpath: addQueryArgs( path, { page, per_page: 100 } ),\n\t\t\t\t\t\tparse: false,\n\t\t\t\t\t} );\n\t\t\t\t\tconst pageRecords = Object.values( await response.json() );\n\n\t\t\t\t\ttotalPages = parseInt(\n\t\t\t\t\t\tresponse.headers.get( 'X-WP-TotalPages' )\n\t\t\t\t\t);\n\n\t\t\t\t\trecords.push( ...pageRecords );\n\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\trecords,\n\t\t\t\t\t\t\tquery\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdispatch.finishResolutions(\n\t\t\t\t\t\t\t'getEntityRecord',\n\t\t\t\t\t\t\tgetResolutionsArgs( pageRecords )\n\t\t\t\t\t\t);\n\t\t\t\t\t} );\n\t\t\t\t\tpage++;\n\t\t\t\t} while ( page <= totalPages );\n\n\t\t\t\tmeta = {\n\t\t\t\t\ttotalItems: records.length,\n\t\t\t\t\ttotalPages: 1,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\trecords = Object.values( await apiFetch( { path } ) );\n\t\t\t\tmeta = {\n\t\t\t\t\ttotalItems: records.length,\n\t\t\t\t\ttotalPages: 1,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// If we request fields but the result doesn't contain the fields,\n\t\t\t// explicitly set these fields as \"undefined\"\n\t\t\t// that way we consider the query \"fulfilled\".\n\t\t\tif ( query._fields ) {\n\t\t\t\trecords = records.map( ( record ) => {\n\t\t\t\t\tquery._fields.split( ',' ).forEach( ( field ) => {\n\t\t\t\t\t\tif ( ! record.hasOwnProperty( field ) ) {\n\t\t\t\t\t\t\trecord[ field ] = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn record;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tregistry.batch( () => {\n\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\tkind,\n\t\t\t\t\tname,\n\t\t\t\t\trecords,\n\t\t\t\t\tquery,\n\t\t\t\t\tfalse,\n\t\t\t\t\tundefined,\n\t\t\t\t\tmeta\n\t\t\t\t);\n\n\t\t\t\t// When requesting all fields, the list of results can be used to resolve\n\t\t\t\t// the `getEntityRecord` and `canUser` selectors in addition to `getEntityRecords`.\n\t\t\t\t// See https://github.com/WordPress/gutenberg/pull/26575\n\t\t\t\t// See https://github.com/WordPress/gutenberg/pull/64504\n\t\t\t\tif ( ! query?._fields && ! query.context ) {\n\t\t\t\t\tconst targetHints = 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\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\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'getEntityRecord',\n\t\t\t\t\t\tgetResolutionsArgs( records )\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.__unstableReleaseStoreLock( lock );\n\t\t\t} );\n\t\t} catch ( e ) {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\n\ngetEntityRecords.shouldInvalidate = ( action, kind, name ) => {\n\treturn (\n\t\t( action.type === 'RECEIVE_ITEMS' || action.type === 'REMOVE_ITEMS' ) &&\n\t\taction.invalidateCache &&\n\t\tkind === action.kind &&\n\t\tname === action.name\n\t);\n};\n\n/**\n * Requests the current theme.\n */\nexport const getCurrentTheme =\n\t() =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst activeThemes = await resolveSelect.getEntityRecords(\n\t\t\t'root',\n\t\t\t'theme',\n\t\t\t{ status: 'active' }\n\t\t);\n\n\t\tdispatch.receiveCurrentTheme( activeThemes[ 0 ] );\n\t};\n\n/**\n * Requests theme supports data from the index.\n */\nexport const getThemeSupports = forwardResolver( 'getCurrentTheme' );\n\n/**\n * Requests a preview from the Embed API.\n *\n * @param {string} url URL to get the preview for.\n */\nexport const getEmbedPreview =\n\t( url ) =>\n\tasync ( { dispatch } ) => {\n\t\ttry {\n\t\t\tconst embedProxyResponse = await apiFetch( {\n\t\t\t\tpath: addQueryArgs( '/oembed/1.0/proxy', { url } ),\n\t\t\t} );\n\t\t\tdispatch.receiveEmbedPreview( url, embedProxyResponse );\n\t\t} catch ( error ) {\n\t\t\t// Embed API 404s if the URL cannot be embedded, so we have to catch the error from the apiRequest here.\n\t\t\tdispatch.receiveEmbedPreview( url, false );\n\t\t}\n\t};\n\n/**\n * Checks whether the current user can perform the given action on the given\n * REST resource.\n *\n * @param {string} requestedAction Action to check. One of: 'create', 'read', 'update',\n * 'delete'.\n * @param {string|Object} resource Entity resource to check. Accepts entity object `{ kind: 'root', name: 'media', id: 1 }`\n * or REST base as a string - `media`.\n * @param {?string} id ID of the rest resource to check.\n */\nexport const canUser =\n\t( requestedAction, resource, id ) =>\n\tasync ( { dispatch, registry, resolveSelect } ) => {\n\t\tif ( ! ALLOWED_RESOURCE_ACTIONS.includes( requestedAction ) ) {\n\t\t\tthrow new Error( `'${ requestedAction }' is not a valid action.` );\n\t\t}\n\n\t\tconst { hasStartedResolution } = registry.select( STORE_NAME );\n\n\t\t// Prevent resolving the same resource twice.\n\t\tfor ( const relatedAction of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\tif ( relatedAction === requestedAction ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst isAlreadyResolving = hasStartedResolution( 'canUser', [\n\t\t\t\trelatedAction,\n\t\t\t\tresource,\n\t\t\t\tid,\n\t\t\t] );\n\t\t\tif ( isAlreadyResolving ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tlet resourcePath = null;\n\t\tif ( typeof resource === 'object' ) {\n\t\t\tif ( ! resource.kind || ! resource.name ) {\n\t\t\t\tthrow new Error( 'The entity resource object is not valid.' );\n\t\t\t}\n\n\t\t\tconst configs = await resolveSelect.getEntitiesConfig(\n\t\t\t\tresource.kind\n\t\t\t);\n\t\t\tconst entityConfig = configs.find(\n\t\t\t\t( config ) =>\n\t\t\t\t\tconfig.name === resource.name &&\n\t\t\t\t\tconfig.kind === resource.kind\n\t\t\t);\n\t\t\tif ( ! entityConfig ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresourcePath =\n\t\t\t\tentityConfig.baseURL + ( resource.id ? '/' + resource.id : '' );\n\t\t} else {\n\t\t\tresourcePath = `/wp/v2/${ resource }` + ( id ? '/' + id : '' );\n\t\t}\n\n\t\tlet response;\n\t\ttry {\n\t\t\tresponse = await apiFetch( {\n\t\t\t\tpath: resourcePath,\n\t\t\t\tmethod: 'OPTIONS',\n\t\t\t\tparse: false,\n\t\t\t} );\n\t\t} catch ( error ) {\n\t\t\t// Do nothing if our OPTIONS request comes back with an API error (4xx or\n\t\t\t// 5xx). The previously determined isAllowed value will remain in the store.\n\t\t\treturn;\n\t\t}\n\n\t\t// Optional chaining operator is used here because the API requests don't\n\t\t// return the expected result in the React native version. Instead, API requests\n\t\t// only return the result, without including response properties like the headers.\n\t\tconst permissions = getUserPermissionsFromAllowHeader(\n\t\t\tresponse.headers?.get( 'allow' )\n\t\t);\n\t\tregistry.batch( () => {\n\t\t\tfor ( const action of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\t\tconst key = getUserPermissionCacheKey( action, resource, id );\n\n\t\t\t\tdispatch.receiveUserPermission( key, permissions[ action ] );\n\n\t\t\t\t// Mark related action resolutions as finished.\n\t\t\t\tif ( action !== requestedAction ) {\n\t\t\t\t\tdispatch.finishResolution( 'canUser', [\n\t\t\t\t\t\taction,\n\t\t\t\t\t\tresource,\n\t\t\t\t\t\tid,\n\t\t\t\t\t] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t};\n\n/**\n * Checks whether the current user can perform the given action on the given\n * REST resource.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordId Record's id.\n */\nexport const canUserEditEntityRecord =\n\t( kind, name, recordId ) =>\n\tasync ( { dispatch } ) => {\n\t\tawait dispatch( canUser( 'update', { kind, name, id: recordId } ) );\n\t};\n\n/**\n * Request autosave data from the REST API.\n *\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n */\nexport const getAutosaves =\n\t( postType, postId ) =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst { rest_base: restBase, rest_namespace: restNamespace = 'wp/v2' } =\n\t\t\tawait resolveSelect.getPostType( postType );\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":[]}
@@ -880,24 +880,6 @@ export function getReferenceByDistinctEdits(state) {
880
880
  return state.editsReference;
881
881
  }
882
882
 
883
- /**
884
- * Retrieve the frontend template used for a given link.
885
- *
886
- * @param state Editor state.
887
- * @param link Link.
888
- *
889
- * @return The template record.
890
- */
891
- export function __experimentalGetTemplateForLink(state, link) {
892
- const records = getEntityRecords(state, 'postType', 'wp_template', {
893
- 'find-template': link
894
- });
895
- if (records?.length) {
896
- return getEditedEntityRecord(state, 'postType', 'wp_template', records[0].id);
897
- }
898
- return null;
899
- }
900
-
901
883
  /**
902
884
  * Retrieve the current theme's base global styles
903
885
  *