@wordpress/core-data 4.0.6 → 4.0.7

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 (77) hide show
  1. package/build/actions.js +269 -244
  2. package/build/actions.js.map +1 -1
  3. package/build/batch/create-batch.js +17 -9
  4. package/build/batch/create-batch.js.map +1 -1
  5. package/build/entities.js +9 -6
  6. package/build/entities.js.map +1 -1
  7. package/build/entity-provider.js +18 -13
  8. package/build/entity-provider.js.map +1 -1
  9. package/build/fetch/__experimental-fetch-link-suggestions.js +3 -1
  10. package/build/fetch/__experimental-fetch-link-suggestions.js.map +1 -1
  11. package/build/fetch/__experimental-fetch-url-data.js +2 -1
  12. package/build/fetch/__experimental-fetch-url-data.js.map +1 -1
  13. package/build/index.js +25 -5
  14. package/build/index.js.map +1 -1
  15. package/build/locks/actions.js +4 -3
  16. package/build/locks/actions.js.map +1 -1
  17. package/build/locks/reducer.js +4 -1
  18. package/build/locks/reducer.js.map +1 -1
  19. package/build/locks/selectors.js +4 -3
  20. package/build/locks/selectors.js.map +1 -1
  21. package/build/locks/utils.js +7 -5
  22. package/build/locks/utils.js.map +1 -1
  23. package/build/queried-data/actions.js +6 -3
  24. package/build/queried-data/actions.js.map +1 -1
  25. package/build/queried-data/get-query-parts.js +1 -1
  26. package/build/queried-data/reducer.js +17 -6
  27. package/build/queried-data/reducer.js.map +1 -1
  28. package/build/queried-data/selectors.js +2 -1
  29. package/build/queried-data/selectors.js.map +1 -1
  30. package/build/reducer.js +77 -28
  31. package/build/reducer.js.map +1 -1
  32. package/build/resolvers.js +186 -162
  33. package/build/resolvers.js.map +1 -1
  34. package/build/selectors.js +29 -21
  35. package/build/selectors.js.map +1 -1
  36. package/build/utils/forward-resolver.js +11 -4
  37. package/build/utils/forward-resolver.js.map +1 -1
  38. package/build/utils/index.js +8 -8
  39. package/build/utils/on-sub-key.js +4 -2
  40. package/build/utils/on-sub-key.js.map +1 -1
  41. package/build-module/actions.js +257 -235
  42. package/build-module/actions.js.map +1 -1
  43. package/build-module/batch/create-batch.js +17 -9
  44. package/build-module/batch/create-batch.js.map +1 -1
  45. package/build-module/entities.js +8 -5
  46. package/build-module/entities.js.map +1 -1
  47. package/build-module/entity-provider.js +17 -12
  48. package/build-module/entity-provider.js.map +1 -1
  49. package/build-module/fetch/__experimental-fetch-link-suggestions.js +3 -1
  50. package/build-module/fetch/__experimental-fetch-link-suggestions.js.map +1 -1
  51. package/build-module/fetch/__experimental-fetch-url-data.js +2 -1
  52. package/build-module/fetch/__experimental-fetch-url-data.js.map +1 -1
  53. package/build-module/index.js +21 -3
  54. package/build-module/index.js.map +1 -1
  55. package/build-module/locks/actions.js +4 -3
  56. package/build-module/locks/actions.js.map +1 -1
  57. package/build-module/locks/reducer.js +4 -1
  58. package/build-module/locks/reducer.js.map +1 -1
  59. package/build-module/locks/selectors.js +4 -3
  60. package/build-module/locks/selectors.js.map +1 -1
  61. package/build-module/locks/utils.js +5 -3
  62. package/build-module/locks/utils.js.map +1 -1
  63. package/build-module/queried-data/actions.js +5 -2
  64. package/build-module/queried-data/actions.js.map +1 -1
  65. package/build-module/queried-data/reducer.js +15 -4
  66. package/build-module/queried-data/reducer.js.map +1 -1
  67. package/build-module/queried-data/selectors.js +2 -1
  68. package/build-module/queried-data/selectors.js.map +1 -1
  69. package/build-module/reducer.js +68 -20
  70. package/build-module/reducer.js.map +1 -1
  71. package/build-module/resolvers.js +185 -161
  72. package/build-module/resolvers.js.map +1 -1
  73. package/build-module/utils/forward-resolver.js +11 -4
  74. package/build-module/utils/forward-resolver.js.map +1 -1
  75. package/build-module/utils/on-sub-key.js +3 -1
  76. package/build-module/utils/on-sub-key.js.map +1 -1
  77. package/package.json +12 -12
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.__experimentalGetCurrentThemeBaseGlobalStyles = exports.__experimentalGetCurrentGlobalStylesId = exports.__experimentalGetTemplateForLink = exports.getAutosave = exports.getAutosaves = exports.canUserEditEntityRecord = exports.canUser = exports.getEmbedPreview = exports.getThemeSupports = exports.getCurrentTheme = exports.getEntityRecords = exports.getEditedEntityRecord = exports.getRawEntityRecord = exports.getEntityRecord = exports.getCurrentUser = exports.getAuthors = void 0;
8
+ exports.getThemeSupports = exports.getRawEntityRecord = exports.getEntityRecords = exports.getEntityRecord = exports.getEmbedPreview = exports.getEditedEntityRecord = exports.getCurrentUser = exports.getCurrentTheme = exports.getAutosaves = exports.getAutosave = exports.getAuthors = exports.canUserEditEntityRecord = exports.canUser = exports.__experimentalGetTemplateForLink = exports.__experimentalGetCurrentThemeBaseGlobalStyles = exports.__experimentalGetCurrentGlobalStylesId = void 0;
9
9
 
10
10
  var _lodash = require("lodash");
11
11
 
@@ -37,9 +37,10 @@ var _utils = require("./utils");
37
37
  * @param {Object|undefined} query Optional object of query parameters to
38
38
  * include with request.
39
39
  */
40
- const getAuthors = query => async ({
41
- dispatch
42
- }) => {
40
+ const getAuthors = query => async _ref => {
41
+ let {
42
+ dispatch
43
+ } = _ref;
43
44
  const path = (0, _url.addQueryArgs)('/wp/v2/users/?who=authors&per_page=100', query);
44
45
  const users = await (0, _apiFetch.default)({
45
46
  path
@@ -53,9 +54,10 @@ const getAuthors = query => async ({
53
54
 
54
55
  exports.getAuthors = getAuthors;
55
56
 
56
- const getCurrentUser = () => async ({
57
- dispatch
58
- }) => {
57
+ const getCurrentUser = () => async _ref2 => {
58
+ let {
59
+ dispatch
60
+ } = _ref2;
59
61
  const currentUser = await (0, _apiFetch.default)({
60
62
  path: '/wp/v2/users/me'
61
63
  });
@@ -74,68 +76,73 @@ const getCurrentUser = () => async ({
74
76
 
75
77
  exports.getCurrentUser = getCurrentUser;
76
78
 
77
- const getEntityRecord = (kind, name, key = '', query) => async ({
78
- select,
79
- dispatch
80
- }) => {
81
- const entities = await dispatch((0, _entities.getKindEntities)(kind));
82
- const entity = (0, _lodash.find)(entities, {
83
- kind,
84
- name
85
- });
86
-
87
- if (!entity || entity !== null && entity !== void 0 && entity.__experimentalNoFetch) {
88
- return;
89
- }
79
+ const getEntityRecord = function (kind, name) {
80
+ let key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
81
+ let query = arguments.length > 3 ? arguments[3] : undefined;
82
+ return async _ref3 => {
83
+ let {
84
+ select,
85
+ dispatch
86
+ } = _ref3;
87
+ const entities = await dispatch((0, _entities.getKindEntities)(kind));
88
+ const entity = (0, _lodash.find)(entities, {
89
+ kind,
90
+ name
91
+ });
90
92
 
91
- const lock = await dispatch.__unstableAcquireStoreLock(_name.STORE_NAME, ['entities', 'data', kind, name, key], {
92
- exclusive: false
93
- });
93
+ if (!entity || entity !== null && entity !== void 0 && entity.__experimentalNoFetch) {
94
+ return;
95
+ }
94
96
 
95
- try {
96
- if (query !== undefined && query._fields) {
97
- // If requesting specific fields, items and query association to said
98
- // records are stored by ID reference. Thus, fields must always include
99
- // the ID.
100
- query = { ...query,
101
- _fields: (0, _lodash.uniq)([...((0, _utils.getNormalizedCommaSeparable)(query._fields) || []), entity.key || _entities.DEFAULT_ENTITY_KEY]).join()
102
- };
103
- } // Disable reason: While true that an early return could leave `path`
104
- // unused, it's important that path is derived using the query prior to
105
- // additional query modifications in the condition below, since those
106
- // modifications are relevant to how the data is tracked in state, and not
107
- // for how the request is made to the REST API.
108
- // eslint-disable-next-line @wordpress/no-unused-vars-before-return
109
-
110
-
111
- const path = (0, _url.addQueryArgs)(entity.baseURL + (key ? '/' + key : ''), { ...entity.baseURLParams,
112
- ...query
97
+ const lock = await dispatch.__unstableAcquireStoreLock(_name.STORE_NAME, ['entities', 'data', kind, name, key], {
98
+ exclusive: false
113
99
  });
114
100
 
115
- if (query !== undefined) {
116
- query = { ...query,
117
- include: [key]
118
- }; // The resolution cache won't consider query as reusable based on the
119
- // fields, so it's tested here, prior to initiating the REST request,
120
- // and without causing `getEntityRecords` resolution to occur.
101
+ try {
102
+ if (query !== undefined && query._fields) {
103
+ // If requesting specific fields, items and query association to said
104
+ // records are stored by ID reference. Thus, fields must always include
105
+ // the ID.
106
+ query = { ...query,
107
+ _fields: (0, _lodash.uniq)([...((0, _utils.getNormalizedCommaSeparable)(query._fields) || []), entity.key || _entities.DEFAULT_ENTITY_KEY]).join()
108
+ };
109
+ } // Disable reason: While true that an early return could leave `path`
110
+ // unused, it's important that path is derived using the query prior to
111
+ // additional query modifications in the condition below, since those
112
+ // modifications are relevant to how the data is tracked in state, and not
113
+ // for how the request is made to the REST API.
114
+ // eslint-disable-next-line @wordpress/no-unused-vars-before-return
115
+
116
+
117
+ const path = (0, _url.addQueryArgs)(entity.baseURL + (key ? '/' + key : ''), { ...entity.baseURLParams,
118
+ ...query
119
+ });
120
+
121
+ if (query !== undefined) {
122
+ query = { ...query,
123
+ include: [key]
124
+ }; // The resolution cache won't consider query as reusable based on the
125
+ // fields, so it's tested here, prior to initiating the REST request,
126
+ // and without causing `getEntityRecords` resolution to occur.
121
127
 
122
- const hasRecords = select.hasEntityRecords(kind, name, query);
128
+ const hasRecords = select.hasEntityRecords(kind, name, query);
123
129
 
124
- if (hasRecords) {
125
- return;
130
+ if (hasRecords) {
131
+ return;
132
+ }
126
133
  }
127
- }
128
134
 
129
- const record = await (0, _apiFetch.default)({
130
- path
131
- });
132
- dispatch.receiveEntityRecords(kind, name, record, query);
133
- } catch (error) {// We need a way to handle and access REST API errors in state
134
- // Until then, catching the error ensures the resolver is marked as resolved.
135
- // See similar implementation in `getEntityRecords()`.
136
- } finally {
137
- dispatch.__unstableReleaseStoreLock(lock);
138
- }
135
+ const record = await (0, _apiFetch.default)({
136
+ path
137
+ });
138
+ dispatch.receiveEntityRecords(kind, name, record, query);
139
+ } catch (error) {// We need a way to handle and access REST API errors in state
140
+ // Until then, catching the error ensures the resolver is marked as resolved.
141
+ // See similar implementation in `getEntityRecords()`.
142
+ } finally {
143
+ dispatch.__unstableReleaseStoreLock(lock);
144
+ }
145
+ };
139
146
  };
140
147
  /**
141
148
  * Requests an entity's record from the REST API.
@@ -160,80 +167,84 @@ const getEditedEntityRecord = (0, _utils.forwardResolver)('getEntityRecord');
160
167
 
161
168
  exports.getEditedEntityRecord = getEditedEntityRecord;
162
169
 
163
- const getEntityRecords = (kind, name, query = {}) => async ({
164
- dispatch
165
- }) => {
166
- const entities = await dispatch((0, _entities.getKindEntities)(kind));
167
- const entity = (0, _lodash.find)(entities, {
168
- kind,
169
- name
170
- });
171
-
172
- if (!entity || entity !== null && entity !== void 0 && entity.__experimentalNoFetch) {
173
- return;
174
- }
175
-
176
- const lock = await dispatch.__unstableAcquireStoreLock(_name.STORE_NAME, ['entities', 'data', kind, name], {
177
- exclusive: false
178
- });
170
+ const getEntityRecords = function (kind, name) {
171
+ let query = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
172
+ return async _ref4 => {
173
+ let {
174
+ dispatch
175
+ } = _ref4;
176
+ const entities = await dispatch((0, _entities.getKindEntities)(kind));
177
+ const entity = (0, _lodash.find)(entities, {
178
+ kind,
179
+ name
180
+ });
179
181
 
180
- try {
181
- var _query;
182
-
183
- if (query._fields) {
184
- // If requesting specific fields, items and query association to said
185
- // records are stored by ID reference. Thus, fields must always include
186
- // the ID.
187
- query = { ...query,
188
- _fields: (0, _lodash.uniq)([...((0, _utils.getNormalizedCommaSeparable)(query._fields) || []), entity.key || _entities.DEFAULT_ENTITY_KEY]).join()
189
- };
182
+ if (!entity || entity !== null && entity !== void 0 && entity.__experimentalNoFetch) {
183
+ return;
190
184
  }
191
185
 
192
- const path = (0, _url.addQueryArgs)(entity.baseURL, { ...entity.baseURLParams,
193
- ...query
186
+ const lock = await dispatch.__unstableAcquireStoreLock(_name.STORE_NAME, ['entities', 'data', kind, name], {
187
+ exclusive: false
194
188
  });
195
- let records = Object.values(await (0, _apiFetch.default)({
196
- path
197
- })); // If we request fields but the result doesn't contain the fields,
198
- // explicitely set these fields as "undefined"
199
- // that way we consider the query "fullfilled".
200
-
201
- if (query._fields) {
202
- records = records.map(record => {
203
- query._fields.split(',').forEach(field => {
204
- if (!record.hasOwnProperty(field)) {
205
- record[field] = undefined;
206
- }
207
- });
208
189
 
209
- return record;
210
- });
211
- }
190
+ try {
191
+ var _query;
212
192
 
213
- dispatch.receiveEntityRecords(kind, name, records, query); // When requesting all fields, the list of results can be used to
214
- // resolve the `getEntityRecord` selector in addition to `getEntityRecords`.
215
- // See https://github.com/WordPress/gutenberg/pull/26575
216
-
217
- if (!((_query = query) !== null && _query !== void 0 && _query._fields) && !query.context) {
218
- const key = entity.key || _entities.DEFAULT_ENTITY_KEY;
219
- const resolutionsArgs = records.filter(record => record[key]).map(record => [kind, name, record[key]]);
220
- dispatch({
221
- type: 'START_RESOLUTIONS',
222
- selectorName: 'getEntityRecord',
223
- args: resolutionsArgs
224
- });
225
- dispatch({
226
- type: 'FINISH_RESOLUTIONS',
227
- selectorName: 'getEntityRecord',
228
- args: resolutionsArgs
193
+ if (query._fields) {
194
+ // If requesting specific fields, items and query association to said
195
+ // records are stored by ID reference. Thus, fields must always include
196
+ // the ID.
197
+ query = { ...query,
198
+ _fields: (0, _lodash.uniq)([...((0, _utils.getNormalizedCommaSeparable)(query._fields) || []), entity.key || _entities.DEFAULT_ENTITY_KEY]).join()
199
+ };
200
+ }
201
+
202
+ const path = (0, _url.addQueryArgs)(entity.baseURL, { ...entity.baseURLParams,
203
+ ...query
229
204
  });
205
+ let records = Object.values(await (0, _apiFetch.default)({
206
+ path
207
+ })); // If we request fields but the result doesn't contain the fields,
208
+ // explicitely set these fields as "undefined"
209
+ // that way we consider the query "fullfilled".
210
+
211
+ if (query._fields) {
212
+ records = records.map(record => {
213
+ query._fields.split(',').forEach(field => {
214
+ if (!record.hasOwnProperty(field)) {
215
+ record[field] = undefined;
216
+ }
217
+ });
218
+
219
+ return record;
220
+ });
221
+ }
222
+
223
+ dispatch.receiveEntityRecords(kind, name, records, query); // When requesting all fields, the list of results can be used to
224
+ // resolve the `getEntityRecord` selector in addition to `getEntityRecords`.
225
+ // See https://github.com/WordPress/gutenberg/pull/26575
226
+
227
+ if (!((_query = query) !== null && _query !== void 0 && _query._fields) && !query.context) {
228
+ const key = entity.key || _entities.DEFAULT_ENTITY_KEY;
229
+ const resolutionsArgs = records.filter(record => record[key]).map(record => [kind, name, record[key]]);
230
+ dispatch({
231
+ type: 'START_RESOLUTIONS',
232
+ selectorName: 'getEntityRecord',
233
+ args: resolutionsArgs
234
+ });
235
+ dispatch({
236
+ type: 'FINISH_RESOLUTIONS',
237
+ selectorName: 'getEntityRecord',
238
+ args: resolutionsArgs
239
+ });
240
+ }
241
+ } catch (error) {// We need a way to handle and access REST API errors in state
242
+ // Until then, catching the error ensures the resolver is marked as resolved.
243
+ // See similar implementation in `getEntityRecord()`.
244
+ } finally {
245
+ dispatch.__unstableReleaseStoreLock(lock);
230
246
  }
231
- } catch (error) {// We need a way to handle and access REST API errors in state
232
- // Until then, catching the error ensures the resolver is marked as resolved.
233
- // See similar implementation in `getEntityRecord()`.
234
- } finally {
235
- dispatch.__unstableReleaseStoreLock(lock);
236
- }
247
+ };
237
248
  };
238
249
 
239
250
  exports.getEntityRecords = getEntityRecords;
@@ -246,10 +257,11 @@ getEntityRecords.shouldInvalidate = (action, kind, name) => {
246
257
  */
247
258
 
248
259
 
249
- const getCurrentTheme = () => async ({
250
- dispatch,
251
- resolveSelect
252
- }) => {
260
+ const getCurrentTheme = () => async _ref5 => {
261
+ let {
262
+ dispatch,
263
+ resolveSelect
264
+ } = _ref5;
253
265
  const activeThemes = await resolveSelect.getEntityRecords('root', 'theme', {
254
266
  status: 'active'
255
267
  });
@@ -270,9 +282,11 @@ const getThemeSupports = (0, _utils.forwardResolver)('getCurrentTheme');
270
282
 
271
283
  exports.getThemeSupports = getThemeSupports;
272
284
 
273
- const getEmbedPreview = url => async ({
274
- dispatch
275
- }) => {
285
+ const getEmbedPreview = url => async _ref6 => {
286
+ let {
287
+ dispatch
288
+ } = _ref6;
289
+
276
290
  try {
277
291
  const embedProxyResponse = await (0, _apiFetch.default)({
278
292
  path: (0, _url.addQueryArgs)('/oembed/1.0/proxy', {
@@ -298,9 +312,10 @@ const getEmbedPreview = url => async ({
298
312
 
299
313
  exports.getEmbedPreview = getEmbedPreview;
300
314
 
301
- const canUser = (action, resource, id) => async ({
302
- dispatch
303
- }) => {
315
+ const canUser = (action, resource, id) => async _ref7 => {
316
+ let {
317
+ dispatch
318
+ } = _ref7;
304
319
  const methods = {
305
320
  create: 'POST',
306
321
  read: 'GET',
@@ -360,9 +375,10 @@ const canUser = (action, resource, id) => async ({
360
375
 
361
376
  exports.canUser = canUser;
362
377
 
363
- const canUserEditEntityRecord = (kind, name, recordId) => async ({
364
- dispatch
365
- }) => {
378
+ const canUserEditEntityRecord = (kind, name, recordId) => async _ref8 => {
379
+ let {
380
+ dispatch
381
+ } = _ref8;
366
382
  const entities = await dispatch((0, _entities.getKindEntities)(kind));
367
383
  const entity = (0, _lodash.find)(entities, {
368
384
  kind,
@@ -386,10 +402,11 @@ const canUserEditEntityRecord = (kind, name, recordId) => async ({
386
402
 
387
403
  exports.canUserEditEntityRecord = canUserEditEntityRecord;
388
404
 
389
- const getAutosaves = (postType, postId) => async ({
390
- dispatch,
391
- resolveSelect
392
- }) => {
405
+ const getAutosaves = (postType, postId) => async _ref9 => {
406
+ let {
407
+ dispatch,
408
+ resolveSelect
409
+ } = _ref9;
393
410
  const {
394
411
  rest_base: restBase
395
412
  } = await resolveSelect.getPostType(postType);
@@ -414,9 +431,10 @@ const getAutosaves = (postType, postId) => async ({
414
431
 
415
432
  exports.getAutosaves = getAutosaves;
416
433
 
417
- const getAutosave = (postType, postId) => async ({
418
- resolveSelect
419
- }) => {
434
+ const getAutosave = (postType, postId) => async _ref10 => {
435
+ let {
436
+ resolveSelect
437
+ } = _ref10;
420
438
  await resolveSelect.getAutosaves(postType, postId);
421
439
  };
422
440
  /**
@@ -428,10 +446,11 @@ const getAutosave = (postType, postId) => async ({
428
446
 
429
447
  exports.getAutosave = getAutosave;
430
448
 
431
- const __experimentalGetTemplateForLink = link => async ({
432
- dispatch,
433
- resolveSelect
434
- }) => {
449
+ const __experimentalGetTemplateForLink = link => async _ref11 => {
450
+ let {
451
+ dispatch,
452
+ resolveSelect
453
+ } = _ref11;
435
454
  // Ideally this should be using an apiFetch call
436
455
  // We could potentially do so by adding a "filter" to the `wp_template` end point.
437
456
  // Also it seems the returned object is not a regular REST API post type.
@@ -440,9 +459,12 @@ const __experimentalGetTemplateForLink = link => async ({
440
459
  try {
441
460
  template = await window.fetch((0, _url.addQueryArgs)(link, {
442
461
  '_wp-find-template': true
443
- })).then(res => res.json()).then(({
444
- data
445
- }) => data);
462
+ })).then(res => res.json()).then(_ref12 => {
463
+ let {
464
+ data
465
+ } = _ref12;
466
+ return data;
467
+ });
446
468
  } catch (e) {// For non-FSE themes, it is possible that this request returns an error.
447
469
  }
448
470
 
@@ -465,10 +487,11 @@ __experimentalGetTemplateForLink.shouldInvalidate = action => {
465
487
  return (action.type === 'RECEIVE_ITEMS' || action.type === 'REMOVE_ITEMS') && action.invalidateCache && action.kind === 'postType' && action.name === 'wp_template';
466
488
  };
467
489
 
468
- const __experimentalGetCurrentGlobalStylesId = () => async ({
469
- dispatch,
470
- resolveSelect
471
- }) => {
490
+ const __experimentalGetCurrentGlobalStylesId = () => async _ref13 => {
491
+ let {
492
+ dispatch,
493
+ resolveSelect
494
+ } = _ref13;
472
495
  const activeThemes = await resolveSelect.getEntityRecords('root', 'theme', {
473
496
  status: 'active'
474
497
  });
@@ -485,10 +508,11 @@ const __experimentalGetCurrentGlobalStylesId = () => async ({
485
508
 
486
509
  exports.__experimentalGetCurrentGlobalStylesId = __experimentalGetCurrentGlobalStylesId;
487
510
 
488
- const __experimentalGetCurrentThemeBaseGlobalStyles = () => async ({
489
- resolveSelect,
490
- dispatch
491
- }) => {
511
+ const __experimentalGetCurrentThemeBaseGlobalStyles = () => async _ref14 => {
512
+ let {
513
+ resolveSelect,
514
+ dispatch
515
+ } = _ref14;
492
516
  const currentTheme = await resolveSelect.getCurrentTheme();
493
517
  const themeGlobalStyles = await (0, _apiFetch.default)({
494
518
  path: `/wp/v2/global-styles/themes/${currentTheme.stylesheet}`
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/resolvers.js"],"names":["getAuthors","query","dispatch","path","users","receiveUserQuery","getCurrentUser","currentUser","receiveCurrentUser","getEntityRecord","kind","name","key","select","entities","entity","__experimentalNoFetch","lock","__unstableAcquireStoreLock","STORE_NAME","exclusive","undefined","_fields","DEFAULT_ENTITY_KEY","join","baseURL","baseURLParams","include","hasRecords","hasEntityRecords","record","receiveEntityRecords","error","__unstableReleaseStoreLock","getRawEntityRecord","getEditedEntityRecord","getEntityRecords","records","Object","values","map","split","forEach","field","hasOwnProperty","context","resolutionsArgs","filter","type","selectorName","args","shouldInvalidate","action","invalidateCache","getCurrentTheme","resolveSelect","activeThemes","status","receiveCurrentTheme","getThemeSupports","getEmbedPreview","url","embedProxyResponse","receiveEmbedPreview","canUser","resource","id","methods","create","read","update","delete","method","Error","response","parse","allowHeader","headers","get","isAllowed","receiveUserPermission","canUserEditEntityRecord","recordId","__unstable_rest_base","getAutosaves","postType","postId","rest_base","restBase","getPostType","autosaves","length","receiveAutosaves","getAutosave","__experimentalGetTemplateForLink","link","template","window","fetch","then","res","json","data","e","__experimentalGetCurrentGlobalStylesId","globalStylesURL","globalStylesObject","__experimentalReceiveCurrentGlobalStylesId","__experimentalGetCurrentThemeBaseGlobalStyles","currentTheme","themeGlobalStyles","stylesheet","__experimentalReceiveThemeBaseGlobalStyles"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { find, includes, get, hasIn, compact, uniq } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { addQueryArgs } from '@wordpress/url';\nimport apiFetch from '@wordpress/api-fetch';\n\n/**\n * Internal dependencies\n */\nimport { STORE_NAME } from './name';\nimport { getKindEntities, DEFAULT_ENTITY_KEY } from './entities';\nimport { forwardResolver, getNormalizedCommaSeparable } from './utils';\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 = ( query ) => async ( { dispatch } ) => {\n\tconst path = addQueryArgs(\n\t\t'/wp/v2/users/?who=authors&per_page=100',\n\t\tquery\n\t);\n\tconst users = await apiFetch( { path } );\n\tdispatch.receiveUserQuery( path, users );\n};\n\n/**\n * Requests the current user from the REST API.\n */\nexport const getCurrentUser = () => async ( { dispatch } ) => {\n\tconst currentUser = await apiFetch( { path: '/wp/v2/users/me' } );\n\tdispatch.receiveCurrentUser( currentUser );\n};\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.\n */\nexport const getEntityRecord = ( kind, name, key = '', query ) => async ( {\n\tselect,\n\tdispatch,\n} ) => {\n\tconst entities = await dispatch( getKindEntities( kind ) );\n\tconst entity = find( entities, { kind, name } );\n\tif ( ! entity || entity?.__experimentalNoFetch ) {\n\t\treturn;\n\t}\n\n\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\tSTORE_NAME,\n\t\t[ 'entities', 'data', kind, name, key ],\n\t\t{ exclusive: false }\n\t);\n\n\ttry {\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: uniq( [\n\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) || [] ),\n\t\t\t\t\tentity.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t] ).join(),\n\t\t\t};\n\t\t}\n\n\t\t// Disable reason: While true that an early return could leave `path`\n\t\t// unused, it's important that path is derived using the query prior to\n\t\t// additional query modifications in the condition below, since those\n\t\t// modifications are relevant to how the data is tracked in state, and not\n\t\t// for how the request is made to the REST API.\n\n\t\t// eslint-disable-next-line @wordpress/no-unused-vars-before-return\n\t\tconst path = addQueryArgs( entity.baseURL + ( key ? '/' + key : '' ), {\n\t\t\t...entity.baseURLParams,\n\t\t\t...query,\n\t\t} );\n\n\t\tif ( query !== undefined ) {\n\t\t\tquery = { ...query, include: [ key ] };\n\n\t\t\t// The resolution cache won't consider query as reusable based on the\n\t\t\t// fields, so it's tested here, prior to initiating the REST request,\n\t\t\t// and without causing `getEntityRecords` resolution to occur.\n\t\t\tconst hasRecords = select.hasEntityRecords( kind, name, query );\n\t\t\tif ( hasRecords ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst record = await apiFetch( { path } );\n\t\tdispatch.receiveEntityRecords( kind, name, record, query );\n\t} catch ( error ) {\n\t\t// We need a way to handle and access REST API errors in state\n\t\t// Until then, catching the error ensures the resolver is marked as resolved.\n\t\t// See similar implementation in `getEntityRecords()`.\n\t} finally {\n\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t}\n};\n\n/**\n * Requests an entity's record from the REST API.\n */\nexport const getRawEntityRecord = forwardResolver( 'getEntityRecord' );\n\n/**\n * Requests an entity's record from the REST API.\n */\nexport const getEditedEntityRecord = forwardResolver( 'getEntityRecord' );\n\n/**\n * Requests the entity's records from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {Object?} query Query Object.\n */\nexport const getEntityRecords = ( kind, name, query = {} ) => async ( {\n\tdispatch,\n} ) => {\n\tconst entities = await dispatch( getKindEntities( kind ) );\n\tconst entity = find( entities, { kind, name } );\n\tif ( ! entity || entity?.__experimentalNoFetch ) {\n\t\treturn;\n\t}\n\n\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\tSTORE_NAME,\n\t\t[ 'entities', 'data', kind, name ],\n\t\t{ exclusive: false }\n\t);\n\n\ttry {\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: uniq( [\n\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) || [] ),\n\t\t\t\t\tentity.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t] ).join(),\n\t\t\t};\n\t\t}\n\n\t\tconst path = addQueryArgs( entity.baseURL, {\n\t\t\t...entity.baseURLParams,\n\t\t\t...query,\n\t\t} );\n\n\t\tlet records = Object.values( await apiFetch( { path } ) );\n\t\t// If we request fields but the result doesn't contain the fields,\n\t\t// explicitely set these fields as \"undefined\"\n\t\t// that way we consider the query \"fullfilled\".\n\t\tif ( query._fields ) {\n\t\t\trecords = records.map( ( record ) => {\n\t\t\t\tquery._fields.split( ',' ).forEach( ( field ) => {\n\t\t\t\t\tif ( ! record.hasOwnProperty( field ) ) {\n\t\t\t\t\t\trecord[ field ] = undefined;\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\treturn record;\n\t\t\t} );\n\t\t}\n\n\t\tdispatch.receiveEntityRecords( kind, name, records, query );\n\n\t\t// When requesting all fields, the list of results can be used to\n\t\t// resolve the `getEntityRecord` selector in addition to `getEntityRecords`.\n\t\t// See https://github.com/WordPress/gutenberg/pull/26575\n\t\tif ( ! query?._fields && ! query.context ) {\n\t\t\tconst key = entity.key || DEFAULT_ENTITY_KEY;\n\t\t\tconst resolutionsArgs = records\n\t\t\t\t.filter( ( record ) => record[ key ] )\n\t\t\t\t.map( ( record ) => [ kind, name, record[ key ] ] );\n\n\t\t\tdispatch( {\n\t\t\t\ttype: 'START_RESOLUTIONS',\n\t\t\t\tselectorName: 'getEntityRecord',\n\t\t\t\targs: resolutionsArgs,\n\t\t\t} );\n\t\t\tdispatch( {\n\t\t\t\ttype: 'FINISH_RESOLUTIONS',\n\t\t\t\tselectorName: 'getEntityRecord',\n\t\t\t\targs: resolutionsArgs,\n\t\t\t} );\n\t\t}\n\t} catch ( error ) {\n\t\t// We need a way to handle and access REST API errors in state\n\t\t// Until then, catching the error ensures the resolver is marked as resolved.\n\t\t// See similar implementation in `getEntityRecord()`.\n\t} finally {\n\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t}\n};\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 = () => async ( { dispatch, resolveSelect } ) => {\n\tconst activeThemes = await resolveSelect.getEntityRecords(\n\t\t'root',\n\t\t'theme',\n\t\t{ status: 'active' }\n\t);\n\n\tdispatch.receiveCurrentTheme( activeThemes[ 0 ] );\n};\n\n/**\n * Requests theme supports data from the index.\n */\nexport const getThemeSupports = forwardResolver( 'getCurrentTheme' );\n\n/**\n * Requests a preview from the from the Embed API.\n *\n * @param {string} url URL to get the preview for.\n */\nexport const getEmbedPreview = ( url ) => async ( { dispatch } ) => {\n\ttry {\n\t\tconst embedProxyResponse = await apiFetch( {\n\t\t\tpath: addQueryArgs( '/oembed/1.0/proxy', { url } ),\n\t\t} );\n\t\tdispatch.receiveEmbedPreview( url, embedProxyResponse );\n\t} catch ( error ) {\n\t\t// Embed API 404s if the URL cannot be embedded, so we have to catch the error from the apiRequest here.\n\t\tdispatch.receiveEmbedPreview( url, false );\n\t}\n};\n\n/**\n * Checks whether the current user can perform the given action on the given\n * REST resource.\n *\n * @param {string} action Action to check. One of: 'create', 'read', 'update',\n * 'delete'.\n * @param {string} resource REST resource to check, e.g. 'media' or 'posts'.\n * @param {?string} id ID of the rest resource to check.\n */\nexport const canUser = ( action, resource, id ) => async ( { dispatch } ) => {\n\tconst methods = {\n\t\tcreate: 'POST',\n\t\tread: 'GET',\n\t\tupdate: 'PUT',\n\t\tdelete: 'DELETE',\n\t};\n\n\tconst method = methods[ action ];\n\tif ( ! method ) {\n\t\tthrow new Error( `'${ action }' is not a valid action.` );\n\t}\n\n\tconst path = id ? `/wp/v2/${ resource }/${ id }` : `/wp/v2/${ resource }`;\n\n\tlet response;\n\ttry {\n\t\tresponse = await apiFetch( {\n\t\t\tpath,\n\t\t\t// Ideally this would always be an OPTIONS request, but unfortunately there's\n\t\t\t// a bug in the REST API which causes the Allow header to not be sent on\n\t\t\t// OPTIONS requests to /posts/:id routes.\n\t\t\t// https://core.trac.wordpress.org/ticket/45753\n\t\t\tmethod: id ? 'GET' : 'OPTIONS',\n\t\t\tparse: false,\n\t\t} );\n\t} catch ( error ) {\n\t\t// Do nothing if our OPTIONS request comes back with an API error (4xx or\n\t\t// 5xx). The previously determined isAllowed value will remain in the store.\n\t\treturn;\n\t}\n\n\tlet allowHeader;\n\tif ( hasIn( response, [ 'headers', 'get' ] ) ) {\n\t\t// If the request is fetched using the fetch api, the header can be\n\t\t// retrieved using the 'get' method.\n\t\tallowHeader = response.headers.get( 'allow' );\n\t} else {\n\t\t// If the request was preloaded server-side and is returned by the\n\t\t// preloading middleware, the header will be a simple property.\n\t\tallowHeader = get( response, [ 'headers', 'Allow' ], '' );\n\t}\n\n\tconst key = compact( [ action, resource, id ] ).join( '/' );\n\tconst isAllowed = includes( allowHeader, method );\n\tdispatch.receiveUserPermission( key, isAllowed );\n};\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 {string} recordId Record's id.\n */\nexport const canUserEditEntityRecord = ( kind, name, recordId ) => async ( {\n\tdispatch,\n} ) => {\n\tconst entities = await dispatch( getKindEntities( kind ) );\n\tconst entity = find( entities, { kind, name } );\n\tif ( ! entity ) {\n\t\treturn;\n\t}\n\n\tconst resource = entity.__unstable_rest_base;\n\tawait dispatch( canUser( 'update', resource, recordId ) );\n};\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 = ( postType, postId ) => async ( {\n\tdispatch,\n\tresolveSelect,\n} ) => {\n\tconst { rest_base: restBase } = await resolveSelect.getPostType( postType );\n\tconst autosaves = await apiFetch( {\n\t\tpath: `/wp/v2/${ restBase }/${ postId }/autosaves?context=edit`,\n\t} );\n\n\tif ( autosaves && autosaves.length ) {\n\t\tdispatch.receiveAutosaves( postId, autosaves );\n\t}\n};\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 = ( postType, postId ) => async ( {\n\tresolveSelect,\n} ) => {\n\tawait resolveSelect.getAutosaves( postType, postId );\n};\n\n/**\n * Retrieve the frontend template used for a given link.\n *\n * @param {string} link Link.\n */\nexport const __experimentalGetTemplateForLink = ( link ) => async ( {\n\tdispatch,\n\tresolveSelect,\n} ) => {\n\t// Ideally this should be using an apiFetch call\n\t// We could potentially do so by adding a \"filter\" to the `wp_template` end point.\n\t// Also it seems the returned object is not a regular REST API post type.\n\tlet template;\n\ttry {\n\t\ttemplate = await window\n\t\t\t.fetch( addQueryArgs( link, { '_wp-find-template': true } ) )\n\t\t\t.then( ( res ) => res.json() )\n\t\t\t.then( ( { data } ) => data );\n\t} catch ( e ) {\n\t\t// For non-FSE themes, it is possible that this request returns an error.\n\t}\n\n\tif ( ! template ) {\n\t\treturn;\n\t}\n\n\tconst record = await resolveSelect.getEntityRecord(\n\t\t'postType',\n\t\t'wp_template',\n\t\ttemplate.id\n\t);\n\n\tif ( record ) {\n\t\tdispatch.receiveEntityRecords( 'postType', 'wp_template', [ record ], {\n\t\t\t'find-template': link,\n\t\t} );\n\t}\n};\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 = () => async ( {\n\tdispatch,\n\tresolveSelect,\n} ) => {\n\tconst activeThemes = await resolveSelect.getEntityRecords(\n\t\t'root',\n\t\t'theme',\n\t\t{ status: 'active' }\n\t);\n\tconst globalStylesURL = get( activeThemes, [\n\t\t0,\n\t\t'_links',\n\t\t'wp:user-global-styles',\n\t\t0,\n\t\t'href',\n\t] );\n\tif ( globalStylesURL ) {\n\t\tconst globalStylesObject = await apiFetch( {\n\t\t\turl: globalStylesURL,\n\t\t} );\n\t\tdispatch.__experimentalReceiveCurrentGlobalStylesId(\n\t\t\tglobalStylesObject.id\n\t\t);\n\t}\n};\n\nexport const __experimentalGetCurrentThemeBaseGlobalStyles = () => async ( {\n\tresolveSelect,\n\tdispatch,\n} ) => {\n\tconst currentTheme = await resolveSelect.getCurrentTheme();\n\tconst themeGlobalStyles = await apiFetch( {\n\t\tpath: `/wp/v2/global-styles/themes/${ currentTheme.stylesheet }`,\n\t} );\n\tawait dispatch.__experimentalReceiveThemeBaseGlobalStyles(\n\t\tcurrentTheme.stylesheet,\n\t\tthemeGlobalStyles\n\t);\n};\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/resolvers.js"],"names":["getAuthors","query","dispatch","path","users","receiveUserQuery","getCurrentUser","currentUser","receiveCurrentUser","getEntityRecord","kind","name","key","select","entities","entity","__experimentalNoFetch","lock","__unstableAcquireStoreLock","STORE_NAME","exclusive","undefined","_fields","DEFAULT_ENTITY_KEY","join","baseURL","baseURLParams","include","hasRecords","hasEntityRecords","record","receiveEntityRecords","error","__unstableReleaseStoreLock","getRawEntityRecord","getEditedEntityRecord","getEntityRecords","records","Object","values","map","split","forEach","field","hasOwnProperty","context","resolutionsArgs","filter","type","selectorName","args","shouldInvalidate","action","invalidateCache","getCurrentTheme","resolveSelect","activeThemes","status","receiveCurrentTheme","getThemeSupports","getEmbedPreview","url","embedProxyResponse","receiveEmbedPreview","canUser","resource","id","methods","create","read","update","delete","method","Error","response","parse","allowHeader","headers","get","isAllowed","receiveUserPermission","canUserEditEntityRecord","recordId","__unstable_rest_base","getAutosaves","postType","postId","rest_base","restBase","getPostType","autosaves","length","receiveAutosaves","getAutosave","__experimentalGetTemplateForLink","link","template","window","fetch","then","res","json","data","e","__experimentalGetCurrentGlobalStylesId","globalStylesURL","globalStylesObject","__experimentalReceiveCurrentGlobalStylesId","__experimentalGetCurrentThemeBaseGlobalStyles","currentTheme","themeGlobalStyles","stylesheet","__experimentalReceiveThemeBaseGlobalStyles"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { find, includes, get, hasIn, compact, uniq } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { addQueryArgs } from '@wordpress/url';\nimport apiFetch from '@wordpress/api-fetch';\n\n/**\n * Internal dependencies\n */\nimport { STORE_NAME } from './name';\nimport { getKindEntities, DEFAULT_ENTITY_KEY } from './entities';\nimport { forwardResolver, getNormalizedCommaSeparable } from './utils';\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 = ( query ) => async ( { dispatch } ) => {\n\tconst path = addQueryArgs(\n\t\t'/wp/v2/users/?who=authors&per_page=100',\n\t\tquery\n\t);\n\tconst users = await apiFetch( { path } );\n\tdispatch.receiveUserQuery( path, users );\n};\n\n/**\n * Requests the current user from the REST API.\n */\nexport const getCurrentUser = () => async ( { dispatch } ) => {\n\tconst currentUser = await apiFetch( { path: '/wp/v2/users/me' } );\n\tdispatch.receiveCurrentUser( currentUser );\n};\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.\n */\nexport const getEntityRecord = ( kind, name, key = '', query ) => async ( {\n\tselect,\n\tdispatch,\n} ) => {\n\tconst entities = await dispatch( getKindEntities( kind ) );\n\tconst entity = find( entities, { kind, name } );\n\tif ( ! entity || entity?.__experimentalNoFetch ) {\n\t\treturn;\n\t}\n\n\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\tSTORE_NAME,\n\t\t[ 'entities', 'data', kind, name, key ],\n\t\t{ exclusive: false }\n\t);\n\n\ttry {\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: uniq( [\n\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) || [] ),\n\t\t\t\t\tentity.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t] ).join(),\n\t\t\t};\n\t\t}\n\n\t\t// Disable reason: While true that an early return could leave `path`\n\t\t// unused, it's important that path is derived using the query prior to\n\t\t// additional query modifications in the condition below, since those\n\t\t// modifications are relevant to how the data is tracked in state, and not\n\t\t// for how the request is made to the REST API.\n\n\t\t// eslint-disable-next-line @wordpress/no-unused-vars-before-return\n\t\tconst path = addQueryArgs( entity.baseURL + ( key ? '/' + key : '' ), {\n\t\t\t...entity.baseURLParams,\n\t\t\t...query,\n\t\t} );\n\n\t\tif ( query !== undefined ) {\n\t\t\tquery = { ...query, include: [ key ] };\n\n\t\t\t// The resolution cache won't consider query as reusable based on the\n\t\t\t// fields, so it's tested here, prior to initiating the REST request,\n\t\t\t// and without causing `getEntityRecords` resolution to occur.\n\t\t\tconst hasRecords = select.hasEntityRecords( kind, name, query );\n\t\t\tif ( hasRecords ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst record = await apiFetch( { path } );\n\t\tdispatch.receiveEntityRecords( kind, name, record, query );\n\t} catch ( error ) {\n\t\t// We need a way to handle and access REST API errors in state\n\t\t// Until then, catching the error ensures the resolver is marked as resolved.\n\t\t// See similar implementation in `getEntityRecords()`.\n\t} finally {\n\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t}\n};\n\n/**\n * Requests an entity's record from the REST API.\n */\nexport const getRawEntityRecord = forwardResolver( 'getEntityRecord' );\n\n/**\n * Requests an entity's record from the REST API.\n */\nexport const getEditedEntityRecord = forwardResolver( 'getEntityRecord' );\n\n/**\n * Requests the entity's records from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {Object?} query Query Object.\n */\nexport const getEntityRecords = ( kind, name, query = {} ) => async ( {\n\tdispatch,\n} ) => {\n\tconst entities = await dispatch( getKindEntities( kind ) );\n\tconst entity = find( entities, { kind, name } );\n\tif ( ! entity || entity?.__experimentalNoFetch ) {\n\t\treturn;\n\t}\n\n\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\tSTORE_NAME,\n\t\t[ 'entities', 'data', kind, name ],\n\t\t{ exclusive: false }\n\t);\n\n\ttry {\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: uniq( [\n\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) || [] ),\n\t\t\t\t\tentity.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t] ).join(),\n\t\t\t};\n\t\t}\n\n\t\tconst path = addQueryArgs( entity.baseURL, {\n\t\t\t...entity.baseURLParams,\n\t\t\t...query,\n\t\t} );\n\n\t\tlet records = Object.values( await apiFetch( { path } ) );\n\t\t// If we request fields but the result doesn't contain the fields,\n\t\t// explicitely set these fields as \"undefined\"\n\t\t// that way we consider the query \"fullfilled\".\n\t\tif ( query._fields ) {\n\t\t\trecords = records.map( ( record ) => {\n\t\t\t\tquery._fields.split( ',' ).forEach( ( field ) => {\n\t\t\t\t\tif ( ! record.hasOwnProperty( field ) ) {\n\t\t\t\t\t\trecord[ field ] = undefined;\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\treturn record;\n\t\t\t} );\n\t\t}\n\n\t\tdispatch.receiveEntityRecords( kind, name, records, query );\n\n\t\t// When requesting all fields, the list of results can be used to\n\t\t// resolve the `getEntityRecord` selector in addition to `getEntityRecords`.\n\t\t// See https://github.com/WordPress/gutenberg/pull/26575\n\t\tif ( ! query?._fields && ! query.context ) {\n\t\t\tconst key = entity.key || DEFAULT_ENTITY_KEY;\n\t\t\tconst resolutionsArgs = records\n\t\t\t\t.filter( ( record ) => record[ key ] )\n\t\t\t\t.map( ( record ) => [ kind, name, record[ key ] ] );\n\n\t\t\tdispatch( {\n\t\t\t\ttype: 'START_RESOLUTIONS',\n\t\t\t\tselectorName: 'getEntityRecord',\n\t\t\t\targs: resolutionsArgs,\n\t\t\t} );\n\t\t\tdispatch( {\n\t\t\t\ttype: 'FINISH_RESOLUTIONS',\n\t\t\t\tselectorName: 'getEntityRecord',\n\t\t\t\targs: resolutionsArgs,\n\t\t\t} );\n\t\t}\n\t} catch ( error ) {\n\t\t// We need a way to handle and access REST API errors in state\n\t\t// Until then, catching the error ensures the resolver is marked as resolved.\n\t\t// See similar implementation in `getEntityRecord()`.\n\t} finally {\n\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t}\n};\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 = () => async ( { dispatch, resolveSelect } ) => {\n\tconst activeThemes = await resolveSelect.getEntityRecords(\n\t\t'root',\n\t\t'theme',\n\t\t{ status: 'active' }\n\t);\n\n\tdispatch.receiveCurrentTheme( activeThemes[ 0 ] );\n};\n\n/**\n * Requests theme supports data from the index.\n */\nexport const getThemeSupports = forwardResolver( 'getCurrentTheme' );\n\n/**\n * Requests a preview from the from the Embed API.\n *\n * @param {string} url URL to get the preview for.\n */\nexport const getEmbedPreview = ( url ) => async ( { dispatch } ) => {\n\ttry {\n\t\tconst embedProxyResponse = await apiFetch( {\n\t\t\tpath: addQueryArgs( '/oembed/1.0/proxy', { url } ),\n\t\t} );\n\t\tdispatch.receiveEmbedPreview( url, embedProxyResponse );\n\t} catch ( error ) {\n\t\t// Embed API 404s if the URL cannot be embedded, so we have to catch the error from the apiRequest here.\n\t\tdispatch.receiveEmbedPreview( url, false );\n\t}\n};\n\n/**\n * Checks whether the current user can perform the given action on the given\n * REST resource.\n *\n * @param {string} action Action to check. One of: 'create', 'read', 'update',\n * 'delete'.\n * @param {string} resource REST resource to check, e.g. 'media' or 'posts'.\n * @param {?string} id ID of the rest resource to check.\n */\nexport const canUser = ( action, resource, id ) => async ( { dispatch } ) => {\n\tconst methods = {\n\t\tcreate: 'POST',\n\t\tread: 'GET',\n\t\tupdate: 'PUT',\n\t\tdelete: 'DELETE',\n\t};\n\n\tconst method = methods[ action ];\n\tif ( ! method ) {\n\t\tthrow new Error( `'${ action }' is not a valid action.` );\n\t}\n\n\tconst path = id ? `/wp/v2/${ resource }/${ id }` : `/wp/v2/${ resource }`;\n\n\tlet response;\n\ttry {\n\t\tresponse = await apiFetch( {\n\t\t\tpath,\n\t\t\t// Ideally this would always be an OPTIONS request, but unfortunately there's\n\t\t\t// a bug in the REST API which causes the Allow header to not be sent on\n\t\t\t// OPTIONS requests to /posts/:id routes.\n\t\t\t// https://core.trac.wordpress.org/ticket/45753\n\t\t\tmethod: id ? 'GET' : 'OPTIONS',\n\t\t\tparse: false,\n\t\t} );\n\t} catch ( error ) {\n\t\t// Do nothing if our OPTIONS request comes back with an API error (4xx or\n\t\t// 5xx). The previously determined isAllowed value will remain in the store.\n\t\treturn;\n\t}\n\n\tlet allowHeader;\n\tif ( hasIn( response, [ 'headers', 'get' ] ) ) {\n\t\t// If the request is fetched using the fetch api, the header can be\n\t\t// retrieved using the 'get' method.\n\t\tallowHeader = response.headers.get( 'allow' );\n\t} else {\n\t\t// If the request was preloaded server-side and is returned by the\n\t\t// preloading middleware, the header will be a simple property.\n\t\tallowHeader = get( response, [ 'headers', 'Allow' ], '' );\n\t}\n\n\tconst key = compact( [ action, resource, id ] ).join( '/' );\n\tconst isAllowed = includes( allowHeader, method );\n\tdispatch.receiveUserPermission( key, isAllowed );\n};\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 {string} recordId Record's id.\n */\nexport const canUserEditEntityRecord = ( kind, name, recordId ) => async ( {\n\tdispatch,\n} ) => {\n\tconst entities = await dispatch( getKindEntities( kind ) );\n\tconst entity = find( entities, { kind, name } );\n\tif ( ! entity ) {\n\t\treturn;\n\t}\n\n\tconst resource = entity.__unstable_rest_base;\n\tawait dispatch( canUser( 'update', resource, recordId ) );\n};\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 = ( postType, postId ) => async ( {\n\tdispatch,\n\tresolveSelect,\n} ) => {\n\tconst { rest_base: restBase } = await resolveSelect.getPostType( postType );\n\tconst autosaves = await apiFetch( {\n\t\tpath: `/wp/v2/${ restBase }/${ postId }/autosaves?context=edit`,\n\t} );\n\n\tif ( autosaves && autosaves.length ) {\n\t\tdispatch.receiveAutosaves( postId, autosaves );\n\t}\n};\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 = ( postType, postId ) => async ( {\n\tresolveSelect,\n} ) => {\n\tawait resolveSelect.getAutosaves( postType, postId );\n};\n\n/**\n * Retrieve the frontend template used for a given link.\n *\n * @param {string} link Link.\n */\nexport const __experimentalGetTemplateForLink = ( link ) => async ( {\n\tdispatch,\n\tresolveSelect,\n} ) => {\n\t// Ideally this should be using an apiFetch call\n\t// We could potentially do so by adding a \"filter\" to the `wp_template` end point.\n\t// Also it seems the returned object is not a regular REST API post type.\n\tlet template;\n\ttry {\n\t\ttemplate = await window\n\t\t\t.fetch( addQueryArgs( link, { '_wp-find-template': true } ) )\n\t\t\t.then( ( res ) => res.json() )\n\t\t\t.then( ( { data } ) => data );\n\t} catch ( e ) {\n\t\t// For non-FSE themes, it is possible that this request returns an error.\n\t}\n\n\tif ( ! template ) {\n\t\treturn;\n\t}\n\n\tconst record = await resolveSelect.getEntityRecord(\n\t\t'postType',\n\t\t'wp_template',\n\t\ttemplate.id\n\t);\n\n\tif ( record ) {\n\t\tdispatch.receiveEntityRecords( 'postType', 'wp_template', [ record ], {\n\t\t\t'find-template': link,\n\t\t} );\n\t}\n};\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 = () => async ( {\n\tdispatch,\n\tresolveSelect,\n} ) => {\n\tconst activeThemes = await resolveSelect.getEntityRecords(\n\t\t'root',\n\t\t'theme',\n\t\t{ status: 'active' }\n\t);\n\tconst globalStylesURL = get( activeThemes, [\n\t\t0,\n\t\t'_links',\n\t\t'wp:user-global-styles',\n\t\t0,\n\t\t'href',\n\t] );\n\tif ( globalStylesURL ) {\n\t\tconst globalStylesObject = await apiFetch( {\n\t\t\turl: globalStylesURL,\n\t\t} );\n\t\tdispatch.__experimentalReceiveCurrentGlobalStylesId(\n\t\t\tglobalStylesObject.id\n\t\t);\n\t}\n};\n\nexport const __experimentalGetCurrentThemeBaseGlobalStyles = () => async ( {\n\tresolveSelect,\n\tdispatch,\n} ) => {\n\tconst currentTheme = await resolveSelect.getCurrentTheme();\n\tconst themeGlobalStyles = await apiFetch( {\n\t\tpath: `/wp/v2/global-styles/themes/${ currentTheme.stylesheet }`,\n\t} );\n\tawait dispatch.__experimentalReceiveThemeBaseGlobalStyles(\n\t\tcurrentTheme.stylesheet,\n\t\tthemeGlobalStyles\n\t);\n};\n"]}