@akbarsafari00/bonyan-content-releases 5.52.1-fa.2

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