@strapi/content-releases 5.12.1 → 5.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) 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 +201 -0
  18. package/dist/admin/components/ReleaseAction.js.map +1 -0
  19. package/dist/admin/components/ReleaseAction.mjs +199 -0
  20. package/dist/admin/components/ReleaseAction.mjs.map +1 -0
  21. package/dist/admin/components/ReleaseActionMenu.js +243 -0
  22. package/dist/admin/components/ReleaseActionMenu.js.map +1 -0
  23. package/dist/admin/components/ReleaseActionMenu.mjs +222 -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 +120 -14
  50. package/dist/admin/index.js.map +1 -1
  51. package/dist/admin/index.mjs +121 -13
  52. package/dist/admin/index.mjs.map +1 -1
  53. package/dist/admin/{chunks/hooks-DA5VbUAp.js → modules/hooks.js} +1 -1
  54. package/dist/admin/modules/hooks.js.map +1 -0
  55. package/dist/admin/{chunks/hooks-CFk_8Q0b.mjs → modules/hooks.mjs} +2 -2
  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 +821 -0
  66. package/dist/admin/pages/ReleaseDetailsPage.js.map +1 -0
  67. package/dist/admin/pages/ReleaseDetailsPage.mjs +800 -0
  68. package/dist/admin/pages/ReleaseDetailsPage.mjs.map +1 -0
  69. package/dist/admin/pages/ReleasesPage.js +397 -0
  70. package/dist/admin/pages/ReleasesPage.js.map +1 -0
  71. package/dist/admin/pages/ReleasesPage.mjs +375 -0
  72. package/dist/admin/pages/ReleasesPage.mjs.map +1 -0
  73. package/dist/admin/{chunks/ReleasesSettingsPage-KRcoI1bC.js → pages/ReleasesSettingsPage.js} +9 -17
  74. package/dist/admin/pages/ReleasesSettingsPage.js.map +1 -0
  75. package/dist/admin/{chunks/ReleasesSettingsPage-DUKdFdvx.mjs → pages/ReleasesSettingsPage.mjs} +5 -13
  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/store/hooks.js +8 -0
  86. package/dist/admin/store/hooks.js.map +1 -0
  87. package/dist/admin/store/hooks.mjs +6 -0
  88. package/dist/admin/store/hooks.mjs.map +1 -0
  89. package/dist/admin/{chunks/en-BOpqX2t_.js → translations/en.json.js} +2 -2
  90. package/dist/admin/translations/en.json.js.map +1 -0
  91. package/dist/admin/{chunks/en-aQo8Bn_U.mjs → translations/en.json.mjs} +1 -1
  92. package/dist/admin/translations/en.json.mjs.map +1 -0
  93. package/dist/admin/{chunks/uk-9T9su-bj.js → translations/uk.json.js} +2 -2
  94. package/dist/admin/translations/uk.json.js.map +1 -0
  95. package/dist/admin/{chunks/uk-Bp9HotPq.mjs → translations/uk.json.mjs} +1 -1
  96. package/dist/admin/translations/uk.json.mjs.map +1 -0
  97. package/dist/admin/utils/api.js +8 -0
  98. package/dist/admin/utils/api.js.map +1 -0
  99. package/dist/admin/utils/api.mjs +6 -0
  100. package/dist/admin/utils/api.mjs.map +1 -0
  101. package/dist/admin/utils/prefixPluginTranslations.js +11 -0
  102. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
  103. package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
  104. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
  105. package/dist/admin/utils/time.js +42 -0
  106. package/dist/admin/utils/time.js.map +1 -0
  107. package/dist/admin/utils/time.mjs +39 -0
  108. package/dist/admin/utils/time.mjs.map +1 -0
  109. package/dist/admin/{chunks/schemas-DS7NeFDN.js → validation/schemas.js} +1 -1
  110. package/dist/admin/validation/schemas.js.map +1 -0
  111. package/dist/admin/{chunks/schemas-DMt8h1z-.mjs → validation/schemas.mjs} +2 -2
  112. package/dist/admin/validation/schemas.mjs.map +1 -0
  113. package/dist/server/bootstrap.js +68 -0
  114. package/dist/server/bootstrap.js.map +1 -0
  115. package/dist/server/bootstrap.mjs +66 -0
  116. package/dist/server/bootstrap.mjs.map +1 -0
  117. package/dist/server/constants.js +74 -0
  118. package/dist/server/constants.js.map +1 -0
  119. package/dist/server/constants.mjs +69 -0
  120. package/dist/server/constants.mjs.map +1 -0
  121. package/dist/server/content-types/index.js +12 -0
  122. package/dist/server/content-types/index.js.map +1 -0
  123. package/dist/server/content-types/index.mjs +10 -0
  124. package/dist/server/content-types/index.mjs.map +1 -0
  125. package/dist/server/content-types/release/index.js +10 -0
  126. package/dist/server/content-types/release/index.js.map +1 -0
  127. package/dist/server/content-types/release/index.mjs +8 -0
  128. package/dist/server/content-types/release/index.mjs.map +1 -0
  129. package/dist/server/content-types/release/schema.js +58 -0
  130. package/dist/server/content-types/release/schema.js.map +1 -0
  131. package/dist/server/content-types/release/schema.mjs +56 -0
  132. package/dist/server/content-types/release/schema.mjs.map +1 -0
  133. package/dist/server/content-types/release-action/index.js +10 -0
  134. package/dist/server/content-types/release-action/index.js.map +1 -0
  135. package/dist/server/content-types/release-action/index.mjs +8 -0
  136. package/dist/server/content-types/release-action/index.mjs.map +1 -0
  137. package/dist/server/content-types/release-action/schema.js +55 -0
  138. package/dist/server/content-types/release-action/schema.js.map +1 -0
  139. package/dist/server/content-types/release-action/schema.mjs +53 -0
  140. package/dist/server/content-types/release-action/schema.mjs.map +1 -0
  141. package/dist/server/controllers/index.js +14 -0
  142. package/dist/server/controllers/index.js.map +1 -0
  143. package/dist/server/controllers/index.mjs +12 -0
  144. package/dist/server/controllers/index.mjs.map +1 -0
  145. package/dist/server/controllers/release-action.js +150 -0
  146. package/dist/server/controllers/release-action.js.map +1 -0
  147. package/dist/server/controllers/release-action.mjs +148 -0
  148. package/dist/server/controllers/release-action.mjs.map +1 -0
  149. package/dist/server/controllers/release.js +302 -0
  150. package/dist/server/controllers/release.js.map +1 -0
  151. package/dist/server/controllers/release.mjs +300 -0
  152. package/dist/server/controllers/release.mjs.map +1 -0
  153. package/dist/server/controllers/settings.js +37 -0
  154. package/dist/server/controllers/settings.js.map +1 -0
  155. package/dist/server/controllers/settings.mjs +35 -0
  156. package/dist/server/controllers/settings.mjs.map +1 -0
  157. package/dist/server/controllers/validation/release-action.js +34 -0
  158. package/dist/server/controllers/validation/release-action.js.map +1 -0
  159. package/dist/server/controllers/validation/release-action.mjs +30 -0
  160. package/dist/server/controllers/validation/release-action.mjs.map +1 -0
  161. package/dist/server/controllers/validation/release.js +26 -0
  162. package/dist/server/controllers/validation/release.js.map +1 -0
  163. package/dist/server/controllers/validation/release.mjs +22 -0
  164. package/dist/server/controllers/validation/release.mjs.map +1 -0
  165. package/dist/server/controllers/validation/settings.js +32 -0
  166. package/dist/server/controllers/validation/settings.js.map +1 -0
  167. package/dist/server/controllers/validation/settings.mjs +10 -0
  168. package/dist/server/controllers/validation/settings.mjs.map +1 -0
  169. package/dist/server/destroy.js +15 -0
  170. package/dist/server/destroy.js.map +1 -0
  171. package/dist/server/destroy.mjs +13 -0
  172. package/dist/server/destroy.mjs.map +1 -0
  173. package/dist/server/index.js +16 -2336
  174. package/dist/server/index.js.map +1 -1
  175. package/dist/server/index.mjs +7 -2308
  176. package/dist/server/index.mjs.map +1 -1
  177. package/dist/server/middlewares/documents.js +104 -0
  178. package/dist/server/middlewares/documents.js.map +1 -0
  179. package/dist/server/middlewares/documents.mjs +101 -0
  180. package/dist/server/middlewares/documents.mjs.map +1 -0
  181. package/dist/server/migrations/database/5.0.0-document-id-in-actions.js +51 -0
  182. package/dist/server/migrations/database/5.0.0-document-id-in-actions.js.map +1 -0
  183. package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs +49 -0
  184. package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs.map +1 -0
  185. package/dist/server/migrations/index.js +205 -0
  186. package/dist/server/migrations/index.js.map +1 -0
  187. package/dist/server/migrations/index.mjs +198 -0
  188. package/dist/server/migrations/index.mjs.map +1 -0
  189. package/dist/server/register.js +23 -0
  190. package/dist/server/register.js.map +1 -0
  191. package/dist/server/register.mjs +21 -0
  192. package/dist/server/register.mjs.map +1 -0
  193. package/dist/server/routes/index.js +14 -0
  194. package/dist/server/routes/index.js.map +1 -0
  195. package/dist/server/routes/index.mjs +12 -0
  196. package/dist/server/routes/index.mjs.map +1 -0
  197. package/dist/server/routes/release-action.js +100 -0
  198. package/dist/server/routes/release-action.js.map +1 -0
  199. package/dist/server/routes/release-action.mjs +98 -0
  200. package/dist/server/routes/release-action.mjs.map +1 -0
  201. package/dist/server/routes/release.js +154 -0
  202. package/dist/server/routes/release.js.map +1 -0
  203. package/dist/server/routes/release.mjs +152 -0
  204. package/dist/server/routes/release.mjs.map +1 -0
  205. package/dist/server/routes/settings.js +46 -0
  206. package/dist/server/routes/settings.js.map +1 -0
  207. package/dist/server/routes/settings.mjs +44 -0
  208. package/dist/server/routes/settings.mjs.map +1 -0
  209. package/dist/server/services/index.js +18 -0
  210. package/dist/server/services/index.js.map +1 -0
  211. package/dist/server/services/index.mjs +16 -0
  212. package/dist/server/services/index.mjs.map +1 -0
  213. package/dist/server/services/release-action.js +323 -0
  214. package/dist/server/services/release-action.js.map +1 -0
  215. package/dist/server/services/release-action.mjs +321 -0
  216. package/dist/server/services/release-action.mjs.map +1 -0
  217. package/dist/server/services/release.js +324 -0
  218. package/dist/server/services/release.js.map +1 -0
  219. package/dist/server/services/release.mjs +322 -0
  220. package/dist/server/services/release.mjs.map +1 -0
  221. package/dist/server/services/scheduling.js +70 -0
  222. package/dist/server/services/scheduling.js.map +1 -0
  223. package/dist/server/services/scheduling.mjs +68 -0
  224. package/dist/server/services/scheduling.mjs.map +1 -0
  225. package/dist/server/services/settings.js +34 -0
  226. package/dist/server/services/settings.js.map +1 -0
  227. package/dist/server/services/settings.mjs +32 -0
  228. package/dist/server/services/settings.mjs.map +1 -0
  229. package/dist/server/services/validation.js +91 -0
  230. package/dist/server/services/validation.js.map +1 -0
  231. package/dist/server/services/validation.mjs +86 -0
  232. package/dist/server/services/validation.mjs.map +1 -0
  233. package/dist/server/utils/index.js +93 -0
  234. package/dist/server/utils/index.js.map +1 -0
  235. package/dist/server/utils/index.mjs +87 -0
  236. package/dist/server/utils/index.mjs.map +1 -0
  237. package/package.json +7 -7
  238. package/dist/admin/chunks/App-BkWgp5q_.mjs +0 -1845
  239. package/dist/admin/chunks/App-BkWgp5q_.mjs.map +0 -1
  240. package/dist/admin/chunks/App-CJiqPP7-.js +0 -1866
  241. package/dist/admin/chunks/App-CJiqPP7-.js.map +0 -1
  242. package/dist/admin/chunks/PurchaseContentReleases-CzayeVUD.mjs +0 -193
  243. package/dist/admin/chunks/PurchaseContentReleases-CzayeVUD.mjs.map +0 -1
  244. package/dist/admin/chunks/PurchaseContentReleases-Z9uEPb5b.js +0 -195
  245. package/dist/admin/chunks/PurchaseContentReleases-Z9uEPb5b.js.map +0 -1
  246. package/dist/admin/chunks/ReleasesSettingsPage-DUKdFdvx.mjs.map +0 -1
  247. package/dist/admin/chunks/ReleasesSettingsPage-KRcoI1bC.js.map +0 -1
  248. package/dist/admin/chunks/en-BOpqX2t_.js.map +0 -1
  249. package/dist/admin/chunks/en-aQo8Bn_U.mjs.map +0 -1
  250. package/dist/admin/chunks/hooks-CFk_8Q0b.mjs.map +0 -1
  251. package/dist/admin/chunks/hooks-DA5VbUAp.js.map +0 -1
  252. package/dist/admin/chunks/index-DBUaMD56.mjs +0 -1619
  253. package/dist/admin/chunks/index-DBUaMD56.mjs.map +0 -1
  254. package/dist/admin/chunks/index-vjWrvGN3.js +0 -1658
  255. package/dist/admin/chunks/index-vjWrvGN3.js.map +0 -1
  256. package/dist/admin/chunks/schemas-DMt8h1z-.mjs.map +0 -1
  257. package/dist/admin/chunks/schemas-DS7NeFDN.js.map +0 -1
  258. package/dist/admin/chunks/uk-9T9su-bj.js.map +0 -1
  259. package/dist/admin/chunks/uk-Bp9HotPq.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents.mjs","sources":["../../../server/src/middlewares/documents.ts"],"sourcesContent":["import type { Modules, UID } from '@strapi/types';\nimport { contentTypes } from '@strapi/utils';\nimport { RELEASE_MODEL_UID, RELEASE_ACTION_MODEL_UID } from '../constants';\nimport { getService, isEntryValid } from '../utils';\n\ntype Middleware = Modules.Documents.Middleware.Middleware;\n\ninterface ReleaseActionsParams {\n contentType: UID.ContentType;\n entryDocumentId?: Modules.Documents.ID;\n locale?: string;\n}\n\nconst updateActionsStatusAndUpdateReleaseStatus = async (\n contentType: UID.ContentType,\n entry: Modules.Documents.AnyDocument\n) => {\n const releases = await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n releasedAt: null,\n actions: {\n contentType,\n entryDocumentId: entry.documentId,\n locale: entry.locale,\n },\n },\n });\n\n const entryStatus = await isEntryValid(contentType, entry, { strapi });\n\n await strapi.db.query(RELEASE_ACTION_MODEL_UID).updateMany({\n where: {\n contentType,\n entryDocumentId: entry.documentId,\n locale: entry.locale,\n },\n data: {\n isEntryValid: entryStatus,\n },\n });\n\n for (const release of releases) {\n getService('release', { strapi }).updateReleaseStatus(release.id);\n }\n};\n\nconst deleteActionsAndUpdateReleaseStatus = async (params: ReleaseActionsParams) => {\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 for (const release of releases) {\n getService('release', { strapi }).updateReleaseStatus(release.id);\n }\n};\n\nconst deleteActionsOnDelete: Middleware = async (ctx, next) => {\n if (ctx.action !== 'delete') {\n return next();\n }\n\n if (!contentTypes.hasDraftAndPublish(ctx.contentType)) {\n return next();\n }\n\n const contentType = ctx.contentType.uid;\n const { documentId, locale } = ctx.params;\n\n const result = await next();\n\n if (!result) {\n return result;\n }\n\n try {\n deleteActionsAndUpdateReleaseStatus({\n contentType,\n entryDocumentId: documentId,\n ...(locale !== '*' && { locale }),\n });\n } catch (error) {\n strapi.log.error('Error while deleting release actions after delete', {\n error,\n });\n }\n\n return result;\n};\n\nconst updateActionsOnUpdate: Middleware = async (ctx, next) => {\n if (ctx.action !== 'update') {\n return next();\n }\n\n if (!contentTypes.hasDraftAndPublish(ctx.contentType)) {\n return next();\n }\n\n const contentType = ctx.contentType.uid;\n\n const result = (await next()) as Modules.Documents.AnyDocument;\n\n if (!result) {\n return result;\n }\n\n try {\n updateActionsStatusAndUpdateReleaseStatus(contentType, result);\n } catch (error) {\n strapi.log.error('Error while updating release actions after update', {\n error,\n });\n }\n\n return result;\n};\n\nexport { deleteActionsOnDelete, updateActionsOnUpdate };\n"],"names":["updateActionsStatusAndUpdateReleaseStatus","contentType","entry","releases","strapi","db","query","RELEASE_MODEL_UID","findMany","where","releasedAt","actions","entryDocumentId","documentId","locale","entryStatus","isEntryValid","RELEASE_ACTION_MODEL_UID","updateMany","data","release","getService","updateReleaseStatus","id","deleteActionsAndUpdateReleaseStatus","params","deleteMany","deleteActionsOnDelete","ctx","next","action","contentTypes","hasDraftAndPublish","uid","result","error","log","updateActionsOnUpdate"],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ 'use strict';
2
+
3
+ var utils = require('@strapi/utils');
4
+
5
+ /**
6
+ * On v4, release actions are linked with entries using the built in Polymorphic relations.
7
+ *
8
+ * On v5, we are going to save entryDocumentId on the release action and make the link manually.
9
+ * This because entryId is not a reliable way to link documents, as it can change.
10
+ */ const addEntryDocumentToReleaseActions = {
11
+ name: 'content-releases::5.0.0-add-entry-document-id-to-release-actions',
12
+ async up (trx, db) {
13
+ // Check if the table exists
14
+ const hasTable = await trx.schema.hasTable('strapi_release_actions');
15
+ if (!hasTable) {
16
+ return;
17
+ }
18
+ const hasPolymorphicColumn = await trx.schema.hasColumn('strapi_release_actions', 'target_id');
19
+ // If user has PolymorphicColumn means that is coming from v4
20
+ if (hasPolymorphicColumn) {
21
+ // First time coming from v4 user doesn't have entryDocumentId
22
+ // but we double check to avoid errors
23
+ const hasEntryDocumentIdColumn = await trx.schema.hasColumn('strapi_release_actions', 'entry_document_id');
24
+ if (!hasEntryDocumentIdColumn) {
25
+ await trx.schema.alterTable('strapi_release_actions', (table)=>{
26
+ table.string('entry_document_id');
27
+ });
28
+ }
29
+ const releaseActions = await trx.select('*').from('strapi_release_actions');
30
+ utils.async.map(releaseActions, async (action)=>{
31
+ const { target_type, target_id } = action;
32
+ const entry = await db.query(target_type).findOne({
33
+ where: {
34
+ id: target_id
35
+ }
36
+ });
37
+ if (entry) {
38
+ await trx('strapi_release_actions').update({
39
+ entry_document_id: entry.documentId
40
+ }).where('id', action.id);
41
+ }
42
+ });
43
+ }
44
+ },
45
+ async down () {
46
+ throw new Error('not implemented');
47
+ }
48
+ };
49
+
50
+ exports.addEntryDocumentToReleaseActions = addEntryDocumentToReleaseActions;
51
+ //# sourceMappingURL=5.0.0-document-id-in-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"5.0.0-document-id-in-actions.js","sources":["../../../../server/src/migrations/database/5.0.0-document-id-in-actions.ts"],"sourcesContent":["import { async } from '@strapi/utils';\n\nimport type { Migration, Database } from '@strapi/database';\n\ntype Knex = Parameters<Migration['up']>[0];\n\n/**\n * On v4, release actions are linked with entries using the built in Polymorphic relations.\n *\n * On v5, we are going to save entryDocumentId on the release action and make the link manually.\n * This because entryId is not a reliable way to link documents, as it can change.\n */\nexport const addEntryDocumentToReleaseActions: Migration = {\n name: 'content-releases::5.0.0-add-entry-document-id-to-release-actions',\n async up(trx: Knex, db: Database) {\n // Check if the table exists\n const hasTable = await trx.schema.hasTable('strapi_release_actions');\n\n if (!hasTable) {\n return;\n }\n\n const hasPolymorphicColumn = await trx.schema.hasColumn('strapi_release_actions', 'target_id');\n\n // If user has PolymorphicColumn means that is coming from v4\n if (hasPolymorphicColumn) {\n // First time coming from v4 user doesn't have entryDocumentId\n // but we double check to avoid errors\n const hasEntryDocumentIdColumn = await trx.schema.hasColumn(\n 'strapi_release_actions',\n 'entry_document_id'\n );\n\n if (!hasEntryDocumentIdColumn) {\n await trx.schema.alterTable('strapi_release_actions', (table) => {\n table.string('entry_document_id');\n });\n }\n\n const releaseActions = await trx.select('*').from('strapi_release_actions');\n\n async.map(releaseActions, async (action: any) => {\n const { target_type, target_id } = action;\n\n const entry = await db.query(target_type).findOne({ where: { id: target_id } });\n\n if (entry) {\n await trx('strapi_release_actions')\n .update({ entry_document_id: entry.documentId })\n .where('id', action.id);\n }\n });\n }\n },\n async down() {\n throw new Error('not implemented');\n },\n};\n"],"names":["addEntryDocumentToReleaseActions","name","up","trx","db","hasTable","schema","hasPolymorphicColumn","hasColumn","hasEntryDocumentIdColumn","alterTable","table","string","releaseActions","select","from","async","map","action","target_type","target_id","entry","query","findOne","where","id","update","entry_document_id","documentId","down","Error"],"mappings":";;;;AAMA;;;;;UAMaA,gCAA8C,GAAA;IACzDC,IAAM,EAAA,kEAAA;IACN,MAAMC,EAAAA,CAAAA,CAAGC,GAAS,EAAEC,EAAY,EAAA;;AAE9B,QAAA,MAAMC,WAAW,MAAMF,GAAAA,CAAIG,MAAM,CAACD,QAAQ,CAAC,wBAAA,CAAA;AAE3C,QAAA,IAAI,CAACA,QAAU,EAAA;AACb,YAAA;AACF;AAEA,QAAA,MAAME,uBAAuB,MAAMJ,GAAAA,CAAIG,MAAM,CAACE,SAAS,CAAC,wBAA0B,EAAA,WAAA,CAAA;;AAGlF,QAAA,IAAID,oBAAsB,EAAA;;;AAGxB,YAAA,MAAME,2BAA2B,MAAMN,GAAAA,CAAIG,MAAM,CAACE,SAAS,CACzD,wBACA,EAAA,mBAAA,CAAA;AAGF,YAAA,IAAI,CAACC,wBAA0B,EAAA;AAC7B,gBAAA,MAAMN,IAAIG,MAAM,CAACI,UAAU,CAAC,0BAA0B,CAACC,KAAAA,GAAAA;AACrDA,oBAAAA,KAAAA,CAAMC,MAAM,CAAC,mBAAA,CAAA;AACf,iBAAA,CAAA;AACF;AAEA,YAAA,MAAMC,iBAAiB,MAAMV,GAAAA,CAAIW,MAAM,CAAC,GAAA,CAAA,CAAKC,IAAI,CAAC,wBAAA,CAAA;YAElDC,WAAMC,CAAAA,GAAG,CAACJ,cAAAA,EAAgB,OAAOK,MAAAA,GAAAA;AAC/B,gBAAA,MAAM,EAAEC,WAAW,EAAEC,SAAS,EAAE,GAAGF,MAAAA;AAEnC,gBAAA,MAAMG,QAAQ,MAAMjB,EAAAA,CAAGkB,KAAK,CAACH,WAAAA,CAAAA,CAAaI,OAAO,CAAC;oBAAEC,KAAO,EAAA;wBAAEC,EAAIL,EAAAA;AAAU;AAAE,iBAAA,CAAA;AAE7E,gBAAA,IAAIC,KAAO,EAAA;oBACT,MAAMlB,GAAAA,CAAI,wBACPuB,CAAAA,CAAAA,MAAM,CAAC;AAAEC,wBAAAA,iBAAAA,EAAmBN,MAAMO;AAAW,qBAAA,CAAA,CAC7CJ,KAAK,CAAC,IAAMN,EAAAA,MAAAA,CAAOO,EAAE,CAAA;AAC1B;AACF,aAAA,CAAA;AACF;AACF,KAAA;IACA,MAAMI,IAAAA,CAAAA,GAAAA;AACJ,QAAA,MAAM,IAAIC,KAAM,CAAA,iBAAA,CAAA;AAClB;AACF;;;;"}
@@ -0,0 +1,49 @@
1
+ import { async } from '@strapi/utils';
2
+
3
+ /**
4
+ * On v4, release actions are linked with entries using the built in Polymorphic relations.
5
+ *
6
+ * On v5, we are going to save entryDocumentId on the release action and make the link manually.
7
+ * This because entryId is not a reliable way to link documents, as it can change.
8
+ */ const addEntryDocumentToReleaseActions = {
9
+ name: 'content-releases::5.0.0-add-entry-document-id-to-release-actions',
10
+ async up (trx, db) {
11
+ // Check if the table exists
12
+ const hasTable = await trx.schema.hasTable('strapi_release_actions');
13
+ if (!hasTable) {
14
+ return;
15
+ }
16
+ const hasPolymorphicColumn = await trx.schema.hasColumn('strapi_release_actions', 'target_id');
17
+ // If user has PolymorphicColumn means that is coming from v4
18
+ if (hasPolymorphicColumn) {
19
+ // First time coming from v4 user doesn't have entryDocumentId
20
+ // but we double check to avoid errors
21
+ const hasEntryDocumentIdColumn = await trx.schema.hasColumn('strapi_release_actions', 'entry_document_id');
22
+ if (!hasEntryDocumentIdColumn) {
23
+ await trx.schema.alterTable('strapi_release_actions', (table)=>{
24
+ table.string('entry_document_id');
25
+ });
26
+ }
27
+ const releaseActions = await trx.select('*').from('strapi_release_actions');
28
+ async.map(releaseActions, async (action)=>{
29
+ const { target_type, target_id } = action;
30
+ const entry = await db.query(target_type).findOne({
31
+ where: {
32
+ id: target_id
33
+ }
34
+ });
35
+ if (entry) {
36
+ await trx('strapi_release_actions').update({
37
+ entry_document_id: entry.documentId
38
+ }).where('id', action.id);
39
+ }
40
+ });
41
+ }
42
+ },
43
+ async down () {
44
+ throw new Error('not implemented');
45
+ }
46
+ };
47
+
48
+ export { addEntryDocumentToReleaseActions };
49
+ //# sourceMappingURL=5.0.0-document-id-in-actions.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"5.0.0-document-id-in-actions.mjs","sources":["../../../../server/src/migrations/database/5.0.0-document-id-in-actions.ts"],"sourcesContent":["import { async } from '@strapi/utils';\n\nimport type { Migration, Database } from '@strapi/database';\n\ntype Knex = Parameters<Migration['up']>[0];\n\n/**\n * On v4, release actions are linked with entries using the built in Polymorphic relations.\n *\n * On v5, we are going to save entryDocumentId on the release action and make the link manually.\n * This because entryId is not a reliable way to link documents, as it can change.\n */\nexport const addEntryDocumentToReleaseActions: Migration = {\n name: 'content-releases::5.0.0-add-entry-document-id-to-release-actions',\n async up(trx: Knex, db: Database) {\n // Check if the table exists\n const hasTable = await trx.schema.hasTable('strapi_release_actions');\n\n if (!hasTable) {\n return;\n }\n\n const hasPolymorphicColumn = await trx.schema.hasColumn('strapi_release_actions', 'target_id');\n\n // If user has PolymorphicColumn means that is coming from v4\n if (hasPolymorphicColumn) {\n // First time coming from v4 user doesn't have entryDocumentId\n // but we double check to avoid errors\n const hasEntryDocumentIdColumn = await trx.schema.hasColumn(\n 'strapi_release_actions',\n 'entry_document_id'\n );\n\n if (!hasEntryDocumentIdColumn) {\n await trx.schema.alterTable('strapi_release_actions', (table) => {\n table.string('entry_document_id');\n });\n }\n\n const releaseActions = await trx.select('*').from('strapi_release_actions');\n\n async.map(releaseActions, async (action: any) => {\n const { target_type, target_id } = action;\n\n const entry = await db.query(target_type).findOne({ where: { id: target_id } });\n\n if (entry) {\n await trx('strapi_release_actions')\n .update({ entry_document_id: entry.documentId })\n .where('id', action.id);\n }\n });\n }\n },\n async down() {\n throw new Error('not implemented');\n },\n};\n"],"names":["addEntryDocumentToReleaseActions","name","up","trx","db","hasTable","schema","hasPolymorphicColumn","hasColumn","hasEntryDocumentIdColumn","alterTable","table","string","releaseActions","select","from","async","map","action","target_type","target_id","entry","query","findOne","where","id","update","entry_document_id","documentId","down","Error"],"mappings":";;AAMA;;;;;UAMaA,gCAA8C,GAAA;IACzDC,IAAM,EAAA,kEAAA;IACN,MAAMC,EAAAA,CAAAA,CAAGC,GAAS,EAAEC,EAAY,EAAA;;AAE9B,QAAA,MAAMC,WAAW,MAAMF,GAAAA,CAAIG,MAAM,CAACD,QAAQ,CAAC,wBAAA,CAAA;AAE3C,QAAA,IAAI,CAACA,QAAU,EAAA;AACb,YAAA;AACF;AAEA,QAAA,MAAME,uBAAuB,MAAMJ,GAAAA,CAAIG,MAAM,CAACE,SAAS,CAAC,wBAA0B,EAAA,WAAA,CAAA;;AAGlF,QAAA,IAAID,oBAAsB,EAAA;;;AAGxB,YAAA,MAAME,2BAA2B,MAAMN,GAAAA,CAAIG,MAAM,CAACE,SAAS,CACzD,wBACA,EAAA,mBAAA,CAAA;AAGF,YAAA,IAAI,CAACC,wBAA0B,EAAA;AAC7B,gBAAA,MAAMN,IAAIG,MAAM,CAACI,UAAU,CAAC,0BAA0B,CAACC,KAAAA,GAAAA;AACrDA,oBAAAA,KAAAA,CAAMC,MAAM,CAAC,mBAAA,CAAA;AACf,iBAAA,CAAA;AACF;AAEA,YAAA,MAAMC,iBAAiB,MAAMV,GAAAA,CAAIW,MAAM,CAAC,GAAA,CAAA,CAAKC,IAAI,CAAC,wBAAA,CAAA;YAElDC,KAAMC,CAAAA,GAAG,CAACJ,cAAAA,EAAgB,OAAOK,MAAAA,GAAAA;AAC/B,gBAAA,MAAM,EAAEC,WAAW,EAAEC,SAAS,EAAE,GAAGF,MAAAA;AAEnC,gBAAA,MAAMG,QAAQ,MAAMjB,EAAAA,CAAGkB,KAAK,CAACH,WAAAA,CAAAA,CAAaI,OAAO,CAAC;oBAAEC,KAAO,EAAA;wBAAEC,EAAIL,EAAAA;AAAU;AAAE,iBAAA,CAAA;AAE7E,gBAAA,IAAIC,KAAO,EAAA;oBACT,MAAMlB,GAAAA,CAAI,wBACPuB,CAAAA,CAAAA,MAAM,CAAC;AAAEC,wBAAAA,iBAAAA,EAAmBN,MAAMO;AAAW,qBAAA,CAAA,CAC7CJ,KAAK,CAAC,IAAMN,EAAAA,MAAAA,CAAOO,EAAE,CAAA;AAC1B;AACF,aAAA,CAAA;AACF;AACF,KAAA;IACA,MAAMI,IAAAA,CAAAA,GAAAA;AACJ,QAAA,MAAM,IAAIC,KAAM,CAAA,iBAAA,CAAA;AAClB;AACF;;;;"}
@@ -0,0 +1,205 @@
1
+ 'use strict';
2
+
3
+ var utils = require('@strapi/utils');
4
+ var isEqual = require('lodash/isEqual');
5
+ var lodash = require('lodash');
6
+ var constants = require('../constants.js');
7
+ var index = require('../utils/index.js');
8
+
9
+ async function deleteActionsOnDisableDraftAndPublish({ oldContentTypes, contentTypes }) {
10
+ if (!oldContentTypes) {
11
+ return;
12
+ }
13
+ for(const uid in contentTypes){
14
+ if (!oldContentTypes[uid]) {
15
+ continue;
16
+ }
17
+ const oldContentType = oldContentTypes[uid];
18
+ const contentType = contentTypes[uid];
19
+ if (utils.contentTypes.hasDraftAndPublish(oldContentType) && !utils.contentTypes.hasDraftAndPublish(contentType)) {
20
+ await strapi.db?.queryBuilder(constants.RELEASE_ACTION_MODEL_UID).delete().where({
21
+ contentType: uid
22
+ }).execute();
23
+ }
24
+ }
25
+ }
26
+ async function deleteActionsOnDeleteContentType({ oldContentTypes, contentTypes }) {
27
+ const deletedContentTypes = lodash.difference(lodash.keys(oldContentTypes), lodash.keys(contentTypes)) ?? [];
28
+ if (deletedContentTypes.length) {
29
+ await utils.async.map(deletedContentTypes, async (deletedContentTypeUID)=>{
30
+ return strapi.db?.queryBuilder(constants.RELEASE_ACTION_MODEL_UID).delete().where({
31
+ contentType: deletedContentTypeUID
32
+ }).execute();
33
+ });
34
+ }
35
+ }
36
+ async function migrateIsValidAndStatusReleases() {
37
+ const releasesWithoutStatus = await strapi.db.query(constants.RELEASE_MODEL_UID).findMany({
38
+ where: {
39
+ status: null,
40
+ releasedAt: null
41
+ },
42
+ populate: {
43
+ actions: {
44
+ populate: {
45
+ entry: true
46
+ }
47
+ }
48
+ }
49
+ });
50
+ utils.async.map(releasesWithoutStatus, async (release)=>{
51
+ const actions = release.actions;
52
+ const notValidatedActions = actions.filter((action)=>action.isEntryValid === null);
53
+ for (const action of notValidatedActions){
54
+ // We need to check the Action is related to a valid entry because we can't assume this is gonna be always the case
55
+ // example: users could make changes directly to their database, or data could be lost
56
+ if (action.entry) {
57
+ const isEntryValid = index.getDraftEntryValidStatus({
58
+ contentType: action.contentType,
59
+ documentId: action.entryDocumentId,
60
+ locale: action.locale
61
+ }, {
62
+ strapi
63
+ });
64
+ await strapi.db.query(constants.RELEASE_ACTION_MODEL_UID).update({
65
+ where: {
66
+ id: action.id
67
+ },
68
+ data: {
69
+ isEntryValid
70
+ }
71
+ });
72
+ }
73
+ }
74
+ return index.getService('release', {
75
+ strapi
76
+ }).updateReleaseStatus(release.id);
77
+ });
78
+ const publishedReleases = await strapi.db.query(constants.RELEASE_MODEL_UID).findMany({
79
+ where: {
80
+ status: null,
81
+ releasedAt: {
82
+ $notNull: true
83
+ }
84
+ }
85
+ });
86
+ utils.async.map(publishedReleases, async (release)=>{
87
+ return strapi.db.query(constants.RELEASE_MODEL_UID).update({
88
+ where: {
89
+ id: release.id
90
+ },
91
+ data: {
92
+ status: 'done'
93
+ }
94
+ });
95
+ });
96
+ }
97
+ async function revalidateChangedContentTypes({ oldContentTypes, contentTypes }) {
98
+ if (oldContentTypes !== undefined && contentTypes !== undefined) {
99
+ const contentTypesWithDraftAndPublish = Object.keys(oldContentTypes).filter((uid)=>oldContentTypes[uid]?.options?.draftAndPublish);
100
+ const releasesAffected = new Set();
101
+ utils.async.map(contentTypesWithDraftAndPublish, async (contentTypeUID)=>{
102
+ const oldContentType = oldContentTypes[contentTypeUID];
103
+ const contentType = contentTypes[contentTypeUID];
104
+ // If attributes have changed, we need to revalidate actions because maybe validations rules are different
105
+ if (!isEqual(oldContentType?.attributes, contentType?.attributes)) {
106
+ const actions = await strapi.db.query(constants.RELEASE_ACTION_MODEL_UID).findMany({
107
+ where: {
108
+ contentType: contentTypeUID
109
+ },
110
+ populate: {
111
+ entry: true,
112
+ release: true
113
+ }
114
+ });
115
+ await utils.async.map(actions, async (action)=>{
116
+ if (action.entry && action.release && action.type === 'publish') {
117
+ const isEntryValid = await index.getDraftEntryValidStatus({
118
+ contentType: contentTypeUID,
119
+ documentId: action.entryDocumentId,
120
+ locale: action.locale
121
+ }, {
122
+ strapi
123
+ });
124
+ releasesAffected.add(action.release.id);
125
+ await strapi.db.query(constants.RELEASE_ACTION_MODEL_UID).update({
126
+ where: {
127
+ id: action.id
128
+ },
129
+ data: {
130
+ isEntryValid
131
+ }
132
+ });
133
+ }
134
+ });
135
+ }
136
+ }).then(()=>{
137
+ // We need to update the status of the releases affected
138
+ utils.async.map(releasesAffected, async (releaseId)=>{
139
+ return index.getService('release', {
140
+ strapi
141
+ }).updateReleaseStatus(releaseId);
142
+ });
143
+ });
144
+ }
145
+ }
146
+ async function disableContentTypeLocalized({ oldContentTypes, contentTypes }) {
147
+ if (!oldContentTypes) {
148
+ return;
149
+ }
150
+ const i18nPlugin = strapi.plugin('i18n');
151
+ if (!i18nPlugin) {
152
+ return;
153
+ }
154
+ for(const uid in contentTypes){
155
+ if (!oldContentTypes[uid]) {
156
+ continue;
157
+ }
158
+ const oldContentType = oldContentTypes[uid];
159
+ const contentType = contentTypes[uid];
160
+ const { isLocalizedContentType } = i18nPlugin.service('content-types');
161
+ // if i18N is disabled remove non default locales before sync
162
+ if (isLocalizedContentType(oldContentType) && !isLocalizedContentType(contentType)) {
163
+ await strapi.db.queryBuilder(constants.RELEASE_ACTION_MODEL_UID).update({
164
+ locale: null
165
+ }).where({
166
+ contentType: uid
167
+ }).execute();
168
+ }
169
+ }
170
+ }
171
+ async function enableContentTypeLocalized({ oldContentTypes, contentTypes }) {
172
+ if (!oldContentTypes) {
173
+ return;
174
+ }
175
+ const i18nPlugin = strapi.plugin('i18n');
176
+ if (!i18nPlugin) {
177
+ return;
178
+ }
179
+ for(const uid in contentTypes){
180
+ if (!oldContentTypes[uid]) {
181
+ continue;
182
+ }
183
+ const oldContentType = oldContentTypes[uid];
184
+ const contentType = contentTypes[uid];
185
+ const { isLocalizedContentType } = i18nPlugin.service('content-types');
186
+ const { getDefaultLocale } = i18nPlugin.service('locales');
187
+ // if i18N is enabled remove non default locales before sync
188
+ if (!isLocalizedContentType(oldContentType) && isLocalizedContentType(contentType)) {
189
+ const defaultLocale = await getDefaultLocale();
190
+ await strapi.db.queryBuilder(constants.RELEASE_ACTION_MODEL_UID).update({
191
+ locale: defaultLocale
192
+ }).where({
193
+ contentType: uid
194
+ }).execute();
195
+ }
196
+ }
197
+ }
198
+
199
+ exports.deleteActionsOnDeleteContentType = deleteActionsOnDeleteContentType;
200
+ exports.deleteActionsOnDisableDraftAndPublish = deleteActionsOnDisableDraftAndPublish;
201
+ exports.disableContentTypeLocalized = disableContentTypeLocalized;
202
+ exports.enableContentTypeLocalized = enableContentTypeLocalized;
203
+ exports.migrateIsValidAndStatusReleases = migrateIsValidAndStatusReleases;
204
+ exports.revalidateChangedContentTypes = revalidateChangedContentTypes;
205
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../server/src/migrations/index.ts"],"sourcesContent":["import type { Schema, UID } from '@strapi/types';\nimport { contentTypes as contentTypesUtils, async } from '@strapi/utils';\nimport isEqual from 'lodash/isEqual';\n\nimport { difference, keys } from 'lodash';\nimport { RELEASE_ACTION_MODEL_UID, RELEASE_MODEL_UID } from '../constants';\nimport { getDraftEntryValidStatus, getService } from '../utils';\nimport { Release } from '../../../shared/contracts/releases';\nimport { ReleaseAction } from '../../../shared/contracts/release-actions';\n\ninterface Input {\n oldContentTypes: Record<string, Schema.ContentType>;\n contentTypes: Record<string, Schema.ContentType>;\n}\n\nexport async function deleteActionsOnDisableDraftAndPublish({\n oldContentTypes,\n contentTypes,\n}: Input) {\n if (!oldContentTypes) {\n return;\n }\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n if (\n contentTypesUtils.hasDraftAndPublish(oldContentType) &&\n !contentTypesUtils.hasDraftAndPublish(contentType)\n ) {\n await strapi.db\n ?.queryBuilder(RELEASE_ACTION_MODEL_UID)\n .delete()\n .where({ contentType: uid })\n .execute();\n }\n }\n}\n\nexport async function deleteActionsOnDeleteContentType({ oldContentTypes, contentTypes }: Input) {\n const deletedContentTypes = difference(keys(oldContentTypes), keys(contentTypes)) ?? [];\n\n if (deletedContentTypes.length) {\n await async.map(deletedContentTypes, async (deletedContentTypeUID: unknown) => {\n return strapi.db\n ?.queryBuilder(RELEASE_ACTION_MODEL_UID)\n .delete()\n .where({ contentType: deletedContentTypeUID })\n .execute();\n });\n }\n}\n\nexport async function migrateIsValidAndStatusReleases() {\n const releasesWithoutStatus = (await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n status: null,\n releasedAt: null,\n },\n populate: {\n actions: {\n populate: {\n entry: true,\n },\n },\n },\n })) as Release[];\n\n async.map(releasesWithoutStatus, async (release: Release) => {\n const actions = release.actions;\n\n const notValidatedActions = actions.filter((action) => action.isEntryValid === null);\n\n for (const action of notValidatedActions) {\n // We need to check the Action is related to a valid entry because we can't assume this is gonna be always the case\n // example: users could make changes directly to their database, or data could be lost\n if (action.entry) {\n const isEntryValid = getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n { strapi }\n );\n\n await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({\n where: {\n id: action.id,\n },\n data: {\n isEntryValid,\n },\n });\n }\n }\n\n return getService('release', { strapi }).updateReleaseStatus(release.id);\n });\n\n const publishedReleases = await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n status: null,\n releasedAt: {\n $notNull: true,\n },\n },\n });\n\n async.map(publishedReleases, async (release: Release) => {\n return strapi.db.query(RELEASE_MODEL_UID).update({\n where: {\n id: release.id,\n },\n data: {\n status: 'done',\n },\n });\n });\n}\n\nexport async function revalidateChangedContentTypes({ oldContentTypes, contentTypes }: Input) {\n if (oldContentTypes !== undefined && contentTypes !== undefined) {\n const contentTypesWithDraftAndPublish = Object.keys(oldContentTypes).filter(\n (uid) => oldContentTypes[uid]?.options?.draftAndPublish\n );\n const releasesAffected = new Set();\n\n async\n .map(contentTypesWithDraftAndPublish, async (contentTypeUID: UID.ContentType) => {\n const oldContentType = oldContentTypes[contentTypeUID];\n const contentType = contentTypes[contentTypeUID];\n\n // If attributes have changed, we need to revalidate actions because maybe validations rules are different\n if (!isEqual(oldContentType?.attributes, contentType?.attributes)) {\n const actions = await strapi.db.query(RELEASE_ACTION_MODEL_UID).findMany({\n where: {\n contentType: contentTypeUID,\n },\n populate: {\n entry: true,\n release: true,\n },\n });\n\n await async.map(actions, async (action: ReleaseAction) => {\n if (action.entry && action.release && action.type === 'publish') {\n const isEntryValid = await getDraftEntryValidStatus(\n {\n contentType: contentTypeUID,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n { strapi }\n );\n\n releasesAffected.add(action.release.id);\n\n await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({\n where: {\n id: action.id,\n },\n data: {\n isEntryValid,\n },\n });\n }\n });\n }\n })\n .then(() => {\n // We need to update the status of the releases affected\n async.map(releasesAffected, async (releaseId: Release['id']) => {\n return getService('release', { strapi }).updateReleaseStatus(releaseId);\n });\n });\n }\n}\n\nexport async function disableContentTypeLocalized({ oldContentTypes, contentTypes }: Input) {\n if (!oldContentTypes) {\n return;\n }\n\n const i18nPlugin = strapi.plugin('i18n');\n if (!i18nPlugin) {\n return;\n }\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n const { isLocalizedContentType } = i18nPlugin.service('content-types');\n\n // if i18N is disabled remove non default locales before sync\n if (isLocalizedContentType(oldContentType) && !isLocalizedContentType(contentType)) {\n await strapi.db\n .queryBuilder(RELEASE_ACTION_MODEL_UID)\n .update({\n locale: null,\n })\n .where({ contentType: uid })\n .execute();\n }\n }\n}\n\nexport async function enableContentTypeLocalized({ oldContentTypes, contentTypes }: Input) {\n if (!oldContentTypes) {\n return;\n }\n\n const i18nPlugin = strapi.plugin('i18n');\n if (!i18nPlugin) {\n return;\n }\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n const { isLocalizedContentType } = i18nPlugin.service('content-types');\n const { getDefaultLocale } = i18nPlugin.service('locales');\n\n // if i18N is enabled remove non default locales before sync\n if (!isLocalizedContentType(oldContentType) && isLocalizedContentType(contentType)) {\n const defaultLocale = await getDefaultLocale();\n\n await strapi.db\n .queryBuilder(RELEASE_ACTION_MODEL_UID)\n .update({\n locale: defaultLocale,\n })\n .where({ contentType: uid })\n .execute();\n }\n }\n}\n"],"names":["deleteActionsOnDisableDraftAndPublish","oldContentTypes","contentTypes","uid","oldContentType","contentType","contentTypesUtils","hasDraftAndPublish","strapi","db","queryBuilder","RELEASE_ACTION_MODEL_UID","delete","where","execute","deleteActionsOnDeleteContentType","deletedContentTypes","difference","keys","length","async","map","deletedContentTypeUID","migrateIsValidAndStatusReleases","releasesWithoutStatus","query","RELEASE_MODEL_UID","findMany","status","releasedAt","populate","actions","entry","release","notValidatedActions","filter","action","isEntryValid","getDraftEntryValidStatus","documentId","entryDocumentId","locale","update","id","data","getService","updateReleaseStatus","publishedReleases","$notNull","revalidateChangedContentTypes","undefined","contentTypesWithDraftAndPublish","Object","options","draftAndPublish","releasesAffected","Set","contentTypeUID","isEqual","attributes","type","add","then","releaseId","disableContentTypeLocalized","i18nPlugin","plugin","isLocalizedContentType","service","enableContentTypeLocalized","getDefaultLocale","defaultLocale"],"mappings":"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"}
@@ -0,0 +1,198 @@
1
+ import { contentTypes, async } from '@strapi/utils';
2
+ import isEqual from 'lodash/isEqual';
3
+ import { difference, keys } from 'lodash';
4
+ import { RELEASE_ACTION_MODEL_UID, RELEASE_MODEL_UID } from '../constants.mjs';
5
+ import { getDraftEntryValidStatus, getService } from '../utils/index.mjs';
6
+
7
+ async function deleteActionsOnDisableDraftAndPublish({ oldContentTypes, contentTypes: contentTypes$1 }) {
8
+ if (!oldContentTypes) {
9
+ return;
10
+ }
11
+ for(const uid in contentTypes$1){
12
+ if (!oldContentTypes[uid]) {
13
+ continue;
14
+ }
15
+ const oldContentType = oldContentTypes[uid];
16
+ const contentType = contentTypes$1[uid];
17
+ if (contentTypes.hasDraftAndPublish(oldContentType) && !contentTypes.hasDraftAndPublish(contentType)) {
18
+ await strapi.db?.queryBuilder(RELEASE_ACTION_MODEL_UID).delete().where({
19
+ contentType: uid
20
+ }).execute();
21
+ }
22
+ }
23
+ }
24
+ async function deleteActionsOnDeleteContentType({ oldContentTypes, contentTypes }) {
25
+ const deletedContentTypes = difference(keys(oldContentTypes), keys(contentTypes)) ?? [];
26
+ if (deletedContentTypes.length) {
27
+ await async.map(deletedContentTypes, async (deletedContentTypeUID)=>{
28
+ return strapi.db?.queryBuilder(RELEASE_ACTION_MODEL_UID).delete().where({
29
+ contentType: deletedContentTypeUID
30
+ }).execute();
31
+ });
32
+ }
33
+ }
34
+ async function migrateIsValidAndStatusReleases() {
35
+ const releasesWithoutStatus = await strapi.db.query(RELEASE_MODEL_UID).findMany({
36
+ where: {
37
+ status: null,
38
+ releasedAt: null
39
+ },
40
+ populate: {
41
+ actions: {
42
+ populate: {
43
+ entry: true
44
+ }
45
+ }
46
+ }
47
+ });
48
+ async.map(releasesWithoutStatus, async (release)=>{
49
+ const actions = release.actions;
50
+ const notValidatedActions = actions.filter((action)=>action.isEntryValid === null);
51
+ for (const action of notValidatedActions){
52
+ // We need to check the Action is related to a valid entry because we can't assume this is gonna be always the case
53
+ // example: users could make changes directly to their database, or data could be lost
54
+ if (action.entry) {
55
+ const isEntryValid = getDraftEntryValidStatus({
56
+ contentType: action.contentType,
57
+ documentId: action.entryDocumentId,
58
+ locale: action.locale
59
+ }, {
60
+ strapi
61
+ });
62
+ await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({
63
+ where: {
64
+ id: action.id
65
+ },
66
+ data: {
67
+ isEntryValid
68
+ }
69
+ });
70
+ }
71
+ }
72
+ return getService('release', {
73
+ strapi
74
+ }).updateReleaseStatus(release.id);
75
+ });
76
+ const publishedReleases = await strapi.db.query(RELEASE_MODEL_UID).findMany({
77
+ where: {
78
+ status: null,
79
+ releasedAt: {
80
+ $notNull: true
81
+ }
82
+ }
83
+ });
84
+ async.map(publishedReleases, async (release)=>{
85
+ return strapi.db.query(RELEASE_MODEL_UID).update({
86
+ where: {
87
+ id: release.id
88
+ },
89
+ data: {
90
+ status: 'done'
91
+ }
92
+ });
93
+ });
94
+ }
95
+ async function revalidateChangedContentTypes({ oldContentTypes, contentTypes }) {
96
+ if (oldContentTypes !== undefined && contentTypes !== undefined) {
97
+ const contentTypesWithDraftAndPublish = Object.keys(oldContentTypes).filter((uid)=>oldContentTypes[uid]?.options?.draftAndPublish);
98
+ const releasesAffected = new Set();
99
+ async.map(contentTypesWithDraftAndPublish, async (contentTypeUID)=>{
100
+ const oldContentType = oldContentTypes[contentTypeUID];
101
+ const contentType = contentTypes[contentTypeUID];
102
+ // If attributes have changed, we need to revalidate actions because maybe validations rules are different
103
+ if (!isEqual(oldContentType?.attributes, contentType?.attributes)) {
104
+ const actions = await strapi.db.query(RELEASE_ACTION_MODEL_UID).findMany({
105
+ where: {
106
+ contentType: contentTypeUID
107
+ },
108
+ populate: {
109
+ entry: true,
110
+ release: true
111
+ }
112
+ });
113
+ await async.map(actions, async (action)=>{
114
+ if (action.entry && action.release && action.type === 'publish') {
115
+ const isEntryValid = await getDraftEntryValidStatus({
116
+ contentType: contentTypeUID,
117
+ documentId: action.entryDocumentId,
118
+ locale: action.locale
119
+ }, {
120
+ strapi
121
+ });
122
+ releasesAffected.add(action.release.id);
123
+ await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({
124
+ where: {
125
+ id: action.id
126
+ },
127
+ data: {
128
+ isEntryValid
129
+ }
130
+ });
131
+ }
132
+ });
133
+ }
134
+ }).then(()=>{
135
+ // We need to update the status of the releases affected
136
+ async.map(releasesAffected, async (releaseId)=>{
137
+ return getService('release', {
138
+ strapi
139
+ }).updateReleaseStatus(releaseId);
140
+ });
141
+ });
142
+ }
143
+ }
144
+ async function disableContentTypeLocalized({ oldContentTypes, contentTypes }) {
145
+ if (!oldContentTypes) {
146
+ return;
147
+ }
148
+ const i18nPlugin = strapi.plugin('i18n');
149
+ if (!i18nPlugin) {
150
+ return;
151
+ }
152
+ for(const uid in contentTypes){
153
+ if (!oldContentTypes[uid]) {
154
+ continue;
155
+ }
156
+ const oldContentType = oldContentTypes[uid];
157
+ const contentType = contentTypes[uid];
158
+ const { isLocalizedContentType } = i18nPlugin.service('content-types');
159
+ // if i18N is disabled remove non default locales before sync
160
+ if (isLocalizedContentType(oldContentType) && !isLocalizedContentType(contentType)) {
161
+ await strapi.db.queryBuilder(RELEASE_ACTION_MODEL_UID).update({
162
+ locale: null
163
+ }).where({
164
+ contentType: uid
165
+ }).execute();
166
+ }
167
+ }
168
+ }
169
+ async function enableContentTypeLocalized({ oldContentTypes, contentTypes }) {
170
+ if (!oldContentTypes) {
171
+ return;
172
+ }
173
+ const i18nPlugin = strapi.plugin('i18n');
174
+ if (!i18nPlugin) {
175
+ return;
176
+ }
177
+ for(const uid in contentTypes){
178
+ if (!oldContentTypes[uid]) {
179
+ continue;
180
+ }
181
+ const oldContentType = oldContentTypes[uid];
182
+ const contentType = contentTypes[uid];
183
+ const { isLocalizedContentType } = i18nPlugin.service('content-types');
184
+ const { getDefaultLocale } = i18nPlugin.service('locales');
185
+ // if i18N is enabled remove non default locales before sync
186
+ if (!isLocalizedContentType(oldContentType) && isLocalizedContentType(contentType)) {
187
+ const defaultLocale = await getDefaultLocale();
188
+ await strapi.db.queryBuilder(RELEASE_ACTION_MODEL_UID).update({
189
+ locale: defaultLocale
190
+ }).where({
191
+ contentType: uid
192
+ }).execute();
193
+ }
194
+ }
195
+ }
196
+
197
+ export { deleteActionsOnDeleteContentType, deleteActionsOnDisableDraftAndPublish, disableContentTypeLocalized, enableContentTypeLocalized, migrateIsValidAndStatusReleases, revalidateChangedContentTypes };
198
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../server/src/migrations/index.ts"],"sourcesContent":["import type { Schema, UID } from '@strapi/types';\nimport { contentTypes as contentTypesUtils, async } from '@strapi/utils';\nimport isEqual from 'lodash/isEqual';\n\nimport { difference, keys } from 'lodash';\nimport { RELEASE_ACTION_MODEL_UID, RELEASE_MODEL_UID } from '../constants';\nimport { getDraftEntryValidStatus, getService } from '../utils';\nimport { Release } from '../../../shared/contracts/releases';\nimport { ReleaseAction } from '../../../shared/contracts/release-actions';\n\ninterface Input {\n oldContentTypes: Record<string, Schema.ContentType>;\n contentTypes: Record<string, Schema.ContentType>;\n}\n\nexport async function deleteActionsOnDisableDraftAndPublish({\n oldContentTypes,\n contentTypes,\n}: Input) {\n if (!oldContentTypes) {\n return;\n }\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n if (\n contentTypesUtils.hasDraftAndPublish(oldContentType) &&\n !contentTypesUtils.hasDraftAndPublish(contentType)\n ) {\n await strapi.db\n ?.queryBuilder(RELEASE_ACTION_MODEL_UID)\n .delete()\n .where({ contentType: uid })\n .execute();\n }\n }\n}\n\nexport async function deleteActionsOnDeleteContentType({ oldContentTypes, contentTypes }: Input) {\n const deletedContentTypes = difference(keys(oldContentTypes), keys(contentTypes)) ?? [];\n\n if (deletedContentTypes.length) {\n await async.map(deletedContentTypes, async (deletedContentTypeUID: unknown) => {\n return strapi.db\n ?.queryBuilder(RELEASE_ACTION_MODEL_UID)\n .delete()\n .where({ contentType: deletedContentTypeUID })\n .execute();\n });\n }\n}\n\nexport async function migrateIsValidAndStatusReleases() {\n const releasesWithoutStatus = (await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n status: null,\n releasedAt: null,\n },\n populate: {\n actions: {\n populate: {\n entry: true,\n },\n },\n },\n })) as Release[];\n\n async.map(releasesWithoutStatus, async (release: Release) => {\n const actions = release.actions;\n\n const notValidatedActions = actions.filter((action) => action.isEntryValid === null);\n\n for (const action of notValidatedActions) {\n // We need to check the Action is related to a valid entry because we can't assume this is gonna be always the case\n // example: users could make changes directly to their database, or data could be lost\n if (action.entry) {\n const isEntryValid = getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n { strapi }\n );\n\n await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({\n where: {\n id: action.id,\n },\n data: {\n isEntryValid,\n },\n });\n }\n }\n\n return getService('release', { strapi }).updateReleaseStatus(release.id);\n });\n\n const publishedReleases = await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n status: null,\n releasedAt: {\n $notNull: true,\n },\n },\n });\n\n async.map(publishedReleases, async (release: Release) => {\n return strapi.db.query(RELEASE_MODEL_UID).update({\n where: {\n id: release.id,\n },\n data: {\n status: 'done',\n },\n });\n });\n}\n\nexport async function revalidateChangedContentTypes({ oldContentTypes, contentTypes }: Input) {\n if (oldContentTypes !== undefined && contentTypes !== undefined) {\n const contentTypesWithDraftAndPublish = Object.keys(oldContentTypes).filter(\n (uid) => oldContentTypes[uid]?.options?.draftAndPublish\n );\n const releasesAffected = new Set();\n\n async\n .map(contentTypesWithDraftAndPublish, async (contentTypeUID: UID.ContentType) => {\n const oldContentType = oldContentTypes[contentTypeUID];\n const contentType = contentTypes[contentTypeUID];\n\n // If attributes have changed, we need to revalidate actions because maybe validations rules are different\n if (!isEqual(oldContentType?.attributes, contentType?.attributes)) {\n const actions = await strapi.db.query(RELEASE_ACTION_MODEL_UID).findMany({\n where: {\n contentType: contentTypeUID,\n },\n populate: {\n entry: true,\n release: true,\n },\n });\n\n await async.map(actions, async (action: ReleaseAction) => {\n if (action.entry && action.release && action.type === 'publish') {\n const isEntryValid = await getDraftEntryValidStatus(\n {\n contentType: contentTypeUID,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n { strapi }\n );\n\n releasesAffected.add(action.release.id);\n\n await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({\n where: {\n id: action.id,\n },\n data: {\n isEntryValid,\n },\n });\n }\n });\n }\n })\n .then(() => {\n // We need to update the status of the releases affected\n async.map(releasesAffected, async (releaseId: Release['id']) => {\n return getService('release', { strapi }).updateReleaseStatus(releaseId);\n });\n });\n }\n}\n\nexport async function disableContentTypeLocalized({ oldContentTypes, contentTypes }: Input) {\n if (!oldContentTypes) {\n return;\n }\n\n const i18nPlugin = strapi.plugin('i18n');\n if (!i18nPlugin) {\n return;\n }\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n const { isLocalizedContentType } = i18nPlugin.service('content-types');\n\n // if i18N is disabled remove non default locales before sync\n if (isLocalizedContentType(oldContentType) && !isLocalizedContentType(contentType)) {\n await strapi.db\n .queryBuilder(RELEASE_ACTION_MODEL_UID)\n .update({\n locale: null,\n })\n .where({ contentType: uid })\n .execute();\n }\n }\n}\n\nexport async function enableContentTypeLocalized({ oldContentTypes, contentTypes }: Input) {\n if (!oldContentTypes) {\n return;\n }\n\n const i18nPlugin = strapi.plugin('i18n');\n if (!i18nPlugin) {\n return;\n }\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n const { isLocalizedContentType } = i18nPlugin.service('content-types');\n const { getDefaultLocale } = i18nPlugin.service('locales');\n\n // if i18N is enabled remove non default locales before sync\n if (!isLocalizedContentType(oldContentType) && isLocalizedContentType(contentType)) {\n const defaultLocale = await getDefaultLocale();\n\n await strapi.db\n .queryBuilder(RELEASE_ACTION_MODEL_UID)\n .update({\n locale: defaultLocale,\n })\n .where({ contentType: uid })\n .execute();\n }\n }\n}\n"],"names":["deleteActionsOnDisableDraftAndPublish","oldContentTypes","contentTypes","uid","oldContentType","contentType","contentTypesUtils","hasDraftAndPublish","strapi","db","queryBuilder","RELEASE_ACTION_MODEL_UID","delete","where","execute","deleteActionsOnDeleteContentType","deletedContentTypes","difference","keys","length","async","map","deletedContentTypeUID","migrateIsValidAndStatusReleases","releasesWithoutStatus","query","RELEASE_MODEL_UID","findMany","status","releasedAt","populate","actions","entry","release","notValidatedActions","filter","action","isEntryValid","getDraftEntryValidStatus","documentId","entryDocumentId","locale","update","id","data","getService","updateReleaseStatus","publishedReleases","$notNull","revalidateChangedContentTypes","undefined","contentTypesWithDraftAndPublish","Object","options","draftAndPublish","releasesAffected","Set","contentTypeUID","isEqual","attributes","type","add","then","releaseId","disableContentTypeLocalized","i18nPlugin","plugin","isLocalizedContentType","service","enableContentTypeLocalized","getDefaultLocale","defaultLocale"],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ var constants = require('./constants.js');
4
+ var index = require('./migrations/index.js');
5
+ var _5_0_0DocumentIdInActions = require('./migrations/database/5.0.0-document-id-in-actions.js');
6
+
7
+ const register = async ({ strapi })=>{
8
+ if (strapi.ee.features.isEnabled('cms-content-releases')) {
9
+ await strapi.service('admin::permission').actionProvider.registerMany(constants.ACTIONS);
10
+ strapi.db.migrations.providers.internal.register(_5_0_0DocumentIdInActions.addEntryDocumentToReleaseActions);
11
+ strapi.hook('strapi::content-types.beforeSync').register(index.disableContentTypeLocalized).register(index.deleteActionsOnDisableDraftAndPublish);
12
+ strapi.hook('strapi::content-types.afterSync').register(index.deleteActionsOnDeleteContentType).register(index.enableContentTypeLocalized).register(index.revalidateChangedContentTypes).register(index.migrateIsValidAndStatusReleases);
13
+ }
14
+ if (strapi.plugin('graphql')) {
15
+ const graphqlExtensionService = strapi.plugin('graphql').service('extension');
16
+ // Exclude the release and release action models from the GraphQL schema
17
+ graphqlExtensionService.shadowCRUD(constants.RELEASE_MODEL_UID).disable();
18
+ graphqlExtensionService.shadowCRUD(constants.RELEASE_ACTION_MODEL_UID).disable();
19
+ }
20
+ };
21
+
22
+ exports.register = register;
23
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sources":["../../server/src/register.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport type { Core } from '@strapi/types';\n\nimport { ACTIONS, RELEASE_MODEL_UID, RELEASE_ACTION_MODEL_UID } from './constants';\nimport {\n deleteActionsOnDeleteContentType,\n deleteActionsOnDisableDraftAndPublish,\n migrateIsValidAndStatusReleases,\n revalidateChangedContentTypes,\n disableContentTypeLocalized,\n enableContentTypeLocalized,\n} from './migrations';\nimport { addEntryDocumentToReleaseActions } from './migrations/database/5.0.0-document-id-in-actions';\n\nexport const register = async ({ strapi }: { strapi: Core.Strapi }) => {\n if (strapi.ee.features.isEnabled('cms-content-releases')) {\n await strapi.service('admin::permission').actionProvider.registerMany(ACTIONS);\n\n strapi.db.migrations.providers.internal.register(addEntryDocumentToReleaseActions);\n\n strapi\n .hook('strapi::content-types.beforeSync')\n .register(disableContentTypeLocalized)\n .register(deleteActionsOnDisableDraftAndPublish);\n\n strapi\n .hook('strapi::content-types.afterSync')\n .register(deleteActionsOnDeleteContentType)\n .register(enableContentTypeLocalized)\n .register(revalidateChangedContentTypes)\n .register(migrateIsValidAndStatusReleases);\n }\n\n if (strapi.plugin('graphql')) {\n const graphqlExtensionService = strapi.plugin('graphql').service('extension');\n // Exclude the release and release action models from the GraphQL schema\n graphqlExtensionService.shadowCRUD(RELEASE_MODEL_UID).disable();\n graphqlExtensionService.shadowCRUD(RELEASE_ACTION_MODEL_UID).disable();\n }\n};\n"],"names":["register","strapi","ee","features","isEnabled","service","actionProvider","registerMany","ACTIONS","db","migrations","providers","internal","addEntryDocumentToReleaseActions","hook","disableContentTypeLocalized","deleteActionsOnDisableDraftAndPublish","deleteActionsOnDeleteContentType","enableContentTypeLocalized","revalidateChangedContentTypes","migrateIsValidAndStatusReleases","plugin","graphqlExtensionService","shadowCRUD","RELEASE_MODEL_UID","disable","RELEASE_ACTION_MODEL_UID"],"mappings":";;;;;;AAcaA,MAAAA,QAAAA,GAAW,OAAO,EAAEC,MAAM,EAA2B,GAAA;AAChE,IAAA,IAAIA,OAAOC,EAAE,CAACC,QAAQ,CAACC,SAAS,CAAC,sBAAyB,CAAA,EAAA;AACxD,QAAA,MAAMH,OAAOI,OAAO,CAAC,qBAAqBC,cAAc,CAACC,YAAY,CAACC,iBAAAA,CAAAA;QAEtEP,MAAOQ,CAAAA,EAAE,CAACC,UAAU,CAACC,SAAS,CAACC,QAAQ,CAACZ,QAAQ,CAACa,0DAAAA,CAAAA;AAEjDZ,QAAAA,MAAAA,CACGa,IAAI,CAAC,kCAAA,CAAA,CACLd,QAAQ,CAACe,iCAAAA,CAAAA,CACTf,QAAQ,CAACgB,2CAAAA,CAAAA;AAEZf,QAAAA,MAAAA,CACGa,IAAI,CAAC,iCACLd,CAAAA,CAAAA,QAAQ,CAACiB,sCAAAA,CAAAA,CACTjB,QAAQ,CAACkB,gCACTlB,CAAAA,CAAAA,QAAQ,CAACmB,mCAAAA,CAAAA,CACTnB,QAAQ,CAACoB,qCAAAA,CAAAA;AACd;IAEA,IAAInB,MAAAA,CAAOoB,MAAM,CAAC,SAAY,CAAA,EAAA;AAC5B,QAAA,MAAMC,0BAA0BrB,MAAOoB,CAAAA,MAAM,CAAC,SAAA,CAAA,CAAWhB,OAAO,CAAC,WAAA,CAAA;;QAEjEiB,uBAAwBC,CAAAA,UAAU,CAACC,2BAAAA,CAAAA,CAAmBC,OAAO,EAAA;QAC7DH,uBAAwBC,CAAAA,UAAU,CAACG,kCAAAA,CAAAA,CAA0BD,OAAO,EAAA;AACtE;AACF;;;;"}