@wordpress/core-data 4.0.1 → 4.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/README.md +13 -7
  2. package/build/actions.js +178 -122
  3. package/build/actions.js.map +1 -1
  4. package/build/batch/default-processor.js +58 -27
  5. package/build/batch/default-processor.js.map +1 -1
  6. package/build/entities.js +70 -23
  7. package/build/entities.js.map +1 -1
  8. package/build/fetch/__experimental-fetch-url-data.js +1 -1
  9. package/build/fetch/__experimental-fetch-url-data.js.map +1 -1
  10. package/build/index.js +9 -17
  11. package/build/index.js.map +1 -1
  12. package/build/locks/actions.js +17 -77
  13. package/build/locks/actions.js.map +1 -1
  14. package/build/locks/engine.js +77 -0
  15. package/build/locks/engine.js.map +1 -0
  16. package/build/locks/reducer.js +1 -5
  17. package/build/locks/reducer.js.map +1 -1
  18. package/build/locks/selectors.js +6 -6
  19. package/build/locks/selectors.js.map +1 -1
  20. package/build/queried-data/get-query-parts.js +9 -4
  21. package/build/queried-data/get-query-parts.js.map +1 -1
  22. package/build/queried-data/selectors.js +3 -9
  23. package/build/queried-data/selectors.js.map +1 -1
  24. package/build/reducer.js +17 -22
  25. package/build/reducer.js.map +1 -1
  26. package/build/resolvers.js +151 -97
  27. package/build/resolvers.js.map +1 -1
  28. package/build/selectors.js +79 -14
  29. package/build/selectors.js.map +1 -1
  30. package/build/utils/forward-resolver.js +23 -0
  31. package/build/utils/forward-resolver.js.map +1 -0
  32. package/build/utils/index.js +11 -3
  33. package/build/utils/index.js.map +1 -1
  34. package/build/utils/is-raw-attribute.js +19 -0
  35. package/build/utils/is-raw-attribute.js.map +1 -0
  36. package/build-module/actions.js +155 -112
  37. package/build-module/actions.js.map +1 -1
  38. package/build-module/batch/default-processor.js +57 -27
  39. package/build-module/batch/default-processor.js.map +1 -1
  40. package/build-module/entities.js +65 -19
  41. package/build-module/entities.js.map +1 -1
  42. package/build-module/fetch/__experimental-fetch-url-data.js +1 -1
  43. package/build-module/fetch/__experimental-fetch-url-data.js.map +1 -1
  44. package/build-module/index.js +10 -14
  45. package/build-module/index.js.map +1 -1
  46. package/build-module/locks/actions.js +14 -68
  47. package/build-module/locks/actions.js.map +1 -1
  48. package/build-module/locks/engine.js +66 -0
  49. package/build-module/locks/engine.js.map +1 -0
  50. package/build-module/locks/reducer.js +1 -2
  51. package/build-module/locks/reducer.js.map +1 -1
  52. package/build-module/locks/selectors.js +4 -4
  53. package/build-module/locks/selectors.js.map +1 -1
  54. package/build-module/queried-data/get-query-parts.js +9 -4
  55. package/build-module/queried-data/get-query-parts.js.map +1 -1
  56. package/build-module/queried-data/selectors.js +3 -9
  57. package/build-module/queried-data/selectors.js.map +1 -1
  58. package/build-module/reducer.js +15 -19
  59. package/build-module/reducer.js.map +1 -1
  60. package/build-module/resolvers.js +123 -81
  61. package/build-module/resolvers.js.map +1 -1
  62. package/build-module/selectors.js +74 -13
  63. package/build-module/selectors.js.map +1 -1
  64. package/build-module/utils/forward-resolver.js +15 -0
  65. package/build-module/utils/forward-resolver.js.map +1 -0
  66. package/build-module/utils/index.js +2 -1
  67. package/build-module/utils/index.js.map +1 -1
  68. package/build-module/utils/is-raw-attribute.js +12 -0
  69. package/build-module/utils/is-raw-attribute.js.map +1 -0
  70. package/package.json +10 -11
  71. package/src/actions.js +163 -194
  72. package/src/batch/default-processor.js +57 -26
  73. package/src/batch/test/default-processor.js +53 -26
  74. package/src/entities.js +47 -19
  75. package/src/fetch/__experimental-fetch-url-data.js +1 -1
  76. package/src/index.js +7 -10
  77. package/src/locks/actions.js +10 -61
  78. package/src/locks/engine.js +43 -0
  79. package/src/locks/reducer.js +1 -3
  80. package/src/locks/selectors.js +4 -4
  81. package/src/locks/test/engine.js +135 -0
  82. package/src/locks/test/reducer.js +1 -1
  83. package/src/locks/test/selectors.js +105 -124
  84. package/src/queried-data/get-query-parts.js +11 -6
  85. package/src/queried-data/selectors.js +2 -9
  86. package/src/queried-data/test/get-query-parts.js +1 -1
  87. package/src/queried-data/test/selectors.js +1 -0
  88. package/src/reducer.js +14 -19
  89. package/src/resolvers.js +132 -120
  90. package/src/selectors.js +156 -44
  91. package/src/test/actions.js +330 -170
  92. package/src/test/entities.js +40 -26
  93. package/src/test/resolvers.js +270 -223
  94. package/src/test/selectors.js +127 -1
  95. package/src/utils/forward-resolver.js +14 -0
  96. package/src/utils/index.js +2 -1
  97. package/src/utils/is-raw-attribute.js +11 -0
  98. package/src/utils/test/is-raw-attribute.js +22 -0
  99. package/build/controls.js +0 -44
  100. package/build/controls.js.map +0 -1
  101. package/build/locks/index.js +0 -47
  102. package/build/locks/index.js.map +0 -1
  103. package/build/utils/if-not-resolved.js +0 -46
  104. package/build/utils/if-not-resolved.js.map +0 -1
  105. package/build-module/controls.js +0 -31
  106. package/build-module/controls.js.map +0 -1
  107. package/build-module/locks/index.js +0 -4
  108. package/build-module/locks/index.js.map +0 -1
  109. package/build-module/utils/if-not-resolved.js +0 -36
  110. package/build-module/utils/if-not-resolved.js.map +0 -1
  111. package/src/controls.js +0 -31
  112. package/src/locks/index.js +0 -3
  113. package/src/locks/test/actions.js +0 -307
  114. package/src/test/integration.js +0 -264
  115. package/src/utils/if-not-resolved.js +0 -40
  116. package/src/utils/test/if-not-resolved.js +0 -75
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/resolvers.js"],"names":["getAuthors","query","path","users","getCurrentUser","currentUser","getEntityRecord","kind","name","key","entities","entity","lock","STORE_NAME","exclusive","undefined","_fields","DEFAULT_ENTITY_KEY","join","baseURL","baseURLParams","include","hasRecords","controls","select","record","error","getRawEntityRecord","getEditedEntityRecord","getEntityRecords","records","Object","values","map","split","forEach","field","hasOwnProperty","context","resolutionsArgs","filter","type","selectorName","args","shouldInvalidate","action","invalidateCache","getCurrentTheme","activeThemes","getThemeSupports","theme_supports","getEmbedPreview","url","embedProxyResponse","canUser","resource","id","methods","create","read","update","delete","method","Error","response","parse","allowHeader","headers","get","isAllowed","canUserEditEntityRecord","recordId","__unstable_rest_base","getAutosaves","postType","postId","rest_base","restBase","resolveSelect","autosaves","length","getAutosave","__experimentalGetTemplateForLink","link","template","e"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { find, includes, get, hasIn, compact, uniq } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { addQueryArgs } from '@wordpress/url';\nimport { controls } from '@wordpress/data';\nimport { apiFetch } from '@wordpress/data-controls';\n/**\n * Internal dependencies\n */\nimport { regularFetch } from './controls';\nimport { STORE_NAME } from './name';\n\n/**\n * Internal dependencies\n */\nimport {\n\treceiveUserQuery,\n\treceiveCurrentTheme,\n\treceiveCurrentUser,\n\treceiveEntityRecords,\n\treceiveThemeSupports,\n\treceiveEmbedPreview,\n\treceiveUserPermission,\n\treceiveAutosaves,\n} from './actions';\nimport { getKindEntities, DEFAULT_ENTITY_KEY } from './entities';\nimport { ifNotResolved, getNormalizedCommaSeparable } from './utils';\nimport {\n\t__unstableAcquireStoreLock,\n\t__unstableReleaseStoreLock,\n} from './locks';\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 function* getAuthors( query ) {\n\tconst path = addQueryArgs(\n\t\t'/wp/v2/users/?who=authors&per_page=100',\n\t\tquery\n\t);\n\tconst users = yield apiFetch( { path } );\n\tyield receiveUserQuery( path, users );\n}\n\n/**\n * Requests the current user from the REST API.\n */\nexport function* getCurrentUser() {\n\tconst currentUser = yield apiFetch( { path: '/wp/v2/users/me' } );\n\tyield receiveCurrentUser( currentUser );\n}\n\n/**\n * Requests an entity's record from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} key Record's key\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request.\n */\nexport function* getEntityRecord( kind, name, key = '', query ) {\n\tconst entities = yield getKindEntities( kind );\n\tconst entity = find( entities, { kind, name } );\n\tif ( ! entity ) {\n\t\treturn;\n\t}\n\n\tconst lock = yield* __unstableAcquireStoreLock(\n\t\tSTORE_NAME,\n\t\t[ 'entities', 'data', kind, name, key ],\n\t\t{ exclusive: false }\n\t);\n\ttry {\n\t\tif ( query !== undefined && query._fields ) {\n\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t// the ID.\n\t\t\tquery = {\n\t\t\t\t...query,\n\t\t\t\t_fields: uniq( [\n\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) || [] ),\n\t\t\t\t\tentity.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t] ).join(),\n\t\t\t};\n\t\t}\n\n\t\t// Disable reason: While true that an early return could leave `path`\n\t\t// unused, it's important that path is derived using the query prior to\n\t\t// additional query modifications in the condition below, since those\n\t\t// modifications are relevant to how the data is tracked in state, and not\n\t\t// for how the request is made to the REST API.\n\n\t\t// eslint-disable-next-line @wordpress/no-unused-vars-before-return\n\t\tconst path = addQueryArgs( entity.baseURL + '/' + key, {\n\t\t\t...entity.baseURLParams,\n\t\t\t...query,\n\t\t} );\n\n\t\tif ( query !== undefined ) {\n\t\t\tquery = { ...query, include: [ key ] };\n\n\t\t\t// The resolution cache won't consider query as reusable based on the\n\t\t\t// fields, so it's tested here, prior to initiating the REST request,\n\t\t\t// and without causing `getEntityRecords` resolution to occur.\n\t\t\tconst hasRecords = yield controls.select(\n\t\t\t\tSTORE_NAME,\n\t\t\t\t'hasEntityRecords',\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\tquery\n\t\t\t);\n\t\t\tif ( hasRecords ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst record = yield apiFetch( { path } );\n\t\tyield receiveEntityRecords( kind, name, record, query );\n\t} catch ( error ) {\n\t\t// We need a way to handle and access REST API errors in state\n\t\t// Until then, catching the error ensures the resolver is marked as resolved.\n\t} finally {\n\t\tyield* __unstableReleaseStoreLock( lock );\n\t}\n}\n\n/**\n * Requests an entity's record from the REST API.\n */\nexport const getRawEntityRecord = ifNotResolved(\n\tgetEntityRecord,\n\t'getEntityRecord'\n);\n\n/**\n * Requests an entity's record from the REST API.\n */\nexport const getEditedEntityRecord = ifNotResolved(\n\tgetRawEntityRecord,\n\t'getRawEntityRecord'\n);\n\n/**\n * Requests the entity's records from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {Object?} query Query Object.\n */\nexport function* getEntityRecords( kind, name, query = {} ) {\n\tconst entities = yield getKindEntities( kind );\n\tconst entity = find( entities, { kind, name } );\n\tif ( ! entity ) {\n\t\treturn;\n\t}\n\n\tconst lock = yield* __unstableAcquireStoreLock(\n\t\tSTORE_NAME,\n\t\t[ 'entities', 'data', kind, name ],\n\t\t{ exclusive: false }\n\t);\n\ttry {\n\t\tif ( query._fields ) {\n\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t// the ID.\n\t\t\tquery = {\n\t\t\t\t...query,\n\t\t\t\t_fields: uniq( [\n\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) || [] ),\n\t\t\t\t\tentity.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t] ).join(),\n\t\t\t};\n\t\t}\n\n\t\tconst path = addQueryArgs( entity.baseURL, {\n\t\t\t...entity.baseURLParams,\n\t\t\t...query,\n\t\t} );\n\n\t\tlet records = Object.values( yield apiFetch( { path } ) );\n\t\t// If we request fields but the result doesn't contain the fields,\n\t\t// explicitely set these fields as \"undefined\"\n\t\t// that way we consider the query \"fullfilled\".\n\t\tif ( query._fields ) {\n\t\t\trecords = records.map( ( record ) => {\n\t\t\t\tquery._fields.split( ',' ).forEach( ( field ) => {\n\t\t\t\t\tif ( ! record.hasOwnProperty( field ) ) {\n\t\t\t\t\t\trecord[ field ] = undefined;\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\treturn record;\n\t\t\t} );\n\t\t}\n\n\t\tyield receiveEntityRecords( kind, name, records, query );\n\t\t// When requesting all fields, the list of results can be used to\n\t\t// resolve the `getEntityRecord` selector in addition to `getEntityRecords`.\n\t\t// See https://github.com/WordPress/gutenberg/pull/26575\n\t\tif ( ! query?._fields && ! query.context ) {\n\t\t\tconst key = entity.key || DEFAULT_ENTITY_KEY;\n\t\t\tconst resolutionsArgs = records\n\t\t\t\t.filter( ( record ) => record[ key ] )\n\t\t\t\t.map( ( record ) => [ kind, name, record[ key ] ] );\n\n\t\t\tyield {\n\t\t\t\ttype: 'START_RESOLUTIONS',\n\t\t\t\tselectorName: 'getEntityRecord',\n\t\t\t\targs: resolutionsArgs,\n\t\t\t};\n\t\t\tyield {\n\t\t\t\ttype: 'FINISH_RESOLUTIONS',\n\t\t\t\tselectorName: 'getEntityRecord',\n\t\t\t\targs: resolutionsArgs,\n\t\t\t};\n\t\t}\n\t} finally {\n\t\tyield* __unstableReleaseStoreLock( lock );\n\t}\n}\n\ngetEntityRecords.shouldInvalidate = ( action, kind, name ) => {\n\treturn (\n\t\t( action.type === 'RECEIVE_ITEMS' || action.type === 'REMOVE_ITEMS' ) &&\n\t\taction.invalidateCache &&\n\t\tkind === action.kind &&\n\t\tname === action.name\n\t);\n};\n\n/**\n * Requests the current theme.\n */\nexport function* getCurrentTheme() {\n\tconst activeThemes = yield apiFetch( {\n\t\tpath: '/wp/v2/themes?status=active',\n\t} );\n\tyield receiveCurrentTheme( activeThemes[ 0 ] );\n}\n\n/**\n * Requests theme supports data from the index.\n */\nexport function* getThemeSupports() {\n\tconst activeThemes = yield apiFetch( {\n\t\tpath: '/wp/v2/themes?status=active',\n\t} );\n\tyield receiveThemeSupports( activeThemes[ 0 ].theme_supports );\n}\n\n/**\n * Requests a preview from the from the Embed API.\n *\n * @param {string} url URL to get the preview for.\n */\nexport function* getEmbedPreview( url ) {\n\ttry {\n\t\tconst embedProxyResponse = yield apiFetch( {\n\t\t\tpath: addQueryArgs( '/oembed/1.0/proxy', { url } ),\n\t\t} );\n\t\tyield receiveEmbedPreview( url, embedProxyResponse );\n\t} catch ( error ) {\n\t\t// Embed API 404s if the URL cannot be embedded, so we have to catch the error from the apiRequest here.\n\t\tyield receiveEmbedPreview( url, false );\n\t}\n}\n\n/**\n * Checks whether the current user can perform the given action on the given\n * REST resource.\n *\n * @param {string} action Action to check. One of: 'create', 'read', 'update',\n * 'delete'.\n * @param {string} resource REST resource to check, e.g. 'media' or 'posts'.\n * @param {?string} id ID of the rest resource to check.\n */\nexport function* canUser( action, resource, id ) {\n\tconst methods = {\n\t\tcreate: 'POST',\n\t\tread: 'GET',\n\t\tupdate: 'PUT',\n\t\tdelete: 'DELETE',\n\t};\n\n\tconst method = methods[ action ];\n\tif ( ! method ) {\n\t\tthrow new Error( `'${ action }' is not a valid action.` );\n\t}\n\n\tconst path = id ? `/wp/v2/${ resource }/${ id }` : `/wp/v2/${ resource }`;\n\n\tlet response;\n\ttry {\n\t\tresponse = yield apiFetch( {\n\t\t\tpath,\n\t\t\t// Ideally this would always be an OPTIONS request, but unfortunately there's\n\t\t\t// a bug in the REST API which causes the Allow header to not be sent on\n\t\t\t// OPTIONS requests to /posts/:id routes.\n\t\t\t// https://core.trac.wordpress.org/ticket/45753\n\t\t\tmethod: id ? 'GET' : 'OPTIONS',\n\t\t\tparse: false,\n\t\t} );\n\t} catch ( error ) {\n\t\t// Do nothing if our OPTIONS request comes back with an API error (4xx or\n\t\t// 5xx). The previously determined isAllowed value will remain in the store.\n\t\treturn;\n\t}\n\n\tlet allowHeader;\n\tif ( hasIn( response, [ 'headers', 'get' ] ) ) {\n\t\t// If the request is fetched using the fetch api, the header can be\n\t\t// retrieved using the 'get' method.\n\t\tallowHeader = response.headers.get( 'allow' );\n\t} else {\n\t\t// If the request was preloaded server-side and is returned by the\n\t\t// preloading middleware, the header will be a simple property.\n\t\tallowHeader = get( response, [ 'headers', 'Allow' ], '' );\n\t}\n\n\tconst key = compact( [ action, resource, id ] ).join( '/' );\n\tconst isAllowed = includes( allowHeader, method );\n\tyield receiveUserPermission( key, isAllowed );\n}\n\n/**\n * Checks whether the current user can perform the given action on the given\n * REST resource.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {string} recordId Record's id.\n */\nexport function* canUserEditEntityRecord( kind, name, recordId ) {\n\tconst entities = yield getKindEntities( kind );\n\tconst entity = find( entities, { kind, name } );\n\tif ( ! entity ) {\n\t\treturn;\n\t}\n\n\tconst resource = entity.__unstable_rest_base;\n\tyield canUser( 'update', resource, recordId );\n}\n\n/**\n * Request autosave data from the REST API.\n *\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n */\nexport function* getAutosaves( postType, postId ) {\n\tconst { rest_base: restBase } = yield controls.resolveSelect(\n\t\tSTORE_NAME,\n\t\t'getPostType',\n\t\tpostType\n\t);\n\tconst autosaves = yield apiFetch( {\n\t\tpath: `/wp/v2/${ restBase }/${ postId }/autosaves?context=edit`,\n\t} );\n\n\tif ( autosaves && autosaves.length ) {\n\t\tyield receiveAutosaves( postId, autosaves );\n\t}\n}\n\n/**\n * Request autosave data from the REST API.\n *\n * This resolver exists to ensure the underlying autosaves are fetched via\n * `getAutosaves` when a call to the `getAutosave` selector is made.\n *\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n */\nexport function* getAutosave( postType, postId ) {\n\tyield controls.resolveSelect(\n\t\tSTORE_NAME,\n\t\t'getAutosaves',\n\t\tpostType,\n\t\tpostId\n\t);\n}\n\n/**\n * Retrieve the frontend template used for a given link.\n *\n * @param {string} link Link.\n */\nexport function* __experimentalGetTemplateForLink( link ) {\n\t// Ideally this should be using an apiFetch call\n\t// We could potentially do so by adding a \"filter\" to the `wp_template` end point.\n\t// Also it seems the returned object is not a regular REST API post type.\n\tlet template;\n\ttry {\n\t\ttemplate = yield regularFetch(\n\t\t\taddQueryArgs( link, {\n\t\t\t\t'_wp-find-template': true,\n\t\t\t} )\n\t\t);\n\t} catch ( e ) {\n\t\t// For non-FSE themes, it is possible that this request returns an error.\n\t}\n\n\tif ( ! template ) {\n\t\treturn;\n\t}\n\n\tyield getEntityRecord( 'postType', 'wp_template', template.id );\n\tconst record = yield controls.select(\n\t\tSTORE_NAME,\n\t\t'getEntityRecord',\n\t\t'postType',\n\t\t'wp_template',\n\t\ttemplate.id\n\t);\n\n\tif ( record ) {\n\t\tyield receiveEntityRecords( 'postType', 'wp_template', [ record ], {\n\t\t\t'find-template': link,\n\t\t} );\n\t}\n}\n\n__experimentalGetTemplateForLink.shouldInvalidate = ( action ) => {\n\treturn (\n\t\t( action.type === 'RECEIVE_ITEMS' || action.type === 'REMOVE_ITEMS' ) &&\n\t\taction.invalidateCache &&\n\t\taction.kind === 'postType' &&\n\t\taction.name === 'wp_template'\n\t);\n};\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/resolvers.js"],"names":["getAuthors","query","dispatch","path","users","receiveUserQuery","getCurrentUser","currentUser","receiveCurrentUser","getEntityRecord","kind","name","key","select","entities","entity","__experimentalNoFetch","lock","__unstableAcquireStoreLock","STORE_NAME","exclusive","undefined","_fields","DEFAULT_ENTITY_KEY","join","baseURL","baseURLParams","include","hasRecords","hasEntityRecords","record","receiveEntityRecords","error","__unstableReleaseStoreLock","getRawEntityRecord","getEditedEntityRecord","getEntityRecords","records","Object","values","map","split","forEach","field","hasOwnProperty","context","resolutionsArgs","filter","type","selectorName","args","shouldInvalidate","action","invalidateCache","getCurrentTheme","resolveSelect","activeThemes","status","receiveCurrentTheme","getThemeSupports","getEmbedPreview","url","embedProxyResponse","receiveEmbedPreview","canUser","resource","id","methods","create","read","update","delete","method","Error","response","parse","allowHeader","headers","get","isAllowed","receiveUserPermission","canUserEditEntityRecord","recordId","__unstable_rest_base","getAutosaves","postType","postId","rest_base","restBase","getPostType","autosaves","length","receiveAutosaves","getAutosave","__experimentalGetTemplateForLink","link","template","window","fetch","then","res","json","data","e","__experimentalGetCurrentGlobalStylesId","globalStylesURL","globalStylesObject","__experimentalReceiveCurrentGlobalStylesId","__experimentalGetCurrentThemeBaseGlobalStyles","currentTheme","themeGlobalStyles","stylesheet","__experimentalReceiveThemeBaseGlobalStyles"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { find, includes, get, hasIn, compact, uniq } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { addQueryArgs } from '@wordpress/url';\nimport apiFetch from '@wordpress/api-fetch';\n\n/**\n * Internal dependencies\n */\nimport { STORE_NAME } from './name';\nimport { getKindEntities, DEFAULT_ENTITY_KEY } from './entities';\nimport { forwardResolver, getNormalizedCommaSeparable } from './utils';\n\n/**\n * Requests authors from the REST API.\n *\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request.\n */\nexport const getAuthors = ( query ) => async ( { dispatch } ) => {\n\tconst path = addQueryArgs(\n\t\t'/wp/v2/users/?who=authors&per_page=100',\n\t\tquery\n\t);\n\tconst users = await apiFetch( { path } );\n\tdispatch.receiveUserQuery( path, users );\n};\n\n/**\n * Requests the current user from the REST API.\n */\nexport const getCurrentUser = () => async ( { dispatch } ) => {\n\tconst currentUser = await apiFetch( { path: '/wp/v2/users/me' } );\n\tdispatch.receiveCurrentUser( currentUser );\n};\n\n/**\n * Requests an entity's record from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} key Record's key\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request.\n */\nexport const getEntityRecord = ( kind, name, key = '', query ) => async ( {\n\tselect,\n\tdispatch,\n} ) => {\n\tconst entities = await dispatch( getKindEntities( kind ) );\n\tconst entity = find( entities, { kind, name } );\n\tif ( ! entity || entity?.__experimentalNoFetch ) {\n\t\treturn;\n\t}\n\n\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\tSTORE_NAME,\n\t\t[ 'entities', 'data', kind, name, key ],\n\t\t{ exclusive: false }\n\t);\n\n\ttry {\n\t\tif ( query !== undefined && query._fields ) {\n\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t// the ID.\n\t\t\tquery = {\n\t\t\t\t...query,\n\t\t\t\t_fields: uniq( [\n\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) || [] ),\n\t\t\t\t\tentity.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t] ).join(),\n\t\t\t};\n\t\t}\n\n\t\t// Disable reason: While true that an early return could leave `path`\n\t\t// unused, it's important that path is derived using the query prior to\n\t\t// additional query modifications in the condition below, since those\n\t\t// modifications are relevant to how the data is tracked in state, and not\n\t\t// for how the request is made to the REST API.\n\n\t\t// eslint-disable-next-line @wordpress/no-unused-vars-before-return\n\t\tconst path = addQueryArgs( entity.baseURL + ( key ? '/' + key : '' ), {\n\t\t\t...entity.baseURLParams,\n\t\t\t...query,\n\t\t} );\n\n\t\tif ( query !== undefined ) {\n\t\t\tquery = { ...query, include: [ key ] };\n\n\t\t\t// The resolution cache won't consider query as reusable based on the\n\t\t\t// fields, so it's tested here, prior to initiating the REST request,\n\t\t\t// and without causing `getEntityRecords` resolution to occur.\n\t\t\tconst hasRecords = select.hasEntityRecords( kind, name, query );\n\t\t\tif ( hasRecords ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst record = await apiFetch( { path } );\n\t\tdispatch.receiveEntityRecords( kind, name, record, query );\n\t} catch ( error ) {\n\t\t// We need a way to handle and access REST API errors in state\n\t\t// Until then, catching the error ensures the resolver is marked as resolved.\n\t} finally {\n\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t}\n};\n\n/**\n * Requests an entity's record from the REST API.\n */\nexport const getRawEntityRecord = forwardResolver( 'getEntityRecord' );\n\n/**\n * Requests an entity's record from the REST API.\n */\nexport const getEditedEntityRecord = forwardResolver( 'getEntityRecord' );\n\n/**\n * Requests the entity's records from the REST API.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {Object?} query Query Object.\n */\nexport const getEntityRecords = ( kind, name, query = {} ) => async ( {\n\tdispatch,\n} ) => {\n\tconst entities = await dispatch( getKindEntities( kind ) );\n\tconst entity = find( entities, { kind, name } );\n\tif ( ! entity || entity?.__experimentalNoFetch ) {\n\t\treturn;\n\t}\n\n\tconst lock = await dispatch.__unstableAcquireStoreLock(\n\t\tSTORE_NAME,\n\t\t[ 'entities', 'data', kind, name ],\n\t\t{ exclusive: false }\n\t);\n\n\ttry {\n\t\tif ( query._fields ) {\n\t\t\t// If requesting specific fields, items and query association to said\n\t\t\t// records are stored by ID reference. Thus, fields must always include\n\t\t\t// the ID.\n\t\t\tquery = {\n\t\t\t\t...query,\n\t\t\t\t_fields: uniq( [\n\t\t\t\t\t...( getNormalizedCommaSeparable( query._fields ) || [] ),\n\t\t\t\t\tentity.key || DEFAULT_ENTITY_KEY,\n\t\t\t\t] ).join(),\n\t\t\t};\n\t\t}\n\n\t\tconst path = addQueryArgs( entity.baseURL, {\n\t\t\t...entity.baseURLParams,\n\t\t\t...query,\n\t\t} );\n\n\t\tlet records = Object.values( await apiFetch( { path } ) );\n\t\t// If we request fields but the result doesn't contain the fields,\n\t\t// explicitely set these fields as \"undefined\"\n\t\t// that way we consider the query \"fullfilled\".\n\t\tif ( query._fields ) {\n\t\t\trecords = records.map( ( record ) => {\n\t\t\t\tquery._fields.split( ',' ).forEach( ( field ) => {\n\t\t\t\t\tif ( ! record.hasOwnProperty( field ) ) {\n\t\t\t\t\t\trecord[ field ] = undefined;\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\treturn record;\n\t\t\t} );\n\t\t}\n\n\t\tdispatch.receiveEntityRecords( kind, name, records, query );\n\n\t\t// When requesting all fields, the list of results can be used to\n\t\t// resolve the `getEntityRecord` selector in addition to `getEntityRecords`.\n\t\t// See https://github.com/WordPress/gutenberg/pull/26575\n\t\tif ( ! query?._fields && ! query.context ) {\n\t\t\tconst key = entity.key || DEFAULT_ENTITY_KEY;\n\t\t\tconst resolutionsArgs = records\n\t\t\t\t.filter( ( record ) => record[ key ] )\n\t\t\t\t.map( ( record ) => [ kind, name, record[ key ] ] );\n\n\t\t\tdispatch( {\n\t\t\t\ttype: 'START_RESOLUTIONS',\n\t\t\t\tselectorName: 'getEntityRecord',\n\t\t\t\targs: resolutionsArgs,\n\t\t\t} );\n\t\t\tdispatch( {\n\t\t\t\ttype: 'FINISH_RESOLUTIONS',\n\t\t\t\tselectorName: 'getEntityRecord',\n\t\t\t\targs: resolutionsArgs,\n\t\t\t} );\n\t\t}\n\t} finally {\n\t\tdispatch.__unstableReleaseStoreLock( lock );\n\t}\n};\n\ngetEntityRecords.shouldInvalidate = ( action, kind, name ) => {\n\treturn (\n\t\t( action.type === 'RECEIVE_ITEMS' || action.type === 'REMOVE_ITEMS' ) &&\n\t\taction.invalidateCache &&\n\t\tkind === action.kind &&\n\t\tname === action.name\n\t);\n};\n\n/**\n * Requests the current theme.\n */\nexport const getCurrentTheme = () => async ( { dispatch, resolveSelect } ) => {\n\tconst activeThemes = await resolveSelect.getEntityRecords(\n\t\t'root',\n\t\t'theme',\n\t\t{ status: 'active' }\n\t);\n\n\tdispatch.receiveCurrentTheme( activeThemes[ 0 ] );\n};\n\n/**\n * Requests theme supports data from the index.\n */\nexport const getThemeSupports = forwardResolver( 'getCurrentTheme' );\n\n/**\n * Requests a preview from the from the Embed API.\n *\n * @param {string} url URL to get the preview for.\n */\nexport const getEmbedPreview = ( url ) => async ( { dispatch } ) => {\n\ttry {\n\t\tconst embedProxyResponse = await apiFetch( {\n\t\t\tpath: addQueryArgs( '/oembed/1.0/proxy', { url } ),\n\t\t} );\n\t\tdispatch.receiveEmbedPreview( url, embedProxyResponse );\n\t} catch ( error ) {\n\t\t// Embed API 404s if the URL cannot be embedded, so we have to catch the error from the apiRequest here.\n\t\tdispatch.receiveEmbedPreview( url, false );\n\t}\n};\n\n/**\n * Checks whether the current user can perform the given action on the given\n * REST resource.\n *\n * @param {string} action Action to check. One of: 'create', 'read', 'update',\n * 'delete'.\n * @param {string} resource REST resource to check, e.g. 'media' or 'posts'.\n * @param {?string} id ID of the rest resource to check.\n */\nexport const canUser = ( action, resource, id ) => async ( { dispatch } ) => {\n\tconst methods = {\n\t\tcreate: 'POST',\n\t\tread: 'GET',\n\t\tupdate: 'PUT',\n\t\tdelete: 'DELETE',\n\t};\n\n\tconst method = methods[ action ];\n\tif ( ! method ) {\n\t\tthrow new Error( `'${ action }' is not a valid action.` );\n\t}\n\n\tconst path = id ? `/wp/v2/${ resource }/${ id }` : `/wp/v2/${ resource }`;\n\n\tlet response;\n\ttry {\n\t\tresponse = await apiFetch( {\n\t\t\tpath,\n\t\t\t// Ideally this would always be an OPTIONS request, but unfortunately there's\n\t\t\t// a bug in the REST API which causes the Allow header to not be sent on\n\t\t\t// OPTIONS requests to /posts/:id routes.\n\t\t\t// https://core.trac.wordpress.org/ticket/45753\n\t\t\tmethod: id ? 'GET' : 'OPTIONS',\n\t\t\tparse: false,\n\t\t} );\n\t} catch ( error ) {\n\t\t// Do nothing if our OPTIONS request comes back with an API error (4xx or\n\t\t// 5xx). The previously determined isAllowed value will remain in the store.\n\t\treturn;\n\t}\n\n\tlet allowHeader;\n\tif ( hasIn( response, [ 'headers', 'get' ] ) ) {\n\t\t// If the request is fetched using the fetch api, the header can be\n\t\t// retrieved using the 'get' method.\n\t\tallowHeader = response.headers.get( 'allow' );\n\t} else {\n\t\t// If the request was preloaded server-side and is returned by the\n\t\t// preloading middleware, the header will be a simple property.\n\t\tallowHeader = get( response, [ 'headers', 'Allow' ], '' );\n\t}\n\n\tconst key = compact( [ action, resource, id ] ).join( '/' );\n\tconst isAllowed = includes( allowHeader, method );\n\tdispatch.receiveUserPermission( key, isAllowed );\n};\n\n/**\n * Checks whether the current user can perform the given action on the given\n * REST resource.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {string} recordId Record's id.\n */\nexport const canUserEditEntityRecord = ( kind, name, recordId ) => async ( {\n\tdispatch,\n} ) => {\n\tconst entities = await dispatch( getKindEntities( kind ) );\n\tconst entity = find( entities, { kind, name } );\n\tif ( ! entity ) {\n\t\treturn;\n\t}\n\n\tconst resource = entity.__unstable_rest_base;\n\tawait dispatch( canUser( 'update', resource, recordId ) );\n};\n\n/**\n * Request autosave data from the REST API.\n *\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n */\nexport const getAutosaves = ( postType, postId ) => async ( {\n\tdispatch,\n\tresolveSelect,\n} ) => {\n\tconst { rest_base: restBase } = await resolveSelect.getPostType( postType );\n\tconst autosaves = await apiFetch( {\n\t\tpath: `/wp/v2/${ restBase }/${ postId }/autosaves?context=edit`,\n\t} );\n\n\tif ( autosaves && autosaves.length ) {\n\t\tdispatch.receiveAutosaves( postId, autosaves );\n\t}\n};\n\n/**\n * Request autosave data from the REST API.\n *\n * This resolver exists to ensure the underlying autosaves are fetched via\n * `getAutosaves` when a call to the `getAutosave` selector is made.\n *\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n */\nexport const getAutosave = ( postType, postId ) => async ( {\n\tresolveSelect,\n} ) => {\n\tawait resolveSelect.getAutosaves( postType, postId );\n};\n\n/**\n * Retrieve the frontend template used for a given link.\n *\n * @param {string} link Link.\n */\nexport const __experimentalGetTemplateForLink = ( link ) => async ( {\n\tdispatch,\n\tresolveSelect,\n} ) => {\n\t// Ideally this should be using an apiFetch call\n\t// We could potentially do so by adding a \"filter\" to the `wp_template` end point.\n\t// Also it seems the returned object is not a regular REST API post type.\n\tlet template;\n\ttry {\n\t\ttemplate = await window\n\t\t\t.fetch( addQueryArgs( link, { '_wp-find-template': true } ) )\n\t\t\t.then( ( res ) => res.json() )\n\t\t\t.then( ( { data } ) => data );\n\t} catch ( e ) {\n\t\t// For non-FSE themes, it is possible that this request returns an error.\n\t}\n\n\tif ( ! template ) {\n\t\treturn;\n\t}\n\n\tconst record = await resolveSelect.getEntityRecord(\n\t\t'postType',\n\t\t'wp_template',\n\t\ttemplate.id\n\t);\n\n\tif ( record ) {\n\t\tdispatch.receiveEntityRecords( 'postType', 'wp_template', [ record ], {\n\t\t\t'find-template': link,\n\t\t} );\n\t}\n};\n\n__experimentalGetTemplateForLink.shouldInvalidate = ( action ) => {\n\treturn (\n\t\t( action.type === 'RECEIVE_ITEMS' || action.type === 'REMOVE_ITEMS' ) &&\n\t\taction.invalidateCache &&\n\t\taction.kind === 'postType' &&\n\t\taction.name === 'wp_template'\n\t);\n};\n\nexport const __experimentalGetCurrentGlobalStylesId = () => async ( {\n\tdispatch,\n\tresolveSelect,\n} ) => {\n\tconst activeThemes = await resolveSelect.getEntityRecords(\n\t\t'root',\n\t\t'theme',\n\t\t{ status: 'active' }\n\t);\n\tconst globalStylesURL = get( activeThemes, [\n\t\t0,\n\t\t'_links',\n\t\t'wp:user-global-styles',\n\t\t0,\n\t\t'href',\n\t] );\n\tif ( globalStylesURL ) {\n\t\tconst globalStylesObject = await apiFetch( {\n\t\t\turl: globalStylesURL,\n\t\t} );\n\t\tdispatch.__experimentalReceiveCurrentGlobalStylesId(\n\t\t\tglobalStylesObject.id\n\t\t);\n\t}\n};\n\nexport const __experimentalGetCurrentThemeBaseGlobalStyles = () => async ( {\n\tresolveSelect,\n\tdispatch,\n} ) => {\n\tconst currentTheme = await resolveSelect.getCurrentTheme();\n\tconst themeGlobalStyles = await apiFetch( {\n\t\tpath: `/wp/v2/global-styles/themes/${ currentTheme.stylesheet }`,\n\t} );\n\tawait dispatch.__experimentalReceiveThemeBaseGlobalStyles(\n\t\tcurrentTheme.stylesheet,\n\t\tthemeGlobalStyles\n\t);\n};\n"]}
@@ -9,7 +9,6 @@ exports.getAuthors = getAuthors;
9
9
  exports.getCurrentUser = getCurrentUser;
10
10
  exports.getEntitiesByKind = getEntitiesByKind;
11
11
  exports.getEntity = getEntity;
12
- exports.getEntityRecord = getEntityRecord;
13
12
  exports.__experimentalGetEntityRecordNoResolver = __experimentalGetEntityRecordNoResolver;
14
13
  exports.hasEntityRecords = hasEntityRecords;
15
14
  exports.getEntityRecords = getEntityRecords;
@@ -25,6 +24,7 @@ exports.getRedoEdit = getRedoEdit;
25
24
  exports.hasUndo = hasUndo;
26
25
  exports.hasRedo = hasRedo;
27
26
  exports.getCurrentTheme = getCurrentTheme;
27
+ exports.__experimentalGetCurrentGlobalStylesId = __experimentalGetCurrentGlobalStylesId;
28
28
  exports.getThemeSupports = getThemeSupports;
29
29
  exports.getEmbedPreview = getEmbedPreview;
30
30
  exports.isPreviewEmbedFallback = isPreviewEmbedFallback;
@@ -33,7 +33,8 @@ exports.canUserEditEntityRecord = canUserEditEntityRecord;
33
33
  exports.getAutosaves = getAutosaves;
34
34
  exports.getAutosave = getAutosave;
35
35
  exports.__experimentalGetTemplateForLink = __experimentalGetTemplateForLink;
36
- exports.getReferenceByDistinctEdits = exports.hasFetchedAutosaves = exports.getEditedEntityRecord = exports.getEntityRecordNonTransientEdits = exports.__experimentalGetEntitiesBeingSaved = exports.__experimentalGetDirtyEntityRecords = exports.getRawEntityRecord = exports.getUserQueryResults = exports.isRequestingEmbedPreview = void 0;
36
+ exports.__experimentalGetCurrentThemeBaseGlobalStyles = __experimentalGetCurrentThemeBaseGlobalStyles;
37
+ exports.getReferenceByDistinctEdits = exports.hasFetchedAutosaves = exports.getEditedEntityRecord = exports.getEntityRecordNonTransientEdits = exports.__experimentalGetEntitiesBeingSaved = exports.__experimentalGetDirtyEntityRecords = exports.getRawEntityRecord = exports.getEntityRecord = exports.getUserQueryResults = exports.isRequestingEmbedPreview = void 0;
37
38
 
38
39
  var _rememo = _interopRequireDefault(require("rememo"));
39
40
 
@@ -65,6 +66,14 @@ var _utils = require("./utils");
65
66
  * Internal dependencies
66
67
  */
67
68
 
69
+ /**
70
+ * Shared reference to an empty object for cases where it is important to avoid
71
+ * returning a new object reference on every invocation, as in a connected or
72
+ * other pure component which performs `shouldComponentUpdate` check on props.
73
+ * This should be used as a last resort, since the normalized data should be
74
+ * maintained by the reducer result in state.
75
+ */
76
+ const EMPTY_OBJECT = {};
68
77
  /**
69
78
  * Shared reference to an empty array for cases where it is important to avoid
70
79
  * returning a new array reference on every invocation, as in a connected or
@@ -74,6 +83,7 @@ var _utils = require("./utils");
74
83
  *
75
84
  * @type {Array}
76
85
  */
86
+
77
87
  const EMPTY_ARRAY = [];
78
88
  /**
79
89
  * Returns true if a request is in progress for embed preview data, or false
@@ -183,7 +193,7 @@ function getEntity(state, kind, name) {
183
193
  */
184
194
 
185
195
 
186
- function getEntityRecord(state, kind, name, key, query) {
196
+ const getEntityRecord = (0, _rememo.default)((state, kind, name, key, query) => {
187
197
  var _query$context, _queriedState$items$c;
188
198
 
189
199
  const queriedState = (0, _lodash.get)(state.entities.data, [kind, name, 'queriedData']);
@@ -221,7 +231,12 @@ function getEntityRecord(state, kind, name, key, query) {
221
231
  }
222
232
 
223
233
  return item;
224
- }
234
+ }, (state, kind, name, recordId, query) => {
235
+ var _query$context2;
236
+
237
+ const context = (_query$context2 = query === null || query === void 0 ? void 0 : query.context) !== null && _query$context2 !== void 0 ? _query$context2 : 'default';
238
+ return [(0, _lodash.get)(state.entities.data, [kind, name, 'queriedData', 'items', context, recordId]), (0, _lodash.get)(state.entities.data, [kind, name, 'queriedData', 'itemIsComplete', context, recordId])];
239
+ });
225
240
  /**
226
241
  * Returns the Entity's record object by key. Doesn't trigger a resolver nor requests the entity from the API if the entity record isn't available in the local state.
227
242
  *
@@ -233,6 +248,7 @@ function getEntityRecord(state, kind, name, key, query) {
233
248
  * @return {Object|null} Record.
234
249
  */
235
250
 
251
+ exports.getEntityRecord = getEntityRecord;
236
252
 
237
253
  function __experimentalGetEntityRecordNoResolver(state, kind, name, key) {
238
254
  return getEntityRecord(state, kind, name, key);
@@ -253,13 +269,23 @@ function __experimentalGetEntityRecordNoResolver(state, kind, name, key) {
253
269
  const getRawEntityRecord = (0, _rememo.default)((state, kind, name, key) => {
254
270
  const record = getEntityRecord(state, kind, name, key);
255
271
  return record && Object.keys(record).reduce((accumulator, _key) => {
256
- // Because edits are the "raw" attribute values,
257
- // we return those from record selectors to make rendering,
258
- // comparisons, and joins with edits easier.
259
- accumulator[_key] = (0, _lodash.get)(record[_key], 'raw', record[_key]);
272
+ if ((0, _utils.isRawAttribute)(getEntity(state, kind, name), _key)) {
273
+ // Because edits are the "raw" attribute values,
274
+ // we return those from record selectors to make rendering,
275
+ // comparisons, and joins with edits easier.
276
+ accumulator[_key] = (0, _lodash.get)(record[_key], 'raw', record[_key]);
277
+ } else {
278
+ accumulator[_key] = record[_key];
279
+ }
280
+
260
281
  return accumulator;
261
282
  }, {});
262
- }, state => [state.entities.data]);
283
+ }, (state, kind, name, recordId, query) => {
284
+ var _query$context3;
285
+
286
+ const context = (_query$context3 = query === null || query === void 0 ? void 0 : query.context) !== null && _query$context3 !== void 0 ? _query$context3 : 'default';
287
+ return [state.entities.config, (0, _lodash.get)(state.entities.data, [kind, name, 'queriedData', 'items', context, recordId]), (0, _lodash.get)(state.entities.data, [kind, name, 'queriedData', 'itemIsComplete', context, recordId])];
288
+ });
263
289
  /**
264
290
  * Returns true if records have been received for the given set of parameters,
265
291
  * or false otherwise.
@@ -320,7 +346,9 @@ const __experimentalGetDirtyEntityRecords = (0, _rememo.default)(state => {
320
346
  const dirtyRecords = [];
321
347
  Object.keys(data).forEach(kind => {
322
348
  Object.keys(data[kind]).forEach(name => {
323
- const primaryKeys = Object.keys(data[kind][name].edits).filter(primaryKey => hasEditsForEntityRecord(state, kind, name, primaryKey));
349
+ const primaryKeys = Object.keys(data[kind][name].edits).filter(primaryKey => // The entity record must exist (not be deleted),
350
+ // and it must have edits.
351
+ getEntityRecord(state, kind, name, primaryKey) && hasEditsForEntityRecord(state, kind, name, primaryKey));
324
352
 
325
353
  if (primaryKeys.length) {
326
354
  const entity = getEntity(state, kind, name);
@@ -434,7 +462,7 @@ const getEntityRecordNonTransientEdits = (0, _rememo.default)((state, kind, name
434
462
 
435
463
  return acc;
436
464
  }, {});
437
- }, state => [state.entities.config, state.entities.data]);
465
+ }, (state, kind, name, recordId) => [state.entities.config, (0, _lodash.get)(state.entities.data, [kind, name, 'edits', recordId])]);
438
466
  /**
439
467
  * Returns true if the specified entity record has edits,
440
468
  * and false otherwise.
@@ -466,7 +494,12 @@ function hasEditsForEntityRecord(state, kind, name, recordId) {
466
494
 
467
495
  const getEditedEntityRecord = (0, _rememo.default)((state, kind, name, recordId) => ({ ...getRawEntityRecord(state, kind, name, recordId),
468
496
  ...getEntityRecordEdits(state, kind, name, recordId)
469
- }), state => [state.entities.data]);
497
+ }), (state, kind, name, recordId, query) => {
498
+ var _query$context4;
499
+
500
+ const context = (_query$context4 = query === null || query === void 0 ? void 0 : query.context) !== null && _query$context4 !== void 0 ? _query$context4 : 'default';
501
+ return [state.entities.config, (0, _lodash.get)(state.entities.data, [kind, name, 'queriedData', 'items', context, recordId]), (0, _lodash.get)(state.entities.data, [kind, name, 'queriedData', 'itemIsComplete', context, recordId]), (0, _lodash.get)(state.entities.data, [kind, name, 'edits', recordId])];
502
+ });
470
503
  /**
471
504
  * Returns true if the specified entity record is autosaving, and false otherwise.
472
505
  *
@@ -625,7 +658,19 @@ function hasRedo(state) {
625
658
 
626
659
 
627
660
  function getCurrentTheme(state) {
628
- return state.themes[state.currentTheme];
661
+ return getEntityRecord(state, 'root', 'theme', state.currentTheme);
662
+ }
663
+ /**
664
+ * Return the ID of the current global styles object.
665
+ *
666
+ * @param {Object} state Data state.
667
+ *
668
+ * @return {string} The current global styles ID.
669
+ */
670
+
671
+
672
+ function __experimentalGetCurrentGlobalStylesId(state) {
673
+ return state.currentGlobalStylesId;
629
674
  }
630
675
  /**
631
676
  * Return theme supports data in the index.
@@ -637,7 +682,9 @@ function getCurrentTheme(state) {
637
682
 
638
683
 
639
684
  function getThemeSupports(state) {
640
- return state.themeSupports;
685
+ var _getCurrentTheme$them, _getCurrentTheme;
686
+
687
+ return (_getCurrentTheme$them = (_getCurrentTheme = getCurrentTheme(state)) === null || _getCurrentTheme === void 0 ? void 0 : _getCurrentTheme.theme_supports) !== null && _getCurrentTheme$them !== void 0 ? _getCurrentTheme$them : EMPTY_OBJECT;
641
688
  }
642
689
  /**
643
690
  * Returns the embed preview for the given URL.
@@ -823,4 +870,22 @@ function __experimentalGetTemplateForLink(state, link) {
823
870
 
824
871
  return template;
825
872
  }
873
+ /**
874
+ * Retrieve the current theme's base global styles
875
+ *
876
+ * @param {Object} state Editor state.
877
+ *
878
+ * @return {Object?} The Global Styles object.
879
+ */
880
+
881
+
882
+ function __experimentalGetCurrentThemeBaseGlobalStyles(state) {
883
+ const currentTheme = getCurrentTheme(state);
884
+
885
+ if (!currentTheme) {
886
+ return null;
887
+ }
888
+
889
+ return state.themeBaseGlobalStyles[currentTheme.stylesheet];
890
+ }
826
891
  //# sourceMappingURL=selectors.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/selectors.js"],"names":["EMPTY_ARRAY","isRequestingEmbedPreview","select","state","url","STORE_NAME","isResolving","getAuthors","query","since","alternative","path","getUserQueryResults","getCurrentUser","currentUser","queryID","queryResults","users","queries","id","byId","getEntitiesByKind","kind","entities","config","getEntity","name","getEntityRecord","key","queriedState","data","undefined","context","itemIsComplete","items","item","_fields","filteredItem","fields","f","length","field","split","value","__experimentalGetEntityRecordNoResolver","getRawEntityRecord","record","Object","keys","reduce","accumulator","_key","hasEntityRecords","Array","isArray","getEntityRecords","__experimentalGetDirtyEntityRecords","dirtyRecords","forEach","primaryKeys","edits","filter","primaryKey","hasEditsForEntityRecord","entity","entityRecord","getEditedEntityRecord","push","DEFAULT_ENTITY_KEY","title","getTitle","__experimentalGetEntitiesBeingSaved","recordsBeingSaved","saving","isSavingEntityRecord","getEntityRecordEdits","recordId","getEntityRecordNonTransientEdits","transientEdits","acc","isAutosavingEntityRecord","pending","isAutosave","Boolean","isDeletingEntityRecord","getLastEntitySaveError","getLastEntityDeleteError","getCurrentUndoOffset","undo","offset","getUndoEdit","getRedoEdit","hasUndo","hasRedo","getCurrentTheme","themes","currentTheme","getThemeSupports","themeSupports","getEmbedPreview","embedPreviews","isPreviewEmbedFallback","preview","oEmbedLinkCheck","html","canUser","action","resource","join","canUserEditEntityRecord","__unstable_rest_base","getAutosaves","postType","postId","autosaves","getAutosave","authorId","author","hasFetchedAutosaves","hasFinishedResolution","getReferenceByDistinctEdits","flattenedUndo","__experimentalGetTemplateForLink","link","records","template"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport createSelector from 'rememo';\nimport { set, map, find, get, filter, compact } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { createRegistrySelector } from '@wordpress/data';\nimport { addQueryArgs } from '@wordpress/url';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport { STORE_NAME } from './name';\nimport { getQueriedItems } from './queried-data';\nimport { DEFAULT_ENTITY_KEY } from './entities';\nimport { getNormalizedCommaSeparable } from './utils';\n\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation, as in a connected or\n * other pure component which performs `shouldComponentUpdate` check on props.\n * This should be used as a last resort, since the normalized data should be\n * maintained by the reducer result in state.\n *\n * @type {Array}\n */\nconst EMPTY_ARRAY = [];\n\n/**\n * Returns true if a request is in progress for embed preview data, or false\n * otherwise.\n *\n * @param {Object} state Data state.\n * @param {string} url URL the preview would be for.\n *\n * @return {boolean} Whether a request is in progress for an embed preview.\n */\nexport const isRequestingEmbedPreview = createRegistrySelector(\n\t( select ) => ( state, url ) => {\n\t\treturn select( STORE_NAME ).isResolving( 'getEmbedPreview', [ url ] );\n\t}\n);\n\n/**\n * Returns all available authors.\n *\n * @deprecated since 11.3. Callers should use `select( 'core' ).getUsers({ who: 'authors' })` instead.\n *\n * @param {Object} state Data state.\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request.\n * @return {Array} Authors list.\n */\nexport function getAuthors( state, query ) {\n\tdeprecated( \"select( 'core' ).getAuthors()\", {\n\t\tsince: '5.9',\n\t\talternative: \"select( 'core' ).getUsers({ who: 'authors' })\",\n\t} );\n\n\tconst path = addQueryArgs(\n\t\t'/wp/v2/users/?who=authors&per_page=100',\n\t\tquery\n\t);\n\treturn getUserQueryResults( state, path );\n}\n\n/**\n * Returns the current user.\n *\n * @param {Object} state Data state.\n *\n * @return {Object} Current user object.\n */\nexport function getCurrentUser( state ) {\n\treturn state.currentUser;\n}\n\n/**\n * Returns all the users returned by a query ID.\n *\n * @param {Object} state Data state.\n * @param {string} queryID Query ID.\n *\n * @return {Array} Users list.\n */\nexport const getUserQueryResults = createSelector(\n\t( state, queryID ) => {\n\t\tconst queryResults = state.users.queries[ queryID ];\n\n\t\treturn map( queryResults, ( id ) => state.users.byId[ id ] );\n\t},\n\t( state, queryID ) => [ state.users.queries[ queryID ], state.users.byId ]\n);\n\n/**\n * Returns whether the entities for the give kind are loaded.\n *\n * @param {Object} state Data state.\n * @param {string} kind Entity kind.\n *\n * @return {Array<Object>} Array of entities with config matching kind.\n */\nexport function getEntitiesByKind( state, kind ) {\n\treturn filter( state.entities.config, { kind } );\n}\n\n/**\n * Returns the entity object given its kind and name.\n *\n * @param {Object} state Data state.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n *\n * @return {Object} Entity\n */\nexport function getEntity( state, kind, name ) {\n\treturn find( state.entities.config, { kind, name } );\n}\n\n/**\n * Returns the Entity's record object by key. Returns `null` if the value is not\n * yet received, undefined if the value entity is known to not exist, or the\n * entity object if it exists and is received.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} key Record's key\n * @param {?Object} query Optional query.\n *\n * @return {Object?} Record.\n */\nexport function getEntityRecord( state, kind, name, key, query ) {\n\tconst queriedState = get( state.entities.data, [\n\t\tkind,\n\t\tname,\n\t\t'queriedData',\n\t] );\n\tif ( ! queriedState ) {\n\t\treturn undefined;\n\t}\n\tconst context = query?.context ?? 'default';\n\n\tif ( query === undefined ) {\n\t\t// If expecting a complete item, validate that completeness.\n\t\tif ( ! queriedState.itemIsComplete[ context ]?.[ key ] ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn queriedState.items[ context ][ key ];\n\t}\n\n\tconst item = queriedState.items[ context ]?.[ key ];\n\tif ( item && query._fields ) {\n\t\tconst filteredItem = {};\n\t\tconst fields = getNormalizedCommaSeparable( query._fields );\n\t\tfor ( let f = 0; f < fields.length; f++ ) {\n\t\t\tconst field = fields[ f ].split( '.' );\n\t\t\tconst value = get( item, field );\n\t\t\tset( filteredItem, field, value );\n\t\t}\n\t\treturn filteredItem;\n\t}\n\n\treturn item;\n}\n\n/**\n * Returns the Entity's record object by key. Doesn't trigger a resolver nor requests the entity from the API if the entity record isn't available in the local state.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} key Record's key\n *\n * @return {Object|null} Record.\n */\nexport function __experimentalGetEntityRecordNoResolver(\n\tstate,\n\tkind,\n\tname,\n\tkey\n) {\n\treturn getEntityRecord( state, kind, name, key );\n}\n\n/**\n * Returns the entity's record object by key,\n * with its attributes mapped to their raw values.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} key Record's key.\n *\n * @return {Object?} Object with the entity's raw attributes.\n */\nexport const getRawEntityRecord = createSelector(\n\t( state, kind, name, key ) => {\n\t\tconst record = getEntityRecord( state, kind, name, key );\n\t\treturn (\n\t\t\trecord &&\n\t\t\tObject.keys( record ).reduce( ( accumulator, _key ) => {\n\t\t\t\t// Because edits are the \"raw\" attribute values,\n\t\t\t\t// we return those from record selectors to make rendering,\n\t\t\t\t// comparisons, and joins with edits easier.\n\t\t\t\taccumulator[ _key ] = get(\n\t\t\t\t\trecord[ _key ],\n\t\t\t\t\t'raw',\n\t\t\t\t\trecord[ _key ]\n\t\t\t\t);\n\t\t\t\treturn accumulator;\n\t\t\t}, {} )\n\t\t);\n\t},\n\t( state ) => [ state.entities.data ]\n);\n\n/**\n * Returns true if records have been received for the given set of parameters,\n * or false otherwise.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {?Object} query Optional terms query.\n *\n * @return {boolean} Whether entity records have been received.\n */\nexport function hasEntityRecords( state, kind, name, query ) {\n\treturn Array.isArray( getEntityRecords( state, kind, name, query ) );\n}\n\n/**\n * Returns the Entity's records.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {?Object} query Optional terms query.\n *\n * @return {?Array} Records.\n */\nexport function getEntityRecords( state, kind, name, query ) {\n\t// Queried data state is prepopulated for all known entities. If this is not\n\t// assigned for the given parameters, then it is known to not exist. Thus, a\n\t// return value of an empty array is used instead of `null` (where `null` is\n\t// otherwise used to represent an unknown state).\n\tconst queriedState = get( state.entities.data, [\n\t\tkind,\n\t\tname,\n\t\t'queriedData',\n\t] );\n\tif ( ! queriedState ) {\n\t\treturn EMPTY_ARRAY;\n\t}\n\treturn getQueriedItems( queriedState, query );\n}\n\n/**\n * Returns the list of dirty entity records.\n *\n * @param {Object} state State tree.\n *\n * @return {[{ title: string, key: string, name: string, kind: string }]} The list of updated records\n */\nexport const __experimentalGetDirtyEntityRecords = createSelector(\n\t( state ) => {\n\t\tconst {\n\t\t\tentities: { data },\n\t\t} = state;\n\t\tconst dirtyRecords = [];\n\t\tObject.keys( data ).forEach( ( kind ) => {\n\t\t\tObject.keys( data[ kind ] ).forEach( ( name ) => {\n\t\t\t\tconst primaryKeys = Object.keys(\n\t\t\t\t\tdata[ kind ][ name ].edits\n\t\t\t\t).filter( ( primaryKey ) =>\n\t\t\t\t\thasEditsForEntityRecord( state, kind, name, primaryKey )\n\t\t\t\t);\n\n\t\t\t\tif ( primaryKeys.length ) {\n\t\t\t\t\tconst entity = getEntity( state, kind, name );\n\t\t\t\t\tprimaryKeys.forEach( ( primaryKey ) => {\n\t\t\t\t\t\tconst entityRecord = getEditedEntityRecord(\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tprimaryKey\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdirtyRecords.push( {\n\t\t\t\t\t\t\t// We avoid using primaryKey because it's transformed into a string\n\t\t\t\t\t\t\t// when it's used as an object key.\n\t\t\t\t\t\t\tkey:\n\t\t\t\t\t\t\t\tentityRecord[\n\t\t\t\t\t\t\t\t\tentity.key || DEFAULT_ENTITY_KEY\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\ttitle: entity?.getTitle?.( entityRecord ) || '',\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\n\t\treturn dirtyRecords;\n\t},\n\t( state ) => [ state.entities.data ]\n);\n\n/**\n * Returns the list of entities currently being saved.\n *\n * @param {Object} state State tree.\n *\n * @return {[{ title: string, key: string, name: string, kind: string }]} The list of records being saved.\n */\nexport const __experimentalGetEntitiesBeingSaved = createSelector(\n\t( state ) => {\n\t\tconst {\n\t\t\tentities: { data },\n\t\t} = state;\n\t\tconst recordsBeingSaved = [];\n\t\tObject.keys( data ).forEach( ( kind ) => {\n\t\t\tObject.keys( data[ kind ] ).forEach( ( name ) => {\n\t\t\t\tconst primaryKeys = Object.keys(\n\t\t\t\t\tdata[ kind ][ name ].saving\n\t\t\t\t).filter( ( primaryKey ) =>\n\t\t\t\t\tisSavingEntityRecord( state, kind, name, primaryKey )\n\t\t\t\t);\n\n\t\t\t\tif ( primaryKeys.length ) {\n\t\t\t\t\tconst entity = getEntity( state, kind, name );\n\t\t\t\t\tprimaryKeys.forEach( ( primaryKey ) => {\n\t\t\t\t\t\tconst entityRecord = getEditedEntityRecord(\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tprimaryKey\n\t\t\t\t\t\t);\n\t\t\t\t\t\trecordsBeingSaved.push( {\n\t\t\t\t\t\t\t// We avoid using primaryKey because it's transformed into a string\n\t\t\t\t\t\t\t// when it's used as an object key.\n\t\t\t\t\t\t\tkey:\n\t\t\t\t\t\t\t\tentityRecord[\n\t\t\t\t\t\t\t\t\tentity.key || DEFAULT_ENTITY_KEY\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\ttitle: entity?.getTitle?.( entityRecord ) || '',\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t\treturn recordsBeingSaved;\n\t},\n\t( state ) => [ state.entities.data ]\n);\n\n/**\n * Returns the specified entity record's edits.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's edits.\n */\nexport function getEntityRecordEdits( state, kind, name, recordId ) {\n\treturn get( state.entities.data, [ kind, name, 'edits', recordId ] );\n}\n\n/**\n * Returns the specified entity record's non transient edits.\n *\n * Transient edits don't create an undo level, and\n * are not considered for change detection.\n * They are defined in the entity's config.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's non transient edits.\n */\nexport const getEntityRecordNonTransientEdits = createSelector(\n\t( state, kind, name, recordId ) => {\n\t\tconst { transientEdits } = getEntity( state, kind, name ) || {};\n\t\tconst edits = getEntityRecordEdits( state, kind, name, recordId ) || {};\n\t\tif ( ! transientEdits ) {\n\t\t\treturn edits;\n\t\t}\n\t\treturn Object.keys( edits ).reduce( ( acc, key ) => {\n\t\t\tif ( ! transientEdits[ key ] ) {\n\t\t\t\tacc[ key ] = edits[ key ];\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, {} );\n\t},\n\t( state ) => [ state.entities.config, state.entities.data ]\n);\n\n/**\n * Returns true if the specified entity record has edits,\n * and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {boolean} Whether the entity record has edits or not.\n */\nexport function hasEditsForEntityRecord( state, kind, name, recordId ) {\n\treturn (\n\t\tisSavingEntityRecord( state, kind, name, recordId ) ||\n\t\tObject.keys(\n\t\t\tgetEntityRecordNonTransientEdits( state, kind, name, recordId )\n\t\t).length > 0\n\t);\n}\n\n/**\n * Returns the specified entity record, merged with its edits.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record, merged with its edits.\n */\nexport const getEditedEntityRecord = createSelector(\n\t( state, kind, name, recordId ) => ( {\n\t\t...getRawEntityRecord( state, kind, name, recordId ),\n\t\t...getEntityRecordEdits( state, kind, name, recordId ),\n\t} ),\n\t( state ) => [ state.entities.data ]\n);\n\n/**\n * Returns true if the specified entity record is autosaving, and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {boolean} Whether the entity record is autosaving or not.\n */\nexport function isAutosavingEntityRecord( state, kind, name, recordId ) {\n\tconst { pending, isAutosave } = get(\n\t\tstate.entities.data,\n\t\t[ kind, name, 'saving', recordId ],\n\t\t{}\n\t);\n\treturn Boolean( pending && isAutosave );\n}\n\n/**\n * Returns true if the specified entity record is saving, and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {boolean} Whether the entity record is saving or not.\n */\nexport function isSavingEntityRecord( state, kind, name, recordId ) {\n\treturn get(\n\t\tstate.entities.data,\n\t\t[ kind, name, 'saving', recordId, 'pending' ],\n\t\tfalse\n\t);\n}\n\n/**\n * Returns true if the specified entity record is deleting, and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {boolean} Whether the entity record is deleting or not.\n */\nexport function isDeletingEntityRecord( state, kind, name, recordId ) {\n\treturn get(\n\t\tstate.entities.data,\n\t\t[ kind, name, 'deleting', recordId, 'pending' ],\n\t\tfalse\n\t);\n}\n\n/**\n * Returns the specified entity record's last save error.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's save error.\n */\nexport function getLastEntitySaveError( state, kind, name, recordId ) {\n\treturn get( state.entities.data, [\n\t\tkind,\n\t\tname,\n\t\t'saving',\n\t\trecordId,\n\t\t'error',\n\t] );\n}\n\n/**\n * Returns the specified entity record's last delete error.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's save error.\n */\nexport function getLastEntityDeleteError( state, kind, name, recordId ) {\n\treturn get( state.entities.data, [\n\t\tkind,\n\t\tname,\n\t\t'deleting',\n\t\trecordId,\n\t\t'error',\n\t] );\n}\n\n/**\n * Returns the current undo offset for the\n * entity records edits history. The offset\n * represents how many items from the end\n * of the history stack we are at. 0 is the\n * last edit, -1 is the second last, and so on.\n *\n * @param {Object} state State tree.\n *\n * @return {number} The current undo offset.\n */\nfunction getCurrentUndoOffset( state ) {\n\treturn state.undo.offset;\n}\n\n/**\n * Returns the previous edit from the current undo offset\n * for the entity records edits history, if any.\n *\n * @param {Object} state State tree.\n *\n * @return {Object?} The edit.\n */\nexport function getUndoEdit( state ) {\n\treturn state.undo[ state.undo.length - 2 + getCurrentUndoOffset( state ) ];\n}\n\n/**\n * Returns the next edit from the current undo offset\n * for the entity records edits history, if any.\n *\n * @param {Object} state State tree.\n *\n * @return {Object?} The edit.\n */\nexport function getRedoEdit( state ) {\n\treturn state.undo[ state.undo.length + getCurrentUndoOffset( state ) ];\n}\n\n/**\n * Returns true if there is a previous edit from the current undo offset\n * for the entity records edits history, and false otherwise.\n *\n * @param {Object} state State tree.\n *\n * @return {boolean} Whether there is a previous edit or not.\n */\nexport function hasUndo( state ) {\n\treturn Boolean( getUndoEdit( state ) );\n}\n\n/**\n * Returns true if there is a next edit from the current undo offset\n * for the entity records edits history, and false otherwise.\n *\n * @param {Object} state State tree.\n *\n * @return {boolean} Whether there is a next edit or not.\n */\nexport function hasRedo( state ) {\n\treturn Boolean( getRedoEdit( state ) );\n}\n\n/**\n * Return the current theme.\n *\n * @param {Object} state Data state.\n *\n * @return {Object} The current theme.\n */\nexport function getCurrentTheme( state ) {\n\treturn state.themes[ state.currentTheme ];\n}\n\n/**\n * Return theme supports data in the index.\n *\n * @param {Object} state Data state.\n *\n * @return {*} Index data.\n */\nexport function getThemeSupports( state ) {\n\treturn state.themeSupports;\n}\n\n/**\n * Returns the embed preview for the given URL.\n *\n * @param {Object} state Data state.\n * @param {string} url Embedded URL.\n *\n * @return {*} Undefined if the preview has not been fetched, otherwise, the preview fetched from the embed preview API.\n */\nexport function getEmbedPreview( state, url ) {\n\treturn state.embedPreviews[ url ];\n}\n\n/**\n * Determines if the returned preview is an oEmbed link fallback.\n *\n * WordPress can be configured to return a simple link to a URL if it is not embeddable.\n * We need to be able to determine if a URL is embeddable or not, based on what we\n * get back from the oEmbed preview API.\n *\n * @param {Object} state Data state.\n * @param {string} url Embedded URL.\n *\n * @return {boolean} Is the preview for the URL an oEmbed link fallback.\n */\nexport function isPreviewEmbedFallback( state, url ) {\n\tconst preview = state.embedPreviews[ url ];\n\tconst oEmbedLinkCheck = '<a href=\"' + url + '\">' + url + '</a>';\n\tif ( ! preview ) {\n\t\treturn false;\n\t}\n\treturn preview.html === oEmbedLinkCheck;\n}\n\n/**\n * Returns whether the current user can perform the given action on the given\n * REST resource.\n *\n * Calling this may trigger an OPTIONS request to the REST API via the\n * `canUser()` resolver.\n *\n * https://developer.wordpress.org/rest-api/reference/\n *\n * @param {Object} state Data state.\n * @param {string} action Action to check. One of: 'create', 'read', 'update', 'delete'.\n * @param {string} resource REST resource to check, e.g. 'media' or 'posts'.\n * @param {string=} id Optional ID of the rest resource to check.\n *\n * @return {boolean|undefined} Whether or not the user can perform the action,\n * or `undefined` if the OPTIONS request is still being made.\n */\nexport function canUser( state, action, resource, id ) {\n\tconst key = compact( [ action, resource, id ] ).join( '/' );\n\treturn get( state, [ 'userPermissions', key ] );\n}\n\n/**\n * Returns whether the current user can edit the given entity.\n *\n * Calling this may trigger an OPTIONS request to the REST API via the\n * `canUser()` resolver.\n *\n * https://developer.wordpress.org/rest-api/reference/\n *\n * @param {Object} state Data state.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {string} recordId Record's id.\n * @return {boolean|undefined} Whether or not the user can edit,\n * or `undefined` if the OPTIONS request is still being made.\n */\nexport function canUserEditEntityRecord( state, kind, name, recordId ) {\n\tconst entity = getEntity( state, kind, name );\n\tif ( ! entity ) {\n\t\treturn false;\n\t}\n\tconst resource = entity.__unstable_rest_base;\n\n\treturn canUser( state, 'update', resource, recordId );\n}\n\n/**\n * Returns the latest autosaves for the post.\n *\n * May return multiple autosaves since the backend stores one autosave per\n * author for each post.\n *\n * @param {Object} state State tree.\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n *\n * @return {?Array} An array of autosaves for the post, or undefined if there is none.\n */\nexport function getAutosaves( state, postType, postId ) {\n\treturn state.autosaves[ postId ];\n}\n\n/**\n * Returns the autosave for the post and author.\n *\n * @param {Object} state State tree.\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n * @param {number} authorId The id of the author.\n *\n * @return {?Object} The autosave for the post and author.\n */\nexport function getAutosave( state, postType, postId, authorId ) {\n\tif ( authorId === undefined ) {\n\t\treturn;\n\t}\n\n\tconst autosaves = state.autosaves[ postId ];\n\treturn find( autosaves, { author: authorId } );\n}\n\n/**\n * Returns true if the REST request for autosaves has completed.\n *\n * @param {Object} state State tree.\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n *\n * @return {boolean} True if the REST request was completed. False otherwise.\n */\nexport const hasFetchedAutosaves = createRegistrySelector(\n\t( select ) => ( state, postType, postId ) => {\n\t\treturn select( STORE_NAME ).hasFinishedResolution( 'getAutosaves', [\n\t\t\tpostType,\n\t\t\tpostId,\n\t\t] );\n\t}\n);\n\n/**\n * Returns a new reference when edited values have changed. This is useful in\n * inferring where an edit has been made between states by comparison of the\n * return values using strict equality.\n *\n * @example\n *\n * ```\n * const hasEditOccurred = (\n * getReferenceByDistinctEdits( beforeState ) !==\n * getReferenceByDistinctEdits( afterState )\n * );\n * ```\n *\n * @param {Object} state Editor state.\n *\n * @return {*} A value whose reference will change only when an edit occurs.\n */\nexport const getReferenceByDistinctEdits = createSelector(\n\t() => [],\n\t( state ) => [\n\t\tstate.undo.length,\n\t\tstate.undo.offset,\n\t\tstate.undo.flattenedUndo,\n\t]\n);\n\n/**\n * Retrieve the frontend template used for a given link.\n *\n * @param {Object} state Editor state.\n * @param {string} link Link.\n *\n * @return {Object?} The template record.\n */\nexport function __experimentalGetTemplateForLink( state, link ) {\n\tconst records = getEntityRecords( state, 'postType', 'wp_template', {\n\t\t'find-template': link,\n\t} );\n\n\tconst template = records?.length ? records[ 0 ] : null;\n\tif ( template ) {\n\t\treturn getEditedEntityRecord(\n\t\t\tstate,\n\t\t\t'postType',\n\t\t\t'wp_template',\n\t\t\ttemplate.id\n\t\t);\n\t}\n\treturn template;\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/selectors.js"],"names":["EMPTY_OBJECT","EMPTY_ARRAY","isRequestingEmbedPreview","select","state","url","STORE_NAME","isResolving","getAuthors","query","since","alternative","path","getUserQueryResults","getCurrentUser","currentUser","queryID","queryResults","users","queries","id","byId","getEntitiesByKind","kind","entities","config","getEntity","name","getEntityRecord","key","queriedState","data","undefined","context","itemIsComplete","items","item","_fields","filteredItem","fields","f","length","field","split","value","recordId","__experimentalGetEntityRecordNoResolver","getRawEntityRecord","record","Object","keys","reduce","accumulator","_key","hasEntityRecords","Array","isArray","getEntityRecords","__experimentalGetDirtyEntityRecords","dirtyRecords","forEach","primaryKeys","edits","filter","primaryKey","hasEditsForEntityRecord","entity","entityRecord","getEditedEntityRecord","push","DEFAULT_ENTITY_KEY","title","getTitle","__experimentalGetEntitiesBeingSaved","recordsBeingSaved","saving","isSavingEntityRecord","getEntityRecordEdits","getEntityRecordNonTransientEdits","transientEdits","acc","isAutosavingEntityRecord","pending","isAutosave","Boolean","isDeletingEntityRecord","getLastEntitySaveError","getLastEntityDeleteError","getCurrentUndoOffset","undo","offset","getUndoEdit","getRedoEdit","hasUndo","hasRedo","getCurrentTheme","currentTheme","__experimentalGetCurrentGlobalStylesId","currentGlobalStylesId","getThemeSupports","theme_supports","getEmbedPreview","embedPreviews","isPreviewEmbedFallback","preview","oEmbedLinkCheck","html","canUser","action","resource","join","canUserEditEntityRecord","__unstable_rest_base","getAutosaves","postType","postId","autosaves","getAutosave","authorId","author","hasFetchedAutosaves","hasFinishedResolution","getReferenceByDistinctEdits","flattenedUndo","__experimentalGetTemplateForLink","link","records","template","__experimentalGetCurrentThemeBaseGlobalStyles","themeBaseGlobalStyles","stylesheet"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport createSelector from 'rememo';\nimport { set, map, find, get, filter, compact } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { createRegistrySelector } from '@wordpress/data';\nimport { addQueryArgs } from '@wordpress/url';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport { STORE_NAME } from './name';\nimport { getQueriedItems } from './queried-data';\nimport { DEFAULT_ENTITY_KEY } from './entities';\nimport { getNormalizedCommaSeparable, isRawAttribute } from './utils';\n\n/**\n * Shared reference to an empty object for cases where it is important to avoid\n * returning a new object reference on every invocation, as in a connected or\n * other pure component which performs `shouldComponentUpdate` check on props.\n * This should be used as a last resort, since the normalized data should be\n * maintained by the reducer result in state.\n */\nconst EMPTY_OBJECT = {};\n\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation, as in a connected or\n * other pure component which performs `shouldComponentUpdate` check on props.\n * This should be used as a last resort, since the normalized data should be\n * maintained by the reducer result in state.\n *\n * @type {Array}\n */\nconst EMPTY_ARRAY = [];\n\n/**\n * Returns true if a request is in progress for embed preview data, or false\n * otherwise.\n *\n * @param {Object} state Data state.\n * @param {string} url URL the preview would be for.\n *\n * @return {boolean} Whether a request is in progress for an embed preview.\n */\nexport const isRequestingEmbedPreview = createRegistrySelector(\n\t( select ) => ( state, url ) => {\n\t\treturn select( STORE_NAME ).isResolving( 'getEmbedPreview', [ url ] );\n\t}\n);\n\n/**\n * Returns all available authors.\n *\n * @deprecated since 11.3. Callers should use `select( 'core' ).getUsers({ who: 'authors' })` instead.\n *\n * @param {Object} state Data state.\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request.\n * @return {Array} Authors list.\n */\nexport function getAuthors( state, query ) {\n\tdeprecated( \"select( 'core' ).getAuthors()\", {\n\t\tsince: '5.9',\n\t\talternative: \"select( 'core' ).getUsers({ who: 'authors' })\",\n\t} );\n\n\tconst path = addQueryArgs(\n\t\t'/wp/v2/users/?who=authors&per_page=100',\n\t\tquery\n\t);\n\treturn getUserQueryResults( state, path );\n}\n\n/**\n * Returns the current user.\n *\n * @param {Object} state Data state.\n *\n * @return {Object} Current user object.\n */\nexport function getCurrentUser( state ) {\n\treturn state.currentUser;\n}\n\n/**\n * Returns all the users returned by a query ID.\n *\n * @param {Object} state Data state.\n * @param {string} queryID Query ID.\n *\n * @return {Array} Users list.\n */\nexport const getUserQueryResults = createSelector(\n\t( state, queryID ) => {\n\t\tconst queryResults = state.users.queries[ queryID ];\n\n\t\treturn map( queryResults, ( id ) => state.users.byId[ id ] );\n\t},\n\t( state, queryID ) => [ state.users.queries[ queryID ], state.users.byId ]\n);\n\n/**\n * Returns whether the entities for the give kind are loaded.\n *\n * @param {Object} state Data state.\n * @param {string} kind Entity kind.\n *\n * @return {Array<Object>} Array of entities with config matching kind.\n */\nexport function getEntitiesByKind( state, kind ) {\n\treturn filter( state.entities.config, { kind } );\n}\n\n/**\n * Returns the entity object given its kind and name.\n *\n * @param {Object} state Data state.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n *\n * @return {Object} Entity\n */\nexport function getEntity( state, kind, name ) {\n\treturn find( state.entities.config, { kind, name } );\n}\n\n/**\n * Returns the Entity's record object by key. Returns `null` if the value is not\n * yet received, undefined if the value entity is known to not exist, or the\n * entity object if it exists and is received.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} key Record's key\n * @param {?Object} query Optional query.\n *\n * @return {Object?} Record.\n */\nexport const getEntityRecord = createSelector(\n\t( state, kind, name, key, query ) => {\n\t\tconst queriedState = get( state.entities.data, [\n\t\t\tkind,\n\t\t\tname,\n\t\t\t'queriedData',\n\t\t] );\n\t\tif ( ! queriedState ) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst context = query?.context ?? 'default';\n\n\t\tif ( query === undefined ) {\n\t\t\t// If expecting a complete item, validate that completeness.\n\t\t\tif ( ! queriedState.itemIsComplete[ context ]?.[ key ] ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn queriedState.items[ context ][ key ];\n\t\t}\n\n\t\tconst item = queriedState.items[ context ]?.[ key ];\n\t\tif ( item && query._fields ) {\n\t\t\tconst filteredItem = {};\n\t\t\tconst fields = getNormalizedCommaSeparable( query._fields );\n\t\t\tfor ( let f = 0; f < fields.length; f++ ) {\n\t\t\t\tconst field = fields[ f ].split( '.' );\n\t\t\t\tconst value = get( item, field );\n\t\t\t\tset( filteredItem, field, value );\n\t\t\t}\n\t\t\treturn filteredItem;\n\t\t}\n\n\t\treturn item;\n\t},\n\t( state, kind, name, recordId, query ) => {\n\t\tconst context = query?.context ?? 'default';\n\t\treturn [\n\t\t\tget( state.entities.data, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'items',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t\tget( state.entities.data, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'itemIsComplete',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t];\n\t}\n);\n\n/**\n * Returns the Entity's record object by key. Doesn't trigger a resolver nor requests the entity from the API if the entity record isn't available in the local state.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} key Record's key\n *\n * @return {Object|null} Record.\n */\nexport function __experimentalGetEntityRecordNoResolver(\n\tstate,\n\tkind,\n\tname,\n\tkey\n) {\n\treturn getEntityRecord( state, kind, name, key );\n}\n\n/**\n * Returns the entity's record object by key,\n * with its attributes mapped to their raw values.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} key Record's key.\n *\n * @return {Object?} Object with the entity's raw attributes.\n */\nexport const getRawEntityRecord = createSelector(\n\t( state, kind, name, key ) => {\n\t\tconst record = getEntityRecord( state, kind, name, key );\n\t\treturn (\n\t\t\trecord &&\n\t\t\tObject.keys( record ).reduce( ( accumulator, _key ) => {\n\t\t\t\tif ( isRawAttribute( getEntity( state, kind, name ), _key ) ) {\n\t\t\t\t\t// Because edits are the \"raw\" attribute values,\n\t\t\t\t\t// we return those from record selectors to make rendering,\n\t\t\t\t\t// comparisons, and joins with edits easier.\n\t\t\t\t\taccumulator[ _key ] = get(\n\t\t\t\t\t\trecord[ _key ],\n\t\t\t\t\t\t'raw',\n\t\t\t\t\t\trecord[ _key ]\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\taccumulator[ _key ] = record[ _key ];\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t}, {} )\n\t\t);\n\t},\n\t( state, kind, name, recordId, query ) => {\n\t\tconst context = query?.context ?? 'default';\n\t\treturn [\n\t\t\tstate.entities.config,\n\t\t\tget( state.entities.data, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'items',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t\tget( state.entities.data, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'itemIsComplete',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t];\n\t}\n);\n\n/**\n * Returns true if records have been received for the given set of parameters,\n * or false otherwise.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {?Object} query Optional terms query.\n *\n * @return {boolean} Whether entity records have been received.\n */\nexport function hasEntityRecords( state, kind, name, query ) {\n\treturn Array.isArray( getEntityRecords( state, kind, name, query ) );\n}\n\n/**\n * Returns the Entity's records.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {?Object} query Optional terms query.\n *\n * @return {?Array} Records.\n */\nexport function getEntityRecords( state, kind, name, query ) {\n\t// Queried data state is prepopulated for all known entities. If this is not\n\t// assigned for the given parameters, then it is known to not exist. Thus, a\n\t// return value of an empty array is used instead of `null` (where `null` is\n\t// otherwise used to represent an unknown state).\n\tconst queriedState = get( state.entities.data, [\n\t\tkind,\n\t\tname,\n\t\t'queriedData',\n\t] );\n\tif ( ! queriedState ) {\n\t\treturn EMPTY_ARRAY;\n\t}\n\treturn getQueriedItems( queriedState, query );\n}\n\n/**\n * Returns the list of dirty entity records.\n *\n * @param {Object} state State tree.\n *\n * @return {[{ title: string, key: string, name: string, kind: string }]} The list of updated records\n */\nexport const __experimentalGetDirtyEntityRecords = createSelector(\n\t( state ) => {\n\t\tconst {\n\t\t\tentities: { data },\n\t\t} = state;\n\t\tconst dirtyRecords = [];\n\t\tObject.keys( data ).forEach( ( kind ) => {\n\t\t\tObject.keys( data[ kind ] ).forEach( ( name ) => {\n\t\t\t\tconst primaryKeys = Object.keys(\n\t\t\t\t\tdata[ kind ][ name ].edits\n\t\t\t\t).filter(\n\t\t\t\t\t( primaryKey ) =>\n\t\t\t\t\t\t// The entity record must exist (not be deleted),\n\t\t\t\t\t\t// and it must have edits.\n\t\t\t\t\t\tgetEntityRecord( state, kind, name, primaryKey ) &&\n\t\t\t\t\t\thasEditsForEntityRecord( state, kind, name, primaryKey )\n\t\t\t\t);\n\n\t\t\t\tif ( primaryKeys.length ) {\n\t\t\t\t\tconst entity = getEntity( state, kind, name );\n\t\t\t\t\tprimaryKeys.forEach( ( primaryKey ) => {\n\t\t\t\t\t\tconst entityRecord = getEditedEntityRecord(\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tprimaryKey\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdirtyRecords.push( {\n\t\t\t\t\t\t\t// We avoid using primaryKey because it's transformed into a string\n\t\t\t\t\t\t\t// when it's used as an object key.\n\t\t\t\t\t\t\tkey:\n\t\t\t\t\t\t\t\tentityRecord[\n\t\t\t\t\t\t\t\t\tentity.key || DEFAULT_ENTITY_KEY\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\ttitle: entity?.getTitle?.( entityRecord ) || '',\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\n\t\treturn dirtyRecords;\n\t},\n\t( state ) => [ state.entities.data ]\n);\n\n/**\n * Returns the list of entities currently being saved.\n *\n * @param {Object} state State tree.\n *\n * @return {[{ title: string, key: string, name: string, kind: string }]} The list of records being saved.\n */\nexport const __experimentalGetEntitiesBeingSaved = createSelector(\n\t( state ) => {\n\t\tconst {\n\t\t\tentities: { data },\n\t\t} = state;\n\t\tconst recordsBeingSaved = [];\n\t\tObject.keys( data ).forEach( ( kind ) => {\n\t\t\tObject.keys( data[ kind ] ).forEach( ( name ) => {\n\t\t\t\tconst primaryKeys = Object.keys(\n\t\t\t\t\tdata[ kind ][ name ].saving\n\t\t\t\t).filter( ( primaryKey ) =>\n\t\t\t\t\tisSavingEntityRecord( state, kind, name, primaryKey )\n\t\t\t\t);\n\n\t\t\t\tif ( primaryKeys.length ) {\n\t\t\t\t\tconst entity = getEntity( state, kind, name );\n\t\t\t\t\tprimaryKeys.forEach( ( primaryKey ) => {\n\t\t\t\t\t\tconst entityRecord = getEditedEntityRecord(\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tprimaryKey\n\t\t\t\t\t\t);\n\t\t\t\t\t\trecordsBeingSaved.push( {\n\t\t\t\t\t\t\t// We avoid using primaryKey because it's transformed into a string\n\t\t\t\t\t\t\t// when it's used as an object key.\n\t\t\t\t\t\t\tkey:\n\t\t\t\t\t\t\t\tentityRecord[\n\t\t\t\t\t\t\t\t\tentity.key || DEFAULT_ENTITY_KEY\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\ttitle: entity?.getTitle?.( entityRecord ) || '',\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t\treturn recordsBeingSaved;\n\t},\n\t( state ) => [ state.entities.data ]\n);\n\n/**\n * Returns the specified entity record's edits.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's edits.\n */\nexport function getEntityRecordEdits( state, kind, name, recordId ) {\n\treturn get( state.entities.data, [ kind, name, 'edits', recordId ] );\n}\n\n/**\n * Returns the specified entity record's non transient edits.\n *\n * Transient edits don't create an undo level, and\n * are not considered for change detection.\n * They are defined in the entity's config.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's non transient edits.\n */\nexport const getEntityRecordNonTransientEdits = createSelector(\n\t( state, kind, name, recordId ) => {\n\t\tconst { transientEdits } = getEntity( state, kind, name ) || {};\n\t\tconst edits = getEntityRecordEdits( state, kind, name, recordId ) || {};\n\t\tif ( ! transientEdits ) {\n\t\t\treturn edits;\n\t\t}\n\t\treturn Object.keys( edits ).reduce( ( acc, key ) => {\n\t\t\tif ( ! transientEdits[ key ] ) {\n\t\t\t\tacc[ key ] = edits[ key ];\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, {} );\n\t},\n\t( state, kind, name, recordId ) => [\n\t\tstate.entities.config,\n\t\tget( state.entities.data, [ kind, name, 'edits', recordId ] ),\n\t]\n);\n\n/**\n * Returns true if the specified entity record has edits,\n * and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {boolean} Whether the entity record has edits or not.\n */\nexport function hasEditsForEntityRecord( state, kind, name, recordId ) {\n\treturn (\n\t\tisSavingEntityRecord( state, kind, name, recordId ) ||\n\t\tObject.keys(\n\t\t\tgetEntityRecordNonTransientEdits( state, kind, name, recordId )\n\t\t).length > 0\n\t);\n}\n\n/**\n * Returns the specified entity record, merged with its edits.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record, merged with its edits.\n */\nexport const getEditedEntityRecord = createSelector(\n\t( state, kind, name, recordId ) => ( {\n\t\t...getRawEntityRecord( state, kind, name, recordId ),\n\t\t...getEntityRecordEdits( state, kind, name, recordId ),\n\t} ),\n\t( state, kind, name, recordId, query ) => {\n\t\tconst context = query?.context ?? 'default';\n\t\treturn [\n\t\t\tstate.entities.config,\n\t\t\tget( state.entities.data, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'items',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t\tget( state.entities.data, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'itemIsComplete',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t\tget( state.entities.data, [ kind, name, 'edits', recordId ] ),\n\t\t];\n\t}\n);\n\n/**\n * Returns true if the specified entity record is autosaving, and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {boolean} Whether the entity record is autosaving or not.\n */\nexport function isAutosavingEntityRecord( state, kind, name, recordId ) {\n\tconst { pending, isAutosave } = get(\n\t\tstate.entities.data,\n\t\t[ kind, name, 'saving', recordId ],\n\t\t{}\n\t);\n\treturn Boolean( pending && isAutosave );\n}\n\n/**\n * Returns true if the specified entity record is saving, and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {boolean} Whether the entity record is saving or not.\n */\nexport function isSavingEntityRecord( state, kind, name, recordId ) {\n\treturn get(\n\t\tstate.entities.data,\n\t\t[ kind, name, 'saving', recordId, 'pending' ],\n\t\tfalse\n\t);\n}\n\n/**\n * Returns true if the specified entity record is deleting, and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {boolean} Whether the entity record is deleting or not.\n */\nexport function isDeletingEntityRecord( state, kind, name, recordId ) {\n\treturn get(\n\t\tstate.entities.data,\n\t\t[ kind, name, 'deleting', recordId, 'pending' ],\n\t\tfalse\n\t);\n}\n\n/**\n * Returns the specified entity record's last save error.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's save error.\n */\nexport function getLastEntitySaveError( state, kind, name, recordId ) {\n\treturn get( state.entities.data, [\n\t\tkind,\n\t\tname,\n\t\t'saving',\n\t\trecordId,\n\t\t'error',\n\t] );\n}\n\n/**\n * Returns the specified entity record's last delete error.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's save error.\n */\nexport function getLastEntityDeleteError( state, kind, name, recordId ) {\n\treturn get( state.entities.data, [\n\t\tkind,\n\t\tname,\n\t\t'deleting',\n\t\trecordId,\n\t\t'error',\n\t] );\n}\n\n/**\n * Returns the current undo offset for the\n * entity records edits history. The offset\n * represents how many items from the end\n * of the history stack we are at. 0 is the\n * last edit, -1 is the second last, and so on.\n *\n * @param {Object} state State tree.\n *\n * @return {number} The current undo offset.\n */\nfunction getCurrentUndoOffset( state ) {\n\treturn state.undo.offset;\n}\n\n/**\n * Returns the previous edit from the current undo offset\n * for the entity records edits history, if any.\n *\n * @param {Object} state State tree.\n *\n * @return {Object?} The edit.\n */\nexport function getUndoEdit( state ) {\n\treturn state.undo[ state.undo.length - 2 + getCurrentUndoOffset( state ) ];\n}\n\n/**\n * Returns the next edit from the current undo offset\n * for the entity records edits history, if any.\n *\n * @param {Object} state State tree.\n *\n * @return {Object?} The edit.\n */\nexport function getRedoEdit( state ) {\n\treturn state.undo[ state.undo.length + getCurrentUndoOffset( state ) ];\n}\n\n/**\n * Returns true if there is a previous edit from the current undo offset\n * for the entity records edits history, and false otherwise.\n *\n * @param {Object} state State tree.\n *\n * @return {boolean} Whether there is a previous edit or not.\n */\nexport function hasUndo( state ) {\n\treturn Boolean( getUndoEdit( state ) );\n}\n\n/**\n * Returns true if there is a next edit from the current undo offset\n * for the entity records edits history, and false otherwise.\n *\n * @param {Object} state State tree.\n *\n * @return {boolean} Whether there is a next edit or not.\n */\nexport function hasRedo( state ) {\n\treturn Boolean( getRedoEdit( state ) );\n}\n\n/**\n * Return the current theme.\n *\n * @param {Object} state Data state.\n *\n * @return {Object} The current theme.\n */\nexport function getCurrentTheme( state ) {\n\treturn getEntityRecord( state, 'root', 'theme', state.currentTheme );\n}\n\n/**\n * Return the ID of the current global styles object.\n *\n * @param {Object} state Data state.\n *\n * @return {string} The current global styles ID.\n */\nexport function __experimentalGetCurrentGlobalStylesId( state ) {\n\treturn state.currentGlobalStylesId;\n}\n\n/**\n * Return theme supports data in the index.\n *\n * @param {Object} state Data state.\n *\n * @return {*} Index data.\n */\nexport function getThemeSupports( state ) {\n\treturn getCurrentTheme( state )?.theme_supports ?? EMPTY_OBJECT;\n}\n\n/**\n * Returns the embed preview for the given URL.\n *\n * @param {Object} state Data state.\n * @param {string} url Embedded URL.\n *\n * @return {*} Undefined if the preview has not been fetched, otherwise, the preview fetched from the embed preview API.\n */\nexport function getEmbedPreview( state, url ) {\n\treturn state.embedPreviews[ url ];\n}\n\n/**\n * Determines if the returned preview is an oEmbed link fallback.\n *\n * WordPress can be configured to return a simple link to a URL if it is not embeddable.\n * We need to be able to determine if a URL is embeddable or not, based on what we\n * get back from the oEmbed preview API.\n *\n * @param {Object} state Data state.\n * @param {string} url Embedded URL.\n *\n * @return {boolean} Is the preview for the URL an oEmbed link fallback.\n */\nexport function isPreviewEmbedFallback( state, url ) {\n\tconst preview = state.embedPreviews[ url ];\n\tconst oEmbedLinkCheck = '<a href=\"' + url + '\">' + url + '</a>';\n\tif ( ! preview ) {\n\t\treturn false;\n\t}\n\treturn preview.html === oEmbedLinkCheck;\n}\n\n/**\n * Returns whether the current user can perform the given action on the given\n * REST resource.\n *\n * Calling this may trigger an OPTIONS request to the REST API via the\n * `canUser()` resolver.\n *\n * https://developer.wordpress.org/rest-api/reference/\n *\n * @param {Object} state Data state.\n * @param {string} action Action to check. One of: 'create', 'read', 'update', 'delete'.\n * @param {string} resource REST resource to check, e.g. 'media' or 'posts'.\n * @param {string=} id Optional ID of the rest resource to check.\n *\n * @return {boolean|undefined} Whether or not the user can perform the action,\n * or `undefined` if the OPTIONS request is still being made.\n */\nexport function canUser( state, action, resource, id ) {\n\tconst key = compact( [ action, resource, id ] ).join( '/' );\n\treturn get( state, [ 'userPermissions', key ] );\n}\n\n/**\n * Returns whether the current user can edit the given entity.\n *\n * Calling this may trigger an OPTIONS request to the REST API via the\n * `canUser()` resolver.\n *\n * https://developer.wordpress.org/rest-api/reference/\n *\n * @param {Object} state Data state.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {string} recordId Record's id.\n * @return {boolean|undefined} Whether or not the user can edit,\n * or `undefined` if the OPTIONS request is still being made.\n */\nexport function canUserEditEntityRecord( state, kind, name, recordId ) {\n\tconst entity = getEntity( state, kind, name );\n\tif ( ! entity ) {\n\t\treturn false;\n\t}\n\tconst resource = entity.__unstable_rest_base;\n\n\treturn canUser( state, 'update', resource, recordId );\n}\n\n/**\n * Returns the latest autosaves for the post.\n *\n * May return multiple autosaves since the backend stores one autosave per\n * author for each post.\n *\n * @param {Object} state State tree.\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n *\n * @return {?Array} An array of autosaves for the post, or undefined if there is none.\n */\nexport function getAutosaves( state, postType, postId ) {\n\treturn state.autosaves[ postId ];\n}\n\n/**\n * Returns the autosave for the post and author.\n *\n * @param {Object} state State tree.\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n * @param {number} authorId The id of the author.\n *\n * @return {?Object} The autosave for the post and author.\n */\nexport function getAutosave( state, postType, postId, authorId ) {\n\tif ( authorId === undefined ) {\n\t\treturn;\n\t}\n\n\tconst autosaves = state.autosaves[ postId ];\n\treturn find( autosaves, { author: authorId } );\n}\n\n/**\n * Returns true if the REST request for autosaves has completed.\n *\n * @param {Object} state State tree.\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n *\n * @return {boolean} True if the REST request was completed. False otherwise.\n */\nexport const hasFetchedAutosaves = createRegistrySelector(\n\t( select ) => ( state, postType, postId ) => {\n\t\treturn select( STORE_NAME ).hasFinishedResolution( 'getAutosaves', [\n\t\t\tpostType,\n\t\t\tpostId,\n\t\t] );\n\t}\n);\n\n/**\n * Returns a new reference when edited values have changed. This is useful in\n * inferring where an edit has been made between states by comparison of the\n * return values using strict equality.\n *\n * @example\n *\n * ```\n * const hasEditOccurred = (\n * getReferenceByDistinctEdits( beforeState ) !==\n * getReferenceByDistinctEdits( afterState )\n * );\n * ```\n *\n * @param {Object} state Editor state.\n *\n * @return {*} A value whose reference will change only when an edit occurs.\n */\nexport const getReferenceByDistinctEdits = createSelector(\n\t() => [],\n\t( state ) => [\n\t\tstate.undo.length,\n\t\tstate.undo.offset,\n\t\tstate.undo.flattenedUndo,\n\t]\n);\n\n/**\n * Retrieve the frontend template used for a given link.\n *\n * @param {Object} state Editor state.\n * @param {string} link Link.\n *\n * @return {Object?} The template record.\n */\nexport function __experimentalGetTemplateForLink( state, link ) {\n\tconst records = getEntityRecords( state, 'postType', 'wp_template', {\n\t\t'find-template': link,\n\t} );\n\n\tconst template = records?.length ? records[ 0 ] : null;\n\tif ( template ) {\n\t\treturn getEditedEntityRecord(\n\t\t\tstate,\n\t\t\t'postType',\n\t\t\t'wp_template',\n\t\t\ttemplate.id\n\t\t);\n\t}\n\treturn template;\n}\n\n/**\n * Retrieve the current theme's base global styles\n *\n * @param {Object} state Editor state.\n *\n * @return {Object?} The Global Styles object.\n */\nexport function __experimentalGetCurrentThemeBaseGlobalStyles( state ) {\n\tconst currentTheme = getCurrentTheme( state );\n\tif ( ! currentTheme ) {\n\t\treturn null;\n\t}\n\treturn state.themeBaseGlobalStyles[ currentTheme.stylesheet ];\n}\n"]}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ /**
9
+ * Higher-order function which forward the resolution to another resolver with the same arguments.
10
+ *
11
+ * @param {string} resolverName forwarded resolver.
12
+ *
13
+ * @return {Function} Enhanced resolver.
14
+ */
15
+ const forwardResolver = resolverName => (...args) => async ({
16
+ resolveSelect
17
+ }) => {
18
+ await resolveSelect[resolverName](...args);
19
+ };
20
+
21
+ var _default = forwardResolver;
22
+ exports.default = _default;
23
+ //# sourceMappingURL=forward-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/core-data/src/utils/forward-resolver.js"],"names":["forwardResolver","resolverName","args","resolveSelect"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,eAAe,GAAKC,YAAF,IAAoB,CAAE,GAAGC,IAAL,KAAe,OAAQ;AAClEC,EAAAA;AADkE,CAAR,KAEpD;AACN,QAAMA,aAAa,CAAEF,YAAF,CAAb,CAA+B,GAAGC,IAAlC,CAAN;AACA,CAJD;;eAMeF,e","sourcesContent":["/**\n * Higher-order function which forward the resolution to another resolver with the same arguments.\n *\n * @param {string} resolverName forwarded resolver.\n *\n * @return {Function} Enhanced resolver.\n */\nconst forwardResolver = ( resolverName ) => ( ...args ) => async ( {\n\tresolveSelect,\n} ) => {\n\tawait resolveSelect[ resolverName ]( ...args );\n};\n\nexport default forwardResolver;\n"]}
@@ -23,10 +23,10 @@ Object.defineProperty(exports, "ifMatchingAction", {
23
23
  return _ifMatchingAction.default;
24
24
  }
25
25
  });
26
- Object.defineProperty(exports, "ifNotResolved", {
26
+ Object.defineProperty(exports, "forwardResolver", {
27
27
  enumerable: true,
28
28
  get: function () {
29
- return _ifNotResolved.default;
29
+ return _forwardResolver.default;
30
30
  }
31
31
  });
32
32
  Object.defineProperty(exports, "onSubKey", {
@@ -47,6 +47,12 @@ Object.defineProperty(exports, "withWeakMapCache", {
47
47
  return _withWeakMapCache.default;
48
48
  }
49
49
  });
50
+ Object.defineProperty(exports, "isRawAttribute", {
51
+ enumerable: true,
52
+ get: function () {
53
+ return _isRawAttribute.default;
54
+ }
55
+ });
50
56
 
51
57
  var _conservativeMapItem = _interopRequireDefault(require("./conservative-map-item"));
52
58
 
@@ -54,11 +60,13 @@ var _getNormalizedCommaSeparable = _interopRequireDefault(require("./get-normali
54
60
 
55
61
  var _ifMatchingAction = _interopRequireDefault(require("./if-matching-action"));
56
62
 
57
- var _ifNotResolved = _interopRequireDefault(require("./if-not-resolved"));
63
+ var _forwardResolver = _interopRequireDefault(require("./forward-resolver"));
58
64
 
59
65
  var _onSubKey = _interopRequireDefault(require("./on-sub-key"));
60
66
 
61
67
  var _replaceAction = _interopRequireDefault(require("./replace-action"));
62
68
 
63
69
  var _withWeakMapCache = _interopRequireDefault(require("./with-weak-map-cache"));
70
+
71
+ var _isRawAttribute = _interopRequireDefault(require("./is-raw-attribute"));
64
72
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/utils/index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA","sourcesContent":["export { default as conservativeMapItem } from './conservative-map-item';\nexport { default as getNormalizedCommaSeparable } from './get-normalized-comma-separable';\nexport { default as ifMatchingAction } from './if-matching-action';\nexport { default as ifNotResolved } from './if-not-resolved';\nexport { default as onSubKey } from './on-sub-key';\nexport { default as replaceAction } from './replace-action';\nexport { default as withWeakMapCache } from './with-weak-map-cache';\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/utils/index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA","sourcesContent":["export { default as conservativeMapItem } from './conservative-map-item';\nexport { default as getNormalizedCommaSeparable } from './get-normalized-comma-separable';\nexport { default as ifMatchingAction } from './if-matching-action';\nexport { default as forwardResolver } from './forward-resolver';\nexport { default as onSubKey } from './on-sub-key';\nexport { default as replaceAction } from './replace-action';\nexport { default as withWeakMapCache } from './with-weak-map-cache';\nexport { default as isRawAttribute } from './is-raw-attribute';\n"]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = isRawAttribute;
7
+
8
+ /**
9
+ * Checks whether the attribute is a "raw" attribute or not.
10
+ *
11
+ * @param {Object} entity Entity data.
12
+ * @param {string} attribute Attribute name.
13
+ *
14
+ * @return {boolean} Is the attribute raw
15
+ */
16
+ function isRawAttribute(entity, attribute) {
17
+ return (entity.rawAttributes || []).includes(attribute);
18
+ }
19
+ //# sourceMappingURL=is-raw-attribute.js.map