@strapi/content-releases 0.0.0-experimental.d954d57341a6623992a0d211daaec8e245c3517d → 0.0.0-experimental.d9f9f725e07a329ca272ecedef7bd85fa74dd661

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