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

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 +37 -30
  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
@@ -1,7 +1,8 @@
1
- import { contentTypes as contentTypes$1, async, setCreatorFields, errors, validateYupSchema, yup as yup$1 } from "@strapi/utils";
1
+ import { contentTypes as contentTypes$1, mapAsync, setCreatorFields, errors, validateYupSchema, yup as yup$1 } from "@strapi/utils";
2
2
  import isEqual from "lodash/isEqual";
3
3
  import { difference, keys } from "lodash";
4
4
  import _ from "lodash/fp";
5
+ import EE from "@strapi/strapi/dist/utils/ee";
5
6
  import { scheduleJob } from "node-schedule";
6
7
  import * as yup from "yup";
7
8
  const RELEASE_MODEL_UID = "plugin::content-releases.release";
@@ -53,19 +54,16 @@ const ACTIONS = [
53
54
  const ALLOWED_WEBHOOK_EVENTS = {
54
55
  RELEASES_PUBLISH: "releases.publish"
55
56
  };
56
- const getService = (name, { strapi: strapi2 }) => {
57
+ const getService = (name, { strapi: strapi2 } = { strapi: global.strapi }) => {
57
58
  return strapi2.plugin("content-releases").service(name);
58
59
  };
59
- const getPopulatedEntry = async (contentTypeUid, entryId, { strapi: strapi2 }) => {
60
+ const getPopulatedEntry = async (contentTypeUid, entryId, { strapi: strapi2 } = { strapi: global.strapi }) => {
60
61
  const populateBuilderService = strapi2.plugin("content-manager").service("populate-builder");
61
62
  const populate = await populateBuilderService(contentTypeUid).populateDeep(Infinity).build();
62
- const entry = await strapi2.db.query(contentTypeUid).findOne({
63
- where: { id: entryId },
64
- populate
65
- });
63
+ const entry = await strapi2.entityService.findOne(contentTypeUid, entryId, { populate });
66
64
  return entry;
67
65
  };
68
- const getEntryValidStatus = async (contentTypeUid, entry, { strapi: strapi2 }) => {
66
+ const getEntryValidStatus = async (contentTypeUid, entry, { strapi: strapi2 } = { strapi: global.strapi }) => {
69
67
  try {
70
68
  await strapi2.entityValidator.validateEntityCreation(
71
69
  strapi2.getModel(contentTypeUid),
@@ -100,7 +98,7 @@ async function deleteActionsOnDisableDraftAndPublish({
100
98
  async function deleteActionsOnDeleteContentType({ oldContentTypes, contentTypes: contentTypes2 }) {
101
99
  const deletedContentTypes = difference(keys(oldContentTypes), keys(contentTypes2)) ?? [];
102
100
  if (deletedContentTypes.length) {
103
- await async.map(deletedContentTypes, async (deletedContentTypeUID) => {
101
+ await mapAsync(deletedContentTypes, async (deletedContentTypeUID) => {
104
102
  return strapi.db?.queryBuilder(RELEASE_ACTION_MODEL_UID).delete().where({ contentType: deletedContentTypeUID }).execute();
105
103
  });
106
104
  }
@@ -119,7 +117,7 @@ async function migrateIsValidAndStatusReleases() {
119
117
  }
120
118
  }
121
119
  });
122
- async.map(releasesWithoutStatus, async (release2) => {
120
+ mapAsync(releasesWithoutStatus, async (release2) => {
123
121
  const actions = release2.actions;
124
122
  const notValidatedActions = actions.filter((action) => action.isEntryValid === null);
125
123
  for (const action of notValidatedActions) {
@@ -150,7 +148,7 @@ async function migrateIsValidAndStatusReleases() {
150
148
  }
151
149
  }
152
150
  });
153
- async.map(publishedReleases, async (release2) => {
151
+ mapAsync(publishedReleases, async (release2) => {
154
152
  return strapi.db.query(RELEASE_MODEL_UID).update({
155
153
  where: {
156
154
  id: release2.id
@@ -167,7 +165,7 @@ async function revalidateChangedContentTypes({ oldContentTypes, contentTypes: co
167
165
  (uid) => oldContentTypes[uid]?.options?.draftAndPublish
168
166
  );
169
167
  const releasesAffected = /* @__PURE__ */ new Set();
170
- async.map(contentTypesWithDraftAndPublish, async (contentTypeUID) => {
168
+ mapAsync(contentTypesWithDraftAndPublish, async (contentTypeUID) => {
171
169
  const oldContentType = oldContentTypes[contentTypeUID];
172
170
  const contentType = contentTypes2[contentTypeUID];
173
171
  if (!isEqual(oldContentType?.attributes, contentType?.attributes)) {
@@ -180,7 +178,7 @@ async function revalidateChangedContentTypes({ oldContentTypes, contentTypes: co
180
178
  release: true
181
179
  }
182
180
  });
183
- await async.map(actions, async (action) => {
181
+ await mapAsync(actions, async (action) => {
184
182
  if (action.entry && action.release) {
185
183
  const populatedEntry = await getPopulatedEntry(contentTypeUID, action.entry.id, {
186
184
  strapi
@@ -203,7 +201,7 @@ async function revalidateChangedContentTypes({ oldContentTypes, contentTypes: co
203
201
  });
204
202
  }
205
203
  }).then(() => {
206
- async.map(releasesAffected, async (releaseId) => {
204
+ mapAsync(releasesAffected, async (releaseId) => {
207
205
  return getService("release", { strapi }).updateReleaseStatus(releaseId);
208
206
  });
209
207
  });
@@ -255,10 +253,11 @@ async function enableContentTypeLocalized({ oldContentTypes, contentTypes: conte
255
253
  }
256
254
  }
257
255
  }
256
+ const { features: features$2 } = require("@strapi/strapi/dist/utils/ee");
258
257
  const register = async ({ strapi: strapi2 }) => {
259
- if (strapi2.ee.features.isEnabled("cms-content-releases")) {
260
- await strapi2.service("admin::permission").actionProvider.registerMany(ACTIONS);
261
- strapi2.hook("strapi::content-types.beforeSync").register(disableContentTypeLocalized).register(deleteActionsOnDisableDraftAndPublish);
258
+ if (features$2.isEnabled("cms-content-releases")) {
259
+ await strapi2.admin.services.permission.actionProvider.registerMany(ACTIONS);
260
+ strapi2.hook("strapi::content-types.beforeSync").register(deleteActionsOnDisableDraftAndPublish).register(disableContentTypeLocalized);
262
261
  strapi2.hook("strapi::content-types.afterSync").register(deleteActionsOnDeleteContentType).register(enableContentTypeLocalized).register(revalidateChangedContentTypes).register(migrateIsValidAndStatusReleases);
263
262
  }
264
263
  if (strapi2.plugin("graphql")) {
@@ -267,8 +266,9 @@ const register = async ({ strapi: strapi2 }) => {
267
266
  graphqlExtensionService.shadowCRUD(RELEASE_ACTION_MODEL_UID).disable();
268
267
  }
269
268
  };
269
+ const { features: features$1 } = require("@strapi/strapi/dist/utils/ee");
270
270
  const bootstrap = async ({ strapi: strapi2 }) => {
271
- if (strapi2.ee.features.isEnabled("cms-content-releases")) {
271
+ if (features$1.isEnabled("cms-content-releases")) {
272
272
  const contentTypesWithDraftAndPublish = Object.keys(strapi2.contentTypes).filter(
273
273
  (uid) => strapi2.contentTypes[uid]?.options?.draftAndPublish
274
274
  );
@@ -327,7 +327,9 @@ const bootstrap = async ({ strapi: strapi2 }) => {
327
327
  actions: {
328
328
  target_type: model.uid,
329
329
  target_id: {
330
- $in: entriesToDelete.map((entry) => entry.id)
330
+ $in: entriesToDelete.map(
331
+ (entry) => entry.id
332
+ )
331
333
  }
332
334
  }
333
335
  }
@@ -354,9 +356,13 @@ const bootstrap = async ({ strapi: strapi2 }) => {
354
356
  try {
355
357
  const { model, result } = event;
356
358
  if (model.kind === "collectionType" && model.options?.draftAndPublish) {
357
- const isEntryValid = await getEntryValidStatus(model.uid, result, {
358
- strapi: strapi2
359
- });
359
+ const isEntryValid = await getEntryValidStatus(
360
+ model.uid,
361
+ result,
362
+ {
363
+ strapi: strapi2
364
+ }
365
+ );
360
366
  await strapi2.db.query(RELEASE_ACTION_MODEL_UID).update({
361
367
  where: {
362
368
  target_type: model.uid,
@@ -390,7 +396,7 @@ const bootstrap = async ({ strapi: strapi2 }) => {
390
396
  throw err;
391
397
  });
392
398
  Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {
393
- strapi2.get("webhookStore").addAllowedEvent(key, value);
399
+ strapi2.webhookStore.addAllowedEvent(key, value);
394
400
  });
395
401
  }
396
402
  };
@@ -625,7 +631,7 @@ const createReleaseService = ({ strapi: strapi2 }) => {
625
631
  validateUniqueNameForPendingRelease(releaseWithCreatorFields.name),
626
632
  validateScheduledAtIsLaterThanNow(releaseWithCreatorFields.scheduledAt)
627
633
  ]);
628
- const release2 = await strapi2.db.query(RELEASE_MODEL_UID).create({
634
+ const release2 = await strapi2.entityService.create(RELEASE_MODEL_UID, {
629
635
  data: {
630
636
  ...releaseWithCreatorFields,
631
637
  status: "empty"
@@ -639,19 +645,17 @@ const createReleaseService = ({ strapi: strapi2 }) => {
639
645
  return release2;
640
646
  },
641
647
  async findOne(id, query = {}) {
642
- const dbQuery = strapi2.get("query-params").transform(RELEASE_MODEL_UID, query);
643
- const release2 = await strapi2.db.query(RELEASE_MODEL_UID).findOne({
644
- ...dbQuery,
645
- where: { id }
648
+ const release2 = await strapi2.entityService.findOne(RELEASE_MODEL_UID, id, {
649
+ ...query
646
650
  });
647
651
  return release2;
648
652
  },
649
653
  findPage(query) {
650
- const dbQuery = strapi2.get("query-params").transform(RELEASE_MODEL_UID, query ?? {});
651
- return strapi2.db.query(RELEASE_MODEL_UID).findPage({
652
- ...dbQuery,
654
+ return strapi2.entityService.findPage(RELEASE_MODEL_UID, {
655
+ ...query,
653
656
  populate: {
654
657
  actions: {
658
+ // @ts-expect-error Ignore missing properties
655
659
  count: true
656
660
  }
657
661
  }
@@ -756,15 +760,19 @@ const createReleaseService = ({ strapi: strapi2 }) => {
756
760
  validateUniqueNameForPendingRelease(releaseWithCreatorFields.name, id),
757
761
  validateScheduledAtIsLaterThanNow(releaseWithCreatorFields.scheduledAt)
758
762
  ]);
759
- const release2 = await strapi2.db.query(RELEASE_MODEL_UID).findOne({ where: { id } });
763
+ const release2 = await strapi2.entityService.findOne(RELEASE_MODEL_UID, id);
760
764
  if (!release2) {
761
765
  throw new errors.NotFoundError(`No release found for id ${id}`);
762
766
  }
763
767
  if (release2.releasedAt) {
764
768
  throw new errors.ValidationError("Release already published");
765
769
  }
766
- const updatedRelease = await strapi2.db.query(RELEASE_MODEL_UID).update({
767
- where: { id },
770
+ const updatedRelease = await strapi2.entityService.update(RELEASE_MODEL_UID, id, {
771
+ /*
772
+ * The type returned from the entity service: Partial<Input<"plugin::content-releases.release">>
773
+ * is not compatible with the type we are passing here: UpdateRelease.Request['body']
774
+ */
775
+ // @ts-expect-error see above
768
776
  data: releaseWithCreatorFields
769
777
  });
770
778
  const schedulingService = getService("scheduling", { strapi: strapi2 });
@@ -785,7 +793,7 @@ const createReleaseService = ({ strapi: strapi2 }) => {
785
793
  validateEntryContentType(action.entry.contentType),
786
794
  validateUniqueEntry(releaseId, action)
787
795
  ]);
788
- const release2 = await strapi2.db.query(RELEASE_MODEL_UID).findOne({ where: { id: releaseId } });
796
+ const release2 = await strapi2.entityService.findOne(RELEASE_MODEL_UID, releaseId);
789
797
  if (!release2) {
790
798
  throw new errors.NotFoundError(`No release found for id ${releaseId}`);
791
799
  }
@@ -795,7 +803,7 @@ const createReleaseService = ({ strapi: strapi2 }) => {
795
803
  const { entry, type } = action;
796
804
  const populatedEntry = await getPopulatedEntry(entry.contentType, entry.id, { strapi: strapi2 });
797
805
  const isEntryValid = await getEntryValidStatus(entry.contentType, populatedEntry, { strapi: strapi2 });
798
- const releaseAction2 = await strapi2.db.query(RELEASE_ACTION_MODEL_UID).create({
806
+ const releaseAction2 = await strapi2.entityService.create(RELEASE_ACTION_MODEL_UID, {
799
807
  data: {
800
808
  type,
801
809
  contentType: entry.contentType,
@@ -808,35 +816,32 @@ const createReleaseService = ({ strapi: strapi2 }) => {
808
816
  },
809
817
  release: releaseId
810
818
  },
811
- populate: { release: { select: ["id"] }, entry: { select: ["id"] } }
819
+ populate: { release: { fields: ["id"] }, entry: { fields: ["id"] } }
812
820
  });
813
821
  this.updateReleaseStatus(releaseId);
814
822
  return releaseAction2;
815
823
  },
816
824
  async findActions(releaseId, query) {
817
- const release2 = await strapi2.db.query(RELEASE_MODEL_UID).findOne({
818
- where: { id: releaseId },
819
- select: ["id"]
825
+ const release2 = await strapi2.entityService.findOne(RELEASE_MODEL_UID, releaseId, {
826
+ fields: ["id"]
820
827
  });
821
828
  if (!release2) {
822
829
  throw new errors.NotFoundError(`No release found for id ${releaseId}`);
823
830
  }
824
- const dbQuery = strapi2.get("query-params").transform(RELEASE_ACTION_MODEL_UID, query ?? {});
825
- return strapi2.db.query(RELEASE_ACTION_MODEL_UID).findPage({
826
- ...dbQuery,
831
+ return strapi2.entityService.findPage(RELEASE_ACTION_MODEL_UID, {
832
+ ...query,
827
833
  populate: {
828
834
  entry: {
829
835
  populate: "*"
830
836
  }
831
837
  },
832
- where: {
838
+ filters: {
833
839
  release: releaseId
834
840
  }
835
841
  });
836
842
  },
837
843
  async countActions(query) {
838
- const dbQuery = strapi2.get("query-params").transform(RELEASE_ACTION_MODEL_UID, query ?? {});
839
- return strapi2.db.query(RELEASE_ACTION_MODEL_UID).count(dbQuery);
844
+ return strapi2.entityService.count(RELEASE_ACTION_MODEL_UID, query);
840
845
  },
841
846
  async groupActions(actions, groupBy) {
842
847
  const contentTypeUids = actions.reduce((acc, action) => {
@@ -845,7 +850,9 @@ const createReleaseService = ({ strapi: strapi2 }) => {
845
850
  }
846
851
  return acc;
847
852
  }, []);
848
- const allReleaseContentTypesDictionary = await this.getContentTypesDataForActions(contentTypeUids);
853
+ const allReleaseContentTypesDictionary = await this.getContentTypesDataForActions(
854
+ contentTypeUids
855
+ );
849
856
  const allLocalesDictionary = await this.getLocalesDataForActions();
850
857
  const formattedData = actions.map((action) => {
851
858
  const { mainField, displayName } = allReleaseContentTypesDictionary[action.contentType];
@@ -915,11 +922,10 @@ const createReleaseService = ({ strapi: strapi2 }) => {
915
922
  return componentsMap;
916
923
  },
917
924
  async delete(releaseId) {
918
- const release2 = await strapi2.db.query(RELEASE_MODEL_UID).findOne({
919
- where: { id: releaseId },
925
+ const release2 = await strapi2.entityService.findOne(RELEASE_MODEL_UID, releaseId, {
920
926
  populate: {
921
927
  actions: {
922
- select: ["id"]
928
+ fields: ["id"]
923
929
  }
924
930
  }
925
931
  });
@@ -937,11 +943,7 @@ const createReleaseService = ({ strapi: strapi2 }) => {
937
943
  }
938
944
  }
939
945
  });
940
- await strapi2.db.query(RELEASE_MODEL_UID).delete({
941
- where: {
942
- id: releaseId
943
- }
944
- });
946
+ await strapi2.entityService.delete(RELEASE_MODEL_UID, releaseId);
945
947
  });
946
948
  if (release2.scheduledAt) {
947
949
  const schedulingService = getService("scheduling", { strapi: strapi2 });
@@ -967,7 +969,9 @@ const createReleaseService = ({ strapi: strapi2 }) => {
967
969
  }
968
970
  try {
969
971
  strapi2.log.info(`[Content Releases] Starting to publish release ${lockedRelease.name}`);
970
- const { collectionTypeActions, singleTypeActions } = await getFormattedActions(releaseId);
972
+ const { collectionTypeActions, singleTypeActions } = await getFormattedActions(
973
+ releaseId
974
+ );
971
975
  await strapi2.db.transaction(async () => {
972
976
  for (const { uid, action, id } of singleTypeActions) {
973
977
  await publishSingleTypeAction(uid, action, id);
@@ -1010,7 +1014,7 @@ const createReleaseService = ({ strapi: strapi2 }) => {
1010
1014
  };
1011
1015
  }
1012
1016
  });
1013
- if (error instanceof Error) {
1017
+ if (error) {
1014
1018
  throw error;
1015
1019
  }
1016
1020
  return release2;
@@ -1108,11 +1112,8 @@ class AlreadyOnReleaseError extends errors.ApplicationError {
1108
1112
  }
1109
1113
  const createReleaseValidationService = ({ strapi: strapi2 }) => ({
1110
1114
  async validateUniqueEntry(releaseId, releaseActionArgs) {
1111
- const release2 = await strapi2.db.query(RELEASE_MODEL_UID).findOne({
1112
- where: {
1113
- id: releaseId
1114
- },
1115
- populate: { actions: { populate: { entry: { select: ["id"] } } } }
1115
+ const release2 = await strapi2.entityService.findOne(RELEASE_MODEL_UID, releaseId, {
1116
+ populate: { actions: { populate: { entry: { fields: ["id"] } } } }
1116
1117
  });
1117
1118
  if (!release2) {
1118
1119
  throw new errors.NotFoundError(`No release found for id ${releaseId}`);
@@ -1138,8 +1139,10 @@ const createReleaseValidationService = ({ strapi: strapi2 }) => ({
1138
1139
  }
1139
1140
  },
1140
1141
  async validatePendingReleasesLimit() {
1141
- const featureCfg = strapi2.ee.features.get("cms-content-releases");
1142
- const maximumPendingReleases = typeof featureCfg === "object" && featureCfg?.options?.maximumReleases || 3;
1142
+ const maximumPendingReleases = (
1143
+ // @ts-expect-error - options is not typed into features
1144
+ EE.features.get("cms-content-releases")?.options?.maximumReleases || 3
1145
+ );
1143
1146
  const [, pendingReleasesCount] = await strapi2.db.query(RELEASE_MODEL_UID).findWithCount({
1144
1147
  filters: {
1145
1148
  releasedAt: {
@@ -1152,8 +1155,8 @@ const createReleaseValidationService = ({ strapi: strapi2 }) => ({
1152
1155
  }
1153
1156
  },
1154
1157
  async validateUniqueNameForPendingRelease(name, id) {
1155
- const pendingReleases = await strapi2.db.query(RELEASE_MODEL_UID).findMany({
1156
- where: {
1158
+ const pendingReleases = await strapi2.entityService.findMany(RELEASE_MODEL_UID, {
1159
+ filters: {
1157
1160
  releasedAt: {
1158
1161
  $null: true
1159
1162
  },
@@ -1182,7 +1185,7 @@ const createSchedulingService = ({ strapi: strapi2 }) => {
1182
1185
  }
1183
1186
  const job = scheduleJob(scheduleDate, async () => {
1184
1187
  try {
1185
- await getService("release", { strapi: strapi2 }).publish(releaseId);
1188
+ await getService("release").publish(releaseId);
1186
1189
  } catch (error) {
1187
1190
  }
1188
1191
  this.cancel(releaseId);
@@ -1252,7 +1255,7 @@ const RELEASE_SCHEMA = yup.object().shape({
1252
1255
  const validateRelease = validateYupSchema(RELEASE_SCHEMA);
1253
1256
  const releaseController = {
1254
1257
  async findMany(ctx) {
1255
- const permissionsManager = strapi.service("admin::permission").createPermissionsManager({
1258
+ const permissionsManager = strapi.admin.services.permission.createPermissionsManager({
1256
1259
  ability: ctx.state.userAbility,
1257
1260
  model: RELEASE_MODEL_UID
1258
1261
  });
@@ -1280,7 +1283,7 @@ const releaseController = {
1280
1283
  }
1281
1284
  };
1282
1285
  });
1283
- const pendingReleasesCount = await strapi.db.query(RELEASE_MODEL_UID).count({
1286
+ const pendingReleasesCount = await strapi.query(RELEASE_MODEL_UID).count({
1284
1287
  where: {
1285
1288
  releasedAt: null
1286
1289
  }
@@ -1302,7 +1305,7 @@ const releaseController = {
1302
1305
  });
1303
1306
  const sanitizedRelease = {
1304
1307
  ...release2,
1305
- createdBy: release2.createdBy ? strapi.service("admin::user").sanitizeUser(release2.createdBy) : null
1308
+ createdBy: release2.createdBy ? strapi.admin.services.user.sanitizeUser(release2.createdBy) : null
1306
1309
  };
1307
1310
  const data = {
1308
1311
  ...sanitizedRelease,
@@ -1325,7 +1328,6 @@ const releaseController = {
1325
1328
  entriesIds
1326
1329
  );
1327
1330
  const mappedEntriesInReleases = releasesWithActions.reduce(
1328
- // TODO: Fix for v5 removed mappedEntriedToRelease
1329
1331
  (acc, release2) => {
1330
1332
  release2.actions.forEach((action) => {
1331
1333
  if (!acc[action.entry.id]) {
@@ -1336,7 +1338,6 @@ const releaseController = {
1336
1338
  });
1337
1339
  return acc;
1338
1340
  },
1339
- // TODO: Fix for v5 removed mappedEntriedToRelease
1340
1341
  {}
1341
1342
  );
1342
1343
  ctx.body = {
@@ -1349,13 +1350,13 @@ const releaseController = {
1349
1350
  await validateRelease(releaseArgs);
1350
1351
  const releaseService = getService("release", { strapi });
1351
1352
  const release2 = await releaseService.create(releaseArgs, { user });
1352
- const permissionsManager = strapi.service("admin::permission").createPermissionsManager({
1353
+ const permissionsManager = strapi.admin.services.permission.createPermissionsManager({
1353
1354
  ability: ctx.state.userAbility,
1354
1355
  model: RELEASE_MODEL_UID
1355
1356
  });
1356
- ctx.created({
1357
+ ctx.body = {
1357
1358
  data: await permissionsManager.sanitizeOutput(release2)
1358
- });
1359
+ };
1359
1360
  },
1360
1361
  async update(ctx) {
1361
1362
  const user = ctx.state.user;
@@ -1364,7 +1365,7 @@ const releaseController = {
1364
1365
  await validateRelease(releaseArgs);
1365
1366
  const releaseService = getService("release", { strapi });
1366
1367
  const release2 = await releaseService.update(id, releaseArgs, { user });
1367
- const permissionsManager = strapi.service("admin::permission").createPermissionsManager({
1368
+ const permissionsManager = strapi.admin.services.permission.createPermissionsManager({
1368
1369
  ability: ctx.state.userAbility,
1369
1370
  model: RELEASE_MODEL_UID
1370
1371
  });
@@ -1428,9 +1429,9 @@ const releaseActionController = {
1428
1429
  await validateReleaseAction(releaseActionArgs);
1429
1430
  const releaseService = getService("release", { strapi });
1430
1431
  const releaseAction2 = await releaseService.createAction(releaseId, releaseActionArgs);
1431
- ctx.created({
1432
+ ctx.body = {
1432
1433
  data: releaseAction2
1433
- });
1434
+ };
1434
1435
  },
1435
1436
  async createMany(ctx) {
1436
1437
  const releaseId = ctx.params.releaseId;
@@ -1456,17 +1457,17 @@ const releaseActionController = {
1456
1457
  return releaseActions2;
1457
1458
  });
1458
1459
  const newReleaseActions = releaseActions.filter((action) => action !== null);
1459
- ctx.created({
1460
+ ctx.body = {
1460
1461
  data: newReleaseActions,
1461
1462
  meta: {
1462
1463
  entriesAlreadyInRelease: releaseActions.length - newReleaseActions.length,
1463
1464
  totalEntries: releaseActions.length
1464
1465
  }
1465
- });
1466
+ };
1466
1467
  },
1467
1468
  async findMany(ctx) {
1468
1469
  const releaseId = ctx.params.releaseId;
1469
- const permissionsManager = strapi.service("admin::permission").createPermissionsManager({
1470
+ const permissionsManager = strapi.admin.services.permission.createPermissionsManager({
1470
1471
  ability: ctx.state.userAbility,
1471
1472
  model: RELEASE_ACTION_MODEL_UID
1472
1473
  });
@@ -1480,14 +1481,14 @@ const releaseActionController = {
1480
1481
  if (acc[action.contentType]) {
1481
1482
  return acc;
1482
1483
  }
1483
- const contentTypePermissionsManager = strapi.service("admin::permission").createPermissionsManager({
1484
+ const contentTypePermissionsManager = strapi.admin.services.permission.createPermissionsManager({
1484
1485
  ability: ctx.state.userAbility,
1485
1486
  model: action.contentType
1486
1487
  });
1487
1488
  acc[action.contentType] = contentTypePermissionsManager.sanitizeOutput;
1488
1489
  return acc;
1489
1490
  }, {});
1490
- const sanitizedResults = await async.map(results, async (action) => ({
1491
+ const sanitizedResults = await mapAsync(results, async (action) => ({
1491
1492
  ...action,
1492
1493
  entry: await contentTypeOutputSanitizers[action.contentType](action.entry)
1493
1494
  }));
@@ -1735,8 +1736,9 @@ const routes = {
1735
1736
  release,
1736
1737
  "release-action": releaseAction
1737
1738
  };
1739
+ const { features } = require("@strapi/strapi/dist/utils/ee");
1738
1740
  const getPlugin = () => {
1739
- if (strapi.ee.features.isEnabled("cms-content-releases")) {
1741
+ if (features.isEnabled("cms-content-releases")) {
1740
1742
  return {
1741
1743
  register,
1742
1744
  bootstrap,