@strapi/content-manager 5.37.1 → 5.38.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 (582) hide show
  1. package/dist/admin/components/ActionsDrawer.js.map +1 -1
  2. package/dist/admin/components/ActionsDrawer.mjs.map +1 -1
  3. package/dist/admin/components/ComponentIcon.js.map +1 -1
  4. package/dist/admin/components/ComponentIcon.mjs.map +1 -1
  5. package/dist/admin/components/ConfigurationForm/EditFieldForm.js.map +1 -1
  6. package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs.map +1 -1
  7. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  8. package/dist/admin/components/ConfigurationForm/Fields.mjs +2 -2
  9. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  10. package/dist/admin/components/ConfigurationForm/Form.js +62 -30
  11. package/dist/admin/components/ConfigurationForm/Form.js.map +1 -1
  12. package/dist/admin/components/ConfigurationForm/Form.mjs +62 -30
  13. package/dist/admin/components/ConfigurationForm/Form.mjs.map +1 -1
  14. package/dist/admin/components/DragLayer.js.map +1 -1
  15. package/dist/admin/components/DragLayer.mjs.map +1 -1
  16. package/dist/admin/components/DragPreviews/CardDragPreview.js.map +1 -1
  17. package/dist/admin/components/DragPreviews/CardDragPreview.mjs.map +1 -1
  18. package/dist/admin/components/DragPreviews/ComponentDragPreview.js.map +1 -1
  19. package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs.map +1 -1
  20. package/dist/admin/components/DragPreviews/RelationDragPreview.js.map +1 -1
  21. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs.map +1 -1
  22. package/dist/admin/components/FieldTypeIcon.js.map +1 -1
  23. package/dist/admin/components/FieldTypeIcon.mjs +1 -1
  24. package/dist/admin/components/FieldTypeIcon.mjs.map +1 -1
  25. package/dist/admin/components/InjectionZone.js.map +1 -1
  26. package/dist/admin/components/InjectionZone.mjs.map +1 -1
  27. package/dist/admin/components/LeftMenu.js.map +1 -1
  28. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  29. package/dist/admin/components/RelativeTime.js.map +1 -1
  30. package/dist/admin/components/RelativeTime.mjs.map +1 -1
  31. package/dist/admin/components/Widgets.js.map +1 -1
  32. package/dist/admin/components/Widgets.mjs +1 -1
  33. package/dist/admin/components/Widgets.mjs.map +1 -1
  34. package/dist/admin/constants/attributes.js.map +1 -1
  35. package/dist/admin/constants/attributes.mjs.map +1 -1
  36. package/dist/admin/constants/collections.js.map +1 -1
  37. package/dist/admin/constants/collections.mjs.map +1 -1
  38. package/dist/admin/constants/dragAndDrop.js.map +1 -1
  39. package/dist/admin/constants/dragAndDrop.mjs.map +1 -1
  40. package/dist/admin/constants/hooks.js.map +1 -1
  41. package/dist/admin/constants/hooks.mjs.map +1 -1
  42. package/dist/admin/constants/plugin.js.map +1 -1
  43. package/dist/admin/constants/plugin.mjs.map +1 -1
  44. package/dist/admin/content-manager.js.map +1 -1
  45. package/dist/admin/content-manager.mjs.map +1 -1
  46. package/dist/admin/features/DocumentRBAC.js.map +1 -1
  47. package/dist/admin/features/DocumentRBAC.mjs.map +1 -1
  48. package/dist/admin/history/components/HistoryAction.js.map +1 -1
  49. package/dist/admin/history/components/HistoryAction.mjs.map +1 -1
  50. package/dist/admin/history/components/VersionContent.js +48 -16
  51. package/dist/admin/history/components/VersionContent.js.map +1 -1
  52. package/dist/admin/history/components/VersionContent.mjs +48 -16
  53. package/dist/admin/history/components/VersionContent.mjs.map +1 -1
  54. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  55. package/dist/admin/history/components/VersionHeader.mjs +1 -1
  56. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  57. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
  58. package/dist/admin/history/components/VersionInputRenderer.mjs +1 -1
  59. package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
  60. package/dist/admin/history/components/VersionsList.js.map +1 -1
  61. package/dist/admin/history/components/VersionsList.mjs.map +1 -1
  62. package/dist/admin/history/index.js.map +1 -1
  63. package/dist/admin/history/index.mjs.map +1 -1
  64. package/dist/admin/history/pages/History.js.map +1 -1
  65. package/dist/admin/history/pages/History.mjs +1 -1
  66. package/dist/admin/history/pages/History.mjs.map +1 -1
  67. package/dist/admin/history/routes.js.map +1 -1
  68. package/dist/admin/history/routes.mjs.map +1 -1
  69. package/dist/admin/history/services/historyVersion.js.map +1 -1
  70. package/dist/admin/history/services/historyVersion.mjs.map +1 -1
  71. package/dist/admin/hooks/useContentManagerInitData.js.map +1 -1
  72. package/dist/admin/hooks/useContentManagerInitData.mjs.map +1 -1
  73. package/dist/admin/hooks/useContentTypeSchema.js.map +1 -1
  74. package/dist/admin/hooks/useContentTypeSchema.mjs.map +1 -1
  75. package/dist/admin/hooks/useDebounce.js.map +1 -1
  76. package/dist/admin/hooks/useDebounce.mjs.map +1 -1
  77. package/dist/admin/hooks/useDocument.js.map +1 -1
  78. package/dist/admin/hooks/useDocument.mjs +1 -1
  79. package/dist/admin/hooks/useDocument.mjs.map +1 -1
  80. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  81. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  82. package/dist/admin/hooks/useDocumentContext.js.map +1 -1
  83. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -1
  84. package/dist/admin/hooks/useDocumentLayout.js +2 -1
  85. package/dist/admin/hooks/useDocumentLayout.js.map +1 -1
  86. package/dist/admin/hooks/useDocumentLayout.mjs +2 -1
  87. package/dist/admin/hooks/useDocumentLayout.mjs.map +1 -1
  88. package/dist/admin/hooks/useDragAndDrop.js +1 -3
  89. package/dist/admin/hooks/useDragAndDrop.js.map +1 -1
  90. package/dist/admin/hooks/useDragAndDrop.mjs +1 -3
  91. package/dist/admin/hooks/useDragAndDrop.mjs.map +1 -1
  92. package/dist/admin/hooks/useKeyboardDragAndDrop.js.map +1 -1
  93. package/dist/admin/hooks/useKeyboardDragAndDrop.mjs.map +1 -1
  94. package/dist/admin/hooks/useLazyComponents.js.map +1 -1
  95. package/dist/admin/hooks/useLazyComponents.mjs.map +1 -1
  96. package/dist/admin/hooks/useOnce.js.map +1 -1
  97. package/dist/admin/hooks/useOnce.mjs.map +1 -1
  98. package/dist/admin/hooks/usePersistentQueryParams.js.map +1 -1
  99. package/dist/admin/hooks/usePersistentQueryParams.mjs.map +1 -1
  100. package/dist/admin/hooks/usePrev.js.map +1 -1
  101. package/dist/admin/hooks/usePrev.mjs.map +1 -1
  102. package/dist/admin/index.js.map +1 -1
  103. package/dist/admin/index.mjs.map +1 -1
  104. package/dist/admin/layout.js.map +1 -1
  105. package/dist/admin/layout.mjs.map +1 -1
  106. package/dist/admin/modules/app.js.map +1 -1
  107. package/dist/admin/modules/app.mjs.map +1 -1
  108. package/dist/admin/modules/hooks.js.map +1 -1
  109. package/dist/admin/modules/hooks.mjs +1 -1
  110. package/dist/admin/modules/hooks.mjs.map +1 -1
  111. package/dist/admin/modules/reducers.js.map +1 -1
  112. package/dist/admin/modules/reducers.mjs.map +1 -1
  113. package/dist/admin/pages/ComponentConfigurationPage.js.map +1 -1
  114. package/dist/admin/pages/ComponentConfigurationPage.mjs +1 -1
  115. package/dist/admin/pages/ComponentConfigurationPage.mjs.map +1 -1
  116. package/dist/admin/pages/EditConfigurationPage.js.map +1 -1
  117. package/dist/admin/pages/EditConfigurationPage.mjs +1 -1
  118. package/dist/admin/pages/EditConfigurationPage.mjs.map +1 -1
  119. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  120. package/dist/admin/pages/EditView/EditViewPage.mjs +4 -4
  121. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  122. package/dist/admin/pages/EditView/components/Blocker.js.map +1 -1
  123. package/dist/admin/pages/EditView/components/Blocker.mjs.map +1 -1
  124. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  125. package/dist/admin/pages/EditView/components/DocumentActions.mjs +4 -4
  126. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  127. package/dist/admin/pages/EditView/components/DocumentStatus.js.map +1 -1
  128. package/dist/admin/pages/EditView/components/DocumentStatus.mjs.map +1 -1
  129. package/dist/admin/pages/EditView/components/EditorToolbarObserver.js.map +1 -1
  130. package/dist/admin/pages/EditView/components/EditorToolbarObserver.mjs.map +1 -1
  131. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
  132. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs +1 -1
  133. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs.map +1 -1
  134. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.js.map +1 -1
  135. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.mjs +1 -1
  136. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.mjs.map +1 -1
  137. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -1
  138. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs +1 -1
  139. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs.map +1 -1
  140. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
  141. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -1
  142. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js +51 -0
  143. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js.map +1 -1
  144. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs +53 -2
  145. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -1
  146. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.js.map +1 -1
  147. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.mjs.map +1 -1
  148. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.js.map +1 -1
  149. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.mjs.map +1 -1
  150. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +6 -2
  151. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  152. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +6 -2
  153. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  154. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  155. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  156. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js.map +1 -1
  157. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs.map +1 -1
  158. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  159. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +1 -1
  160. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  161. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  162. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +1 -1
  163. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  164. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.js.map +1 -1
  165. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs +2 -2
  166. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs.map +1 -1
  167. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.js.map +1 -1
  168. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.mjs.map +1 -1
  169. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/constants.js.map +1 -1
  170. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/constants.mjs.map +1 -1
  171. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.js.map +1 -1
  172. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.mjs.map +1 -1
  173. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/enterKey.js.map +1 -1
  174. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/enterKey.mjs.map +1 -1
  175. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.js.map +1 -1
  176. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.mjs.map +1 -1
  177. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.js.map +1 -1
  178. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.mjs.map +1 -1
  179. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  180. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  181. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  182. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  183. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  184. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  185. package/dist/admin/pages/EditView/components/FormInputs/ComponentContext.js.map +1 -1
  186. package/dist/admin/pages/EditView/components/FormInputs/ComponentContext.mjs.map +1 -1
  187. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.js.map +1 -1
  188. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.mjs.map +1 -1
  189. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  190. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  191. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.js.map +1 -1
  192. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.mjs.map +1 -1
  193. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +1 -1
  194. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  195. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +1 -1
  196. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  197. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicZoneLabel.js.map +1 -1
  198. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicZoneLabel.mjs.map +1 -1
  199. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  200. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  201. package/dist/admin/pages/EditView/components/FormInputs/NotAllowed.js.map +1 -1
  202. package/dist/admin/pages/EditView/components/FormInputs/NotAllowed.mjs.map +1 -1
  203. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +45 -6
  204. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  205. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +45 -8
  206. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  207. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +148 -111
  208. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  209. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +152 -115
  210. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  211. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  212. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  213. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  214. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  215. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  216. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  217. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js.map +1 -1
  218. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs.map +1 -1
  219. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -1
  220. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs.map +1 -1
  221. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.js.map +1 -1
  222. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.mjs.map +1 -1
  223. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  224. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +2 -2
  225. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  226. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.js.map +1 -1
  227. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.mjs.map +1 -1
  228. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js.map +1 -1
  229. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.mjs.map +1 -1
  230. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js.map +1 -1
  231. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.mjs.map +1 -1
  232. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js +8 -6
  233. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js.map +1 -1
  234. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs +8 -6
  235. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs.map +1 -1
  236. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  237. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  238. package/dist/admin/pages/EditView/components/Header.js.map +1 -1
  239. package/dist/admin/pages/EditView/components/Header.mjs +2 -2
  240. package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
  241. package/dist/admin/pages/EditView/components/InputRenderer.js +15 -5
  242. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  243. package/dist/admin/pages/EditView/components/InputRenderer.mjs +15 -5
  244. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  245. package/dist/admin/pages/EditView/components/Panels.js.map +1 -1
  246. package/dist/admin/pages/EditView/components/Panels.mjs.map +1 -1
  247. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  248. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  249. package/dist/admin/pages/EditView/utils/forms.js.map +1 -1
  250. package/dist/admin/pages/EditView/utils/forms.mjs.map +1 -1
  251. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
  252. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +1 -1
  253. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -1
  254. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -1
  255. package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs +1 -1
  256. package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs.map +1 -1
  257. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js.map +1 -1
  258. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.mjs +1 -1
  259. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.mjs.map +1 -1
  260. package/dist/admin/pages/ListConfiguration/components/Header.js.map +1 -1
  261. package/dist/admin/pages/ListConfiguration/components/Header.mjs.map +1 -1
  262. package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -1
  263. package/dist/admin/pages/ListConfiguration/components/Settings.mjs.map +1 -1
  264. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js.map +1 -1
  265. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.mjs.map +1 -1
  266. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  267. package/dist/admin/pages/ListView/ListViewPage.mjs +3 -3
  268. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  269. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.js.map +1 -1
  270. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.mjs.map +1 -1
  271. package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
  272. package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs.map +1 -1
  273. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +1 -4
  274. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  275. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +2 -5
  276. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  277. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +4 -4
  278. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  279. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +2 -2
  280. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  281. package/dist/admin/pages/ListView/components/Filters.js +54 -1
  282. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  283. package/dist/admin/pages/ListView/components/Filters.mjs +54 -1
  284. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  285. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  286. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  287. package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
  288. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
  289. package/dist/admin/pages/ListView/components/TableCells/CellValue.js +7 -1
  290. package/dist/admin/pages/ListView/components/TableCells/CellValue.js.map +1 -1
  291. package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs +7 -1
  292. package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs.map +1 -1
  293. package/dist/admin/pages/ListView/components/TableCells/Components.js.map +1 -1
  294. package/dist/admin/pages/ListView/components/TableCells/Components.mjs +2 -2
  295. package/dist/admin/pages/ListView/components/TableCells/Components.mjs.map +1 -1
  296. package/dist/admin/pages/ListView/components/TableCells/Media.js.map +1 -1
  297. package/dist/admin/pages/ListView/components/TableCells/Media.mjs +1 -1
  298. package/dist/admin/pages/ListView/components/TableCells/Media.mjs.map +1 -1
  299. package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
  300. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
  301. package/dist/admin/pages/ListView/components/ViewSettingsMenu.js.map +1 -1
  302. package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs.map +1 -1
  303. package/dist/admin/pages/NoContentTypePage.js.map +1 -1
  304. package/dist/admin/pages/NoContentTypePage.mjs.map +1 -1
  305. package/dist/admin/pages/NoPermissionsPage.js.map +1 -1
  306. package/dist/admin/pages/NoPermissionsPage.mjs.map +1 -1
  307. package/dist/admin/preview/components/InputPopover.js.map +1 -1
  308. package/dist/admin/preview/components/InputPopover.mjs.map +1 -1
  309. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  310. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  311. package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -1
  312. package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -1
  313. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -1
  314. package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -1
  315. package/dist/admin/preview/index.js.map +1 -1
  316. package/dist/admin/preview/index.mjs.map +1 -1
  317. package/dist/admin/preview/pages/Preview.js.map +1 -1
  318. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  319. package/dist/admin/preview/routes.js.map +1 -1
  320. package/dist/admin/preview/routes.mjs.map +1 -1
  321. package/dist/admin/preview/services/preview.js.map +1 -1
  322. package/dist/admin/preview/services/preview.mjs.map +1 -1
  323. package/dist/admin/preview/utils/constants.js +0 -1
  324. package/dist/admin/preview/utils/constants.js.map +1 -1
  325. package/dist/admin/preview/utils/constants.mjs +0 -1
  326. package/dist/admin/preview/utils/constants.mjs.map +1 -1
  327. package/dist/admin/preview/utils/fieldUtils.js.map +1 -1
  328. package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -1
  329. package/dist/admin/preview/utils/getSendMessage.js.map +1 -1
  330. package/dist/admin/preview/utils/getSendMessage.mjs.map +1 -1
  331. package/dist/admin/preview/utils/previewScript.js.map +1 -1
  332. package/dist/admin/preview/utils/previewScript.mjs.map +1 -1
  333. package/dist/admin/router.js.map +1 -1
  334. package/dist/admin/router.mjs.map +1 -1
  335. package/dist/admin/services/api.js.map +1 -1
  336. package/dist/admin/services/api.mjs.map +1 -1
  337. package/dist/admin/services/components.js.map +1 -1
  338. package/dist/admin/services/components.mjs.map +1 -1
  339. package/dist/admin/services/contentTypes.js.map +1 -1
  340. package/dist/admin/services/contentTypes.mjs.map +1 -1
  341. package/dist/admin/services/documents.js.map +1 -1
  342. package/dist/admin/services/documents.mjs.map +1 -1
  343. package/dist/admin/services/homepage.js.map +1 -1
  344. package/dist/admin/services/homepage.mjs.map +1 -1
  345. package/dist/admin/services/init.js.map +1 -1
  346. package/dist/admin/services/init.mjs.map +1 -1
  347. package/dist/admin/services/relations.js.map +1 -1
  348. package/dist/admin/services/relations.mjs.map +1 -1
  349. package/dist/admin/services/uid.js.map +1 -1
  350. package/dist/admin/services/uid.mjs.map +1 -1
  351. package/dist/admin/src/exports.d.ts +1 -1
  352. package/dist/admin/src/hooks/useDocumentLayout.d.ts +1 -0
  353. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +1 -0
  354. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +7 -2
  355. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +1 -1
  356. package/dist/admin/src/utils/conditionalFields.d.ts +12 -0
  357. package/dist/admin/translations/en.json.js +10 -0
  358. package/dist/admin/translations/en.json.js.map +1 -1
  359. package/dist/admin/translations/en.json.mjs +10 -0
  360. package/dist/admin/translations/en.json.mjs.map +1 -1
  361. package/dist/admin/translations/es.json.js +136 -2
  362. package/dist/admin/translations/es.json.js.map +1 -1
  363. package/dist/admin/translations/es.json.mjs +136 -2
  364. package/dist/admin/translations/es.json.mjs.map +1 -1
  365. package/dist/admin/translations/fr.json.js +72 -1
  366. package/dist/admin/translations/fr.json.js.map +1 -1
  367. package/dist/admin/translations/fr.json.mjs +72 -1
  368. package/dist/admin/translations/fr.json.mjs.map +1 -1
  369. package/dist/admin/utils/api.js.map +1 -1
  370. package/dist/admin/utils/api.mjs.map +1 -1
  371. package/dist/admin/utils/attributes.js.map +1 -1
  372. package/dist/admin/utils/attributes.mjs.map +1 -1
  373. package/dist/admin/utils/conditionalFields.js +76 -0
  374. package/dist/admin/utils/conditionalFields.js.map +1 -0
  375. package/dist/admin/utils/conditionalFields.mjs +69 -0
  376. package/dist/admin/utils/conditionalFields.mjs.map +1 -0
  377. package/dist/admin/utils/objects.js.map +1 -1
  378. package/dist/admin/utils/objects.mjs.map +1 -1
  379. package/dist/admin/utils/relations.js.map +1 -1
  380. package/dist/admin/utils/relations.mjs.map +1 -1
  381. package/dist/admin/utils/strings.js.map +1 -1
  382. package/dist/admin/utils/strings.mjs.map +1 -1
  383. package/dist/admin/utils/translations.js.map +1 -1
  384. package/dist/admin/utils/translations.mjs.map +1 -1
  385. package/dist/admin/utils/urls.js.map +1 -1
  386. package/dist/admin/utils/urls.mjs.map +1 -1
  387. package/dist/admin/utils/users.js.map +1 -1
  388. package/dist/admin/utils/users.mjs.map +1 -1
  389. package/dist/admin/utils/validation.js.map +1 -1
  390. package/dist/admin/utils/validation.mjs.map +1 -1
  391. package/dist/server/bootstrap.js.map +1 -1
  392. package/dist/server/bootstrap.mjs.map +1 -1
  393. package/dist/server/constants/index.js.map +1 -1
  394. package/dist/server/constants/index.mjs.map +1 -1
  395. package/dist/server/controllers/collection-types.js +157 -4
  396. package/dist/server/controllers/collection-types.js.map +1 -1
  397. package/dist/server/controllers/collection-types.mjs +159 -6
  398. package/dist/server/controllers/collection-types.mjs.map +1 -1
  399. package/dist/server/controllers/components.js.map +1 -1
  400. package/dist/server/controllers/components.mjs.map +1 -1
  401. package/dist/server/controllers/content-types.js +10 -10
  402. package/dist/server/controllers/content-types.js.map +1 -1
  403. package/dist/server/controllers/content-types.mjs.map +1 -1
  404. package/dist/server/controllers/index.js +4 -4
  405. package/dist/server/controllers/index.js.map +1 -1
  406. package/dist/server/controllers/index.mjs.map +1 -1
  407. package/dist/server/controllers/init.js.map +1 -1
  408. package/dist/server/controllers/init.mjs.map +1 -1
  409. package/dist/server/controllers/relations.js.map +1 -1
  410. package/dist/server/controllers/relations.mjs +3 -3
  411. package/dist/server/controllers/relations.mjs.map +1 -1
  412. package/dist/server/controllers/single-types.js +19 -4
  413. package/dist/server/controllers/single-types.js.map +1 -1
  414. package/dist/server/controllers/single-types.mjs +20 -5
  415. package/dist/server/controllers/single-types.mjs.map +1 -1
  416. package/dist/server/controllers/uid.js.map +1 -1
  417. package/dist/server/controllers/uid.mjs +1 -1
  418. package/dist/server/controllers/uid.mjs.map +1 -1
  419. package/dist/server/controllers/utils/clone.js.map +1 -1
  420. package/dist/server/controllers/utils/clone.mjs.map +1 -1
  421. package/dist/server/controllers/utils/document-status.js.map +1 -1
  422. package/dist/server/controllers/utils/document-status.mjs.map +1 -1
  423. package/dist/server/controllers/utils/metadata.js.map +1 -1
  424. package/dist/server/controllers/utils/metadata.mjs.map +1 -1
  425. package/dist/server/controllers/validation/dimensions.js.map +1 -1
  426. package/dist/server/controllers/validation/dimensions.mjs.map +1 -1
  427. package/dist/server/controllers/validation/index.js.map +1 -1
  428. package/dist/server/controllers/validation/index.mjs +1 -1
  429. package/dist/server/controllers/validation/index.mjs.map +1 -1
  430. package/dist/server/controllers/validation/model-configuration.js +6 -1
  431. package/dist/server/controllers/validation/model-configuration.js.map +1 -1
  432. package/dist/server/controllers/validation/model-configuration.mjs +6 -1
  433. package/dist/server/controllers/validation/model-configuration.mjs.map +1 -1
  434. package/dist/server/controllers/validation/relations.js.map +1 -1
  435. package/dist/server/controllers/validation/relations.mjs.map +1 -1
  436. package/dist/server/destroy.js.map +1 -1
  437. package/dist/server/destroy.mjs.map +1 -1
  438. package/dist/server/history/constants.js.map +1 -1
  439. package/dist/server/history/constants.mjs.map +1 -1
  440. package/dist/server/history/controllers/history-version.js.map +1 -1
  441. package/dist/server/history/controllers/history-version.mjs.map +1 -1
  442. package/dist/server/history/controllers/index.js.map +1 -1
  443. package/dist/server/history/controllers/index.mjs.map +1 -1
  444. package/dist/server/history/controllers/validation/history-version.js.map +1 -1
  445. package/dist/server/history/controllers/validation/history-version.mjs.map +1 -1
  446. package/dist/server/history/index.js +4 -4
  447. package/dist/server/history/index.js.map +1 -1
  448. package/dist/server/history/index.mjs.map +1 -1
  449. package/dist/server/history/models/history-version.js.map +1 -1
  450. package/dist/server/history/models/history-version.mjs.map +1 -1
  451. package/dist/server/history/routes/history-version.js.map +1 -1
  452. package/dist/server/history/routes/history-version.mjs.map +1 -1
  453. package/dist/server/history/routes/index.js.map +1 -1
  454. package/dist/server/history/routes/index.mjs.map +1 -1
  455. package/dist/server/history/services/history.js.map +1 -1
  456. package/dist/server/history/services/history.mjs.map +1 -1
  457. package/dist/server/history/services/index.js.map +1 -1
  458. package/dist/server/history/services/index.mjs.map +1 -1
  459. package/dist/server/history/services/lifecycles.js.map +1 -1
  460. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  461. package/dist/server/history/services/utils.js.map +1 -1
  462. package/dist/server/history/services/utils.mjs.map +1 -1
  463. package/dist/server/history/utils.js.map +1 -1
  464. package/dist/server/history/utils.mjs.map +1 -1
  465. package/dist/server/homepage/controllers/homepage.js.map +1 -1
  466. package/dist/server/homepage/controllers/homepage.mjs.map +1 -1
  467. package/dist/server/homepage/controllers/index.js.map +1 -1
  468. package/dist/server/homepage/controllers/index.mjs.map +1 -1
  469. package/dist/server/homepage/index.js +6 -6
  470. package/dist/server/homepage/index.js.map +1 -1
  471. package/dist/server/homepage/index.mjs.map +1 -1
  472. package/dist/server/homepage/routes/homepage.js.map +1 -1
  473. package/dist/server/homepage/routes/homepage.mjs.map +1 -1
  474. package/dist/server/homepage/routes/index.js.map +1 -1
  475. package/dist/server/homepage/routes/index.mjs.map +1 -1
  476. package/dist/server/homepage/services/homepage.js.map +1 -1
  477. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  478. package/dist/server/homepage/services/index.js.map +1 -1
  479. package/dist/server/homepage/services/index.mjs.map +1 -1
  480. package/dist/server/index.js +8 -8
  481. package/dist/server/middlewares/routing.js.map +1 -1
  482. package/dist/server/middlewares/routing.mjs.map +1 -1
  483. package/dist/server/policies/hasPermissions.js.map +1 -1
  484. package/dist/server/policies/hasPermissions.mjs.map +1 -1
  485. package/dist/server/policies/index.js.map +1 -1
  486. package/dist/server/policies/index.mjs.map +1 -1
  487. package/dist/server/preview/controllers/index.js.map +1 -1
  488. package/dist/server/preview/controllers/index.mjs.map +1 -1
  489. package/dist/server/preview/controllers/preview.js.map +1 -1
  490. package/dist/server/preview/controllers/preview.mjs.map +1 -1
  491. package/dist/server/preview/controllers/validation/preview.js.map +1 -1
  492. package/dist/server/preview/controllers/validation/preview.mjs.map +1 -1
  493. package/dist/server/preview/index.js +4 -4
  494. package/dist/server/preview/index.js.map +1 -1
  495. package/dist/server/preview/index.mjs.map +1 -1
  496. package/dist/server/preview/routes/index.js.map +1 -1
  497. package/dist/server/preview/routes/index.mjs.map +1 -1
  498. package/dist/server/preview/routes/preview.js.map +1 -1
  499. package/dist/server/preview/routes/preview.mjs.map +1 -1
  500. package/dist/server/preview/services/index.js.map +1 -1
  501. package/dist/server/preview/services/index.mjs.map +1 -1
  502. package/dist/server/preview/services/preview-config.js.map +1 -1
  503. package/dist/server/preview/services/preview-config.mjs +1 -1
  504. package/dist/server/preview/services/preview-config.mjs.map +1 -1
  505. package/dist/server/preview/services/preview.js +2 -1
  506. package/dist/server/preview/services/preview.js.map +1 -1
  507. package/dist/server/preview/services/preview.mjs +2 -1
  508. package/dist/server/preview/services/preview.mjs.map +1 -1
  509. package/dist/server/preview/utils.js.map +1 -1
  510. package/dist/server/preview/utils.mjs.map +1 -1
  511. package/dist/server/register.js.map +1 -1
  512. package/dist/server/register.mjs.map +1 -1
  513. package/dist/server/routes/admin.js.map +1 -1
  514. package/dist/server/routes/admin.mjs.map +1 -1
  515. package/dist/server/routes/index.js +4 -4
  516. package/dist/server/routes/index.js.map +1 -1
  517. package/dist/server/routes/index.mjs.map +1 -1
  518. package/dist/server/services/components.js.map +1 -1
  519. package/dist/server/services/components.mjs.map +1 -1
  520. package/dist/server/services/configuration.js.map +1 -1
  521. package/dist/server/services/configuration.mjs.map +1 -1
  522. package/dist/server/services/content-types.js.map +1 -1
  523. package/dist/server/services/content-types.mjs.map +1 -1
  524. package/dist/server/services/data-mapper.js.map +1 -1
  525. package/dist/server/services/data-mapper.mjs.map +1 -1
  526. package/dist/server/services/document-manager.js.map +1 -1
  527. package/dist/server/services/document-manager.mjs +2 -2
  528. package/dist/server/services/document-manager.mjs.map +1 -1
  529. package/dist/server/services/document-metadata.js.map +1 -1
  530. package/dist/server/services/document-metadata.mjs +2 -2
  531. package/dist/server/services/document-metadata.mjs.map +1 -1
  532. package/dist/server/services/field-sizes.js.map +1 -1
  533. package/dist/server/services/field-sizes.mjs.map +1 -1
  534. package/dist/server/services/index.js +4 -4
  535. package/dist/server/services/index.js.map +1 -1
  536. package/dist/server/services/index.mjs.map +1 -1
  537. package/dist/server/services/metrics.js.map +1 -1
  538. package/dist/server/services/metrics.mjs.map +1 -1
  539. package/dist/server/services/permission-checker.js.map +1 -1
  540. package/dist/server/services/permission-checker.mjs.map +1 -1
  541. package/dist/server/services/permission.js.map +1 -1
  542. package/dist/server/services/permission.mjs.map +1 -1
  543. package/dist/server/services/populate-builder.js.map +1 -1
  544. package/dist/server/services/populate-builder.mjs +4 -4
  545. package/dist/server/services/populate-builder.mjs.map +1 -1
  546. package/dist/server/services/uid.js.map +1 -1
  547. package/dist/server/services/uid.mjs.map +1 -1
  548. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  549. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
  550. package/dist/server/services/utils/configuration/index.js.map +1 -1
  551. package/dist/server/services/utils/configuration/index.mjs +3 -3
  552. package/dist/server/services/utils/configuration/index.mjs.map +1 -1
  553. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  554. package/dist/server/services/utils/configuration/layouts.mjs +1 -1
  555. package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
  556. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  557. package/dist/server/services/utils/configuration/metadatas.mjs +1 -1
  558. package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
  559. package/dist/server/services/utils/configuration/settings.js +4 -2
  560. package/dist/server/services/utils/configuration/settings.js.map +1 -1
  561. package/dist/server/services/utils/configuration/settings.mjs +5 -3
  562. package/dist/server/services/utils/configuration/settings.mjs.map +1 -1
  563. package/dist/server/services/utils/draft.js.map +1 -1
  564. package/dist/server/services/utils/draft.mjs.map +1 -1
  565. package/dist/server/services/utils/populate.js.map +1 -1
  566. package/dist/server/services/utils/populate.mjs +1 -1
  567. package/dist/server/services/utils/populate.mjs.map +1 -1
  568. package/dist/server/services/utils/store.js.map +1 -1
  569. package/dist/server/services/utils/store.mjs.map +1 -1
  570. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  571. package/dist/server/src/controllers/single-types.d.ts.map +1 -1
  572. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  573. package/dist/server/src/services/utils/configuration/settings.d.ts.map +1 -1
  574. package/dist/server/utils/index.js.map +1 -1
  575. package/dist/server/utils/index.mjs.map +1 -1
  576. package/dist/server/validation/policies/hasPermissions.js.map +1 -1
  577. package/dist/server/validation/policies/hasPermissions.mjs.map +1 -1
  578. package/dist/shared/contracts/content-types.d.ts +2 -0
  579. package/dist/shared/contracts/content-types.d.ts.map +1 -1
  580. package/dist/shared/contracts/relations.d.ts +1 -1
  581. package/dist/shared/contracts/relations.d.ts.map +1 -1
  582. package/package.json +15 -10
@@ -1 +1 @@
1
- {"version":3,"file":"document-metadata.mjs","sources":["../../../server/src/services/document-metadata.ts"],"sourcesContent":["import { groupBy, pick, uniq } from 'lodash/fp';\n\nimport { async, contentTypes } from '@strapi/utils';\nimport type { Core, UID, Modules } from '@strapi/types';\n\nimport type { DocumentMetadata } from '../../../shared/contracts/collection-types';\nimport { getPopulateForValidation } from './utils/populate';\n\nconst { getScalarAttributes, getMediaAttributes } = contentTypes;\n\nexport interface DocumentVersion {\n id: string | number;\n documentId: Modules.Documents.ID;\n locale?: string;\n localizations?: DocumentVersion[];\n updatedAt?: string | null | Date;\n publishedAt?: string | null | Date;\n}\n\nconst AVAILABLE_STATUS_FIELDS = [\n 'id',\n 'documentId',\n 'locale',\n 'updatedAt',\n 'createdAt',\n 'publishedAt',\n 'createdBy',\n 'updatedBy',\n 'status',\n];\nconst AVAILABLE_LOCALES_FIELDS = [\n 'id',\n 'documentId',\n 'locale',\n 'updatedAt',\n 'createdAt',\n 'publishedAt',\n 'documentId',\n];\n\nconst CONTENT_MANAGER_STATUS = {\n PUBLISHED: 'published',\n DRAFT: 'draft',\n MODIFIED: 'modified',\n};\n\n/**\n * Controls the metadata properties to be returned\n *\n * If `availableLocales` is set to `true` (default), the returned metadata will include\n * the available locales of the document for its current status.\n *\n * If `availableStatus` is set to `true` (default), the returned metadata will include\n * the available status of the document for its current locale.\n */\nexport interface GetMetadataOptions {\n availableLocales?: boolean;\n availableStatus?: boolean;\n}\n\n/**\n * Checks if the provided document version has been modified after all other versions.\n */\nconst getIsVersionLatestModification = (\n version?: DocumentVersion,\n otherVersion?: DocumentVersion\n): boolean => {\n if (!version || !version.updatedAt) {\n return false;\n }\n\n const versionUpdatedAt = version?.updatedAt ? new Date(version.updatedAt).getTime() : 0;\n\n const otherUpdatedAt = otherVersion?.updatedAt ? new Date(otherVersion.updatedAt).getTime() : 0;\n\n return versionUpdatedAt > otherUpdatedAt;\n};\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n /**\n * Returns available locales of a document for the current status\n */\n async getAvailableLocales(\n uid: UID.ContentType,\n version: DocumentVersion,\n allVersions: DocumentVersion[]\n ) {\n // Group all versions by locale\n const versionsByLocale = groupBy('locale', allVersions);\n\n // Delete the current locale\n if (version.locale) {\n delete versionsByLocale[version.locale];\n }\n\n // For each locale, get the ones with the same status\n // There will not be a draft and a version counterpart if the content\n // type does not have draft and publish\n const model = strapi.getModel(uid);\n\n const mappingResult = await async.map(\n Object.values(versionsByLocale),\n async (localeVersions: DocumentVersion[]) => {\n if (!contentTypes.hasDraftAndPublish(model)) {\n return localeVersions[0];\n }\n\n const draftVersion = localeVersions.find((v) => v.publishedAt === null);\n const otherVersions = localeVersions.filter((v) => v.id !== draftVersion?.id);\n\n if (!draftVersion) {\n return;\n }\n\n return {\n ...draftVersion,\n status: this.getStatus(draftVersion, otherVersions as any),\n };\n }\n );\n\n return (\n mappingResult\n // Filter just in case there is a document with no drafts\n .filter(Boolean) as unknown as DocumentMetadata['availableLocales']\n );\n },\n\n /**\n * Returns available status of a document for the current locale\n */\n getAvailableStatus(version: DocumentVersion, allVersions: DocumentVersion[]) {\n // Find the other status of the document\n const status =\n version.publishedAt !== null\n ? CONTENT_MANAGER_STATUS.DRAFT\n : CONTENT_MANAGER_STATUS.PUBLISHED;\n\n // Get version that match the current locale and not match the current status\n const availableStatus = allVersions.find((v) => {\n const matchLocale = v.locale === version.locale;\n const matchStatus = status === 'published' ? v.publishedAt !== null : v.publishedAt === null;\n return matchLocale && matchStatus;\n });\n\n if (!availableStatus) return availableStatus;\n\n // Pick status fields (at fields, status, by fields), use lodash fp\n return pick(AVAILABLE_STATUS_FIELDS, availableStatus);\n },\n\n /**\n * Get the available status of many documents, useful for batch operations\n * @param uid\n * @param documents\n * @returns\n */\n async getManyAvailableStatus(uid: UID.ContentType, documents: DocumentVersion[]) {\n if (!documents.length) return [];\n\n // The status and locale of all documents should be the same\n const status = documents[0].publishedAt !== null ? 'published' : 'draft';\n const locales = documents.map((d) => d.locale).filter(Boolean);\n\n const where: Record<string, any> = {\n documentId: { $in: documents.map((d) => d.documentId).filter(Boolean) },\n publishedAt: { $null: status === 'published' },\n };\n\n // If there is any locale to filter (if i18n is enabled)\n if (locales.length) {\n where.locale = { $in: locales };\n }\n\n return strapi.query(uid).findMany({\n where,\n select: ['id', 'documentId', 'locale', 'updatedAt', 'createdAt', 'publishedAt'],\n });\n },\n\n getStatus(version: DocumentVersion, otherDocumentStatuses?: DocumentMetadata['availableStatus']) {\n let draftVersion: DocumentVersion | undefined;\n let publishedVersion: DocumentVersion | undefined;\n\n if (version.publishedAt) {\n publishedVersion = version;\n } else {\n draftVersion = version;\n }\n\n const otherVersion = otherDocumentStatuses?.at(0);\n if (otherVersion?.publishedAt) {\n publishedVersion = otherVersion;\n } else if (otherVersion) {\n draftVersion = otherVersion;\n }\n\n if (!draftVersion) return CONTENT_MANAGER_STATUS.PUBLISHED;\n if (!publishedVersion) return CONTENT_MANAGER_STATUS.DRAFT;\n\n /*\n * The document is modified if the draft version has been updated more\n * recently than the published version.\n */\n const isDraftModified = getIsVersionLatestModification(draftVersion, publishedVersion);\n return isDraftModified ? CONTENT_MANAGER_STATUS.MODIFIED : CONTENT_MANAGER_STATUS.PUBLISHED;\n },\n\n // TODO is it necessary to return metadata on every page of the CM\n // We could refactor this so the locales are only loaded when they're\n // needed. e.g. in the bulk locale action modal.\n async getMetadata(\n uid: UID.ContentType,\n version: DocumentVersion,\n { availableLocales = true, availableStatus = true }: GetMetadataOptions = {}\n ) {\n // TODO: Ignore publishedAt if availableStatus=false, and ignore locale if\n // i18n is disabled\n const { populate = {}, fields = [] } = getPopulateForValidation(uid);\n\n // Include non-translatable scalar and media fields in availableLocales for i18n prefilling\n let nonLocalizedFields: string[] = [];\n let nonLocalizedMediaFields: string[] = [];\n try {\n const i18nPlugin = strapi.plugin('i18n');\n if (i18nPlugin) {\n const i18nService = i18nPlugin.service('content-types');\n if (i18nService?.getNonLocalizedAttributes) {\n const model = strapi.getModel(uid);\n if (model?.attributes) {\n const allNonLocalized = i18nService.getNonLocalizedAttributes(model);\n // Get scalar and media attributes separately\n const scalarAttrs = getScalarAttributes(model);\n const mediaAttrs = getMediaAttributes(model);\n\n // Separate scalar fields (can be in fields array) from media fields (need to be populated)\n nonLocalizedFields = allNonLocalized.filter(\n (field: string) => field in model.attributes && scalarAttrs.includes(field)\n );\n nonLocalizedMediaFields = allNonLocalized.filter(\n (field: string) => field in model.attributes && mediaAttrs.includes(field)\n );\n }\n }\n }\n } catch (error) {\n // i18n plugin might not be enabled or might error, ignore silently\n }\n\n // Build populate object for non-localized media fields\n const mediaPopulate = nonLocalizedMediaFields.reduce(\n (acc, field) => {\n acc[field] = {\n populate: {\n folder: true,\n },\n };\n return acc;\n },\n {} as Record<string, { populate: { folder: boolean } }>\n );\n\n const params = {\n populate: {\n ...populate,\n ...mediaPopulate,\n // NOTE: creator fields are selected in this way to avoid exposing sensitive data\n createdBy: {\n select: ['id', 'firstname', 'lastname', 'email'],\n },\n updatedBy: {\n select: ['id', 'firstname', 'lastname', 'email'],\n },\n },\n fields: uniq([...AVAILABLE_LOCALES_FIELDS, ...fields, ...nonLocalizedFields]),\n filters: {\n documentId: version.documentId,\n },\n };\n\n const dbParams = strapi.get('query-params').transform(uid, params);\n const versions = await strapi.db.query(uid).findMany(dbParams);\n\n // TODO: Remove use of available locales and use localizations instead\n const availableLocalesResult = availableLocales\n ? await this.getAvailableLocales(uid, version, versions)\n : [];\n\n const availableStatusResult = availableStatus\n ? this.getAvailableStatus(version, versions)\n : null;\n\n return {\n availableLocales: availableLocalesResult,\n availableStatus: availableStatusResult ? [availableStatusResult] : [],\n };\n },\n\n /**\n * Returns associated metadata of a document:\n * - Available locales of the document for the current status\n * - Available status of the document for the current locale\n */\n async formatDocumentWithMetadata(\n uid: UID.ContentType,\n document: DocumentVersion,\n opts: GetMetadataOptions = {}\n ) {\n if (!document) {\n return {\n data: document,\n meta: {\n availableLocales: [],\n availableStatus: [],\n },\n };\n }\n\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(strapi.getModel(uid));\n\n // Ignore available status if the content type does not have draft and publish\n if (!hasDraftAndPublish) {\n opts.availableStatus = false;\n }\n\n const meta = await this.getMetadata(uid, document, opts);\n\n // Populate localization statuses\n if (document.localizations) {\n const otherStatus = await this.getManyAvailableStatus(uid, document.localizations);\n\n document.localizations = document.localizations.map((d) => {\n const status = otherStatus.find(\n (s) => s.documentId === d.documentId && s.locale === d.locale\n );\n return {\n ...d,\n status: this.getStatus(d, status ? [status] : []),\n };\n });\n }\n\n return {\n data: {\n ...document,\n // Add status to the document only if draft and publish is enabled\n status: hasDraftAndPublish\n ? this.getStatus(document, meta.availableStatus as any)\n : undefined,\n },\n meta,\n };\n },\n});\n"],"names":["getScalarAttributes","getMediaAttributes","contentTypes","AVAILABLE_STATUS_FIELDS","AVAILABLE_LOCALES_FIELDS","CONTENT_MANAGER_STATUS","PUBLISHED","DRAFT","MODIFIED","getIsVersionLatestModification","version","otherVersion","updatedAt","versionUpdatedAt","Date","getTime","otherUpdatedAt","strapi","getAvailableLocales","uid","allVersions","versionsByLocale","groupBy","locale","model","getModel","mappingResult","async","map","Object","values","localeVersions","hasDraftAndPublish","draftVersion","find","v","publishedAt","otherVersions","filter","id","status","getStatus","Boolean","getAvailableStatus","availableStatus","matchLocale","matchStatus","pick","getManyAvailableStatus","documents","length","locales","d","where","documentId","$in","$null","query","findMany","select","otherDocumentStatuses","publishedVersion","at","isDraftModified","getMetadata","availableLocales","populate","fields","getPopulateForValidation","nonLocalizedFields","nonLocalizedMediaFields","i18nPlugin","plugin","i18nService","service","getNonLocalizedAttributes","attributes","allNonLocalized","scalarAttrs","mediaAttrs","field","includes","error","mediaPopulate","reduce","acc","folder","params","createdBy","updatedBy","uniq","filters","dbParams","get","transform","versions","db","availableLocalesResult","availableStatusResult","formatDocumentWithMetadata","document","opts","data","meta","localizations","otherStatus","s","undefined"],"mappings":"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"}
1
+ {"version":3,"file":"document-metadata.mjs","sources":["../../../server/src/services/document-metadata.ts"],"sourcesContent":["import { groupBy, pick, uniq } from 'lodash/fp';\n\nimport { async, contentTypes } from '@strapi/utils';\nimport type { Core, UID, Modules } from '@strapi/types';\n\nimport type { DocumentMetadata } from '../../../shared/contracts/collection-types';\nimport { getPopulateForValidation } from './utils/populate';\n\nconst { getScalarAttributes, getMediaAttributes } = contentTypes;\n\nexport interface DocumentVersion {\n id: string | number;\n documentId: Modules.Documents.ID;\n locale?: string;\n localizations?: DocumentVersion[];\n updatedAt?: string | null | Date;\n publishedAt?: string | null | Date;\n}\n\nconst AVAILABLE_STATUS_FIELDS = [\n 'id',\n 'documentId',\n 'locale',\n 'updatedAt',\n 'createdAt',\n 'publishedAt',\n 'createdBy',\n 'updatedBy',\n 'status',\n];\nconst AVAILABLE_LOCALES_FIELDS = [\n 'id',\n 'documentId',\n 'locale',\n 'updatedAt',\n 'createdAt',\n 'publishedAt',\n 'documentId',\n];\n\nconst CONTENT_MANAGER_STATUS = {\n PUBLISHED: 'published',\n DRAFT: 'draft',\n MODIFIED: 'modified',\n};\n\n/**\n * Controls the metadata properties to be returned\n *\n * If `availableLocales` is set to `true` (default), the returned metadata will include\n * the available locales of the document for its current status.\n *\n * If `availableStatus` is set to `true` (default), the returned metadata will include\n * the available status of the document for its current locale.\n */\nexport interface GetMetadataOptions {\n availableLocales?: boolean;\n availableStatus?: boolean;\n}\n\n/**\n * Checks if the provided document version has been modified after all other versions.\n */\nconst getIsVersionLatestModification = (\n version?: DocumentVersion,\n otherVersion?: DocumentVersion\n): boolean => {\n if (!version || !version.updatedAt) {\n return false;\n }\n\n const versionUpdatedAt = version?.updatedAt ? new Date(version.updatedAt).getTime() : 0;\n\n const otherUpdatedAt = otherVersion?.updatedAt ? new Date(otherVersion.updatedAt).getTime() : 0;\n\n return versionUpdatedAt > otherUpdatedAt;\n};\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n /**\n * Returns available locales of a document for the current status\n */\n async getAvailableLocales(\n uid: UID.ContentType,\n version: DocumentVersion,\n allVersions: DocumentVersion[]\n ) {\n // Group all versions by locale\n const versionsByLocale = groupBy('locale', allVersions);\n\n // Delete the current locale\n if (version.locale) {\n delete versionsByLocale[version.locale];\n }\n\n // For each locale, get the ones with the same status\n // There will not be a draft and a version counterpart if the content\n // type does not have draft and publish\n const model = strapi.getModel(uid);\n\n const mappingResult = await async.map(\n Object.values(versionsByLocale),\n async (localeVersions: DocumentVersion[]) => {\n if (!contentTypes.hasDraftAndPublish(model)) {\n return localeVersions[0];\n }\n\n const draftVersion = localeVersions.find((v) => v.publishedAt === null);\n const otherVersions = localeVersions.filter((v) => v.id !== draftVersion?.id);\n\n if (!draftVersion) {\n return;\n }\n\n return {\n ...draftVersion,\n status: this.getStatus(draftVersion, otherVersions as any),\n };\n }\n );\n\n return (\n mappingResult\n // Filter just in case there is a document with no drafts\n .filter(Boolean) as unknown as DocumentMetadata['availableLocales']\n );\n },\n\n /**\n * Returns available status of a document for the current locale\n */\n getAvailableStatus(version: DocumentVersion, allVersions: DocumentVersion[]) {\n // Find the other status of the document\n const status =\n version.publishedAt !== null\n ? CONTENT_MANAGER_STATUS.DRAFT\n : CONTENT_MANAGER_STATUS.PUBLISHED;\n\n // Get version that match the current locale and not match the current status\n const availableStatus = allVersions.find((v) => {\n const matchLocale = v.locale === version.locale;\n const matchStatus = status === 'published' ? v.publishedAt !== null : v.publishedAt === null;\n return matchLocale && matchStatus;\n });\n\n if (!availableStatus) return availableStatus;\n\n // Pick status fields (at fields, status, by fields), use lodash fp\n return pick(AVAILABLE_STATUS_FIELDS, availableStatus);\n },\n\n /**\n * Get the available status of many documents, useful for batch operations\n * @param uid\n * @param documents\n * @returns\n */\n async getManyAvailableStatus(uid: UID.ContentType, documents: DocumentVersion[]) {\n if (!documents.length) return [];\n\n // The status and locale of all documents should be the same\n const status = documents[0].publishedAt !== null ? 'published' : 'draft';\n const locales = documents.map((d) => d.locale).filter(Boolean);\n\n const where: Record<string, any> = {\n documentId: { $in: documents.map((d) => d.documentId).filter(Boolean) },\n publishedAt: { $null: status === 'published' },\n };\n\n // If there is any locale to filter (if i18n is enabled)\n if (locales.length) {\n where.locale = { $in: locales };\n }\n\n return strapi.query(uid).findMany({\n where,\n select: ['id', 'documentId', 'locale', 'updatedAt', 'createdAt', 'publishedAt'],\n });\n },\n\n getStatus(version: DocumentVersion, otherDocumentStatuses?: DocumentMetadata['availableStatus']) {\n let draftVersion: DocumentVersion | undefined;\n let publishedVersion: DocumentVersion | undefined;\n\n if (version.publishedAt) {\n publishedVersion = version;\n } else {\n draftVersion = version;\n }\n\n const otherVersion = otherDocumentStatuses?.at(0);\n if (otherVersion?.publishedAt) {\n publishedVersion = otherVersion;\n } else if (otherVersion) {\n draftVersion = otherVersion;\n }\n\n if (!draftVersion) return CONTENT_MANAGER_STATUS.PUBLISHED;\n if (!publishedVersion) return CONTENT_MANAGER_STATUS.DRAFT;\n\n /*\n * The document is modified if the draft version has been updated more\n * recently than the published version.\n */\n const isDraftModified = getIsVersionLatestModification(draftVersion, publishedVersion);\n return isDraftModified ? CONTENT_MANAGER_STATUS.MODIFIED : CONTENT_MANAGER_STATUS.PUBLISHED;\n },\n\n // TODO is it necessary to return metadata on every page of the CM\n // We could refactor this so the locales are only loaded when they're\n // needed. e.g. in the bulk locale action modal.\n async getMetadata(\n uid: UID.ContentType,\n version: DocumentVersion,\n { availableLocales = true, availableStatus = true }: GetMetadataOptions = {}\n ) {\n // TODO: Ignore publishedAt if availableStatus=false, and ignore locale if\n // i18n is disabled\n const { populate = {}, fields = [] } = getPopulateForValidation(uid);\n\n // Include non-translatable scalar and media fields in availableLocales for i18n prefilling\n let nonLocalizedFields: string[] = [];\n let nonLocalizedMediaFields: string[] = [];\n try {\n const i18nPlugin = strapi.plugin('i18n');\n if (i18nPlugin) {\n const i18nService = i18nPlugin.service('content-types');\n if (i18nService?.getNonLocalizedAttributes) {\n const model = strapi.getModel(uid);\n if (model?.attributes) {\n const allNonLocalized = i18nService.getNonLocalizedAttributes(model);\n // Get scalar and media attributes separately\n const scalarAttrs = getScalarAttributes(model);\n const mediaAttrs = getMediaAttributes(model);\n\n // Separate scalar fields (can be in fields array) from media fields (need to be populated)\n nonLocalizedFields = allNonLocalized.filter(\n (field: string) => field in model.attributes && scalarAttrs.includes(field)\n );\n nonLocalizedMediaFields = allNonLocalized.filter(\n (field: string) => field in model.attributes && mediaAttrs.includes(field)\n );\n }\n }\n }\n } catch (error) {\n // i18n plugin might not be enabled or might error, ignore silently\n }\n\n // Build populate object for non-localized media fields\n const mediaPopulate = nonLocalizedMediaFields.reduce(\n (acc, field) => {\n acc[field] = {\n populate: {\n folder: true,\n },\n };\n return acc;\n },\n {} as Record<string, { populate: { folder: boolean } }>\n );\n\n const params = {\n populate: {\n ...populate,\n ...mediaPopulate,\n // NOTE: creator fields are selected in this way to avoid exposing sensitive data\n createdBy: {\n select: ['id', 'firstname', 'lastname', 'email'],\n },\n updatedBy: {\n select: ['id', 'firstname', 'lastname', 'email'],\n },\n },\n fields: uniq([...AVAILABLE_LOCALES_FIELDS, ...fields, ...nonLocalizedFields]),\n filters: {\n documentId: version.documentId,\n },\n };\n\n const dbParams = strapi.get('query-params').transform(uid, params);\n const versions = await strapi.db.query(uid).findMany(dbParams);\n\n // TODO: Remove use of available locales and use localizations instead\n const availableLocalesResult = availableLocales\n ? await this.getAvailableLocales(uid, version, versions)\n : [];\n\n const availableStatusResult = availableStatus\n ? this.getAvailableStatus(version, versions)\n : null;\n\n return {\n availableLocales: availableLocalesResult,\n availableStatus: availableStatusResult ? [availableStatusResult] : [],\n };\n },\n\n /**\n * Returns associated metadata of a document:\n * - Available locales of the document for the current status\n * - Available status of the document for the current locale\n */\n async formatDocumentWithMetadata(\n uid: UID.ContentType,\n document: DocumentVersion,\n opts: GetMetadataOptions = {}\n ) {\n if (!document) {\n return {\n data: document,\n meta: {\n availableLocales: [],\n availableStatus: [],\n },\n };\n }\n\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(strapi.getModel(uid));\n\n // Ignore available status if the content type does not have draft and publish\n if (!hasDraftAndPublish) {\n opts.availableStatus = false;\n }\n\n const meta = await this.getMetadata(uid, document, opts);\n\n // Populate localization statuses\n if (document.localizations) {\n const otherStatus = await this.getManyAvailableStatus(uid, document.localizations);\n\n document.localizations = document.localizations.map((d) => {\n const status = otherStatus.find(\n (s) => s.documentId === d.documentId && s.locale === d.locale\n );\n return {\n ...d,\n status: this.getStatus(d, status ? [status] : []),\n };\n });\n }\n\n return {\n data: {\n ...document,\n // Add status to the document only if draft and publish is enabled\n status: hasDraftAndPublish\n ? this.getStatus(document, meta.availableStatus as any)\n : undefined,\n },\n meta,\n };\n },\n});\n"],"names":["getScalarAttributes","getMediaAttributes","contentTypes","AVAILABLE_STATUS_FIELDS","AVAILABLE_LOCALES_FIELDS","CONTENT_MANAGER_STATUS","PUBLISHED","DRAFT","MODIFIED","getIsVersionLatestModification","version","otherVersion","updatedAt","versionUpdatedAt","Date","getTime","otherUpdatedAt","strapi","getAvailableLocales","uid","allVersions","versionsByLocale","groupBy","locale","model","getModel","mappingResult","async","map","Object","values","localeVersions","hasDraftAndPublish","draftVersion","find","v","publishedAt","otherVersions","filter","id","status","getStatus","Boolean","getAvailableStatus","availableStatus","matchLocale","matchStatus","pick","getManyAvailableStatus","documents","length","locales","d","where","documentId","$in","$null","query","findMany","select","otherDocumentStatuses","publishedVersion","at","isDraftModified","getMetadata","availableLocales","populate","fields","getPopulateForValidation","nonLocalizedFields","nonLocalizedMediaFields","i18nPlugin","plugin","i18nService","service","getNonLocalizedAttributes","attributes","allNonLocalized","scalarAttrs","mediaAttrs","field","includes","error","mediaPopulate","reduce","acc","folder","params","createdBy","updatedBy","uniq","filters","dbParams","get","transform","versions","db","availableLocalesResult","availableStatusResult","formatDocumentWithMetadata","document","opts","data","meta","localizations","otherStatus","s","undefined"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"field-sizes.js","sources":["../../../server/src/services/field-sizes.ts"],"sourcesContent":["import { errors } from '@strapi/utils';\nimport type { Core, Modules } from '@strapi/types';\n\nconst { ApplicationError } = errors;\n\ntype FieldSize = Modules.CustomFields.CustomFieldServerOptions['inputSize'];\n\nconst needsFullSize: FieldSize = {\n default: 12,\n isResizable: false,\n};\n\nconst smallSize: FieldSize = {\n default: 4,\n isResizable: true,\n};\n\nconst defaultSize: FieldSize = {\n default: 6,\n isResizable: true,\n};\n\nconst fieldSizes: Record<string, FieldSize> = {\n // Full row and not resizable\n dynamiczone: needsFullSize,\n component: needsFullSize,\n json: needsFullSize,\n richtext: needsFullSize,\n blocks: needsFullSize,\n // Small and resizable\n checkbox: smallSize,\n boolean: smallSize,\n date: smallSize,\n time: smallSize,\n biginteger: smallSize,\n decimal: smallSize,\n float: smallSize,\n integer: smallSize,\n number: smallSize,\n // Medium and resizable\n datetime: defaultSize,\n email: defaultSize,\n enumeration: defaultSize,\n media: defaultSize,\n password: defaultSize,\n relation: defaultSize,\n string: defaultSize,\n text: defaultSize,\n timestamp: defaultSize,\n uid: defaultSize,\n};\n\nconst createFieldSizesService = ({ strapi }: { strapi: Core.Strapi }) => {\n const fieldSizesService = {\n getAllFieldSizes() {\n return fieldSizes;\n },\n\n hasFieldSize(type: string) {\n return !!fieldSizes[type];\n },\n\n getFieldSize(type?: string) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n const fieldSize = fieldSizes[type];\n if (!fieldSize) {\n throw new ApplicationError(`Could not find field size for type ${type}`);\n }\n\n return fieldSize;\n },\n\n setFieldSize(type: string, size: FieldSize) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n if (!size) {\n throw new ApplicationError('The size is required');\n }\n\n fieldSizes[type] = size;\n },\n\n setCustomFieldInputSizes() {\n // Find all custom fields already registered\n const customFields = strapi.get('custom-fields').getAll();\n\n // If they have a custom field size, register it\n // TODO types can be inferred when customFields is typed\n Object.entries(customFields).forEach(([uid, customField]: [string, any]) => {\n if (customField.inputSize) {\n fieldSizesService.setFieldSize(uid, customField.inputSize);\n }\n });\n },\n };\n\n return fieldSizesService;\n};\n\nexport default createFieldSizesService;\n"],"names":["ApplicationError","errors","needsFullSize","default","isResizable","smallSize","defaultSize","fieldSizes","dynamiczone","component","json","richtext","blocks","checkbox","boolean","date","time","biginteger","decimal","float","integer","number","datetime","email","enumeration","media","password","relation","string","text","timestamp","uid","createFieldSizesService","strapi","fieldSizesService","getAllFieldSizes","hasFieldSize","type","getFieldSize","fieldSize","setFieldSize","size","setCustomFieldInputSizes","customFields","get","getAll","Object","entries","forEach","customField","inputSize"],"mappings":"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"}
1
+ {"version":3,"file":"field-sizes.js","sources":["../../../server/src/services/field-sizes.ts"],"sourcesContent":["import { errors } from '@strapi/utils';\nimport type { Core, Modules } from '@strapi/types';\n\nconst { ApplicationError } = errors;\n\ntype FieldSize = Modules.CustomFields.CustomFieldServerOptions['inputSize'];\n\nconst needsFullSize: FieldSize = {\n default: 12,\n isResizable: false,\n};\n\nconst smallSize: FieldSize = {\n default: 4,\n isResizable: true,\n};\n\nconst defaultSize: FieldSize = {\n default: 6,\n isResizable: true,\n};\n\nconst fieldSizes: Record<string, FieldSize> = {\n // Full row and not resizable\n dynamiczone: needsFullSize,\n component: needsFullSize,\n json: needsFullSize,\n richtext: needsFullSize,\n blocks: needsFullSize,\n // Small and resizable\n checkbox: smallSize,\n boolean: smallSize,\n date: smallSize,\n time: smallSize,\n biginteger: smallSize,\n decimal: smallSize,\n float: smallSize,\n integer: smallSize,\n number: smallSize,\n // Medium and resizable\n datetime: defaultSize,\n email: defaultSize,\n enumeration: defaultSize,\n media: defaultSize,\n password: defaultSize,\n relation: defaultSize,\n string: defaultSize,\n text: defaultSize,\n timestamp: defaultSize,\n uid: defaultSize,\n};\n\nconst createFieldSizesService = ({ strapi }: { strapi: Core.Strapi }) => {\n const fieldSizesService = {\n getAllFieldSizes() {\n return fieldSizes;\n },\n\n hasFieldSize(type: string) {\n return !!fieldSizes[type];\n },\n\n getFieldSize(type?: string) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n const fieldSize = fieldSizes[type];\n if (!fieldSize) {\n throw new ApplicationError(`Could not find field size for type ${type}`);\n }\n\n return fieldSize;\n },\n\n setFieldSize(type: string, size: FieldSize) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n if (!size) {\n throw new ApplicationError('The size is required');\n }\n\n fieldSizes[type] = size;\n },\n\n setCustomFieldInputSizes() {\n // Find all custom fields already registered\n const customFields = strapi.get('custom-fields').getAll();\n\n // If they have a custom field size, register it\n // TODO types can be inferred when customFields is typed\n Object.entries(customFields).forEach(([uid, customField]: [string, any]) => {\n if (customField.inputSize) {\n fieldSizesService.setFieldSize(uid, customField.inputSize);\n }\n });\n },\n };\n\n return fieldSizesService;\n};\n\nexport default createFieldSizesService;\n"],"names":["ApplicationError","errors","needsFullSize","default","isResizable","smallSize","defaultSize","fieldSizes","dynamiczone","component","json","richtext","blocks","checkbox","boolean","date","time","biginteger","decimal","float","integer","number","datetime","email","enumeration","media","password","relation","string","text","timestamp","uid","createFieldSizesService","strapi","fieldSizesService","getAllFieldSizes","hasFieldSize","type","getFieldSize","fieldSize","setFieldSize","size","setCustomFieldInputSizes","customFields","get","getAll","Object","entries","forEach","customField","inputSize"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"field-sizes.mjs","sources":["../../../server/src/services/field-sizes.ts"],"sourcesContent":["import { errors } from '@strapi/utils';\nimport type { Core, Modules } from '@strapi/types';\n\nconst { ApplicationError } = errors;\n\ntype FieldSize = Modules.CustomFields.CustomFieldServerOptions['inputSize'];\n\nconst needsFullSize: FieldSize = {\n default: 12,\n isResizable: false,\n};\n\nconst smallSize: FieldSize = {\n default: 4,\n isResizable: true,\n};\n\nconst defaultSize: FieldSize = {\n default: 6,\n isResizable: true,\n};\n\nconst fieldSizes: Record<string, FieldSize> = {\n // Full row and not resizable\n dynamiczone: needsFullSize,\n component: needsFullSize,\n json: needsFullSize,\n richtext: needsFullSize,\n blocks: needsFullSize,\n // Small and resizable\n checkbox: smallSize,\n boolean: smallSize,\n date: smallSize,\n time: smallSize,\n biginteger: smallSize,\n decimal: smallSize,\n float: smallSize,\n integer: smallSize,\n number: smallSize,\n // Medium and resizable\n datetime: defaultSize,\n email: defaultSize,\n enumeration: defaultSize,\n media: defaultSize,\n password: defaultSize,\n relation: defaultSize,\n string: defaultSize,\n text: defaultSize,\n timestamp: defaultSize,\n uid: defaultSize,\n};\n\nconst createFieldSizesService = ({ strapi }: { strapi: Core.Strapi }) => {\n const fieldSizesService = {\n getAllFieldSizes() {\n return fieldSizes;\n },\n\n hasFieldSize(type: string) {\n return !!fieldSizes[type];\n },\n\n getFieldSize(type?: string) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n const fieldSize = fieldSizes[type];\n if (!fieldSize) {\n throw new ApplicationError(`Could not find field size for type ${type}`);\n }\n\n return fieldSize;\n },\n\n setFieldSize(type: string, size: FieldSize) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n if (!size) {\n throw new ApplicationError('The size is required');\n }\n\n fieldSizes[type] = size;\n },\n\n setCustomFieldInputSizes() {\n // Find all custom fields already registered\n const customFields = strapi.get('custom-fields').getAll();\n\n // If they have a custom field size, register it\n // TODO types can be inferred when customFields is typed\n Object.entries(customFields).forEach(([uid, customField]: [string, any]) => {\n if (customField.inputSize) {\n fieldSizesService.setFieldSize(uid, customField.inputSize);\n }\n });\n },\n };\n\n return fieldSizesService;\n};\n\nexport default createFieldSizesService;\n"],"names":["ApplicationError","errors","needsFullSize","default","isResizable","smallSize","defaultSize","fieldSizes","dynamiczone","component","json","richtext","blocks","checkbox","boolean","date","time","biginteger","decimal","float","integer","number","datetime","email","enumeration","media","password","relation","string","text","timestamp","uid","createFieldSizesService","strapi","fieldSizesService","getAllFieldSizes","hasFieldSize","type","getFieldSize","fieldSize","setFieldSize","size","setCustomFieldInputSizes","customFields","get","getAll","Object","entries","forEach","customField","inputSize"],"mappings":"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"}
1
+ {"version":3,"file":"field-sizes.mjs","sources":["../../../server/src/services/field-sizes.ts"],"sourcesContent":["import { errors } from '@strapi/utils';\nimport type { Core, Modules } from '@strapi/types';\n\nconst { ApplicationError } = errors;\n\ntype FieldSize = Modules.CustomFields.CustomFieldServerOptions['inputSize'];\n\nconst needsFullSize: FieldSize = {\n default: 12,\n isResizable: false,\n};\n\nconst smallSize: FieldSize = {\n default: 4,\n isResizable: true,\n};\n\nconst defaultSize: FieldSize = {\n default: 6,\n isResizable: true,\n};\n\nconst fieldSizes: Record<string, FieldSize> = {\n // Full row and not resizable\n dynamiczone: needsFullSize,\n component: needsFullSize,\n json: needsFullSize,\n richtext: needsFullSize,\n blocks: needsFullSize,\n // Small and resizable\n checkbox: smallSize,\n boolean: smallSize,\n date: smallSize,\n time: smallSize,\n biginteger: smallSize,\n decimal: smallSize,\n float: smallSize,\n integer: smallSize,\n number: smallSize,\n // Medium and resizable\n datetime: defaultSize,\n email: defaultSize,\n enumeration: defaultSize,\n media: defaultSize,\n password: defaultSize,\n relation: defaultSize,\n string: defaultSize,\n text: defaultSize,\n timestamp: defaultSize,\n uid: defaultSize,\n};\n\nconst createFieldSizesService = ({ strapi }: { strapi: Core.Strapi }) => {\n const fieldSizesService = {\n getAllFieldSizes() {\n return fieldSizes;\n },\n\n hasFieldSize(type: string) {\n return !!fieldSizes[type];\n },\n\n getFieldSize(type?: string) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n const fieldSize = fieldSizes[type];\n if (!fieldSize) {\n throw new ApplicationError(`Could not find field size for type ${type}`);\n }\n\n return fieldSize;\n },\n\n setFieldSize(type: string, size: FieldSize) {\n if (!type) {\n throw new ApplicationError('The type is required');\n }\n\n if (!size) {\n throw new ApplicationError('The size is required');\n }\n\n fieldSizes[type] = size;\n },\n\n setCustomFieldInputSizes() {\n // Find all custom fields already registered\n const customFields = strapi.get('custom-fields').getAll();\n\n // If they have a custom field size, register it\n // TODO types can be inferred when customFields is typed\n Object.entries(customFields).forEach(([uid, customField]: [string, any]) => {\n if (customField.inputSize) {\n fieldSizesService.setFieldSize(uid, customField.inputSize);\n }\n });\n },\n };\n\n return fieldSizesService;\n};\n\nexport default createFieldSizesService;\n"],"names":["ApplicationError","errors","needsFullSize","default","isResizable","smallSize","defaultSize","fieldSizes","dynamiczone","component","json","richtext","blocks","checkbox","boolean","date","time","biginteger","decimal","float","integer","number","datetime","email","enumeration","media","password","relation","string","text","timestamp","uid","createFieldSizesService","strapi","fieldSizesService","getAllFieldSizes","hasFieldSize","type","getFieldSize","fieldSize","setFieldSize","size","setCustomFieldInputSizes","customFields","get","getAll","Object","entries","forEach","customField","inputSize"],"mappings":"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"}
@@ -10,8 +10,8 @@ var permission = require('./permission.js');
10
10
  var populateBuilder = require('./populate-builder.js');
11
11
  var uid = require('./uid.js');
12
12
  var index = require('../history/index.js');
13
- var index$1 = require('../preview/index.js');
14
- var index$2 = require('../homepage/index.js');
13
+ var index$2 = require('../preview/index.js');
14
+ var index$1 = require('../homepage/index.js');
15
15
  var documentMetadata = require('./document-metadata.js');
16
16
  var documentManager = require('./document-manager.js');
17
17
 
@@ -28,8 +28,8 @@ var services = {
28
28
  'populate-builder': populateBuilder,
29
29
  uid,
30
30
  ...index.services ? index.services : {},
31
- ...index$1.services ? index$1.services : {},
32
- ...index$2.services
31
+ ...index$2.services ? index$2.services : {},
32
+ ...index$1.services
33
33
  };
34
34
 
35
35
  module.exports = services;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../server/src/services/index.ts"],"sourcesContent":["import components from './components';\nimport contentTypes from './content-types';\nimport dataMapper from './data-mapper';\nimport fieldSizes from './field-sizes';\nimport metrics from './metrics';\nimport permissionChecker from './permission-checker';\nimport permission from './permission';\nimport populateBuilder from './populate-builder';\nimport uid from './uid';\nimport history from '../history';\nimport preview from '../preview';\nimport homepage from '../homepage';\nimport documentMetadata from './document-metadata';\nimport documentManager from './document-manager';\n\nexport default {\n components,\n 'content-types': contentTypes,\n 'data-mapper': dataMapper,\n 'document-metadata': documentMetadata,\n 'document-manager': documentManager,\n 'field-sizes': fieldSizes,\n metrics,\n 'permission-checker': permissionChecker,\n permission,\n 'populate-builder': populateBuilder,\n uid,\n ...(history.services ? history.services : {}),\n ...(preview.services ? preview.services : {}),\n ...homepage.services,\n};\n"],"names":["components","contentTypes","dataMapper","documentMetadata","documentManager","fieldSizes","metrics","permissionChecker","permission","populateBuilder","uid","history","services","preview","homepage"],"mappings":";;;;;;;;;;;;;;;;;AAeA,eAAe;AACbA,IAAAA,UAAAA;IACA,eAAiBC,EAAAA,YAAAA;IACjB,aAAeC,EAAAA,UAAAA;IACf,mBAAqBC,EAAAA,gBAAAA;IACrB,kBAAoBC,EAAAA,eAAAA;IACpB,aAAeC,EAAAA,UAAAA;AACfC,IAAAA,OAAAA;IACA,oBAAsBC,EAAAA,iBAAAA;AACtBC,IAAAA,UAAAA;IACA,kBAAoBC,EAAAA,eAAAA;AACpBC,IAAAA,GAAAA;AACA,IAAA,GAAIC,MAAQC,QAAQ,GAAGD,MAAQC,QAAQ,GAAG,EAAE;AAC5C,IAAA,GAAIC,QAAQD,QAAQ,GAAGC,QAAQD,QAAQ,GAAG,EAAE;AAC5C,IAAA,GAAGE,QAASF;AACd,CAAE;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../server/src/services/index.ts"],"sourcesContent":["import components from './components';\nimport contentTypes from './content-types';\nimport dataMapper from './data-mapper';\nimport fieldSizes from './field-sizes';\nimport metrics from './metrics';\nimport permissionChecker from './permission-checker';\nimport permission from './permission';\nimport populateBuilder from './populate-builder';\nimport uid from './uid';\nimport history from '../history';\nimport preview from '../preview';\nimport homepage from '../homepage';\nimport documentMetadata from './document-metadata';\nimport documentManager from './document-manager';\n\nexport default {\n components,\n 'content-types': contentTypes,\n 'data-mapper': dataMapper,\n 'document-metadata': documentMetadata,\n 'document-manager': documentManager,\n 'field-sizes': fieldSizes,\n metrics,\n 'permission-checker': permissionChecker,\n permission,\n 'populate-builder': populateBuilder,\n uid,\n ...(history.services ? history.services : {}),\n ...(preview.services ? preview.services : {}),\n ...homepage.services,\n};\n"],"names":["components","contentTypes","dataMapper","documentMetadata","documentManager","fieldSizes","metrics","permissionChecker","permission","populateBuilder","uid","history","services","preview","homepage"],"mappings":";;;;;;;;;;;;;;;;;AAeA,eAAe;AACbA,IAAAA,UAAAA;IACA,eAAA,EAAiBC,YAAAA;IACjB,aAAA,EAAeC,UAAAA;IACf,mBAAA,EAAqBC,gBAAAA;IACrB,kBAAA,EAAoBC,eAAAA;IACpB,aAAA,EAAeC,UAAAA;AACfC,IAAAA,OAAAA;IACA,oBAAA,EAAsBC,iBAAAA;AACtBC,IAAAA,UAAAA;IACA,kBAAA,EAAoBC,eAAAA;AACpBC,IAAAA,GAAAA;AACA,IAAA,GAAIC,MAAQC,QAAQ,GAAGD,MAAQC,QAAQ,GAAG,EAAE;AAC5C,IAAA,GAAIC,QAAQD,QAAQ,GAAGC,QAAQD,QAAQ,GAAG,EAAE;AAC5C,IAAA,GAAGE,QAASF;AACd,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../server/src/services/index.ts"],"sourcesContent":["import components from './components';\nimport contentTypes from './content-types';\nimport dataMapper from './data-mapper';\nimport fieldSizes from './field-sizes';\nimport metrics from './metrics';\nimport permissionChecker from './permission-checker';\nimport permission from './permission';\nimport populateBuilder from './populate-builder';\nimport uid from './uid';\nimport history from '../history';\nimport preview from '../preview';\nimport homepage from '../homepage';\nimport documentMetadata from './document-metadata';\nimport documentManager from './document-manager';\n\nexport default {\n components,\n 'content-types': contentTypes,\n 'data-mapper': dataMapper,\n 'document-metadata': documentMetadata,\n 'document-manager': documentManager,\n 'field-sizes': fieldSizes,\n metrics,\n 'permission-checker': permissionChecker,\n permission,\n 'populate-builder': populateBuilder,\n uid,\n ...(history.services ? history.services : {}),\n ...(preview.services ? preview.services : {}),\n ...homepage.services,\n};\n"],"names":["components","contentTypes","dataMapper","documentMetadata","documentManager","fieldSizes","metrics","permissionChecker","permission","populateBuilder","uid","history","services","preview","homepage"],"mappings":";;;;;;;;;;;;;;;AAeA,eAAe;AACbA,IAAAA,UAAAA;IACA,eAAiBC,EAAAA,OAAAA;IACjB,aAAeC,EAAAA,UAAAA;IACf,mBAAqBC,EAAAA,gBAAAA;IACrB,kBAAoBC,EAAAA,eAAAA;IACpB,aAAeC,EAAAA,uBAAAA;AACfC,IAAAA,OAAAA;IACA,oBAAsBC,EAAAA,iBAAAA;AACtBC,IAAAA,UAAAA;IACA,kBAAoBC,EAAAA,eAAAA;AACpBC,IAAAA,GAAAA;AACA,IAAA,GAAIC,QAAQC,QAAQ,GAAGD,QAAQC,QAAQ,GAAG,EAAE;AAC5C,IAAA,GAAIC,QAAQD,QAAQ,GAAGC,QAAQD,QAAQ,GAAG,EAAE;AAC5C,IAAA,GAAGE,SAASF;AACd,CAAE;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../server/src/services/index.ts"],"sourcesContent":["import components from './components';\nimport contentTypes from './content-types';\nimport dataMapper from './data-mapper';\nimport fieldSizes from './field-sizes';\nimport metrics from './metrics';\nimport permissionChecker from './permission-checker';\nimport permission from './permission';\nimport populateBuilder from './populate-builder';\nimport uid from './uid';\nimport history from '../history';\nimport preview from '../preview';\nimport homepage from '../homepage';\nimport documentMetadata from './document-metadata';\nimport documentManager from './document-manager';\n\nexport default {\n components,\n 'content-types': contentTypes,\n 'data-mapper': dataMapper,\n 'document-metadata': documentMetadata,\n 'document-manager': documentManager,\n 'field-sizes': fieldSizes,\n metrics,\n 'permission-checker': permissionChecker,\n permission,\n 'populate-builder': populateBuilder,\n uid,\n ...(history.services ? history.services : {}),\n ...(preview.services ? preview.services : {}),\n ...homepage.services,\n};\n"],"names":["components","contentTypes","dataMapper","documentMetadata","documentManager","fieldSizes","metrics","permissionChecker","permission","populateBuilder","uid","history","services","preview","homepage"],"mappings":";;;;;;;;;;;;;;;AAeA,eAAe;AACbA,IAAAA,UAAAA;IACA,eAAA,EAAiBC,OAAAA;IACjB,aAAA,EAAeC,UAAAA;IACf,mBAAA,EAAqBC,gBAAAA;IACrB,kBAAA,EAAoBC,eAAAA;IACpB,aAAA,EAAeC,uBAAAA;AACfC,IAAAA,OAAAA;IACA,oBAAA,EAAsBC,iBAAAA;AACtBC,IAAAA,UAAAA;IACA,kBAAA,EAAoBC,eAAAA;AACpBC,IAAAA,GAAAA;AACA,IAAA,GAAIC,QAAQC,QAAQ,GAAGD,QAAQC,QAAQ,GAAG,EAAE;AAC5C,IAAA,GAAIC,QAAQD,QAAQ,GAAGC,QAAQD,QAAQ,GAAG,EAAE;AAC5C,IAAA,GAAGE,SAASF;AACd,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.js","sources":["../../../server/src/services/metrics.ts"],"sourcesContent":["import { intersection, prop } from 'lodash/fp';\nimport { relations } from '@strapi/utils';\nimport type { Core, Struct } from '@strapi/types';\nimport type { Configuration } from '../../../shared/contracts/content-types';\n\nconst { getRelationalFields } = relations;\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const sendDidConfigureListView = async (\n contentType: Struct.ContentTypeSchema,\n configuration: Configuration\n ) => {\n const displayedFields = prop('length', configuration.layouts.list);\n const relationalFields = getRelationalFields(contentType);\n const displayedRelationalFields = intersection(\n relationalFields,\n configuration.layouts.list\n ).length;\n\n const data = {\n eventProperties: { containsRelationalFields: !!displayedRelationalFields },\n };\n\n if (data.eventProperties.containsRelationalFields) {\n Object.assign(data.eventProperties, {\n displayedFields,\n displayedRelationalFields,\n });\n }\n\n try {\n await strapi.telemetry.send('didConfigureListView', data);\n } catch (e) {\n // silence\n }\n };\n\n return {\n sendDidConfigureListView,\n };\n};\n"],"names":["getRelationalFields","relations","strapi","sendDidConfigureListView","contentType","configuration","displayedFields","prop","layouts","list","relationalFields","displayedRelationalFields","intersection","length","data","eventProperties","containsRelationalFields","Object","assign","telemetry","send","e"],"mappings":";;;;;AAKA,MAAM,EAAEA,mBAAmB,EAAE,GAAGC,qBAAAA;AAEhC,cAAe,CAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;IACjD,MAAMC,wBAAAA,GAA2B,OAC/BC,WACAC,EAAAA,aAAAA,GAAAA;AAEA,QAAA,MAAMC,kBAAkBC,OAAK,CAAA,QAAA,EAAUF,aAAcG,CAAAA,OAAO,CAACC,IAAI,CAAA;AACjE,QAAA,MAAMC,mBAAmBV,mBAAoBI,CAAAA,WAAAA,CAAAA;QAC7C,MAAMO,yBAAAA,GAA4BC,gBAChCF,gBACAL,EAAAA,aAAAA,CAAcG,OAAO,CAACC,IAAI,EAC1BI,MAAM;AAER,QAAA,MAAMC,IAAO,GAAA;YACXC,eAAiB,EAAA;AAAEC,gBAAAA,wBAAAA,EAA0B,CAAC,CAACL;AAA0B;AAC3E,SAAA;AAEA,QAAA,IAAIG,IAAKC,CAAAA,eAAe,CAACC,wBAAwB,EAAE;AACjDC,YAAAA,MAAAA,CAAOC,MAAM,CAACJ,IAAKC,CAAAA,eAAe,EAAE;AAClCT,gBAAAA,eAAAA;AACAK,gBAAAA;AACF,aAAA,CAAA;AACF;QAEA,IAAI;AACF,YAAA,MAAMT,MAAOiB,CAAAA,SAAS,CAACC,IAAI,CAAC,sBAAwBN,EAAAA,IAAAA,CAAAA;AACtD,SAAA,CAAE,OAAOO,CAAG,EAAA;;AAEZ;AACF,KAAA;IAEA,OAAO;AACLlB,QAAAA;AACF,KAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"metrics.js","sources":["../../../server/src/services/metrics.ts"],"sourcesContent":["import { intersection, prop } from 'lodash/fp';\nimport { relations } from '@strapi/utils';\nimport type { Core, Struct } from '@strapi/types';\nimport type { Configuration } from '../../../shared/contracts/content-types';\n\nconst { getRelationalFields } = relations;\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const sendDidConfigureListView = async (\n contentType: Struct.ContentTypeSchema,\n configuration: Configuration\n ) => {\n const displayedFields = prop('length', configuration.layouts.list);\n const relationalFields = getRelationalFields(contentType);\n const displayedRelationalFields = intersection(\n relationalFields,\n configuration.layouts.list\n ).length;\n\n const data = {\n eventProperties: { containsRelationalFields: !!displayedRelationalFields },\n };\n\n if (data.eventProperties.containsRelationalFields) {\n Object.assign(data.eventProperties, {\n displayedFields,\n displayedRelationalFields,\n });\n }\n\n try {\n await strapi.telemetry.send('didConfigureListView', data);\n } catch (e) {\n // silence\n }\n };\n\n return {\n sendDidConfigureListView,\n };\n};\n"],"names":["getRelationalFields","relations","strapi","sendDidConfigureListView","contentType","configuration","displayedFields","prop","layouts","list","relationalFields","displayedRelationalFields","intersection","length","data","eventProperties","containsRelationalFields","Object","assign","telemetry","send","e"],"mappings":";;;;;AAKA,MAAM,EAAEA,mBAAmB,EAAE,GAAGC,qBAAAA;AAEhC,cAAe,CAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;IACjD,MAAMC,wBAAAA,GAA2B,OAC/BC,WAAAA,EACAC,aAAAA,GAAAA;AAEA,QAAA,MAAMC,kBAAkBC,OAAAA,CAAK,QAAA,EAAUF,aAAAA,CAAcG,OAAO,CAACC,IAAI,CAAA;AACjE,QAAA,MAAMC,mBAAmBV,mBAAAA,CAAoBI,WAAAA,CAAAA;QAC7C,MAAMO,yBAAAA,GAA4BC,gBAChCF,gBAAAA,EACAL,aAAAA,CAAcG,OAAO,CAACC,IAAI,EAC1BI,MAAM;AAER,QAAA,MAAMC,IAAAA,GAAO;YACXC,eAAAA,EAAiB;AAAEC,gBAAAA,wBAAAA,EAA0B,CAAC,CAACL;AAA0B;AAC3E,SAAA;AAEA,QAAA,IAAIG,IAAAA,CAAKC,eAAe,CAACC,wBAAwB,EAAE;AACjDC,YAAAA,MAAAA,CAAOC,MAAM,CAACJ,IAAAA,CAAKC,eAAe,EAAE;AAClCT,gBAAAA,eAAAA;AACAK,gBAAAA;AACF,aAAA,CAAA;AACF,QAAA;QAEA,IAAI;AACF,YAAA,MAAMT,MAAAA,CAAOiB,SAAS,CAACC,IAAI,CAAC,sBAAA,EAAwBN,IAAAA,CAAAA;AACtD,QAAA,CAAA,CAAE,OAAOO,CAAAA,EAAG;;AAEZ,QAAA;AACF,IAAA,CAAA;IAEA,OAAO;AACLlB,QAAAA;AACF,KAAA;AACF,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.mjs","sources":["../../../server/src/services/metrics.ts"],"sourcesContent":["import { intersection, prop } from 'lodash/fp';\nimport { relations } from '@strapi/utils';\nimport type { Core, Struct } from '@strapi/types';\nimport type { Configuration } from '../../../shared/contracts/content-types';\n\nconst { getRelationalFields } = relations;\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const sendDidConfigureListView = async (\n contentType: Struct.ContentTypeSchema,\n configuration: Configuration\n ) => {\n const displayedFields = prop('length', configuration.layouts.list);\n const relationalFields = getRelationalFields(contentType);\n const displayedRelationalFields = intersection(\n relationalFields,\n configuration.layouts.list\n ).length;\n\n const data = {\n eventProperties: { containsRelationalFields: !!displayedRelationalFields },\n };\n\n if (data.eventProperties.containsRelationalFields) {\n Object.assign(data.eventProperties, {\n displayedFields,\n displayedRelationalFields,\n });\n }\n\n try {\n await strapi.telemetry.send('didConfigureListView', data);\n } catch (e) {\n // silence\n }\n };\n\n return {\n sendDidConfigureListView,\n };\n};\n"],"names":["getRelationalFields","relations","strapi","sendDidConfigureListView","contentType","configuration","displayedFields","prop","layouts","list","relationalFields","displayedRelationalFields","intersection","length","data","eventProperties","containsRelationalFields","Object","assign","telemetry","send","e"],"mappings":";;;AAKA,MAAM,EAAEA,mBAAmB,EAAE,GAAGC,SAAAA;AAEhC,cAAe,CAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;IACjD,MAAMC,wBAAAA,GAA2B,OAC/BC,WACAC,EAAAA,aAAAA,GAAAA;AAEA,QAAA,MAAMC,kBAAkBC,IAAK,CAAA,QAAA,EAAUF,aAAcG,CAAAA,OAAO,CAACC,IAAI,CAAA;AACjE,QAAA,MAAMC,mBAAmBV,mBAAoBI,CAAAA,WAAAA,CAAAA;QAC7C,MAAMO,yBAAAA,GAA4BC,aAChCF,gBACAL,EAAAA,aAAAA,CAAcG,OAAO,CAACC,IAAI,EAC1BI,MAAM;AAER,QAAA,MAAMC,IAAO,GAAA;YACXC,eAAiB,EAAA;AAAEC,gBAAAA,wBAAAA,EAA0B,CAAC,CAACL;AAA0B;AAC3E,SAAA;AAEA,QAAA,IAAIG,IAAKC,CAAAA,eAAe,CAACC,wBAAwB,EAAE;AACjDC,YAAAA,MAAAA,CAAOC,MAAM,CAACJ,IAAKC,CAAAA,eAAe,EAAE;AAClCT,gBAAAA,eAAAA;AACAK,gBAAAA;AACF,aAAA,CAAA;AACF;QAEA,IAAI;AACF,YAAA,MAAMT,MAAOiB,CAAAA,SAAS,CAACC,IAAI,CAAC,sBAAwBN,EAAAA,IAAAA,CAAAA;AACtD,SAAA,CAAE,OAAOO,CAAG,EAAA;;AAEZ;AACF,KAAA;IAEA,OAAO;AACLlB,QAAAA;AACF,KAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"metrics.mjs","sources":["../../../server/src/services/metrics.ts"],"sourcesContent":["import { intersection, prop } from 'lodash/fp';\nimport { relations } from '@strapi/utils';\nimport type { Core, Struct } from '@strapi/types';\nimport type { Configuration } from '../../../shared/contracts/content-types';\n\nconst { getRelationalFields } = relations;\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const sendDidConfigureListView = async (\n contentType: Struct.ContentTypeSchema,\n configuration: Configuration\n ) => {\n const displayedFields = prop('length', configuration.layouts.list);\n const relationalFields = getRelationalFields(contentType);\n const displayedRelationalFields = intersection(\n relationalFields,\n configuration.layouts.list\n ).length;\n\n const data = {\n eventProperties: { containsRelationalFields: !!displayedRelationalFields },\n };\n\n if (data.eventProperties.containsRelationalFields) {\n Object.assign(data.eventProperties, {\n displayedFields,\n displayedRelationalFields,\n });\n }\n\n try {\n await strapi.telemetry.send('didConfigureListView', data);\n } catch (e) {\n // silence\n }\n };\n\n return {\n sendDidConfigureListView,\n };\n};\n"],"names":["getRelationalFields","relations","strapi","sendDidConfigureListView","contentType","configuration","displayedFields","prop","layouts","list","relationalFields","displayedRelationalFields","intersection","length","data","eventProperties","containsRelationalFields","Object","assign","telemetry","send","e"],"mappings":";;;AAKA,MAAM,EAAEA,mBAAmB,EAAE,GAAGC,SAAAA;AAEhC,cAAe,CAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;IACjD,MAAMC,wBAAAA,GAA2B,OAC/BC,WAAAA,EACAC,aAAAA,GAAAA;AAEA,QAAA,MAAMC,kBAAkBC,IAAAA,CAAK,QAAA,EAAUF,aAAAA,CAAcG,OAAO,CAACC,IAAI,CAAA;AACjE,QAAA,MAAMC,mBAAmBV,mBAAAA,CAAoBI,WAAAA,CAAAA;QAC7C,MAAMO,yBAAAA,GAA4BC,aAChCF,gBAAAA,EACAL,aAAAA,CAAcG,OAAO,CAACC,IAAI,EAC1BI,MAAM;AAER,QAAA,MAAMC,IAAAA,GAAO;YACXC,eAAAA,EAAiB;AAAEC,gBAAAA,wBAAAA,EAA0B,CAAC,CAACL;AAA0B;AAC3E,SAAA;AAEA,QAAA,IAAIG,IAAAA,CAAKC,eAAe,CAACC,wBAAwB,EAAE;AACjDC,YAAAA,MAAAA,CAAOC,MAAM,CAACJ,IAAAA,CAAKC,eAAe,EAAE;AAClCT,gBAAAA,eAAAA;AACAK,gBAAAA;AACF,aAAA,CAAA;AACF,QAAA;QAEA,IAAI;AACF,YAAA,MAAMT,MAAAA,CAAOiB,SAAS,CAACC,IAAI,CAAC,sBAAA,EAAwBN,IAAAA,CAAAA;AACtD,QAAA,CAAA,CAAE,OAAOO,CAAAA,EAAG;;AAEZ,QAAA;AACF,IAAA,CAAA;IAEA,OAAO;AACLlB,QAAAA;AACF,KAAA;AACF,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"permission-checker.js","sources":["../../../server/src/services/permission-checker.ts"],"sourcesContent":["import { async } from '@strapi/utils';\nimport { isEmpty } from 'lodash/fp';\nimport type { Core, UID, Modules } from '@strapi/types';\n\nconst ACTIONS = {\n read: 'plugin::content-manager.explorer.read',\n create: 'plugin::content-manager.explorer.create',\n update: 'plugin::content-manager.explorer.update',\n delete: 'plugin::content-manager.explorer.delete',\n publish: 'plugin::content-manager.explorer.publish',\n unpublish: 'plugin::content-manager.explorer.publish',\n discard: 'plugin::content-manager.explorer.update',\n} as const;\n\ntype Entity = Modules.EntityService.Result<UID.ContentType>;\ntype Query = {\n page?: string;\n pageSize?: string;\n sort?: string;\n};\n\nconst createPermissionChecker =\n (strapi: Core.Strapi) =>\n ({ userAbility, model }: { userAbility: any; model: string }) => {\n const permissionsManager = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n model,\n });\n\n const { actionProvider } = strapi.service('admin::permission');\n\n const toSubject = (entity?: Entity) => {\n return entity ? permissionsManager.toSubject(entity, model) : model;\n };\n\n // @ts-expect-error preserve the parameter order\n // eslint-disable-next-line @typescript-eslint/default-param-last\n const can = (action: string, entity?: Entity, field: string) => {\n const subject = toSubject(entity);\n const aliases = actionProvider.unstable_aliases(action, model) as string[];\n\n return (\n // Test the original action to see if it passes\n userAbility.can(action, subject, field) ||\n // Else try every known alias if at least one of them succeed, then the user \"can\"\n aliases.some((alias) => userAbility.can(alias, subject, field))\n );\n };\n\n // @ts-expect-error preserve the parameter order\n // eslint-disable-next-line @typescript-eslint/default-param-last\n const cannot = (action: string, entity?: Entity, field: string) => {\n const subject = toSubject(entity);\n const aliases = actionProvider.unstable_aliases(action, model) as string[];\n\n return (\n // Test both the original action\n userAbility.cannot(action, subject, field) &&\n // and every known alias, if all of them fail (cannot), then the user truly \"cannot\"\n aliases.every((alias) => userAbility.cannot(alias, subject, field))\n );\n };\n\n const sanitizeOutput = (data: Entity, { action = ACTIONS.read }: { action?: string } = {}) => {\n return permissionsManager.sanitizeOutput(data, { subject: toSubject(data), action });\n };\n\n const getRulesForAction = (action: string) => {\n if (typeof userAbility.rulesFor !== 'function') {\n return [];\n }\n\n const aliases = actionProvider.unstable_aliases(action, model) as string[];\n const actions = [action, ...aliases];\n\n return actions.flatMap((actionName) => userAbility.rulesFor(actionName, model));\n };\n\n // Tell callers if we need the full entity to check access\n const requiresEntity = (action: string) => {\n if (typeof userAbility.rulesFor !== 'function') {\n return true;\n }\n\n const rules = getRulesForAction(action);\n\n return rules.some((rule: any) => rule.conditions && !isEmpty(rule.conditions));\n };\n\n const sanitizeQuery = (query: Query, { action = ACTIONS.read }: { action?: string } = {}) => {\n return permissionsManager.sanitizeQuery(query, { subject: model, action });\n };\n\n const sanitizeInput = (action: string, data: any, entity?: Entity) => {\n return permissionsManager.sanitizeInput(data, {\n subject: entity ? toSubject(entity) : model,\n action,\n });\n };\n\n const validateQuery = (query: Query, { action = ACTIONS.read }: { action?: string } = {}) => {\n return permissionsManager.validateQuery(query, { subject: model, action });\n };\n\n const validateInput = (action: string, data: any, entity?: Entity) => {\n return permissionsManager.validateInput(data, {\n subject: entity ? toSubject(entity) : model,\n action,\n });\n };\n\n const sanitizeCreateInput = (data: any) => sanitizeInput(ACTIONS.create, data);\n const sanitizeUpdateInput = (entity: Entity) => (data: any) =>\n sanitizeInput(ACTIONS.update, data, entity);\n\n const buildPermissionQuery = (query: Query, action: { action?: string } = {}) => {\n return permissionsManager.addPermissionsQueryTo(query, action);\n };\n\n const sanitizedQuery = (query: Query, action: { action?: string } = {}) => {\n return async.pipe(\n (q: Query) => sanitizeQuery(q, action),\n (q: Query) => buildPermissionQuery(q, action)\n )(query);\n };\n\n // Sanitized queries shortcuts\n Object.keys(ACTIONS).forEach((action) => {\n // @ts-expect-error TODO\n sanitizedQuery[action] = (query: Query) => sanitizedQuery(query, ACTIONS[action]);\n });\n\n // Permission utils shortcuts\n Object.keys(ACTIONS).forEach((action) => {\n // @ts-expect-error TODO\n can[action] = (...args: any) => can(ACTIONS[action], ...args);\n // @ts-expect-error TODO\n cannot[action] = (...args: any) => cannot(ACTIONS[action], ...args);\n // @ts-expect-error TODO\n requiresEntity[action] = () => requiresEntity(ACTIONS[action]);\n });\n\n return {\n // Permission utils\n can, // check if you have the permission\n cannot, // check if you don't have the permission\n requiresEntity, // check if entity data is needed for permission evaluation\n // Sanitizers\n sanitizeOutput,\n sanitizeQuery,\n sanitizeCreateInput,\n sanitizeUpdateInput,\n // Validators\n validateQuery,\n validateInput,\n // Queries Builder\n sanitizedQuery,\n };\n };\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n create: createPermissionChecker(strapi),\n});\n"],"names":["ACTIONS","read","create","update","delete","publish","unpublish","discard","createPermissionChecker","strapi","userAbility","model","permissionsManager","service","createPermissionsManager","ability","actionProvider","toSubject","entity","can","action","field","subject","aliases","unstable_aliases","some","alias","cannot","every","sanitizeOutput","data","getRulesForAction","rulesFor","actions","flatMap","actionName","requiresEntity","rules","rule","conditions","isEmpty","sanitizeQuery","query","sanitizeInput","validateQuery","validateInput","sanitizeCreateInput","sanitizeUpdateInput","buildPermissionQuery","addPermissionsQueryTo","sanitizedQuery","async","pipe","q","Object","keys","forEach","args"],"mappings":"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"}
1
+ {"version":3,"file":"permission-checker.js","sources":["../../../server/src/services/permission-checker.ts"],"sourcesContent":["import { async } from '@strapi/utils';\nimport { isEmpty } from 'lodash/fp';\nimport type { Core, UID, Modules } from '@strapi/types';\n\nconst ACTIONS = {\n read: 'plugin::content-manager.explorer.read',\n create: 'plugin::content-manager.explorer.create',\n update: 'plugin::content-manager.explorer.update',\n delete: 'plugin::content-manager.explorer.delete',\n publish: 'plugin::content-manager.explorer.publish',\n unpublish: 'plugin::content-manager.explorer.publish',\n discard: 'plugin::content-manager.explorer.update',\n} as const;\n\ntype Entity = Modules.EntityService.Result<UID.ContentType>;\ntype Query = {\n page?: string;\n pageSize?: string;\n sort?: string;\n};\n\nconst createPermissionChecker =\n (strapi: Core.Strapi) =>\n ({ userAbility, model }: { userAbility: any; model: string }) => {\n const permissionsManager = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n model,\n });\n\n const { actionProvider } = strapi.service('admin::permission');\n\n const toSubject = (entity?: Entity) => {\n return entity ? permissionsManager.toSubject(entity, model) : model;\n };\n\n // @ts-expect-error preserve the parameter order\n // eslint-disable-next-line @typescript-eslint/default-param-last\n const can = (action: string, entity?: Entity, field: string) => {\n const subject = toSubject(entity);\n const aliases = actionProvider.unstable_aliases(action, model) as string[];\n\n return (\n // Test the original action to see if it passes\n userAbility.can(action, subject, field) ||\n // Else try every known alias if at least one of them succeed, then the user \"can\"\n aliases.some((alias) => userAbility.can(alias, subject, field))\n );\n };\n\n // @ts-expect-error preserve the parameter order\n // eslint-disable-next-line @typescript-eslint/default-param-last\n const cannot = (action: string, entity?: Entity, field: string) => {\n const subject = toSubject(entity);\n const aliases = actionProvider.unstable_aliases(action, model) as string[];\n\n return (\n // Test both the original action\n userAbility.cannot(action, subject, field) &&\n // and every known alias, if all of them fail (cannot), then the user truly \"cannot\"\n aliases.every((alias) => userAbility.cannot(alias, subject, field))\n );\n };\n\n const sanitizeOutput = (data: Entity, { action = ACTIONS.read }: { action?: string } = {}) => {\n return permissionsManager.sanitizeOutput(data, { subject: toSubject(data), action });\n };\n\n const getRulesForAction = (action: string) => {\n if (typeof userAbility.rulesFor !== 'function') {\n return [];\n }\n\n const aliases = actionProvider.unstable_aliases(action, model) as string[];\n const actions = [action, ...aliases];\n\n return actions.flatMap((actionName) => userAbility.rulesFor(actionName, model));\n };\n\n // Tell callers if we need the full entity to check access\n const requiresEntity = (action: string) => {\n if (typeof userAbility.rulesFor !== 'function') {\n return true;\n }\n\n const rules = getRulesForAction(action);\n\n return rules.some((rule: any) => rule.conditions && !isEmpty(rule.conditions));\n };\n\n const sanitizeQuery = (query: Query, { action = ACTIONS.read }: { action?: string } = {}) => {\n return permissionsManager.sanitizeQuery(query, { subject: model, action });\n };\n\n const sanitizeInput = (action: string, data: any, entity?: Entity) => {\n return permissionsManager.sanitizeInput(data, {\n subject: entity ? toSubject(entity) : model,\n action,\n });\n };\n\n const validateQuery = (query: Query, { action = ACTIONS.read }: { action?: string } = {}) => {\n return permissionsManager.validateQuery(query, { subject: model, action });\n };\n\n const validateInput = (action: string, data: any, entity?: Entity) => {\n return permissionsManager.validateInput(data, {\n subject: entity ? toSubject(entity) : model,\n action,\n });\n };\n\n const sanitizeCreateInput = (data: any) => sanitizeInput(ACTIONS.create, data);\n const sanitizeUpdateInput = (entity: Entity) => (data: any) =>\n sanitizeInput(ACTIONS.update, data, entity);\n\n const buildPermissionQuery = (query: Query, action: { action?: string } = {}) => {\n return permissionsManager.addPermissionsQueryTo(query, action);\n };\n\n const sanitizedQuery = (query: Query, action: { action?: string } = {}) => {\n return async.pipe(\n (q: Query) => sanitizeQuery(q, action),\n (q: Query) => buildPermissionQuery(q, action)\n )(query);\n };\n\n // Sanitized queries shortcuts\n Object.keys(ACTIONS).forEach((action) => {\n // @ts-expect-error TODO\n sanitizedQuery[action] = (query: Query) => sanitizedQuery(query, ACTIONS[action]);\n });\n\n // Permission utils shortcuts\n Object.keys(ACTIONS).forEach((action) => {\n // @ts-expect-error TODO\n can[action] = (...args: any) => can(ACTIONS[action], ...args);\n // @ts-expect-error TODO\n cannot[action] = (...args: any) => cannot(ACTIONS[action], ...args);\n // @ts-expect-error TODO\n requiresEntity[action] = () => requiresEntity(ACTIONS[action]);\n });\n\n return {\n // Permission utils\n can, // check if you have the permission\n cannot, // check if you don't have the permission\n requiresEntity, // check if entity data is needed for permission evaluation\n // Sanitizers\n sanitizeOutput,\n sanitizeQuery,\n sanitizeCreateInput,\n sanitizeUpdateInput,\n // Validators\n validateQuery,\n validateInput,\n // Queries Builder\n sanitizedQuery,\n };\n };\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n create: createPermissionChecker(strapi),\n});\n"],"names":["ACTIONS","read","create","update","delete","publish","unpublish","discard","createPermissionChecker","strapi","userAbility","model","permissionsManager","service","createPermissionsManager","ability","actionProvider","toSubject","entity","can","action","field","subject","aliases","unstable_aliases","some","alias","cannot","every","sanitizeOutput","data","getRulesForAction","rulesFor","actions","flatMap","actionName","requiresEntity","rules","rule","conditions","isEmpty","sanitizeQuery","query","sanitizeInput","validateQuery","validateInput","sanitizeCreateInput","sanitizeUpdateInput","buildPermissionQuery","addPermissionsQueryTo","sanitizedQuery","async","pipe","q","Object","keys","forEach","args"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"permission-checker.mjs","sources":["../../../server/src/services/permission-checker.ts"],"sourcesContent":["import { async } from '@strapi/utils';\nimport { isEmpty } from 'lodash/fp';\nimport type { Core, UID, Modules } from '@strapi/types';\n\nconst ACTIONS = {\n read: 'plugin::content-manager.explorer.read',\n create: 'plugin::content-manager.explorer.create',\n update: 'plugin::content-manager.explorer.update',\n delete: 'plugin::content-manager.explorer.delete',\n publish: 'plugin::content-manager.explorer.publish',\n unpublish: 'plugin::content-manager.explorer.publish',\n discard: 'plugin::content-manager.explorer.update',\n} as const;\n\ntype Entity = Modules.EntityService.Result<UID.ContentType>;\ntype Query = {\n page?: string;\n pageSize?: string;\n sort?: string;\n};\n\nconst createPermissionChecker =\n (strapi: Core.Strapi) =>\n ({ userAbility, model }: { userAbility: any; model: string }) => {\n const permissionsManager = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n model,\n });\n\n const { actionProvider } = strapi.service('admin::permission');\n\n const toSubject = (entity?: Entity) => {\n return entity ? permissionsManager.toSubject(entity, model) : model;\n };\n\n // @ts-expect-error preserve the parameter order\n // eslint-disable-next-line @typescript-eslint/default-param-last\n const can = (action: string, entity?: Entity, field: string) => {\n const subject = toSubject(entity);\n const aliases = actionProvider.unstable_aliases(action, model) as string[];\n\n return (\n // Test the original action to see if it passes\n userAbility.can(action, subject, field) ||\n // Else try every known alias if at least one of them succeed, then the user \"can\"\n aliases.some((alias) => userAbility.can(alias, subject, field))\n );\n };\n\n // @ts-expect-error preserve the parameter order\n // eslint-disable-next-line @typescript-eslint/default-param-last\n const cannot = (action: string, entity?: Entity, field: string) => {\n const subject = toSubject(entity);\n const aliases = actionProvider.unstable_aliases(action, model) as string[];\n\n return (\n // Test both the original action\n userAbility.cannot(action, subject, field) &&\n // and every known alias, if all of them fail (cannot), then the user truly \"cannot\"\n aliases.every((alias) => userAbility.cannot(alias, subject, field))\n );\n };\n\n const sanitizeOutput = (data: Entity, { action = ACTIONS.read }: { action?: string } = {}) => {\n return permissionsManager.sanitizeOutput(data, { subject: toSubject(data), action });\n };\n\n const getRulesForAction = (action: string) => {\n if (typeof userAbility.rulesFor !== 'function') {\n return [];\n }\n\n const aliases = actionProvider.unstable_aliases(action, model) as string[];\n const actions = [action, ...aliases];\n\n return actions.flatMap((actionName) => userAbility.rulesFor(actionName, model));\n };\n\n // Tell callers if we need the full entity to check access\n const requiresEntity = (action: string) => {\n if (typeof userAbility.rulesFor !== 'function') {\n return true;\n }\n\n const rules = getRulesForAction(action);\n\n return rules.some((rule: any) => rule.conditions && !isEmpty(rule.conditions));\n };\n\n const sanitizeQuery = (query: Query, { action = ACTIONS.read }: { action?: string } = {}) => {\n return permissionsManager.sanitizeQuery(query, { subject: model, action });\n };\n\n const sanitizeInput = (action: string, data: any, entity?: Entity) => {\n return permissionsManager.sanitizeInput(data, {\n subject: entity ? toSubject(entity) : model,\n action,\n });\n };\n\n const validateQuery = (query: Query, { action = ACTIONS.read }: { action?: string } = {}) => {\n return permissionsManager.validateQuery(query, { subject: model, action });\n };\n\n const validateInput = (action: string, data: any, entity?: Entity) => {\n return permissionsManager.validateInput(data, {\n subject: entity ? toSubject(entity) : model,\n action,\n });\n };\n\n const sanitizeCreateInput = (data: any) => sanitizeInput(ACTIONS.create, data);\n const sanitizeUpdateInput = (entity: Entity) => (data: any) =>\n sanitizeInput(ACTIONS.update, data, entity);\n\n const buildPermissionQuery = (query: Query, action: { action?: string } = {}) => {\n return permissionsManager.addPermissionsQueryTo(query, action);\n };\n\n const sanitizedQuery = (query: Query, action: { action?: string } = {}) => {\n return async.pipe(\n (q: Query) => sanitizeQuery(q, action),\n (q: Query) => buildPermissionQuery(q, action)\n )(query);\n };\n\n // Sanitized queries shortcuts\n Object.keys(ACTIONS).forEach((action) => {\n // @ts-expect-error TODO\n sanitizedQuery[action] = (query: Query) => sanitizedQuery(query, ACTIONS[action]);\n });\n\n // Permission utils shortcuts\n Object.keys(ACTIONS).forEach((action) => {\n // @ts-expect-error TODO\n can[action] = (...args: any) => can(ACTIONS[action], ...args);\n // @ts-expect-error TODO\n cannot[action] = (...args: any) => cannot(ACTIONS[action], ...args);\n // @ts-expect-error TODO\n requiresEntity[action] = () => requiresEntity(ACTIONS[action]);\n });\n\n return {\n // Permission utils\n can, // check if you have the permission\n cannot, // check if you don't have the permission\n requiresEntity, // check if entity data is needed for permission evaluation\n // Sanitizers\n sanitizeOutput,\n sanitizeQuery,\n sanitizeCreateInput,\n sanitizeUpdateInput,\n // Validators\n validateQuery,\n validateInput,\n // Queries Builder\n sanitizedQuery,\n };\n };\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n create: createPermissionChecker(strapi),\n});\n"],"names":["ACTIONS","read","create","update","delete","publish","unpublish","discard","createPermissionChecker","strapi","userAbility","model","permissionsManager","service","createPermissionsManager","ability","actionProvider","toSubject","entity","can","action","field","subject","aliases","unstable_aliases","some","alias","cannot","every","sanitizeOutput","data","getRulesForAction","rulesFor","actions","flatMap","actionName","requiresEntity","rules","rule","conditions","isEmpty","sanitizeQuery","query","sanitizeInput","validateQuery","validateInput","sanitizeCreateInput","sanitizeUpdateInput","buildPermissionQuery","addPermissionsQueryTo","sanitizedQuery","async","pipe","q","Object","keys","forEach","args"],"mappings":";;;AAIA,MAAMA,OAAU,GAAA;IACdC,IAAM,EAAA,uCAAA;IACNC,MAAQ,EAAA,yCAAA;IACRC,MAAQ,EAAA,yCAAA;IACRC,MAAQ,EAAA,yCAAA;IACRC,OAAS,EAAA,0CAAA;IACTC,SAAW,EAAA,0CAAA;IACXC,OAAS,EAAA;AACX,CAAA;AASA,MAAMC,uBAAAA,GACJ,CAACC,MACD,GAAA,CAAC,EAAEC,WAAW,EAAEC,KAAK,EAAuC,GAAA;AAC1D,QAAA,MAAMC,qBAAqBH,MAAOI,CAAAA,OAAO,CAAC,mBAAA,CAAA,CAAqBC,wBAAwB,CAAC;YACtFC,OAASL,EAAAA,WAAAA;AACTC,YAAAA;AACF,SAAA,CAAA;AAEA,QAAA,MAAM,EAAEK,cAAc,EAAE,GAAGP,MAAAA,CAAOI,OAAO,CAAC,mBAAA,CAAA;AAE1C,QAAA,MAAMI,YAAY,CAACC,MAAAA,GAAAA;AACjB,YAAA,OAAOA,MAASN,GAAAA,kBAAAA,CAAmBK,SAAS,CAACC,QAAQP,KAASA,CAAAA,GAAAA,KAAAA;AAChE,SAAA;;;QAIA,MAAMQ,GAAAA,GAAM,CAACC,MAAAA,EAAgBF,MAAiBG,EAAAA,KAAAA,GAAAA;AAC5C,YAAA,MAAMC,UAAUL,SAAUC,CAAAA,MAAAA,CAAAA;AAC1B,YAAA,MAAMK,OAAUP,GAAAA,cAAAA,CAAeQ,gBAAgB,CAACJ,MAAQT,EAAAA,KAAAA,CAAAA;AAExD,YAAA;AAEED,YAAAA,WAAAA,CAAYS,GAAG,CAACC,MAAQE,EAAAA,OAAAA,EAASD;YAEjCE,OAAQE,CAAAA,IAAI,CAAC,CAACC,KAAAA,GAAUhB,YAAYS,GAAG,CAACO,OAAOJ,OAASD,EAAAA,KAAAA,CAAAA,CAAAA;AAE5D,SAAA;;;QAIA,MAAMM,MAAAA,GAAS,CAACP,MAAAA,EAAgBF,MAAiBG,EAAAA,KAAAA,GAAAA;AAC/C,YAAA,MAAMC,UAAUL,SAAUC,CAAAA,MAAAA,CAAAA;AAC1B,YAAA,MAAMK,OAAUP,GAAAA,cAAAA,CAAeQ,gBAAgB,CAACJ,MAAQT,EAAAA,KAAAA,CAAAA;AAExD,YAAA;AAEED,YAAAA,WAAAA,CAAYiB,MAAM,CAACP,MAAQE,EAAAA,OAAAA,EAASD;YAEpCE,OAAQK,CAAAA,KAAK,CAAC,CAACF,KAAAA,GAAUhB,YAAYiB,MAAM,CAACD,OAAOJ,OAASD,EAAAA,KAAAA,CAAAA,CAAAA;AAEhE,SAAA;QAEA,MAAMQ,cAAAA,GAAiB,CAACC,IAAAA,EAAc,EAAEV,MAAAA,GAASpB,QAAQC,IAAI,EAAuB,GAAG,EAAE,GAAA;YACvF,OAAOW,kBAAAA,CAAmBiB,cAAc,CAACC,IAAM,EAAA;AAAER,gBAAAA,OAAAA,EAASL,SAAUa,CAAAA,IAAAA,CAAAA;AAAOV,gBAAAA;AAAO,aAAA,CAAA;AACpF,SAAA;AAEA,QAAA,MAAMW,oBAAoB,CAACX,MAAAA,GAAAA;AACzB,YAAA,IAAI,OAAOV,WAAAA,CAAYsB,QAAQ,KAAK,UAAY,EAAA;AAC9C,gBAAA,OAAO,EAAE;AACX;AAEA,YAAA,MAAMT,OAAUP,GAAAA,cAAAA,CAAeQ,gBAAgB,CAACJ,MAAQT,EAAAA,KAAAA,CAAAA;AACxD,YAAA,MAAMsB,OAAU,GAAA;AAACb,gBAAAA,MAAAA;AAAWG,gBAAAA,GAAAA;AAAQ,aAAA;YAEpC,OAAOU,OAAAA,CAAQC,OAAO,CAAC,CAACC,aAAezB,WAAYsB,CAAAA,QAAQ,CAACG,UAAYxB,EAAAA,KAAAA,CAAAA,CAAAA;AAC1E,SAAA;;AAGA,QAAA,MAAMyB,iBAAiB,CAAChB,MAAAA,GAAAA;AACtB,YAAA,IAAI,OAAOV,WAAAA,CAAYsB,QAAQ,KAAK,UAAY,EAAA;gBAC9C,OAAO,IAAA;AACT;AAEA,YAAA,MAAMK,QAAQN,iBAAkBX,CAAAA,MAAAA,CAAAA;YAEhC,OAAOiB,KAAAA,CAAMZ,IAAI,CAAC,CAACa,IAAAA,GAAcA,IAAKC,CAAAA,UAAU,IAAI,CAACC,OAAQF,CAAAA,IAAAA,CAAKC,UAAU,CAAA,CAAA;AAC9E,SAAA;QAEA,MAAME,aAAAA,GAAgB,CAACC,KAAAA,EAAc,EAAEtB,MAAAA,GAASpB,QAAQC,IAAI,EAAuB,GAAG,EAAE,GAAA;YACtF,OAAOW,kBAAAA,CAAmB6B,aAAa,CAACC,KAAO,EAAA;gBAAEpB,OAASX,EAAAA,KAAAA;AAAOS,gBAAAA;AAAO,aAAA,CAAA;AAC1E,SAAA;QAEA,MAAMuB,aAAAA,GAAgB,CAACvB,MAAAA,EAAgBU,IAAWZ,EAAAA,MAAAA,GAAAA;YAChD,OAAON,kBAAAA,CAAmB+B,aAAa,CAACb,IAAM,EAAA;gBAC5CR,OAASJ,EAAAA,MAAAA,GAASD,UAAUC,MAAUP,CAAAA,GAAAA,KAAAA;AACtCS,gBAAAA;AACF,aAAA,CAAA;AACF,SAAA;QAEA,MAAMwB,aAAAA,GAAgB,CAACF,KAAAA,EAAc,EAAEtB,MAAAA,GAASpB,QAAQC,IAAI,EAAuB,GAAG,EAAE,GAAA;YACtF,OAAOW,kBAAAA,CAAmBgC,aAAa,CAACF,KAAO,EAAA;gBAAEpB,OAASX,EAAAA,KAAAA;AAAOS,gBAAAA;AAAO,aAAA,CAAA;AAC1E,SAAA;QAEA,MAAMyB,aAAAA,GAAgB,CAACzB,MAAAA,EAAgBU,IAAWZ,EAAAA,MAAAA,GAAAA;YAChD,OAAON,kBAAAA,CAAmBiC,aAAa,CAACf,IAAM,EAAA;gBAC5CR,OAASJ,EAAAA,MAAAA,GAASD,UAAUC,MAAUP,CAAAA,GAAAA,KAAAA;AACtCS,gBAAAA;AACF,aAAA,CAAA;AACF,SAAA;AAEA,QAAA,MAAM0B,sBAAsB,CAAChB,IAAAA,GAAca,aAAc3C,CAAAA,OAAAA,CAAQE,MAAM,EAAE4B,IAAAA,CAAAA;QACzE,MAAMiB,mBAAAA,GAAsB,CAAC7B,MAAmB,GAAA,CAACY,OAC/Ca,aAAc3C,CAAAA,OAAAA,CAAQG,MAAM,EAAE2B,IAAMZ,EAAAA,MAAAA,CAAAA;AAEtC,QAAA,MAAM8B,oBAAuB,GAAA,CAACN,KAActB,EAAAA,MAAAA,GAA8B,EAAE,GAAA;YAC1E,OAAOR,kBAAAA,CAAmBqC,qBAAqB,CAACP,KAAOtB,EAAAA,MAAAA,CAAAA;AACzD,SAAA;AAEA,QAAA,MAAM8B,cAAiB,GAAA,CAACR,KAActB,EAAAA,MAAAA,GAA8B,EAAE,GAAA;AACpE,YAAA,OAAO+B,KAAMC,CAAAA,IAAI,CACf,CAACC,CAAaZ,GAAAA,aAAAA,CAAcY,CAAGjC,EAAAA,MAAAA,CAAAA,EAC/B,CAACiC,CAAAA,GAAaL,oBAAqBK,CAAAA,CAAAA,EAAGjC,MACtCsB,CAAAA,CAAAA,CAAAA,KAAAA,CAAAA;AACJ,SAAA;;AAGAY,QAAAA,MAAAA,CAAOC,IAAI,CAACvD,OAASwD,CAAAA,CAAAA,OAAO,CAAC,CAACpC,MAAAA,GAAAA;;YAE5B8B,cAAc,CAAC9B,OAAO,GAAG,CAACsB,QAAiBQ,cAAeR,CAAAA,KAAAA,EAAO1C,OAAO,CAACoB,MAAO,CAAA,CAAA;AAClF,SAAA,CAAA;;AAGAkC,QAAAA,MAAAA,CAAOC,IAAI,CAACvD,OAASwD,CAAAA,CAAAA,OAAO,CAAC,CAACpC,MAAAA,GAAAA;;YAE5BD,GAAG,CAACC,MAAO,CAAA,GAAG,CAAC,GAAGqC,OAActC,GAAInB,CAAAA,OAAO,CAACoB,MAAAA,CAAO,EAAKqC,GAAAA,IAAAA,CAAAA;;YAExD9B,MAAM,CAACP,MAAO,CAAA,GAAG,CAAC,GAAGqC,OAAc9B,MAAO3B,CAAAA,OAAO,CAACoB,MAAAA,CAAO,EAAKqC,GAAAA,IAAAA,CAAAA;;AAE9DrB,YAAAA,cAAc,CAAChB,MAAO,CAAA,GAAG,IAAMgB,cAAepC,CAAAA,OAAO,CAACoB,MAAO,CAAA,CAAA;AAC/D,SAAA,CAAA;QAEA,OAAO;;AAELD,YAAAA,GAAAA;AACAQ,YAAAA,MAAAA;AACAS,YAAAA,cAAAA;;AAEAP,YAAAA,cAAAA;AACAY,YAAAA,aAAAA;AACAK,YAAAA,mBAAAA;AACAC,YAAAA,mBAAAA;;AAEAH,YAAAA,aAAAA;AACAC,YAAAA,aAAAA;;AAEAK,YAAAA;AACF,SAAA;AACF,KAAA;AAEF,wBAAe,CAAA,CAAC,EAAEzC,MAAM,EAA2B,IAAM;AACvDP,QAAAA,MAAAA,EAAQM,uBAAwBC,CAAAA,MAAAA;AAClC,KAAA,CAAC;;;;"}
1
+ {"version":3,"file":"permission-checker.mjs","sources":["../../../server/src/services/permission-checker.ts"],"sourcesContent":["import { async } from '@strapi/utils';\nimport { isEmpty } from 'lodash/fp';\nimport type { Core, UID, Modules } from '@strapi/types';\n\nconst ACTIONS = {\n read: 'plugin::content-manager.explorer.read',\n create: 'plugin::content-manager.explorer.create',\n update: 'plugin::content-manager.explorer.update',\n delete: 'plugin::content-manager.explorer.delete',\n publish: 'plugin::content-manager.explorer.publish',\n unpublish: 'plugin::content-manager.explorer.publish',\n discard: 'plugin::content-manager.explorer.update',\n} as const;\n\ntype Entity = Modules.EntityService.Result<UID.ContentType>;\ntype Query = {\n page?: string;\n pageSize?: string;\n sort?: string;\n};\n\nconst createPermissionChecker =\n (strapi: Core.Strapi) =>\n ({ userAbility, model }: { userAbility: any; model: string }) => {\n const permissionsManager = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n model,\n });\n\n const { actionProvider } = strapi.service('admin::permission');\n\n const toSubject = (entity?: Entity) => {\n return entity ? permissionsManager.toSubject(entity, model) : model;\n };\n\n // @ts-expect-error preserve the parameter order\n // eslint-disable-next-line @typescript-eslint/default-param-last\n const can = (action: string, entity?: Entity, field: string) => {\n const subject = toSubject(entity);\n const aliases = actionProvider.unstable_aliases(action, model) as string[];\n\n return (\n // Test the original action to see if it passes\n userAbility.can(action, subject, field) ||\n // Else try every known alias if at least one of them succeed, then the user \"can\"\n aliases.some((alias) => userAbility.can(alias, subject, field))\n );\n };\n\n // @ts-expect-error preserve the parameter order\n // eslint-disable-next-line @typescript-eslint/default-param-last\n const cannot = (action: string, entity?: Entity, field: string) => {\n const subject = toSubject(entity);\n const aliases = actionProvider.unstable_aliases(action, model) as string[];\n\n return (\n // Test both the original action\n userAbility.cannot(action, subject, field) &&\n // and every known alias, if all of them fail (cannot), then the user truly \"cannot\"\n aliases.every((alias) => userAbility.cannot(alias, subject, field))\n );\n };\n\n const sanitizeOutput = (data: Entity, { action = ACTIONS.read }: { action?: string } = {}) => {\n return permissionsManager.sanitizeOutput(data, { subject: toSubject(data), action });\n };\n\n const getRulesForAction = (action: string) => {\n if (typeof userAbility.rulesFor !== 'function') {\n return [];\n }\n\n const aliases = actionProvider.unstable_aliases(action, model) as string[];\n const actions = [action, ...aliases];\n\n return actions.flatMap((actionName) => userAbility.rulesFor(actionName, model));\n };\n\n // Tell callers if we need the full entity to check access\n const requiresEntity = (action: string) => {\n if (typeof userAbility.rulesFor !== 'function') {\n return true;\n }\n\n const rules = getRulesForAction(action);\n\n return rules.some((rule: any) => rule.conditions && !isEmpty(rule.conditions));\n };\n\n const sanitizeQuery = (query: Query, { action = ACTIONS.read }: { action?: string } = {}) => {\n return permissionsManager.sanitizeQuery(query, { subject: model, action });\n };\n\n const sanitizeInput = (action: string, data: any, entity?: Entity) => {\n return permissionsManager.sanitizeInput(data, {\n subject: entity ? toSubject(entity) : model,\n action,\n });\n };\n\n const validateQuery = (query: Query, { action = ACTIONS.read }: { action?: string } = {}) => {\n return permissionsManager.validateQuery(query, { subject: model, action });\n };\n\n const validateInput = (action: string, data: any, entity?: Entity) => {\n return permissionsManager.validateInput(data, {\n subject: entity ? toSubject(entity) : model,\n action,\n });\n };\n\n const sanitizeCreateInput = (data: any) => sanitizeInput(ACTIONS.create, data);\n const sanitizeUpdateInput = (entity: Entity) => (data: any) =>\n sanitizeInput(ACTIONS.update, data, entity);\n\n const buildPermissionQuery = (query: Query, action: { action?: string } = {}) => {\n return permissionsManager.addPermissionsQueryTo(query, action);\n };\n\n const sanitizedQuery = (query: Query, action: { action?: string } = {}) => {\n return async.pipe(\n (q: Query) => sanitizeQuery(q, action),\n (q: Query) => buildPermissionQuery(q, action)\n )(query);\n };\n\n // Sanitized queries shortcuts\n Object.keys(ACTIONS).forEach((action) => {\n // @ts-expect-error TODO\n sanitizedQuery[action] = (query: Query) => sanitizedQuery(query, ACTIONS[action]);\n });\n\n // Permission utils shortcuts\n Object.keys(ACTIONS).forEach((action) => {\n // @ts-expect-error TODO\n can[action] = (...args: any) => can(ACTIONS[action], ...args);\n // @ts-expect-error TODO\n cannot[action] = (...args: any) => cannot(ACTIONS[action], ...args);\n // @ts-expect-error TODO\n requiresEntity[action] = () => requiresEntity(ACTIONS[action]);\n });\n\n return {\n // Permission utils\n can, // check if you have the permission\n cannot, // check if you don't have the permission\n requiresEntity, // check if entity data is needed for permission evaluation\n // Sanitizers\n sanitizeOutput,\n sanitizeQuery,\n sanitizeCreateInput,\n sanitizeUpdateInput,\n // Validators\n validateQuery,\n validateInput,\n // Queries Builder\n sanitizedQuery,\n };\n };\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n create: createPermissionChecker(strapi),\n});\n"],"names":["ACTIONS","read","create","update","delete","publish","unpublish","discard","createPermissionChecker","strapi","userAbility","model","permissionsManager","service","createPermissionsManager","ability","actionProvider","toSubject","entity","can","action","field","subject","aliases","unstable_aliases","some","alias","cannot","every","sanitizeOutput","data","getRulesForAction","rulesFor","actions","flatMap","actionName","requiresEntity","rules","rule","conditions","isEmpty","sanitizeQuery","query","sanitizeInput","validateQuery","validateInput","sanitizeCreateInput","sanitizeUpdateInput","buildPermissionQuery","addPermissionsQueryTo","sanitizedQuery","async","pipe","q","Object","keys","forEach","args"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"permission.js","sources":["../../../server/src/services/permission.ts"],"sourcesContent":["import { prop } from 'lodash/fp';\nimport { contentTypes as contentTypesUtils } from '@strapi/utils';\n\nimport type { Core, Struct } from '@strapi/types';\nimport { getService } from '../utils';\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n canConfigureContentType({\n userAbility,\n contentType,\n }: {\n userAbility: any;\n contentType: Struct.ContentTypeSchema;\n }) {\n const action = contentTypesUtils.isSingleType(contentType)\n ? 'plugin::content-manager.single-types.configure-view'\n : 'plugin::content-manager.collection-types.configure-view';\n\n return userAbility.can(action);\n },\n\n async registerPermissions() {\n const displayedContentTypes = getService('content-types').findDisplayedContentTypes();\n const contentTypesUids = displayedContentTypes.map(prop('uid'));\n\n const actions = [\n {\n section: 'contentTypes',\n displayName: 'Create',\n uid: 'explorer.create',\n pluginName: 'content-manager',\n subjects: contentTypesUids,\n options: {\n applyToProperties: ['fields'],\n },\n },\n {\n section: 'contentTypes',\n displayName: 'Read',\n uid: 'explorer.read',\n pluginName: 'content-manager',\n subjects: contentTypesUids,\n options: {\n applyToProperties: ['fields'],\n },\n },\n {\n section: 'contentTypes',\n displayName: 'Update',\n uid: 'explorer.update',\n pluginName: 'content-manager',\n subjects: contentTypesUids,\n options: {\n applyToProperties: ['fields'],\n },\n },\n {\n section: 'contentTypes',\n displayName: 'Delete',\n uid: 'explorer.delete',\n pluginName: 'content-manager',\n subjects: contentTypesUids,\n },\n {\n section: 'contentTypes',\n displayName: 'Publish',\n uid: 'explorer.publish',\n pluginName: 'content-manager',\n subjects: contentTypesUids,\n },\n {\n section: 'plugins',\n displayName: 'Configure view',\n uid: 'single-types.configure-view',\n subCategory: 'single types',\n pluginName: 'content-manager',\n },\n {\n section: 'plugins',\n displayName: 'Configure view',\n uid: 'collection-types.configure-view',\n subCategory: 'collection types',\n pluginName: 'content-manager',\n },\n {\n section: 'plugins',\n displayName: 'Configure Layout',\n uid: 'components.configure-layout',\n subCategory: 'components',\n pluginName: 'content-manager',\n },\n ];\n\n await strapi.service('admin::permission').actionProvider.registerMany(actions);\n },\n});\n"],"names":["strapi","canConfigureContentType","userAbility","contentType","action","contentTypesUtils","isSingleType","can","registerPermissions","displayedContentTypes","getService","findDisplayedContentTypes","contentTypesUids","map","prop","actions","section","displayName","uid","pluginName","subjects","options","applyToProperties","subCategory","service","actionProvider","registerMany"],"mappings":";;;;;;AAMA,iBAAe,CAAA,CAAC,EAAEA,MAAM,EAA2B,IAAM;AACvDC,QAAAA,uBAAAA,CAAAA,CAAwB,EACtBC,WAAW,EACXC,WAAW,EAIZ,EAAA;AACC,YAAA,MAAMC,MAASC,GAAAA,wBAAAA,CAAkBC,YAAY,CAACH,eAC1C,qDACA,GAAA,yDAAA;YAEJ,OAAOD,WAAAA,CAAYK,GAAG,CAACH,MAAAA,CAAAA;AACzB,SAAA;QAEA,MAAMI,mBAAAA,CAAAA,GAAAA;YACJ,MAAMC,qBAAAA,GAAwBC,gBAAW,CAAA,eAAA,CAAA,CAAiBC,yBAAyB,EAAA;AACnF,YAAA,MAAMC,gBAAmBH,GAAAA,qBAAAA,CAAsBI,GAAG,CAACC,OAAK,CAAA,KAAA,CAAA,CAAA;AAExD,YAAA,MAAMC,OAAU,GAAA;AACd,gBAAA;oBACEC,OAAS,EAAA,cAAA;oBACTC,WAAa,EAAA,QAAA;oBACbC,GAAK,EAAA,iBAAA;oBACLC,UAAY,EAAA,iBAAA;oBACZC,QAAUR,EAAAA,gBAAAA;oBACVS,OAAS,EAAA;wBACPC,iBAAmB,EAAA;AAAC,4BAAA;AAAS;AAC/B;AACF,iBAAA;AACA,gBAAA;oBACEN,OAAS,EAAA,cAAA;oBACTC,WAAa,EAAA,MAAA;oBACbC,GAAK,EAAA,eAAA;oBACLC,UAAY,EAAA,iBAAA;oBACZC,QAAUR,EAAAA,gBAAAA;oBACVS,OAAS,EAAA;wBACPC,iBAAmB,EAAA;AAAC,4BAAA;AAAS;AAC/B;AACF,iBAAA;AACA,gBAAA;oBACEN,OAAS,EAAA,cAAA;oBACTC,WAAa,EAAA,QAAA;oBACbC,GAAK,EAAA,iBAAA;oBACLC,UAAY,EAAA,iBAAA;oBACZC,QAAUR,EAAAA,gBAAAA;oBACVS,OAAS,EAAA;wBACPC,iBAAmB,EAAA;AAAC,4BAAA;AAAS;AAC/B;AACF,iBAAA;AACA,gBAAA;oBACEN,OAAS,EAAA,cAAA;oBACTC,WAAa,EAAA,QAAA;oBACbC,GAAK,EAAA,iBAAA;oBACLC,UAAY,EAAA,iBAAA;oBACZC,QAAUR,EAAAA;AACZ,iBAAA;AACA,gBAAA;oBACEI,OAAS,EAAA,cAAA;oBACTC,WAAa,EAAA,SAAA;oBACbC,GAAK,EAAA,kBAAA;oBACLC,UAAY,EAAA,iBAAA;oBACZC,QAAUR,EAAAA;AACZ,iBAAA;AACA,gBAAA;oBACEI,OAAS,EAAA,SAAA;oBACTC,WAAa,EAAA,gBAAA;oBACbC,GAAK,EAAA,6BAAA;oBACLK,WAAa,EAAA,cAAA;oBACbJ,UAAY,EAAA;AACd,iBAAA;AACA,gBAAA;oBACEH,OAAS,EAAA,SAAA;oBACTC,WAAa,EAAA,gBAAA;oBACbC,GAAK,EAAA,iCAAA;oBACLK,WAAa,EAAA,kBAAA;oBACbJ,UAAY,EAAA;AACd,iBAAA;AACA,gBAAA;oBACEH,OAAS,EAAA,SAAA;oBACTC,WAAa,EAAA,kBAAA;oBACbC,GAAK,EAAA,6BAAA;oBACLK,WAAa,EAAA,YAAA;oBACbJ,UAAY,EAAA;AACd;AACD,aAAA;AAED,YAAA,MAAMnB,OAAOwB,OAAO,CAAC,qBAAqBC,cAAc,CAACC,YAAY,CAACX,OAAAA,CAAAA;AACxE;AACF,KAAA,CAAC;;;;"}
1
+ {"version":3,"file":"permission.js","sources":["../../../server/src/services/permission.ts"],"sourcesContent":["import { prop } from 'lodash/fp';\nimport { contentTypes as contentTypesUtils } from '@strapi/utils';\n\nimport type { Core, Struct } from '@strapi/types';\nimport { getService } from '../utils';\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n canConfigureContentType({\n userAbility,\n contentType,\n }: {\n userAbility: any;\n contentType: Struct.ContentTypeSchema;\n }) {\n const action = contentTypesUtils.isSingleType(contentType)\n ? 'plugin::content-manager.single-types.configure-view'\n : 'plugin::content-manager.collection-types.configure-view';\n\n return userAbility.can(action);\n },\n\n async registerPermissions() {\n const displayedContentTypes = getService('content-types').findDisplayedContentTypes();\n const contentTypesUids = displayedContentTypes.map(prop('uid'));\n\n const actions = [\n {\n section: 'contentTypes',\n displayName: 'Create',\n uid: 'explorer.create',\n pluginName: 'content-manager',\n subjects: contentTypesUids,\n options: {\n applyToProperties: ['fields'],\n },\n },\n {\n section: 'contentTypes',\n displayName: 'Read',\n uid: 'explorer.read',\n pluginName: 'content-manager',\n subjects: contentTypesUids,\n options: {\n applyToProperties: ['fields'],\n },\n },\n {\n section: 'contentTypes',\n displayName: 'Update',\n uid: 'explorer.update',\n pluginName: 'content-manager',\n subjects: contentTypesUids,\n options: {\n applyToProperties: ['fields'],\n },\n },\n {\n section: 'contentTypes',\n displayName: 'Delete',\n uid: 'explorer.delete',\n pluginName: 'content-manager',\n subjects: contentTypesUids,\n },\n {\n section: 'contentTypes',\n displayName: 'Publish',\n uid: 'explorer.publish',\n pluginName: 'content-manager',\n subjects: contentTypesUids,\n },\n {\n section: 'plugins',\n displayName: 'Configure view',\n uid: 'single-types.configure-view',\n subCategory: 'single types',\n pluginName: 'content-manager',\n },\n {\n section: 'plugins',\n displayName: 'Configure view',\n uid: 'collection-types.configure-view',\n subCategory: 'collection types',\n pluginName: 'content-manager',\n },\n {\n section: 'plugins',\n displayName: 'Configure Layout',\n uid: 'components.configure-layout',\n subCategory: 'components',\n pluginName: 'content-manager',\n },\n ];\n\n await strapi.service('admin::permission').actionProvider.registerMany(actions);\n },\n});\n"],"names":["strapi","canConfigureContentType","userAbility","contentType","action","contentTypesUtils","isSingleType","can","registerPermissions","displayedContentTypes","getService","findDisplayedContentTypes","contentTypesUids","map","prop","actions","section","displayName","uid","pluginName","subjects","options","applyToProperties","subCategory","service","actionProvider","registerMany"],"mappings":";;;;;;AAMA,iBAAe,CAAA,CAAC,EAAEA,MAAM,EAA2B,IAAM;AACvDC,QAAAA,uBAAAA,CAAAA,CAAwB,EACtBC,WAAW,EACXC,WAAW,EAIZ,EAAA;AACC,YAAA,MAAMC,MAAAA,GAASC,wBAAAA,CAAkBC,YAAY,CAACH,eAC1C,qDAAA,GACA,yDAAA;YAEJ,OAAOD,WAAAA,CAAYK,GAAG,CAACH,MAAAA,CAAAA;AACzB,QAAA,CAAA;QAEA,MAAMI,mBAAAA,CAAAA,GAAAA;YACJ,MAAMC,qBAAAA,GAAwBC,gBAAAA,CAAW,eAAA,CAAA,CAAiBC,yBAAyB,EAAA;AACnF,YAAA,MAAMC,gBAAAA,GAAmBH,qBAAAA,CAAsBI,GAAG,CAACC,OAAAA,CAAK,KAAA,CAAA,CAAA;AAExD,YAAA,MAAMC,OAAAA,GAAU;AACd,gBAAA;oBACEC,OAAAA,EAAS,cAAA;oBACTC,WAAAA,EAAa,QAAA;oBACbC,GAAAA,EAAK,iBAAA;oBACLC,UAAAA,EAAY,iBAAA;oBACZC,QAAAA,EAAUR,gBAAAA;oBACVS,OAAAA,EAAS;wBACPC,iBAAAA,EAAmB;AAAC,4BAAA;AAAS;AAC/B;AACF,iBAAA;AACA,gBAAA;oBACEN,OAAAA,EAAS,cAAA;oBACTC,WAAAA,EAAa,MAAA;oBACbC,GAAAA,EAAK,eAAA;oBACLC,UAAAA,EAAY,iBAAA;oBACZC,QAAAA,EAAUR,gBAAAA;oBACVS,OAAAA,EAAS;wBACPC,iBAAAA,EAAmB;AAAC,4BAAA;AAAS;AAC/B;AACF,iBAAA;AACA,gBAAA;oBACEN,OAAAA,EAAS,cAAA;oBACTC,WAAAA,EAAa,QAAA;oBACbC,GAAAA,EAAK,iBAAA;oBACLC,UAAAA,EAAY,iBAAA;oBACZC,QAAAA,EAAUR,gBAAAA;oBACVS,OAAAA,EAAS;wBACPC,iBAAAA,EAAmB;AAAC,4BAAA;AAAS;AAC/B;AACF,iBAAA;AACA,gBAAA;oBACEN,OAAAA,EAAS,cAAA;oBACTC,WAAAA,EAAa,QAAA;oBACbC,GAAAA,EAAK,iBAAA;oBACLC,UAAAA,EAAY,iBAAA;oBACZC,QAAAA,EAAUR;AACZ,iBAAA;AACA,gBAAA;oBACEI,OAAAA,EAAS,cAAA;oBACTC,WAAAA,EAAa,SAAA;oBACbC,GAAAA,EAAK,kBAAA;oBACLC,UAAAA,EAAY,iBAAA;oBACZC,QAAAA,EAAUR;AACZ,iBAAA;AACA,gBAAA;oBACEI,OAAAA,EAAS,SAAA;oBACTC,WAAAA,EAAa,gBAAA;oBACbC,GAAAA,EAAK,6BAAA;oBACLK,WAAAA,EAAa,cAAA;oBACbJ,UAAAA,EAAY;AACd,iBAAA;AACA,gBAAA;oBACEH,OAAAA,EAAS,SAAA;oBACTC,WAAAA,EAAa,gBAAA;oBACbC,GAAAA,EAAK,iCAAA;oBACLK,WAAAA,EAAa,kBAAA;oBACbJ,UAAAA,EAAY;AACd,iBAAA;AACA,gBAAA;oBACEH,OAAAA,EAAS,SAAA;oBACTC,WAAAA,EAAa,kBAAA;oBACbC,GAAAA,EAAK,6BAAA;oBACLK,WAAAA,EAAa,YAAA;oBACbJ,UAAAA,EAAY;AACd;AACD,aAAA;AAED,YAAA,MAAMnB,OAAOwB,OAAO,CAAC,qBAAqBC,cAAc,CAACC,YAAY,CAACX,OAAAA,CAAAA;AACxE,QAAA;AACF,KAAA,CAAC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"permission.mjs","sources":["../../../server/src/services/permission.ts"],"sourcesContent":["import { prop } from 'lodash/fp';\nimport { contentTypes as contentTypesUtils } from '@strapi/utils';\n\nimport type { Core, Struct } from '@strapi/types';\nimport { getService } from '../utils';\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n canConfigureContentType({\n userAbility,\n contentType,\n }: {\n userAbility: any;\n contentType: Struct.ContentTypeSchema;\n }) {\n const action = contentTypesUtils.isSingleType(contentType)\n ? 'plugin::content-manager.single-types.configure-view'\n : 'plugin::content-manager.collection-types.configure-view';\n\n return userAbility.can(action);\n },\n\n async registerPermissions() {\n const displayedContentTypes = getService('content-types').findDisplayedContentTypes();\n const contentTypesUids = displayedContentTypes.map(prop('uid'));\n\n const actions = [\n {\n section: 'contentTypes',\n displayName: 'Create',\n uid: 'explorer.create',\n pluginName: 'content-manager',\n subjects: contentTypesUids,\n options: {\n applyToProperties: ['fields'],\n },\n },\n {\n section: 'contentTypes',\n displayName: 'Read',\n uid: 'explorer.read',\n pluginName: 'content-manager',\n subjects: contentTypesUids,\n options: {\n applyToProperties: ['fields'],\n },\n },\n {\n section: 'contentTypes',\n displayName: 'Update',\n uid: 'explorer.update',\n pluginName: 'content-manager',\n subjects: contentTypesUids,\n options: {\n applyToProperties: ['fields'],\n },\n },\n {\n section: 'contentTypes',\n displayName: 'Delete',\n uid: 'explorer.delete',\n pluginName: 'content-manager',\n subjects: contentTypesUids,\n },\n {\n section: 'contentTypes',\n displayName: 'Publish',\n uid: 'explorer.publish',\n pluginName: 'content-manager',\n subjects: contentTypesUids,\n },\n {\n section: 'plugins',\n displayName: 'Configure view',\n uid: 'single-types.configure-view',\n subCategory: 'single types',\n pluginName: 'content-manager',\n },\n {\n section: 'plugins',\n displayName: 'Configure view',\n uid: 'collection-types.configure-view',\n subCategory: 'collection types',\n pluginName: 'content-manager',\n },\n {\n section: 'plugins',\n displayName: 'Configure Layout',\n uid: 'components.configure-layout',\n subCategory: 'components',\n pluginName: 'content-manager',\n },\n ];\n\n await strapi.service('admin::permission').actionProvider.registerMany(actions);\n },\n});\n"],"names":["strapi","canConfigureContentType","userAbility","contentType","action","contentTypesUtils","isSingleType","can","registerPermissions","displayedContentTypes","getService","findDisplayedContentTypes","contentTypesUids","map","prop","actions","section","displayName","uid","pluginName","subjects","options","applyToProperties","subCategory","service","actionProvider","registerMany"],"mappings":";;;;AAMA,iBAAe,CAAA,CAAC,EAAEA,MAAM,EAA2B,IAAM;AACvDC,QAAAA,uBAAAA,CAAAA,CAAwB,EACtBC,WAAW,EACXC,WAAW,EAIZ,EAAA;AACC,YAAA,MAAMC,MAASC,GAAAA,YAAAA,CAAkBC,YAAY,CAACH,eAC1C,qDACA,GAAA,yDAAA;YAEJ,OAAOD,WAAAA,CAAYK,GAAG,CAACH,MAAAA,CAAAA;AACzB,SAAA;QAEA,MAAMI,mBAAAA,CAAAA,GAAAA;YACJ,MAAMC,qBAAAA,GAAwBC,UAAW,CAAA,eAAA,CAAA,CAAiBC,yBAAyB,EAAA;AACnF,YAAA,MAAMC,gBAAmBH,GAAAA,qBAAAA,CAAsBI,GAAG,CAACC,IAAK,CAAA,KAAA,CAAA,CAAA;AAExD,YAAA,MAAMC,OAAU,GAAA;AACd,gBAAA;oBACEC,OAAS,EAAA,cAAA;oBACTC,WAAa,EAAA,QAAA;oBACbC,GAAK,EAAA,iBAAA;oBACLC,UAAY,EAAA,iBAAA;oBACZC,QAAUR,EAAAA,gBAAAA;oBACVS,OAAS,EAAA;wBACPC,iBAAmB,EAAA;AAAC,4BAAA;AAAS;AAC/B;AACF,iBAAA;AACA,gBAAA;oBACEN,OAAS,EAAA,cAAA;oBACTC,WAAa,EAAA,MAAA;oBACbC,GAAK,EAAA,eAAA;oBACLC,UAAY,EAAA,iBAAA;oBACZC,QAAUR,EAAAA,gBAAAA;oBACVS,OAAS,EAAA;wBACPC,iBAAmB,EAAA;AAAC,4BAAA;AAAS;AAC/B;AACF,iBAAA;AACA,gBAAA;oBACEN,OAAS,EAAA,cAAA;oBACTC,WAAa,EAAA,QAAA;oBACbC,GAAK,EAAA,iBAAA;oBACLC,UAAY,EAAA,iBAAA;oBACZC,QAAUR,EAAAA,gBAAAA;oBACVS,OAAS,EAAA;wBACPC,iBAAmB,EAAA;AAAC,4BAAA;AAAS;AAC/B;AACF,iBAAA;AACA,gBAAA;oBACEN,OAAS,EAAA,cAAA;oBACTC,WAAa,EAAA,QAAA;oBACbC,GAAK,EAAA,iBAAA;oBACLC,UAAY,EAAA,iBAAA;oBACZC,QAAUR,EAAAA;AACZ,iBAAA;AACA,gBAAA;oBACEI,OAAS,EAAA,cAAA;oBACTC,WAAa,EAAA,SAAA;oBACbC,GAAK,EAAA,kBAAA;oBACLC,UAAY,EAAA,iBAAA;oBACZC,QAAUR,EAAAA;AACZ,iBAAA;AACA,gBAAA;oBACEI,OAAS,EAAA,SAAA;oBACTC,WAAa,EAAA,gBAAA;oBACbC,GAAK,EAAA,6BAAA;oBACLK,WAAa,EAAA,cAAA;oBACbJ,UAAY,EAAA;AACd,iBAAA;AACA,gBAAA;oBACEH,OAAS,EAAA,SAAA;oBACTC,WAAa,EAAA,gBAAA;oBACbC,GAAK,EAAA,iCAAA;oBACLK,WAAa,EAAA,kBAAA;oBACbJ,UAAY,EAAA;AACd,iBAAA;AACA,gBAAA;oBACEH,OAAS,EAAA,SAAA;oBACTC,WAAa,EAAA,kBAAA;oBACbC,GAAK,EAAA,6BAAA;oBACLK,WAAa,EAAA,YAAA;oBACbJ,UAAY,EAAA;AACd;AACD,aAAA;AAED,YAAA,MAAMnB,OAAOwB,OAAO,CAAC,qBAAqBC,cAAc,CAACC,YAAY,CAACX,OAAAA,CAAAA;AACxE;AACF,KAAA,CAAC;;;;"}
1
+ {"version":3,"file":"permission.mjs","sources":["../../../server/src/services/permission.ts"],"sourcesContent":["import { prop } from 'lodash/fp';\nimport { contentTypes as contentTypesUtils } from '@strapi/utils';\n\nimport type { Core, Struct } from '@strapi/types';\nimport { getService } from '../utils';\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n canConfigureContentType({\n userAbility,\n contentType,\n }: {\n userAbility: any;\n contentType: Struct.ContentTypeSchema;\n }) {\n const action = contentTypesUtils.isSingleType(contentType)\n ? 'plugin::content-manager.single-types.configure-view'\n : 'plugin::content-manager.collection-types.configure-view';\n\n return userAbility.can(action);\n },\n\n async registerPermissions() {\n const displayedContentTypes = getService('content-types').findDisplayedContentTypes();\n const contentTypesUids = displayedContentTypes.map(prop('uid'));\n\n const actions = [\n {\n section: 'contentTypes',\n displayName: 'Create',\n uid: 'explorer.create',\n pluginName: 'content-manager',\n subjects: contentTypesUids,\n options: {\n applyToProperties: ['fields'],\n },\n },\n {\n section: 'contentTypes',\n displayName: 'Read',\n uid: 'explorer.read',\n pluginName: 'content-manager',\n subjects: contentTypesUids,\n options: {\n applyToProperties: ['fields'],\n },\n },\n {\n section: 'contentTypes',\n displayName: 'Update',\n uid: 'explorer.update',\n pluginName: 'content-manager',\n subjects: contentTypesUids,\n options: {\n applyToProperties: ['fields'],\n },\n },\n {\n section: 'contentTypes',\n displayName: 'Delete',\n uid: 'explorer.delete',\n pluginName: 'content-manager',\n subjects: contentTypesUids,\n },\n {\n section: 'contentTypes',\n displayName: 'Publish',\n uid: 'explorer.publish',\n pluginName: 'content-manager',\n subjects: contentTypesUids,\n },\n {\n section: 'plugins',\n displayName: 'Configure view',\n uid: 'single-types.configure-view',\n subCategory: 'single types',\n pluginName: 'content-manager',\n },\n {\n section: 'plugins',\n displayName: 'Configure view',\n uid: 'collection-types.configure-view',\n subCategory: 'collection types',\n pluginName: 'content-manager',\n },\n {\n section: 'plugins',\n displayName: 'Configure Layout',\n uid: 'components.configure-layout',\n subCategory: 'components',\n pluginName: 'content-manager',\n },\n ];\n\n await strapi.service('admin::permission').actionProvider.registerMany(actions);\n },\n});\n"],"names":["strapi","canConfigureContentType","userAbility","contentType","action","contentTypesUtils","isSingleType","can","registerPermissions","displayedContentTypes","getService","findDisplayedContentTypes","contentTypesUids","map","prop","actions","section","displayName","uid","pluginName","subjects","options","applyToProperties","subCategory","service","actionProvider","registerMany"],"mappings":";;;;AAMA,iBAAe,CAAA,CAAC,EAAEA,MAAM,EAA2B,IAAM;AACvDC,QAAAA,uBAAAA,CAAAA,CAAwB,EACtBC,WAAW,EACXC,WAAW,EAIZ,EAAA;AACC,YAAA,MAAMC,MAAAA,GAASC,YAAAA,CAAkBC,YAAY,CAACH,eAC1C,qDAAA,GACA,yDAAA;YAEJ,OAAOD,WAAAA,CAAYK,GAAG,CAACH,MAAAA,CAAAA;AACzB,QAAA,CAAA;QAEA,MAAMI,mBAAAA,CAAAA,GAAAA;YACJ,MAAMC,qBAAAA,GAAwBC,UAAAA,CAAW,eAAA,CAAA,CAAiBC,yBAAyB,EAAA;AACnF,YAAA,MAAMC,gBAAAA,GAAmBH,qBAAAA,CAAsBI,GAAG,CAACC,IAAAA,CAAK,KAAA,CAAA,CAAA;AAExD,YAAA,MAAMC,OAAAA,GAAU;AACd,gBAAA;oBACEC,OAAAA,EAAS,cAAA;oBACTC,WAAAA,EAAa,QAAA;oBACbC,GAAAA,EAAK,iBAAA;oBACLC,UAAAA,EAAY,iBAAA;oBACZC,QAAAA,EAAUR,gBAAAA;oBACVS,OAAAA,EAAS;wBACPC,iBAAAA,EAAmB;AAAC,4BAAA;AAAS;AAC/B;AACF,iBAAA;AACA,gBAAA;oBACEN,OAAAA,EAAS,cAAA;oBACTC,WAAAA,EAAa,MAAA;oBACbC,GAAAA,EAAK,eAAA;oBACLC,UAAAA,EAAY,iBAAA;oBACZC,QAAAA,EAAUR,gBAAAA;oBACVS,OAAAA,EAAS;wBACPC,iBAAAA,EAAmB;AAAC,4BAAA;AAAS;AAC/B;AACF,iBAAA;AACA,gBAAA;oBACEN,OAAAA,EAAS,cAAA;oBACTC,WAAAA,EAAa,QAAA;oBACbC,GAAAA,EAAK,iBAAA;oBACLC,UAAAA,EAAY,iBAAA;oBACZC,QAAAA,EAAUR,gBAAAA;oBACVS,OAAAA,EAAS;wBACPC,iBAAAA,EAAmB;AAAC,4BAAA;AAAS;AAC/B;AACF,iBAAA;AACA,gBAAA;oBACEN,OAAAA,EAAS,cAAA;oBACTC,WAAAA,EAAa,QAAA;oBACbC,GAAAA,EAAK,iBAAA;oBACLC,UAAAA,EAAY,iBAAA;oBACZC,QAAAA,EAAUR;AACZ,iBAAA;AACA,gBAAA;oBACEI,OAAAA,EAAS,cAAA;oBACTC,WAAAA,EAAa,SAAA;oBACbC,GAAAA,EAAK,kBAAA;oBACLC,UAAAA,EAAY,iBAAA;oBACZC,QAAAA,EAAUR;AACZ,iBAAA;AACA,gBAAA;oBACEI,OAAAA,EAAS,SAAA;oBACTC,WAAAA,EAAa,gBAAA;oBACbC,GAAAA,EAAK,6BAAA;oBACLK,WAAAA,EAAa,cAAA;oBACbJ,UAAAA,EAAY;AACd,iBAAA;AACA,gBAAA;oBACEH,OAAAA,EAAS,SAAA;oBACTC,WAAAA,EAAa,gBAAA;oBACbC,GAAAA,EAAK,iCAAA;oBACLK,WAAAA,EAAa,kBAAA;oBACbJ,UAAAA,EAAY;AACd,iBAAA;AACA,gBAAA;oBACEH,OAAAA,EAAS,SAAA;oBACTC,WAAAA,EAAa,kBAAA;oBACbC,GAAAA,EAAK,6BAAA;oBACLK,WAAAA,EAAa,YAAA;oBACbJ,UAAAA,EAAY;AACd;AACD,aAAA;AAED,YAAA,MAAMnB,OAAOwB,OAAO,CAAC,qBAAqBC,cAAc,CAACC,YAAY,CAACX,OAAAA,CAAAA;AACxE,QAAA;AACF,KAAA,CAAC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"populate-builder.js","sources":["../../../server/src/services/populate-builder.ts"],"sourcesContent":["import { isNil } from 'lodash/fp';\nimport type { UID } from '@strapi/types';\nimport { type Populate, getDeepPopulate, getQueryPopulate } from './utils/populate';\n\n/**\n * Builder to create a Strapi populate object.\n *\n * @param uid - Content type UID\n *\n * @example\n * const populate = await populateBuilder('api::article.article').countRelations().build();\n * // populate = { article: { populate: { count: true } } }\n *\n */\nconst populateBuilder = (uid: UID.Schema) => {\n let getInitialPopulate = async (): Promise<undefined | Populate> => {\n return undefined;\n };\n const deepPopulateOptions = {\n countMany: false,\n countOne: false,\n maxLevel: -1,\n };\n\n const builder = {\n /**\n * Populates all attribute fields present in a query.\n * @param query - Strapi query object\n */\n populateFromQuery(query: object) {\n getInitialPopulate = async () => getQueryPopulate(uid, query);\n return builder;\n },\n\n /**\n * Populate relations as count.\n * @param [options]\n * @param [options.toMany] - Populate XtoMany relations as count if true.\n * @param [options.toOne] - Populate XtoOne relations as count if true.\n */\n countRelations({ toMany, toOne } = { toMany: true, toOne: true }) {\n if (!isNil(toMany)) {\n deepPopulateOptions.countMany = toMany;\n }\n if (!isNil(toOne)) {\n deepPopulateOptions.countOne = toOne;\n }\n return builder;\n },\n\n /**\n * Populate relations deeply, up to a certain level.\n * @param [level=Infinity] - Max level of nested populate.\n */\n populateDeep(level = Infinity) {\n deepPopulateOptions.maxLevel = level;\n return builder;\n },\n\n /**\n * Construct the populate object based on the builder options.\n * @returns Populate object\n */\n async build() {\n const initialPopulate = await getInitialPopulate();\n\n if (deepPopulateOptions.maxLevel === -1) {\n return initialPopulate;\n }\n\n return getDeepPopulate(uid, { ...deepPopulateOptions, initialPopulate });\n },\n };\n\n return builder;\n};\n\nexport default () => populateBuilder;\n"],"names":["populateBuilder","uid","getInitialPopulate","undefined","deepPopulateOptions","countMany","countOne","maxLevel","builder","populateFromQuery","query","getQueryPopulate","countRelations","toMany","toOne","isNil","populateDeep","level","Infinity","build","initialPopulate","getDeepPopulate"],"mappings":";;;;;AAIA;;;;;;;;;IAUA,MAAMA,kBAAkB,CAACC,GAAAA,GAAAA;AACvB,IAAA,IAAIC,kBAAqB,GAAA,UAAA;QACvB,OAAOC,SAAAA;AACT,KAAA;AACA,IAAA,MAAMC,mBAAsB,GAAA;QAC1BC,SAAW,EAAA,KAAA;QACXC,QAAU,EAAA,KAAA;AACVC,QAAAA,QAAAA,EAAU,CAAC;AACb,KAAA;AAEA,IAAA,MAAMC,OAAU,GAAA;AACd;;;AAGC,QACDC,mBAAkBC,KAAa,EAAA;YAC7BR,kBAAqB,GAAA,UAAYS,0BAAiBV,GAAKS,EAAAA,KAAAA,CAAAA;YACvD,OAAOF,OAAAA;AACT,SAAA;AAEA;;;;;AAKC,QACDI,gBAAe,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAG;YAAED,MAAQ,EAAA,IAAA;YAAMC,KAAO,EAAA;SAAM,EAAA;YAC9D,IAAI,CAACC,SAAMF,MAAS,CAAA,EAAA;AAClBT,gBAAAA,mBAAAA,CAAoBC,SAAS,GAAGQ,MAAAA;AAClC;YACA,IAAI,CAACE,SAAMD,KAAQ,CAAA,EAAA;AACjBV,gBAAAA,mBAAAA,CAAoBE,QAAQ,GAAGQ,KAAAA;AACjC;YACA,OAAON,OAAAA;AACT,SAAA;AAEA;;;QAIAQ,YAAAA,CAAAA,CAAaC,QAAQC,QAAQ,EAAA;AAC3Bd,YAAAA,mBAAAA,CAAoBG,QAAQ,GAAGU,KAAAA;YAC/B,OAAOT,OAAAA;AACT,SAAA;AAEA;;;AAGC,QACD,MAAMW,KAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMC,kBAAkB,MAAMlB,kBAAAA,EAAAA;AAE9B,YAAA,IAAIE,mBAAoBG,CAAAA,QAAQ,KAAK,CAAC,CAAG,EAAA;gBACvC,OAAOa,eAAAA;AACT;AAEA,YAAA,OAAOC,yBAAgBpB,GAAK,EAAA;AAAE,gBAAA,GAAGG,mBAAmB;AAAEgB,gBAAAA;AAAgB,aAAA,CAAA;AACxE;AACF,KAAA;IAEA,OAAOZ,OAAAA;AACT,CAAA;AAEA,wBAAe,CAAA,IAAMR,eAAc;;;;"}
1
+ {"version":3,"file":"populate-builder.js","sources":["../../../server/src/services/populate-builder.ts"],"sourcesContent":["import { isNil } from 'lodash/fp';\nimport type { UID } from '@strapi/types';\nimport { type Populate, getDeepPopulate, getQueryPopulate } from './utils/populate';\n\n/**\n * Builder to create a Strapi populate object.\n *\n * @param uid - Content type UID\n *\n * @example\n * const populate = await populateBuilder('api::article.article').countRelations().build();\n * // populate = { article: { populate: { count: true } } }\n *\n */\nconst populateBuilder = (uid: UID.Schema) => {\n let getInitialPopulate = async (): Promise<undefined | Populate> => {\n return undefined;\n };\n const deepPopulateOptions = {\n countMany: false,\n countOne: false,\n maxLevel: -1,\n };\n\n const builder = {\n /**\n * Populates all attribute fields present in a query.\n * @param query - Strapi query object\n */\n populateFromQuery(query: object) {\n getInitialPopulate = async () => getQueryPopulate(uid, query);\n return builder;\n },\n\n /**\n * Populate relations as count.\n * @param [options]\n * @param [options.toMany] - Populate XtoMany relations as count if true.\n * @param [options.toOne] - Populate XtoOne relations as count if true.\n */\n countRelations({ toMany, toOne } = { toMany: true, toOne: true }) {\n if (!isNil(toMany)) {\n deepPopulateOptions.countMany = toMany;\n }\n if (!isNil(toOne)) {\n deepPopulateOptions.countOne = toOne;\n }\n return builder;\n },\n\n /**\n * Populate relations deeply, up to a certain level.\n * @param [level=Infinity] - Max level of nested populate.\n */\n populateDeep(level = Infinity) {\n deepPopulateOptions.maxLevel = level;\n return builder;\n },\n\n /**\n * Construct the populate object based on the builder options.\n * @returns Populate object\n */\n async build() {\n const initialPopulate = await getInitialPopulate();\n\n if (deepPopulateOptions.maxLevel === -1) {\n return initialPopulate;\n }\n\n return getDeepPopulate(uid, { ...deepPopulateOptions, initialPopulate });\n },\n };\n\n return builder;\n};\n\nexport default () => populateBuilder;\n"],"names":["populateBuilder","uid","getInitialPopulate","undefined","deepPopulateOptions","countMany","countOne","maxLevel","builder","populateFromQuery","query","getQueryPopulate","countRelations","toMany","toOne","isNil","populateDeep","level","Infinity","build","initialPopulate","getDeepPopulate"],"mappings":";;;;;AAIA;;;;;;;;;IAUA,MAAMA,kBAAkB,CAACC,GAAAA,GAAAA;AACvB,IAAA,IAAIC,kBAAAA,GAAqB,UAAA;QACvB,OAAOC,SAAAA;AACT,IAAA,CAAA;AACA,IAAA,MAAMC,mBAAAA,GAAsB;QAC1BC,SAAAA,EAAW,KAAA;QACXC,QAAAA,EAAU,KAAA;AACVC,QAAAA,QAAAA,EAAU;AACZ,KAAA;AAEA,IAAA,MAAMC,OAAAA,GAAU;AACd;;;AAGC,QACDC,mBAAkBC,KAAa,EAAA;YAC7BR,kBAAAA,GAAqB,UAAYS,0BAAiBV,GAAAA,EAAKS,KAAAA,CAAAA;YACvD,OAAOF,OAAAA;AACT,QAAA,CAAA;AAEA;;;;;AAKC,QACDI,gBAAe,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAG;YAAED,MAAAA,EAAQ,IAAA;YAAMC,KAAAA,EAAO;SAAM,EAAA;YAC9D,IAAI,CAACC,SAAMF,MAAAA,CAAAA,EAAS;AAClBT,gBAAAA,mBAAAA,CAAoBC,SAAS,GAAGQ,MAAAA;AAClC,YAAA;YACA,IAAI,CAACE,SAAMD,KAAAA,CAAAA,EAAQ;AACjBV,gBAAAA,mBAAAA,CAAoBE,QAAQ,GAAGQ,KAAAA;AACjC,YAAA;YACA,OAAON,OAAAA;AACT,QAAA,CAAA;AAEA;;;QAIAQ,YAAAA,CAAAA,CAAaC,QAAQC,QAAQ,EAAA;AAC3Bd,YAAAA,mBAAAA,CAAoBG,QAAQ,GAAGU,KAAAA;YAC/B,OAAOT,OAAAA;AACT,QAAA,CAAA;AAEA;;;AAGC,QACD,MAAMW,KAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMC,kBAAkB,MAAMlB,kBAAAA,EAAAA;AAE9B,YAAA,IAAIE,mBAAAA,CAAoBG,QAAQ,KAAK,EAAC,EAAG;gBACvC,OAAOa,eAAAA;AACT,YAAA;AAEA,YAAA,OAAOC,yBAAgBpB,GAAAA,EAAK;AAAE,gBAAA,GAAGG,mBAAmB;AAAEgB,gBAAAA;AAAgB,aAAA,CAAA;AACxE,QAAA;AACF,KAAA;IAEA,OAAOZ,OAAAA;AACT,CAAA;AAEA,wBAAe,CAAA,IAAMR,eAAc;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { isNil } from 'lodash/fp';
2
- import { getDeepPopulate, getQueryPopulate } from './utils/populate.mjs';
2
+ import { getQueryPopulate, getDeepPopulate } from './utils/populate.mjs';
3
3
 
4
4
  /**
5
5
  * Builder to create a Strapi populate object.
@@ -10,7 +10,7 @@ import { getDeepPopulate, getQueryPopulate } from './utils/populate.mjs';
10
10
  * const populate = await populateBuilder('api::article.article').countRelations().build();
11
11
  * // populate = { article: { populate: { count: true } } }
12
12
  *
13
- */ const populateBuilder = (uid)=>{
13
+ */ const populateBuilder$1 = (uid)=>{
14
14
  let getInitialPopulate = async ()=>{
15
15
  return undefined;
16
16
  };
@@ -67,7 +67,7 @@ import { getDeepPopulate, getQueryPopulate } from './utils/populate.mjs';
67
67
  };
68
68
  return builder;
69
69
  };
70
- var populateBuilder$1 = (()=>populateBuilder);
70
+ var populateBuilder = (()=>populateBuilder$1);
71
71
 
72
- export { populateBuilder$1 as default };
72
+ export { populateBuilder as default };
73
73
  //# sourceMappingURL=populate-builder.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"populate-builder.mjs","sources":["../../../server/src/services/populate-builder.ts"],"sourcesContent":["import { isNil } from 'lodash/fp';\nimport type { UID } from '@strapi/types';\nimport { type Populate, getDeepPopulate, getQueryPopulate } from './utils/populate';\n\n/**\n * Builder to create a Strapi populate object.\n *\n * @param uid - Content type UID\n *\n * @example\n * const populate = await populateBuilder('api::article.article').countRelations().build();\n * // populate = { article: { populate: { count: true } } }\n *\n */\nconst populateBuilder = (uid: UID.Schema) => {\n let getInitialPopulate = async (): Promise<undefined | Populate> => {\n return undefined;\n };\n const deepPopulateOptions = {\n countMany: false,\n countOne: false,\n maxLevel: -1,\n };\n\n const builder = {\n /**\n * Populates all attribute fields present in a query.\n * @param query - Strapi query object\n */\n populateFromQuery(query: object) {\n getInitialPopulate = async () => getQueryPopulate(uid, query);\n return builder;\n },\n\n /**\n * Populate relations as count.\n * @param [options]\n * @param [options.toMany] - Populate XtoMany relations as count if true.\n * @param [options.toOne] - Populate XtoOne relations as count if true.\n */\n countRelations({ toMany, toOne } = { toMany: true, toOne: true }) {\n if (!isNil(toMany)) {\n deepPopulateOptions.countMany = toMany;\n }\n if (!isNil(toOne)) {\n deepPopulateOptions.countOne = toOne;\n }\n return builder;\n },\n\n /**\n * Populate relations deeply, up to a certain level.\n * @param [level=Infinity] - Max level of nested populate.\n */\n populateDeep(level = Infinity) {\n deepPopulateOptions.maxLevel = level;\n return builder;\n },\n\n /**\n * Construct the populate object based on the builder options.\n * @returns Populate object\n */\n async build() {\n const initialPopulate = await getInitialPopulate();\n\n if (deepPopulateOptions.maxLevel === -1) {\n return initialPopulate;\n }\n\n return getDeepPopulate(uid, { ...deepPopulateOptions, initialPopulate });\n },\n };\n\n return builder;\n};\n\nexport default () => populateBuilder;\n"],"names":["populateBuilder","uid","getInitialPopulate","undefined","deepPopulateOptions","countMany","countOne","maxLevel","builder","populateFromQuery","query","getQueryPopulate","countRelations","toMany","toOne","isNil","populateDeep","level","Infinity","build","initialPopulate","getDeepPopulate"],"mappings":";;;AAIA;;;;;;;;;IAUA,MAAMA,kBAAkB,CAACC,GAAAA,GAAAA;AACvB,IAAA,IAAIC,kBAAqB,GAAA,UAAA;QACvB,OAAOC,SAAAA;AACT,KAAA;AACA,IAAA,MAAMC,mBAAsB,GAAA;QAC1BC,SAAW,EAAA,KAAA;QACXC,QAAU,EAAA,KAAA;AACVC,QAAAA,QAAAA,EAAU,CAAC;AACb,KAAA;AAEA,IAAA,MAAMC,OAAU,GAAA;AACd;;;AAGC,QACDC,mBAAkBC,KAAa,EAAA;YAC7BR,kBAAqB,GAAA,UAAYS,iBAAiBV,GAAKS,EAAAA,KAAAA,CAAAA;YACvD,OAAOF,OAAAA;AACT,SAAA;AAEA;;;;;AAKC,QACDI,gBAAe,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAG;YAAED,MAAQ,EAAA,IAAA;YAAMC,KAAO,EAAA;SAAM,EAAA;YAC9D,IAAI,CAACC,MAAMF,MAAS,CAAA,EAAA;AAClBT,gBAAAA,mBAAAA,CAAoBC,SAAS,GAAGQ,MAAAA;AAClC;YACA,IAAI,CAACE,MAAMD,KAAQ,CAAA,EAAA;AACjBV,gBAAAA,mBAAAA,CAAoBE,QAAQ,GAAGQ,KAAAA;AACjC;YACA,OAAON,OAAAA;AACT,SAAA;AAEA;;;QAIAQ,YAAAA,CAAAA,CAAaC,QAAQC,QAAQ,EAAA;AAC3Bd,YAAAA,mBAAAA,CAAoBG,QAAQ,GAAGU,KAAAA;YAC/B,OAAOT,OAAAA;AACT,SAAA;AAEA;;;AAGC,QACD,MAAMW,KAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMC,kBAAkB,MAAMlB,kBAAAA,EAAAA;AAE9B,YAAA,IAAIE,mBAAoBG,CAAAA,QAAQ,KAAK,CAAC,CAAG,EAAA;gBACvC,OAAOa,eAAAA;AACT;AAEA,YAAA,OAAOC,gBAAgBpB,GAAK,EAAA;AAAE,gBAAA,GAAGG,mBAAmB;AAAEgB,gBAAAA;AAAgB,aAAA,CAAA;AACxE;AACF,KAAA;IAEA,OAAOZ,OAAAA;AACT,CAAA;AAEA,wBAAe,CAAA,IAAMR,eAAc;;;;"}
1
+ {"version":3,"file":"populate-builder.mjs","sources":["../../../server/src/services/populate-builder.ts"],"sourcesContent":["import { isNil } from 'lodash/fp';\nimport type { UID } from '@strapi/types';\nimport { type Populate, getDeepPopulate, getQueryPopulate } from './utils/populate';\n\n/**\n * Builder to create a Strapi populate object.\n *\n * @param uid - Content type UID\n *\n * @example\n * const populate = await populateBuilder('api::article.article').countRelations().build();\n * // populate = { article: { populate: { count: true } } }\n *\n */\nconst populateBuilder = (uid: UID.Schema) => {\n let getInitialPopulate = async (): Promise<undefined | Populate> => {\n return undefined;\n };\n const deepPopulateOptions = {\n countMany: false,\n countOne: false,\n maxLevel: -1,\n };\n\n const builder = {\n /**\n * Populates all attribute fields present in a query.\n * @param query - Strapi query object\n */\n populateFromQuery(query: object) {\n getInitialPopulate = async () => getQueryPopulate(uid, query);\n return builder;\n },\n\n /**\n * Populate relations as count.\n * @param [options]\n * @param [options.toMany] - Populate XtoMany relations as count if true.\n * @param [options.toOne] - Populate XtoOne relations as count if true.\n */\n countRelations({ toMany, toOne } = { toMany: true, toOne: true }) {\n if (!isNil(toMany)) {\n deepPopulateOptions.countMany = toMany;\n }\n if (!isNil(toOne)) {\n deepPopulateOptions.countOne = toOne;\n }\n return builder;\n },\n\n /**\n * Populate relations deeply, up to a certain level.\n * @param [level=Infinity] - Max level of nested populate.\n */\n populateDeep(level = Infinity) {\n deepPopulateOptions.maxLevel = level;\n return builder;\n },\n\n /**\n * Construct the populate object based on the builder options.\n * @returns Populate object\n */\n async build() {\n const initialPopulate = await getInitialPopulate();\n\n if (deepPopulateOptions.maxLevel === -1) {\n return initialPopulate;\n }\n\n return getDeepPopulate(uid, { ...deepPopulateOptions, initialPopulate });\n },\n };\n\n return builder;\n};\n\nexport default () => populateBuilder;\n"],"names":["populateBuilder","uid","getInitialPopulate","undefined","deepPopulateOptions","countMany","countOne","maxLevel","builder","populateFromQuery","query","getQueryPopulate","countRelations","toMany","toOne","isNil","populateDeep","level","Infinity","build","initialPopulate","getDeepPopulate"],"mappings":";;;AAIA;;;;;;;;;IAUA,MAAMA,oBAAkB,CAACC,GAAAA,GAAAA;AACvB,IAAA,IAAIC,kBAAAA,GAAqB,UAAA;QACvB,OAAOC,SAAAA;AACT,IAAA,CAAA;AACA,IAAA,MAAMC,mBAAAA,GAAsB;QAC1BC,SAAAA,EAAW,KAAA;QACXC,QAAAA,EAAU,KAAA;AACVC,QAAAA,QAAAA,EAAU;AACZ,KAAA;AAEA,IAAA,MAAMC,OAAAA,GAAU;AACd;;;AAGC,QACDC,mBAAkBC,KAAa,EAAA;YAC7BR,kBAAAA,GAAqB,UAAYS,iBAAiBV,GAAAA,EAAKS,KAAAA,CAAAA;YACvD,OAAOF,OAAAA;AACT,QAAA,CAAA;AAEA;;;;;AAKC,QACDI,gBAAe,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAG;YAAED,MAAAA,EAAQ,IAAA;YAAMC,KAAAA,EAAO;SAAM,EAAA;YAC9D,IAAI,CAACC,MAAMF,MAAAA,CAAAA,EAAS;AAClBT,gBAAAA,mBAAAA,CAAoBC,SAAS,GAAGQ,MAAAA;AAClC,YAAA;YACA,IAAI,CAACE,MAAMD,KAAAA,CAAAA,EAAQ;AACjBV,gBAAAA,mBAAAA,CAAoBE,QAAQ,GAAGQ,KAAAA;AACjC,YAAA;YACA,OAAON,OAAAA;AACT,QAAA,CAAA;AAEA;;;QAIAQ,YAAAA,CAAAA,CAAaC,QAAQC,QAAQ,EAAA;AAC3Bd,YAAAA,mBAAAA,CAAoBG,QAAQ,GAAGU,KAAAA;YAC/B,OAAOT,OAAAA;AACT,QAAA,CAAA;AAEA;;;AAGC,QACD,MAAMW,KAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMC,kBAAkB,MAAMlB,kBAAAA,EAAAA;AAE9B,YAAA,IAAIE,mBAAAA,CAAoBG,QAAQ,KAAK,EAAC,EAAG;gBACvC,OAAOa,eAAAA;AACT,YAAA;AAEA,YAAA,OAAOC,gBAAgBpB,GAAAA,EAAK;AAAE,gBAAA,GAAGG,mBAAmB;AAAEgB,gBAAAA;AAAgB,aAAA,CAAA;AACxE,QAAA;AACF,KAAA;IAEA,OAAOZ,OAAAA;AACT,CAAA;AAEA,sBAAe,CAAA,IAAMR,iBAAc;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"uid.js","sources":["../../../server/src/services/uid.ts"],"sourcesContent":["import _ from 'lodash';\nimport slugify from '@sindresorhus/slugify';\n\nimport type { Core, Schema, UID } from '@strapi/types';\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n async generateUIDField({\n contentTypeUID,\n field,\n data,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n data: Record<string, any>;\n locale?: string;\n }) {\n const contentType = strapi.contentTypes[contentTypeUID];\n const { attributes } = contentType;\n\n const {\n targetField,\n default: defaultValue,\n options,\n } = attributes[field] as Schema.Attribute.UID;\n\n // @ts-expect-error targetField can be undefined\n const targetValue = _.get(data, targetField);\n\n if (!_.isEmpty(targetValue)) {\n return this.findUniqueUID({\n contentTypeUID,\n field,\n value: slugify(targetValue, options),\n locale,\n });\n }\n\n return this.findUniqueUID({\n contentTypeUID,\n field,\n value: slugify(\n _.isFunction(defaultValue) ? defaultValue() : defaultValue || contentType.modelName,\n options\n ),\n locale,\n });\n },\n\n async findUniqueUID({\n contentTypeUID,\n field,\n value,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n value: string;\n locale?: string;\n }) {\n const foundDocuments = await strapi.documents(contentTypeUID).findMany({\n filters: {\n [field]: { $startsWith: value },\n },\n locale,\n // TODO: Check UX. When modifying an entry, it only makes sense to check for collisions with other drafts\n // However, when publishing this \"available\" UID might collide with another published entry\n status: 'draft',\n });\n\n if (!foundDocuments || foundDocuments.length === 0) {\n // If there are no documents found we can return the value as is\n return value;\n }\n\n let possibleCollisions: string[];\n if (!Array.isArray(foundDocuments)) {\n possibleCollisions = [foundDocuments[field]];\n } else {\n possibleCollisions = foundDocuments.map((doc: any) => doc[field]);\n }\n\n // If there are no documents sharing the proposed UID, we can return the value as is\n if (!possibleCollisions.includes(value)) {\n return value;\n }\n\n let i = 1;\n let tmpUId = `${value}-${i}`;\n while (possibleCollisions.includes(tmpUId)) {\n // While there are documents sharing the proposed UID, we need to find a new one\n // by incrementing the suffix until we find a unique one\n i += 1;\n tmpUId = `${value}-${i}`;\n }\n\n return tmpUId;\n },\n\n async checkUIDAvailability({\n contentTypeUID,\n field,\n value,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n value: string;\n locale?: string;\n }) {\n const documentCount = await strapi.documents(contentTypeUID).count({\n filters: {\n [field]: value,\n },\n locale,\n // TODO: Check UX. When modifying an entry, it only makes sense to check for collisions with other drafts\n // However, when publishing this \"available\" UID might collide with another published entry\n status: 'draft',\n });\n\n if (documentCount && documentCount > 0) {\n // If there are documents sharing the proposed UID, we can return false\n return false;\n }\n\n return true;\n },\n});\n"],"names":["strapi","generateUIDField","contentTypeUID","field","data","locale","contentType","contentTypes","attributes","targetField","default","defaultValue","options","targetValue","_","get","isEmpty","findUniqueUID","value","slugify","isFunction","modelName","foundDocuments","documents","findMany","filters","$startsWith","status","length","possibleCollisions","Array","isArray","map","doc","includes","i","tmpUId","checkUIDAvailability","documentCount","count"],"mappings":"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"}
1
+ {"version":3,"file":"uid.js","sources":["../../../server/src/services/uid.ts"],"sourcesContent":["import _ from 'lodash';\nimport slugify from '@sindresorhus/slugify';\n\nimport type { Core, Schema, UID } from '@strapi/types';\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n async generateUIDField({\n contentTypeUID,\n field,\n data,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n data: Record<string, any>;\n locale?: string;\n }) {\n const contentType = strapi.contentTypes[contentTypeUID];\n const { attributes } = contentType;\n\n const {\n targetField,\n default: defaultValue,\n options,\n } = attributes[field] as Schema.Attribute.UID;\n\n // @ts-expect-error targetField can be undefined\n const targetValue = _.get(data, targetField);\n\n if (!_.isEmpty(targetValue)) {\n return this.findUniqueUID({\n contentTypeUID,\n field,\n value: slugify(targetValue, options),\n locale,\n });\n }\n\n return this.findUniqueUID({\n contentTypeUID,\n field,\n value: slugify(\n _.isFunction(defaultValue) ? defaultValue() : defaultValue || contentType.modelName,\n options\n ),\n locale,\n });\n },\n\n async findUniqueUID({\n contentTypeUID,\n field,\n value,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n value: string;\n locale?: string;\n }) {\n const foundDocuments = await strapi.documents(contentTypeUID).findMany({\n filters: {\n [field]: { $startsWith: value },\n },\n locale,\n // TODO: Check UX. When modifying an entry, it only makes sense to check for collisions with other drafts\n // However, when publishing this \"available\" UID might collide with another published entry\n status: 'draft',\n });\n\n if (!foundDocuments || foundDocuments.length === 0) {\n // If there are no documents found we can return the value as is\n return value;\n }\n\n let possibleCollisions: string[];\n if (!Array.isArray(foundDocuments)) {\n possibleCollisions = [foundDocuments[field]];\n } else {\n possibleCollisions = foundDocuments.map((doc: any) => doc[field]);\n }\n\n // If there are no documents sharing the proposed UID, we can return the value as is\n if (!possibleCollisions.includes(value)) {\n return value;\n }\n\n let i = 1;\n let tmpUId = `${value}-${i}`;\n while (possibleCollisions.includes(tmpUId)) {\n // While there are documents sharing the proposed UID, we need to find a new one\n // by incrementing the suffix until we find a unique one\n i += 1;\n tmpUId = `${value}-${i}`;\n }\n\n return tmpUId;\n },\n\n async checkUIDAvailability({\n contentTypeUID,\n field,\n value,\n locale,\n }: {\n contentTypeUID: UID.ContentType;\n field: string;\n value: string;\n locale?: string;\n }) {\n const documentCount = await strapi.documents(contentTypeUID).count({\n filters: {\n [field]: value,\n },\n locale,\n // TODO: Check UX. When modifying an entry, it only makes sense to check for collisions with other drafts\n // However, when publishing this \"available\" UID might collide with another published entry\n status: 'draft',\n });\n\n if (documentCount && documentCount > 0) {\n // If there are documents sharing the proposed UID, we can return false\n return false;\n }\n\n return true;\n },\n});\n"],"names":["strapi","generateUIDField","contentTypeUID","field","data","locale","contentType","contentTypes","attributes","targetField","default","defaultValue","options","targetValue","_","get","isEmpty","findUniqueUID","value","slugify","isFunction","modelName","foundDocuments","documents","findMany","filters","$startsWith","status","length","possibleCollisions","Array","isArray","map","doc","includes","i","tmpUId","checkUIDAvailability","documentCount","count"],"mappings":"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"}