@wordpress/core-data 6.16.0 → 6.17.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 (236) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/actions.js +69 -134
  3. package/build/actions.js.map +1 -1
  4. package/build/batch/create-batch.js +0 -22
  5. package/build/batch/create-batch.js.map +1 -1
  6. package/build/batch/default-processor.js +3 -15
  7. package/build/batch/default-processor.js.map +1 -1
  8. package/build/batch/index.js +0 -3
  9. package/build/batch/index.js.map +1 -1
  10. package/build/entities.js +109 -36
  11. package/build/entities.js.map +1 -1
  12. package/build/entity-provider.js +34 -53
  13. package/build/entity-provider.js.map +1 -1
  14. package/build/entity-types/attachment.js.map +1 -1
  15. package/build/entity-types/base-entity-records.js +0 -3
  16. package/build/entity-types/base-entity-records.js.map +1 -1
  17. package/build/entity-types/comment.js.map +1 -1
  18. package/build/entity-types/helpers.js.map +1 -1
  19. package/build/entity-types/index.js.map +1 -1
  20. package/build/entity-types/menu-location.js.map +1 -1
  21. package/build/entity-types/nav-menu-item.js.map +1 -1
  22. package/build/entity-types/nav-menu.js.map +1 -1
  23. package/build/entity-types/page.js.map +1 -1
  24. package/build/entity-types/plugin.js.map +1 -1
  25. package/build/entity-types/post.js.map +1 -1
  26. package/build/entity-types/settings.js.map +1 -1
  27. package/build/entity-types/sidebar.js.map +1 -1
  28. package/build/entity-types/taxonomy.js.map +1 -1
  29. package/build/entity-types/theme.js.map +1 -1
  30. package/build/entity-types/type.js.map +1 -1
  31. package/build/entity-types/user.js.map +1 -1
  32. package/build/entity-types/widget-type.js.map +1 -1
  33. package/build/entity-types/widget.js.map +1 -1
  34. package/build/entity-types/wp-template-part.js.map +1 -1
  35. package/build/entity-types/wp-template.js.map +1 -1
  36. package/build/fetch/__experimental-fetch-link-suggestions.js +14 -20
  37. package/build/fetch/__experimental-fetch-link-suggestions.js.map +1 -1
  38. package/build/fetch/__experimental-fetch-url-data.js +4 -13
  39. package/build/fetch/__experimental-fetch-url-data.js.map +1 -1
  40. package/build/fetch/index.js +0 -3
  41. package/build/fetch/index.js.map +1 -1
  42. package/build/hooks/constants.js +4 -5
  43. package/build/hooks/constants.js.map +1 -1
  44. package/build/hooks/index.js +0 -5
  45. package/build/hooks/index.js.map +1 -1
  46. package/build/hooks/memoize.js +0 -3
  47. package/build/hooks/memoize.js.map +1 -1
  48. package/build/hooks/use-entity-record.js +0 -9
  49. package/build/hooks/use-entity-record.js.map +1 -1
  50. package/build/hooks/use-entity-records.js +2 -9
  51. package/build/hooks/use-entity-records.js.map +1 -1
  52. package/build/hooks/use-query-select.js +1 -13
  53. package/build/hooks/use-query-select.js.map +1 -1
  54. package/build/hooks/use-resource-permissions.js +0 -15
  55. package/build/hooks/use-resource-permissions.js.map +1 -1
  56. package/build/index.js +9 -41
  57. package/build/index.js.map +1 -1
  58. package/build/locks/actions.js +1 -6
  59. package/build/locks/actions.js.map +1 -1
  60. package/build/locks/engine.js +1 -9
  61. package/build/locks/engine.js.map +1 -1
  62. package/build/locks/reducer.js +8 -9
  63. package/build/locks/reducer.js.map +1 -1
  64. package/build/locks/selectors.js +8 -11
  65. package/build/locks/selectors.js.map +1 -1
  66. package/build/locks/utils.js +4 -19
  67. package/build/locks/utils.js.map +1 -1
  68. package/build/name.js +0 -1
  69. package/build/name.js.map +1 -1
  70. package/build/private-apis.js +1 -2
  71. package/build/private-apis.js.map +1 -1
  72. package/build/private-selectors.js +2 -5
  73. package/build/private-selectors.js.map +1 -1
  74. package/build/queried-data/actions.js +4 -6
  75. package/build/queried-data/actions.js.map +1 -1
  76. package/build/queried-data/get-query-parts.js +11 -24
  77. package/build/queried-data/get-query-parts.js.map +1 -1
  78. package/build/queried-data/index.js +0 -6
  79. package/build/queried-data/index.js.map +1 -1
  80. package/build/queried-data/reducer.js +33 -51
  81. package/build/queried-data/reducer.js.map +1 -1
  82. package/build/queried-data/selectors.js +4 -25
  83. package/build/queried-data/selectors.js.map +1 -1
  84. package/build/reducer.js +76 -128
  85. package/build/reducer.js.map +1 -1
  86. package/build/resolvers.js +91 -133
  87. package/build/resolvers.js.map +1 -1
  88. package/build/selectors.js +51 -145
  89. package/build/selectors.js.map +1 -1
  90. package/build/sync.js +19 -0
  91. package/build/sync.js.map +1 -0
  92. package/build/types.js.map +1 -1
  93. package/build/utils/conservative-map-item.js +3 -10
  94. package/build/utils/conservative-map-item.js.map +1 -1
  95. package/build/utils/forward-resolver.js +0 -2
  96. package/build/utils/forward-resolver.js.map +1 -1
  97. package/build/utils/get-normalized-comma-separable.js +0 -3
  98. package/build/utils/get-normalized-comma-separable.js.map +1 -1
  99. package/build/utils/if-matching-action.js +0 -3
  100. package/build/utils/if-matching-action.js.map +1 -1
  101. package/build/utils/index.js +0 -10
  102. package/build/utils/index.js.map +1 -1
  103. package/build/utils/is-raw-attribute.js +0 -1
  104. package/build/utils/is-raw-attribute.js.map +1 -1
  105. package/build/utils/on-sub-key.js +5 -9
  106. package/build/utils/on-sub-key.js.map +1 -1
  107. package/build/utils/replace-action.js +0 -2
  108. package/build/utils/replace-action.js.map +1 -1
  109. package/build/utils/set-nested-value.js +0 -4
  110. package/build/utils/set-nested-value.js.map +1 -1
  111. package/build/utils/with-weak-map-cache.js +3 -6
  112. package/build/utils/with-weak-map-cache.js.map +1 -1
  113. package/build-module/actions.js +72 -95
  114. package/build-module/actions.js.map +1 -1
  115. package/build-module/batch/create-batch.js +1 -20
  116. package/build-module/batch/create-batch.js.map +1 -1
  117. package/build-module/batch/default-processor.js +4 -13
  118. package/build-module/batch/default-processor.js.map +1 -1
  119. package/build-module/batch/index.js.map +1 -1
  120. package/build-module/entities.js +109 -25
  121. package/build-module/entities.js.map +1 -1
  122. package/build-module/entity-provider.js +35 -45
  123. package/build-module/entity-provider.js.map +1 -1
  124. package/build-module/entity-types/attachment.js.map +1 -1
  125. package/build-module/entity-types/base-entity-records.js +0 -2
  126. package/build-module/entity-types/base-entity-records.js.map +1 -1
  127. package/build-module/entity-types/comment.js.map +1 -1
  128. package/build-module/entity-types/helpers.js.map +1 -1
  129. package/build-module/entity-types/index.js.map +1 -1
  130. package/build-module/entity-types/menu-location.js.map +1 -1
  131. package/build-module/entity-types/nav-menu-item.js.map +1 -1
  132. package/build-module/entity-types/nav-menu.js.map +1 -1
  133. package/build-module/entity-types/page.js.map +1 -1
  134. package/build-module/entity-types/plugin.js.map +1 -1
  135. package/build-module/entity-types/post.js.map +1 -1
  136. package/build-module/entity-types/settings.js.map +1 -1
  137. package/build-module/entity-types/sidebar.js.map +1 -1
  138. package/build-module/entity-types/taxonomy.js.map +1 -1
  139. package/build-module/entity-types/theme.js.map +1 -1
  140. package/build-module/entity-types/type.js.map +1 -1
  141. package/build-module/entity-types/user.js.map +1 -1
  142. package/build-module/entity-types/widget-type.js.map +1 -1
  143. package/build-module/entity-types/widget.js.map +1 -1
  144. package/build-module/entity-types/wp-template-part.js.map +1 -1
  145. package/build-module/entity-types/wp-template.js.map +1 -1
  146. package/build-module/fetch/__experimental-fetch-link-suggestions.js +15 -15
  147. package/build-module/fetch/__experimental-fetch-link-suggestions.js.map +1 -1
  148. package/build-module/fetch/__experimental-fetch-url-data.js +5 -10
  149. package/build-module/fetch/__experimental-fetch-url-data.js.map +1 -1
  150. package/build-module/fetch/index.js.map +1 -1
  151. package/build-module/hooks/constants.js +3 -4
  152. package/build-module/hooks/constants.js.map +1 -1
  153. package/build-module/hooks/index.js.map +1 -1
  154. package/build-module/hooks/memoize.js +2 -1
  155. package/build-module/hooks/memoize.js.map +1 -1
  156. package/build-module/hooks/use-entity-record.js +1 -3
  157. package/build-module/hooks/use-entity-record.js.map +1 -1
  158. package/build-module/hooks/use-entity-records.js +2 -3
  159. package/build-module/hooks/use-entity-records.js.map +1 -1
  160. package/build-module/hooks/use-query-select.js +1 -9
  161. package/build-module/hooks/use-query-select.js.map +1 -1
  162. package/build-module/hooks/use-resource-permissions.js +1 -10
  163. package/build-module/hooks/use-resource-permissions.js.map +1 -1
  164. package/build-module/index.js +11 -19
  165. package/build-module/index.js.map +1 -1
  166. package/build-module/locks/actions.js +0 -3
  167. package/build-module/locks/actions.js.map +1 -1
  168. package/build-module/locks/engine.js +0 -5
  169. package/build-module/locks/engine.js.map +1 -1
  170. package/build-module/locks/reducer.js +7 -7
  171. package/build-module/locks/reducer.js.map +1 -1
  172. package/build-module/locks/selectors.js +7 -8
  173. package/build-module/locks/selectors.js.map +1 -1
  174. package/build-module/locks/utils.js +4 -14
  175. package/build-module/locks/utils.js.map +1 -1
  176. package/build-module/name.js.map +1 -1
  177. package/build-module/private-apis.js.map +1 -1
  178. package/build-module/private-selectors.js +2 -2
  179. package/build-module/private-selectors.js.map +1 -1
  180. package/build-module/queried-data/actions.js +4 -3
  181. package/build-module/queried-data/actions.js.map +1 -1
  182. package/build-module/queried-data/get-query-parts.js +13 -21
  183. package/build-module/queried-data/get-query-parts.js.map +1 -1
  184. package/build-module/queried-data/index.js.map +1 -1
  185. package/build-module/queried-data/reducer.js +33 -42
  186. package/build-module/queried-data/reducer.js.map +1 -1
  187. package/build-module/queried-data/selectors.js +6 -21
  188. package/build-module/queried-data/selectors.js.map +1 -1
  189. package/build-module/reducer.js +79 -104
  190. package/build-module/reducer.js.map +1 -1
  191. package/build-module/resolvers.js +94 -96
  192. package/build-module/resolvers.js.map +1 -1
  193. package/build-module/selectors.js +56 -92
  194. package/build-module/selectors.js.map +1 -1
  195. package/build-module/sync.js +12 -0
  196. package/build-module/sync.js.map +1 -0
  197. package/build-module/types.js.map +1 -1
  198. package/build-module/utils/conservative-map-item.js +4 -8
  199. package/build-module/utils/conservative-map-item.js.map +1 -1
  200. package/build-module/utils/forward-resolver.js +0 -1
  201. package/build-module/utils/forward-resolver.js.map +1 -1
  202. package/build-module/utils/get-normalized-comma-separable.js +0 -2
  203. package/build-module/utils/get-normalized-comma-separable.js.map +1 -1
  204. package/build-module/utils/if-matching-action.js +0 -2
  205. package/build-module/utils/if-matching-action.js.map +1 -1
  206. package/build-module/utils/index.js.map +1 -1
  207. package/build-module/utils/is-raw-attribute.js.map +1 -1
  208. package/build-module/utils/on-sub-key.js +5 -7
  209. package/build-module/utils/on-sub-key.js.map +1 -1
  210. package/build-module/utils/replace-action.js +0 -1
  211. package/build-module/utils/replace-action.js.map +1 -1
  212. package/build-module/utils/set-nested-value.js +0 -3
  213. package/build-module/utils/set-nested-value.js.map +1 -1
  214. package/build-module/utils/with-weak-map-cache.js +3 -5
  215. package/build-module/utils/with-weak-map-cache.js.map +1 -1
  216. package/build-types/actions.d.ts.map +1 -1
  217. package/build-types/entities.d.ts +53 -0
  218. package/build-types/entities.d.ts.map +1 -1
  219. package/build-types/entity-provider.d.ts +1 -1
  220. package/build-types/entity-provider.d.ts.map +1 -1
  221. package/build-types/hooks/memoize.d.ts +1 -1
  222. package/build-types/hooks/memoize.d.ts.map +1 -1
  223. package/build-types/index.d.ts +3 -3
  224. package/build-types/index.d.ts.map +1 -1
  225. package/build-types/resolvers.d.ts.map +1 -1
  226. package/build-types/sync.d.ts +2 -0
  227. package/build-types/sync.d.ts.map +1 -0
  228. package/package.json +17 -15
  229. package/src/actions.js +24 -14
  230. package/src/entities.js +91 -0
  231. package/src/entity-provider.js +11 -2
  232. package/src/resolvers.js +89 -41
  233. package/src/sync.js +18 -0
  234. package/src/test/entity-provider.js +272 -0
  235. package/tsconfig.json +1 -0
  236. package/tsconfig.tsbuildinfo +1 -1
@@ -2,17 +2,18 @@
2
2
  * External dependencies
3
3
  */
4
4
  import { capitalCase, pascalCase } from 'change-case';
5
+
5
6
  /**
6
7
  * WordPress dependencies
7
8
  */
8
-
9
9
  import apiFetch from '@wordpress/api-fetch';
10
10
  import { __ } from '@wordpress/i18n';
11
+
11
12
  /**
12
13
  * Internal dependencies
13
14
  */
14
-
15
15
  import { addEntities } from './actions';
16
+ import { getSyncProvider } from './sync';
16
17
  export const DEFAULT_ENTITY_KEY = 'id';
17
18
  const POST_RAW_ATTRIBUTES = ['title', 'excerpt', 'content'];
18
19
  export const rootEntitiesConfig = [{
@@ -22,7 +23,27 @@ export const rootEntitiesConfig = [{
22
23
  baseURL: '/',
23
24
  baseURLParams: {
24
25
  _fields: ['description', 'gmt_offset', 'home', 'name', 'site_icon', 'site_icon_url', 'site_logo', 'timezone_string', 'url'].join(',')
25
- }
26
+ },
27
+ syncConfig: {
28
+ fetch: async () => {
29
+ return apiFetch({
30
+ path: '/'
31
+ });
32
+ },
33
+ applyChangesToDoc: (doc, changes) => {
34
+ const document = doc.getMap('document');
35
+ Object.entries(changes).forEach(([key, value]) => {
36
+ if (document.get(key) !== value) {
37
+ document.set(key, value);
38
+ }
39
+ });
40
+ },
41
+ fromCRDTDoc: doc => {
42
+ return doc.getMap('document').toJSON();
43
+ }
44
+ },
45
+ syncObjectType: 'root/base',
46
+ getSyncObjectId: () => 'index'
26
47
  }, {
27
48
  label: __('Site'),
28
49
  name: 'site',
@@ -30,9 +51,28 @@ export const rootEntitiesConfig = [{
30
51
  baseURL: '/wp/v2/settings',
31
52
  getTitle: record => {
32
53
  var _record$title;
33
-
34
54
  return (_record$title = record?.title) !== null && _record$title !== void 0 ? _record$title : __('Site Title');
35
- }
55
+ },
56
+ syncConfig: {
57
+ fetch: async () => {
58
+ return apiFetch({
59
+ path: '/wp/v2/settings'
60
+ });
61
+ },
62
+ applyChangesToDoc: (doc, changes) => {
63
+ const document = doc.getMap('document');
64
+ Object.entries(changes).forEach(([key, value]) => {
65
+ if (document.get(key) !== value) {
66
+ document.set(key, value);
67
+ }
68
+ });
69
+ },
70
+ fromCRDTDoc: doc => {
71
+ return doc.getMap('document').toJSON();
72
+ }
73
+ },
74
+ syncObjectType: 'root/site',
75
+ getSyncObjectId: () => 'index'
36
76
  }, {
37
77
  label: __('Post Type'),
38
78
  name: 'postType',
@@ -41,7 +81,27 @@ export const rootEntitiesConfig = [{
41
81
  baseURL: '/wp/v2/types',
42
82
  baseURLParams: {
43
83
  context: 'edit'
44
- }
84
+ },
85
+ syncConfig: {
86
+ fetch: async id => {
87
+ return apiFetch({
88
+ path: `/wp/v2/types/${id}?context=edit`
89
+ });
90
+ },
91
+ applyChangesToDoc: (doc, changes) => {
92
+ const document = doc.getMap('document');
93
+ Object.entries(changes).forEach(([key, value]) => {
94
+ if (document.get(key) !== value) {
95
+ document.set(key, value);
96
+ }
97
+ });
98
+ },
99
+ fromCRDTDoc: doc => {
100
+ return doc.getMap('document').toJSON();
101
+ }
102
+ },
103
+ syncObjectType: 'root/postType',
104
+ getSyncObjectId: id => id
45
105
  }, {
46
106
  name: 'media',
47
107
  kind: 'root',
@@ -179,6 +239,7 @@ export const additionalEntityConfigLoaders = [{
179
239
  kind: 'taxonomy',
180
240
  loadEntities: loadTaxonomyEntities
181
241
  }];
242
+
182
243
  /**
183
244
  * Returns a function to be used to retrieve extra edits to apply before persisting a post type.
184
245
  *
@@ -186,37 +247,33 @@ export const additionalEntityConfigLoaders = [{
186
247
  * @param {Object} edits Edits.
187
248
  * @return {Object} Updated edits.
188
249
  */
189
-
190
250
  export const prePersistPostType = (persistedRecord, edits) => {
191
251
  const newEdits = {};
192
-
193
252
  if (persistedRecord?.status === 'auto-draft') {
194
253
  // Saving an auto-draft should create a draft by default.
195
254
  if (!edits.status && !newEdits.status) {
196
255
  newEdits.status = 'draft';
197
- } // Fix the auto-draft default title.
198
-
256
+ }
199
257
 
258
+ // Fix the auto-draft default title.
200
259
  if ((!edits.title || edits.title === 'Auto Draft') && !newEdits.title && (!persistedRecord?.title || persistedRecord?.title === 'Auto Draft')) {
201
260
  newEdits.title = '';
202
261
  }
203
262
  }
204
-
205
263
  return newEdits;
206
264
  };
265
+
207
266
  /**
208
267
  * Returns the list of post type entities.
209
268
  *
210
269
  * @return {Promise} Entities promise
211
270
  */
212
-
213
271
  async function loadPostTypeEntities() {
214
272
  const postTypes = await apiFetch({
215
273
  path: '/wp/v2/types?context=view'
216
274
  });
217
275
  return Object.entries(postTypes !== null && postTypes !== void 0 ? postTypes : {}).map(([name, postType]) => {
218
276
  var _postType$rest_namesp;
219
-
220
277
  const isTemplate = ['wp_template', 'wp_template_part'].includes(name);
221
278
  const namespace = (_postType$rest_namesp = postType?.rest_namespace) !== null && _postType$rest_namesp !== void 0 ? _postType$rest_namesp : 'wp/v2';
222
279
  return {
@@ -237,28 +294,45 @@ async function loadPostTypeEntities() {
237
294
  rawAttributes: POST_RAW_ATTRIBUTES,
238
295
  getTitle: record => {
239
296
  var _record$slug;
240
-
241
297
  return record?.title?.rendered || record?.title || (isTemplate ? capitalCase((_record$slug = record.slug) !== null && _record$slug !== void 0 ? _record$slug : '') : String(record.id));
242
298
  },
243
299
  __unstablePrePersist: isTemplate ? undefined : prePersistPostType,
244
- __unstable_rest_base: postType.rest_base
300
+ __unstable_rest_base: postType.rest_base,
301
+ syncConfig: {
302
+ fetch: async id => {
303
+ return apiFetch({
304
+ path: `/${namespace}/${postType.rest_base}/${id}?context=edit`
305
+ });
306
+ },
307
+ applyChangesToDoc: (doc, changes) => {
308
+ const document = doc.getMap('document');
309
+ Object.entries(changes).forEach(([key, value]) => {
310
+ if (document.get(key) !== value && typeof value !== 'function') {
311
+ document.set(key, value);
312
+ }
313
+ });
314
+ },
315
+ fromCRDTDoc: doc => {
316
+ return doc.getMap('document').toJSON();
317
+ }
318
+ },
319
+ syncObjectType: 'postType/' + postType.name,
320
+ getSyncObjectId: id => id
245
321
  };
246
322
  });
247
323
  }
324
+
248
325
  /**
249
326
  * Returns the list of the taxonomies entities.
250
327
  *
251
328
  * @return {Promise} Entities promise
252
329
  */
253
-
254
-
255
330
  async function loadTaxonomyEntities() {
256
331
  const taxonomies = await apiFetch({
257
332
  path: '/wp/v2/taxonomies?context=view'
258
333
  });
259
334
  return Object.entries(taxonomies !== null && taxonomies !== void 0 ? taxonomies : {}).map(([name, taxonomy]) => {
260
335
  var _taxonomy$rest_namesp;
261
-
262
336
  const namespace = (_taxonomy$rest_namesp = taxonomy?.rest_namespace) !== null && _taxonomy$rest_namesp !== void 0 ? _taxonomy$rest_namesp : 'wp/v2';
263
337
  return {
264
338
  kind: 'taxonomy',
@@ -271,6 +345,7 @@ async function loadTaxonomyEntities() {
271
345
  };
272
346
  });
273
347
  }
348
+
274
349
  /**
275
350
  * Returns the entity's getter method name given its kind and name.
276
351
  *
@@ -290,8 +365,6 @@ async function loadTaxonomyEntities() {
290
365
  *
291
366
  * @return {string} Method name
292
367
  */
293
-
294
-
295
368
  export const getMethodName = (kind, name, prefix = 'get', usePlural = false) => {
296
369
  const entityConfig = rootEntitiesConfig.find(config => config.kind === kind && config.name === name);
297
370
  const kindPrefix = kind === 'root' ? '' : pascalCase(kind);
@@ -299,6 +372,20 @@ export const getMethodName = (kind, name, prefix = 'get', usePlural = false) =>
299
372
  const suffix = usePlural && 'plural' in entityConfig && entityConfig?.plural ? pascalCase(entityConfig.plural) : nameSuffix;
300
373
  return `${prefix}${kindPrefix}${suffix}`;
301
374
  };
375
+ function registerSyncConfigs(configs) {
376
+ configs.forEach(({
377
+ syncObjectType,
378
+ syncConfig
379
+ }) => {
380
+ getSyncProvider().register(syncObjectType, syncConfig);
381
+ const editSyncConfig = {
382
+ ...syncConfig
383
+ };
384
+ delete editSyncConfig.fetch;
385
+ getSyncProvider().register(syncObjectType + '--edit', editSyncConfig);
386
+ });
387
+ }
388
+
302
389
  /**
303
390
  * Loads the kind entities into the store.
304
391
  *
@@ -306,24 +393,21 @@ export const getMethodName = (kind, name, prefix = 'get', usePlural = false) =>
306
393
  *
307
394
  * @return {(thunkArgs: object) => Promise<Array>} Entities
308
395
  */
309
-
310
396
  export const getOrLoadEntitiesConfig = kind => async ({
311
397
  select,
312
398
  dispatch
313
399
  }) => {
314
400
  let configs = select.getEntitiesConfig(kind);
315
-
316
401
  if (configs && configs.length !== 0) {
402
+ registerSyncConfigs(configs);
317
403
  return configs;
318
404
  }
319
-
320
405
  const loader = additionalEntityConfigLoaders.find(l => l.kind === kind);
321
-
322
406
  if (!loader) {
323
407
  return [];
324
408
  }
325
-
326
409
  configs = await loader.loadEntities();
410
+ registerSyncConfigs(configs);
327
411
  dispatch(addEntities(configs));
328
412
  return configs;
329
413
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/entities.js"],"names":["capitalCase","pascalCase","apiFetch","__","addEntities","DEFAULT_ENTITY_KEY","POST_RAW_ATTRIBUTES","rootEntitiesConfig","label","kind","name","baseURL","baseURLParams","_fields","join","getTitle","record","title","key","context","plural","rawAttributes","transientEdits","blocks","rendered","additionalEntityConfigLoaders","loadEntities","loadPostTypeEntities","loadTaxonomyEntities","prePersistPostType","persistedRecord","edits","newEdits","status","postTypes","path","Object","entries","map","postType","isTemplate","includes","namespace","rest_namespace","rest_base","selection","mergedEdits","meta","slug","String","id","__unstablePrePersist","undefined","__unstable_rest_base","taxonomies","taxonomy","getMethodName","prefix","usePlural","entityConfig","find","config","kindPrefix","nameSuffix","suffix","getOrLoadEntitiesConfig","select","dispatch","configs","getEntitiesConfig","length","loader","l"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { capitalCase, pascalCase } from 'change-case';\n\n/**\n * WordPress dependencies\n */\nimport apiFetch from '@wordpress/api-fetch';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { addEntities } from './actions';\n\nexport const DEFAULT_ENTITY_KEY = 'id';\n\nconst POST_RAW_ATTRIBUTES = [ 'title', 'excerpt', 'content' ];\n\nexport const rootEntitiesConfig = [\n\t{\n\t\tlabel: __( 'Base' ),\n\t\tkind: 'root',\n\t\tname: '__unstableBase',\n\t\tbaseURL: '/',\n\t\tbaseURLParams: {\n\t\t\t_fields: [\n\t\t\t\t'description',\n\t\t\t\t'gmt_offset',\n\t\t\t\t'home',\n\t\t\t\t'name',\n\t\t\t\t'site_icon',\n\t\t\t\t'site_icon_url',\n\t\t\t\t'site_logo',\n\t\t\t\t'timezone_string',\n\t\t\t\t'url',\n\t\t\t].join( ',' ),\n\t\t},\n\t},\n\t{\n\t\tlabel: __( 'Site' ),\n\t\tname: 'site',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/settings',\n\t\tgetTitle: ( record ) => {\n\t\t\treturn record?.title ?? __( 'Site Title' );\n\t\t},\n\t},\n\t{\n\t\tlabel: __( 'Post Type' ),\n\t\tname: 'postType',\n\t\tkind: 'root',\n\t\tkey: 'slug',\n\t\tbaseURL: '/wp/v2/types',\n\t\tbaseURLParams: { context: 'edit' },\n\t},\n\t{\n\t\tname: 'media',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/media',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'mediaItems',\n\t\tlabel: __( 'Media' ),\n\t\trawAttributes: [ 'caption', 'title', 'description' ],\n\t},\n\t{\n\t\tname: 'taxonomy',\n\t\tkind: 'root',\n\t\tkey: 'slug',\n\t\tbaseURL: '/wp/v2/taxonomies',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'taxonomies',\n\t\tlabel: __( 'Taxonomy' ),\n\t},\n\t{\n\t\tname: 'sidebar',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/sidebars',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'sidebars',\n\t\ttransientEdits: { blocks: true },\n\t\tlabel: __( 'Widget areas' ),\n\t},\n\t{\n\t\tname: 'widget',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/widgets',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'widgets',\n\t\ttransientEdits: { blocks: true },\n\t\tlabel: __( 'Widgets' ),\n\t},\n\t{\n\t\tname: 'widgetType',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/widget-types',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'widgetTypes',\n\t\tlabel: __( 'Widget types' ),\n\t},\n\t{\n\t\tlabel: __( 'User' ),\n\t\tname: 'user',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/users',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'users',\n\t},\n\t{\n\t\tname: 'comment',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/comments',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'comments',\n\t\tlabel: __( 'Comment' ),\n\t},\n\t{\n\t\tname: 'menu',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/menus',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'menus',\n\t\tlabel: __( 'Menu' ),\n\t},\n\t{\n\t\tname: 'menuItem',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/menu-items',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'menuItems',\n\t\tlabel: __( 'Menu Item' ),\n\t\trawAttributes: [ 'title' ],\n\t},\n\t{\n\t\tname: 'menuLocation',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/menu-locations',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'menuLocations',\n\t\tlabel: __( 'Menu Location' ),\n\t\tkey: 'name',\n\t},\n\t{\n\t\tlabel: __( 'Global Styles' ),\n\t\tname: 'globalStyles',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/global-styles',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'globalStylesVariations', // Should be different than name.\n\t\tgetTitle: ( record ) => record?.title?.rendered || record?.title,\n\t},\n\t{\n\t\tlabel: __( 'Themes' ),\n\t\tname: 'theme',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/themes',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tkey: 'stylesheet',\n\t},\n\t{\n\t\tlabel: __( 'Plugins' ),\n\t\tname: 'plugin',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/plugins',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tkey: 'plugin',\n\t},\n];\n\nexport const additionalEntityConfigLoaders = [\n\t{ kind: 'postType', loadEntities: loadPostTypeEntities },\n\t{ kind: 'taxonomy', loadEntities: loadTaxonomyEntities },\n];\n\n/**\n * Returns a function to be used to retrieve extra edits to apply before persisting a post type.\n *\n * @param {Object} persistedRecord Already persisted Post\n * @param {Object} edits Edits.\n * @return {Object} Updated edits.\n */\nexport const prePersistPostType = ( persistedRecord, edits ) => {\n\tconst newEdits = {};\n\n\tif ( persistedRecord?.status === 'auto-draft' ) {\n\t\t// Saving an auto-draft should create a draft by default.\n\t\tif ( ! edits.status && ! newEdits.status ) {\n\t\t\tnewEdits.status = 'draft';\n\t\t}\n\n\t\t// Fix the auto-draft default title.\n\t\tif (\n\t\t\t( ! edits.title || edits.title === 'Auto Draft' ) &&\n\t\t\t! newEdits.title &&\n\t\t\t( ! persistedRecord?.title ||\n\t\t\t\tpersistedRecord?.title === 'Auto Draft' )\n\t\t) {\n\t\t\tnewEdits.title = '';\n\t\t}\n\t}\n\n\treturn newEdits;\n};\n\n/**\n * Returns the list of post type entities.\n *\n * @return {Promise} Entities promise\n */\nasync function loadPostTypeEntities() {\n\tconst postTypes = await apiFetch( {\n\t\tpath: '/wp/v2/types?context=view',\n\t} );\n\treturn Object.entries( postTypes ?? {} ).map( ( [ name, postType ] ) => {\n\t\tconst isTemplate = [ 'wp_template', 'wp_template_part' ].includes(\n\t\t\tname\n\t\t);\n\t\tconst namespace = postType?.rest_namespace ?? 'wp/v2';\n\t\treturn {\n\t\t\tkind: 'postType',\n\t\t\tbaseURL: `/${ namespace }/${ postType.rest_base }`,\n\t\t\tbaseURLParams: { context: 'edit' },\n\t\t\tname,\n\t\t\tlabel: postType.name,\n\t\t\ttransientEdits: {\n\t\t\t\tblocks: true,\n\t\t\t\tselection: true,\n\t\t\t},\n\t\t\tmergedEdits: { meta: true },\n\t\t\trawAttributes: POST_RAW_ATTRIBUTES,\n\t\t\tgetTitle: ( record ) =>\n\t\t\t\trecord?.title?.rendered ||\n\t\t\t\trecord?.title ||\n\t\t\t\t( isTemplate\n\t\t\t\t\t? capitalCase( record.slug ?? '' )\n\t\t\t\t\t: String( record.id ) ),\n\t\t\t__unstablePrePersist: isTemplate ? undefined : prePersistPostType,\n\t\t\t__unstable_rest_base: postType.rest_base,\n\t\t};\n\t} );\n}\n\n/**\n * Returns the list of the taxonomies entities.\n *\n * @return {Promise} Entities promise\n */\nasync function loadTaxonomyEntities() {\n\tconst taxonomies = await apiFetch( {\n\t\tpath: '/wp/v2/taxonomies?context=view',\n\t} );\n\treturn Object.entries( taxonomies ?? {} ).map( ( [ name, taxonomy ] ) => {\n\t\tconst namespace = taxonomy?.rest_namespace ?? 'wp/v2';\n\t\treturn {\n\t\t\tkind: 'taxonomy',\n\t\t\tbaseURL: `/${ namespace }/${ taxonomy.rest_base }`,\n\t\t\tbaseURLParams: { context: 'edit' },\n\t\t\tname,\n\t\t\tlabel: taxonomy.name,\n\t\t};\n\t} );\n}\n\n/**\n * Returns the entity's getter method name given its kind and name.\n *\n * @example\n * ```js\n * const nameSingular = getMethodName( 'root', 'theme', 'get' );\n * // nameSingular is getRootTheme\n *\n * const namePlural = getMethodName( 'root', 'theme', 'set' );\n * // namePlural is setRootThemes\n * ```\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {string} prefix Function prefix.\n * @param {boolean} usePlural Whether to use the plural form or not.\n *\n * @return {string} Method name\n */\nexport const getMethodName = (\n\tkind,\n\tname,\n\tprefix = 'get',\n\tusePlural = false\n) => {\n\tconst entityConfig = rootEntitiesConfig.find(\n\t\t( config ) => config.kind === kind && config.name === name\n\t);\n\tconst kindPrefix = kind === 'root' ? '' : pascalCase( kind );\n\tconst nameSuffix = pascalCase( name ) + ( usePlural ? 's' : '' );\n\tconst suffix =\n\t\tusePlural && 'plural' in entityConfig && entityConfig?.plural\n\t\t\t? pascalCase( entityConfig.plural )\n\t\t\t: nameSuffix;\n\treturn `${ prefix }${ kindPrefix }${ suffix }`;\n};\n\n/**\n * Loads the kind entities into the store.\n *\n * @param {string} kind Kind\n *\n * @return {(thunkArgs: object) => Promise<Array>} Entities\n */\nexport const getOrLoadEntitiesConfig =\n\t( kind ) =>\n\tasync ( { select, dispatch } ) => {\n\t\tlet configs = select.getEntitiesConfig( kind );\n\t\tif ( configs && configs.length !== 0 ) {\n\t\t\treturn configs;\n\t\t}\n\n\t\tconst loader = additionalEntityConfigLoaders.find(\n\t\t\t( l ) => l.kind === kind\n\t\t);\n\t\tif ( ! loader ) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconfigs = await loader.loadEntities();\n\t\tdispatch( addEntities( configs ) );\n\n\t\treturn configs;\n\t};\n"]}
1
+ {"version":3,"names":["capitalCase","pascalCase","apiFetch","__","addEntities","getSyncProvider","DEFAULT_ENTITY_KEY","POST_RAW_ATTRIBUTES","rootEntitiesConfig","label","kind","name","baseURL","baseURLParams","_fields","join","syncConfig","fetch","path","applyChangesToDoc","doc","changes","document","getMap","Object","entries","forEach","key","value","get","set","fromCRDTDoc","toJSON","syncObjectType","getSyncObjectId","getTitle","record","_record$title","title","context","id","plural","rawAttributes","transientEdits","blocks","rendered","additionalEntityConfigLoaders","loadEntities","loadPostTypeEntities","loadTaxonomyEntities","prePersistPostType","persistedRecord","edits","newEdits","status","postTypes","map","postType","_postType$rest_namesp","isTemplate","includes","namespace","rest_namespace","rest_base","selection","mergedEdits","meta","_record$slug","slug","String","__unstablePrePersist","undefined","__unstable_rest_base","taxonomies","taxonomy","_taxonomy$rest_namesp","getMethodName","prefix","usePlural","entityConfig","find","config","kindPrefix","nameSuffix","suffix","registerSyncConfigs","configs","register","editSyncConfig","getOrLoadEntitiesConfig","select","dispatch","getEntitiesConfig","length","loader","l"],"sources":["@wordpress/core-data/src/entities.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport { capitalCase, pascalCase } from 'change-case';\n\n/**\n * WordPress dependencies\n */\nimport apiFetch from '@wordpress/api-fetch';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { addEntities } from './actions';\nimport { getSyncProvider } from './sync';\n\nexport const DEFAULT_ENTITY_KEY = 'id';\n\nconst POST_RAW_ATTRIBUTES = [ 'title', 'excerpt', 'content' ];\n\nexport const rootEntitiesConfig = [\n\t{\n\t\tlabel: __( 'Base' ),\n\t\tkind: 'root',\n\t\tname: '__unstableBase',\n\t\tbaseURL: '/',\n\t\tbaseURLParams: {\n\t\t\t_fields: [\n\t\t\t\t'description',\n\t\t\t\t'gmt_offset',\n\t\t\t\t'home',\n\t\t\t\t'name',\n\t\t\t\t'site_icon',\n\t\t\t\t'site_icon_url',\n\t\t\t\t'site_logo',\n\t\t\t\t'timezone_string',\n\t\t\t\t'url',\n\t\t\t].join( ',' ),\n\t\t},\n\t\tsyncConfig: {\n\t\t\tfetch: async () => {\n\t\t\t\treturn apiFetch( { path: '/' } );\n\t\t\t},\n\t\t\tapplyChangesToDoc: ( doc, changes ) => {\n\t\t\t\tconst document = doc.getMap( 'document' );\n\t\t\t\tObject.entries( changes ).forEach( ( [ key, value ] ) => {\n\t\t\t\t\tif ( document.get( key ) !== value ) {\n\t\t\t\t\t\tdocument.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t},\n\t\t\tfromCRDTDoc: ( doc ) => {\n\t\t\t\treturn doc.getMap( 'document' ).toJSON();\n\t\t\t},\n\t\t},\n\t\tsyncObjectType: 'root/base',\n\t\tgetSyncObjectId: () => 'index',\n\t},\n\t{\n\t\tlabel: __( 'Site' ),\n\t\tname: 'site',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/settings',\n\t\tgetTitle: ( record ) => {\n\t\t\treturn record?.title ?? __( 'Site Title' );\n\t\t},\n\t\tsyncConfig: {\n\t\t\tfetch: async () => {\n\t\t\t\treturn apiFetch( { path: '/wp/v2/settings' } );\n\t\t\t},\n\t\t\tapplyChangesToDoc: ( doc, changes ) => {\n\t\t\t\tconst document = doc.getMap( 'document' );\n\t\t\t\tObject.entries( changes ).forEach( ( [ key, value ] ) => {\n\t\t\t\t\tif ( document.get( key ) !== value ) {\n\t\t\t\t\t\tdocument.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t},\n\t\t\tfromCRDTDoc: ( doc ) => {\n\t\t\t\treturn doc.getMap( 'document' ).toJSON();\n\t\t\t},\n\t\t},\n\t\tsyncObjectType: 'root/site',\n\t\tgetSyncObjectId: () => 'index',\n\t},\n\t{\n\t\tlabel: __( 'Post Type' ),\n\t\tname: 'postType',\n\t\tkind: 'root',\n\t\tkey: 'slug',\n\t\tbaseURL: '/wp/v2/types',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tsyncConfig: {\n\t\t\tfetch: async ( id ) => {\n\t\t\t\treturn apiFetch( {\n\t\t\t\t\tpath: `/wp/v2/types/${ id }?context=edit`,\n\t\t\t\t} );\n\t\t\t},\n\t\t\tapplyChangesToDoc: ( doc, changes ) => {\n\t\t\t\tconst document = doc.getMap( 'document' );\n\t\t\t\tObject.entries( changes ).forEach( ( [ key, value ] ) => {\n\t\t\t\t\tif ( document.get( key ) !== value ) {\n\t\t\t\t\t\tdocument.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t},\n\t\t\tfromCRDTDoc: ( doc ) => {\n\t\t\t\treturn doc.getMap( 'document' ).toJSON();\n\t\t\t},\n\t\t},\n\t\tsyncObjectType: 'root/postType',\n\t\tgetSyncObjectId: ( id ) => id,\n\t},\n\t{\n\t\tname: 'media',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/media',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'mediaItems',\n\t\tlabel: __( 'Media' ),\n\t\trawAttributes: [ 'caption', 'title', 'description' ],\n\t},\n\t{\n\t\tname: 'taxonomy',\n\t\tkind: 'root',\n\t\tkey: 'slug',\n\t\tbaseURL: '/wp/v2/taxonomies',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'taxonomies',\n\t\tlabel: __( 'Taxonomy' ),\n\t},\n\t{\n\t\tname: 'sidebar',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/sidebars',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'sidebars',\n\t\ttransientEdits: { blocks: true },\n\t\tlabel: __( 'Widget areas' ),\n\t},\n\t{\n\t\tname: 'widget',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/widgets',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'widgets',\n\t\ttransientEdits: { blocks: true },\n\t\tlabel: __( 'Widgets' ),\n\t},\n\t{\n\t\tname: 'widgetType',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/widget-types',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'widgetTypes',\n\t\tlabel: __( 'Widget types' ),\n\t},\n\t{\n\t\tlabel: __( 'User' ),\n\t\tname: 'user',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/users',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'users',\n\t},\n\t{\n\t\tname: 'comment',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/comments',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'comments',\n\t\tlabel: __( 'Comment' ),\n\t},\n\t{\n\t\tname: 'menu',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/menus',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'menus',\n\t\tlabel: __( 'Menu' ),\n\t},\n\t{\n\t\tname: 'menuItem',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/menu-items',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'menuItems',\n\t\tlabel: __( 'Menu Item' ),\n\t\trawAttributes: [ 'title' ],\n\t},\n\t{\n\t\tname: 'menuLocation',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/menu-locations',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'menuLocations',\n\t\tlabel: __( 'Menu Location' ),\n\t\tkey: 'name',\n\t},\n\t{\n\t\tlabel: __( 'Global Styles' ),\n\t\tname: 'globalStyles',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/global-styles',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'globalStylesVariations', // Should be different than name.\n\t\tgetTitle: ( record ) => record?.title?.rendered || record?.title,\n\t},\n\t{\n\t\tlabel: __( 'Themes' ),\n\t\tname: 'theme',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/themes',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tkey: 'stylesheet',\n\t},\n\t{\n\t\tlabel: __( 'Plugins' ),\n\t\tname: 'plugin',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/plugins',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tkey: 'plugin',\n\t},\n];\n\nexport const additionalEntityConfigLoaders = [\n\t{ kind: 'postType', loadEntities: loadPostTypeEntities },\n\t{ kind: 'taxonomy', loadEntities: loadTaxonomyEntities },\n];\n\n/**\n * Returns a function to be used to retrieve extra edits to apply before persisting a post type.\n *\n * @param {Object} persistedRecord Already persisted Post\n * @param {Object} edits Edits.\n * @return {Object} Updated edits.\n */\nexport const prePersistPostType = ( persistedRecord, edits ) => {\n\tconst newEdits = {};\n\n\tif ( persistedRecord?.status === 'auto-draft' ) {\n\t\t// Saving an auto-draft should create a draft by default.\n\t\tif ( ! edits.status && ! newEdits.status ) {\n\t\t\tnewEdits.status = 'draft';\n\t\t}\n\n\t\t// Fix the auto-draft default title.\n\t\tif (\n\t\t\t( ! edits.title || edits.title === 'Auto Draft' ) &&\n\t\t\t! newEdits.title &&\n\t\t\t( ! persistedRecord?.title ||\n\t\t\t\tpersistedRecord?.title === 'Auto Draft' )\n\t\t) {\n\t\t\tnewEdits.title = '';\n\t\t}\n\t}\n\n\treturn newEdits;\n};\n\n/**\n * Returns the list of post type entities.\n *\n * @return {Promise} Entities promise\n */\nasync function loadPostTypeEntities() {\n\tconst postTypes = await apiFetch( {\n\t\tpath: '/wp/v2/types?context=view',\n\t} );\n\treturn Object.entries( postTypes ?? {} ).map( ( [ name, postType ] ) => {\n\t\tconst isTemplate = [ 'wp_template', 'wp_template_part' ].includes(\n\t\t\tname\n\t\t);\n\t\tconst namespace = postType?.rest_namespace ?? 'wp/v2';\n\t\treturn {\n\t\t\tkind: 'postType',\n\t\t\tbaseURL: `/${ namespace }/${ postType.rest_base }`,\n\t\t\tbaseURLParams: { context: 'edit' },\n\t\t\tname,\n\t\t\tlabel: postType.name,\n\t\t\ttransientEdits: {\n\t\t\t\tblocks: true,\n\t\t\t\tselection: true,\n\t\t\t},\n\t\t\tmergedEdits: { meta: true },\n\t\t\trawAttributes: POST_RAW_ATTRIBUTES,\n\t\t\tgetTitle: ( record ) =>\n\t\t\t\trecord?.title?.rendered ||\n\t\t\t\trecord?.title ||\n\t\t\t\t( isTemplate\n\t\t\t\t\t? capitalCase( record.slug ?? '' )\n\t\t\t\t\t: String( record.id ) ),\n\t\t\t__unstablePrePersist: isTemplate ? undefined : prePersistPostType,\n\t\t\t__unstable_rest_base: postType.rest_base,\n\t\t\tsyncConfig: {\n\t\t\t\tfetch: async ( id ) => {\n\t\t\t\t\treturn apiFetch( {\n\t\t\t\t\t\tpath: `/${ namespace }/${ postType.rest_base }/${ id }?context=edit`,\n\t\t\t\t\t} );\n\t\t\t\t},\n\t\t\t\tapplyChangesToDoc: ( doc, changes ) => {\n\t\t\t\t\tconst document = doc.getMap( 'document' );\n\t\t\t\t\tObject.entries( changes ).forEach( ( [ key, value ] ) => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tdocument.get( key ) !== value &&\n\t\t\t\t\t\t\ttypeof value !== 'function'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tdocument.set( key, value );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t},\n\t\t\t\tfromCRDTDoc: ( doc ) => {\n\t\t\t\t\treturn doc.getMap( 'document' ).toJSON();\n\t\t\t\t},\n\t\t\t},\n\t\t\tsyncObjectType: 'postType/' + postType.name,\n\t\t\tgetSyncObjectId: ( id ) => id,\n\t\t};\n\t} );\n}\n\n/**\n * Returns the list of the taxonomies entities.\n *\n * @return {Promise} Entities promise\n */\nasync function loadTaxonomyEntities() {\n\tconst taxonomies = await apiFetch( {\n\t\tpath: '/wp/v2/taxonomies?context=view',\n\t} );\n\treturn Object.entries( taxonomies ?? {} ).map( ( [ name, taxonomy ] ) => {\n\t\tconst namespace = taxonomy?.rest_namespace ?? 'wp/v2';\n\t\treturn {\n\t\t\tkind: 'taxonomy',\n\t\t\tbaseURL: `/${ namespace }/${ taxonomy.rest_base }`,\n\t\t\tbaseURLParams: { context: 'edit' },\n\t\t\tname,\n\t\t\tlabel: taxonomy.name,\n\t\t};\n\t} );\n}\n\n/**\n * Returns the entity's getter method name given its kind and name.\n *\n * @example\n * ```js\n * const nameSingular = getMethodName( 'root', 'theme', 'get' );\n * // nameSingular is getRootTheme\n *\n * const namePlural = getMethodName( 'root', 'theme', 'set' );\n * // namePlural is setRootThemes\n * ```\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {string} prefix Function prefix.\n * @param {boolean} usePlural Whether to use the plural form or not.\n *\n * @return {string} Method name\n */\nexport const getMethodName = (\n\tkind,\n\tname,\n\tprefix = 'get',\n\tusePlural = false\n) => {\n\tconst entityConfig = rootEntitiesConfig.find(\n\t\t( config ) => config.kind === kind && config.name === name\n\t);\n\tconst kindPrefix = kind === 'root' ? '' : pascalCase( kind );\n\tconst nameSuffix = pascalCase( name ) + ( usePlural ? 's' : '' );\n\tconst suffix =\n\t\tusePlural && 'plural' in entityConfig && entityConfig?.plural\n\t\t\t? pascalCase( entityConfig.plural )\n\t\t\t: nameSuffix;\n\treturn `${ prefix }${ kindPrefix }${ suffix }`;\n};\n\nfunction registerSyncConfigs( configs ) {\n\tconfigs.forEach( ( { syncObjectType, syncConfig } ) => {\n\t\tgetSyncProvider().register( syncObjectType, syncConfig );\n\t\tconst editSyncConfig = { ...syncConfig };\n\t\tdelete editSyncConfig.fetch;\n\t\tgetSyncProvider().register( syncObjectType + '--edit', editSyncConfig );\n\t} );\n}\n\n/**\n * Loads the kind entities into the store.\n *\n * @param {string} kind Kind\n *\n * @return {(thunkArgs: object) => Promise<Array>} Entities\n */\nexport const getOrLoadEntitiesConfig =\n\t( kind ) =>\n\tasync ( { select, dispatch } ) => {\n\t\tlet configs = select.getEntitiesConfig( kind );\n\t\tif ( configs && configs.length !== 0 ) {\n\t\t\tregisterSyncConfigs( configs );\n\t\t\treturn configs;\n\t\t}\n\n\t\tconst loader = additionalEntityConfigLoaders.find(\n\t\t\t( l ) => l.kind === kind\n\t\t);\n\t\tif ( ! loader ) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconfigs = await loader.loadEntities();\n\t\tregisterSyncConfigs( configs );\n\t\tdispatch( addEntities( configs ) );\n\n\t\treturn configs;\n\t};\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,WAAW,EAAEC,UAAU,QAAQ,aAAa;;AAErD;AACA;AACA;AACA,OAAOC,QAAQ,MAAM,sBAAsB;AAC3C,SAASC,EAAE,QAAQ,iBAAiB;;AAEpC;AACA;AACA;AACA,SAASC,WAAW,QAAQ,WAAW;AACvC,SAASC,eAAe,QAAQ,QAAQ;AAExC,OAAO,MAAMC,kBAAkB,GAAG,IAAI;AAEtC,MAAMC,mBAAmB,GAAG,CAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAE;AAE7D,OAAO,MAAMC,kBAAkB,GAAG,CACjC;EACCC,KAAK,EAAEN,EAAE,CAAE,MAAO,CAAC;EACnBO,IAAI,EAAE,MAAM;EACZC,IAAI,EAAE,gBAAgB;EACtBC,OAAO,EAAE,GAAG;EACZC,aAAa,EAAE;IACdC,OAAO,EAAE,CACR,aAAa,EACb,YAAY,EACZ,MAAM,EACN,MAAM,EACN,WAAW,EACX,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,KAAK,CACL,CAACC,IAAI,CAAE,GAAI;EACb,CAAC;EACDC,UAAU,EAAE;IACXC,KAAK,EAAE,MAAAA,CAAA,KAAY;MAClB,OAAOf,QAAQ,CAAE;QAAEgB,IAAI,EAAE;MAAI,CAAE,CAAC;IACjC,CAAC;IACDC,iBAAiB,EAAEA,CAAEC,GAAG,EAAEC,OAAO,KAAM;MACtC,MAAMC,QAAQ,GAAGF,GAAG,CAACG,MAAM,CAAE,UAAW,CAAC;MACzCC,MAAM,CAACC,OAAO,CAAEJ,OAAQ,CAAC,CAACK,OAAO,CAAE,CAAE,CAAEC,GAAG,EAAEC,KAAK,CAAE,KAAM;QACxD,IAAKN,QAAQ,CAACO,GAAG,CAAEF,GAAI,CAAC,KAAKC,KAAK,EAAG;UACpCN,QAAQ,CAACQ,GAAG,CAAEH,GAAG,EAAEC,KAAM,CAAC;QAC3B;MACD,CAAE,CAAC;IACJ,CAAC;IACDG,WAAW,EAAIX,GAAG,IAAM;MACvB,OAAOA,GAAG,CAACG,MAAM,CAAE,UAAW,CAAC,CAACS,MAAM,CAAC,CAAC;IACzC;EACD,CAAC;EACDC,cAAc,EAAE,WAAW;EAC3BC,eAAe,EAAEA,CAAA,KAAM;AACxB,CAAC,EACD;EACCzB,KAAK,EAAEN,EAAE,CAAE,MAAO,CAAC;EACnBQ,IAAI,EAAE,MAAM;EACZD,IAAI,EAAE,MAAM;EACZE,OAAO,EAAE,iBAAiB;EAC1BuB,QAAQ,EAAIC,MAAM,IAAM;IAAA,IAAAC,aAAA;IACvB,QAAAA,aAAA,GAAOD,MAAM,EAAEE,KAAK,cAAAD,aAAA,cAAAA,aAAA,GAAIlC,EAAE,CAAE,YAAa,CAAC;EAC3C,CAAC;EACDa,UAAU,EAAE;IACXC,KAAK,EAAE,MAAAA,CAAA,KAAY;MAClB,OAAOf,QAAQ,CAAE;QAAEgB,IAAI,EAAE;MAAkB,CAAE,CAAC;IAC/C,CAAC;IACDC,iBAAiB,EAAEA,CAAEC,GAAG,EAAEC,OAAO,KAAM;MACtC,MAAMC,QAAQ,GAAGF,GAAG,CAACG,MAAM,CAAE,UAAW,CAAC;MACzCC,MAAM,CAACC,OAAO,CAAEJ,OAAQ,CAAC,CAACK,OAAO,CAAE,CAAE,CAAEC,GAAG,EAAEC,KAAK,CAAE,KAAM;QACxD,IAAKN,QAAQ,CAACO,GAAG,CAAEF,GAAI,CAAC,KAAKC,KAAK,EAAG;UACpCN,QAAQ,CAACQ,GAAG,CAAEH,GAAG,EAAEC,KAAM,CAAC;QAC3B;MACD,CAAE,CAAC;IACJ,CAAC;IACDG,WAAW,EAAIX,GAAG,IAAM;MACvB,OAAOA,GAAG,CAACG,MAAM,CAAE,UAAW,CAAC,CAACS,MAAM,CAAC,CAAC;IACzC;EACD,CAAC;EACDC,cAAc,EAAE,WAAW;EAC3BC,eAAe,EAAEA,CAAA,KAAM;AACxB,CAAC,EACD;EACCzB,KAAK,EAAEN,EAAE,CAAE,WAAY,CAAC;EACxBQ,IAAI,EAAE,UAAU;EAChBD,IAAI,EAAE,MAAM;EACZiB,GAAG,EAAE,MAAM;EACXf,OAAO,EAAE,cAAc;EACvBC,aAAa,EAAE;IAAE0B,OAAO,EAAE;EAAO,CAAC;EAClCvB,UAAU,EAAE;IACXC,KAAK,EAAE,MAAQuB,EAAE,IAAM;MACtB,OAAOtC,QAAQ,CAAE;QAChBgB,IAAI,EAAG,gBAAgBsB,EAAI;MAC5B,CAAE,CAAC;IACJ,CAAC;IACDrB,iBAAiB,EAAEA,CAAEC,GAAG,EAAEC,OAAO,KAAM;MACtC,MAAMC,QAAQ,GAAGF,GAAG,CAACG,MAAM,CAAE,UAAW,CAAC;MACzCC,MAAM,CAACC,OAAO,CAAEJ,OAAQ,CAAC,CAACK,OAAO,CAAE,CAAE,CAAEC,GAAG,EAAEC,KAAK,CAAE,KAAM;QACxD,IAAKN,QAAQ,CAACO,GAAG,CAAEF,GAAI,CAAC,KAAKC,KAAK,EAAG;UACpCN,QAAQ,CAACQ,GAAG,CAAEH,GAAG,EAAEC,KAAM,CAAC;QAC3B;MACD,CAAE,CAAC;IACJ,CAAC;IACDG,WAAW,EAAIX,GAAG,IAAM;MACvB,OAAOA,GAAG,CAACG,MAAM,CAAE,UAAW,CAAC,CAACS,MAAM,CAAC,CAAC;IACzC;EACD,CAAC;EACDC,cAAc,EAAE,eAAe;EAC/BC,eAAe,EAAIM,EAAE,IAAMA;AAC5B,CAAC,EACD;EACC7B,IAAI,EAAE,OAAO;EACbD,IAAI,EAAE,MAAM;EACZE,OAAO,EAAE,cAAc;EACvBC,aAAa,EAAE;IAAE0B,OAAO,EAAE;EAAO,CAAC;EAClCE,MAAM,EAAE,YAAY;EACpBhC,KAAK,EAAEN,EAAE,CAAE,OAAQ,CAAC;EACpBuC,aAAa,EAAE,CAAE,SAAS,EAAE,OAAO,EAAE,aAAa;AACnD,CAAC,EACD;EACC/B,IAAI,EAAE,UAAU;EAChBD,IAAI,EAAE,MAAM;EACZiB,GAAG,EAAE,MAAM;EACXf,OAAO,EAAE,mBAAmB;EAC5BC,aAAa,EAAE;IAAE0B,OAAO,EAAE;EAAO,CAAC;EAClCE,MAAM,EAAE,YAAY;EACpBhC,KAAK,EAAEN,EAAE,CAAE,UAAW;AACvB,CAAC,EACD;EACCQ,IAAI,EAAE,SAAS;EACfD,IAAI,EAAE,MAAM;EACZE,OAAO,EAAE,iBAAiB;EAC1BC,aAAa,EAAE;IAAE0B,OAAO,EAAE;EAAO,CAAC;EAClCE,MAAM,EAAE,UAAU;EAClBE,cAAc,EAAE;IAAEC,MAAM,EAAE;EAAK,CAAC;EAChCnC,KAAK,EAAEN,EAAE,CAAE,cAAe;AAC3B,CAAC,EACD;EACCQ,IAAI,EAAE,QAAQ;EACdD,IAAI,EAAE,MAAM;EACZE,OAAO,EAAE,gBAAgB;EACzBC,aAAa,EAAE;IAAE0B,OAAO,EAAE;EAAO,CAAC;EAClCE,MAAM,EAAE,SAAS;EACjBE,cAAc,EAAE;IAAEC,MAAM,EAAE;EAAK,CAAC;EAChCnC,KAAK,EAAEN,EAAE,CAAE,SAAU;AACtB,CAAC,EACD;EACCQ,IAAI,EAAE,YAAY;EAClBD,IAAI,EAAE,MAAM;EACZE,OAAO,EAAE,qBAAqB;EAC9BC,aAAa,EAAE;IAAE0B,OAAO,EAAE;EAAO,CAAC;EAClCE,MAAM,EAAE,aAAa;EACrBhC,KAAK,EAAEN,EAAE,CAAE,cAAe;AAC3B,CAAC,EACD;EACCM,KAAK,EAAEN,EAAE,CAAE,MAAO,CAAC;EACnBQ,IAAI,EAAE,MAAM;EACZD,IAAI,EAAE,MAAM;EACZE,OAAO,EAAE,cAAc;EACvBC,aAAa,EAAE;IAAE0B,OAAO,EAAE;EAAO,CAAC;EAClCE,MAAM,EAAE;AACT,CAAC,EACD;EACC9B,IAAI,EAAE,SAAS;EACfD,IAAI,EAAE,MAAM;EACZE,OAAO,EAAE,iBAAiB;EAC1BC,aAAa,EAAE;IAAE0B,OAAO,EAAE;EAAO,CAAC;EAClCE,MAAM,EAAE,UAAU;EAClBhC,KAAK,EAAEN,EAAE,CAAE,SAAU;AACtB,CAAC,EACD;EACCQ,IAAI,EAAE,MAAM;EACZD,IAAI,EAAE,MAAM;EACZE,OAAO,EAAE,cAAc;EACvBC,aAAa,EAAE;IAAE0B,OAAO,EAAE;EAAO,CAAC;EAClCE,MAAM,EAAE,OAAO;EACfhC,KAAK,EAAEN,EAAE,CAAE,MAAO;AACnB,CAAC,EACD;EACCQ,IAAI,EAAE,UAAU;EAChBD,IAAI,EAAE,MAAM;EACZE,OAAO,EAAE,mBAAmB;EAC5BC,aAAa,EAAE;IAAE0B,OAAO,EAAE;EAAO,CAAC;EAClCE,MAAM,EAAE,WAAW;EACnBhC,KAAK,EAAEN,EAAE,CAAE,WAAY,CAAC;EACxBuC,aAAa,EAAE,CAAE,OAAO;AACzB,CAAC,EACD;EACC/B,IAAI,EAAE,cAAc;EACpBD,IAAI,EAAE,MAAM;EACZE,OAAO,EAAE,uBAAuB;EAChCC,aAAa,EAAE;IAAE0B,OAAO,EAAE;EAAO,CAAC;EAClCE,MAAM,EAAE,eAAe;EACvBhC,KAAK,EAAEN,EAAE,CAAE,eAAgB,CAAC;EAC5BwB,GAAG,EAAE;AACN,CAAC,EACD;EACClB,KAAK,EAAEN,EAAE,CAAE,eAAgB,CAAC;EAC5BQ,IAAI,EAAE,cAAc;EACpBD,IAAI,EAAE,MAAM;EACZE,OAAO,EAAE,sBAAsB;EAC/BC,aAAa,EAAE;IAAE0B,OAAO,EAAE;EAAO,CAAC;EAClCE,MAAM,EAAE,wBAAwB;EAAE;EAClCN,QAAQ,EAAIC,MAAM,IAAMA,MAAM,EAAEE,KAAK,EAAEO,QAAQ,IAAIT,MAAM,EAAEE;AAC5D,CAAC,EACD;EACC7B,KAAK,EAAEN,EAAE,CAAE,QAAS,CAAC;EACrBQ,IAAI,EAAE,OAAO;EACbD,IAAI,EAAE,MAAM;EACZE,OAAO,EAAE,eAAe;EACxBC,aAAa,EAAE;IAAE0B,OAAO,EAAE;EAAO,CAAC;EAClCZ,GAAG,EAAE;AACN,CAAC,EACD;EACClB,KAAK,EAAEN,EAAE,CAAE,SAAU,CAAC;EACtBQ,IAAI,EAAE,QAAQ;EACdD,IAAI,EAAE,MAAM;EACZE,OAAO,EAAE,gBAAgB;EACzBC,aAAa,EAAE;IAAE0B,OAAO,EAAE;EAAO,CAAC;EAClCZ,GAAG,EAAE;AACN,CAAC,CACD;AAED,OAAO,MAAMmB,6BAA6B,GAAG,CAC5C;EAAEpC,IAAI,EAAE,UAAU;EAAEqC,YAAY,EAAEC;AAAqB,CAAC,EACxD;EAAEtC,IAAI,EAAE,UAAU;EAAEqC,YAAY,EAAEE;AAAqB,CAAC,CACxD;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,kBAAkB,GAAGA,CAAEC,eAAe,EAAEC,KAAK,KAAM;EAC/D,MAAMC,QAAQ,GAAG,CAAC,CAAC;EAEnB,IAAKF,eAAe,EAAEG,MAAM,KAAK,YAAY,EAAG;IAC/C;IACA,IAAK,CAAEF,KAAK,CAACE,MAAM,IAAI,CAAED,QAAQ,CAACC,MAAM,EAAG;MAC1CD,QAAQ,CAACC,MAAM,GAAG,OAAO;IAC1B;;IAEA;IACA,IACC,CAAE,CAAEF,KAAK,CAACd,KAAK,IAAIc,KAAK,CAACd,KAAK,KAAK,YAAY,KAC/C,CAAEe,QAAQ,CAACf,KAAK,KACd,CAAEa,eAAe,EAAEb,KAAK,IACzBa,eAAe,EAAEb,KAAK,KAAK,YAAY,CAAE,EACzC;MACDe,QAAQ,CAACf,KAAK,GAAG,EAAE;IACpB;EACD;EAEA,OAAOe,QAAQ;AAChB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,eAAeL,oBAAoBA,CAAA,EAAG;EACrC,MAAMO,SAAS,GAAG,MAAMrD,QAAQ,CAAE;IACjCgB,IAAI,EAAE;EACP,CAAE,CAAC;EACH,OAAOM,MAAM,CAACC,OAAO,CAAE8B,SAAS,aAATA,SAAS,cAATA,SAAS,GAAI,CAAC,CAAE,CAAC,CAACC,GAAG,CAAE,CAAE,CAAE7C,IAAI,EAAE8C,QAAQ,CAAE,KAAM;IAAA,IAAAC,qBAAA;IACvE,MAAMC,UAAU,GAAG,CAAE,aAAa,EAAE,kBAAkB,CAAE,CAACC,QAAQ,CAChEjD,IACD,CAAC;IACD,MAAMkD,SAAS,IAAAH,qBAAA,GAAGD,QAAQ,EAAEK,cAAc,cAAAJ,qBAAA,cAAAA,qBAAA,GAAI,OAAO;IACrD,OAAO;MACNhD,IAAI,EAAE,UAAU;MAChBE,OAAO,EAAG,IAAIiD,SAAW,IAAIJ,QAAQ,CAACM,SAAW,EAAC;MAClDlD,aAAa,EAAE;QAAE0B,OAAO,EAAE;MAAO,CAAC;MAClC5B,IAAI;MACJF,KAAK,EAAEgD,QAAQ,CAAC9C,IAAI;MACpBgC,cAAc,EAAE;QACfC,MAAM,EAAE,IAAI;QACZoB,SAAS,EAAE;MACZ,CAAC;MACDC,WAAW,EAAE;QAAEC,IAAI,EAAE;MAAK,CAAC;MAC3BxB,aAAa,EAAEnC,mBAAmB;MAClC4B,QAAQ,EAAIC,MAAM;QAAA,IAAA+B,YAAA;QAAA,OACjB/B,MAAM,EAAEE,KAAK,EAAEO,QAAQ,IACvBT,MAAM,EAAEE,KAAK,KACXqB,UAAU,GACT3D,WAAW,EAAAmE,YAAA,GAAE/B,MAAM,CAACgC,IAAI,cAAAD,YAAA,cAAAA,YAAA,GAAI,EAAG,CAAC,GAChCE,MAAM,CAAEjC,MAAM,CAACI,EAAG,CAAC,CAAE;MAAA;MACzB8B,oBAAoB,EAAEX,UAAU,GAAGY,SAAS,GAAGrB,kBAAkB;MACjEsB,oBAAoB,EAAEf,QAAQ,CAACM,SAAS;MACxC/C,UAAU,EAAE;QACXC,KAAK,EAAE,MAAQuB,EAAE,IAAM;UACtB,OAAOtC,QAAQ,CAAE;YAChBgB,IAAI,EAAG,IAAI2C,SAAW,IAAIJ,QAAQ,CAACM,SAAW,IAAIvB,EAAI;UACvD,CAAE,CAAC;QACJ,CAAC;QACDrB,iBAAiB,EAAEA,CAAEC,GAAG,EAAEC,OAAO,KAAM;UACtC,MAAMC,QAAQ,GAAGF,GAAG,CAACG,MAAM,CAAE,UAAW,CAAC;UACzCC,MAAM,CAACC,OAAO,CAAEJ,OAAQ,CAAC,CAACK,OAAO,CAAE,CAAE,CAAEC,GAAG,EAAEC,KAAK,CAAE,KAAM;YACxD,IACCN,QAAQ,CAACO,GAAG,CAAEF,GAAI,CAAC,KAAKC,KAAK,IAC7B,OAAOA,KAAK,KAAK,UAAU,EAC1B;cACDN,QAAQ,CAACQ,GAAG,CAAEH,GAAG,EAAEC,KAAM,CAAC;YAC3B;UACD,CAAE,CAAC;QACJ,CAAC;QACDG,WAAW,EAAIX,GAAG,IAAM;UACvB,OAAOA,GAAG,CAACG,MAAM,CAAE,UAAW,CAAC,CAACS,MAAM,CAAC,CAAC;QACzC;MACD,CAAC;MACDC,cAAc,EAAE,WAAW,GAAGwB,QAAQ,CAAC9C,IAAI;MAC3CuB,eAAe,EAAIM,EAAE,IAAMA;IAC5B,CAAC;EACF,CAAE,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAeS,oBAAoBA,CAAA,EAAG;EACrC,MAAMwB,UAAU,GAAG,MAAMvE,QAAQ,CAAE;IAClCgB,IAAI,EAAE;EACP,CAAE,CAAC;EACH,OAAOM,MAAM,CAACC,OAAO,CAAEgD,UAAU,aAAVA,UAAU,cAAVA,UAAU,GAAI,CAAC,CAAE,CAAC,CAACjB,GAAG,CAAE,CAAE,CAAE7C,IAAI,EAAE+D,QAAQ,CAAE,KAAM;IAAA,IAAAC,qBAAA;IACxE,MAAMd,SAAS,IAAAc,qBAAA,GAAGD,QAAQ,EAAEZ,cAAc,cAAAa,qBAAA,cAAAA,qBAAA,GAAI,OAAO;IACrD,OAAO;MACNjE,IAAI,EAAE,UAAU;MAChBE,OAAO,EAAG,IAAIiD,SAAW,IAAIa,QAAQ,CAACX,SAAW,EAAC;MAClDlD,aAAa,EAAE;QAAE0B,OAAO,EAAE;MAAO,CAAC;MAClC5B,IAAI;MACJF,KAAK,EAAEiE,QAAQ,CAAC/D;IACjB,CAAC;EACF,CAAE,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMiE,aAAa,GAAGA,CAC5BlE,IAAI,EACJC,IAAI,EACJkE,MAAM,GAAG,KAAK,EACdC,SAAS,GAAG,KAAK,KACb;EACJ,MAAMC,YAAY,GAAGvE,kBAAkB,CAACwE,IAAI,CACzCC,MAAM,IAAMA,MAAM,CAACvE,IAAI,KAAKA,IAAI,IAAIuE,MAAM,CAACtE,IAAI,KAAKA,IACvD,CAAC;EACD,MAAMuE,UAAU,GAAGxE,IAAI,KAAK,MAAM,GAAG,EAAE,GAAGT,UAAU,CAAES,IAAK,CAAC;EAC5D,MAAMyE,UAAU,GAAGlF,UAAU,CAAEU,IAAK,CAAC,IAAKmE,SAAS,GAAG,GAAG,GAAG,EAAE,CAAE;EAChE,MAAMM,MAAM,GACXN,SAAS,IAAI,QAAQ,IAAIC,YAAY,IAAIA,YAAY,EAAEtC,MAAM,GAC1DxC,UAAU,CAAE8E,YAAY,CAACtC,MAAO,CAAC,GACjC0C,UAAU;EACd,OAAQ,GAAGN,MAAQ,GAAGK,UAAY,GAAGE,MAAQ,EAAC;AAC/C,CAAC;AAED,SAASC,mBAAmBA,CAAEC,OAAO,EAAG;EACvCA,OAAO,CAAC5D,OAAO,CAAE,CAAE;IAAEO,cAAc;IAAEjB;EAAW,CAAC,KAAM;IACtDX,eAAe,CAAC,CAAC,CAACkF,QAAQ,CAAEtD,cAAc,EAAEjB,UAAW,CAAC;IACxD,MAAMwE,cAAc,GAAG;MAAE,GAAGxE;IAAW,CAAC;IACxC,OAAOwE,cAAc,CAACvE,KAAK;IAC3BZ,eAAe,CAAC,CAAC,CAACkF,QAAQ,CAAEtD,cAAc,GAAG,QAAQ,EAAEuD,cAAe,CAAC;EACxE,CAAE,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,uBAAuB,GACjC/E,IAAI,IACN,OAAQ;EAAEgF,MAAM;EAAEC;AAAS,CAAC,KAAM;EACjC,IAAIL,OAAO,GAAGI,MAAM,CAACE,iBAAiB,CAAElF,IAAK,CAAC;EAC9C,IAAK4E,OAAO,IAAIA,OAAO,CAACO,MAAM,KAAK,CAAC,EAAG;IACtCR,mBAAmB,CAAEC,OAAQ,CAAC;IAC9B,OAAOA,OAAO;EACf;EAEA,MAAMQ,MAAM,GAAGhD,6BAA6B,CAACkC,IAAI,CAC9Ce,CAAC,IAAMA,CAAC,CAACrF,IAAI,KAAKA,IACrB,CAAC;EACD,IAAK,CAAEoF,MAAM,EAAG;IACf,OAAO,EAAE;EACV;EAEAR,OAAO,GAAG,MAAMQ,MAAM,CAAC/C,YAAY,CAAC,CAAC;EACrCsC,mBAAmB,CAAEC,OAAQ,CAAC;EAC9BK,QAAQ,CAAEvF,WAAW,CAAEkF,OAAQ,CAAE,CAAC;EAElC,OAAOA,OAAO;AACf,CAAC"}
@@ -1,5 +1,4 @@
1
1
  import { createElement } from "@wordpress/element";
2
-
3
2
  /**
4
3
  * WordPress dependencies
5
4
  */
@@ -7,26 +6,27 @@ import { createContext, useContext, useCallback, useMemo } from '@wordpress/elem
7
6
  import { useSelect, useDispatch } from '@wordpress/data';
8
7
  import { parse, __unstableSerializeAndClean } from '@wordpress/blocks';
9
8
  import { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
9
+
10
10
  /**
11
11
  * Internal dependencies
12
12
  */
13
-
14
13
  import { STORE_NAME } from './name';
15
14
  import { unlock } from './private-apis';
15
+
16
16
  /** @typedef {import('@wordpress/blocks').WPBlock} WPBlock */
17
17
 
18
18
  const EMPTY_ARRAY = [];
19
19
  let oldFootnotes = {};
20
+
20
21
  /**
21
22
  * Internal dependencies
22
23
  */
23
-
24
24
  import { rootEntitiesConfig, additionalEntityConfigLoaders } from './entities';
25
- const entityContexts = { ...rootEntitiesConfig.reduce((acc, loader) => {
25
+ const entityContexts = {
26
+ ...rootEntitiesConfig.reduce((acc, loader) => {
26
27
  if (!acc[loader.kind]) {
27
28
  acc[loader.kind] = {};
28
29
  }
29
-
30
30
  acc[loader.kind][loader.name] = {
31
31
  context: createContext(undefined)
32
32
  };
@@ -37,20 +37,18 @@ const entityContexts = { ...rootEntitiesConfig.reduce((acc, loader) => {
37
37
  return acc;
38
38
  }, {})
39
39
  };
40
-
41
40
  const getEntityContext = (kind, name) => {
42
41
  if (!entityContexts[kind]) {
43
42
  throw new Error(`Missing entity config for kind: ${kind}.`);
44
43
  }
45
-
46
44
  if (!entityContexts[kind][name]) {
47
45
  entityContexts[kind][name] = {
48
46
  context: createContext(undefined)
49
47
  };
50
48
  }
51
-
52
49
  return entityContexts[kind][name].context;
53
50
  };
51
+
54
52
  /**
55
53
  * Context provider component for providing
56
54
  * an entity for a specific entity.
@@ -64,8 +62,6 @@ const getEntityContext = (kind, name) => {
64
62
  * @return {Object} The provided children, wrapped with
65
63
  * the entity's context provider.
66
64
  */
67
-
68
-
69
65
  export default function EntityProvider({
70
66
  kind,
71
67
  type: name,
@@ -77,6 +73,7 @@ export default function EntityProvider({
77
73
  value: id
78
74
  }, children);
79
75
  }
76
+
80
77
  /**
81
78
  * Hook that returns the ID for the nearest
82
79
  * provided entity of the specified type.
@@ -84,10 +81,10 @@ export default function EntityProvider({
84
81
  * @param {string} kind The entity kind.
85
82
  * @param {string} name The entity name.
86
83
  */
87
-
88
84
  export function useEntityId(kind, name) {
89
85
  return useContext(getEntityContext(kind, name));
90
86
  }
87
+
91
88
  /**
92
89
  * Hook that returns the value and a setter for the
93
90
  * specified property of the nearest provided
@@ -105,7 +102,6 @@ export function useEntityId(kind, name) {
105
102
  * information like `raw`, `rendered` and
106
103
  * `protected` props.
107
104
  */
108
-
109
105
  export function useEntityProp(kind, name, prop, _id) {
110
106
  const providerId = useEntityId(kind, name);
111
107
  const id = _id !== null && _id !== void 0 ? _id : providerId;
@@ -118,7 +114,6 @@ export function useEntityProp(kind, name, prop, _id) {
118
114
  getEditedEntityRecord
119
115
  } = select(STORE_NAME);
120
116
  const record = getEntityRecord(kind, name, id); // Trigger resolver.
121
-
122
117
  const editedRecord = getEditedEntityRecord(kind, name, id);
123
118
  return record && editedRecord ? {
124
119
  value: editedRecord[prop],
@@ -135,6 +130,7 @@ export function useEntityProp(kind, name, prop, _id) {
135
130
  }, [editEntityRecord, kind, name, id, prop]);
136
131
  return [value, setValue, fullValue];
137
132
  }
133
+
138
134
  /**
139
135
  * Hook that returns block content getters and setters for
140
136
  * the nearest provided entity of the specified type.
@@ -142,7 +138,7 @@ export function useEntityProp(kind, name, prop, _id) {
142
138
  * The return value has the shape `[ blocks, onInput, onChange ]`.
143
139
  * `onInput` is for block changes that don't create undo levels
144
140
  * or dirty the post, non-persistent changes, and `onChange` is for
145
- * peristent changes. They map directly to the props of a
141
+ * persistent changes. They map directly to the props of a
146
142
  * `BlockEditorProvider` and are intended to be used with it,
147
143
  * or similar components or hooks.
148
144
  *
@@ -153,7 +149,6 @@ export function useEntityProp(kind, name, prop, _id) {
153
149
  *
154
150
  * @return {[WPBlock[], Function, Function]} The block array and setters.
155
151
  */
156
-
157
152
  export function useEntityBlockEditor(kind, name, {
158
153
  id: _id
159
154
  } = {}) {
@@ -182,35 +177,31 @@ export function useEntityBlockEditor(kind, name, {
182
177
  if (editedBlocks) {
183
178
  return editedBlocks;
184
179
  }
185
-
186
180
  return content && typeof content !== 'function' ? parse(content) : EMPTY_ARRAY;
187
181
  }, [editedBlocks, content]);
188
182
  const updateFootnotes = useCallback(_blocks => {
189
183
  const output = {
190
184
  blocks: _blocks
191
185
  };
192
- if (!meta) return output; // If meta.footnotes is empty, it means the meta is not registered.
193
-
186
+ if (!meta) return output;
187
+ // If meta.footnotes is empty, it means the meta is not registered.
194
188
  if (meta.footnotes === undefined) return output;
195
189
  const {
196
190
  getRichTextValues
197
191
  } = unlock(blockEditorPrivateApis);
198
-
199
192
  const _content = getRichTextValues(_blocks).join('') || '';
193
+ const newOrder = [];
200
194
 
201
- const newOrder = []; // This can be avoided when
195
+ // This can be avoided when
202
196
  // https://github.com/WordPress/gutenberg/pull/43204 lands. We can then
203
197
  // get the order directly from the rich text values.
204
-
205
198
  if (_content.indexOf('data-fn') !== -1) {
206
199
  const regex = /data-fn="([^"]+)"/g;
207
200
  let match;
208
-
209
201
  while ((match = regex.exec(_content)) !== null) {
210
202
  newOrder.push(match[1]);
211
203
  }
212
204
  }
213
-
214
205
  const footnotes = meta.footnotes ? JSON.parse(meta.footnotes) : [];
215
206
  const currentOrder = footnotes.map(fn => fn.id);
216
207
  if (currentOrder.join('') === newOrder.join('')) return output;
@@ -218,29 +209,29 @@ export function useEntityBlockEditor(kind, name, {
218
209
  id: fnId,
219
210
  content: ''
220
211
  });
221
-
222
212
  function updateAttributes(attributes) {
223
- attributes = { ...attributes
213
+ // Only attempt to update attributes, if attributes is an object.
214
+ if (!attributes || Array.isArray(attributes) || typeof attributes !== 'object') {
215
+ return attributes;
216
+ }
217
+ attributes = {
218
+ ...attributes
224
219
  };
225
-
226
220
  for (const key in attributes) {
227
221
  const value = attributes[key];
228
-
229
222
  if (Array.isArray(value)) {
230
223
  attributes[key] = value.map(updateAttributes);
231
224
  continue;
232
225
  }
233
-
234
226
  if (typeof value !== 'string') {
235
227
  continue;
236
228
  }
237
-
238
229
  if (value.indexOf('data-fn') === -1) {
239
230
  continue;
240
- } // When we store rich text values, this would no longer
241
- // require a regex.
242
-
231
+ }
243
232
 
233
+ // When we store rich text values, this would no longer
234
+ // require a regex.
244
235
  const regex = /(<sup[^>]+data-fn="([^"]+)"[^>]*><a[^>]*>)[\d*]*<\/a><\/sup>/g;
245
236
  attributes[key] = value.replace(regex, (match, opening, fnId) => {
246
237
  const index = newOrder.indexOf(fnId);
@@ -252,33 +243,33 @@ export function useEntityBlockEditor(kind, name, {
252
243
  return `<sup data-fn="${fnId}" class="fn"><a href="#${fnId}" id="${fnId}-link">${index + 1}</a></sup>`;
253
244
  });
254
245
  }
255
-
256
246
  return attributes;
257
247
  }
258
-
259
248
  function updateBlocksAttributes(__blocks) {
260
249
  return __blocks.map(block => {
261
- return { ...block,
250
+ return {
251
+ ...block,
262
252
  attributes: updateAttributes(block.attributes),
263
253
  innerBlocks: updateBlocksAttributes(block.innerBlocks)
264
254
  };
265
255
  });
266
- } // We need to go through all block attributs deeply and update the
267
- // footnote anchor numbering (textContent) to match the new order.
268
-
256
+ }
269
257
 
258
+ // We need to go through all block attributes deeply and update the
259
+ // footnote anchor numbering (textContent) to match the new order.
270
260
  const newBlocks = updateBlocksAttributes(_blocks);
271
- oldFootnotes = { ...oldFootnotes,
261
+ oldFootnotes = {
262
+ ...oldFootnotes,
272
263
  ...footnotes.reduce((acc, fn) => {
273
264
  if (!newOrder.includes(fn.id)) {
274
265
  acc[fn.id] = fn;
275
266
  }
276
-
277
267
  return acc;
278
268
  }, {})
279
269
  };
280
270
  return {
281
- meta: { ...meta,
271
+ meta: {
272
+ ...meta,
282
273
  footnotes: JSON.stringify(newFootnotes)
283
274
  },
284
275
  blocks: newBlocks
@@ -286,17 +277,16 @@ export function useEntityBlockEditor(kind, name, {
286
277
  }, [meta]);
287
278
  const onChange = useCallback((newBlocks, options) => {
288
279
  const noChange = blocks === newBlocks;
289
-
290
280
  if (noChange) {
291
281
  return __unstableCreateUndoLevel(kind, name, id);
292
282
  }
293
-
294
283
  const {
295
284
  selection
296
- } = options; // We create a new function here on every persistent edit
285
+ } = options;
286
+
287
+ // We create a new function here on every persistent edit
297
288
  // to make sure the edit makes the post dirty and creates
298
289
  // a new undo level.
299
-
300
290
  const edits = {
301
291
  selection,
302
292
  content: ({