@strapi/content-releases 0.0.0-next.f4ff842a3cb7b83db540bee67554b704e042b042 → 0.0.0-next.f5d21551ed005f524bfc4760b274f1be154e26a8

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 (381) hide show
  1. package/LICENSE +17 -1
  2. package/dist/admin/assets/purchase-page-illustration-dark.svg.js +6 -0
  3. package/dist/admin/assets/purchase-page-illustration-dark.svg.js.map +1 -0
  4. package/dist/admin/assets/purchase-page-illustration-dark.svg.mjs +4 -0
  5. package/dist/admin/assets/purchase-page-illustration-dark.svg.mjs.map +1 -0
  6. package/dist/admin/assets/purchase-page-illustration-light.svg.js +6 -0
  7. package/dist/admin/assets/purchase-page-illustration-light.svg.js.map +1 -0
  8. package/dist/admin/assets/purchase-page-illustration-light.svg.mjs +4 -0
  9. package/dist/admin/assets/purchase-page-illustration-light.svg.mjs.map +1 -0
  10. package/dist/admin/components/EntryValidationPopover.js +310 -0
  11. package/dist/admin/components/EntryValidationPopover.js.map +1 -0
  12. package/dist/admin/components/EntryValidationPopover.mjs +308 -0
  13. package/dist/admin/components/EntryValidationPopover.mjs.map +1 -0
  14. package/dist/admin/components/RelativeTime.js +76 -0
  15. package/dist/admin/components/RelativeTime.js.map +1 -0
  16. package/dist/admin/components/RelativeTime.mjs +55 -0
  17. package/dist/admin/components/RelativeTime.mjs.map +1 -0
  18. package/dist/admin/components/ReleaseAction.js +203 -0
  19. package/dist/admin/components/ReleaseAction.js.map +1 -0
  20. package/dist/admin/components/ReleaseAction.mjs +201 -0
  21. package/dist/admin/components/ReleaseAction.mjs.map +1 -0
  22. package/dist/admin/components/ReleaseActionMenu.js +194 -0
  23. package/dist/admin/components/ReleaseActionMenu.js.map +1 -0
  24. package/dist/admin/components/ReleaseActionMenu.mjs +173 -0
  25. package/dist/admin/components/ReleaseActionMenu.mjs.map +1 -0
  26. package/dist/admin/components/ReleaseActionModal.js +268 -0
  27. package/dist/admin/components/ReleaseActionModal.js.map +1 -0
  28. package/dist/admin/components/ReleaseActionModal.mjs +244 -0
  29. package/dist/admin/components/ReleaseActionModal.mjs.map +1 -0
  30. package/dist/admin/components/ReleaseActionOptions.js +104 -0
  31. package/dist/admin/components/ReleaseActionOptions.js.map +1 -0
  32. package/dist/admin/components/ReleaseActionOptions.mjs +102 -0
  33. package/dist/admin/components/ReleaseActionOptions.mjs.map +1 -0
  34. package/dist/admin/components/ReleaseListCell.js +103 -0
  35. package/dist/admin/components/ReleaseListCell.js.map +1 -0
  36. package/dist/admin/components/ReleaseListCell.mjs +100 -0
  37. package/dist/admin/components/ReleaseListCell.mjs.map +1 -0
  38. package/dist/admin/components/ReleaseModal.js +323 -0
  39. package/dist/admin/components/ReleaseModal.js.map +1 -0
  40. package/dist/admin/components/ReleaseModal.mjs +302 -0
  41. package/dist/admin/components/ReleaseModal.mjs.map +1 -0
  42. package/dist/admin/components/ReleasesPanel.js +138 -0
  43. package/dist/admin/components/ReleasesPanel.js.map +1 -0
  44. package/dist/admin/components/ReleasesPanel.mjs +136 -0
  45. package/dist/admin/components/ReleasesPanel.mjs.map +1 -0
  46. package/dist/admin/components/Widgets.js +122 -0
  47. package/dist/admin/components/Widgets.js.map +1 -0
  48. package/dist/admin/components/Widgets.mjs +120 -0
  49. package/dist/admin/components/Widgets.mjs.map +1 -0
  50. package/dist/admin/constants.js +79 -0
  51. package/dist/admin/constants.js.map +1 -0
  52. package/dist/admin/constants.mjs +76 -0
  53. package/dist/admin/constants.mjs.map +1 -0
  54. package/dist/admin/index.js +148 -18
  55. package/dist/admin/index.js.map +1 -1
  56. package/dist/admin/index.mjs +143 -18
  57. package/dist/admin/index.mjs.map +1 -1
  58. package/dist/admin/modules/hooks.js +8 -0
  59. package/dist/admin/modules/hooks.js.map +1 -0
  60. package/dist/admin/modules/hooks.mjs +6 -0
  61. package/dist/admin/modules/hooks.mjs.map +1 -0
  62. package/dist/admin/pages/App.js +29 -0
  63. package/dist/admin/pages/App.js.map +1 -0
  64. package/dist/admin/pages/App.mjs +27 -0
  65. package/dist/admin/pages/App.mjs.map +1 -0
  66. package/dist/admin/pages/PurchaseContentReleases.js +192 -0
  67. package/dist/admin/pages/PurchaseContentReleases.js.map +1 -0
  68. package/dist/admin/pages/PurchaseContentReleases.mjs +190 -0
  69. package/dist/admin/pages/PurchaseContentReleases.mjs.map +1 -0
  70. package/dist/admin/pages/ReleaseDetailsPage.js +772 -0
  71. package/dist/admin/pages/ReleaseDetailsPage.js.map +1 -0
  72. package/dist/admin/pages/ReleaseDetailsPage.mjs +751 -0
  73. package/dist/admin/pages/ReleaseDetailsPage.mjs.map +1 -0
  74. package/dist/admin/pages/ReleasesPage.js +403 -0
  75. package/dist/admin/pages/ReleasesPage.js.map +1 -0
  76. package/dist/admin/pages/ReleasesPage.mjs +381 -0
  77. package/dist/admin/pages/ReleasesPage.mjs.map +1 -0
  78. package/dist/admin/pages/ReleasesSettingsPage.js +225 -0
  79. package/dist/admin/pages/ReleasesSettingsPage.js.map +1 -0
  80. package/dist/admin/pages/ReleasesSettingsPage.mjs +223 -0
  81. package/dist/admin/pages/ReleasesSettingsPage.mjs.map +1 -0
  82. package/dist/admin/pluginId.js +6 -0
  83. package/dist/admin/pluginId.js.map +1 -0
  84. package/dist/admin/pluginId.mjs +4 -0
  85. package/dist/admin/pluginId.mjs.map +1 -0
  86. package/dist/admin/services/homepage.js +24 -0
  87. package/dist/admin/services/homepage.js.map +1 -0
  88. package/dist/admin/services/homepage.mjs +22 -0
  89. package/dist/admin/services/homepage.mjs.map +1 -0
  90. package/dist/admin/services/release.js +474 -0
  91. package/dist/admin/services/release.js.map +1 -0
  92. package/dist/admin/services/release.mjs +457 -0
  93. package/dist/admin/services/release.mjs.map +1 -0
  94. package/dist/admin/src/components/EntryValidationPopover.d.ts +13 -0
  95. package/dist/admin/src/components/RelativeTime.d.ts +28 -0
  96. package/dist/admin/src/components/ReleaseAction.d.ts +3 -0
  97. package/dist/admin/src/components/ReleaseActionMenu.d.ts +26 -0
  98. package/dist/admin/src/components/ReleaseActionModal.d.ts +24 -0
  99. package/dist/admin/src/components/ReleaseActionOptions.d.ts +9 -0
  100. package/dist/admin/src/components/ReleaseListCell.d.ts +28 -0
  101. package/dist/admin/src/components/ReleaseModal.d.ts +17 -0
  102. package/dist/admin/src/components/ReleasesPanel.d.ts +3 -0
  103. package/dist/admin/src/components/Widgets.d.ts +2 -0
  104. package/dist/admin/src/constants.d.ts +77 -0
  105. package/dist/admin/src/index.d.ts +3 -0
  106. package/dist/admin/src/modules/hooks.d.ts +7 -0
  107. package/dist/admin/src/pages/App.d.ts +1 -0
  108. package/dist/admin/src/pages/PurchaseContentReleases.d.ts +2 -0
  109. package/dist/admin/src/pages/ReleaseDetailsPage.d.ts +2 -0
  110. package/dist/admin/src/pages/ReleasesPage.d.ts +8 -0
  111. package/dist/admin/src/pages/ReleasesSettingsPage.d.ts +1 -0
  112. package/dist/admin/src/pages/tests/mockReleaseDetailsPageData.d.ts +181 -0
  113. package/dist/admin/src/pages/tests/mockReleasesPageData.d.ts +39 -0
  114. package/dist/admin/src/pluginId.d.ts +1 -0
  115. package/dist/admin/src/services/homepage.d.ts +9 -0
  116. package/dist/admin/src/services/release.d.ts +112 -0
  117. package/dist/admin/src/store/hooks.d.ts +7 -0
  118. package/dist/admin/src/utils/api.d.ts +6 -0
  119. package/dist/admin/src/utils/prefixPluginTranslations.d.ts +3 -0
  120. package/dist/admin/src/utils/time.d.ts +10 -0
  121. package/dist/admin/src/validation/schemas.d.ts +6 -0
  122. package/dist/admin/store/hooks.js +8 -0
  123. package/dist/admin/store/hooks.js.map +1 -0
  124. package/dist/admin/store/hooks.mjs +6 -0
  125. package/dist/admin/store/hooks.mjs.map +1 -0
  126. package/dist/admin/translations/en.json.js +111 -0
  127. package/dist/admin/translations/en.json.js.map +1 -0
  128. package/dist/admin/translations/en.json.mjs +109 -0
  129. package/dist/admin/translations/en.json.mjs.map +1 -0
  130. package/dist/admin/translations/uk.json.js +103 -0
  131. package/dist/admin/translations/uk.json.js.map +1 -0
  132. package/dist/admin/translations/uk.json.mjs +101 -0
  133. package/dist/admin/translations/uk.json.mjs.map +1 -0
  134. package/dist/admin/utils/api.js +8 -0
  135. package/dist/admin/utils/api.js.map +1 -0
  136. package/dist/admin/utils/api.mjs +6 -0
  137. package/dist/admin/utils/api.mjs.map +1 -0
  138. package/dist/admin/utils/prefixPluginTranslations.js +11 -0
  139. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
  140. package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
  141. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
  142. package/dist/admin/utils/time.js +42 -0
  143. package/dist/admin/utils/time.js.map +1 -0
  144. package/dist/admin/utils/time.mjs +39 -0
  145. package/dist/admin/utils/time.mjs.map +1 -0
  146. package/dist/admin/validation/schemas.js +65 -0
  147. package/dist/admin/validation/schemas.js.map +1 -0
  148. package/dist/admin/validation/schemas.mjs +43 -0
  149. package/dist/admin/validation/schemas.mjs.map +1 -0
  150. package/dist/server/bootstrap.js +68 -0
  151. package/dist/server/bootstrap.js.map +1 -0
  152. package/dist/server/bootstrap.mjs +66 -0
  153. package/dist/server/bootstrap.mjs.map +1 -0
  154. package/dist/server/constants.js +74 -0
  155. package/dist/server/constants.js.map +1 -0
  156. package/dist/server/constants.mjs +69 -0
  157. package/dist/server/constants.mjs.map +1 -0
  158. package/dist/server/content-types/index.js +12 -0
  159. package/dist/server/content-types/index.js.map +1 -0
  160. package/dist/server/content-types/index.mjs +10 -0
  161. package/dist/server/content-types/index.mjs.map +1 -0
  162. package/dist/server/content-types/release/index.js +10 -0
  163. package/dist/server/content-types/release/index.js.map +1 -0
  164. package/dist/server/content-types/release/index.mjs +8 -0
  165. package/dist/server/content-types/release/index.mjs.map +1 -0
  166. package/dist/server/content-types/release/schema.js +58 -0
  167. package/dist/server/content-types/release/schema.js.map +1 -0
  168. package/dist/server/content-types/release/schema.mjs +56 -0
  169. package/dist/server/content-types/release/schema.mjs.map +1 -0
  170. package/dist/server/content-types/release-action/index.js +10 -0
  171. package/dist/server/content-types/release-action/index.js.map +1 -0
  172. package/dist/server/content-types/release-action/index.mjs +8 -0
  173. package/dist/server/content-types/release-action/index.mjs.map +1 -0
  174. package/dist/server/content-types/release-action/schema.js +55 -0
  175. package/dist/server/content-types/release-action/schema.js.map +1 -0
  176. package/dist/server/content-types/release-action/schema.mjs +53 -0
  177. package/dist/server/content-types/release-action/schema.mjs.map +1 -0
  178. package/dist/server/controllers/homepage.js +15 -0
  179. package/dist/server/controllers/homepage.js.map +1 -0
  180. package/dist/server/controllers/homepage.mjs +13 -0
  181. package/dist/server/controllers/homepage.mjs.map +1 -0
  182. package/dist/server/controllers/index.js +16 -0
  183. package/dist/server/controllers/index.js.map +1 -0
  184. package/dist/server/controllers/index.mjs +14 -0
  185. package/dist/server/controllers/index.mjs.map +1 -0
  186. package/dist/server/controllers/release-action.js +150 -0
  187. package/dist/server/controllers/release-action.js.map +1 -0
  188. package/dist/server/controllers/release-action.mjs +148 -0
  189. package/dist/server/controllers/release-action.mjs.map +1 -0
  190. package/dist/server/controllers/release.js +302 -0
  191. package/dist/server/controllers/release.js.map +1 -0
  192. package/dist/server/controllers/release.mjs +300 -0
  193. package/dist/server/controllers/release.mjs.map +1 -0
  194. package/dist/server/controllers/settings.js +37 -0
  195. package/dist/server/controllers/settings.js.map +1 -0
  196. package/dist/server/controllers/settings.mjs +35 -0
  197. package/dist/server/controllers/settings.mjs.map +1 -0
  198. package/dist/server/controllers/validation/release-action.js +34 -0
  199. package/dist/server/controllers/validation/release-action.js.map +1 -0
  200. package/dist/server/controllers/validation/release-action.mjs +30 -0
  201. package/dist/server/controllers/validation/release-action.mjs.map +1 -0
  202. package/dist/server/controllers/validation/release.js +26 -0
  203. package/dist/server/controllers/validation/release.js.map +1 -0
  204. package/dist/server/controllers/validation/release.mjs +22 -0
  205. package/dist/server/controllers/validation/release.mjs.map +1 -0
  206. package/dist/server/controllers/validation/settings.js +32 -0
  207. package/dist/server/controllers/validation/settings.js.map +1 -0
  208. package/dist/server/controllers/validation/settings.mjs +10 -0
  209. package/dist/server/controllers/validation/settings.mjs.map +1 -0
  210. package/dist/server/destroy.js +15 -0
  211. package/dist/server/destroy.js.map +1 -0
  212. package/dist/server/destroy.mjs +13 -0
  213. package/dist/server/destroy.mjs.map +1 -0
  214. package/dist/server/index.js +25 -1777
  215. package/dist/server/index.js.map +1 -1
  216. package/dist/server/index.mjs +24 -1756
  217. package/dist/server/index.mjs.map +1 -1
  218. package/dist/server/middlewares/documents.js +104 -0
  219. package/dist/server/middlewares/documents.js.map +1 -0
  220. package/dist/server/middlewares/documents.mjs +101 -0
  221. package/dist/server/middlewares/documents.mjs.map +1 -0
  222. package/dist/server/migrations/database/5.0.0-document-id-in-actions.js +51 -0
  223. package/dist/server/migrations/database/5.0.0-document-id-in-actions.js.map +1 -0
  224. package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs +49 -0
  225. package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs.map +1 -0
  226. package/dist/server/migrations/index.js +205 -0
  227. package/dist/server/migrations/index.js.map +1 -0
  228. package/dist/server/migrations/index.mjs +198 -0
  229. package/dist/server/migrations/index.mjs.map +1 -0
  230. package/dist/server/register.js +23 -0
  231. package/dist/server/register.js.map +1 -0
  232. package/dist/server/register.mjs +21 -0
  233. package/dist/server/register.mjs.map +1 -0
  234. package/dist/server/routes/homepage.js +25 -0
  235. package/dist/server/routes/homepage.js.map +1 -0
  236. package/dist/server/routes/homepage.mjs +23 -0
  237. package/dist/server/routes/homepage.mjs.map +1 -0
  238. package/dist/server/routes/index.js +16 -0
  239. package/dist/server/routes/index.js.map +1 -0
  240. package/dist/server/routes/index.mjs +14 -0
  241. package/dist/server/routes/index.mjs.map +1 -0
  242. package/dist/server/routes/release-action.js +100 -0
  243. package/dist/server/routes/release-action.js.map +1 -0
  244. package/dist/server/routes/release-action.mjs +98 -0
  245. package/dist/server/routes/release-action.mjs.map +1 -0
  246. package/dist/server/routes/release.js +154 -0
  247. package/dist/server/routes/release.js.map +1 -0
  248. package/dist/server/routes/release.mjs +152 -0
  249. package/dist/server/routes/release.mjs.map +1 -0
  250. package/dist/server/routes/settings.js +46 -0
  251. package/dist/server/routes/settings.js.map +1 -0
  252. package/dist/server/routes/settings.mjs +44 -0
  253. package/dist/server/routes/settings.mjs.map +1 -0
  254. package/dist/server/services/homepage.js +26 -0
  255. package/dist/server/services/homepage.js.map +1 -0
  256. package/dist/server/services/homepage.mjs +24 -0
  257. package/dist/server/services/homepage.mjs.map +1 -0
  258. package/dist/server/services/index.js +20 -0
  259. package/dist/server/services/index.js.map +1 -0
  260. package/dist/server/services/index.mjs +18 -0
  261. package/dist/server/services/index.mjs.map +1 -0
  262. package/dist/server/services/release-action.js +324 -0
  263. package/dist/server/services/release-action.js.map +1 -0
  264. package/dist/server/services/release-action.mjs +322 -0
  265. package/dist/server/services/release-action.mjs.map +1 -0
  266. package/dist/server/services/release.js +324 -0
  267. package/dist/server/services/release.js.map +1 -0
  268. package/dist/server/services/release.mjs +322 -0
  269. package/dist/server/services/release.mjs.map +1 -0
  270. package/dist/server/services/scheduling.js +74 -0
  271. package/dist/server/services/scheduling.js.map +1 -0
  272. package/dist/server/services/scheduling.mjs +72 -0
  273. package/dist/server/services/scheduling.mjs.map +1 -0
  274. package/dist/server/services/settings.js +34 -0
  275. package/dist/server/services/settings.js.map +1 -0
  276. package/dist/server/services/settings.mjs +32 -0
  277. package/dist/server/services/settings.mjs.map +1 -0
  278. package/dist/server/services/validation.js +91 -0
  279. package/dist/server/services/validation.js.map +1 -0
  280. package/dist/server/services/validation.mjs +86 -0
  281. package/dist/server/services/validation.mjs.map +1 -0
  282. package/dist/server/src/bootstrap.d.ts +5 -0
  283. package/dist/server/src/bootstrap.d.ts.map +1 -0
  284. package/dist/server/src/constants.d.ts +21 -0
  285. package/dist/server/src/constants.d.ts.map +1 -0
  286. package/dist/server/src/content-types/index.d.ts +97 -0
  287. package/dist/server/src/content-types/index.d.ts.map +1 -0
  288. package/dist/server/src/content-types/release/index.d.ts +48 -0
  289. package/dist/server/src/content-types/release/index.d.ts.map +1 -0
  290. package/dist/server/src/content-types/release/schema.d.ts +47 -0
  291. package/dist/server/src/content-types/release/schema.d.ts.map +1 -0
  292. package/dist/server/src/content-types/release-action/index.d.ts +48 -0
  293. package/dist/server/src/content-types/release-action/index.d.ts.map +1 -0
  294. package/dist/server/src/content-types/release-action/schema.d.ts +47 -0
  295. package/dist/server/src/content-types/release-action/schema.d.ts.map +1 -0
  296. package/dist/server/src/controllers/homepage.d.ts +6 -0
  297. package/dist/server/src/controllers/homepage.d.ts.map +1 -0
  298. package/dist/server/src/controllers/index.d.ts +28 -0
  299. package/dist/server/src/controllers/index.d.ts.map +1 -0
  300. package/dist/server/src/controllers/release-action.d.ts +10 -0
  301. package/dist/server/src/controllers/release-action.d.ts.map +1 -0
  302. package/dist/server/src/controllers/release.d.ts +18 -0
  303. package/dist/server/src/controllers/release.d.ts.map +1 -0
  304. package/dist/server/src/controllers/settings.d.ts +11 -0
  305. package/dist/server/src/controllers/settings.d.ts.map +1 -0
  306. package/dist/server/src/controllers/validation/release-action.d.ts +14 -0
  307. package/dist/server/src/controllers/validation/release-action.d.ts.map +1 -0
  308. package/dist/server/src/controllers/validation/release.d.ts +4 -0
  309. package/dist/server/src/controllers/validation/release.d.ts.map +1 -0
  310. package/dist/server/src/controllers/validation/settings.d.ts +3 -0
  311. package/dist/server/src/controllers/validation/settings.d.ts.map +1 -0
  312. package/dist/server/src/destroy.d.ts +5 -0
  313. package/dist/server/src/destroy.d.ts.map +1 -0
  314. package/dist/server/src/index.d.ts +2120 -0
  315. package/dist/server/src/index.d.ts.map +1 -0
  316. package/dist/server/src/middlewares/documents.d.ts +6 -0
  317. package/dist/server/src/middlewares/documents.d.ts.map +1 -0
  318. package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts +9 -0
  319. package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts.map +1 -0
  320. package/dist/server/src/migrations/index.d.ts +13 -0
  321. package/dist/server/src/migrations/index.d.ts.map +1 -0
  322. package/dist/server/src/register.d.ts +5 -0
  323. package/dist/server/src/register.d.ts.map +1 -0
  324. package/dist/server/src/routes/homepage.d.ts +4 -0
  325. package/dist/server/src/routes/homepage.d.ts.map +1 -0
  326. package/dist/server/src/routes/index.d.ts +52 -0
  327. package/dist/server/src/routes/index.d.ts.map +1 -0
  328. package/dist/server/src/routes/release-action.d.ts +18 -0
  329. package/dist/server/src/routes/release-action.d.ts.map +1 -0
  330. package/dist/server/src/routes/release.d.ts +18 -0
  331. package/dist/server/src/routes/release.d.ts.map +1 -0
  332. package/dist/server/src/routes/settings.d.ts +18 -0
  333. package/dist/server/src/routes/settings.d.ts.map +1 -0
  334. package/dist/server/src/services/homepage.d.ts +9 -0
  335. package/dist/server/src/services/homepage.d.ts.map +1 -0
  336. package/dist/server/src/services/index.d.ts +1829 -0
  337. package/dist/server/src/services/index.d.ts.map +1 -0
  338. package/dist/server/src/services/release-action.d.ts +34 -0
  339. package/dist/server/src/services/release-action.d.ts.map +1 -0
  340. package/dist/server/src/services/release.d.ts +31 -0
  341. package/dist/server/src/services/release.d.ts.map +1 -0
  342. package/dist/server/src/services/scheduling.d.ts +17 -0
  343. package/dist/server/src/services/scheduling.d.ts.map +1 -0
  344. package/dist/server/src/services/settings.d.ts +13 -0
  345. package/dist/server/src/services/settings.d.ts.map +1 -0
  346. package/dist/server/src/services/validation.d.ts +18 -0
  347. package/dist/server/src/services/validation.d.ts.map +1 -0
  348. package/dist/server/src/utils/index.d.ts +35 -0
  349. package/dist/server/src/utils/index.d.ts.map +1 -0
  350. package/dist/server/utils/index.js +94 -0
  351. package/dist/server/utils/index.js.map +1 -0
  352. package/dist/server/utils/index.mjs +88 -0
  353. package/dist/server/utils/index.mjs.map +1 -0
  354. package/dist/shared/contracts/homepage.d.ts +11 -0
  355. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  356. package/dist/shared/contracts/release-actions.d.ts +136 -0
  357. package/dist/shared/contracts/release-actions.d.ts.map +1 -0
  358. package/dist/shared/contracts/releases.d.ts +183 -0
  359. package/dist/shared/contracts/releases.d.ts.map +1 -0
  360. package/dist/shared/contracts/settings.d.ts +38 -0
  361. package/dist/shared/contracts/settings.d.ts.map +1 -0
  362. package/dist/shared/types.d.ts +24 -0
  363. package/dist/shared/types.d.ts.map +1 -0
  364. package/package.json +39 -42
  365. package/dist/_chunks/App-dLXY5ei3.js +0 -1353
  366. package/dist/_chunks/App-dLXY5ei3.js.map +0 -1
  367. package/dist/_chunks/App-jrh58sXY.mjs +0 -1330
  368. package/dist/_chunks/App-jrh58sXY.mjs.map +0 -1
  369. package/dist/_chunks/PurchaseContentReleases-3tRbmbY3.mjs +0 -51
  370. package/dist/_chunks/PurchaseContentReleases-3tRbmbY3.mjs.map +0 -1
  371. package/dist/_chunks/PurchaseContentReleases-bpIYXOfu.js +0 -51
  372. package/dist/_chunks/PurchaseContentReleases-bpIYXOfu.js.map +0 -1
  373. package/dist/_chunks/en-HrREghh3.js +0 -86
  374. package/dist/_chunks/en-HrREghh3.js.map +0 -1
  375. package/dist/_chunks/en-ltT1TlKQ.mjs +0 -86
  376. package/dist/_chunks/en-ltT1TlKQ.mjs.map +0 -1
  377. package/dist/_chunks/index-CVO0Rqdm.js +0 -1336
  378. package/dist/_chunks/index-CVO0Rqdm.js.map +0 -1
  379. package/dist/_chunks/index-PiOGBETy.mjs +0 -1315
  380. package/dist/_chunks/index-PiOGBETy.mjs.map +0 -1
  381. package/strapi-server.js +0 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sources":["../../../server/src/routes/settings.ts"],"sourcesContent":["export default {\n type: 'admin',\n routes: [\n {\n method: 'GET',\n path: '/settings',\n handler: 'settings.find',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::content-releases.settings.read'],\n },\n },\n ],\n },\n },\n\n {\n method: 'PUT',\n path: '/settings',\n handler: 'settings.update',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::content-releases.settings.update'],\n },\n },\n ],\n },\n },\n ],\n};\n"],"names":["type","routes","method","path","handler","config","policies","name","actions"],"mappings":";;AAAA,eAAe;IACbA,IAAM,EAAA,OAAA;IACNC,MAAQ,EAAA;AACN,QAAA;YACEC,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,eAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,uBAAA;wBACNF,MAAQ,EAAA;4BACNG,OAAS,EAAA;AAAC,gCAAA;AAAyC;AACrD;AACF;AACD;AACH;AACF,SAAA;AAEA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,iBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,uBAAA;wBACNF,MAAQ,EAAA;4BACNG,OAAS,EAAA;AAAC,gCAAA;AAA2C;AACvD;AACF;AACD;AACH;AACF;AACD;AACH,CAAE;;;;"}
@@ -0,0 +1,44 @@
1
+ var settings = {
2
+ type: 'admin',
3
+ routes: [
4
+ {
5
+ method: 'GET',
6
+ path: '/settings',
7
+ handler: 'settings.find',
8
+ config: {
9
+ policies: [
10
+ 'admin::isAuthenticatedAdmin',
11
+ {
12
+ name: 'admin::hasPermissions',
13
+ config: {
14
+ actions: [
15
+ 'plugin::content-releases.settings.read'
16
+ ]
17
+ }
18
+ }
19
+ ]
20
+ }
21
+ },
22
+ {
23
+ method: 'PUT',
24
+ path: '/settings',
25
+ handler: 'settings.update',
26
+ config: {
27
+ policies: [
28
+ 'admin::isAuthenticatedAdmin',
29
+ {
30
+ name: 'admin::hasPermissions',
31
+ config: {
32
+ actions: [
33
+ 'plugin::content-releases.settings.update'
34
+ ]
35
+ }
36
+ }
37
+ ]
38
+ }
39
+ }
40
+ ]
41
+ };
42
+
43
+ export { settings as default };
44
+ //# sourceMappingURL=settings.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.mjs","sources":["../../../server/src/routes/settings.ts"],"sourcesContent":["export default {\n type: 'admin',\n routes: [\n {\n method: 'GET',\n path: '/settings',\n handler: 'settings.find',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::content-releases.settings.read'],\n },\n },\n ],\n },\n },\n\n {\n method: 'PUT',\n path: '/settings',\n handler: 'settings.update',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::content-releases.settings.update'],\n },\n },\n ],\n },\n },\n ],\n};\n"],"names":["type","routes","method","path","handler","config","policies","name","actions"],"mappings":"AAAA,eAAe;IACbA,IAAM,EAAA,OAAA;IACNC,MAAQ,EAAA;AACN,QAAA;YACEC,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,eAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,uBAAA;wBACNF,MAAQ,EAAA;4BACNG,OAAS,EAAA;AAAC,gCAAA;AAAyC;AACrD;AACF;AACD;AACH;AACF,SAAA;AAEA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,iBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,uBAAA;wBACNF,MAAQ,EAAA;4BACNG,OAAS,EAAA;AAAC,gCAAA;AAA2C;AACvD;AACF;AACD;AACH;AACF;AACD;AACH,CAAE;;;;"}
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ const createHomepageService = ({ strapi })=>{
4
+ const MAX_DOCUMENTS = 4;
5
+ return {
6
+ async getUpcomingReleases () {
7
+ const releases = await strapi.db.query('plugin::content-releases.release').findMany({
8
+ filters: {
9
+ releasedAt: {
10
+ $notNull: false
11
+ }
12
+ },
13
+ orderBy: [
14
+ {
15
+ scheduledAt: 'asc'
16
+ }
17
+ ],
18
+ limit: MAX_DOCUMENTS
19
+ });
20
+ return releases;
21
+ }
22
+ };
23
+ };
24
+
25
+ module.exports = createHomepageService;
26
+ //# sourceMappingURL=homepage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"homepage.js","sources":["../../../server/src/services/homepage.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport type { GetUpcomingReleases } from '../../../shared/contracts/homepage';\n\nconst createHomepageService = ({ strapi }: { strapi: Core.Strapi }) => {\n const MAX_DOCUMENTS = 4;\n\n return {\n async getUpcomingReleases(): Promise<GetUpcomingReleases.Response['data']> {\n const releases = await strapi.db.query('plugin::content-releases.release').findMany({\n filters: {\n releasedAt: {\n $notNull: false,\n },\n },\n orderBy: [{ scheduledAt: 'asc' }],\n limit: MAX_DOCUMENTS,\n });\n\n return releases;\n },\n };\n};\n\nexport default createHomepageService;\n"],"names":["createHomepageService","strapi","MAX_DOCUMENTS","getUpcomingReleases","releases","db","query","findMany","filters","releasedAt","$notNull","orderBy","scheduledAt","limit"],"mappings":";;AAIA,MAAMA,qBAAwB,GAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;AAChE,IAAA,MAAMC,aAAgB,GAAA,CAAA;IAEtB,OAAO;QACL,MAAMC,mBAAAA,CAAAA,GAAAA;YACJ,MAAMC,QAAAA,GAAW,MAAMH,MAAOI,CAAAA,EAAE,CAACC,KAAK,CAAC,kCAAoCC,CAAAA,CAAAA,QAAQ,CAAC;gBAClFC,OAAS,EAAA;oBACPC,UAAY,EAAA;wBACVC,QAAU,EAAA;AACZ;AACF,iBAAA;gBACAC,OAAS,EAAA;AAAC,oBAAA;wBAAEC,WAAa,EAAA;AAAM;AAAE,iBAAA;gBACjCC,KAAOX,EAAAA;AACT,aAAA,CAAA;YAEA,OAAOE,QAAAA;AACT;AACF,KAAA;AACF;;;;"}
@@ -0,0 +1,24 @@
1
+ const createHomepageService = ({ strapi })=>{
2
+ const MAX_DOCUMENTS = 4;
3
+ return {
4
+ async getUpcomingReleases () {
5
+ const releases = await strapi.db.query('plugin::content-releases.release').findMany({
6
+ filters: {
7
+ releasedAt: {
8
+ $notNull: false
9
+ }
10
+ },
11
+ orderBy: [
12
+ {
13
+ scheduledAt: 'asc'
14
+ }
15
+ ],
16
+ limit: MAX_DOCUMENTS
17
+ });
18
+ return releases;
19
+ }
20
+ };
21
+ };
22
+
23
+ export { createHomepageService as default };
24
+ //# sourceMappingURL=homepage.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"homepage.mjs","sources":["../../../server/src/services/homepage.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport type { GetUpcomingReleases } from '../../../shared/contracts/homepage';\n\nconst createHomepageService = ({ strapi }: { strapi: Core.Strapi }) => {\n const MAX_DOCUMENTS = 4;\n\n return {\n async getUpcomingReleases(): Promise<GetUpcomingReleases.Response['data']> {\n const releases = await strapi.db.query('plugin::content-releases.release').findMany({\n filters: {\n releasedAt: {\n $notNull: false,\n },\n },\n orderBy: [{ scheduledAt: 'asc' }],\n limit: MAX_DOCUMENTS,\n });\n\n return releases;\n },\n };\n};\n\nexport default createHomepageService;\n"],"names":["createHomepageService","strapi","MAX_DOCUMENTS","getUpcomingReleases","releases","db","query","findMany","filters","releasedAt","$notNull","orderBy","scheduledAt","limit"],"mappings":"AAIA,MAAMA,qBAAwB,GAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;AAChE,IAAA,MAAMC,aAAgB,GAAA,CAAA;IAEtB,OAAO;QACL,MAAMC,mBAAAA,CAAAA,GAAAA;YACJ,MAAMC,QAAAA,GAAW,MAAMH,MAAOI,CAAAA,EAAE,CAACC,KAAK,CAAC,kCAAoCC,CAAAA,CAAAA,QAAQ,CAAC;gBAClFC,OAAS,EAAA;oBACPC,UAAY,EAAA;wBACVC,QAAU,EAAA;AACZ;AACF,iBAAA;gBACAC,OAAS,EAAA;AAAC,oBAAA;wBAAEC,WAAa,EAAA;AAAM;AAAE,iBAAA;gBACjCC,KAAOX,EAAAA;AACT,aAAA,CAAA;YAEA,OAAOE,QAAAA;AACT;AACF,KAAA;AACF;;;;"}
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ var homepage = require('./homepage.js');
4
+ var release = require('./release.js');
5
+ var releaseAction = require('./release-action.js');
6
+ var validation = require('./validation.js');
7
+ var scheduling = require('./scheduling.js');
8
+ var settings = require('./settings.js');
9
+
10
+ const services = {
11
+ homepage,
12
+ release,
13
+ 'release-action': releaseAction,
14
+ 'release-validation': validation.default,
15
+ scheduling,
16
+ settings
17
+ };
18
+
19
+ exports.services = services;
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../server/src/services/index.ts"],"sourcesContent":["import homepage from './homepage';\nimport release from './release';\nimport releaseAction from './release-action';\nimport releaseValidation from './validation';\nimport scheduling from './scheduling';\nimport settings from './settings';\n\nexport const services = {\n homepage,\n release,\n 'release-action': releaseAction,\n 'release-validation': releaseValidation,\n scheduling,\n settings,\n};\n"],"names":["services","homepage","release","releaseAction","releaseValidation","scheduling","settings"],"mappings":";;;;;;;;;MAOaA,QAAW,GAAA;AACtBC,IAAAA,QAAAA;AACAC,IAAAA,OAAAA;IACA,gBAAkBC,EAAAA,aAAAA;IAClB,oBAAsBC,EAAAA,kBAAAA;AACtBC,IAAAA,UAAAA;AACAC,IAAAA;AACF;;;;"}
@@ -0,0 +1,18 @@
1
+ import createHomepageService from './homepage.mjs';
2
+ import createReleaseService from './release.mjs';
3
+ import createReleaseActionService from './release-action.mjs';
4
+ import createReleaseValidationService from './validation.mjs';
5
+ import createSchedulingService from './scheduling.mjs';
6
+ import createSettingsService from './settings.mjs';
7
+
8
+ const services = {
9
+ homepage: createHomepageService,
10
+ release: createReleaseService,
11
+ 'release-action': createReleaseActionService,
12
+ 'release-validation': createReleaseValidationService,
13
+ scheduling: createSchedulingService,
14
+ settings: createSettingsService
15
+ };
16
+
17
+ export { services };
18
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../server/src/services/index.ts"],"sourcesContent":["import homepage from './homepage';\nimport release from './release';\nimport releaseAction from './release-action';\nimport releaseValidation from './validation';\nimport scheduling from './scheduling';\nimport settings from './settings';\n\nexport const services = {\n homepage,\n release,\n 'release-action': releaseAction,\n 'release-validation': releaseValidation,\n scheduling,\n settings,\n};\n"],"names":["services","homepage","release","releaseAction","releaseValidation","scheduling","settings"],"mappings":";;;;;;;MAOaA,QAAW,GAAA;AACtBC,cAAAA,qBAAAA;AACAC,aAAAA,oBAAAA;IACA,gBAAkBC,EAAAA,0BAAAA;IAClB,oBAAsBC,EAAAA,8BAAAA;AACtBC,gBAAAA,uBAAAA;AACAC,cAAAA;AACF;;;;"}
@@ -0,0 +1,324 @@
1
+ 'use strict';
2
+
3
+ var utils = require('@strapi/utils');
4
+ var _ = require('lodash/fp');
5
+ var constants = require('../constants.js');
6
+ var index = require('../utils/index.js');
7
+
8
+ const getGroupName = (queryValue)=>{
9
+ switch(queryValue){
10
+ case 'contentType':
11
+ return 'contentType.displayName';
12
+ case 'type':
13
+ return 'type';
14
+ case 'locale':
15
+ return _.getOr('No locale', 'locale.name');
16
+ default:
17
+ return 'contentType.displayName';
18
+ }
19
+ };
20
+ const createReleaseActionService = ({ strapi })=>{
21
+ const getLocalesDataForActions = async ()=>{
22
+ if (!strapi.plugin('i18n')) {
23
+ return {};
24
+ }
25
+ const allLocales = await strapi.plugin('i18n').service('locales').find() || [];
26
+ return allLocales.reduce((acc, locale)=>{
27
+ acc[locale.code] = {
28
+ name: locale.name,
29
+ code: locale.code
30
+ };
31
+ return acc;
32
+ }, {});
33
+ };
34
+ const getContentTypesDataForActions = async (contentTypesUids)=>{
35
+ const contentManagerContentTypeService = strapi.plugin('content-manager').service('content-types');
36
+ const contentTypesData = {};
37
+ for (const contentTypeUid of contentTypesUids){
38
+ const contentTypeConfig = await contentManagerContentTypeService.findConfiguration({
39
+ uid: contentTypeUid
40
+ });
41
+ contentTypesData[contentTypeUid] = {
42
+ mainField: contentTypeConfig.settings.mainField,
43
+ displayName: strapi.getModel(contentTypeUid).info.displayName
44
+ };
45
+ }
46
+ return contentTypesData;
47
+ };
48
+ return {
49
+ async create (releaseId, action, { disableUpdateReleaseStatus = false } = {}) {
50
+ const { validateEntryData, validateUniqueEntry } = index.getService('release-validation', {
51
+ strapi
52
+ });
53
+ await Promise.all([
54
+ validateEntryData(action.contentType, action.entryDocumentId),
55
+ validateUniqueEntry(releaseId, action)
56
+ ]);
57
+ // If we are adding a singleType, we need to append the documentId of that singleType
58
+ const model = strapi.contentType(action.contentType);
59
+ if (model.kind === 'singleType') {
60
+ const document = await strapi.db.query(model.uid).findOne({
61
+ select: [
62
+ 'documentId'
63
+ ]
64
+ });
65
+ if (!document) {
66
+ throw new utils.errors.NotFoundError(`No entry found for contentType ${action.contentType}`);
67
+ }
68
+ action.entryDocumentId = document.documentId;
69
+ }
70
+ const release = await strapi.db.query(constants.RELEASE_MODEL_UID).findOne({
71
+ where: {
72
+ id: releaseId
73
+ }
74
+ });
75
+ if (!release) {
76
+ throw new utils.errors.NotFoundError(`No release found for id ${releaseId}`);
77
+ }
78
+ if (release.releasedAt) {
79
+ throw new utils.errors.ValidationError('Release already published');
80
+ }
81
+ // If the action is a publish, check if the entry is valid
82
+ // If the action is an unpublish, skip the validation
83
+ const actionStatus = action.type === 'publish' ? await index.getDraftEntryValidStatus({
84
+ contentType: action.contentType,
85
+ documentId: action.entryDocumentId,
86
+ locale: action.locale
87
+ }, {
88
+ strapi
89
+ }) : true;
90
+ const releaseAction = await strapi.db.query(constants.RELEASE_ACTION_MODEL_UID).create({
91
+ data: {
92
+ ...action,
93
+ release: release.id,
94
+ isEntryValid: actionStatus
95
+ },
96
+ populate: {
97
+ release: {
98
+ select: [
99
+ 'id'
100
+ ]
101
+ }
102
+ }
103
+ });
104
+ if (!disableUpdateReleaseStatus) {
105
+ index.getService('release', {
106
+ strapi
107
+ }).updateReleaseStatus(release.id);
108
+ }
109
+ return releaseAction;
110
+ },
111
+ async findPage (releaseId, query) {
112
+ const release = await strapi.db.query(constants.RELEASE_MODEL_UID).findOne({
113
+ where: {
114
+ id: releaseId
115
+ },
116
+ select: [
117
+ 'id'
118
+ ]
119
+ });
120
+ if (!release) {
121
+ throw new utils.errors.NotFoundError(`No release found for id ${releaseId}`);
122
+ }
123
+ const dbQuery = strapi.get('query-params').transform(constants.RELEASE_ACTION_MODEL_UID, query ?? {});
124
+ const { results: actions, pagination } = await strapi.db.query(constants.RELEASE_ACTION_MODEL_UID).findPage({
125
+ ...dbQuery,
126
+ where: {
127
+ release: releaseId
128
+ }
129
+ });
130
+ // For each contentType on the release, we create a custom populate object for nested relations
131
+ const populateBuilderService = strapi.plugin('content-manager').service('populate-builder');
132
+ const actionsWithEntry = await utils.async.map(actions, async (action)=>{
133
+ // @ts-expect-error - Core.Service type is not a function
134
+ const populate = await populateBuilderService(action.contentType).populateDeep(Infinity).build();
135
+ const entry = await index.getEntry({
136
+ contentType: action.contentType,
137
+ documentId: action.entryDocumentId,
138
+ locale: action.locale,
139
+ populate,
140
+ status: action.type === 'publish' ? 'draft' : 'published'
141
+ }, {
142
+ strapi
143
+ });
144
+ return {
145
+ ...action,
146
+ entry,
147
+ status: entry ? await index.getEntryStatus(action.contentType, entry) : null
148
+ };
149
+ });
150
+ return {
151
+ results: actionsWithEntry,
152
+ pagination
153
+ };
154
+ },
155
+ async groupActions (actions, groupBy) {
156
+ const contentTypeUids = actions.reduce((acc, action)=>{
157
+ if (!acc.includes(action.contentType)) {
158
+ acc.push(action.contentType);
159
+ }
160
+ return acc;
161
+ }, []);
162
+ const allReleaseContentTypesDictionary = await getContentTypesDataForActions(contentTypeUids);
163
+ const allLocalesDictionary = await getLocalesDataForActions();
164
+ const formattedData = actions.map((action)=>{
165
+ const { mainField, displayName } = allReleaseContentTypesDictionary[action.contentType];
166
+ return {
167
+ ...action,
168
+ locale: action.locale ? allLocalesDictionary[action.locale] : null,
169
+ contentType: {
170
+ displayName,
171
+ mainFieldValue: action.entry[mainField],
172
+ uid: action.contentType
173
+ }
174
+ };
175
+ });
176
+ const groupName = getGroupName(groupBy);
177
+ return _.groupBy(groupName)(formattedData);
178
+ },
179
+ async getContentTypeModelsFromActions (actions) {
180
+ const contentTypeUids = actions.reduce((acc, action)=>{
181
+ if (!acc.includes(action.contentType)) {
182
+ acc.push(action.contentType);
183
+ }
184
+ return acc;
185
+ }, []);
186
+ const workflowsService = strapi.plugin('review-workflows').service('workflows');
187
+ const contentTypeModelsMap = await utils.async.reduce(contentTypeUids)(async (accPromise, contentTypeUid)=>{
188
+ const acc = await accPromise;
189
+ const contentTypeModel = strapi.getModel(contentTypeUid);
190
+ // Workflows service may not be available depending on the license
191
+ const workflow = await workflowsService?.getAssignedWorkflow(contentTypeUid, {
192
+ populate: 'stageRequiredToPublish'
193
+ });
194
+ acc[contentTypeUid] = {
195
+ ...contentTypeModel,
196
+ hasReviewWorkflow: !!workflow,
197
+ stageRequiredToPublish: workflow?.stageRequiredToPublish
198
+ };
199
+ return acc;
200
+ }, {});
201
+ return contentTypeModelsMap;
202
+ },
203
+ async countActions (query) {
204
+ const dbQuery = strapi.get('query-params').transform(constants.RELEASE_ACTION_MODEL_UID, query ?? {});
205
+ return strapi.db.query(constants.RELEASE_ACTION_MODEL_UID).count(dbQuery);
206
+ },
207
+ async update (actionId, releaseId, update) {
208
+ const action = await strapi.db.query(constants.RELEASE_ACTION_MODEL_UID).findOne({
209
+ where: {
210
+ id: actionId,
211
+ release: {
212
+ id: releaseId,
213
+ releasedAt: {
214
+ $null: true
215
+ }
216
+ }
217
+ }
218
+ });
219
+ if (!action) {
220
+ throw new utils.errors.NotFoundError(`Action with id ${actionId} not found in release with id ${releaseId} or it is already published`);
221
+ }
222
+ const actionStatus = update.type === 'publish' ? await index.getDraftEntryValidStatus({
223
+ contentType: action.contentType,
224
+ documentId: action.entryDocumentId,
225
+ locale: action.locale
226
+ }, {
227
+ strapi
228
+ }) : true;
229
+ const updatedAction = await strapi.db.query(constants.RELEASE_ACTION_MODEL_UID).update({
230
+ where: {
231
+ id: actionId,
232
+ release: {
233
+ id: releaseId,
234
+ releasedAt: {
235
+ $null: true
236
+ }
237
+ }
238
+ },
239
+ data: {
240
+ ...update,
241
+ isEntryValid: actionStatus
242
+ }
243
+ });
244
+ index.getService('release', {
245
+ strapi
246
+ }).updateReleaseStatus(releaseId);
247
+ return updatedAction;
248
+ },
249
+ async delete (actionId, releaseId) {
250
+ const deletedAction = await strapi.db.query(constants.RELEASE_ACTION_MODEL_UID).delete({
251
+ where: {
252
+ id: actionId,
253
+ release: {
254
+ id: releaseId,
255
+ releasedAt: {
256
+ $null: true
257
+ }
258
+ }
259
+ }
260
+ });
261
+ if (!deletedAction) {
262
+ throw new utils.errors.NotFoundError(`Action with id ${actionId} not found in release with id ${releaseId} or it is already published`);
263
+ }
264
+ index.getService('release', {
265
+ strapi
266
+ }).updateReleaseStatus(releaseId);
267
+ return deletedAction;
268
+ },
269
+ async validateActionsByContentTypes (contentTypeUids) {
270
+ const actions = await strapi.db.query(constants.RELEASE_ACTION_MODEL_UID).findMany({
271
+ where: {
272
+ contentType: {
273
+ $in: contentTypeUids
274
+ },
275
+ // We only want to validate actions that are going to be published
276
+ type: 'publish',
277
+ release: {
278
+ releasedAt: {
279
+ $null: true
280
+ }
281
+ }
282
+ },
283
+ populate: {
284
+ release: true
285
+ }
286
+ });
287
+ const releasesUpdated = [];
288
+ await utils.async.map(actions, async (action)=>{
289
+ const isValid = await index.getDraftEntryValidStatus({
290
+ contentType: action.contentType,
291
+ documentId: action.entryDocumentId,
292
+ locale: action.locale
293
+ }, {
294
+ strapi
295
+ });
296
+ await strapi.db.query(constants.RELEASE_ACTION_MODEL_UID).update({
297
+ where: {
298
+ id: action.id
299
+ },
300
+ data: {
301
+ isEntryValid: isValid
302
+ }
303
+ });
304
+ if (!releasesUpdated.includes(action.release.id)) {
305
+ releasesUpdated.push(action.release.id);
306
+ }
307
+ return {
308
+ id: action.id,
309
+ isEntryValid: isValid
310
+ };
311
+ });
312
+ if (releasesUpdated.length > 0) {
313
+ await utils.async.map(releasesUpdated, async (releaseId)=>{
314
+ await index.getService('release', {
315
+ strapi
316
+ }).updateReleaseStatus(releaseId);
317
+ });
318
+ }
319
+ }
320
+ };
321
+ };
322
+
323
+ module.exports = createReleaseActionService;
324
+ //# sourceMappingURL=release-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-action.js","sources":["../../../server/src/services/release-action.ts"],"sourcesContent":["import { errors, async } from '@strapi/utils';\n\nimport type { Core, Internal, Modules, UID, Data } from '@strapi/types';\n\nimport _ from 'lodash/fp';\n\nimport { RELEASE_ACTION_MODEL_UID, RELEASE_MODEL_UID } from '../constants';\n\nimport type {\n CreateReleaseAction,\n GetReleaseActions,\n ReleaseAction,\n ReleaseActionGroupBy,\n UpdateReleaseAction,\n DeleteReleaseAction,\n} from '../../../shared/contracts/release-actions';\nimport type { Entity } from '../../../shared/types';\nimport { getService, getDraftEntryValidStatus, getEntry, getEntryStatus } from '../utils';\n\nconst getGroupName = (queryValue: string) => {\n switch (queryValue) {\n case 'contentType':\n return 'contentType.displayName';\n case 'type':\n return 'type';\n case 'locale':\n return _.getOr('No locale', 'locale.name');\n default:\n return 'contentType.displayName';\n }\n};\n\nexport interface Locale extends Entity {\n name: string;\n code: string;\n}\n\ntype LocaleDictionary = {\n [key: Locale['code']]: Pick<Locale, 'name' | 'code'>;\n};\n\nconst createReleaseActionService = ({ strapi }: { strapi: Core.Strapi }) => {\n const getLocalesDataForActions = async () => {\n if (!strapi.plugin('i18n')) {\n return {};\n }\n\n const allLocales: Locale[] = (await strapi.plugin('i18n').service('locales').find()) || [];\n return allLocales.reduce<LocaleDictionary>((acc, locale) => {\n acc[locale.code] = { name: locale.name, code: locale.code };\n\n return acc;\n }, {});\n };\n\n const getContentTypesDataForActions = async (\n contentTypesUids: ReleaseAction['contentType'][]\n ) => {\n const contentManagerContentTypeService = strapi\n .plugin('content-manager')\n .service('content-types');\n\n const contentTypesData: Record<\n Internal.UID.ContentType,\n { mainField: string; displayName: string }\n > = {};\n for (const contentTypeUid of contentTypesUids) {\n const contentTypeConfig = await contentManagerContentTypeService.findConfiguration({\n uid: contentTypeUid,\n });\n\n contentTypesData[contentTypeUid] = {\n mainField: contentTypeConfig.settings.mainField,\n displayName: strapi.getModel(contentTypeUid).info.displayName,\n };\n }\n\n return contentTypesData;\n };\n\n return {\n async create(\n releaseId: CreateReleaseAction.Request['params']['releaseId'],\n action: CreateReleaseAction.Request['body'],\n { disableUpdateReleaseStatus = false }: { disableUpdateReleaseStatus?: boolean } = {}\n ) {\n const { validateEntryData, validateUniqueEntry } = getService('release-validation', {\n strapi,\n });\n\n await Promise.all([\n validateEntryData(action.contentType, action.entryDocumentId),\n validateUniqueEntry(releaseId, action),\n ]);\n\n // If we are adding a singleType, we need to append the documentId of that singleType\n const model = strapi.contentType(action.contentType);\n if (model.kind === 'singleType') {\n const document = await strapi.db.query(model.uid).findOne({ select: ['documentId'] });\n\n if (!document) {\n throw new errors.NotFoundError(`No entry found for contentType ${action.contentType}`);\n }\n\n action.entryDocumentId = document.documentId;\n }\n\n const release = await strapi.db\n .query(RELEASE_MODEL_UID)\n .findOne({ where: { id: releaseId } });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n if (release.releasedAt) {\n throw new errors.ValidationError('Release already published');\n }\n\n // If the action is a publish, check if the entry is valid\n // If the action is an unpublish, skip the validation\n const actionStatus =\n action.type === 'publish'\n ? await getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n {\n strapi,\n }\n )\n : true;\n\n const releaseAction = await strapi.db.query(RELEASE_ACTION_MODEL_UID).create({\n data: {\n ...action,\n release: release.id,\n isEntryValid: actionStatus,\n },\n populate: { release: { select: ['id'] } },\n });\n\n if (!disableUpdateReleaseStatus) {\n getService('release', { strapi }).updateReleaseStatus(release.id);\n }\n\n return releaseAction;\n },\n\n async findPage(\n releaseId: GetReleaseActions.Request['params']['releaseId'],\n query?: GetReleaseActions.Request['query']\n ) {\n const release = await strapi.db.query(RELEASE_MODEL_UID).findOne({\n where: { id: releaseId },\n select: ['id'],\n });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n const dbQuery = strapi.get('query-params').transform(RELEASE_ACTION_MODEL_UID, query ?? {});\n const { results: actions, pagination } = await strapi.db\n .query(RELEASE_ACTION_MODEL_UID)\n .findPage({\n ...dbQuery,\n where: {\n release: releaseId,\n },\n });\n\n // For each contentType on the release, we create a custom populate object for nested relations\n const populateBuilderService = strapi.plugin('content-manager').service('populate-builder');\n\n const actionsWithEntry = await async.map(actions, async (action: ReleaseAction) => {\n // @ts-expect-error - Core.Service type is not a function\n const populate = await populateBuilderService(action.contentType)\n .populateDeep(Infinity)\n .build();\n\n const entry = await getEntry(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n populate,\n status: action.type === 'publish' ? 'draft' : 'published',\n },\n { strapi }\n );\n\n return {\n ...action,\n entry,\n status: entry ? await getEntryStatus(action.contentType, entry) : null,\n };\n });\n\n return {\n results: actionsWithEntry,\n pagination,\n };\n },\n\n async groupActions(actions: ReleaseAction[], groupBy: ReleaseActionGroupBy) {\n const contentTypeUids = actions.reduce<ReleaseAction['contentType'][]>((acc, action) => {\n if (!acc.includes(action.contentType)) {\n acc.push(action.contentType);\n }\n\n return acc;\n }, []);\n const allReleaseContentTypesDictionary = await getContentTypesDataForActions(contentTypeUids);\n const allLocalesDictionary = await getLocalesDataForActions();\n\n const formattedData = actions.map((action: ReleaseAction) => {\n const { mainField, displayName } = allReleaseContentTypesDictionary[action.contentType];\n\n return {\n ...action,\n locale: action.locale ? allLocalesDictionary[action.locale] : null,\n contentType: {\n displayName,\n mainFieldValue: action.entry[mainField],\n uid: action.contentType,\n },\n };\n });\n\n const groupName = getGroupName(groupBy);\n return _.groupBy(groupName)(formattedData);\n },\n\n async getContentTypeModelsFromActions(actions: ReleaseAction[]) {\n const contentTypeUids = actions.reduce<ReleaseAction['contentType'][]>((acc, action) => {\n if (!acc.includes(action.contentType)) {\n acc.push(action.contentType);\n }\n\n return acc;\n }, []);\n\n const workflowsService = strapi.plugin('review-workflows').service('workflows');\n\n const contentTypeModelsMap = await async.reduce(contentTypeUids)(\n async (\n accPromise: Promise<GetReleaseActions.Response['meta']['contentTypes']>,\n contentTypeUid: ReleaseAction['contentType']\n ) => {\n const acc = await accPromise;\n const contentTypeModel = strapi.getModel(contentTypeUid);\n\n // Workflows service may not be available depending on the license\n const workflow = await workflowsService?.getAssignedWorkflow(contentTypeUid, {\n populate: 'stageRequiredToPublish',\n });\n\n acc[contentTypeUid] = {\n ...contentTypeModel,\n hasReviewWorkflow: !!workflow,\n stageRequiredToPublish: workflow?.stageRequiredToPublish,\n };\n\n return acc;\n },\n {}\n );\n\n return contentTypeModelsMap;\n },\n\n async countActions(\n query: Modules.EntityService.Params.Pick<typeof RELEASE_ACTION_MODEL_UID, 'filters'>\n ) {\n const dbQuery = strapi.get('query-params').transform(RELEASE_ACTION_MODEL_UID, query ?? {});\n\n return strapi.db.query(RELEASE_ACTION_MODEL_UID).count(dbQuery);\n },\n\n async update(\n actionId: UpdateReleaseAction.Request['params']['actionId'],\n releaseId: UpdateReleaseAction.Request['params']['releaseId'],\n update: UpdateReleaseAction.Request['body']\n ) {\n const action = await strapi.db.query(RELEASE_ACTION_MODEL_UID).findOne({\n where: {\n id: actionId,\n release: {\n id: releaseId,\n releasedAt: {\n $null: true,\n },\n },\n },\n });\n\n if (!action) {\n throw new errors.NotFoundError(\n `Action with id ${actionId} not found in release with id ${releaseId} or it is already published`\n );\n }\n\n const actionStatus =\n update.type === 'publish'\n ? await getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n {\n strapi,\n }\n )\n : true;\n\n const updatedAction = await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({\n where: {\n id: actionId,\n release: {\n id: releaseId,\n releasedAt: {\n $null: true,\n },\n },\n },\n data: {\n ...update,\n isEntryValid: actionStatus,\n },\n });\n\n getService('release', { strapi }).updateReleaseStatus(releaseId);\n\n return updatedAction;\n },\n\n async delete(\n actionId: DeleteReleaseAction.Request['params']['actionId'],\n releaseId: DeleteReleaseAction.Request['params']['releaseId']\n ) {\n const deletedAction = await strapi.db.query(RELEASE_ACTION_MODEL_UID).delete({\n where: {\n id: actionId,\n release: {\n id: releaseId,\n releasedAt: {\n $null: true,\n },\n },\n },\n });\n\n if (!deletedAction) {\n throw new errors.NotFoundError(\n `Action with id ${actionId} not found in release with id ${releaseId} or it is already published`\n );\n }\n\n getService('release', { strapi }).updateReleaseStatus(releaseId);\n\n return deletedAction;\n },\n\n async validateActionsByContentTypes(contentTypeUids: UID.ContentType[]) {\n const actions = await strapi.db.query(RELEASE_ACTION_MODEL_UID).findMany({\n where: {\n contentType: {\n $in: contentTypeUids,\n },\n // We only want to validate actions that are going to be published\n type: 'publish',\n release: {\n releasedAt: {\n $null: true,\n },\n },\n },\n populate: { release: true },\n });\n\n const releasesUpdated: Data.ID[] = [];\n\n await async.map(actions, async (action: ReleaseAction) => {\n const isValid = await getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n { strapi }\n );\n\n await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({\n where: {\n id: action.id,\n },\n data: {\n isEntryValid: isValid,\n },\n });\n\n if (!releasesUpdated.includes(action.release.id)) {\n releasesUpdated.push(action.release.id);\n }\n\n return {\n id: action.id,\n isEntryValid: isValid,\n };\n });\n\n if (releasesUpdated.length > 0) {\n await async.map(releasesUpdated, async (releaseId: number) => {\n await getService('release', { strapi }).updateReleaseStatus(releaseId);\n });\n }\n },\n };\n};\n\nexport type ReleaseActionService = ReturnType<typeof createReleaseActionService>;\n\nexport default createReleaseActionService;\n"],"names":["getGroupName","queryValue","_","getOr","createReleaseActionService","strapi","getLocalesDataForActions","plugin","allLocales","service","find","reduce","acc","locale","code","name","getContentTypesDataForActions","contentTypesUids","contentManagerContentTypeService","contentTypesData","contentTypeUid","contentTypeConfig","findConfiguration","uid","mainField","settings","displayName","getModel","info","create","releaseId","action","disableUpdateReleaseStatus","validateEntryData","validateUniqueEntry","getService","Promise","all","contentType","entryDocumentId","model","kind","document","db","query","findOne","select","errors","NotFoundError","documentId","release","RELEASE_MODEL_UID","where","id","releasedAt","ValidationError","actionStatus","type","getDraftEntryValidStatus","releaseAction","RELEASE_ACTION_MODEL_UID","data","isEntryValid","populate","updateReleaseStatus","findPage","dbQuery","get","transform","results","actions","pagination","populateBuilderService","actionsWithEntry","async","map","populateDeep","Infinity","build","entry","getEntry","status","getEntryStatus","groupActions","groupBy","contentTypeUids","includes","push","allReleaseContentTypesDictionary","allLocalesDictionary","formattedData","mainFieldValue","groupName","getContentTypeModelsFromActions","workflowsService","contentTypeModelsMap","accPromise","contentTypeModel","workflow","getAssignedWorkflow","hasReviewWorkflow","stageRequiredToPublish","countActions","count","update","actionId","$null","updatedAction","delete","deletedAction","validateActionsByContentTypes","findMany","$in","releasesUpdated","isValid","length"],"mappings":"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"}