@wordpress/core-data 7.49.1 → 7.50.1-next.v.202607070741.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.
- package/CHANGELOG.md +2 -0
- package/build/entities.cjs +10 -0
- package/build/entities.cjs.map +2 -2
- package/build/private-actions.cjs +4 -0
- package/build/private-actions.cjs.map +2 -2
- package/build/resolvers.cjs +2 -1
- package/build/resolvers.cjs.map +2 -2
- package/build/utils/crdt-blocks.cjs.map +2 -2
- package/build/utils/crdt.cjs +7 -2
- package/build/utils/crdt.cjs.map +2 -2
- package/build-module/entities.mjs +10 -0
- package/build-module/entities.mjs.map +2 -2
- package/build-module/private-actions.mjs +4 -0
- package/build-module/private-actions.mjs.map +2 -2
- package/build-module/resolvers.mjs +2 -1
- package/build-module/resolvers.mjs.map +2 -2
- package/build-module/utils/crdt-blocks.mjs.map +2 -2
- package/build-module/utils/crdt.mjs +7 -2
- package/build-module/utils/crdt.mjs.map +2 -2
- package/build-types/entities.d.ts +17 -0
- package/build-types/entities.d.ts.map +1 -1
- package/build-types/private-actions.d.ts.map +1 -1
- package/build-types/resolvers.d.ts.map +1 -1
- package/build-types/utils/crdt-blocks.d.ts +1 -0
- package/build-types/utils/crdt-blocks.d.ts.map +1 -1
- package/build-types/utils/crdt.d.ts.map +1 -1
- package/package.json +19 -18
- package/src/entities.js +10 -0
- package/src/private-actions.js +4 -0
- package/src/resolvers.js +6 -1
- package/src/test/private-actions.js +38 -1
- package/src/test/resolvers.js +45 -0
- package/src/utils/crdt-blocks.ts +1 -0
- package/src/utils/crdt.ts +18 -2
- package/src/utils/test/crdt-blocks.ts +58 -0
- package/src/utils/test/crdt.ts +47 -0
package/CHANGELOG.md
CHANGED
package/build/entities.cjs
CHANGED
|
@@ -264,6 +264,16 @@ var rootEntitiesConfig = [
|
|
|
264
264
|
plural: "icons",
|
|
265
265
|
key: "name",
|
|
266
266
|
supportsPagination: false
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
label: (0, import_i18n.__)("Icon Collections"),
|
|
270
|
+
name: "iconCollection",
|
|
271
|
+
kind: "root",
|
|
272
|
+
baseURL: "/wp/v2/icon-collections",
|
|
273
|
+
baseURLParams: { context: "view" },
|
|
274
|
+
plural: "iconCollections",
|
|
275
|
+
key: "slug",
|
|
276
|
+
supportsPagination: false
|
|
267
277
|
}
|
|
268
278
|
];
|
|
269
279
|
var deprecatedEntities = {
|
package/build/entities.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/entities.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * External dependencies\n */\nimport { capitalCase, pascalCase } from 'change-case';\n\n/**\n * WordPress dependencies\n */\nimport apiFetch from '@wordpress/api-fetch';\nimport { __unstableSerializeAndClean, parse } from '@wordpress/blocks';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { PostEditorAwareness } from './awareness/post-editor-awareness';\nimport { getSyncManager } from './sync';\nimport {\n\tapplyPostChangesToCRDTDoc,\n\tdefaultCollectionSyncConfig,\n\tdefaultSyncConfig,\n\tgetPostChangesFromCRDTDoc,\n\tPOST_META_KEY_FOR_CRDT_DOC_PERSISTENCE,\n} from './utils/crdt';\n\nexport const DEFAULT_ENTITY_KEY = 'id';\nconst POST_RAW_ATTRIBUTES = [ 'title', 'excerpt', 'content' ];\n\nconst blocksTransientEdits = {\n\tblocks: {\n\t\tread: ( record ) => parse( record.content?.raw ?? '' ),\n\t\twrite: ( record ) => ( {\n\t\t\tcontent: __unstableSerializeAndClean( record.blocks ),\n\t\t} ),\n\t},\n};\n\nexport const rootEntitiesConfig = [\n\t{\n\t\tlabel: __( 'Base' ),\n\t\tkind: 'root',\n\t\tkey: false,\n\t\tname: '__unstableBase',\n\t\tbaseURL: '/',\n\t\tbaseURLParams: {\n\t\t\t// Please also change the preload path when changing this.\n\t\t\t// @see lib/compat/wordpress-7.1/preload.php\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'image_sizes',\n\t\t\t\t'image_size_threshold',\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\t'page_for_posts',\n\t\t\t\t'page_on_front',\n\t\t\t\t'show_on_front',\n\t\t\t].join( ',' ),\n\t\t},\n\t\t// The entity doesn't support selecting multiple records.\n\t\t// The property is maintained for backward compatibility.\n\t\tplural: '__unstableBases',\n\t\tsupportsPagination: false,\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\tplural: 'postTypes',\n\t\tsupportsPagination: false,\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\tsupportsPagination: true,\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\tsupportsPagination: false,\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\tsupportsPagination: false,\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\tsupportsPagination: false,\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\tsupportsPagination: false,\n\t},\n\t{\n\t\tlabel: __( 'User' ),\n\t\tname: 'user',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/users',\n\t\tgetTitle: ( record ) => record?.name || record?.slug,\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'users',\n\t\tsupportsPagination: true,\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\tsupportsPagination: true,\n\t\tsyncConfig: defaultCollectionSyncConfig,\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\tsupportsPagination: true,\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\tsupportsPagination: true,\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\tsupportsPagination: false,\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 from name.\n\t\tgetTitle: () => __( 'Custom Styles' ),\n\t\tgetRevisionsUrl: ( parentId, revisionId ) =>\n\t\t\t`/wp/v2/global-styles/${ parentId }/revisions${\n\t\t\t\trevisionId ? '/' + revisionId : ''\n\t\t\t}`,\n\t\tsupportsPagination: true,\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\tplural: 'themes',\n\t\tkey: 'stylesheet',\n\t\tsupportsPagination: false,\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\tplural: 'plugins',\n\t\tkey: 'plugin',\n\t\tsupportsPagination: false,\n\t},\n\t{\n\t\tlabel: __( 'Status' ),\n\t\tname: 'status',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/statuses',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'statuses',\n\t\tkey: 'slug',\n\t\tsupportsPagination: false,\n\t},\n\t{\n\t\tlabel: __( 'Registered Templates' ),\n\t\tname: 'registeredTemplate',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/registered-templates',\n\t\tkey: 'id',\n\t\tsupportsPagination: false,\n\t},\n\t{\n\t\tlabel: __( 'Font Collections' ),\n\t\tname: 'fontCollection',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/font-collections',\n\t\tbaseURLParams: { context: 'view' },\n\t\tplural: 'fontCollections',\n\t\tkey: 'slug',\n\t\tsupportsPagination: true,\n\t},\n\t{\n\t\tlabel: __( 'Icons' ),\n\t\tname: 'icon',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/icons',\n\t\tbaseURLParams: { context: 'view' },\n\t\tplural: 'icons',\n\t\tkey: 'name',\n\t\tsupportsPagination: false,\n\t},\n];\n\nexport const deprecatedEntities = {\n\troot: {\n\t\tmedia: {\n\t\t\tsince: '6.9',\n\t\t\talternative: {\n\t\t\t\tkind: 'postType',\n\t\t\t\tname: 'attachment',\n\t\t\t},\n\t\t},\n\t},\n};\n\nexport const additionalEntityConfigLoaders = [\n\t{ kind: 'postType', loadEntities: loadPostTypeEntities },\n\t{ kind: 'taxonomy', loadEntities: loadTaxonomyEntities },\n\t{\n\t\tkind: 'root',\n\t\tname: 'site',\n\t\tplural: 'sites',\n\t\tloadEntities: loadSiteEntity,\n\t},\n];\n\n/**\n * Apply extra edits before persisting a post type.\n *\n * @param {Object} persistedRecord Already persisted Post\n * @param {Object} edits Edits.\n * @param {string} name Post type name.\n * @param {boolean} isTemplate Whether the post type is a template.\n * @return {Promise< Object >} Updated edits.\n */\nexport const prePersistPostType = async (\n\tpersistedRecord,\n\tedits,\n\tname,\n\tisTemplate\n) => {\n\tconst newEdits = {};\n\n\tif ( ! isTemplate && 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\t// Add meta for the persisted CRDT document during real post saves so the\n\t// saved post and CRDT snapshot are committed in the same request. We don't\n\t// want a post save to fail but a CRDT update to succeed or vice versa.\n\t// CRDT repair uses /wp-sync/v1/save to avoid post-save side effects.\n\tif ( persistedRecord ) {\n\t\tconst objectType = `postType/${ name }`;\n\t\tconst objectId = persistedRecord.id;\n\t\tconst serializedDoc = getSyncManager()?.createPersistedCRDTDoc(\n\t\t\tobjectType,\n\t\t\tobjectId\n\t\t);\n\n\t\tif ( serializedDoc ) {\n\t\t\tnewEdits.meta = {\n\t\t\t\t...edits.meta,\n\t\t\t\t[ POST_META_KEY_FOR_CRDT_DOC_PERSISTENCE ]: serializedDoc,\n\t\t\t};\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 postTypesPromise = apiFetch( { path: '/wp/v2/types?context=view' } );\n\tconst taxonomiesPromise = window._wpCollaborationEnabled\n\t\t? apiFetch( { path: '/wp/v2/taxonomies?context=view' } )\n\t\t: Promise.resolve( {} );\n\tconst [ postTypes, taxonomies ] = await Promise.all( [\n\t\tpostTypesPromise,\n\t\ttaxonomiesPromise,\n\t] );\n\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\n\t\tconst syncedProperties = new Set( [\n\t\t\t'author',\n\t\t\t'blocks',\n\t\t\t'content',\n\t\t\t'comment_status',\n\t\t\t'date',\n\t\t\t'excerpt',\n\t\t\t'featured_media',\n\t\t\t'format',\n\t\t\t'meta',\n\t\t\t'ping_status',\n\t\t\t'slug',\n\t\t\t'status',\n\t\t\t'sticky',\n\t\t\t'template',\n\t\t\t'title',\n\t\t\t...( postType.taxonomies\n\t\t\t\t?.map( ( taxonomy ) => taxonomies?.[ taxonomy ]?.rest_base )\n\t\t\t\t?.filter( Boolean ) ?? [] ),\n\t\t] );\n\n\t\tconst entity = {\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\t...blocksTransientEdits,\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: ( persistedRecord, edits ) =>\n\t\t\t\tprePersistPostType( persistedRecord, edits, name, isTemplate ),\n\t\t\t__unstable_rest_base: postType.rest_base,\n\t\t\tsupportsPagination: true,\n\t\t\tgetRevisionsUrl: ( parentId, revisionId ) =>\n\t\t\t\t`/${ namespace }/${\n\t\t\t\t\tpostType.rest_base\n\t\t\t\t}/${ parentId }/revisions${\n\t\t\t\t\trevisionId ? '/' + revisionId : ''\n\t\t\t\t}`,\n\t\t\trevisionKey:\n\t\t\t\tisTemplate && ! window?.__experimentalTemplateActivate\n\t\t\t\t\t? 'wp_id'\n\t\t\t\t\t: DEFAULT_ENTITY_KEY,\n\t\t};\n\n\t\t/**\n\t\t * @type {import('@wordpress/sync').SyncConfig}\n\t\t */\n\t\tentity.syncConfig = {\n\t\t\t// Save a CRDT document with this entity\n\t\t\tsupportsPersistence: true,\n\n\t\t\t/**\n\t\t\t * Apply changes from the local editor to the local CRDT document so\n\t\t\t * that those changes can be synced to other peers (via the provider).\n\t\t\t *\n\t\t\t * @param {import('@wordpress/sync').CRDTDoc} crdtDoc\n\t\t\t * @param {Partial< import('@wordpress/sync').ObjectData >} changes\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tapplyChangesToCRDTDoc: ( crdtDoc, changes ) =>\n\t\t\t\tapplyPostChangesToCRDTDoc( crdtDoc, changes, syncedProperties ),\n\n\t\t\t/**\n\t\t\t * Create the awareness instance for the entity's CRDT document.\n\t\t\t *\n\t\t\t * @param {import('@wordpress/sync').CRDTDoc} ydoc\n\t\t\t * @param {import('@wordpress/sync').ObjectID} objectId\n\t\t\t * @return {import('@wordpress/sync').Awareness} Awareness instance\n\t\t\t */\n\t\t\tcreateAwareness: ( ydoc, objectId ) => {\n\t\t\t\tconst kind = 'postType';\n\t\t\t\tconst id = parseInt( objectId, 10 );\n\t\t\t\treturn new PostEditorAwareness( ydoc, kind, name, id );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Extract changes from a CRDT document that can be used to update the\n\t\t\t * local editor state.\n\t\t\t *\n\t\t\t * @param {import('@wordpress/sync').CRDTDoc} crdtDoc\n\t\t\t * @param {import('@wordpress/sync').ObjectData} editedRecord\n\t\t\t * @return {Partial< import('@wordpress/sync').ObjectData >} Changes to record\n\t\t\t */\n\t\t\tgetChangesFromCRDTDoc: ( crdtDoc, editedRecord ) =>\n\t\t\t\tgetPostChangesFromCRDTDoc(\n\t\t\t\t\tcrdtDoc,\n\t\t\t\t\teditedRecord,\n\t\t\t\t\tsyncedProperties\n\t\t\t\t),\n\n\t\t\t/**\n\t\t\t * Extract changes from a CRDT document that can be used to update the\n\t\t\t * local editor state.\n\t\t\t *\n\t\t\t * @param {import('@wordpress/sync').ObjectData} record\n\t\t\t * @return {Partial< import('@wordpress/sync').ObjectData >} Changes to record\n\t\t\t */\n\t\t\tgetPersistedCRDTDoc: ( record ) => {\n\t\t\t\treturn (\n\t\t\t\t\trecord?.meta?.[ POST_META_KEY_FOR_CRDT_DOC_PERSISTENCE ] ||\n\t\t\t\t\tnull\n\t\t\t\t);\n\t\t\t},\n\t\t\tshouldSync: () =>\n\t\t\t\t! (\n\t\t\t\t\tArray.isArray( window._wpCollaborationDisabledPostTypes ) &&\n\t\t\t\t\twindow._wpCollaborationDisabledPostTypes.includes( name )\n\t\t\t\t),\n\t\t};\n\n\t\treturn entity;\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\tconst entity = {\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\tgetTitle: ( record ) => record?.name,\n\t\t\tsupportsPagination: true,\n\t\t};\n\n\t\tentity.syncConfig = defaultSyncConfig;\n\n\t\treturn entity;\n\t} );\n}\n\n/**\n * Returns the Site entity.\n *\n * @return {Promise} Entity promise\n */\nasync function loadSiteEntity() {\n\tconst entity = {\n\t\tlabel: __( 'Site' ),\n\t\tname: 'site',\n\t\tkind: 'root',\n\t\tkey: false,\n\t\tbaseURL: '/wp/v2/settings',\n\t\tsupportsPagination: false,\n\t\tmeta: {},\n\t};\n\n\tconst site = await apiFetch( {\n\t\tpath: entity.baseURL,\n\t\tmethod: 'OPTIONS',\n\t} );\n\n\tconst labels = {};\n\tObject.entries( site?.schema?.properties ?? {} ).forEach(\n\t\t( [ key, value ] ) => {\n\t\t\t// Ignore properties `title` and `type` keys.\n\t\t\tif ( typeof value === 'object' && value.title ) {\n\t\t\t\tlabels[ key ] = value.title;\n\t\t\t}\n\t\t}\n\t);\n\n\treturn [ { ...entity, meta: { labels } } ];\n}\n\n/**\n * Returns the entity's getter method name given its kind and name or plural name.\n *\n * @example\n * ```js\n * const nameSingular = getMethodName( 'root', 'theme', 'get' );\n * // nameSingular is getRootTheme\n *\n * const namePlural = getMethodName( 'root', 'themes', 'set' );\n * // namePlural is setRootThemes\n * ```\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name or plural name.\n * @param {string} prefix Function prefix.\n *\n * @return {string} Method name\n */\nexport const getMethodName = ( kind, name, prefix = 'get' ) => {\n\tconst kindPrefix = kind === 'root' ? '' : pascalCase( kind );\n\tconst suffix = pascalCase( name );\n\treturn `${ prefix }${ kindPrefix }${ suffix }`;\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/**\n * External dependencies\n */\nimport { capitalCase, pascalCase } from 'change-case';\n\n/**\n * WordPress dependencies\n */\nimport apiFetch from '@wordpress/api-fetch';\nimport { __unstableSerializeAndClean, parse } from '@wordpress/blocks';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { PostEditorAwareness } from './awareness/post-editor-awareness';\nimport { getSyncManager } from './sync';\nimport {\n\tapplyPostChangesToCRDTDoc,\n\tdefaultCollectionSyncConfig,\n\tdefaultSyncConfig,\n\tgetPostChangesFromCRDTDoc,\n\tPOST_META_KEY_FOR_CRDT_DOC_PERSISTENCE,\n} from './utils/crdt';\n\nexport const DEFAULT_ENTITY_KEY = 'id';\nconst POST_RAW_ATTRIBUTES = [ 'title', 'excerpt', 'content' ];\n\nconst blocksTransientEdits = {\n\tblocks: {\n\t\tread: ( record ) => parse( record.content?.raw ?? '' ),\n\t\twrite: ( record ) => ( {\n\t\t\tcontent: __unstableSerializeAndClean( record.blocks ),\n\t\t} ),\n\t},\n};\n\nexport const rootEntitiesConfig = [\n\t{\n\t\tlabel: __( 'Base' ),\n\t\tkind: 'root',\n\t\tkey: false,\n\t\tname: '__unstableBase',\n\t\tbaseURL: '/',\n\t\tbaseURLParams: {\n\t\t\t// Please also change the preload path when changing this.\n\t\t\t// @see lib/compat/wordpress-7.1/preload.php\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'image_sizes',\n\t\t\t\t'image_size_threshold',\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\t'page_for_posts',\n\t\t\t\t'page_on_front',\n\t\t\t\t'show_on_front',\n\t\t\t].join( ',' ),\n\t\t},\n\t\t// The entity doesn't support selecting multiple records.\n\t\t// The property is maintained for backward compatibility.\n\t\tplural: '__unstableBases',\n\t\tsupportsPagination: false,\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\tplural: 'postTypes',\n\t\tsupportsPagination: false,\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\tsupportsPagination: true,\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\tsupportsPagination: false,\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\tsupportsPagination: false,\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\tsupportsPagination: false,\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\tsupportsPagination: false,\n\t},\n\t{\n\t\tlabel: __( 'User' ),\n\t\tname: 'user',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/users',\n\t\tgetTitle: ( record ) => record?.name || record?.slug,\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'users',\n\t\tsupportsPagination: true,\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\tsupportsPagination: true,\n\t\tsyncConfig: defaultCollectionSyncConfig,\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\tsupportsPagination: true,\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\tsupportsPagination: true,\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\tsupportsPagination: false,\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 from name.\n\t\tgetTitle: () => __( 'Custom Styles' ),\n\t\tgetRevisionsUrl: ( parentId, revisionId ) =>\n\t\t\t`/wp/v2/global-styles/${ parentId }/revisions${\n\t\t\t\trevisionId ? '/' + revisionId : ''\n\t\t\t}`,\n\t\tsupportsPagination: true,\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\tplural: 'themes',\n\t\tkey: 'stylesheet',\n\t\tsupportsPagination: false,\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\tplural: 'plugins',\n\t\tkey: 'plugin',\n\t\tsupportsPagination: false,\n\t},\n\t{\n\t\tlabel: __( 'Status' ),\n\t\tname: 'status',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/statuses',\n\t\tbaseURLParams: { context: 'edit' },\n\t\tplural: 'statuses',\n\t\tkey: 'slug',\n\t\tsupportsPagination: false,\n\t},\n\t{\n\t\tlabel: __( 'Registered Templates' ),\n\t\tname: 'registeredTemplate',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/registered-templates',\n\t\tkey: 'id',\n\t\tsupportsPagination: false,\n\t},\n\t{\n\t\tlabel: __( 'Font Collections' ),\n\t\tname: 'fontCollection',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/font-collections',\n\t\tbaseURLParams: { context: 'view' },\n\t\tplural: 'fontCollections',\n\t\tkey: 'slug',\n\t\tsupportsPagination: true,\n\t},\n\t{\n\t\tlabel: __( 'Icons' ),\n\t\tname: 'icon',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/icons',\n\t\tbaseURLParams: { context: 'view' },\n\t\tplural: 'icons',\n\t\tkey: 'name',\n\t\tsupportsPagination: false,\n\t},\n\t{\n\t\tlabel: __( 'Icon Collections' ),\n\t\tname: 'iconCollection',\n\t\tkind: 'root',\n\t\tbaseURL: '/wp/v2/icon-collections',\n\t\tbaseURLParams: { context: 'view' },\n\t\tplural: 'iconCollections',\n\t\tkey: 'slug',\n\t\tsupportsPagination: false,\n\t},\n];\n\nexport const deprecatedEntities = {\n\troot: {\n\t\tmedia: {\n\t\t\tsince: '6.9',\n\t\t\talternative: {\n\t\t\t\tkind: 'postType',\n\t\t\t\tname: 'attachment',\n\t\t\t},\n\t\t},\n\t},\n};\n\nexport const additionalEntityConfigLoaders = [\n\t{ kind: 'postType', loadEntities: loadPostTypeEntities },\n\t{ kind: 'taxonomy', loadEntities: loadTaxonomyEntities },\n\t{\n\t\tkind: 'root',\n\t\tname: 'site',\n\t\tplural: 'sites',\n\t\tloadEntities: loadSiteEntity,\n\t},\n];\n\n/**\n * Apply extra edits before persisting a post type.\n *\n * @param {Object} persistedRecord Already persisted Post\n * @param {Object} edits Edits.\n * @param {string} name Post type name.\n * @param {boolean} isTemplate Whether the post type is a template.\n * @return {Promise< Object >} Updated edits.\n */\nexport const prePersistPostType = async (\n\tpersistedRecord,\n\tedits,\n\tname,\n\tisTemplate\n) => {\n\tconst newEdits = {};\n\n\tif ( ! isTemplate && 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\t// Add meta for the persisted CRDT document during real post saves so the\n\t// saved post and CRDT snapshot are committed in the same request. We don't\n\t// want a post save to fail but a CRDT update to succeed or vice versa.\n\t// CRDT repair uses /wp-sync/v1/save to avoid post-save side effects.\n\tif ( persistedRecord ) {\n\t\tconst objectType = `postType/${ name }`;\n\t\tconst objectId = persistedRecord.id;\n\t\tconst serializedDoc = getSyncManager()?.createPersistedCRDTDoc(\n\t\t\tobjectType,\n\t\t\tobjectId\n\t\t);\n\n\t\tif ( serializedDoc ) {\n\t\t\tnewEdits.meta = {\n\t\t\t\t...edits.meta,\n\t\t\t\t[ POST_META_KEY_FOR_CRDT_DOC_PERSISTENCE ]: serializedDoc,\n\t\t\t};\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 postTypesPromise = apiFetch( { path: '/wp/v2/types?context=view' } );\n\tconst taxonomiesPromise = window._wpCollaborationEnabled\n\t\t? apiFetch( { path: '/wp/v2/taxonomies?context=view' } )\n\t\t: Promise.resolve( {} );\n\tconst [ postTypes, taxonomies ] = await Promise.all( [\n\t\tpostTypesPromise,\n\t\ttaxonomiesPromise,\n\t] );\n\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\n\t\tconst syncedProperties = new Set( [\n\t\t\t'author',\n\t\t\t'blocks',\n\t\t\t'content',\n\t\t\t'comment_status',\n\t\t\t'date',\n\t\t\t'excerpt',\n\t\t\t'featured_media',\n\t\t\t'format',\n\t\t\t'meta',\n\t\t\t'ping_status',\n\t\t\t'slug',\n\t\t\t'status',\n\t\t\t'sticky',\n\t\t\t'template',\n\t\t\t'title',\n\t\t\t...( postType.taxonomies\n\t\t\t\t?.map( ( taxonomy ) => taxonomies?.[ taxonomy ]?.rest_base )\n\t\t\t\t?.filter( Boolean ) ?? [] ),\n\t\t] );\n\n\t\tconst entity = {\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\t...blocksTransientEdits,\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: ( persistedRecord, edits ) =>\n\t\t\t\tprePersistPostType( persistedRecord, edits, name, isTemplate ),\n\t\t\t__unstable_rest_base: postType.rest_base,\n\t\t\tsupportsPagination: true,\n\t\t\tgetRevisionsUrl: ( parentId, revisionId ) =>\n\t\t\t\t`/${ namespace }/${\n\t\t\t\t\tpostType.rest_base\n\t\t\t\t}/${ parentId }/revisions${\n\t\t\t\t\trevisionId ? '/' + revisionId : ''\n\t\t\t\t}`,\n\t\t\trevisionKey:\n\t\t\t\tisTemplate && ! window?.__experimentalTemplateActivate\n\t\t\t\t\t? 'wp_id'\n\t\t\t\t\t: DEFAULT_ENTITY_KEY,\n\t\t};\n\n\t\t/**\n\t\t * @type {import('@wordpress/sync').SyncConfig}\n\t\t */\n\t\tentity.syncConfig = {\n\t\t\t// Save a CRDT document with this entity\n\t\t\tsupportsPersistence: true,\n\n\t\t\t/**\n\t\t\t * Apply changes from the local editor to the local CRDT document so\n\t\t\t * that those changes can be synced to other peers (via the provider).\n\t\t\t *\n\t\t\t * @param {import('@wordpress/sync').CRDTDoc} crdtDoc\n\t\t\t * @param {Partial< import('@wordpress/sync').ObjectData >} changes\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tapplyChangesToCRDTDoc: ( crdtDoc, changes ) =>\n\t\t\t\tapplyPostChangesToCRDTDoc( crdtDoc, changes, syncedProperties ),\n\n\t\t\t/**\n\t\t\t * Create the awareness instance for the entity's CRDT document.\n\t\t\t *\n\t\t\t * @param {import('@wordpress/sync').CRDTDoc} ydoc\n\t\t\t * @param {import('@wordpress/sync').ObjectID} objectId\n\t\t\t * @return {import('@wordpress/sync').Awareness} Awareness instance\n\t\t\t */\n\t\t\tcreateAwareness: ( ydoc, objectId ) => {\n\t\t\t\tconst kind = 'postType';\n\t\t\t\tconst id = parseInt( objectId, 10 );\n\t\t\t\treturn new PostEditorAwareness( ydoc, kind, name, id );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Extract changes from a CRDT document that can be used to update the\n\t\t\t * local editor state.\n\t\t\t *\n\t\t\t * @param {import('@wordpress/sync').CRDTDoc} crdtDoc\n\t\t\t * @param {import('@wordpress/sync').ObjectData} editedRecord\n\t\t\t * @return {Partial< import('@wordpress/sync').ObjectData >} Changes to record\n\t\t\t */\n\t\t\tgetChangesFromCRDTDoc: ( crdtDoc, editedRecord ) =>\n\t\t\t\tgetPostChangesFromCRDTDoc(\n\t\t\t\t\tcrdtDoc,\n\t\t\t\t\teditedRecord,\n\t\t\t\t\tsyncedProperties\n\t\t\t\t),\n\n\t\t\t/**\n\t\t\t * Extract changes from a CRDT document that can be used to update the\n\t\t\t * local editor state.\n\t\t\t *\n\t\t\t * @param {import('@wordpress/sync').ObjectData} record\n\t\t\t * @return {Partial< import('@wordpress/sync').ObjectData >} Changes to record\n\t\t\t */\n\t\t\tgetPersistedCRDTDoc: ( record ) => {\n\t\t\t\treturn (\n\t\t\t\t\trecord?.meta?.[ POST_META_KEY_FOR_CRDT_DOC_PERSISTENCE ] ||\n\t\t\t\t\tnull\n\t\t\t\t);\n\t\t\t},\n\t\t\tshouldSync: () =>\n\t\t\t\t! (\n\t\t\t\t\tArray.isArray( window._wpCollaborationDisabledPostTypes ) &&\n\t\t\t\t\twindow._wpCollaborationDisabledPostTypes.includes( name )\n\t\t\t\t),\n\t\t};\n\n\t\treturn entity;\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\tconst entity = {\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\tgetTitle: ( record ) => record?.name,\n\t\t\tsupportsPagination: true,\n\t\t};\n\n\t\tentity.syncConfig = defaultSyncConfig;\n\n\t\treturn entity;\n\t} );\n}\n\n/**\n * Returns the Site entity.\n *\n * @return {Promise} Entity promise\n */\nasync function loadSiteEntity() {\n\tconst entity = {\n\t\tlabel: __( 'Site' ),\n\t\tname: 'site',\n\t\tkind: 'root',\n\t\tkey: false,\n\t\tbaseURL: '/wp/v2/settings',\n\t\tsupportsPagination: false,\n\t\tmeta: {},\n\t};\n\n\tconst site = await apiFetch( {\n\t\tpath: entity.baseURL,\n\t\tmethod: 'OPTIONS',\n\t} );\n\n\tconst labels = {};\n\tObject.entries( site?.schema?.properties ?? {} ).forEach(\n\t\t( [ key, value ] ) => {\n\t\t\t// Ignore properties `title` and `type` keys.\n\t\t\tif ( typeof value === 'object' && value.title ) {\n\t\t\t\tlabels[ key ] = value.title;\n\t\t\t}\n\t\t}\n\t);\n\n\treturn [ { ...entity, meta: { labels } } ];\n}\n\n/**\n * Returns the entity's getter method name given its kind and name or plural name.\n *\n * @example\n * ```js\n * const nameSingular = getMethodName( 'root', 'theme', 'get' );\n * // nameSingular is getRootTheme\n *\n * const namePlural = getMethodName( 'root', 'themes', 'set' );\n * // namePlural is setRootThemes\n * ```\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name or plural name.\n * @param {string} prefix Function prefix.\n *\n * @return {string} Method name\n */\nexport const getMethodName = ( kind, name, prefix = 'get' ) => {\n\tconst kindPrefix = kind === 'root' ? '' : pascalCase( kind );\n\tconst suffix = pascalCase( name );\n\treturn `${ prefix }${ kindPrefix }${ suffix }`;\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,yBAAwC;AAKxC,uBAAqB;AACrB,oBAAmD;AACnD,kBAAmB;AAKnB,mCAAoC;AACpC,kBAA+B;AAC/B,kBAMO;AAEA,IAAM,qBAAqB;AAClC,IAAM,sBAAsB,CAAE,SAAS,WAAW,SAAU;AAE5D,IAAM,uBAAuB;AAAA,EAC5B,QAAQ;AAAA,IACP,MAAM,CAAE,eAAY,qBAAO,OAAO,SAAS,OAAO,EAAG;AAAA,IACrD,OAAO,CAAE,YAAc;AAAA,MACtB,aAAS,2CAA6B,OAAO,MAAO;AAAA,IACrD;AAAA,EACD;AACD;AAEO,IAAM,qBAAqB;AAAA,EACjC;AAAA,IACC,WAAO,gBAAI,MAAO;AAAA,IAClB,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe;AAAA;AAAA;AAAA,MAGd,SAAS;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,EAAE,KAAM,GAAI;AAAA,IACb;AAAA;AAAA;AAAA,IAGA,QAAQ;AAAA,IACR,oBAAoB;AAAA,EACrB;AAAA,EACA;AAAA,IACC,WAAO,gBAAI,WAAY;AAAA,IACvB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,SAAS;AAAA,IACT,eAAe,EAAE,SAAS,OAAO;AAAA,IACjC,QAAQ;AAAA,IACR,oBAAoB;AAAA,EACrB;AAAA,EACA;AAAA,IACC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe,EAAE,SAAS,OAAO;AAAA,IACjC,QAAQ;AAAA,IACR,WAAO,gBAAI,OAAQ;AAAA,IACnB,eAAe,CAAE,WAAW,SAAS,aAAc;AAAA,IACnD,oBAAoB;AAAA,EACrB;AAAA,EACA;AAAA,IACC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,SAAS;AAAA,IACT,eAAe,EAAE,SAAS,OAAO;AAAA,IACjC,QAAQ;AAAA,IACR,WAAO,gBAAI,UAAW;AAAA,IACtB,oBAAoB;AAAA,EACrB;AAAA,EACA;AAAA,IACC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe,EAAE,SAAS,OAAO;AAAA,IACjC,QAAQ;AAAA,IACR,gBAAgB,EAAE,QAAQ,KAAK;AAAA,IAC/B,WAAO,gBAAI,cAAe;AAAA,IAC1B,oBAAoB;AAAA,EACrB;AAAA,EACA;AAAA,IACC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe,EAAE,SAAS,OAAO;AAAA,IACjC,QAAQ;AAAA,IACR,gBAAgB,EAAE,QAAQ,KAAK;AAAA,IAC/B,WAAO,gBAAI,SAAU;AAAA,IACrB,oBAAoB;AAAA,EACrB;AAAA,EACA;AAAA,IACC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe,EAAE,SAAS,OAAO;AAAA,IACjC,QAAQ;AAAA,IACR,WAAO,gBAAI,cAAe;AAAA,IAC1B,oBAAoB;AAAA,EACrB;AAAA,EACA;AAAA,IACC,WAAO,gBAAI,MAAO;AAAA,IAClB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,CAAE,WAAY,QAAQ,QAAQ,QAAQ;AAAA,IAChD,eAAe,EAAE,SAAS,OAAO;AAAA,IACjC,QAAQ;AAAA,IACR,oBAAoB;AAAA,EACrB;AAAA,EACA;AAAA,IACC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe,EAAE,SAAS,OAAO;AAAA,IACjC,QAAQ;AAAA,IACR,WAAO,gBAAI,SAAU;AAAA,IACrB,oBAAoB;AAAA,IACpB,YAAY;AAAA,EACb;AAAA,EACA;AAAA,IACC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe,EAAE,SAAS,OAAO;AAAA,IACjC,QAAQ;AAAA,IACR,WAAO,gBAAI,MAAO;AAAA,IAClB,oBAAoB;AAAA,EACrB;AAAA,EACA;AAAA,IACC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe,EAAE,SAAS,OAAO;AAAA,IACjC,QAAQ;AAAA,IACR,WAAO,gBAAI,WAAY;AAAA,IACvB,eAAe,CAAE,OAAQ;AAAA,IACzB,oBAAoB;AAAA,EACrB;AAAA,EACA;AAAA,IACC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe,EAAE,SAAS,OAAO;AAAA,IACjC,QAAQ;AAAA,IACR,WAAO,gBAAI,eAAgB;AAAA,IAC3B,KAAK;AAAA,IACL,oBAAoB;AAAA,EACrB;AAAA,EACA;AAAA,IACC,WAAO,gBAAI,eAAgB;AAAA,IAC3B,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe,EAAE,SAAS,OAAO;AAAA,IACjC,QAAQ;AAAA;AAAA,IACR,UAAU,UAAM,gBAAI,eAAgB;AAAA,IACpC,iBAAiB,CAAE,UAAU,eAC5B,wBAAyB,QAAS,aACjC,aAAa,MAAM,aAAa,EACjC;AAAA,IACD,oBAAoB;AAAA,EACrB;AAAA,EACA;AAAA,IACC,WAAO,gBAAI,QAAS;AAAA,IACpB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe,EAAE,SAAS,OAAO;AAAA,IACjC,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,oBAAoB;AAAA,EACrB;AAAA,EACA;AAAA,IACC,WAAO,gBAAI,SAAU;AAAA,IACrB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe,EAAE,SAAS,OAAO;AAAA,IACjC,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,oBAAoB;AAAA,EACrB;AAAA,EACA;AAAA,IACC,WAAO,gBAAI,QAAS;AAAA,IACpB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe,EAAE,SAAS,OAAO;AAAA,IACjC,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,oBAAoB;AAAA,EACrB;AAAA,EACA;AAAA,IACC,WAAO,gBAAI,sBAAuB;AAAA,IAClC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,KAAK;AAAA,IACL,oBAAoB;AAAA,EACrB;AAAA,EACA;AAAA,IACC,WAAO,gBAAI,kBAAmB;AAAA,IAC9B,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe,EAAE,SAAS,OAAO;AAAA,IACjC,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,oBAAoB;AAAA,EACrB;AAAA,EACA;AAAA,IACC,WAAO,gBAAI,OAAQ;AAAA,IACnB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe,EAAE,SAAS,OAAO;AAAA,IACjC,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,oBAAoB;AAAA,EACrB;AAAA,EACA;AAAA,IACC,WAAO,gBAAI,kBAAmB;AAAA,IAC9B,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe,EAAE,SAAS,OAAO;AAAA,IACjC,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,oBAAoB;AAAA,EACrB;AACD;AAEO,IAAM,qBAAqB;AAAA,EACjC,MAAM;AAAA,IACL,OAAO;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,QACZ,MAAM;AAAA,QACN,MAAM;AAAA,MACP;AAAA,IACD;AAAA,EACD;AACD;AAEO,IAAM,gCAAgC;AAAA,EAC5C,EAAE,MAAM,YAAY,cAAc,qBAAqB;AAAA,EACvD,EAAE,MAAM,YAAY,cAAc,qBAAqB;AAAA,EACvD;AAAA,IACC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,EACf;AACD;AAWO,IAAM,qBAAqB,OACjC,iBACA,OACA,MACA,eACI;AACJ,QAAM,WAAW,CAAC;AAElB,MAAK,CAAE,cAAc,iBAAiB,WAAW,cAAe;AAE/D,QAAK,CAAE,MAAM,UAAU,CAAE,SAAS,QAAS;AAC1C,eAAS,SAAS;AAAA,IACnB;AAGA,SACG,CAAE,MAAM,SAAS,MAAM,UAAU,iBACnC,CAAE,SAAS,UACT,CAAE,iBAAiB,SACpB,iBAAiB,UAAU,eAC3B;AACD,eAAS,QAAQ;AAAA,IAClB;AAAA,EACD;AAMA,MAAK,iBAAkB;AACtB,UAAM,aAAa,YAAa,IAAK;AACrC,UAAM,WAAW,gBAAgB;AACjC,UAAM,oBAAgB,4BAAe,GAAG;AAAA,MACvC;AAAA,MACA;AAAA,IACD;AAEA,QAAK,eAAgB;AACpB,eAAS,OAAO;AAAA,QACf,GAAG,MAAM;AAAA,QACT,CAAE,kDAAuC,GAAG;AAAA,MAC7C;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AAOA,eAAe,uBAAuB;AACrC,QAAM,uBAAmB,iBAAAA,SAAU,EAAE,MAAM,4BAA4B,CAAE;AACzE,QAAM,oBAAoB,OAAO,8BAC9B,iBAAAA,SAAU,EAAE,MAAM,iCAAiC,CAAE,IACrD,QAAQ,QAAS,CAAC,CAAE;AACvB,QAAM,CAAE,WAAW,UAAW,IAAI,MAAM,QAAQ,IAAK;AAAA,IACpD;AAAA,IACA;AAAA,EACD,CAAE;AAEF,SAAO,OAAO,QAAS,aAAa,CAAC,CAAE,EAAE,IAAK,CAAE,CAAE,MAAM,QAAS,MAAO;AACvE,UAAM,aAAa,CAAE,eAAe,kBAAmB,EAAE;AAAA,MACxD;AAAA,IACD;AACA,UAAM,YAAY,UAAU,kBAAkB;AAE9C,UAAM,mBAAmB,oBAAI,IAAK;AAAA,MACjC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAK,SAAS,YACX,IAAK,CAAE,aAAc,aAAc,QAAS,GAAG,SAAU,GACzD,OAAQ,OAAQ,KAAK,CAAC;AAAA,IAC1B,CAAE;AAEF,UAAM,SAAS;AAAA,MACd,MAAM;AAAA,MACN,SAAS,IAAK,SAAU,IAAK,SAAS,SAAU;AAAA,MAChD,eAAe,EAAE,SAAS,OAAO;AAAA,MACjC;AAAA,MACA,OAAO,SAAS;AAAA,MAChB,gBAAgB;AAAA,QACf,GAAG;AAAA,QACH,WAAW;AAAA,MACZ;AAAA,MACA,aAAa,EAAE,MAAM,KAAK;AAAA,MAC1B,eAAe;AAAA,MACf,UAAU,CAAE,WACX,QAAQ,OAAO,YACf,QAAQ,UACN,iBACC,gCAAa,OAAO,QAAQ,EAAG,IAC/B,OAAQ,OAAO,EAAG;AAAA,MACtB,sBAAsB,CAAE,iBAAiB,UACxC,mBAAoB,iBAAiB,OAAO,MAAM,UAAW;AAAA,MAC9D,sBAAsB,SAAS;AAAA,MAC/B,oBAAoB;AAAA,MACpB,iBAAiB,CAAE,UAAU,eAC5B,IAAK,SAAU,IACd,SAAS,SACV,IAAK,QAAS,aACb,aAAa,MAAM,aAAa,EACjC;AAAA,MACD,aACC,cAAc,CAAE,QAAQ,iCACrB,UACA;AAAA,IACL;AAKA,WAAO,aAAa;AAAA;AAAA,MAEnB,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUrB,uBAAuB,CAAE,SAAS,gBACjC,uCAA2B,SAAS,SAAS,gBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAS/D,iBAAiB,CAAE,MAAM,aAAc;AACtC,cAAM,OAAO;AACb,cAAM,KAAK,SAAU,UAAU,EAAG;AAClC,eAAO,IAAI,iDAAqB,MAAM,MAAM,MAAM,EAAG;AAAA,MACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,uBAAuB,CAAE,SAAS,qBACjC;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASD,qBAAqB,CAAE,WAAY;AAClC,eACC,QAAQ,OAAQ,kDAAuC,KACvD;AAAA,MAEF;AAAA,MACA,YAAY,MACX,EACC,MAAM,QAAS,OAAO,iCAAkC,KACxD,OAAO,kCAAkC,SAAU,IAAK;AAAA,IAE3D;AAEA,WAAO;AAAA,EACR,CAAE;AACH;AAOA,eAAe,uBAAuB;AACrC,QAAM,aAAa,UAAM,iBAAAA,SAAU;AAAA,IAClC,MAAM;AAAA,EACP,CAAE;AACF,SAAO,OAAO,QAAS,cAAc,CAAC,CAAE,EAAE,IAAK,CAAE,CAAE,MAAM,QAAS,MAAO;AACxE,UAAM,YAAY,UAAU,kBAAkB;AAC9C,UAAM,SAAS;AAAA,MACd,MAAM;AAAA,MACN,SAAS,IAAK,SAAU,IAAK,SAAS,SAAU;AAAA,MAChD,eAAe,EAAE,SAAS,OAAO;AAAA,MACjC;AAAA,MACA,OAAO,SAAS;AAAA,MAChB,UAAU,CAAE,WAAY,QAAQ;AAAA,MAChC,oBAAoB;AAAA,IACrB;AAEA,WAAO,aAAa;AAEpB,WAAO;AAAA,EACR,CAAE;AACH;AAOA,eAAe,iBAAiB;AAC/B,QAAM,SAAS;AAAA,IACd,WAAO,gBAAI,MAAO;AAAA,IAClB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,SAAS;AAAA,IACT,oBAAoB;AAAA,IACpB,MAAM,CAAC;AAAA,EACR;AAEA,QAAM,OAAO,UAAM,iBAAAA,SAAU;AAAA,IAC5B,MAAM,OAAO;AAAA,IACb,QAAQ;AAAA,EACT,CAAE;AAEF,QAAM,SAAS,CAAC;AAChB,SAAO,QAAS,MAAM,QAAQ,cAAc,CAAC,CAAE,EAAE;AAAA,IAChD,CAAE,CAAE,KAAK,KAAM,MAAO;AAErB,UAAK,OAAO,UAAU,YAAY,MAAM,OAAQ;AAC/C,eAAQ,GAAI,IAAI,MAAM;AAAA,MACvB;AAAA,IACD;AAAA,EACD;AAEA,SAAO,CAAE,EAAE,GAAG,QAAQ,MAAM,EAAE,OAAO,EAAE,CAAE;AAC1C;AAoBO,IAAM,gBAAgB,CAAE,MAAM,MAAM,SAAS,UAAW;AAC9D,QAAM,aAAa,SAAS,SAAS,SAAK,+BAAY,IAAK;AAC3D,QAAM,aAAS,+BAAY,IAAK;AAChC,SAAO,GAAI,MAAO,GAAI,UAAW,GAAI,MAAO;AAC7C;",
|
|
6
6
|
"names": ["apiFetch"]
|
|
7
7
|
}
|
|
@@ -134,6 +134,10 @@ var setCollaborationSupported = (supported) => ({ dispatch }) => {
|
|
|
134
134
|
dispatch({ type: "SET_COLLABORATION_SUPPORTED", supported });
|
|
135
135
|
if (!supported && (0, import_sync.hasSyncManager)()) {
|
|
136
136
|
(0, import_sync.getSyncManager)().unloadAll();
|
|
137
|
+
dispatch.__unstableNotifySyncUndoManagerChange({
|
|
138
|
+
hasUndo: false,
|
|
139
|
+
hasRedo: false
|
|
140
|
+
});
|
|
137
141
|
}
|
|
138
142
|
};
|
|
139
143
|
function receiveViewConfig(kind, name, config) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/private-actions.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport apiFetch from '@wordpress/api-fetch';\n\n/**\n * Internal dependencies\n */\nimport { STORE_NAME } from './name';\nimport { getSyncManager, hasSyncManager } from './sync';\n\n/**\n * Returns an action object used in signalling that the registered post meta\n * fields for a post type have been received.\n *\n * @param {string} postType Post type slug.\n * @param {Object} registeredPostMeta Registered post meta.\n *\n * @return {Object} Action object.\n */\nexport function receiveRegisteredPostMeta( postType, registeredPostMeta ) {\n\treturn {\n\t\ttype: 'RECEIVE_REGISTERED_POST_META',\n\t\tpostType,\n\t\tregisteredPostMeta,\n\t};\n}\n\n/**\n * @typedef {Object} Modifier\n * @property {string} [type] - The type of modifier.\n * @property {Object} [args] - The arguments of the modifier.\n */\n\n/**\n * @typedef {Object} Edits\n * @property {string} [src] - The URL of the media item.\n * @property {Modifier[]} [modifiers] - The modifiers to apply to the media item.\n */\n\n/**\n * Duplicates a media (attachment) entity record and, optionally, modifies it.\n *\n * @param {string} recordId Entity record ID.\n * @param {Edits} edits Edits to apply to the record.\n * @param {Object} options Options object.\n * @param {Function} options.__unstableFetch Custom fetch function.\n * @param {boolean} options.throwOnError Whether to throw an error if the request fails.\n *\n * @return {Promise} Promise resolving to the updated record.\n */\nexport const editMediaEntity =\n\t(\n\t\trecordId,\n\t\tedits = {},\n\t\t{ __unstableFetch = apiFetch, throwOnError = false } = {}\n\t) =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tif ( ! recordId ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst kind = 'postType';\n\t\tconst name = 'attachment';\n\n\t\tconst configs = await resolveSelect.getEntitiesConfig( kind );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.kind === kind && config.name === name\n\t\t);\n\n\t\tif ( ! entityConfig ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\t\tSTORE_NAME,\n\t\t\t[ 'entities', 'records', kind, name, recordId ],\n\t\t\t{ exclusive: true }\n\t\t);\n\n\t\tlet updatedRecord;\n\t\tlet error;\n\t\tlet hasError = false;\n\n\t\ttry {\n\t\t\tdispatch( {\n\t\t\t\ttype: 'SAVE_ENTITY_RECORD_START',\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\trecordId,\n\t\t\t} );\n\n\t\t\ttry {\n\t\t\t\tconst path = `${ entityConfig.baseURL }/${ recordId }/edit`;\n\t\t\t\tconst newRecord = await __unstableFetch( {\n\t\t\t\t\tpath,\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\t...edits,\n\t\t\t\t\t},\n\t\t\t\t} );\n\n\t\t\t\tif ( newRecord ) {\n\t\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\t\tkind,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tnewRecord,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tundefined\n\t\t\t\t\t);\n\t\t\t\t\tupdatedRecord = newRecord;\n\t\t\t\t}\n\t\t\t} catch ( e ) {\n\t\t\t\terror = e;\n\t\t\t\thasError = true;\n\t\t\t}\n\n\t\t\tdispatch( {\n\t\t\t\ttype: 'SAVE_ENTITY_RECORD_FINISH',\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\trecordId,\n\t\t\t\terror,\n\t\t\t} );\n\n\t\t\tif ( hasError && throwOnError ) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\treturn updatedRecord;\n\t\t} finally {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\n\n/**\n * Returns an action object used to receive editor settings.\n *\n * @param {Object} settings Editor settings object.\n *\n * @return {Object} Action object.\n */\nexport function receiveEditorSettings( settings ) {\n\treturn {\n\t\ttype: 'RECEIVE_EDITOR_SETTINGS',\n\t\tsettings,\n\t};\n}\n\n/**\n * Returns an action object used to receive editor assets.\n *\n * @param {Object} assets Editor assets object.\n *\n * @return {Object} Action object.\n */\nexport function receiveEditorAssets( assets ) {\n\treturn {\n\t\ttype: 'RECEIVE_EDITOR_ASSETS',\n\t\tassets,\n\t};\n}\n\n/**\n * Returns an action object used to set whether collaboration is supported.\n * When set to false, also disconnects all sync entities.\n *\n * @param {boolean} supported Whether collaboration is supported.\n *\n * @return {Object} Action object.\n */\nexport const setCollaborationSupported =\n\t( supported ) =>\n\t( { dispatch } ) => {\n\t\tdispatch( { type: 'SET_COLLABORATION_SUPPORTED', supported } );\n\t\tif ( ! supported && hasSyncManager() ) {\n\t\t\tgetSyncManager().unloadAll();\n\t\t}\n\t};\n\n/**\n * Returns an action object used to receive view config.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {Object} config View config object.\n *\n * @return {Object} Action object.\n */\nexport function receiveViewConfig( kind, name, config ) {\n\treturn {\n\t\ttype: 'RECEIVE_VIEW_CONFIG',\n\t\tkind,\n\t\tname,\n\t\tconfig,\n\t};\n}\n\n/**\n * Returns an action object used to notify core-data that the sync undo manager\n * state changed outside of the core-data reducer, e.g. The Yjs UndoManager\n * captured an undo level.\n *\n * @param {Object} state The sync undo stack state.\n * @param {boolean} state.hasRedo Whether there are changes to redo.\n * @param {boolean} state.hasUndo Whether there are changes to undo.\n *\n * @return {Object} Action object.\n */\nexport function __unstableNotifySyncUndoManagerChange( state ) {\n\treturn {\n\t\ttype: 'SYNC_UNDO_MANAGER_CHANGE',\n\t\t...state,\n\t};\n}\n\n/**\n * Returns an action object used to set the sync connection status for an entity or collection.\n *\n * @param {string} kind Kind of the entity.\n * @param {string} name Name of the entity.\n * @param {number|string|null} key The entity key, or null for collections.\n * @param {Object|null} status The connection state object or null on unload.\n *\n * @return {Object} Action object.\n */\nexport function setSyncConnectionStatus( kind, name, key, status ) {\n\tif ( ! status ) {\n\t\treturn {\n\t\t\ttype: 'CLEAR_SYNC_CONNECTION_STATUS',\n\t\t\tkind,\n\t\t\tname,\n\t\t\tkey,\n\t\t};\n\t}\n\n\treturn {\n\t\ttype: 'SET_SYNC_CONNECTION_STATUS',\n\t\tkind,\n\t\tname,\n\t\tkey,\n\t\tstatus,\n\t};\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,uBAAqB;AAKrB,kBAA2B;AAC3B,kBAA+C;AAWxC,SAAS,0BAA2B,UAAU,oBAAqB;AACzE,SAAO;AAAA,IACN,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACD;AACD;AAyBO,IAAM,kBACZ,CACC,UACA,QAAQ,CAAC,GACT,EAAE,kBAAkB,iBAAAA,SAAU,eAAe,MAAM,IAAI,CAAC,MAEzD,OAAQ,EAAE,UAAU,cAAc,MAAO;AACxC,MAAK,CAAE,UAAW;AACjB;AAAA,EACD;AAEA,QAAM,OAAO;AACb,QAAM,OAAO;AAEb,QAAM,UAAU,MAAM,cAAc,kBAAmB,IAAK;AAC5D,QAAM,eAAe,QAAQ;AAAA,IAC5B,CAAE,WAAY,OAAO,SAAS,QAAQ,OAAO,SAAS;AAAA,EACvD;AAEA,MAAK,CAAE,cAAe;AACrB;AAAA,EACD;AAEA,QAAM,OAAO,MAAM,SAAS;AAAA,IAC3B;AAAA,IACA,CAAE,YAAY,WAAW,MAAM,MAAM,QAAS;AAAA,IAC9C,EAAE,WAAW,KAAK;AAAA,EACnB;AAEA,MAAI;AACJ,MAAI;AACJ,MAAI,WAAW;AAEf,MAAI;AACH,aAAU;AAAA,MACT,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,IACD,CAAE;AAEF,QAAI;AACH,YAAM,OAAO,GAAI,aAAa,OAAQ,IAAK,QAAS;AACpD,YAAM,YAAY,MAAM,gBAAiB;AAAA,QACxC;AAAA,QACA,QAAQ;AAAA,QACR,MAAM;AAAA,UACL,GAAG;AAAA,QACJ;AAAA,MACD,CAAE;AAEF,UAAK,WAAY;AAChB,iBAAS;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD;AACA,wBAAgB;AAAA,MACjB;AAAA,IACD,SAAU,GAAI;AACb,cAAQ;AACR,iBAAW;AAAA,IACZ;AAEA,aAAU;AAAA,MACT,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,CAAE;AAEF,QAAK,YAAY,cAAe;AAC/B,YAAM;AAAA,IACP;AACA,WAAO;AAAA,EACR,UAAE;AACD,aAAS,2BAA4B,IAAK;AAAA,EAC3C;AACD;AASM,SAAS,sBAAuB,UAAW;AACjD,SAAO;AAAA,IACN,MAAM;AAAA,IACN;AAAA,EACD;AACD;AASO,SAAS,oBAAqB,QAAS;AAC7C,SAAO;AAAA,IACN,MAAM;AAAA,IACN;AAAA,EACD;AACD;AAUO,IAAM,4BACZ,CAAE,cACF,CAAE,EAAE,SAAS,MAAO;AACnB,WAAU,EAAE,MAAM,+BAA+B,UAAU,CAAE;AAC7D,MAAK,CAAE,iBAAa,4BAAe,GAAI;AACtC,oCAAe,EAAE,UAAU;AAAA,
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport apiFetch from '@wordpress/api-fetch';\n\n/**\n * Internal dependencies\n */\nimport { STORE_NAME } from './name';\nimport { getSyncManager, hasSyncManager } from './sync';\n\n/**\n * Returns an action object used in signalling that the registered post meta\n * fields for a post type have been received.\n *\n * @param {string} postType Post type slug.\n * @param {Object} registeredPostMeta Registered post meta.\n *\n * @return {Object} Action object.\n */\nexport function receiveRegisteredPostMeta( postType, registeredPostMeta ) {\n\treturn {\n\t\ttype: 'RECEIVE_REGISTERED_POST_META',\n\t\tpostType,\n\t\tregisteredPostMeta,\n\t};\n}\n\n/**\n * @typedef {Object} Modifier\n * @property {string} [type] - The type of modifier.\n * @property {Object} [args] - The arguments of the modifier.\n */\n\n/**\n * @typedef {Object} Edits\n * @property {string} [src] - The URL of the media item.\n * @property {Modifier[]} [modifiers] - The modifiers to apply to the media item.\n */\n\n/**\n * Duplicates a media (attachment) entity record and, optionally, modifies it.\n *\n * @param {string} recordId Entity record ID.\n * @param {Edits} edits Edits to apply to the record.\n * @param {Object} options Options object.\n * @param {Function} options.__unstableFetch Custom fetch function.\n * @param {boolean} options.throwOnError Whether to throw an error if the request fails.\n *\n * @return {Promise} Promise resolving to the updated record.\n */\nexport const editMediaEntity =\n\t(\n\t\trecordId,\n\t\tedits = {},\n\t\t{ __unstableFetch = apiFetch, throwOnError = false } = {}\n\t) =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tif ( ! recordId ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst kind = 'postType';\n\t\tconst name = 'attachment';\n\n\t\tconst configs = await resolveSelect.getEntitiesConfig( kind );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.kind === kind && config.name === name\n\t\t);\n\n\t\tif ( ! entityConfig ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\t\tSTORE_NAME,\n\t\t\t[ 'entities', 'records', kind, name, recordId ],\n\t\t\t{ exclusive: true }\n\t\t);\n\n\t\tlet updatedRecord;\n\t\tlet error;\n\t\tlet hasError = false;\n\n\t\ttry {\n\t\t\tdispatch( {\n\t\t\t\ttype: 'SAVE_ENTITY_RECORD_START',\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\trecordId,\n\t\t\t} );\n\n\t\t\ttry {\n\t\t\t\tconst path = `${ entityConfig.baseURL }/${ recordId }/edit`;\n\t\t\t\tconst newRecord = await __unstableFetch( {\n\t\t\t\t\tpath,\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\t...edits,\n\t\t\t\t\t},\n\t\t\t\t} );\n\n\t\t\t\tif ( newRecord ) {\n\t\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\t\tkind,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tnewRecord,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tundefined\n\t\t\t\t\t);\n\t\t\t\t\tupdatedRecord = newRecord;\n\t\t\t\t}\n\t\t\t} catch ( e ) {\n\t\t\t\terror = e;\n\t\t\t\thasError = true;\n\t\t\t}\n\n\t\t\tdispatch( {\n\t\t\t\ttype: 'SAVE_ENTITY_RECORD_FINISH',\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\trecordId,\n\t\t\t\terror,\n\t\t\t} );\n\n\t\t\tif ( hasError && throwOnError ) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\treturn updatedRecord;\n\t\t} finally {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\n\n/**\n * Returns an action object used to receive editor settings.\n *\n * @param {Object} settings Editor settings object.\n *\n * @return {Object} Action object.\n */\nexport function receiveEditorSettings( settings ) {\n\treturn {\n\t\ttype: 'RECEIVE_EDITOR_SETTINGS',\n\t\tsettings,\n\t};\n}\n\n/**\n * Returns an action object used to receive editor assets.\n *\n * @param {Object} assets Editor assets object.\n *\n * @return {Object} Action object.\n */\nexport function receiveEditorAssets( assets ) {\n\treturn {\n\t\ttype: 'RECEIVE_EDITOR_ASSETS',\n\t\tassets,\n\t};\n}\n\n/**\n * Returns an action object used to set whether collaboration is supported.\n * When set to false, also disconnects all sync entities.\n *\n * @param {boolean} supported Whether collaboration is supported.\n *\n * @return {Object} Action object.\n */\nexport const setCollaborationSupported =\n\t( supported ) =>\n\t( { dispatch } ) => {\n\t\tdispatch( { type: 'SET_COLLABORATION_SUPPORTED', supported } );\n\t\tif ( ! supported && hasSyncManager() ) {\n\t\t\tgetSyncManager().unloadAll();\n\t\t\tdispatch.__unstableNotifySyncUndoManagerChange( {\n\t\t\t\thasUndo: false,\n\t\t\t\thasRedo: false,\n\t\t\t} );\n\t\t}\n\t};\n\n/**\n * Returns an action object used to receive view config.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {Object} config View config object.\n *\n * @return {Object} Action object.\n */\nexport function receiveViewConfig( kind, name, config ) {\n\treturn {\n\t\ttype: 'RECEIVE_VIEW_CONFIG',\n\t\tkind,\n\t\tname,\n\t\tconfig,\n\t};\n}\n\n/**\n * Returns an action object used to notify core-data that the sync undo manager\n * state changed outside of the core-data reducer, e.g. The Yjs UndoManager\n * captured an undo level.\n *\n * @param {Object} state The sync undo stack state.\n * @param {boolean} state.hasRedo Whether there are changes to redo.\n * @param {boolean} state.hasUndo Whether there are changes to undo.\n *\n * @return {Object} Action object.\n */\nexport function __unstableNotifySyncUndoManagerChange( state ) {\n\treturn {\n\t\ttype: 'SYNC_UNDO_MANAGER_CHANGE',\n\t\t...state,\n\t};\n}\n\n/**\n * Returns an action object used to set the sync connection status for an entity or collection.\n *\n * @param {string} kind Kind of the entity.\n * @param {string} name Name of the entity.\n * @param {number|string|null} key The entity key, or null for collections.\n * @param {Object|null} status The connection state object or null on unload.\n *\n * @return {Object} Action object.\n */\nexport function setSyncConnectionStatus( kind, name, key, status ) {\n\tif ( ! status ) {\n\t\treturn {\n\t\t\ttype: 'CLEAR_SYNC_CONNECTION_STATUS',\n\t\t\tkind,\n\t\t\tname,\n\t\t\tkey,\n\t\t};\n\t}\n\n\treturn {\n\t\ttype: 'SET_SYNC_CONNECTION_STATUS',\n\t\tkind,\n\t\tname,\n\t\tkey,\n\t\tstatus,\n\t};\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["apiFetch"]
|
|
7
7
|
}
|
package/build/resolvers.cjs
CHANGED
|
@@ -163,7 +163,8 @@ var getEntityRecord = (kind, name, key = "", query) => async ({ select, dispatch
|
|
|
163
163
|
blocks: recordWithTransients.blocks
|
|
164
164
|
});
|
|
165
165
|
}
|
|
166
|
-
void (0, import_sync.getSyncManager)()
|
|
166
|
+
const syncManager = select?.isCollaborationSupported?.() === false ? void 0 : (0, import_sync.getSyncManager)();
|
|
167
|
+
void syncManager?.load(
|
|
167
168
|
entityConfig.syncConfig,
|
|
168
169
|
objectType,
|
|
169
170
|
objectId,
|
package/build/resolvers.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/resolvers.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * External dependencies\n */\nimport { camelCase } from 'change-case';\n\n/**\n * WordPress dependencies\n */\nimport { addQueryArgs } from '@wordpress/url';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport apiFetch from '@wordpress/api-fetch';\n\n/**\n * Internal dependencies\n */\nimport { STORE_NAME } from './name';\nimport { additionalEntityConfigLoaders, DEFAULT_ENTITY_KEY } from './entities';\nimport { getSyncManager } from './sync';\nimport {\n\tforwardResolver,\n\tgetNormalizedCommaSeparable,\n\tgetUserPermissionCacheKey,\n\tgetUserPermissionsFromAllowHeader,\n\tALLOWED_RESOURCE_ACTIONS,\n\tRECEIVE_INTERMEDIATE_RESULTS,\n\tisNumericID,\n\tnormalizeQueryForResolution,\n\tsaveCRDTDoc,\n} from './utils';\nimport { fetchBlockPatterns } from './fetch';\nimport { restoreSelection, getSelectionHistory } from './utils/crdt-selection';\nimport { parsedBlocksCache, getCacheKey } from './parsed-blocks-cache';\n\n/**\n * Requests authors from the REST API.\n *\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request.\n */\nexport const getAuthors =\n\t( query ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst path = addQueryArgs(\n\t\t\t'/wp/v2/users/?who=authors&per_page=100',\n\t\t\tquery\n\t\t);\n\t\tconst users = await apiFetch( { path } );\n\t\tdispatch.receiveUserQuery( path, users );\n\t};\n\n/**\n * Requests the current user from the REST API.\n */\nexport const getCurrentUser =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst currentUser = await apiFetch( { path: '/wp/v2/users/me' } );\n\t\tdispatch.receiveCurrentUser( currentUser );\n\t};\n\n/**\n * Requests an entity's record from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} key Record's key\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request. If requesting specific\n * fields, fields must always include the ID.\n */\nexport const getEntityRecord =\n\t( kind, name, key = '', query ) =>\n\tasync ( { select, dispatch, registry, resolveSelect } ) => {\n\t\tconst configs = await resolveSelect.getEntitiesConfig( kind );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\t\tif ( ! entityConfig ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\t\tSTORE_NAME,\n\t\t\t[ 'entities', 'records', kind, name, key ],\n\t\t\t{ exclusive: false }\n\t\t);\n\n\t\ttry {\n\t\t\tif ( query !== undefined && query._fields ) {\n\t\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t\t// the ID.\n\t\t\t\tquery = {\n\t\t\t\t\t...query,\n\t\t\t\t\t_fields: [\n\t\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\t\tentityConfig.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t\t] ),\n\t\t\t\t\t].join(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif ( query !== undefined && query._fields ) {\n\t\t\t\t// The resolution cache won't consider query as reusable based on the\n\t\t\t\t// fields, so it's tested here, prior to initiating the REST request,\n\t\t\t\t// and without causing `getEntityRecord` resolution to occur.\n\t\t\t\tconst hasRecord = select.hasEntityRecord(\n\t\t\t\t\tkind,\n\t\t\t\t\tname,\n\t\t\t\t\tkey,\n\t\t\t\t\tquery\n\t\t\t\t);\n\t\t\t\tif ( hasRecord ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet { baseURL } = entityConfig;\n\n\t\t\t// For \"string\" IDs, use the old templates endpoint.\n\t\t\tif (\n\t\t\t\tkind === 'postType' &&\n\t\t\t\tname === 'wp_template' &&\n\t\t\t\t( ( key && typeof key === 'string' && ! /^\\d+$/.test( key ) ) ||\n\t\t\t\t\t! window?.__experimentalTemplateActivate )\n\t\t\t) {\n\t\t\t\tbaseURL =\n\t\t\t\t\tbaseURL.slice( 0, baseURL.lastIndexOf( '/' ) ) +\n\t\t\t\t\t'/templates';\n\t\t\t}\n\n\t\t\tconst path = addQueryArgs( baseURL + ( key ? '/' + key : '' ), {\n\t\t\t\t...entityConfig.baseURLParams,\n\t\t\t\t...query,\n\t\t\t} );\n\t\t\tconst response = await apiFetch( { path, parse: false } );\n\t\t\tconst record = await response.json();\n\t\t\tconst permissions = getUserPermissionsFromAllowHeader(\n\t\t\t\tresponse.headers?.get( 'allow' )\n\t\t\t);\n\n\t\t\tconst canUserResolutionsArgs = [];\n\t\t\tconst receiveUserPermissionArgs = {};\n\t\t\tfor ( const action of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\t\treceiveUserPermissionArgs[\n\t\t\t\t\tgetUserPermissionCacheKey( action, {\n\t\t\t\t\t\tkind,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tid: key,\n\t\t\t\t\t} )\n\t\t\t\t] = permissions[ action ];\n\n\t\t\t\tcanUserResolutionsArgs.push( [\n\t\t\t\t\taction,\n\t\t\t\t\t{ kind, name, id: key },\n\t\t\t\t] );\n\t\t\t}\n\n\t\t\t// Entity supports syncing.\n\t\t\tif ( entityConfig.syncConfig && isNumericID( key ) && ! query ) {\n\t\t\t\tconst objectType = `${ kind }/${ name }`;\n\t\t\t\tconst objectId = key;\n\n\t\t\t\t// Use the new transient \"read/write\" config to compute transients for\n\t\t\t\t// the sync manager. Otherwise these transients are not available\n\t\t\t\t// if / until the record is edited. Use a copy of the record so that\n\t\t\t\t// it does not change the behavior outside this experimental flag.\n\t\t\t\tconst recordWithTransients = { ...record };\n\t\t\t\tObject.entries( entityConfig.transientEdits ?? {} )\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t( [ propName, transientConfig ] ) =>\n\t\t\t\t\t\t\tundefined === recordWithTransients[ propName ] &&\n\t\t\t\t\t\t\ttransientConfig &&\n\t\t\t\t\t\t\t'object' === typeof transientConfig &&\n\t\t\t\t\t\t\t'read' in transientConfig &&\n\t\t\t\t\t\t\t'function' === typeof transientConfig.read\n\t\t\t\t\t)\n\t\t\t\t\t.forEach( ( [ propName, transientConfig ] ) => {\n\t\t\t\t\t\trecordWithTransients[ propName ] =\n\t\t\t\t\t\t\ttransientConfig.read( recordWithTransients );\n\t\t\t\t\t} );\n\n\t\t\t\t// Share the parsed blocks with `useEntityBlockEditor` so the\n\t\t\t\t// editor doesn't re-parse the same `content` string.\n\t\t\t\tif (\n\t\t\t\t\trecordWithTransients.blocks &&\n\t\t\t\t\ttypeof recordWithTransients.content?.raw === 'string'\n\t\t\t\t) {\n\t\t\t\t\tparsedBlocksCache.set( getCacheKey( kind, name, key ), {\n\t\t\t\t\t\tcontent: recordWithTransients.content.raw,\n\t\t\t\t\t\tblocks: recordWithTransients.blocks,\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\t// Load the entity record for syncing. Do not await promise.\n\t\t\t\tvoid getSyncManager()?.load(\n\t\t\t\t\tentityConfig.syncConfig,\n\t\t\t\t\tobjectType,\n\t\t\t\t\tobjectId,\n\t\t\t\t\trecordWithTransients,\n\t\t\t\t\t{\n\t\t\t\t\t\t// Handle edits sourced from the sync manager.\n\t\t\t\t\t\teditRecord: ( edits, options = {} ) => {\n\t\t\t\t\t\t\tif ( ! Object.keys( edits ).length ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdispatch( {\n\t\t\t\t\t\t\t\ttype: 'EDIT_ENTITY_RECORD',\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\trecordId: key,\n\t\t\t\t\t\t\t\tedits,\n\t\t\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\t\t\tundo: undefined,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t},\n\t\t\t\t\t\t// Get the current entity record (with edits)\n\t\t\t\t\t\tgetEditedRecord: async () =>\n\t\t\t\t\t\t\tawait resolveSelect.getEditedEntityRecord(\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tkey\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t// Handle sync connection status changes.\n\t\t\t\t\t\tonStatusChange: ( status ) => {\n\t\t\t\t\t\t\tdispatch.setSyncConnectionStatus(\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tstatus\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t// Refetch the current entity record from the database.\n\t\t\t\t\t\trefetchRecord: async () => {\n\t\t\t\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tawait apiFetch( { path, parse: true } ),\n\t\t\t\t\t\t\t\tquery\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t// Persist the CRDT document.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// TODO: Currently, persisted CRDT documents are stored in post meta.\n\t\t\t\t\t\t// This effectively means that only post entities support CRDT\n\t\t\t\t\t\t// persistence. As we add support for syncing additional entity,\n\t\t\t\t\t\t// we'll need to revisit where persisted CRDT documents are stored.\n\t\t\t\t\t\tpersistCRDTDoc: () => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t! entityConfig.syncConfig?.supportsPersistence\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn resolveSelect\n\t\t\t\t\t\t\t\t.getEditedEntityRecord( kind, name, key )\n\t\t\t\t\t\t\t\t.then( async ( editedRecord ) => {\n\t\t\t\t\t\t\t\t\t// Don't persist the CRDT document if the record is still an\n\t\t\t\t\t\t\t\t\t// auto-draft or if the entity does not support meta.\n\t\t\t\t\t\t\t\t\tconst { meta, status } = editedRecord;\n\t\t\t\t\t\t\t\t\tif ( 'auto-draft' === status || ! meta ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tconst entityIdKey =\n\t\t\t\t\t\t\t\t\t\tentityConfig.key || DEFAULT_ENTITY_KEY;\n\t\t\t\t\t\t\t\t\tconst entityId =\n\t\t\t\t\t\t\t\t\t\teditedRecord[ entityIdKey ];\n\n\t\t\t\t\t\t\t\t\tawait saveCRDTDoc(\n\t\t\t\t\t\t\t\t\t\t`${ kind }/${ name }`,\n\t\t\t\t\t\t\t\t\t\tentityId\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t},\n\t\t\t\t\t\taddUndoMeta: ( ydoc, meta ) => {\n\t\t\t\t\t\t\tconst selectionHistory =\n\t\t\t\t\t\t\t\tgetSelectionHistory( ydoc );\n\n\t\t\t\t\t\t\tif ( selectionHistory ) {\n\t\t\t\t\t\t\t\tmeta.set(\n\t\t\t\t\t\t\t\t\t'selectionHistory',\n\t\t\t\t\t\t\t\t\tselectionHistory\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonUndoStackChange: ( undoState ) => {\n\t\t\t\t\t\t\tdispatch.__unstableNotifySyncUndoManagerChange(\n\t\t\t\t\t\t\t\tundoState\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t\trestoreUndoMeta: ( ydoc, meta ) => {\n\t\t\t\t\t\t\tconst selectionHistory =\n\t\t\t\t\t\t\t\tmeta.get( 'selectionHistory' );\n\n\t\t\t\t\t\t\tif ( selectionHistory ) {\n\t\t\t\t\t\t\t\t// Because Yjs initiates an undo, we need to\n\t\t\t\t\t\t\t\t// wait until the content is restored before\n\t\t\t\t\t\t\t\t// we can update the selection.\n\t\t\t\t\t\t\t\t// Use setTimeout() to wait until content is\n\t\t\t\t\t\t\t\t// finished updating, and then set the correct\n\t\t\t\t\t\t\t\t// selection.\n\t\t\t\t\t\t\t\tsetTimeout( () => {\n\t\t\t\t\t\t\t\t\trestoreSelection( selectionHistory, ydoc );\n\t\t\t\t\t\t\t\t}, 0 );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tregistry.batch( () => {\n\t\t\t\tdispatch.receiveEntityRecords( kind, name, record, query );\n\t\t\t\tdispatch.receiveUserPermissions( receiveUserPermissionArgs );\n\t\t\t\tdispatch.finishResolutions( 'canUser', canUserResolutionsArgs );\n\t\t\t} );\n\t\t} finally {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\n\n// Whenever a template is saved, the active templates might be updated, so\n// invalidate the site settings when a template is updated or deleted.\ngetEntityRecord.shouldInvalidate = ( action, kind, name ) => {\n\treturn (\n\t\tkind === 'root' &&\n\t\tname === 'site' &&\n\t\t( ( action.type === 'RECEIVE_ITEMS' &&\n\t\t\t// Making sure persistedEdits is set seems to be the only way of\n\t\t\t// knowing whether it's an update or fetch. Only an update would\n\t\t\t// have persistedEdits.\n\t\t\taction.persistedEdits &&\n\t\t\taction.persistedEdits.status !== 'auto-draft' ) ||\n\t\t\taction.type === 'REMOVE_ITEMS' ) &&\n\t\taction.kind === 'postType' &&\n\t\taction.name === 'wp_template'\n\t);\n};\n\n/**\n * Requests an entity's record from the REST API.\n */\nexport const getRawEntityRecord = forwardResolver( 'getEntityRecord' );\n\n/**\n * Requests an entity's record from the REST API.\n */\nexport const getEditedEntityRecord = forwardResolver( 'getEntityRecord' );\n\n/**\n * Requests the entity's records from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {?Object} query Query Object. If requesting specific fields, fields\n * must always include the ID.\n */\nexport const getEntityRecords =\n\t( kind, name, query = {} ) =>\n\tasync ( { dispatch, registry, resolveSelect } ) => {\n\t\tconst configs = await resolveSelect.getEntitiesConfig( kind );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\t\tif ( ! entityConfig ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\t\tSTORE_NAME,\n\t\t\t[ 'entities', 'records', kind, name ],\n\t\t\t{ exclusive: false }\n\t\t);\n\n\t\t// Keep a copy of the original query for later use in getResolutionsArgs.\n\t\t// The query object may be modified below (for example, when _fields is\n\t\t// specified), but we want to use the original query when marking\n\t\t// resolutions as finished.\n\t\tconst rawQuery = { ...query };\n\t\tconst key = entityConfig.key || DEFAULT_ENTITY_KEY;\n\n\t\tfunction getResolutionsArgs( records, recordsQuery ) {\n\t\t\tconst normalizedQuery = normalizeQueryForResolution( recordsQuery );\n\t\t\treturn records\n\t\t\t\t.filter( ( record ) => record?.[ key ] )\n\t\t\t\t.map( ( record ) => [\n\t\t\t\t\tkind,\n\t\t\t\t\tname,\n\t\t\t\t\trecord[ key ],\n\t\t\t\t\tnormalizedQuery,\n\t\t\t\t] );\n\t\t}\n\n\t\ttry {\n\t\t\tif ( query._fields ) {\n\t\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t\t// the ID.\n\t\t\t\tquery = {\n\t\t\t\t\t...query,\n\t\t\t\t\t_fields: [\n\t\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t] ),\n\t\t\t\t\t].join(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet { baseURL } = entityConfig;\n\t\t\t// `combinedTemplates` means that we fetch templates from the \"old\"\n\t\t\t// /templates endpoint, which combines active user templates with\n\t\t\t// the registered templates and rewrites IDs in the form of\n\t\t\t// `theme-slug/template-slug`. When turned off, we only fetch\n\t\t\t// database templates (posts). To fetch registered templates without\n\t\t\t// edits applied, use the `registeredTemplate` entity.\n\t\t\tconst { combinedTemplates = true } = query;\n\n\t\t\tif (\n\t\t\t\tkind === 'postType' &&\n\t\t\t\tname === 'wp_template' &&\n\t\t\t\tcombinedTemplates\n\t\t\t) {\n\t\t\t\tbaseURL =\n\t\t\t\t\tbaseURL.slice( 0, baseURL.lastIndexOf( '/' ) ) +\n\t\t\t\t\t'/templates';\n\t\t\t}\n\n\t\t\tconst path = addQueryArgs( baseURL, {\n\t\t\t\t...entityConfig.baseURLParams,\n\t\t\t\t...query,\n\t\t\t} );\n\n\t\t\tlet records = [],\n\t\t\t\tmeta;\n\t\t\tif ( entityConfig.supportsPagination && query.per_page !== -1 ) {\n\t\t\t\tconst response = await apiFetch( { path, parse: false } );\n\t\t\t\trecords = Object.values( await response.json() );\n\t\t\t\tmeta = {\n\t\t\t\t\ttotalItems: parseInt(\n\t\t\t\t\t\tresponse.headers.get( 'X-WP-Total' )\n\t\t\t\t\t),\n\t\t\t\t\ttotalPages: parseInt(\n\t\t\t\t\t\tresponse.headers.get( 'X-WP-TotalPages' )\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t} else if (\n\t\t\t\tquery.per_page === -1 &&\n\t\t\t\tquery[ RECEIVE_INTERMEDIATE_RESULTS ] === true\n\t\t\t) {\n\t\t\t\tlet page = 1;\n\t\t\t\tlet totalPages;\n\n\t\t\t\tdo {\n\t\t\t\t\tconst response = await apiFetch( {\n\t\t\t\t\t\tpath: addQueryArgs( path, { page, per_page: 100 } ),\n\t\t\t\t\t\tparse: false,\n\t\t\t\t\t} );\n\t\t\t\t\tconst pageRecords = Object.values( await response.json() );\n\n\t\t\t\t\ttotalPages = parseInt(\n\t\t\t\t\t\tresponse.headers.get( 'X-WP-TotalPages' )\n\t\t\t\t\t);\n\n\t\t\t\t\tif ( ! meta ) {\n\t\t\t\t\t\tmeta = {\n\t\t\t\t\t\t\ttotalItems: parseInt(\n\t\t\t\t\t\t\t\tresponse.headers.get( 'X-WP-Total' )\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\ttotalPages: 1,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\trecords.push( ...pageRecords );\n\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\trecords,\n\t\t\t\t\t\t\tquery,\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\tmeta\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdispatch.finishResolutions(\n\t\t\t\t\t\t\t'getEntityRecord',\n\t\t\t\t\t\t\tgetResolutionsArgs( pageRecords, rawQuery )\n\t\t\t\t\t\t);\n\t\t\t\t\t} );\n\t\t\t\t\tpage++;\n\t\t\t\t} while ( page <= totalPages );\n\t\t\t} else {\n\t\t\t\trecords = Object.values( await apiFetch( { path } ) );\n\t\t\t\tmeta = {\n\t\t\t\t\ttotalItems: records.length,\n\t\t\t\t\ttotalPages: 1,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif ( entityConfig.syncConfig && -1 === query.per_page ) {\n\t\t\t\tconst objectType = `${ kind }/${ name }`;\n\t\t\t\tgetSyncManager()?.loadCollection(\n\t\t\t\t\tentityConfig.syncConfig,\n\t\t\t\t\tobjectType,\n\t\t\t\t\t{\n\t\t\t\t\t\tonStatusChange: ( status ) => {\n\t\t\t\t\t\t\tdispatch.setSyncConnectionStatus(\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\tstatus\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t\trefetchRecords: async () => {\n\t\t\t\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tawait apiFetch( { path, parse: true } ),\n\t\t\t\t\t\t\t\tquery\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// If we request fields but the result doesn't contain the fields,\n\t\t\t// explicitly set these fields as \"undefined\"\n\t\t\t// that way we consider the query \"fulfilled\".\n\t\t\tif ( query._fields ) {\n\t\t\t\trecords = records.map( ( record ) => {\n\t\t\t\t\tquery._fields.split( ',' ).forEach( ( field ) => {\n\t\t\t\t\t\tif ( ! record.hasOwnProperty( field ) ) {\n\t\t\t\t\t\t\trecord[ field ] = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn record;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tregistry.batch( () => {\n\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\tkind,\n\t\t\t\t\tname,\n\t\t\t\t\trecords,\n\t\t\t\t\tquery,\n\t\t\t\t\tfalse,\n\t\t\t\t\tundefined,\n\t\t\t\t\tmeta\n\t\t\t\t);\n\n\t\t\t\tconst targetHints = records\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t( record ) =>\n\t\t\t\t\t\t\t!! record?.[ key ] &&\n\t\t\t\t\t\t\t!! record?._links?.self?.[ 0 ]?.targetHints?.allow\n\t\t\t\t\t)\n\t\t\t\t\t.map( ( record ) => ( {\n\t\t\t\t\t\tid: record[ key ],\n\t\t\t\t\t\tpermissions: getUserPermissionsFromAllowHeader(\n\t\t\t\t\t\t\trecord._links.self[ 0 ].targetHints.allow\n\t\t\t\t\t\t),\n\t\t\t\t\t} ) );\n\n\t\t\t\tconst canUserResolutionsArgs = [];\n\t\t\t\tconst receiveUserPermissionArgs = {};\n\t\t\t\tfor ( const targetHint of targetHints ) {\n\t\t\t\t\tfor ( const action of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\t\t\t\tcanUserResolutionsArgs.push( [\n\t\t\t\t\t\t\taction,\n\t\t\t\t\t\t\t{ kind, name, id: targetHint.id },\n\t\t\t\t\t\t] );\n\n\t\t\t\t\t\treceiveUserPermissionArgs[\n\t\t\t\t\t\t\tgetUserPermissionCacheKey( action, {\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tid: targetHint.id,\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t] = targetHint.permissions[ action ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( targetHints.length > 0 ) {\n\t\t\t\t\tdispatch.receiveUserPermissions(\n\t\t\t\t\t\treceiveUserPermissionArgs\n\t\t\t\t\t);\n\t\t\t\t\tdispatch.finishResolutions(\n\t\t\t\t\t\t'canUser',\n\t\t\t\t\t\tcanUserResolutionsArgs\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tdispatch.finishResolutions(\n\t\t\t\t\t'getEntityRecord',\n\t\t\t\t\tgetResolutionsArgs( records, rawQuery )\n\t\t\t\t);\n\n\t\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t\t} );\n\t\t} catch {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\n\ngetEntityRecords.shouldInvalidate = ( action, kind, name ) => {\n\treturn (\n\t\t( action.type === 'RECEIVE_ITEMS' || action.type === 'REMOVE_ITEMS' ) &&\n\t\taction.invalidateCache &&\n\t\tkind === action.kind &&\n\t\tname === action.name\n\t);\n};\n\n/**\n * Requests the total number of entity records.\n */\nexport const getEntityRecordsTotalItems = forwardResolver( 'getEntityRecords' );\n\n/**\n * Requests the number of available pages for the given query.\n */\nexport const getEntityRecordsTotalPages = forwardResolver( 'getEntityRecords' );\n\n/**\n * Requests the current theme.\n */\nexport const getCurrentTheme =\n\t() =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst activeThemes = await resolveSelect.getEntityRecords(\n\t\t\t'root',\n\t\t\t'theme',\n\t\t\t{ status: 'active' }\n\t\t);\n\n\t\tdispatch.receiveCurrentTheme( activeThemes[ 0 ] );\n\t};\n\n/**\n * Requests theme supports data from the index.\n */\nexport const getThemeSupports = forwardResolver( 'getCurrentTheme' );\n\n/**\n * Requests a preview from the Embed API.\n *\n * @param {string} url URL to get the preview for.\n */\nexport const getEmbedPreview =\n\t( url ) =>\n\tasync ( { dispatch } ) => {\n\t\ttry {\n\t\t\tconst embedProxyResponse = await apiFetch( {\n\t\t\t\tpath: addQueryArgs( '/oembed/1.0/proxy', { url } ),\n\t\t\t} );\n\t\t\tdispatch.receiveEmbedPreview( url, embedProxyResponse );\n\t\t} catch {\n\t\t\t// Embed API 404s if the URL cannot be embedded, so we have to catch the error from the apiRequest here.\n\t\t\tdispatch.receiveEmbedPreview( url, false );\n\t\t}\n\t};\n\n/**\n * Checks whether the current user can perform the given action on the given\n * REST resource.\n *\n * @param {string} requestedAction Action to check. One of: 'create', 'read', 'update',\n * 'delete'.\n * @param {string|Object} resource Entity resource to check. Accepts entity object `{ kind: 'postType', name: 'attachment', id: 1 }`\n * or REST base as a string - `media`.\n * @param {?string} id ID of the rest resource to check.\n */\nexport const canUser =\n\t( requestedAction, resource, id ) =>\n\tasync ( { dispatch, registry, resolveSelect } ) => {\n\t\tif ( ! ALLOWED_RESOURCE_ACTIONS.includes( requestedAction ) ) {\n\t\t\tthrow new Error( `'${ requestedAction }' is not a valid action.` );\n\t\t}\n\n\t\tconst { hasStartedResolution } = registry.select( STORE_NAME );\n\n\t\t// Prevent resolving the same resource twice.\n\t\tfor ( const relatedAction of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\tif ( relatedAction === requestedAction ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst isAlreadyResolving = hasStartedResolution( 'canUser', [\n\t\t\t\trelatedAction,\n\t\t\t\tresource,\n\t\t\t\tid,\n\t\t\t] );\n\t\t\tif ( isAlreadyResolving ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tlet resourcePath = null;\n\t\tif ( typeof resource === 'object' ) {\n\t\t\tif ( ! resource.kind || ! resource.name ) {\n\t\t\t\tthrow new Error( 'The entity resource object is not valid.' );\n\t\t\t}\n\n\t\t\tconst configs = await resolveSelect.getEntitiesConfig(\n\t\t\t\tresource.kind\n\t\t\t);\n\t\t\tconst entityConfig = configs.find(\n\t\t\t\t( config ) =>\n\t\t\t\t\tconfig.name === resource.name &&\n\t\t\t\t\tconfig.kind === resource.kind\n\t\t\t);\n\t\t\tif ( ! entityConfig ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresourcePath =\n\t\t\t\tentityConfig.baseURL + ( resource.id ? '/' + resource.id : '' );\n\t\t} else {\n\t\t\tresourcePath = `/wp/v2/${ resource }` + ( id ? '/' + id : '' );\n\t\t}\n\n\t\tlet response;\n\t\ttry {\n\t\t\tresponse = await apiFetch( {\n\t\t\t\tpath: resourcePath,\n\t\t\t\tmethod: 'OPTIONS',\n\t\t\t\tparse: false,\n\t\t\t} );\n\t\t} catch {\n\t\t\t// Do nothing if our OPTIONS request comes back with an API error (4xx or\n\t\t\t// 5xx). The previously determined isAllowed value will remain in the store.\n\t\t\treturn;\n\t\t}\n\n\t\t// Optional chaining operator is used here because the API requests don't\n\t\t// return the expected result in the React native version. Instead, API requests\n\t\t// only return the result, without including response properties like the headers.\n\t\tconst permissions = getUserPermissionsFromAllowHeader(\n\t\t\tresponse.headers?.get( 'allow' )\n\t\t);\n\t\tconst receiveUserPermissionArgs = {};\n\t\tconst canUserResolutionsArgs = [];\n\t\tfor ( const action of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\treceiveUserPermissionArgs[\n\t\t\t\tgetUserPermissionCacheKey( action, resource, id )\n\t\t\t] = permissions[ action ];\n\n\t\t\t// Mark related action resolutions as finished.\n\t\t\tif ( action !== requestedAction ) {\n\t\t\t\tcanUserResolutionsArgs.push( [ action, resource, id ] );\n\t\t\t}\n\t\t}\n\t\tregistry.batch( () => {\n\t\t\tdispatch.receiveUserPermissions( receiveUserPermissionArgs );\n\t\t\tdispatch.finishResolutions( 'canUser', canUserResolutionsArgs );\n\t\t} );\n\t};\n\n/**\n * Checks whether the current user can perform the given action on the given\n * REST resource.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordId Record's id.\n */\nexport const canUserEditEntityRecord =\n\t( kind, name, recordId ) =>\n\tasync ( { dispatch } ) => {\n\t\tawait dispatch( canUser( 'update', { kind, name, id: recordId } ) );\n\t};\n\n/**\n * Request autosave data from the REST API.\n *\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n */\nexport const getAutosaves =\n\t( postType, postId ) =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst {\n\t\t\trest_base: restBase,\n\t\t\trest_namespace: restNamespace = 'wp/v2',\n\t\t\tsupports,\n\t\t} = await resolveSelect.getPostType( postType );\n\t\tif ( ! supports?.autosave ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst autosaves = await apiFetch( {\n\t\t\tpath: `/${ restNamespace }/${ restBase }/${ postId }/autosaves?context=edit`,\n\t\t} );\n\n\t\tif ( autosaves && autosaves.length ) {\n\t\t\tdispatch.receiveAutosaves( postId, autosaves );\n\t\t}\n\t};\n\n/**\n * Request autosave data from the REST API.\n *\n * This resolver exists to ensure the underlying autosaves are fetched via\n * `getAutosaves` when a call to the `getAutosave` selector is made.\n *\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n */\nexport const getAutosave =\n\t( postType, postId ) =>\n\tasync ( { resolveSelect } ) => {\n\t\tawait resolveSelect.getAutosaves( postType, postId );\n\t};\n\nexport const __experimentalGetCurrentGlobalStylesId =\n\t() =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst activeThemes = await resolveSelect.getEntityRecords(\n\t\t\t'root',\n\t\t\t'theme',\n\t\t\t{ status: 'active' }\n\t\t);\n\t\tconst globalStylesURL =\n\t\t\tactiveThemes?.[ 0 ]?._links?.[ 'wp:user-global-styles' ]?.[ 0 ]\n\t\t\t\t?.href;\n\t\tif ( ! globalStylesURL ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Regex matches the ID at the end of a URL or immediately before\n\t\t// the query string.\n\t\tconst matches = globalStylesURL.match( /\\/(\\d+)(?:\\?|$)/ );\n\t\tconst id = matches ? Number( matches[ 1 ] ) : null;\n\n\t\tif ( id ) {\n\t\t\tdispatch.__experimentalReceiveCurrentGlobalStylesId( id );\n\t\t}\n\t};\n\nexport const __experimentalGetCurrentThemeBaseGlobalStyles =\n\t() =>\n\tasync ( { resolveSelect, dispatch } ) => {\n\t\tconst currentTheme = await resolveSelect.getCurrentTheme();\n\t\t// Please adjust the preloaded requests if this changes!\n\t\tconst themeGlobalStyles = await apiFetch( {\n\t\t\tpath: `/wp/v2/global-styles/themes/${ currentTheme.stylesheet }?context=view`,\n\t\t} );\n\t\tdispatch.__experimentalReceiveThemeBaseGlobalStyles(\n\t\t\tcurrentTheme.stylesheet,\n\t\t\tthemeGlobalStyles\n\t\t);\n\t};\n\nexport const __experimentalGetCurrentThemeGlobalStylesVariations =\n\t() =>\n\tasync ( { resolveSelect, dispatch } ) => {\n\t\tconst currentTheme = await resolveSelect.getCurrentTheme();\n\t\t// Please adjust the preloaded requests if this changes!\n\t\tconst variations = await apiFetch( {\n\t\t\tpath: `/wp/v2/global-styles/themes/${ currentTheme.stylesheet }/variations?context=view`,\n\t\t} );\n\t\tdispatch.__experimentalReceiveThemeGlobalStyleVariations(\n\t\t\tcurrentTheme.stylesheet,\n\t\t\tvariations\n\t\t);\n\t};\n\n/**\n * Fetches and returns the revisions of the current global styles theme.\n */\nexport const getCurrentThemeGlobalStylesRevisions =\n\t() =>\n\tasync ( { resolveSelect, dispatch } ) => {\n\t\tconst globalStylesId =\n\t\t\tawait resolveSelect.__experimentalGetCurrentGlobalStylesId();\n\t\tconst record = globalStylesId\n\t\t\t? await resolveSelect.getEntityRecord(\n\t\t\t\t\t'root',\n\t\t\t\t\t'globalStyles',\n\t\t\t\t\tglobalStylesId\n\t\t\t )\n\t\t\t: undefined;\n\t\tconst revisionsURL = record?._links?.[ 'version-history' ]?.[ 0 ]?.href;\n\n\t\tif ( revisionsURL ) {\n\t\t\tconst resetRevisions = await apiFetch( {\n\t\t\t\turl: revisionsURL,\n\t\t\t} );\n\t\t\tconst revisions = resetRevisions?.map( ( revision ) =>\n\t\t\t\tObject.fromEntries(\n\t\t\t\t\tObject.entries( revision ).map( ( [ key, value ] ) => [\n\t\t\t\t\t\tcamelCase( key ),\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t] )\n\t\t\t\t)\n\t\t\t);\n\t\t\tdispatch.receiveThemeGlobalStyleRevisions(\n\t\t\t\tglobalStylesId,\n\t\t\t\trevisions\n\t\t\t);\n\t\t}\n\t};\n\ngetCurrentThemeGlobalStylesRevisions.shouldInvalidate = ( action ) => {\n\treturn (\n\t\taction.type === 'SAVE_ENTITY_RECORD_FINISH' &&\n\t\taction.kind === 'root' &&\n\t\t! action.error &&\n\t\taction.name === 'globalStyles'\n\t);\n};\n\nexport const getBlockPatterns =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst patterns = await fetchBlockPatterns();\n\t\tdispatch( { type: 'RECEIVE_BLOCK_PATTERNS', patterns } );\n\t};\n\nexport const getBlockPatternCategories =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst categories = await apiFetch( {\n\t\t\tpath: '/wp/v2/block-patterns/categories',\n\t\t} );\n\t\tdispatch( { type: 'RECEIVE_BLOCK_PATTERN_CATEGORIES', categories } );\n\t};\n\nexport const getUserPatternCategories =\n\t() =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst patternCategories = await resolveSelect.getEntityRecords(\n\t\t\t'taxonomy',\n\t\t\t'wp_pattern_category',\n\t\t\t{\n\t\t\t\tper_page: -1,\n\t\t\t\t_fields: 'id,name,description,slug',\n\t\t\t\tcontext: 'view',\n\t\t\t}\n\t\t);\n\n\t\tconst mappedPatternCategories =\n\t\t\tpatternCategories?.map( ( userCategory ) => ( {\n\t\t\t\t...userCategory,\n\t\t\t\tlabel: decodeEntities( userCategory.name ),\n\t\t\t\tname: userCategory.slug,\n\t\t\t} ) ) || [];\n\n\t\tdispatch( {\n\t\t\ttype: 'RECEIVE_USER_PATTERN_CATEGORIES',\n\t\t\tpatternCategories: mappedPatternCategories,\n\t\t} );\n\t};\n\nexport const getNavigationFallbackId =\n\t() =>\n\tasync ( { dispatch, select, registry } ) => {\n\t\tconst fallback = await apiFetch( {\n\t\t\tpath: addQueryArgs( '/wp-block-editor/v1/navigation-fallback', {\n\t\t\t\t_embed: true,\n\t\t\t} ),\n\t\t} );\n\n\t\tconst record = fallback?._embedded?.self;\n\n\t\tregistry.batch( () => {\n\t\t\tdispatch.receiveNavigationFallbackId( fallback?.id );\n\n\t\t\tif ( ! record ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the fallback is already in the store, don't invalidate navigation queries.\n\t\t\t// Otherwise, invalidate the cache for the scenario where there were no Navigation\n\t\t\t// posts in the state and the fallback created one.\n\t\t\tconst existingFallbackEntityRecord = select.getEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'wp_navigation',\n\t\t\t\tfallback.id\n\t\t\t);\n\t\t\tconst invalidateNavigationQueries = ! existingFallbackEntityRecord;\n\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t'postType',\n\t\t\t\t'wp_navigation',\n\t\t\t\trecord,\n\t\t\t\tundefined,\n\t\t\t\tinvalidateNavigationQueries\n\t\t\t);\n\n\t\t\t// Resolve to avoid further network requests.\n\t\t\tdispatch.finishResolution( 'getEntityRecord', [\n\t\t\t\t'postType',\n\t\t\t\t'wp_navigation',\n\t\t\t\tfallback.id,\n\t\t\t] );\n\t\t} );\n\t};\n\nexport const getDefaultTemplateId =\n\t( query ) =>\n\tasync ( { dispatch, registry, resolveSelect } ) => {\n\t\tconst template = await apiFetch( {\n\t\t\tpath: addQueryArgs( '/wp/v2/templates/lookup', query ),\n\t\t} );\n\t\t// Wait for the the entities config to be loaded, otherwise receiving\n\t\t// the template as an entity will not work.\n\t\tawait resolveSelect.getEntitiesConfig( 'postType' );\n\t\t// When active_templates experiment is enabled, use numeric wp_id if it\n\t\t// exists, otherwise fall back to string ID format (theme//slug) as the\n\t\t// frontend expects string IDs for templates.\n\t\tconst id = window?.__experimentalTemplateActivate\n\t\t\t? template?.wp_id || template?.id\n\t\t\t: template?.id;\n\n\t\tregistry.batch( () => {\n\t\t\tdispatch.receiveDefaultTemplateId( query, id || '' );\n\t\t\t// Endpoint may return an empty object if no template is found.\n\t\t\tif ( id ) {\n\t\t\t\ttemplate.id = id;\n\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\t'postType',\n\t\t\t\t\ttemplate.type,\n\t\t\t\t\ttemplate\n\t\t\t\t);\n\t\t\t\t// Avoid further network requests.\n\t\t\t\tdispatch.finishResolution( 'getEntityRecord', [\n\t\t\t\t\t'postType',\n\t\t\t\t\ttemplate.type,\n\t\t\t\t\tid,\n\t\t\t\t] );\n\t\t\t}\n\t\t} );\n\t};\n\ngetDefaultTemplateId.shouldInvalidate = ( action ) => {\n\t// Only invalidate on real saves; `persistedEdits` is absent on\n\t// initial fetches so the kickoff's own site read doesn't wipe\n\t// the just-resolved template id.\n\treturn (\n\t\taction.type === 'RECEIVE_ITEMS' &&\n\t\taction.kind === 'root' &&\n\t\taction.name === 'site' &&\n\t\t!! action.persistedEdits\n\t);\n};\n\n/**\n * Requests an entity's revisions from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordKey The key of the entity record whose revisions you want to fetch.\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request. If requesting specific\n * fields, fields must always include the ID.\n */\nexport const getRevisions =\n\t( kind, name, recordKey, query = {} ) =>\n\tasync ( { dispatch, registry, resolveSelect } ) => {\n\t\tconst configs = await resolveSelect.getEntitiesConfig( kind );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\n\t\tif ( ! entityConfig ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst rawQuery = { ...query };\n\t\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\t\tSTORE_NAME,\n\t\t\t[ 'entities', 'records', kind, name, recordKey, 'revisions' ],\n\t\t\t{ exclusive: false }\n\t\t);\n\n\t\ttry {\n\t\t\tif ( query._fields ) {\n\t\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t\t// the ID.\n\t\t\t\tquery = {\n\t\t\t\t\t...query,\n\t\t\t\t\t_fields: [\n\t\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\t\tentityConfig.revisionKey || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t\t] ),\n\t\t\t\t\t].join(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst path = addQueryArgs(\n\t\t\t\tentityConfig.getRevisionsUrl( recordKey ),\n\t\t\t\tquery\n\t\t\t);\n\n\t\t\tlet records, response;\n\t\t\tconst meta = {};\n\t\t\tconst isPaginated =\n\t\t\t\tentityConfig.supportsPagination && query.per_page !== -1;\n\t\t\ttry {\n\t\t\t\tresponse = await apiFetch( { path, parse: ! isPaginated } );\n\t\t\t} catch {\n\t\t\t\t// Do nothing if our request comes back with an API error.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( response ) {\n\t\t\t\tif ( isPaginated ) {\n\t\t\t\t\trecords = Object.values( await response.json() );\n\t\t\t\t\tmeta.totalItems = parseInt(\n\t\t\t\t\t\tresponse.headers.get( 'X-WP-Total' )\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\trecords = Object.values( response );\n\t\t\t\t}\n\n\t\t\t\t// If we request fields but the result doesn't contain the fields,\n\t\t\t\t// explicitly set these fields as \"undefined\"\n\t\t\t\t// that way we consider the query \"fulfilled\".\n\t\t\t\tif ( query._fields ) {\n\t\t\t\t\trecords = records.map( ( record ) => {\n\t\t\t\t\t\tquery._fields.split( ',' ).forEach( ( field ) => {\n\t\t\t\t\t\t\tif ( ! record.hasOwnProperty( field ) ) {\n\t\t\t\t\t\t\t\trecord[ field ] = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\treturn record;\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\tdispatch.receiveRevisions(\n\t\t\t\t\t\tkind,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\trecordKey,\n\t\t\t\t\t\trecords,\n\t\t\t\t\t\tquery,\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tmeta\n\t\t\t\t\t);\n\n\t\t\t\t\t// Mark individual getRevision resolutions as done so that\n\t\t\t\t\t// subsequent getRevision calls skip redundant API fetches.\n\t\t\t\t\tconst key = entityConfig.revisionKey || DEFAULT_ENTITY_KEY;\n\t\t\t\t\tconst normalizedQuery =\n\t\t\t\t\t\tnormalizeQueryForResolution( rawQuery );\n\t\t\t\t\tconst resolutionsArgs = records\n\t\t\t\t\t\t.filter( ( record ) => record[ key ] )\n\t\t\t\t\t\t.map( ( record ) => [\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\trecordKey,\n\t\t\t\t\t\t\trecord[ key ],\n\t\t\t\t\t\t\tnormalizedQuery,\n\t\t\t\t\t\t] );\n\n\t\t\t\t\tdispatch.finishResolutions(\n\t\t\t\t\t\t'getRevision',\n\t\t\t\t\t\tresolutionsArgs\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t}\n\t\t} finally {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\n\n// Invalidate cache when a new revision is created.\ngetRevisions.shouldInvalidate = ( action, kind, name, recordKey ) =>\n\taction.type === 'SAVE_ENTITY_RECORD_FINISH' &&\n\tname === action.name &&\n\tkind === action.kind &&\n\t! action.error &&\n\trecordKey === action.recordId;\n\n/**\n * Requests a specific Entity revision from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordKey The key of the entity record whose revisions you want to fetch.\n * @param {number|string} revisionKey The revision's key.\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request. If requesting specific\n * fields, fields must always include the ID.\n */\nexport const getRevision =\n\t( kind, name, recordKey, revisionKey, query ) =>\n\tasync ( { select, dispatch, resolveSelect } ) => {\n\t\tconst configs = await resolveSelect.getEntitiesConfig( kind );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\n\t\tif ( ! entityConfig ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( query !== undefined && query._fields ) {\n\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t// the ID.\n\t\t\tquery = {\n\t\t\t\t...query,\n\t\t\t\t_fields: [\n\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\tentityConfig.revisionKey || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t] ),\n\t\t\t\t].join(),\n\t\t\t};\n\t\t}\n\n\t\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\t\tSTORE_NAME,\n\t\t\t[\n\t\t\t\t'entities',\n\t\t\t\t'records',\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\trecordKey,\n\t\t\t\t'revisions',\n\t\t\t\trevisionKey,\n\t\t\t],\n\t\t\t{ exclusive: false }\n\t\t);\n\n\t\ttry {\n\t\t\tif (\n\t\t\t\tselect.hasRevision( kind, name, recordKey, revisionKey, query )\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst path = addQueryArgs(\n\t\t\t\tentityConfig.getRevisionsUrl( recordKey, revisionKey ),\n\t\t\t\tquery\n\t\t\t);\n\n\t\t\tlet record;\n\t\t\ttry {\n\t\t\t\trecord = await apiFetch( { path } );\n\t\t\t} catch {\n\t\t\t\t// Do nothing if our request comes back with an API error.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( record ) {\n\t\t\t\tdispatch.receiveRevisions(\n\t\t\t\t\tkind,\n\t\t\t\t\tname,\n\t\t\t\t\trecordKey,\n\t\t\t\t\trecord,\n\t\t\t\t\tquery\n\t\t\t\t);\n\t\t\t}\n\t\t} finally {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\n\n/**\n * Requests a specific post type options from the REST API.\n *\n * @param {string} postType Post type slug.\n */\nexport const getRegisteredPostMeta =\n\t( postType ) =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tlet options;\n\t\ttry {\n\t\t\tconst {\n\t\t\t\trest_namespace: restNamespace = 'wp/v2',\n\t\t\t\trest_base: restBase,\n\t\t\t} = ( await resolveSelect.getPostType( postType ) ) || {};\n\t\t\toptions = await apiFetch( {\n\t\t\t\tpath: `${ restNamespace }/${ restBase }/?context=edit`,\n\t\t\t\tmethod: 'OPTIONS',\n\t\t\t} );\n\t\t} catch {\n\t\t\t// Do nothing if the request comes back with an API error.\n\t\t\treturn;\n\t\t}\n\n\t\tif ( options ) {\n\t\t\tdispatch.receiveRegisteredPostMeta(\n\t\t\t\tpostType,\n\t\t\t\toptions?.schema?.properties?.meta?.properties\n\t\t\t);\n\t\t}\n\t};\n\n/**\n * Requests entity configs for the given kind from the REST API.\n *\n * @param {string} kind Entity kind.\n */\nexport const getEntitiesConfig =\n\t( kind ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst loader = additionalEntityConfigLoaders.find(\n\t\t\t( l ) => l.kind === kind\n\t\t);\n\n\t\tif ( ! loader ) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst configs = await loader.loadEntities();\n\t\t\tif ( ! configs.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdispatch.addEntities( configs );\n\t\t} catch {\n\t\t\t// Do nothing if the request comes back with an API error.\n\t\t}\n\t};\n\n/**\n * Requests editor settings from the REST API.\n */\nexport const getEditorSettings =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst settings = await apiFetch( {\n\t\t\tpath: '/wp-block-editor/v1/settings',\n\t\t} );\n\t\tdispatch.receiveEditorSettings( settings );\n\t};\n\n/**\n * Requests editor assets from the REST API.\n */\nexport const getEditorAssets =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst assets = await apiFetch( {\n\t\t\tpath: '/wp-block-editor/v1/assets',\n\t\t} );\n\t\tdispatch.receiveEditorAssets( assets );\n\t};\n\n/**\n * Requests view config for a given entity type from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {?Object} options Optional options.\n * @param {?string[]} options.fields Optional subset of top-level config\n * properties to request, mapped to the REST\n * API `_fields` parameter. When omitted, the\n * full config is requested.\n */\nexport const getViewConfig =\n\t( kind, name, options = {} ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst query = { kind, name };\n\t\tconst fields = getNormalizedCommaSeparable( options.fields );\n\t\tif ( fields?.length ) {\n\t\t\tquery._fields = fields.join( ',' );\n\t\t}\n\t\tconst config = await apiFetch( {\n\t\t\tpath: addQueryArgs( '/wp/v2/view-config', query ),\n\t\t} );\n\t\tdispatch.receiveViewConfig( kind, name, config );\n\t};\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/**\n * External dependencies\n */\nimport { camelCase } from 'change-case';\n\n/**\n * WordPress dependencies\n */\nimport { addQueryArgs } from '@wordpress/url';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport apiFetch from '@wordpress/api-fetch';\n\n/**\n * Internal dependencies\n */\nimport { STORE_NAME } from './name';\nimport { additionalEntityConfigLoaders, DEFAULT_ENTITY_KEY } from './entities';\nimport { getSyncManager } from './sync';\nimport {\n\tforwardResolver,\n\tgetNormalizedCommaSeparable,\n\tgetUserPermissionCacheKey,\n\tgetUserPermissionsFromAllowHeader,\n\tALLOWED_RESOURCE_ACTIONS,\n\tRECEIVE_INTERMEDIATE_RESULTS,\n\tisNumericID,\n\tnormalizeQueryForResolution,\n\tsaveCRDTDoc,\n} from './utils';\nimport { fetchBlockPatterns } from './fetch';\nimport { restoreSelection, getSelectionHistory } from './utils/crdt-selection';\nimport { parsedBlocksCache, getCacheKey } from './parsed-blocks-cache';\n\n/**\n * Requests authors from the REST API.\n *\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request.\n */\nexport const getAuthors =\n\t( query ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst path = addQueryArgs(\n\t\t\t'/wp/v2/users/?who=authors&per_page=100',\n\t\t\tquery\n\t\t);\n\t\tconst users = await apiFetch( { path } );\n\t\tdispatch.receiveUserQuery( path, users );\n\t};\n\n/**\n * Requests the current user from the REST API.\n */\nexport const getCurrentUser =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst currentUser = await apiFetch( { path: '/wp/v2/users/me' } );\n\t\tdispatch.receiveCurrentUser( currentUser );\n\t};\n\n/**\n * Requests an entity's record from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} key Record's key\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request. If requesting specific\n * fields, fields must always include the ID.\n */\nexport const getEntityRecord =\n\t( kind, name, key = '', query ) =>\n\tasync ( { select, dispatch, registry, resolveSelect } ) => {\n\t\tconst configs = await resolveSelect.getEntitiesConfig( kind );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\t\tif ( ! entityConfig ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\t\tSTORE_NAME,\n\t\t\t[ 'entities', 'records', kind, name, key ],\n\t\t\t{ exclusive: false }\n\t\t);\n\n\t\ttry {\n\t\t\tif ( query !== undefined && query._fields ) {\n\t\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t\t// the ID.\n\t\t\t\tquery = {\n\t\t\t\t\t...query,\n\t\t\t\t\t_fields: [\n\t\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\t\tentityConfig.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t\t] ),\n\t\t\t\t\t].join(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif ( query !== undefined && query._fields ) {\n\t\t\t\t// The resolution cache won't consider query as reusable based on the\n\t\t\t\t// fields, so it's tested here, prior to initiating the REST request,\n\t\t\t\t// and without causing `getEntityRecord` resolution to occur.\n\t\t\t\tconst hasRecord = select.hasEntityRecord(\n\t\t\t\t\tkind,\n\t\t\t\t\tname,\n\t\t\t\t\tkey,\n\t\t\t\t\tquery\n\t\t\t\t);\n\t\t\t\tif ( hasRecord ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet { baseURL } = entityConfig;\n\n\t\t\t// For \"string\" IDs, use the old templates endpoint.\n\t\t\tif (\n\t\t\t\tkind === 'postType' &&\n\t\t\t\tname === 'wp_template' &&\n\t\t\t\t( ( key && typeof key === 'string' && ! /^\\d+$/.test( key ) ) ||\n\t\t\t\t\t! window?.__experimentalTemplateActivate )\n\t\t\t) {\n\t\t\t\tbaseURL =\n\t\t\t\t\tbaseURL.slice( 0, baseURL.lastIndexOf( '/' ) ) +\n\t\t\t\t\t'/templates';\n\t\t\t}\n\n\t\t\tconst path = addQueryArgs( baseURL + ( key ? '/' + key : '' ), {\n\t\t\t\t...entityConfig.baseURLParams,\n\t\t\t\t...query,\n\t\t\t} );\n\t\t\tconst response = await apiFetch( { path, parse: false } );\n\t\t\tconst record = await response.json();\n\t\t\tconst permissions = getUserPermissionsFromAllowHeader(\n\t\t\t\tresponse.headers?.get( 'allow' )\n\t\t\t);\n\n\t\t\tconst canUserResolutionsArgs = [];\n\t\t\tconst receiveUserPermissionArgs = {};\n\t\t\tfor ( const action of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\t\treceiveUserPermissionArgs[\n\t\t\t\t\tgetUserPermissionCacheKey( action, {\n\t\t\t\t\t\tkind,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tid: key,\n\t\t\t\t\t} )\n\t\t\t\t] = permissions[ action ];\n\n\t\t\t\tcanUserResolutionsArgs.push( [\n\t\t\t\t\taction,\n\t\t\t\t\t{ kind, name, id: key },\n\t\t\t\t] );\n\t\t\t}\n\n\t\t\t// Entity supports syncing.\n\t\t\tif ( entityConfig.syncConfig && isNumericID( key ) && ! query ) {\n\t\t\t\tconst objectType = `${ kind }/${ name }`;\n\t\t\t\tconst objectId = key;\n\n\t\t\t\t// Use the new transient \"read/write\" config to compute transients for\n\t\t\t\t// the sync manager. Otherwise these transients are not available\n\t\t\t\t// if / until the record is edited. Use a copy of the record so that\n\t\t\t\t// it does not change the behavior outside this experimental flag.\n\t\t\t\tconst recordWithTransients = { ...record };\n\t\t\t\tObject.entries( entityConfig.transientEdits ?? {} )\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t( [ propName, transientConfig ] ) =>\n\t\t\t\t\t\t\tundefined === recordWithTransients[ propName ] &&\n\t\t\t\t\t\t\ttransientConfig &&\n\t\t\t\t\t\t\t'object' === typeof transientConfig &&\n\t\t\t\t\t\t\t'read' in transientConfig &&\n\t\t\t\t\t\t\t'function' === typeof transientConfig.read\n\t\t\t\t\t)\n\t\t\t\t\t.forEach( ( [ propName, transientConfig ] ) => {\n\t\t\t\t\t\trecordWithTransients[ propName ] =\n\t\t\t\t\t\t\ttransientConfig.read( recordWithTransients );\n\t\t\t\t\t} );\n\n\t\t\t\t// Share the parsed blocks with `useEntityBlockEditor` so the\n\t\t\t\t// editor doesn't re-parse the same `content` string.\n\t\t\t\tif (\n\t\t\t\t\trecordWithTransients.blocks &&\n\t\t\t\t\ttypeof recordWithTransients.content?.raw === 'string'\n\t\t\t\t) {\n\t\t\t\t\tparsedBlocksCache.set( getCacheKey( kind, name, key ), {\n\t\t\t\t\t\tcontent: recordWithTransients.content.raw,\n\t\t\t\t\t\tblocks: recordWithTransients.blocks,\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tconst syncManager =\n\t\t\t\t\tselect?.isCollaborationSupported?.() === false\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: getSyncManager();\n\n\t\t\t\t// Load the entity record for syncing. Do not await promise.\n\t\t\t\tvoid syncManager?.load(\n\t\t\t\t\tentityConfig.syncConfig,\n\t\t\t\t\tobjectType,\n\t\t\t\t\tobjectId,\n\t\t\t\t\trecordWithTransients,\n\t\t\t\t\t{\n\t\t\t\t\t\t// Handle edits sourced from the sync manager.\n\t\t\t\t\t\teditRecord: ( edits, options = {} ) => {\n\t\t\t\t\t\t\tif ( ! Object.keys( edits ).length ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdispatch( {\n\t\t\t\t\t\t\t\ttype: 'EDIT_ENTITY_RECORD',\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\trecordId: key,\n\t\t\t\t\t\t\t\tedits,\n\t\t\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\t\t\tundo: undefined,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t},\n\t\t\t\t\t\t// Get the current entity record (with edits)\n\t\t\t\t\t\tgetEditedRecord: async () =>\n\t\t\t\t\t\t\tawait resolveSelect.getEditedEntityRecord(\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tkey\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t// Handle sync connection status changes.\n\t\t\t\t\t\tonStatusChange: ( status ) => {\n\t\t\t\t\t\t\tdispatch.setSyncConnectionStatus(\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tstatus\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t// Refetch the current entity record from the database.\n\t\t\t\t\t\trefetchRecord: async () => {\n\t\t\t\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tawait apiFetch( { path, parse: true } ),\n\t\t\t\t\t\t\t\tquery\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t// Persist the CRDT document.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// TODO: Currently, persisted CRDT documents are stored in post meta.\n\t\t\t\t\t\t// This effectively means that only post entities support CRDT\n\t\t\t\t\t\t// persistence. As we add support for syncing additional entity,\n\t\t\t\t\t\t// we'll need to revisit where persisted CRDT documents are stored.\n\t\t\t\t\t\tpersistCRDTDoc: () => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t! entityConfig.syncConfig?.supportsPersistence\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn resolveSelect\n\t\t\t\t\t\t\t\t.getEditedEntityRecord( kind, name, key )\n\t\t\t\t\t\t\t\t.then( async ( editedRecord ) => {\n\t\t\t\t\t\t\t\t\t// Don't persist the CRDT document if the record is still an\n\t\t\t\t\t\t\t\t\t// auto-draft or if the entity does not support meta.\n\t\t\t\t\t\t\t\t\tconst { meta, status } = editedRecord;\n\t\t\t\t\t\t\t\t\tif ( 'auto-draft' === status || ! meta ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tconst entityIdKey =\n\t\t\t\t\t\t\t\t\t\tentityConfig.key || DEFAULT_ENTITY_KEY;\n\t\t\t\t\t\t\t\t\tconst entityId =\n\t\t\t\t\t\t\t\t\t\teditedRecord[ entityIdKey ];\n\n\t\t\t\t\t\t\t\t\tawait saveCRDTDoc(\n\t\t\t\t\t\t\t\t\t\t`${ kind }/${ name }`,\n\t\t\t\t\t\t\t\t\t\tentityId\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t},\n\t\t\t\t\t\taddUndoMeta: ( ydoc, meta ) => {\n\t\t\t\t\t\t\tconst selectionHistory =\n\t\t\t\t\t\t\t\tgetSelectionHistory( ydoc );\n\n\t\t\t\t\t\t\tif ( selectionHistory ) {\n\t\t\t\t\t\t\t\tmeta.set(\n\t\t\t\t\t\t\t\t\t'selectionHistory',\n\t\t\t\t\t\t\t\t\tselectionHistory\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonUndoStackChange: ( undoState ) => {\n\t\t\t\t\t\t\tdispatch.__unstableNotifySyncUndoManagerChange(\n\t\t\t\t\t\t\t\tundoState\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t\trestoreUndoMeta: ( ydoc, meta ) => {\n\t\t\t\t\t\t\tconst selectionHistory =\n\t\t\t\t\t\t\t\tmeta.get( 'selectionHistory' );\n\n\t\t\t\t\t\t\tif ( selectionHistory ) {\n\t\t\t\t\t\t\t\t// Because Yjs initiates an undo, we need to\n\t\t\t\t\t\t\t\t// wait until the content is restored before\n\t\t\t\t\t\t\t\t// we can update the selection.\n\t\t\t\t\t\t\t\t// Use setTimeout() to wait until content is\n\t\t\t\t\t\t\t\t// finished updating, and then set the correct\n\t\t\t\t\t\t\t\t// selection.\n\t\t\t\t\t\t\t\tsetTimeout( () => {\n\t\t\t\t\t\t\t\t\trestoreSelection( selectionHistory, ydoc );\n\t\t\t\t\t\t\t\t}, 0 );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tregistry.batch( () => {\n\t\t\t\tdispatch.receiveEntityRecords( kind, name, record, query );\n\t\t\t\tdispatch.receiveUserPermissions( receiveUserPermissionArgs );\n\t\t\t\tdispatch.finishResolutions( 'canUser', canUserResolutionsArgs );\n\t\t\t} );\n\t\t} finally {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\n\n// Whenever a template is saved, the active templates might be updated, so\n// invalidate the site settings when a template is updated or deleted.\ngetEntityRecord.shouldInvalidate = ( action, kind, name ) => {\n\treturn (\n\t\tkind === 'root' &&\n\t\tname === 'site' &&\n\t\t( ( action.type === 'RECEIVE_ITEMS' &&\n\t\t\t// Making sure persistedEdits is set seems to be the only way of\n\t\t\t// knowing whether it's an update or fetch. Only an update would\n\t\t\t// have persistedEdits.\n\t\t\taction.persistedEdits &&\n\t\t\taction.persistedEdits.status !== 'auto-draft' ) ||\n\t\t\taction.type === 'REMOVE_ITEMS' ) &&\n\t\taction.kind === 'postType' &&\n\t\taction.name === 'wp_template'\n\t);\n};\n\n/**\n * Requests an entity's record from the REST API.\n */\nexport const getRawEntityRecord = forwardResolver( 'getEntityRecord' );\n\n/**\n * Requests an entity's record from the REST API.\n */\nexport const getEditedEntityRecord = forwardResolver( 'getEntityRecord' );\n\n/**\n * Requests the entity's records from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {?Object} query Query Object. If requesting specific fields, fields\n * must always include the ID.\n */\nexport const getEntityRecords =\n\t( kind, name, query = {} ) =>\n\tasync ( { dispatch, registry, resolveSelect } ) => {\n\t\tconst configs = await resolveSelect.getEntitiesConfig( kind );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\t\tif ( ! entityConfig ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\t\tSTORE_NAME,\n\t\t\t[ 'entities', 'records', kind, name ],\n\t\t\t{ exclusive: false }\n\t\t);\n\n\t\t// Keep a copy of the original query for later use in getResolutionsArgs.\n\t\t// The query object may be modified below (for example, when _fields is\n\t\t// specified), but we want to use the original query when marking\n\t\t// resolutions as finished.\n\t\tconst rawQuery = { ...query };\n\t\tconst key = entityConfig.key || DEFAULT_ENTITY_KEY;\n\n\t\tfunction getResolutionsArgs( records, recordsQuery ) {\n\t\t\tconst normalizedQuery = normalizeQueryForResolution( recordsQuery );\n\t\t\treturn records\n\t\t\t\t.filter( ( record ) => record?.[ key ] )\n\t\t\t\t.map( ( record ) => [\n\t\t\t\t\tkind,\n\t\t\t\t\tname,\n\t\t\t\t\trecord[ key ],\n\t\t\t\t\tnormalizedQuery,\n\t\t\t\t] );\n\t\t}\n\n\t\ttry {\n\t\t\tif ( query._fields ) {\n\t\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t\t// the ID.\n\t\t\t\tquery = {\n\t\t\t\t\t...query,\n\t\t\t\t\t_fields: [\n\t\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t] ),\n\t\t\t\t\t].join(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet { baseURL } = entityConfig;\n\t\t\t// `combinedTemplates` means that we fetch templates from the \"old\"\n\t\t\t// /templates endpoint, which combines active user templates with\n\t\t\t// the registered templates and rewrites IDs in the form of\n\t\t\t// `theme-slug/template-slug`. When turned off, we only fetch\n\t\t\t// database templates (posts). To fetch registered templates without\n\t\t\t// edits applied, use the `registeredTemplate` entity.\n\t\t\tconst { combinedTemplates = true } = query;\n\n\t\t\tif (\n\t\t\t\tkind === 'postType' &&\n\t\t\t\tname === 'wp_template' &&\n\t\t\t\tcombinedTemplates\n\t\t\t) {\n\t\t\t\tbaseURL =\n\t\t\t\t\tbaseURL.slice( 0, baseURL.lastIndexOf( '/' ) ) +\n\t\t\t\t\t'/templates';\n\t\t\t}\n\n\t\t\tconst path = addQueryArgs( baseURL, {\n\t\t\t\t...entityConfig.baseURLParams,\n\t\t\t\t...query,\n\t\t\t} );\n\n\t\t\tlet records = [],\n\t\t\t\tmeta;\n\t\t\tif ( entityConfig.supportsPagination && query.per_page !== -1 ) {\n\t\t\t\tconst response = await apiFetch( { path, parse: false } );\n\t\t\t\trecords = Object.values( await response.json() );\n\t\t\t\tmeta = {\n\t\t\t\t\ttotalItems: parseInt(\n\t\t\t\t\t\tresponse.headers.get( 'X-WP-Total' )\n\t\t\t\t\t),\n\t\t\t\t\ttotalPages: parseInt(\n\t\t\t\t\t\tresponse.headers.get( 'X-WP-TotalPages' )\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t} else if (\n\t\t\t\tquery.per_page === -1 &&\n\t\t\t\tquery[ RECEIVE_INTERMEDIATE_RESULTS ] === true\n\t\t\t) {\n\t\t\t\tlet page = 1;\n\t\t\t\tlet totalPages;\n\n\t\t\t\tdo {\n\t\t\t\t\tconst response = await apiFetch( {\n\t\t\t\t\t\tpath: addQueryArgs( path, { page, per_page: 100 } ),\n\t\t\t\t\t\tparse: false,\n\t\t\t\t\t} );\n\t\t\t\t\tconst pageRecords = Object.values( await response.json() );\n\n\t\t\t\t\ttotalPages = parseInt(\n\t\t\t\t\t\tresponse.headers.get( 'X-WP-TotalPages' )\n\t\t\t\t\t);\n\n\t\t\t\t\tif ( ! meta ) {\n\t\t\t\t\t\tmeta = {\n\t\t\t\t\t\t\ttotalItems: parseInt(\n\t\t\t\t\t\t\t\tresponse.headers.get( 'X-WP-Total' )\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\ttotalPages: 1,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\trecords.push( ...pageRecords );\n\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\trecords,\n\t\t\t\t\t\t\tquery,\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\tmeta\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdispatch.finishResolutions(\n\t\t\t\t\t\t\t'getEntityRecord',\n\t\t\t\t\t\t\tgetResolutionsArgs( pageRecords, rawQuery )\n\t\t\t\t\t\t);\n\t\t\t\t\t} );\n\t\t\t\t\tpage++;\n\t\t\t\t} while ( page <= totalPages );\n\t\t\t} else {\n\t\t\t\trecords = Object.values( await apiFetch( { path } ) );\n\t\t\t\tmeta = {\n\t\t\t\t\ttotalItems: records.length,\n\t\t\t\t\ttotalPages: 1,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif ( entityConfig.syncConfig && -1 === query.per_page ) {\n\t\t\t\tconst objectType = `${ kind }/${ name }`;\n\t\t\t\tgetSyncManager()?.loadCollection(\n\t\t\t\t\tentityConfig.syncConfig,\n\t\t\t\t\tobjectType,\n\t\t\t\t\t{\n\t\t\t\t\t\tonStatusChange: ( status ) => {\n\t\t\t\t\t\t\tdispatch.setSyncConnectionStatus(\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\tstatus\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t\trefetchRecords: async () => {\n\t\t\t\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tawait apiFetch( { path, parse: true } ),\n\t\t\t\t\t\t\t\tquery\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// If we request fields but the result doesn't contain the fields,\n\t\t\t// explicitly set these fields as \"undefined\"\n\t\t\t// that way we consider the query \"fulfilled\".\n\t\t\tif ( query._fields ) {\n\t\t\t\trecords = records.map( ( record ) => {\n\t\t\t\t\tquery._fields.split( ',' ).forEach( ( field ) => {\n\t\t\t\t\t\tif ( ! record.hasOwnProperty( field ) ) {\n\t\t\t\t\t\t\trecord[ field ] = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn record;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tregistry.batch( () => {\n\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\tkind,\n\t\t\t\t\tname,\n\t\t\t\t\trecords,\n\t\t\t\t\tquery,\n\t\t\t\t\tfalse,\n\t\t\t\t\tundefined,\n\t\t\t\t\tmeta\n\t\t\t\t);\n\n\t\t\t\tconst targetHints = records\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t( record ) =>\n\t\t\t\t\t\t\t!! record?.[ key ] &&\n\t\t\t\t\t\t\t!! record?._links?.self?.[ 0 ]?.targetHints?.allow\n\t\t\t\t\t)\n\t\t\t\t\t.map( ( record ) => ( {\n\t\t\t\t\t\tid: record[ key ],\n\t\t\t\t\t\tpermissions: getUserPermissionsFromAllowHeader(\n\t\t\t\t\t\t\trecord._links.self[ 0 ].targetHints.allow\n\t\t\t\t\t\t),\n\t\t\t\t\t} ) );\n\n\t\t\t\tconst canUserResolutionsArgs = [];\n\t\t\t\tconst receiveUserPermissionArgs = {};\n\t\t\t\tfor ( const targetHint of targetHints ) {\n\t\t\t\t\tfor ( const action of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\t\t\t\tcanUserResolutionsArgs.push( [\n\t\t\t\t\t\t\taction,\n\t\t\t\t\t\t\t{ kind, name, id: targetHint.id },\n\t\t\t\t\t\t] );\n\n\t\t\t\t\t\treceiveUserPermissionArgs[\n\t\t\t\t\t\t\tgetUserPermissionCacheKey( action, {\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tid: targetHint.id,\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t] = targetHint.permissions[ action ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( targetHints.length > 0 ) {\n\t\t\t\t\tdispatch.receiveUserPermissions(\n\t\t\t\t\t\treceiveUserPermissionArgs\n\t\t\t\t\t);\n\t\t\t\t\tdispatch.finishResolutions(\n\t\t\t\t\t\t'canUser',\n\t\t\t\t\t\tcanUserResolutionsArgs\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tdispatch.finishResolutions(\n\t\t\t\t\t'getEntityRecord',\n\t\t\t\t\tgetResolutionsArgs( records, rawQuery )\n\t\t\t\t);\n\n\t\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t\t} );\n\t\t} catch {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\n\ngetEntityRecords.shouldInvalidate = ( action, kind, name ) => {\n\treturn (\n\t\t( action.type === 'RECEIVE_ITEMS' || action.type === 'REMOVE_ITEMS' ) &&\n\t\taction.invalidateCache &&\n\t\tkind === action.kind &&\n\t\tname === action.name\n\t);\n};\n\n/**\n * Requests the total number of entity records.\n */\nexport const getEntityRecordsTotalItems = forwardResolver( 'getEntityRecords' );\n\n/**\n * Requests the number of available pages for the given query.\n */\nexport const getEntityRecordsTotalPages = forwardResolver( 'getEntityRecords' );\n\n/**\n * Requests the current theme.\n */\nexport const getCurrentTheme =\n\t() =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst activeThemes = await resolveSelect.getEntityRecords(\n\t\t\t'root',\n\t\t\t'theme',\n\t\t\t{ status: 'active' }\n\t\t);\n\n\t\tdispatch.receiveCurrentTheme( activeThemes[ 0 ] );\n\t};\n\n/**\n * Requests theme supports data from the index.\n */\nexport const getThemeSupports = forwardResolver( 'getCurrentTheme' );\n\n/**\n * Requests a preview from the Embed API.\n *\n * @param {string} url URL to get the preview for.\n */\nexport const getEmbedPreview =\n\t( url ) =>\n\tasync ( { dispatch } ) => {\n\t\ttry {\n\t\t\tconst embedProxyResponse = await apiFetch( {\n\t\t\t\tpath: addQueryArgs( '/oembed/1.0/proxy', { url } ),\n\t\t\t} );\n\t\t\tdispatch.receiveEmbedPreview( url, embedProxyResponse );\n\t\t} catch {\n\t\t\t// Embed API 404s if the URL cannot be embedded, so we have to catch the error from the apiRequest here.\n\t\t\tdispatch.receiveEmbedPreview( url, false );\n\t\t}\n\t};\n\n/**\n * Checks whether the current user can perform the given action on the given\n * REST resource.\n *\n * @param {string} requestedAction Action to check. One of: 'create', 'read', 'update',\n * 'delete'.\n * @param {string|Object} resource Entity resource to check. Accepts entity object `{ kind: 'postType', name: 'attachment', id: 1 }`\n * or REST base as a string - `media`.\n * @param {?string} id ID of the rest resource to check.\n */\nexport const canUser =\n\t( requestedAction, resource, id ) =>\n\tasync ( { dispatch, registry, resolveSelect } ) => {\n\t\tif ( ! ALLOWED_RESOURCE_ACTIONS.includes( requestedAction ) ) {\n\t\t\tthrow new Error( `'${ requestedAction }' is not a valid action.` );\n\t\t}\n\n\t\tconst { hasStartedResolution } = registry.select( STORE_NAME );\n\n\t\t// Prevent resolving the same resource twice.\n\t\tfor ( const relatedAction of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\tif ( relatedAction === requestedAction ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst isAlreadyResolving = hasStartedResolution( 'canUser', [\n\t\t\t\trelatedAction,\n\t\t\t\tresource,\n\t\t\t\tid,\n\t\t\t] );\n\t\t\tif ( isAlreadyResolving ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tlet resourcePath = null;\n\t\tif ( typeof resource === 'object' ) {\n\t\t\tif ( ! resource.kind || ! resource.name ) {\n\t\t\t\tthrow new Error( 'The entity resource object is not valid.' );\n\t\t\t}\n\n\t\t\tconst configs = await resolveSelect.getEntitiesConfig(\n\t\t\t\tresource.kind\n\t\t\t);\n\t\t\tconst entityConfig = configs.find(\n\t\t\t\t( config ) =>\n\t\t\t\t\tconfig.name === resource.name &&\n\t\t\t\t\tconfig.kind === resource.kind\n\t\t\t);\n\t\t\tif ( ! entityConfig ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresourcePath =\n\t\t\t\tentityConfig.baseURL + ( resource.id ? '/' + resource.id : '' );\n\t\t} else {\n\t\t\tresourcePath = `/wp/v2/${ resource }` + ( id ? '/' + id : '' );\n\t\t}\n\n\t\tlet response;\n\t\ttry {\n\t\t\tresponse = await apiFetch( {\n\t\t\t\tpath: resourcePath,\n\t\t\t\tmethod: 'OPTIONS',\n\t\t\t\tparse: false,\n\t\t\t} );\n\t\t} catch {\n\t\t\t// Do nothing if our OPTIONS request comes back with an API error (4xx or\n\t\t\t// 5xx). The previously determined isAllowed value will remain in the store.\n\t\t\treturn;\n\t\t}\n\n\t\t// Optional chaining operator is used here because the API requests don't\n\t\t// return the expected result in the React native version. Instead, API requests\n\t\t// only return the result, without including response properties like the headers.\n\t\tconst permissions = getUserPermissionsFromAllowHeader(\n\t\t\tresponse.headers?.get( 'allow' )\n\t\t);\n\t\tconst receiveUserPermissionArgs = {};\n\t\tconst canUserResolutionsArgs = [];\n\t\tfor ( const action of ALLOWED_RESOURCE_ACTIONS ) {\n\t\t\treceiveUserPermissionArgs[\n\t\t\t\tgetUserPermissionCacheKey( action, resource, id )\n\t\t\t] = permissions[ action ];\n\n\t\t\t// Mark related action resolutions as finished.\n\t\t\tif ( action !== requestedAction ) {\n\t\t\t\tcanUserResolutionsArgs.push( [ action, resource, id ] );\n\t\t\t}\n\t\t}\n\t\tregistry.batch( () => {\n\t\t\tdispatch.receiveUserPermissions( receiveUserPermissionArgs );\n\t\t\tdispatch.finishResolutions( 'canUser', canUserResolutionsArgs );\n\t\t} );\n\t};\n\n/**\n * Checks whether the current user can perform the given action on the given\n * REST resource.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordId Record's id.\n */\nexport const canUserEditEntityRecord =\n\t( kind, name, recordId ) =>\n\tasync ( { dispatch } ) => {\n\t\tawait dispatch( canUser( 'update', { kind, name, id: recordId } ) );\n\t};\n\n/**\n * Request autosave data from the REST API.\n *\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n */\nexport const getAutosaves =\n\t( postType, postId ) =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst {\n\t\t\trest_base: restBase,\n\t\t\trest_namespace: restNamespace = 'wp/v2',\n\t\t\tsupports,\n\t\t} = await resolveSelect.getPostType( postType );\n\t\tif ( ! supports?.autosave ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst autosaves = await apiFetch( {\n\t\t\tpath: `/${ restNamespace }/${ restBase }/${ postId }/autosaves?context=edit`,\n\t\t} );\n\n\t\tif ( autosaves && autosaves.length ) {\n\t\t\tdispatch.receiveAutosaves( postId, autosaves );\n\t\t}\n\t};\n\n/**\n * Request autosave data from the REST API.\n *\n * This resolver exists to ensure the underlying autosaves are fetched via\n * `getAutosaves` when a call to the `getAutosave` selector is made.\n *\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n */\nexport const getAutosave =\n\t( postType, postId ) =>\n\tasync ( { resolveSelect } ) => {\n\t\tawait resolveSelect.getAutosaves( postType, postId );\n\t};\n\nexport const __experimentalGetCurrentGlobalStylesId =\n\t() =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst activeThemes = await resolveSelect.getEntityRecords(\n\t\t\t'root',\n\t\t\t'theme',\n\t\t\t{ status: 'active' }\n\t\t);\n\t\tconst globalStylesURL =\n\t\t\tactiveThemes?.[ 0 ]?._links?.[ 'wp:user-global-styles' ]?.[ 0 ]\n\t\t\t\t?.href;\n\t\tif ( ! globalStylesURL ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Regex matches the ID at the end of a URL or immediately before\n\t\t// the query string.\n\t\tconst matches = globalStylesURL.match( /\\/(\\d+)(?:\\?|$)/ );\n\t\tconst id = matches ? Number( matches[ 1 ] ) : null;\n\n\t\tif ( id ) {\n\t\t\tdispatch.__experimentalReceiveCurrentGlobalStylesId( id );\n\t\t}\n\t};\n\nexport const __experimentalGetCurrentThemeBaseGlobalStyles =\n\t() =>\n\tasync ( { resolveSelect, dispatch } ) => {\n\t\tconst currentTheme = await resolveSelect.getCurrentTheme();\n\t\t// Please adjust the preloaded requests if this changes!\n\t\tconst themeGlobalStyles = await apiFetch( {\n\t\t\tpath: `/wp/v2/global-styles/themes/${ currentTheme.stylesheet }?context=view`,\n\t\t} );\n\t\tdispatch.__experimentalReceiveThemeBaseGlobalStyles(\n\t\t\tcurrentTheme.stylesheet,\n\t\t\tthemeGlobalStyles\n\t\t);\n\t};\n\nexport const __experimentalGetCurrentThemeGlobalStylesVariations =\n\t() =>\n\tasync ( { resolveSelect, dispatch } ) => {\n\t\tconst currentTheme = await resolveSelect.getCurrentTheme();\n\t\t// Please adjust the preloaded requests if this changes!\n\t\tconst variations = await apiFetch( {\n\t\t\tpath: `/wp/v2/global-styles/themes/${ currentTheme.stylesheet }/variations?context=view`,\n\t\t} );\n\t\tdispatch.__experimentalReceiveThemeGlobalStyleVariations(\n\t\t\tcurrentTheme.stylesheet,\n\t\t\tvariations\n\t\t);\n\t};\n\n/**\n * Fetches and returns the revisions of the current global styles theme.\n */\nexport const getCurrentThemeGlobalStylesRevisions =\n\t() =>\n\tasync ( { resolveSelect, dispatch } ) => {\n\t\tconst globalStylesId =\n\t\t\tawait resolveSelect.__experimentalGetCurrentGlobalStylesId();\n\t\tconst record = globalStylesId\n\t\t\t? await resolveSelect.getEntityRecord(\n\t\t\t\t\t'root',\n\t\t\t\t\t'globalStyles',\n\t\t\t\t\tglobalStylesId\n\t\t\t )\n\t\t\t: undefined;\n\t\tconst revisionsURL = record?._links?.[ 'version-history' ]?.[ 0 ]?.href;\n\n\t\tif ( revisionsURL ) {\n\t\t\tconst resetRevisions = await apiFetch( {\n\t\t\t\turl: revisionsURL,\n\t\t\t} );\n\t\t\tconst revisions = resetRevisions?.map( ( revision ) =>\n\t\t\t\tObject.fromEntries(\n\t\t\t\t\tObject.entries( revision ).map( ( [ key, value ] ) => [\n\t\t\t\t\t\tcamelCase( key ),\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t] )\n\t\t\t\t)\n\t\t\t);\n\t\t\tdispatch.receiveThemeGlobalStyleRevisions(\n\t\t\t\tglobalStylesId,\n\t\t\t\trevisions\n\t\t\t);\n\t\t}\n\t};\n\ngetCurrentThemeGlobalStylesRevisions.shouldInvalidate = ( action ) => {\n\treturn (\n\t\taction.type === 'SAVE_ENTITY_RECORD_FINISH' &&\n\t\taction.kind === 'root' &&\n\t\t! action.error &&\n\t\taction.name === 'globalStyles'\n\t);\n};\n\nexport const getBlockPatterns =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst patterns = await fetchBlockPatterns();\n\t\tdispatch( { type: 'RECEIVE_BLOCK_PATTERNS', patterns } );\n\t};\n\nexport const getBlockPatternCategories =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst categories = await apiFetch( {\n\t\t\tpath: '/wp/v2/block-patterns/categories',\n\t\t} );\n\t\tdispatch( { type: 'RECEIVE_BLOCK_PATTERN_CATEGORIES', categories } );\n\t};\n\nexport const getUserPatternCategories =\n\t() =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tconst patternCategories = await resolveSelect.getEntityRecords(\n\t\t\t'taxonomy',\n\t\t\t'wp_pattern_category',\n\t\t\t{\n\t\t\t\tper_page: -1,\n\t\t\t\t_fields: 'id,name,description,slug',\n\t\t\t\tcontext: 'view',\n\t\t\t}\n\t\t);\n\n\t\tconst mappedPatternCategories =\n\t\t\tpatternCategories?.map( ( userCategory ) => ( {\n\t\t\t\t...userCategory,\n\t\t\t\tlabel: decodeEntities( userCategory.name ),\n\t\t\t\tname: userCategory.slug,\n\t\t\t} ) ) || [];\n\n\t\tdispatch( {\n\t\t\ttype: 'RECEIVE_USER_PATTERN_CATEGORIES',\n\t\t\tpatternCategories: mappedPatternCategories,\n\t\t} );\n\t};\n\nexport const getNavigationFallbackId =\n\t() =>\n\tasync ( { dispatch, select, registry } ) => {\n\t\tconst fallback = await apiFetch( {\n\t\t\tpath: addQueryArgs( '/wp-block-editor/v1/navigation-fallback', {\n\t\t\t\t_embed: true,\n\t\t\t} ),\n\t\t} );\n\n\t\tconst record = fallback?._embedded?.self;\n\n\t\tregistry.batch( () => {\n\t\t\tdispatch.receiveNavigationFallbackId( fallback?.id );\n\n\t\t\tif ( ! record ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the fallback is already in the store, don't invalidate navigation queries.\n\t\t\t// Otherwise, invalidate the cache for the scenario where there were no Navigation\n\t\t\t// posts in the state and the fallback created one.\n\t\t\tconst existingFallbackEntityRecord = select.getEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'wp_navigation',\n\t\t\t\tfallback.id\n\t\t\t);\n\t\t\tconst invalidateNavigationQueries = ! existingFallbackEntityRecord;\n\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t'postType',\n\t\t\t\t'wp_navigation',\n\t\t\t\trecord,\n\t\t\t\tundefined,\n\t\t\t\tinvalidateNavigationQueries\n\t\t\t);\n\n\t\t\t// Resolve to avoid further network requests.\n\t\t\tdispatch.finishResolution( 'getEntityRecord', [\n\t\t\t\t'postType',\n\t\t\t\t'wp_navigation',\n\t\t\t\tfallback.id,\n\t\t\t] );\n\t\t} );\n\t};\n\nexport const getDefaultTemplateId =\n\t( query ) =>\n\tasync ( { dispatch, registry, resolveSelect } ) => {\n\t\tconst template = await apiFetch( {\n\t\t\tpath: addQueryArgs( '/wp/v2/templates/lookup', query ),\n\t\t} );\n\t\t// Wait for the the entities config to be loaded, otherwise receiving\n\t\t// the template as an entity will not work.\n\t\tawait resolveSelect.getEntitiesConfig( 'postType' );\n\t\t// When active_templates experiment is enabled, use numeric wp_id if it\n\t\t// exists, otherwise fall back to string ID format (theme//slug) as the\n\t\t// frontend expects string IDs for templates.\n\t\tconst id = window?.__experimentalTemplateActivate\n\t\t\t? template?.wp_id || template?.id\n\t\t\t: template?.id;\n\n\t\tregistry.batch( () => {\n\t\t\tdispatch.receiveDefaultTemplateId( query, id || '' );\n\t\t\t// Endpoint may return an empty object if no template is found.\n\t\t\tif ( id ) {\n\t\t\t\ttemplate.id = id;\n\t\t\t\tdispatch.receiveEntityRecords(\n\t\t\t\t\t'postType',\n\t\t\t\t\ttemplate.type,\n\t\t\t\t\ttemplate\n\t\t\t\t);\n\t\t\t\t// Avoid further network requests.\n\t\t\t\tdispatch.finishResolution( 'getEntityRecord', [\n\t\t\t\t\t'postType',\n\t\t\t\t\ttemplate.type,\n\t\t\t\t\tid,\n\t\t\t\t] );\n\t\t\t}\n\t\t} );\n\t};\n\ngetDefaultTemplateId.shouldInvalidate = ( action ) => {\n\t// Only invalidate on real saves; `persistedEdits` is absent on\n\t// initial fetches so the kickoff's own site read doesn't wipe\n\t// the just-resolved template id.\n\treturn (\n\t\taction.type === 'RECEIVE_ITEMS' &&\n\t\taction.kind === 'root' &&\n\t\taction.name === 'site' &&\n\t\t!! action.persistedEdits\n\t);\n};\n\n/**\n * Requests an entity's revisions from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordKey The key of the entity record whose revisions you want to fetch.\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request. If requesting specific\n * fields, fields must always include the ID.\n */\nexport const getRevisions =\n\t( kind, name, recordKey, query = {} ) =>\n\tasync ( { dispatch, registry, resolveSelect } ) => {\n\t\tconst configs = await resolveSelect.getEntitiesConfig( kind );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\n\t\tif ( ! entityConfig ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst rawQuery = { ...query };\n\t\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\t\tSTORE_NAME,\n\t\t\t[ 'entities', 'records', kind, name, recordKey, 'revisions' ],\n\t\t\t{ exclusive: false }\n\t\t);\n\n\t\ttry {\n\t\t\tif ( query._fields ) {\n\t\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t\t// the ID.\n\t\t\t\tquery = {\n\t\t\t\t\t...query,\n\t\t\t\t\t_fields: [\n\t\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\t\tentityConfig.revisionKey || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t\t] ),\n\t\t\t\t\t].join(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst path = addQueryArgs(\n\t\t\t\tentityConfig.getRevisionsUrl( recordKey ),\n\t\t\t\tquery\n\t\t\t);\n\n\t\t\tlet records, response;\n\t\t\tconst meta = {};\n\t\t\tconst isPaginated =\n\t\t\t\tentityConfig.supportsPagination && query.per_page !== -1;\n\t\t\ttry {\n\t\t\t\tresponse = await apiFetch( { path, parse: ! isPaginated } );\n\t\t\t} catch {\n\t\t\t\t// Do nothing if our request comes back with an API error.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( response ) {\n\t\t\t\tif ( isPaginated ) {\n\t\t\t\t\trecords = Object.values( await response.json() );\n\t\t\t\t\tmeta.totalItems = parseInt(\n\t\t\t\t\t\tresponse.headers.get( 'X-WP-Total' )\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\trecords = Object.values( response );\n\t\t\t\t}\n\n\t\t\t\t// If we request fields but the result doesn't contain the fields,\n\t\t\t\t// explicitly set these fields as \"undefined\"\n\t\t\t\t// that way we consider the query \"fulfilled\".\n\t\t\t\tif ( query._fields ) {\n\t\t\t\t\trecords = records.map( ( record ) => {\n\t\t\t\t\t\tquery._fields.split( ',' ).forEach( ( field ) => {\n\t\t\t\t\t\t\tif ( ! record.hasOwnProperty( field ) ) {\n\t\t\t\t\t\t\t\trecord[ field ] = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\treturn record;\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tregistry.batch( () => {\n\t\t\t\t\tdispatch.receiveRevisions(\n\t\t\t\t\t\tkind,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\trecordKey,\n\t\t\t\t\t\trecords,\n\t\t\t\t\t\tquery,\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tmeta\n\t\t\t\t\t);\n\n\t\t\t\t\t// Mark individual getRevision resolutions as done so that\n\t\t\t\t\t// subsequent getRevision calls skip redundant API fetches.\n\t\t\t\t\tconst key = entityConfig.revisionKey || DEFAULT_ENTITY_KEY;\n\t\t\t\t\tconst normalizedQuery =\n\t\t\t\t\t\tnormalizeQueryForResolution( rawQuery );\n\t\t\t\t\tconst resolutionsArgs = records\n\t\t\t\t\t\t.filter( ( record ) => record[ key ] )\n\t\t\t\t\t\t.map( ( record ) => [\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\trecordKey,\n\t\t\t\t\t\t\trecord[ key ],\n\t\t\t\t\t\t\tnormalizedQuery,\n\t\t\t\t\t\t] );\n\n\t\t\t\t\tdispatch.finishResolutions(\n\t\t\t\t\t\t'getRevision',\n\t\t\t\t\t\tresolutionsArgs\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t}\n\t\t} finally {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\n\n// Invalidate cache when a new revision is created.\ngetRevisions.shouldInvalidate = ( action, kind, name, recordKey ) =>\n\taction.type === 'SAVE_ENTITY_RECORD_FINISH' &&\n\tname === action.name &&\n\tkind === action.kind &&\n\t! action.error &&\n\trecordKey === action.recordId;\n\n/**\n * Requests a specific Entity revision from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordKey The key of the entity record whose revisions you want to fetch.\n * @param {number|string} revisionKey The revision's key.\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request. If requesting specific\n * fields, fields must always include the ID.\n */\nexport const getRevision =\n\t( kind, name, recordKey, revisionKey, query ) =>\n\tasync ( { select, dispatch, resolveSelect } ) => {\n\t\tconst configs = await resolveSelect.getEntitiesConfig( kind );\n\t\tconst entityConfig = configs.find(\n\t\t\t( config ) => config.name === name && config.kind === kind\n\t\t);\n\n\t\tif ( ! entityConfig ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( query !== undefined && query._fields ) {\n\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t// the ID.\n\t\t\tquery = {\n\t\t\t\t...query,\n\t\t\t\t_fields: [\n\t\t\t\t\t...new Set( [\n\t\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) ||\n\t\t\t\t\t\t\t[] ),\n\t\t\t\t\t\tentityConfig.revisionKey || DEFAULT_ENTITY_KEY,\n\t\t\t\t\t] ),\n\t\t\t\t].join(),\n\t\t\t};\n\t\t}\n\n\t\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\t\tSTORE_NAME,\n\t\t\t[\n\t\t\t\t'entities',\n\t\t\t\t'records',\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\trecordKey,\n\t\t\t\t'revisions',\n\t\t\t\trevisionKey,\n\t\t\t],\n\t\t\t{ exclusive: false }\n\t\t);\n\n\t\ttry {\n\t\t\tif (\n\t\t\t\tselect.hasRevision( kind, name, recordKey, revisionKey, query )\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst path = addQueryArgs(\n\t\t\t\tentityConfig.getRevisionsUrl( recordKey, revisionKey ),\n\t\t\t\tquery\n\t\t\t);\n\n\t\t\tlet record;\n\t\t\ttry {\n\t\t\t\trecord = await apiFetch( { path } );\n\t\t\t} catch {\n\t\t\t\t// Do nothing if our request comes back with an API error.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( record ) {\n\t\t\t\tdispatch.receiveRevisions(\n\t\t\t\t\tkind,\n\t\t\t\t\tname,\n\t\t\t\t\trecordKey,\n\t\t\t\t\trecord,\n\t\t\t\t\tquery\n\t\t\t\t);\n\t\t\t}\n\t\t} finally {\n\t\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t\t}\n\t};\n\n/**\n * Requests a specific post type options from the REST API.\n *\n * @param {string} postType Post type slug.\n */\nexport const getRegisteredPostMeta =\n\t( postType ) =>\n\tasync ( { dispatch, resolveSelect } ) => {\n\t\tlet options;\n\t\ttry {\n\t\t\tconst {\n\t\t\t\trest_namespace: restNamespace = 'wp/v2',\n\t\t\t\trest_base: restBase,\n\t\t\t} = ( await resolveSelect.getPostType( postType ) ) || {};\n\t\t\toptions = await apiFetch( {\n\t\t\t\tpath: `${ restNamespace }/${ restBase }/?context=edit`,\n\t\t\t\tmethod: 'OPTIONS',\n\t\t\t} );\n\t\t} catch {\n\t\t\t// Do nothing if the request comes back with an API error.\n\t\t\treturn;\n\t\t}\n\n\t\tif ( options ) {\n\t\t\tdispatch.receiveRegisteredPostMeta(\n\t\t\t\tpostType,\n\t\t\t\toptions?.schema?.properties?.meta?.properties\n\t\t\t);\n\t\t}\n\t};\n\n/**\n * Requests entity configs for the given kind from the REST API.\n *\n * @param {string} kind Entity kind.\n */\nexport const getEntitiesConfig =\n\t( kind ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst loader = additionalEntityConfigLoaders.find(\n\t\t\t( l ) => l.kind === kind\n\t\t);\n\n\t\tif ( ! loader ) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst configs = await loader.loadEntities();\n\t\t\tif ( ! configs.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdispatch.addEntities( configs );\n\t\t} catch {\n\t\t\t// Do nothing if the request comes back with an API error.\n\t\t}\n\t};\n\n/**\n * Requests editor settings from the REST API.\n */\nexport const getEditorSettings =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst settings = await apiFetch( {\n\t\t\tpath: '/wp-block-editor/v1/settings',\n\t\t} );\n\t\tdispatch.receiveEditorSettings( settings );\n\t};\n\n/**\n * Requests editor assets from the REST API.\n */\nexport const getEditorAssets =\n\t() =>\n\tasync ( { dispatch } ) => {\n\t\tconst assets = await apiFetch( {\n\t\t\tpath: '/wp-block-editor/v1/assets',\n\t\t} );\n\t\tdispatch.receiveEditorAssets( assets );\n\t};\n\n/**\n * Requests view config for a given entity type from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {?Object} options Optional options.\n * @param {?string[]} options.fields Optional subset of top-level config\n * properties to request, mapped to the REST\n * API `_fields` parameter. When omitted, the\n * full config is requested.\n */\nexport const getViewConfig =\n\t( kind, name, options = {} ) =>\n\tasync ( { dispatch } ) => {\n\t\tconst query = { kind, name };\n\t\tconst fields = getNormalizedCommaSeparable( options.fields );\n\t\tif ( fields?.length ) {\n\t\t\tquery._fields = fields.join( ',' );\n\t\t}\n\t\tconst config = await apiFetch( {\n\t\t\tpath: addQueryArgs( '/wp/v2/view-config', query ),\n\t\t} );\n\t\tdispatch.receiveViewConfig( kind, name, config );\n\t};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["apiFetch"]
|
|
7
7
|
}
|