@strapi/content-releases 0.0.0-experimental.edc24aaa3bb5a90fa5fd4fee208167dd4e2e38d4 → 0.0.0-experimental.edd76a7dfed80cd2a11bc9cb105d222f9f5150b7

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 (295) hide show
  1. package/dist/admin/assets/purchase-page-illustration-dark.svg.js +6 -0
  2. package/dist/admin/assets/purchase-page-illustration-dark.svg.js.map +1 -0
  3. package/dist/admin/assets/purchase-page-illustration-dark.svg.mjs +4 -0
  4. package/dist/admin/assets/purchase-page-illustration-dark.svg.mjs.map +1 -0
  5. package/dist/admin/assets/purchase-page-illustration-light.svg.js +6 -0
  6. package/dist/admin/assets/purchase-page-illustration-light.svg.js.map +1 -0
  7. package/dist/admin/assets/purchase-page-illustration-light.svg.mjs +4 -0
  8. package/dist/admin/assets/purchase-page-illustration-light.svg.mjs.map +1 -0
  9. package/dist/admin/components/EntryValidationPopover.js +344 -0
  10. package/dist/admin/components/EntryValidationPopover.js.map +1 -0
  11. package/dist/admin/components/EntryValidationPopover.mjs +342 -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 +323 -0
  38. package/dist/admin/components/ReleaseModal.js.map +1 -0
  39. package/dist/admin/components/ReleaseModal.mjs +302 -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/constants.js +77 -0
  46. package/dist/admin/constants.js.map +1 -0
  47. package/dist/admin/constants.mjs +75 -0
  48. package/dist/admin/constants.mjs.map +1 -0
  49. package/dist/admin/index.js +125 -4
  50. package/dist/admin/index.js.map +1 -1
  51. package/dist/admin/index.mjs +120 -4
  52. package/dist/admin/index.mjs.map +1 -1
  53. package/dist/admin/modules/hooks.js +8 -0
  54. package/dist/admin/modules/hooks.js.map +1 -0
  55. package/dist/admin/modules/hooks.mjs +6 -0
  56. package/dist/admin/modules/hooks.mjs.map +1 -0
  57. package/dist/admin/pages/App.js +29 -0
  58. package/dist/admin/pages/App.js.map +1 -0
  59. package/dist/admin/pages/App.mjs +27 -0
  60. package/dist/admin/pages/App.mjs.map +1 -0
  61. package/dist/admin/pages/PurchaseContentReleases.js +192 -0
  62. package/dist/admin/pages/PurchaseContentReleases.js.map +1 -0
  63. package/dist/admin/pages/PurchaseContentReleases.mjs +190 -0
  64. package/dist/admin/pages/PurchaseContentReleases.mjs.map +1 -0
  65. package/dist/admin/pages/ReleaseDetailsPage.js +772 -0
  66. package/dist/admin/pages/ReleaseDetailsPage.js.map +1 -0
  67. package/dist/admin/pages/ReleaseDetailsPage.mjs +751 -0
  68. package/dist/admin/pages/ReleaseDetailsPage.mjs.map +1 -0
  69. package/dist/admin/pages/ReleasesPage.js +403 -0
  70. package/dist/admin/pages/ReleasesPage.js.map +1 -0
  71. package/dist/admin/pages/ReleasesPage.mjs +381 -0
  72. package/dist/admin/pages/ReleasesPage.mjs.map +1 -0
  73. package/dist/admin/pages/ReleasesSettingsPage.js +225 -0
  74. package/dist/admin/pages/ReleasesSettingsPage.js.map +1 -0
  75. package/dist/admin/pages/ReleasesSettingsPage.mjs +223 -0
  76. package/dist/admin/pages/ReleasesSettingsPage.mjs.map +1 -0
  77. package/dist/admin/pluginId.js +6 -0
  78. package/dist/admin/pluginId.js.map +1 -0
  79. package/dist/admin/pluginId.mjs +4 -0
  80. package/dist/admin/pluginId.mjs.map +1 -0
  81. package/dist/admin/services/release.js +464 -0
  82. package/dist/admin/services/release.js.map +1 -0
  83. package/dist/admin/services/release.mjs +447 -0
  84. package/dist/admin/services/release.mjs.map +1 -0
  85. package/dist/admin/src/components/EntryValidationPopover.d.ts +13 -0
  86. package/dist/admin/src/components/ReleaseListCell.d.ts +28 -0
  87. package/dist/admin/src/services/release.d.ts +34 -32
  88. package/dist/admin/store/hooks.js +8 -0
  89. package/dist/admin/store/hooks.js.map +1 -0
  90. package/dist/admin/store/hooks.mjs +6 -0
  91. package/dist/admin/store/hooks.mjs.map +1 -0
  92. package/dist/admin/translations/en.json.js +108 -0
  93. package/dist/admin/translations/en.json.js.map +1 -0
  94. package/dist/admin/translations/en.json.mjs +106 -0
  95. package/dist/admin/translations/en.json.mjs.map +1 -0
  96. package/dist/admin/translations/uk.json.js +103 -0
  97. package/dist/admin/translations/uk.json.js.map +1 -0
  98. package/dist/admin/translations/uk.json.mjs +101 -0
  99. package/dist/admin/translations/uk.json.mjs.map +1 -0
  100. package/dist/admin/utils/api.js +8 -0
  101. package/dist/admin/utils/api.js.map +1 -0
  102. package/dist/admin/utils/api.mjs +6 -0
  103. package/dist/admin/utils/api.mjs.map +1 -0
  104. package/dist/admin/utils/prefixPluginTranslations.js +11 -0
  105. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
  106. package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
  107. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
  108. package/dist/admin/utils/time.js +42 -0
  109. package/dist/admin/utils/time.js.map +1 -0
  110. package/dist/admin/utils/time.mjs +39 -0
  111. package/dist/admin/utils/time.mjs.map +1 -0
  112. package/dist/admin/validation/schemas.js +65 -0
  113. package/dist/admin/validation/schemas.js.map +1 -0
  114. package/dist/admin/validation/schemas.mjs +43 -0
  115. package/dist/admin/validation/schemas.mjs.map +1 -0
  116. package/dist/server/bootstrap.js +68 -0
  117. package/dist/server/bootstrap.js.map +1 -0
  118. package/dist/server/bootstrap.mjs +66 -0
  119. package/dist/server/bootstrap.mjs.map +1 -0
  120. package/dist/server/constants.js +74 -0
  121. package/dist/server/constants.js.map +1 -0
  122. package/dist/server/constants.mjs +69 -0
  123. package/dist/server/constants.mjs.map +1 -0
  124. package/dist/server/content-types/index.js +12 -0
  125. package/dist/server/content-types/index.js.map +1 -0
  126. package/dist/server/content-types/index.mjs +10 -0
  127. package/dist/server/content-types/index.mjs.map +1 -0
  128. package/dist/server/content-types/release/index.js +10 -0
  129. package/dist/server/content-types/release/index.js.map +1 -0
  130. package/dist/server/content-types/release/index.mjs +8 -0
  131. package/dist/server/content-types/release/index.mjs.map +1 -0
  132. package/dist/server/content-types/release/schema.js +58 -0
  133. package/dist/server/content-types/release/schema.js.map +1 -0
  134. package/dist/server/content-types/release/schema.mjs +56 -0
  135. package/dist/server/content-types/release/schema.mjs.map +1 -0
  136. package/dist/server/content-types/release-action/index.js +10 -0
  137. package/dist/server/content-types/release-action/index.js.map +1 -0
  138. package/dist/server/content-types/release-action/index.mjs +8 -0
  139. package/dist/server/content-types/release-action/index.mjs.map +1 -0
  140. package/dist/server/content-types/release-action/schema.js +55 -0
  141. package/dist/server/content-types/release-action/schema.js.map +1 -0
  142. package/dist/server/content-types/release-action/schema.mjs +53 -0
  143. package/dist/server/content-types/release-action/schema.mjs.map +1 -0
  144. package/dist/server/controllers/index.js +14 -0
  145. package/dist/server/controllers/index.js.map +1 -0
  146. package/dist/server/controllers/index.mjs +12 -0
  147. package/dist/server/controllers/index.mjs.map +1 -0
  148. package/dist/server/controllers/release-action.js +150 -0
  149. package/dist/server/controllers/release-action.js.map +1 -0
  150. package/dist/server/controllers/release-action.mjs +148 -0
  151. package/dist/server/controllers/release-action.mjs.map +1 -0
  152. package/dist/server/controllers/release.js +302 -0
  153. package/dist/server/controllers/release.js.map +1 -0
  154. package/dist/server/controllers/release.mjs +300 -0
  155. package/dist/server/controllers/release.mjs.map +1 -0
  156. package/dist/server/controllers/settings.js +37 -0
  157. package/dist/server/controllers/settings.js.map +1 -0
  158. package/dist/server/controllers/settings.mjs +35 -0
  159. package/dist/server/controllers/settings.mjs.map +1 -0
  160. package/dist/server/controllers/validation/release-action.js +34 -0
  161. package/dist/server/controllers/validation/release-action.js.map +1 -0
  162. package/dist/server/controllers/validation/release-action.mjs +30 -0
  163. package/dist/server/controllers/validation/release-action.mjs.map +1 -0
  164. package/dist/server/controllers/validation/release.js +26 -0
  165. package/dist/server/controllers/validation/release.js.map +1 -0
  166. package/dist/server/controllers/validation/release.mjs +22 -0
  167. package/dist/server/controllers/validation/release.mjs.map +1 -0
  168. package/dist/server/controllers/validation/settings.js +32 -0
  169. package/dist/server/controllers/validation/settings.js.map +1 -0
  170. package/dist/server/controllers/validation/settings.mjs +10 -0
  171. package/dist/server/controllers/validation/settings.mjs.map +1 -0
  172. package/dist/server/destroy.js +15 -0
  173. package/dist/server/destroy.js.map +1 -0
  174. package/dist/server/destroy.mjs +13 -0
  175. package/dist/server/destroy.mjs.map +1 -0
  176. package/dist/server/index.js +25 -1947
  177. package/dist/server/index.js.map +1 -1
  178. package/dist/server/index.mjs +24 -1927
  179. package/dist/server/index.mjs.map +1 -1
  180. package/dist/server/middlewares/documents.js +104 -0
  181. package/dist/server/middlewares/documents.js.map +1 -0
  182. package/dist/server/middlewares/documents.mjs +101 -0
  183. package/dist/server/middlewares/documents.mjs.map +1 -0
  184. package/dist/server/migrations/database/5.0.0-document-id-in-actions.js +51 -0
  185. package/dist/server/migrations/database/5.0.0-document-id-in-actions.js.map +1 -0
  186. package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs +49 -0
  187. package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs.map +1 -0
  188. package/dist/server/migrations/index.js +205 -0
  189. package/dist/server/migrations/index.js.map +1 -0
  190. package/dist/server/migrations/index.mjs +198 -0
  191. package/dist/server/migrations/index.mjs.map +1 -0
  192. package/dist/server/register.js +23 -0
  193. package/dist/server/register.js.map +1 -0
  194. package/dist/server/register.mjs +21 -0
  195. package/dist/server/register.mjs.map +1 -0
  196. package/dist/server/routes/index.js +14 -0
  197. package/dist/server/routes/index.js.map +1 -0
  198. package/dist/server/routes/index.mjs +12 -0
  199. package/dist/server/routes/index.mjs.map +1 -0
  200. package/dist/server/routes/release-action.js +100 -0
  201. package/dist/server/routes/release-action.js.map +1 -0
  202. package/dist/server/routes/release-action.mjs +98 -0
  203. package/dist/server/routes/release-action.mjs.map +1 -0
  204. package/dist/server/routes/release.js +154 -0
  205. package/dist/server/routes/release.js.map +1 -0
  206. package/dist/server/routes/release.mjs +152 -0
  207. package/dist/server/routes/release.mjs.map +1 -0
  208. package/dist/server/routes/settings.js +46 -0
  209. package/dist/server/routes/settings.js.map +1 -0
  210. package/dist/server/routes/settings.mjs +44 -0
  211. package/dist/server/routes/settings.mjs.map +1 -0
  212. package/dist/server/services/index.js +18 -0
  213. package/dist/server/services/index.js.map +1 -0
  214. package/dist/server/services/index.mjs +16 -0
  215. package/dist/server/services/index.mjs.map +1 -0
  216. package/dist/server/services/release-action.js +324 -0
  217. package/dist/server/services/release-action.js.map +1 -0
  218. package/dist/server/services/release-action.mjs +322 -0
  219. package/dist/server/services/release-action.mjs.map +1 -0
  220. package/dist/server/services/release.js +324 -0
  221. package/dist/server/services/release.js.map +1 -0
  222. package/dist/server/services/release.mjs +322 -0
  223. package/dist/server/services/release.mjs.map +1 -0
  224. package/dist/server/services/scheduling.js +70 -0
  225. package/dist/server/services/scheduling.js.map +1 -0
  226. package/dist/server/services/scheduling.mjs +68 -0
  227. package/dist/server/services/scheduling.mjs.map +1 -0
  228. package/dist/server/services/settings.js +34 -0
  229. package/dist/server/services/settings.js.map +1 -0
  230. package/dist/server/services/settings.mjs +32 -0
  231. package/dist/server/services/settings.mjs.map +1 -0
  232. package/dist/server/services/validation.js +91 -0
  233. package/dist/server/services/validation.js.map +1 -0
  234. package/dist/server/services/validation.mjs +86 -0
  235. package/dist/server/services/validation.mjs.map +1 -0
  236. package/dist/server/src/controllers/index.d.ts +2 -0
  237. package/dist/server/src/controllers/index.d.ts.map +1 -1
  238. package/dist/server/src/controllers/release-action.d.ts +1 -0
  239. package/dist/server/src/controllers/release-action.d.ts.map +1 -1
  240. package/dist/server/src/controllers/release.d.ts +1 -0
  241. package/dist/server/src/controllers/release.d.ts.map +1 -1
  242. package/dist/server/src/destroy.d.ts +1 -1
  243. package/dist/server/src/destroy.d.ts.map +1 -1
  244. package/dist/server/src/index.d.ts +6 -6
  245. package/dist/server/src/middlewares/documents.d.ts +1 -1
  246. package/dist/server/src/middlewares/documents.d.ts.map +1 -1
  247. package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts.map +1 -1
  248. package/dist/server/src/routes/release-action.d.ts.map +1 -1
  249. package/dist/server/src/routes/release.d.ts.map +1 -1
  250. package/dist/server/src/services/index.d.ts +4 -6
  251. package/dist/server/src/services/index.d.ts.map +1 -1
  252. package/dist/server/src/services/release-action.d.ts +6 -8
  253. package/dist/server/src/services/release-action.d.ts.map +1 -1
  254. package/dist/server/src/services/scheduling.d.ts +1 -1
  255. package/dist/server/src/services/scheduling.d.ts.map +1 -1
  256. package/dist/server/src/services/validation.d.ts +1 -1
  257. package/dist/server/src/services/validation.d.ts.map +1 -1
  258. package/dist/server/src/utils/index.d.ts.map +1 -1
  259. package/dist/server/utils/index.js +94 -0
  260. package/dist/server/utils/index.js.map +1 -0
  261. package/dist/server/utils/index.mjs +88 -0
  262. package/dist/server/utils/index.mjs.map +1 -0
  263. package/dist/shared/contracts/release-actions.d.ts +11 -7
  264. package/dist/shared/contracts/release-actions.d.ts.map +1 -1
  265. package/dist/shared/contracts/releases.d.ts +3 -3
  266. package/dist/shared/contracts/releases.d.ts.map +1 -1
  267. package/dist/shared/contracts/settings.d.ts +1 -2
  268. package/dist/shared/contracts/settings.d.ts.map +1 -1
  269. package/dist/shared/types.d.ts +0 -1
  270. package/package.json +24 -20
  271. package/dist/_chunks/App-D-lWdVb2.js +0 -1372
  272. package/dist/_chunks/App-D-lWdVb2.js.map +0 -1
  273. package/dist/_chunks/App-UQxgTJY5.mjs +0 -1351
  274. package/dist/_chunks/App-UQxgTJY5.mjs.map +0 -1
  275. package/dist/_chunks/PurchaseContentReleases-Be3acS2L.js +0 -52
  276. package/dist/_chunks/PurchaseContentReleases-Be3acS2L.js.map +0 -1
  277. package/dist/_chunks/PurchaseContentReleases-_MxP6-Dt.mjs +0 -52
  278. package/dist/_chunks/PurchaseContentReleases-_MxP6-Dt.mjs.map +0 -1
  279. package/dist/_chunks/ReleasesSettingsPage-CuUXvABk.mjs +0 -178
  280. package/dist/_chunks/ReleasesSettingsPage-CuUXvABk.mjs.map +0 -1
  281. package/dist/_chunks/ReleasesSettingsPage-xfAoY8N3.js +0 -178
  282. package/dist/_chunks/ReleasesSettingsPage-xfAoY8N3.js.map +0 -1
  283. package/dist/_chunks/en-BCDLTJn3.js +0 -92
  284. package/dist/_chunks/en-BCDLTJn3.js.map +0 -1
  285. package/dist/_chunks/en-CGXIF4vQ.mjs +0 -92
  286. package/dist/_chunks/en-CGXIF4vQ.mjs.map +0 -1
  287. package/dist/_chunks/index-b3Ej95H7.mjs +0 -1099
  288. package/dist/_chunks/index-b3Ej95H7.mjs.map +0 -1
  289. package/dist/_chunks/index-jnv9zdcE.js +0 -1118
  290. package/dist/_chunks/index-jnv9zdcE.js.map +0 -1
  291. package/dist/_chunks/schemas-63pFihNF.mjs +0 -44
  292. package/dist/_chunks/schemas-63pFihNF.mjs.map +0 -1
  293. package/dist/_chunks/schemas-z5zp-_Gd.js +0 -62
  294. package/dist/_chunks/schemas-z5zp-_Gd.js.map +0 -1
  295. package/strapi-server.js +0 -3
@@ -0,0 +1,91 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var utils = require('@strapi/utils');
6
+ var constants = require('../constants.js');
7
+
8
+ class AlreadyOnReleaseError extends utils.errors.ApplicationError {
9
+ constructor(message){
10
+ super(message);
11
+ this.name = 'AlreadyOnReleaseError';
12
+ }
13
+ }
14
+ const createReleaseValidationService = ({ strapi })=>({
15
+ async validateUniqueEntry (releaseId, releaseActionArgs) {
16
+ /**
17
+ * Asserting the type, otherwise TS complains: 'release.actions' is of type 'unknown', even though the types come through for non-populated fields...
18
+ * Possibly related to the comment on GetValues: https://github.com/strapi/strapi/blob/main/packages/core/types/src/modules/entity-service/result.ts
19
+ */ const release = await strapi.db.query(constants.RELEASE_MODEL_UID).findOne({
20
+ where: {
21
+ id: releaseId
22
+ },
23
+ populate: {
24
+ actions: true
25
+ }
26
+ });
27
+ if (!release) {
28
+ throw new utils.errors.NotFoundError(`No release found for id ${releaseId}`);
29
+ }
30
+ const isEntryInRelease = release.actions.some((action)=>action.entryDocumentId === releaseActionArgs.entryDocumentId && action.contentType === releaseActionArgs.contentType && (releaseActionArgs.locale ? action.locale === releaseActionArgs.locale : true));
31
+ if (isEntryInRelease) {
32
+ throw new AlreadyOnReleaseError(`Entry with documentId ${releaseActionArgs.entryDocumentId}${releaseActionArgs.locale ? `( ${releaseActionArgs.locale})` : ''} and contentType ${releaseActionArgs.contentType} already exists in release with id ${releaseId}`);
33
+ }
34
+ },
35
+ validateEntryData (contentTypeUid, entryDocumentId) {
36
+ const contentType = strapi.contentType(contentTypeUid);
37
+ if (!contentType) {
38
+ throw new utils.errors.NotFoundError(`No content type found for uid ${contentTypeUid}`);
39
+ }
40
+ if (!utils.contentTypes.hasDraftAndPublish(contentType)) {
41
+ throw new utils.errors.ValidationError(`Content type with uid ${contentTypeUid} does not have draftAndPublish enabled`);
42
+ }
43
+ if (contentType.kind === 'collectionType' && !entryDocumentId) {
44
+ throw new utils.errors.ValidationError('Document id is required for collection type');
45
+ }
46
+ },
47
+ async validatePendingReleasesLimit () {
48
+ // Use the maximum releases option if it exists, otherwise default to 3
49
+ const featureCfg = strapi.ee.features.get('cms-content-releases');
50
+ const maximumPendingReleases = typeof featureCfg === 'object' && featureCfg?.options?.maximumReleases || 3;
51
+ const [, pendingReleasesCount] = await strapi.db.query(constants.RELEASE_MODEL_UID).findWithCount({
52
+ filters: {
53
+ releasedAt: {
54
+ $null: true
55
+ }
56
+ }
57
+ });
58
+ // Unlimited is a number that will never be reached like 9999
59
+ if (pendingReleasesCount >= maximumPendingReleases) {
60
+ throw new utils.errors.ValidationError('You have reached the maximum number of pending releases');
61
+ }
62
+ },
63
+ async validateUniqueNameForPendingRelease (name, id) {
64
+ const pendingReleases = await strapi.db.query(constants.RELEASE_MODEL_UID).findMany({
65
+ where: {
66
+ releasedAt: {
67
+ $null: true
68
+ },
69
+ name,
70
+ ...id && {
71
+ id: {
72
+ $ne: id
73
+ }
74
+ }
75
+ }
76
+ });
77
+ const isNameUnique = pendingReleases.length === 0;
78
+ if (!isNameUnique) {
79
+ throw new utils.errors.ValidationError(`Release with name ${name} already exists`);
80
+ }
81
+ },
82
+ async validateScheduledAtIsLaterThanNow (scheduledAt) {
83
+ if (scheduledAt && new Date(scheduledAt) <= new Date()) {
84
+ throw new utils.errors.ValidationError('Scheduled at must be later than now');
85
+ }
86
+ }
87
+ });
88
+
89
+ exports.AlreadyOnReleaseError = AlreadyOnReleaseError;
90
+ exports.default = createReleaseValidationService;
91
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sources":["../../../server/src/services/validation.ts"],"sourcesContent":["import { errors, contentTypes } from '@strapi/utils';\nimport type { Core, UID } from '@strapi/types';\nimport type { Release, CreateRelease, UpdateRelease } from '../../../shared/contracts/releases';\nimport type { CreateReleaseAction } from '../../../shared/contracts/release-actions';\nimport { RELEASE_MODEL_UID } from '../constants';\n\nexport class AlreadyOnReleaseError extends errors.ApplicationError<'AlreadyOnReleaseError'> {\n constructor(message: string) {\n super(message);\n this.name = 'AlreadyOnReleaseError';\n }\n}\n\nconst createReleaseValidationService = ({ strapi }: { strapi: Core.Strapi }) => ({\n async validateUniqueEntry(\n releaseId: CreateReleaseAction.Request['params']['releaseId'],\n releaseActionArgs: CreateReleaseAction.Request['body']\n ) {\n /**\n * Asserting the type, otherwise TS complains: 'release.actions' is of type 'unknown', even though the types come through for non-populated fields...\n * Possibly related to the comment on GetValues: https://github.com/strapi/strapi/blob/main/packages/core/types/src/modules/entity-service/result.ts\n */\n const release = (await strapi.db.query(RELEASE_MODEL_UID).findOne({\n where: {\n id: releaseId,\n },\n populate: {\n actions: true,\n },\n })) as Release | null;\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n const isEntryInRelease = release.actions.some(\n (action) =>\n action.entryDocumentId === releaseActionArgs.entryDocumentId &&\n action.contentType === releaseActionArgs.contentType &&\n (releaseActionArgs.locale ? action.locale === releaseActionArgs.locale : true)\n );\n\n if (isEntryInRelease) {\n throw new AlreadyOnReleaseError(\n `Entry with documentId ${releaseActionArgs.entryDocumentId}${releaseActionArgs.locale ? `( ${releaseActionArgs.locale})` : ''} and contentType ${releaseActionArgs.contentType} already exists in release with id ${releaseId}`\n );\n }\n },\n validateEntryData(\n contentTypeUid: CreateReleaseAction.Request['body']['contentType'],\n entryDocumentId: CreateReleaseAction.Request['body']['entryDocumentId']\n ) {\n const contentType = strapi.contentType(contentTypeUid as UID.ContentType);\n\n if (!contentType) {\n throw new errors.NotFoundError(`No content type found for uid ${contentTypeUid}`);\n }\n\n if (!contentTypes.hasDraftAndPublish(contentType)) {\n throw new errors.ValidationError(\n `Content type with uid ${contentTypeUid} does not have draftAndPublish enabled`\n );\n }\n\n if (contentType.kind === 'collectionType' && !entryDocumentId) {\n throw new errors.ValidationError('Document id is required for collection type');\n }\n },\n async validatePendingReleasesLimit() {\n // Use the maximum releases option if it exists, otherwise default to 3\n const featureCfg = strapi.ee.features.get('cms-content-releases');\n\n const maximumPendingReleases =\n (typeof featureCfg === 'object' && featureCfg?.options?.maximumReleases) || 3;\n\n const [, pendingReleasesCount] = await strapi.db.query(RELEASE_MODEL_UID).findWithCount({\n filters: {\n releasedAt: {\n $null: true,\n },\n },\n });\n\n // Unlimited is a number that will never be reached like 9999\n if (pendingReleasesCount >= maximumPendingReleases) {\n throw new errors.ValidationError('You have reached the maximum number of pending releases');\n }\n },\n async validateUniqueNameForPendingRelease(\n name: CreateRelease.Request['body']['name'],\n id?: UpdateRelease.Request['params']['id']\n ) {\n const pendingReleases = (await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n releasedAt: {\n $null: true,\n },\n name,\n ...(id && { id: { $ne: id } }),\n },\n })) as Release[];\n\n const isNameUnique = pendingReleases.length === 0;\n\n if (!isNameUnique) {\n throw new errors.ValidationError(`Release with name ${name} already exists`);\n }\n },\n async validateScheduledAtIsLaterThanNow(\n scheduledAt: CreateRelease.Request['body']['scheduledAt']\n ) {\n if (scheduledAt && new Date(scheduledAt) <= new Date()) {\n throw new errors.ValidationError('Scheduled at must be later than now');\n }\n },\n});\n\nexport default createReleaseValidationService;\n"],"names":["AlreadyOnReleaseError","errors","ApplicationError","constructor","message","name","createReleaseValidationService","strapi","validateUniqueEntry","releaseId","releaseActionArgs","release","db","query","RELEASE_MODEL_UID","findOne","where","id","populate","actions","NotFoundError","isEntryInRelease","some","action","entryDocumentId","contentType","locale","validateEntryData","contentTypeUid","contentTypes","hasDraftAndPublish","ValidationError","kind","validatePendingReleasesLimit","featureCfg","ee","features","get","maximumPendingReleases","options","maximumReleases","pendingReleasesCount","findWithCount","filters","releasedAt","$null","validateUniqueNameForPendingRelease","pendingReleases","findMany","$ne","isNameUnique","length","validateScheduledAtIsLaterThanNow","scheduledAt","Date"],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ import { errors, contentTypes } from '@strapi/utils';
2
+ import { RELEASE_MODEL_UID } from '../constants.mjs';
3
+
4
+ class AlreadyOnReleaseError extends errors.ApplicationError {
5
+ constructor(message){
6
+ super(message);
7
+ this.name = 'AlreadyOnReleaseError';
8
+ }
9
+ }
10
+ const createReleaseValidationService = ({ strapi })=>({
11
+ async validateUniqueEntry (releaseId, releaseActionArgs) {
12
+ /**
13
+ * Asserting the type, otherwise TS complains: 'release.actions' is of type 'unknown', even though the types come through for non-populated fields...
14
+ * Possibly related to the comment on GetValues: https://github.com/strapi/strapi/blob/main/packages/core/types/src/modules/entity-service/result.ts
15
+ */ const release = await strapi.db.query(RELEASE_MODEL_UID).findOne({
16
+ where: {
17
+ id: releaseId
18
+ },
19
+ populate: {
20
+ actions: true
21
+ }
22
+ });
23
+ if (!release) {
24
+ throw new errors.NotFoundError(`No release found for id ${releaseId}`);
25
+ }
26
+ const isEntryInRelease = release.actions.some((action)=>action.entryDocumentId === releaseActionArgs.entryDocumentId && action.contentType === releaseActionArgs.contentType && (releaseActionArgs.locale ? action.locale === releaseActionArgs.locale : true));
27
+ if (isEntryInRelease) {
28
+ throw new AlreadyOnReleaseError(`Entry with documentId ${releaseActionArgs.entryDocumentId}${releaseActionArgs.locale ? `( ${releaseActionArgs.locale})` : ''} and contentType ${releaseActionArgs.contentType} already exists in release with id ${releaseId}`);
29
+ }
30
+ },
31
+ validateEntryData (contentTypeUid, entryDocumentId) {
32
+ const contentType = strapi.contentType(contentTypeUid);
33
+ if (!contentType) {
34
+ throw new errors.NotFoundError(`No content type found for uid ${contentTypeUid}`);
35
+ }
36
+ if (!contentTypes.hasDraftAndPublish(contentType)) {
37
+ throw new errors.ValidationError(`Content type with uid ${contentTypeUid} does not have draftAndPublish enabled`);
38
+ }
39
+ if (contentType.kind === 'collectionType' && !entryDocumentId) {
40
+ throw new errors.ValidationError('Document id is required for collection type');
41
+ }
42
+ },
43
+ async validatePendingReleasesLimit () {
44
+ // Use the maximum releases option if it exists, otherwise default to 3
45
+ const featureCfg = strapi.ee.features.get('cms-content-releases');
46
+ const maximumPendingReleases = typeof featureCfg === 'object' && featureCfg?.options?.maximumReleases || 3;
47
+ const [, pendingReleasesCount] = await strapi.db.query(RELEASE_MODEL_UID).findWithCount({
48
+ filters: {
49
+ releasedAt: {
50
+ $null: true
51
+ }
52
+ }
53
+ });
54
+ // Unlimited is a number that will never be reached like 9999
55
+ if (pendingReleasesCount >= maximumPendingReleases) {
56
+ throw new errors.ValidationError('You have reached the maximum number of pending releases');
57
+ }
58
+ },
59
+ async validateUniqueNameForPendingRelease (name, id) {
60
+ const pendingReleases = await strapi.db.query(RELEASE_MODEL_UID).findMany({
61
+ where: {
62
+ releasedAt: {
63
+ $null: true
64
+ },
65
+ name,
66
+ ...id && {
67
+ id: {
68
+ $ne: id
69
+ }
70
+ }
71
+ }
72
+ });
73
+ const isNameUnique = pendingReleases.length === 0;
74
+ if (!isNameUnique) {
75
+ throw new errors.ValidationError(`Release with name ${name} already exists`);
76
+ }
77
+ },
78
+ async validateScheduledAtIsLaterThanNow (scheduledAt) {
79
+ if (scheduledAt && new Date(scheduledAt) <= new Date()) {
80
+ throw new errors.ValidationError('Scheduled at must be later than now');
81
+ }
82
+ }
83
+ });
84
+
85
+ export { AlreadyOnReleaseError, createReleaseValidationService as default };
86
+ //# sourceMappingURL=validation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.mjs","sources":["../../../server/src/services/validation.ts"],"sourcesContent":["import { errors, contentTypes } from '@strapi/utils';\nimport type { Core, UID } from '@strapi/types';\nimport type { Release, CreateRelease, UpdateRelease } from '../../../shared/contracts/releases';\nimport type { CreateReleaseAction } from '../../../shared/contracts/release-actions';\nimport { RELEASE_MODEL_UID } from '../constants';\n\nexport class AlreadyOnReleaseError extends errors.ApplicationError<'AlreadyOnReleaseError'> {\n constructor(message: string) {\n super(message);\n this.name = 'AlreadyOnReleaseError';\n }\n}\n\nconst createReleaseValidationService = ({ strapi }: { strapi: Core.Strapi }) => ({\n async validateUniqueEntry(\n releaseId: CreateReleaseAction.Request['params']['releaseId'],\n releaseActionArgs: CreateReleaseAction.Request['body']\n ) {\n /**\n * Asserting the type, otherwise TS complains: 'release.actions' is of type 'unknown', even though the types come through for non-populated fields...\n * Possibly related to the comment on GetValues: https://github.com/strapi/strapi/blob/main/packages/core/types/src/modules/entity-service/result.ts\n */\n const release = (await strapi.db.query(RELEASE_MODEL_UID).findOne({\n where: {\n id: releaseId,\n },\n populate: {\n actions: true,\n },\n })) as Release | null;\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n const isEntryInRelease = release.actions.some(\n (action) =>\n action.entryDocumentId === releaseActionArgs.entryDocumentId &&\n action.contentType === releaseActionArgs.contentType &&\n (releaseActionArgs.locale ? action.locale === releaseActionArgs.locale : true)\n );\n\n if (isEntryInRelease) {\n throw new AlreadyOnReleaseError(\n `Entry with documentId ${releaseActionArgs.entryDocumentId}${releaseActionArgs.locale ? `( ${releaseActionArgs.locale})` : ''} and contentType ${releaseActionArgs.contentType} already exists in release with id ${releaseId}`\n );\n }\n },\n validateEntryData(\n contentTypeUid: CreateReleaseAction.Request['body']['contentType'],\n entryDocumentId: CreateReleaseAction.Request['body']['entryDocumentId']\n ) {\n const contentType = strapi.contentType(contentTypeUid as UID.ContentType);\n\n if (!contentType) {\n throw new errors.NotFoundError(`No content type found for uid ${contentTypeUid}`);\n }\n\n if (!contentTypes.hasDraftAndPublish(contentType)) {\n throw new errors.ValidationError(\n `Content type with uid ${contentTypeUid} does not have draftAndPublish enabled`\n );\n }\n\n if (contentType.kind === 'collectionType' && !entryDocumentId) {\n throw new errors.ValidationError('Document id is required for collection type');\n }\n },\n async validatePendingReleasesLimit() {\n // Use the maximum releases option if it exists, otherwise default to 3\n const featureCfg = strapi.ee.features.get('cms-content-releases');\n\n const maximumPendingReleases =\n (typeof featureCfg === 'object' && featureCfg?.options?.maximumReleases) || 3;\n\n const [, pendingReleasesCount] = await strapi.db.query(RELEASE_MODEL_UID).findWithCount({\n filters: {\n releasedAt: {\n $null: true,\n },\n },\n });\n\n // Unlimited is a number that will never be reached like 9999\n if (pendingReleasesCount >= maximumPendingReleases) {\n throw new errors.ValidationError('You have reached the maximum number of pending releases');\n }\n },\n async validateUniqueNameForPendingRelease(\n name: CreateRelease.Request['body']['name'],\n id?: UpdateRelease.Request['params']['id']\n ) {\n const pendingReleases = (await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n releasedAt: {\n $null: true,\n },\n name,\n ...(id && { id: { $ne: id } }),\n },\n })) as Release[];\n\n const isNameUnique = pendingReleases.length === 0;\n\n if (!isNameUnique) {\n throw new errors.ValidationError(`Release with name ${name} already exists`);\n }\n },\n async validateScheduledAtIsLaterThanNow(\n scheduledAt: CreateRelease.Request['body']['scheduledAt']\n ) {\n if (scheduledAt && new Date(scheduledAt) <= new Date()) {\n throw new errors.ValidationError('Scheduled at must be later than now');\n }\n },\n});\n\nexport default createReleaseValidationService;\n"],"names":["AlreadyOnReleaseError","errors","ApplicationError","constructor","message","name","createReleaseValidationService","strapi","validateUniqueEntry","releaseId","releaseActionArgs","release","db","query","RELEASE_MODEL_UID","findOne","where","id","populate","actions","NotFoundError","isEntryInRelease","some","action","entryDocumentId","contentType","locale","validateEntryData","contentTypeUid","contentTypes","hasDraftAndPublish","ValidationError","kind","validatePendingReleasesLimit","featureCfg","ee","features","get","maximumPendingReleases","options","maximumReleases","pendingReleasesCount","findWithCount","filters","releasedAt","$null","validateUniqueNameForPendingRelease","pendingReleases","findMany","$ne","isNameUnique","length","validateScheduledAtIsLaterThanNow","scheduledAt","Date"],"mappings":"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"}
@@ -4,6 +4,7 @@ export declare const controllers: {
4
4
  findByDocumentAttached(ctx: import("koa").Context): Promise<void>;
5
5
  findPage(ctx: import("koa").Context): Promise<void>;
6
6
  findOne(ctx: import("koa").Context): Promise<void>;
7
+ mapEntriesToReleases(ctx: import("koa").Context): Promise<void>;
7
8
  create(ctx: import("koa").Context): Promise<void>;
8
9
  update(ctx: import("koa").Context): Promise<void>;
9
10
  delete(ctx: import("koa").Context): Promise<void>;
@@ -11,6 +12,7 @@ export declare const controllers: {
11
12
  };
12
13
  'release-action': {
13
14
  create(ctx: import("koa").Context): Promise<void>;
15
+ createMany(ctx: import("koa").Context): Promise<void>;
14
16
  findMany(ctx: import("koa").Context): Promise<void>;
15
17
  update(ctx: import("koa").Context): Promise<void>;
16
18
  delete(ctx: import("koa").Context): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/index.ts"],"names":[],"mappings":";AAIA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;CAIvB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/index.ts"],"names":[],"mappings":";AAIA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;CAIvB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import type Koa from 'koa';
2
2
  declare const releaseActionController: {
3
3
  create(ctx: Koa.Context): Promise<void>;
4
+ createMany(ctx: Koa.Context): Promise<void>;
4
5
  findMany(ctx: Koa.Context): Promise<void>;
5
6
  update(ctx: Koa.Context): Promise<void>;
6
7
  delete(ctx: Koa.Context): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"release-action.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/release-action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAmB3B,QAAA,MAAM,uBAAuB;gBACT,IAAI,OAAO;kBAkDT,IAAI,OAAO;gBA2Eb,IAAI,OAAO;gBAoBX,IAAI,OAAO;CAY9B,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
1
+ {"version":3,"file":"release-action.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/release-action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAmB3B,QAAA,MAAM,uBAAuB;gBACT,IAAI,OAAO;oBAcP,IAAI,OAAO;kBA8Cb,IAAI,OAAO;gBA2Eb,IAAI,OAAO;gBAoBX,IAAI,OAAO;CAY9B,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
@@ -8,6 +8,7 @@ declare const releaseController: {
8
8
  findByDocumentAttached(ctx: Koa.Context): Promise<void>;
9
9
  findPage(ctx: Koa.Context): Promise<void>;
10
10
  findOne(ctx: Koa.Context): Promise<void>;
11
+ mapEntriesToReleases(ctx: Koa.Context): Promise<void>;
11
12
  create(ctx: Koa.Context): Promise<void>;
12
13
  update(ctx: Koa.Context): Promise<void>;
13
14
  delete(ctx: Koa.Context): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/release.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAmB3B,QAAA,MAAM,iBAAiB;IACrB;;;;OAIG;gCAC+B,IAAI,OAAO;kBA+DzB,IAAI,OAAO;iBAmCZ,IAAI,OAAO;gBAyEZ,IAAI,OAAO;gBAmBX,IAAI,OAAO;gBAoBX,IAAI,OAAO;iBAWV,IAAI,OAAO;CA+B/B,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/release.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAoB3B,QAAA,MAAM,iBAAiB;IACrB;;;;OAIG;gCAC+B,IAAI,OAAO;kBAiFzB,IAAI,OAAO;iBAmCZ,IAAI,OAAO;8BAmCE,IAAI,OAAO;gBAqDzB,IAAI,OAAO;gBAmBX,IAAI,OAAO;gBAoBX,IAAI,OAAO;iBAWV,IAAI,OAAO;CA+B/B,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { Core } from '@strapi/types';
1
+ import type { Core } from '@strapi/types';
2
2
  export declare const destroy: ({ strapi }: {
3
3
  strapi: Core.Strapi;
4
4
  }) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../../../server/src/destroy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAKrC,eAAO,MAAM,OAAO,eAAsB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,kBAQhE,CAAC"}
1
+ {"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../../../server/src/destroy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAK1C,eAAO,MAAM,OAAO,eAAsB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,kBAQhE,CAAC"}
@@ -148,6 +148,8 @@ declare const _default: {
148
148
  contentType: import("@strapi/types/dist/uid").ContentType;
149
149
  entryDocumentId?: string | undefined;
150
150
  locale?: string | undefined;
151
+ }, { disableUpdateReleaseStatus }?: {
152
+ disableUpdateReleaseStatus?: boolean | undefined;
151
153
  }): Promise<any>;
152
154
  findPage(releaseId: import("@strapi/types/dist/data").ID, query?: (Partial<Pick<import("../../shared/contracts/releases").Pagination, "page" | "pageSize">> & {
153
155
  groupBy?: import("../../shared/contracts/release-actions").ReleaseActionGroupBy | undefined;
@@ -161,12 +163,7 @@ declare const _default: {
161
163
  };
162
164
  }>;
163
165
  groupActions(actions: import("../../shared/contracts/release-actions").ReleaseAction[], groupBy: import("../../shared/contracts/release-actions").ReleaseActionGroupBy): Promise<import("lodash").Dictionary<(null | undefined)[]>>;
164
- getContentTypeModelsFromActions(actions: import("../../shared/contracts/release-actions").ReleaseAction[]): {
165
- [key: `admin::${string}`]: import("@strapi/types/dist/struct").ContentTypeSchema;
166
- [key: `strapi::${string}`]: import("@strapi/types/dist/struct").ContentTypeSchema;
167
- [key: `api::${string}.${string}`]: import("@strapi/types/dist/struct").ContentTypeSchema;
168
- [key: `plugin::${string}.${string}`]: import("@strapi/types/dist/struct").ContentTypeSchema;
169
- };
166
+ getContentTypeModelsFromActions(actions: import("../../shared/contracts/release-actions").ReleaseAction[]): Promise<{} | undefined>;
170
167
  countActions(query: {
171
168
  filters?: ({
172
169
  $and?: (any & {
@@ -1898,6 +1895,7 @@ declare const _default: {
1898
1895
  type: "publish" | "unpublish";
1899
1896
  }): Promise<any>;
1900
1897
  delete(actionId: import("@strapi/types/dist/data").ID, releaseId: import("@strapi/types/dist/data").ID): Promise<any>;
1898
+ validateActionsByContentTypes(contentTypeUids: import("@strapi/types/dist/uid").ContentType[]): Promise<void>;
1901
1899
  };
1902
1900
  'release-validation': ({ strapi }: {
1903
1901
  strapi: import("@strapi/types/dist/core").Strapi;
@@ -1935,6 +1933,7 @@ declare const _default: {
1935
1933
  findByDocumentAttached(ctx: import("koa").Context): Promise<void>;
1936
1934
  findPage(ctx: import("koa").Context): Promise<void>;
1937
1935
  findOne(ctx: import("koa").Context): Promise<void>;
1936
+ mapEntriesToReleases(ctx: import("koa").Context): Promise<void>;
1938
1937
  create(ctx: import("koa").Context): Promise<void>;
1939
1938
  update(ctx: import("koa").Context): Promise<void>;
1940
1939
  delete(ctx: import("koa").Context): Promise<void>;
@@ -1942,6 +1941,7 @@ declare const _default: {
1942
1941
  };
1943
1942
  'release-action': {
1944
1943
  create(ctx: import("koa").Context): Promise<void>;
1944
+ createMany(ctx: import("koa").Context): Promise<void>;
1945
1945
  findMany(ctx: import("koa").Context): Promise<void>;
1946
1946
  update(ctx: import("koa").Context): Promise<void>;
1947
1947
  delete(ctx: import("koa").Context): Promise<void>;
@@ -1,4 +1,4 @@
1
- import { Modules } from '@strapi/types';
1
+ import type { Modules } from '@strapi/types';
2
2
  type Middleware = Modules.Documents.Middleware.Middleware;
3
3
  declare const deleteActionsOnDelete: Middleware;
4
4
  declare const updateActionsOnUpdate: Middleware;
@@ -1 +1 @@
1
- {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../../../server/src/middlewares/documents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAO,MAAM,eAAe,CAAC;AAK7C,KAAK,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC;AAwD1D,QAAA,MAAM,qBAAqB,EAAE,UA+B5B,CAAC;AAEF,QAAA,MAAM,qBAAqB,EAAE,UA0B5B,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,CAAC"}
1
+ {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../../../server/src/middlewares/documents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAO,MAAM,eAAe,CAAC;AAKlD,KAAK,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC;AAyD1D,QAAA,MAAM,qBAAqB,EAAE,UA+B5B,CAAC;AAEF,QAAA,MAAM,qBAAqB,EAAE,UA0B5B,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"5.0.0-document-id-in-actions.d.ts","sourceRoot":"","sources":["../../../../../server/src/migrations/database/5.0.0-document-id-in-actions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAY,MAAM,kBAAkB,CAAC;AAI5D;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,EAAE,SAsC9C,CAAC"}
1
+ {"version":3,"file":"5.0.0-document-id-in-actions.d.ts","sourceRoot":"","sources":["../../../../../server/src/migrations/database/5.0.0-document-id-in-actions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAY,MAAM,kBAAkB,CAAC;AAI5D;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,EAAE,SA6C9C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"release-action.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/release-action.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wBAsFE"}
1
+ {"version":3,"file":"release-action.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/release-action.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wBAoFE"}
@@ -1 +1 @@
1
- {"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/release.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wBAsIE"}
1
+ {"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/release.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wBAoIE"}
@@ -41,6 +41,8 @@ export declare const services: {
41
41
  contentType: import("@strapi/types/dist/uid").ContentType;
42
42
  entryDocumentId?: string | undefined;
43
43
  locale?: string | undefined;
44
+ }, { disableUpdateReleaseStatus }?: {
45
+ disableUpdateReleaseStatus?: boolean | undefined;
44
46
  }): Promise<any>;
45
47
  findPage(releaseId: import("@strapi/types/dist/data").ID, query?: (Partial<Pick<import("../../../shared/contracts/releases").Pagination, "page" | "pageSize">> & {
46
48
  groupBy?: import("../../../shared/contracts/release-actions").ReleaseActionGroupBy | undefined;
@@ -54,12 +56,7 @@ export declare const services: {
54
56
  };
55
57
  }>;
56
58
  groupActions(actions: import("../../../shared/contracts/release-actions").ReleaseAction[], groupBy: import("../../../shared/contracts/release-actions").ReleaseActionGroupBy): Promise<import("lodash").Dictionary<(null | undefined)[]>>;
57
- getContentTypeModelsFromActions(actions: import("../../../shared/contracts/release-actions").ReleaseAction[]): {
58
- [key: `admin::${string}`]: import("@strapi/types/dist/struct").ContentTypeSchema;
59
- [key: `strapi::${string}`]: import("@strapi/types/dist/struct").ContentTypeSchema;
60
- [key: `api::${string}.${string}`]: import("@strapi/types/dist/struct").ContentTypeSchema;
61
- [key: `plugin::${string}.${string}`]: import("@strapi/types/dist/struct").ContentTypeSchema;
62
- };
59
+ getContentTypeModelsFromActions(actions: import("../../../shared/contracts/release-actions").ReleaseAction[]): Promise<{} | undefined>;
63
60
  countActions(query: {
64
61
  filters?: ({
65
62
  $and?: (any & {
@@ -1791,6 +1788,7 @@ export declare const services: {
1791
1788
  type: "publish" | "unpublish";
1792
1789
  }): Promise<any>;
1793
1790
  delete(actionId: import("@strapi/types/dist/data").ID, releaseId: import("@strapi/types/dist/data").ID): Promise<any>;
1791
+ validateActionsByContentTypes(contentTypeUids: import("@strapi/types/dist/uid").ContentType[]): Promise<void>;
1794
1792
  };
1795
1793
  'release-validation': ({ strapi }: {
1796
1794
  strapi: import("@strapi/types/dist/core").Strapi;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/services/index.ts"],"names":[],"mappings":";AAMA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMpB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/services/index.ts"],"names":[],"mappings":";AAMA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMpB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /// <reference types="lodash" />
2
- import type { Core, Struct, Modules } from '@strapi/types';
2
+ import type { Core, Modules, UID } from '@strapi/types';
3
3
  import { RELEASE_ACTION_MODEL_UID } from '../constants';
4
4
  import type { CreateReleaseAction, GetReleaseActions, ReleaseAction, ReleaseActionGroupBy, UpdateReleaseAction, DeleteReleaseAction } from '../../../shared/contracts/release-actions';
5
5
  import type { Entity } from '../../../shared/types';
@@ -10,7 +10,9 @@ export interface Locale extends Entity {
10
10
  declare const createReleaseActionService: ({ strapi }: {
11
11
  strapi: Core.Strapi;
12
12
  }) => {
13
- create(releaseId: CreateReleaseAction.Request['params']['releaseId'], action: CreateReleaseAction.Request['body']): Promise<any>;
13
+ create(releaseId: CreateReleaseAction.Request['params']['releaseId'], action: CreateReleaseAction.Request['body'], { disableUpdateReleaseStatus }?: {
14
+ disableUpdateReleaseStatus?: boolean;
15
+ }): Promise<any>;
14
16
  findPage(releaseId: GetReleaseActions.Request['params']['releaseId'], query?: GetReleaseActions.Request['query']): Promise<{
15
17
  results: any;
16
18
  pagination: {
@@ -21,15 +23,11 @@ declare const createReleaseActionService: ({ strapi }: {
21
23
  };
22
24
  }>;
23
25
  groupActions(actions: ReleaseAction[], groupBy: ReleaseActionGroupBy): Promise<import("lodash").Dictionary<(null | undefined)[]>>;
24
- getContentTypeModelsFromActions(actions: ReleaseAction[]): {
25
- [key: `admin::${string}`]: Struct.ContentTypeSchema;
26
- [key: `strapi::${string}`]: Struct.ContentTypeSchema;
27
- [key: `api::${string}.${string}`]: Struct.ContentTypeSchema;
28
- [key: `plugin::${string}.${string}`]: Struct.ContentTypeSchema;
29
- };
26
+ getContentTypeModelsFromActions(actions: ReleaseAction[]): Promise<{} | undefined>;
30
27
  countActions(query: Modules.EntityService.Params.Pick<typeof RELEASE_ACTION_MODEL_UID, 'filters'>): Promise<number>;
31
28
  update(actionId: UpdateReleaseAction.Request['params']['actionId'], releaseId: UpdateReleaseAction.Request['params']['releaseId'], update: UpdateReleaseAction.Request['body']): Promise<any>;
32
29
  delete(actionId: DeleteReleaseAction.Request['params']['actionId'], releaseId: DeleteReleaseAction.Request['params']['releaseId']): Promise<any>;
30
+ validateActionsByContentTypes(contentTypeUids: UID.ContentType[]): Promise<void>;
33
31
  };
34
32
  export type ReleaseActionService = ReturnType<typeof createReleaseActionService>;
35
33
  export default createReleaseActionService;
@@ -1 +1 @@
1
- {"version":3,"file":"release-action.d.ts","sourceRoot":"","sources":["../../../../server/src/services/release-action.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAIrE,OAAO,EAAE,wBAAwB,EAAqB,MAAM,cAAc,CAAC;AAE3E,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAgBpD,MAAM,WAAW,MAAO,SAAQ,MAAM;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAMD,QAAA,MAAM,0BAA0B,eAAgB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;sBAyCtD,2BAA2B,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,UACrD,2BAA2B,CAAC,MAAM,CAAC;wBAsDhC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,UACnD,yBAAyB,CAAC,OAAO,CAAC;;;;;;;;;0BAsDhB,aAAa,EAAE,WAAW,oBAAoB;6CA6BjC,aAAa,EAAE;;;;;;wBAyB/C,QAAQ,aAAa,CAAC,MAAM,KAAK,CAAC,+BAA+B,EAAE,SAAS,CAAC;qBAQ1E,2BAA2B,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,aAChD,2BAA2B,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,UACrD,2BAA2B,CAAC,MAAM,CAAC;qBAwDjC,2BAA2B,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,aAChD,2BAA2B,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC;CAyBlE,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAEjF,eAAe,0BAA0B,CAAC"}
1
+ {"version":3,"file":"release-action.d.ts","sourceRoot":"","sources":["../../../../server/src/services/release-action.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,IAAI,EAAY,OAAO,EAAE,GAAG,EAAQ,MAAM,eAAe,CAAC;AAIxE,OAAO,EAAE,wBAAwB,EAAqB,MAAM,cAAc,CAAC;AAE3E,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAgBpD,MAAM,WAAW,MAAO,SAAQ,MAAM;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAMD,QAAA,MAAM,0BAA0B,eAAgB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;sBAyCtD,2BAA2B,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,UACrD,2BAA2B,CAAC,MAAM,CAAC,mCACH;QAAE,0BAA0B,CAAC,EAAE,OAAO,CAAA;KAAE;wBAoErE,yBAAyB,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,UACnD,yBAAyB,CAAC,OAAO,CAAC;;;;;;;;;0BAsDhB,aAAa,EAAE,WAAW,oBAAoB;6CA6B3B,aAAa,EAAE;wBAuCrD,QAAQ,aAAa,CAAC,MAAM,KAAK,CAAC,+BAA+B,EAAE,SAAS,CAAC;qBAQ1E,2BAA2B,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,aAChD,2BAA2B,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,UACrD,2BAA2B,CAAC,MAAM,CAAC;qBAwDjC,2BAA2B,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,aAChD,2BAA2B,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC;mDAyBV,IAAI,WAAW,EAAE;CAuDzE,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAEjF,eAAe,0BAA0B,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { Job } from 'node-schedule';
2
- import { Core } from '@strapi/types';
2
+ import type { Core } from '@strapi/types';
3
3
  import { Release } from '../../../shared/contracts/releases';
4
4
  declare const createSchedulingService: ({ strapi }: {
5
5
  strapi: Core.Strapi;
@@ -1 +1 @@
1
- {"version":3,"file":"scheduling.d.ts","sourceRoot":"","sources":["../../../../server/src/services/scheduling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,GAAG,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAGrC,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAI7D,QAAA,MAAM,uBAAuB,eAAgB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;mBAI3C,OAAO,CAAC,IAAI,CAAC,gBAAgB,IAAI;sBA6BpC,OAAO,CAAC,IAAI,CAAC;;IAa/B;;;;OAIG;;CAkBN,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
1
+ {"version":3,"file":"scheduling.d.ts","sourceRoot":"","sources":["../../../../server/src/services/scheduling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,GAAG,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAG1C,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAI7D,QAAA,MAAM,uBAAuB,eAAgB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;mBAI3C,OAAO,CAAC,IAAI,CAAC,gBAAgB,IAAI;sBA6BpC,OAAO,CAAC,IAAI,CAAC;;IAa/B;;;;OAIG;;CAkBN,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { errors } from '@strapi/utils';
2
- import { Core } from '@strapi/types';
2
+ import type { Core } from '@strapi/types';
3
3
  import type { CreateRelease, UpdateRelease } from '../../../shared/contracts/releases';
4
4
  import type { CreateReleaseAction } from '../../../shared/contracts/release-actions';
5
5
  export declare class AlreadyOnReleaseError extends errors.ApplicationError<'AlreadyOnReleaseError'> {
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../server/src/services/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAgB,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,IAAI,EAAO,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAW,aAAa,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAChG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAGrF,qBAAa,qBAAsB,SAAQ,MAAM,CAAC,gBAAgB,CAAC,uBAAuB,CAAC;gBAC7E,OAAO,EAAE,MAAM;CAI5B;AAED,QAAA,MAAM,8BAA8B,eAAgB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;mCAE5D,2BAA2B,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,qBAC1C,2BAA2B,CAAC,MAAM,CAAC;sCAiCtC,2BAA2B,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,mBACjD,2BAA2B,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC;;8CAuCjE,qBAAqB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OACtC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;mDAmB7B,qBAAqB,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC;CAM3D,CAAC;AAEH,eAAe,8BAA8B,CAAC"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../server/src/services/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAgB,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,IAAI,EAAO,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAW,aAAa,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAChG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAGrF,qBAAa,qBAAsB,SAAQ,MAAM,CAAC,gBAAgB,CAAC,uBAAuB,CAAC;gBAC7E,OAAO,EAAE,MAAM;CAI5B;AAED,QAAA,MAAM,8BAA8B,eAAgB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;mCAE5D,2BAA2B,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,qBAC1C,2BAA2B,CAAC,MAAM,CAAC;sCAiCtC,2BAA2B,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,mBACjD,2BAA2B,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC;;8CAuCjE,qBAAqB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OACtC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;mDAmB7B,qBAAqB,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC;CAM3D,CAAC;AAEH,eAAe,8BAA8B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE,KAAK,QAAQ,GAAG;IACd,OAAO,EAAE,cAAc,CAAC;IACxB,oBAAoB,EAAE,GAAG,CAAC;IAC1B,UAAU,EAAE,GAAG,CAAC;IAChB,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,eAAe,EAAE,GAAG,CAAC;IACrB,QAAQ,EAAE,eAAe,CAAC;CAC3B,CAAC;AAEF,UAAU,MAAM;IACd,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC;IAC7B,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,UAAU,uCACf,KAAK,cACC;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,KAClC,QAAQ,CAAC,KAAK,CAEhB,CAAC;AAEF,eAAO,MAAM,wBAAwB,wCACE,MAAM,cAC/B;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,qBASpC,CAAC;AAEF,eAAO,MAAM,YAAY,mBACP,MAAM,SACf,GAAG,cACE;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,qBAgBpC,CAAC;AAEF,eAAO,MAAM,QAAQ,2DAOhB,MAAM,GAAG;IAAE,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAA;CAAE,cACjD;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,+EAOpC,CAAC;AAEF,eAAO,MAAM,cAAc,gBAAuB,IAAI,WAAW,SAAS,KAAK,WAAW,gDAwBzF,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE,KAAK,QAAQ,GAAG;IACd,OAAO,EAAE,cAAc,CAAC;IACxB,oBAAoB,EAAE,GAAG,CAAC;IAC1B,UAAU,EAAE,GAAG,CAAC;IAChB,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,eAAe,EAAE,GAAG,CAAC;IACrB,QAAQ,EAAE,eAAe,CAAC;CAC3B,CAAC;AAEF,UAAU,MAAM;IACd,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC;IAC7B,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,UAAU,uCACf,KAAK,cACC;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,KAClC,QAAQ,CAAC,KAAK,CAEhB,CAAC;AAEF,eAAO,MAAM,wBAAwB,wCACE,MAAM,cAC/B;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,qBASpC,CAAC;AAEF,eAAO,MAAM,YAAY,mBACP,MAAM,SACf,GAAG,cACE;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,qBA0BpC,CAAC;AAEF,eAAO,MAAM,QAAQ,2DAOhB,MAAM,GAAG;IAAE,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAA;CAAE,cACjD;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,+EAmBpC,CAAC;AAEF,eAAO,MAAM,cAAc,gBAAuB,IAAI,WAAW,SAAS,KAAK,WAAW,gDAwBzF,CAAC"}
@@ -0,0 +1,94 @@
1
+ 'use strict';
2
+
3
+ const getService = (name, { strapi: strapi1 })=>{
4
+ return strapi1.plugin('content-releases').service(name);
5
+ };
6
+ const getDraftEntryValidStatus = async ({ contentType, documentId, locale }, { strapi: strapi1 })=>{
7
+ const populateBuilderService = strapi1.plugin('content-manager').service('populate-builder');
8
+ // @ts-expect-error - populateBuilderService should be a function but is returning service
9
+ const populate = await populateBuilderService(contentType).populateDeep(Infinity).build();
10
+ const entry = await getEntry({
11
+ contentType,
12
+ documentId,
13
+ locale,
14
+ populate
15
+ }, {
16
+ strapi: strapi1
17
+ });
18
+ return isEntryValid(contentType, entry, {
19
+ strapi: strapi1
20
+ });
21
+ };
22
+ const isEntryValid = async (contentTypeUid, entry, { strapi: strapi1 })=>{
23
+ try {
24
+ // @TODO: When documents service has validateEntityCreation method, use it instead
25
+ await strapi1.entityValidator.validateEntityCreation(strapi1.getModel(contentTypeUid), entry, undefined, // @ts-expect-error - FIXME: entity here is unnecessary
26
+ entry);
27
+ const workflowsService = strapi1.plugin('review-workflows').service('workflows');
28
+ // Workflows service may not be available depending on the license
29
+ const workflow = await workflowsService?.getAssignedWorkflow(contentTypeUid, {
30
+ populate: 'stageRequiredToPublish'
31
+ });
32
+ if (workflow?.stageRequiredToPublish) {
33
+ return entry.strapi_stage.id === workflow.stageRequiredToPublish.id;
34
+ }
35
+ return true;
36
+ } catch {
37
+ return false;
38
+ }
39
+ };
40
+ const getEntry = async ({ contentType, documentId, locale, populate, status = 'draft' }, { strapi: strapi1 })=>{
41
+ if (documentId) {
42
+ // Try to get an existing draft or published document
43
+ const entry = await strapi1.documents(contentType).findOne({
44
+ documentId,
45
+ locale,
46
+ populate,
47
+ status
48
+ });
49
+ // The document isn't published yet, but the action is to publish it, fetch the draft
50
+ if (status === 'published' && !entry) {
51
+ return strapi1.documents(contentType).findOne({
52
+ documentId,
53
+ locale,
54
+ populate,
55
+ status: 'draft'
56
+ });
57
+ }
58
+ return entry;
59
+ }
60
+ return strapi1.documents(contentType).findFirst({
61
+ locale,
62
+ populate,
63
+ status
64
+ });
65
+ };
66
+ const getEntryStatus = async (contentType, entry)=>{
67
+ if (entry.publishedAt) {
68
+ return 'published';
69
+ }
70
+ const publishedEntry = await strapi.documents(contentType).findOne({
71
+ documentId: entry.documentId,
72
+ locale: entry.locale,
73
+ status: 'published',
74
+ fields: [
75
+ 'updatedAt'
76
+ ]
77
+ });
78
+ if (!publishedEntry) {
79
+ return 'draft';
80
+ }
81
+ const entryUpdatedAt = new Date(entry.updatedAt).getTime();
82
+ const publishedEntryUpdatedAt = new Date(publishedEntry.updatedAt).getTime();
83
+ if (entryUpdatedAt > publishedEntryUpdatedAt) {
84
+ return 'modified';
85
+ }
86
+ return 'published';
87
+ };
88
+
89
+ exports.getDraftEntryValidStatus = getDraftEntryValidStatus;
90
+ exports.getEntry = getEntry;
91
+ exports.getEntryStatus = getEntryStatus;
92
+ exports.getService = getService;
93
+ exports.isEntryValid = isEntryValid;
94
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../server/src/utils/index.ts"],"sourcesContent":["import type { UID, Data, Core } from '@strapi/types';\n\nimport type { SettingsService } from '../services/settings';\nimport type { ReleaseService } from '../services/release';\nimport type { ReleaseActionService } from '../services/release-action';\n\ntype Services = {\n release: ReleaseService;\n 'release-validation': any;\n scheduling: any;\n 'release-action': ReleaseActionService;\n 'event-manager': any;\n settings: SettingsService;\n};\n\ninterface Action {\n contentType: UID.ContentType;\n documentId?: Data.DocumentID;\n locale?: string;\n}\n\nexport const getService = <TName extends keyof Services>(\n name: TName,\n { strapi }: { strapi: Core.Strapi }\n): Services[TName] => {\n return strapi.plugin('content-releases').service(name);\n};\n\nexport const getDraftEntryValidStatus = async (\n { contentType, documentId, locale }: Action,\n { strapi }: { strapi: Core.Strapi }\n) => {\n const populateBuilderService = strapi.plugin('content-manager').service('populate-builder');\n // @ts-expect-error - populateBuilderService should be a function but is returning service\n const populate = await populateBuilderService(contentType).populateDeep(Infinity).build();\n\n const entry = await getEntry({ contentType, documentId, locale, populate }, { strapi });\n\n return isEntryValid(contentType, entry, { strapi });\n};\n\nexport const isEntryValid = async (\n contentTypeUid: string,\n entry: any,\n { strapi }: { strapi: Core.Strapi }\n) => {\n try {\n // @TODO: When documents service has validateEntityCreation method, use it instead\n await strapi.entityValidator.validateEntityCreation(\n strapi.getModel(contentTypeUid as UID.ContentType),\n entry,\n undefined,\n // @ts-expect-error - FIXME: entity here is unnecessary\n entry\n );\n\n const workflowsService = strapi.plugin('review-workflows').service('workflows');\n // Workflows service may not be available depending on the license\n const workflow = await workflowsService?.getAssignedWorkflow(contentTypeUid, {\n populate: 'stageRequiredToPublish',\n });\n\n if (workflow?.stageRequiredToPublish) {\n return entry.strapi_stage.id === workflow.stageRequiredToPublish.id;\n }\n\n return true;\n } catch {\n return false;\n }\n};\n\nexport const getEntry = async (\n {\n contentType,\n documentId,\n locale,\n populate,\n status = 'draft',\n }: Action & { status?: 'draft' | 'published'; populate: any },\n { strapi }: { strapi: Core.Strapi }\n) => {\n if (documentId) {\n // Try to get an existing draft or published document\n const entry = await strapi\n .documents(contentType)\n .findOne({ documentId, locale, populate, status });\n\n // The document isn't published yet, but the action is to publish it, fetch the draft\n if (status === 'published' && !entry) {\n return strapi\n .documents(contentType)\n .findOne({ documentId, locale, populate, status: 'draft' });\n }\n\n return entry;\n }\n\n return strapi.documents(contentType).findFirst({ locale, populate, status });\n};\n\nexport const getEntryStatus = async (contentType: UID.ContentType, entry: Data.ContentType) => {\n if (entry.publishedAt) {\n return 'published';\n }\n\n const publishedEntry = await strapi.documents(contentType).findOne({\n documentId: entry.documentId,\n locale: entry.locale,\n status: 'published',\n fields: ['updatedAt'],\n });\n\n if (!publishedEntry) {\n return 'draft';\n }\n\n const entryUpdatedAt = new Date(entry.updatedAt).getTime();\n const publishedEntryUpdatedAt = new Date(publishedEntry.updatedAt).getTime();\n\n if (entryUpdatedAt > publishedEntryUpdatedAt) {\n return 'modified';\n }\n\n return 'published';\n};\n"],"names":["getService","name","strapi","plugin","service","getDraftEntryValidStatus","contentType","documentId","locale","populateBuilderService","populate","populateDeep","Infinity","build","entry","getEntry","isEntryValid","contentTypeUid","entityValidator","validateEntityCreation","getModel","undefined","workflowsService","workflow","getAssignedWorkflow","stageRequiredToPublish","strapi_stage","id","status","documents","findOne","findFirst","getEntryStatus","publishedAt","publishedEntry","fields","entryUpdatedAt","Date","updatedAt","getTime","publishedEntryUpdatedAt"],"mappings":"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"}