@strapi/content-releases 0.0.0-experimental.d00dc50c81bce037c4321a90cc2f790eb3c51acb → 0.0.0-experimental.d23c1d5b0e45dd06ef09977f526c85468be05403

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 (108) hide show
  1. package/dist/_chunks/{App-gu1aiP6i.mjs → App-Cmn2Mkn7.mjs} +213 -200
  2. package/dist/_chunks/App-Cmn2Mkn7.mjs.map +1 -0
  3. package/dist/_chunks/{App-HjWtUYmc.js → App-FVorrIzF.js} +224 -211
  4. package/dist/_chunks/App-FVorrIzF.js.map +1 -0
  5. package/dist/_chunks/{PurchaseContentReleases-3tRbmbY3.mjs → PurchaseContentReleases-C8djn9fP.mjs} +1 -1
  6. package/dist/_chunks/{PurchaseContentReleases-3tRbmbY3.mjs.map → PurchaseContentReleases-C8djn9fP.mjs.map} +1 -1
  7. package/dist/_chunks/{PurchaseContentReleases-bpIYXOfu.js → PurchaseContentReleases-sD6ADHk2.js} +1 -1
  8. package/dist/_chunks/{PurchaseContentReleases-bpIYXOfu.js.map → PurchaseContentReleases-sD6ADHk2.js.map} +1 -1
  9. package/dist/_chunks/{en-ltT1TlKQ.mjs → en-B9Ur3VsE.mjs} +1 -1
  10. package/dist/_chunks/en-B9Ur3VsE.mjs.map +1 -0
  11. package/dist/_chunks/{en-HrREghh3.js → en-DtFJ5ViE.js} +1 -1
  12. package/dist/_chunks/en-DtFJ5ViE.js.map +1 -0
  13. package/dist/_chunks/{index-ZNwxYN8H.js → index-BfJLth9Z.js} +120 -189
  14. package/dist/_chunks/index-BfJLth9Z.js.map +1 -0
  15. package/dist/_chunks/{index-mvj9PSKd.mjs → index-DDohgTaQ.mjs} +125 -194
  16. package/dist/_chunks/index-DDohgTaQ.mjs.map +1 -0
  17. package/dist/admin/index.js +1 -15
  18. package/dist/admin/index.js.map +1 -1
  19. package/dist/admin/index.mjs +2 -16
  20. package/dist/admin/index.mjs.map +1 -1
  21. package/dist/admin/src/components/CMReleasesContainer.d.ts +22 -0
  22. package/dist/admin/src/components/RelativeTime.d.ts +28 -0
  23. package/dist/admin/src/components/ReleaseAction.d.ts +3 -0
  24. package/dist/admin/src/components/ReleaseActionMenu.d.ts +26 -0
  25. package/dist/admin/src/components/ReleaseActionOptions.d.ts +9 -0
  26. package/dist/admin/src/components/ReleaseListCell.d.ts +0 -0
  27. package/dist/admin/src/components/ReleaseModal.d.ts +16 -0
  28. package/dist/admin/src/constants.d.ts +58 -0
  29. package/dist/admin/src/index.d.ts +3 -0
  30. package/dist/admin/src/pages/App.d.ts +1 -0
  31. package/dist/admin/src/pages/PurchaseContentReleases.d.ts +2 -0
  32. package/dist/admin/src/pages/ReleaseDetailsPage.d.ts +2 -0
  33. package/dist/admin/src/pages/ReleasesPage.d.ts +8 -0
  34. package/dist/admin/src/pages/tests/mockReleaseDetailsPageData.d.ts +181 -0
  35. package/dist/admin/src/pages/tests/mockReleasesPageData.d.ts +39 -0
  36. package/dist/admin/src/pluginId.d.ts +1 -0
  37. package/dist/admin/src/services/axios.d.ts +29 -0
  38. package/dist/admin/src/services/release.d.ts +429 -0
  39. package/dist/admin/src/store/hooks.d.ts +7 -0
  40. package/dist/admin/src/utils/prefixPluginTranslations.d.ts +3 -0
  41. package/dist/admin/src/utils/time.d.ts +1 -0
  42. package/dist/server/index.js +83 -86
  43. package/dist/server/index.js.map +1 -1
  44. package/dist/server/index.mjs +84 -86
  45. package/dist/server/index.mjs.map +1 -1
  46. package/dist/server/src/bootstrap.d.ts +5 -0
  47. package/dist/server/src/bootstrap.d.ts.map +1 -0
  48. package/dist/server/src/constants.d.ts +12 -0
  49. package/dist/server/src/constants.d.ts.map +1 -0
  50. package/dist/server/src/content-types/index.d.ts +99 -0
  51. package/dist/server/src/content-types/index.d.ts.map +1 -0
  52. package/dist/server/src/content-types/release/index.d.ts +48 -0
  53. package/dist/server/src/content-types/release/index.d.ts.map +1 -0
  54. package/dist/server/src/content-types/release/schema.d.ts +47 -0
  55. package/dist/server/src/content-types/release/schema.d.ts.map +1 -0
  56. package/dist/server/src/content-types/release-action/index.d.ts +50 -0
  57. package/dist/server/src/content-types/release-action/index.d.ts.map +1 -0
  58. package/dist/server/src/content-types/release-action/schema.d.ts +49 -0
  59. package/dist/server/src/content-types/release-action/schema.d.ts.map +1 -0
  60. package/dist/server/src/controllers/index.d.ts +20 -0
  61. package/dist/server/src/controllers/index.d.ts.map +1 -0
  62. package/dist/server/src/controllers/release-action.d.ts +10 -0
  63. package/dist/server/src/controllers/release-action.d.ts.map +1 -0
  64. package/dist/server/src/controllers/release.d.ts +12 -0
  65. package/dist/server/src/controllers/release.d.ts.map +1 -0
  66. package/dist/server/src/controllers/validation/release-action.d.ts +8 -0
  67. package/dist/server/src/controllers/validation/release-action.d.ts.map +1 -0
  68. package/dist/server/src/controllers/validation/release.d.ts +2 -0
  69. package/dist/server/src/controllers/validation/release.d.ts.map +1 -0
  70. package/dist/server/src/destroy.d.ts +5 -0
  71. package/dist/server/src/destroy.d.ts.map +1 -0
  72. package/dist/server/src/index.d.ts +2096 -0
  73. package/dist/server/src/index.d.ts.map +1 -0
  74. package/dist/server/src/migrations/index.d.ts +13 -0
  75. package/dist/server/src/migrations/index.d.ts.map +1 -0
  76. package/dist/server/src/register.d.ts +5 -0
  77. package/dist/server/src/register.d.ts.map +1 -0
  78. package/dist/server/src/routes/index.d.ts +35 -0
  79. package/dist/server/src/routes/index.d.ts.map +1 -0
  80. package/dist/server/src/routes/release-action.d.ts +18 -0
  81. package/dist/server/src/routes/release-action.d.ts.map +1 -0
  82. package/dist/server/src/routes/release.d.ts +18 -0
  83. package/dist/server/src/routes/release.d.ts.map +1 -0
  84. package/dist/server/src/services/index.d.ts +1826 -0
  85. package/dist/server/src/services/index.d.ts.map +1 -0
  86. package/dist/server/src/services/release.d.ts +66 -0
  87. package/dist/server/src/services/release.d.ts.map +1 -0
  88. package/dist/server/src/services/scheduling.d.ts +18 -0
  89. package/dist/server/src/services/scheduling.d.ts.map +1 -0
  90. package/dist/server/src/services/validation.d.ts +18 -0
  91. package/dist/server/src/services/validation.d.ts.map +1 -0
  92. package/dist/server/src/utils/index.d.ts +14 -0
  93. package/dist/server/src/utils/index.d.ts.map +1 -0
  94. package/dist/shared/contracts/release-actions.d.ts +131 -0
  95. package/dist/shared/contracts/release-actions.d.ts.map +1 -0
  96. package/dist/shared/contracts/releases.d.ts +182 -0
  97. package/dist/shared/contracts/releases.d.ts.map +1 -0
  98. package/dist/shared/types.d.ts +24 -0
  99. package/dist/shared/types.d.ts.map +1 -0
  100. package/dist/shared/validation-schemas.d.ts +2 -0
  101. package/dist/shared/validation-schemas.d.ts.map +1 -0
  102. package/package.json +26 -31
  103. package/dist/_chunks/App-HjWtUYmc.js.map +0 -1
  104. package/dist/_chunks/App-gu1aiP6i.mjs.map +0 -1
  105. package/dist/_chunks/en-HrREghh3.js.map +0 -1
  106. package/dist/_chunks/en-ltT1TlKQ.mjs.map +0 -1
  107. package/dist/_chunks/index-ZNwxYN8H.js.map +0 -1
  108. package/dist/_chunks/index-mvj9PSKd.mjs.map +0 -1
@@ -3,7 +3,6 @@ const utils = require("@strapi/utils");
3
3
  const isEqual = require("lodash/isEqual");
4
4
  const lodash = require("lodash");
5
5
  const _ = require("lodash/fp");
6
- const EE = require("@strapi/strapi/dist/utils/ee");
7
6
  const nodeSchedule = require("node-schedule");
8
7
  const yup = require("yup");
9
8
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
@@ -27,7 +26,6 @@ function _interopNamespace(e) {
27
26
  }
28
27
  const isEqual__default = /* @__PURE__ */ _interopDefault(isEqual);
29
28
  const ___default = /* @__PURE__ */ _interopDefault(_);
30
- const EE__default = /* @__PURE__ */ _interopDefault(EE);
31
29
  const yup__namespace = /* @__PURE__ */ _interopNamespace(yup);
32
30
  const RELEASE_MODEL_UID = "plugin::content-releases.release";
33
31
  const RELEASE_ACTION_MODEL_UID = "plugin::content-releases.release-action";
@@ -78,16 +76,19 @@ const ACTIONS = [
78
76
  const ALLOWED_WEBHOOK_EVENTS = {
79
77
  RELEASES_PUBLISH: "releases.publish"
80
78
  };
81
- const getService = (name, { strapi: strapi2 } = { strapi: global.strapi }) => {
79
+ const getService = (name, { strapi: strapi2 }) => {
82
80
  return strapi2.plugin("content-releases").service(name);
83
81
  };
84
- const getPopulatedEntry = async (contentTypeUid, entryId, { strapi: strapi2 } = { strapi: global.strapi }) => {
82
+ const getPopulatedEntry = async (contentTypeUid, entryId, { strapi: strapi2 }) => {
85
83
  const populateBuilderService = strapi2.plugin("content-manager").service("populate-builder");
86
84
  const populate = await populateBuilderService(contentTypeUid).populateDeep(Infinity).build();
87
- const entry = await strapi2.entityService.findOne(contentTypeUid, entryId, { populate });
85
+ const entry = await strapi2.db.query(contentTypeUid).findOne({
86
+ where: { id: entryId },
87
+ populate
88
+ });
88
89
  return entry;
89
90
  };
90
- const getEntryValidStatus = async (contentTypeUid, entry, { strapi: strapi2 } = { strapi: global.strapi }) => {
91
+ const getEntryValidStatus = async (contentTypeUid, entry, { strapi: strapi2 }) => {
91
92
  try {
92
93
  await strapi2.entityValidator.validateEntityCreation(
93
94
  strapi2.getModel(contentTypeUid),
@@ -122,7 +123,7 @@ async function deleteActionsOnDisableDraftAndPublish({
122
123
  async function deleteActionsOnDeleteContentType({ oldContentTypes, contentTypes: contentTypes2 }) {
123
124
  const deletedContentTypes = lodash.difference(lodash.keys(oldContentTypes), lodash.keys(contentTypes2)) ?? [];
124
125
  if (deletedContentTypes.length) {
125
- await utils.mapAsync(deletedContentTypes, async (deletedContentTypeUID) => {
126
+ await utils.async.map(deletedContentTypes, async (deletedContentTypeUID) => {
126
127
  return strapi.db?.queryBuilder(RELEASE_ACTION_MODEL_UID).delete().where({ contentType: deletedContentTypeUID }).execute();
127
128
  });
128
129
  }
@@ -141,7 +142,7 @@ async function migrateIsValidAndStatusReleases() {
141
142
  }
142
143
  }
143
144
  });
144
- utils.mapAsync(releasesWithoutStatus, async (release2) => {
145
+ utils.async.map(releasesWithoutStatus, async (release2) => {
145
146
  const actions = release2.actions;
146
147
  const notValidatedActions = actions.filter((action) => action.isEntryValid === null);
147
148
  for (const action of notValidatedActions) {
@@ -172,7 +173,7 @@ async function migrateIsValidAndStatusReleases() {
172
173
  }
173
174
  }
174
175
  });
175
- utils.mapAsync(publishedReleases, async (release2) => {
176
+ utils.async.map(publishedReleases, async (release2) => {
176
177
  return strapi.db.query(RELEASE_MODEL_UID).update({
177
178
  where: {
178
179
  id: release2.id
@@ -189,7 +190,7 @@ async function revalidateChangedContentTypes({ oldContentTypes, contentTypes: co
189
190
  (uid) => oldContentTypes[uid]?.options?.draftAndPublish
190
191
  );
191
192
  const releasesAffected = /* @__PURE__ */ new Set();
192
- utils.mapAsync(contentTypesWithDraftAndPublish, async (contentTypeUID) => {
193
+ utils.async.map(contentTypesWithDraftAndPublish, async (contentTypeUID) => {
193
194
  const oldContentType = oldContentTypes[contentTypeUID];
194
195
  const contentType = contentTypes2[contentTypeUID];
195
196
  if (!isEqual__default.default(oldContentType?.attributes, contentType?.attributes)) {
@@ -202,7 +203,7 @@ async function revalidateChangedContentTypes({ oldContentTypes, contentTypes: co
202
203
  release: true
203
204
  }
204
205
  });
205
- await utils.mapAsync(actions, async (action) => {
206
+ await utils.async.map(actions, async (action) => {
206
207
  if (action.entry && action.release) {
207
208
  const populatedEntry = await getPopulatedEntry(contentTypeUID, action.entry.id, {
208
209
  strapi
@@ -225,7 +226,7 @@ async function revalidateChangedContentTypes({ oldContentTypes, contentTypes: co
225
226
  });
226
227
  }
227
228
  }).then(() => {
228
- utils.mapAsync(releasesAffected, async (releaseId) => {
229
+ utils.async.map(releasesAffected, async (releaseId) => {
229
230
  return getService("release", { strapi }).updateReleaseStatus(releaseId);
230
231
  });
231
232
  });
@@ -277,11 +278,10 @@ async function enableContentTypeLocalized({ oldContentTypes, contentTypes: conte
277
278
  }
278
279
  }
279
280
  }
280
- const { features: features$2 } = require("@strapi/strapi/dist/utils/ee");
281
281
  const register = async ({ strapi: strapi2 }) => {
282
- if (features$2.isEnabled("cms-content-releases")) {
283
- await strapi2.admin.services.permission.actionProvider.registerMany(ACTIONS);
284
- strapi2.hook("strapi::content-types.beforeSync").register(deleteActionsOnDisableDraftAndPublish).register(disableContentTypeLocalized);
282
+ if (strapi2.ee.features.isEnabled("cms-content-releases")) {
283
+ await strapi2.service("admin::permission").actionProvider.registerMany(ACTIONS);
284
+ strapi2.hook("strapi::content-types.beforeSync").register(disableContentTypeLocalized).register(deleteActionsOnDisableDraftAndPublish);
285
285
  strapi2.hook("strapi::content-types.afterSync").register(deleteActionsOnDeleteContentType).register(enableContentTypeLocalized).register(revalidateChangedContentTypes).register(migrateIsValidAndStatusReleases);
286
286
  }
287
287
  if (strapi2.plugin("graphql")) {
@@ -290,9 +290,8 @@ const register = async ({ strapi: strapi2 }) => {
290
290
  graphqlExtensionService.shadowCRUD(RELEASE_ACTION_MODEL_UID).disable();
291
291
  }
292
292
  };
293
- const { features: features$1 } = require("@strapi/strapi/dist/utils/ee");
294
293
  const bootstrap = async ({ strapi: strapi2 }) => {
295
- if (features$1.isEnabled("cms-content-releases")) {
294
+ if (strapi2.ee.features.isEnabled("cms-content-releases")) {
296
295
  const contentTypesWithDraftAndPublish = Object.keys(strapi2.contentTypes).filter(
297
296
  (uid) => strapi2.contentTypes[uid]?.options?.draftAndPublish
298
297
  );
@@ -351,9 +350,7 @@ const bootstrap = async ({ strapi: strapi2 }) => {
351
350
  actions: {
352
351
  target_type: model.uid,
353
352
  target_id: {
354
- $in: entriesToDelete.map(
355
- (entry) => entry.id
356
- )
353
+ $in: entriesToDelete.map((entry) => entry.id)
357
354
  }
358
355
  }
359
356
  }
@@ -380,13 +377,9 @@ const bootstrap = async ({ strapi: strapi2 }) => {
380
377
  try {
381
378
  const { model, result } = event;
382
379
  if (model.kind === "collectionType" && model.options?.draftAndPublish) {
383
- const isEntryValid = await getEntryValidStatus(
384
- model.uid,
385
- result,
386
- {
387
- strapi: strapi2
388
- }
389
- );
380
+ const isEntryValid = await getEntryValidStatus(model.uid, result, {
381
+ strapi: strapi2
382
+ });
390
383
  await strapi2.db.query(RELEASE_ACTION_MODEL_UID).update({
391
384
  where: {
392
385
  target_type: model.uid,
@@ -420,7 +413,7 @@ const bootstrap = async ({ strapi: strapi2 }) => {
420
413
  throw err;
421
414
  });
422
415
  Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {
423
- strapi2.webhookStore.addAllowedEvent(key, value);
416
+ strapi2.get("webhookStore").addAllowedEvent(key, value);
424
417
  });
425
418
  }
426
419
  };
@@ -655,7 +648,7 @@ const createReleaseService = ({ strapi: strapi2 }) => {
655
648
  validateUniqueNameForPendingRelease(releaseWithCreatorFields.name),
656
649
  validateScheduledAtIsLaterThanNow(releaseWithCreatorFields.scheduledAt)
657
650
  ]);
658
- const release2 = await strapi2.entityService.create(RELEASE_MODEL_UID, {
651
+ const release2 = await strapi2.db.query(RELEASE_MODEL_UID).create({
659
652
  data: {
660
653
  ...releaseWithCreatorFields,
661
654
  status: "empty"
@@ -669,17 +662,19 @@ const createReleaseService = ({ strapi: strapi2 }) => {
669
662
  return release2;
670
663
  },
671
664
  async findOne(id, query = {}) {
672
- const release2 = await strapi2.entityService.findOne(RELEASE_MODEL_UID, id, {
673
- ...query
665
+ const dbQuery = strapi2.get("query-params").transform(RELEASE_MODEL_UID, query);
666
+ const release2 = await strapi2.db.query(RELEASE_MODEL_UID).findOne({
667
+ ...dbQuery,
668
+ where: { id }
674
669
  });
675
670
  return release2;
676
671
  },
677
672
  findPage(query) {
678
- return strapi2.entityService.findPage(RELEASE_MODEL_UID, {
679
- ...query,
673
+ const dbQuery = strapi2.get("query-params").transform(RELEASE_MODEL_UID, query ?? {});
674
+ return strapi2.db.query(RELEASE_MODEL_UID).findPage({
675
+ ...dbQuery,
680
676
  populate: {
681
677
  actions: {
682
- // @ts-expect-error Ignore missing properties
683
678
  count: true
684
679
  }
685
680
  }
@@ -784,19 +779,15 @@ const createReleaseService = ({ strapi: strapi2 }) => {
784
779
  validateUniqueNameForPendingRelease(releaseWithCreatorFields.name, id),
785
780
  validateScheduledAtIsLaterThanNow(releaseWithCreatorFields.scheduledAt)
786
781
  ]);
787
- const release2 = await strapi2.entityService.findOne(RELEASE_MODEL_UID, id);
782
+ const release2 = await strapi2.db.query(RELEASE_MODEL_UID).findOne({ where: { id } });
788
783
  if (!release2) {
789
784
  throw new utils.errors.NotFoundError(`No release found for id ${id}`);
790
785
  }
791
786
  if (release2.releasedAt) {
792
787
  throw new utils.errors.ValidationError("Release already published");
793
788
  }
794
- const updatedRelease = await strapi2.entityService.update(RELEASE_MODEL_UID, id, {
795
- /*
796
- * The type returned from the entity service: Partial<Input<"plugin::content-releases.release">>
797
- * is not compatible with the type we are passing here: UpdateRelease.Request['body']
798
- */
799
- // @ts-expect-error see above
789
+ const updatedRelease = await strapi2.db.query(RELEASE_MODEL_UID).update({
790
+ where: { id },
800
791
  data: releaseWithCreatorFields
801
792
  });
802
793
  const schedulingService = getService("scheduling", { strapi: strapi2 });
@@ -817,7 +808,7 @@ const createReleaseService = ({ strapi: strapi2 }) => {
817
808
  validateEntryContentType(action.entry.contentType),
818
809
  validateUniqueEntry(releaseId, action)
819
810
  ]);
820
- const release2 = await strapi2.entityService.findOne(RELEASE_MODEL_UID, releaseId);
811
+ const release2 = await strapi2.db.query(RELEASE_MODEL_UID).findOne({ where: { id: releaseId } });
821
812
  if (!release2) {
822
813
  throw new utils.errors.NotFoundError(`No release found for id ${releaseId}`);
823
814
  }
@@ -827,7 +818,7 @@ const createReleaseService = ({ strapi: strapi2 }) => {
827
818
  const { entry, type } = action;
828
819
  const populatedEntry = await getPopulatedEntry(entry.contentType, entry.id, { strapi: strapi2 });
829
820
  const isEntryValid = await getEntryValidStatus(entry.contentType, populatedEntry, { strapi: strapi2 });
830
- const releaseAction2 = await strapi2.entityService.create(RELEASE_ACTION_MODEL_UID, {
821
+ const releaseAction2 = await strapi2.db.query(RELEASE_ACTION_MODEL_UID).create({
831
822
  data: {
832
823
  type,
833
824
  contentType: entry.contentType,
@@ -840,32 +831,35 @@ const createReleaseService = ({ strapi: strapi2 }) => {
840
831
  },
841
832
  release: releaseId
842
833
  },
843
- populate: { release: { fields: ["id"] }, entry: { fields: ["id"] } }
834
+ populate: { release: { select: ["id"] }, entry: { select: ["id"] } }
844
835
  });
845
836
  this.updateReleaseStatus(releaseId);
846
837
  return releaseAction2;
847
838
  },
848
839
  async findActions(releaseId, query) {
849
- const release2 = await strapi2.entityService.findOne(RELEASE_MODEL_UID, releaseId, {
850
- fields: ["id"]
840
+ const release2 = await strapi2.db.query(RELEASE_MODEL_UID).findOne({
841
+ where: { id: releaseId },
842
+ select: ["id"]
851
843
  });
852
844
  if (!release2) {
853
845
  throw new utils.errors.NotFoundError(`No release found for id ${releaseId}`);
854
846
  }
855
- return strapi2.entityService.findPage(RELEASE_ACTION_MODEL_UID, {
856
- ...query,
847
+ const dbQuery = strapi2.get("query-params").transform(RELEASE_ACTION_MODEL_UID, query ?? {});
848
+ return strapi2.db.query(RELEASE_ACTION_MODEL_UID).findPage({
849
+ ...dbQuery,
857
850
  populate: {
858
851
  entry: {
859
852
  populate: "*"
860
853
  }
861
854
  },
862
- filters: {
855
+ where: {
863
856
  release: releaseId
864
857
  }
865
858
  });
866
859
  },
867
860
  async countActions(query) {
868
- return strapi2.entityService.count(RELEASE_ACTION_MODEL_UID, query);
861
+ const dbQuery = strapi2.get("query-params").transform(RELEASE_ACTION_MODEL_UID, query ?? {});
862
+ return strapi2.db.query(RELEASE_ACTION_MODEL_UID).count(dbQuery);
869
863
  },
870
864
  async groupActions(actions, groupBy) {
871
865
  const contentTypeUids = actions.reduce((acc, action) => {
@@ -874,9 +868,7 @@ const createReleaseService = ({ strapi: strapi2 }) => {
874
868
  }
875
869
  return acc;
876
870
  }, []);
877
- const allReleaseContentTypesDictionary = await this.getContentTypesDataForActions(
878
- contentTypeUids
879
- );
871
+ const allReleaseContentTypesDictionary = await this.getContentTypesDataForActions(contentTypeUids);
880
872
  const allLocalesDictionary = await this.getLocalesDataForActions();
881
873
  const formattedData = actions.map((action) => {
882
874
  const { mainField, displayName } = allReleaseContentTypesDictionary[action.contentType];
@@ -946,10 +938,11 @@ const createReleaseService = ({ strapi: strapi2 }) => {
946
938
  return componentsMap;
947
939
  },
948
940
  async delete(releaseId) {
949
- const release2 = await strapi2.entityService.findOne(RELEASE_MODEL_UID, releaseId, {
941
+ const release2 = await strapi2.db.query(RELEASE_MODEL_UID).findOne({
942
+ where: { id: releaseId },
950
943
  populate: {
951
944
  actions: {
952
- fields: ["id"]
945
+ select: ["id"]
953
946
  }
954
947
  }
955
948
  });
@@ -967,7 +960,11 @@ const createReleaseService = ({ strapi: strapi2 }) => {
967
960
  }
968
961
  }
969
962
  });
970
- await strapi2.entityService.delete(RELEASE_MODEL_UID, releaseId);
963
+ await strapi2.db.query(RELEASE_MODEL_UID).delete({
964
+ where: {
965
+ id: releaseId
966
+ }
967
+ });
971
968
  });
972
969
  if (release2.scheduledAt) {
973
970
  const schedulingService = getService("scheduling", { strapi: strapi2 });
@@ -993,9 +990,7 @@ const createReleaseService = ({ strapi: strapi2 }) => {
993
990
  }
994
991
  try {
995
992
  strapi2.log.info(`[Content Releases] Starting to publish release ${lockedRelease.name}`);
996
- const { collectionTypeActions, singleTypeActions } = await getFormattedActions(
997
- releaseId
998
- );
993
+ const { collectionTypeActions, singleTypeActions } = await getFormattedActions(releaseId);
999
994
  await strapi2.db.transaction(async () => {
1000
995
  for (const { uid, action, id } of singleTypeActions) {
1001
996
  await publishSingleTypeAction(uid, action, id);
@@ -1038,7 +1033,7 @@ const createReleaseService = ({ strapi: strapi2 }) => {
1038
1033
  };
1039
1034
  }
1040
1035
  });
1041
- if (error) {
1036
+ if (error instanceof Error) {
1042
1037
  throw error;
1043
1038
  }
1044
1039
  return release2;
@@ -1136,8 +1131,11 @@ class AlreadyOnReleaseError extends utils.errors.ApplicationError {
1136
1131
  }
1137
1132
  const createReleaseValidationService = ({ strapi: strapi2 }) => ({
1138
1133
  async validateUniqueEntry(releaseId, releaseActionArgs) {
1139
- const release2 = await strapi2.entityService.findOne(RELEASE_MODEL_UID, releaseId, {
1140
- populate: { actions: { populate: { entry: { fields: ["id"] } } } }
1134
+ const release2 = await strapi2.db.query(RELEASE_MODEL_UID).findOne({
1135
+ where: {
1136
+ id: releaseId
1137
+ },
1138
+ populate: { actions: { populate: { entry: { select: ["id"] } } } }
1141
1139
  });
1142
1140
  if (!release2) {
1143
1141
  throw new utils.errors.NotFoundError(`No release found for id ${releaseId}`);
@@ -1163,10 +1161,8 @@ const createReleaseValidationService = ({ strapi: strapi2 }) => ({
1163
1161
  }
1164
1162
  },
1165
1163
  async validatePendingReleasesLimit() {
1166
- const maximumPendingReleases = (
1167
- // @ts-expect-error - options is not typed into features
1168
- EE__default.default.features.get("cms-content-releases")?.options?.maximumReleases || 3
1169
- );
1164
+ const featureCfg = strapi2.ee.features.get("cms-content-releases");
1165
+ const maximumPendingReleases = typeof featureCfg === "object" && featureCfg?.options?.maximumReleases || 3;
1170
1166
  const [, pendingReleasesCount] = await strapi2.db.query(RELEASE_MODEL_UID).findWithCount({
1171
1167
  filters: {
1172
1168
  releasedAt: {
@@ -1179,8 +1175,8 @@ const createReleaseValidationService = ({ strapi: strapi2 }) => ({
1179
1175
  }
1180
1176
  },
1181
1177
  async validateUniqueNameForPendingRelease(name, id) {
1182
- const pendingReleases = await strapi2.entityService.findMany(RELEASE_MODEL_UID, {
1183
- filters: {
1178
+ const pendingReleases = await strapi2.db.query(RELEASE_MODEL_UID).findMany({
1179
+ where: {
1184
1180
  releasedAt: {
1185
1181
  $null: true
1186
1182
  },
@@ -1209,7 +1205,7 @@ const createSchedulingService = ({ strapi: strapi2 }) => {
1209
1205
  }
1210
1206
  const job = nodeSchedule.scheduleJob(scheduleDate, async () => {
1211
1207
  try {
1212
- await getService("release").publish(releaseId);
1208
+ await getService("release", { strapi: strapi2 }).publish(releaseId);
1213
1209
  } catch (error) {
1214
1210
  }
1215
1211
  this.cancel(releaseId);
@@ -1279,7 +1275,7 @@ const RELEASE_SCHEMA = yup__namespace.object().shape({
1279
1275
  const validateRelease = utils.validateYupSchema(RELEASE_SCHEMA);
1280
1276
  const releaseController = {
1281
1277
  async findMany(ctx) {
1282
- const permissionsManager = strapi.admin.services.permission.createPermissionsManager({
1278
+ const permissionsManager = strapi.service("admin::permission").createPermissionsManager({
1283
1279
  ability: ctx.state.userAbility,
1284
1280
  model: RELEASE_MODEL_UID
1285
1281
  });
@@ -1307,7 +1303,7 @@ const releaseController = {
1307
1303
  }
1308
1304
  };
1309
1305
  });
1310
- const pendingReleasesCount = await strapi.query(RELEASE_MODEL_UID).count({
1306
+ const pendingReleasesCount = await strapi.db.query(RELEASE_MODEL_UID).count({
1311
1307
  where: {
1312
1308
  releasedAt: null
1313
1309
  }
@@ -1329,7 +1325,7 @@ const releaseController = {
1329
1325
  });
1330
1326
  const sanitizedRelease = {
1331
1327
  ...release2,
1332
- createdBy: release2.createdBy ? strapi.admin.services.user.sanitizeUser(release2.createdBy) : null
1328
+ createdBy: release2.createdBy ? strapi.service("admin::user").sanitizeUser(release2.createdBy) : null
1333
1329
  };
1334
1330
  const data = {
1335
1331
  ...sanitizedRelease,
@@ -1352,6 +1348,7 @@ const releaseController = {
1352
1348
  entriesIds
1353
1349
  );
1354
1350
  const mappedEntriesInReleases = releasesWithActions.reduce(
1351
+ // TODO: Fix for v5 removed mappedEntriedToRelease
1355
1352
  (acc, release2) => {
1356
1353
  release2.actions.forEach((action) => {
1357
1354
  if (!acc[action.entry.id]) {
@@ -1362,6 +1359,7 @@ const releaseController = {
1362
1359
  });
1363
1360
  return acc;
1364
1361
  },
1362
+ // TODO: Fix for v5 removed mappedEntriedToRelease
1365
1363
  {}
1366
1364
  );
1367
1365
  ctx.body = {
@@ -1374,13 +1372,13 @@ const releaseController = {
1374
1372
  await validateRelease(releaseArgs);
1375
1373
  const releaseService = getService("release", { strapi });
1376
1374
  const release2 = await releaseService.create(releaseArgs, { user });
1377
- const permissionsManager = strapi.admin.services.permission.createPermissionsManager({
1375
+ const permissionsManager = strapi.service("admin::permission").createPermissionsManager({
1378
1376
  ability: ctx.state.userAbility,
1379
1377
  model: RELEASE_MODEL_UID
1380
1378
  });
1381
- ctx.body = {
1379
+ ctx.created({
1382
1380
  data: await permissionsManager.sanitizeOutput(release2)
1383
- };
1381
+ });
1384
1382
  },
1385
1383
  async update(ctx) {
1386
1384
  const user = ctx.state.user;
@@ -1389,7 +1387,7 @@ const releaseController = {
1389
1387
  await validateRelease(releaseArgs);
1390
1388
  const releaseService = getService("release", { strapi });
1391
1389
  const release2 = await releaseService.update(id, releaseArgs, { user });
1392
- const permissionsManager = strapi.admin.services.permission.createPermissionsManager({
1390
+ const permissionsManager = strapi.service("admin::permission").createPermissionsManager({
1393
1391
  ability: ctx.state.userAbility,
1394
1392
  model: RELEASE_MODEL_UID
1395
1393
  });
@@ -1453,9 +1451,9 @@ const releaseActionController = {
1453
1451
  await validateReleaseAction(releaseActionArgs);
1454
1452
  const releaseService = getService("release", { strapi });
1455
1453
  const releaseAction2 = await releaseService.createAction(releaseId, releaseActionArgs);
1456
- ctx.body = {
1454
+ ctx.created({
1457
1455
  data: releaseAction2
1458
- };
1456
+ });
1459
1457
  },
1460
1458
  async createMany(ctx) {
1461
1459
  const releaseId = ctx.params.releaseId;
@@ -1481,17 +1479,17 @@ const releaseActionController = {
1481
1479
  return releaseActions2;
1482
1480
  });
1483
1481
  const newReleaseActions = releaseActions.filter((action) => action !== null);
1484
- ctx.body = {
1482
+ ctx.created({
1485
1483
  data: newReleaseActions,
1486
1484
  meta: {
1487
1485
  entriesAlreadyInRelease: releaseActions.length - newReleaseActions.length,
1488
1486
  totalEntries: releaseActions.length
1489
1487
  }
1490
- };
1488
+ });
1491
1489
  },
1492
1490
  async findMany(ctx) {
1493
1491
  const releaseId = ctx.params.releaseId;
1494
- const permissionsManager = strapi.admin.services.permission.createPermissionsManager({
1492
+ const permissionsManager = strapi.service("admin::permission").createPermissionsManager({
1495
1493
  ability: ctx.state.userAbility,
1496
1494
  model: RELEASE_ACTION_MODEL_UID
1497
1495
  });
@@ -1505,14 +1503,14 @@ const releaseActionController = {
1505
1503
  if (acc[action.contentType]) {
1506
1504
  return acc;
1507
1505
  }
1508
- const contentTypePermissionsManager = strapi.admin.services.permission.createPermissionsManager({
1506
+ const contentTypePermissionsManager = strapi.service("admin::permission").createPermissionsManager({
1509
1507
  ability: ctx.state.userAbility,
1510
1508
  model: action.contentType
1511
1509
  });
1512
1510
  acc[action.contentType] = contentTypePermissionsManager.sanitizeOutput;
1513
1511
  return acc;
1514
1512
  }, {});
1515
- const sanitizedResults = await utils.mapAsync(results, async (action) => ({
1513
+ const sanitizedResults = await utils.async.map(results, async (action) => ({
1516
1514
  ...action,
1517
1515
  entry: await contentTypeOutputSanitizers[action.contentType](action.entry)
1518
1516
  }));
@@ -1760,9 +1758,8 @@ const routes = {
1760
1758
  release,
1761
1759
  "release-action": releaseAction
1762
1760
  };
1763
- const { features } = require("@strapi/strapi/dist/utils/ee");
1764
1761
  const getPlugin = () => {
1765
- if (features.isEnabled("cms-content-releases")) {
1762
+ if (strapi.ee.features.isEnabled("cms-content-releases")) {
1766
1763
  return {
1767
1764
  register,
1768
1765
  bootstrap,