@strapi/content-manager 5.48.1 → 5.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (458) hide show
  1. package/dist/admin/components/ActionsDrawer.js +3 -2
  2. package/dist/admin/components/ActionsDrawer.js.map +1 -1
  3. package/dist/admin/components/ComponentIcon.js +4 -3
  4. package/dist/admin/components/ComponentIcon.js.map +1 -1
  5. package/dist/admin/components/ConfigurationForm/EditFieldForm.js +3 -2
  6. package/dist/admin/components/ConfigurationForm/EditFieldForm.js.map +1 -1
  7. package/dist/admin/components/ConfigurationForm/Fields.js +3 -2
  8. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  9. package/dist/admin/components/ConfigurationForm/Form.js +7 -3
  10. package/dist/admin/components/ConfigurationForm/Form.js.map +1 -1
  11. package/dist/admin/components/LeftMenu.js +3 -2
  12. package/dist/admin/components/LeftMenu.js.map +1 -1
  13. package/dist/admin/components/RelativeTime.js +3 -2
  14. package/dist/admin/components/RelativeTime.js.map +1 -1
  15. package/dist/admin/components/Widgets.js +3 -2
  16. package/dist/admin/components/Widgets.js.map +1 -1
  17. package/dist/admin/features/DocumentRBAC.js +3 -2
  18. package/dist/admin/features/DocumentRBAC.js.map +1 -1
  19. package/dist/admin/history/components/VersionContent.js +7 -3
  20. package/dist/admin/history/components/VersionContent.js.map +1 -1
  21. package/dist/admin/history/components/VersionHeader.js +3 -2
  22. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  23. package/dist/admin/history/components/VersionInputRenderer.js +3 -2
  24. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
  25. package/dist/admin/history/pages/History.js +3 -2
  26. package/dist/admin/history/pages/History.js.map +1 -1
  27. package/dist/admin/history/routes.js +3 -2
  28. package/dist/admin/history/routes.js.map +1 -1
  29. package/dist/admin/hooks/useContentTypeSchema.js +3 -2
  30. package/dist/admin/hooks/useContentTypeSchema.js.map +1 -1
  31. package/dist/admin/hooks/useDocument.js +3 -2
  32. package/dist/admin/hooks/useDocument.js.map +1 -1
  33. package/dist/admin/hooks/useDocumentActions.js +3 -2
  34. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  35. package/dist/admin/hooks/useDocumentContext.js +3 -2
  36. package/dist/admin/hooks/useDocumentContext.js.map +1 -1
  37. package/dist/admin/hooks/useDocumentLayout.js +3 -2
  38. package/dist/admin/hooks/useDocumentLayout.js.map +1 -1
  39. package/dist/admin/hooks/useDragAndDrop.js +3 -2
  40. package/dist/admin/hooks/useDragAndDrop.js.map +1 -1
  41. package/dist/admin/hooks/useKeyboardDragAndDrop.js +3 -2
  42. package/dist/admin/hooks/useKeyboardDragAndDrop.js.map +1 -1
  43. package/dist/admin/hooks/useOnce.js +3 -2
  44. package/dist/admin/hooks/useOnce.js.map +1 -1
  45. package/dist/admin/hooks/usePersistentQueryParams.js +7 -2
  46. package/dist/admin/hooks/usePersistentQueryParams.js.map +1 -1
  47. package/dist/admin/layout.js +3 -1
  48. package/dist/admin/layout.js.map +1 -1
  49. package/dist/admin/layout.mjs +5 -3
  50. package/dist/admin/layout.mjs.map +1 -1
  51. package/dist/admin/pages/ComponentConfigurationPage.js +3 -2
  52. package/dist/admin/pages/ComponentConfigurationPage.js.map +1 -1
  53. package/dist/admin/pages/EditConfigurationPage.js +3 -2
  54. package/dist/admin/pages/EditConfigurationPage.js.map +1 -1
  55. package/dist/admin/pages/EditView/EditViewPage.js +3 -2
  56. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/DocumentActions.js +238 -108
  58. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  59. package/dist/admin/pages/EditView/components/DocumentActions.mjs +225 -103
  60. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  61. package/dist/admin/pages/EditView/components/EditorToolbarObserver.js +3 -2
  62. package/dist/admin/pages/EditView/components/EditorToolbarObserver.js.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js +4 -3
  64. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js +3 -2
  66. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +3 -2
  68. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +3 -2
  70. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +3 -2
  72. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js +3 -2
  74. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +4 -3
  76. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +3 -2
  78. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +3 -2
  80. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  81. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +3 -2
  82. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  83. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +6 -1
  84. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  85. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +2 -1
  86. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  87. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +9 -4
  88. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  89. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +3 -2
  90. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  91. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +13 -4
  92. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  93. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +6 -1
  94. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  95. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +3 -2
  96. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  97. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +7 -3
  98. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  99. package/dist/admin/pages/EditView/components/FormInputs/UID.js +3 -2
  100. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  101. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +8 -4
  102. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  103. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js +3 -2
  104. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js.map +1 -1
  105. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js +3 -2
  106. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -1
  107. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js +5 -1
  108. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.js.map +1 -1
  109. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js +15 -2
  110. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.js.map +1 -1
  111. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.js +5 -1
  112. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.js.map +1 -1
  113. package/dist/admin/pages/EditView/components/FormLayout.js +3 -2
  114. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  115. package/dist/admin/pages/EditView/components/Header.js +3 -2
  116. package/dist/admin/pages/EditView/components/Header.js.map +1 -1
  117. package/dist/admin/pages/EditView/components/InputRenderer.js +3 -2
  118. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  119. package/dist/admin/pages/EditView/components/Panels.js +3 -2
  120. package/dist/admin/pages/EditView/components/Panels.js.map +1 -1
  121. package/dist/admin/pages/EditView/utils/data.js +5 -1
  122. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  123. package/dist/admin/pages/EditView/utils/draftRelationCounts.js +117 -0
  124. package/dist/admin/pages/EditView/utils/draftRelationCounts.js.map +1 -0
  125. package/dist/admin/pages/EditView/utils/draftRelationCounts.mjs +109 -0
  126. package/dist/admin/pages/EditView/utils/draftRelationCounts.mjs.map +1 -0
  127. package/dist/admin/pages/EditView/utils/keyboardShortcuts.js +35 -0
  128. package/dist/admin/pages/EditView/utils/keyboardShortcuts.js.map +1 -0
  129. package/dist/admin/pages/EditView/utils/keyboardShortcuts.mjs +33 -0
  130. package/dist/admin/pages/EditView/utils/keyboardShortcuts.mjs.map +1 -0
  131. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +3 -2
  132. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
  133. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js +3 -2
  134. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -1
  135. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js +3 -2
  136. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js.map +1 -1
  137. package/dist/admin/pages/ListConfiguration/components/Settings.js +3 -2
  138. package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -1
  139. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js +3 -2
  140. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js.map +1 -1
  141. package/dist/admin/pages/ListView/ListViewPage.js +3 -2
  142. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  143. package/dist/admin/pages/ListView/components/BulkActions/Actions.js +3 -2
  144. package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
  145. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +4 -3
  146. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  147. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +1 -1
  148. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  149. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +3 -2
  150. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  151. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  152. package/dist/admin/pages/ListView/components/Filters.js +3 -2
  153. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  154. package/dist/admin/pages/ListView/components/TableActions.js +3 -2
  155. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  156. package/dist/admin/pages/ListView/components/TableCells/CellContent.js +9 -5
  157. package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
  158. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +2 -2
  159. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
  160. package/dist/admin/pages/ListView/components/TableCells/CellValue.js +7 -2
  161. package/dist/admin/pages/ListView/components/TableCells/CellValue.js.map +1 -1
  162. package/dist/admin/pages/ListView/components/TableCells/Relations.js +4 -3
  163. package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
  164. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +1 -1
  165. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
  166. package/dist/admin/preview/components/InputPopover.js +3 -2
  167. package/dist/admin/preview/components/InputPopover.js.map +1 -1
  168. package/dist/admin/preview/hooks/usePreviewInputManager.js +3 -2
  169. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -1
  170. package/dist/admin/preview/pages/Preview.js +41 -13
  171. package/dist/admin/preview/pages/Preview.js.map +1 -1
  172. package/dist/admin/preview/pages/Preview.mjs +39 -12
  173. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  174. package/dist/admin/preview/routes.js +3 -2
  175. package/dist/admin/preview/routes.js.map +1 -1
  176. package/dist/admin/preview/utils/constants.js +9 -15
  177. package/dist/admin/preview/utils/constants.js.map +1 -1
  178. package/dist/admin/preview/utils/constants.mjs +10 -15
  179. package/dist/admin/preview/utils/constants.mjs.map +1 -1
  180. package/dist/admin/src/components/InjectionZone.d.ts +1 -2
  181. package/dist/admin/src/content-manager.d.ts +15 -15
  182. package/dist/admin/src/history/services/historyVersion.d.ts +2 -2
  183. package/dist/admin/src/hooks/useContentTypeSchema.d.ts +1 -1
  184. package/dist/admin/src/hooks/useDocument.d.ts +8 -9
  185. package/dist/admin/src/hooks/useDocumentLayout.d.ts +3 -3
  186. package/dist/admin/src/hooks/useDragAndDrop.d.ts +4 -4
  187. package/dist/admin/src/hooks/useKeyboardDragAndDrop.d.ts +1 -1
  188. package/dist/admin/src/hooks/usePersistentQueryParams.d.ts +0 -1
  189. package/dist/admin/src/modules/app.d.ts +5 -5
  190. package/dist/admin/src/pages/EditView/EditViewPage.d.ts +1 -1
  191. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +12 -1
  192. package/dist/admin/src/pages/EditView/components/EditorToolbarObserver.d.ts +1 -1
  193. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +1 -1
  194. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.d.ts +2 -2
  195. package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -2
  196. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +4 -4
  197. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +2 -2
  198. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +19 -20
  199. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +12 -12
  200. package/dist/admin/src/pages/EditView/utils/draftRelationCounts.d.ts +26 -0
  201. package/dist/admin/src/pages/EditView/utils/keyboardShortcuts.d.ts +18 -0
  202. package/dist/admin/src/pages/ListView/components/BulkActions/PublishAction.d.ts +1 -1
  203. package/dist/admin/src/pages/ListView/components/Filters.d.ts +1 -1
  204. package/dist/admin/src/pages/formatComponentConfigurationEditLayout.d.ts +1 -1
  205. package/dist/admin/src/preview/utils/constants.d.ts +1 -7
  206. package/dist/admin/src/preview/utils/getSendMessage.d.ts +0 -1
  207. package/dist/admin/src/services/documents.d.ts +30 -70
  208. package/dist/admin/src/services/relations.d.ts +6 -20
  209. package/dist/admin/src/services/uid.d.ts +5 -5
  210. package/dist/admin/src/utils/layouts/normalizeContentManagerLayout.d.ts +4 -4
  211. package/dist/admin/src/utils/users.d.ts +1 -1
  212. package/dist/admin/src/utils/validation.d.ts +1 -1
  213. package/dist/admin/translations/cs.json.js +2 -1
  214. package/dist/admin/translations/cs.json.js.map +1 -1
  215. package/dist/admin/translations/cs.json.mjs +2 -1
  216. package/dist/admin/translations/cs.json.mjs.map +1 -1
  217. package/dist/admin/translations/de.json.js +2 -1
  218. package/dist/admin/translations/de.json.js.map +1 -1
  219. package/dist/admin/translations/de.json.mjs +2 -1
  220. package/dist/admin/translations/de.json.mjs.map +1 -1
  221. package/dist/admin/translations/en.json.js +7 -3
  222. package/dist/admin/translations/en.json.js.map +1 -1
  223. package/dist/admin/translations/en.json.mjs +7 -3
  224. package/dist/admin/translations/en.json.mjs.map +1 -1
  225. package/dist/admin/translations/es.json.js +2 -1
  226. package/dist/admin/translations/es.json.js.map +1 -1
  227. package/dist/admin/translations/es.json.mjs +2 -1
  228. package/dist/admin/translations/es.json.mjs.map +1 -1
  229. package/dist/admin/translations/fr.json.js +2 -1
  230. package/dist/admin/translations/fr.json.js.map +1 -1
  231. package/dist/admin/translations/fr.json.mjs +2 -1
  232. package/dist/admin/translations/fr.json.mjs.map +1 -1
  233. package/dist/admin/translations/ja.json.js +262 -87
  234. package/dist/admin/translations/ja.json.js.map +1 -1
  235. package/dist/admin/translations/ja.json.mjs +262 -87
  236. package/dist/admin/translations/ja.json.mjs.map +1 -1
  237. package/dist/admin/translations/nl.json.js +2 -1
  238. package/dist/admin/translations/nl.json.js.map +1 -1
  239. package/dist/admin/translations/nl.json.mjs +2 -1
  240. package/dist/admin/translations/nl.json.mjs.map +1 -1
  241. package/dist/admin/translations/pl.json.js +2 -1
  242. package/dist/admin/translations/pl.json.js.map +1 -1
  243. package/dist/admin/translations/pl.json.mjs +2 -1
  244. package/dist/admin/translations/pl.json.mjs.map +1 -1
  245. package/dist/admin/translations/sk.json.js +2 -1
  246. package/dist/admin/translations/sk.json.js.map +1 -1
  247. package/dist/admin/translations/sk.json.mjs +2 -1
  248. package/dist/admin/translations/sk.json.mjs.map +1 -1
  249. package/dist/admin/utils/objects.js +9 -4
  250. package/dist/admin/utils/objects.js.map +1 -1
  251. package/dist/admin/utils/validation.js +7 -3
  252. package/dist/admin/utils/validation.js.map +1 -1
  253. package/dist/server/controllers/collection-types.js +2 -2
  254. package/dist/server/controllers/collection-types.js.map +1 -1
  255. package/dist/server/controllers/collection-types.mjs +2 -2
  256. package/dist/server/controllers/collection-types.mjs.map +1 -1
  257. package/dist/server/controllers/single-types.js +2 -2
  258. package/dist/server/controllers/single-types.js.map +1 -1
  259. package/dist/server/controllers/single-types.mjs +2 -2
  260. package/dist/server/controllers/single-types.mjs.map +1 -1
  261. package/dist/server/controllers/utils/clone.js +5 -1
  262. package/dist/server/controllers/utils/clone.js.map +1 -1
  263. package/dist/server/controllers/utils/clone.mjs.map +1 -1
  264. package/dist/server/controllers/validation/index.js +6 -2
  265. package/dist/server/controllers/validation/index.js.map +1 -1
  266. package/dist/server/homepage/services/homepage.js +6 -1
  267. package/dist/server/homepage/services/homepage.js.map +1 -1
  268. package/dist/server/homepage/services/homepage.mjs +6 -1
  269. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  270. package/dist/server/mcp/handlers/collection-handlers.js +15 -18
  271. package/dist/server/mcp/handlers/collection-handlers.js.map +1 -1
  272. package/dist/server/mcp/handlers/collection-handlers.mjs +16 -19
  273. package/dist/server/mcp/handlers/collection-handlers.mjs.map +1 -1
  274. package/dist/server/mcp/handlers/single-type-handlers.js +12 -12
  275. package/dist/server/mcp/handlers/single-type-handlers.js.map +1 -1
  276. package/dist/server/mcp/handlers/single-type-handlers.mjs +13 -13
  277. package/dist/server/mcp/handlers/single-type-handlers.mjs.map +1 -1
  278. package/dist/server/mcp/register-content-manager-mcp-tools.js +4 -1
  279. package/dist/server/mcp/register-content-manager-mcp-tools.js.map +1 -1
  280. package/dist/server/mcp/register-content-manager-mcp-tools.mjs +4 -1
  281. package/dist/server/mcp/register-content-manager-mcp-tools.mjs.map +1 -1
  282. package/dist/server/mcp/sanitizers/shape-relations.js +108 -0
  283. package/dist/server/mcp/sanitizers/shape-relations.js.map +1 -0
  284. package/dist/server/mcp/sanitizers/shape-relations.mjs +103 -0
  285. package/dist/server/mcp/sanitizers/shape-relations.mjs.map +1 -0
  286. package/dist/server/mcp/schemas/data-schema.js +0 -3
  287. package/dist/server/mcp/schemas/data-schema.js.map +1 -1
  288. package/dist/server/mcp/schemas/data-schema.mjs +0 -3
  289. package/dist/server/mcp/schemas/data-schema.mjs.map +1 -1
  290. package/dist/server/mcp/schemas/output-schemas.js +30 -4
  291. package/dist/server/mcp/schemas/output-schemas.js.map +1 -1
  292. package/dist/server/mcp/schemas/output-schemas.mjs +30 -4
  293. package/dist/server/mcp/schemas/output-schemas.mjs.map +1 -1
  294. package/dist/server/mcp/utils.js +30 -3
  295. package/dist/server/mcp/utils.js.map +1 -1
  296. package/dist/server/mcp/utils.mjs +30 -4
  297. package/dist/server/mcp/utils.mjs.map +1 -1
  298. package/dist/server/middlewares/routing.js +5 -1
  299. package/dist/server/middlewares/routing.js.map +1 -1
  300. package/dist/server/preview/controllers/preview.js +9 -0
  301. package/dist/server/preview/controllers/preview.js.map +1 -1
  302. package/dist/server/preview/controllers/preview.mjs +9 -0
  303. package/dist/server/preview/controllers/preview.mjs.map +1 -1
  304. package/dist/server/preview/controllers/previewScript.js +1450 -0
  305. package/dist/server/preview/routes/preview.js +11 -0
  306. package/dist/server/preview/routes/preview.js.map +1 -1
  307. package/dist/server/preview/routes/preview.mjs +11 -0
  308. package/dist/server/preview/routes/preview.mjs.map +1 -1
  309. package/dist/server/services/document-manager.js +13 -19
  310. package/dist/server/services/document-manager.js.map +1 -1
  311. package/dist/server/services/document-manager.mjs +13 -19
  312. package/dist/server/services/document-manager.mjs.map +1 -1
  313. package/dist/server/services/populate-builder.js.map +1 -1
  314. package/dist/server/services/populate-builder.mjs.map +1 -1
  315. package/dist/server/services/uid.js +9 -4
  316. package/dist/server/services/uid.js.map +1 -1
  317. package/dist/server/services/utils/configuration/attributes.js +14 -10
  318. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  319. package/dist/server/services/utils/configuration/layouts.js +8 -4
  320. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  321. package/dist/server/services/utils/configuration/metadatas.js +19 -15
  322. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  323. package/dist/server/services/utils/configuration/settings.js +5 -1
  324. package/dist/server/services/utils/configuration/settings.js.map +1 -1
  325. package/dist/server/services/utils/draft-relations.js +9 -0
  326. package/dist/server/services/utils/draft-relations.js.map +1 -0
  327. package/dist/server/services/utils/draft-relations.mjs +7 -0
  328. package/dist/server/services/utils/draft-relations.mjs.map +1 -0
  329. package/dist/server/services/utils/draft.js +123 -26
  330. package/dist/server/services/utils/draft.js.map +1 -1
  331. package/dist/server/services/utils/draft.mjs +118 -25
  332. package/dist/server/services/utils/draft.mjs.map +1 -1
  333. package/dist/server/services/utils/populate.js +23 -5
  334. package/dist/server/services/utils/populate.js.map +1 -1
  335. package/dist/server/services/utils/populate.mjs +15 -1
  336. package/dist/server/services/utils/populate.mjs.map +1 -1
  337. package/dist/server/services/utils/store.js +9 -5
  338. package/dist/server/services/utils/store.js.map +1 -1
  339. package/dist/server/src/controllers/index.d.ts +1 -1
  340. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  341. package/dist/server/src/controllers/utils/clone.d.ts +1 -1
  342. package/dist/server/src/controllers/utils/clone.d.ts.map +1 -1
  343. package/dist/server/src/controllers/utils/document-status.d.ts +1 -1
  344. package/dist/server/src/controllers/utils/document-status.d.ts.map +1 -1
  345. package/dist/server/src/controllers/utils/metadata.d.ts +5 -5
  346. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  347. package/dist/server/src/controllers/validation/dimensions.d.ts.map +1 -1
  348. package/dist/server/src/controllers/validation/index.d.ts +3 -3
  349. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  350. package/dist/server/src/controllers/validation/model-configuration.d.ts.map +1 -1
  351. package/dist/server/src/controllers/validation/relations.d.ts +2 -2
  352. package/dist/server/src/history/controllers/history-version.d.ts +1 -7
  353. package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
  354. package/dist/server/src/history/controllers/index.d.ts +2 -1
  355. package/dist/server/src/history/controllers/index.d.ts.map +1 -1
  356. package/dist/server/src/history/controllers/validation/history-version.d.ts +1 -1
  357. package/dist/server/src/history/services/history.d.ts +0 -2
  358. package/dist/server/src/history/services/history.d.ts.map +1 -1
  359. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  360. package/dist/server/src/history/services/utils.d.ts +3 -3
  361. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  362. package/dist/server/src/history/utils.d.ts +1 -18
  363. package/dist/server/src/history/utils.d.ts.map +1 -1
  364. package/dist/server/src/homepage/controllers/homepage.d.ts +0 -1
  365. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -1
  366. package/dist/server/src/homepage/controllers/index.d.ts +2 -1
  367. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -1
  368. package/dist/server/src/homepage/index.d.ts +4 -8
  369. package/dist/server/src/homepage/index.d.ts.map +1 -1
  370. package/dist/server/src/homepage/services/homepage-query-utils.d.ts.map +1 -1
  371. package/dist/server/src/homepage/services/homepage.d.ts +3 -4
  372. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  373. package/dist/server/src/homepage/services/index.d.ts +4 -8
  374. package/dist/server/src/homepage/services/index.d.ts.map +1 -1
  375. package/dist/server/src/index.d.ts +82 -86
  376. package/dist/server/src/index.d.ts.map +1 -1
  377. package/dist/server/src/mcp/derive-content-type-mcp-tools.d.ts.map +1 -1
  378. package/dist/server/src/mcp/handlers/collection-handlers.d.ts.map +1 -1
  379. package/dist/server/src/mcp/handlers/single-type-handlers.d.ts.map +1 -1
  380. package/dist/server/src/mcp/permissions.d.ts +1 -1
  381. package/dist/server/src/mcp/permissions.d.ts.map +1 -1
  382. package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts +2 -1
  383. package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts.map +1 -1
  384. package/dist/server/src/mcp/sanitizers/shape-relations.d.ts +38 -0
  385. package/dist/server/src/mcp/sanitizers/shape-relations.d.ts.map +1 -0
  386. package/dist/server/src/mcp/schemas/blocks-schema.d.ts.map +1 -1
  387. package/dist/server/src/mcp/schemas/data-schema.d.ts +0 -3
  388. package/dist/server/src/mcp/schemas/data-schema.d.ts.map +1 -1
  389. package/dist/server/src/mcp/schemas/filters-schema.d.ts.map +1 -1
  390. package/dist/server/src/mcp/schemas/output-schemas.d.ts +2 -2
  391. package/dist/server/src/mcp/schemas/output-schemas.d.ts.map +1 -1
  392. package/dist/server/src/mcp/schemas/sort-schema.d.ts.map +1 -1
  393. package/dist/server/src/mcp/types.d.ts +2 -2
  394. package/dist/server/src/mcp/types.d.ts.map +1 -1
  395. package/dist/server/src/mcp/utils.d.ts +19 -1
  396. package/dist/server/src/mcp/utils.d.ts.map +1 -1
  397. package/dist/server/src/middlewares/routing.d.ts.map +1 -1
  398. package/dist/server/src/policies/hasPermissions.d.ts.map +1 -1
  399. package/dist/server/src/policies/index.d.ts.map +1 -1
  400. package/dist/server/src/preview/controllers/index.d.ts +2 -1
  401. package/dist/server/src/preview/controllers/index.d.ts.map +1 -1
  402. package/dist/server/src/preview/controllers/preview.d.ts +5 -0
  403. package/dist/server/src/preview/controllers/preview.d.ts.map +1 -1
  404. package/dist/server/src/preview/controllers/validation/preview.d.ts +1 -2
  405. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -1
  406. package/dist/server/src/preview/routes/preview.d.ts.map +1 -1
  407. package/dist/server/src/preview/services/index.d.ts +1 -1
  408. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  409. package/dist/server/src/preview/services/preview-config.d.ts +1 -1
  410. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  411. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  412. package/dist/server/src/preview/utils.d.ts +1 -16
  413. package/dist/server/src/preview/utils.d.ts.map +1 -1
  414. package/dist/server/src/services/components.d.ts +2 -2
  415. package/dist/server/src/services/components.d.ts.map +1 -1
  416. package/dist/server/src/services/configuration.d.ts.map +1 -1
  417. package/dist/server/src/services/content-types.d.ts.map +1 -1
  418. package/dist/server/src/services/data-mapper.d.ts +5 -5
  419. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  420. package/dist/server/src/services/document-manager.d.ts +14 -14
  421. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  422. package/dist/server/src/services/document-metadata.d.ts +6 -6
  423. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  424. package/dist/server/src/services/field-sizes.d.ts +2 -2
  425. package/dist/server/src/services/field-sizes.d.ts.map +1 -1
  426. package/dist/server/src/services/index.d.ts +81 -85
  427. package/dist/server/src/services/index.d.ts.map +1 -1
  428. package/dist/server/src/services/metrics.d.ts.map +1 -1
  429. package/dist/server/src/services/permission-checker.d.ts +12 -31
  430. package/dist/server/src/services/permission-checker.d.ts.map +1 -1
  431. package/dist/server/src/services/permission.d.ts.map +1 -1
  432. package/dist/server/src/services/populate-builder.d.ts +7 -5
  433. package/dist/server/src/services/populate-builder.d.ts.map +1 -1
  434. package/dist/server/src/services/uid.d.ts.map +1 -1
  435. package/dist/server/src/services/utils/configuration/attributes.d.ts.map +1 -1
  436. package/dist/server/src/services/utils/configuration/settings.d.ts.map +1 -1
  437. package/dist/server/src/services/utils/count.d.ts.map +1 -1
  438. package/dist/server/src/services/utils/draft-relations.d.ts +19 -0
  439. package/dist/server/src/services/utils/draft-relations.d.ts.map +1 -0
  440. package/dist/server/src/services/utils/draft.d.ts +8 -7
  441. package/dist/server/src/services/utils/draft.d.ts.map +1 -1
  442. package/dist/server/src/services/utils/populate.d.ts +3 -1
  443. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  444. package/dist/server/src/services/utils/store.d.ts.map +1 -1
  445. package/dist/server/src/utils/index.d.ts.map +1 -1
  446. package/dist/server/src/validation/policies/hasPermissions.d.ts +1 -1
  447. package/dist/server/src/validation/zod.d.ts +1 -1
  448. package/dist/server/src/validation/zod.d.ts.map +1 -1
  449. package/dist/shared/contracts/collection-types.d.ts +4 -1
  450. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  451. package/dist/shared/contracts/single-types.d.ts +4 -1
  452. package/dist/shared/contracts/single-types.d.ts.map +1 -1
  453. package/package.json +10 -10
  454. package/dist/admin/preview/utils/previewScript.js +0 -1068
  455. package/dist/admin/preview/utils/previewScript.js.map +0 -1
  456. package/dist/admin/preview/utils/previewScript.mjs +0 -1066
  457. package/dist/admin/preview/utils/previewScript.mjs.map +0 -1
  458. package/dist/admin/src/preview/utils/previewScript.d.ts +0 -32
@@ -3,10 +3,15 @@
3
3
  var clone = require('lodash/clone');
4
4
  var toPath = require('lodash/toPath');
5
5
 
6
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
7
+
8
+ var clone__default = /*#__PURE__*/_interopDefault(clone);
9
+ var toPath__default = /*#__PURE__*/_interopDefault(toPath);
10
+
6
11
  /**
7
12
  * Deeply get a value from an object via its path.
8
13
  */ function getIn(obj, key, def, pathStartIndex = 0) {
9
- const path = toPath(key);
14
+ const path = toPath__default.default(key);
10
15
  while(obj && pathStartIndex < path.length){
11
16
  obj = obj[path[pathStartIndex++]];
12
17
  }
@@ -42,15 +47,15 @@ var toPath = require('lodash/toPath');
42
47
  * @see https://github.com/developit/linkstate
43
48
  * @see https://github.com/jaredpalmer/formik/pull/123
44
49
  */ function setIn(obj, path, value) {
45
- const res = clone(obj); // this keeps inheritance when obj is a class
50
+ const res = clone__default.default(obj); // this keeps inheritance when obj is a class
46
51
  let resVal = res;
47
52
  let i = 0;
48
- const pathArray = toPath(path);
53
+ const pathArray = toPath__default.default(path);
49
54
  for(; i < pathArray.length - 1; i++){
50
55
  const currentPath = pathArray[i];
51
56
  const currentObj = getIn(obj, pathArray.slice(0, i + 1));
52
57
  if (currentObj && (isObject(currentObj) || Array.isArray(currentObj))) {
53
- resVal = resVal[currentPath] = clone(currentObj);
58
+ resVal = resVal[currentPath] = clone__default.default(currentObj);
54
59
  } else {
55
60
  const nextPath = pathArray[i + 1];
56
61
  resVal = resVal[currentPath] = isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};
@@ -1 +1 @@
1
- {"version":3,"file":"objects.js","sources":["../../../admin/src/utils/objects.ts"],"sourcesContent":["import clone from 'lodash/clone';\nimport toPath from 'lodash/toPath';\n\n/**\n * Deeply get a value from an object via its path.\n */\nexport function getIn(obj: any, key: string | string[], def?: any, pathStartIndex: number = 0) {\n const path = toPath(key);\n while (obj && pathStartIndex < path.length) {\n obj = obj[path[pathStartIndex++]];\n }\n\n // check if path is not in the end\n if (pathStartIndex !== path.length && !obj) {\n return def;\n }\n\n return obj === undefined ? def : obj;\n}\n\n/** @internal is the given object an Object? */\nexport const isObject = (obj: any): obj is object =>\n obj !== null && typeof obj === 'object' && !Array.isArray(obj);\n\n/** @internal is the given object an integer? */\nexport const isInteger = (obj: any): boolean => String(Math.floor(Number(obj))) === obj;\n\n/**\n * Deeply set a value from in object via its path. If the value at `path`\n * has changed, return a shallow copy of obj with `value` set at `path`.\n * If `value` has not changed, return the original `obj`.\n *\n * Existing objects / arrays along `path` are also shallow copied. Sibling\n * objects along path retain the same internal js reference. Since new\n * objects / arrays are only created along `path`, we can test if anything\n * changed in a nested structure by comparing the object's reference in\n * the old and new object, similar to how russian doll cache invalidation\n * works.\n *\n * In earlier versions of this function, which used cloneDeep, there were\n * issues whereby settings a nested value would mutate the parent\n * instead of creating a new object. `clone` avoids that bug making a\n * shallow copy of the objects along the update path\n * so no object is mutated in place.\n *\n * Before changing this function, please read through the following\n * discussions.\n *\n * @see https://github.com/developit/linkstate\n * @see https://github.com/jaredpalmer/formik/pull/123\n */\nexport function setIn(obj: any, path: string, value: any): any {\n const res: any = clone(obj); // this keeps inheritance when obj is a class\n let resVal: any = res;\n let i = 0;\n const pathArray = toPath(path);\n\n for (; i < pathArray.length - 1; i++) {\n const currentPath: string = pathArray[i];\n const currentObj: any = getIn(obj, pathArray.slice(0, i + 1));\n\n if (currentObj && (isObject(currentObj) || Array.isArray(currentObj))) {\n resVal = resVal[currentPath] = clone(currentObj);\n } else {\n const nextPath: string = pathArray[i + 1];\n resVal = resVal[currentPath] = isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};\n }\n }\n\n // Return original object if new value is the same as current\n if ((i === 0 ? obj : resVal)[pathArray[i]] === value) {\n return obj;\n }\n\n if (value === undefined) {\n delete resVal[pathArray[i]];\n } else {\n resVal[pathArray[i]] = value;\n }\n\n // If the path array has a single element, the loop did not run.\n // Deleting on `resVal` had no effect in this scenario, so we delete on the result instead.\n if (i === 0 && value === undefined) {\n delete res[pathArray[i]];\n }\n\n return res;\n}\n"],"names":["getIn","obj","key","def","pathStartIndex","path","toPath","length","undefined","isObject","Array","isArray","isInteger","String","Math","floor","Number","setIn","value","res","clone","resVal","i","pathArray","currentPath","currentObj","slice","nextPath"],"mappings":";;;;;AAGA;;IAGO,SAASA,KAAAA,CAAMC,GAAQ,EAAEC,GAAsB,EAAEC,GAAS,EAAEC,cAAAA,GAAyB,CAAC,EAAA;AAC3F,IAAA,MAAMC,OAAOC,MAAAA,CAAOJ,GAAAA,CAAAA;AACpB,IAAA,MAAOD,GAAAA,IAAOG,cAAAA,GAAiBC,IAAAA,CAAKE,MAAM,CAAE;AAC1CN,QAAAA,GAAAA,GAAMA,GAAG,CAACI,IAAI,CAACD,iBAAiB,CAAC;AACnC,IAAA;;AAGA,IAAA,IAAIA,cAAAA,KAAmBC,IAAAA,CAAKE,MAAM,IAAI,CAACN,GAAAA,EAAK;QAC1C,OAAOE,GAAAA;AACT,IAAA;IAEA,OAAOF,GAAAA,KAAQO,YAAYL,GAAAA,GAAMF,GAAAA;AACnC;AAEA,gDACO,MAAMQ,QAAAA,GAAW,CAACR,GAAAA,GACvBA,GAAAA,KAAQ,IAAA,IAAQ,OAAOA,QAAQ,QAAA,IAAY,CAACS,KAAAA,CAAMC,OAAO,CAACV,GAAAA;AAE5D,iDACO,MAAMW,SAAAA,GAAY,CAACX,GAAAA,GAAsBY,MAAAA,CAAOC,IAAAA,CAAKC,KAAK,CAACC,MAAAA,CAAOf,GAAAA,CAAAA,CAAAA,CAAAA,KAAWA;AAEpF;;;;;;;;;;;;;;;;;;;;;;;AAuBC,IACM,SAASgB,KAAAA,CAAMhB,GAAQ,EAAEI,IAAY,EAAEa,KAAU,EAAA;IACtD,MAAMC,GAAAA,GAAWC,KAAAA,CAAMnB,GAAAA,CAAAA,CAAAA;AACvB,IAAA,IAAIoB,MAAAA,GAAcF,GAAAA;AAClB,IAAA,IAAIG,CAAAA,GAAI,CAAA;AACR,IAAA,MAAMC,YAAYjB,MAAAA,CAAOD,IAAAA,CAAAA;AAEzB,IAAA,MAAOiB,CAAAA,GAAIC,SAAAA,CAAUhB,MAAM,GAAG,GAAGe,CAAAA,EAAAA,CAAK;QACpC,MAAME,WAAAA,GAAsBD,SAAS,CAACD,CAAAA,CAAE;AACxC,QAAA,MAAMG,aAAkBzB,KAAAA,CAAMC,GAAAA,EAAKsB,UAAUG,KAAK,CAAC,GAAGJ,CAAAA,GAAI,CAAA,CAAA,CAAA;QAE1D,IAAIG,UAAAA,KAAehB,QAAAA,CAASgB,UAAAA,CAAAA,IAAef,MAAMC,OAAO,CAACc,WAAU,CAAA,EAAI;AACrEJ,YAAAA,MAAAA,GAASA,MAAM,CAACG,WAAAA,CAAY,GAAGJ,KAAAA,CAAMK,UAAAA,CAAAA;QACvC,CAAA,MAAO;AACL,YAAA,MAAME,QAAAA,GAAmBJ,SAAS,CAACD,CAAAA,GAAI,CAAA,CAAE;YACzCD,MAAAA,GAASA,MAAM,CAACG,WAAAA,CAAY,GAAGZ,SAAAA,CAAUe,QAAAA,CAAAA,IAAaX,MAAAA,CAAOW,QAAAA,CAAAA,IAAa,CAAA,GAAI,EAAE,GAAG,EAAC;AACtF,QAAA;AACF,IAAA;;AAGA,IAAA,IAAI,CAACL,CAAAA,KAAM,CAAA,GAAIrB,GAAAA,GAAMoB,MAAK,EAAGE,SAAS,CAACD,CAAAA,CAAE,CAAC,KAAKJ,KAAAA,EAAO;QACpD,OAAOjB,GAAAA;AACT,IAAA;AAEA,IAAyB;AACvB,QAAA,OAAOoB,MAAM,CAACE,SAAS,CAACD,EAAE,CAAC;IAC7B;;;IAMA,IAAIA,CAAAA,KAAM,CAAA,IAAKJ,KAAAA,KAAUV,SAAAA,EAAW;AAClC,QAAA,OAAOW,GAAG,CAACI,SAAS,CAACD,EAAE,CAAC;AAC1B,IAAA;IAEA,OAAOH,GAAAA;AACT;;;;;;;"}
1
+ {"version":3,"file":"objects.js","sources":["../../../admin/src/utils/objects.ts"],"sourcesContent":["import clone from 'lodash/clone';\nimport toPath from 'lodash/toPath';\n\n/**\n * Deeply get a value from an object via its path.\n */\nexport function getIn(obj: any, key: string | string[], def?: any, pathStartIndex: number = 0) {\n const path = toPath(key);\n while (obj && pathStartIndex < path.length) {\n obj = obj[path[pathStartIndex++]];\n }\n\n // check if path is not in the end\n if (pathStartIndex !== path.length && !obj) {\n return def;\n }\n\n return obj === undefined ? def : obj;\n}\n\n/** @internal is the given object an Object? */\nexport const isObject = (obj: any): obj is object =>\n obj !== null && typeof obj === 'object' && !Array.isArray(obj);\n\n/** @internal is the given object an integer? */\nexport const isInteger = (obj: any): boolean => String(Math.floor(Number(obj))) === obj;\n\n/**\n * Deeply set a value from in object via its path. If the value at `path`\n * has changed, return a shallow copy of obj with `value` set at `path`.\n * If `value` has not changed, return the original `obj`.\n *\n * Existing objects / arrays along `path` are also shallow copied. Sibling\n * objects along path retain the same internal js reference. Since new\n * objects / arrays are only created along `path`, we can test if anything\n * changed in a nested structure by comparing the object's reference in\n * the old and new object, similar to how russian doll cache invalidation\n * works.\n *\n * In earlier versions of this function, which used cloneDeep, there were\n * issues whereby settings a nested value would mutate the parent\n * instead of creating a new object. `clone` avoids that bug making a\n * shallow copy of the objects along the update path\n * so no object is mutated in place.\n *\n * Before changing this function, please read through the following\n * discussions.\n *\n * @see https://github.com/developit/linkstate\n * @see https://github.com/jaredpalmer/formik/pull/123\n */\nexport function setIn(obj: any, path: string, value: any): any {\n const res: any = clone(obj); // this keeps inheritance when obj is a class\n let resVal: any = res;\n let i = 0;\n const pathArray = toPath(path);\n\n for (; i < pathArray.length - 1; i++) {\n const currentPath: string = pathArray[i];\n const currentObj: any = getIn(obj, pathArray.slice(0, i + 1));\n\n if (currentObj && (isObject(currentObj) || Array.isArray(currentObj))) {\n resVal = resVal[currentPath] = clone(currentObj);\n } else {\n const nextPath: string = pathArray[i + 1];\n resVal = resVal[currentPath] = isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};\n }\n }\n\n // Return original object if new value is the same as current\n if ((i === 0 ? obj : resVal)[pathArray[i]] === value) {\n return obj;\n }\n\n if (value === undefined) {\n delete resVal[pathArray[i]];\n } else {\n resVal[pathArray[i]] = value;\n }\n\n // If the path array has a single element, the loop did not run.\n // Deleting on `resVal` had no effect in this scenario, so we delete on the result instead.\n if (i === 0 && value === undefined) {\n delete res[pathArray[i]];\n }\n\n return res;\n}\n"],"names":["getIn","obj","key","def","pathStartIndex","path","toPath","length","undefined","isObject","Array","isArray","isInteger","String","Math","floor","Number","setIn","value","res","clone","resVal","i","pathArray","currentPath","currentObj","slice","nextPath"],"mappings":";;;;;;;;;;AAGA;;IAGO,SAASA,KAAAA,CAAMC,GAAQ,EAAEC,GAAsB,EAAEC,GAAS,EAAEC,cAAAA,GAAyB,CAAC,EAAA;AAC3F,IAAA,MAAMC,OAAOC,uBAAAA,CAAOJ,GAAAA,CAAAA;AACpB,IAAA,MAAOD,GAAAA,IAAOG,cAAAA,GAAiBC,IAAAA,CAAKE,MAAM,CAAE;AAC1CN,QAAAA,GAAAA,GAAMA,GAAG,CAACI,IAAI,CAACD,iBAAiB,CAAC;AACnC,IAAA;;AAGA,IAAA,IAAIA,cAAAA,KAAmBC,IAAAA,CAAKE,MAAM,IAAI,CAACN,GAAAA,EAAK;QAC1C,OAAOE,GAAAA;AACT,IAAA;IAEA,OAAOF,GAAAA,KAAQO,YAAYL,GAAAA,GAAMF,GAAAA;AACnC;AAEA,gDACO,MAAMQ,QAAAA,GAAW,CAACR,GAAAA,GACvBA,GAAAA,KAAQ,IAAA,IAAQ,OAAOA,QAAQ,QAAA,IAAY,CAACS,KAAAA,CAAMC,OAAO,CAACV,GAAAA;AAE5D,iDACO,MAAMW,SAAAA,GAAY,CAACX,GAAAA,GAAsBY,MAAAA,CAAOC,IAAAA,CAAKC,KAAK,CAACC,MAAAA,CAAOf,GAAAA,CAAAA,CAAAA,CAAAA,KAAWA;AAEpF;;;;;;;;;;;;;;;;;;;;;;;AAuBC,IACM,SAASgB,KAAAA,CAAMhB,GAAQ,EAAEI,IAAY,EAAEa,KAAU,EAAA;IACtD,MAAMC,GAAAA,GAAWC,sBAAAA,CAAMnB,GAAAA,CAAAA,CAAAA;AACvB,IAAA,IAAIoB,MAAAA,GAAcF,GAAAA;AAClB,IAAA,IAAIG,CAAAA,GAAI,CAAA;AACR,IAAA,MAAMC,YAAYjB,uBAAAA,CAAOD,IAAAA,CAAAA;AAEzB,IAAA,MAAOiB,CAAAA,GAAIC,SAAAA,CAAUhB,MAAM,GAAG,GAAGe,CAAAA,EAAAA,CAAK;QACpC,MAAME,WAAAA,GAAsBD,SAAS,CAACD,CAAAA,CAAE;AACxC,QAAA,MAAMG,aAAkBzB,KAAAA,CAAMC,GAAAA,EAAKsB,UAAUG,KAAK,CAAC,GAAGJ,CAAAA,GAAI,CAAA,CAAA,CAAA;QAE1D,IAAIG,UAAAA,KAAehB,QAAAA,CAASgB,UAAAA,CAAAA,IAAef,MAAMC,OAAO,CAACc,WAAU,CAAA,EAAI;AACrEJ,YAAAA,MAAAA,GAASA,MAAM,CAACG,WAAAA,CAAY,GAAGJ,sBAAAA,CAAMK,UAAAA,CAAAA;QACvC,CAAA,MAAO;AACL,YAAA,MAAME,QAAAA,GAAmBJ,SAAS,CAACD,CAAAA,GAAI,CAAA,CAAE;YACzCD,MAAAA,GAASA,MAAM,CAACG,WAAAA,CAAY,GAAGZ,SAAAA,CAAUe,QAAAA,CAAAA,IAAaX,MAAAA,CAAOW,QAAAA,CAAAA,IAAa,CAAA,GAAI,EAAE,GAAG,EAAC;AACtF,QAAA;AACF,IAAA;;AAGA,IAAA,IAAI,CAACL,CAAAA,KAAM,CAAA,GAAIrB,GAAAA,GAAMoB,MAAK,EAAGE,SAAS,CAACD,CAAAA,CAAE,CAAC,KAAKJ,KAAAA,EAAO;QACpD,OAAOjB,GAAAA;AACT,IAAA;AAEA,IAAyB;AACvB,QAAA,OAAOoB,MAAM,CAACE,SAAS,CAACD,EAAE,CAAC;IAC7B;;;IAMA,IAAIA,CAAAA,KAAM,CAAA,IAAKJ,KAAAA,KAAUV,SAAAA,EAAW;AAClC,QAAA,OAAOW,GAAG,CAACI,SAAS,CAACD,EAAE,CAAC;AAC1B,IAAA;IAEA,OAAOH,GAAAA;AACT;;;;;;;"}
@@ -5,7 +5,10 @@ var pipe = require('lodash/fp/pipe');
5
5
  var yup = require('yup');
6
6
  var attributes = require('../constants/attributes.js');
7
7
 
8
- function _interopNamespaceDefault(e) {
8
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
+
10
+ function _interopNamespace(e) {
11
+ if (e && e.__esModule) return e;
9
12
  var n = Object.create(null);
10
13
  if (e) {
11
14
  Object.keys(e).forEach(function (k) {
@@ -22,7 +25,8 @@ function _interopNamespaceDefault(e) {
22
25
  return Object.freeze(n);
23
26
  }
24
27
 
25
- var yup__namespace = /*#__PURE__*/_interopNamespaceDefault(yup);
28
+ var pipe__default = /*#__PURE__*/_interopDefault(pipe);
29
+ var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
26
30
 
27
31
  const arrayValidator = (attribute, options)=>({
28
32
  message: strapiAdmin.translatedErrors.required,
@@ -76,7 +80,7 @@ const escapeRegex = (str)=>str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
76
80
  addMaxValidation,
77
81
  addRegexValidation
78
82
  ].map((fn)=>fn(attribute, options));
79
- const transformSchema = pipe(...validations);
83
+ const transformSchema = pipe__default.default(...validations);
80
84
  switch(attribute.type){
81
85
  case 'component':
82
86
  {
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sources":["../../../admin/src/utils/validation.ts"],"sourcesContent":["import { translatedErrors } from '@strapi/admin/strapi-admin';\nimport pipe from 'lodash/fp/pipe';\nimport * as yup from 'yup';\n\nimport { DOCUMENT_META_FIELDS } from '../constants/attributes';\n\nimport type { ComponentsDictionary, Schema } from '../hooks/useDocument';\nimport type { Schema as SchemaUtils } from '@strapi/types';\nimport type { ObjectShape } from 'yup/lib/object';\n\ntype AnySchema =\n | yup.StringSchema\n | yup.NumberSchema\n | yup.BooleanSchema\n | yup.DateSchema\n | yup.ArraySchema<any>\n | yup.ObjectSchema<any>;\n\n/* -------------------------------------------------------------------------------------------------\n * createYupSchema\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ValidationOptions {\n status: 'draft' | 'published' | null;\n removedAttributes?: string[];\n}\n\nconst arrayValidator = (attribute: Schema['attributes'][string], options: ValidationOptions) => ({\n message: translatedErrors.required,\n test(value: unknown) {\n if (options.status === 'draft') {\n return true;\n }\n\n if (!attribute.required) {\n return true;\n }\n\n if (!value) {\n return false;\n }\n\n if (Array.isArray(value) && value.length === 0) {\n return false;\n }\n\n return true;\n },\n});\nconst escapeRegex = (str: string) => str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n/**\n * TODO: should we create a Map to store these based on the hash of the schema?\n */\nconst createYupSchema = (\n attributes: Schema['attributes'] = {},\n components: ComponentsDictionary = {},\n options: ValidationOptions = { status: null }\n): yup.ObjectSchema<any> => {\n const createModelSchema = (\n attributes: Schema['attributes'],\n removedAttributes: string[] = []\n ): yup.ObjectSchema<any> =>\n yup\n .object()\n .shape(\n Object.entries(attributes).reduce<ObjectShape>((acc, [name, attribute]) => {\n const getNestedPathsForAttribute = (removed: string[], attrName: string): string[] => {\n const prefix = `${attrName}.`;\n // Match both numeric indices [0] and __temp_key__ values [some_key]\n const bracketRegex = new RegExp(`^${escapeRegex(attrName)}\\\\[[^\\\\]]+\\\\]\\\\.`);\n\n return removed\n .filter((p) => p.startsWith(prefix) || bracketRegex.test(p))\n .map((p) =>\n p.startsWith(prefix) ? p.slice(prefix.length) : p.replace(bracketRegex, '')\n );\n };\n\n if (DOCUMENT_META_FIELDS.includes(name)) {\n return acc;\n }\n\n if (removedAttributes?.includes(name)) {\n // If the attribute is not visible, we don't want to validate it\n return acc;\n }\n\n const nestedRemoved = getNestedPathsForAttribute(removedAttributes, name);\n\n /**\n * These validations won't apply to every attribute\n * and that's okay, in that case we just return the\n * schema as it was passed.\n */\n const validations = [\n addNullableValidation,\n addRequiredValidation,\n addMinLengthValidation,\n addMaxLengthValidation,\n addMinValidation,\n addMaxValidation,\n addRegexValidation,\n ].map((fn) => fn(attribute, options));\n\n const transformSchema = pipe(...validations);\n\n switch (attribute.type) {\n case 'component': {\n const { attributes } = components[attribute.component];\n\n if (attribute.repeatable) {\n return {\n ...acc,\n [name]: transformSchema(\n yup.array().of(createModelSchema(attributes, nestedRemoved).nullable(false))\n ).test(arrayValidator(attribute, options)),\n };\n } else {\n return {\n ...acc,\n [name]: transformSchema(createModelSchema(attributes, nestedRemoved).nullable()),\n };\n }\n }\n case 'dynamiczone':\n return {\n ...acc,\n [name]: transformSchema(\n yup.array().of(\n yup.lazy(\n (\n data: SchemaUtils.Attribute.Value<SchemaUtils.Attribute.DynamicZone>[number]\n ) => {\n const attributes = components?.[data?.__component]?.attributes;\n\n const validation = yup\n .object()\n .shape({\n __component: yup.string().required().oneOf(Object.keys(components)),\n })\n .nullable(false);\n if (!attributes) {\n return validation;\n }\n\n return validation.concat(createModelSchema(attributes, nestedRemoved));\n }\n ) as unknown as yup.ObjectSchema<any>\n )\n ).test(arrayValidator(attribute, options)),\n };\n case 'relation':\n return {\n ...acc,\n [name]: transformSchema(\n yup.lazy((value) => {\n if (!value) {\n return yup.mixed().nullable(true);\n } else if (Array.isArray(value)) {\n // If a relation value is an array, we expect\n // an array of objects with {id} properties, representing the related entities.\n return yup.array().of(\n yup.object().shape({\n id: yup.number().required(),\n })\n );\n } else if (typeof value === 'object') {\n // A realtion value can also be an object. Some API\n // repsonses return the number of entities in the relation\n // as { count: x }\n return yup.object();\n } else {\n return yup\n .mixed()\n .test(\n 'type-error',\n 'Relation values must be either null, an array of objects with {id} or an object.',\n () => false\n );\n }\n })\n ),\n };\n default:\n return {\n ...acc,\n [name]: transformSchema(createAttributeSchema(attribute)),\n };\n }\n }, {})\n )\n /**\n * TODO: investigate why an undefined object fails a check of `nullable`.\n */\n .default(null);\n\n return createModelSchema(attributes, options.removedAttributes);\n};\n\nconst createAttributeSchema = (\n attribute: Exclude<\n SchemaUtils.Attribute.AnyAttribute,\n { type: 'dynamiczone' } | { type: 'component' } | { type: 'relation' }\n >\n) => {\n switch (attribute.type) {\n case 'biginteger':\n return yup.string().matches(/^-?\\d*$/);\n case 'boolean':\n return yup.boolean().nullable();\n case 'blocks':\n return yup.mixed().test('isBlocks', translatedErrors.json, (value) => {\n if (!value || Array.isArray(value)) {\n return true;\n } else {\n return false;\n }\n });\n case 'decimal':\n case 'float':\n case 'integer':\n return yup.number();\n case 'email':\n return yup.string().email(translatedErrors.email);\n case 'enumeration':\n return yup.string().oneOf([...attribute.enum, null]);\n case 'json':\n return yup.mixed().test('isJSON', translatedErrors.json, (value) => {\n /**\n * We don't want to validate the JSON field if it's empty.\n */\n if (!value || (typeof value === 'string' && value.length === 0)) {\n return true;\n }\n\n // If the value was created via content API and wasn't changed, then it's still an object\n if (typeof value === 'object') {\n try {\n JSON.stringify(value);\n return true;\n } catch (err) {\n return false;\n }\n }\n\n try {\n JSON.parse(value);\n\n return true;\n } catch (err) {\n return false;\n }\n });\n case 'password':\n return yup.string().nullable();\n case 'richtext':\n case 'string':\n case 'text':\n return yup.string();\n case 'uid':\n return yup\n .string()\n .matches(attribute.regex ? new RegExp(attribute.regex) : /^[A-Za-z0-9-_.~]*$/);\n default:\n /**\n * This allows any value.\n */\n return yup.mixed();\n }\n};\n\n// Helper function to return schema.nullable() if it exists, otherwise return schema\nconst nullableSchema = <TSchema extends AnySchema>(schema: TSchema) => {\n return schema?.nullable\n ? schema.nullable()\n : // In some cases '.nullable' will not be available on the schema.\n // e.g. when the schema has been built using yup.lazy (e.g. for relations).\n // In these cases we should just return the schema as it is.\n schema;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Validators\n * -----------------------------------------------------------------------------------------------*/\n/**\n * Our validator functions can be preped with the\n * attribute and then have the schema piped through them.\n */\ntype ValidationFn = (\n attribute: Schema['attributes'][string],\n options: ValidationOptions\n) => <TSchema extends AnySchema>(schema: TSchema) => TSchema;\n\nconst addNullableValidation: ValidationFn = () => (schema) => {\n return nullableSchema(schema);\n};\n\nconst addRequiredValidation: ValidationFn = (attribute, options) => (schema) => {\n if (options.status === 'draft' || !attribute.required || attribute.type === 'password') {\n return schema;\n }\n\n if (attribute.required && 'required' in schema) {\n return schema.required(translatedErrors.required);\n }\n\n return schema;\n};\n\nconst addMinLengthValidation: ValidationFn =\n (attribute, options) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n // Skip minLength validation for draft\n if (options.status === 'draft') {\n return schema;\n }\n\n if (\n 'minLength' in attribute &&\n attribute.minLength &&\n Number.isInteger(attribute.minLength) &&\n 'min' in schema\n ) {\n return schema.min(attribute.minLength, {\n ...translatedErrors.minLength,\n values: {\n min: attribute.minLength,\n },\n }) as TSchema;\n }\n\n return schema;\n };\n\nconst addMaxLengthValidation: ValidationFn =\n (attribute) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n if (\n 'maxLength' in attribute &&\n attribute.maxLength &&\n Number.isInteger(attribute.maxLength) &&\n 'max' in schema\n ) {\n return schema.max(attribute.maxLength, {\n ...translatedErrors.maxLength,\n values: {\n max: attribute.maxLength,\n },\n }) as TSchema;\n }\n\n return schema;\n };\n\nconst addMinValidation: ValidationFn =\n (attribute, options) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n if (options.status === 'draft') {\n return schema;\n }\n\n if ('min' in attribute && 'min' in schema) {\n const min = toInteger(attribute.min);\n\n if (min !== undefined) {\n return schema.min(min, {\n ...translatedErrors.min,\n values: {\n min,\n },\n }) as TSchema;\n }\n }\n\n return schema;\n };\n\nconst addMaxValidation: ValidationFn =\n (attribute) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n if ('max' in attribute) {\n const max = toInteger(attribute.max);\n\n if ('max' in schema && max !== undefined) {\n return schema.max(max, {\n ...translatedErrors.max,\n values: {\n max,\n },\n }) as TSchema;\n }\n }\n\n return schema;\n };\n\nconst toInteger = (val?: string | number): number | undefined => {\n if (typeof val === 'number' || val === undefined) {\n return val;\n } else {\n const num = Number(val);\n return isNaN(num) ? undefined : num;\n }\n};\n\nconst addRegexValidation: ValidationFn =\n (attribute) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n if ('regex' in attribute && attribute.regex && 'matches' in schema) {\n return schema.matches(new RegExp(attribute.regex), {\n message: {\n id: translatedErrors.regex.id,\n defaultMessage: 'The value does not match the defined pattern.',\n },\n\n excludeEmptyString: !attribute.required,\n }) as TSchema;\n }\n\n return schema;\n };\n\nexport { createYupSchema };\n"],"names":["arrayValidator","attribute","options","message","translatedErrors","required","test","value","status","Array","isArray","length","escapeRegex","str","replace","createYupSchema","attributes","components","createModelSchema","removedAttributes","yup","object","shape","Object","entries","reduce","acc","name","getNestedPathsForAttribute","removed","attrName","prefix","bracketRegex","RegExp","filter","p","startsWith","map","slice","DOCUMENT_META_FIELDS","includes","nestedRemoved","validations","addNullableValidation","addRequiredValidation","addMinLengthValidation","addMaxLengthValidation","addMinValidation","addMaxValidation","addRegexValidation","fn","transformSchema","pipe","type","component","repeatable","array","of","nullable","lazy","data","__component","validation","string","oneOf","keys","concat","mixed","id","number","createAttributeSchema","default","matches","boolean","json","email","enum","JSON","stringify","err","parse","regex","nullableSchema","schema","minLength","Number","isInteger","min","values","maxLength","max","toInteger","undefined","val","num","isNaN","defaultMessage","excludeEmptyString"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,MAAMA,cAAAA,GAAiB,CAACC,SAAAA,EAAyCC,OAAAA,IAAgC;AAC/FC,QAAAA,OAAAA,EAASC,6BAAiBC,QAAQ;AAClCC,QAAAA,IAAAA,CAAAA,CAAKC,KAAc,EAAA;YACjB,IAAIL,OAAAA,CAAQM,MAAM,KAAK,OAAA,EAAS;gBAC9B,OAAO,IAAA;AACT,YAAA;YAEA,IAAI,CAACP,SAAAA,CAAUI,QAAQ,EAAE;gBACvB,OAAO,IAAA;AACT,YAAA;AAEA,YAAA,IAAI,CAACE,KAAAA,EAAO;gBACV,OAAO,KAAA;AACT,YAAA;AAEA,YAAA,IAAIE,MAAMC,OAAO,CAACH,UAAUA,KAAAA,CAAMI,MAAM,KAAK,CAAA,EAAG;gBAC9C,OAAO,KAAA;AACT,YAAA;YAEA,OAAO,IAAA;AACT,QAAA;KACF,CAAA;AACA,MAAMC,cAAc,CAACC,GAAAA,GAAgBA,GAAAA,CAAIC,OAAO,CAAC,qBAAA,EAAuB,MAAA,CAAA;AACxE;;IAGA,MAAMC,eAAAA,GAAkB,CACtBC,YAAAA,GAAmC,EAAE,EACrCC,UAAAA,GAAmC,EAAE,EACrCf,OAAAA,GAA6B;IAAEM,MAAAA,EAAQ;AAAK,CAAC,GAAA;IAE7C,MAAMU,iBAAAA,GAAoB,CACxBF,YAAAA,EACAG,iBAAAA,GAA8B,EAAE,GAEhCC,cAAAA,CACGC,MAAM,EAAA,CACNC,KAAK,CACJC,MAAAA,CAAOC,OAAO,CAACR,YAAAA,CAAAA,CAAYS,MAAM,CAAc,CAACC,GAAAA,EAAK,CAACC,IAAAA,EAAM1B,SAAAA,CAAU,GAAA;YACpE,MAAM2B,0BAAAA,GAA6B,CAACC,OAAAA,EAAmBC,QAAAA,GAAAA;AACrD,gBAAA,MAAMC,MAAAA,GAAS,CAAA,EAAGD,QAAAA,CAAS,CAAC,CAAC;;gBAE7B,MAAME,YAAAA,GAAe,IAAIC,MAAAA,CAAO,CAAC,CAAC,EAAErB,WAAAA,CAAYkB,QAAAA,CAAAA,CAAU,gBAAgB,CAAC,CAAA;AAE3E,gBAAA,OAAOD,OAAAA,CACJK,MAAM,CAAC,CAACC,CAAAA,GAAMA,CAAAA,CAAEC,UAAU,CAACL,MAAAA,CAAAA,IAAWC,YAAAA,CAAa1B,IAAI,CAAC6B,IACxDE,GAAG,CAAC,CAACF,CAAAA,GACJA,CAAAA,CAAEC,UAAU,CAACL,MAAAA,CAAAA,GAAUI,CAAAA,CAAEG,KAAK,CAACP,MAAAA,CAAOpB,MAAM,CAAA,GAAIwB,CAAAA,CAAErB,OAAO,CAACkB,YAAAA,EAAc,EAAA,CAAA,CAAA;AAE9E,YAAA,CAAA;YAEA,IAAIO,+BAAAA,CAAqBC,QAAQ,CAACb,IAAAA,CAAAA,EAAO;gBACvC,OAAOD,GAAAA;AACT,YAAA;YAEA,IAAIP,iBAAAA,EAAmBqB,SAASb,IAAAA,CAAAA,EAAO;;gBAErC,OAAOD,GAAAA;AACT,YAAA;YAEA,MAAMe,aAAAA,GAAgBb,2BAA2BT,iBAAAA,EAAmBQ,IAAAA,CAAAA;AAEpE;;;;AAIC,cACD,MAAMe,WAAAA,GAAc;AAClBC,gBAAAA,qBAAAA;AACAC,gBAAAA,qBAAAA;AACAC,gBAAAA,sBAAAA;AACAC,gBAAAA,sBAAAA;AACAC,gBAAAA,gBAAAA;AACAC,gBAAAA,gBAAAA;AACAC,gBAAAA;AACD,aAAA,CAACZ,GAAG,CAAC,CAACa,EAAAA,GAAOA,GAAGjD,SAAAA,EAAWC,OAAAA,CAAAA,CAAAA;AAE5B,YAAA,MAAMiD,kBAAkBC,IAAAA,CAAAA,GAAQV,WAAAA,CAAAA;AAEhC,YAAA,OAAQzC,UAAUoD,IAAI;gBACpB,KAAK,WAAA;AAAa,oBAAA;wBAChB,MAAM,EAAErC,UAAU,EAAE,GAAGC,UAAU,CAAChB,SAAAA,CAAUqD,SAAS,CAAC;wBAEtD,IAAIrD,SAAAA,CAAUsD,UAAU,EAAE;4BACxB,OAAO;AACL,gCAAA,GAAG7B,GAAG;AACN,gCAAA,CAACC,OAAOwB,eAAAA,CACN/B,cAAAA,CAAIoC,KAAK,GAAGC,EAAE,CAACvC,iBAAAA,CAAkBF,UAAAA,EAAYyB,eAAeiB,QAAQ,CAAC,SACrEpD,IAAI,CAACN,eAAeC,SAAAA,EAAWC,OAAAA,CAAAA;AACnC,6BAAA;wBACF,CAAA,MAAO;4BACL,OAAO;AACL,gCAAA,GAAGwB,GAAG;AACN,gCAAA,CAACC,OAAOwB,eAAAA,CAAgBjC,iBAAAA,CAAkBF,UAAAA,EAAYyB,eAAeiB,QAAQ,EAAA;AAC/E,6BAAA;AACF,wBAAA;AACF,oBAAA;gBACA,KAAK,aAAA;oBACH,OAAO;AACL,wBAAA,GAAGhC,GAAG;wBACN,CAACC,IAAAA,GAAOwB,eAAAA,CACN/B,cAAAA,CAAIoC,KAAK,EAAA,CAAGC,EAAE,CACZrC,cAAAA,CAAIuC,IAAI,CACN,CACEC,IAAAA,GAAAA;AAEA,4BAAA,MAAM5C,UAAAA,GAAaC,UAAAA,GAAa2C,IAAAA,EAAMC,YAAY,EAAE7C,UAAAA;AAEpD,4BAAA,MAAM8C,UAAAA,GAAa1C,cAAAA,CAChBC,MAAM,EAAA,CACNC,KAAK,CAAC;gCACLuC,WAAAA,EAAazC,cAAAA,CAAI2C,MAAM,EAAA,CAAG1D,QAAQ,GAAG2D,KAAK,CAACzC,MAAAA,CAAO0C,IAAI,CAAChD,UAAAA,CAAAA;AACzD,6BAAA,CAAA,CACCyC,QAAQ,CAAC,KAAA,CAAA;AACZ,4BAAA,IAAI,CAAC1C,UAAAA,EAAY;gCACf,OAAO8C,UAAAA;AACT,4BAAA;AAEA,4BAAA,OAAOA,UAAAA,CAAWI,MAAM,CAAChD,iBAAAA,CAAkBF,UAAAA,EAAYyB,aAAAA,CAAAA,CAAAA;wBACzD,CAAA,CAAA,CAAA,CAAA,CAGJnC,IAAI,CAACN,cAAAA,CAAeC,SAAAA,EAAWC,OAAAA,CAAAA;AACnC,qBAAA;gBACF,KAAK,UAAA;oBACH,OAAO;AACL,wBAAA,GAAGwB,GAAG;AACN,wBAAA,CAACC,OAAOwB,eAAAA,CACN/B,cAAAA,CAAIuC,IAAI,CAAC,CAACpD,KAAAA,GAAAA;AACR,4BAAA,IAAI,CAACA,KAAAA,EAAO;AACV,gCAAA,OAAOa,cAAAA,CAAI+C,KAAK,EAAA,CAAGT,QAAQ,CAAC,IAAA,CAAA;AAC9B,4BAAA,CAAA,MAAO,IAAIjD,KAAAA,CAAMC,OAAO,CAACH,KAAAA,CAAAA,EAAQ;;;gCAG/B,OAAOa,cAAAA,CAAIoC,KAAK,EAAA,CAAGC,EAAE,CACnBrC,cAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;oCACjB8C,EAAAA,EAAIhD,cAAAA,CAAIiD,MAAM,EAAA,CAAGhE,QAAQ;AAC3B,iCAAA,CAAA,CAAA;4BAEJ,CAAA,MAAO,IAAI,OAAOE,KAAAA,KAAU,QAAA,EAAU;;;;AAIpC,gCAAA,OAAOa,eAAIC,MAAM,EAAA;4BACnB,CAAA,MAAO;AACL,gCAAA,OAAOD,eACJ+C,KAAK,EAAA,CACL7D,IAAI,CACH,YAAA,EACA,oFACA,IAAM,KAAA,CAAA;AAEZ,4BAAA;AACF,wBAAA,CAAA,CAAA;AAEJ,qBAAA;AACF,gBAAA;oBACE,OAAO;AACL,wBAAA,GAAGoB,GAAG;wBACN,CAACC,IAAAA,GAAOwB,eAAAA,CAAgBmB,qBAAAA,CAAsBrE,SAAAA,CAAAA;AAChD,qBAAA;AACJ;AACF,QAAA,CAAA,EAAG,EAAC,CAAA,CAEN;;AAEC,WACAsE,OAAO,CAAC,IAAA,CAAA;IAEb,OAAOrD,iBAAAA,CAAkBF,YAAAA,EAAYd,OAAAA,CAAQiB,iBAAiB,CAAA;AAChE;AAEA,MAAMmD,wBAAwB,CAC5BrE,SAAAA,GAAAA;AAKA,IAAA,OAAQA,UAAUoD,IAAI;QACpB,KAAK,YAAA;AACH,YAAA,OAAOjC,cAAAA,CAAI2C,MAAM,EAAA,CAAGS,OAAO,CAAC,SAAA,CAAA;QAC9B,KAAK,SAAA;YACH,OAAOpD,cAAAA,CAAIqD,OAAO,EAAA,CAAGf,QAAQ,EAAA;QAC/B,KAAK,QAAA;YACH,OAAOtC,cAAAA,CAAI+C,KAAK,EAAA,CAAG7D,IAAI,CAAC,UAAA,EAAYF,4BAAAA,CAAiBsE,IAAI,EAAE,CAACnE,KAAAA,GAAAA;AAC1D,gBAAA,IAAI,CAACA,KAAAA,IAASE,KAAAA,CAAMC,OAAO,CAACH,KAAAA,CAAAA,EAAQ;oBAClC,OAAO,IAAA;gBACT,CAAA,MAAO;oBACL,OAAO,KAAA;AACT,gBAAA;AACF,YAAA,CAAA,CAAA;QACF,KAAK,SAAA;QACL,KAAK,OAAA;QACL,KAAK,SAAA;AACH,YAAA,OAAOa,eAAIiD,MAAM,EAAA;QACnB,KAAK,OAAA;AACH,YAAA,OAAOjD,eAAI2C,MAAM,EAAA,CAAGY,KAAK,CAACvE,6BAAiBuE,KAAK,CAAA;QAClD,KAAK,aAAA;AACH,YAAA,OAAOvD,cAAAA,CAAI2C,MAAM,EAAA,CAAGC,KAAK,CAAC;AAAI/D,gBAAAA,GAAAA,SAAAA,CAAU2E,IAAI;AAAE,gBAAA;AAAK,aAAA,CAAA;QACrD,KAAK,MAAA;YACH,OAAOxD,cAAAA,CAAI+C,KAAK,EAAA,CAAG7D,IAAI,CAAC,QAAA,EAAUF,4BAAAA,CAAiBsE,IAAI,EAAE,CAACnE,KAAAA,GAAAA;AACxD;;YAGA,IAAI,CAACA,KAAAA,IAAU,OAAOA,UAAU,QAAA,IAAYA,KAAAA,CAAMI,MAAM,KAAK,CAAA,EAAI;oBAC/D,OAAO,IAAA;AACT,gBAAA;;gBAGA,IAAI,OAAOJ,UAAU,QAAA,EAAU;oBAC7B,IAAI;AACFsE,wBAAAA,IAAAA,CAAKC,SAAS,CAACvE,KAAAA,CAAAA;wBACf,OAAO,IAAA;AACT,oBAAA,CAAA,CAAE,OAAOwE,GAAAA,EAAK;wBACZ,OAAO,KAAA;AACT,oBAAA;AACF,gBAAA;gBAEA,IAAI;AACFF,oBAAAA,IAAAA,CAAKG,KAAK,CAACzE,KAAAA,CAAAA;oBAEX,OAAO,IAAA;AACT,gBAAA,CAAA,CAAE,OAAOwE,GAAAA,EAAK;oBACZ,OAAO,KAAA;AACT,gBAAA;AACF,YAAA,CAAA,CAAA;QACF,KAAK,UAAA;YACH,OAAO3D,cAAAA,CAAI2C,MAAM,EAAA,CAAGL,QAAQ,EAAA;QAC9B,KAAK,UAAA;QACL,KAAK,QAAA;QACL,KAAK,MAAA;AACH,YAAA,OAAOtC,eAAI2C,MAAM,EAAA;QACnB,KAAK,KAAA;AACH,YAAA,OAAO3C,cAAAA,CACJ2C,MAAM,EAAA,CACNS,OAAO,CAACvE,SAAAA,CAAUgF,KAAK,GAAG,IAAIhD,MAAAA,CAAOhC,SAAAA,CAAUgF,KAAK,CAAA,GAAI,oBAAA,CAAA;AAC7D,QAAA;AACE;;UAGA,OAAO7D,eAAI+C,KAAK,EAAA;AACpB;AACF,CAAA;AAEA;AACA,MAAMe,iBAAiB,CAA4BC,MAAAA,GAAAA;AACjD,IAAA,OAAOA,MAAAA,EAAQzB,QAAAA,GACXyB,MAAAA,CAAOzB,QAAQ;;AAIfyB,IAAAA,MAAAA;AACN,CAAA;AAcA,MAAMxC,qBAAAA,GAAsC,IAAM,CAACwC,MAAAA,GAAAA;AACjD,QAAA,OAAOD,cAAAA,CAAeC,MAAAA,CAAAA;AACxB,IAAA,CAAA;AAEA,MAAMvC,qBAAAA,GAAsC,CAAC3C,SAAAA,EAAWC,OAAAA,GAAY,CAACiF,MAAAA,GAAAA;QACnE,IAAIjF,OAAAA,CAAQM,MAAM,KAAK,OAAA,IAAW,CAACP,SAAAA,CAAUI,QAAQ,IAAIJ,SAAAA,CAAUoD,IAAI,KAAK,UAAA,EAAY;YACtF,OAAO8B,MAAAA;AACT,QAAA;AAEA,QAAA,IAAIlF,SAAAA,CAAUI,QAAQ,IAAI,UAAA,IAAc8E,MAAAA,EAAQ;AAC9C,YAAA,OAAOA,MAAAA,CAAO9E,QAAQ,CAACD,4BAAAA,CAAiBC,QAAQ,CAAA;AAClD,QAAA;QAEA,OAAO8E,MAAAA;AACT,IAAA,CAAA;AAEA,MAAMtC,sBAAAA,GACJ,CAAC5C,SAAAA,EAAWC,OAAAA,GACZ,CAA4BiF,MAAAA,GAAAA;;QAE1B,IAAIjF,OAAAA,CAAQM,MAAM,KAAK,OAAA,EAAS;YAC9B,OAAO2E,MAAAA;AACT,QAAA;AAEA,QAAA,IACE,WAAA,IAAelF,SAAAA,IACfA,SAAAA,CAAUmF,SAAS,IACnBC,MAAAA,CAAOC,SAAS,CAACrF,SAAAA,CAAUmF,SAAS,CAAA,IACpC,KAAA,IAASD,MAAAA,EACT;AACA,YAAA,OAAOA,MAAAA,CAAOI,GAAG,CAACtF,SAAAA,CAAUmF,SAAS,EAAE;AACrC,gBAAA,GAAGhF,6BAAiBgF,SAAS;gBAC7BI,MAAAA,EAAQ;AACND,oBAAAA,GAAAA,EAAKtF,UAAUmF;AACjB;AACF,aAAA,CAAA;AACF,QAAA;QAEA,OAAOD,MAAAA;AACT,IAAA,CAAA;AAEF,MAAMrC,sBAAAA,GACJ,CAAC7C,SAAAA,GACD,CAA4BkF,MAAAA,GAAAA;AAC1B,QAAA,IACE,WAAA,IAAelF,SAAAA,IACfA,SAAAA,CAAUwF,SAAS,IACnBJ,MAAAA,CAAOC,SAAS,CAACrF,SAAAA,CAAUwF,SAAS,CAAA,IACpC,KAAA,IAASN,MAAAA,EACT;AACA,YAAA,OAAOA,MAAAA,CAAOO,GAAG,CAACzF,SAAAA,CAAUwF,SAAS,EAAE;AACrC,gBAAA,GAAGrF,6BAAiBqF,SAAS;gBAC7BD,MAAAA,EAAQ;AACNE,oBAAAA,GAAAA,EAAKzF,UAAUwF;AACjB;AACF,aAAA,CAAA;AACF,QAAA;QAEA,OAAON,MAAAA;AACT,IAAA,CAAA;AAEF,MAAMpC,gBAAAA,GACJ,CAAC9C,SAAAA,EAAWC,OAAAA,GACZ,CAA4BiF,MAAAA,GAAAA;QAC1B,IAAIjF,OAAAA,CAAQM,MAAM,KAAK,OAAA,EAAS;YAC9B,OAAO2E,MAAAA;AACT,QAAA;QAEA,IAAI,KAAA,IAASlF,SAAAA,IAAa,KAAA,IAASkF,MAAAA,EAAQ;YACzC,MAAMI,GAAAA,GAAMI,SAAAA,CAAU1F,SAAAA,CAAUsF,GAAG,CAAA;AAEnC,YAAA,IAAIA,QAAQK,SAAAA,EAAW;gBACrB,OAAOT,MAAAA,CAAOI,GAAG,CAACA,GAAAA,EAAK;AACrB,oBAAA,GAAGnF,6BAAiBmF,GAAG;oBACvBC,MAAAA,EAAQ;AACND,wBAAAA;AACF;AACF,iBAAA,CAAA;AACF,YAAA;AACF,QAAA;QAEA,OAAOJ,MAAAA;AACT,IAAA,CAAA;AAEF,MAAMnC,gBAAAA,GACJ,CAAC/C,SAAAA,GACD,CAA4BkF,MAAAA,GAAAA;AAC1B,QAAA,IAAI,SAASlF,SAAAA,EAAW;YACtB,MAAMyF,GAAAA,GAAMC,SAAAA,CAAU1F,SAAAA,CAAUyF,GAAG,CAAA;YAEnC,IAAI,KAAA,IAASP,MAAAA,IAAUO,GAAAA,KAAQE,SAAAA,EAAW;gBACxC,OAAOT,MAAAA,CAAOO,GAAG,CAACA,GAAAA,EAAK;AACrB,oBAAA,GAAGtF,6BAAiBsF,GAAG;oBACvBF,MAAAA,EAAQ;AACNE,wBAAAA;AACF;AACF,iBAAA,CAAA;AACF,YAAA;AACF,QAAA;QAEA,OAAOP,MAAAA;AACT,IAAA,CAAA;AAEF,MAAMQ,YAAY,CAACE,GAAAA,GAAAA;AACjB,IAAA,IAAI,OAAOA,GAAAA,KAAQ,QAAA,IAAYA,GAAAA,KAAQD,SAAAA,EAAW;QAChD,OAAOC,GAAAA;IACT,CAAA,MAAO;AACL,QAAA,MAAMC,MAAMT,MAAAA,CAAOQ,GAAAA,CAAAA;QACnB,OAAOE,KAAAA,CAAMD,OAAOF,SAAAA,GAAYE,GAAAA;AAClC,IAAA;AACF,CAAA;AAEA,MAAM7C,kBAAAA,GACJ,CAAChD,SAAAA,GACD,CAA4BkF,MAAAA,GAAAA;AAC1B,QAAA,IAAI,WAAWlF,SAAAA,IAAaA,SAAAA,CAAUgF,KAAK,IAAI,aAAaE,MAAAA,EAAQ;AAClE,YAAA,OAAOA,OAAOX,OAAO,CAAC,IAAIvC,MAAAA,CAAOhC,SAAAA,CAAUgF,KAAK,CAAA,EAAG;gBACjD9E,OAAAA,EAAS;oBACPiE,EAAAA,EAAIhE,4BAAAA,CAAiB6E,KAAK,CAACb,EAAE;oBAC7B4B,cAAAA,EAAgB;AAClB,iBAAA;gBAEAC,kBAAAA,EAAoB,CAAChG,UAAUI;AACjC,aAAA,CAAA;AACF,QAAA;QAEA,OAAO8E,MAAAA;AACT,IAAA,CAAA;;;;"}
1
+ {"version":3,"file":"validation.js","sources":["../../../admin/src/utils/validation.ts"],"sourcesContent":["import { translatedErrors } from '@strapi/admin/strapi-admin';\nimport pipe from 'lodash/fp/pipe';\nimport * as yup from 'yup';\n\nimport { DOCUMENT_META_FIELDS } from '../constants/attributes';\n\nimport type { ComponentsDictionary, Schema } from '../hooks/useDocument';\nimport type { Schema as SchemaUtils } from '@strapi/types';\nimport type { ObjectShape } from 'yup/lib/object';\n\ntype AnySchema =\n | yup.StringSchema\n | yup.NumberSchema\n | yup.BooleanSchema\n | yup.DateSchema\n | yup.ArraySchema<any>\n | yup.ObjectSchema<any>;\n\n/* -------------------------------------------------------------------------------------------------\n * createYupSchema\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ValidationOptions {\n status: 'draft' | 'published' | null;\n removedAttributes?: string[];\n}\n\nconst arrayValidator = (attribute: Schema['attributes'][string], options: ValidationOptions) => ({\n message: translatedErrors.required,\n test(value: unknown) {\n if (options.status === 'draft') {\n return true;\n }\n\n if (!attribute.required) {\n return true;\n }\n\n if (!value) {\n return false;\n }\n\n if (Array.isArray(value) && value.length === 0) {\n return false;\n }\n\n return true;\n },\n});\nconst escapeRegex = (str: string) => str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n/**\n * TODO: should we create a Map to store these based on the hash of the schema?\n */\nconst createYupSchema = (\n attributes: Schema['attributes'] = {},\n components: ComponentsDictionary = {},\n options: ValidationOptions = { status: null }\n): yup.ObjectSchema<any> => {\n const createModelSchema = (\n attributes: Schema['attributes'],\n removedAttributes: string[] = []\n ): yup.ObjectSchema<any> =>\n yup\n .object()\n .shape(\n Object.entries(attributes).reduce<ObjectShape>((acc, [name, attribute]) => {\n const getNestedPathsForAttribute = (removed: string[], attrName: string): string[] => {\n const prefix = `${attrName}.`;\n // Match both numeric indices [0] and __temp_key__ values [some_key]\n const bracketRegex = new RegExp(`^${escapeRegex(attrName)}\\\\[[^\\\\]]+\\\\]\\\\.`);\n\n return removed\n .filter((p) => p.startsWith(prefix) || bracketRegex.test(p))\n .map((p) =>\n p.startsWith(prefix) ? p.slice(prefix.length) : p.replace(bracketRegex, '')\n );\n };\n\n if (DOCUMENT_META_FIELDS.includes(name)) {\n return acc;\n }\n\n if (removedAttributes?.includes(name)) {\n // If the attribute is not visible, we don't want to validate it\n return acc;\n }\n\n const nestedRemoved = getNestedPathsForAttribute(removedAttributes, name);\n\n /**\n * These validations won't apply to every attribute\n * and that's okay, in that case we just return the\n * schema as it was passed.\n */\n const validations = [\n addNullableValidation,\n addRequiredValidation,\n addMinLengthValidation,\n addMaxLengthValidation,\n addMinValidation,\n addMaxValidation,\n addRegexValidation,\n ].map((fn) => fn(attribute, options));\n\n const transformSchema = pipe(...validations);\n\n switch (attribute.type) {\n case 'component': {\n const { attributes } = components[attribute.component];\n\n if (attribute.repeatable) {\n return {\n ...acc,\n [name]: transformSchema(\n yup.array().of(createModelSchema(attributes, nestedRemoved).nullable(false))\n ).test(arrayValidator(attribute, options)),\n };\n } else {\n return {\n ...acc,\n [name]: transformSchema(createModelSchema(attributes, nestedRemoved).nullable()),\n };\n }\n }\n case 'dynamiczone':\n return {\n ...acc,\n [name]: transformSchema(\n yup.array().of(\n yup.lazy(\n (\n data: SchemaUtils.Attribute.Value<SchemaUtils.Attribute.DynamicZone>[number]\n ) => {\n const attributes = components?.[data?.__component]?.attributes;\n\n const validation = yup\n .object()\n .shape({\n __component: yup.string().required().oneOf(Object.keys(components)),\n })\n .nullable(false);\n if (!attributes) {\n return validation;\n }\n\n return validation.concat(createModelSchema(attributes, nestedRemoved));\n }\n ) as unknown as yup.ObjectSchema<any>\n )\n ).test(arrayValidator(attribute, options)),\n };\n case 'relation':\n return {\n ...acc,\n [name]: transformSchema(\n yup.lazy((value) => {\n if (!value) {\n return yup.mixed().nullable(true);\n } else if (Array.isArray(value)) {\n // If a relation value is an array, we expect\n // an array of objects with {id} properties, representing the related entities.\n return yup.array().of(\n yup.object().shape({\n id: yup.number().required(),\n })\n );\n } else if (typeof value === 'object') {\n // A realtion value can also be an object. Some API\n // repsonses return the number of entities in the relation\n // as { count: x }\n return yup.object();\n } else {\n return yup\n .mixed()\n .test(\n 'type-error',\n 'Relation values must be either null, an array of objects with {id} or an object.',\n () => false\n );\n }\n })\n ),\n };\n default:\n return {\n ...acc,\n [name]: transformSchema(createAttributeSchema(attribute)),\n };\n }\n }, {})\n )\n /**\n * TODO: investigate why an undefined object fails a check of `nullable`.\n */\n .default(null);\n\n return createModelSchema(attributes, options.removedAttributes);\n};\n\nconst createAttributeSchema = (\n attribute: Exclude<\n SchemaUtils.Attribute.AnyAttribute,\n { type: 'dynamiczone' } | { type: 'component' } | { type: 'relation' }\n >\n) => {\n switch (attribute.type) {\n case 'biginteger':\n return yup.string().matches(/^-?\\d*$/);\n case 'boolean':\n return yup.boolean().nullable();\n case 'blocks':\n return yup.mixed().test('isBlocks', translatedErrors.json, (value) => {\n if (!value || Array.isArray(value)) {\n return true;\n } else {\n return false;\n }\n });\n case 'decimal':\n case 'float':\n case 'integer':\n return yup.number();\n case 'email':\n return yup.string().email(translatedErrors.email);\n case 'enumeration':\n return yup.string().oneOf([...attribute.enum, null]);\n case 'json':\n return yup.mixed().test('isJSON', translatedErrors.json, (value) => {\n /**\n * We don't want to validate the JSON field if it's empty.\n */\n if (!value || (typeof value === 'string' && value.length === 0)) {\n return true;\n }\n\n // If the value was created via content API and wasn't changed, then it's still an object\n if (typeof value === 'object') {\n try {\n JSON.stringify(value);\n return true;\n } catch (err) {\n return false;\n }\n }\n\n try {\n JSON.parse(value);\n\n return true;\n } catch (err) {\n return false;\n }\n });\n case 'password':\n return yup.string().nullable();\n case 'richtext':\n case 'string':\n case 'text':\n return yup.string();\n case 'uid':\n return yup\n .string()\n .matches(attribute.regex ? new RegExp(attribute.regex) : /^[A-Za-z0-9-_.~]*$/);\n default:\n /**\n * This allows any value.\n */\n return yup.mixed();\n }\n};\n\n// Helper function to return schema.nullable() if it exists, otherwise return schema\nconst nullableSchema = <TSchema extends AnySchema>(schema: TSchema) => {\n return schema?.nullable\n ? schema.nullable()\n : // In some cases '.nullable' will not be available on the schema.\n // e.g. when the schema has been built using yup.lazy (e.g. for relations).\n // In these cases we should just return the schema as it is.\n schema;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Validators\n * -----------------------------------------------------------------------------------------------*/\n/**\n * Our validator functions can be preped with the\n * attribute and then have the schema piped through them.\n */\ntype ValidationFn = (\n attribute: Schema['attributes'][string],\n options: ValidationOptions\n) => <TSchema extends AnySchema>(schema: TSchema) => TSchema;\n\nconst addNullableValidation: ValidationFn = () => (schema) => {\n return nullableSchema(schema);\n};\n\nconst addRequiredValidation: ValidationFn = (attribute, options) => (schema) => {\n if (options.status === 'draft' || !attribute.required || attribute.type === 'password') {\n return schema;\n }\n\n if (attribute.required && 'required' in schema) {\n return schema.required(translatedErrors.required);\n }\n\n return schema;\n};\n\nconst addMinLengthValidation: ValidationFn =\n (attribute, options) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n // Skip minLength validation for draft\n if (options.status === 'draft') {\n return schema;\n }\n\n if (\n 'minLength' in attribute &&\n attribute.minLength &&\n Number.isInteger(attribute.minLength) &&\n 'min' in schema\n ) {\n return schema.min(attribute.minLength, {\n ...translatedErrors.minLength,\n values: {\n min: attribute.minLength,\n },\n }) as TSchema;\n }\n\n return schema;\n };\n\nconst addMaxLengthValidation: ValidationFn =\n (attribute) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n if (\n 'maxLength' in attribute &&\n attribute.maxLength &&\n Number.isInteger(attribute.maxLength) &&\n 'max' in schema\n ) {\n return schema.max(attribute.maxLength, {\n ...translatedErrors.maxLength,\n values: {\n max: attribute.maxLength,\n },\n }) as TSchema;\n }\n\n return schema;\n };\n\nconst addMinValidation: ValidationFn =\n (attribute, options) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n if (options.status === 'draft') {\n return schema;\n }\n\n if ('min' in attribute && 'min' in schema) {\n const min = toInteger(attribute.min);\n\n if (min !== undefined) {\n return schema.min(min, {\n ...translatedErrors.min,\n values: {\n min,\n },\n }) as TSchema;\n }\n }\n\n return schema;\n };\n\nconst addMaxValidation: ValidationFn =\n (attribute) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n if ('max' in attribute) {\n const max = toInteger(attribute.max);\n\n if ('max' in schema && max !== undefined) {\n return schema.max(max, {\n ...translatedErrors.max,\n values: {\n max,\n },\n }) as TSchema;\n }\n }\n\n return schema;\n };\n\nconst toInteger = (val?: string | number): number | undefined => {\n if (typeof val === 'number' || val === undefined) {\n return val;\n } else {\n const num = Number(val);\n return isNaN(num) ? undefined : num;\n }\n};\n\nconst addRegexValidation: ValidationFn =\n (attribute) =>\n <TSchema extends AnySchema>(schema: TSchema): TSchema => {\n if ('regex' in attribute && attribute.regex && 'matches' in schema) {\n return schema.matches(new RegExp(attribute.regex), {\n message: {\n id: translatedErrors.regex.id,\n defaultMessage: 'The value does not match the defined pattern.',\n },\n\n excludeEmptyString: !attribute.required,\n }) as TSchema;\n }\n\n return schema;\n };\n\nexport { createYupSchema };\n"],"names":["arrayValidator","attribute","options","message","translatedErrors","required","test","value","status","Array","isArray","length","escapeRegex","str","replace","createYupSchema","attributes","components","createModelSchema","removedAttributes","yup","object","shape","Object","entries","reduce","acc","name","getNestedPathsForAttribute","removed","attrName","prefix","bracketRegex","RegExp","filter","p","startsWith","map","slice","DOCUMENT_META_FIELDS","includes","nestedRemoved","validations","addNullableValidation","addRequiredValidation","addMinLengthValidation","addMaxLengthValidation","addMinValidation","addMaxValidation","addRegexValidation","fn","transformSchema","pipe","type","component","repeatable","array","of","nullable","lazy","data","__component","validation","string","oneOf","keys","concat","mixed","id","number","createAttributeSchema","default","matches","boolean","json","email","enum","JSON","stringify","err","parse","regex","nullableSchema","schema","minLength","Number","isInteger","min","values","maxLength","max","toInteger","undefined","val","num","isNaN","defaultMessage","excludeEmptyString"],"mappings":"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"}
@@ -881,9 +881,9 @@ var collectionTypes = {
881
881
  return ctx.forbidden();
882
882
  }
883
883
  }
884
- const number = await documentManager.countDraftRelations(id, model, locale);
884
+ const counts = await documentManager.countDraftRelations(id, model, locale);
885
885
  return {
886
- data: number
886
+ data: counts
887
887
  };
888
888
  },
889
889
  async countManyEntriesDraftRelations (ctx) {
@@ -1 +1 @@
1
- {"version":3,"file":"collection-types.js","sources":["../../../server/src/controllers/collection-types.ts"],"sourcesContent":["import { isNil, omit } from 'lodash/fp';\n\nimport {\n setCreatorFields,\n async,\n contentTypes,\n errors,\n parseHasPublishedVersionQueryParam,\n hasPublishedVersionBooleanToPublicationFilterMode,\n} from '@strapi/utils';\nimport type { Modules, UID } from '@strapi/types';\n\nimport { getService } from '../utils';\nimport { validateBulkActionInput } from './validation';\nimport { getProhibitedCloningFields, excludeNotCreatableFields } from './utils/clone';\nimport { getDocumentLocaleAndStatus } from './validation/dimensions';\nimport { formatDocumentWithMetadata } from './utils/metadata';\nimport { indexByDocumentId } from './utils/document-status';\nimport { getPopulateForLocalizations, buildDeepPopulate } from '../services/utils/populate';\n\n/**\n * Returns documentIds for (documentId, locale) that have both draft and published,\n * optionally filtered by whether the draft is newer than the published row.\n * Uses strapi.documents only.\n */\nconst getDocumentIdsByDraftPublishRelation = async (\n uid: UID.ContentType,\n opts: {\n locale?: string | string[] | null;\n type: 'modified' | 'unmodified';\n }\n): Promise<string[]> => {\n const schema = strapi.getModel(uid);\n if (!contentTypes.hasDraftAndPublish(schema)) {\n return [];\n }\n\n const baseParams = {\n fields: ['documentId', 'locale', 'updatedAt'],\n page: 1,\n pageSize: 10000,\n ...(opts.locale != null &&\n opts.locale !== '*' && {\n locale: opts.locale as string,\n }),\n };\n\n const [drafts, published] = await Promise.all([\n strapi.documents(uid).findMany({ ...baseParams, status: 'draft' }),\n strapi.documents(uid).findMany({ ...baseParams, status: 'published' }),\n ]);\n\n const publishedByKey = new Map<string, { updatedAt: string }>();\n for (const p of published) {\n const key = `${p.documentId}\\t${String(p?.locale ?? '')}`;\n publishedByKey.set(key, { updatedAt: p.updatedAt as string });\n }\n\n const ids: string[] = [];\n const wantModified = opts.type === 'modified';\n for (const d of drafts) {\n const key = `${d.documentId}\\t${String(d?.locale ?? '')}`;\n const pub = publishedByKey.get(key);\n if (pub) {\n const dUpdated = d?.updatedAt ? new Date(d.updatedAt as string).getTime() : 0;\n const pUpdated = pub?.updatedAt ? new Date(pub.updatedAt).getTime() : 0;\n const isModified = dUpdated > pUpdated;\n if (isModified === wantModified) {\n ids.push(d.documentId as string);\n }\n }\n }\n return [...new Set(ids)];\n};\n\n/** Map from __status filter value to top-level query fields (mirrors client STATUS_PARAMS). */\nconst STATUS_QUERY_FROM_FILTER: Record<string, Record<string, string>> = {\n draft: { status: 'draft', publicationFilter: 'never-published-document' },\n published: { status: 'published' },\n 'published-modified': { publicationStatusFilter: 'published-modified' },\n 'published-unmodified': { publicationStatusFilter: 'published-unmodified' },\n};\n\n/**\n * Extracts __status from query.filters.$and into top-level status, publicationFilter,\n * and publicationStatusFilter so list works with either transformed params or raw filter params.\n */\nconst normalizeStatusFromFilters = (query: Record<string, unknown>): void => {\n const filters = query.filters as Record<string, unknown> | undefined;\n if (!filters?.$and || !Array.isArray(filters.$and)) return;\n\n const remainingFilters: unknown[] = [];\n const statusValues: string[] = [];\n\n for (const filter of filters.$and as Record<string, unknown>[]) {\n const eq = (filter?.__status as Record<string, unknown>)?.$eq;\n if (eq != null) {\n statusValues.push(String(eq));\n } else {\n remainingFilters.push(filter);\n }\n }\n\n if (statusValues.length === 0) return;\n\n const q = query as Record<string, unknown>;\n for (const value of statusValues) {\n const toApply = STATUS_QUERY_FROM_FILTER[value];\n if (toApply) Object.assign(q, toApply);\n }\n\n if (remainingFilters.length > 0) {\n (filters as Record<string, unknown>).$and = remainingFilters;\n } else {\n delete q.filters;\n }\n};\n\n/** Returns filters object that merges existing $and with a documentId $in filter. */\nconst mergeDocumentIdFilter = (\n existingFilters: Record<string, unknown> | undefined,\n documentIds: string[]\n): Record<string, unknown> => {\n const documentIdFilter = {\n documentId: documentIds.length > 0 ? { $in: documentIds } : { $in: [] },\n };\n let existingAnd: unknown[];\n if (existingFilters?.$and && Array.isArray(existingFilters.$and)) {\n existingAnd = existingFilters.$and;\n } else if (existingFilters && Object.keys(existingFilters).length > 0) {\n existingAnd = [existingFilters];\n } else {\n existingAnd = [];\n }\n return { $and: [...existingAnd, documentIdFilter] };\n};\n\ntype Options = Modules.Documents.Params.Pick<UID.ContentType, 'populate:object'>;\n\n/**\n * Extracts the sort direction for the 'status' field from a sort parameter.\n * Returns 'ASC', 'DESC', or null if status is not being sorted.\n *\n * The sort param can be a string ('status:ASC'), an array (['status:ASC']),\n * or an object ({ status: 'ASC' }).\n */\nconst extractStatusSortOrder = (sort: unknown): 'ASC' | 'DESC' | null => {\n if (!sort) return null;\n\n if (typeof sort === 'string') {\n const match = sort.match(/(?:^|,)\\s*status:(ASC|DESC)\\s*(?:,|$)/i);\n return match ? (match[1].toUpperCase() as 'ASC' | 'DESC') : null;\n }\n\n if (Array.isArray(sort)) {\n for (const item of sort) {\n const result = extractStatusSortOrder(item);\n if (result) return result;\n }\n return null;\n }\n\n if (typeof sort === 'object' && sort !== null && 'status' in sort) {\n const dir = String((sort as Record<string, unknown>).status).toUpperCase();\n return dir === 'ASC' || dir === 'DESC' ? dir : null;\n }\n\n return null;\n};\n\n/**\n * Removes the 'status' field from a sort parameter, returning the remainder\n * (or undefined if status was the only sort field).\n */\nconst removeStatusFromSort = (sort: unknown): unknown => {\n if (!sort) return sort;\n\n if (typeof sort === 'string') {\n const cleaned = sort\n .split(',')\n .map((s) => s.trim())\n .filter((s) => !/^status:(ASC|DESC)$/i.test(s))\n .join(',');\n return cleaned || undefined;\n }\n\n if (Array.isArray(sort)) {\n const cleaned = sort.filter((item) => extractStatusSortOrder(item) === null);\n return cleaned.length ? cleaned : undefined;\n }\n\n if (typeof sort === 'object' && sort !== null) {\n const { status: _removed, ...rest } = sort as Record<string, unknown>;\n return Object.keys(rest).length ? rest : undefined;\n }\n\n return sort;\n};\n\n/**\n * Create a new document.\n *\n * @param ctx - Koa context\n * @param opts - Options\n * @param opts.populate - Populate options of the returned document.\n * By default documentManager will populate all relations.\n */\nconst createDocument = async (ctx: any, opts?: Options) => {\n const { userAbility, user } = ctx.state;\n const { model } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n const pickPermittedFields = permissionChecker.sanitizeCreateInput;\n const setCreator = setCreatorFields({ user });\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any);\n const sanitizedBody = await sanitizeFn(body);\n\n const { locale, status } = await getDocumentLocaleAndStatus(body, model);\n\n return documentManager.create(model, {\n data: sanitizedBody as any,\n locale,\n status,\n populate: opts?.populate,\n });\n\n // TODO: Revert the creation if create permission conditions are not met\n // if (permissionChecker.cannot.create(document)) {\n // throw new errors.ForbiddenError();\n // }\n};\n\n/**\n * Update a document version.\n * - If the document version exists, it will be updated.\n * - If the document version does not exist, a new document locale will be created.\n * By default documentManager will populate all relations.\n *\n * @param ctx - Koa context\n * @param opts - Options\n * @param opts.populate - Populate options of the returned document\n */\nconst updateDocument = async (ctx: any, opts?: Options) => {\n const { userAbility, user } = ctx.state;\n const { id, model } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.update()) {\n throw new errors.ForbiddenError();\n }\n\n // Populate necessary fields to check permissions\n const permissionQuery = await permissionChecker.sanitizedQuery.update(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n // Load document version to update\n const [documentVersion, documentExists] = await Promise.all([\n documentManager.findOne(id, model, { populate, locale, status: 'draft' }),\n documentManager.exists(model, id),\n ]);\n\n if (!documentExists) {\n throw new errors.NotFoundError();\n }\n\n // If version is not found, but document exists,\n // the intent is to create a new document locale\n if (documentVersion) {\n if (permissionChecker.cannot.update(documentVersion)) {\n throw new errors.ForbiddenError();\n }\n } else if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n const pickPermittedFields = documentVersion\n ? permissionChecker.sanitizeUpdateInput(documentVersion)\n : permissionChecker.sanitizeCreateInput;\n const setCreator = documentVersion\n ? setCreatorFields({ user, isEdition: true })\n : setCreatorFields({ user });\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any);\n const sanitizedBody = await sanitizeFn(body);\n\n const updatedDocument = await documentManager.update(documentVersion?.documentId || id, model, {\n data: sanitizedBody as any,\n populate: opts?.populate,\n locale,\n });\n\n return updatedDocument;\n};\n\nexport default {\n async find(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query } = ctx.request;\n\n // Normalize so status/publicationStatusFilter are set from filters.$and.__status when present\n normalizeStatusFromFilters(query as Record<string, unknown>);\n\n const documentMetadata = getService('document-metadata');\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n // Extract and remove 'status' sort before sanitization/validation, since status\n // is not a real schema attribute and would be rejected by the permission checker.\n // It is re-added after sanitization so the DB layer can handle it via a CASE expression.\n const hasPublicationStatusFilter =\n query.status !== undefined ||\n query.hasPublishedVersion !== undefined ||\n query.publicationStatusFilter !== undefined;\n const rawStatusSortOrder = extractStatusSortOrder(query.sort);\n // Disable status sort when a publication status filter is active — all results share the\n // same status, making the sort a no-op.\n const statusSortOrder = hasPublicationStatusFilter ? null : rawStatusSortOrder;\n // Always strip 'status' from the sort before passing to the document service / permission\n // checker — it is not a real schema attribute and would be rejected by validation.\n const queryWithoutStatusSort = rawStatusSortOrder\n ? { ...query, sort: removeStatusFromSort(query.sort) }\n : query;\n\n const permissionQuery = await permissionChecker.sanitizedQuery.read(queryWithoutStatusSort);\n\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .populateDeep(1)\n .countRelations({ toOne: false, toMany: true })\n .withPopulateOverride(getPopulateForLocalizations(model))\n .build();\n\n // \"Modified\" is a UI-only filter; not a real document status. Read and strip it\n // so we never pass it to validation or the document service.\n const publicationStatusFilter = query.publicationStatusFilter;\n const queryForValidation = { ...query };\n delete queryForValidation.publicationStatusFilter;\n\n const { locale, status } = await getDocumentLocaleAndStatus(queryForValidation, model);\n\n const paramsForDocumentService = omit(['publicationStatusFilter'], permissionQuery) as Record<\n string,\n unknown\n >;\n let findPageParams: Record<string, unknown> = {\n ...paramsForDocumentService,\n populate,\n locale,\n status,\n };\n\n if (query.publicationFilter !== undefined) {\n findPageParams.publicationFilter = query.publicationFilter;\n } else {\n const legacy = parseHasPublishedVersionQueryParam(query.hasPublishedVersion);\n if (legacy !== undefined) {\n findPageParams.publicationFilter =\n hasPublishedVersionBooleanToPublicationFilterMode(legacy);\n }\n }\n\n if (\n publicationStatusFilter === 'published-modified' ||\n publicationStatusFilter === 'published-unmodified'\n ) {\n const type = publicationStatusFilter === 'published-modified' ? 'modified' : 'unmodified';\n const documentIds = await getDocumentIdsByDraftPublishRelation(model, { locale, type });\n findPageParams = {\n ...findPageParams,\n status: 'published',\n filters: mergeDocumentIdFilter(\n paramsForDocumentService.filters as Record<string, unknown> | undefined,\n documentIds\n ),\n };\n }\n\n if (statusSortOrder) {\n const s = findPageParams.sort;\n const statusSort = `status:${statusSortOrder}`;\n if (!s) {\n findPageParams.sort = statusSort;\n } else if (Array.isArray(s)) {\n findPageParams.sort = [...s, statusSort];\n } else if (typeof s === 'string') {\n findPageParams.sort = `${s},${statusSort}`;\n } else {\n findPageParams.sort = { ...(s as object), status: statusSortOrder };\n }\n }\n\n const { results: documents, pagination } = await documentManager.findPage(\n findPageParams as Parameters<typeof documentManager.findPage>[0],\n model\n );\n\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(strapi.getModel(model));\n\n const statusByDocumentId = hasDraftAndPublish\n ? indexByDocumentId(await documentMetadata.getManyAvailableStatus(model, documents))\n : new Map();\n\n const setStatus = (document: any) => {\n // Available status of document\n const availableStatuses = statusByDocumentId.get(document.documentId) || [];\n // Compute document version status\n document.status = documentMetadata.getStatus(document, availableStatuses);\n return document;\n };\n\n const results = await async.map(\n documents,\n async.pipe(permissionChecker.sanitizeOutput, setStatus)\n );\n\n ctx.body = {\n results,\n pagination,\n };\n },\n\n async findOne(ctx: any) {\n const { userAbility } = ctx.state;\n const { model, id } = ctx.params;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.read(ctx.query);\n\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .populateDeep(Infinity)\n .countRelations()\n .withPopulateOverride(getPopulateForLocalizations(model))\n .build();\n\n const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);\n\n const version = await documentManager.findOne(id, model, {\n populate,\n locale,\n status,\n });\n\n if (!version) {\n // Check if document exists\n const exists = await documentManager.exists(model, id);\n if (!exists) {\n return ctx.notFound();\n }\n\n // If the requested locale doesn't exist, return an empty response\n const { meta } = await formatDocumentWithMetadata(\n permissionChecker,\n model,\n // @ts-expect-error TODO: fix\n { documentId: id, locale, publishedAt: null },\n { availableLocales: true, availableStatus: false }\n );\n\n ctx.body = { data: {}, meta };\n\n return;\n }\n\n // if the user has condition that needs populated content, it's not applied because entity don't have relations populated\n if (permissionChecker.cannot.read(version)) {\n return ctx.forbidden();\n }\n\n // TODO: Count populated relations by permissions\n const sanitizedDocument = await permissionChecker.sanitizeOutput(version);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async create(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const [totalEntries, document] = await Promise.all([\n strapi.db.query(model).count(),\n createDocument(ctx),\n ]);\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(document);\n ctx.status = 201;\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument, {\n // Empty metadata as it's not relevant for a new document\n availableLocales: false,\n availableStatus: false,\n });\n\n if (totalEntries === 0) {\n strapi.telemetry.send('didCreateFirstContentTypeEntry', {\n eventProperties: { model },\n });\n }\n },\n\n async update(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const updatedVersion = await updateDocument(ctx);\n\n const sanitizedVersion = await permissionChecker.sanitizeOutput(updatedVersion);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedVersion);\n },\n\n async clone(ctx: any) {\n const { userAbility, user } = ctx.state;\n const { model, sourceId: id } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.create()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.create(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n const document = await documentManager.findOne(id, model, {\n populate,\n locale,\n status: 'draft',\n });\n\n if (!document) {\n return ctx.notFound();\n }\n\n const pickPermittedFields = permissionChecker.sanitizeCreateInput;\n const setCreator = setCreatorFields({ user });\n const excludeNotCreatable = excludeNotCreatableFields(model, permissionChecker);\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any, excludeNotCreatable);\n const sanitizedBody = await sanitizeFn(body);\n\n const clonedDocument = await documentManager.clone(document.documentId, sanitizedBody, model);\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(clonedDocument);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument, {\n // Empty metadata as it's not relevant for a new document\n availableLocales: false,\n availableStatus: false,\n });\n },\n\n async autoClone(ctx: any) {\n const { model } = ctx.params;\n\n // Check if the model has fields that prevent auto cloning\n const prohibitedFields = getProhibitedCloningFields(model);\n\n if (prohibitedFields.length > 0) {\n return ctx.badRequest(\n 'Entity could not be cloned as it has unique and/or relational fields. ' +\n 'Please edit those fields manually and save to complete the cloning.',\n {\n prohibitedFields,\n }\n );\n }\n\n await this.clone(ctx);\n },\n\n async delete(ctx: any) {\n const { userAbility } = ctx.state;\n const { id, model } = ctx.params;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.delete()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.delete(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(ctx.query, model);\n\n // Find locales to delete\n const documentLocales = await documentManager.findLocales(id, model, { populate, locale });\n\n if (documentLocales.length === 0) {\n return ctx.notFound();\n }\n\n for (const document of documentLocales) {\n if (permissionChecker.cannot.delete(document)) {\n return ctx.forbidden();\n }\n }\n\n const result = await documentManager.delete(id, model, { locale });\n\n ctx.body = await permissionChecker.sanitizeOutput(result);\n },\n\n /**\n * Publish a document version.\n * Supports creating/saving a document and publishing it in one request.\n */\n async publish(ctx: any) {\n const { userAbility } = ctx.state;\n // If id does not exist, the document has to be created\n const { id, model } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.publish()) {\n return ctx.forbidden();\n }\n\n const publishedDocument = await strapi.db.transaction(async () => {\n // Create or update document\n const permissionQuery = await permissionChecker.sanitizedQuery.publish(ctx.query);\n\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .populateDeep(Infinity)\n .countRelations()\n .withPopulateOverride(getPopulateForLocalizations(model))\n .build();\n\n let document: any;\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n /**\n * Publish can be called on two scenarios:\n * 1. Create a new document and publish it in one request\n * 2. Update an existing document and publish it in one request\n *\n * Based on user permissions:\n * 1. User cannot create a document, but can publish\n * Action will be forbidden as user cannot create a document\n * 2. User can update and publish a document\n * Action will be allowed, but document will not be updated, only published with the latest draft\n */\n const isCreate = isNil(id);\n if (isCreate) {\n if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n document = await createDocument(ctx, { populate });\n }\n\n const isUpdate = !isCreate;\n if (isUpdate) {\n // check if the document exists\n const documentExists = await documentManager.exists(model, id);\n\n if (!documentExists) {\n throw new errors.NotFoundError('Document not found');\n }\n\n // check the document version\n document = await documentManager.findOne(id!, model, { populate, locale });\n\n if (!document) {\n // update and publish the new version\n if (\n permissionChecker.cannot.create({ locale }) ||\n permissionChecker.cannot.publish({ locale })\n ) {\n throw new errors.ForbiddenError();\n }\n document = await updateDocument(ctx);\n } else if (permissionChecker.can.update(document)) {\n await updateDocument(ctx);\n }\n }\n\n if (permissionChecker.cannot.publish(document)) {\n throw new errors.ForbiddenError();\n }\n\n const publishResult = await documentManager.publish(document.documentId, model, {\n locale,\n // TODO: Allow setting creator fields on publish\n // data: setCreatorFields({ user, isEdition: true })({}),\n });\n\n if (!publishResult || publishResult.length === 0) {\n throw new errors.NotFoundError('Document not found or already published.');\n }\n\n return publishResult[0];\n });\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(publishedDocument);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async bulkFindForValidation(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { documentIds, locale, sort } = ctx.request.body;\n\n await validateBulkActionInput(ctx.request.body);\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const populate = await buildDeepPopulate(model as UID.CollectionType);\n\n const documents = await strapi.documents(model as UID.CollectionType).findMany({\n populate,\n filters: { documentId: { $in: documentIds } } as any,\n locale,\n sort,\n status: 'draft',\n });\n\n const results = await Promise.all(documents.map(permissionChecker.sanitizeOutput));\n\n ctx.body = { results };\n },\n\n async bulkPublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body } = ctx.request;\n const { documentIds } = body;\n\n await validateBulkActionInput(body);\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.publish()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.publish(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .populateDeep(Infinity)\n .countRelations()\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model, {\n allowMultipleLocales: true,\n });\n\n const entities = await documentManager.findLocales(documentIds, model, {\n populate,\n locale,\n isPublished: false,\n });\n\n for (const entity of entities) {\n if (!entity) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.publish(entity)) {\n return ctx.forbidden();\n }\n }\n\n const count = await documentManager.publishMany(model, documentIds, locale);\n ctx.body = { count };\n },\n\n async bulkUnpublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body } = ctx.request;\n const { documentIds } = body;\n\n await validateBulkActionInput(body);\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.unpublish()) {\n return ctx.forbidden();\n }\n\n const { locale } = await getDocumentLocaleAndStatus(body, model, {\n allowMultipleLocales: true,\n });\n\n const entities = await documentManager.findLocales(documentIds, model, {\n locale,\n isPublished: true,\n });\n\n for (const entity of entities) {\n if (!entity) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.publish(entity)) {\n return ctx.forbidden();\n }\n }\n\n const entitiesIds = entities.map((document) => document.documentId);\n\n const { count } = await documentManager.unpublishMany(entitiesIds, model, { locale });\n\n ctx.body = { count };\n },\n\n async unpublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { id, model } = ctx.params;\n const {\n body: { discardDraft, ...body },\n } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.unpublish()) {\n return ctx.forbidden();\n }\n\n if (discardDraft && permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.unpublish(ctx.query);\n\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n // TODO allow multiple locales for bulk locale unpublish\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n const document = await documentManager.findOne(id, model, {\n populate,\n locale,\n status: 'published',\n });\n\n if (!document) {\n throw new errors.NotFoundError();\n }\n\n if (permissionChecker.cannot.unpublish(document)) {\n throw new errors.ForbiddenError();\n }\n\n if (discardDraft && permissionChecker.cannot.discard(document)) {\n throw new errors.ForbiddenError();\n }\n\n await strapi.db.transaction(async () => {\n if (discardDraft) {\n await documentManager.discardDraft(document.documentId, model, { locale });\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.unpublish(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n });\n },\n\n async discard(ctx: any) {\n const { userAbility } = ctx.state;\n const { id, model } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.discard(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n const document = await documentManager.findOne(id, model, {\n populate,\n locale,\n status: 'published',\n });\n\n // Can not discard a document that is not published\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.discard(document)) {\n return ctx.forbidden();\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.discardDraft(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n },\n\n async bulkDelete(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query, body } = ctx.request;\n const { documentIds } = body;\n\n await validateBulkActionInput(body);\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.delete()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.delete(query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n const documentLocales = await documentManager.findLocales(documentIds, model, {\n populate,\n locale,\n });\n\n if (documentLocales.length === 0) {\n return ctx.notFound();\n }\n\n for (const document of documentLocales) {\n if (permissionChecker.cannot.delete(document)) {\n return ctx.forbidden();\n }\n }\n\n // We filter out documentsIds that maybe doesn't exist in a specific locale.\n // With draft & publish, findLocales returns a row per publication state, so the\n // same documentId can appear twice (draft + published). Deduplicate to avoid\n // deleting (and running document service middleware for) the same document twice.\n const localeDocumentsIds = [...new Set(documentLocales.map((document) => document.documentId))];\n\n const { count } = await documentManager.deleteMany(localeDocumentsIds, model, { locale });\n\n ctx.body = { count };\n },\n\n async countDraftRelations(ctx: any) {\n const { userAbility } = ctx.state;\n const { model, id } = ctx.params;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);\n\n if (permissionChecker.requiresEntity.read()) {\n // Only load what we need for access checks\n const permissionQuery = await permissionChecker.sanitizedQuery.read(ctx.query);\n\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const entity = await documentManager.findOne(id, model, {\n locale,\n status,\n populate,\n });\n\n if (!entity) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.read(entity)) {\n return ctx.forbidden();\n }\n }\n\n const number = await documentManager.countDraftRelations(id, model, locale);\n\n return {\n data: number,\n };\n },\n\n async countManyEntriesDraftRelations(ctx: any) {\n const { userAbility } = ctx.state;\n const ids = ctx.request.query.documentIds as string[];\n const locale = ctx.request.query.locale as string[];\n const { model } = ctx.params;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const count = await strapi.db.query(model).count({\n where: { documentId: ids },\n });\n\n if (count === 0) {\n return ctx.notFound();\n }\n\n const number = await documentManager.countManyEntriesDraftRelations(ids, model, locale);\n\n return {\n data: number,\n };\n },\n};\n"],"names":["getDocumentIdsByDraftPublishRelation","uid","opts","schema","strapi","getModel","contentTypes","hasDraftAndPublish","baseParams","fields","page","pageSize","locale","drafts","published","Promise","all","documents","findMany","status","publishedByKey","Map","p","key","documentId","String","set","updatedAt","ids","wantModified","type","d","pub","get","dUpdated","Date","getTime","pUpdated","isModified","push","Set","STATUS_QUERY_FROM_FILTER","draft","publicationFilter","publicationStatusFilter","normalizeStatusFromFilters","query","filters","$and","Array","isArray","remainingFilters","statusValues","filter","eq","__status","$eq","length","q","value","toApply","Object","assign","mergeDocumentIdFilter","existingFilters","documentIds","documentIdFilter","$in","existingAnd","keys","extractStatusSortOrder","sort","match","toUpperCase","item","result","dir","removeStatusFromSort","cleaned","split","map","s","trim","test","join","undefined","_removed","rest","createDocument","ctx","userAbility","user","state","model","params","body","request","documentManager","getService","permissionChecker","create","cannot","errors","ForbiddenError","pickPermittedFields","sanitizeCreateInput","setCreator","setCreatorFields","sanitizeFn","async","pipe","sanitizedBody","getDocumentLocaleAndStatus","data","populate","updateDocument","id","update","permissionQuery","sanitizedQuery","populateFromQuery","build","documentVersion","documentExists","findOne","exists","NotFoundError","sanitizeUpdateInput","isEdition","updatedDocument","find","documentMetadata","read","forbidden","hasPublicationStatusFilter","hasPublishedVersion","rawStatusSortOrder","statusSortOrder","queryWithoutStatusSort","populateDeep","countRelations","toOne","toMany","withPopulateOverride","getPopulateForLocalizations","queryForValidation","paramsForDocumentService","omit","findPageParams","legacy","parseHasPublishedVersionQueryParam","hasPublishedVersionBooleanToPublicationFilterMode","statusSort","results","pagination","findPage","statusByDocumentId","indexByDocumentId","getManyAvailableStatus","setStatus","document","availableStatuses","getStatus","sanitizeOutput","Infinity","version","notFound","meta","formatDocumentWithMetadata","publishedAt","availableLocales","availableStatus","sanitizedDocument","totalEntries","db","count","telemetry","send","eventProperties","updatedVersion","sanitizedVersion","clone","sourceId","excludeNotCreatable","excludeNotCreatableFields","clonedDocument","autoClone","prohibitedFields","getProhibitedCloningFields","badRequest","delete","documentLocales","findLocales","publish","publishedDocument","transaction","isCreate","isNil","isUpdate","can","publishResult","bulkFindForValidation","validateBulkActionInput","buildDeepPopulate","bulkPublish","allowMultipleLocales","entities","isPublished","entity","publishMany","bulkUnpublish","unpublish","entitiesIds","unpublishMany","discardDraft","discard","bulkDelete","localeDocumentsIds","deleteMany","countDraftRelations","requiresEntity","number","countManyEntriesDraftRelations","where"],"mappings":"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"}
1
+ {"version":3,"file":"collection-types.js","sources":["../../../server/src/controllers/collection-types.ts"],"sourcesContent":["import { isNil, omit } from 'lodash/fp';\n\nimport {\n setCreatorFields,\n async,\n contentTypes,\n errors,\n parseHasPublishedVersionQueryParam,\n hasPublishedVersionBooleanToPublicationFilterMode,\n} from '@strapi/utils';\nimport type { Modules, UID } from '@strapi/types';\n\nimport { getService } from '../utils';\nimport { validateBulkActionInput } from './validation';\nimport { getProhibitedCloningFields, excludeNotCreatableFields } from './utils/clone';\nimport { getDocumentLocaleAndStatus } from './validation/dimensions';\nimport { formatDocumentWithMetadata } from './utils/metadata';\nimport { indexByDocumentId } from './utils/document-status';\nimport { getPopulateForLocalizations, buildDeepPopulate } from '../services/utils/populate';\n\n/**\n * Returns documentIds for (documentId, locale) that have both draft and published,\n * optionally filtered by whether the draft is newer than the published row.\n * Uses strapi.documents only.\n */\nconst getDocumentIdsByDraftPublishRelation = async (\n uid: UID.ContentType,\n opts: {\n locale?: string | string[] | null;\n type: 'modified' | 'unmodified';\n }\n): Promise<string[]> => {\n const schema = strapi.getModel(uid);\n if (!contentTypes.hasDraftAndPublish(schema)) {\n return [];\n }\n\n const baseParams = {\n fields: ['documentId', 'locale', 'updatedAt'],\n page: 1,\n pageSize: 10000,\n ...(opts.locale != null &&\n opts.locale !== '*' && {\n locale: opts.locale as string,\n }),\n };\n\n const [drafts, published] = await Promise.all([\n strapi.documents(uid).findMany({ ...baseParams, status: 'draft' }),\n strapi.documents(uid).findMany({ ...baseParams, status: 'published' }),\n ]);\n\n const publishedByKey = new Map<string, { updatedAt: string }>();\n for (const p of published) {\n const key = `${p.documentId}\\t${String(p?.locale ?? '')}`;\n publishedByKey.set(key, { updatedAt: p.updatedAt as string });\n }\n\n const ids: string[] = [];\n const wantModified = opts.type === 'modified';\n for (const d of drafts) {\n const key = `${d.documentId}\\t${String(d?.locale ?? '')}`;\n const pub = publishedByKey.get(key);\n if (pub) {\n const dUpdated = d?.updatedAt ? new Date(d.updatedAt as string).getTime() : 0;\n const pUpdated = pub?.updatedAt ? new Date(pub.updatedAt).getTime() : 0;\n const isModified = dUpdated > pUpdated;\n if (isModified === wantModified) {\n ids.push(d.documentId as string);\n }\n }\n }\n return [...new Set(ids)];\n};\n\n/** Map from __status filter value to top-level query fields (mirrors client STATUS_PARAMS). */\nconst STATUS_QUERY_FROM_FILTER: Record<string, Record<string, string>> = {\n draft: { status: 'draft', publicationFilter: 'never-published-document' },\n published: { status: 'published' },\n 'published-modified': { publicationStatusFilter: 'published-modified' },\n 'published-unmodified': { publicationStatusFilter: 'published-unmodified' },\n};\n\n/**\n * Extracts __status from query.filters.$and into top-level status, publicationFilter,\n * and publicationStatusFilter so list works with either transformed params or raw filter params.\n */\nconst normalizeStatusFromFilters = (query: Record<string, unknown>): void => {\n const filters = query.filters as Record<string, unknown> | undefined;\n if (!filters?.$and || !Array.isArray(filters.$and)) return;\n\n const remainingFilters: unknown[] = [];\n const statusValues: string[] = [];\n\n for (const filter of filters.$and as Record<string, unknown>[]) {\n const eq = (filter?.__status as Record<string, unknown>)?.$eq;\n if (eq != null) {\n statusValues.push(String(eq));\n } else {\n remainingFilters.push(filter);\n }\n }\n\n if (statusValues.length === 0) return;\n\n const q = query as Record<string, unknown>;\n for (const value of statusValues) {\n const toApply = STATUS_QUERY_FROM_FILTER[value];\n if (toApply) Object.assign(q, toApply);\n }\n\n if (remainingFilters.length > 0) {\n (filters as Record<string, unknown>).$and = remainingFilters;\n } else {\n delete q.filters;\n }\n};\n\n/** Returns filters object that merges existing $and with a documentId $in filter. */\nconst mergeDocumentIdFilter = (\n existingFilters: Record<string, unknown> | undefined,\n documentIds: string[]\n): Record<string, unknown> => {\n const documentIdFilter = {\n documentId: documentIds.length > 0 ? { $in: documentIds } : { $in: [] },\n };\n let existingAnd: unknown[];\n if (existingFilters?.$and && Array.isArray(existingFilters.$and)) {\n existingAnd = existingFilters.$and;\n } else if (existingFilters && Object.keys(existingFilters).length > 0) {\n existingAnd = [existingFilters];\n } else {\n existingAnd = [];\n }\n return { $and: [...existingAnd, documentIdFilter] };\n};\n\ntype Options = Modules.Documents.Params.Pick<UID.ContentType, 'populate:object'>;\n\n/**\n * Extracts the sort direction for the 'status' field from a sort parameter.\n * Returns 'ASC', 'DESC', or null if status is not being sorted.\n *\n * The sort param can be a string ('status:ASC'), an array (['status:ASC']),\n * or an object ({ status: 'ASC' }).\n */\nconst extractStatusSortOrder = (sort: unknown): 'ASC' | 'DESC' | null => {\n if (!sort) return null;\n\n if (typeof sort === 'string') {\n const match = sort.match(/(?:^|,)\\s*status:(ASC|DESC)\\s*(?:,|$)/i);\n return match ? (match[1].toUpperCase() as 'ASC' | 'DESC') : null;\n }\n\n if (Array.isArray(sort)) {\n for (const item of sort) {\n const result = extractStatusSortOrder(item);\n if (result) return result;\n }\n return null;\n }\n\n if (typeof sort === 'object' && sort !== null && 'status' in sort) {\n const dir = String((sort as Record<string, unknown>).status).toUpperCase();\n return dir === 'ASC' || dir === 'DESC' ? dir : null;\n }\n\n return null;\n};\n\n/**\n * Removes the 'status' field from a sort parameter, returning the remainder\n * (or undefined if status was the only sort field).\n */\nconst removeStatusFromSort = (sort: unknown): unknown => {\n if (!sort) return sort;\n\n if (typeof sort === 'string') {\n const cleaned = sort\n .split(',')\n .map((s) => s.trim())\n .filter((s) => !/^status:(ASC|DESC)$/i.test(s))\n .join(',');\n return cleaned || undefined;\n }\n\n if (Array.isArray(sort)) {\n const cleaned = sort.filter((item) => extractStatusSortOrder(item) === null);\n return cleaned.length ? cleaned : undefined;\n }\n\n if (typeof sort === 'object' && sort !== null) {\n const { status: _removed, ...rest } = sort as Record<string, unknown>;\n return Object.keys(rest).length ? rest : undefined;\n }\n\n return sort;\n};\n\n/**\n * Create a new document.\n *\n * @param ctx - Koa context\n * @param opts - Options\n * @param opts.populate - Populate options of the returned document.\n * By default documentManager will populate all relations.\n */\nconst createDocument = async (ctx: any, opts?: Options) => {\n const { userAbility, user } = ctx.state;\n const { model } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n const pickPermittedFields = permissionChecker.sanitizeCreateInput;\n const setCreator = setCreatorFields({ user });\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any);\n const sanitizedBody = await sanitizeFn(body);\n\n const { locale, status } = await getDocumentLocaleAndStatus(body, model);\n\n return documentManager.create(model, {\n data: sanitizedBody as any,\n locale,\n status,\n populate: opts?.populate,\n });\n\n // TODO: Revert the creation if create permission conditions are not met\n // if (permissionChecker.cannot.create(document)) {\n // throw new errors.ForbiddenError();\n // }\n};\n\n/**\n * Update a document version.\n * - If the document version exists, it will be updated.\n * - If the document version does not exist, a new document locale will be created.\n * By default documentManager will populate all relations.\n *\n * @param ctx - Koa context\n * @param opts - Options\n * @param opts.populate - Populate options of the returned document\n */\nconst updateDocument = async (ctx: any, opts?: Options) => {\n const { userAbility, user } = ctx.state;\n const { id, model } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.update()) {\n throw new errors.ForbiddenError();\n }\n\n // Populate necessary fields to check permissions\n const permissionQuery = await permissionChecker.sanitizedQuery.update(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n // Load document version to update\n const [documentVersion, documentExists] = await Promise.all([\n documentManager.findOne(id, model, { populate, locale, status: 'draft' }),\n documentManager.exists(model, id),\n ]);\n\n if (!documentExists) {\n throw new errors.NotFoundError();\n }\n\n // If version is not found, but document exists,\n // the intent is to create a new document locale\n if (documentVersion) {\n if (permissionChecker.cannot.update(documentVersion)) {\n throw new errors.ForbiddenError();\n }\n } else if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n const pickPermittedFields = documentVersion\n ? permissionChecker.sanitizeUpdateInput(documentVersion)\n : permissionChecker.sanitizeCreateInput;\n const setCreator = documentVersion\n ? setCreatorFields({ user, isEdition: true })\n : setCreatorFields({ user });\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any);\n const sanitizedBody = await sanitizeFn(body);\n\n const updatedDocument = await documentManager.update(documentVersion?.documentId || id, model, {\n data: sanitizedBody as any,\n populate: opts?.populate,\n locale,\n });\n\n return updatedDocument;\n};\n\nexport default {\n async find(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query } = ctx.request;\n\n // Normalize so status/publicationStatusFilter are set from filters.$and.__status when present\n normalizeStatusFromFilters(query as Record<string, unknown>);\n\n const documentMetadata = getService('document-metadata');\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n // Extract and remove 'status' sort before sanitization/validation, since status\n // is not a real schema attribute and would be rejected by the permission checker.\n // It is re-added after sanitization so the DB layer can handle it via a CASE expression.\n const hasPublicationStatusFilter =\n query.status !== undefined ||\n query.hasPublishedVersion !== undefined ||\n query.publicationStatusFilter !== undefined;\n const rawStatusSortOrder = extractStatusSortOrder(query.sort);\n // Disable status sort when a publication status filter is active — all results share the\n // same status, making the sort a no-op.\n const statusSortOrder = hasPublicationStatusFilter ? null : rawStatusSortOrder;\n // Always strip 'status' from the sort before passing to the document service / permission\n // checker — it is not a real schema attribute and would be rejected by validation.\n const queryWithoutStatusSort = rawStatusSortOrder\n ? { ...query, sort: removeStatusFromSort(query.sort) }\n : query;\n\n const permissionQuery = await permissionChecker.sanitizedQuery.read(queryWithoutStatusSort);\n\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .populateDeep(1)\n .countRelations({ toOne: false, toMany: true })\n .withPopulateOverride(getPopulateForLocalizations(model))\n .build();\n\n // \"Modified\" is a UI-only filter; not a real document status. Read and strip it\n // so we never pass it to validation or the document service.\n const publicationStatusFilter = query.publicationStatusFilter;\n const queryForValidation = { ...query };\n delete queryForValidation.publicationStatusFilter;\n\n const { locale, status } = await getDocumentLocaleAndStatus(queryForValidation, model);\n\n const paramsForDocumentService = omit(['publicationStatusFilter'], permissionQuery) as Record<\n string,\n unknown\n >;\n let findPageParams: Record<string, unknown> = {\n ...paramsForDocumentService,\n populate,\n locale,\n status,\n };\n\n if (query.publicationFilter !== undefined) {\n findPageParams.publicationFilter = query.publicationFilter;\n } else {\n const legacy = parseHasPublishedVersionQueryParam(query.hasPublishedVersion);\n if (legacy !== undefined) {\n findPageParams.publicationFilter =\n hasPublishedVersionBooleanToPublicationFilterMode(legacy);\n }\n }\n\n if (\n publicationStatusFilter === 'published-modified' ||\n publicationStatusFilter === 'published-unmodified'\n ) {\n const type = publicationStatusFilter === 'published-modified' ? 'modified' : 'unmodified';\n const documentIds = await getDocumentIdsByDraftPublishRelation(model, { locale, type });\n findPageParams = {\n ...findPageParams,\n status: 'published',\n filters: mergeDocumentIdFilter(\n paramsForDocumentService.filters as Record<string, unknown> | undefined,\n documentIds\n ),\n };\n }\n\n if (statusSortOrder) {\n const s = findPageParams.sort;\n const statusSort = `status:${statusSortOrder}`;\n if (!s) {\n findPageParams.sort = statusSort;\n } else if (Array.isArray(s)) {\n findPageParams.sort = [...s, statusSort];\n } else if (typeof s === 'string') {\n findPageParams.sort = `${s},${statusSort}`;\n } else {\n findPageParams.sort = { ...(s as object), status: statusSortOrder };\n }\n }\n\n const { results: documents, pagination } = await documentManager.findPage(\n findPageParams as Parameters<typeof documentManager.findPage>[0],\n model\n );\n\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(strapi.getModel(model));\n\n const statusByDocumentId = hasDraftAndPublish\n ? indexByDocumentId(await documentMetadata.getManyAvailableStatus(model, documents))\n : new Map();\n\n const setStatus = (document: any) => {\n // Available status of document\n const availableStatuses = statusByDocumentId.get(document.documentId) || [];\n // Compute document version status\n document.status = documentMetadata.getStatus(document, availableStatuses);\n return document;\n };\n\n const results = await async.map(\n documents,\n async.pipe(permissionChecker.sanitizeOutput, setStatus)\n );\n\n ctx.body = {\n results,\n pagination,\n };\n },\n\n async findOne(ctx: any) {\n const { userAbility } = ctx.state;\n const { model, id } = ctx.params;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.read(ctx.query);\n\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .populateDeep(Infinity)\n .countRelations()\n .withPopulateOverride(getPopulateForLocalizations(model))\n .build();\n\n const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);\n\n const version = await documentManager.findOne(id, model, {\n populate,\n locale,\n status,\n });\n\n if (!version) {\n // Check if document exists\n const exists = await documentManager.exists(model, id);\n if (!exists) {\n return ctx.notFound();\n }\n\n // If the requested locale doesn't exist, return an empty response\n const { meta } = await formatDocumentWithMetadata(\n permissionChecker,\n model,\n // @ts-expect-error TODO: fix\n { documentId: id, locale, publishedAt: null },\n { availableLocales: true, availableStatus: false }\n );\n\n ctx.body = { data: {}, meta };\n\n return;\n }\n\n // if the user has condition that needs populated content, it's not applied because entity don't have relations populated\n if (permissionChecker.cannot.read(version)) {\n return ctx.forbidden();\n }\n\n // TODO: Count populated relations by permissions\n const sanitizedDocument = await permissionChecker.sanitizeOutput(version);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async create(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const [totalEntries, document] = await Promise.all([\n strapi.db.query(model).count(),\n createDocument(ctx),\n ]);\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(document);\n ctx.status = 201;\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument, {\n // Empty metadata as it's not relevant for a new document\n availableLocales: false,\n availableStatus: false,\n });\n\n if (totalEntries === 0) {\n strapi.telemetry.send('didCreateFirstContentTypeEntry', {\n eventProperties: { model },\n });\n }\n },\n\n async update(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const updatedVersion = await updateDocument(ctx);\n\n const sanitizedVersion = await permissionChecker.sanitizeOutput(updatedVersion);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedVersion);\n },\n\n async clone(ctx: any) {\n const { userAbility, user } = ctx.state;\n const { model, sourceId: id } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.create()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.create(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n const document = await documentManager.findOne(id, model, {\n populate,\n locale,\n status: 'draft',\n });\n\n if (!document) {\n return ctx.notFound();\n }\n\n const pickPermittedFields = permissionChecker.sanitizeCreateInput;\n const setCreator = setCreatorFields({ user });\n const excludeNotCreatable = excludeNotCreatableFields(model, permissionChecker);\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any, excludeNotCreatable);\n const sanitizedBody = await sanitizeFn(body);\n\n const clonedDocument = await documentManager.clone(document.documentId, sanitizedBody, model);\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(clonedDocument);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument, {\n // Empty metadata as it's not relevant for a new document\n availableLocales: false,\n availableStatus: false,\n });\n },\n\n async autoClone(ctx: any) {\n const { model } = ctx.params;\n\n // Check if the model has fields that prevent auto cloning\n const prohibitedFields = getProhibitedCloningFields(model);\n\n if (prohibitedFields.length > 0) {\n return ctx.badRequest(\n 'Entity could not be cloned as it has unique and/or relational fields. ' +\n 'Please edit those fields manually and save to complete the cloning.',\n {\n prohibitedFields,\n }\n );\n }\n\n await this.clone(ctx);\n },\n\n async delete(ctx: any) {\n const { userAbility } = ctx.state;\n const { id, model } = ctx.params;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.delete()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.delete(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(ctx.query, model);\n\n // Find locales to delete\n const documentLocales = await documentManager.findLocales(id, model, { populate, locale });\n\n if (documentLocales.length === 0) {\n return ctx.notFound();\n }\n\n for (const document of documentLocales) {\n if (permissionChecker.cannot.delete(document)) {\n return ctx.forbidden();\n }\n }\n\n const result = await documentManager.delete(id, model, { locale });\n\n ctx.body = await permissionChecker.sanitizeOutput(result);\n },\n\n /**\n * Publish a document version.\n * Supports creating/saving a document and publishing it in one request.\n */\n async publish(ctx: any) {\n const { userAbility } = ctx.state;\n // If id does not exist, the document has to be created\n const { id, model } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.publish()) {\n return ctx.forbidden();\n }\n\n const publishedDocument = await strapi.db.transaction(async () => {\n // Create or update document\n const permissionQuery = await permissionChecker.sanitizedQuery.publish(ctx.query);\n\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .populateDeep(Infinity)\n .countRelations()\n .withPopulateOverride(getPopulateForLocalizations(model))\n .build();\n\n let document: any;\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n /**\n * Publish can be called on two scenarios:\n * 1. Create a new document and publish it in one request\n * 2. Update an existing document and publish it in one request\n *\n * Based on user permissions:\n * 1. User cannot create a document, but can publish\n * Action will be forbidden as user cannot create a document\n * 2. User can update and publish a document\n * Action will be allowed, but document will not be updated, only published with the latest draft\n */\n const isCreate = isNil(id);\n if (isCreate) {\n if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n document = await createDocument(ctx, { populate });\n }\n\n const isUpdate = !isCreate;\n if (isUpdate) {\n // check if the document exists\n const documentExists = await documentManager.exists(model, id);\n\n if (!documentExists) {\n throw new errors.NotFoundError('Document not found');\n }\n\n // check the document version\n document = await documentManager.findOne(id!, model, { populate, locale });\n\n if (!document) {\n // update and publish the new version\n if (\n permissionChecker.cannot.create({ locale }) ||\n permissionChecker.cannot.publish({ locale })\n ) {\n throw new errors.ForbiddenError();\n }\n document = await updateDocument(ctx);\n } else if (permissionChecker.can.update(document)) {\n await updateDocument(ctx);\n }\n }\n\n if (permissionChecker.cannot.publish(document)) {\n throw new errors.ForbiddenError();\n }\n\n const publishResult = await documentManager.publish(document.documentId, model, {\n locale,\n // TODO: Allow setting creator fields on publish\n // data: setCreatorFields({ user, isEdition: true })({}),\n });\n\n if (!publishResult || publishResult.length === 0) {\n throw new errors.NotFoundError('Document not found or already published.');\n }\n\n return publishResult[0];\n });\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(publishedDocument);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async bulkFindForValidation(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { documentIds, locale, sort } = ctx.request.body;\n\n await validateBulkActionInput(ctx.request.body);\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const populate = await buildDeepPopulate(model as UID.CollectionType);\n\n const documents = await strapi.documents(model as UID.CollectionType).findMany({\n populate,\n filters: { documentId: { $in: documentIds } } as any,\n locale,\n sort,\n status: 'draft',\n });\n\n const results = await Promise.all(documents.map(permissionChecker.sanitizeOutput));\n\n ctx.body = { results };\n },\n\n async bulkPublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body } = ctx.request;\n const { documentIds } = body;\n\n await validateBulkActionInput(body);\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.publish()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.publish(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .populateDeep(Infinity)\n .countRelations()\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model, {\n allowMultipleLocales: true,\n });\n\n const entities = await documentManager.findLocales(documentIds, model, {\n populate,\n locale,\n isPublished: false,\n });\n\n for (const entity of entities) {\n if (!entity) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.publish(entity)) {\n return ctx.forbidden();\n }\n }\n\n const count = await documentManager.publishMany(model, documentIds, locale);\n ctx.body = { count };\n },\n\n async bulkUnpublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body } = ctx.request;\n const { documentIds } = body;\n\n await validateBulkActionInput(body);\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.unpublish()) {\n return ctx.forbidden();\n }\n\n const { locale } = await getDocumentLocaleAndStatus(body, model, {\n allowMultipleLocales: true,\n });\n\n const entities = await documentManager.findLocales(documentIds, model, {\n locale,\n isPublished: true,\n });\n\n for (const entity of entities) {\n if (!entity) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.publish(entity)) {\n return ctx.forbidden();\n }\n }\n\n const entitiesIds = entities.map((document) => document.documentId);\n\n const { count } = await documentManager.unpublishMany(entitiesIds, model, { locale });\n\n ctx.body = { count };\n },\n\n async unpublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { id, model } = ctx.params;\n const {\n body: { discardDraft, ...body },\n } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.unpublish()) {\n return ctx.forbidden();\n }\n\n if (discardDraft && permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.unpublish(ctx.query);\n\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n // TODO allow multiple locales for bulk locale unpublish\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n const document = await documentManager.findOne(id, model, {\n populate,\n locale,\n status: 'published',\n });\n\n if (!document) {\n throw new errors.NotFoundError();\n }\n\n if (permissionChecker.cannot.unpublish(document)) {\n throw new errors.ForbiddenError();\n }\n\n if (discardDraft && permissionChecker.cannot.discard(document)) {\n throw new errors.ForbiddenError();\n }\n\n await strapi.db.transaction(async () => {\n if (discardDraft) {\n await documentManager.discardDraft(document.documentId, model, { locale });\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.unpublish(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n });\n },\n\n async discard(ctx: any) {\n const { userAbility } = ctx.state;\n const { id, model } = ctx.params;\n const { body } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.discard(ctx.query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n const document = await documentManager.findOne(id, model, {\n populate,\n locale,\n status: 'published',\n });\n\n // Can not discard a document that is not published\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.discard(document)) {\n return ctx.forbidden();\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.discardDraft(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n },\n\n async bulkDelete(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query, body } = ctx.request;\n const { documentIds } = body;\n\n await validateBulkActionInput(body);\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.delete()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.delete(query);\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n const documentLocales = await documentManager.findLocales(documentIds, model, {\n populate,\n locale,\n });\n\n if (documentLocales.length === 0) {\n return ctx.notFound();\n }\n\n for (const document of documentLocales) {\n if (permissionChecker.cannot.delete(document)) {\n return ctx.forbidden();\n }\n }\n\n // We filter out documentsIds that maybe doesn't exist in a specific locale.\n // With draft & publish, findLocales returns a row per publication state, so the\n // same documentId can appear twice (draft + published). Deduplicate to avoid\n // deleting (and running document service middleware for) the same document twice.\n const localeDocumentsIds = [...new Set(documentLocales.map((document) => document.documentId))];\n\n const { count } = await documentManager.deleteMany(localeDocumentsIds, model, { locale });\n\n ctx.body = { count };\n },\n\n async countDraftRelations(ctx: any) {\n const { userAbility } = ctx.state;\n const { model, id } = ctx.params;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);\n\n if (permissionChecker.requiresEntity.read()) {\n // Only load what we need for access checks\n const permissionQuery = await permissionChecker.sanitizedQuery.read(ctx.query);\n\n const populate = await getService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const entity = await documentManager.findOne(id, model, {\n locale,\n status,\n populate,\n });\n\n if (!entity) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.read(entity)) {\n return ctx.forbidden();\n }\n }\n\n const counts = await documentManager.countDraftRelations(id, model, locale);\n\n return {\n data: counts,\n };\n },\n\n async countManyEntriesDraftRelations(ctx: any) {\n const { userAbility } = ctx.state;\n const ids = ctx.request.query.documentIds as string[];\n const locale = ctx.request.query.locale as string[];\n const { model } = ctx.params;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const count = await strapi.db.query(model).count({\n where: { documentId: ids },\n });\n\n if (count === 0) {\n return ctx.notFound();\n }\n\n const number = await documentManager.countManyEntriesDraftRelations(ids, model, locale);\n\n return {\n data: number,\n };\n },\n};\n"],"names":["getDocumentIdsByDraftPublishRelation","uid","opts","schema","strapi","getModel","contentTypes","hasDraftAndPublish","baseParams","fields","page","pageSize","locale","drafts","published","Promise","all","documents","findMany","status","publishedByKey","Map","p","key","documentId","String","set","updatedAt","ids","wantModified","type","d","pub","get","dUpdated","Date","getTime","pUpdated","isModified","push","Set","STATUS_QUERY_FROM_FILTER","draft","publicationFilter","publicationStatusFilter","normalizeStatusFromFilters","query","filters","$and","Array","isArray","remainingFilters","statusValues","filter","eq","__status","$eq","length","q","value","toApply","Object","assign","mergeDocumentIdFilter","existingFilters","documentIds","documentIdFilter","$in","existingAnd","keys","extractStatusSortOrder","sort","match","toUpperCase","item","result","dir","removeStatusFromSort","cleaned","split","map","s","trim","test","join","undefined","_removed","rest","createDocument","ctx","userAbility","user","state","model","params","body","request","documentManager","getService","permissionChecker","create","cannot","errors","ForbiddenError","pickPermittedFields","sanitizeCreateInput","setCreator","setCreatorFields","sanitizeFn","async","pipe","sanitizedBody","getDocumentLocaleAndStatus","data","populate","updateDocument","id","update","permissionQuery","sanitizedQuery","populateFromQuery","build","documentVersion","documentExists","findOne","exists","NotFoundError","sanitizeUpdateInput","isEdition","updatedDocument","find","documentMetadata","read","forbidden","hasPublicationStatusFilter","hasPublishedVersion","rawStatusSortOrder","statusSortOrder","queryWithoutStatusSort","populateDeep","countRelations","toOne","toMany","withPopulateOverride","getPopulateForLocalizations","queryForValidation","paramsForDocumentService","omit","findPageParams","legacy","parseHasPublishedVersionQueryParam","hasPublishedVersionBooleanToPublicationFilterMode","statusSort","results","pagination","findPage","statusByDocumentId","indexByDocumentId","getManyAvailableStatus","setStatus","document","availableStatuses","getStatus","sanitizeOutput","Infinity","version","notFound","meta","formatDocumentWithMetadata","publishedAt","availableLocales","availableStatus","sanitizedDocument","totalEntries","db","count","telemetry","send","eventProperties","updatedVersion","sanitizedVersion","clone","sourceId","excludeNotCreatable","excludeNotCreatableFields","clonedDocument","autoClone","prohibitedFields","getProhibitedCloningFields","badRequest","delete","documentLocales","findLocales","publish","publishedDocument","transaction","isCreate","isNil","isUpdate","can","publishResult","bulkFindForValidation","validateBulkActionInput","buildDeepPopulate","bulkPublish","allowMultipleLocales","entities","isPublished","entity","publishMany","bulkUnpublish","unpublish","entitiesIds","unpublishMany","discardDraft","discard","bulkDelete","localeDocumentsIds","deleteMany","countDraftRelations","requiresEntity","counts","countManyEntriesDraftRelations","where","number"],"mappings":"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"}
@@ -879,9 +879,9 @@ var collectionTypes = {
879
879
  return ctx.forbidden();
880
880
  }
881
881
  }
882
- const number = await documentManager.countDraftRelations(id, model, locale);
882
+ const counts = await documentManager.countDraftRelations(id, model, locale);
883
883
  return {
884
- data: number
884
+ data: counts
885
885
  };
886
886
  },
887
887
  async countManyEntriesDraftRelations (ctx) {