@strapi/content-releases 0.0.0-next.f6dca5adf05ef6bed9605a1535999ab0bbbf063e → 0.0.0-next.f86041c89a8c1545c6437a881dc613e98bc52bd7

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 (321) hide show
  1. package/dist/admin/assets/purchase-page-illustration-dark.jpg.js +6 -0
  2. package/dist/admin/assets/purchase-page-illustration-dark.jpg.js.map +1 -0
  3. package/dist/admin/assets/purchase-page-illustration-dark.jpg.mjs +4 -0
  4. package/dist/admin/assets/purchase-page-illustration-dark.jpg.mjs.map +1 -0
  5. package/dist/admin/assets/purchase-page-illustration-light.jpg.js +6 -0
  6. package/dist/admin/assets/purchase-page-illustration-light.jpg.js.map +1 -0
  7. package/dist/admin/assets/purchase-page-illustration-light.jpg.mjs +4 -0
  8. package/dist/admin/assets/purchase-page-illustration-light.jpg.mjs.map +1 -0
  9. package/dist/admin/components/EntryValidationPopover.js +310 -0
  10. package/dist/admin/components/EntryValidationPopover.js.map +1 -0
  11. package/dist/admin/components/EntryValidationPopover.mjs +308 -0
  12. package/dist/admin/components/EntryValidationPopover.mjs.map +1 -0
  13. package/dist/admin/components/RelativeTime.js +76 -0
  14. package/dist/admin/components/RelativeTime.js.map +1 -0
  15. package/dist/admin/components/RelativeTime.mjs +55 -0
  16. package/dist/admin/components/RelativeTime.mjs.map +1 -0
  17. package/dist/admin/components/ReleaseAction.js +203 -0
  18. package/dist/admin/components/ReleaseAction.js.map +1 -0
  19. package/dist/admin/components/ReleaseAction.mjs +201 -0
  20. package/dist/admin/components/ReleaseAction.mjs.map +1 -0
  21. package/dist/admin/components/ReleaseActionMenu.js +194 -0
  22. package/dist/admin/components/ReleaseActionMenu.js.map +1 -0
  23. package/dist/admin/components/ReleaseActionMenu.mjs +173 -0
  24. package/dist/admin/components/ReleaseActionMenu.mjs.map +1 -0
  25. package/dist/admin/components/ReleaseActionModal.js +268 -0
  26. package/dist/admin/components/ReleaseActionModal.js.map +1 -0
  27. package/dist/admin/components/ReleaseActionModal.mjs +244 -0
  28. package/dist/admin/components/ReleaseActionModal.mjs.map +1 -0
  29. package/dist/admin/components/ReleaseActionOptions.js +104 -0
  30. package/dist/admin/components/ReleaseActionOptions.js.map +1 -0
  31. package/dist/admin/components/ReleaseActionOptions.mjs +102 -0
  32. package/dist/admin/components/ReleaseActionOptions.mjs.map +1 -0
  33. package/dist/admin/components/ReleaseListCell.js +103 -0
  34. package/dist/admin/components/ReleaseListCell.js.map +1 -0
  35. package/dist/admin/components/ReleaseListCell.mjs +100 -0
  36. package/dist/admin/components/ReleaseListCell.mjs.map +1 -0
  37. package/dist/admin/components/ReleaseModal.js +331 -0
  38. package/dist/admin/components/ReleaseModal.js.map +1 -0
  39. package/dist/admin/components/ReleaseModal.mjs +310 -0
  40. package/dist/admin/components/ReleaseModal.mjs.map +1 -0
  41. package/dist/admin/components/ReleasesPanel.js +138 -0
  42. package/dist/admin/components/ReleasesPanel.js.map +1 -0
  43. package/dist/admin/components/ReleasesPanel.mjs +136 -0
  44. package/dist/admin/components/ReleasesPanel.mjs.map +1 -0
  45. package/dist/admin/components/Widgets.js +122 -0
  46. package/dist/admin/components/Widgets.js.map +1 -0
  47. package/dist/admin/components/Widgets.mjs +120 -0
  48. package/dist/admin/components/Widgets.mjs.map +1 -0
  49. package/dist/admin/constants.js +79 -0
  50. package/dist/admin/constants.js.map +1 -0
  51. package/dist/admin/constants.mjs +76 -0
  52. package/dist/admin/constants.mjs.map +1 -0
  53. package/dist/admin/index.js +148 -4
  54. package/dist/admin/index.js.map +1 -1
  55. package/dist/admin/index.mjs +143 -4
  56. package/dist/admin/index.mjs.map +1 -1
  57. package/dist/admin/modules/hooks.js +8 -0
  58. package/dist/admin/modules/hooks.js.map +1 -0
  59. package/dist/admin/modules/hooks.mjs +6 -0
  60. package/dist/admin/modules/hooks.mjs.map +1 -0
  61. package/dist/admin/pages/App.js +29 -0
  62. package/dist/admin/pages/App.js.map +1 -0
  63. package/dist/admin/pages/App.mjs +27 -0
  64. package/dist/admin/pages/App.mjs.map +1 -0
  65. package/dist/admin/pages/PurchaseContentReleases.js +192 -0
  66. package/dist/admin/pages/PurchaseContentReleases.js.map +1 -0
  67. package/dist/admin/pages/PurchaseContentReleases.mjs +190 -0
  68. package/dist/admin/pages/PurchaseContentReleases.mjs.map +1 -0
  69. package/dist/admin/pages/ReleaseDetailsPage.js +774 -0
  70. package/dist/admin/pages/ReleaseDetailsPage.js.map +1 -0
  71. package/dist/admin/pages/ReleaseDetailsPage.mjs +753 -0
  72. package/dist/admin/pages/ReleaseDetailsPage.mjs.map +1 -0
  73. package/dist/admin/pages/ReleasesPage.js +405 -0
  74. package/dist/admin/pages/ReleasesPage.js.map +1 -0
  75. package/dist/admin/pages/ReleasesPage.mjs +383 -0
  76. package/dist/admin/pages/ReleasesPage.mjs.map +1 -0
  77. package/dist/admin/pages/ReleasesSettingsPage.js +225 -0
  78. package/dist/admin/pages/ReleasesSettingsPage.js.map +1 -0
  79. package/dist/admin/pages/ReleasesSettingsPage.mjs +223 -0
  80. package/dist/admin/pages/ReleasesSettingsPage.mjs.map +1 -0
  81. package/dist/admin/pluginId.js +6 -0
  82. package/dist/admin/pluginId.js.map +1 -0
  83. package/dist/admin/pluginId.mjs +4 -0
  84. package/dist/admin/pluginId.mjs.map +1 -0
  85. package/dist/admin/services/homepage.js +24 -0
  86. package/dist/admin/services/homepage.js.map +1 -0
  87. package/dist/admin/services/homepage.mjs +22 -0
  88. package/dist/admin/services/homepage.mjs.map +1 -0
  89. package/dist/admin/services/release.js +473 -0
  90. package/dist/admin/services/release.js.map +1 -0
  91. package/dist/admin/services/release.mjs +456 -0
  92. package/dist/admin/services/release.mjs.map +1 -0
  93. package/dist/admin/src/components/EntryValidationPopover.d.ts +13 -0
  94. package/dist/admin/src/components/ReleaseListCell.d.ts +1 -1
  95. package/dist/admin/src/components/Widgets.d.ts +2 -0
  96. package/dist/admin/src/constants.d.ts +1 -0
  97. package/dist/admin/src/services/homepage.d.ts +9 -0
  98. package/dist/admin/src/services/release.d.ts +28 -28
  99. package/dist/admin/store/hooks.js +8 -0
  100. package/dist/admin/store/hooks.js.map +1 -0
  101. package/dist/admin/store/hooks.mjs +6 -0
  102. package/dist/admin/store/hooks.mjs.map +1 -0
  103. package/dist/admin/translations/en.json.js +111 -0
  104. package/dist/admin/translations/en.json.js.map +1 -0
  105. package/dist/admin/translations/en.json.mjs +109 -0
  106. package/dist/admin/translations/en.json.mjs.map +1 -0
  107. package/dist/admin/translations/uk.json.js +103 -0
  108. package/dist/admin/translations/uk.json.js.map +1 -0
  109. package/dist/admin/translations/uk.json.mjs +101 -0
  110. package/dist/admin/translations/uk.json.mjs.map +1 -0
  111. package/dist/admin/utils/api.js +8 -0
  112. package/dist/admin/utils/api.js.map +1 -0
  113. package/dist/admin/utils/api.mjs +6 -0
  114. package/dist/admin/utils/api.mjs.map +1 -0
  115. package/dist/admin/utils/prefixPluginTranslations.js +11 -0
  116. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
  117. package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
  118. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
  119. package/dist/admin/utils/time.js +42 -0
  120. package/dist/admin/utils/time.js.map +1 -0
  121. package/dist/admin/utils/time.mjs +39 -0
  122. package/dist/admin/utils/time.mjs.map +1 -0
  123. package/dist/admin/validation/schemas.js +65 -0
  124. package/dist/admin/validation/schemas.js.map +1 -0
  125. package/dist/admin/validation/schemas.mjs +43 -0
  126. package/dist/admin/validation/schemas.mjs.map +1 -0
  127. package/dist/server/bootstrap.js +68 -0
  128. package/dist/server/bootstrap.js.map +1 -0
  129. package/dist/server/bootstrap.mjs +66 -0
  130. package/dist/server/bootstrap.mjs.map +1 -0
  131. package/dist/server/constants.js +74 -0
  132. package/dist/server/constants.js.map +1 -0
  133. package/dist/server/constants.mjs +69 -0
  134. package/dist/server/constants.mjs.map +1 -0
  135. package/dist/server/content-types/index.js +12 -0
  136. package/dist/server/content-types/index.js.map +1 -0
  137. package/dist/server/content-types/index.mjs +10 -0
  138. package/dist/server/content-types/index.mjs.map +1 -0
  139. package/dist/server/content-types/release/index.js +10 -0
  140. package/dist/server/content-types/release/index.js.map +1 -0
  141. package/dist/server/content-types/release/index.mjs +8 -0
  142. package/dist/server/content-types/release/index.mjs.map +1 -0
  143. package/dist/server/content-types/release/schema.js +58 -0
  144. package/dist/server/content-types/release/schema.js.map +1 -0
  145. package/dist/server/content-types/release/schema.mjs +56 -0
  146. package/dist/server/content-types/release/schema.mjs.map +1 -0
  147. package/dist/server/content-types/release-action/index.js +10 -0
  148. package/dist/server/content-types/release-action/index.js.map +1 -0
  149. package/dist/server/content-types/release-action/index.mjs +8 -0
  150. package/dist/server/content-types/release-action/index.mjs.map +1 -0
  151. package/dist/server/content-types/release-action/schema.js +55 -0
  152. package/dist/server/content-types/release-action/schema.js.map +1 -0
  153. package/dist/server/content-types/release-action/schema.mjs +53 -0
  154. package/dist/server/content-types/release-action/schema.mjs.map +1 -0
  155. package/dist/server/controllers/homepage.js +15 -0
  156. package/dist/server/controllers/homepage.js.map +1 -0
  157. package/dist/server/controllers/homepage.mjs +13 -0
  158. package/dist/server/controllers/homepage.mjs.map +1 -0
  159. package/dist/server/controllers/index.js +16 -0
  160. package/dist/server/controllers/index.js.map +1 -0
  161. package/dist/server/controllers/index.mjs +14 -0
  162. package/dist/server/controllers/index.mjs.map +1 -0
  163. package/dist/server/controllers/release-action.js +150 -0
  164. package/dist/server/controllers/release-action.js.map +1 -0
  165. package/dist/server/controllers/release-action.mjs +148 -0
  166. package/dist/server/controllers/release-action.mjs.map +1 -0
  167. package/dist/server/controllers/release.js +302 -0
  168. package/dist/server/controllers/release.js.map +1 -0
  169. package/dist/server/controllers/release.mjs +300 -0
  170. package/dist/server/controllers/release.mjs.map +1 -0
  171. package/dist/server/controllers/settings.js +37 -0
  172. package/dist/server/controllers/settings.js.map +1 -0
  173. package/dist/server/controllers/settings.mjs +35 -0
  174. package/dist/server/controllers/settings.mjs.map +1 -0
  175. package/dist/server/controllers/validation/release-action.js +34 -0
  176. package/dist/server/controllers/validation/release-action.js.map +1 -0
  177. package/dist/server/controllers/validation/release-action.mjs +30 -0
  178. package/dist/server/controllers/validation/release-action.mjs.map +1 -0
  179. package/dist/server/controllers/validation/release.js +26 -0
  180. package/dist/server/controllers/validation/release.js.map +1 -0
  181. package/dist/server/controllers/validation/release.mjs +22 -0
  182. package/dist/server/controllers/validation/release.mjs.map +1 -0
  183. package/dist/server/controllers/validation/settings.js +32 -0
  184. package/dist/server/controllers/validation/settings.js.map +1 -0
  185. package/dist/server/controllers/validation/settings.mjs +10 -0
  186. package/dist/server/controllers/validation/settings.mjs.map +1 -0
  187. package/dist/server/destroy.js +15 -0
  188. package/dist/server/destroy.js.map +1 -0
  189. package/dist/server/destroy.mjs +13 -0
  190. package/dist/server/destroy.mjs.map +1 -0
  191. package/dist/server/index.js +25 -1984
  192. package/dist/server/index.js.map +1 -1
  193. package/dist/server/index.mjs +24 -1964
  194. package/dist/server/index.mjs.map +1 -1
  195. package/dist/server/middlewares/documents.js +104 -0
  196. package/dist/server/middlewares/documents.js.map +1 -0
  197. package/dist/server/middlewares/documents.mjs +101 -0
  198. package/dist/server/middlewares/documents.mjs.map +1 -0
  199. package/dist/server/migrations/database/5.0.0-document-id-in-actions.js +51 -0
  200. package/dist/server/migrations/database/5.0.0-document-id-in-actions.js.map +1 -0
  201. package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs +49 -0
  202. package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs.map +1 -0
  203. package/dist/server/migrations/index.js +205 -0
  204. package/dist/server/migrations/index.js.map +1 -0
  205. package/dist/server/migrations/index.mjs +198 -0
  206. package/dist/server/migrations/index.mjs.map +1 -0
  207. package/dist/server/register.js +23 -0
  208. package/dist/server/register.js.map +1 -0
  209. package/dist/server/register.mjs +21 -0
  210. package/dist/server/register.mjs.map +1 -0
  211. package/dist/server/routes/homepage.js +25 -0
  212. package/dist/server/routes/homepage.js.map +1 -0
  213. package/dist/server/routes/homepage.mjs +23 -0
  214. package/dist/server/routes/homepage.mjs.map +1 -0
  215. package/dist/server/routes/index.js +16 -0
  216. package/dist/server/routes/index.js.map +1 -0
  217. package/dist/server/routes/index.mjs +14 -0
  218. package/dist/server/routes/index.mjs.map +1 -0
  219. package/dist/server/routes/release-action.js +100 -0
  220. package/dist/server/routes/release-action.js.map +1 -0
  221. package/dist/server/routes/release-action.mjs +98 -0
  222. package/dist/server/routes/release-action.mjs.map +1 -0
  223. package/dist/server/routes/release.js +154 -0
  224. package/dist/server/routes/release.js.map +1 -0
  225. package/dist/server/routes/release.mjs +152 -0
  226. package/dist/server/routes/release.mjs.map +1 -0
  227. package/dist/server/routes/settings.js +46 -0
  228. package/dist/server/routes/settings.js.map +1 -0
  229. package/dist/server/routes/settings.mjs +44 -0
  230. package/dist/server/routes/settings.mjs.map +1 -0
  231. package/dist/server/services/homepage.js +26 -0
  232. package/dist/server/services/homepage.js.map +1 -0
  233. package/dist/server/services/homepage.mjs +24 -0
  234. package/dist/server/services/homepage.mjs.map +1 -0
  235. package/dist/server/services/index.js +20 -0
  236. package/dist/server/services/index.js.map +1 -0
  237. package/dist/server/services/index.mjs +18 -0
  238. package/dist/server/services/index.mjs.map +1 -0
  239. package/dist/server/services/release-action.js +324 -0
  240. package/dist/server/services/release-action.js.map +1 -0
  241. package/dist/server/services/release-action.mjs +322 -0
  242. package/dist/server/services/release-action.mjs.map +1 -0
  243. package/dist/server/services/release.js +324 -0
  244. package/dist/server/services/release.js.map +1 -0
  245. package/dist/server/services/release.mjs +322 -0
  246. package/dist/server/services/release.mjs.map +1 -0
  247. package/dist/server/services/scheduling.js +74 -0
  248. package/dist/server/services/scheduling.js.map +1 -0
  249. package/dist/server/services/scheduling.mjs +72 -0
  250. package/dist/server/services/scheduling.mjs.map +1 -0
  251. package/dist/server/services/settings.js +34 -0
  252. package/dist/server/services/settings.js.map +1 -0
  253. package/dist/server/services/settings.mjs +32 -0
  254. package/dist/server/services/settings.mjs.map +1 -0
  255. package/dist/server/services/validation.js +91 -0
  256. package/dist/server/services/validation.js.map +1 -0
  257. package/dist/server/services/validation.mjs +86 -0
  258. package/dist/server/services/validation.mjs.map +1 -0
  259. package/dist/server/src/controllers/homepage.d.ts +6 -0
  260. package/dist/server/src/controllers/homepage.d.ts.map +1 -0
  261. package/dist/server/src/controllers/index.d.ts +3 -0
  262. package/dist/server/src/controllers/index.d.ts.map +1 -1
  263. package/dist/server/src/destroy.d.ts +1 -1
  264. package/dist/server/src/destroy.d.ts.map +1 -1
  265. package/dist/server/src/index.d.ts +15 -10
  266. package/dist/server/src/index.d.ts.map +1 -1
  267. package/dist/server/src/middlewares/documents.d.ts +1 -1
  268. package/dist/server/src/middlewares/documents.d.ts.map +1 -1
  269. package/dist/server/src/routes/homepage.d.ts +4 -0
  270. package/dist/server/src/routes/homepage.d.ts.map +1 -0
  271. package/dist/server/src/routes/index.d.ts +1 -0
  272. package/dist/server/src/routes/index.d.ts.map +1 -1
  273. package/dist/server/src/services/homepage.d.ts +9 -0
  274. package/dist/server/src/services/homepage.d.ts.map +1 -0
  275. package/dist/server/src/services/index.d.ts +11 -10
  276. package/dist/server/src/services/index.d.ts.map +1 -1
  277. package/dist/server/src/services/release-action.d.ts +3 -7
  278. package/dist/server/src/services/release-action.d.ts.map +1 -1
  279. package/dist/server/src/services/scheduling.d.ts +5 -6
  280. package/dist/server/src/services/scheduling.d.ts.map +1 -1
  281. package/dist/server/src/services/validation.d.ts +1 -1
  282. package/dist/server/src/services/validation.d.ts.map +1 -1
  283. package/dist/server/src/utils/index.d.ts.map +1 -1
  284. package/dist/server/utils/index.js +94 -0
  285. package/dist/server/utils/index.js.map +1 -0
  286. package/dist/server/utils/index.mjs +88 -0
  287. package/dist/server/utils/index.mjs.map +1 -0
  288. package/dist/shared/contracts/homepage.d.ts +11 -0
  289. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  290. package/dist/shared/contracts/release-actions.d.ts +8 -2
  291. package/dist/shared/contracts/release-actions.d.ts.map +1 -1
  292. package/dist/shared/contracts/releases.d.ts +0 -1
  293. package/dist/shared/contracts/settings.d.ts +1 -2
  294. package/dist/shared/contracts/settings.d.ts.map +1 -1
  295. package/dist/shared/types.d.ts +1 -1
  296. package/dist/shared/types.d.ts.map +1 -1
  297. package/package.json +23 -21
  298. package/dist/_chunks/App-BKB1esYS.js +0 -1395
  299. package/dist/_chunks/App-BKB1esYS.js.map +0 -1
  300. package/dist/_chunks/App-Cne--1Z8.mjs +0 -1374
  301. package/dist/_chunks/App-Cne--1Z8.mjs.map +0 -1
  302. package/dist/_chunks/PurchaseContentReleases-Be3acS2L.js +0 -52
  303. package/dist/_chunks/PurchaseContentReleases-Be3acS2L.js.map +0 -1
  304. package/dist/_chunks/PurchaseContentReleases-_MxP6-Dt.mjs +0 -52
  305. package/dist/_chunks/PurchaseContentReleases-_MxP6-Dt.mjs.map +0 -1
  306. package/dist/_chunks/ReleasesSettingsPage-C1WwGWIH.mjs +0 -178
  307. package/dist/_chunks/ReleasesSettingsPage-C1WwGWIH.mjs.map +0 -1
  308. package/dist/_chunks/ReleasesSettingsPage-kuXIwpWp.js +0 -178
  309. package/dist/_chunks/ReleasesSettingsPage-kuXIwpWp.js.map +0 -1
  310. package/dist/_chunks/en-CmYoEnA7.js +0 -93
  311. package/dist/_chunks/en-CmYoEnA7.js.map +0 -1
  312. package/dist/_chunks/en-D0yVZFqf.mjs +0 -93
  313. package/dist/_chunks/en-D0yVZFqf.mjs.map +0 -1
  314. package/dist/_chunks/index-5Odi61vw.js +0 -1381
  315. package/dist/_chunks/index-5Odi61vw.js.map +0 -1
  316. package/dist/_chunks/index-Cy7qwpaU.mjs +0 -1362
  317. package/dist/_chunks/index-Cy7qwpaU.mjs.map +0 -1
  318. package/dist/_chunks/schemas-BE1LxE9J.js +0 -62
  319. package/dist/_chunks/schemas-BE1LxE9J.js.map +0 -1
  320. package/dist/_chunks/schemas-DdA2ic2U.mjs +0 -44
  321. package/dist/_chunks/schemas-DdA2ic2U.mjs.map +0 -1
@@ -0,0 +1,101 @@
1
+ var uk = {
2
+ "content-manager-edit-view.add-to-release.select-label": "Виберіть реліз",
3
+ "content-manager-edit-view.add-to-release.select-placeholder": "Виберіть",
4
+ "content-manager-edit-view.add-to-release.action-type-label": "Що ви хочете зробити з цим записом?",
5
+ "content-manager-edit-view.add-to-release.cancel-button": "Скасувати",
6
+ "content-manager-edit-view.add-to-release.continue-button": "Продовжити",
7
+ "content-manager-edit-view.add-to-release": "Додати до релізу",
8
+ "content-manager-edit-view.add-to-release.notification.success": "Запис додано до релізу",
9
+ "content-manager-edit-view.add-to-release.no-releases-message": "Немає доступних релізів. Відкрийте список релізів і створіть новий звідти.",
10
+ "content-manager-edit-view.add-to-release.redirect-button": "Відкрити список релізів",
11
+ "content-manager-edit-view.list-releases.title": "{isPublish, select, true {Буде опубліковано в} other {Буде скасовано публікацію в}}",
12
+ "content-manager-edit-view.remove-from-release": "Видалити з релізу",
13
+ "content-manager-edit-view.scheduled.date": "{date} о {time} ({offset})",
14
+ "content-manager-edit-view.edit-release": "Редагувати реліз",
15
+ "content-releases.content-manager-edit-view.edit-entry": "Редагувати запис",
16
+ "content-manager-edit-view.remove-from-release.notification.success": "Запис видалено з релізу",
17
+ "content-manager-edit-view.release-action-menu": "Опції дій релізу",
18
+ "content-manager.list-view.releases.header": "Буде випущено в",
19
+ "content-manager-list-view.add-to-release": "Додати до релізу",
20
+ "content-manager-list-view.add-to-release.cancel-button": "Скасувати",
21
+ "content-manager-list-view.add-to-release.continue-button": "Продовжити",
22
+ "content-manager-list-view.add-to-release.select-label": "Виберіть реліз",
23
+ "content-manager-list-view.add-to-release.select-placeholder": "Виберіть",
24
+ "content-manager-list-view.add-to-release.action-type-label": "Що ви хочете зробити з цими записами?",
25
+ "content-manager-list-view.add-to-release.notification.success.title": "Успішно додано до релізу.",
26
+ "content-manager-list-view.add-to-release.notification.success.message": "{entriesAlreadyInRelease} з {totalEntries} записів вже були в релізі.",
27
+ "content-manager.notification.entry-error": "Не вдалося отримати дані запису",
28
+ "content-manager.list-view.releases-number": "{number} {number, plural, one {реліз} other {релізи}}",
29
+ "plugin.name": "Релізи",
30
+ "pages.Releases.title": "Релізи",
31
+ "pages.Releases.header-subtitle": "Створюйте та керуйте оновленнями вмісту",
32
+ "pages.Releases.max-limit-reached.title": "Ви досягли ліміту {number} очікуючих {number, plural, one {реліз} other {релізів}}.",
33
+ "pages.Releases.max-limit-reached.message": "Оновіть план, щоб керувати необмеженою кількістю релізів.",
34
+ "pages.Releases.max-limit-reached.action": "Досліджуйте плани",
35
+ "pages.PurchaseRelease.subTitle": "Керуйте оновленнями вмісту та релізами.",
36
+ "pages.PurchaseRelease.not-available": "Релізи доступні лише в рамках платного плану. Оновіть план, щоб створювати та керувати релізами.",
37
+ "header.actions.add-release": "Новий реліз",
38
+ "header.actions.refresh": "Оновити",
39
+ "header.actions.publish": "Опублікувати",
40
+ "header.actions.open-release-actions": "Меню редагування та видалення релізу",
41
+ "header.actions.edit": "Редагувати",
42
+ "header.actions.delete": "Видалити",
43
+ "header.actions.created": "Створено",
44
+ "header.actions.created.description": "{hasCreatedByUser, select, true { автор: {createdBy}} other { автор: видалений користувач}}",
45
+ "modal.release-created-notification-success": "Реліз створено",
46
+ "modal.release-updated-notification-success": "Реліз оновлено",
47
+ "modal.title": "{isCreatingRelease, select, true {Новий реліз} other {Редагувати реліз}}",
48
+ "modal.form.input.label.release-name": "Назва",
49
+ "modal.form.input.label.schedule-release": "Запланувати реліз",
50
+ "modal.form.input.label.date": "Дата",
51
+ "modal.form.input.label.time": "Час",
52
+ "modal.form.input.label.timezone": "Часовий пояс",
53
+ "modal.form.input.clearLabel": "Очистити",
54
+ "modal.form.button.submit": "{isCreatingRelease, select, true {Продовжити} other {Зберегти}}",
55
+ "modal.form.time.has-passed": "Вибраний час вже минув.",
56
+ "pages.Details.header-subtitle": "{number, plural, =0 {Немає записів} one {# запис} other {# записів}}",
57
+ "pages.Releases.tab-group.label": "Список релізів",
58
+ "pages.Releases.tab.pending": "Очікує ({count})",
59
+ "pages.Releases.tab.done": "Завершено",
60
+ "page.Releases.tab.emptyEntries": "Немає релізів",
61
+ "pages.Details.tab.emptyEntries": "Цей реліз порожній. Відкрийте Менеджер вмісту, виберіть запис і додайте його до релізу.",
62
+ "page.ReleaseDetails.table.header.label.name": "назва",
63
+ "page.ReleaseDetails.table.header.label.locale": "локаль",
64
+ "page.ReleaseDetails.table.header.label.content-type": "тип вмісту",
65
+ "page.ReleaseDetails.table.header.label.action": "дія",
66
+ "content-releases.page.ReleaseDetails.table.header.label.status": "статус",
67
+ "page.ReleaseDetails.table.action-published": "Цей запис: <b>{isPublish, select, true {опубліковано} other {скасовано публікацію}}</b>.",
68
+ "pages.ReleaseDetails.publish-notification-success": "Реліз успішно опубліковано.",
69
+ "dialog.confirmation-message": "Ви впевнені, що хочете видалити цей реліз?",
70
+ "page.Details.button.openContentManager": "Відкрити Менеджер вмісту",
71
+ "pages.Releases.notification.error.title": "Ваш запит не може бути оброблений.",
72
+ "pages.Releases.notification.error.message": "Будь ласка, спробуйте ще раз або відкрийте інший реліз.",
73
+ "pages.Releases.not-scheduled": "Не заплановано",
74
+ "pages.ReleaseDetails.groupBy.label": "Групувати за {groupBy}",
75
+ "pages.ReleaseDetails.groupBy.aria-label": "Групувати за",
76
+ "pages.ReleaseDetails.entry-validation.already-published": "Вже опубліковано",
77
+ "pages.ReleaseDetails.entry-validation.ready-to-publish": "Готово до публікації",
78
+ "pages.ReleaseDetails.entry-validation.modified": "Готово до публікації змін",
79
+ "pages.ReleaseDetails.entry-validation.already-unpublished": "Вже скасовано публікацію",
80
+ "pages.ReleaseDetails.entry-validation.ready-to-unpublish": "Готово до скасування публікації",
81
+ "pages.ReleaseDetails.entry-validation.not-ready": "Не готово до публікації",
82
+ "pages.ReleaseDetails.groupBy.option.content-type": "Типи вмісту",
83
+ "pages.ReleaseDetails.groupBy.option.locales": "Локалі",
84
+ "pages.ReleaseDetails.groupBy.option.actions": "Дії",
85
+ "pages.ReleaseDetails.header-subtitle.scheduled": "Заплановано на {date} о {time} ({offset})",
86
+ "pages.ReleaseDetails.entry-validation.fields": "Поля",
87
+ "pages.Settings.releases.title": "Релізи",
88
+ "pages.Settings.releases.description": "Створюйте та керуйте оновленнями вмісту",
89
+ "pages.Settings.releases.timezone.label": "Часовий пояс за замовчуванням",
90
+ "pages.Settings.releases.setting.default-timezone-notification-success": "Часовий пояс за замовчуванням оновлено.",
91
+ "pages.ReleaseDetails.entry-validation.fields.error": "{errors} помилок у полях.",
92
+ "pages.ReleaseDetails.entry-validation.fields.success": "Всі поля заповнені правильно.",
93
+ "pages.ReleaseDetails.entry-validation.fields.see-errors": "Переглянути помилки",
94
+ "pages.ReleaseDetails.entry-validation.review-stage.not-enabled": "Цей запис не пов'язаний з жодним робочим процесом.",
95
+ "pages.ReleaseDetails.entry-validation.review-stage.not-ready": "Цей запис не на необхідному етапі для публікації. ({stageName})",
96
+ "pages.ReleaseDetails.entry-validation.review-stage.ready": "Цей запис на необхідному етапі для публікації. ({stageName})",
97
+ "pages.ReleaseDetails.entry-validation.review-stage.stage-not-required": "Необхідний етап для публікації відсутній."
98
+ };
99
+
100
+ export { uk as default };
101
+ //# sourceMappingURL=uk.json.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uk.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ const isBaseQueryError = (error)=>{
4
+ return typeof error !== 'undefined' && error.name !== undefined;
5
+ };
6
+
7
+ exports.isBaseQueryError = isBaseQueryError;
8
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sources":["../../../admin/src/utils/api.ts"],"sourcesContent":["import { SerializedError } from '@reduxjs/toolkit';\nimport { ApiError } from '@strapi/admin/strapi-admin';\n\ntype BaseQueryError = ApiError | SerializedError;\n\nconst isBaseQueryError = (error?: BaseQueryError): error is BaseQueryError => {\n return typeof error !== 'undefined' && error.name !== undefined;\n};\n\nexport { isBaseQueryError };\nexport type { BaseQueryError };\n"],"names":["isBaseQueryError","error","name","undefined"],"mappings":";;AAKA,MAAMA,mBAAmB,CAACC,KAAAA,GAAAA;AACxB,IAAA,OAAO,OAAOA,KAAAA,KAAU,WAAeA,IAAAA,KAAAA,CAAMC,IAAI,KAAKC,SAAAA;AACxD;;;;"}
@@ -0,0 +1,6 @@
1
+ const isBaseQueryError = (error)=>{
2
+ return typeof error !== 'undefined' && error.name !== undefined;
3
+ };
4
+
5
+ export { isBaseQueryError };
6
+ //# sourceMappingURL=api.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.mjs","sources":["../../../admin/src/utils/api.ts"],"sourcesContent":["import { SerializedError } from '@reduxjs/toolkit';\nimport { ApiError } from '@strapi/admin/strapi-admin';\n\ntype BaseQueryError = ApiError | SerializedError;\n\nconst isBaseQueryError = (error?: BaseQueryError): error is BaseQueryError => {\n return typeof error !== 'undefined' && error.name !== undefined;\n};\n\nexport { isBaseQueryError };\nexport type { BaseQueryError };\n"],"names":["isBaseQueryError","error","name","undefined"],"mappings":"AAKA,MAAMA,mBAAmB,CAACC,KAAAA,GAAAA;AACxB,IAAA,OAAO,OAAOA,KAAAA,KAAU,WAAeA,IAAAA,KAAAA,CAAMC,IAAI,KAAKC,SAAAA;AACxD;;;;"}
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+
3
+ const prefixPluginTranslations = (trad, pluginId)=>{
4
+ return Object.keys(trad).reduce((acc, current)=>{
5
+ acc[`${pluginId}.${current}`] = trad[current];
6
+ return acc;
7
+ }, {});
8
+ };
9
+
10
+ exports.prefixPluginTranslations = prefixPluginTranslations;
11
+ //# sourceMappingURL=prefixPluginTranslations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefixPluginTranslations.js","sources":["../../../admin/src/utils/prefixPluginTranslations.ts"],"sourcesContent":["type TradOptions = Record<string, string>;\n\nconst prefixPluginTranslations = (trad: TradOptions, pluginId: string): TradOptions => {\n if (!pluginId) {\n throw new TypeError(\"pluginId can't be empty\");\n }\n return Object.keys(trad).reduce((acc, current) => {\n acc[`${pluginId}.${current}`] = trad[current];\n return acc;\n }, {} as TradOptions);\n};\n\nexport { prefixPluginTranslations };\n"],"names":["prefixPluginTranslations","trad","pluginId","Object","keys","reduce","acc","current"],"mappings":";;AAEMA,MAAAA,wBAAAA,GAA2B,CAACC,IAAmBC,EAAAA,QAAAA,GAAAA;AAInD,IAAA,OAAOC,OAAOC,IAAI,CAACH,MAAMI,MAAM,CAAC,CAACC,GAAKC,EAAAA,OAAAA,GAAAA;QACpCD,GAAG,CAAC,CAAGJ,EAAAA,QAAAA,CAAS,CAAC,EAAEK,SAAS,CAAC,GAAGN,IAAI,CAACM,OAAQ,CAAA;QAC7C,OAAOD,GAAAA;AACT,KAAA,EAAG,EAAC,CAAA;AACN;;;;"}
@@ -0,0 +1,9 @@
1
+ const prefixPluginTranslations = (trad, pluginId)=>{
2
+ return Object.keys(trad).reduce((acc, current)=>{
3
+ acc[`${pluginId}.${current}`] = trad[current];
4
+ return acc;
5
+ }, {});
6
+ };
7
+
8
+ export { prefixPluginTranslations };
9
+ //# sourceMappingURL=prefixPluginTranslations.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefixPluginTranslations.mjs","sources":["../../../admin/src/utils/prefixPluginTranslations.ts"],"sourcesContent":["type TradOptions = Record<string, string>;\n\nconst prefixPluginTranslations = (trad: TradOptions, pluginId: string): TradOptions => {\n if (!pluginId) {\n throw new TypeError(\"pluginId can't be empty\");\n }\n return Object.keys(trad).reduce((acc, current) => {\n acc[`${pluginId}.${current}`] = trad[current];\n return acc;\n }, {} as TradOptions);\n};\n\nexport { prefixPluginTranslations };\n"],"names":["prefixPluginTranslations","trad","pluginId","Object","keys","reduce","acc","current"],"mappings":"AAEMA,MAAAA,wBAAAA,GAA2B,CAACC,IAAmBC,EAAAA,QAAAA,GAAAA;AAInD,IAAA,OAAOC,OAAOC,IAAI,CAACH,MAAMI,MAAM,CAAC,CAACC,GAAKC,EAAAA,OAAAA,GAAAA;QACpCD,GAAG,CAAC,CAAGJ,EAAAA,QAAAA,CAAS,CAAC,EAAEK,SAAS,CAAC,GAAGN,IAAI,CAACM,OAAQ,CAAA;QAC7C,OAAOD,GAAAA;AACT,KAAA,EAAG,EAAC,CAAA;AACN;;;;"}
@@ -0,0 +1,42 @@
1
+ 'use strict';
2
+
3
+ const getTimezoneOffset = (timezone, date)=>{
4
+ try {
5
+ const offsetPart = new Intl.DateTimeFormat('en', {
6
+ timeZone: timezone,
7
+ timeZoneName: 'longOffset'
8
+ }).formatToParts(date).find((part)=>part.type === 'timeZoneName');
9
+ const offset = offsetPart ? offsetPart.value : '';
10
+ // We want to show time based on UTC, not GMT so we swap that.
11
+ let utcOffset = offset.replace('GMT', 'UTC');
12
+ // For perfect UTC (UTC+0:00) we only get the string UTC, So we need to append the 0's.
13
+ if (!utcOffset.includes('+') && !utcOffset.includes('-')) {
14
+ utcOffset = `${utcOffset}+00:00`;
15
+ }
16
+ return utcOffset;
17
+ } catch (error) {
18
+ // When timezone is invalid we catch the error and return empty to don't break the app
19
+ return '';
20
+ }
21
+ };
22
+ const getTimezones = (selectedDate)=>{
23
+ const timezoneList = Intl.supportedValuesOf('timeZone').map((timezone)=>{
24
+ // Timezone will be in the format GMT${OFFSET} where offset could be nothing,
25
+ // a four digit string e.g. +05:00 or -08:00
26
+ const utcOffset = getTimezoneOffset(timezone, selectedDate);
27
+ // Offset and timezone are concatenated with '&', so to split and save the required timezone in DB
28
+ return {
29
+ offset: utcOffset,
30
+ value: `${utcOffset}&${timezone}`
31
+ };
32
+ });
33
+ const systemTimezone = timezoneList.find((timezone)=>timezone.value.split('&')[1] === Intl.DateTimeFormat().resolvedOptions().timeZone);
34
+ return {
35
+ timezoneList,
36
+ systemTimezone
37
+ };
38
+ };
39
+
40
+ exports.getTimezoneOffset = getTimezoneOffset;
41
+ exports.getTimezones = getTimezones;
42
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.js","sources":["../../../admin/src/utils/time.ts"],"sourcesContent":["export const getTimezoneOffset = (timezone: string, date: Date) => {\n try {\n const offsetPart = new Intl.DateTimeFormat('en', {\n timeZone: timezone,\n timeZoneName: 'longOffset',\n })\n .formatToParts(date)\n .find((part) => part.type === 'timeZoneName');\n\n const offset = offsetPart ? offsetPart.value : '';\n\n // We want to show time based on UTC, not GMT so we swap that.\n let utcOffset = offset.replace('GMT', 'UTC');\n\n // For perfect UTC (UTC+0:00) we only get the string UTC, So we need to append the 0's.\n if (!utcOffset.includes('+') && !utcOffset.includes('-')) {\n utcOffset = `${utcOffset}+00:00`;\n }\n\n return utcOffset;\n } catch (error) {\n // When timezone is invalid we catch the error and return empty to don't break the app\n return '';\n }\n};\n\ninterface ITimezoneOption {\n offset: string;\n value: string;\n}\n\nexport const getTimezones = (selectedDate: Date) => {\n const timezoneList: ITimezoneOption[] = Intl.supportedValuesOf('timeZone').map((timezone) => {\n // Timezone will be in the format GMT${OFFSET} where offset could be nothing,\n // a four digit string e.g. +05:00 or -08:00\n const utcOffset = getTimezoneOffset(timezone, selectedDate);\n\n // Offset and timezone are concatenated with '&', so to split and save the required timezone in DB\n return { offset: utcOffset, value: `${utcOffset}&${timezone}` } satisfies ITimezoneOption;\n });\n\n const systemTimezone = timezoneList.find(\n (timezone) => timezone.value.split('&')[1] === Intl.DateTimeFormat().resolvedOptions().timeZone\n );\n\n return { timezoneList, systemTimezone };\n};\n"],"names":["getTimezoneOffset","timezone","date","offsetPart","Intl","DateTimeFormat","timeZone","timeZoneName","formatToParts","find","part","type","offset","value","utcOffset","replace","includes","error","getTimezones","selectedDate","timezoneList","supportedValuesOf","map","systemTimezone","split","resolvedOptions"],"mappings":";;AAAO,MAAMA,iBAAoB,GAAA,CAACC,QAAkBC,EAAAA,IAAAA,GAAAA;IAClD,IAAI;AACF,QAAA,MAAMC,UAAa,GAAA,IAAIC,IAAKC,CAAAA,cAAc,CAAC,IAAM,EAAA;YAC/CC,QAAUL,EAAAA,QAAAA;YACVM,YAAc,EAAA;SAEbC,CAAAA,CAAAA,aAAa,CAACN,IACdO,CAAAA,CAAAA,IAAI,CAAC,CAACC,IAAAA,GAASA,IAAKC,CAAAA,IAAI,KAAK,cAAA,CAAA;AAEhC,QAAA,MAAMC,MAAST,GAAAA,UAAAA,GAAaA,UAAWU,CAAAA,KAAK,GAAG,EAAA;;AAG/C,QAAA,IAAIC,SAAYF,GAAAA,MAAAA,CAAOG,OAAO,CAAC,KAAO,EAAA,KAAA,CAAA;;QAGtC,IAAI,CAACD,UAAUE,QAAQ,CAAC,QAAQ,CAACF,SAAAA,CAAUE,QAAQ,CAAC,GAAM,CAAA,EAAA;YACxDF,SAAY,GAAA,CAAA,EAAGA,SAAU,CAAA,MAAM,CAAC;AAClC;QAEA,OAAOA,SAAAA;AACT,KAAA,CAAE,OAAOG,KAAO,EAAA;;QAEd,OAAO,EAAA;AACT;AACF;AAOO,MAAMC,eAAe,CAACC,YAAAA,GAAAA;AAC3B,IAAA,MAAMC,eAAkChB,IAAKiB,CAAAA,iBAAiB,CAAC,UAAYC,CAAAA,CAAAA,GAAG,CAAC,CAACrB,QAAAA,GAAAA;;;QAG9E,MAAMa,SAAAA,GAAYd,kBAAkBC,QAAUkB,EAAAA,YAAAA,CAAAA;;QAG9C,OAAO;YAAEP,MAAQE,EAAAA,SAAAA;AAAWD,YAAAA,KAAAA,EAAO,CAAGC,EAAAA,SAAAA,CAAU,CAAC,EAAEb,QAAU,CAAA;AAAC,SAAA;AAChE,KAAA,CAAA;IAEA,MAAMsB,cAAAA,GAAiBH,aAAaX,IAAI,CACtC,CAACR,QAAaA,GAAAA,QAAAA,CAASY,KAAK,CAACW,KAAK,CAAC,GAAI,CAAA,CAAC,EAAE,KAAKpB,IAAAA,CAAKC,cAAc,EAAGoB,CAAAA,eAAe,GAAGnB,QAAQ,CAAA;IAGjG,OAAO;AAAEc,QAAAA,YAAAA;AAAcG,QAAAA;AAAe,KAAA;AACxC;;;;;"}
@@ -0,0 +1,39 @@
1
+ const getTimezoneOffset = (timezone, date)=>{
2
+ try {
3
+ const offsetPart = new Intl.DateTimeFormat('en', {
4
+ timeZone: timezone,
5
+ timeZoneName: 'longOffset'
6
+ }).formatToParts(date).find((part)=>part.type === 'timeZoneName');
7
+ const offset = offsetPart ? offsetPart.value : '';
8
+ // We want to show time based on UTC, not GMT so we swap that.
9
+ let utcOffset = offset.replace('GMT', 'UTC');
10
+ // For perfect UTC (UTC+0:00) we only get the string UTC, So we need to append the 0's.
11
+ if (!utcOffset.includes('+') && !utcOffset.includes('-')) {
12
+ utcOffset = `${utcOffset}+00:00`;
13
+ }
14
+ return utcOffset;
15
+ } catch (error) {
16
+ // When timezone is invalid we catch the error and return empty to don't break the app
17
+ return '';
18
+ }
19
+ };
20
+ const getTimezones = (selectedDate)=>{
21
+ const timezoneList = Intl.supportedValuesOf('timeZone').map((timezone)=>{
22
+ // Timezone will be in the format GMT${OFFSET} where offset could be nothing,
23
+ // a four digit string e.g. +05:00 or -08:00
24
+ const utcOffset = getTimezoneOffset(timezone, selectedDate);
25
+ // Offset and timezone are concatenated with '&', so to split and save the required timezone in DB
26
+ return {
27
+ offset: utcOffset,
28
+ value: `${utcOffset}&${timezone}`
29
+ };
30
+ });
31
+ const systemTimezone = timezoneList.find((timezone)=>timezone.value.split('&')[1] === Intl.DateTimeFormat().resolvedOptions().timeZone);
32
+ return {
33
+ timezoneList,
34
+ systemTimezone
35
+ };
36
+ };
37
+
38
+ export { getTimezoneOffset, getTimezones };
39
+ //# sourceMappingURL=time.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.mjs","sources":["../../../admin/src/utils/time.ts"],"sourcesContent":["export const getTimezoneOffset = (timezone: string, date: Date) => {\n try {\n const offsetPart = new Intl.DateTimeFormat('en', {\n timeZone: timezone,\n timeZoneName: 'longOffset',\n })\n .formatToParts(date)\n .find((part) => part.type === 'timeZoneName');\n\n const offset = offsetPart ? offsetPart.value : '';\n\n // We want to show time based on UTC, not GMT so we swap that.\n let utcOffset = offset.replace('GMT', 'UTC');\n\n // For perfect UTC (UTC+0:00) we only get the string UTC, So we need to append the 0's.\n if (!utcOffset.includes('+') && !utcOffset.includes('-')) {\n utcOffset = `${utcOffset}+00:00`;\n }\n\n return utcOffset;\n } catch (error) {\n // When timezone is invalid we catch the error and return empty to don't break the app\n return '';\n }\n};\n\ninterface ITimezoneOption {\n offset: string;\n value: string;\n}\n\nexport const getTimezones = (selectedDate: Date) => {\n const timezoneList: ITimezoneOption[] = Intl.supportedValuesOf('timeZone').map((timezone) => {\n // Timezone will be in the format GMT${OFFSET} where offset could be nothing,\n // a four digit string e.g. +05:00 or -08:00\n const utcOffset = getTimezoneOffset(timezone, selectedDate);\n\n // Offset and timezone are concatenated with '&', so to split and save the required timezone in DB\n return { offset: utcOffset, value: `${utcOffset}&${timezone}` } satisfies ITimezoneOption;\n });\n\n const systemTimezone = timezoneList.find(\n (timezone) => timezone.value.split('&')[1] === Intl.DateTimeFormat().resolvedOptions().timeZone\n );\n\n return { timezoneList, systemTimezone };\n};\n"],"names":["getTimezoneOffset","timezone","date","offsetPart","Intl","DateTimeFormat","timeZone","timeZoneName","formatToParts","find","part","type","offset","value","utcOffset","replace","includes","error","getTimezones","selectedDate","timezoneList","supportedValuesOf","map","systemTimezone","split","resolvedOptions"],"mappings":"AAAO,MAAMA,iBAAoB,GAAA,CAACC,QAAkBC,EAAAA,IAAAA,GAAAA;IAClD,IAAI;AACF,QAAA,MAAMC,UAAa,GAAA,IAAIC,IAAKC,CAAAA,cAAc,CAAC,IAAM,EAAA;YAC/CC,QAAUL,EAAAA,QAAAA;YACVM,YAAc,EAAA;SAEbC,CAAAA,CAAAA,aAAa,CAACN,IACdO,CAAAA,CAAAA,IAAI,CAAC,CAACC,IAAAA,GAASA,IAAKC,CAAAA,IAAI,KAAK,cAAA,CAAA;AAEhC,QAAA,MAAMC,MAAST,GAAAA,UAAAA,GAAaA,UAAWU,CAAAA,KAAK,GAAG,EAAA;;AAG/C,QAAA,IAAIC,SAAYF,GAAAA,MAAAA,CAAOG,OAAO,CAAC,KAAO,EAAA,KAAA,CAAA;;QAGtC,IAAI,CAACD,UAAUE,QAAQ,CAAC,QAAQ,CAACF,SAAAA,CAAUE,QAAQ,CAAC,GAAM,CAAA,EAAA;YACxDF,SAAY,GAAA,CAAA,EAAGA,SAAU,CAAA,MAAM,CAAC;AAClC;QAEA,OAAOA,SAAAA;AACT,KAAA,CAAE,OAAOG,KAAO,EAAA;;QAEd,OAAO,EAAA;AACT;AACF;AAOO,MAAMC,eAAe,CAACC,YAAAA,GAAAA;AAC3B,IAAA,MAAMC,eAAkChB,IAAKiB,CAAAA,iBAAiB,CAAC,UAAYC,CAAAA,CAAAA,GAAG,CAAC,CAACrB,QAAAA,GAAAA;;;QAG9E,MAAMa,SAAAA,GAAYd,kBAAkBC,QAAUkB,EAAAA,YAAAA,CAAAA;;QAG9C,OAAO;YAAEP,MAAQE,EAAAA,SAAAA;AAAWD,YAAAA,KAAAA,EAAO,CAAGC,EAAAA,SAAAA,CAAU,CAAC,EAAEb,QAAU,CAAA;AAAC,SAAA;AAChE,KAAA,CAAA;IAEA,MAAMsB,cAAAA,GAAiBH,aAAaX,IAAI,CACtC,CAACR,QAAaA,GAAAA,QAAAA,CAASY,KAAK,CAACW,KAAK,CAAC,GAAI,CAAA,CAAC,EAAE,KAAKpB,IAAAA,CAAKC,cAAc,EAAGoB,CAAAA,eAAe,GAAGnB,QAAQ,CAAA;IAGjG,OAAO;AAAEc,QAAAA,YAAAA;AAAcG,QAAAA;AAAe,KAAA;AACxC;;;;"}
@@ -0,0 +1,65 @@
1
+ 'use strict';
2
+
3
+ var strapiAdmin = require('@strapi/admin/strapi-admin');
4
+ var dateFnsTz = require('date-fns-tz');
5
+ var yup = require('yup');
6
+
7
+ function _interopNamespaceDefault(e) {
8
+ var n = Object.create(null);
9
+ if (e) {
10
+ Object.keys(e).forEach(function (k) {
11
+ if (k !== 'default') {
12
+ var d = Object.getOwnPropertyDescriptor(e, k);
13
+ Object.defineProperty(n, k, d.get ? d : {
14
+ enumerable: true,
15
+ get: function () { return e[k]; }
16
+ });
17
+ }
18
+ });
19
+ }
20
+ n.default = e;
21
+ return Object.freeze(n);
22
+ }
23
+
24
+ var yup__namespace = /*#__PURE__*/_interopNamespaceDefault(yup);
25
+
26
+ /**
27
+ * FormikErrors type enforce us to always return a string as error.
28
+ * We need these errors to be translated, so we need to create a hook to be able to use the formatMessage function.
29
+ */ const RELEASE_SCHEMA = yup__namespace.object().shape({
30
+ name: yup__namespace.string().trim().required(strapiAdmin.translatedErrors.required.id).nullable(),
31
+ scheduledAt: yup__namespace.string().nullable(),
32
+ isScheduled: yup__namespace.boolean().optional(),
33
+ time: yup__namespace.string().when('isScheduled', {
34
+ is: true,
35
+ then: yup__namespace.string().trim().required(strapiAdmin.translatedErrors.required.id),
36
+ otherwise: yup__namespace.string().nullable()
37
+ }).test('time-in-future-if-today', 'content-releases.modal.form.time.has-passed', function(time) {
38
+ const { date, timezone } = this.parent;
39
+ if (!date || !timezone || !time) {
40
+ return true;
41
+ }
42
+ // Timezone is in format "UTC&Europe/Paris", so we get the region part for the dates functions
43
+ const region = timezone.split('&')[1];
44
+ const selectedTime = dateFnsTz.zonedTimeToUtc(`${date} ${time}`, region);
45
+ const now = new Date();
46
+ return selectedTime > now;
47
+ }),
48
+ timezone: yup__namespace.string().when('isScheduled', {
49
+ is: true,
50
+ then: yup__namespace.string().required(strapiAdmin.translatedErrors.required.id).nullable(),
51
+ otherwise: yup__namespace.string().nullable()
52
+ }),
53
+ date: yup__namespace.string().when('isScheduled', {
54
+ is: true,
55
+ then: yup__namespace.string().required(strapiAdmin.translatedErrors.required.id).nullable(),
56
+ otherwise: yup__namespace.string().nullable()
57
+ })
58
+ }).required().noUnknown();
59
+ const SETTINGS_SCHEMA = yup__namespace.object().shape({
60
+ defaultTimezone: yup__namespace.string().nullable().default(null)
61
+ }).required().noUnknown();
62
+
63
+ exports.RELEASE_SCHEMA = RELEASE_SCHEMA;
64
+ exports.SETTINGS_SCHEMA = SETTINGS_SCHEMA;
65
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sources":["../../../admin/src/validation/schemas.ts"],"sourcesContent":["import { translatedErrors } from '@strapi/admin/strapi-admin';\nimport { zonedTimeToUtc } from 'date-fns-tz';\nimport * as yup from 'yup';\n\n/**\n * FormikErrors type enforce us to always return a string as error.\n * We need these errors to be translated, so we need to create a hook to be able to use the formatMessage function.\n */\nexport const RELEASE_SCHEMA = yup\n .object()\n .shape({\n name: yup.string().trim().required(translatedErrors.required.id).nullable(),\n scheduledAt: yup.string().nullable(),\n isScheduled: yup.boolean().optional(),\n time: yup\n .string()\n .when('isScheduled', {\n is: true,\n then: yup.string().trim().required(translatedErrors.required.id),\n otherwise: yup.string().nullable(),\n })\n .test(\n 'time-in-future-if-today',\n 'content-releases.modal.form.time.has-passed',\n function (time) {\n const { date, timezone } = this.parent;\n\n if (!date || !timezone || !time) {\n return true;\n }\n\n // Timezone is in format \"UTC&Europe/Paris\", so we get the region part for the dates functions\n const region = timezone.split('&')[1];\n\n const selectedTime = zonedTimeToUtc(`${date} ${time}`, region);\n const now = new Date();\n\n return selectedTime > now;\n }\n ),\n timezone: yup.string().when('isScheduled', {\n is: true,\n then: yup.string().required(translatedErrors.required.id).nullable(),\n otherwise: yup.string().nullable(),\n }),\n date: yup.string().when('isScheduled', {\n is: true,\n then: yup.string().required(translatedErrors.required.id).nullable(),\n otherwise: yup.string().nullable(),\n }),\n })\n .required()\n .noUnknown();\n\nexport const SETTINGS_SCHEMA = yup\n .object()\n .shape({\n defaultTimezone: yup.string().nullable().default(null),\n })\n .required()\n .noUnknown();\n"],"names":["RELEASE_SCHEMA","yup","object","shape","name","string","trim","required","translatedErrors","id","nullable","scheduledAt","isScheduled","boolean","optional","time","when","is","then","otherwise","test","date","timezone","parent","region","split","selectedTime","zonedTimeToUtc","now","Date","noUnknown","SETTINGS_SCHEMA","defaultTimezone","default"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIA;;;AAGC,IACYA,MAAAA,cAAAA,GAAiBC,eAC3BC,MAAM,EAAA,CACNC,KAAK,CAAC;AACLC,IAAAA,IAAAA,EAAMH,cAAII,CAAAA,MAAM,EAAGC,CAAAA,IAAI,EAAGC,CAAAA,QAAQ,CAACC,4BAAAA,CAAiBD,QAAQ,CAACE,EAAE,CAAA,CAAEC,QAAQ,EAAA;IACzEC,WAAaV,EAAAA,cAAAA,CAAII,MAAM,EAAA,CAAGK,QAAQ,EAAA;IAClCE,WAAaX,EAAAA,cAAAA,CAAIY,OAAO,EAAA,CAAGC,QAAQ,EAAA;AACnCC,IAAAA,IAAAA,EAAMd,cACHI,CAAAA,MAAM,EACNW,CAAAA,IAAI,CAAC,aAAe,EAAA;QACnBC,EAAI,EAAA,IAAA;QACJC,IAAMjB,EAAAA,cAAAA,CAAII,MAAM,EAAA,CAAGC,IAAI,EAAA,CAAGC,QAAQ,CAACC,4BAAAA,CAAiBD,QAAQ,CAACE,EAAE,CAAA;QAC/DU,SAAWlB,EAAAA,cAAAA,CAAII,MAAM,EAAA,CAAGK,QAAQ;AAClC,KAAA,CAAA,CACCU,IAAI,CACH,yBACA,EAAA,6CAAA,EACA,SAAUL,IAAI,EAAA;QACZ,MAAM,EAAEM,IAAI,EAAEC,QAAQ,EAAE,GAAG,IAAI,CAACC,MAAM;AAEtC,QAAA,IAAI,CAACF,IAAAA,IAAQ,CAACC,QAAAA,IAAY,CAACP,IAAM,EAAA;YAC/B,OAAO,IAAA;AACT;;AAGA,QAAA,MAAMS,SAASF,QAASG,CAAAA,KAAK,CAAC,GAAA,CAAI,CAAC,CAAE,CAAA;AAErC,QAAA,MAAMC,eAAeC,wBAAe,CAAA,CAAA,EAAGN,KAAK,CAAC,EAAEN,MAAM,EAAES,MAAAA,CAAAA;AACvD,QAAA,MAAMI,MAAM,IAAIC,IAAAA,EAAAA;AAEhB,QAAA,OAAOH,YAAeE,GAAAA,GAAAA;AACxB,KAAA,CAAA;AAEJN,IAAAA,QAAAA,EAAUrB,cAAII,CAAAA,MAAM,EAAGW,CAAAA,IAAI,CAAC,aAAe,EAAA;QACzCC,EAAI,EAAA,IAAA;QACJC,IAAMjB,EAAAA,cAAAA,CAAII,MAAM,EAAA,CAAGE,QAAQ,CAACC,6BAAiBD,QAAQ,CAACE,EAAE,CAAA,CAAEC,QAAQ,EAAA;QAClES,SAAWlB,EAAAA,cAAAA,CAAII,MAAM,EAAA,CAAGK,QAAQ;AAClC,KAAA,CAAA;AACAW,IAAAA,IAAAA,EAAMpB,cAAII,CAAAA,MAAM,EAAGW,CAAAA,IAAI,CAAC,aAAe,EAAA;QACrCC,EAAI,EAAA,IAAA;QACJC,IAAMjB,EAAAA,cAAAA,CAAII,MAAM,EAAA,CAAGE,QAAQ,CAACC,6BAAiBD,QAAQ,CAACE,EAAE,CAAA,CAAEC,QAAQ,EAAA;QAClES,SAAWlB,EAAAA,cAAAA,CAAII,MAAM,EAAA,CAAGK,QAAQ;AAClC,KAAA;AACF,CACCH,CAAAA,CAAAA,QAAQ,EACRuB,CAAAA,SAAS;MAECC,eAAkB9B,GAAAA,cAAAA,CAC5BC,MAAM,EAAA,CACNC,KAAK,CAAC;AACL6B,IAAAA,eAAAA,EAAiB/B,eAAII,MAAM,EAAA,CAAGK,QAAQ,EAAA,CAAGuB,OAAO,CAAC,IAAA;AACnD,CACC1B,CAAAA,CAAAA,QAAQ,EACRuB,CAAAA,SAAS;;;;;"}
@@ -0,0 +1,43 @@
1
+ import { translatedErrors } from '@strapi/admin/strapi-admin';
2
+ import { zonedTimeToUtc } from 'date-fns-tz';
3
+ import * as yup from 'yup';
4
+
5
+ /**
6
+ * FormikErrors type enforce us to always return a string as error.
7
+ * We need these errors to be translated, so we need to create a hook to be able to use the formatMessage function.
8
+ */ const RELEASE_SCHEMA = yup.object().shape({
9
+ name: yup.string().trim().required(translatedErrors.required.id).nullable(),
10
+ scheduledAt: yup.string().nullable(),
11
+ isScheduled: yup.boolean().optional(),
12
+ time: yup.string().when('isScheduled', {
13
+ is: true,
14
+ then: yup.string().trim().required(translatedErrors.required.id),
15
+ otherwise: yup.string().nullable()
16
+ }).test('time-in-future-if-today', 'content-releases.modal.form.time.has-passed', function(time) {
17
+ const { date, timezone } = this.parent;
18
+ if (!date || !timezone || !time) {
19
+ return true;
20
+ }
21
+ // Timezone is in format "UTC&Europe/Paris", so we get the region part for the dates functions
22
+ const region = timezone.split('&')[1];
23
+ const selectedTime = zonedTimeToUtc(`${date} ${time}`, region);
24
+ const now = new Date();
25
+ return selectedTime > now;
26
+ }),
27
+ timezone: yup.string().when('isScheduled', {
28
+ is: true,
29
+ then: yup.string().required(translatedErrors.required.id).nullable(),
30
+ otherwise: yup.string().nullable()
31
+ }),
32
+ date: yup.string().when('isScheduled', {
33
+ is: true,
34
+ then: yup.string().required(translatedErrors.required.id).nullable(),
35
+ otherwise: yup.string().nullable()
36
+ })
37
+ }).required().noUnknown();
38
+ const SETTINGS_SCHEMA = yup.object().shape({
39
+ defaultTimezone: yup.string().nullable().default(null)
40
+ }).required().noUnknown();
41
+
42
+ export { RELEASE_SCHEMA, SETTINGS_SCHEMA };
43
+ //# sourceMappingURL=schemas.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.mjs","sources":["../../../admin/src/validation/schemas.ts"],"sourcesContent":["import { translatedErrors } from '@strapi/admin/strapi-admin';\nimport { zonedTimeToUtc } from 'date-fns-tz';\nimport * as yup from 'yup';\n\n/**\n * FormikErrors type enforce us to always return a string as error.\n * We need these errors to be translated, so we need to create a hook to be able to use the formatMessage function.\n */\nexport const RELEASE_SCHEMA = yup\n .object()\n .shape({\n name: yup.string().trim().required(translatedErrors.required.id).nullable(),\n scheduledAt: yup.string().nullable(),\n isScheduled: yup.boolean().optional(),\n time: yup\n .string()\n .when('isScheduled', {\n is: true,\n then: yup.string().trim().required(translatedErrors.required.id),\n otherwise: yup.string().nullable(),\n })\n .test(\n 'time-in-future-if-today',\n 'content-releases.modal.form.time.has-passed',\n function (time) {\n const { date, timezone } = this.parent;\n\n if (!date || !timezone || !time) {\n return true;\n }\n\n // Timezone is in format \"UTC&Europe/Paris\", so we get the region part for the dates functions\n const region = timezone.split('&')[1];\n\n const selectedTime = zonedTimeToUtc(`${date} ${time}`, region);\n const now = new Date();\n\n return selectedTime > now;\n }\n ),\n timezone: yup.string().when('isScheduled', {\n is: true,\n then: yup.string().required(translatedErrors.required.id).nullable(),\n otherwise: yup.string().nullable(),\n }),\n date: yup.string().when('isScheduled', {\n is: true,\n then: yup.string().required(translatedErrors.required.id).nullable(),\n otherwise: yup.string().nullable(),\n }),\n })\n .required()\n .noUnknown();\n\nexport const SETTINGS_SCHEMA = yup\n .object()\n .shape({\n defaultTimezone: yup.string().nullable().default(null),\n })\n .required()\n .noUnknown();\n"],"names":["RELEASE_SCHEMA","yup","object","shape","name","string","trim","required","translatedErrors","id","nullable","scheduledAt","isScheduled","boolean","optional","time","when","is","then","otherwise","test","date","timezone","parent","region","split","selectedTime","zonedTimeToUtc","now","Date","noUnknown","SETTINGS_SCHEMA","defaultTimezone","default"],"mappings":";;;;AAIA;;;AAGC,IACYA,MAAAA,cAAAA,GAAiBC,IAC3BC,MAAM,EAAA,CACNC,KAAK,CAAC;AACLC,IAAAA,IAAAA,EAAMH,GAAII,CAAAA,MAAM,EAAGC,CAAAA,IAAI,EAAGC,CAAAA,QAAQ,CAACC,gBAAAA,CAAiBD,QAAQ,CAACE,EAAE,CAAA,CAAEC,QAAQ,EAAA;IACzEC,WAAaV,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGK,QAAQ,EAAA;IAClCE,WAAaX,EAAAA,GAAAA,CAAIY,OAAO,EAAA,CAAGC,QAAQ,EAAA;AACnCC,IAAAA,IAAAA,EAAMd,GACHI,CAAAA,MAAM,EACNW,CAAAA,IAAI,CAAC,aAAe,EAAA;QACnBC,EAAI,EAAA,IAAA;QACJC,IAAMjB,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGC,IAAI,EAAA,CAAGC,QAAQ,CAACC,gBAAAA,CAAiBD,QAAQ,CAACE,EAAE,CAAA;QAC/DU,SAAWlB,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGK,QAAQ;AAClC,KAAA,CAAA,CACCU,IAAI,CACH,yBACA,EAAA,6CAAA,EACA,SAAUL,IAAI,EAAA;QACZ,MAAM,EAAEM,IAAI,EAAEC,QAAQ,EAAE,GAAG,IAAI,CAACC,MAAM;AAEtC,QAAA,IAAI,CAACF,IAAAA,IAAQ,CAACC,QAAAA,IAAY,CAACP,IAAM,EAAA;YAC/B,OAAO,IAAA;AACT;;AAGA,QAAA,MAAMS,SAASF,QAASG,CAAAA,KAAK,CAAC,GAAA,CAAI,CAAC,CAAE,CAAA;AAErC,QAAA,MAAMC,eAAeC,cAAe,CAAA,CAAA,EAAGN,KAAK,CAAC,EAAEN,MAAM,EAAES,MAAAA,CAAAA;AACvD,QAAA,MAAMI,MAAM,IAAIC,IAAAA,EAAAA;AAEhB,QAAA,OAAOH,YAAeE,GAAAA,GAAAA;AACxB,KAAA,CAAA;AAEJN,IAAAA,QAAAA,EAAUrB,GAAII,CAAAA,MAAM,EAAGW,CAAAA,IAAI,CAAC,aAAe,EAAA;QACzCC,EAAI,EAAA,IAAA;QACJC,IAAMjB,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGE,QAAQ,CAACC,iBAAiBD,QAAQ,CAACE,EAAE,CAAA,CAAEC,QAAQ,EAAA;QAClES,SAAWlB,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGK,QAAQ;AAClC,KAAA,CAAA;AACAW,IAAAA,IAAAA,EAAMpB,GAAII,CAAAA,MAAM,EAAGW,CAAAA,IAAI,CAAC,aAAe,EAAA;QACrCC,EAAI,EAAA,IAAA;QACJC,IAAMjB,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGE,QAAQ,CAACC,iBAAiBD,QAAQ,CAACE,EAAE,CAAA,CAAEC,QAAQ,EAAA;QAClES,SAAWlB,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGK,QAAQ;AAClC,KAAA;AACF,CACCH,CAAAA,CAAAA,QAAQ,EACRuB,CAAAA,SAAS;MAECC,eAAkB9B,GAAAA,GAAAA,CAC5BC,MAAM,EAAA,CACNC,KAAK,CAAC;AACL6B,IAAAA,eAAAA,EAAiB/B,IAAII,MAAM,EAAA,CAAGK,QAAQ,EAAA,CAAGuB,OAAO,CAAC,IAAA;AACnD,CACC1B,CAAAA,CAAAA,QAAQ,EACRuB,CAAAA,SAAS;;;;"}
@@ -0,0 +1,68 @@
1
+ 'use strict';
2
+
3
+ var constants = require('./constants.js');
4
+ var index = require('./utils/index.js');
5
+ var documents = require('./middlewares/documents.js');
6
+
7
+ const deleteReleasesActionsAndUpdateReleaseStatus = async (params)=>{
8
+ const releases = await strapi.db.query(constants.RELEASE_MODEL_UID).findMany({
9
+ where: {
10
+ actions: params
11
+ }
12
+ });
13
+ await strapi.db.query(constants.RELEASE_ACTION_MODEL_UID).deleteMany({
14
+ where: params
15
+ });
16
+ // We update the status of each release after delete the actions
17
+ for (const release of releases){
18
+ index.getService('release', {
19
+ strapi
20
+ }).updateReleaseStatus(release.id);
21
+ }
22
+ };
23
+ const bootstrap = async ({ strapi: strapi1 })=>{
24
+ if (strapi1.ee.features.isEnabled('cms-content-releases')) {
25
+ const contentTypesWithDraftAndPublish = Object.keys(strapi1.contentTypes).filter((uid)=>strapi1.contentTypes[uid]?.options?.draftAndPublish);
26
+ strapi1.db.lifecycles.subscribe({
27
+ models: contentTypesWithDraftAndPublish,
28
+ /**
29
+ * deleteMany is still used outside documents service, for example when deleting a locale
30
+ */ async afterDeleteMany (event) {
31
+ try {
32
+ const model = strapi1.getModel(event.model.uid);
33
+ // @ts-expect-error TODO: lifecycles types looks like are not 100% finished
34
+ if (model.kind === 'collectionType' && model.options?.draftAndPublish) {
35
+ const { where } = event.params;
36
+ deleteReleasesActionsAndUpdateReleaseStatus({
37
+ contentType: model.uid,
38
+ locale: where?.locale ?? null,
39
+ ...where?.documentId && {
40
+ entryDocumentId: where.documentId
41
+ }
42
+ });
43
+ }
44
+ } catch (error) {
45
+ // If an error happens we don't want to block the delete entry flow, but we log the error
46
+ strapi1.log.error('Error while deleting release actions after entry deleteMany', {
47
+ error
48
+ });
49
+ }
50
+ }
51
+ });
52
+ // We register middleware to handle ReleaseActions when changes on documents are made
53
+ strapi1.documents.use(documents.deleteActionsOnDelete);
54
+ strapi1.documents.use(documents.updateActionsOnUpdate);
55
+ index.getService('scheduling', {
56
+ strapi: strapi1
57
+ }).syncFromDatabase().catch((err)=>{
58
+ strapi1.log.error('Error while syncing scheduled jobs from the database in the content-releases plugin. This could lead to errors in the releases scheduling.');
59
+ throw err;
60
+ });
61
+ Object.entries(constants.ALLOWED_WEBHOOK_EVENTS).forEach(([key, value])=>{
62
+ strapi1.get('webhookStore').addAllowedEvent(key, value);
63
+ });
64
+ }
65
+ };
66
+
67
+ exports.bootstrap = bootstrap;
68
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sources":["../../server/src/bootstrap.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport type { Core, UID, Modules } from '@strapi/types';\n\nimport { RELEASE_ACTION_MODEL_UID, RELEASE_MODEL_UID, ALLOWED_WEBHOOK_EVENTS } from './constants';\nimport { getService } from './utils';\nimport { deleteActionsOnDelete, updateActionsOnUpdate } from './middlewares/documents';\n\ninterface DeleteManyParams {\n contentType: UID.ContentType;\n locale: string | null;\n entryDocumentId?: Modules.Documents.ID;\n}\n\nconst deleteReleasesActionsAndUpdateReleaseStatus = async (params: DeleteManyParams) => {\n const releases = await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n actions: params,\n },\n });\n\n await strapi.db.query(RELEASE_ACTION_MODEL_UID).deleteMany({\n where: params,\n });\n\n // We update the status of each release after delete the actions\n for (const release of releases) {\n getService('release', { strapi }).updateReleaseStatus(release.id);\n }\n};\n\nexport const bootstrap = async ({ strapi }: { strapi: Core.Strapi }) => {\n if (strapi.ee.features.isEnabled('cms-content-releases')) {\n const contentTypesWithDraftAndPublish = Object.keys(strapi.contentTypes).filter(\n (uid: any) => strapi.contentTypes[uid]?.options?.draftAndPublish\n );\n\n strapi.db.lifecycles.subscribe({\n models: contentTypesWithDraftAndPublish,\n\n /**\n * deleteMany is still used outside documents service, for example when deleting a locale\n */\n async afterDeleteMany(event) {\n try {\n const model = strapi.getModel(event.model.uid as UID.Schema);\n // @ts-expect-error TODO: lifecycles types looks like are not 100% finished\n if (model.kind === 'collectionType' && model.options?.draftAndPublish) {\n const { where } = event.params;\n\n deleteReleasesActionsAndUpdateReleaseStatus({\n contentType: model.uid,\n locale: where?.locale ?? null,\n ...(where?.documentId && { entryDocumentId: where.documentId }),\n });\n }\n } catch (error) {\n // If an error happens we don't want to block the delete entry flow, but we log the error\n strapi.log.error('Error while deleting release actions after entry deleteMany', {\n error,\n });\n }\n },\n });\n\n // We register middleware to handle ReleaseActions when changes on documents are made\n strapi.documents.use(deleteActionsOnDelete);\n strapi.documents.use(updateActionsOnUpdate);\n\n getService('scheduling', { strapi })\n .syncFromDatabase()\n .catch((err: Error) => {\n strapi.log.error(\n 'Error while syncing scheduled jobs from the database in the content-releases plugin. This could lead to errors in the releases scheduling.'\n );\n\n throw err;\n });\n\n Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {\n strapi.get('webhookStore').addAllowedEvent(key, value);\n });\n }\n};\n"],"names":["deleteReleasesActionsAndUpdateReleaseStatus","params","releases","strapi","db","query","RELEASE_MODEL_UID","findMany","where","actions","RELEASE_ACTION_MODEL_UID","deleteMany","release","getService","updateReleaseStatus","id","bootstrap","ee","features","isEnabled","contentTypesWithDraftAndPublish","Object","keys","contentTypes","filter","uid","options","draftAndPublish","lifecycles","subscribe","models","afterDeleteMany","event","model","getModel","kind","contentType","locale","documentId","entryDocumentId","error","log","documents","use","deleteActionsOnDelete","updateActionsOnUpdate","syncFromDatabase","catch","err","entries","ALLOWED_WEBHOOK_EVENTS","forEach","key","value","get","addAllowedEvent"],"mappings":";;;;;;AAaA,MAAMA,8CAA8C,OAAOC,MAAAA,GAAAA;IACzD,MAAMC,QAAAA,GAAW,MAAMC,MAAOC,CAAAA,EAAE,CAACC,KAAK,CAACC,2BAAmBC,CAAAA,CAAAA,QAAQ,CAAC;QACjEC,KAAO,EAAA;YACLC,OAASR,EAAAA;AACX;AACF,KAAA,CAAA;AAEA,IAAA,MAAME,OAAOC,EAAE,CAACC,KAAK,CAACK,kCAAAA,CAAAA,CAA0BC,UAAU,CAAC;QACzDH,KAAOP,EAAAA;AACT,KAAA,CAAA;;IAGA,KAAK,MAAMW,WAAWV,QAAU,CAAA;AAC9BW,QAAAA,gBAAAA,CAAW,SAAW,EAAA;AAAEV,YAAAA;SAAUW,CAAAA,CAAAA,mBAAmB,CAACF,OAAAA,CAAQG,EAAE,CAAA;AAClE;AACF,CAAA;MAEaC,SAAY,GAAA,OAAO,EAAEb,MAAAA,EAAAA,OAAM,EAA2B,GAAA;AACjE,IAAA,IAAIA,QAAOc,EAAE,CAACC,QAAQ,CAACC,SAAS,CAAC,sBAAyB,CAAA,EAAA;AACxD,QAAA,MAAMC,kCAAkCC,MAAOC,CAAAA,IAAI,CAACnB,OAAAA,CAAOoB,YAAY,CAAEC,CAAAA,MAAM,CAC7E,CAACC,MAAatB,OAAOoB,CAAAA,YAAY,CAACE,GAAAA,CAAI,EAAEC,OAASC,EAAAA,eAAAA,CAAAA;AAGnDxB,QAAAA,OAAAA,CAAOC,EAAE,CAACwB,UAAU,CAACC,SAAS,CAAC;YAC7BC,MAAQV,EAAAA,+BAAAA;AAER;;UAGA,MAAMW,iBAAgBC,KAAK,EAAA;gBACzB,IAAI;AACF,oBAAA,MAAMC,QAAQ9B,OAAO+B,CAAAA,QAAQ,CAACF,KAAMC,CAAAA,KAAK,CAACR,GAAG,CAAA;;AAE7C,oBAAA,IAAIQ,MAAME,IAAI,KAAK,oBAAoBF,KAAMP,CAAAA,OAAO,EAAEC,eAAiB,EAAA;AACrE,wBAAA,MAAM,EAAEnB,KAAK,EAAE,GAAGwB,MAAM/B,MAAM;wBAE9BD,2CAA4C,CAAA;AAC1CoC,4BAAAA,WAAAA,EAAaH,MAAMR,GAAG;AACtBY,4BAAAA,MAAAA,EAAQ7B,OAAO6B,MAAU,IAAA,IAAA;AACzB,4BAAA,GAAI7B,OAAO8B,UAAc,IAAA;AAAEC,gCAAAA,eAAAA,EAAiB/B,MAAM8B;;AACpD,yBAAA,CAAA;AACF;AACF,iBAAA,CAAE,OAAOE,KAAO,EAAA;;AAEdrC,oBAAAA,OAAAA,CAAOsC,GAAG,CAACD,KAAK,CAAC,6DAA+D,EAAA;AAC9EA,wBAAAA;AACF,qBAAA,CAAA;AACF;AACF;AACF,SAAA,CAAA;;QAGArC,OAAOuC,CAAAA,SAAS,CAACC,GAAG,CAACC,+BAAAA,CAAAA;QACrBzC,OAAOuC,CAAAA,SAAS,CAACC,GAAG,CAACE,+BAAAA,CAAAA;AAErBhC,QAAAA,gBAAAA,CAAW,YAAc,EAAA;YAAEV,MAAAA,EAAAA;AAAO,SAAA,CAAA,CAC/B2C,gBAAgB,EAAA,CAChBC,KAAK,CAAC,CAACC,GAAAA,GAAAA;YACN7C,OAAOsC,CAAAA,GAAG,CAACD,KAAK,CACd,4IAAA,CAAA;YAGF,MAAMQ,GAAAA;AACR,SAAA,CAAA;QAEF3B,MAAO4B,CAAAA,OAAO,CAACC,gCAAwBC,CAAAA,CAAAA,OAAO,CAAC,CAAC,CAACC,KAAKC,KAAM,CAAA,GAAA;AAC1DlD,YAAAA,OAAAA,CAAOmD,GAAG,CAAC,cAAgBC,CAAAA,CAAAA,eAAe,CAACH,GAAKC,EAAAA,KAAAA,CAAAA;AAClD,SAAA,CAAA;AACF;AACF;;;;"}
@@ -0,0 +1,66 @@
1
+ import { ALLOWED_WEBHOOK_EVENTS, RELEASE_MODEL_UID, RELEASE_ACTION_MODEL_UID } from './constants.mjs';
2
+ import { getService } from './utils/index.mjs';
3
+ import { deleteActionsOnDelete, updateActionsOnUpdate } from './middlewares/documents.mjs';
4
+
5
+ const deleteReleasesActionsAndUpdateReleaseStatus = async (params)=>{
6
+ const releases = await strapi.db.query(RELEASE_MODEL_UID).findMany({
7
+ where: {
8
+ actions: params
9
+ }
10
+ });
11
+ await strapi.db.query(RELEASE_ACTION_MODEL_UID).deleteMany({
12
+ where: params
13
+ });
14
+ // We update the status of each release after delete the actions
15
+ for (const release of releases){
16
+ getService('release', {
17
+ strapi
18
+ }).updateReleaseStatus(release.id);
19
+ }
20
+ };
21
+ const bootstrap = async ({ strapi: strapi1 })=>{
22
+ if (strapi1.ee.features.isEnabled('cms-content-releases')) {
23
+ const contentTypesWithDraftAndPublish = Object.keys(strapi1.contentTypes).filter((uid)=>strapi1.contentTypes[uid]?.options?.draftAndPublish);
24
+ strapi1.db.lifecycles.subscribe({
25
+ models: contentTypesWithDraftAndPublish,
26
+ /**
27
+ * deleteMany is still used outside documents service, for example when deleting a locale
28
+ */ async afterDeleteMany (event) {
29
+ try {
30
+ const model = strapi1.getModel(event.model.uid);
31
+ // @ts-expect-error TODO: lifecycles types looks like are not 100% finished
32
+ if (model.kind === 'collectionType' && model.options?.draftAndPublish) {
33
+ const { where } = event.params;
34
+ deleteReleasesActionsAndUpdateReleaseStatus({
35
+ contentType: model.uid,
36
+ locale: where?.locale ?? null,
37
+ ...where?.documentId && {
38
+ entryDocumentId: where.documentId
39
+ }
40
+ });
41
+ }
42
+ } catch (error) {
43
+ // If an error happens we don't want to block the delete entry flow, but we log the error
44
+ strapi1.log.error('Error while deleting release actions after entry deleteMany', {
45
+ error
46
+ });
47
+ }
48
+ }
49
+ });
50
+ // We register middleware to handle ReleaseActions when changes on documents are made
51
+ strapi1.documents.use(deleteActionsOnDelete);
52
+ strapi1.documents.use(updateActionsOnUpdate);
53
+ getService('scheduling', {
54
+ strapi: strapi1
55
+ }).syncFromDatabase().catch((err)=>{
56
+ strapi1.log.error('Error while syncing scheduled jobs from the database in the content-releases plugin. This could lead to errors in the releases scheduling.');
57
+ throw err;
58
+ });
59
+ Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value])=>{
60
+ strapi1.get('webhookStore').addAllowedEvent(key, value);
61
+ });
62
+ }
63
+ };
64
+
65
+ export { bootstrap };
66
+ //# sourceMappingURL=bootstrap.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.mjs","sources":["../../server/src/bootstrap.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport type { Core, UID, Modules } from '@strapi/types';\n\nimport { RELEASE_ACTION_MODEL_UID, RELEASE_MODEL_UID, ALLOWED_WEBHOOK_EVENTS } from './constants';\nimport { getService } from './utils';\nimport { deleteActionsOnDelete, updateActionsOnUpdate } from './middlewares/documents';\n\ninterface DeleteManyParams {\n contentType: UID.ContentType;\n locale: string | null;\n entryDocumentId?: Modules.Documents.ID;\n}\n\nconst deleteReleasesActionsAndUpdateReleaseStatus = async (params: DeleteManyParams) => {\n const releases = await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n actions: params,\n },\n });\n\n await strapi.db.query(RELEASE_ACTION_MODEL_UID).deleteMany({\n where: params,\n });\n\n // We update the status of each release after delete the actions\n for (const release of releases) {\n getService('release', { strapi }).updateReleaseStatus(release.id);\n }\n};\n\nexport const bootstrap = async ({ strapi }: { strapi: Core.Strapi }) => {\n if (strapi.ee.features.isEnabled('cms-content-releases')) {\n const contentTypesWithDraftAndPublish = Object.keys(strapi.contentTypes).filter(\n (uid: any) => strapi.contentTypes[uid]?.options?.draftAndPublish\n );\n\n strapi.db.lifecycles.subscribe({\n models: contentTypesWithDraftAndPublish,\n\n /**\n * deleteMany is still used outside documents service, for example when deleting a locale\n */\n async afterDeleteMany(event) {\n try {\n const model = strapi.getModel(event.model.uid as UID.Schema);\n // @ts-expect-error TODO: lifecycles types looks like are not 100% finished\n if (model.kind === 'collectionType' && model.options?.draftAndPublish) {\n const { where } = event.params;\n\n deleteReleasesActionsAndUpdateReleaseStatus({\n contentType: model.uid,\n locale: where?.locale ?? null,\n ...(where?.documentId && { entryDocumentId: where.documentId }),\n });\n }\n } catch (error) {\n // If an error happens we don't want to block the delete entry flow, but we log the error\n strapi.log.error('Error while deleting release actions after entry deleteMany', {\n error,\n });\n }\n },\n });\n\n // We register middleware to handle ReleaseActions when changes on documents are made\n strapi.documents.use(deleteActionsOnDelete);\n strapi.documents.use(updateActionsOnUpdate);\n\n getService('scheduling', { strapi })\n .syncFromDatabase()\n .catch((err: Error) => {\n strapi.log.error(\n 'Error while syncing scheduled jobs from the database in the content-releases plugin. This could lead to errors in the releases scheduling.'\n );\n\n throw err;\n });\n\n Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {\n strapi.get('webhookStore').addAllowedEvent(key, value);\n });\n }\n};\n"],"names":["deleteReleasesActionsAndUpdateReleaseStatus","params","releases","strapi","db","query","RELEASE_MODEL_UID","findMany","where","actions","RELEASE_ACTION_MODEL_UID","deleteMany","release","getService","updateReleaseStatus","id","bootstrap","ee","features","isEnabled","contentTypesWithDraftAndPublish","Object","keys","contentTypes","filter","uid","options","draftAndPublish","lifecycles","subscribe","models","afterDeleteMany","event","model","getModel","kind","contentType","locale","documentId","entryDocumentId","error","log","documents","use","deleteActionsOnDelete","updateActionsOnUpdate","syncFromDatabase","catch","err","entries","ALLOWED_WEBHOOK_EVENTS","forEach","key","value","get","addAllowedEvent"],"mappings":";;;;AAaA,MAAMA,8CAA8C,OAAOC,MAAAA,GAAAA;IACzD,MAAMC,QAAAA,GAAW,MAAMC,MAAOC,CAAAA,EAAE,CAACC,KAAK,CAACC,iBAAmBC,CAAAA,CAAAA,QAAQ,CAAC;QACjEC,KAAO,EAAA;YACLC,OAASR,EAAAA;AACX;AACF,KAAA,CAAA;AAEA,IAAA,MAAME,OAAOC,EAAE,CAACC,KAAK,CAACK,wBAAAA,CAAAA,CAA0BC,UAAU,CAAC;QACzDH,KAAOP,EAAAA;AACT,KAAA,CAAA;;IAGA,KAAK,MAAMW,WAAWV,QAAU,CAAA;AAC9BW,QAAAA,UAAAA,CAAW,SAAW,EAAA;AAAEV,YAAAA;SAAUW,CAAAA,CAAAA,mBAAmB,CAACF,OAAAA,CAAQG,EAAE,CAAA;AAClE;AACF,CAAA;MAEaC,SAAY,GAAA,OAAO,EAAEb,MAAAA,EAAAA,OAAM,EAA2B,GAAA;AACjE,IAAA,IAAIA,QAAOc,EAAE,CAACC,QAAQ,CAACC,SAAS,CAAC,sBAAyB,CAAA,EAAA;AACxD,QAAA,MAAMC,kCAAkCC,MAAOC,CAAAA,IAAI,CAACnB,OAAAA,CAAOoB,YAAY,CAAEC,CAAAA,MAAM,CAC7E,CAACC,MAAatB,OAAOoB,CAAAA,YAAY,CAACE,GAAAA,CAAI,EAAEC,OAASC,EAAAA,eAAAA,CAAAA;AAGnDxB,QAAAA,OAAAA,CAAOC,EAAE,CAACwB,UAAU,CAACC,SAAS,CAAC;YAC7BC,MAAQV,EAAAA,+BAAAA;AAER;;UAGA,MAAMW,iBAAgBC,KAAK,EAAA;gBACzB,IAAI;AACF,oBAAA,MAAMC,QAAQ9B,OAAO+B,CAAAA,QAAQ,CAACF,KAAMC,CAAAA,KAAK,CAACR,GAAG,CAAA;;AAE7C,oBAAA,IAAIQ,MAAME,IAAI,KAAK,oBAAoBF,KAAMP,CAAAA,OAAO,EAAEC,eAAiB,EAAA;AACrE,wBAAA,MAAM,EAAEnB,KAAK,EAAE,GAAGwB,MAAM/B,MAAM;wBAE9BD,2CAA4C,CAAA;AAC1CoC,4BAAAA,WAAAA,EAAaH,MAAMR,GAAG;AACtBY,4BAAAA,MAAAA,EAAQ7B,OAAO6B,MAAU,IAAA,IAAA;AACzB,4BAAA,GAAI7B,OAAO8B,UAAc,IAAA;AAAEC,gCAAAA,eAAAA,EAAiB/B,MAAM8B;;AACpD,yBAAA,CAAA;AACF;AACF,iBAAA,CAAE,OAAOE,KAAO,EAAA;;AAEdrC,oBAAAA,OAAAA,CAAOsC,GAAG,CAACD,KAAK,CAAC,6DAA+D,EAAA;AAC9EA,wBAAAA;AACF,qBAAA,CAAA;AACF;AACF;AACF,SAAA,CAAA;;QAGArC,OAAOuC,CAAAA,SAAS,CAACC,GAAG,CAACC,qBAAAA,CAAAA;QACrBzC,OAAOuC,CAAAA,SAAS,CAACC,GAAG,CAACE,qBAAAA,CAAAA;AAErBhC,QAAAA,UAAAA,CAAW,YAAc,EAAA;YAAEV,MAAAA,EAAAA;AAAO,SAAA,CAAA,CAC/B2C,gBAAgB,EAAA,CAChBC,KAAK,CAAC,CAACC,GAAAA,GAAAA;YACN7C,OAAOsC,CAAAA,GAAG,CAACD,KAAK,CACd,4IAAA,CAAA;YAGF,MAAMQ,GAAAA;AACR,SAAA,CAAA;QAEF3B,MAAO4B,CAAAA,OAAO,CAACC,sBAAwBC,CAAAA,CAAAA,OAAO,CAAC,CAAC,CAACC,KAAKC,KAAM,CAAA,GAAA;AAC1DlD,YAAAA,OAAAA,CAAOmD,GAAG,CAAC,cAAgBC,CAAAA,CAAAA,eAAe,CAACH,GAAKC,EAAAA,KAAAA,CAAAA;AAClD,SAAA,CAAA;AACF;AACF;;;;"}