@wordpress/core-data 4.2.0 → 4.4.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 (147) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +68 -11
  3. package/build/actions.js +61 -41
  4. package/build/actions.js.map +1 -1
  5. package/build/batch/default-processor.js +1 -1
  6. package/build/batch/default-processor.js.map +1 -1
  7. package/build/entities.js +36 -23
  8. package/build/entities.js.map +1 -1
  9. package/build/entity-provider.js +46 -44
  10. package/build/entity-provider.js.map +1 -1
  11. package/build/entity-types/{base-entity-types.js → base-entity-records.js} +9 -9
  12. package/build/entity-types/base-entity-records.js.map +1 -0
  13. package/build/fetch/__experimental-fetch-link-suggestions.js +48 -11
  14. package/build/fetch/__experimental-fetch-link-suggestions.js.map +1 -1
  15. package/build/fetch/__experimental-fetch-url-data.js +1 -1
  16. package/build/fetch/__experimental-fetch-url-data.js.map +1 -1
  17. package/build/hooks/use-entity-record.js +15 -5
  18. package/build/hooks/use-entity-record.js.map +1 -1
  19. package/build/hooks/use-entity-records.js +14 -2
  20. package/build/hooks/use-entity-records.js.map +1 -1
  21. package/build/hooks/use-query-select.js.map +1 -1
  22. package/build/index.js +9 -21
  23. package/build/index.js.map +1 -1
  24. package/build/queried-data/actions.js +4 -4
  25. package/build/queried-data/actions.js.map +1 -1
  26. package/build/queried-data/get-query-parts.js +7 -3
  27. package/build/queried-data/get-query-parts.js.map +1 -1
  28. package/build/queried-data/reducer.js +8 -6
  29. package/build/queried-data/reducer.js.map +1 -1
  30. package/build/reducer.js +77 -25
  31. package/build/reducer.js.map +1 -1
  32. package/build/resolvers.js +48 -24
  33. package/build/resolvers.js.map +1 -1
  34. package/build/selectors.js +122 -55
  35. package/build/selectors.js.map +1 -1
  36. package/build/types.js +6 -0
  37. package/build/types.js.map +1 -0
  38. package/build/utils/conservative-map-item.js +1 -1
  39. package/build/utils/conservative-map-item.js.map +1 -1
  40. package/build/utils/if-matching-action.js +4 -2
  41. package/build/utils/if-matching-action.js.map +1 -1
  42. package/build/utils/is-raw-attribute.js +1 -1
  43. package/build/utils/is-raw-attribute.js.map +1 -1
  44. package/build/utils/on-sub-key.js +3 -1
  45. package/build/utils/on-sub-key.js.map +1 -1
  46. package/build/utils/replace-action.js +4 -2
  47. package/build/utils/replace-action.js.map +1 -1
  48. package/build-module/actions.js +62 -42
  49. package/build-module/actions.js.map +1 -1
  50. package/build-module/batch/default-processor.js +1 -1
  51. package/build-module/batch/default-processor.js.map +1 -1
  52. package/build-module/entities.js +32 -19
  53. package/build-module/entities.js.map +1 -1
  54. package/build-module/entity-provider.js +47 -45
  55. package/build-module/entity-provider.js.map +1 -1
  56. package/build-module/entity-types/{base-entity-types.js → base-entity-records.js} +7 -7
  57. package/build-module/entity-types/base-entity-records.js.map +1 -0
  58. package/build-module/fetch/__experimental-fetch-link-suggestions.js +48 -11
  59. package/build-module/fetch/__experimental-fetch-link-suggestions.js.map +1 -1
  60. package/build-module/fetch/__experimental-fetch-url-data.js +1 -1
  61. package/build-module/fetch/__experimental-fetch-url-data.js.map +1 -1
  62. package/build-module/hooks/use-entity-record.js +15 -5
  63. package/build-module/hooks/use-entity-record.js.map +1 -1
  64. package/build-module/hooks/use-entity-records.js +14 -2
  65. package/build-module/hooks/use-entity-records.js.map +1 -1
  66. package/build-module/hooks/use-query-select.js.map +1 -1
  67. package/build-module/index.js +10 -22
  68. package/build-module/index.js.map +1 -1
  69. package/build-module/queried-data/actions.js +4 -4
  70. package/build-module/queried-data/actions.js.map +1 -1
  71. package/build-module/queried-data/get-query-parts.js +7 -3
  72. package/build-module/queried-data/get-query-parts.js.map +1 -1
  73. package/build-module/queried-data/reducer.js +8 -6
  74. package/build-module/queried-data/reducer.js.map +1 -1
  75. package/build-module/reducer.js +75 -26
  76. package/build-module/reducer.js.map +1 -1
  77. package/build-module/resolvers.js +42 -24
  78. package/build-module/resolvers.js.map +1 -1
  79. package/build-module/selectors.js +114 -55
  80. package/build-module/selectors.js.map +1 -1
  81. package/build-module/types.js +2 -0
  82. package/build-module/types.js.map +1 -0
  83. package/build-module/utils/conservative-map-item.js +1 -1
  84. package/build-module/utils/conservative-map-item.js.map +1 -1
  85. package/build-module/utils/if-matching-action.js +4 -2
  86. package/build-module/utils/if-matching-action.js.map +1 -1
  87. package/build-module/utils/is-raw-attribute.js +1 -1
  88. package/build-module/utils/is-raw-attribute.js.map +1 -1
  89. package/build-module/utils/on-sub-key.js +3 -1
  90. package/build-module/utils/on-sub-key.js.map +1 -1
  91. package/build-module/utils/replace-action.js +4 -2
  92. package/build-module/utils/replace-action.js.map +1 -1
  93. package/package.json +11 -11
  94. package/src/actions.js +62 -42
  95. package/src/batch/default-processor.js +1 -0
  96. package/src/{entities.js → entities.ts} +50 -21
  97. package/src/entity-provider.js +50 -44
  98. package/src/entity-types/attachment.ts +5 -5
  99. package/src/entity-types/{base-entity-types.ts → base-entity-records.ts} +5 -5
  100. package/src/entity-types/comment.ts +5 -5
  101. package/src/entity-types/helpers.ts +1 -1
  102. package/src/entity-types/index.ts +4 -4
  103. package/src/entity-types/menu-location.ts +5 -5
  104. package/src/entity-types/nav-menu-item.ts +10 -5
  105. package/src/entity-types/nav-menu.ts +5 -5
  106. package/src/entity-types/navigation-area.ts +5 -5
  107. package/src/entity-types/page.ts +5 -5
  108. package/src/entity-types/plugin.ts +10 -5
  109. package/src/entity-types/post.ts +5 -5
  110. package/src/entity-types/settings.ts +10 -5
  111. package/src/entity-types/sidebar.ts +6 -7
  112. package/src/entity-types/taxonomy.ts +5 -5
  113. package/src/entity-types/theme.ts +5 -5
  114. package/src/entity-types/type.ts +5 -5
  115. package/src/entity-types/user.ts +10 -5
  116. package/src/entity-types/widget-type.ts +5 -5
  117. package/src/entity-types/widget.ts +5 -5
  118. package/src/entity-types/wp-template-part.ts +5 -5
  119. package/src/entity-types/wp-template.ts +5 -5
  120. package/src/fetch/__experimental-fetch-link-suggestions.js +56 -20
  121. package/src/fetch/__experimental-fetch-url-data.js +1 -0
  122. package/src/fetch/test/__experimental-fetch-link-suggestions.js +39 -1
  123. package/src/hooks/use-entity-record.ts +19 -8
  124. package/src/hooks/use-entity-records.ts +23 -6
  125. package/src/hooks/use-query-select.ts +12 -7
  126. package/src/index.js +10 -15
  127. package/src/locks/test/selectors.js +4 -4
  128. package/src/queried-data/actions.js +4 -4
  129. package/src/queried-data/get-query-parts.js +5 -5
  130. package/src/queried-data/reducer.js +6 -6
  131. package/src/reducer.js +67 -24
  132. package/src/resolvers.js +39 -30
  133. package/src/{selectors.js → selectors.ts} +118 -57
  134. package/src/test/actions.js +138 -33
  135. package/src/test/entities.js +11 -11
  136. package/src/test/reducer.js +4 -4
  137. package/src/test/resolvers.js +5 -5
  138. package/src/test/selectors.js +22 -22
  139. package/src/types.ts +3 -0
  140. package/src/utils/conservative-map-item.js +1 -1
  141. package/src/utils/if-matching-action.js +4 -2
  142. package/src/utils/is-raw-attribute.js +1 -1
  143. package/src/utils/on-sub-key.js +3 -1
  144. package/src/utils/replace-action.js +4 -2
  145. package/src/utils/test/is-raw-attribute.js +4 -4
  146. package/build/entity-types/base-entity-types.js.map +0 -1
  147. package/build-module/entity-types/base-entity-types.js.map +0 -1
@@ -84,8 +84,9 @@ export const getUserQueryResults = createSelector((state, queryID) => {
84
84
  return map(queryResults, id => state.users.byId[id]);
85
85
  }, (state, queryID) => [state.users.queries[queryID], state.users.byId]);
86
86
  /**
87
- * Returns whether the entities for the give kind are loaded.
87
+ * Returns the loaded entities for the given kind.
88
88
  *
89
+ * @deprecated since WordPress 6.0. Use getEntitiesConfig instead
89
90
  * @param {Object} state Data state.
90
91
  * @param {string} kind Entity kind.
91
92
  *
@@ -93,21 +94,55 @@ export const getUserQueryResults = createSelector((state, queryID) => {
93
94
  */
94
95
 
95
96
  export function getEntitiesByKind(state, kind) {
97
+ deprecated("wp.data.select( 'core' ).getEntitiesByKind()", {
98
+ since: '6.0',
99
+ alternative: "wp.data.select( 'core' ).getEntitiesConfig()"
100
+ });
101
+ return getEntitiesConfig(state, kind);
102
+ }
103
+ /**
104
+ * Returns the loaded entities for the given kind.
105
+ *
106
+ * @param {Object} state Data state.
107
+ * @param {string} kind Entity kind.
108
+ *
109
+ * @return {Array<Object>} Array of entities with config matching kind.
110
+ */
111
+
112
+ export function getEntitiesConfig(state, kind) {
96
113
  return filter(state.entities.config, {
97
114
  kind
98
115
  });
99
116
  }
100
117
  /**
101
- * Returns the entity object given its kind and name.
118
+ * Returns the entity config given its kind and name.
102
119
  *
120
+ * @deprecated since WordPress 6.0. Use getEntityConfig instead
103
121
  * @param {Object} state Data state.
104
122
  * @param {string} kind Entity kind.
105
123
  * @param {string} name Entity name.
106
124
  *
107
- * @return {Object} Entity
125
+ * @return {Object} Entity config
108
126
  */
109
127
 
110
128
  export function getEntity(state, kind, name) {
129
+ deprecated("wp.data.select( 'core' ).getEntity()", {
130
+ since: '6.0',
131
+ alternative: "wp.data.select( 'core' ).getEntityConfig()"
132
+ });
133
+ return getEntityConfig(state, kind, name);
134
+ }
135
+ /**
136
+ * Returns the entity config given its kind and name.
137
+ *
138
+ * @param {Object} state Data state.
139
+ * @param {string} kind Entity kind.
140
+ * @param {string} name Entity name.
141
+ *
142
+ * @return {Object} Entity config
143
+ */
144
+
145
+ export function getEntityConfig(state, kind, name) {
111
146
  return find(state.entities.config, {
112
147
  kind,
113
148
  name
@@ -124,13 +159,13 @@ export function getEntity(state, kind, name) {
124
159
  * @param {number} key Record's key
125
160
  * @param {?Object} query Optional query.
126
161
  *
127
- * @return {Object?} Record.
162
+ * @return {Object|undefined} Record.
128
163
  */
129
164
 
130
165
  export const getEntityRecord = createSelector((state, kind, name, key, query) => {
131
166
  var _query$context, _queriedState$items$c;
132
167
 
133
- const queriedState = get(state.entities.data, [kind, name, 'queriedData']);
168
+ const queriedState = get(state.entities.records, [kind, name, 'queriedData']);
134
169
 
135
170
  if (!queriedState) {
136
171
  return undefined;
@@ -152,8 +187,10 @@ export const getEntityRecord = createSelector((state, kind, name, key, query) =>
152
187
  const item = (_queriedState$items$c = queriedState.items[context]) === null || _queriedState$items$c === void 0 ? void 0 : _queriedState$items$c[key];
153
188
 
154
189
  if (item && query._fields) {
190
+ var _getNormalizedCommaSe;
191
+
155
192
  const filteredItem = {};
156
- const fields = getNormalizedCommaSeparable(query._fields);
193
+ const fields = (_getNormalizedCommaSe = getNormalizedCommaSeparable(query._fields)) !== null && _getNormalizedCommaSe !== void 0 ? _getNormalizedCommaSe : [];
157
194
 
158
195
  for (let f = 0; f < fields.length; f++) {
159
196
  const field = fields[f].split('.');
@@ -169,10 +206,10 @@ export const getEntityRecord = createSelector((state, kind, name, key, query) =>
169
206
  var _query$context2;
170
207
 
171
208
  const context = (_query$context2 = query === null || query === void 0 ? void 0 : query.context) !== null && _query$context2 !== void 0 ? _query$context2 : 'default';
172
- return [get(state.entities.data, [kind, name, 'queriedData', 'items', context, recordId]), get(state.entities.data, [kind, name, 'queriedData', 'itemIsComplete', context, recordId])];
209
+ return [get(state.entities.records, [kind, name, 'queriedData', 'items', context, recordId]), get(state.entities.records, [kind, name, 'queriedData', 'itemIsComplete', context, recordId])];
173
210
  });
174
211
  /**
175
- * Returns the Entity's record object by key. Doesn't trigger a resolver nor requests the entity from the API if the entity record isn't available in the local state.
212
+ * Returns the Entity's record object by key. Doesn't trigger a resolver nor requests the entity records from the API if the entity record isn't available in the local state.
176
213
  *
177
214
  * @param {Object} state State tree
178
215
  * @param {string} kind Entity kind.
@@ -200,7 +237,7 @@ export function __experimentalGetEntityRecordNoResolver(state, kind, name, key)
200
237
  export const getRawEntityRecord = createSelector((state, kind, name, key) => {
201
238
  const record = getEntityRecord(state, kind, name, key);
202
239
  return record && Object.keys(record).reduce((accumulator, _key) => {
203
- if (isRawAttribute(getEntity(state, kind, name), _key)) {
240
+ if (isRawAttribute(getEntityConfig(state, kind, name), _key)) {
204
241
  // Because edits are the "raw" attribute values,
205
242
  // we return those from record selectors to make rendering,
206
243
  // comparisons, and joins with edits easier.
@@ -215,7 +252,7 @@ export const getRawEntityRecord = createSelector((state, kind, name, key) => {
215
252
  var _query$context3;
216
253
 
217
254
  const context = (_query$context3 = query === null || query === void 0 ? void 0 : query.context) !== null && _query$context3 !== void 0 ? _query$context3 : 'default';
218
- return [state.entities.config, get(state.entities.data, [kind, name, 'queriedData', 'items', context, recordId]), get(state.entities.data, [kind, name, 'queriedData', 'itemIsComplete', context, recordId])];
255
+ return [state.entities.config, get(state.entities.records, [kind, name, 'queriedData', 'items', context, recordId]), get(state.entities.records, [kind, name, 'queriedData', 'itemIsComplete', context, recordId])];
219
256
  });
220
257
  /**
221
258
  * Returns true if records have been received for the given set of parameters,
@@ -246,7 +283,7 @@ export function hasEntityRecords(state, kind, name, query) {
246
283
  export function getEntityRecords(state, kind, name, query) {
247
284
  // Queried data state is prepopulated for all known entities. If this is not
248
285
  // assigned for the given parameters, then it is known to not exist.
249
- const queriedState = get(state.entities.data, [kind, name, 'queriedData']);
286
+ const queriedState = get(state.entities.records, [kind, name, 'queriedData']);
250
287
 
251
288
  if (!queriedState) {
252
289
  return null;
@@ -265,27 +302,27 @@ export function getEntityRecords(state, kind, name, query) {
265
302
  export const __experimentalGetDirtyEntityRecords = createSelector(state => {
266
303
  const {
267
304
  entities: {
268
- data
305
+ records
269
306
  }
270
307
  } = state;
271
308
  const dirtyRecords = [];
272
- Object.keys(data).forEach(kind => {
273
- Object.keys(data[kind]).forEach(name => {
274
- const primaryKeys = Object.keys(data[kind][name].edits).filter(primaryKey => // The entity record must exist (not be deleted),
309
+ Object.keys(records).forEach(kind => {
310
+ Object.keys(records[kind]).forEach(name => {
311
+ const primaryKeys = Object.keys(records[kind][name].edits).filter(primaryKey => // The entity record must exist (not be deleted),
275
312
  // and it must have edits.
276
313
  getEntityRecord(state, kind, name, primaryKey) && hasEditsForEntityRecord(state, kind, name, primaryKey));
277
314
 
278
315
  if (primaryKeys.length) {
279
- const entity = getEntity(state, kind, name);
316
+ const entityConfig = getEntityConfig(state, kind, name);
280
317
  primaryKeys.forEach(primaryKey => {
281
- var _entity$getTitle;
318
+ var _entityConfig$getTitl;
282
319
 
283
320
  const entityRecord = getEditedEntityRecord(state, kind, name, primaryKey);
284
321
  dirtyRecords.push({
285
322
  // We avoid using primaryKey because it's transformed into a string
286
323
  // when it's used as an object key.
287
- key: entityRecord[entity.key || DEFAULT_ENTITY_KEY],
288
- title: (entity === null || entity === void 0 ? void 0 : (_entity$getTitle = entity.getTitle) === null || _entity$getTitle === void 0 ? void 0 : _entity$getTitle.call(entity, entityRecord)) || '',
324
+ key: entityRecord[entityConfig.key || DEFAULT_ENTITY_KEY],
325
+ title: (entityConfig === null || entityConfig === void 0 ? void 0 : (_entityConfig$getTitl = entityConfig.getTitle) === null || _entityConfig$getTitl === void 0 ? void 0 : _entityConfig$getTitl.call(entityConfig, entityRecord)) || '',
289
326
  name,
290
327
  kind
291
328
  });
@@ -294,7 +331,7 @@ export const __experimentalGetDirtyEntityRecords = createSelector(state => {
294
331
  });
295
332
  });
296
333
  return dirtyRecords;
297
- }, state => [state.entities.data]);
334
+ }, state => [state.entities.records]);
298
335
  /**
299
336
  * Returns the list of entities currently being saved.
300
337
  *
@@ -306,25 +343,25 @@ export const __experimentalGetDirtyEntityRecords = createSelector(state => {
306
343
  export const __experimentalGetEntitiesBeingSaved = createSelector(state => {
307
344
  const {
308
345
  entities: {
309
- data
346
+ records
310
347
  }
311
348
  } = state;
312
349
  const recordsBeingSaved = [];
313
- Object.keys(data).forEach(kind => {
314
- Object.keys(data[kind]).forEach(name => {
315
- const primaryKeys = Object.keys(data[kind][name].saving).filter(primaryKey => isSavingEntityRecord(state, kind, name, primaryKey));
350
+ Object.keys(records).forEach(kind => {
351
+ Object.keys(records[kind]).forEach(name => {
352
+ const primaryKeys = Object.keys(records[kind][name].saving).filter(primaryKey => isSavingEntityRecord(state, kind, name, primaryKey));
316
353
 
317
354
  if (primaryKeys.length) {
318
- const entity = getEntity(state, kind, name);
355
+ const entityConfig = getEntityConfig(state, kind, name);
319
356
  primaryKeys.forEach(primaryKey => {
320
- var _entity$getTitle2;
357
+ var _entityConfig$getTitl2;
321
358
 
322
359
  const entityRecord = getEditedEntityRecord(state, kind, name, primaryKey);
323
360
  recordsBeingSaved.push({
324
361
  // We avoid using primaryKey because it's transformed into a string
325
362
  // when it's used as an object key.
326
- key: entityRecord[entity.key || DEFAULT_ENTITY_KEY],
327
- title: (entity === null || entity === void 0 ? void 0 : (_entity$getTitle2 = entity.getTitle) === null || _entity$getTitle2 === void 0 ? void 0 : _entity$getTitle2.call(entity, entityRecord)) || '',
363
+ key: entityRecord[entityConfig.key || DEFAULT_ENTITY_KEY],
364
+ title: (entityConfig === null || entityConfig === void 0 ? void 0 : (_entityConfig$getTitl2 = entityConfig.getTitle) === null || _entityConfig$getTitl2 === void 0 ? void 0 : _entityConfig$getTitl2.call(entityConfig, entityRecord)) || '',
328
365
  name,
329
366
  kind
330
367
  });
@@ -333,7 +370,7 @@ export const __experimentalGetEntitiesBeingSaved = createSelector(state => {
333
370
  });
334
371
  });
335
372
  return recordsBeingSaved;
336
- }, state => [state.entities.data]);
373
+ }, state => [state.entities.records]);
337
374
  /**
338
375
  * Returns the specified entity record's edits.
339
376
  *
@@ -346,7 +383,7 @@ export const __experimentalGetEntitiesBeingSaved = createSelector(state => {
346
383
  */
347
384
 
348
385
  export function getEntityRecordEdits(state, kind, name, recordId) {
349
- return get(state.entities.data, [kind, name, 'edits', recordId]);
386
+ return get(state.entities.records, [kind, name, 'edits', recordId]);
350
387
  }
351
388
  /**
352
389
  * Returns the specified entity record's non transient edits.
@@ -366,7 +403,7 @@ export function getEntityRecordEdits(state, kind, name, recordId) {
366
403
  export const getEntityRecordNonTransientEdits = createSelector((state, kind, name, recordId) => {
367
404
  const {
368
405
  transientEdits
369
- } = getEntity(state, kind, name) || {};
406
+ } = getEntityConfig(state, kind, name) || {};
370
407
  const edits = getEntityRecordEdits(state, kind, name, recordId) || {};
371
408
 
372
409
  if (!transientEdits) {
@@ -380,15 +417,15 @@ export const getEntityRecordNonTransientEdits = createSelector((state, kind, nam
380
417
 
381
418
  return acc;
382
419
  }, {});
383
- }, (state, kind, name, recordId) => [state.entities.config, get(state.entities.data, [kind, name, 'edits', recordId])]);
420
+ }, (state, kind, name, recordId) => [state.entities.config, get(state.entities.records, [kind, name, 'edits', recordId])]);
384
421
  /**
385
422
  * Returns true if the specified entity record has edits,
386
423
  * and false otherwise.
387
424
  *
388
- * @param {Object} state State tree.
389
- * @param {string} kind Entity kind.
390
- * @param {string} name Entity name.
391
- * @param {number} recordId Record ID.
425
+ * @param {Object} state State tree.
426
+ * @param {string} kind Entity kind.
427
+ * @param {string} name Entity name.
428
+ * @param {number|string} recordId Record ID.
392
429
  *
393
430
  * @return {boolean} Whether the entity record has edits or not.
394
431
  */
@@ -399,10 +436,10 @@ export function hasEditsForEntityRecord(state, kind, name, recordId) {
399
436
  /**
400
437
  * Returns the specified entity record, merged with its edits.
401
438
  *
402
- * @param {Object} state State tree.
403
- * @param {string} kind Entity kind.
404
- * @param {string} name Entity name.
405
- * @param {number} recordId Record ID.
439
+ * @param {Object} state State tree.
440
+ * @param {string} kind Entity kind.
441
+ * @param {string} name Entity name.
442
+ * @param {number|string} recordId Record ID.
406
443
  *
407
444
  * @return {Object?} The entity record, merged with its edits.
408
445
  */
@@ -413,7 +450,7 @@ export const getEditedEntityRecord = createSelector((state, kind, name, recordId
413
450
  var _query$context4;
414
451
 
415
452
  const context = (_query$context4 = query === null || query === void 0 ? void 0 : query.context) !== null && _query$context4 !== void 0 ? _query$context4 : 'default';
416
- return [state.entities.config, get(state.entities.data, [kind, name, 'queriedData', 'items', context, recordId]), get(state.entities.data, [kind, name, 'queriedData', 'itemIsComplete', context, recordId]), get(state.entities.data, [kind, name, 'edits', recordId])];
453
+ return [state.entities.config, get(state.entities.records, [kind, name, 'queriedData', 'items', context, recordId]), get(state.entities.records, [kind, name, 'queriedData', 'itemIsComplete', context, recordId]), get(state.entities.records, [kind, name, 'edits', recordId])];
417
454
  });
418
455
  /**
419
456
  * Returns true if the specified entity record is autosaving, and false otherwise.
@@ -430,22 +467,22 @@ export function isAutosavingEntityRecord(state, kind, name, recordId) {
430
467
  const {
431
468
  pending,
432
469
  isAutosave
433
- } = get(state.entities.data, [kind, name, 'saving', recordId], {});
470
+ } = get(state.entities.records, [kind, name, 'saving', recordId], {});
434
471
  return Boolean(pending && isAutosave);
435
472
  }
436
473
  /**
437
474
  * Returns true if the specified entity record is saving, and false otherwise.
438
475
  *
439
- * @param {Object} state State tree.
440
- * @param {string} kind Entity kind.
441
- * @param {string} name Entity name.
442
- * @param {number} recordId Record ID.
476
+ * @param {Object} state State tree.
477
+ * @param {string} kind Entity kind.
478
+ * @param {string} name Entity name.
479
+ * @param {number|string} recordId Record ID.
443
480
  *
444
481
  * @return {boolean} Whether the entity record is saving or not.
445
482
  */
446
483
 
447
484
  export function isSavingEntityRecord(state, kind, name, recordId) {
448
- return get(state.entities.data, [kind, name, 'saving', recordId, 'pending'], false);
485
+ return get(state.entities.records, [kind, name, 'saving', recordId, 'pending'], false);
449
486
  }
450
487
  /**
451
488
  * Returns true if the specified entity record is deleting, and false otherwise.
@@ -459,7 +496,7 @@ export function isSavingEntityRecord(state, kind, name, recordId) {
459
496
  */
460
497
 
461
498
  export function isDeletingEntityRecord(state, kind, name, recordId) {
462
- return get(state.entities.data, [kind, name, 'deleting', recordId, 'pending'], false);
499
+ return get(state.entities.records, [kind, name, 'deleting', recordId, 'pending'], false);
463
500
  }
464
501
  /**
465
502
  * Returns the specified entity record's last save error.
@@ -473,7 +510,7 @@ export function isDeletingEntityRecord(state, kind, name, recordId) {
473
510
  */
474
511
 
475
512
  export function getLastEntitySaveError(state, kind, name, recordId) {
476
- return get(state.entities.data, [kind, name, 'saving', recordId, 'error']);
513
+ return get(state.entities.records, [kind, name, 'saving', recordId, 'error']);
477
514
  }
478
515
  /**
479
516
  * Returns the specified entity record's last delete error.
@@ -487,7 +524,7 @@ export function getLastEntitySaveError(state, kind, name, recordId) {
487
524
  */
488
525
 
489
526
  export function getLastEntityDeleteError(state, kind, name, recordId) {
490
- return get(state.entities.data, [kind, name, 'deleting', recordId, 'error']);
527
+ return get(state.entities.records, [kind, name, 'deleting', recordId, 'error']);
491
528
  }
492
529
  /**
493
530
  * Returns the current undo offset for the
@@ -662,13 +699,13 @@ export function canUser(state, action, resource, id) {
662
699
  */
663
700
 
664
701
  export function canUserEditEntityRecord(state, kind, name, recordId) {
665
- const entity = getEntity(state, kind, name);
702
+ const entityConfig = getEntityConfig(state, kind, name);
666
703
 
667
- if (!entity) {
704
+ if (!entityConfig) {
668
705
  return false;
669
706
  }
670
707
 
671
- const resource = entity.__unstable_rest_base;
708
+ const resource = entityConfig.__unstable_rest_base;
672
709
  return canUser(state, 'update', resource, recordId);
673
710
  }
674
711
  /**
@@ -767,7 +804,7 @@ export function __experimentalGetTemplateForLink(state, link) {
767
804
  *
768
805
  * @param {Object} state Editor state.
769
806
  *
770
- * @return {Object?} The Global Styles object.
807
+ * @return {Object|null} The Global Styles object.
771
808
  */
772
809
 
773
810
  export function __experimentalGetCurrentThemeBaseGlobalStyles(state) {
@@ -784,7 +821,7 @@ export function __experimentalGetCurrentThemeBaseGlobalStyles(state) {
784
821
  *
785
822
  * @param {Object} state Data state.
786
823
  *
787
- * @return {string} The current global styles ID.
824
+ * @return {string|null} The current global styles ID.
788
825
  */
789
826
 
790
827
  export function __experimentalGetCurrentThemeGlobalStylesVariations(state) {
@@ -796,4 +833,26 @@ export function __experimentalGetCurrentThemeGlobalStylesVariations(state) {
796
833
 
797
834
  return state.themeGlobalStyleVariations[currentTheme.stylesheet];
798
835
  }
836
+ /**
837
+ * Retrieve the list of registered block patterns.
838
+ *
839
+ * @param {Object} state Data state.
840
+ *
841
+ * @return {Array} Block pattern list.
842
+ */
843
+
844
+ export function getBlockPatterns(state) {
845
+ return state.blockPatterns;
846
+ }
847
+ /**
848
+ * Retrieve the list of registered block pattern categories.
849
+ *
850
+ * @param {Object} state Data state.
851
+ *
852
+ * @return {Array} Block pattern category list.
853
+ */
854
+
855
+ export function getBlockPatternCategories(state) {
856
+ return state.blockPatternCategories;
857
+ }
799
858
  //# sourceMappingURL=selectors.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/selectors.js"],"names":["createSelector","set","map","find","get","filter","compact","createRegistrySelector","addQueryArgs","deprecated","STORE_NAME","getQueriedItems","DEFAULT_ENTITY_KEY","getNormalizedCommaSeparable","isRawAttribute","EMPTY_OBJECT","isRequestingEmbedPreview","select","state","url","isResolving","getAuthors","query","since","alternative","path","getUserQueryResults","getCurrentUser","currentUser","queryID","queryResults","users","queries","id","byId","getEntitiesByKind","kind","entities","config","getEntity","name","getEntityRecord","key","queriedState","data","undefined","context","itemIsComplete","items","item","_fields","filteredItem","fields","f","length","field","split","value","recordId","__experimentalGetEntityRecordNoResolver","getRawEntityRecord","record","Object","keys","reduce","accumulator","_key","hasEntityRecords","Array","isArray","getEntityRecords","__experimentalGetDirtyEntityRecords","dirtyRecords","forEach","primaryKeys","edits","primaryKey","hasEditsForEntityRecord","entity","entityRecord","getEditedEntityRecord","push","title","getTitle","__experimentalGetEntitiesBeingSaved","recordsBeingSaved","saving","isSavingEntityRecord","getEntityRecordEdits","getEntityRecordNonTransientEdits","transientEdits","acc","isAutosavingEntityRecord","pending","isAutosave","Boolean","isDeletingEntityRecord","getLastEntitySaveError","getLastEntityDeleteError","getCurrentUndoOffset","undo","offset","getUndoEdit","getRedoEdit","hasUndo","hasRedo","getCurrentTheme","currentTheme","__experimentalGetCurrentGlobalStylesId","currentGlobalStylesId","getThemeSupports","theme_supports","getEmbedPreview","embedPreviews","isPreviewEmbedFallback","preview","oEmbedLinkCheck","html","canUser","action","resource","join","canUserEditEntityRecord","__unstable_rest_base","getAutosaves","postType","postId","autosaves","getAutosave","authorId","author","hasFetchedAutosaves","hasFinishedResolution","getReferenceByDistinctEdits","flattenedUndo","__experimentalGetTemplateForLink","link","records","template","__experimentalGetCurrentThemeBaseGlobalStyles","themeBaseGlobalStyles","stylesheet","__experimentalGetCurrentThemeGlobalStylesVariations","themeGlobalStyleVariations"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport createSelector from 'rememo';\nimport { set, map, find, get, filter, compact } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { createRegistrySelector } from '@wordpress/data';\nimport { addQueryArgs } from '@wordpress/url';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport { STORE_NAME } from './name';\nimport { getQueriedItems } from './queried-data';\nimport { DEFAULT_ENTITY_KEY } from './entities';\nimport { getNormalizedCommaSeparable, isRawAttribute } from './utils';\n\n/**\n * Shared reference to an empty object for cases where it is important to avoid\n * returning a new object reference on every invocation, as in a connected or\n * other pure component which performs `shouldComponentUpdate` check on props.\n * This should be used as a last resort, since the normalized data should be\n * maintained by the reducer result in state.\n */\nconst EMPTY_OBJECT = {};\n\n/**\n * Returns true if a request is in progress for embed preview data, or false\n * otherwise.\n *\n * @param {Object} state Data state.\n * @param {string} url URL the preview would be for.\n *\n * @return {boolean} Whether a request is in progress for an embed preview.\n */\nexport const isRequestingEmbedPreview = createRegistrySelector(\n\t( select ) => ( state, url ) => {\n\t\treturn select( STORE_NAME ).isResolving( 'getEmbedPreview', [ url ] );\n\t}\n);\n\n/**\n * Returns all available authors.\n *\n * @deprecated since 11.3. Callers should use `select( 'core' ).getUsers({ who: 'authors' })` instead.\n *\n * @param {Object} state Data state.\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request.\n * @return {Array} Authors list.\n */\nexport function getAuthors( state, query ) {\n\tdeprecated( \"select( 'core' ).getAuthors()\", {\n\t\tsince: '5.9',\n\t\talternative: \"select( 'core' ).getUsers({ who: 'authors' })\",\n\t} );\n\n\tconst path = addQueryArgs(\n\t\t'/wp/v2/users/?who=authors&per_page=100',\n\t\tquery\n\t);\n\treturn getUserQueryResults( state, path );\n}\n\n/**\n * Returns the current user.\n *\n * @param {Object} state Data state.\n *\n * @return {Object} Current user object.\n */\nexport function getCurrentUser( state ) {\n\treturn state.currentUser;\n}\n\n/**\n * Returns all the users returned by a query ID.\n *\n * @param {Object} state Data state.\n * @param {string} queryID Query ID.\n *\n * @return {Array} Users list.\n */\nexport const getUserQueryResults = createSelector(\n\t( state, queryID ) => {\n\t\tconst queryResults = state.users.queries[ queryID ];\n\n\t\treturn map( queryResults, ( id ) => state.users.byId[ id ] );\n\t},\n\t( state, queryID ) => [ state.users.queries[ queryID ], state.users.byId ]\n);\n\n/**\n * Returns whether the entities for the give kind are loaded.\n *\n * @param {Object} state Data state.\n * @param {string} kind Entity kind.\n *\n * @return {Array<Object>} Array of entities with config matching kind.\n */\nexport function getEntitiesByKind( state, kind ) {\n\treturn filter( state.entities.config, { kind } );\n}\n\n/**\n * Returns the entity object given its kind and name.\n *\n * @param {Object} state Data state.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n *\n * @return {Object} Entity\n */\nexport function getEntity( state, kind, name ) {\n\treturn find( state.entities.config, { kind, name } );\n}\n\n/**\n * Returns the Entity's record object by key. Returns `null` if the value is not\n * yet received, undefined if the value entity is known to not exist, or the\n * entity object if it exists and is received.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} key Record's key\n * @param {?Object} query Optional query.\n *\n * @return {Object?} Record.\n */\nexport const getEntityRecord = createSelector(\n\t( state, kind, name, key, query ) => {\n\t\tconst queriedState = get( state.entities.data, [\n\t\t\tkind,\n\t\t\tname,\n\t\t\t'queriedData',\n\t\t] );\n\t\tif ( ! queriedState ) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst context = query?.context ?? 'default';\n\n\t\tif ( query === undefined ) {\n\t\t\t// If expecting a complete item, validate that completeness.\n\t\t\tif ( ! queriedState.itemIsComplete[ context ]?.[ key ] ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn queriedState.items[ context ][ key ];\n\t\t}\n\n\t\tconst item = queriedState.items[ context ]?.[ key ];\n\t\tif ( item && query._fields ) {\n\t\t\tconst filteredItem = {};\n\t\t\tconst fields = getNormalizedCommaSeparable( query._fields );\n\t\t\tfor ( let f = 0; f < fields.length; f++ ) {\n\t\t\t\tconst field = fields[ f ].split( '.' );\n\t\t\t\tconst value = get( item, field );\n\t\t\t\tset( filteredItem, field, value );\n\t\t\t}\n\t\t\treturn filteredItem;\n\t\t}\n\n\t\treturn item;\n\t},\n\t( state, kind, name, recordId, query ) => {\n\t\tconst context = query?.context ?? 'default';\n\t\treturn [\n\t\t\tget( state.entities.data, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'items',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t\tget( state.entities.data, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'itemIsComplete',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t];\n\t}\n);\n\n/**\n * Returns the Entity's record object by key. Doesn't trigger a resolver nor requests the entity from the API if the entity record isn't available in the local state.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} key Record's key\n *\n * @return {Object|null} Record.\n */\nexport function __experimentalGetEntityRecordNoResolver(\n\tstate,\n\tkind,\n\tname,\n\tkey\n) {\n\treturn getEntityRecord( state, kind, name, key );\n}\n\n/**\n * Returns the entity's record object by key,\n * with its attributes mapped to their raw values.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} key Record's key.\n *\n * @return {Object?} Object with the entity's raw attributes.\n */\nexport const getRawEntityRecord = createSelector(\n\t( state, kind, name, key ) => {\n\t\tconst record = getEntityRecord( state, kind, name, key );\n\t\treturn (\n\t\t\trecord &&\n\t\t\tObject.keys( record ).reduce( ( accumulator, _key ) => {\n\t\t\t\tif ( isRawAttribute( getEntity( state, kind, name ), _key ) ) {\n\t\t\t\t\t// Because edits are the \"raw\" attribute values,\n\t\t\t\t\t// we return those from record selectors to make rendering,\n\t\t\t\t\t// comparisons, and joins with edits easier.\n\t\t\t\t\taccumulator[ _key ] = get(\n\t\t\t\t\t\trecord[ _key ],\n\t\t\t\t\t\t'raw',\n\t\t\t\t\t\trecord[ _key ]\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\taccumulator[ _key ] = record[ _key ];\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t}, {} )\n\t\t);\n\t},\n\t( state, kind, name, recordId, query ) => {\n\t\tconst context = query?.context ?? 'default';\n\t\treturn [\n\t\t\tstate.entities.config,\n\t\t\tget( state.entities.data, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'items',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t\tget( state.entities.data, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'itemIsComplete',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t];\n\t}\n);\n\n/**\n * Returns true if records have been received for the given set of parameters,\n * or false otherwise.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {?Object} query Optional terms query.\n *\n * @return {boolean} Whether entity records have been received.\n */\nexport function hasEntityRecords( state, kind, name, query ) {\n\treturn Array.isArray( getEntityRecords( state, kind, name, query ) );\n}\n\n/**\n * Returns the Entity's records.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {?Object} query Optional terms query.\n *\n * @return {?Array} Records.\n */\nexport function getEntityRecords( state, kind, name, query ) {\n\t// Queried data state is prepopulated for all known entities. If this is not\n\t// assigned for the given parameters, then it is known to not exist.\n\tconst queriedState = get( state.entities.data, [\n\t\tkind,\n\t\tname,\n\t\t'queriedData',\n\t] );\n\tif ( ! queriedState ) {\n\t\treturn null;\n\t}\n\treturn getQueriedItems( queriedState, query );\n}\n\n/**\n * Returns the list of dirty entity records.\n *\n * @param {Object} state State tree.\n *\n * @return {[{ title: string, key: string, name: string, kind: string }]} The list of updated records\n */\nexport const __experimentalGetDirtyEntityRecords = createSelector(\n\t( state ) => {\n\t\tconst {\n\t\t\tentities: { data },\n\t\t} = state;\n\t\tconst dirtyRecords = [];\n\t\tObject.keys( data ).forEach( ( kind ) => {\n\t\t\tObject.keys( data[ kind ] ).forEach( ( name ) => {\n\t\t\t\tconst primaryKeys = Object.keys(\n\t\t\t\t\tdata[ kind ][ name ].edits\n\t\t\t\t).filter(\n\t\t\t\t\t( primaryKey ) =>\n\t\t\t\t\t\t// The entity record must exist (not be deleted),\n\t\t\t\t\t\t// and it must have edits.\n\t\t\t\t\t\tgetEntityRecord( state, kind, name, primaryKey ) &&\n\t\t\t\t\t\thasEditsForEntityRecord( state, kind, name, primaryKey )\n\t\t\t\t);\n\n\t\t\t\tif ( primaryKeys.length ) {\n\t\t\t\t\tconst entity = getEntity( state, kind, name );\n\t\t\t\t\tprimaryKeys.forEach( ( primaryKey ) => {\n\t\t\t\t\t\tconst entityRecord = getEditedEntityRecord(\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tprimaryKey\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdirtyRecords.push( {\n\t\t\t\t\t\t\t// We avoid using primaryKey because it's transformed into a string\n\t\t\t\t\t\t\t// when it's used as an object key.\n\t\t\t\t\t\t\tkey:\n\t\t\t\t\t\t\t\tentityRecord[\n\t\t\t\t\t\t\t\t\tentity.key || DEFAULT_ENTITY_KEY\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\ttitle: entity?.getTitle?.( entityRecord ) || '',\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\n\t\treturn dirtyRecords;\n\t},\n\t( state ) => [ state.entities.data ]\n);\n\n/**\n * Returns the list of entities currently being saved.\n *\n * @param {Object} state State tree.\n *\n * @return {[{ title: string, key: string, name: string, kind: string }]} The list of records being saved.\n */\nexport const __experimentalGetEntitiesBeingSaved = createSelector(\n\t( state ) => {\n\t\tconst {\n\t\t\tentities: { data },\n\t\t} = state;\n\t\tconst recordsBeingSaved = [];\n\t\tObject.keys( data ).forEach( ( kind ) => {\n\t\t\tObject.keys( data[ kind ] ).forEach( ( name ) => {\n\t\t\t\tconst primaryKeys = Object.keys(\n\t\t\t\t\tdata[ kind ][ name ].saving\n\t\t\t\t).filter( ( primaryKey ) =>\n\t\t\t\t\tisSavingEntityRecord( state, kind, name, primaryKey )\n\t\t\t\t);\n\n\t\t\t\tif ( primaryKeys.length ) {\n\t\t\t\t\tconst entity = getEntity( state, kind, name );\n\t\t\t\t\tprimaryKeys.forEach( ( primaryKey ) => {\n\t\t\t\t\t\tconst entityRecord = getEditedEntityRecord(\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tprimaryKey\n\t\t\t\t\t\t);\n\t\t\t\t\t\trecordsBeingSaved.push( {\n\t\t\t\t\t\t\t// We avoid using primaryKey because it's transformed into a string\n\t\t\t\t\t\t\t// when it's used as an object key.\n\t\t\t\t\t\t\tkey:\n\t\t\t\t\t\t\t\tentityRecord[\n\t\t\t\t\t\t\t\t\tentity.key || DEFAULT_ENTITY_KEY\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\ttitle: entity?.getTitle?.( entityRecord ) || '',\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t\treturn recordsBeingSaved;\n\t},\n\t( state ) => [ state.entities.data ]\n);\n\n/**\n * Returns the specified entity record's edits.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's edits.\n */\nexport function getEntityRecordEdits( state, kind, name, recordId ) {\n\treturn get( state.entities.data, [ kind, name, 'edits', recordId ] );\n}\n\n/**\n * Returns the specified entity record's non transient edits.\n *\n * Transient edits don't create an undo level, and\n * are not considered for change detection.\n * They are defined in the entity's config.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's non transient edits.\n */\nexport const getEntityRecordNonTransientEdits = createSelector(\n\t( state, kind, name, recordId ) => {\n\t\tconst { transientEdits } = getEntity( state, kind, name ) || {};\n\t\tconst edits = getEntityRecordEdits( state, kind, name, recordId ) || {};\n\t\tif ( ! transientEdits ) {\n\t\t\treturn edits;\n\t\t}\n\t\treturn Object.keys( edits ).reduce( ( acc, key ) => {\n\t\t\tif ( ! transientEdits[ key ] ) {\n\t\t\t\tacc[ key ] = edits[ key ];\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, {} );\n\t},\n\t( state, kind, name, recordId ) => [\n\t\tstate.entities.config,\n\t\tget( state.entities.data, [ kind, name, 'edits', recordId ] ),\n\t]\n);\n\n/**\n * Returns true if the specified entity record has edits,\n * and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {boolean} Whether the entity record has edits or not.\n */\nexport function hasEditsForEntityRecord( state, kind, name, recordId ) {\n\treturn (\n\t\tisSavingEntityRecord( state, kind, name, recordId ) ||\n\t\tObject.keys(\n\t\t\tgetEntityRecordNonTransientEdits( state, kind, name, recordId )\n\t\t).length > 0\n\t);\n}\n\n/**\n * Returns the specified entity record, merged with its edits.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record, merged with its edits.\n */\nexport const getEditedEntityRecord = createSelector(\n\t( state, kind, name, recordId ) => ( {\n\t\t...getRawEntityRecord( state, kind, name, recordId ),\n\t\t...getEntityRecordEdits( state, kind, name, recordId ),\n\t} ),\n\t( state, kind, name, recordId, query ) => {\n\t\tconst context = query?.context ?? 'default';\n\t\treturn [\n\t\t\tstate.entities.config,\n\t\t\tget( state.entities.data, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'items',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t\tget( state.entities.data, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'itemIsComplete',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t\tget( state.entities.data, [ kind, name, 'edits', recordId ] ),\n\t\t];\n\t}\n);\n\n/**\n * Returns true if the specified entity record is autosaving, and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {boolean} Whether the entity record is autosaving or not.\n */\nexport function isAutosavingEntityRecord( state, kind, name, recordId ) {\n\tconst { pending, isAutosave } = get(\n\t\tstate.entities.data,\n\t\t[ kind, name, 'saving', recordId ],\n\t\t{}\n\t);\n\treturn Boolean( pending && isAutosave );\n}\n\n/**\n * Returns true if the specified entity record is saving, and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {boolean} Whether the entity record is saving or not.\n */\nexport function isSavingEntityRecord( state, kind, name, recordId ) {\n\treturn get(\n\t\tstate.entities.data,\n\t\t[ kind, name, 'saving', recordId, 'pending' ],\n\t\tfalse\n\t);\n}\n\n/**\n * Returns true if the specified entity record is deleting, and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {boolean} Whether the entity record is deleting or not.\n */\nexport function isDeletingEntityRecord( state, kind, name, recordId ) {\n\treturn get(\n\t\tstate.entities.data,\n\t\t[ kind, name, 'deleting', recordId, 'pending' ],\n\t\tfalse\n\t);\n}\n\n/**\n * Returns the specified entity record's last save error.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's save error.\n */\nexport function getLastEntitySaveError( state, kind, name, recordId ) {\n\treturn get( state.entities.data, [\n\t\tkind,\n\t\tname,\n\t\t'saving',\n\t\trecordId,\n\t\t'error',\n\t] );\n}\n\n/**\n * Returns the specified entity record's last delete error.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's save error.\n */\nexport function getLastEntityDeleteError( state, kind, name, recordId ) {\n\treturn get( state.entities.data, [\n\t\tkind,\n\t\tname,\n\t\t'deleting',\n\t\trecordId,\n\t\t'error',\n\t] );\n}\n\n/**\n * Returns the current undo offset for the\n * entity records edits history. The offset\n * represents how many items from the end\n * of the history stack we are at. 0 is the\n * last edit, -1 is the second last, and so on.\n *\n * @param {Object} state State tree.\n *\n * @return {number} The current undo offset.\n */\nfunction getCurrentUndoOffset( state ) {\n\treturn state.undo.offset;\n}\n\n/**\n * Returns the previous edit from the current undo offset\n * for the entity records edits history, if any.\n *\n * @param {Object} state State tree.\n *\n * @return {Object?} The edit.\n */\nexport function getUndoEdit( state ) {\n\treturn state.undo[ state.undo.length - 2 + getCurrentUndoOffset( state ) ];\n}\n\n/**\n * Returns the next edit from the current undo offset\n * for the entity records edits history, if any.\n *\n * @param {Object} state State tree.\n *\n * @return {Object?} The edit.\n */\nexport function getRedoEdit( state ) {\n\treturn state.undo[ state.undo.length + getCurrentUndoOffset( state ) ];\n}\n\n/**\n * Returns true if there is a previous edit from the current undo offset\n * for the entity records edits history, and false otherwise.\n *\n * @param {Object} state State tree.\n *\n * @return {boolean} Whether there is a previous edit or not.\n */\nexport function hasUndo( state ) {\n\treturn Boolean( getUndoEdit( state ) );\n}\n\n/**\n * Returns true if there is a next edit from the current undo offset\n * for the entity records edits history, and false otherwise.\n *\n * @param {Object} state State tree.\n *\n * @return {boolean} Whether there is a next edit or not.\n */\nexport function hasRedo( state ) {\n\treturn Boolean( getRedoEdit( state ) );\n}\n\n/**\n * Return the current theme.\n *\n * @param {Object} state Data state.\n *\n * @return {Object} The current theme.\n */\nexport function getCurrentTheme( state ) {\n\treturn getEntityRecord( state, 'root', 'theme', state.currentTheme );\n}\n\n/**\n * Return the ID of the current global styles object.\n *\n * @param {Object} state Data state.\n *\n * @return {string} The current global styles ID.\n */\nexport function __experimentalGetCurrentGlobalStylesId( state ) {\n\treturn state.currentGlobalStylesId;\n}\n\n/**\n * Return theme supports data in the index.\n *\n * @param {Object} state Data state.\n *\n * @return {*} Index data.\n */\nexport function getThemeSupports( state ) {\n\treturn getCurrentTheme( state )?.theme_supports ?? EMPTY_OBJECT;\n}\n\n/**\n * Returns the embed preview for the given URL.\n *\n * @param {Object} state Data state.\n * @param {string} url Embedded URL.\n *\n * @return {*} Undefined if the preview has not been fetched, otherwise, the preview fetched from the embed preview API.\n */\nexport function getEmbedPreview( state, url ) {\n\treturn state.embedPreviews[ url ];\n}\n\n/**\n * Determines if the returned preview is an oEmbed link fallback.\n *\n * WordPress can be configured to return a simple link to a URL if it is not embeddable.\n * We need to be able to determine if a URL is embeddable or not, based on what we\n * get back from the oEmbed preview API.\n *\n * @param {Object} state Data state.\n * @param {string} url Embedded URL.\n *\n * @return {boolean} Is the preview for the URL an oEmbed link fallback.\n */\nexport function isPreviewEmbedFallback( state, url ) {\n\tconst preview = state.embedPreviews[ url ];\n\tconst oEmbedLinkCheck = '<a href=\"' + url + '\">' + url + '</a>';\n\tif ( ! preview ) {\n\t\treturn false;\n\t}\n\treturn preview.html === oEmbedLinkCheck;\n}\n\n/**\n * Returns whether the current user can perform the given action on the given\n * REST resource.\n *\n * Calling this may trigger an OPTIONS request to the REST API via the\n * `canUser()` resolver.\n *\n * https://developer.wordpress.org/rest-api/reference/\n *\n * @param {Object} state Data state.\n * @param {string} action Action to check. One of: 'create', 'read', 'update', 'delete'.\n * @param {string} resource REST resource to check, e.g. 'media' or 'posts'.\n * @param {string=} id Optional ID of the rest resource to check.\n *\n * @return {boolean|undefined} Whether or not the user can perform the action,\n * or `undefined` if the OPTIONS request is still being made.\n */\nexport function canUser( state, action, resource, id ) {\n\tconst key = compact( [ action, resource, id ] ).join( '/' );\n\treturn get( state, [ 'userPermissions', key ] );\n}\n\n/**\n * Returns whether the current user can edit the given entity.\n *\n * Calling this may trigger an OPTIONS request to the REST API via the\n * `canUser()` resolver.\n *\n * https://developer.wordpress.org/rest-api/reference/\n *\n * @param {Object} state Data state.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {string} recordId Record's id.\n * @return {boolean|undefined} Whether or not the user can edit,\n * or `undefined` if the OPTIONS request is still being made.\n */\nexport function canUserEditEntityRecord( state, kind, name, recordId ) {\n\tconst entity = getEntity( state, kind, name );\n\tif ( ! entity ) {\n\t\treturn false;\n\t}\n\tconst resource = entity.__unstable_rest_base;\n\n\treturn canUser( state, 'update', resource, recordId );\n}\n\n/**\n * Returns the latest autosaves for the post.\n *\n * May return multiple autosaves since the backend stores one autosave per\n * author for each post.\n *\n * @param {Object} state State tree.\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n *\n * @return {?Array} An array of autosaves for the post, or undefined if there is none.\n */\nexport function getAutosaves( state, postType, postId ) {\n\treturn state.autosaves[ postId ];\n}\n\n/**\n * Returns the autosave for the post and author.\n *\n * @param {Object} state State tree.\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n * @param {number} authorId The id of the author.\n *\n * @return {?Object} The autosave for the post and author.\n */\nexport function getAutosave( state, postType, postId, authorId ) {\n\tif ( authorId === undefined ) {\n\t\treturn;\n\t}\n\n\tconst autosaves = state.autosaves[ postId ];\n\treturn find( autosaves, { author: authorId } );\n}\n\n/**\n * Returns true if the REST request for autosaves has completed.\n *\n * @param {Object} state State tree.\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n *\n * @return {boolean} True if the REST request was completed. False otherwise.\n */\nexport const hasFetchedAutosaves = createRegistrySelector(\n\t( select ) => ( state, postType, postId ) => {\n\t\treturn select( STORE_NAME ).hasFinishedResolution( 'getAutosaves', [\n\t\t\tpostType,\n\t\t\tpostId,\n\t\t] );\n\t}\n);\n\n/**\n * Returns a new reference when edited values have changed. This is useful in\n * inferring where an edit has been made between states by comparison of the\n * return values using strict equality.\n *\n * @example\n *\n * ```\n * const hasEditOccurred = (\n * getReferenceByDistinctEdits( beforeState ) !==\n * getReferenceByDistinctEdits( afterState )\n * );\n * ```\n *\n * @param {Object} state Editor state.\n *\n * @return {*} A value whose reference will change only when an edit occurs.\n */\nexport const getReferenceByDistinctEdits = createSelector(\n\t() => [],\n\t( state ) => [\n\t\tstate.undo.length,\n\t\tstate.undo.offset,\n\t\tstate.undo.flattenedUndo,\n\t]\n);\n\n/**\n * Retrieve the frontend template used for a given link.\n *\n * @param {Object} state Editor state.\n * @param {string} link Link.\n *\n * @return {Object?} The template record.\n */\nexport function __experimentalGetTemplateForLink( state, link ) {\n\tconst records = getEntityRecords( state, 'postType', 'wp_template', {\n\t\t'find-template': link,\n\t} );\n\n\tconst template = records?.length ? records[ 0 ] : null;\n\tif ( template ) {\n\t\treturn getEditedEntityRecord(\n\t\t\tstate,\n\t\t\t'postType',\n\t\t\t'wp_template',\n\t\t\ttemplate.id\n\t\t);\n\t}\n\treturn template;\n}\n\n/**\n * Retrieve the current theme's base global styles\n *\n * @param {Object} state Editor state.\n *\n * @return {Object?} The Global Styles object.\n */\nexport function __experimentalGetCurrentThemeBaseGlobalStyles( state ) {\n\tconst currentTheme = getCurrentTheme( state );\n\tif ( ! currentTheme ) {\n\t\treturn null;\n\t}\n\treturn state.themeBaseGlobalStyles[ currentTheme.stylesheet ];\n}\n\n/**\n * Return the ID of the current global styles object.\n *\n * @param {Object} state Data state.\n *\n * @return {string} The current global styles ID.\n */\nexport function __experimentalGetCurrentThemeGlobalStylesVariations( state ) {\n\tconst currentTheme = getCurrentTheme( state );\n\tif ( ! currentTheme ) {\n\t\treturn null;\n\t}\n\treturn state.themeGlobalStyleVariations[ currentTheme.stylesheet ];\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/selectors.ts"],"names":["createSelector","set","map","find","get","filter","compact","createRegistrySelector","addQueryArgs","deprecated","STORE_NAME","getQueriedItems","DEFAULT_ENTITY_KEY","getNormalizedCommaSeparable","isRawAttribute","EMPTY_OBJECT","isRequestingEmbedPreview","select","state","url","isResolving","getAuthors","query","since","alternative","path","getUserQueryResults","getCurrentUser","currentUser","queryID","queryResults","users","queries","id","byId","getEntitiesByKind","kind","getEntitiesConfig","entities","config","getEntity","name","getEntityConfig","getEntityRecord","key","queriedState","records","undefined","context","itemIsComplete","items","item","_fields","filteredItem","fields","f","length","field","split","value","recordId","__experimentalGetEntityRecordNoResolver","getRawEntityRecord","record","Object","keys","reduce","accumulator","_key","hasEntityRecords","Array","isArray","getEntityRecords","__experimentalGetDirtyEntityRecords","dirtyRecords","forEach","primaryKeys","edits","primaryKey","hasEditsForEntityRecord","entityConfig","entityRecord","getEditedEntityRecord","push","title","getTitle","__experimentalGetEntitiesBeingSaved","recordsBeingSaved","saving","isSavingEntityRecord","getEntityRecordEdits","getEntityRecordNonTransientEdits","transientEdits","acc","isAutosavingEntityRecord","pending","isAutosave","Boolean","isDeletingEntityRecord","getLastEntitySaveError","getLastEntityDeleteError","getCurrentUndoOffset","undo","offset","getUndoEdit","getRedoEdit","hasUndo","hasRedo","getCurrentTheme","currentTheme","__experimentalGetCurrentGlobalStylesId","currentGlobalStylesId","getThemeSupports","theme_supports","getEmbedPreview","embedPreviews","isPreviewEmbedFallback","preview","oEmbedLinkCheck","html","canUser","action","resource","join","canUserEditEntityRecord","__unstable_rest_base","getAutosaves","postType","postId","autosaves","getAutosave","authorId","author","hasFetchedAutosaves","hasFinishedResolution","getReferenceByDistinctEdits","flattenedUndo","__experimentalGetTemplateForLink","link","template","__experimentalGetCurrentThemeBaseGlobalStyles","themeBaseGlobalStyles","stylesheet","__experimentalGetCurrentThemeGlobalStylesVariations","themeGlobalStyleVariations","getBlockPatterns","blockPatterns","getBlockPatternCategories","blockPatternCategories"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport createSelector from 'rememo';\nimport { set, map, find, get, filter, compact } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { createRegistrySelector } from '@wordpress/data';\nimport { addQueryArgs } from '@wordpress/url';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport { STORE_NAME } from './name';\nimport { getQueriedItems } from './queried-data';\nimport { DEFAULT_ENTITY_KEY } from './entities';\nimport { getNormalizedCommaSeparable, isRawAttribute } from './utils';\n\n/**\n * Shared reference to an empty object for cases where it is important to avoid\n * returning a new object reference on every invocation, as in a connected or\n * other pure component which performs `shouldComponentUpdate` check on props.\n * This should be used as a last resort, since the normalized data should be\n * maintained by the reducer result in state.\n */\nconst EMPTY_OBJECT = {};\n\n/**\n * Returns true if a request is in progress for embed preview data, or false\n * otherwise.\n *\n * @param {Object} state Data state.\n * @param {string} url URL the preview would be for.\n *\n * @return {boolean} Whether a request is in progress for an embed preview.\n */\nexport const isRequestingEmbedPreview = createRegistrySelector(\n\t( select ) => ( state, url ) => {\n\t\treturn select( STORE_NAME ).isResolving( 'getEmbedPreview', [ url ] );\n\t}\n);\n\n/**\n * Returns all available authors.\n *\n * @deprecated since 11.3. Callers should use `select( 'core' ).getUsers({ who: 'authors' })` instead.\n *\n * @param {Object} state Data state.\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request.\n * @return {Array} Authors list.\n */\nexport function getAuthors( state, query ) {\n\tdeprecated( \"select( 'core' ).getAuthors()\", {\n\t\tsince: '5.9',\n\t\talternative: \"select( 'core' ).getUsers({ who: 'authors' })\",\n\t} );\n\n\tconst path = addQueryArgs(\n\t\t'/wp/v2/users/?who=authors&per_page=100',\n\t\tquery\n\t);\n\treturn getUserQueryResults( state, path );\n}\n\n/**\n * Returns the current user.\n *\n * @param {Object} state Data state.\n *\n * @return {Object} Current user object.\n */\nexport function getCurrentUser( state ) {\n\treturn state.currentUser;\n}\n\n/**\n * Returns all the users returned by a query ID.\n *\n * @param {Object} state Data state.\n * @param {string} queryID Query ID.\n *\n * @return {Array} Users list.\n */\nexport const getUserQueryResults = createSelector(\n\t( state, queryID ) => {\n\t\tconst queryResults = state.users.queries[ queryID ];\n\n\t\treturn map( queryResults, ( id ) => state.users.byId[ id ] );\n\t},\n\t( state, queryID ) => [ state.users.queries[ queryID ], state.users.byId ]\n);\n\n/**\n * Returns the loaded entities for the given kind.\n *\n * @deprecated since WordPress 6.0. Use getEntitiesConfig instead\n * @param {Object} state Data state.\n * @param {string} kind Entity kind.\n *\n * @return {Array<Object>} Array of entities with config matching kind.\n */\nexport function getEntitiesByKind( state, kind ) {\n\tdeprecated( \"wp.data.select( 'core' ).getEntitiesByKind()\", {\n\t\tsince: '6.0',\n\t\talternative: \"wp.data.select( 'core' ).getEntitiesConfig()\",\n\t} );\n\treturn getEntitiesConfig( state, kind );\n}\n\n/**\n * Returns the loaded entities for the given kind.\n *\n * @param {Object} state Data state.\n * @param {string} kind Entity kind.\n *\n * @return {Array<Object>} Array of entities with config matching kind.\n */\nexport function getEntitiesConfig( state, kind ) {\n\treturn filter( state.entities.config, { kind } );\n}\n\n/**\n * Returns the entity config given its kind and name.\n *\n * @deprecated since WordPress 6.0. Use getEntityConfig instead\n * @param {Object} state Data state.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n *\n * @return {Object} Entity config\n */\nexport function getEntity( state, kind, name ) {\n\tdeprecated( \"wp.data.select( 'core' ).getEntity()\", {\n\t\tsince: '6.0',\n\t\talternative: \"wp.data.select( 'core' ).getEntityConfig()\",\n\t} );\n\treturn getEntityConfig( state, kind, name );\n}\n\n/**\n * Returns the entity config given its kind and name.\n *\n * @param {Object} state Data state.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n *\n * @return {Object} Entity config\n */\nexport function getEntityConfig( state, kind, name ) {\n\treturn find( state.entities.config, { kind, name } );\n}\n\n/**\n * Returns the Entity's record object by key. Returns `null` if the value is not\n * yet received, undefined if the value entity is known to not exist, or the\n * entity object if it exists and is received.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} key Record's key\n * @param {?Object} query Optional query.\n *\n * @return {Object|undefined} Record.\n */\nexport const getEntityRecord = createSelector(\n\t( state, kind, name, key, query ) => {\n\t\tconst queriedState = get( state.entities.records, [\n\t\t\tkind,\n\t\t\tname,\n\t\t\t'queriedData',\n\t\t] );\n\t\tif ( ! queriedState ) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst context = query?.context ?? 'default';\n\n\t\tif ( query === undefined ) {\n\t\t\t// If expecting a complete item, validate that completeness.\n\t\t\tif ( ! queriedState.itemIsComplete[ context ]?.[ key ] ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn queriedState.items[ context ][ key ];\n\t\t}\n\n\t\tconst item = queriedState.items[ context ]?.[ key ];\n\t\tif ( item && query._fields ) {\n\t\t\tconst filteredItem = {};\n\t\t\tconst fields = getNormalizedCommaSeparable( query._fields ) ?? [];\n\t\t\tfor ( let f = 0; f < fields.length; f++ ) {\n\t\t\t\tconst field = fields[ f ].split( '.' );\n\t\t\t\tconst value = get( item, field );\n\t\t\t\tset( filteredItem, field, value );\n\t\t\t}\n\t\t\treturn filteredItem;\n\t\t}\n\n\t\treturn item;\n\t},\n\t( state, kind, name, recordId, query ) => {\n\t\tconst context = query?.context ?? 'default';\n\t\treturn [\n\t\t\tget( state.entities.records, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'items',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t\tget( state.entities.records, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'itemIsComplete',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t];\n\t}\n);\n\n/**\n * Returns the Entity's record object by key. Doesn't trigger a resolver nor requests the entity records from the API if the entity record isn't available in the local state.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} key Record's key\n *\n * @return {Object|null} Record.\n */\nexport function __experimentalGetEntityRecordNoResolver(\n\tstate,\n\tkind,\n\tname,\n\tkey\n) {\n\treturn getEntityRecord( state, kind, name, key );\n}\n\n/**\n * Returns the entity's record object by key,\n * with its attributes mapped to their raw values.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} key Record's key.\n *\n * @return {Object?} Object with the entity's raw attributes.\n */\nexport const getRawEntityRecord = createSelector(\n\t( state, kind, name, key ) => {\n\t\tconst record = getEntityRecord( state, kind, name, key );\n\t\treturn (\n\t\t\trecord &&\n\t\t\tObject.keys( record ).reduce( ( accumulator, _key ) => {\n\t\t\t\tif (\n\t\t\t\t\tisRawAttribute( getEntityConfig( state, kind, name ), _key )\n\t\t\t\t) {\n\t\t\t\t\t// Because edits are the \"raw\" attribute values,\n\t\t\t\t\t// we return those from record selectors to make rendering,\n\t\t\t\t\t// comparisons, and joins with edits easier.\n\t\t\t\t\taccumulator[ _key ] = get(\n\t\t\t\t\t\trecord[ _key ],\n\t\t\t\t\t\t'raw',\n\t\t\t\t\t\trecord[ _key ]\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\taccumulator[ _key ] = record[ _key ];\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t}, {} )\n\t\t);\n\t},\n\t( state, kind, name, recordId, query ) => {\n\t\tconst context = query?.context ?? 'default';\n\t\treturn [\n\t\t\tstate.entities.config,\n\t\t\tget( state.entities.records, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'items',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t\tget( state.entities.records, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'itemIsComplete',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t];\n\t}\n);\n\n/**\n * Returns true if records have been received for the given set of parameters,\n * or false otherwise.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {?Object} query Optional terms query.\n *\n * @return {boolean} Whether entity records have been received.\n */\nexport function hasEntityRecords( state, kind, name, query ) {\n\treturn Array.isArray( getEntityRecords( state, kind, name, query ) );\n}\n\n/**\n * Returns the Entity's records.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {?Object} query Optional terms query.\n *\n * @return {?Array} Records.\n */\nexport function getEntityRecords( state, kind, name, query ) {\n\t// Queried data state is prepopulated for all known entities. If this is not\n\t// assigned for the given parameters, then it is known to not exist.\n\tconst queriedState = get( state.entities.records, [\n\t\tkind,\n\t\tname,\n\t\t'queriedData',\n\t] );\n\tif ( ! queriedState ) {\n\t\treturn null;\n\t}\n\treturn getQueriedItems( queriedState, query );\n}\n\n/**\n * Returns the list of dirty entity records.\n *\n * @param {Object} state State tree.\n *\n * @return {[{ title: string, key: string, name: string, kind: string }]} The list of updated records\n */\nexport const __experimentalGetDirtyEntityRecords = createSelector(\n\t( state ) => {\n\t\tconst {\n\t\t\tentities: { records },\n\t\t} = state;\n\t\tconst dirtyRecords = [];\n\t\tObject.keys( records ).forEach( ( kind ) => {\n\t\t\tObject.keys( records[ kind ] ).forEach( ( name ) => {\n\t\t\t\tconst primaryKeys = Object.keys(\n\t\t\t\t\trecords[ kind ][ name ].edits\n\t\t\t\t).filter(\n\t\t\t\t\t( primaryKey ) =>\n\t\t\t\t\t\t// The entity record must exist (not be deleted),\n\t\t\t\t\t\t// and it must have edits.\n\t\t\t\t\t\tgetEntityRecord( state, kind, name, primaryKey ) &&\n\t\t\t\t\t\thasEditsForEntityRecord( state, kind, name, primaryKey )\n\t\t\t\t);\n\n\t\t\t\tif ( primaryKeys.length ) {\n\t\t\t\t\tconst entityConfig = getEntityConfig( state, kind, name );\n\t\t\t\t\tprimaryKeys.forEach( ( primaryKey ) => {\n\t\t\t\t\t\tconst entityRecord = getEditedEntityRecord(\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tprimaryKey\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdirtyRecords.push( {\n\t\t\t\t\t\t\t// We avoid using primaryKey because it's transformed into a string\n\t\t\t\t\t\t\t// when it's used as an object key.\n\t\t\t\t\t\t\tkey:\n\t\t\t\t\t\t\t\tentityRecord[\n\t\t\t\t\t\t\t\t\tentityConfig.key || DEFAULT_ENTITY_KEY\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\tentityConfig?.getTitle?.( entityRecord ) || '',\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\n\t\treturn dirtyRecords;\n\t},\n\t( state ) => [ state.entities.records ]\n);\n\n/**\n * Returns the list of entities currently being saved.\n *\n * @param {Object} state State tree.\n *\n * @return {[{ title: string, key: string, name: string, kind: string }]} The list of records being saved.\n */\nexport const __experimentalGetEntitiesBeingSaved = createSelector(\n\t( state ) => {\n\t\tconst {\n\t\t\tentities: { records },\n\t\t} = state;\n\t\tconst recordsBeingSaved = [];\n\t\tObject.keys( records ).forEach( ( kind ) => {\n\t\t\tObject.keys( records[ kind ] ).forEach( ( name ) => {\n\t\t\t\tconst primaryKeys = Object.keys(\n\t\t\t\t\trecords[ kind ][ name ].saving\n\t\t\t\t).filter( ( primaryKey ) =>\n\t\t\t\t\tisSavingEntityRecord( state, kind, name, primaryKey )\n\t\t\t\t);\n\n\t\t\t\tif ( primaryKeys.length ) {\n\t\t\t\t\tconst entityConfig = getEntityConfig( state, kind, name );\n\t\t\t\t\tprimaryKeys.forEach( ( primaryKey ) => {\n\t\t\t\t\t\tconst entityRecord = getEditedEntityRecord(\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tprimaryKey\n\t\t\t\t\t\t);\n\t\t\t\t\t\trecordsBeingSaved.push( {\n\t\t\t\t\t\t\t// We avoid using primaryKey because it's transformed into a string\n\t\t\t\t\t\t\t// when it's used as an object key.\n\t\t\t\t\t\t\tkey:\n\t\t\t\t\t\t\t\tentityRecord[\n\t\t\t\t\t\t\t\t\tentityConfig.key || DEFAULT_ENTITY_KEY\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\tentityConfig?.getTitle?.( entityRecord ) || '',\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t\treturn recordsBeingSaved;\n\t},\n\t( state ) => [ state.entities.records ]\n);\n\n/**\n * Returns the specified entity record's edits.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's edits.\n */\nexport function getEntityRecordEdits( state, kind, name, recordId ) {\n\treturn get( state.entities.records, [ kind, name, 'edits', recordId ] );\n}\n\n/**\n * Returns the specified entity record's non transient edits.\n *\n * Transient edits don't create an undo level, and\n * are not considered for change detection.\n * They are defined in the entity's config.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's non transient edits.\n */\nexport const getEntityRecordNonTransientEdits = createSelector(\n\t( state, kind, name, recordId ) => {\n\t\tconst { transientEdits } = getEntityConfig( state, kind, name ) || {};\n\t\tconst edits = getEntityRecordEdits( state, kind, name, recordId ) || {};\n\t\tif ( ! transientEdits ) {\n\t\t\treturn edits;\n\t\t}\n\t\treturn Object.keys( edits ).reduce( ( acc, key ) => {\n\t\t\tif ( ! transientEdits[ key ] ) {\n\t\t\t\tacc[ key ] = edits[ key ];\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, {} );\n\t},\n\t( state, kind, name, recordId ) => [\n\t\tstate.entities.config,\n\t\tget( state.entities.records, [ kind, name, 'edits', recordId ] ),\n\t]\n);\n\n/**\n * Returns true if the specified entity record has edits,\n * and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordId Record ID.\n *\n * @return {boolean} Whether the entity record has edits or not.\n */\nexport function hasEditsForEntityRecord( state, kind, name, recordId ) {\n\treturn (\n\t\tisSavingEntityRecord( state, kind, name, recordId ) ||\n\t\tObject.keys(\n\t\t\tgetEntityRecordNonTransientEdits( state, kind, name, recordId )\n\t\t).length > 0\n\t);\n}\n\n/**\n * Returns the specified entity record, merged with its edits.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordId Record ID.\n *\n * @return {Object?} The entity record, merged with its edits.\n */\nexport const getEditedEntityRecord = createSelector(\n\t( state, kind, name, recordId ) => ( {\n\t\t...getRawEntityRecord( state, kind, name, recordId ),\n\t\t...getEntityRecordEdits( state, kind, name, recordId ),\n\t} ),\n\t( state, kind, name, recordId, query ) => {\n\t\tconst context = query?.context ?? 'default';\n\t\treturn [\n\t\t\tstate.entities.config,\n\t\t\tget( state.entities.records, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'items',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t\tget( state.entities.records, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'itemIsComplete',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t\tget( state.entities.records, [ kind, name, 'edits', recordId ] ),\n\t\t];\n\t}\n);\n\n/**\n * Returns true if the specified entity record is autosaving, and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {boolean} Whether the entity record is autosaving or not.\n */\nexport function isAutosavingEntityRecord( state, kind, name, recordId ) {\n\tconst { pending, isAutosave } = get(\n\t\tstate.entities.records,\n\t\t[ kind, name, 'saving', recordId ],\n\t\t{}\n\t);\n\treturn Boolean( pending && isAutosave );\n}\n\n/**\n * Returns true if the specified entity record is saving, and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordId Record ID.\n *\n * @return {boolean} Whether the entity record is saving or not.\n */\nexport function isSavingEntityRecord( state, kind, name, recordId ) {\n\treturn get(\n\t\tstate.entities.records,\n\t\t[ kind, name, 'saving', recordId, 'pending' ],\n\t\tfalse\n\t);\n}\n\n/**\n * Returns true if the specified entity record is deleting, and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {boolean} Whether the entity record is deleting or not.\n */\nexport function isDeletingEntityRecord( state, kind, name, recordId ) {\n\treturn get(\n\t\tstate.entities.records,\n\t\t[ kind, name, 'deleting', recordId, 'pending' ],\n\t\tfalse\n\t);\n}\n\n/**\n * Returns the specified entity record's last save error.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's save error.\n */\nexport function getLastEntitySaveError( state, kind, name, recordId ) {\n\treturn get( state.entities.records, [\n\t\tkind,\n\t\tname,\n\t\t'saving',\n\t\trecordId,\n\t\t'error',\n\t] );\n}\n\n/**\n * Returns the specified entity record's last delete error.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's save error.\n */\nexport function getLastEntityDeleteError( state, kind, name, recordId ) {\n\treturn get( state.entities.records, [\n\t\tkind,\n\t\tname,\n\t\t'deleting',\n\t\trecordId,\n\t\t'error',\n\t] );\n}\n\n/**\n * Returns the current undo offset for the\n * entity records edits history. The offset\n * represents how many items from the end\n * of the history stack we are at. 0 is the\n * last edit, -1 is the second last, and so on.\n *\n * @param {Object} state State tree.\n *\n * @return {number} The current undo offset.\n */\nfunction getCurrentUndoOffset( state ) {\n\treturn state.undo.offset;\n}\n\n/**\n * Returns the previous edit from the current undo offset\n * for the entity records edits history, if any.\n *\n * @param {Object} state State tree.\n *\n * @return {Object?} The edit.\n */\nexport function getUndoEdit( state ) {\n\treturn state.undo[ state.undo.length - 2 + getCurrentUndoOffset( state ) ];\n}\n\n/**\n * Returns the next edit from the current undo offset\n * for the entity records edits history, if any.\n *\n * @param {Object} state State tree.\n *\n * @return {Object?} The edit.\n */\nexport function getRedoEdit( state ) {\n\treturn state.undo[ state.undo.length + getCurrentUndoOffset( state ) ];\n}\n\n/**\n * Returns true if there is a previous edit from the current undo offset\n * for the entity records edits history, and false otherwise.\n *\n * @param {Object} state State tree.\n *\n * @return {boolean} Whether there is a previous edit or not.\n */\nexport function hasUndo( state ) {\n\treturn Boolean( getUndoEdit( state ) );\n}\n\n/**\n * Returns true if there is a next edit from the current undo offset\n * for the entity records edits history, and false otherwise.\n *\n * @param {Object} state State tree.\n *\n * @return {boolean} Whether there is a next edit or not.\n */\nexport function hasRedo( state ) {\n\treturn Boolean( getRedoEdit( state ) );\n}\n\n/**\n * Return the current theme.\n *\n * @param {Object} state Data state.\n *\n * @return {Object} The current theme.\n */\nexport function getCurrentTheme( state ) {\n\treturn getEntityRecord( state, 'root', 'theme', state.currentTheme );\n}\n\n/**\n * Return the ID of the current global styles object.\n *\n * @param {Object} state Data state.\n *\n * @return {string} The current global styles ID.\n */\nexport function __experimentalGetCurrentGlobalStylesId( state ) {\n\treturn state.currentGlobalStylesId;\n}\n\n/**\n * Return theme supports data in the index.\n *\n * @param {Object} state Data state.\n *\n * @return {*} Index data.\n */\nexport function getThemeSupports( state ) {\n\treturn getCurrentTheme( state )?.theme_supports ?? EMPTY_OBJECT;\n}\n\n/**\n * Returns the embed preview for the given URL.\n *\n * @param {Object} state Data state.\n * @param {string} url Embedded URL.\n *\n * @return {*} Undefined if the preview has not been fetched, otherwise, the preview fetched from the embed preview API.\n */\nexport function getEmbedPreview( state, url ) {\n\treturn state.embedPreviews[ url ];\n}\n\n/**\n * Determines if the returned preview is an oEmbed link fallback.\n *\n * WordPress can be configured to return a simple link to a URL if it is not embeddable.\n * We need to be able to determine if a URL is embeddable or not, based on what we\n * get back from the oEmbed preview API.\n *\n * @param {Object} state Data state.\n * @param {string} url Embedded URL.\n *\n * @return {boolean} Is the preview for the URL an oEmbed link fallback.\n */\nexport function isPreviewEmbedFallback( state, url ) {\n\tconst preview = state.embedPreviews[ url ];\n\tconst oEmbedLinkCheck = '<a href=\"' + url + '\">' + url + '</a>';\n\tif ( ! preview ) {\n\t\treturn false;\n\t}\n\treturn preview.html === oEmbedLinkCheck;\n}\n\n/**\n * Returns whether the current user can perform the given action on the given\n * REST resource.\n *\n * Calling this may trigger an OPTIONS request to the REST API via the\n * `canUser()` resolver.\n *\n * https://developer.wordpress.org/rest-api/reference/\n *\n * @param {Object} state Data state.\n * @param {string} action Action to check. One of: 'create', 'read', 'update', 'delete'.\n * @param {string} resource REST resource to check, e.g. 'media' or 'posts'.\n * @param {string=} id Optional ID of the rest resource to check.\n *\n * @return {boolean|undefined} Whether or not the user can perform the action,\n * or `undefined` if the OPTIONS request is still being made.\n */\nexport function canUser( state, action, resource, id ) {\n\tconst key = compact( [ action, resource, id ] ).join( '/' );\n\treturn get( state, [ 'userPermissions', key ] );\n}\n\n/**\n * Returns whether the current user can edit the given entity.\n *\n * Calling this may trigger an OPTIONS request to the REST API via the\n * `canUser()` resolver.\n *\n * https://developer.wordpress.org/rest-api/reference/\n *\n * @param {Object} state Data state.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {string} recordId Record's id.\n * @return {boolean|undefined} Whether or not the user can edit,\n * or `undefined` if the OPTIONS request is still being made.\n */\nexport function canUserEditEntityRecord( state, kind, name, recordId ) {\n\tconst entityConfig = getEntityConfig( state, kind, name );\n\tif ( ! entityConfig ) {\n\t\treturn false;\n\t}\n\tconst resource = entityConfig.__unstable_rest_base;\n\n\treturn canUser( state, 'update', resource, recordId );\n}\n\n/**\n * Returns the latest autosaves for the post.\n *\n * May return multiple autosaves since the backend stores one autosave per\n * author for each post.\n *\n * @param {Object} state State tree.\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n *\n * @return {?Array} An array of autosaves for the post, or undefined if there is none.\n */\nexport function getAutosaves( state, postType, postId ) {\n\treturn state.autosaves[ postId ];\n}\n\n/**\n * Returns the autosave for the post and author.\n *\n * @param {Object} state State tree.\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n * @param {number} authorId The id of the author.\n *\n * @return {?Object} The autosave for the post and author.\n */\nexport function getAutosave( state, postType, postId, authorId ) {\n\tif ( authorId === undefined ) {\n\t\treturn;\n\t}\n\n\tconst autosaves = state.autosaves[ postId ];\n\treturn find( autosaves, { author: authorId } );\n}\n\n/**\n * Returns true if the REST request for autosaves has completed.\n *\n * @param {Object} state State tree.\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n *\n * @return {boolean} True if the REST request was completed. False otherwise.\n */\nexport const hasFetchedAutosaves = createRegistrySelector(\n\t( select ) => ( state, postType, postId ) => {\n\t\treturn select( STORE_NAME ).hasFinishedResolution( 'getAutosaves', [\n\t\t\tpostType,\n\t\t\tpostId,\n\t\t] );\n\t}\n);\n\n/**\n * Returns a new reference when edited values have changed. This is useful in\n * inferring where an edit has been made between states by comparison of the\n * return values using strict equality.\n *\n * @example\n *\n * ```\n * const hasEditOccurred = (\n * getReferenceByDistinctEdits( beforeState ) !==\n * getReferenceByDistinctEdits( afterState )\n * );\n * ```\n *\n * @param {Object} state Editor state.\n *\n * @return {*} A value whose reference will change only when an edit occurs.\n */\nexport const getReferenceByDistinctEdits = createSelector(\n\t() => [],\n\t( state ) => [\n\t\tstate.undo.length,\n\t\tstate.undo.offset,\n\t\tstate.undo.flattenedUndo,\n\t]\n);\n\n/**\n * Retrieve the frontend template used for a given link.\n *\n * @param {Object} state Editor state.\n * @param {string} link Link.\n *\n * @return {Object?} The template record.\n */\nexport function __experimentalGetTemplateForLink( state, link ) {\n\tconst records = getEntityRecords( state, 'postType', 'wp_template', {\n\t\t'find-template': link,\n\t} );\n\n\tconst template = records?.length ? records[ 0 ] : null;\n\tif ( template ) {\n\t\treturn getEditedEntityRecord(\n\t\t\tstate,\n\t\t\t'postType',\n\t\t\t'wp_template',\n\t\t\ttemplate.id\n\t\t);\n\t}\n\treturn template;\n}\n\n/**\n * Retrieve the current theme's base global styles\n *\n * @param {Object} state Editor state.\n *\n * @return {Object|null} The Global Styles object.\n */\nexport function __experimentalGetCurrentThemeBaseGlobalStyles( state ) {\n\tconst currentTheme = getCurrentTheme( state );\n\tif ( ! currentTheme ) {\n\t\treturn null;\n\t}\n\treturn state.themeBaseGlobalStyles[ currentTheme.stylesheet ];\n}\n\n/**\n * Return the ID of the current global styles object.\n *\n * @param {Object} state Data state.\n *\n * @return {string|null} The current global styles ID.\n */\nexport function __experimentalGetCurrentThemeGlobalStylesVariations( state ) {\n\tconst currentTheme = getCurrentTheme( state );\n\tif ( ! currentTheme ) {\n\t\treturn null;\n\t}\n\treturn state.themeGlobalStyleVariations[ currentTheme.stylesheet ];\n}\n\n/**\n * Retrieve the list of registered block patterns.\n *\n * @param {Object} state Data state.\n *\n * @return {Array} Block pattern list.\n */\nexport function getBlockPatterns( state ) {\n\treturn state.blockPatterns;\n}\n\n/**\n * Retrieve the list of registered block pattern categories.\n *\n * @param {Object} state Data state.\n *\n * @return {Array} Block pattern category list.\n */\nexport function getBlockPatternCategories( state ) {\n\treturn state.blockPatternCategories;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}