@strapi/content-manager 5.59.0 → 5.61.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 (300) hide show
  1. package/dist/admin/constants/customOrder.js +14 -0
  2. package/dist/admin/constants/customOrder.js.map +1 -0
  3. package/dist/admin/constants/customOrder.mjs +10 -0
  4. package/dist/admin/constants/customOrder.mjs.map +1 -0
  5. package/dist/admin/history/components/VersionInputRenderer.js +2 -1
  6. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
  7. package/dist/admin/history/components/VersionInputRenderer.mjs +2 -1
  8. package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
  9. package/dist/admin/hooks/useDocument.js +22 -11
  10. package/dist/admin/hooks/useDocument.js.map +1 -1
  11. package/dist/admin/hooks/useDocument.mjs +22 -11
  12. package/dist/admin/hooks/useDocument.mjs.map +1 -1
  13. package/dist/admin/hooks/useDocumentLayout.js.map +1 -1
  14. package/dist/admin/hooks/useDocumentLayout.mjs.map +1 -1
  15. package/dist/admin/hooks/useHasBeenNearViewport.js +70 -0
  16. package/dist/admin/hooks/useHasBeenNearViewport.js.map +1 -0
  17. package/dist/admin/hooks/useHasBeenNearViewport.mjs +46 -0
  18. package/dist/admin/hooks/useHasBeenNearViewport.mjs.map +1 -0
  19. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js +102 -32
  20. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -1
  21. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs +104 -35
  22. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs.map +1 -1
  23. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js +20 -17
  24. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js.map +1 -1
  25. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs +20 -17
  26. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -1
  27. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +15 -1
  28. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  29. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +17 -3
  30. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  31. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.js +21 -0
  32. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.js.map +1 -1
  33. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.mjs +22 -1
  34. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.mjs.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +1 -0
  36. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +1 -0
  38. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +1 -0
  40. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +1 -0
  42. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +2 -0
  44. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +2 -0
  46. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +4 -7
  48. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +4 -7
  50. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +46 -10
  52. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +47 -11
  54. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormLayout.js +201 -50
  56. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormLayout.mjs +202 -52
  58. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  59. package/dist/admin/pages/EditView/components/InputRenderer.js +3 -1
  60. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  61. package/dist/admin/pages/EditView/components/InputRenderer.mjs +3 -1
  62. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  63. package/dist/admin/pages/ListConfiguration/components/Settings.js +31 -2
  64. package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -1
  65. package/dist/admin/pages/ListConfiguration/components/Settings.mjs +31 -2
  66. package/dist/admin/pages/ListConfiguration/components/Settings.mjs.map +1 -1
  67. package/dist/admin/pages/ListView/ListViewPage.js +196 -132
  68. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  69. package/dist/admin/pages/ListView/ListViewPage.mjs +196 -132
  70. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  71. package/dist/admin/pages/ListView/components/CustomOrder.js +571 -0
  72. package/dist/admin/pages/ListView/components/CustomOrder.js.map +1 -0
  73. package/dist/admin/pages/ListView/components/CustomOrder.mjs +546 -0
  74. package/dist/admin/pages/ListView/components/CustomOrder.mjs.map +1 -0
  75. package/dist/admin/pages/ListView/components/TableActions.js +4 -1
  76. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  77. package/dist/admin/pages/ListView/components/TableActions.mjs +4 -1
  78. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  79. package/dist/admin/preview/components/PreviewSidePanel.js +2 -1
  80. package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -1
  81. package/dist/admin/preview/components/PreviewSidePanel.mjs +2 -1
  82. package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -1
  83. package/dist/admin/preview/utils/getPreviewUrlStatus.js +17 -0
  84. package/dist/admin/preview/utils/getPreviewUrlStatus.js.map +1 -0
  85. package/dist/admin/preview/utils/getPreviewUrlStatus.mjs +15 -0
  86. package/dist/admin/preview/utils/getPreviewUrlStatus.mjs.map +1 -0
  87. package/dist/admin/services/documents.js +22 -1
  88. package/dist/admin/services/documents.js.map +1 -1
  89. package/dist/admin/services/documents.mjs +21 -2
  90. package/dist/admin/services/documents.mjs.map +1 -1
  91. package/dist/admin/src/constants/customOrder.d.ts +8 -0
  92. package/dist/admin/src/exports.d.ts +1 -1
  93. package/dist/admin/src/history/components/VersionInputRenderer.d.ts +3 -1
  94. package/dist/admin/src/hooks/useDocument.d.ts +4 -0
  95. package/dist/admin/src/hooks/useDocumentLayout.d.ts +6 -2
  96. package/dist/admin/src/hooks/useHasBeenNearViewport.d.ts +13 -0
  97. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.d.ts +13 -1
  98. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +11 -1
  99. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +2 -0
  100. package/dist/admin/src/pages/ListView/components/CustomOrder.d.ts +72 -0
  101. package/dist/admin/src/preview/utils/getPreviewUrlStatus.d.ts +6 -0
  102. package/dist/admin/src/services/documents.d.ts +10 -2
  103. package/dist/admin/translations/en.json.js +9 -0
  104. package/dist/admin/translations/en.json.js.map +1 -1
  105. package/dist/admin/translations/en.json.mjs +9 -0
  106. package/dist/admin/translations/en.json.mjs.map +1 -1
  107. package/dist/server/audit-logs.js +36 -0
  108. package/dist/server/audit-logs.js.map +1 -0
  109. package/dist/server/audit-logs.mjs +33 -0
  110. package/dist/server/audit-logs.mjs.map +1 -0
  111. package/dist/server/bootstrap.js +8 -0
  112. package/dist/server/bootstrap.js.map +1 -1
  113. package/dist/server/bootstrap.mjs +8 -0
  114. package/dist/server/bootstrap.mjs.map +1 -1
  115. package/dist/server/controllers/collection-types.js +8 -0
  116. package/dist/server/controllers/collection-types.js.map +1 -1
  117. package/dist/server/controllers/collection-types.mjs +8 -0
  118. package/dist/server/controllers/collection-types.mjs.map +1 -1
  119. package/dist/server/controllers/content-types.js +15 -0
  120. package/dist/server/controllers/content-types.js.map +1 -1
  121. package/dist/server/controllers/content-types.mjs +16 -1
  122. package/dist/server/controllers/content-types.mjs.map +1 -1
  123. package/dist/server/controllers/index.js +3 -1
  124. package/dist/server/controllers/index.js.map +1 -1
  125. package/dist/server/controllers/index.mjs +2 -0
  126. package/dist/server/controllers/index.mjs.map +1 -1
  127. package/dist/server/controllers/relations.js +53 -17
  128. package/dist/server/controllers/relations.js.map +1 -1
  129. package/dist/server/controllers/relations.mjs +54 -18
  130. package/dist/server/controllers/relations.mjs.map +1 -1
  131. package/dist/server/controllers/single-types.js +10 -1
  132. package/dist/server/controllers/single-types.js.map +1 -1
  133. package/dist/server/controllers/single-types.mjs +10 -1
  134. package/dist/server/controllers/single-types.mjs.map +1 -1
  135. package/dist/server/controllers/validation/model-configuration.js +2 -1
  136. package/dist/server/controllers/validation/model-configuration.js.map +1 -1
  137. package/dist/server/controllers/validation/model-configuration.mjs +2 -1
  138. package/dist/server/controllers/validation/model-configuration.mjs.map +1 -1
  139. package/dist/server/custom-order/constants.js +21 -0
  140. package/dist/server/custom-order/constants.js.map +1 -0
  141. package/dist/server/custom-order/constants.mjs +17 -0
  142. package/dist/server/custom-order/constants.mjs.map +1 -0
  143. package/dist/server/custom-order/controllers/custom-order.js +77 -0
  144. package/dist/server/custom-order/controllers/custom-order.js.map +1 -0
  145. package/dist/server/custom-order/controllers/custom-order.mjs +75 -0
  146. package/dist/server/custom-order/controllers/custom-order.mjs.map +1 -0
  147. package/dist/server/custom-order/controllers/index.js +10 -0
  148. package/dist/server/custom-order/controllers/index.js.map +1 -0
  149. package/dist/server/custom-order/controllers/index.mjs +8 -0
  150. package/dist/server/custom-order/controllers/index.mjs.map +1 -0
  151. package/dist/server/custom-order/index.js +71 -0
  152. package/dist/server/custom-order/index.js.map +1 -0
  153. package/dist/server/custom-order/index.mjs +69 -0
  154. package/dist/server/custom-order/index.mjs.map +1 -0
  155. package/dist/server/custom-order/routes/custom-order.js +38 -0
  156. package/dist/server/custom-order/routes/custom-order.js.map +1 -0
  157. package/dist/server/custom-order/routes/custom-order.mjs +36 -0
  158. package/dist/server/custom-order/routes/custom-order.mjs.map +1 -0
  159. package/dist/server/custom-order/routes/index.js +13 -0
  160. package/dist/server/custom-order/routes/index.js.map +1 -0
  161. package/dist/server/custom-order/routes/index.mjs +11 -0
  162. package/dist/server/custom-order/routes/index.mjs.map +1 -0
  163. package/dist/server/custom-order/services/custom-order.js +286 -0
  164. package/dist/server/custom-order/services/custom-order.js.map +1 -0
  165. package/dist/server/custom-order/services/custom-order.mjs +284 -0
  166. package/dist/server/custom-order/services/custom-order.mjs.map +1 -0
  167. package/dist/server/custom-order/services/document-middleware.js +83 -0
  168. package/dist/server/custom-order/services/document-middleware.js.map +1 -0
  169. package/dist/server/custom-order/services/document-middleware.mjs +81 -0
  170. package/dist/server/custom-order/services/document-middleware.mjs.map +1 -0
  171. package/dist/server/custom-order/services/index.js +10 -0
  172. package/dist/server/custom-order/services/index.js.map +1 -0
  173. package/dist/server/custom-order/services/index.mjs +8 -0
  174. package/dist/server/custom-order/services/index.mjs.map +1 -0
  175. package/dist/server/custom-order/services/utils.js +152 -0
  176. package/dist/server/custom-order/services/utils.js.map +1 -0
  177. package/dist/server/custom-order/services/utils.mjs +148 -0
  178. package/dist/server/custom-order/services/utils.mjs.map +1 -0
  179. package/dist/server/custom-order/utils.js +13 -0
  180. package/dist/server/custom-order/utils.js.map +1 -0
  181. package/dist/server/custom-order/utils.mjs +10 -0
  182. package/dist/server/custom-order/utils.mjs.map +1 -0
  183. package/dist/server/history/constants.js +2 -1
  184. package/dist/server/history/constants.js.map +1 -1
  185. package/dist/server/history/constants.mjs +2 -1
  186. package/dist/server/history/constants.mjs.map +1 -1
  187. package/dist/server/history/controllers/history-version.js +6 -2
  188. package/dist/server/history/controllers/history-version.js.map +1 -1
  189. package/dist/server/history/controllers/history-version.mjs +6 -2
  190. package/dist/server/history/controllers/history-version.mjs.map +1 -1
  191. package/dist/server/history/services/history.js +24 -7
  192. package/dist/server/history/services/history.js.map +1 -1
  193. package/dist/server/history/services/history.mjs +25 -8
  194. package/dist/server/history/services/history.mjs.map +1 -1
  195. package/dist/server/history/services/lifecycles.js +2 -16
  196. package/dist/server/history/services/lifecycles.js.map +1 -1
  197. package/dist/server/history/services/lifecycles.mjs +2 -16
  198. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  199. package/dist/server/mcp/schemas/filters-schema.js +10 -2
  200. package/dist/server/mcp/schemas/filters-schema.js.map +1 -1
  201. package/dist/server/mcp/schemas/filters-schema.mjs +10 -2
  202. package/dist/server/mcp/schemas/filters-schema.mjs.map +1 -1
  203. package/dist/server/preview/controllers/validation/preview.js +1 -1
  204. package/dist/server/preview/controllers/validation/preview.js.map +1 -1
  205. package/dist/server/preview/controllers/validation/preview.mjs +2 -2
  206. package/dist/server/preview/controllers/validation/preview.mjs.map +1 -1
  207. package/dist/server/register.js +4 -0
  208. package/dist/server/register.js.map +1 -1
  209. package/dist/server/register.mjs +4 -0
  210. package/dist/server/register.mjs.map +1 -1
  211. package/dist/server/routes/index.js +3 -1
  212. package/dist/server/routes/index.js.map +1 -1
  213. package/dist/server/routes/index.mjs +2 -0
  214. package/dist/server/routes/index.mjs.map +1 -1
  215. package/dist/server/services/content-types.js +2 -2
  216. package/dist/server/services/content-types.js.map +1 -1
  217. package/dist/server/services/content-types.mjs +2 -2
  218. package/dist/server/services/content-types.mjs.map +1 -1
  219. package/dist/server/services/document-manager.js +13 -0
  220. package/dist/server/services/document-manager.js.map +1 -1
  221. package/dist/server/services/document-manager.mjs +14 -1
  222. package/dist/server/services/document-manager.mjs.map +1 -1
  223. package/dist/server/services/document-metadata.js +1 -1
  224. package/dist/server/services/document-metadata.js.map +1 -1
  225. package/dist/server/services/document-metadata.mjs +1 -1
  226. package/dist/server/services/document-metadata.mjs.map +1 -1
  227. package/dist/server/services/index.js +3 -1
  228. package/dist/server/services/index.js.map +1 -1
  229. package/dist/server/services/index.mjs +2 -0
  230. package/dist/server/services/index.mjs.map +1 -1
  231. package/dist/server/services/utils/configuration/settings.js +2 -1
  232. package/dist/server/services/utils/configuration/settings.js.map +1 -1
  233. package/dist/server/services/utils/configuration/settings.mjs +2 -1
  234. package/dist/server/services/utils/configuration/settings.mjs.map +1 -1
  235. package/dist/server/src/audit-logs.d.ts +40 -0
  236. package/dist/server/src/audit-logs.d.ts.map +1 -0
  237. package/dist/server/src/bootstrap.d.ts.map +1 -1
  238. package/dist/server/src/controllers/collection-types.d.ts +1 -1
  239. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  240. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  241. package/dist/server/src/controllers/index.d.ts +21 -3
  242. package/dist/server/src/controllers/index.d.ts.map +1 -1
  243. package/dist/server/src/controllers/relations.d.ts +19 -1
  244. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  245. package/dist/server/src/controllers/single-types.d.ts +1 -1
  246. package/dist/server/src/controllers/single-types.d.ts.map +1 -1
  247. package/dist/server/src/custom-order/constants.d.ts +18 -0
  248. package/dist/server/src/custom-order/constants.d.ts.map +1 -0
  249. package/dist/server/src/custom-order/controllers/custom-order.d.ts +8 -0
  250. package/dist/server/src/custom-order/controllers/custom-order.d.ts.map +1 -0
  251. package/dist/server/src/custom-order/controllers/index.d.ts +3 -0
  252. package/dist/server/src/custom-order/controllers/index.d.ts.map +1 -0
  253. package/dist/server/src/custom-order/index.d.ts +8 -0
  254. package/dist/server/src/custom-order/index.d.ts.map +1 -0
  255. package/dist/server/src/custom-order/routes/custom-order.d.ts +4 -0
  256. package/dist/server/src/custom-order/routes/custom-order.d.ts.map +1 -0
  257. package/dist/server/src/custom-order/routes/index.d.ts +10 -0
  258. package/dist/server/src/custom-order/routes/index.d.ts.map +1 -0
  259. package/dist/server/src/custom-order/services/custom-order.d.ts +43 -0
  260. package/dist/server/src/custom-order/services/custom-order.d.ts.map +1 -0
  261. package/dist/server/src/custom-order/services/document-middleware.d.ts +16 -0
  262. package/dist/server/src/custom-order/services/document-middleware.d.ts.map +1 -0
  263. package/dist/server/src/custom-order/services/index.d.ts +24 -0
  264. package/dist/server/src/custom-order/services/index.d.ts.map +1 -0
  265. package/dist/server/src/custom-order/services/utils.d.ts +34 -0
  266. package/dist/server/src/custom-order/services/utils.d.ts.map +1 -0
  267. package/dist/server/src/custom-order/utils.d.ts +6 -0
  268. package/dist/server/src/custom-order/utils.d.ts.map +1 -0
  269. package/dist/server/src/history/constants.d.ts.map +1 -1
  270. package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
  271. package/dist/server/src/history/services/history.d.ts.map +1 -1
  272. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  273. package/dist/server/src/index.d.ts +22 -6
  274. package/dist/server/src/index.d.ts.map +1 -1
  275. package/dist/server/src/mcp/schemas/filters-schema.d.ts.map +1 -1
  276. package/dist/server/src/register.d.ts.map +1 -1
  277. package/dist/server/src/routes/index.d.ts.map +1 -1
  278. package/dist/server/src/services/content-types.d.ts +1 -3
  279. package/dist/server/src/services/content-types.d.ts.map +1 -1
  280. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  281. package/dist/server/src/services/index.d.ts +1 -3
  282. package/dist/server/src/services/index.d.ts.map +1 -1
  283. package/dist/server/src/services/utils/configuration/settings.d.ts.map +1 -1
  284. package/dist/shared/contracts/content-types.d.ts +5 -0
  285. package/dist/shared/contracts/content-types.d.ts.map +1 -1
  286. package/dist/shared/contracts/custom-order.d.ts +33 -0
  287. package/dist/shared/contracts/custom-order.d.ts.map +1 -0
  288. package/dist/shared/contracts/custom-order.js +3 -0
  289. package/dist/shared/contracts/custom-order.js.map +1 -0
  290. package/dist/shared/contracts/custom-order.mjs +2 -0
  291. package/dist/shared/contracts/custom-order.mjs.map +1 -0
  292. package/dist/shared/contracts/history-versions.d.ts +0 -1
  293. package/dist/shared/contracts/history-versions.d.ts.map +1 -1
  294. package/dist/shared/contracts/index.d.ts +1 -0
  295. package/dist/shared/contracts/index.d.ts.map +1 -1
  296. package/dist/shared/contracts/index.js +2 -0
  297. package/dist/shared/contracts/index.js.map +1 -1
  298. package/dist/shared/contracts/index.mjs +2 -0
  299. package/dist/shared/contracts/index.mjs.map +1 -1
  300. package/package.json +10 -10
@@ -10,6 +10,14 @@ const { PUBLISHED_AT_ATTRIBUTE } = strapiUtils.contentTypes.constants;
10
10
  const omitPublishedAtField = (document)=>_.omit(document, PUBLISHED_AT_ATTRIBUTE);
11
11
  const omitIdField = (document)=>_.omit(document, 'id');
12
12
  const documentManager = ({ strapi })=>{
13
+ /**
14
+ * The document service has no publish, unpublish or discardDraft methods
15
+ * for content types without draft and publish
16
+ */ const assertDraftAndPublish = (uid)=>{
17
+ if (strapiUtils.contentTypes.hasDraftAndPublish(strapi.getModel(uid)) === false) {
18
+ throw new strapiUtils.errors.ValidationError('Draft and publish is not enabled for this content type');
19
+ }
20
+ };
13
21
  return {
14
22
  async findOne (id, uid, opts = {}) {
15
23
  return strapi.documents(uid).findOne({
@@ -141,6 +149,7 @@ const documentManager = ({ strapi })=>{
141
149
  };
142
150
  },
143
151
  async publish (id, uid, opts = {}) {
152
+ assertDraftAndPublish(uid);
144
153
  const populate$1 = opts.populate ?? await populate.buildDeepPopulate(uid);
145
154
  const params = {
146
155
  ...opts,
@@ -152,6 +161,7 @@ const documentManager = ({ strapi })=>{
152
161
  }).then((result)=>result?.entries);
153
162
  },
154
163
  async publishMany (uid, documentIds, locale) {
164
+ assertDraftAndPublish(uid);
155
165
  return strapi.db.transaction(async ()=>{
156
166
  const results = await Promise.all(documentIds.map((documentId)=>this.publish(documentId, uid, {
157
167
  locale,
@@ -162,6 +172,7 @@ const documentManager = ({ strapi })=>{
162
172
  });
163
173
  },
164
174
  async unpublishMany (documentIds, uid, opts = {}) {
175
+ assertDraftAndPublish(uid);
165
176
  const unpublishedEntries = await strapi.db.transaction(async ()=>{
166
177
  return Promise.all(documentIds.map((id)=>strapi.documents(uid).unpublish({
167
178
  ...opts,
@@ -176,6 +187,7 @@ const documentManager = ({ strapi })=>{
176
187
  };
177
188
  },
178
189
  async unpublish (id, uid, opts = {}) {
190
+ assertDraftAndPublish(uid);
179
191
  const populate$1 = opts.populate ?? await populate.buildDeepPopulate(uid);
180
192
  const params = {
181
193
  ...opts,
@@ -187,6 +199,7 @@ const documentManager = ({ strapi })=>{
187
199
  }).then((result)=>result?.entries.at(0));
188
200
  },
189
201
  async discardDraft (id, uid, opts = {}) {
202
+ assertDraftAndPublish(uid);
190
203
  const populate$1 = opts.populate ?? await populate.buildDeepPopulate(uid);
191
204
  const params = {
192
205
  ...opts,
@@ -1 +1 @@
1
- {"version":3,"file":"document-manager.js","sources":["../../../server/src/services/document-manager.ts"],"sourcesContent":["import { omit, flow } from 'lodash';\n\nimport { contentTypes, pagination } from '@strapi/utils';\nimport type { Core, Modules, UID } from '@strapi/types';\n\nimport { buildDeepPopulate, getDeepPopulate, getDeepPopulateDraftCount } from './utils/populate';\nimport { EMPTY_DRAFT_RELATION_COUNTS } from './utils/draft-relations';\nimport { sumDraftCounts } from './utils/draft';\n\ntype DocService = Modules.Documents.ServiceInstance;\ntype DocServiceParams<TAction extends keyof DocService> = Parameters<DocService[TAction]>[0];\nexport type Document = Modules.Documents.Result<UID.ContentType>;\n\nconst { PUBLISHED_AT_ATTRIBUTE } = contentTypes.constants;\n\nconst omitPublishedAtField = <T extends object>(document: T) =>\n omit(document, PUBLISHED_AT_ATTRIBUTE);\nconst omitIdField = <T extends object>(document: T) => omit(document, 'id');\n\nconst documentManager = ({ strapi }: { strapi: Core.Strapi }) => {\n return {\n async findOne(\n id: string,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'findOne'>, 'documentId'> = {}\n ) {\n return strapi.documents(uid).findOne({ ...opts, documentId: id });\n },\n\n /**\n * Find multiple (or all) locales for a document\n */\n async findLocales(\n id: string | string[] | undefined,\n uid: UID.CollectionType,\n opts: {\n populate?: Modules.Documents.Params.Pick<any, 'populate'>;\n locale?: string | string[] | '*';\n isPublished?: boolean;\n }\n ) {\n // Will look for a specific locale by default\n const where: any = {};\n\n // Might not have an id if querying a single type\n if (id) {\n where.documentId = id;\n }\n\n // Search in array of locales\n if (Array.isArray(opts.locale)) {\n where.locale = { $in: opts.locale };\n } else if (opts.locale && opts.locale !== '*') {\n // Look for a specific locale, ignore if looking for all locales\n where.locale = opts.locale;\n }\n\n // Published is passed, so we filter on it, otherwise we don't filter\n if (typeof opts.isPublished === 'boolean') {\n where.publishedAt = { $notNull: opts.isPublished };\n }\n\n return strapi.db.query(uid).findMany({ populate: opts.populate, where });\n },\n\n async findMany(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = { ...opts, populate: getDeepPopulate(uid) } as typeof opts;\n return strapi.documents(uid).findMany(params);\n },\n\n async findPage(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = pagination.withDefaultPagination(opts || {}, {\n maxLimit: 1000,\n });\n\n const { populate: _populate, sort: _sort, ...countParams } = params;\n const [documents, total = 0] = await Promise.all([\n strapi.documents(uid).findMany(params),\n strapi.documents(uid).count(countParams),\n ]);\n\n return {\n results: documents,\n pagination: pagination.transformPagedPaginationInfo(params, total),\n };\n },\n\n async create(uid: UID.CollectionType, opts: DocServiceParams<'create'> = {} as any) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, status: 'draft' as const, populate };\n\n return strapi.documents(uid).create(params);\n },\n\n async update(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'update'>, 'documentId'> = {} as any\n ) {\n const publishData = flow(omitPublishedAtField, omitIdField)(opts.data || {});\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, data: publishData, populate, status: 'draft' };\n\n return strapi.documents(uid).update({ ...params, documentId: id });\n },\n\n async clone(\n id: Modules.Documents.ID,\n body: Partial<Modules.Documents.Params.Data.Input<UID.CollectionType>>,\n uid: UID.CollectionType\n ) {\n const populate = await buildDeepPopulate(uid);\n\n // Extract the locale to pass it as a plain param\n const locale = body?.locale;\n const params = {\n // Ensure id and documentId are not copied to the clone\n data: omit(body, ['id', 'documentId']),\n locale,\n populate,\n };\n\n return strapi\n .documents(uid)\n .clone({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n /**\n * Check if a document exists\n */\n async exists(uid: UID.CollectionType, id?: string) {\n // Collection type\n if (id) {\n const count = await strapi.db.query(uid).count({ where: { documentId: id } });\n return count > 0;\n }\n\n // Single type\n const count = await strapi.db.query(uid).count();\n return count > 0;\n },\n\n async delete(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'delete'>, 'documentId'> = {} as any\n ) {\n await strapi.documents(uid).delete({\n ...opts,\n documentId: id,\n });\n return {};\n },\n\n // FIXME: handle relations\n async deleteMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: DocServiceParams<'findMany'> & { locale?: string } = {}\n ) {\n const deletedEntries = await strapi.db.transaction(async () => {\n return Promise.all(documentIds.map(async (id) => this.delete(id, uid, opts)));\n });\n\n return { count: deletedEntries.length };\n },\n\n async publish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'publish'>, 'documentId'> & { populate?: object } = {} as any\n ) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .publish({ ...params, documentId: id })\n .then((result) => result?.entries);\n },\n\n async publishMany(uid: UID.ContentType, documentIds: string[], locale?: string | string[]) {\n return strapi.db.transaction(async () => {\n const results = await Promise.all(\n documentIds.map((documentId) => this.publish(documentId, uid, { locale, populate: {} }))\n );\n\n const publishedEntitiesCount = results.flat().filter(Boolean).length;\n return publishedEntitiesCount;\n });\n },\n\n async unpublishMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> = {} as any\n ) {\n const unpublishedEntries = await strapi.db.transaction(async () => {\n return Promise.all(\n documentIds.map((id) =>\n strapi\n .documents(uid)\n .unpublish({ ...opts, documentId: id, populate: {} })\n .then((result) => result?.entries)\n )\n );\n });\n\n const unpublishedEntitiesCount = unpublishedEntries.flat().filter(Boolean).length;\n\n // Return the number of unpublished entities\n return { count: unpublishedEntitiesCount };\n },\n\n async unpublish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> & { populate?: object } = {} as any\n ) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .unpublish({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async discardDraft(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'discardDraft'>, 'documentId'> & { populate?: object } = {} as any\n ) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .discardDraft({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async countDraftRelations(id: string, uid: UID.ContentType, locale: string) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return EMPTY_DRAFT_RELATION_COUNTS;\n }\n\n const document = await strapi.documents(uid).findOne({ documentId: id, populate, locale });\n if (!document) {\n return EMPTY_DRAFT_RELATION_COUNTS;\n }\n\n return sumDraftCounts(strapi, document, uid);\n },\n\n async countManyEntriesDraftRelations(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n locale: string | string[]\n ) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return 0;\n }\n\n const entities = await strapi.documents(uid).findMany({\n populate,\n filters: { documentId: { $in: documentIds } } as any,\n locale,\n status: 'draft',\n });\n\n const counts = await Promise.all(\n entities.map((entity: Document) => sumDraftCounts(strapi, entity, uid))\n );\n\n return counts.reduce(\n (total, entityCounts) =>\n total + entityCounts.unpublishedRelations + entityCounts.draftM2mLinks,\n 0\n );\n },\n };\n};\n\nexport type DocumentManagerService = typeof documentManager;\n\nexport default documentManager;\n"],"names":["PUBLISHED_AT_ATTRIBUTE","contentTypes","constants","omitPublishedAtField","document","omit","omitIdField","documentManager","strapi","findOne","id","uid","opts","documents","documentId","findLocales","where","Array","isArray","locale","$in","isPublished","publishedAt","$notNull","db","query","findMany","populate","params","getDeepPopulate","findPage","pagination","withDefaultPagination","maxLimit","_populate","sort","_sort","countParams","total","Promise","all","count","results","transformPagedPaginationInfo","create","buildDeepPopulate","status","update","publishData","flow","data","clone","body","then","result","entries","at","exists","delete","deleteMany","documentIds","deletedEntries","transaction","map","length","publish","publishMany","publishedEntitiesCount","flat","filter","Boolean","unpublishMany","unpublishedEntries","unpublish","unpublishedEntitiesCount","discardDraft","countDraftRelations","hasRelations","getDeepPopulateDraftCount","EMPTY_DRAFT_RELATION_COUNTS","sumDraftCounts","countManyEntriesDraftRelations","entities","filters","counts","entity","reduce","entityCounts","unpublishedRelations","draftM2mLinks"],"mappings":"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"}
1
+ {"version":3,"file":"document-manager.js","sources":["../../../server/src/services/document-manager.ts"],"sourcesContent":["import { omit, flow } from 'lodash';\n\nimport { contentTypes, errors, pagination } from '@strapi/utils';\nimport type { Core, Modules, UID } from '@strapi/types';\n\nimport { buildDeepPopulate, getDeepPopulate, getDeepPopulateDraftCount } from './utils/populate';\nimport { EMPTY_DRAFT_RELATION_COUNTS } from './utils/draft-relations';\nimport { sumDraftCounts } from './utils/draft';\n\ntype DocService = Modules.Documents.ServiceInstance;\ntype DocServiceParams<TAction extends keyof DocService> = Parameters<DocService[TAction]>[0];\nexport type Document = Modules.Documents.Result<UID.ContentType>;\n\nconst { PUBLISHED_AT_ATTRIBUTE } = contentTypes.constants;\n\nconst omitPublishedAtField = <T extends object>(document: T) =>\n omit(document, PUBLISHED_AT_ATTRIBUTE);\nconst omitIdField = <T extends object>(document: T) => omit(document, 'id');\n\nconst documentManager = ({ strapi }: { strapi: Core.Strapi }) => {\n /**\n * The document service has no publish, unpublish or discardDraft methods\n * for content types without draft and publish\n */\n const assertDraftAndPublish = (uid: UID.ContentType) => {\n if (contentTypes.hasDraftAndPublish(strapi.getModel(uid)) === false) {\n throw new errors.ValidationError('Draft and publish is not enabled for this content type');\n }\n };\n\n return {\n async findOne(\n id: string,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'findOne'>, 'documentId'> = {}\n ) {\n return strapi.documents(uid).findOne({ ...opts, documentId: id });\n },\n\n /**\n * Find multiple (or all) locales for a document\n */\n async findLocales(\n id: string | string[] | undefined,\n uid: UID.CollectionType,\n opts: {\n populate?: Modules.Documents.Params.Pick<any, 'populate'>;\n locale?: string | string[] | '*';\n isPublished?: boolean;\n }\n ) {\n // Will look for a specific locale by default\n const where: any = {};\n\n // Might not have an id if querying a single type\n if (id) {\n where.documentId = id;\n }\n\n // Search in array of locales\n if (Array.isArray(opts.locale)) {\n where.locale = { $in: opts.locale };\n } else if (opts.locale && opts.locale !== '*') {\n // Look for a specific locale, ignore if looking for all locales\n where.locale = opts.locale;\n }\n\n // Published is passed, so we filter on it, otherwise we don't filter\n if (typeof opts.isPublished === 'boolean') {\n where.publishedAt = { $notNull: opts.isPublished };\n }\n\n return strapi.db.query(uid).findMany({ populate: opts.populate, where });\n },\n\n async findMany(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = { ...opts, populate: getDeepPopulate(uid) } as typeof opts;\n return strapi.documents(uid).findMany(params);\n },\n\n async findPage(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = pagination.withDefaultPagination(opts || {}, {\n maxLimit: 1000,\n });\n\n const { populate: _populate, sort: _sort, ...countParams } = params;\n const [documents, total = 0] = await Promise.all([\n strapi.documents(uid).findMany(params),\n strapi.documents(uid).count(countParams),\n ]);\n\n return {\n results: documents,\n pagination: pagination.transformPagedPaginationInfo(params, total),\n };\n },\n\n async create(uid: UID.CollectionType, opts: DocServiceParams<'create'> = {} as any) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, status: 'draft' as const, populate };\n\n return strapi.documents(uid).create(params);\n },\n\n async update(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'update'>, 'documentId'> = {} as any\n ) {\n const publishData = flow(omitPublishedAtField, omitIdField)(opts.data || {});\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, data: publishData, populate, status: 'draft' };\n\n return strapi.documents(uid).update({ ...params, documentId: id });\n },\n\n async clone(\n id: Modules.Documents.ID,\n body: Partial<Modules.Documents.Params.Data.Input<UID.CollectionType>>,\n uid: UID.CollectionType\n ) {\n const populate = await buildDeepPopulate(uid);\n\n // Extract the locale to pass it as a plain param\n const locale = body?.locale;\n const params = {\n // Ensure id and documentId are not copied to the clone\n data: omit(body, ['id', 'documentId']),\n locale,\n populate,\n };\n\n return strapi\n .documents(uid)\n .clone({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n /**\n * Check if a document exists\n */\n async exists(uid: UID.CollectionType, id?: string) {\n // Collection type\n if (id) {\n const count = await strapi.db.query(uid).count({ where: { documentId: id } });\n return count > 0;\n }\n\n // Single type\n const count = await strapi.db.query(uid).count();\n return count > 0;\n },\n\n async delete(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'delete'>, 'documentId'> = {} as any\n ) {\n await strapi.documents(uid).delete({\n ...opts,\n documentId: id,\n });\n return {};\n },\n\n // FIXME: handle relations\n async deleteMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: DocServiceParams<'findMany'> & { locale?: string } = {}\n ) {\n const deletedEntries = await strapi.db.transaction(async () => {\n return Promise.all(documentIds.map(async (id) => this.delete(id, uid, opts)));\n });\n\n return { count: deletedEntries.length };\n },\n\n async publish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'publish'>, 'documentId'> & { populate?: object } = {} as any\n ) {\n assertDraftAndPublish(uid);\n\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .publish({ ...params, documentId: id })\n .then((result) => result?.entries);\n },\n\n async publishMany(uid: UID.ContentType, documentIds: string[], locale?: string | string[]) {\n assertDraftAndPublish(uid);\n\n return strapi.db.transaction(async () => {\n const results = await Promise.all(\n documentIds.map((documentId) => this.publish(documentId, uid, { locale, populate: {} }))\n );\n\n const publishedEntitiesCount = results.flat().filter(Boolean).length;\n return publishedEntitiesCount;\n });\n },\n\n async unpublishMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> = {} as any\n ) {\n assertDraftAndPublish(uid);\n\n const unpublishedEntries = await strapi.db.transaction(async () => {\n return Promise.all(\n documentIds.map((id) =>\n strapi\n .documents(uid)\n .unpublish({ ...opts, documentId: id, populate: {} })\n .then((result) => result?.entries)\n )\n );\n });\n\n const unpublishedEntitiesCount = unpublishedEntries.flat().filter(Boolean).length;\n\n // Return the number of unpublished entities\n return { count: unpublishedEntitiesCount };\n },\n\n async unpublish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> & { populate?: object } = {} as any\n ) {\n assertDraftAndPublish(uid);\n\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .unpublish({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async discardDraft(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'discardDraft'>, 'documentId'> & { populate?: object } = {} as any\n ) {\n assertDraftAndPublish(uid);\n\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .discardDraft({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async countDraftRelations(id: string, uid: UID.ContentType, locale: string) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return EMPTY_DRAFT_RELATION_COUNTS;\n }\n\n const document = await strapi.documents(uid).findOne({ documentId: id, populate, locale });\n if (!document) {\n return EMPTY_DRAFT_RELATION_COUNTS;\n }\n\n return sumDraftCounts(strapi, document, uid);\n },\n\n async countManyEntriesDraftRelations(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n locale: string | string[]\n ) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return 0;\n }\n\n const entities = await strapi.documents(uid).findMany({\n populate,\n filters: { documentId: { $in: documentIds } } as any,\n locale,\n status: 'draft',\n });\n\n const counts = await Promise.all(\n entities.map((entity: Document) => sumDraftCounts(strapi, entity, uid))\n );\n\n return counts.reduce(\n (total, entityCounts) =>\n total + entityCounts.unpublishedRelations + entityCounts.draftM2mLinks,\n 0\n );\n },\n };\n};\n\nexport type DocumentManagerService = typeof documentManager;\n\nexport default documentManager;\n"],"names":["PUBLISHED_AT_ATTRIBUTE","contentTypes","constants","omitPublishedAtField","document","omit","omitIdField","documentManager","strapi","assertDraftAndPublish","uid","hasDraftAndPublish","getModel","errors","ValidationError","findOne","id","opts","documents","documentId","findLocales","where","Array","isArray","locale","$in","isPublished","publishedAt","$notNull","db","query","findMany","populate","params","getDeepPopulate","findPage","pagination","withDefaultPagination","maxLimit","_populate","sort","_sort","countParams","total","Promise","all","count","results","transformPagedPaginationInfo","create","buildDeepPopulate","status","update","publishData","flow","data","clone","body","then","result","entries","at","exists","delete","deleteMany","documentIds","deletedEntries","transaction","map","length","publish","publishMany","publishedEntitiesCount","flat","filter","Boolean","unpublishMany","unpublishedEntries","unpublish","unpublishedEntitiesCount","discardDraft","countDraftRelations","hasRelations","getDeepPopulateDraftCount","EMPTY_DRAFT_RELATION_COUNTS","sumDraftCounts","countManyEntriesDraftRelations","entities","filters","counts","entity","reduce","entityCounts","unpublishedRelations","draftM2mLinks"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { omit, flow } from 'lodash';
2
- import { contentTypes, pagination } from '@strapi/utils';
2
+ import { contentTypes, pagination, errors } from '@strapi/utils';
3
3
  import { getDeepPopulateDraftCount, buildDeepPopulate, getDeepPopulate } from './utils/populate.mjs';
4
4
  import { EMPTY_DRAFT_RELATION_COUNTS } from './utils/draft-relations.mjs';
5
5
  import { sumDraftCounts } from './utils/draft.mjs';
@@ -8,6 +8,14 @@ const { PUBLISHED_AT_ATTRIBUTE } = contentTypes.constants;
8
8
  const omitPublishedAtField = (document)=>omit(document, PUBLISHED_AT_ATTRIBUTE);
9
9
  const omitIdField = (document)=>omit(document, 'id');
10
10
  const documentManager = ({ strapi })=>{
11
+ /**
12
+ * The document service has no publish, unpublish or discardDraft methods
13
+ * for content types without draft and publish
14
+ */ const assertDraftAndPublish = (uid)=>{
15
+ if (contentTypes.hasDraftAndPublish(strapi.getModel(uid)) === false) {
16
+ throw new errors.ValidationError('Draft and publish is not enabled for this content type');
17
+ }
18
+ };
11
19
  return {
12
20
  async findOne (id, uid, opts = {}) {
13
21
  return strapi.documents(uid).findOne({
@@ -139,6 +147,7 @@ const documentManager = ({ strapi })=>{
139
147
  };
140
148
  },
141
149
  async publish (id, uid, opts = {}) {
150
+ assertDraftAndPublish(uid);
142
151
  const populate = opts.populate ?? await buildDeepPopulate(uid);
143
152
  const params = {
144
153
  ...opts,
@@ -150,6 +159,7 @@ const documentManager = ({ strapi })=>{
150
159
  }).then((result)=>result?.entries);
151
160
  },
152
161
  async publishMany (uid, documentIds, locale) {
162
+ assertDraftAndPublish(uid);
153
163
  return strapi.db.transaction(async ()=>{
154
164
  const results = await Promise.all(documentIds.map((documentId)=>this.publish(documentId, uid, {
155
165
  locale,
@@ -160,6 +170,7 @@ const documentManager = ({ strapi })=>{
160
170
  });
161
171
  },
162
172
  async unpublishMany (documentIds, uid, opts = {}) {
173
+ assertDraftAndPublish(uid);
163
174
  const unpublishedEntries = await strapi.db.transaction(async ()=>{
164
175
  return Promise.all(documentIds.map((id)=>strapi.documents(uid).unpublish({
165
176
  ...opts,
@@ -174,6 +185,7 @@ const documentManager = ({ strapi })=>{
174
185
  };
175
186
  },
176
187
  async unpublish (id, uid, opts = {}) {
188
+ assertDraftAndPublish(uid);
177
189
  const populate = opts.populate ?? await buildDeepPopulate(uid);
178
190
  const params = {
179
191
  ...opts,
@@ -185,6 +197,7 @@ const documentManager = ({ strapi })=>{
185
197
  }).then((result)=>result?.entries.at(0));
186
198
  },
187
199
  async discardDraft (id, uid, opts = {}) {
200
+ assertDraftAndPublish(uid);
188
201
  const populate = opts.populate ?? await buildDeepPopulate(uid);
189
202
  const params = {
190
203
  ...opts,
@@ -1 +1 @@
1
- {"version":3,"file":"document-manager.mjs","sources":["../../../server/src/services/document-manager.ts"],"sourcesContent":["import { omit, flow } from 'lodash';\n\nimport { contentTypes, pagination } from '@strapi/utils';\nimport type { Core, Modules, UID } from '@strapi/types';\n\nimport { buildDeepPopulate, getDeepPopulate, getDeepPopulateDraftCount } from './utils/populate';\nimport { EMPTY_DRAFT_RELATION_COUNTS } from './utils/draft-relations';\nimport { sumDraftCounts } from './utils/draft';\n\ntype DocService = Modules.Documents.ServiceInstance;\ntype DocServiceParams<TAction extends keyof DocService> = Parameters<DocService[TAction]>[0];\nexport type Document = Modules.Documents.Result<UID.ContentType>;\n\nconst { PUBLISHED_AT_ATTRIBUTE } = contentTypes.constants;\n\nconst omitPublishedAtField = <T extends object>(document: T) =>\n omit(document, PUBLISHED_AT_ATTRIBUTE);\nconst omitIdField = <T extends object>(document: T) => omit(document, 'id');\n\nconst documentManager = ({ strapi }: { strapi: Core.Strapi }) => {\n return {\n async findOne(\n id: string,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'findOne'>, 'documentId'> = {}\n ) {\n return strapi.documents(uid).findOne({ ...opts, documentId: id });\n },\n\n /**\n * Find multiple (or all) locales for a document\n */\n async findLocales(\n id: string | string[] | undefined,\n uid: UID.CollectionType,\n opts: {\n populate?: Modules.Documents.Params.Pick<any, 'populate'>;\n locale?: string | string[] | '*';\n isPublished?: boolean;\n }\n ) {\n // Will look for a specific locale by default\n const where: any = {};\n\n // Might not have an id if querying a single type\n if (id) {\n where.documentId = id;\n }\n\n // Search in array of locales\n if (Array.isArray(opts.locale)) {\n where.locale = { $in: opts.locale };\n } else if (opts.locale && opts.locale !== '*') {\n // Look for a specific locale, ignore if looking for all locales\n where.locale = opts.locale;\n }\n\n // Published is passed, so we filter on it, otherwise we don't filter\n if (typeof opts.isPublished === 'boolean') {\n where.publishedAt = { $notNull: opts.isPublished };\n }\n\n return strapi.db.query(uid).findMany({ populate: opts.populate, where });\n },\n\n async findMany(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = { ...opts, populate: getDeepPopulate(uid) } as typeof opts;\n return strapi.documents(uid).findMany(params);\n },\n\n async findPage(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = pagination.withDefaultPagination(opts || {}, {\n maxLimit: 1000,\n });\n\n const { populate: _populate, sort: _sort, ...countParams } = params;\n const [documents, total = 0] = await Promise.all([\n strapi.documents(uid).findMany(params),\n strapi.documents(uid).count(countParams),\n ]);\n\n return {\n results: documents,\n pagination: pagination.transformPagedPaginationInfo(params, total),\n };\n },\n\n async create(uid: UID.CollectionType, opts: DocServiceParams<'create'> = {} as any) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, status: 'draft' as const, populate };\n\n return strapi.documents(uid).create(params);\n },\n\n async update(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'update'>, 'documentId'> = {} as any\n ) {\n const publishData = flow(omitPublishedAtField, omitIdField)(opts.data || {});\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, data: publishData, populate, status: 'draft' };\n\n return strapi.documents(uid).update({ ...params, documentId: id });\n },\n\n async clone(\n id: Modules.Documents.ID,\n body: Partial<Modules.Documents.Params.Data.Input<UID.CollectionType>>,\n uid: UID.CollectionType\n ) {\n const populate = await buildDeepPopulate(uid);\n\n // Extract the locale to pass it as a plain param\n const locale = body?.locale;\n const params = {\n // Ensure id and documentId are not copied to the clone\n data: omit(body, ['id', 'documentId']),\n locale,\n populate,\n };\n\n return strapi\n .documents(uid)\n .clone({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n /**\n * Check if a document exists\n */\n async exists(uid: UID.CollectionType, id?: string) {\n // Collection type\n if (id) {\n const count = await strapi.db.query(uid).count({ where: { documentId: id } });\n return count > 0;\n }\n\n // Single type\n const count = await strapi.db.query(uid).count();\n return count > 0;\n },\n\n async delete(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'delete'>, 'documentId'> = {} as any\n ) {\n await strapi.documents(uid).delete({\n ...opts,\n documentId: id,\n });\n return {};\n },\n\n // FIXME: handle relations\n async deleteMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: DocServiceParams<'findMany'> & { locale?: string } = {}\n ) {\n const deletedEntries = await strapi.db.transaction(async () => {\n return Promise.all(documentIds.map(async (id) => this.delete(id, uid, opts)));\n });\n\n return { count: deletedEntries.length };\n },\n\n async publish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'publish'>, 'documentId'> & { populate?: object } = {} as any\n ) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .publish({ ...params, documentId: id })\n .then((result) => result?.entries);\n },\n\n async publishMany(uid: UID.ContentType, documentIds: string[], locale?: string | string[]) {\n return strapi.db.transaction(async () => {\n const results = await Promise.all(\n documentIds.map((documentId) => this.publish(documentId, uid, { locale, populate: {} }))\n );\n\n const publishedEntitiesCount = results.flat().filter(Boolean).length;\n return publishedEntitiesCount;\n });\n },\n\n async unpublishMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> = {} as any\n ) {\n const unpublishedEntries = await strapi.db.transaction(async () => {\n return Promise.all(\n documentIds.map((id) =>\n strapi\n .documents(uid)\n .unpublish({ ...opts, documentId: id, populate: {} })\n .then((result) => result?.entries)\n )\n );\n });\n\n const unpublishedEntitiesCount = unpublishedEntries.flat().filter(Boolean).length;\n\n // Return the number of unpublished entities\n return { count: unpublishedEntitiesCount };\n },\n\n async unpublish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> & { populate?: object } = {} as any\n ) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .unpublish({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async discardDraft(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'discardDraft'>, 'documentId'> & { populate?: object } = {} as any\n ) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .discardDraft({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async countDraftRelations(id: string, uid: UID.ContentType, locale: string) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return EMPTY_DRAFT_RELATION_COUNTS;\n }\n\n const document = await strapi.documents(uid).findOne({ documentId: id, populate, locale });\n if (!document) {\n return EMPTY_DRAFT_RELATION_COUNTS;\n }\n\n return sumDraftCounts(strapi, document, uid);\n },\n\n async countManyEntriesDraftRelations(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n locale: string | string[]\n ) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return 0;\n }\n\n const entities = await strapi.documents(uid).findMany({\n populate,\n filters: { documentId: { $in: documentIds } } as any,\n locale,\n status: 'draft',\n });\n\n const counts = await Promise.all(\n entities.map((entity: Document) => sumDraftCounts(strapi, entity, uid))\n );\n\n return counts.reduce(\n (total, entityCounts) =>\n total + entityCounts.unpublishedRelations + entityCounts.draftM2mLinks,\n 0\n );\n },\n };\n};\n\nexport type DocumentManagerService = typeof documentManager;\n\nexport default documentManager;\n"],"names":["PUBLISHED_AT_ATTRIBUTE","contentTypes","constants","omitPublishedAtField","document","omit","omitIdField","documentManager","strapi","findOne","id","uid","opts","documents","documentId","findLocales","where","Array","isArray","locale","$in","isPublished","publishedAt","$notNull","db","query","findMany","populate","params","getDeepPopulate","findPage","pagination","withDefaultPagination","maxLimit","_populate","sort","_sort","countParams","total","Promise","all","count","results","transformPagedPaginationInfo","create","buildDeepPopulate","status","update","publishData","flow","data","clone","body","then","result","entries","at","exists","delete","deleteMany","documentIds","deletedEntries","transaction","map","length","publish","publishMany","publishedEntitiesCount","flat","filter","Boolean","unpublishMany","unpublishedEntries","unpublish","unpublishedEntitiesCount","discardDraft","countDraftRelations","hasRelations","getDeepPopulateDraftCount","EMPTY_DRAFT_RELATION_COUNTS","sumDraftCounts","countManyEntriesDraftRelations","entities","filters","counts","entity","reduce","entityCounts","unpublishedRelations","draftM2mLinks"],"mappings":";;;;;;AAaA,MAAM,EAAEA,sBAAsB,EAAE,GAAGC,aAAaC,SAAS;AAEzD,MAAMC,oBAAAA,GAAuB,CAAmBC,QAAAA,GAC9CC,IAAAA,CAAKD,QAAAA,EAAUJ,sBAAAA,CAAAA;AACjB,MAAMM,WAAAA,GAAc,CAAmBF,QAAAA,GAAgBC,IAAAA,CAAKD,QAAAA,EAAU,IAAA,CAAA;AAEtE,MAAMG,eAAAA,GAAkB,CAAC,EAAEC,MAAM,EAA2B,GAAA;IAC1D,OAAO;AACL,QAAA,MAAMC,SACJC,EAAU,EACVC,GAAuB,EACvBC,IAAAA,GAAwD,EAAE,EAAA;AAE1D,YAAA,OAAOJ,MAAAA,CAAOK,SAAS,CAACF,GAAAA,CAAAA,CAAKF,OAAO,CAAC;AAAE,gBAAA,GAAGG,IAAI;gBAAEE,UAAAA,EAAYJ;AAAG,aAAA,CAAA;AACjE,QAAA,CAAA;AAEA;;AAEC,QACD,MAAMK,WAAAA,CAAAA,CACJL,EAAiC,EACjCC,GAAuB,EACvBC,IAIC,EAAA;;AAGD,YAAA,MAAMI,QAAa,EAAC;;AAGpB,YAAA,IAAIN,EAAAA,EAAI;AACNM,gBAAAA,KAAAA,CAAMF,UAAU,GAAGJ,EAAAA;AACrB,YAAA;;AAGA,YAAA,IAAIO,KAAAA,CAAMC,OAAO,CAACN,IAAAA,CAAKO,MAAM,CAAA,EAAG;AAC9BH,gBAAAA,KAAAA,CAAMG,MAAM,GAAG;AAAEC,oBAAAA,GAAAA,EAAKR,KAAKO;AAAO,iBAAA;AACpC,YAAA,CAAA,MAAO,IAAIP,IAAAA,CAAKO,MAAM,IAAIP,IAAAA,CAAKO,MAAM,KAAK,GAAA,EAAK;;gBAE7CH,KAAAA,CAAMG,MAAM,GAAGP,IAAAA,CAAKO,MAAM;AAC5B,YAAA;;AAGA,YAAA,IAAI,OAAOP,IAAAA,CAAKS,WAAW,KAAK,SAAA,EAAW;AACzCL,gBAAAA,KAAAA,CAAMM,WAAW,GAAG;AAAEC,oBAAAA,QAAAA,EAAUX,KAAKS;AAAY,iBAAA;AACnD,YAAA;AAEA,YAAA,OAAOb,OAAOgB,EAAE,CAACC,KAAK,CAACd,GAAAA,CAAAA,CAAKe,QAAQ,CAAC;AAAEC,gBAAAA,QAAAA,EAAUf,KAAKe,QAAQ;AAAEX,gBAAAA;AAAM,aAAA,CAAA;AACxE,QAAA,CAAA;QAEA,MAAMU,QAAAA,CAAAA,CAASd,IAAkC,EAAED,GAAuB,EAAA;AACxE,YAAA,MAAMiB,MAAAA,GAAS;AAAE,gBAAA,GAAGhB,IAAI;AAAEe,gBAAAA,QAAAA,EAAUE,eAAAA,CAAgBlB,GAAAA;AAAK,aAAA;AACzD,YAAA,OAAOH,MAAAA,CAAOK,SAAS,CAACF,GAAAA,CAAAA,CAAKe,QAAQ,CAACE,MAAAA,CAAAA;AACxC,QAAA,CAAA;QAEA,MAAME,QAAAA,CAAAA,CAASlB,IAAkC,EAAED,GAAuB,EAAA;AACxE,YAAA,MAAMiB,SAASG,UAAAA,CAAWC,qBAAqB,CAACpB,IAAAA,IAAQ,EAAC,EAAG;gBAC1DqB,QAAAA,EAAU;AACZ,aAAA,CAAA;YAEA,MAAM,EAAEN,UAAUO,SAAS,EAAEC,MAAMC,KAAK,EAAE,GAAGC,WAAAA,EAAa,GAAGT,MAAAA;YAC7D,MAAM,CAACf,WAAWyB,KAAAA,GAAQ,CAAC,CAAC,GAAG,MAAMC,OAAAA,CAAQC,GAAG,CAAC;AAC/ChC,gBAAAA,MAAAA,CAAOK,SAAS,CAACF,GAAAA,CAAAA,CAAKe,QAAQ,CAACE,MAAAA,CAAAA;AAC/BpB,gBAAAA,MAAAA,CAAOK,SAAS,CAACF,GAAAA,CAAAA,CAAK8B,KAAK,CAACJ,WAAAA;AAC7B,aAAA,CAAA;YAED,OAAO;gBACLK,OAAAA,EAAS7B,SAAAA;gBACTkB,UAAAA,EAAYA,UAAAA,CAAWY,4BAA4B,CAACf,MAAAA,EAAQU,KAAAA;AAC9D,aAAA;AACF,QAAA,CAAA;AAEA,QAAA,MAAMM,MAAAA,CAAAA,CAAOjC,GAAuB,EAAEC,IAAAA,GAAmC,EAAS,EAAA;AAChF,YAAA,MAAMe,QAAAA,GAAWf,IAAAA,CAAKe,QAAQ,IAAK,MAAMkB,iBAAAA,CAAkBlC,GAAAA,CAAAA;AAC3D,YAAA,MAAMiB,MAAAA,GAAS;AAAE,gBAAA,GAAGhB,IAAI;gBAAEkC,MAAAA,EAAQ,OAAA;AAAkBnB,gBAAAA;AAAS,aAAA;AAE7D,YAAA,OAAOnB,MAAAA,CAAOK,SAAS,CAACF,GAAAA,CAAAA,CAAKiC,MAAM,CAAChB,MAAAA,CAAAA;AACtC,QAAA,CAAA;AAEA,QAAA,MAAMmB,QACJrC,EAAwB,EACxBC,GAAuB,EACvBC,IAAAA,GAAuD,EAAS,EAAA;AAEhE,YAAA,MAAMoC,cAAcC,IAAAA,CAAK9C,oBAAAA,EAAsBG,aAAaM,IAAAA,CAAKsC,IAAI,IAAI,EAAC,CAAA;AAC1E,YAAA,MAAMvB,QAAAA,GAAWf,IAAAA,CAAKe,QAAQ,IAAK,MAAMkB,iBAAAA,CAAkBlC,GAAAA,CAAAA;AAC3D,YAAA,MAAMiB,MAAAA,GAAS;AAAE,gBAAA,GAAGhB,IAAI;gBAAEsC,IAAAA,EAAMF,WAAAA;AAAarB,gBAAAA,QAAAA;gBAAUmB,MAAAA,EAAQ;AAAQ,aAAA;AAEvE,YAAA,OAAOtC,MAAAA,CAAOK,SAAS,CAACF,GAAAA,CAAAA,CAAKoC,MAAM,CAAC;AAAE,gBAAA,GAAGnB,MAAM;gBAAEd,UAAAA,EAAYJ;AAAG,aAAA,CAAA;AAClE,QAAA,CAAA;AAEA,QAAA,MAAMyC,KAAAA,CAAAA,CACJzC,EAAwB,EACxB0C,IAAsE,EACtEzC,GAAuB,EAAA;YAEvB,MAAMgB,QAAAA,GAAW,MAAMkB,iBAAAA,CAAkBlC,GAAAA,CAAAA;;AAGzC,YAAA,MAAMQ,SAASiC,IAAAA,EAAMjC,MAAAA;AACrB,YAAA,MAAMS,MAAAA,GAAS;;AAEbsB,gBAAAA,IAAAA,EAAM7C,KAAK+C,IAAAA,EAAM;AAAC,oBAAA,IAAA;AAAM,oBAAA;AAAa,iBAAA,CAAA;AACrCjC,gBAAAA,MAAAA;AACAQ,gBAAAA;AACF,aAAA;AAEA,YAAA,OAAOnB,MAAAA,CACJK,SAAS,CAACF,GAAAA,CAAAA,CACVwC,KAAK,CAAC;AAAE,gBAAA,GAAGvB,MAAM;gBAAEd,UAAAA,EAAYJ;AAAG,aAAA,CAAA,CAClC2C,IAAI,CAAC,CAACC,MAAAA,GAAWA,MAAAA,EAAQC,QAAQC,EAAAA,CAAG,CAAA,CAAA,CAAA;AACzC,QAAA,CAAA;AAEA;;AAEC,QACD,MAAMC,MAAAA,CAAAA,CAAO9C,GAAuB,EAAED,EAAW,EAAA;;AAE/C,YAAA,IAAIA,EAAAA,EAAI;gBACN,MAAM+B,KAAAA,GAAQ,MAAMjC,MAAAA,CAAOgB,EAAE,CAACC,KAAK,CAACd,GAAAA,CAAAA,CAAK8B,KAAK,CAAC;oBAAEzB,KAAAA,EAAO;wBAAEF,UAAAA,EAAYJ;AAAG;AAAE,iBAAA,CAAA;AAC3E,gBAAA,OAAO+B,KAAAA,GAAQ,CAAA;AACjB,YAAA;;YAGA,MAAMA,KAAAA,GAAQ,MAAMjC,MAAAA,CAAOgB,EAAE,CAACC,KAAK,CAACd,KAAK8B,KAAK,EAAA;AAC9C,YAAA,OAAOA,KAAAA,GAAQ,CAAA;AACjB,QAAA,CAAA;AAEA,QAAA,MAAMiB,QACJhD,EAAwB,EACxBC,GAAuB,EACvBC,IAAAA,GAAuD,EAAS,EAAA;AAEhE,YAAA,MAAMJ,MAAAA,CAAOK,SAAS,CAACF,GAAAA,CAAAA,CAAK+C,MAAM,CAAC;AACjC,gBAAA,GAAG9C,IAAI;gBACPE,UAAAA,EAAYJ;AACd,aAAA,CAAA;AACA,YAAA,OAAO,EAAC;AACV,QAAA,CAAA;;AAGA,QAAA,MAAMiD,YACJC,WAAmC,EACnCjD,GAAuB,EACvBC,IAAAA,GAA2D,EAAE,EAAA;AAE7D,YAAA,MAAMiD,iBAAiB,MAAMrD,MAAAA,CAAOgB,EAAE,CAACsC,WAAW,CAAC,UAAA;AACjD,gBAAA,OAAOvB,OAAAA,CAAQC,GAAG,CAACoB,WAAAA,CAAYG,GAAG,CAAC,OAAOrD,EAAAA,GAAO,IAAI,CAACgD,MAAM,CAAChD,IAAIC,GAAAA,EAAKC,IAAAA,CAAAA,CAAAA,CAAAA;AACxE,YAAA,CAAA,CAAA;YAEA,OAAO;AAAE6B,gBAAAA,KAAAA,EAAOoB,eAAeG;AAAO,aAAA;AACxC,QAAA,CAAA;AAEA,QAAA,MAAMC,SACJvD,EAAwB,EACxBC,GAAuB,EACvBC,IAAAA,GAAgF,EAAS,EAAA;AAEzF,YAAA,MAAMe,QAAAA,GAAWf,IAAAA,CAAKe,QAAQ,IAAK,MAAMkB,iBAAAA,CAAkBlC,GAAAA,CAAAA;AAC3D,YAAA,MAAMiB,MAAAA,GAAS;AAAE,gBAAA,GAAGhB,IAAI;AAAEe,gBAAAA;AAAS,aAAA;AAEnC,YAAA,OAAOnB,MAAAA,CACJK,SAAS,CAACF,GAAAA,CAAAA,CACVsD,OAAO,CAAC;AAAE,gBAAA,GAAGrC,MAAM;gBAAEd,UAAAA,EAAYJ;AAAG,aAAA,CAAA,CACpC2C,IAAI,CAAC,CAACC,MAAAA,GAAWA,MAAAA,EAAQC,OAAAA,CAAAA;AAC9B,QAAA,CAAA;AAEA,QAAA,MAAMW,WAAAA,CAAAA,CAAYvD,GAAoB,EAAEiD,WAAqB,EAAEzC,MAA0B,EAAA;AACvF,YAAA,OAAOX,MAAAA,CAAOgB,EAAE,CAACsC,WAAW,CAAC,UAAA;AAC3B,gBAAA,MAAMpB,OAAAA,GAAU,MAAMH,OAAAA,CAAQC,GAAG,CAC/BoB,WAAAA,CAAYG,GAAG,CAAC,CAACjD,aAAe,IAAI,CAACmD,OAAO,CAACnD,YAAYH,GAAAA,EAAK;AAAEQ,wBAAAA,MAAAA;AAAQQ,wBAAAA,QAAAA,EAAU;AAAG,qBAAA,CAAA,CAAA,CAAA;AAGvF,gBAAA,MAAMwC,yBAAyBzB,OAAAA,CAAQ0B,IAAI,GAAGC,MAAM,CAACC,SAASN,MAAM;gBACpE,OAAOG,sBAAAA;AACT,YAAA,CAAA,CAAA;AACF,QAAA,CAAA;AAEA,QAAA,MAAMI,eACJX,WAAmC,EACnCjD,GAAuB,EACvBC,IAAAA,GAA0D,EAAS,EAAA;AAEnE,YAAA,MAAM4D,qBAAqB,MAAMhE,MAAAA,CAAOgB,EAAE,CAACsC,WAAW,CAAC,UAAA;AACrD,gBAAA,OAAOvB,OAAAA,CAAQC,GAAG,CAChBoB,WAAAA,CAAYG,GAAG,CAAC,CAACrD,EAAAA,GACfF,MAAAA,CACGK,SAAS,CAACF,GAAAA,CAAAA,CACV8D,SAAS,CAAC;AAAE,wBAAA,GAAG7D,IAAI;wBAAEE,UAAAA,EAAYJ,EAAAA;AAAIiB,wBAAAA,QAAAA,EAAU;AAAG,qBAAA,CAAA,CAClD0B,IAAI,CAAC,CAACC,MAAAA,GAAWA,MAAAA,EAAQC,OAAAA,CAAAA,CAAAA,CAAAA;AAGlC,YAAA,CAAA,CAAA;AAEA,YAAA,MAAMmB,2BAA2BF,kBAAAA,CAAmBJ,IAAI,GAAGC,MAAM,CAACC,SAASN,MAAM;;YAGjF,OAAO;gBAAEvB,KAAAA,EAAOiC;AAAyB,aAAA;AAC3C,QAAA,CAAA;AAEA,QAAA,MAAMD,WACJ/D,EAAwB,EACxBC,GAAuB,EACvBC,IAAAA,GAAkF,EAAS,EAAA;AAE3F,YAAA,MAAMe,QAAAA,GAAWf,IAAAA,CAAKe,QAAQ,IAAK,MAAMkB,iBAAAA,CAAkBlC,GAAAA,CAAAA;AAC3D,YAAA,MAAMiB,MAAAA,GAAS;AAAE,gBAAA,GAAGhB,IAAI;AAAEe,gBAAAA;AAAS,aAAA;AAEnC,YAAA,OAAOnB,MAAAA,CACJK,SAAS,CAACF,GAAAA,CAAAA,CACV8D,SAAS,CAAC;AAAE,gBAAA,GAAG7C,MAAM;gBAAEd,UAAAA,EAAYJ;AAAG,aAAA,CAAA,CACtC2C,IAAI,CAAC,CAACC,MAAAA,GAAWA,MAAAA,EAAQC,QAAQC,EAAAA,CAAG,CAAA,CAAA,CAAA;AACzC,QAAA,CAAA;AAEA,QAAA,MAAMmB,cACJjE,EAAwB,EACxBC,GAAuB,EACvBC,IAAAA,GAAqF,EAAS,EAAA;AAE9F,YAAA,MAAMe,QAAAA,GAAWf,IAAAA,CAAKe,QAAQ,IAAK,MAAMkB,iBAAAA,CAAkBlC,GAAAA,CAAAA;AAC3D,YAAA,MAAMiB,MAAAA,GAAS;AAAE,gBAAA,GAAGhB,IAAI;AAAEe,gBAAAA;AAAS,aAAA;AAEnC,YAAA,OAAOnB,MAAAA,CACJK,SAAS,CAACF,GAAAA,CAAAA,CACVgE,YAAY,CAAC;AAAE,gBAAA,GAAG/C,MAAM;gBAAEd,UAAAA,EAAYJ;AAAG,aAAA,CAAA,CACzC2C,IAAI,CAAC,CAACC,MAAAA,GAAWA,MAAAA,EAAQC,QAAQC,EAAAA,CAAG,CAAA,CAAA,CAAA;AACzC,QAAA,CAAA;AAEA,QAAA,MAAMoB,mBAAAA,CAAAA,CAAoBlE,EAAU,EAAEC,GAAoB,EAAEQ,MAAc,EAAA;AACxE,YAAA,MAAM,EAAEQ,QAAQ,EAAEkD,YAAY,EAAE,GAAGC,yBAAAA,CAA0BnE,GAAAA,CAAAA;AAE7D,YAAA,IAAI,CAACkE,YAAAA,EAAc;gBACjB,OAAOE,2BAAAA;AACT,YAAA;AAEA,YAAA,MAAM3E,WAAW,MAAMI,MAAAA,CAAOK,SAAS,CAACF,GAAAA,CAAAA,CAAKF,OAAO,CAAC;gBAAEK,UAAAA,EAAYJ,EAAAA;AAAIiB,gBAAAA,QAAAA;AAAUR,gBAAAA;AAAO,aAAA,CAAA;AACxF,YAAA,IAAI,CAACf,QAAAA,EAAU;gBACb,OAAO2E,2BAAAA;AACT,YAAA;YAEA,OAAOC,cAAAA,CAAexE,QAAQJ,QAAAA,EAAUO,GAAAA,CAAAA;AAC1C,QAAA,CAAA;AAEA,QAAA,MAAMsE,8BAAAA,CAAAA,CACJrB,WAAmC,EACnCjD,GAAuB,EACvBQ,MAAyB,EAAA;AAEzB,YAAA,MAAM,EAAEQ,QAAQ,EAAEkD,YAAY,EAAE,GAAGC,yBAAAA,CAA0BnE,GAAAA,CAAAA;AAE7D,YAAA,IAAI,CAACkE,YAAAA,EAAc;gBACjB,OAAO,CAAA;AACT,YAAA;AAEA,YAAA,MAAMK,WAAW,MAAM1E,MAAAA,CAAOK,SAAS,CAACF,GAAAA,CAAAA,CAAKe,QAAQ,CAAC;AACpDC,gBAAAA,QAAAA;gBACAwD,OAAAA,EAAS;oBAAErE,UAAAA,EAAY;wBAAEM,GAAAA,EAAKwC;AAAY;AAAE,iBAAA;AAC5CzC,gBAAAA,MAAAA;gBACA2B,MAAAA,EAAQ;AACV,aAAA,CAAA;AAEA,YAAA,MAAMsC,MAAAA,GAAS,MAAM7C,OAAAA,CAAQC,GAAG,CAC9B0C,QAAAA,CAASnB,GAAG,CAAC,CAACsB,MAAAA,GAAqBL,cAAAA,CAAexE,MAAAA,EAAQ6E,MAAAA,EAAQ1E,GAAAA,CAAAA,CAAAA,CAAAA;AAGpE,YAAA,OAAOyE,MAAAA,CAAOE,MAAM,CAClB,CAAChD,KAAAA,EAAOiD,YAAAA,GACNjD,KAAAA,GAAQiD,YAAAA,CAAaC,oBAAoB,GAAGD,YAAAA,CAAaE,aAAa,EACxE,CAAA,CAAA;AAEJ,QAAA;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"document-manager.mjs","sources":["../../../server/src/services/document-manager.ts"],"sourcesContent":["import { omit, flow } from 'lodash';\n\nimport { contentTypes, errors, pagination } from '@strapi/utils';\nimport type { Core, Modules, UID } from '@strapi/types';\n\nimport { buildDeepPopulate, getDeepPopulate, getDeepPopulateDraftCount } from './utils/populate';\nimport { EMPTY_DRAFT_RELATION_COUNTS } from './utils/draft-relations';\nimport { sumDraftCounts } from './utils/draft';\n\ntype DocService = Modules.Documents.ServiceInstance;\ntype DocServiceParams<TAction extends keyof DocService> = Parameters<DocService[TAction]>[0];\nexport type Document = Modules.Documents.Result<UID.ContentType>;\n\nconst { PUBLISHED_AT_ATTRIBUTE } = contentTypes.constants;\n\nconst omitPublishedAtField = <T extends object>(document: T) =>\n omit(document, PUBLISHED_AT_ATTRIBUTE);\nconst omitIdField = <T extends object>(document: T) => omit(document, 'id');\n\nconst documentManager = ({ strapi }: { strapi: Core.Strapi }) => {\n /**\n * The document service has no publish, unpublish or discardDraft methods\n * for content types without draft and publish\n */\n const assertDraftAndPublish = (uid: UID.ContentType) => {\n if (contentTypes.hasDraftAndPublish(strapi.getModel(uid)) === false) {\n throw new errors.ValidationError('Draft and publish is not enabled for this content type');\n }\n };\n\n return {\n async findOne(\n id: string,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'findOne'>, 'documentId'> = {}\n ) {\n return strapi.documents(uid).findOne({ ...opts, documentId: id });\n },\n\n /**\n * Find multiple (or all) locales for a document\n */\n async findLocales(\n id: string | string[] | undefined,\n uid: UID.CollectionType,\n opts: {\n populate?: Modules.Documents.Params.Pick<any, 'populate'>;\n locale?: string | string[] | '*';\n isPublished?: boolean;\n }\n ) {\n // Will look for a specific locale by default\n const where: any = {};\n\n // Might not have an id if querying a single type\n if (id) {\n where.documentId = id;\n }\n\n // Search in array of locales\n if (Array.isArray(opts.locale)) {\n where.locale = { $in: opts.locale };\n } else if (opts.locale && opts.locale !== '*') {\n // Look for a specific locale, ignore if looking for all locales\n where.locale = opts.locale;\n }\n\n // Published is passed, so we filter on it, otherwise we don't filter\n if (typeof opts.isPublished === 'boolean') {\n where.publishedAt = { $notNull: opts.isPublished };\n }\n\n return strapi.db.query(uid).findMany({ populate: opts.populate, where });\n },\n\n async findMany(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = { ...opts, populate: getDeepPopulate(uid) } as typeof opts;\n return strapi.documents(uid).findMany(params);\n },\n\n async findPage(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = pagination.withDefaultPagination(opts || {}, {\n maxLimit: 1000,\n });\n\n const { populate: _populate, sort: _sort, ...countParams } = params;\n const [documents, total = 0] = await Promise.all([\n strapi.documents(uid).findMany(params),\n strapi.documents(uid).count(countParams),\n ]);\n\n return {\n results: documents,\n pagination: pagination.transformPagedPaginationInfo(params, total),\n };\n },\n\n async create(uid: UID.CollectionType, opts: DocServiceParams<'create'> = {} as any) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, status: 'draft' as const, populate };\n\n return strapi.documents(uid).create(params);\n },\n\n async update(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'update'>, 'documentId'> = {} as any\n ) {\n const publishData = flow(omitPublishedAtField, omitIdField)(opts.data || {});\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, data: publishData, populate, status: 'draft' };\n\n return strapi.documents(uid).update({ ...params, documentId: id });\n },\n\n async clone(\n id: Modules.Documents.ID,\n body: Partial<Modules.Documents.Params.Data.Input<UID.CollectionType>>,\n uid: UID.CollectionType\n ) {\n const populate = await buildDeepPopulate(uid);\n\n // Extract the locale to pass it as a plain param\n const locale = body?.locale;\n const params = {\n // Ensure id and documentId are not copied to the clone\n data: omit(body, ['id', 'documentId']),\n locale,\n populate,\n };\n\n return strapi\n .documents(uid)\n .clone({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n /**\n * Check if a document exists\n */\n async exists(uid: UID.CollectionType, id?: string) {\n // Collection type\n if (id) {\n const count = await strapi.db.query(uid).count({ where: { documentId: id } });\n return count > 0;\n }\n\n // Single type\n const count = await strapi.db.query(uid).count();\n return count > 0;\n },\n\n async delete(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'delete'>, 'documentId'> = {} as any\n ) {\n await strapi.documents(uid).delete({\n ...opts,\n documentId: id,\n });\n return {};\n },\n\n // FIXME: handle relations\n async deleteMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: DocServiceParams<'findMany'> & { locale?: string } = {}\n ) {\n const deletedEntries = await strapi.db.transaction(async () => {\n return Promise.all(documentIds.map(async (id) => this.delete(id, uid, opts)));\n });\n\n return { count: deletedEntries.length };\n },\n\n async publish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'publish'>, 'documentId'> & { populate?: object } = {} as any\n ) {\n assertDraftAndPublish(uid);\n\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .publish({ ...params, documentId: id })\n .then((result) => result?.entries);\n },\n\n async publishMany(uid: UID.ContentType, documentIds: string[], locale?: string | string[]) {\n assertDraftAndPublish(uid);\n\n return strapi.db.transaction(async () => {\n const results = await Promise.all(\n documentIds.map((documentId) => this.publish(documentId, uid, { locale, populate: {} }))\n );\n\n const publishedEntitiesCount = results.flat().filter(Boolean).length;\n return publishedEntitiesCount;\n });\n },\n\n async unpublishMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> = {} as any\n ) {\n assertDraftAndPublish(uid);\n\n const unpublishedEntries = await strapi.db.transaction(async () => {\n return Promise.all(\n documentIds.map((id) =>\n strapi\n .documents(uid)\n .unpublish({ ...opts, documentId: id, populate: {} })\n .then((result) => result?.entries)\n )\n );\n });\n\n const unpublishedEntitiesCount = unpublishedEntries.flat().filter(Boolean).length;\n\n // Return the number of unpublished entities\n return { count: unpublishedEntitiesCount };\n },\n\n async unpublish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> & { populate?: object } = {} as any\n ) {\n assertDraftAndPublish(uid);\n\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .unpublish({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async discardDraft(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'discardDraft'>, 'documentId'> & { populate?: object } = {} as any\n ) {\n assertDraftAndPublish(uid);\n\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .discardDraft({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async countDraftRelations(id: string, uid: UID.ContentType, locale: string) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return EMPTY_DRAFT_RELATION_COUNTS;\n }\n\n const document = await strapi.documents(uid).findOne({ documentId: id, populate, locale });\n if (!document) {\n return EMPTY_DRAFT_RELATION_COUNTS;\n }\n\n return sumDraftCounts(strapi, document, uid);\n },\n\n async countManyEntriesDraftRelations(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n locale: string | string[]\n ) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return 0;\n }\n\n const entities = await strapi.documents(uid).findMany({\n populate,\n filters: { documentId: { $in: documentIds } } as any,\n locale,\n status: 'draft',\n });\n\n const counts = await Promise.all(\n entities.map((entity: Document) => sumDraftCounts(strapi, entity, uid))\n );\n\n return counts.reduce(\n (total, entityCounts) =>\n total + entityCounts.unpublishedRelations + entityCounts.draftM2mLinks,\n 0\n );\n },\n };\n};\n\nexport type DocumentManagerService = typeof documentManager;\n\nexport default documentManager;\n"],"names":["PUBLISHED_AT_ATTRIBUTE","contentTypes","constants","omitPublishedAtField","document","omit","omitIdField","documentManager","strapi","assertDraftAndPublish","uid","hasDraftAndPublish","getModel","errors","ValidationError","findOne","id","opts","documents","documentId","findLocales","where","Array","isArray","locale","$in","isPublished","publishedAt","$notNull","db","query","findMany","populate","params","getDeepPopulate","findPage","pagination","withDefaultPagination","maxLimit","_populate","sort","_sort","countParams","total","Promise","all","count","results","transformPagedPaginationInfo","create","buildDeepPopulate","status","update","publishData","flow","data","clone","body","then","result","entries","at","exists","delete","deleteMany","documentIds","deletedEntries","transaction","map","length","publish","publishMany","publishedEntitiesCount","flat","filter","Boolean","unpublishMany","unpublishedEntries","unpublish","unpublishedEntitiesCount","discardDraft","countDraftRelations","hasRelations","getDeepPopulateDraftCount","EMPTY_DRAFT_RELATION_COUNTS","sumDraftCounts","countManyEntriesDraftRelations","entities","filters","counts","entity","reduce","entityCounts","unpublishedRelations","draftM2mLinks"],"mappings":"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"}
@@ -189,7 +189,7 @@ var documentMetadata = (({ strapi })=>({
189
189
  }
190
190
  ];
191
191
  }
192
- return strapi.query(uid).findMany({
192
+ return strapi.db.query(uid).findMany({
193
193
  where,
194
194
  select: AVAILABLE_STATUS_SCALAR_FIELDS
195
195
  });
@@ -1 +1 @@
1
- {"version":3,"file":"document-metadata.js","sources":["../../../server/src/services/document-metadata.ts"],"sourcesContent":["import { groupBy, pick } from 'lodash';\n\nimport { async, contentTypes } from '@strapi/utils';\nimport type { Core, UID, Modules } from '@strapi/types';\n\nimport type { DocumentMetadata } from '../../../shared/contracts/collection-types';\n\nconst { getScalarAttributes, getMediaAttributes } = contentTypes;\n\nexport interface DocumentVersion {\n id: string | number;\n documentId: Modules.Documents.ID;\n locale?: string;\n localizations?: DocumentVersion[];\n updatedAt?: string | null | Date;\n publishedAt?: string | null | Date;\n}\n\n// Scalar fields that can be used in a DB `select`\nconst AVAILABLE_STATUS_SCALAR_FIELDS = [\n 'id',\n 'documentId',\n 'locale',\n 'updatedAt',\n 'createdAt',\n 'publishedAt',\n];\n// Relation populate shared by both the fast path and the full path\nconst AVAILABLE_STATUS_POPULATE = {\n createdBy: { select: ['id', 'firstname', 'lastname', 'email'] },\n updatedBy: { select: ['id', 'firstname', 'lastname', 'email'] },\n};\n// All fields to pick from a hydrated result (scalars + populated relations + virtual)\nconst AVAILABLE_STATUS_FIELDS = [\n ...AVAILABLE_STATUS_SCALAR_FIELDS,\n 'createdBy',\n 'updatedBy',\n 'status',\n];\nconst AVAILABLE_LOCALES_FIELDS = [\n 'id',\n 'documentId',\n 'locale',\n 'updatedAt',\n 'createdAt',\n 'publishedAt',\n];\n\n/** Returns a DB filter that matches the opposite publish status. */\nconst oppositePublishStatus = (publishedAt: unknown) =>\n publishedAt !== null ? { $null: true } : { $notNull: true };\n\nconst CONTENT_MANAGER_STATUS = {\n PUBLISHED: 'published',\n DRAFT: 'draft',\n MODIFIED: 'modified',\n};\n\n/**\n * Controls the metadata properties to be returned\n *\n * If `availableLocales` is set to `true` (default), the returned metadata will include\n * the available locales of the document for its current status.\n *\n * If `availableStatus` is set to `true` (default), the returned metadata will include\n * the available status of the document for its current locale.\n */\nexport interface GetMetadataOptions {\n availableLocales?: boolean;\n availableStatus?: boolean;\n}\n\n/**\n * Checks if the provided document version has been modified after all other versions.\n */\nconst getIsVersionLatestModification = (\n version?: DocumentVersion,\n otherVersion?: DocumentVersion\n): boolean => {\n if (!version || !version.updatedAt) {\n return false;\n }\n\n const versionUpdatedAt = version?.updatedAt ? new Date(version.updatedAt).getTime() : 0;\n\n const otherUpdatedAt = otherVersion?.updatedAt ? new Date(otherVersion.updatedAt).getTime() : 0;\n\n return versionUpdatedAt > otherUpdatedAt;\n};\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n /**\n * Returns available locales of a document for the current status.\n *\n * The result is sorted with the default locale (as defined by the i18n plugin)\n * at index 0 when present. This is the canonical-source invariant relied on by\n * `useDocument.getInitialFormValues` in the admin: when creating a new locale\n * draft, non-localized scalar/media values are inherited from\n * `availableLocales[0]`. Putting the default locale first means inheritance\n * stays predictable when sibling locales have drifted on non-localized fields\n * (which can happen because the server only syncs non-localized fields at\n * locale-creation time, not on subsequent updates — see\n * `copyNonLocalizedFields` in document-service/internationalization.ts).\n */\n async getAvailableLocales(\n uid: UID.ContentType,\n version: DocumentVersion,\n allVersions: DocumentVersion[]\n ) {\n // Group all versions by locale\n const versionsByLocale = groupBy(allVersions, 'locale');\n\n // Delete the current locale\n if (version.locale) {\n delete versionsByLocale[version.locale];\n }\n\n // For each locale, get the ones with the same status\n // There will not be a draft and a version counterpart if the content\n // type does not have draft and publish\n const model = strapi.getModel(uid);\n\n const mappingResult = await async.map(\n Object.values(versionsByLocale),\n async (localeVersions: DocumentVersion[]) => {\n if (!contentTypes.hasDraftAndPublish(model)) {\n return localeVersions[0];\n }\n\n const draftVersion = localeVersions.find((v) => v.publishedAt === null);\n const otherVersions = localeVersions.filter((v) => v.id !== draftVersion?.id);\n\n if (!draftVersion) {\n return;\n }\n\n return {\n ...draftVersion,\n status: this.getStatus(draftVersion, otherVersions as any),\n };\n }\n );\n\n const filtered = mappingResult.filter(Boolean) as unknown as NonNullable<\n DocumentMetadata['availableLocales']\n >;\n\n // Sort the default locale first so `availableLocales[0]` is the canonical\n // source for non-localized field inheritance in the admin. Without a\n // localization provider there is no default locale and the order is kept.\n let defaultLocaleCode: string | null | undefined = null;\n try {\n defaultLocaleCode = await strapi.localization.getDefaultLocale();\n } catch {\n // The provider (e.g. its locale store lookup) errored — leave order untouched.\n }\n\n // The provider may resolve `undefined` at runtime when no default locale is stored\n if (defaultLocaleCode === null || defaultLocaleCode === undefined || defaultLocaleCode === '') {\n return filtered as DocumentMetadata['availableLocales'];\n }\n\n // Stable partition: move the default locale entry to the front, keep the\n // rest of the order intact.\n const defaultEntries = filtered.filter((entry) => entry.locale === defaultLocaleCode);\n const otherEntries = filtered.filter((entry) => entry.locale !== defaultLocaleCode);\n\n return [...defaultEntries, ...otherEntries] as DocumentMetadata['availableLocales'];\n },\n\n /**\n * Returns available status of a document for the current locale\n */\n getAvailableStatus(version: DocumentVersion, allVersions: DocumentVersion[]) {\n // Find the other status of the document\n const status =\n version.publishedAt !== null\n ? CONTENT_MANAGER_STATUS.DRAFT\n : CONTENT_MANAGER_STATUS.PUBLISHED;\n\n // Get version that match the current locale and not match the current status\n const availableStatus = allVersions.find((v) => {\n const matchLocale = v.locale === version.locale;\n const matchStatus = status === 'published' ? v.publishedAt !== null : v.publishedAt === null;\n return matchLocale && matchStatus;\n });\n\n if (!availableStatus) return availableStatus;\n\n // Pick status fields (at fields, status, by fields), use lodash\n return pick(availableStatus, AVAILABLE_STATUS_FIELDS);\n },\n\n /**\n * Get the available status of many documents, useful for batch operations\n * @param uid\n * @param documents\n * @returns\n */\n async getManyAvailableStatus(uid: UID.ContentType, documents: DocumentVersion[]) {\n if (!documents.length) return [];\n\n // The status and locale of all documents should be the same\n const status = documents[0].publishedAt !== null ? 'published' : 'draft';\n const locales = documents.map((d) => d.locale).filter(Boolean);\n\n const where: Record<string, any> = {\n documentId: { $in: documents.map((d) => d.documentId).filter(Boolean) },\n publishedAt: { $null: status === 'published' },\n };\n\n // If there is any locale to filter (if i18n is enabled)\n if (locales.length === documents.length) {\n where.locale = { $in: locales };\n } else if (locales.length) {\n /*\n * The batch mixes localized and non-localized versions, which happens when a\n * content type holds rows with a locale while others have none — for instance\n * after i18n is disabled on it, or when a locale is sent to a non-localized\n * content type through the API.\n *\n * `locales` only holds the locales that are actually set, so filtering on it\n * alone would drop the counterparts of every version whose locale is null, and\n * those versions would be reported as drafts even though they are published.\n */\n where.$or = [{ locale: { $in: locales } }, { locale: { $null: true } }];\n }\n\n return strapi.query(uid).findMany({\n where,\n select: AVAILABLE_STATUS_SCALAR_FIELDS,\n });\n },\n\n getStatus(version: DocumentVersion, otherDocumentStatuses?: DocumentMetadata['availableStatus']) {\n let draftVersion: DocumentVersion | undefined;\n let publishedVersion: DocumentVersion | undefined;\n\n if (version.publishedAt) {\n publishedVersion = version;\n } else {\n draftVersion = version;\n }\n\n const otherVersion = otherDocumentStatuses?.at(0);\n if (otherVersion?.publishedAt) {\n publishedVersion = otherVersion;\n } else if (otherVersion) {\n draftVersion = otherVersion;\n }\n\n if (!draftVersion) return CONTENT_MANAGER_STATUS.PUBLISHED;\n if (!publishedVersion) return CONTENT_MANAGER_STATUS.DRAFT;\n\n /*\n * The document is modified if the draft version has been updated more\n * recently than the published version.\n */\n const isDraftModified = getIsVersionLatestModification(draftVersion, publishedVersion);\n return isDraftModified ? CONTENT_MANAGER_STATUS.MODIFIED : CONTENT_MANAGER_STATUS.PUBLISHED;\n },\n\n // TODO is it necessary to return metadata on every page of the CM\n // We could refactor this so the locales are only loaded when they're\n // needed. e.g. in the bulk locale action modal.\n async getMetadata(\n uid: UID.ContentType,\n version: DocumentVersion,\n { availableLocales = true, availableStatus = true }: GetMetadataOptions = {}\n ) {\n const model = strapi.getModel(uid);\n const hasDnP = contentTypes.hasDraftAndPublish(model);\n const isLocalized = strapi.localization.isLocalizedContentType(model);\n\n if (!availableLocales && !availableStatus) {\n // Nothing to compute.\n return { availableLocales: [], availableStatus: [], versions: [] as DocumentVersion[] };\n }\n if (!isLocalized && !hasDnP) {\n // If there are no locales and no draft/publish, there's only ever 1 version of any document.\n return { availableLocales: [], availableStatus: [], versions: [] as DocumentVersion[] };\n }\n\n const onlyStatusIsRelevant = hasDnP && (!isLocalized || !availableLocales);\n if (onlyStatusIsRelevant) {\n const otherVersion = availableStatus\n ? await strapi.db.query(uid).findOne({\n where: {\n documentId: version.documentId,\n ...(version.locale ? { locale: version.locale } : {}),\n publishedAt: oppositePublishStatus(version.publishedAt),\n },\n select: AVAILABLE_STATUS_SCALAR_FIELDS,\n populate: AVAILABLE_STATUS_POPULATE,\n })\n : null;\n return {\n availableLocales: [],\n availableStatus: otherVersion ? [pick(otherVersion, AVAILABLE_STATUS_FIELDS)] : [],\n versions: [] as DocumentVersion[],\n };\n }\n\n // Full path for localized content types\n // TODO: Ignore publishedAt if availableStatus=false, and ignore locale if\n // i18n is disabled\n\n // Include non-translatable scalar and media fields in availableLocales for i18n prefilling\n let nonLocalizedFields: string[] = [];\n let nonLocalizedMediaFields: string[] = [];\n // Without a localization provider there are no non-localized attributes.\n try {\n if (model?.attributes !== undefined) {\n const allNonLocalized = strapi.localization.getNonLocalizedAttributes(model);\n // Get scalar and media attributes separately\n const scalarAttrs = getScalarAttributes(model);\n const mediaAttrs = getMediaAttributes(model);\n\n // Separate scalar fields (can be in fields array) from media fields (need to be populated)\n nonLocalizedFields = allNonLocalized.filter(\n (field) => field in model.attributes && scalarAttrs.includes(field)\n );\n nonLocalizedMediaFields = allNonLocalized.filter(\n (field) => field in model.attributes && mediaAttrs.includes(field)\n );\n }\n } catch {\n // The provider errored — fall back to no prefilled non-localized fields\n }\n\n // Build populate object for non-localized media fields\n const mediaPopulate = nonLocalizedMediaFields.reduce(\n (acc, field) => {\n acc[field] = {\n populate: {\n folder: true,\n },\n };\n return acc;\n },\n {} as Record<string, { populate: { folder: boolean } }>\n );\n\n const params = {\n populate: {\n ...mediaPopulate,\n ...AVAILABLE_STATUS_POPULATE,\n },\n fields: [...new Set([...AVAILABLE_LOCALES_FIELDS, ...nonLocalizedFields])],\n filters: {\n documentId: version.documentId,\n },\n };\n\n const dbParams = strapi.get('query-params').transform(uid, params);\n const versions = await strapi.db.query(uid).findMany(dbParams);\n\n // TODO: Remove use of available locales and use localizations instead\n const availableLocalesResult = availableLocales\n ? await this.getAvailableLocales(uid, version, versions)\n : [];\n\n const availableStatusResult = availableStatus\n ? this.getAvailableStatus(version, versions)\n : null;\n\n return {\n availableLocales: availableLocalesResult,\n availableStatus: availableStatusResult ? [availableStatusResult] : [],\n versions,\n };\n },\n\n /**\n * Returns associated metadata of a document:\n * - Available locales of the document for the current status\n * - Available status of the document for the current locale\n */\n async formatDocumentWithMetadata(\n uid: UID.ContentType,\n document: DocumentVersion,\n opts: GetMetadataOptions = {}\n ) {\n if (!document) {\n return {\n data: document,\n meta: {\n availableLocales: [],\n availableStatus: [],\n },\n };\n }\n\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(strapi.getModel(uid));\n\n // Ignore available status if the content type does not have draft and publish\n if (!hasDraftAndPublish) {\n opts.availableStatus = false;\n }\n\n const { versions, ...meta } = await this.getMetadata(uid, document, opts);\n\n // Populate localization statuses\n if (document.localizations?.length) {\n document.localizations = document.localizations.map((d) => {\n // Find the counterpart version (same documentId + locale, opposite publishedAt) from\n // the already-fetched versions array, avoiding an extra DB query.\n const counterpart = versions.find(\n (v) =>\n v.documentId === d.documentId &&\n v.locale === d.locale &&\n (d.publishedAt === null) !== (v.publishedAt === null)\n );\n return {\n ...d,\n status: this.getStatus(d, counterpart ? [counterpart] : []),\n };\n });\n }\n\n return {\n data: {\n ...document,\n // Add status to the document only if draft and publish is enabled\n status: hasDraftAndPublish\n ? this.getStatus(document, meta.availableStatus as any)\n : undefined,\n },\n meta,\n };\n },\n});\n"],"names":["getScalarAttributes","getMediaAttributes","contentTypes","AVAILABLE_STATUS_SCALAR_FIELDS","AVAILABLE_STATUS_POPULATE","createdBy","select","updatedBy","AVAILABLE_STATUS_FIELDS","AVAILABLE_LOCALES_FIELDS","oppositePublishStatus","publishedAt","$null","$notNull","CONTENT_MANAGER_STATUS","PUBLISHED","DRAFT","MODIFIED","getIsVersionLatestModification","version","otherVersion","updatedAt","versionUpdatedAt","Date","getTime","otherUpdatedAt","strapi","getAvailableLocales","uid","allVersions","versionsByLocale","groupBy","locale","model","getModel","mappingResult","async","map","Object","values","localeVersions","hasDraftAndPublish","draftVersion","find","v","otherVersions","filter","id","status","getStatus","filtered","Boolean","defaultLocaleCode","localization","getDefaultLocale","undefined","defaultEntries","entry","otherEntries","getAvailableStatus","availableStatus","matchLocale","matchStatus","pick","getManyAvailableStatus","documents","length","locales","d","where","documentId","$in","$or","query","findMany","otherDocumentStatuses","publishedVersion","at","isDraftModified","getMetadata","availableLocales","hasDnP","isLocalized","isLocalizedContentType","versions","onlyStatusIsRelevant","db","findOne","populate","nonLocalizedFields","nonLocalizedMediaFields","attributes","allNonLocalized","getNonLocalizedAttributes","scalarAttrs","mediaAttrs","field","includes","mediaPopulate","reduce","acc","folder","params","fields","Set","filters","dbParams","get","transform","availableLocalesResult","availableStatusResult","formatDocumentWithMetadata","document","opts","data","meta","localizations","counterpart"],"mappings":"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"}
1
+ {"version":3,"file":"document-metadata.js","sources":["../../../server/src/services/document-metadata.ts"],"sourcesContent":["import { groupBy, pick } from 'lodash';\n\nimport { async, contentTypes } from '@strapi/utils';\nimport type { Core, UID, Modules } from '@strapi/types';\n\nimport type { DocumentMetadata } from '../../../shared/contracts/collection-types';\n\nconst { getScalarAttributes, getMediaAttributes } = contentTypes;\n\nexport interface DocumentVersion {\n id: string | number;\n documentId: Modules.Documents.ID;\n locale?: string;\n localizations?: DocumentVersion[];\n updatedAt?: string | null | Date;\n publishedAt?: string | null | Date;\n}\n\n// Scalar fields that can be used in a DB `select`\nconst AVAILABLE_STATUS_SCALAR_FIELDS = [\n 'id',\n 'documentId',\n 'locale',\n 'updatedAt',\n 'createdAt',\n 'publishedAt',\n];\n// Relation populate shared by both the fast path and the full path\nconst AVAILABLE_STATUS_POPULATE = {\n createdBy: { select: ['id', 'firstname', 'lastname', 'email'] },\n updatedBy: { select: ['id', 'firstname', 'lastname', 'email'] },\n};\n// All fields to pick from a hydrated result (scalars + populated relations + virtual)\nconst AVAILABLE_STATUS_FIELDS = [\n ...AVAILABLE_STATUS_SCALAR_FIELDS,\n 'createdBy',\n 'updatedBy',\n 'status',\n];\nconst AVAILABLE_LOCALES_FIELDS = [\n 'id',\n 'documentId',\n 'locale',\n 'updatedAt',\n 'createdAt',\n 'publishedAt',\n];\n\n/** Returns a DB filter that matches the opposite publish status. */\nconst oppositePublishStatus = (publishedAt: unknown) =>\n publishedAt !== null ? { $null: true } : { $notNull: true };\n\nconst CONTENT_MANAGER_STATUS = {\n PUBLISHED: 'published',\n DRAFT: 'draft',\n MODIFIED: 'modified',\n};\n\n/**\n * Controls the metadata properties to be returned\n *\n * If `availableLocales` is set to `true` (default), the returned metadata will include\n * the available locales of the document for its current status.\n *\n * If `availableStatus` is set to `true` (default), the returned metadata will include\n * the available status of the document for its current locale.\n */\nexport interface GetMetadataOptions {\n availableLocales?: boolean;\n availableStatus?: boolean;\n}\n\n/**\n * Checks if the provided document version has been modified after all other versions.\n */\nconst getIsVersionLatestModification = (\n version?: DocumentVersion,\n otherVersion?: DocumentVersion\n): boolean => {\n if (!version || !version.updatedAt) {\n return false;\n }\n\n const versionUpdatedAt = version?.updatedAt ? new Date(version.updatedAt).getTime() : 0;\n\n const otherUpdatedAt = otherVersion?.updatedAt ? new Date(otherVersion.updatedAt).getTime() : 0;\n\n return versionUpdatedAt > otherUpdatedAt;\n};\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => ({\n /**\n * Returns available locales of a document for the current status.\n *\n * The result is sorted with the default locale (as defined by the i18n plugin)\n * at index 0 when present. This is the canonical-source invariant relied on by\n * `useDocument.getInitialFormValues` in the admin: when creating a new locale\n * draft, non-localized scalar/media values are inherited from\n * `availableLocales[0]`. Putting the default locale first means inheritance\n * stays predictable when sibling locales have drifted on non-localized fields\n * (which can happen because the server only syncs non-localized fields at\n * locale-creation time, not on subsequent updates — see\n * `copyNonLocalizedFields` in document-service/internationalization.ts).\n */\n async getAvailableLocales(\n uid: UID.ContentType,\n version: DocumentVersion,\n allVersions: DocumentVersion[]\n ) {\n // Group all versions by locale\n const versionsByLocale = groupBy(allVersions, 'locale');\n\n // Delete the current locale\n if (version.locale) {\n delete versionsByLocale[version.locale];\n }\n\n // For each locale, get the ones with the same status\n // There will not be a draft and a version counterpart if the content\n // type does not have draft and publish\n const model = strapi.getModel(uid);\n\n const mappingResult = await async.map(\n Object.values(versionsByLocale),\n async (localeVersions: DocumentVersion[]) => {\n if (!contentTypes.hasDraftAndPublish(model)) {\n return localeVersions[0];\n }\n\n const draftVersion = localeVersions.find((v) => v.publishedAt === null);\n const otherVersions = localeVersions.filter((v) => v.id !== draftVersion?.id);\n\n if (!draftVersion) {\n return;\n }\n\n return {\n ...draftVersion,\n status: this.getStatus(draftVersion, otherVersions as any),\n };\n }\n );\n\n const filtered = mappingResult.filter(Boolean) as unknown as NonNullable<\n DocumentMetadata['availableLocales']\n >;\n\n // Sort the default locale first so `availableLocales[0]` is the canonical\n // source for non-localized field inheritance in the admin. Without a\n // localization provider there is no default locale and the order is kept.\n let defaultLocaleCode: string | null | undefined = null;\n try {\n defaultLocaleCode = await strapi.localization.getDefaultLocale();\n } catch {\n // The provider (e.g. its locale store lookup) errored — leave order untouched.\n }\n\n // The provider may resolve `undefined` at runtime when no default locale is stored\n if (defaultLocaleCode === null || defaultLocaleCode === undefined || defaultLocaleCode === '') {\n return filtered as DocumentMetadata['availableLocales'];\n }\n\n // Stable partition: move the default locale entry to the front, keep the\n // rest of the order intact.\n const defaultEntries = filtered.filter((entry) => entry.locale === defaultLocaleCode);\n const otherEntries = filtered.filter((entry) => entry.locale !== defaultLocaleCode);\n\n return [...defaultEntries, ...otherEntries] as DocumentMetadata['availableLocales'];\n },\n\n /**\n * Returns available status of a document for the current locale\n */\n getAvailableStatus(version: DocumentVersion, allVersions: DocumentVersion[]) {\n // Find the other status of the document\n const status =\n version.publishedAt !== null\n ? CONTENT_MANAGER_STATUS.DRAFT\n : CONTENT_MANAGER_STATUS.PUBLISHED;\n\n // Get version that match the current locale and not match the current status\n const availableStatus = allVersions.find((v) => {\n const matchLocale = v.locale === version.locale;\n const matchStatus = status === 'published' ? v.publishedAt !== null : v.publishedAt === null;\n return matchLocale && matchStatus;\n });\n\n if (!availableStatus) return availableStatus;\n\n // Pick status fields (at fields, status, by fields), use lodash\n return pick(availableStatus, AVAILABLE_STATUS_FIELDS);\n },\n\n /**\n * Get the available status of many documents, useful for batch operations\n * @param uid\n * @param documents\n * @returns\n */\n async getManyAvailableStatus(uid: UID.ContentType, documents: DocumentVersion[]) {\n if (!documents.length) return [];\n\n // The status and locale of all documents should be the same\n const status = documents[0].publishedAt !== null ? 'published' : 'draft';\n const locales = documents.map((d) => d.locale).filter(Boolean);\n\n const where: Record<string, any> = {\n documentId: { $in: documents.map((d) => d.documentId).filter(Boolean) },\n publishedAt: { $null: status === 'published' },\n };\n\n // If there is any locale to filter (if i18n is enabled)\n if (locales.length === documents.length) {\n where.locale = { $in: locales };\n } else if (locales.length) {\n /*\n * The batch mixes localized and non-localized versions, which happens when a\n * content type holds rows with a locale while others have none — for instance\n * after i18n is disabled on it, or when a locale is sent to a non-localized\n * content type through the API.\n *\n * `locales` only holds the locales that are actually set, so filtering on it\n * alone would drop the counterparts of every version whose locale is null, and\n * those versions would be reported as drafts even though they are published.\n */\n where.$or = [{ locale: { $in: locales } }, { locale: { $null: true } }];\n }\n\n return strapi.db.query(uid).findMany({\n where,\n select: AVAILABLE_STATUS_SCALAR_FIELDS,\n });\n },\n\n getStatus(version: DocumentVersion, otherDocumentStatuses?: DocumentMetadata['availableStatus']) {\n let draftVersion: DocumentVersion | undefined;\n let publishedVersion: DocumentVersion | undefined;\n\n if (version.publishedAt) {\n publishedVersion = version;\n } else {\n draftVersion = version;\n }\n\n const otherVersion = otherDocumentStatuses?.at(0);\n if (otherVersion?.publishedAt) {\n publishedVersion = otherVersion;\n } else if (otherVersion) {\n draftVersion = otherVersion;\n }\n\n if (!draftVersion) return CONTENT_MANAGER_STATUS.PUBLISHED;\n if (!publishedVersion) return CONTENT_MANAGER_STATUS.DRAFT;\n\n /*\n * The document is modified if the draft version has been updated more\n * recently than the published version.\n */\n const isDraftModified = getIsVersionLatestModification(draftVersion, publishedVersion);\n return isDraftModified ? CONTENT_MANAGER_STATUS.MODIFIED : CONTENT_MANAGER_STATUS.PUBLISHED;\n },\n\n // TODO is it necessary to return metadata on every page of the CM\n // We could refactor this so the locales are only loaded when they're\n // needed. e.g. in the bulk locale action modal.\n async getMetadata(\n uid: UID.ContentType,\n version: DocumentVersion,\n { availableLocales = true, availableStatus = true }: GetMetadataOptions = {}\n ) {\n const model = strapi.getModel(uid);\n const hasDnP = contentTypes.hasDraftAndPublish(model);\n const isLocalized = strapi.localization.isLocalizedContentType(model);\n\n if (!availableLocales && !availableStatus) {\n // Nothing to compute.\n return { availableLocales: [], availableStatus: [], versions: [] as DocumentVersion[] };\n }\n if (!isLocalized && !hasDnP) {\n // If there are no locales and no draft/publish, there's only ever 1 version of any document.\n return { availableLocales: [], availableStatus: [], versions: [] as DocumentVersion[] };\n }\n\n const onlyStatusIsRelevant = hasDnP && (!isLocalized || !availableLocales);\n if (onlyStatusIsRelevant) {\n const otherVersion = availableStatus\n ? await strapi.db.query(uid).findOne({\n where: {\n documentId: version.documentId,\n ...(version.locale ? { locale: version.locale } : {}),\n publishedAt: oppositePublishStatus(version.publishedAt),\n },\n select: AVAILABLE_STATUS_SCALAR_FIELDS,\n populate: AVAILABLE_STATUS_POPULATE,\n })\n : null;\n return {\n availableLocales: [],\n availableStatus: otherVersion ? [pick(otherVersion, AVAILABLE_STATUS_FIELDS)] : [],\n versions: [] as DocumentVersion[],\n };\n }\n\n // Full path for localized content types\n // TODO: Ignore publishedAt if availableStatus=false, and ignore locale if\n // i18n is disabled\n\n // Include non-translatable scalar and media fields in availableLocales for i18n prefilling\n let nonLocalizedFields: string[] = [];\n let nonLocalizedMediaFields: string[] = [];\n // Without a localization provider there are no non-localized attributes.\n try {\n if (model?.attributes !== undefined) {\n const allNonLocalized = strapi.localization.getNonLocalizedAttributes(model);\n // Get scalar and media attributes separately\n const scalarAttrs = getScalarAttributes(model);\n const mediaAttrs = getMediaAttributes(model);\n\n // Separate scalar fields (can be in fields array) from media fields (need to be populated)\n nonLocalizedFields = allNonLocalized.filter(\n (field) => field in model.attributes && scalarAttrs.includes(field)\n );\n nonLocalizedMediaFields = allNonLocalized.filter(\n (field) => field in model.attributes && mediaAttrs.includes(field)\n );\n }\n } catch {\n // The provider errored — fall back to no prefilled non-localized fields\n }\n\n // Build populate object for non-localized media fields\n const mediaPopulate = nonLocalizedMediaFields.reduce(\n (acc, field) => {\n acc[field] = {\n populate: {\n folder: true,\n },\n };\n return acc;\n },\n {} as Record<string, { populate: { folder: boolean } }>\n );\n\n const params = {\n populate: {\n ...mediaPopulate,\n ...AVAILABLE_STATUS_POPULATE,\n },\n fields: [...new Set([...AVAILABLE_LOCALES_FIELDS, ...nonLocalizedFields])],\n filters: {\n documentId: version.documentId,\n },\n };\n\n const dbParams = strapi.get('query-params').transform(uid, params);\n const versions = await strapi.db.query(uid).findMany(dbParams);\n\n // TODO: Remove use of available locales and use localizations instead\n const availableLocalesResult = availableLocales\n ? await this.getAvailableLocales(uid, version, versions)\n : [];\n\n const availableStatusResult = availableStatus\n ? this.getAvailableStatus(version, versions)\n : null;\n\n return {\n availableLocales: availableLocalesResult,\n availableStatus: availableStatusResult ? [availableStatusResult] : [],\n versions,\n };\n },\n\n /**\n * Returns associated metadata of a document:\n * - Available locales of the document for the current status\n * - Available status of the document for the current locale\n */\n async formatDocumentWithMetadata(\n uid: UID.ContentType,\n document: DocumentVersion,\n opts: GetMetadataOptions = {}\n ) {\n if (!document) {\n return {\n data: document,\n meta: {\n availableLocales: [],\n availableStatus: [],\n },\n };\n }\n\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(strapi.getModel(uid));\n\n // Ignore available status if the content type does not have draft and publish\n if (!hasDraftAndPublish) {\n opts.availableStatus = false;\n }\n\n const { versions, ...meta } = await this.getMetadata(uid, document, opts);\n\n // Populate localization statuses\n if (document.localizations?.length) {\n document.localizations = document.localizations.map((d) => {\n // Find the counterpart version (same documentId + locale, opposite publishedAt) from\n // the already-fetched versions array, avoiding an extra DB query.\n const counterpart = versions.find(\n (v) =>\n v.documentId === d.documentId &&\n v.locale === d.locale &&\n (d.publishedAt === null) !== (v.publishedAt === null)\n );\n return {\n ...d,\n status: this.getStatus(d, counterpart ? [counterpart] : []),\n };\n });\n }\n\n return {\n data: {\n ...document,\n // Add status to the document only if draft and publish is enabled\n status: hasDraftAndPublish\n ? this.getStatus(document, meta.availableStatus as any)\n : undefined,\n },\n meta,\n };\n },\n});\n"],"names":["getScalarAttributes","getMediaAttributes","contentTypes","AVAILABLE_STATUS_SCALAR_FIELDS","AVAILABLE_STATUS_POPULATE","createdBy","select","updatedBy","AVAILABLE_STATUS_FIELDS","AVAILABLE_LOCALES_FIELDS","oppositePublishStatus","publishedAt","$null","$notNull","CONTENT_MANAGER_STATUS","PUBLISHED","DRAFT","MODIFIED","getIsVersionLatestModification","version","otherVersion","updatedAt","versionUpdatedAt","Date","getTime","otherUpdatedAt","strapi","getAvailableLocales","uid","allVersions","versionsByLocale","groupBy","locale","model","getModel","mappingResult","async","map","Object","values","localeVersions","hasDraftAndPublish","draftVersion","find","v","otherVersions","filter","id","status","getStatus","filtered","Boolean","defaultLocaleCode","localization","getDefaultLocale","undefined","defaultEntries","entry","otherEntries","getAvailableStatus","availableStatus","matchLocale","matchStatus","pick","getManyAvailableStatus","documents","length","locales","d","where","documentId","$in","$or","db","query","findMany","otherDocumentStatuses","publishedVersion","at","isDraftModified","getMetadata","availableLocales","hasDnP","isLocalized","isLocalizedContentType","versions","onlyStatusIsRelevant","findOne","populate","nonLocalizedFields","nonLocalizedMediaFields","attributes","allNonLocalized","getNonLocalizedAttributes","scalarAttrs","mediaAttrs","field","includes","mediaPopulate","reduce","acc","folder","params","fields","Set","filters","dbParams","get","transform","availableLocalesResult","availableStatusResult","formatDocumentWithMetadata","document","opts","data","meta","localizations","counterpart"],"mappings":"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"}
@@ -187,7 +187,7 @@ var documentMetadata = (({ strapi })=>({
187
187
  }
188
188
  ];
189
189
  }
190
- return strapi.query(uid).findMany({
190
+ return strapi.db.query(uid).findMany({
191
191
  where,
192
192
  select: AVAILABLE_STATUS_SCALAR_FIELDS
193
193
  });