@wordpress/core-data 4.2.1 → 4.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +68 -11
  3. package/build/actions.js +61 -41
  4. package/build/actions.js.map +1 -1
  5. package/build/batch/default-processor.js +1 -1
  6. package/build/batch/default-processor.js.map +1 -1
  7. package/build/entities.js +36 -23
  8. package/build/entities.js.map +1 -1
  9. package/build/entity-provider.js +46 -44
  10. package/build/entity-provider.js.map +1 -1
  11. package/build/entity-types/{base-entity-types.js → base-entity-records.js} +9 -9
  12. package/build/entity-types/base-entity-records.js.map +1 -0
  13. package/build/fetch/__experimental-fetch-link-suggestions.js +48 -11
  14. package/build/fetch/__experimental-fetch-link-suggestions.js.map +1 -1
  15. package/build/fetch/__experimental-fetch-url-data.js +1 -1
  16. package/build/fetch/__experimental-fetch-url-data.js.map +1 -1
  17. package/build/hooks/use-entity-record.js +15 -5
  18. package/build/hooks/use-entity-record.js.map +1 -1
  19. package/build/hooks/use-entity-records.js +14 -2
  20. package/build/hooks/use-entity-records.js.map +1 -1
  21. package/build/hooks/use-query-select.js.map +1 -1
  22. package/build/index.js +9 -21
  23. package/build/index.js.map +1 -1
  24. package/build/queried-data/actions.js +4 -4
  25. package/build/queried-data/actions.js.map +1 -1
  26. package/build/queried-data/get-query-parts.js +7 -3
  27. package/build/queried-data/get-query-parts.js.map +1 -1
  28. package/build/queried-data/reducer.js +8 -6
  29. package/build/queried-data/reducer.js.map +1 -1
  30. package/build/reducer.js +77 -25
  31. package/build/reducer.js.map +1 -1
  32. package/build/resolvers.js +60 -24
  33. package/build/resolvers.js.map +1 -1
  34. package/build/selectors.js +122 -55
  35. package/build/selectors.js.map +1 -1
  36. package/build/types.js +6 -0
  37. package/build/types.js.map +1 -0
  38. package/build/utils/conservative-map-item.js +1 -1
  39. package/build/utils/conservative-map-item.js.map +1 -1
  40. package/build/utils/if-matching-action.js +4 -2
  41. package/build/utils/if-matching-action.js.map +1 -1
  42. package/build/utils/is-raw-attribute.js +1 -1
  43. package/build/utils/is-raw-attribute.js.map +1 -1
  44. package/build/utils/on-sub-key.js +3 -1
  45. package/build/utils/on-sub-key.js.map +1 -1
  46. package/build/utils/replace-action.js +4 -2
  47. package/build/utils/replace-action.js.map +1 -1
  48. package/build-module/actions.js +62 -42
  49. package/build-module/actions.js.map +1 -1
  50. package/build-module/batch/default-processor.js +1 -1
  51. package/build-module/batch/default-processor.js.map +1 -1
  52. package/build-module/entities.js +32 -19
  53. package/build-module/entities.js.map +1 -1
  54. package/build-module/entity-provider.js +47 -45
  55. package/build-module/entity-provider.js.map +1 -1
  56. package/build-module/entity-types/{base-entity-types.js → base-entity-records.js} +7 -7
  57. package/build-module/entity-types/base-entity-records.js.map +1 -0
  58. package/build-module/fetch/__experimental-fetch-link-suggestions.js +48 -11
  59. package/build-module/fetch/__experimental-fetch-link-suggestions.js.map +1 -1
  60. package/build-module/fetch/__experimental-fetch-url-data.js +1 -1
  61. package/build-module/fetch/__experimental-fetch-url-data.js.map +1 -1
  62. package/build-module/hooks/use-entity-record.js +15 -5
  63. package/build-module/hooks/use-entity-record.js.map +1 -1
  64. package/build-module/hooks/use-entity-records.js +14 -2
  65. package/build-module/hooks/use-entity-records.js.map +1 -1
  66. package/build-module/hooks/use-query-select.js.map +1 -1
  67. package/build-module/index.js +10 -22
  68. package/build-module/index.js.map +1 -1
  69. package/build-module/queried-data/actions.js +4 -4
  70. package/build-module/queried-data/actions.js.map +1 -1
  71. package/build-module/queried-data/get-query-parts.js +7 -3
  72. package/build-module/queried-data/get-query-parts.js.map +1 -1
  73. package/build-module/queried-data/reducer.js +8 -6
  74. package/build-module/queried-data/reducer.js.map +1 -1
  75. package/build-module/reducer.js +75 -26
  76. package/build-module/reducer.js.map +1 -1
  77. package/build-module/resolvers.js +55 -25
  78. package/build-module/resolvers.js.map +1 -1
  79. package/build-module/selectors.js +114 -55
  80. package/build-module/selectors.js.map +1 -1
  81. package/build-module/types.js +2 -0
  82. package/build-module/types.js.map +1 -0
  83. package/build-module/utils/conservative-map-item.js +1 -1
  84. package/build-module/utils/conservative-map-item.js.map +1 -1
  85. package/build-module/utils/if-matching-action.js +4 -2
  86. package/build-module/utils/if-matching-action.js.map +1 -1
  87. package/build-module/utils/is-raw-attribute.js +1 -1
  88. package/build-module/utils/is-raw-attribute.js.map +1 -1
  89. package/build-module/utils/on-sub-key.js +3 -1
  90. package/build-module/utils/on-sub-key.js.map +1 -1
  91. package/build-module/utils/replace-action.js +4 -2
  92. package/build-module/utils/replace-action.js.map +1 -1
  93. package/package.json +11 -11
  94. package/src/actions.js +62 -42
  95. package/src/batch/default-processor.js +1 -0
  96. package/src/{entities.js → entities.ts} +50 -21
  97. package/src/entity-provider.js +50 -44
  98. package/src/entity-types/attachment.ts +5 -5
  99. package/src/entity-types/{base-entity-types.ts → base-entity-records.ts} +5 -5
  100. package/src/entity-types/comment.ts +5 -5
  101. package/src/entity-types/helpers.ts +1 -1
  102. package/src/entity-types/index.ts +4 -4
  103. package/src/entity-types/menu-location.ts +5 -5
  104. package/src/entity-types/nav-menu-item.ts +10 -5
  105. package/src/entity-types/nav-menu.ts +5 -5
  106. package/src/entity-types/navigation-area.ts +5 -5
  107. package/src/entity-types/page.ts +5 -5
  108. package/src/entity-types/plugin.ts +10 -5
  109. package/src/entity-types/post.ts +5 -5
  110. package/src/entity-types/settings.ts +10 -5
  111. package/src/entity-types/sidebar.ts +6 -7
  112. package/src/entity-types/taxonomy.ts +5 -5
  113. package/src/entity-types/theme.ts +5 -5
  114. package/src/entity-types/type.ts +5 -5
  115. package/src/entity-types/user.ts +10 -5
  116. package/src/entity-types/widget-type.ts +5 -5
  117. package/src/entity-types/widget.ts +5 -5
  118. package/src/entity-types/wp-template-part.ts +5 -5
  119. package/src/entity-types/wp-template.ts +5 -5
  120. package/src/fetch/__experimental-fetch-link-suggestions.js +56 -20
  121. package/src/fetch/__experimental-fetch-url-data.js +1 -0
  122. package/src/fetch/test/__experimental-fetch-link-suggestions.js +39 -1
  123. package/src/hooks/use-entity-record.ts +19 -8
  124. package/src/hooks/use-entity-records.ts +23 -6
  125. package/src/hooks/use-query-select.ts +12 -7
  126. package/src/index.js +10 -15
  127. package/src/locks/test/selectors.js +4 -4
  128. package/src/queried-data/actions.js +4 -4
  129. package/src/queried-data/get-query-parts.js +5 -5
  130. package/src/queried-data/reducer.js +6 -6
  131. package/src/reducer.js +67 -24
  132. package/src/resolvers.js +52 -31
  133. package/src/{selectors.js → selectors.ts} +118 -57
  134. package/src/test/actions.js +138 -33
  135. package/src/test/entities.js +11 -11
  136. package/src/test/reducer.js +4 -4
  137. package/src/test/resolvers.js +5 -5
  138. package/src/test/selectors.js +22 -22
  139. package/src/types.ts +3 -0
  140. package/src/utils/conservative-map-item.js +1 -1
  141. package/src/utils/if-matching-action.js +4 -2
  142. package/src/utils/is-raw-attribute.js +1 -1
  143. package/src/utils/on-sub-key.js +3 -1
  144. package/src/utils/replace-action.js +4 -2
  145. package/src/utils/test/is-raw-attribute.js +4 -4
  146. package/build/entity-types/base-entity-types.js.map +0 -1
  147. package/build-module/entity-types/base-entity-types.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/selectors.js"],"names":["EMPTY_OBJECT","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","__experimentalGetCurrentThemeGlobalStylesVariations","themeGlobalStyleVariations"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport createSelector from 'rememo';\nimport { set, map, find, get, filter, compact } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { createRegistrySelector } from '@wordpress/data';\nimport { addQueryArgs } from '@wordpress/url';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport { STORE_NAME } from './name';\nimport { getQueriedItems } from './queried-data';\nimport { DEFAULT_ENTITY_KEY } from './entities';\nimport { getNormalizedCommaSeparable, isRawAttribute } from './utils';\n\n/**\n * Shared reference to an empty object for cases where it is important to avoid\n * returning a new object reference on every invocation, as in a connected or\n * other pure component which performs `shouldComponentUpdate` check on props.\n * This should be used as a last resort, since the normalized data should be\n * maintained by the reducer result in state.\n */\nconst EMPTY_OBJECT = {};\n\n/**\n * Returns true if a request is in progress for embed preview data, or false\n * otherwise.\n *\n * @param {Object} state Data state.\n * @param {string} url URL the preview would be for.\n *\n * @return {boolean} Whether a request is in progress for an embed preview.\n */\nexport const isRequestingEmbedPreview = createRegistrySelector(\n\t( select ) => ( state, url ) => {\n\t\treturn select( STORE_NAME ).isResolving( 'getEmbedPreview', [ url ] );\n\t}\n);\n\n/**\n * Returns all available authors.\n *\n * @deprecated since 11.3. Callers should use `select( 'core' ).getUsers({ who: 'authors' })` instead.\n *\n * @param {Object} state Data state.\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request.\n * @return {Array} Authors list.\n */\nexport function getAuthors( state, query ) {\n\tdeprecated( \"select( 'core' ).getAuthors()\", {\n\t\tsince: '5.9',\n\t\talternative: \"select( 'core' ).getUsers({ who: 'authors' })\",\n\t} );\n\n\tconst path = addQueryArgs(\n\t\t'/wp/v2/users/?who=authors&per_page=100',\n\t\tquery\n\t);\n\treturn getUserQueryResults( state, path );\n}\n\n/**\n * Returns the current user.\n *\n * @param {Object} state Data state.\n *\n * @return {Object} Current user object.\n */\nexport function getCurrentUser( state ) {\n\treturn state.currentUser;\n}\n\n/**\n * Returns all the users returned by a query ID.\n *\n * @param {Object} state Data state.\n * @param {string} queryID Query ID.\n *\n * @return {Array} Users list.\n */\nexport const getUserQueryResults = createSelector(\n\t( state, queryID ) => {\n\t\tconst queryResults = state.users.queries[ queryID ];\n\n\t\treturn map( queryResults, ( id ) => state.users.byId[ id ] );\n\t},\n\t( state, queryID ) => [ state.users.queries[ queryID ], state.users.byId ]\n);\n\n/**\n * Returns whether the entities for the give kind are loaded.\n *\n * @param {Object} state Data state.\n * @param {string} kind Entity kind.\n *\n * @return {Array<Object>} Array of entities with config matching kind.\n */\nexport function getEntitiesByKind( state, kind ) {\n\treturn filter( state.entities.config, { kind } );\n}\n\n/**\n * Returns the entity object given its kind and name.\n *\n * @param {Object} state Data state.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n *\n * @return {Object} Entity\n */\nexport function getEntity( state, kind, name ) {\n\treturn find( state.entities.config, { kind, name } );\n}\n\n/**\n * Returns the Entity's record object by key. Returns `null` if the value is not\n * yet received, undefined if the value entity is known to not exist, or the\n * entity object if it exists and is received.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} key Record's key\n * @param {?Object} query Optional query.\n *\n * @return {Object?} Record.\n */\nexport const getEntityRecord = createSelector(\n\t( state, kind, name, key, query ) => {\n\t\tconst queriedState = get( state.entities.data, [\n\t\t\tkind,\n\t\t\tname,\n\t\t\t'queriedData',\n\t\t] );\n\t\tif ( ! queriedState ) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst context = query?.context ?? 'default';\n\n\t\tif ( query === undefined ) {\n\t\t\t// If expecting a complete item, validate that completeness.\n\t\t\tif ( ! queriedState.itemIsComplete[ context ]?.[ key ] ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn queriedState.items[ context ][ key ];\n\t\t}\n\n\t\tconst item = queriedState.items[ context ]?.[ key ];\n\t\tif ( item && query._fields ) {\n\t\t\tconst filteredItem = {};\n\t\t\tconst fields = getNormalizedCommaSeparable( query._fields );\n\t\t\tfor ( let f = 0; f < fields.length; f++ ) {\n\t\t\t\tconst field = fields[ f ].split( '.' );\n\t\t\t\tconst value = get( item, field );\n\t\t\t\tset( filteredItem, field, value );\n\t\t\t}\n\t\t\treturn filteredItem;\n\t\t}\n\n\t\treturn item;\n\t},\n\t( state, kind, name, recordId, query ) => {\n\t\tconst context = query?.context ?? 'default';\n\t\treturn [\n\t\t\tget( state.entities.data, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'items',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t\tget( state.entities.data, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'itemIsComplete',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t];\n\t}\n);\n\n/**\n * Returns the Entity's record object by key. Doesn't trigger a resolver nor requests the entity from the API if the entity record isn't available in the local state.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} key Record's key\n *\n * @return {Object|null} Record.\n */\nexport function __experimentalGetEntityRecordNoResolver(\n\tstate,\n\tkind,\n\tname,\n\tkey\n) {\n\treturn getEntityRecord( state, kind, name, key );\n}\n\n/**\n * Returns the entity's record object by key,\n * with its attributes mapped to their raw values.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} key Record's key.\n *\n * @return {Object?} Object with the entity's raw attributes.\n */\nexport const getRawEntityRecord = createSelector(\n\t( state, kind, name, key ) => {\n\t\tconst record = getEntityRecord( state, kind, name, key );\n\t\treturn (\n\t\t\trecord &&\n\t\t\tObject.keys( record ).reduce( ( accumulator, _key ) => {\n\t\t\t\tif ( isRawAttribute( getEntity( state, kind, name ), _key ) ) {\n\t\t\t\t\t// Because edits are the \"raw\" attribute values,\n\t\t\t\t\t// we return those from record selectors to make rendering,\n\t\t\t\t\t// comparisons, and joins with edits easier.\n\t\t\t\t\taccumulator[ _key ] = get(\n\t\t\t\t\t\trecord[ _key ],\n\t\t\t\t\t\t'raw',\n\t\t\t\t\t\trecord[ _key ]\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\taccumulator[ _key ] = record[ _key ];\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t}, {} )\n\t\t);\n\t},\n\t( state, kind, name, recordId, query ) => {\n\t\tconst context = query?.context ?? 'default';\n\t\treturn [\n\t\t\tstate.entities.config,\n\t\t\tget( state.entities.data, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'items',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t\tget( state.entities.data, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'itemIsComplete',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t];\n\t}\n);\n\n/**\n * Returns true if records have been received for the given set of parameters,\n * or false otherwise.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {?Object} query Optional terms query.\n *\n * @return {boolean} Whether entity records have been received.\n */\nexport function hasEntityRecords( state, kind, name, query ) {\n\treturn Array.isArray( getEntityRecords( state, kind, name, query ) );\n}\n\n/**\n * Returns the Entity's records.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {?Object} query Optional terms query.\n *\n * @return {?Array} Records.\n */\nexport function getEntityRecords( state, kind, name, query ) {\n\t// Queried data state is prepopulated for all known entities. If this is not\n\t// assigned for the given parameters, then it is known to not exist.\n\tconst queriedState = get( state.entities.data, [\n\t\tkind,\n\t\tname,\n\t\t'queriedData',\n\t] );\n\tif ( ! queriedState ) {\n\t\treturn null;\n\t}\n\treturn getQueriedItems( queriedState, query );\n}\n\n/**\n * Returns the list of dirty entity records.\n *\n * @param {Object} state State tree.\n *\n * @return {[{ title: string, key: string, name: string, kind: string }]} The list of updated records\n */\nexport const __experimentalGetDirtyEntityRecords = createSelector(\n\t( state ) => {\n\t\tconst {\n\t\t\tentities: { data },\n\t\t} = state;\n\t\tconst dirtyRecords = [];\n\t\tObject.keys( data ).forEach( ( kind ) => {\n\t\t\tObject.keys( data[ kind ] ).forEach( ( name ) => {\n\t\t\t\tconst primaryKeys = Object.keys(\n\t\t\t\t\tdata[ kind ][ name ].edits\n\t\t\t\t).filter(\n\t\t\t\t\t( primaryKey ) =>\n\t\t\t\t\t\t// The entity record must exist (not be deleted),\n\t\t\t\t\t\t// and it must have edits.\n\t\t\t\t\t\tgetEntityRecord( state, kind, name, primaryKey ) &&\n\t\t\t\t\t\thasEditsForEntityRecord( state, kind, name, primaryKey )\n\t\t\t\t);\n\n\t\t\t\tif ( primaryKeys.length ) {\n\t\t\t\t\tconst entity = getEntity( state, kind, name );\n\t\t\t\t\tprimaryKeys.forEach( ( primaryKey ) => {\n\t\t\t\t\t\tconst entityRecord = getEditedEntityRecord(\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tprimaryKey\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdirtyRecords.push( {\n\t\t\t\t\t\t\t// We avoid using primaryKey because it's transformed into a string\n\t\t\t\t\t\t\t// when it's used as an object key.\n\t\t\t\t\t\t\tkey:\n\t\t\t\t\t\t\t\tentityRecord[\n\t\t\t\t\t\t\t\t\tentity.key || DEFAULT_ENTITY_KEY\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\ttitle: entity?.getTitle?.( entityRecord ) || '',\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\n\t\treturn dirtyRecords;\n\t},\n\t( state ) => [ state.entities.data ]\n);\n\n/**\n * Returns the list of entities currently being saved.\n *\n * @param {Object} state State tree.\n *\n * @return {[{ title: string, key: string, name: string, kind: string }]} The list of records being saved.\n */\nexport const __experimentalGetEntitiesBeingSaved = createSelector(\n\t( state ) => {\n\t\tconst {\n\t\t\tentities: { data },\n\t\t} = state;\n\t\tconst recordsBeingSaved = [];\n\t\tObject.keys( data ).forEach( ( kind ) => {\n\t\t\tObject.keys( data[ kind ] ).forEach( ( name ) => {\n\t\t\t\tconst primaryKeys = Object.keys(\n\t\t\t\t\tdata[ kind ][ name ].saving\n\t\t\t\t).filter( ( primaryKey ) =>\n\t\t\t\t\tisSavingEntityRecord( state, kind, name, primaryKey )\n\t\t\t\t);\n\n\t\t\t\tif ( primaryKeys.length ) {\n\t\t\t\t\tconst entity = getEntity( state, kind, name );\n\t\t\t\t\tprimaryKeys.forEach( ( primaryKey ) => {\n\t\t\t\t\t\tconst entityRecord = getEditedEntityRecord(\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tprimaryKey\n\t\t\t\t\t\t);\n\t\t\t\t\t\trecordsBeingSaved.push( {\n\t\t\t\t\t\t\t// We avoid using primaryKey because it's transformed into a string\n\t\t\t\t\t\t\t// when it's used as an object key.\n\t\t\t\t\t\t\tkey:\n\t\t\t\t\t\t\t\tentityRecord[\n\t\t\t\t\t\t\t\t\tentity.key || DEFAULT_ENTITY_KEY\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\ttitle: entity?.getTitle?.( entityRecord ) || '',\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t\treturn recordsBeingSaved;\n\t},\n\t( state ) => [ state.entities.data ]\n);\n\n/**\n * Returns the specified entity record's edits.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's edits.\n */\nexport function getEntityRecordEdits( state, kind, name, recordId ) {\n\treturn get( state.entities.data, [ kind, name, 'edits', recordId ] );\n}\n\n/**\n * Returns the specified entity record's non transient edits.\n *\n * Transient edits don't create an undo level, and\n * are not considered for change detection.\n * They are defined in the entity's config.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's non transient edits.\n */\nexport const getEntityRecordNonTransientEdits = createSelector(\n\t( state, kind, name, recordId ) => {\n\t\tconst { transientEdits } = getEntity( state, kind, name ) || {};\n\t\tconst edits = getEntityRecordEdits( state, kind, name, recordId ) || {};\n\t\tif ( ! transientEdits ) {\n\t\t\treturn edits;\n\t\t}\n\t\treturn Object.keys( edits ).reduce( ( acc, key ) => {\n\t\t\tif ( ! transientEdits[ key ] ) {\n\t\t\t\tacc[ key ] = edits[ key ];\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, {} );\n\t},\n\t( state, kind, name, recordId ) => [\n\t\tstate.entities.config,\n\t\tget( state.entities.data, [ kind, name, 'edits', recordId ] ),\n\t]\n);\n\n/**\n * Returns true if the specified entity record has edits,\n * and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {boolean} Whether the entity record has edits or not.\n */\nexport function hasEditsForEntityRecord( state, kind, name, recordId ) {\n\treturn (\n\t\tisSavingEntityRecord( state, kind, name, recordId ) ||\n\t\tObject.keys(\n\t\t\tgetEntityRecordNonTransientEdits( state, kind, name, recordId )\n\t\t).length > 0\n\t);\n}\n\n/**\n * Returns the specified entity record, merged with its edits.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record, merged with its edits.\n */\nexport const getEditedEntityRecord = createSelector(\n\t( state, kind, name, recordId ) => ( {\n\t\t...getRawEntityRecord( state, kind, name, recordId ),\n\t\t...getEntityRecordEdits( state, kind, name, recordId ),\n\t} ),\n\t( state, kind, name, recordId, query ) => {\n\t\tconst context = query?.context ?? 'default';\n\t\treturn [\n\t\t\tstate.entities.config,\n\t\t\tget( state.entities.data, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'items',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t\tget( state.entities.data, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'itemIsComplete',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t\tget( state.entities.data, [ kind, name, 'edits', recordId ] ),\n\t\t];\n\t}\n);\n\n/**\n * Returns true if the specified entity record is autosaving, and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {boolean} Whether the entity record is autosaving or not.\n */\nexport function isAutosavingEntityRecord( state, kind, name, recordId ) {\n\tconst { pending, isAutosave } = get(\n\t\tstate.entities.data,\n\t\t[ kind, name, 'saving', recordId ],\n\t\t{}\n\t);\n\treturn Boolean( pending && isAutosave );\n}\n\n/**\n * Returns true if the specified entity record is saving, and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {boolean} Whether the entity record is saving or not.\n */\nexport function isSavingEntityRecord( state, kind, name, recordId ) {\n\treturn get(\n\t\tstate.entities.data,\n\t\t[ kind, name, 'saving', recordId, 'pending' ],\n\t\tfalse\n\t);\n}\n\n/**\n * Returns true if the specified entity record is deleting, and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {boolean} Whether the entity record is deleting or not.\n */\nexport function isDeletingEntityRecord( state, kind, name, recordId ) {\n\treturn get(\n\t\tstate.entities.data,\n\t\t[ kind, name, 'deleting', recordId, 'pending' ],\n\t\tfalse\n\t);\n}\n\n/**\n * Returns the specified entity record's last save error.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's save error.\n */\nexport function getLastEntitySaveError( state, kind, name, recordId ) {\n\treturn get( state.entities.data, [\n\t\tkind,\n\t\tname,\n\t\t'saving',\n\t\trecordId,\n\t\t'error',\n\t] );\n}\n\n/**\n * Returns the specified entity record's last delete error.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's save error.\n */\nexport function getLastEntityDeleteError( state, kind, name, recordId ) {\n\treturn get( state.entities.data, [\n\t\tkind,\n\t\tname,\n\t\t'deleting',\n\t\trecordId,\n\t\t'error',\n\t] );\n}\n\n/**\n * Returns the current undo offset for the\n * entity records edits history. The offset\n * represents how many items from the end\n * of the history stack we are at. 0 is the\n * last edit, -1 is the second last, and so on.\n *\n * @param {Object} state State tree.\n *\n * @return {number} The current undo offset.\n */\nfunction getCurrentUndoOffset( state ) {\n\treturn state.undo.offset;\n}\n\n/**\n * Returns the previous edit from the current undo offset\n * for the entity records edits history, if any.\n *\n * @param {Object} state State tree.\n *\n * @return {Object?} The edit.\n */\nexport function getUndoEdit( state ) {\n\treturn state.undo[ state.undo.length - 2 + getCurrentUndoOffset( state ) ];\n}\n\n/**\n * Returns the next edit from the current undo offset\n * for the entity records edits history, if any.\n *\n * @param {Object} state State tree.\n *\n * @return {Object?} The edit.\n */\nexport function getRedoEdit( state ) {\n\treturn state.undo[ state.undo.length + getCurrentUndoOffset( state ) ];\n}\n\n/**\n * Returns true if there is a previous edit from the current undo offset\n * for the entity records edits history, and false otherwise.\n *\n * @param {Object} state State tree.\n *\n * @return {boolean} Whether there is a previous edit or not.\n */\nexport function hasUndo( state ) {\n\treturn Boolean( getUndoEdit( state ) );\n}\n\n/**\n * Returns true if there is a next edit from the current undo offset\n * for the entity records edits history, and false otherwise.\n *\n * @param {Object} state State tree.\n *\n * @return {boolean} Whether there is a next edit or not.\n */\nexport function hasRedo( state ) {\n\treturn Boolean( getRedoEdit( state ) );\n}\n\n/**\n * Return the current theme.\n *\n * @param {Object} state Data state.\n *\n * @return {Object} The current theme.\n */\nexport function getCurrentTheme( state ) {\n\treturn getEntityRecord( state, 'root', 'theme', state.currentTheme );\n}\n\n/**\n * Return the ID of the current global styles object.\n *\n * @param {Object} state Data state.\n *\n * @return {string} The current global styles ID.\n */\nexport function __experimentalGetCurrentGlobalStylesId( state ) {\n\treturn state.currentGlobalStylesId;\n}\n\n/**\n * Return theme supports data in the index.\n *\n * @param {Object} state Data state.\n *\n * @return {*} Index data.\n */\nexport function getThemeSupports( state ) {\n\treturn getCurrentTheme( state )?.theme_supports ?? EMPTY_OBJECT;\n}\n\n/**\n * Returns the embed preview for the given URL.\n *\n * @param {Object} state Data state.\n * @param {string} url Embedded URL.\n *\n * @return {*} Undefined if the preview has not been fetched, otherwise, the preview fetched from the embed preview API.\n */\nexport function getEmbedPreview( state, url ) {\n\treturn state.embedPreviews[ url ];\n}\n\n/**\n * Determines if the returned preview is an oEmbed link fallback.\n *\n * WordPress can be configured to return a simple link to a URL if it is not embeddable.\n * We need to be able to determine if a URL is embeddable or not, based on what we\n * get back from the oEmbed preview API.\n *\n * @param {Object} state Data state.\n * @param {string} url Embedded URL.\n *\n * @return {boolean} Is the preview for the URL an oEmbed link fallback.\n */\nexport function isPreviewEmbedFallback( state, url ) {\n\tconst preview = state.embedPreviews[ url ];\n\tconst oEmbedLinkCheck = '<a href=\"' + url + '\">' + url + '</a>';\n\tif ( ! preview ) {\n\t\treturn false;\n\t}\n\treturn preview.html === oEmbedLinkCheck;\n}\n\n/**\n * Returns whether the current user can perform the given action on the given\n * REST resource.\n *\n * Calling this may trigger an OPTIONS request to the REST API via the\n * `canUser()` resolver.\n *\n * https://developer.wordpress.org/rest-api/reference/\n *\n * @param {Object} state Data state.\n * @param {string} action Action to check. One of: 'create', 'read', 'update', 'delete'.\n * @param {string} resource REST resource to check, e.g. 'media' or 'posts'.\n * @param {string=} id Optional ID of the rest resource to check.\n *\n * @return {boolean|undefined} Whether or not the user can perform the action,\n * or `undefined` if the OPTIONS request is still being made.\n */\nexport function canUser( state, action, resource, id ) {\n\tconst key = compact( [ action, resource, id ] ).join( '/' );\n\treturn get( state, [ 'userPermissions', key ] );\n}\n\n/**\n * Returns whether the current user can edit the given entity.\n *\n * Calling this may trigger an OPTIONS request to the REST API via the\n * `canUser()` resolver.\n *\n * https://developer.wordpress.org/rest-api/reference/\n *\n * @param {Object} state Data state.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {string} recordId Record's id.\n * @return {boolean|undefined} Whether or not the user can edit,\n * or `undefined` if the OPTIONS request is still being made.\n */\nexport function canUserEditEntityRecord( state, kind, name, recordId ) {\n\tconst entity = getEntity( state, kind, name );\n\tif ( ! entity ) {\n\t\treturn false;\n\t}\n\tconst resource = entity.__unstable_rest_base;\n\n\treturn canUser( state, 'update', resource, recordId );\n}\n\n/**\n * Returns the latest autosaves for the post.\n *\n * May return multiple autosaves since the backend stores one autosave per\n * author for each post.\n *\n * @param {Object} state State tree.\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n *\n * @return {?Array} An array of autosaves for the post, or undefined if there is none.\n */\nexport function getAutosaves( state, postType, postId ) {\n\treturn state.autosaves[ postId ];\n}\n\n/**\n * Returns the autosave for the post and author.\n *\n * @param {Object} state State tree.\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n * @param {number} authorId The id of the author.\n *\n * @return {?Object} The autosave for the post and author.\n */\nexport function getAutosave( state, postType, postId, authorId ) {\n\tif ( authorId === undefined ) {\n\t\treturn;\n\t}\n\n\tconst autosaves = state.autosaves[ postId ];\n\treturn find( autosaves, { author: authorId } );\n}\n\n/**\n * Returns true if the REST request for autosaves has completed.\n *\n * @param {Object} state State tree.\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n *\n * @return {boolean} True if the REST request was completed. False otherwise.\n */\nexport const hasFetchedAutosaves = createRegistrySelector(\n\t( select ) => ( state, postType, postId ) => {\n\t\treturn select( STORE_NAME ).hasFinishedResolution( 'getAutosaves', [\n\t\t\tpostType,\n\t\t\tpostId,\n\t\t] );\n\t}\n);\n\n/**\n * Returns a new reference when edited values have changed. This is useful in\n * inferring where an edit has been made between states by comparison of the\n * return values using strict equality.\n *\n * @example\n *\n * ```\n * const hasEditOccurred = (\n * getReferenceByDistinctEdits( beforeState ) !==\n * getReferenceByDistinctEdits( afterState )\n * );\n * ```\n *\n * @param {Object} state Editor state.\n *\n * @return {*} A value whose reference will change only when an edit occurs.\n */\nexport const getReferenceByDistinctEdits = createSelector(\n\t() => [],\n\t( state ) => [\n\t\tstate.undo.length,\n\t\tstate.undo.offset,\n\t\tstate.undo.flattenedUndo,\n\t]\n);\n\n/**\n * Retrieve the frontend template used for a given link.\n *\n * @param {Object} state Editor state.\n * @param {string} link Link.\n *\n * @return {Object?} The template record.\n */\nexport function __experimentalGetTemplateForLink( state, link ) {\n\tconst records = getEntityRecords( state, 'postType', 'wp_template', {\n\t\t'find-template': link,\n\t} );\n\n\tconst template = records?.length ? records[ 0 ] : null;\n\tif ( template ) {\n\t\treturn getEditedEntityRecord(\n\t\t\tstate,\n\t\t\t'postType',\n\t\t\t'wp_template',\n\t\t\ttemplate.id\n\t\t);\n\t}\n\treturn template;\n}\n\n/**\n * Retrieve the current theme's base global styles\n *\n * @param {Object} state Editor state.\n *\n * @return {Object?} The Global Styles object.\n */\nexport function __experimentalGetCurrentThemeBaseGlobalStyles( state ) {\n\tconst currentTheme = getCurrentTheme( state );\n\tif ( ! currentTheme ) {\n\t\treturn null;\n\t}\n\treturn state.themeBaseGlobalStyles[ currentTheme.stylesheet ];\n}\n\n/**\n * Return the ID of the current global styles object.\n *\n * @param {Object} state Data state.\n *\n * @return {string} The current global styles ID.\n */\nexport function __experimentalGetCurrentThemeGlobalStylesVariations( state ) {\n\tconst currentTheme = getCurrentTheme( state );\n\tif ( ! currentTheme ) {\n\t\treturn null;\n\t}\n\treturn state.themeGlobalStyleVariations[ currentTheme.stylesheet ];\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/selectors.ts"],"names":["EMPTY_OBJECT","isRequestingEmbedPreview","select","state","url","STORE_NAME","isResolving","getAuthors","query","since","alternative","path","getUserQueryResults","getCurrentUser","currentUser","queryID","queryResults","users","queries","id","byId","getEntitiesByKind","kind","getEntitiesConfig","entities","config","getEntity","name","getEntityConfig","getEntityRecord","key","queriedState","records","undefined","context","itemIsComplete","items","item","_fields","filteredItem","fields","f","length","field","split","value","recordId","__experimentalGetEntityRecordNoResolver","getRawEntityRecord","record","Object","keys","reduce","accumulator","_key","hasEntityRecords","Array","isArray","getEntityRecords","__experimentalGetDirtyEntityRecords","dirtyRecords","forEach","primaryKeys","edits","filter","primaryKey","hasEditsForEntityRecord","entityConfig","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","template","__experimentalGetCurrentThemeBaseGlobalStyles","themeBaseGlobalStyles","stylesheet","__experimentalGetCurrentThemeGlobalStylesVariations","themeGlobalStyleVariations","getBlockPatterns","blockPatterns","getBlockPatternCategories","blockPatternCategories"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport createSelector from 'rememo';\nimport { set, map, find, get, filter, compact } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { createRegistrySelector } from '@wordpress/data';\nimport { addQueryArgs } from '@wordpress/url';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport { STORE_NAME } from './name';\nimport { getQueriedItems } from './queried-data';\nimport { DEFAULT_ENTITY_KEY } from './entities';\nimport { getNormalizedCommaSeparable, isRawAttribute } from './utils';\n\n/**\n * Shared reference to an empty object for cases where it is important to avoid\n * returning a new object reference on every invocation, as in a connected or\n * other pure component which performs `shouldComponentUpdate` check on props.\n * This should be used as a last resort, since the normalized data should be\n * maintained by the reducer result in state.\n */\nconst EMPTY_OBJECT = {};\n\n/**\n * Returns true if a request is in progress for embed preview data, or false\n * otherwise.\n *\n * @param {Object} state Data state.\n * @param {string} url URL the preview would be for.\n *\n * @return {boolean} Whether a request is in progress for an embed preview.\n */\nexport const isRequestingEmbedPreview = createRegistrySelector(\n\t( select ) => ( state, url ) => {\n\t\treturn select( STORE_NAME ).isResolving( 'getEmbedPreview', [ url ] );\n\t}\n);\n\n/**\n * Returns all available authors.\n *\n * @deprecated since 11.3. Callers should use `select( 'core' ).getUsers({ who: 'authors' })` instead.\n *\n * @param {Object} state Data state.\n * @param {Object|undefined} query Optional object of query parameters to\n * include with request.\n * @return {Array} Authors list.\n */\nexport function getAuthors( state, query ) {\n\tdeprecated( \"select( 'core' ).getAuthors()\", {\n\t\tsince: '5.9',\n\t\talternative: \"select( 'core' ).getUsers({ who: 'authors' })\",\n\t} );\n\n\tconst path = addQueryArgs(\n\t\t'/wp/v2/users/?who=authors&per_page=100',\n\t\tquery\n\t);\n\treturn getUserQueryResults( state, path );\n}\n\n/**\n * Returns the current user.\n *\n * @param {Object} state Data state.\n *\n * @return {Object} Current user object.\n */\nexport function getCurrentUser( state ) {\n\treturn state.currentUser;\n}\n\n/**\n * Returns all the users returned by a query ID.\n *\n * @param {Object} state Data state.\n * @param {string} queryID Query ID.\n *\n * @return {Array} Users list.\n */\nexport const getUserQueryResults = createSelector(\n\t( state, queryID ) => {\n\t\tconst queryResults = state.users.queries[ queryID ];\n\n\t\treturn map( queryResults, ( id ) => state.users.byId[ id ] );\n\t},\n\t( state, queryID ) => [ state.users.queries[ queryID ], state.users.byId ]\n);\n\n/**\n * Returns the loaded entities for the given kind.\n *\n * @deprecated since WordPress 6.0. Use getEntitiesConfig instead\n * @param {Object} state Data state.\n * @param {string} kind Entity kind.\n *\n * @return {Array<Object>} Array of entities with config matching kind.\n */\nexport function getEntitiesByKind( state, kind ) {\n\tdeprecated( \"wp.data.select( 'core' ).getEntitiesByKind()\", {\n\t\tsince: '6.0',\n\t\talternative: \"wp.data.select( 'core' ).getEntitiesConfig()\",\n\t} );\n\treturn getEntitiesConfig( state, kind );\n}\n\n/**\n * Returns the loaded entities for the given kind.\n *\n * @param {Object} state Data state.\n * @param {string} kind Entity kind.\n *\n * @return {Array<Object>} Array of entities with config matching kind.\n */\nexport function getEntitiesConfig( state, kind ) {\n\treturn filter( state.entities.config, { kind } );\n}\n\n/**\n * Returns the entity config given its kind and name.\n *\n * @deprecated since WordPress 6.0. Use getEntityConfig instead\n * @param {Object} state Data state.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n *\n * @return {Object} Entity config\n */\nexport function getEntity( state, kind, name ) {\n\tdeprecated( \"wp.data.select( 'core' ).getEntity()\", {\n\t\tsince: '6.0',\n\t\talternative: \"wp.data.select( 'core' ).getEntityConfig()\",\n\t} );\n\treturn getEntityConfig( state, kind, name );\n}\n\n/**\n * Returns the entity config given its kind and name.\n *\n * @param {Object} state Data state.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n *\n * @return {Object} Entity config\n */\nexport function getEntityConfig( state, kind, name ) {\n\treturn find( state.entities.config, { kind, name } );\n}\n\n/**\n * Returns the Entity's record object by key. Returns `null` if the value is not\n * yet received, undefined if the value entity is known to not exist, or the\n * entity object if it exists and is received.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} key Record's key\n * @param {?Object} query Optional query.\n *\n * @return {Object|undefined} Record.\n */\nexport const getEntityRecord = createSelector(\n\t( state, kind, name, key, query ) => {\n\t\tconst queriedState = get( state.entities.records, [\n\t\t\tkind,\n\t\t\tname,\n\t\t\t'queriedData',\n\t\t] );\n\t\tif ( ! queriedState ) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst context = query?.context ?? 'default';\n\n\t\tif ( query === undefined ) {\n\t\t\t// If expecting a complete item, validate that completeness.\n\t\t\tif ( ! queriedState.itemIsComplete[ context ]?.[ key ] ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn queriedState.items[ context ][ key ];\n\t\t}\n\n\t\tconst item = queriedState.items[ context ]?.[ key ];\n\t\tif ( item && query._fields ) {\n\t\t\tconst filteredItem = {};\n\t\t\tconst fields = getNormalizedCommaSeparable( query._fields ) ?? [];\n\t\t\tfor ( let f = 0; f < fields.length; f++ ) {\n\t\t\t\tconst field = fields[ f ].split( '.' );\n\t\t\t\tconst value = get( item, field );\n\t\t\t\tset( filteredItem, field, value );\n\t\t\t}\n\t\t\treturn filteredItem;\n\t\t}\n\n\t\treturn item;\n\t},\n\t( state, kind, name, recordId, query ) => {\n\t\tconst context = query?.context ?? 'default';\n\t\treturn [\n\t\t\tget( state.entities.records, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'items',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t\tget( state.entities.records, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'itemIsComplete',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t];\n\t}\n);\n\n/**\n * Returns the Entity's record object by key. Doesn't trigger a resolver nor requests the entity records from the API if the entity record isn't available in the local state.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} key Record's key\n *\n * @return {Object|null} Record.\n */\nexport function __experimentalGetEntityRecordNoResolver(\n\tstate,\n\tkind,\n\tname,\n\tkey\n) {\n\treturn getEntityRecord( state, kind, name, key );\n}\n\n/**\n * Returns the entity's record object by key,\n * with its attributes mapped to their raw values.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} key Record's key.\n *\n * @return {Object?} Object with the entity's raw attributes.\n */\nexport const getRawEntityRecord = createSelector(\n\t( state, kind, name, key ) => {\n\t\tconst record = getEntityRecord( state, kind, name, key );\n\t\treturn (\n\t\t\trecord &&\n\t\t\tObject.keys( record ).reduce( ( accumulator, _key ) => {\n\t\t\t\tif (\n\t\t\t\t\tisRawAttribute( getEntityConfig( state, kind, name ), _key )\n\t\t\t\t) {\n\t\t\t\t\t// Because edits are the \"raw\" attribute values,\n\t\t\t\t\t// we return those from record selectors to make rendering,\n\t\t\t\t\t// comparisons, and joins with edits easier.\n\t\t\t\t\taccumulator[ _key ] = get(\n\t\t\t\t\t\trecord[ _key ],\n\t\t\t\t\t\t'raw',\n\t\t\t\t\t\trecord[ _key ]\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\taccumulator[ _key ] = record[ _key ];\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t}, {} )\n\t\t);\n\t},\n\t( state, kind, name, recordId, query ) => {\n\t\tconst context = query?.context ?? 'default';\n\t\treturn [\n\t\t\tstate.entities.config,\n\t\t\tget( state.entities.records, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'items',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t\tget( state.entities.records, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'itemIsComplete',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t];\n\t}\n);\n\n/**\n * Returns true if records have been received for the given set of parameters,\n * or false otherwise.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {?Object} query Optional terms query.\n *\n * @return {boolean} Whether entity records have been received.\n */\nexport function hasEntityRecords( state, kind, name, query ) {\n\treturn Array.isArray( getEntityRecords( state, kind, name, query ) );\n}\n\n/**\n * Returns the Entity's records.\n *\n * @param {Object} state State tree\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {?Object} query Optional terms query.\n *\n * @return {?Array} Records.\n */\nexport function getEntityRecords( state, kind, name, query ) {\n\t// Queried data state is prepopulated for all known entities. If this is not\n\t// assigned for the given parameters, then it is known to not exist.\n\tconst queriedState = get( state.entities.records, [\n\t\tkind,\n\t\tname,\n\t\t'queriedData',\n\t] );\n\tif ( ! queriedState ) {\n\t\treturn null;\n\t}\n\treturn getQueriedItems( queriedState, query );\n}\n\n/**\n * Returns the list of dirty entity records.\n *\n * @param {Object} state State tree.\n *\n * @return {[{ title: string, key: string, name: string, kind: string }]} The list of updated records\n */\nexport const __experimentalGetDirtyEntityRecords = createSelector(\n\t( state ) => {\n\t\tconst {\n\t\t\tentities: { records },\n\t\t} = state;\n\t\tconst dirtyRecords = [];\n\t\tObject.keys( records ).forEach( ( kind ) => {\n\t\t\tObject.keys( records[ kind ] ).forEach( ( name ) => {\n\t\t\t\tconst primaryKeys = Object.keys(\n\t\t\t\t\trecords[ kind ][ name ].edits\n\t\t\t\t).filter(\n\t\t\t\t\t( primaryKey ) =>\n\t\t\t\t\t\t// The entity record must exist (not be deleted),\n\t\t\t\t\t\t// and it must have edits.\n\t\t\t\t\t\tgetEntityRecord( state, kind, name, primaryKey ) &&\n\t\t\t\t\t\thasEditsForEntityRecord( state, kind, name, primaryKey )\n\t\t\t\t);\n\n\t\t\t\tif ( primaryKeys.length ) {\n\t\t\t\t\tconst entityConfig = getEntityConfig( state, kind, name );\n\t\t\t\t\tprimaryKeys.forEach( ( primaryKey ) => {\n\t\t\t\t\t\tconst entityRecord = getEditedEntityRecord(\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tprimaryKey\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdirtyRecords.push( {\n\t\t\t\t\t\t\t// We avoid using primaryKey because it's transformed into a string\n\t\t\t\t\t\t\t// when it's used as an object key.\n\t\t\t\t\t\t\tkey:\n\t\t\t\t\t\t\t\tentityRecord[\n\t\t\t\t\t\t\t\t\tentityConfig.key || DEFAULT_ENTITY_KEY\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\tentityConfig?.getTitle?.( entityRecord ) || '',\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\n\t\treturn dirtyRecords;\n\t},\n\t( state ) => [ state.entities.records ]\n);\n\n/**\n * Returns the list of entities currently being saved.\n *\n * @param {Object} state State tree.\n *\n * @return {[{ title: string, key: string, name: string, kind: string }]} The list of records being saved.\n */\nexport const __experimentalGetEntitiesBeingSaved = createSelector(\n\t( state ) => {\n\t\tconst {\n\t\t\tentities: { records },\n\t\t} = state;\n\t\tconst recordsBeingSaved = [];\n\t\tObject.keys( records ).forEach( ( kind ) => {\n\t\t\tObject.keys( records[ kind ] ).forEach( ( name ) => {\n\t\t\t\tconst primaryKeys = Object.keys(\n\t\t\t\t\trecords[ kind ][ name ].saving\n\t\t\t\t).filter( ( primaryKey ) =>\n\t\t\t\t\tisSavingEntityRecord( state, kind, name, primaryKey )\n\t\t\t\t);\n\n\t\t\t\tif ( primaryKeys.length ) {\n\t\t\t\t\tconst entityConfig = getEntityConfig( state, kind, name );\n\t\t\t\t\tprimaryKeys.forEach( ( primaryKey ) => {\n\t\t\t\t\t\tconst entityRecord = getEditedEntityRecord(\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tprimaryKey\n\t\t\t\t\t\t);\n\t\t\t\t\t\trecordsBeingSaved.push( {\n\t\t\t\t\t\t\t// We avoid using primaryKey because it's transformed into a string\n\t\t\t\t\t\t\t// when it's used as an object key.\n\t\t\t\t\t\t\tkey:\n\t\t\t\t\t\t\t\tentityRecord[\n\t\t\t\t\t\t\t\t\tentityConfig.key || DEFAULT_ENTITY_KEY\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\tentityConfig?.getTitle?.( entityRecord ) || '',\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t\treturn recordsBeingSaved;\n\t},\n\t( state ) => [ state.entities.records ]\n);\n\n/**\n * Returns the specified entity record's edits.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's edits.\n */\nexport function getEntityRecordEdits( state, kind, name, recordId ) {\n\treturn get( state.entities.records, [ kind, name, 'edits', recordId ] );\n}\n\n/**\n * Returns the specified entity record's non transient edits.\n *\n * Transient edits don't create an undo level, and\n * are not considered for change detection.\n * They are defined in the entity's config.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's non transient edits.\n */\nexport const getEntityRecordNonTransientEdits = createSelector(\n\t( state, kind, name, recordId ) => {\n\t\tconst { transientEdits } = getEntityConfig( state, kind, name ) || {};\n\t\tconst edits = getEntityRecordEdits( state, kind, name, recordId ) || {};\n\t\tif ( ! transientEdits ) {\n\t\t\treturn edits;\n\t\t}\n\t\treturn Object.keys( edits ).reduce( ( acc, key ) => {\n\t\t\tif ( ! transientEdits[ key ] ) {\n\t\t\t\tacc[ key ] = edits[ key ];\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, {} );\n\t},\n\t( state, kind, name, recordId ) => [\n\t\tstate.entities.config,\n\t\tget( state.entities.records, [ kind, name, 'edits', recordId ] ),\n\t]\n);\n\n/**\n * Returns true if the specified entity record has edits,\n * and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordId Record ID.\n *\n * @return {boolean} Whether the entity record has edits or not.\n */\nexport function hasEditsForEntityRecord( state, kind, name, recordId ) {\n\treturn (\n\t\tisSavingEntityRecord( state, kind, name, recordId ) ||\n\t\tObject.keys(\n\t\t\tgetEntityRecordNonTransientEdits( state, kind, name, recordId )\n\t\t).length > 0\n\t);\n}\n\n/**\n * Returns the specified entity record, merged with its edits.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordId Record ID.\n *\n * @return {Object?} The entity record, merged with its edits.\n */\nexport const getEditedEntityRecord = createSelector(\n\t( state, kind, name, recordId ) => ( {\n\t\t...getRawEntityRecord( state, kind, name, recordId ),\n\t\t...getEntityRecordEdits( state, kind, name, recordId ),\n\t} ),\n\t( state, kind, name, recordId, query ) => {\n\t\tconst context = query?.context ?? 'default';\n\t\treturn [\n\t\t\tstate.entities.config,\n\t\t\tget( state.entities.records, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'items',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t\tget( state.entities.records, [\n\t\t\t\tkind,\n\t\t\t\tname,\n\t\t\t\t'queriedData',\n\t\t\t\t'itemIsComplete',\n\t\t\t\tcontext,\n\t\t\t\trecordId,\n\t\t\t] ),\n\t\t\tget( state.entities.records, [ kind, name, 'edits', recordId ] ),\n\t\t];\n\t}\n);\n\n/**\n * Returns true if the specified entity record is autosaving, and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {boolean} Whether the entity record is autosaving or not.\n */\nexport function isAutosavingEntityRecord( state, kind, name, recordId ) {\n\tconst { pending, isAutosave } = get(\n\t\tstate.entities.records,\n\t\t[ kind, name, 'saving', recordId ],\n\t\t{}\n\t);\n\treturn Boolean( pending && isAutosave );\n}\n\n/**\n * Returns true if the specified entity record is saving, and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number|string} recordId Record ID.\n *\n * @return {boolean} Whether the entity record is saving or not.\n */\nexport function isSavingEntityRecord( state, kind, name, recordId ) {\n\treturn get(\n\t\tstate.entities.records,\n\t\t[ kind, name, 'saving', recordId, 'pending' ],\n\t\tfalse\n\t);\n}\n\n/**\n * Returns true if the specified entity record is deleting, and false otherwise.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {boolean} Whether the entity record is deleting or not.\n */\nexport function isDeletingEntityRecord( state, kind, name, recordId ) {\n\treturn get(\n\t\tstate.entities.records,\n\t\t[ kind, name, 'deleting', recordId, 'pending' ],\n\t\tfalse\n\t);\n}\n\n/**\n * Returns the specified entity record's last save error.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's save error.\n */\nexport function getLastEntitySaveError( state, kind, name, recordId ) {\n\treturn get( state.entities.records, [\n\t\tkind,\n\t\tname,\n\t\t'saving',\n\t\trecordId,\n\t\t'error',\n\t] );\n}\n\n/**\n * Returns the specified entity record's last delete error.\n *\n * @param {Object} state State tree.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {number} recordId Record ID.\n *\n * @return {Object?} The entity record's save error.\n */\nexport function getLastEntityDeleteError( state, kind, name, recordId ) {\n\treturn get( state.entities.records, [\n\t\tkind,\n\t\tname,\n\t\t'deleting',\n\t\trecordId,\n\t\t'error',\n\t] );\n}\n\n/**\n * Returns the current undo offset for the\n * entity records edits history. The offset\n * represents how many items from the end\n * of the history stack we are at. 0 is the\n * last edit, -1 is the second last, and so on.\n *\n * @param {Object} state State tree.\n *\n * @return {number} The current undo offset.\n */\nfunction getCurrentUndoOffset( state ) {\n\treturn state.undo.offset;\n}\n\n/**\n * Returns the previous edit from the current undo offset\n * for the entity records edits history, if any.\n *\n * @param {Object} state State tree.\n *\n * @return {Object?} The edit.\n */\nexport function getUndoEdit( state ) {\n\treturn state.undo[ state.undo.length - 2 + getCurrentUndoOffset( state ) ];\n}\n\n/**\n * Returns the next edit from the current undo offset\n * for the entity records edits history, if any.\n *\n * @param {Object} state State tree.\n *\n * @return {Object?} The edit.\n */\nexport function getRedoEdit( state ) {\n\treturn state.undo[ state.undo.length + getCurrentUndoOffset( state ) ];\n}\n\n/**\n * Returns true if there is a previous edit from the current undo offset\n * for the entity records edits history, and false otherwise.\n *\n * @param {Object} state State tree.\n *\n * @return {boolean} Whether there is a previous edit or not.\n */\nexport function hasUndo( state ) {\n\treturn Boolean( getUndoEdit( state ) );\n}\n\n/**\n * Returns true if there is a next edit from the current undo offset\n * for the entity records edits history, and false otherwise.\n *\n * @param {Object} state State tree.\n *\n * @return {boolean} Whether there is a next edit or not.\n */\nexport function hasRedo( state ) {\n\treturn Boolean( getRedoEdit( state ) );\n}\n\n/**\n * Return the current theme.\n *\n * @param {Object} state Data state.\n *\n * @return {Object} The current theme.\n */\nexport function getCurrentTheme( state ) {\n\treturn getEntityRecord( state, 'root', 'theme', state.currentTheme );\n}\n\n/**\n * Return the ID of the current global styles object.\n *\n * @param {Object} state Data state.\n *\n * @return {string} The current global styles ID.\n */\nexport function __experimentalGetCurrentGlobalStylesId( state ) {\n\treturn state.currentGlobalStylesId;\n}\n\n/**\n * Return theme supports data in the index.\n *\n * @param {Object} state Data state.\n *\n * @return {*} Index data.\n */\nexport function getThemeSupports( state ) {\n\treturn getCurrentTheme( state )?.theme_supports ?? EMPTY_OBJECT;\n}\n\n/**\n * Returns the embed preview for the given URL.\n *\n * @param {Object} state Data state.\n * @param {string} url Embedded URL.\n *\n * @return {*} Undefined if the preview has not been fetched, otherwise, the preview fetched from the embed preview API.\n */\nexport function getEmbedPreview( state, url ) {\n\treturn state.embedPreviews[ url ];\n}\n\n/**\n * Determines if the returned preview is an oEmbed link fallback.\n *\n * WordPress can be configured to return a simple link to a URL if it is not embeddable.\n * We need to be able to determine if a URL is embeddable or not, based on what we\n * get back from the oEmbed preview API.\n *\n * @param {Object} state Data state.\n * @param {string} url Embedded URL.\n *\n * @return {boolean} Is the preview for the URL an oEmbed link fallback.\n */\nexport function isPreviewEmbedFallback( state, url ) {\n\tconst preview = state.embedPreviews[ url ];\n\tconst oEmbedLinkCheck = '<a href=\"' + url + '\">' + url + '</a>';\n\tif ( ! preview ) {\n\t\treturn false;\n\t}\n\treturn preview.html === oEmbedLinkCheck;\n}\n\n/**\n * Returns whether the current user can perform the given action on the given\n * REST resource.\n *\n * Calling this may trigger an OPTIONS request to the REST API via the\n * `canUser()` resolver.\n *\n * https://developer.wordpress.org/rest-api/reference/\n *\n * @param {Object} state Data state.\n * @param {string} action Action to check. One of: 'create', 'read', 'update', 'delete'.\n * @param {string} resource REST resource to check, e.g. 'media' or 'posts'.\n * @param {string=} id Optional ID of the rest resource to check.\n *\n * @return {boolean|undefined} Whether or not the user can perform the action,\n * or `undefined` if the OPTIONS request is still being made.\n */\nexport function canUser( state, action, resource, id ) {\n\tconst key = compact( [ action, resource, id ] ).join( '/' );\n\treturn get( state, [ 'userPermissions', key ] );\n}\n\n/**\n * Returns whether the current user can edit the given entity.\n *\n * Calling this may trigger an OPTIONS request to the REST API via the\n * `canUser()` resolver.\n *\n * https://developer.wordpress.org/rest-api/reference/\n *\n * @param {Object} state Data state.\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {string} recordId Record's id.\n * @return {boolean|undefined} Whether or not the user can edit,\n * or `undefined` if the OPTIONS request is still being made.\n */\nexport function canUserEditEntityRecord( state, kind, name, recordId ) {\n\tconst entityConfig = getEntityConfig( state, kind, name );\n\tif ( ! entityConfig ) {\n\t\treturn false;\n\t}\n\tconst resource = entityConfig.__unstable_rest_base;\n\n\treturn canUser( state, 'update', resource, recordId );\n}\n\n/**\n * Returns the latest autosaves for the post.\n *\n * May return multiple autosaves since the backend stores one autosave per\n * author for each post.\n *\n * @param {Object} state State tree.\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n *\n * @return {?Array} An array of autosaves for the post, or undefined if there is none.\n */\nexport function getAutosaves( state, postType, postId ) {\n\treturn state.autosaves[ postId ];\n}\n\n/**\n * Returns the autosave for the post and author.\n *\n * @param {Object} state State tree.\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n * @param {number} authorId The id of the author.\n *\n * @return {?Object} The autosave for the post and author.\n */\nexport function getAutosave( state, postType, postId, authorId ) {\n\tif ( authorId === undefined ) {\n\t\treturn;\n\t}\n\n\tconst autosaves = state.autosaves[ postId ];\n\treturn find( autosaves, { author: authorId } );\n}\n\n/**\n * Returns true if the REST request for autosaves has completed.\n *\n * @param {Object} state State tree.\n * @param {string} postType The type of the parent post.\n * @param {number} postId The id of the parent post.\n *\n * @return {boolean} True if the REST request was completed. False otherwise.\n */\nexport const hasFetchedAutosaves = createRegistrySelector(\n\t( select ) => ( state, postType, postId ) => {\n\t\treturn select( STORE_NAME ).hasFinishedResolution( 'getAutosaves', [\n\t\t\tpostType,\n\t\t\tpostId,\n\t\t] );\n\t}\n);\n\n/**\n * Returns a new reference when edited values have changed. This is useful in\n * inferring where an edit has been made between states by comparison of the\n * return values using strict equality.\n *\n * @example\n *\n * ```\n * const hasEditOccurred = (\n * getReferenceByDistinctEdits( beforeState ) !==\n * getReferenceByDistinctEdits( afterState )\n * );\n * ```\n *\n * @param {Object} state Editor state.\n *\n * @return {*} A value whose reference will change only when an edit occurs.\n */\nexport const getReferenceByDistinctEdits = createSelector(\n\t() => [],\n\t( state ) => [\n\t\tstate.undo.length,\n\t\tstate.undo.offset,\n\t\tstate.undo.flattenedUndo,\n\t]\n);\n\n/**\n * Retrieve the frontend template used for a given link.\n *\n * @param {Object} state Editor state.\n * @param {string} link Link.\n *\n * @return {Object?} The template record.\n */\nexport function __experimentalGetTemplateForLink( state, link ) {\n\tconst records = getEntityRecords( state, 'postType', 'wp_template', {\n\t\t'find-template': link,\n\t} );\n\n\tconst template = records?.length ? records[ 0 ] : null;\n\tif ( template ) {\n\t\treturn getEditedEntityRecord(\n\t\t\tstate,\n\t\t\t'postType',\n\t\t\t'wp_template',\n\t\t\ttemplate.id\n\t\t);\n\t}\n\treturn template;\n}\n\n/**\n * Retrieve the current theme's base global styles\n *\n * @param {Object} state Editor state.\n *\n * @return {Object|null} The Global Styles object.\n */\nexport function __experimentalGetCurrentThemeBaseGlobalStyles( state ) {\n\tconst currentTheme = getCurrentTheme( state );\n\tif ( ! currentTheme ) {\n\t\treturn null;\n\t}\n\treturn state.themeBaseGlobalStyles[ currentTheme.stylesheet ];\n}\n\n/**\n * Return the ID of the current global styles object.\n *\n * @param {Object} state Data state.\n *\n * @return {string|null} The current global styles ID.\n */\nexport function __experimentalGetCurrentThemeGlobalStylesVariations( state ) {\n\tconst currentTheme = getCurrentTheme( state );\n\tif ( ! currentTheme ) {\n\t\treturn null;\n\t}\n\treturn state.themeGlobalStyleVariations[ currentTheme.stylesheet ];\n}\n\n/**\n * Retrieve the list of registered block patterns.\n *\n * @param {Object} state Data state.\n *\n * @return {Array} Block pattern list.\n */\nexport function getBlockPatterns( state ) {\n\treturn state.blockPatterns;\n}\n\n/**\n * Retrieve the list of registered block pattern categories.\n *\n * @param {Object} state Data state.\n *\n * @return {Array} Block pattern category list.\n */\nexport function getBlockPatternCategories( state ) {\n\treturn state.blockPatternCategories;\n}\n"]}
package/build/types.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
@@ -12,7 +12,7 @@ var _lodash = require("lodash");
12
12
  */
13
13
 
14
14
  /**
15
- * Given the current and next item entity, returns the minimally "modified"
15
+ * Given the current and next item entity record, returns the minimally "modified"
16
16
  * result of the next item, preferring value references from the original item
17
17
  * if equal. If all values match, the original item is returned.
18
18
  *
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/utils/conservative-map-item.js"],"names":["conservativeMapItem","item","nextItem","hasChanges","result","key","hasOwnProperty"],"mappings":";;;;;;;AAGA;;AAHA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASA,mBAAT,CAA8BC,IAA9B,EAAoCC,QAApC,EAA+C;AAC7D;AACA,MAAK,CAAED,IAAP,EAAc;AACb,WAAOC,QAAP;AACA;;AAED,MAAIC,UAAU,GAAG,KAAjB;AACA,QAAMC,MAAM,GAAG,EAAf;;AACA,OAAM,MAAMC,GAAZ,IAAmBH,QAAnB,EAA8B;AAC7B,QAAK,qBAASD,IAAI,CAAEI,GAAF,CAAb,EAAsBH,QAAQ,CAAEG,GAAF,CAA9B,CAAL,EAA+C;AAC9CD,MAAAA,MAAM,CAAEC,GAAF,CAAN,GAAgBJ,IAAI,CAAEI,GAAF,CAApB;AACA,KAFD,MAEO;AACNF,MAAAA,UAAU,GAAG,IAAb;AACAC,MAAAA,MAAM,CAAEC,GAAF,CAAN,GAAgBH,QAAQ,CAAEG,GAAF,CAAxB;AACA;AACD;;AAED,MAAK,CAAEF,UAAP,EAAoB;AACnB,WAAOF,IAAP;AACA,GAnB4D,CAqB7D;AACA;AACA;;;AACA,OAAM,MAAMI,GAAZ,IAAmBJ,IAAnB,EAA0B;AACzB,QAAK,CAAEG,MAAM,CAACE,cAAP,CAAuBD,GAAvB,CAAP,EAAsC;AACrCD,MAAAA,MAAM,CAAEC,GAAF,CAAN,GAAgBJ,IAAI,CAAEI,GAAF,CAApB;AACA;AACD;;AAED,SAAOD,MAAP;AACA","sourcesContent":["/**\n * External dependencies\n */\nimport { isEqual } from 'lodash';\n\n/**\n * Given the current and next item entity, returns the minimally \"modified\"\n * result of the next item, preferring value references from the original item\n * if equal. If all values match, the original item is returned.\n *\n * @param {Object} item Original item.\n * @param {Object} nextItem Next item.\n *\n * @return {Object} Minimally modified merged item.\n */\nexport default function conservativeMapItem( item, nextItem ) {\n\t// Return next item in its entirety if there is no original item.\n\tif ( ! item ) {\n\t\treturn nextItem;\n\t}\n\n\tlet hasChanges = false;\n\tconst result = {};\n\tfor ( const key in nextItem ) {\n\t\tif ( isEqual( item[ key ], nextItem[ key ] ) ) {\n\t\t\tresult[ key ] = item[ key ];\n\t\t} else {\n\t\t\thasChanges = true;\n\t\t\tresult[ key ] = nextItem[ key ];\n\t\t}\n\t}\n\n\tif ( ! hasChanges ) {\n\t\treturn item;\n\t}\n\n\t// Only at this point, backfill properties from the original item which\n\t// weren't explicitly set into the result above. This is an optimization\n\t// to allow `hasChanges` to return early.\n\tfor ( const key in item ) {\n\t\tif ( ! result.hasOwnProperty( key ) ) {\n\t\t\tresult[ key ] = item[ key ];\n\t\t}\n\t}\n\n\treturn result;\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/utils/conservative-map-item.js"],"names":["conservativeMapItem","item","nextItem","hasChanges","result","key","hasOwnProperty"],"mappings":";;;;;;;AAGA;;AAHA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASA,mBAAT,CAA8BC,IAA9B,EAAoCC,QAApC,EAA+C;AAC7D;AACA,MAAK,CAAED,IAAP,EAAc;AACb,WAAOC,QAAP;AACA;;AAED,MAAIC,UAAU,GAAG,KAAjB;AACA,QAAMC,MAAM,GAAG,EAAf;;AACA,OAAM,MAAMC,GAAZ,IAAmBH,QAAnB,EAA8B;AAC7B,QAAK,qBAASD,IAAI,CAAEI,GAAF,CAAb,EAAsBH,QAAQ,CAAEG,GAAF,CAA9B,CAAL,EAA+C;AAC9CD,MAAAA,MAAM,CAAEC,GAAF,CAAN,GAAgBJ,IAAI,CAAEI,GAAF,CAApB;AACA,KAFD,MAEO;AACNF,MAAAA,UAAU,GAAG,IAAb;AACAC,MAAAA,MAAM,CAAEC,GAAF,CAAN,GAAgBH,QAAQ,CAAEG,GAAF,CAAxB;AACA;AACD;;AAED,MAAK,CAAEF,UAAP,EAAoB;AACnB,WAAOF,IAAP;AACA,GAnB4D,CAqB7D;AACA;AACA;;;AACA,OAAM,MAAMI,GAAZ,IAAmBJ,IAAnB,EAA0B;AACzB,QAAK,CAAEG,MAAM,CAACE,cAAP,CAAuBD,GAAvB,CAAP,EAAsC;AACrCD,MAAAA,MAAM,CAAEC,GAAF,CAAN,GAAgBJ,IAAI,CAAEI,GAAF,CAApB;AACA;AACD;;AAED,SAAOD,MAAP;AACA","sourcesContent":["/**\n * External dependencies\n */\nimport { isEqual } from 'lodash';\n\n/**\n * Given the current and next item entity record, returns the minimally \"modified\"\n * result of the next item, preferring value references from the original item\n * if equal. If all values match, the original item is returned.\n *\n * @param {Object} item Original item.\n * @param {Object} nextItem Next item.\n *\n * @return {Object} Minimally modified merged item.\n */\nexport default function conservativeMapItem( item, nextItem ) {\n\t// Return next item in its entirety if there is no original item.\n\tif ( ! item ) {\n\t\treturn nextItem;\n\t}\n\n\tlet hasChanges = false;\n\tconst result = {};\n\tfor ( const key in nextItem ) {\n\t\tif ( isEqual( item[ key ], nextItem[ key ] ) ) {\n\t\t\tresult[ key ] = item[ key ];\n\t\t} else {\n\t\t\thasChanges = true;\n\t\t\tresult[ key ] = nextItem[ key ];\n\t\t}\n\t}\n\n\tif ( ! hasChanges ) {\n\t\treturn item;\n\t}\n\n\t// Only at this point, backfill properties from the original item which\n\t// weren't explicitly set into the result above. This is an optimization\n\t// to allow `hasChanges` to return early.\n\tfor ( const key in item ) {\n\t\tif ( ! result.hasOwnProperty( key ) ) {\n\t\t\tresult[ key ] = item[ key ];\n\t\t}\n\t}\n\n\treturn result;\n}\n"]}
@@ -5,14 +5,16 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
+ /** @typedef {import('../types').AnyFunction} AnyFunction */
9
+
8
10
  /**
9
11
  * A higher-order reducer creator which invokes the original reducer only if
10
12
  * the dispatching action matches the given predicate, **OR** if state is
11
13
  * initializing (undefined).
12
14
  *
13
- * @param {Function} isMatch Function predicate for allowing reducer call.
15
+ * @param {AnyFunction} isMatch Function predicate for allowing reducer call.
14
16
  *
15
- * @return {Function} Higher-order reducer.
17
+ * @return {AnyFunction} Higher-order reducer.
16
18
  */
17
19
  const ifMatchingAction = isMatch => reducer => (state, action) => {
18
20
  if (state === undefined || isMatch(action)) {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/utils/if-matching-action.js"],"names":["ifMatchingAction","isMatch","reducer","state","action","undefined"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,gBAAgB,GAAKC,OAAF,IAAiBC,OAAF,IAAe,CAAEC,KAAF,EAASC,MAAT,KAAqB;AAC3E,MAAKD,KAAK,KAAKE,SAAV,IAAuBJ,OAAO,CAAEG,MAAF,CAAnC,EAAgD;AAC/C,WAAOF,OAAO,CAAEC,KAAF,EAASC,MAAT,CAAd;AACA;;AAED,SAAOD,KAAP;AACA,CAND;;eAQeH,gB","sourcesContent":["/**\n * A higher-order reducer creator which invokes the original reducer only if\n * the dispatching action matches the given predicate, **OR** if state is\n * initializing (undefined).\n *\n * @param {Function} isMatch Function predicate for allowing reducer call.\n *\n * @return {Function} Higher-order reducer.\n */\nconst ifMatchingAction = ( isMatch ) => ( reducer ) => ( state, action ) => {\n\tif ( state === undefined || isMatch( action ) ) {\n\t\treturn reducer( state, action );\n\t}\n\n\treturn state;\n};\n\nexport default ifMatchingAction;\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/utils/if-matching-action.js"],"names":["ifMatchingAction","isMatch","reducer","state","action","undefined"],"mappings":";;;;;;;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,gBAAgB,GAAKC,OAAF,IAAiBC,OAAF,IAAe,CAAEC,KAAF,EAASC,MAAT,KAAqB;AAC3E,MAAKD,KAAK,KAAKE,SAAV,IAAuBJ,OAAO,CAAEG,MAAF,CAAnC,EAAgD;AAC/C,WAAOF,OAAO,CAAEC,KAAF,EAASC,MAAT,CAAd;AACA;;AAED,SAAOD,KAAP;AACA,CAND;;eAQeH,gB","sourcesContent":["/** @typedef {import('../types').AnyFunction} AnyFunction */\n\n/**\n * A higher-order reducer creator which invokes the original reducer only if\n * the dispatching action matches the given predicate, **OR** if state is\n * initializing (undefined).\n *\n * @param {AnyFunction} isMatch Function predicate for allowing reducer call.\n *\n * @return {AnyFunction} Higher-order reducer.\n */\nconst ifMatchingAction = ( isMatch ) => ( reducer ) => ( state, action ) => {\n\tif ( state === undefined || isMatch( action ) ) {\n\t\treturn reducer( state, action );\n\t}\n\n\treturn state;\n};\n\nexport default ifMatchingAction;\n"]}
@@ -8,7 +8,7 @@ exports.default = isRawAttribute;
8
8
  /**
9
9
  * Checks whether the attribute is a "raw" attribute or not.
10
10
  *
11
- * @param {Object} entity Entity data.
11
+ * @param {Object} entity Entity record.
12
12
  * @param {string} attribute Attribute name.
13
13
  *
14
14
  * @return {boolean} Is the attribute raw
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/utils/is-raw-attribute.js"],"names":["isRawAttribute","entity","attribute","rawAttributes","includes"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASA,cAAT,CAAyBC,MAAzB,EAAiCC,SAAjC,EAA6C;AAC3D,SAAO,CAAED,MAAM,CAACE,aAAP,IAAwB,EAA1B,EAA+BC,QAA/B,CAAyCF,SAAzC,CAAP;AACA","sourcesContent":["/**\n * Checks whether the attribute is a \"raw\" attribute or not.\n *\n * @param {Object} entity Entity data.\n * @param {string} attribute Attribute name.\n *\n * @return {boolean} Is the attribute raw\n */\nexport default function isRawAttribute( entity, attribute ) {\n\treturn ( entity.rawAttributes || [] ).includes( attribute );\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/utils/is-raw-attribute.js"],"names":["isRawAttribute","entity","attribute","rawAttributes","includes"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASA,cAAT,CAAyBC,MAAzB,EAAiCC,SAAjC,EAA6C;AAC3D,SAAO,CAAED,MAAM,CAACE,aAAP,IAAwB,EAA1B,EAA+BC,QAA/B,CAAyCF,SAAzC,CAAP;AACA","sourcesContent":["/**\n * Checks whether the attribute is a \"raw\" attribute or not.\n *\n * @param {Object} entity Entity record.\n * @param {string} attribute Attribute name.\n *\n * @return {boolean} Is the attribute raw\n */\nexport default function isRawAttribute( entity, attribute ) {\n\treturn ( entity.rawAttributes || [] ).includes( attribute );\n}\n"]}
@@ -5,13 +5,15 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.onSubKey = exports.default = void 0;
7
7
 
8
+ /** @typedef {import('../types').AnyFunction} AnyFunction */
9
+
8
10
  /**
9
11
  * Higher-order reducer creator which creates a combined reducer object, keyed
10
12
  * by a property on the action object.
11
13
  *
12
14
  * @param {string} actionProperty Action property by which to key object.
13
15
  *
14
- * @return {Function} Higher-order reducer.
16
+ * @return {AnyFunction} Higher-order reducer.
15
17
  */
16
18
  const onSubKey = actionProperty => reducer => function () {
17
19
  let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/utils/on-sub-key.js"],"names":["onSubKey","actionProperty","reducer","state","action","key","undefined","nextKeyState"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,QAAQ,GAAKC,cAAF,IAAwBC,OAAF,IAAe,YAGxD;AAAA,MAFJC,KAEI,uEAFI,EAEJ;AAAA,MADJC,MACI;AACJ;AACA;AACA,QAAMC,GAAG,GAAGD,MAAM,CAAEH,cAAF,CAAlB;;AACA,MAAKI,GAAG,KAAKC,SAAb,EAAyB;AACxB,WAAOH,KAAP;AACA,GANG,CAQJ;AACA;;;AACA,QAAMI,YAAY,GAAGL,OAAO,CAAEC,KAAK,CAAEE,GAAF,CAAP,EAAgBD,MAAhB,CAA5B;;AACA,MAAKG,YAAY,KAAKJ,KAAK,CAAEE,GAAF,CAA3B,EAAqC;AACpC,WAAOF,KAAP;AACA;;AAED,SAAO,EACN,GAAGA,KADG;AAEN,KAAEE,GAAF,GAASE;AAFH,GAAP;AAIA,CAtBM;;;eAwBQP,Q","sourcesContent":["/**\n * Higher-order reducer creator which creates a combined reducer object, keyed\n * by a property on the action object.\n *\n * @param {string} actionProperty Action property by which to key object.\n *\n * @return {Function} Higher-order reducer.\n */\nexport const onSubKey = ( actionProperty ) => ( reducer ) => (\n\tstate = {},\n\taction\n) => {\n\t// Retrieve subkey from action. Do not track if undefined; useful for cases\n\t// where reducer is scoped by action shape.\n\tconst key = action[ actionProperty ];\n\tif ( key === undefined ) {\n\t\treturn state;\n\t}\n\n\t// Avoid updating state if unchanged. Note that this also accounts for a\n\t// reducer which returns undefined on a key which is not yet tracked.\n\tconst nextKeyState = reducer( state[ key ], action );\n\tif ( nextKeyState === state[ key ] ) {\n\t\treturn state;\n\t}\n\n\treturn {\n\t\t...state,\n\t\t[ key ]: nextKeyState,\n\t};\n};\n\nexport default onSubKey;\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/utils/on-sub-key.js"],"names":["onSubKey","actionProperty","reducer","state","action","key","undefined","nextKeyState"],"mappings":";;;;;;;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,QAAQ,GAAKC,cAAF,IAAwBC,OAAF,IAAe,YAGxD;AAAA,MAFJC,KAEI,uEAFI,EAEJ;AAAA,MADJC,MACI;AACJ;AACA;AACA,QAAMC,GAAG,GAAGD,MAAM,CAAEH,cAAF,CAAlB;;AACA,MAAKI,GAAG,KAAKC,SAAb,EAAyB;AACxB,WAAOH,KAAP;AACA,GANG,CAQJ;AACA;;;AACA,QAAMI,YAAY,GAAGL,OAAO,CAAEC,KAAK,CAAEE,GAAF,CAAP,EAAgBD,MAAhB,CAA5B;;AACA,MAAKG,YAAY,KAAKJ,KAAK,CAAEE,GAAF,CAA3B,EAAqC;AACpC,WAAOF,KAAP;AACA;;AAED,SAAO,EACN,GAAGA,KADG;AAEN,KAAEE,GAAF,GAASE;AAFH,GAAP;AAIA,CAtBM;;;eAwBQP,Q","sourcesContent":["/** @typedef {import('../types').AnyFunction} AnyFunction */\n\n/**\n * Higher-order reducer creator which creates a combined reducer object, keyed\n * by a property on the action object.\n *\n * @param {string} actionProperty Action property by which to key object.\n *\n * @return {AnyFunction} Higher-order reducer.\n */\nexport const onSubKey = ( actionProperty ) => ( reducer ) => (\n\tstate = {},\n\taction\n) => {\n\t// Retrieve subkey from action. Do not track if undefined; useful for cases\n\t// where reducer is scoped by action shape.\n\tconst key = action[ actionProperty ];\n\tif ( key === undefined ) {\n\t\treturn state;\n\t}\n\n\t// Avoid updating state if unchanged. Note that this also accounts for a\n\t// reducer which returns undefined on a key which is not yet tracked.\n\tconst nextKeyState = reducer( state[ key ], action );\n\tif ( nextKeyState === state[ key ] ) {\n\t\treturn state;\n\t}\n\n\treturn {\n\t\t...state,\n\t\t[ key ]: nextKeyState,\n\t};\n};\n\nexport default onSubKey;\n"]}
@@ -5,13 +5,15 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
+ /** @typedef {import('../types').AnyFunction} AnyFunction */
9
+
8
10
  /**
9
11
  * Higher-order reducer creator which substitutes the action object before
10
12
  * passing to the original reducer.
11
13
  *
12
- * @param {Function} replacer Function mapping original action to replacement.
14
+ * @param {AnyFunction} replacer Function mapping original action to replacement.
13
15
  *
14
- * @return {Function} Higher-order reducer.
16
+ * @return {AnyFunction} Higher-order reducer.
15
17
  */
16
18
  const replaceAction = replacer => reducer => (state, action) => {
17
19
  return reducer(state, replacer(action));
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/utils/replace-action.js"],"names":["replaceAction","replacer","reducer","state","action"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,aAAa,GAAKC,QAAF,IAAkBC,OAAF,IAAe,CAAEC,KAAF,EAASC,MAAT,KAAqB;AACzE,SAAOF,OAAO,CAAEC,KAAF,EAASF,QAAQ,CAAEG,MAAF,CAAjB,CAAd;AACA,CAFD;;eAIeJ,a","sourcesContent":["/**\n * Higher-order reducer creator which substitutes the action object before\n * passing to the original reducer.\n *\n * @param {Function} replacer Function mapping original action to replacement.\n *\n * @return {Function} Higher-order reducer.\n */\nconst replaceAction = ( replacer ) => ( reducer ) => ( state, action ) => {\n\treturn reducer( state, replacer( action ) );\n};\n\nexport default replaceAction;\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/utils/replace-action.js"],"names":["replaceAction","replacer","reducer","state","action"],"mappings":";;;;;;;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,aAAa,GAAKC,QAAF,IAAkBC,OAAF,IAAe,CAAEC,KAAF,EAASC,MAAT,KAAqB;AACzE,SAAOF,OAAO,CAAEC,KAAF,EAASF,QAAQ,CAAEG,MAAF,CAAjB,CAAd;AACA,CAFD;;eAIeJ,a","sourcesContent":["/** @typedef {import('../types').AnyFunction} AnyFunction */\n\n/**\n * Higher-order reducer creator which substitutes the action object before\n * passing to the original reducer.\n *\n * @param {AnyFunction} replacer Function mapping original action to replacement.\n *\n * @return {AnyFunction} Higher-order reducer.\n */\nconst replaceAction = ( replacer ) => ( reducer ) => ( state, action ) => {\n\treturn reducer( state, replacer( action ) );\n};\n\nexport default replaceAction;\n"]}
@@ -15,7 +15,7 @@ import deprecated from '@wordpress/deprecated';
15
15
  */
16
16
 
17
17
  import { receiveItems, removeItems, receiveQueriedItems } from './queried-data';
18
- import { getKindEntities, DEFAULT_ENTITY_KEY } from './entities';
18
+ import { getOrLoadEntitiesConfig, DEFAULT_ENTITY_KEY } from './entities';
19
19
  import { createBatch } from './batch';
20
20
  import { STORE_NAME } from './name';
21
21
  /**
@@ -65,8 +65,8 @@ export function addEntities(entities) {
65
65
  /**
66
66
  * Returns an action object used in signalling that entity records have been received.
67
67
  *
68
- * @param {string} kind Kind of the received entity.
69
- * @param {string} name Name of the received entity.
68
+ * @param {string} kind Kind of the received entity record.
69
+ * @param {string} name Name of the received entity record.
70
70
  * @param {Array|Object} records Records received.
71
71
  * @param {?Object} query Query Object.
72
72
  * @param {?boolean} invalidateCache Should invalidate query caches.
@@ -196,38 +196,41 @@ export function receiveEmbedPreview(url, preview) {
196
196
  /**
197
197
  * Action triggered to delete an entity record.
198
198
  *
199
- * @param {string} kind Kind of the deleted entity.
200
- * @param {string} name Name of the deleted entity.
201
- * @param {string} recordId Record ID of the deleted entity.
202
- * @param {?Object} query Special query parameters for the
203
- * DELETE API call.
204
- * @param {Object} [options] Delete options.
205
- * @param {Function} [options.__unstableFetch] Internal use only. Function to
206
- * call instead of `apiFetch()`.
207
- * Must return a promise.
199
+ * @param {string} kind Kind of the deleted entity.
200
+ * @param {string} name Name of the deleted entity.
201
+ * @param {string} recordId Record ID of the deleted entity.
202
+ * @param {?Object} query Special query parameters for the
203
+ * DELETE API call.
204
+ * @param {Object} [options] Delete options.
205
+ * @param {Function} [options.__unstableFetch] Internal use only. Function to
206
+ * call instead of `apiFetch()`.
207
+ * Must return a promise.
208
+ * @param {boolean} [options.throwOnError=false] If false, this action suppresses all
209
+ * the exceptions. Defaults to false.
208
210
  */
209
211
 
210
212
  export const deleteEntityRecord = function (kind, name, recordId, query) {
211
213
  let {
212
- __unstableFetch = apiFetch
214
+ __unstableFetch = apiFetch,
215
+ throwOnError = false
213
216
  } = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
214
217
  return async _ref => {
215
218
  let {
216
219
  dispatch
217
220
  } = _ref;
218
- const entities = await dispatch(getKindEntities(kind));
219
- const entity = find(entities, {
221
+ const configs = await dispatch(getOrLoadEntitiesConfig(kind));
222
+ const entityConfig = find(configs, {
220
223
  kind,
221
224
  name
222
225
  });
223
226
  let error;
224
227
  let deletedRecord = false;
225
228
 
226
- if (!entity || entity !== null && entity !== void 0 && entity.__experimentalNoFetch) {
229
+ if (!entityConfig || entityConfig !== null && entityConfig !== void 0 && entityConfig.__experimentalNoFetch) {
227
230
  return;
228
231
  }
229
232
 
230
- const lock = await dispatch.__unstableAcquireStoreLock(STORE_NAME, ['entities', 'data', kind, name, recordId], {
233
+ const lock = await dispatch.__unstableAcquireStoreLock(STORE_NAME, ['entities', 'records', kind, name, recordId], {
231
234
  exclusive: true
232
235
  });
233
236
 
@@ -238,9 +241,10 @@ export const deleteEntityRecord = function (kind, name, recordId, query) {
238
241
  name,
239
242
  recordId
240
243
  });
244
+ let hasError = false;
241
245
 
242
246
  try {
243
- let path = `${entity.baseURL}/${recordId}`;
247
+ let path = `${entityConfig.baseURL}/${recordId}`;
244
248
 
245
249
  if (query) {
246
250
  path = addQueryArgs(path, query);
@@ -252,6 +256,7 @@ export const deleteEntityRecord = function (kind, name, recordId, query) {
252
256
  });
253
257
  await dispatch(removeItems(kind, name, recordId, true));
254
258
  } catch (_error) {
259
+ hasError = true;
255
260
  error = _error;
256
261
  }
257
262
 
@@ -262,6 +267,11 @@ export const deleteEntityRecord = function (kind, name, recordId, query) {
262
267
  recordId,
263
268
  error
264
269
  });
270
+
271
+ if (hasError && throwOnError) {
272
+ throw error;
273
+ }
274
+
265
275
  return deletedRecord;
266
276
  } finally {
267
277
  dispatch.__unstableReleaseStoreLock(lock);
@@ -289,16 +299,16 @@ export const editEntityRecord = function (kind, name, recordId, edits) {
289
299
  select,
290
300
  dispatch
291
301
  } = _ref2;
292
- const entity = select.getEntity(kind, name);
302
+ const entityConfig = select.getEntityConfig(kind, name);
293
303
 
294
- if (!entity) {
304
+ if (!entityConfig) {
295
305
  throw new Error(`The entity being edited (${kind}, ${name}) does not have a loaded config.`);
296
306
  }
297
307
 
298
308
  const {
299
309
  transientEdits = {},
300
310
  mergedEdits = {}
301
- } = entity;
311
+ } = entityConfig;
302
312
  const record = select.getRawEntityRecord(kind, name, recordId);
303
313
  const editedRecord = select.getEditedEntityRecord(kind, name, recordId);
304
314
  const edit = {
@@ -395,20 +405,23 @@ export function __unstableCreateUndoLevel() {
395
405
  /**
396
406
  * Action triggered to save an entity record.
397
407
  *
398
- * @param {string} kind Kind of the received entity.
399
- * @param {string} name Name of the received entity.
400
- * @param {Object} record Record to be saved.
401
- * @param {Object} options Saving options.
402
- * @param {boolean} [options.isAutosave=false] Whether this is an autosave.
403
- * @param {Function} [options.__unstableFetch] Internal use only. Function to
404
- * call instead of `apiFetch()`.
405
- * Must return a promise.
408
+ * @param {string} kind Kind of the received entity.
409
+ * @param {string} name Name of the received entity.
410
+ * @param {Object} record Record to be saved.
411
+ * @param {Object} options Saving options.
412
+ * @param {boolean} [options.isAutosave=false] Whether this is an autosave.
413
+ * @param {Function} [options.__unstableFetch] Internal use only. Function to
414
+ * call instead of `apiFetch()`.
415
+ * Must return a promise.
416
+ * @param {boolean} [options.throwOnError=false] If false, this action suppresses all
417
+ * the exceptions. Defaults to false.
406
418
  */
407
419
 
408
420
  export const saveEntityRecord = function (kind, name, record) {
409
421
  let {
410
422
  isAutosave = false,
411
- __unstableFetch = apiFetch
423
+ __unstableFetch = apiFetch,
424
+ throwOnError = false
412
425
  } = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
413
426
  return async _ref5 => {
414
427
  let {
@@ -416,19 +429,19 @@ export const saveEntityRecord = function (kind, name, record) {
416
429
  resolveSelect,
417
430
  dispatch
418
431
  } = _ref5;
419
- const entities = await dispatch(getKindEntities(kind));
420
- const entity = find(entities, {
432
+ const configs = await dispatch(getOrLoadEntitiesConfig(kind));
433
+ const entityConfig = find(configs, {
421
434
  kind,
422
435
  name
423
436
  });
424
437
 
425
- if (!entity || entity !== null && entity !== void 0 && entity.__experimentalNoFetch) {
438
+ if (!entityConfig || entityConfig !== null && entityConfig !== void 0 && entityConfig.__experimentalNoFetch) {
426
439
  return;
427
440
  }
428
441
 
429
- const entityIdKey = entity.key || DEFAULT_ENTITY_KEY;
442
+ const entityIdKey = entityConfig.key || DEFAULT_ENTITY_KEY;
430
443
  const recordId = record[entityIdKey];
431
- const lock = await dispatch.__unstableAcquireStoreLock(STORE_NAME, ['entities', 'data', kind, name, recordId || uuid()], {
444
+ const lock = await dispatch.__unstableAcquireStoreLock(STORE_NAME, ['entities', 'records', kind, name, recordId || uuid()], {
432
445
  exclusive: true
433
446
  });
434
447
 
@@ -456,9 +469,10 @@ export const saveEntityRecord = function (kind, name, record) {
456
469
  });
457
470
  let updatedRecord;
458
471
  let error;
472
+ let hasError = false;
459
473
 
460
474
  try {
461
- const path = `${entity.baseURL}${recordId ? '/' + recordId : ''}`;
475
+ const path = `${entityConfig.baseURL}${recordId ? '/' + recordId : ''}`;
462
476
  const persistedRecord = select.getRawEntityRecord(kind, name, recordId);
463
477
 
464
478
  if (isAutosave) {
@@ -521,9 +535,9 @@ export const saveEntityRecord = function (kind, name, record) {
521
535
  } else {
522
536
  let edits = record;
523
537
 
524
- if (entity.__unstablePrePersist) {
538
+ if (entityConfig.__unstablePrePersist) {
525
539
  edits = { ...edits,
526
- ...entity.__unstablePrePersist(persistedRecord, edits)
540
+ ...entityConfig.__unstablePrePersist(persistedRecord, edits)
527
541
  };
528
542
  }
529
543
 
@@ -535,6 +549,7 @@ export const saveEntityRecord = function (kind, name, record) {
535
549
  dispatch.receiveEntityRecords(kind, name, updatedRecord, undefined, true, edits);
536
550
  }
537
551
  } catch (_error) {
552
+ hasError = true;
538
553
  error = _error;
539
554
  }
540
555
 
@@ -546,6 +561,11 @@ export const saveEntityRecord = function (kind, name, record) {
546
561
  error,
547
562
  isAutosave
548
563
  });
564
+
565
+ if (hasError && throwOnError) {
566
+ throw error;
567
+ }
568
+
549
569
  return updatedRecord;
550
570
  } finally {
551
571
  dispatch.__unstableReleaseStoreLock(lock);
@@ -623,17 +643,17 @@ export const saveEditedEntityRecord = (kind, name, recordId, options) => async _
623
643
  return;
624
644
  }
625
645
 
626
- const entities = await dispatch(getKindEntities(kind));
627
- const entity = find(entities, {
646
+ const configs = await dispatch(getOrLoadEntitiesConfig(kind));
647
+ const entityConfig = find(configs, {
628
648
  kind,
629
649
  name
630
650
  });
631
651
 
632
- if (!entity) {
652
+ if (!entityConfig) {
633
653
  return;
634
654
  }
635
655
 
636
- const entityIdKey = entity.key || DEFAULT_ENTITY_KEY;
656
+ const entityIdKey = entityConfig.key || DEFAULT_ENTITY_KEY;
637
657
  const edits = select.getEntityRecordNonTransientEdits(kind, name, recordId);
638
658
  const record = {
639
659
  [entityIdKey]: recordId,