@strapi/content-manager 0.0.0-next.b558642be856459a3e6c076f5d76fffbfc5fc5a1 → 0.0.0-next.b6435ada233136a0d0b14fba67961ff8f16cdac2

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 (171) hide show
  1. package/dist/_chunks/CardDragPreview-C0QyJgRA.js.map +1 -1
  2. package/dist/_chunks/CardDragPreview-DOxamsuj.mjs.map +1 -1
  3. package/dist/_chunks/{ComponentConfigurationPage-gsCd80MU.js → ComponentConfigurationPage-BlzvDpbX.js} +4 -5
  4. package/dist/_chunks/{ComponentConfigurationPage-gsCd80MU.js.map → ComponentConfigurationPage-BlzvDpbX.js.map} +1 -1
  5. package/dist/_chunks/{ComponentConfigurationPage-CIjXcRAB.mjs → ComponentConfigurationPage-DaPOlQaD.mjs} +3 -3
  6. package/dist/_chunks/{ComponentConfigurationPage-CIjXcRAB.mjs.map → ComponentConfigurationPage-DaPOlQaD.mjs.map} +1 -1
  7. package/dist/_chunks/{ComponentIcon-BXdiCGQp.js → ComponentIcon-CRbtQEUV.js} +2 -3
  8. package/dist/_chunks/{ComponentIcon-BXdiCGQp.js.map → ComponentIcon-CRbtQEUV.js.map} +1 -1
  9. package/dist/_chunks/ComponentIcon-u4bIXTFY.mjs.map +1 -1
  10. package/dist/_chunks/{EditConfigurationPage-BglmD_BF.mjs → EditConfigurationPage-BZPXItXo.mjs} +3 -3
  11. package/dist/_chunks/{EditConfigurationPage-BglmD_BF.mjs.map → EditConfigurationPage-BZPXItXo.mjs.map} +1 -1
  12. package/dist/_chunks/{EditConfigurationPage-DHDQKBzw.js → EditConfigurationPage-uy-v43AR.js} +4 -5
  13. package/dist/_chunks/{EditConfigurationPage-DHDQKBzw.js.map → EditConfigurationPage-uy-v43AR.js.map} +1 -1
  14. package/dist/_chunks/{EditViewPage-C4iTxUPU.js → EditViewPage-DT6A4ayX.js} +38 -9
  15. package/dist/_chunks/EditViewPage-DT6A4ayX.js.map +1 -0
  16. package/dist/_chunks/{EditViewPage-CiwVPMaK.mjs → EditViewPage-oOLeTySr.mjs} +38 -8
  17. package/dist/_chunks/EditViewPage-oOLeTySr.mjs.map +1 -0
  18. package/dist/_chunks/{Field-DIjL1b5d.mjs → Field-D7dv2aUX.mjs} +169 -117
  19. package/dist/_chunks/Field-D7dv2aUX.mjs.map +1 -0
  20. package/dist/_chunks/{Field-DhXEK8y1.js → Field-kYFVIGiP.js} +171 -119
  21. package/dist/_chunks/Field-kYFVIGiP.js.map +1 -0
  22. package/dist/_chunks/FieldTypeIcon-CMlNO8PE.mjs.map +1 -1
  23. package/dist/_chunks/FieldTypeIcon-Dnwq_IRF.js.map +1 -1
  24. package/dist/_chunks/{Form-CmNesrvR.mjs → Form-BxR6sc29.mjs} +3 -3
  25. package/dist/_chunks/{Form-CmNesrvR.mjs.map → Form-BxR6sc29.mjs.map} +1 -1
  26. package/dist/_chunks/{Form-CwmJ4sWe.js → Form-CCijSg3V.js} +5 -6
  27. package/dist/_chunks/{Form-CwmJ4sWe.js.map → Form-CCijSg3V.js.map} +1 -1
  28. package/dist/_chunks/{History-BLCCNgCt.js → History-BMndx49M.js} +22 -93
  29. package/dist/_chunks/History-BMndx49M.js.map +1 -0
  30. package/dist/_chunks/{History-D-99Wh30.mjs → History-D8F7aYQU.mjs} +22 -92
  31. package/dist/_chunks/History-D8F7aYQU.mjs.map +1 -0
  32. package/dist/_chunks/{ListConfigurationPage-DxWpeZrO.js → ListConfigurationPage-DouY1EWM.js} +6 -6
  33. package/dist/_chunks/ListConfigurationPage-DouY1EWM.js.map +1 -0
  34. package/dist/_chunks/{ListConfigurationPage-JPWZz7Kg.mjs → ListConfigurationPage-DqAdSPwC.mjs} +6 -5
  35. package/dist/_chunks/ListConfigurationPage-DqAdSPwC.mjs.map +1 -0
  36. package/dist/_chunks/{ListViewPage-CIQekSFz.js → ListViewPage-BPVmh9pq.js} +64 -53
  37. package/dist/_chunks/ListViewPage-BPVmh9pq.js.map +1 -0
  38. package/dist/_chunks/{ListViewPage-DSK3f0ST.mjs → ListViewPage-C73F0jPh.mjs} +63 -51
  39. package/dist/_chunks/ListViewPage-C73F0jPh.mjs.map +1 -0
  40. package/dist/_chunks/{NoContentTypePage-D99LU1YP.mjs → NoContentTypePage-B5w7iJOF.mjs} +2 -2
  41. package/dist/_chunks/{NoContentTypePage-D99LU1YP.mjs.map → NoContentTypePage-B5w7iJOF.mjs.map} +1 -1
  42. package/dist/_chunks/{NoContentTypePage-C5cxKvC2.js → NoContentTypePage-BwcL--4H.js} +2 -2
  43. package/dist/_chunks/{NoContentTypePage-C5cxKvC2.js.map → NoContentTypePage-BwcL--4H.js.map} +1 -1
  44. package/dist/_chunks/{NoPermissionsPage-Oy4tmUrW.js → NoPermissionsPage-BMFKVcwJ.js} +2 -2
  45. package/dist/_chunks/{NoPermissionsPage-Oy4tmUrW.js.map → NoPermissionsPage-BMFKVcwJ.js.map} +1 -1
  46. package/dist/_chunks/{NoPermissionsPage-DBrBw-0y.mjs → NoPermissionsPage-UnEgMGK4.mjs} +2 -2
  47. package/dist/_chunks/{NoPermissionsPage-DBrBw-0y.mjs.map → NoPermissionsPage-UnEgMGK4.mjs.map} +1 -1
  48. package/dist/_chunks/Preview-B7PR3Ok_.js +312 -0
  49. package/dist/_chunks/Preview-B7PR3Ok_.js.map +1 -0
  50. package/dist/_chunks/Preview-DECOhK0D.mjs +294 -0
  51. package/dist/_chunks/Preview-DECOhK0D.mjs.map +1 -0
  52. package/dist/_chunks/{Relations-BBmhcWFV.mjs → Relations-DinMQJ4B.mjs} +9 -8
  53. package/dist/_chunks/Relations-DinMQJ4B.mjs.map +1 -0
  54. package/dist/_chunks/{Relations-eG-9p_qS.js → Relations-lndx3aQk.js} +10 -10
  55. package/dist/_chunks/Relations-lndx3aQk.js.map +1 -0
  56. package/dist/_chunks/{en-Bm0D0IWz.js → en-BK8Xyl5I.js} +16 -4
  57. package/dist/_chunks/{en-Bm0D0IWz.js.map → en-BK8Xyl5I.js.map} +1 -1
  58. package/dist/_chunks/{en-DKV44jRb.mjs → en-Dtk_ot79.mjs} +16 -4
  59. package/dist/_chunks/{en-DKV44jRb.mjs.map → en-Dtk_ot79.mjs.map} +1 -1
  60. package/dist/_chunks/{es-EUonQTon.js → es-9K52xZIr.js} +2 -2
  61. package/dist/_chunks/{ja-CcFe8diO.js.map → es-9K52xZIr.js.map} +1 -1
  62. package/dist/_chunks/{es-CeXiYflN.mjs → es-D34tqjMw.mjs} +2 -2
  63. package/dist/_chunks/{es-CeXiYflN.mjs.map → es-D34tqjMw.mjs.map} +1 -1
  64. package/dist/_chunks/{fr-CD9VFbPM.mjs → fr--pg5jUbt.mjs} +13 -3
  65. package/dist/_chunks/{fr-CD9VFbPM.mjs.map → fr--pg5jUbt.mjs.map} +1 -1
  66. package/dist/_chunks/{fr-B7kGGg3E.js → fr-B2Kyv8Z9.js} +13 -3
  67. package/dist/_chunks/{fr-B7kGGg3E.js.map → fr-B2Kyv8Z9.js.map} +1 -1
  68. package/dist/_chunks/hooks-BAaaKPS_.js.map +1 -1
  69. package/dist/_chunks/{index-BrUzbQ30.mjs → index-C2SagWVW.mjs} +327 -183
  70. package/dist/_chunks/index-C2SagWVW.mjs.map +1 -0
  71. package/dist/_chunks/{index-BIWDoFLK.js → index-Cnw4gqee.js} +324 -181
  72. package/dist/_chunks/index-Cnw4gqee.js.map +1 -0
  73. package/dist/_chunks/{ja-CcFe8diO.js → ja-7sfIbjxE.js} +2 -2
  74. package/dist/_chunks/{es-EUonQTon.js.map → ja-7sfIbjxE.js.map} +1 -1
  75. package/dist/_chunks/{ja-CtsUxOvk.mjs → ja-BHqhDq4V.mjs} +2 -2
  76. package/dist/_chunks/{ja-CtsUxOvk.mjs.map → ja-BHqhDq4V.mjs.map} +1 -1
  77. package/dist/_chunks/{layout-_5-cXs34.mjs → layout-DY_D9MGA.mjs} +4 -4
  78. package/dist/_chunks/{layout-_5-cXs34.mjs.map → layout-DY_D9MGA.mjs.map} +1 -1
  79. package/dist/_chunks/{layout-lMc9i1-Z.js → layout-ivwIVPnV.js} +5 -6
  80. package/dist/_chunks/{layout-lMc9i1-Z.js.map → layout-ivwIVPnV.js.map} +1 -1
  81. package/dist/_chunks/objects-BcXOv6_9.js.map +1 -1
  82. package/dist/_chunks/objects-D6yBsdmx.mjs.map +1 -1
  83. package/dist/_chunks/{relations-BRHithi8.js → relations-B7C7O_Pv.js} +6 -3
  84. package/dist/_chunks/relations-B7C7O_Pv.js.map +1 -0
  85. package/dist/_chunks/{relations-B_VLk-DD.mjs → relations-Boc5Y9kX.mjs} +6 -3
  86. package/dist/_chunks/relations-Boc5Y9kX.mjs.map +1 -0
  87. package/dist/_chunks/useDebounce-CtcjDB3L.js.map +1 -1
  88. package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +1 -1
  89. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js → useDragAndDrop-BMtgCYzL.js} +5 -9
  90. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js.map → useDragAndDrop-BMtgCYzL.js.map} +1 -1
  91. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs → useDragAndDrop-DJ6jqvZN.mjs} +4 -7
  92. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs.map → useDragAndDrop-DJ6jqvZN.mjs.map} +1 -1
  93. package/dist/admin/index.js +1 -1
  94. package/dist/admin/index.mjs +4 -4
  95. package/dist/admin/src/content-manager.d.ts +3 -2
  96. package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
  97. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
  98. package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +2 -2
  99. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.d.ts +7 -0
  100. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/utils/prismLanguages.d.ts +49 -0
  101. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/constants.d.ts +1 -0
  102. package/dist/admin/src/preview/components/PreviewContent.d.ts +2 -0
  103. package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
  104. package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -0
  105. package/dist/admin/src/preview/index.d.ts +1 -1
  106. package/dist/admin/src/preview/pages/Preview.d.ts +11 -0
  107. package/dist/admin/src/preview/routes.d.ts +3 -0
  108. package/dist/admin/src/preview/services/preview.d.ts +3 -0
  109. package/dist/admin/src/router.d.ts +1 -1
  110. package/dist/admin/src/services/documents.d.ts +0 -3
  111. package/dist/server/index.js +384 -233
  112. package/dist/server/index.js.map +1 -1
  113. package/dist/server/index.mjs +385 -233
  114. package/dist/server/index.mjs.map +1 -1
  115. package/dist/server/src/controllers/utils/metadata.d.ts +1 -0
  116. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  117. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  118. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  119. package/dist/server/src/index.d.ts +3 -2
  120. package/dist/server/src/index.d.ts.map +1 -1
  121. package/dist/server/src/preview/controllers/preview.d.ts +6 -2
  122. package/dist/server/src/preview/controllers/preview.d.ts.map +1 -1
  123. package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
  124. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
  125. package/dist/server/src/preview/index.d.ts.map +1 -1
  126. package/dist/server/src/preview/services/index.d.ts +13 -1
  127. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  128. package/dist/server/src/preview/services/preview-config.d.ts +32 -0
  129. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
  130. package/dist/server/src/preview/services/preview.d.ts +7 -1
  131. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  132. package/dist/server/src/preview/utils.d.ts +13 -1
  133. package/dist/server/src/preview/utils.d.ts.map +1 -1
  134. package/dist/server/src/register.d.ts.map +1 -1
  135. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  136. package/dist/server/src/services/document-metadata.d.ts +4 -2
  137. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  138. package/dist/server/src/services/index.d.ts +3 -2
  139. package/dist/server/src/services/index.d.ts.map +1 -1
  140. package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
  141. package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
  142. package/dist/server/src/services/utils/populate.d.ts +2 -2
  143. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  144. package/dist/shared/contracts/index.d.ts +1 -0
  145. package/dist/shared/contracts/index.d.ts.map +1 -1
  146. package/dist/shared/contracts/preview.d.ts +27 -0
  147. package/dist/shared/contracts/preview.d.ts.map +1 -0
  148. package/dist/shared/index.js +4 -0
  149. package/dist/shared/index.js.map +1 -1
  150. package/dist/shared/index.mjs +4 -0
  151. package/dist/shared/index.mjs.map +1 -1
  152. package/package.json +13 -11
  153. package/dist/_chunks/EditViewPage-C4iTxUPU.js.map +0 -1
  154. package/dist/_chunks/EditViewPage-CiwVPMaK.mjs.map +0 -1
  155. package/dist/_chunks/Field-DIjL1b5d.mjs.map +0 -1
  156. package/dist/_chunks/Field-DhXEK8y1.js.map +0 -1
  157. package/dist/_chunks/History-BLCCNgCt.js.map +0 -1
  158. package/dist/_chunks/History-D-99Wh30.mjs.map +0 -1
  159. package/dist/_chunks/ListConfigurationPage-DxWpeZrO.js.map +0 -1
  160. package/dist/_chunks/ListConfigurationPage-JPWZz7Kg.mjs.map +0 -1
  161. package/dist/_chunks/ListViewPage-CIQekSFz.js.map +0 -1
  162. package/dist/_chunks/ListViewPage-DSK3f0ST.mjs.map +0 -1
  163. package/dist/_chunks/Relations-BBmhcWFV.mjs.map +0 -1
  164. package/dist/_chunks/Relations-eG-9p_qS.js.map +0 -1
  165. package/dist/_chunks/index-BIWDoFLK.js.map +0 -1
  166. package/dist/_chunks/index-BrUzbQ30.mjs.map +0 -1
  167. package/dist/_chunks/relations-BRHithi8.js.map +0 -1
  168. package/dist/_chunks/relations-B_VLk-DD.mjs.map +0 -1
  169. package/dist/admin/src/preview/constants.d.ts +0 -1
  170. package/dist/server/src/preview/constants.d.ts +0 -2
  171. package/dist/server/src/preview/constants.d.ts.map +0 -1
@@ -10,8 +10,7 @@ const qs = require("qs");
10
10
  const slugify = require("@sindresorhus/slugify");
11
11
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
12
12
  function _interopNamespace(e) {
13
- if (e && e.__esModule)
14
- return e;
13
+ if (e && e.__esModule) return e;
15
14
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
16
15
  if (e) {
17
16
  for (const k in e) {
@@ -33,10 +32,10 @@ const isNil__default = /* @__PURE__ */ _interopDefault(isNil);
33
32
  const ___default = /* @__PURE__ */ _interopDefault(_);
34
33
  const qs__default = /* @__PURE__ */ _interopDefault(qs);
35
34
  const slugify__default = /* @__PURE__ */ _interopDefault(slugify);
36
- const getService$1 = (name) => {
35
+ const getService$2 = (name) => {
37
36
  return strapi.plugin("content-manager").service(name);
38
37
  };
39
- function getService(strapi2, name) {
38
+ function getService$1(strapi2, name) {
40
39
  return strapi2.service(`plugin::content-manager.${name}`);
41
40
  }
42
41
  const historyRestoreVersionSchema = yup__namespace.object().shape({
@@ -72,7 +71,7 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
72
71
  if (!isSingleType && (!contentTypeUid || !ctx.query.documentId)) {
73
72
  throw new strapiUtils.errors.ForbiddenError("contentType and documentId are required");
74
73
  }
75
- const permissionChecker2 = getService$1("permission-checker").create({
74
+ const permissionChecker2 = getService$2("permission-checker").create({
76
75
  userAbility: ctx.state.userAbility,
77
76
  model: ctx.query.contentType
78
77
  });
@@ -80,7 +79,7 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
80
79
  return ctx.forbidden();
81
80
  }
82
81
  const query = await permissionChecker2.sanitizeQuery(ctx.query);
83
- const { results, pagination } = await getService(strapi2, "history").findVersionsPage({
82
+ const { results, pagination } = await getService$1(strapi2, "history").findVersionsPage({
84
83
  query: {
85
84
  ...query,
86
85
  ...getValidPagination({ page: query.page, pageSize: query.pageSize })
@@ -105,14 +104,14 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
105
104
  async restoreVersion(ctx) {
106
105
  const request = ctx.request;
107
106
  await validateRestoreVersion(request.body, "contentType is required");
108
- const permissionChecker2 = getService$1("permission-checker").create({
107
+ const permissionChecker2 = getService$2("permission-checker").create({
109
108
  userAbility: ctx.state.userAbility,
110
109
  model: request.body.contentType
111
110
  });
112
111
  if (permissionChecker2.cannot.update()) {
113
112
  throw new strapiUtils.errors.ForbiddenError();
114
113
  }
115
- const restoredDocument = await getService(strapi2, "history").restoreVersion(
114
+ const restoredDocument = await getService$1(strapi2, "history").restoreVersion(
116
115
  request.params.versionId
117
116
  );
118
117
  return {
@@ -167,8 +166,7 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
167
166
  };
168
167
  const getRelationRestoreValue = async (versionRelationData, attribute) => {
169
168
  if (Array.isArray(versionRelationData)) {
170
- if (versionRelationData.length === 0)
171
- return versionRelationData;
169
+ if (versionRelationData.length === 0) return versionRelationData;
172
170
  const existingAndMissingRelations = await Promise.all(
173
171
  versionRelationData.map((relation) => {
174
172
  return strapi2.documents(attribute.target).findOne({
@@ -203,8 +201,7 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
203
201
  const getDefaultLocale = async () => localesService ? localesService.getDefaultLocale() : null;
204
202
  const isLocalizedContentType = (model) => i18nContentTypeService ? i18nContentTypeService.isLocalizedContentType(model) : false;
205
203
  const getLocaleDictionary = async () => {
206
- if (!localesService)
207
- return {};
204
+ if (!localesService) return {};
208
205
  const locales = await localesService.find() || [];
209
206
  return locales.reduce(
210
207
  (acc, locale) => {
@@ -228,6 +225,17 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
228
225
  const meta = await documentMetadataService.getMetadata(contentTypeUid, document);
229
226
  return documentMetadataService.getStatus(document, meta.availableStatus);
230
227
  };
228
+ const getComponentFields = (componentUID) => {
229
+ return Object.entries(strapi2.getModel(componentUID).attributes).reduce(
230
+ (fieldsAcc, [key, attribute]) => {
231
+ if (!["relation", "media", "component", "dynamiczone"].includes(attribute.type)) {
232
+ fieldsAcc.push(key);
233
+ }
234
+ return fieldsAcc;
235
+ },
236
+ []
237
+ );
238
+ };
231
239
  const getDeepPopulate2 = (uid2, useDatabaseSyntax = false) => {
232
240
  const model = strapi2.getModel(uid2);
233
241
  const attributes = Object.entries(model.attributes);
@@ -251,13 +259,19 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
251
259
  }
252
260
  case "component": {
253
261
  const populate = getDeepPopulate2(attribute.component);
254
- acc[attributeName] = { populate };
262
+ acc[attributeName] = {
263
+ populate,
264
+ [fieldSelector]: getComponentFields(attribute.component)
265
+ };
255
266
  break;
256
267
  }
257
268
  case "dynamiczone": {
258
269
  const populatedComponents = (attribute.components || []).reduce(
259
270
  (acc2, componentUID) => {
260
- acc2[componentUID] = { populate: getDeepPopulate2(componentUID) };
271
+ acc2[componentUID] = {
272
+ populate: getDeepPopulate2(componentUID),
273
+ [fieldSelector]: getComponentFields(componentUID)
274
+ };
261
275
  return acc2;
262
276
  },
263
277
  {}
@@ -370,7 +384,7 @@ const createHistoryService = ({ strapi: strapi2 }) => {
370
384
  const attributeValue = entry.data[attributeKey];
371
385
  const attributeValues = Array.isArray(attributeValue) ? attributeValue : [attributeValue];
372
386
  if (attributeSchema.type === "media") {
373
- const permissionChecker2 = getService$1("permission-checker").create({
387
+ const permissionChecker2 = getService$2("permission-checker").create({
374
388
  userAbility: params.state.userAbility,
375
389
  model: "plugin::upload.file"
376
390
  });
@@ -411,7 +425,7 @@ const createHistoryService = ({ strapi: strapi2 }) => {
411
425
  [attributeKey]: adminUsers
412
426
  };
413
427
  }
414
- const permissionChecker2 = getService$1("permission-checker").create({
428
+ const permissionChecker2 = getService$2("permission-checker").create({
415
429
  userAbility: params.state.userAbility,
416
430
  model: attributeSchema.target
417
431
  });
@@ -587,7 +601,7 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
587
601
  onCommit(async () => {
588
602
  for (const entry of localeEntries) {
589
603
  const status = await serviceUtils.getVersionStatus(uid2, entry);
590
- await getService(strapi2, "history").createVersion({
604
+ await getService$1(strapi2, "history").createVersion({
591
605
  contentType: uid2,
592
606
  data: fp.omit(FIELDS_TO_IGNORE, entry),
593
607
  relatedDocumentId: documentId,
@@ -600,15 +614,19 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
600
614
  });
601
615
  return result;
602
616
  });
603
- state.deleteExpiredJob = nodeSchedule.scheduleJob("0 0 * * *", () => {
617
+ state.deleteExpiredJob = nodeSchedule.scheduleJob("historyDaily", "0 0 * * *", () => {
604
618
  const retentionDaysInMilliseconds = serviceUtils.getRetentionDays() * 24 * 60 * 60 * 1e3;
605
619
  const expirationDate = new Date(Date.now() - retentionDaysInMilliseconds);
606
620
  strapi2.db.query(HISTORY_VERSION_UID).deleteMany({
607
621
  where: {
608
622
  created_at: {
609
- $lt: expirationDate.toISOString()
623
+ $lt: expirationDate
610
624
  }
611
625
  }
626
+ }).catch((error) => {
627
+ if (error instanceof Error) {
628
+ strapi2.log.error("Error deleting expired history versions", error.message);
629
+ }
612
630
  });
613
631
  });
614
632
  state.isInitialized = true;
@@ -702,10 +720,10 @@ const getFeature$1 = () => {
702
720
  strapi2.get("models").add(historyVersion);
703
721
  },
704
722
  bootstrap({ strapi: strapi2 }) {
705
- getService(strapi2, "lifecycles").bootstrap();
723
+ getService$1(strapi2, "lifecycles").bootstrap();
706
724
  },
707
725
  destroy({ strapi: strapi2 }) {
708
- getService(strapi2, "lifecycles").destroy();
726
+ getService$1(strapi2, "lifecycles").destroy();
709
727
  },
710
728
  controllers: controllers$2,
711
729
  services: services$2,
@@ -719,14 +737,6 @@ const getFeature$1 = () => {
719
737
  };
720
738
  };
721
739
  const history = getFeature$1();
722
- const register = async ({ strapi: strapi2 }) => {
723
- await history.register?.({ strapi: strapi2 });
724
- };
725
- const ALLOWED_WEBHOOK_EVENTS = {
726
- ENTRY_PUBLISH: "entry.publish",
727
- ENTRY_UNPUBLISH: "entry.unpublish"
728
- };
729
- const FEATURE_ID = "preview";
730
740
  const info = { pluginName: "content-manager", type: "admin" };
731
741
  const previewRouter = {
732
742
  type: "admin",
@@ -735,7 +745,7 @@ const previewRouter = {
735
745
  method: "GET",
736
746
  info,
737
747
  path: "/preview/url/:contentType",
738
- handler: "preview.getPreviewURL",
748
+ handler: "preview.getPreviewUrl",
739
749
  config: {
740
750
  policies: ["admin::isAuthenticatedAdmin"]
741
751
  }
@@ -745,12 +755,56 @@ const previewRouter = {
745
755
  const routes$1 = {
746
756
  preview: previewRouter
747
757
  };
758
+ function getService(strapi2, name) {
759
+ return strapi2.service(`plugin::content-manager.${name}`);
760
+ }
761
+ const getPreviewUrlSchema = yup__namespace.object().shape({
762
+ // Will be undefined for single types
763
+ documentId: yup__namespace.string(),
764
+ locale: yup__namespace.string().nullable(),
765
+ status: yup__namespace.string()
766
+ }).required();
767
+ const validatePreviewUrl = async (strapi2, uid2, params) => {
768
+ await strapiUtils.validateYupSchema(getPreviewUrlSchema)(params);
769
+ const newParams = fp.pick(["documentId", "locale", "status"], params);
770
+ const model = strapi2.getModel(uid2);
771
+ if (!model || model.modelType !== "contentType") {
772
+ throw new strapiUtils.errors.ValidationError("Invalid content type");
773
+ }
774
+ const isSingleType = model?.kind === "singleType";
775
+ if (!isSingleType && !params.documentId) {
776
+ throw new strapiUtils.errors.ValidationError("documentId is required for Collection Types");
777
+ }
778
+ if (isSingleType) {
779
+ const doc = await strapi2.documents(uid2).findFirst();
780
+ if (!doc) {
781
+ throw new strapiUtils.errors.NotFoundError("Document not found");
782
+ }
783
+ newParams.documentId = doc?.documentId;
784
+ }
785
+ if (!newParams.status) {
786
+ const isDPEnabled = model?.options?.draftAndPublish;
787
+ newParams.status = isDPEnabled ? "draft" : "published";
788
+ }
789
+ return newParams;
790
+ };
748
791
  const createPreviewController = () => {
749
792
  return {
750
- async getPreviewURL(ctx) {
751
- ctx.request;
793
+ /**
794
+ * Transforms an entry into a preview URL, so that it can be previewed
795
+ * in the Content Manager.
796
+ */
797
+ async getPreviewUrl(ctx) {
798
+ const uid2 = ctx.params.contentType;
799
+ const query = ctx.request.query;
800
+ const params = await validatePreviewUrl(strapi, uid2, query);
801
+ const previewService = getService(strapi, "preview");
802
+ const url = await previewService.getPreviewUrl(uid2, params);
803
+ if (!url) {
804
+ ctx.status = 204;
805
+ }
752
806
  return {
753
- data: { url: "" }
807
+ data: { url }
754
808
  };
755
809
  }
756
810
  };
@@ -762,19 +816,111 @@ const controllers$1 = {
762
816
  * passing a controller factory as the value, instead of a controller object directly
763
817
  */
764
818
  };
765
- const createPreviewService = () => {
819
+ const createPreviewService = ({ strapi: strapi2 }) => {
820
+ const config = getService(strapi2, "preview-config");
821
+ return {
822
+ async getPreviewUrl(uid2, params) {
823
+ const handler = config.getPreviewHandler();
824
+ try {
825
+ return handler(uid2, params);
826
+ } catch (error) {
827
+ strapi2.log.error(`Failed to get preview URL: ${error}`);
828
+ throw new strapiUtils.errors.ApplicationError("Failed to get preview URL");
829
+ }
830
+ return;
831
+ }
832
+ };
833
+ };
834
+ const extendMiddlewareConfiguration = (middleware = { name: "", config: {} }) => {
835
+ const middlewares = strapi.config.get("middlewares");
836
+ const configuredMiddlewares = middlewares.map((currentMiddleware) => {
837
+ if (currentMiddleware === middleware.name) {
838
+ return middleware;
839
+ }
840
+ if (currentMiddleware.name === middleware.name) {
841
+ return fp.mergeWith(
842
+ (objValue, srcValue) => {
843
+ if (Array.isArray(objValue)) {
844
+ return objValue.concat(srcValue);
845
+ }
846
+ return void 0;
847
+ },
848
+ currentMiddleware,
849
+ middleware
850
+ );
851
+ }
852
+ return currentMiddleware;
853
+ });
854
+ strapi.config.set("middlewares", configuredMiddlewares);
855
+ };
856
+ const createPreviewConfigService = ({ strapi: strapi2 }) => {
857
+ return {
858
+ register() {
859
+ if (!this.isEnabled()) {
860
+ return;
861
+ }
862
+ const config = strapi2.config.get("admin.preview");
863
+ if (config.config?.allowedOrigins) {
864
+ extendMiddlewareConfiguration({
865
+ name: "strapi::security",
866
+ config: {
867
+ contentSecurityPolicy: {
868
+ directives: {
869
+ "frame-src": config.config.allowedOrigins
870
+ }
871
+ }
872
+ }
873
+ });
874
+ }
875
+ },
876
+ isEnabled() {
877
+ const config = strapi2.config.get("admin.preview");
878
+ if (!config) {
879
+ return false;
880
+ }
881
+ return config?.enabled ?? true;
882
+ },
883
+ /**
884
+ * Validate if the configuration is valid
885
+ */
886
+ validate() {
887
+ if (!this.isEnabled()) {
888
+ return;
889
+ }
890
+ const handler = this.getPreviewHandler();
891
+ if (typeof handler !== "function") {
892
+ throw new strapiUtils.errors.ValidationError(
893
+ "Preview configuration is invalid. Handler must be a function"
894
+ );
895
+ }
896
+ },
897
+ /**
898
+ * Utility to get the preview handler from the configuration
899
+ */
900
+ getPreviewHandler() {
901
+ const config = strapi2.config.get("admin.preview");
902
+ const emptyHandler = () => {
903
+ return void 0;
904
+ };
905
+ if (!this.isEnabled()) {
906
+ return emptyHandler;
907
+ }
908
+ return config?.config?.handler || emptyHandler;
909
+ }
910
+ };
766
911
  };
767
912
  const services$1 = {
768
- preview: createPreviewService
913
+ preview: createPreviewService,
914
+ "preview-config": createPreviewConfigService
769
915
  };
770
916
  const getFeature = () => {
771
- if (!strapi.features.future.isEnabled(FEATURE_ID)) {
772
- return {};
773
- }
774
917
  return {
918
+ register() {
919
+ const config = getService(strapi, "preview-config");
920
+ config.validate();
921
+ config.register();
922
+ },
775
923
  bootstrap() {
776
- console.log("Bootstrapping preview server");
777
- strapi.config.get("admin.preview");
778
924
  },
779
925
  routes: routes$1,
780
926
  controllers: controllers$1,
@@ -782,14 +928,22 @@ const getFeature = () => {
782
928
  };
783
929
  };
784
930
  const preview = getFeature();
931
+ const register = async ({ strapi: strapi2 }) => {
932
+ await history.register?.({ strapi: strapi2 });
933
+ await preview.register?.({ strapi: strapi2 });
934
+ };
935
+ const ALLOWED_WEBHOOK_EVENTS = {
936
+ ENTRY_PUBLISH: "entry.publish",
937
+ ENTRY_UNPUBLISH: "entry.unpublish"
938
+ };
785
939
  const bootstrap = async () => {
786
940
  Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {
787
941
  strapi.get("webhookStore").addAllowedEvent(key, value);
788
942
  });
789
- getService$1("field-sizes").setCustomFieldInputSizes();
790
- await getService$1("components").syncConfigurations();
791
- await getService$1("content-types").syncConfigurations();
792
- await getService$1("permission").registerPermissions();
943
+ getService$2("field-sizes").setCustomFieldInputSizes();
944
+ await getService$2("components").syncConfigurations();
945
+ await getService$2("content-types").syncConfigurations();
946
+ await getService$2("permission").registerPermissions();
793
947
  await history.bootstrap?.({ strapi });
794
948
  await preview.bootstrap?.({ strapi });
795
949
  };
@@ -1345,8 +1499,7 @@ const isSortable = (schema, name) => {
1345
1499
  if (!___default.default.has(schema.attributes, name)) {
1346
1500
  return false;
1347
1501
  }
1348
- if (schema.modelType === "component" && name === "id")
1349
- return false;
1502
+ if (schema.modelType === "component" && name === "id") return false;
1350
1503
  const attribute = schema.attributes[name];
1351
1504
  if (NON_SORTABLES.includes(attribute.type)) {
1352
1505
  return false;
@@ -1491,8 +1644,7 @@ const createDefaultSettings = async (schema) => {
1491
1644
  };
1492
1645
  };
1493
1646
  const syncSettings = async (configuration, schema) => {
1494
- if (fp.isEmpty(configuration.settings))
1495
- return createDefaultSettings(schema);
1647
+ if (fp.isEmpty(configuration.settings)) return createDefaultSettings(schema);
1496
1648
  const defaultField = getDefaultMainField(schema);
1497
1649
  const { mainField = defaultField, defaultSortBy = defaultField } = configuration.settings || {};
1498
1650
  return {
@@ -1539,7 +1691,7 @@ const createMetadasSchema = (schema) => {
1539
1691
  if (!value) {
1540
1692
  return strapiUtils.yup.string();
1541
1693
  }
1542
- const targetSchema = getService$1("content-types").findContentType(
1694
+ const targetSchema = getService$2("content-types").findContentType(
1543
1695
  schema.attributes[key].targetModel
1544
1696
  );
1545
1697
  if (!targetSchema) {
@@ -1668,8 +1820,7 @@ const excludeNotCreatableFields = (uid2, permissionChecker2) => (body, path = []
1668
1820
  }
1669
1821
  switch (attribute.type) {
1670
1822
  case "relation": {
1671
- if (canCreate(attributePath))
1672
- return body2;
1823
+ if (canCreate(attributePath)) return body2;
1673
1824
  return fp.set(attributePath, { set: [] }, body2);
1674
1825
  }
1675
1826
  case "component": {
@@ -1679,8 +1830,7 @@ const excludeNotCreatableFields = (uid2, permissionChecker2) => (body, path = []
1679
1830
  ]);
1680
1831
  }
1681
1832
  default: {
1682
- if (canCreate(attributePath))
1683
- return body2;
1833
+ if (canCreate(attributePath)) return body2;
1684
1834
  return fp.set(attributePath, null, body2);
1685
1835
  }
1686
1836
  }
@@ -1708,7 +1858,7 @@ const getDocumentLocaleAndStatus = async (request, model, opts = { allowMultiple
1708
1858
  }
1709
1859
  };
1710
1860
  const formatDocumentWithMetadata = async (permissionChecker2, uid2, document, opts = {}) => {
1711
- const documentMetadata2 = getService$1("document-metadata");
1861
+ const documentMetadata2 = getService$2("document-metadata");
1712
1862
  const serviceOutput = await documentMetadata2.formatDocumentWithMetadata(uid2, document, opts);
1713
1863
  let {
1714
1864
  meta: { availableLocales, availableStatus }
@@ -1734,8 +1884,8 @@ const createDocument = async (ctx, opts) => {
1734
1884
  const { userAbility, user } = ctx.state;
1735
1885
  const { model } = ctx.params;
1736
1886
  const { body } = ctx.request;
1737
- const documentManager2 = getService$1("document-manager");
1738
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
1887
+ const documentManager2 = getService$2("document-manager");
1888
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
1739
1889
  if (permissionChecker2.cannot.create()) {
1740
1890
  throw new strapiUtils.errors.ForbiddenError();
1741
1891
  }
@@ -1755,13 +1905,13 @@ const updateDocument = async (ctx, opts) => {
1755
1905
  const { userAbility, user } = ctx.state;
1756
1906
  const { id, model } = ctx.params;
1757
1907
  const { body } = ctx.request;
1758
- const documentManager2 = getService$1("document-manager");
1759
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
1908
+ const documentManager2 = getService$2("document-manager");
1909
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
1760
1910
  if (permissionChecker2.cannot.update()) {
1761
1911
  throw new strapiUtils.errors.ForbiddenError();
1762
1912
  }
1763
1913
  const permissionQuery = await permissionChecker2.sanitizedQuery.update(ctx.query);
1764
- const populate = await getService$1("populate-builder")(model).populateFromQuery(permissionQuery).build();
1914
+ const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
1765
1915
  const { locale } = await getDocumentLocaleAndStatus(body, model);
1766
1916
  const [documentVersion, documentExists] = await Promise.all([
1767
1917
  documentManager2.findOne(id, model, { populate, locale, status: "draft" }),
@@ -1792,14 +1942,14 @@ const collectionTypes = {
1792
1942
  const { userAbility } = ctx.state;
1793
1943
  const { model } = ctx.params;
1794
1944
  const { query } = ctx.request;
1795
- const documentMetadata2 = getService$1("document-metadata");
1796
- const documentManager2 = getService$1("document-manager");
1797
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
1945
+ const documentMetadata2 = getService$2("document-metadata");
1946
+ const documentManager2 = getService$2("document-manager");
1947
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
1798
1948
  if (permissionChecker2.cannot.read()) {
1799
1949
  return ctx.forbidden();
1800
1950
  }
1801
1951
  const permissionQuery = await permissionChecker2.sanitizedQuery.read(query);
1802
- const populate = await getService$1("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(1).countRelations({ toOne: false, toMany: true }).build();
1952
+ const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(1).countRelations({ toOne: false, toMany: true }).build();
1803
1953
  const { locale, status } = await getDocumentLocaleAndStatus(query, model);
1804
1954
  const { results: documents, pagination } = await documentManager2.findPage(
1805
1955
  { ...permissionQuery, populate, locale, status },
@@ -1828,13 +1978,13 @@ const collectionTypes = {
1828
1978
  async findOne(ctx) {
1829
1979
  const { userAbility } = ctx.state;
1830
1980
  const { model, id } = ctx.params;
1831
- const documentManager2 = getService$1("document-manager");
1832
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
1981
+ const documentManager2 = getService$2("document-manager");
1982
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
1833
1983
  if (permissionChecker2.cannot.read()) {
1834
1984
  return ctx.forbidden();
1835
1985
  }
1836
1986
  const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
1837
- const populate = await getService$1("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
1987
+ const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
1838
1988
  const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);
1839
1989
  const version = await documentManager2.findOne(id, model, {
1840
1990
  populate,
@@ -1865,7 +2015,7 @@ const collectionTypes = {
1865
2015
  async create(ctx) {
1866
2016
  const { userAbility } = ctx.state;
1867
2017
  const { model } = ctx.params;
1868
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
2018
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
1869
2019
  const [totalEntries, document] = await Promise.all([
1870
2020
  strapi.db.query(model).count(),
1871
2021
  createDocument(ctx)
@@ -1886,7 +2036,7 @@ const collectionTypes = {
1886
2036
  async update(ctx) {
1887
2037
  const { userAbility } = ctx.state;
1888
2038
  const { model } = ctx.params;
1889
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
2039
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
1890
2040
  const updatedVersion = await updateDocument(ctx);
1891
2041
  const sanitizedVersion = await permissionChecker2.sanitizeOutput(updatedVersion);
1892
2042
  ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedVersion);
@@ -1895,13 +2045,13 @@ const collectionTypes = {
1895
2045
  const { userAbility, user } = ctx.state;
1896
2046
  const { model, sourceId: id } = ctx.params;
1897
2047
  const { body } = ctx.request;
1898
- const documentManager2 = getService$1("document-manager");
1899
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
2048
+ const documentManager2 = getService$2("document-manager");
2049
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
1900
2050
  if (permissionChecker2.cannot.create()) {
1901
2051
  return ctx.forbidden();
1902
2052
  }
1903
2053
  const permissionQuery = await permissionChecker2.sanitizedQuery.create(ctx.query);
1904
- const populate = await getService$1("populate-builder")(model).populateFromQuery(permissionQuery).build();
2054
+ const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
1905
2055
  const { locale } = await getDocumentLocaleAndStatus(body, model);
1906
2056
  const document = await documentManager2.findOne(id, model, {
1907
2057
  populate,
@@ -1940,13 +2090,13 @@ const collectionTypes = {
1940
2090
  async delete(ctx) {
1941
2091
  const { userAbility } = ctx.state;
1942
2092
  const { id, model } = ctx.params;
1943
- const documentManager2 = getService$1("document-manager");
1944
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
2093
+ const documentManager2 = getService$2("document-manager");
2094
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
1945
2095
  if (permissionChecker2.cannot.delete()) {
1946
2096
  return ctx.forbidden();
1947
2097
  }
1948
2098
  const permissionQuery = await permissionChecker2.sanitizedQuery.delete(ctx.query);
1949
- const populate = await getService$1("populate-builder")(model).populateFromQuery(permissionQuery).build();
2099
+ const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
1950
2100
  const { locale } = await getDocumentLocaleAndStatus(ctx.query, model);
1951
2101
  const documentLocales = await documentManager2.findLocales(id, model, { populate, locale });
1952
2102
  if (documentLocales.length === 0) {
@@ -1968,14 +2118,14 @@ const collectionTypes = {
1968
2118
  const { userAbility } = ctx.state;
1969
2119
  const { id, model } = ctx.params;
1970
2120
  const { body } = ctx.request;
1971
- const documentManager2 = getService$1("document-manager");
1972
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
2121
+ const documentManager2 = getService$2("document-manager");
2122
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
1973
2123
  if (permissionChecker2.cannot.publish()) {
1974
2124
  return ctx.forbidden();
1975
2125
  }
1976
2126
  const publishedDocument = await strapi.db.transaction(async () => {
1977
2127
  const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
1978
- const populate = await getService$1("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
2128
+ const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
1979
2129
  let document;
1980
2130
  const { locale } = await getDocumentLocaleAndStatus(body, model);
1981
2131
  const isCreate = fp.isNil(id);
@@ -2023,13 +2173,13 @@ const collectionTypes = {
2023
2173
  const { body } = ctx.request;
2024
2174
  const { documentIds } = body;
2025
2175
  await validateBulkActionInput(body);
2026
- const documentManager2 = getService$1("document-manager");
2027
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
2176
+ const documentManager2 = getService$2("document-manager");
2177
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
2028
2178
  if (permissionChecker2.cannot.publish()) {
2029
2179
  return ctx.forbidden();
2030
2180
  }
2031
2181
  const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
2032
- const populate = await getService$1("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
2182
+ const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
2033
2183
  const { locale } = await getDocumentLocaleAndStatus(body, model, {
2034
2184
  allowMultipleLocales: true
2035
2185
  });
@@ -2054,8 +2204,8 @@ const collectionTypes = {
2054
2204
  const { body } = ctx.request;
2055
2205
  const { documentIds } = body;
2056
2206
  await validateBulkActionInput(body);
2057
- const documentManager2 = getService$1("document-manager");
2058
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
2207
+ const documentManager2 = getService$2("document-manager");
2208
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
2059
2209
  if (permissionChecker2.cannot.unpublish()) {
2060
2210
  return ctx.forbidden();
2061
2211
  }
@@ -2084,8 +2234,8 @@ const collectionTypes = {
2084
2234
  const {
2085
2235
  body: { discardDraft, ...body }
2086
2236
  } = ctx.request;
2087
- const documentManager2 = getService$1("document-manager");
2088
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
2237
+ const documentManager2 = getService$2("document-manager");
2238
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
2089
2239
  if (permissionChecker2.cannot.unpublish()) {
2090
2240
  return ctx.forbidden();
2091
2241
  }
@@ -2093,7 +2243,7 @@ const collectionTypes = {
2093
2243
  return ctx.forbidden();
2094
2244
  }
2095
2245
  const permissionQuery = await permissionChecker2.sanitizedQuery.unpublish(ctx.query);
2096
- const populate = await getService$1("populate-builder")(model).populateFromQuery(permissionQuery).build();
2246
+ const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
2097
2247
  const { locale } = await getDocumentLocaleAndStatus(body, model);
2098
2248
  const document = await documentManager2.findOne(id, model, {
2099
2249
  populate,
@@ -2124,13 +2274,13 @@ const collectionTypes = {
2124
2274
  const { userAbility } = ctx.state;
2125
2275
  const { id, model } = ctx.params;
2126
2276
  const { body } = ctx.request;
2127
- const documentManager2 = getService$1("document-manager");
2128
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
2277
+ const documentManager2 = getService$2("document-manager");
2278
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
2129
2279
  if (permissionChecker2.cannot.discard()) {
2130
2280
  return ctx.forbidden();
2131
2281
  }
2132
2282
  const permissionQuery = await permissionChecker2.sanitizedQuery.discard(ctx.query);
2133
- const populate = await getService$1("populate-builder")(model).populateFromQuery(permissionQuery).build();
2283
+ const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
2134
2284
  const { locale } = await getDocumentLocaleAndStatus(body, model);
2135
2285
  const document = await documentManager2.findOne(id, model, {
2136
2286
  populate,
@@ -2155,13 +2305,13 @@ const collectionTypes = {
2155
2305
  const { query, body } = ctx.request;
2156
2306
  const { documentIds } = body;
2157
2307
  await validateBulkActionInput(body);
2158
- const documentManager2 = getService$1("document-manager");
2159
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
2308
+ const documentManager2 = getService$2("document-manager");
2309
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
2160
2310
  if (permissionChecker2.cannot.delete()) {
2161
2311
  return ctx.forbidden();
2162
2312
  }
2163
2313
  const permissionQuery = await permissionChecker2.sanitizedQuery.delete(query);
2164
- const populate = await getService$1("populate-builder")(model).populateFromQuery(permissionQuery).build();
2314
+ const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
2165
2315
  const { locale } = await getDocumentLocaleAndStatus(body, model);
2166
2316
  const documentLocales = await documentManager2.findLocales(documentIds, model, {
2167
2317
  populate,
@@ -2182,13 +2332,13 @@ const collectionTypes = {
2182
2332
  async countDraftRelations(ctx) {
2183
2333
  const { userAbility } = ctx.state;
2184
2334
  const { model, id } = ctx.params;
2185
- const documentManager2 = getService$1("document-manager");
2186
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
2335
+ const documentManager2 = getService$2("document-manager");
2336
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
2187
2337
  if (permissionChecker2.cannot.read()) {
2188
2338
  return ctx.forbidden();
2189
2339
  }
2190
2340
  const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
2191
- const populate = await getService$1("populate-builder")(model).populateFromQuery(permissionQuery).build();
2341
+ const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
2192
2342
  const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);
2193
2343
  const entity = await documentManager2.findOne(id, model, { populate, locale, status });
2194
2344
  if (!entity) {
@@ -2207,8 +2357,8 @@ const collectionTypes = {
2207
2357
  const ids = ctx.request.query.documentIds;
2208
2358
  const locale = ctx.request.query.locale;
2209
2359
  const { model } = ctx.params;
2210
- const documentManager2 = getService$1("document-manager");
2211
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
2360
+ const documentManager2 = getService$2("document-manager");
2361
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
2212
2362
  if (permissionChecker2.cannot.read()) {
2213
2363
  return ctx.forbidden();
2214
2364
  }
@@ -2232,13 +2382,13 @@ const collectionTypes = {
2232
2382
  };
2233
2383
  const components$1 = {
2234
2384
  findComponents(ctx) {
2235
- const components2 = getService$1("components").findAllComponents();
2236
- const { toDto } = getService$1("data-mapper");
2385
+ const components2 = getService$2("components").findAllComponents();
2386
+ const { toDto } = getService$2("data-mapper");
2237
2387
  ctx.body = { data: components2.map(toDto) };
2238
2388
  },
2239
2389
  async findComponentConfiguration(ctx) {
2240
2390
  const { uid: uid2 } = ctx.params;
2241
- const componentService = getService$1("components");
2391
+ const componentService = getService$2("components");
2242
2392
  const component = componentService.findComponent(uid2);
2243
2393
  if (!component) {
2244
2394
  return ctx.notFound("component.notFound");
@@ -2255,7 +2405,7 @@ const components$1 = {
2255
2405
  async updateComponentConfiguration(ctx) {
2256
2406
  const { uid: uid2 } = ctx.params;
2257
2407
  const { body } = ctx.request;
2258
- const componentService = getService$1("components");
2408
+ const componentService = getService$2("components");
2259
2409
  const component = componentService.findComponent(uid2);
2260
2410
  if (!component) {
2261
2411
  return ctx.notFound("component.notFound");
@@ -2289,12 +2439,12 @@ const contentTypes = {
2289
2439
  } catch (error) {
2290
2440
  return ctx.send({ error }, 400);
2291
2441
  }
2292
- const contentTypes2 = getService$1("content-types").findContentTypesByKind(kind);
2293
- const { toDto } = getService$1("data-mapper");
2442
+ const contentTypes2 = getService$2("content-types").findContentTypesByKind(kind);
2443
+ const { toDto } = getService$2("data-mapper");
2294
2444
  ctx.body = { data: contentTypes2.map(toDto) };
2295
2445
  },
2296
2446
  async findContentTypesSettings(ctx) {
2297
- const { findAllContentTypes, findConfiguration } = getService$1("content-types");
2447
+ const { findAllContentTypes, findConfiguration } = getService$2("content-types");
2298
2448
  const contentTypes2 = await findAllContentTypes();
2299
2449
  const configurations = await Promise.all(
2300
2450
  contentTypes2.map(async (contentType) => {
@@ -2308,7 +2458,7 @@ const contentTypes = {
2308
2458
  },
2309
2459
  async findContentTypeConfiguration(ctx) {
2310
2460
  const { uid: uid2 } = ctx.params;
2311
- const contentTypeService = getService$1("content-types");
2461
+ const contentTypeService = getService$2("content-types");
2312
2462
  const contentType = await contentTypeService.findContentType(uid2);
2313
2463
  if (!contentType) {
2314
2464
  return ctx.notFound("contentType.notFound");
@@ -2330,13 +2480,13 @@ const contentTypes = {
2330
2480
  const { userAbility } = ctx.state;
2331
2481
  const { uid: uid2 } = ctx.params;
2332
2482
  const { body } = ctx.request;
2333
- const contentTypeService = getService$1("content-types");
2334
- const metricsService = getService$1("metrics");
2483
+ const contentTypeService = getService$2("content-types");
2484
+ const metricsService = getService$2("metrics");
2335
2485
  const contentType = await contentTypeService.findContentType(uid2);
2336
2486
  if (!contentType) {
2337
2487
  return ctx.notFound("contentType.notFound");
2338
2488
  }
2339
- if (!getService$1("permission").canConfigureContentType({ userAbility, contentType })) {
2489
+ if (!getService$2("permission").canConfigureContentType({ userAbility, contentType })) {
2340
2490
  return ctx.forbidden();
2341
2491
  }
2342
2492
  let input;
@@ -2369,10 +2519,10 @@ const contentTypes = {
2369
2519
  };
2370
2520
  const init = {
2371
2521
  getInitData(ctx) {
2372
- const { toDto } = getService$1("data-mapper");
2373
- const { findAllComponents } = getService$1("components");
2374
- const { getAllFieldSizes } = getService$1("field-sizes");
2375
- const { findAllContentTypes } = getService$1("content-types");
2522
+ const { toDto } = getService$2("data-mapper");
2523
+ const { findAllComponents } = getService$2("components");
2524
+ const { getAllFieldSizes } = getService$2("field-sizes");
2525
+ const { findAllContentTypes } = getService$2("content-types");
2376
2526
  ctx.body = {
2377
2527
  data: {
2378
2528
  fieldSizes: getAllFieldSizes(),
@@ -2408,7 +2558,7 @@ const addFiltersClause = (params, filtersClause) => {
2408
2558
  params.filters.$and.push(filtersClause);
2409
2559
  };
2410
2560
  const sanitizeMainField = (model, mainField, userAbility) => {
2411
- const permissionChecker2 = getService$1("permission-checker").create({
2561
+ const permissionChecker2 = getService$2("permission-checker").create({
2412
2562
  userAbility,
2413
2563
  model: model.uid
2414
2564
  });
@@ -2426,7 +2576,7 @@ const addStatusToRelations = async (targetUid, relations2) => {
2426
2576
  if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.getModel(targetUid))) {
2427
2577
  return relations2;
2428
2578
  }
2429
- const documentMetadata2 = getService$1("document-metadata");
2579
+ const documentMetadata2 = getService$2("document-metadata");
2430
2580
  if (!relations2.length) {
2431
2581
  return relations2;
2432
2582
  }
@@ -2473,8 +2623,7 @@ const validateStatus = (sourceUid, status) => {
2473
2623
  const sourceModel = strapi.getModel(sourceUid);
2474
2624
  const isDP = strapiUtils.contentTypes.hasDraftAndPublish;
2475
2625
  const isSourceDP = isDP(sourceModel);
2476
- if (!isSourceDP)
2477
- return { status: void 0 };
2626
+ if (!isSourceDP) return { status: void 0 };
2478
2627
  switch (status) {
2479
2628
  case "published":
2480
2629
  return { status: "published" };
@@ -2504,7 +2653,7 @@ const relations = {
2504
2653
  ctx.request?.query?.locale
2505
2654
  );
2506
2655
  const { status } = validateStatus(sourceUid, ctx.request?.query?.status);
2507
- const permissionChecker2 = getService$1("permission-checker").create({
2656
+ const permissionChecker2 = getService$2("permission-checker").create({
2508
2657
  userAbility,
2509
2658
  model
2510
2659
  });
@@ -2529,7 +2678,7 @@ const relations = {
2529
2678
  where.id = id;
2530
2679
  }
2531
2680
  const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
2532
- const populate = await getService$1("populate-builder")(model).populateFromQuery(permissionQuery).build();
2681
+ const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
2533
2682
  const currentEntity = await strapi.db.query(model).findOne({
2534
2683
  where,
2535
2684
  populate
@@ -2544,7 +2693,7 @@ const relations = {
2544
2693
  }
2545
2694
  entryId = currentEntity.id;
2546
2695
  }
2547
- const modelConfig = isComponent2 ? await getService$1("components").findConfiguration(sourceSchema) : await getService$1("content-types").findConfiguration(sourceSchema);
2696
+ const modelConfig = isComponent2 ? await getService$2("components").findConfiguration(sourceSchema) : await getService$2("content-types").findConfiguration(sourceSchema);
2548
2697
  const targetSchema = strapi.getModel(targetUid);
2549
2698
  const mainField = fp.flow(
2550
2699
  fp.prop(`metadatas.${targetField}.edit.mainField`),
@@ -2598,7 +2747,7 @@ const relations = {
2598
2747
  }
2599
2748
  } = await this.extractAndValidateRequestInfo(ctx, id);
2600
2749
  const { idsToOmit, idsToInclude, _q, ...query } = ctx.request.query;
2601
- const permissionChecker2 = getService$1("permission-checker").create({
2750
+ const permissionChecker2 = getService$2("permission-checker").create({
2602
2751
  userAbility: ctx.state.userAbility,
2603
2752
  model: targetUid
2604
2753
  });
@@ -2677,7 +2826,7 @@ const relations = {
2677
2826
  } = await this.extractAndValidateRequestInfo(ctx, id);
2678
2827
  const { uid: sourceUid } = sourceSchema;
2679
2828
  const { uid: targetUid } = targetSchema;
2680
- const permissionQuery = await getService$1("permission-checker").create({ userAbility, model: targetUid }).sanitizedQuery.read({ fields: fieldsToSelect });
2829
+ const permissionQuery = await getService$2("permission-checker").create({ userAbility, model: targetUid }).sanitizedQuery.read({ fields: fieldsToSelect });
2681
2830
  const dbQuery = strapi.db.query(sourceUid);
2682
2831
  const loadRelations = strapiUtils.relations.isAnyToMany(attribute) ? (...args) => dbQuery.loadPages(...args) : (...args) => dbQuery.load(...args).then((res2) => ({ results: res2 ? [res2] : [] }));
2683
2832
  const filters = {};
@@ -2718,10 +2867,10 @@ const relations = {
2718
2867
  }
2719
2868
  };
2720
2869
  const buildPopulateFromQuery = async (query, model) => {
2721
- return getService$1("populate-builder")(model).populateFromQuery(query).populateDeep(Infinity).countRelations().build();
2870
+ return getService$2("populate-builder")(model).populateFromQuery(query).populateDeep(Infinity).countRelations().build();
2722
2871
  };
2723
2872
  const findDocument = async (query, uid2, opts = {}) => {
2724
- const documentManager2 = getService$1("document-manager");
2873
+ const documentManager2 = getService$2("document-manager");
2725
2874
  const populate = await buildPopulateFromQuery(query, uid2);
2726
2875
  return documentManager2.findMany({ ...opts, populate }, uid2).then((documents) => documents[0]);
2727
2876
  };
@@ -2729,8 +2878,8 @@ const createOrUpdateDocument = async (ctx, opts) => {
2729
2878
  const { user, userAbility } = ctx.state;
2730
2879
  const { model } = ctx.params;
2731
2880
  const { body, query } = ctx.request;
2732
- const documentManager2 = getService$1("document-manager");
2733
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
2881
+ const documentManager2 = getService$2("document-manager");
2882
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
2734
2883
  if (permissionChecker2.cannot.create() && permissionChecker2.cannot.update()) {
2735
2884
  throw new strapiUtils.errors.ForbiddenError();
2736
2885
  }
@@ -2771,7 +2920,7 @@ const singleTypes = {
2771
2920
  const { userAbility } = ctx.state;
2772
2921
  const { model } = ctx.params;
2773
2922
  const { query = {} } = ctx.request;
2774
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
2923
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
2775
2924
  if (permissionChecker2.cannot.read()) {
2776
2925
  return ctx.forbidden();
2777
2926
  }
@@ -2805,7 +2954,7 @@ const singleTypes = {
2805
2954
  async createOrUpdate(ctx) {
2806
2955
  const { userAbility } = ctx.state;
2807
2956
  const { model } = ctx.params;
2808
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
2957
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
2809
2958
  const document = await createOrUpdateDocument(ctx);
2810
2959
  const sanitizedDocument = await permissionChecker2.sanitizeOutput(document);
2811
2960
  ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedDocument);
@@ -2814,8 +2963,8 @@ const singleTypes = {
2814
2963
  const { userAbility } = ctx.state;
2815
2964
  const { model } = ctx.params;
2816
2965
  const { query = {} } = ctx.request;
2817
- const documentManager2 = getService$1("document-manager");
2818
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
2966
+ const documentManager2 = getService$2("document-manager");
2967
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
2819
2968
  if (permissionChecker2.cannot.delete()) {
2820
2969
  return ctx.forbidden();
2821
2970
  }
@@ -2843,8 +2992,8 @@ const singleTypes = {
2843
2992
  const { userAbility } = ctx.state;
2844
2993
  const { model } = ctx.params;
2845
2994
  const { query = {} } = ctx.request;
2846
- const documentManager2 = getService$1("document-manager");
2847
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
2995
+ const documentManager2 = getService$2("document-manager");
2996
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
2848
2997
  if (permissionChecker2.cannot.publish()) {
2849
2998
  return ctx.forbidden();
2850
2999
  }
@@ -2872,8 +3021,8 @@ const singleTypes = {
2872
3021
  body: { discardDraft, ...body },
2873
3022
  query = {}
2874
3023
  } = ctx.request;
2875
- const documentManager2 = getService$1("document-manager");
2876
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
3024
+ const documentManager2 = getService$2("document-manager");
3025
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
2877
3026
  if (permissionChecker2.cannot.unpublish()) {
2878
3027
  return ctx.forbidden();
2879
3028
  }
@@ -2907,8 +3056,8 @@ const singleTypes = {
2907
3056
  const { userAbility } = ctx.state;
2908
3057
  const { model } = ctx.params;
2909
3058
  const { body, query = {} } = ctx.request;
2910
- const documentManager2 = getService$1("document-manager");
2911
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
3059
+ const documentManager2 = getService$2("document-manager");
3060
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
2912
3061
  if (permissionChecker2.cannot.discard()) {
2913
3062
  return ctx.forbidden();
2914
3063
  }
@@ -2931,8 +3080,8 @@ const singleTypes = {
2931
3080
  const { userAbility } = ctx.state;
2932
3081
  const { model } = ctx.params;
2933
3082
  const { query } = ctx.request;
2934
- const documentManager2 = getService$1("document-manager");
2935
- const permissionChecker2 = getService$1("permission-checker").create({ userAbility, model });
3083
+ const documentManager2 = getService$2("document-manager");
3084
+ const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
2936
3085
  const { locale } = await getDocumentLocaleAndStatus(query, model);
2937
3086
  if (permissionChecker2.cannot.read()) {
2938
3087
  return ctx.forbidden();
@@ -2956,7 +3105,7 @@ const uid$1 = {
2956
3105
  const { query = {} } = ctx.request;
2957
3106
  const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
2958
3107
  await validateUIDField(contentTypeUID, field);
2959
- const uidService = getService$1("uid");
3108
+ const uidService = getService$2("uid");
2960
3109
  ctx.body = {
2961
3110
  data: await uidService.generateUIDField({ contentTypeUID, field, data, locale })
2962
3111
  };
@@ -2968,7 +3117,7 @@ const uid$1 = {
2968
3117
  const { query = {} } = ctx.request;
2969
3118
  const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
2970
3119
  await validateUIDField(contentTypeUID, field);
2971
- const uidService = getService$1("uid");
3120
+ const uidService = getService$2("uid");
2972
3121
  const isAvailable = await uidService.checkUIDAvailability({
2973
3122
  contentTypeUID,
2974
3123
  field,
@@ -3119,18 +3268,15 @@ async function syncMetadatas(configuration, schema) {
3119
3268
  ___default.default.set(updatedMeta, ["list", "searchable"], false);
3120
3269
  ___default.default.set(acc, [key], updatedMeta);
3121
3270
  }
3122
- if (!___default.default.has(edit, "mainField"))
3123
- return acc;
3271
+ if (!___default.default.has(edit, "mainField")) return acc;
3124
3272
  if (!isRelation$1(attr)) {
3125
3273
  ___default.default.set(updatedMeta, "edit", ___default.default.omit(edit, ["mainField"]));
3126
3274
  ___default.default.set(acc, [key], updatedMeta);
3127
3275
  return acc;
3128
3276
  }
3129
- if (edit.mainField === "id")
3130
- return acc;
3277
+ if (edit.mainField === "id") return acc;
3131
3278
  const targetSchema = getTargetSchema(attr.targetModel);
3132
- if (!targetSchema)
3133
- return acc;
3279
+ if (!targetSchema) return acc;
3134
3280
  if (!isSortable(targetSchema, edit.mainField) && !isListable(targetSchema, edit.mainField)) {
3135
3281
  ___default.default.set(updatedMeta, ["edit", "mainField"], getDefaultMainField(targetSchema));
3136
3282
  ___default.default.set(acc, [key], updatedMeta);
@@ -3141,12 +3287,12 @@ async function syncMetadatas(configuration, schema) {
3141
3287
  return ___default.default.assign(metasWithDefaults, updatedMetas);
3142
3288
  }
3143
3289
  const getTargetSchema = (targetModel) => {
3144
- return getService$1("content-types").findContentType(targetModel);
3290
+ return getService$2("content-types").findContentType(targetModel);
3145
3291
  };
3146
3292
  const DEFAULT_LIST_LENGTH = 4;
3147
3293
  const MAX_ROW_SIZE = 12;
3148
3294
  const isAllowedFieldSize = (type, size) => {
3149
- const { getFieldSize } = getService$1("field-sizes");
3295
+ const { getFieldSize } = getService$2("field-sizes");
3150
3296
  const fieldSize = getFieldSize(type);
3151
3297
  if (!fieldSize.isResizable && size !== fieldSize.default) {
3152
3298
  return false;
@@ -3154,7 +3300,7 @@ const isAllowedFieldSize = (type, size) => {
3154
3300
  return size <= MAX_ROW_SIZE;
3155
3301
  };
3156
3302
  const getDefaultFieldSize = (attribute) => {
3157
- const { hasFieldSize, getFieldSize } = getService$1("field-sizes");
3303
+ const { hasFieldSize, getFieldSize } = getService$2("field-sizes");
3158
3304
  return getFieldSize(hasFieldSize(attribute.customField) ? attribute.customField : attribute.type).default;
3159
3305
  };
3160
3306
  async function createDefaultLayouts(schema) {
@@ -3175,8 +3321,7 @@ function createDefaultEditLayout(schema) {
3175
3321
  return appendToEditLayout([], keys2, schema);
3176
3322
  }
3177
3323
  function syncLayouts(configuration, schema) {
3178
- if (___default.default.isEmpty(configuration.layouts))
3179
- return createDefaultLayouts(schema);
3324
+ if (___default.default.isEmpty(configuration.layouts)) return createDefaultLayouts(schema);
3180
3325
  const { list = [], editRelations = [], edit = [] } = configuration.layouts || {};
3181
3326
  let cleanList = list.filter((attr) => isListable(schema, attr));
3182
3327
  const cleanEditRelations = editRelations.filter(
@@ -3187,9 +3332,8 @@ function syncLayouts(configuration, schema) {
3187
3332
  for (const row of edit) {
3188
3333
  const newRow = [];
3189
3334
  for (const el of row) {
3190
- if (!hasEditableAttribute(schema, el.name))
3191
- continue;
3192
- const { hasFieldSize } = getService$1("field-sizes");
3335
+ if (!hasEditableAttribute(schema, el.name)) continue;
3336
+ const { hasFieldSize } = getService$2("field-sizes");
3193
3337
  const fieldType = hasFieldSize(schema.attributes[el.name].customField) ? schema.attributes[el.name].customField : schema.attributes[el.name].type;
3194
3338
  if (!isAllowedFieldSize(fieldType, el.size)) {
3195
3339
  elementsToReAppend.push(el.name);
@@ -3219,8 +3363,7 @@ function syncLayouts(configuration, schema) {
3219
3363
  };
3220
3364
  }
3221
3365
  const appendToEditLayout = (layout = [], keysToAppend, schema) => {
3222
- if (keysToAppend.length === 0)
3223
- return layout;
3366
+ if (keysToAppend.length === 0) return layout;
3224
3367
  let currentRowIndex = Math.max(layout.length - 1, 0);
3225
3368
  if (!layout[currentRowIndex]) {
3226
3369
  layout[currentRowIndex] = [];
@@ -3329,17 +3472,17 @@ const configurationService$1 = createConfigurationService({
3329
3472
  isComponent: true,
3330
3473
  prefix: STORE_KEY_PREFIX,
3331
3474
  getModels() {
3332
- const { toContentManagerModel } = getService$1("data-mapper");
3475
+ const { toContentManagerModel } = getService$2("data-mapper");
3333
3476
  return fp.mapValues(toContentManagerModel, strapi.components);
3334
3477
  }
3335
3478
  });
3336
3479
  const components = ({ strapi: strapi2 }) => ({
3337
3480
  findAllComponents() {
3338
- const { toContentManagerModel } = getService$1("data-mapper");
3481
+ const { toContentManagerModel } = getService$2("data-mapper");
3339
3482
  return Object.values(strapi2.components).map(toContentManagerModel);
3340
3483
  },
3341
3484
  findComponent(uid2) {
3342
- const { toContentManagerModel } = getService$1("data-mapper");
3485
+ const { toContentManagerModel } = getService$2("data-mapper");
3343
3486
  const component = strapi2.components[uid2];
3344
3487
  return fp.isNil(component) ? component : toContentManagerModel(component);
3345
3488
  },
@@ -3390,17 +3533,17 @@ const configurationService = createConfigurationService({
3390
3533
  storeUtils,
3391
3534
  prefix: "content_types",
3392
3535
  getModels() {
3393
- const { toContentManagerModel } = getService$1("data-mapper");
3536
+ const { toContentManagerModel } = getService$2("data-mapper");
3394
3537
  return fp.mapValues(toContentManagerModel, strapi.contentTypes);
3395
3538
  }
3396
3539
  });
3397
3540
  const service = ({ strapi: strapi2 }) => ({
3398
3541
  findAllContentTypes() {
3399
- const { toContentManagerModel } = getService$1("data-mapper");
3542
+ const { toContentManagerModel } = getService$2("data-mapper");
3400
3543
  return Object.values(strapi2.contentTypes).map(toContentManagerModel);
3401
3544
  },
3402
3545
  findContentType(uid2) {
3403
- const { toContentManagerModel } = getService$1("data-mapper");
3546
+ const { toContentManagerModel } = getService$2("data-mapper");
3404
3547
  const contentType = strapi2.contentTypes[uid2];
3405
3548
  return fp.isNil(contentType) ? contentType : toContentManagerModel(contentType);
3406
3549
  },
@@ -3429,7 +3572,7 @@ const service = ({ strapi: strapi2 }) => ({
3429
3572
  return this.findConfiguration(contentType);
3430
3573
  },
3431
3574
  findComponentsConfigurations(contentType) {
3432
- return getService$1("components").findComponentsConfigurations(contentType);
3575
+ return getService$2("components").findComponentsConfigurations(contentType);
3433
3576
  },
3434
3577
  syncConfigurations() {
3435
3578
  return configurationService.syncConfigurations();
@@ -3701,7 +3844,7 @@ const permission = ({ strapi: strapi2 }) => ({
3701
3844
  return userAbility.can(action);
3702
3845
  },
3703
3846
  async registerPermissions() {
3704
- const displayedContentTypes = getService$1("content-types").findDisplayedContentTypes();
3847
+ const displayedContentTypes = getService$2("content-types").findDisplayedContentTypes();
3705
3848
  const contentTypesUids = displayedContentTypes.map(fp.prop("uid"));
3706
3849
  const actions = [
3707
3850
  {
@@ -3786,6 +3929,12 @@ function getPopulateForRelation(attribute, model, attributeName, { countMany, co
3786
3929
  if (initialPopulate) {
3787
3930
  return initialPopulate;
3788
3931
  }
3932
+ if (attributeName === "localizations") {
3933
+ const validationPopulate = getPopulateForValidation(model.uid);
3934
+ return {
3935
+ populate: validationPopulate.populate
3936
+ };
3937
+ }
3789
3938
  if (!isVisibleAttribute$1(model, attributeName)) {
3790
3939
  return true;
3791
3940
  }
@@ -3845,6 +3994,9 @@ const getDeepPopulate = (uid2, {
3845
3994
  return {};
3846
3995
  }
3847
3996
  const model = strapi.getModel(uid2);
3997
+ if (!model) {
3998
+ return {};
3999
+ }
3848
4000
  return Object.keys(model.attributes).reduce(
3849
4001
  (populateAcc, attributeName) => fp.merge(
3850
4002
  populateAcc,
@@ -3864,40 +4016,46 @@ const getDeepPopulate = (uid2, {
3864
4016
  {}
3865
4017
  );
3866
4018
  };
3867
- const getValidatableFieldsPopulate = (uid2, {
3868
- initialPopulate = {},
3869
- countMany = false,
3870
- countOne = false,
3871
- maxLevel = Infinity
3872
- } = {}, level = 1) => {
3873
- if (level > maxLevel) {
4019
+ const getPopulateForValidation = (uid2) => {
4020
+ const model = strapi.getModel(uid2);
4021
+ if (!model) {
3874
4022
  return {};
3875
4023
  }
3876
- const model = strapi.getModel(uid2);
3877
4024
  return Object.entries(model.attributes).reduce((populateAcc, [attributeName, attribute]) => {
3878
- if (!getDoesAttributeRequireValidation(attribute)) {
4025
+ if (isScalarAttribute(attribute)) {
4026
+ if (getDoesAttributeRequireValidation(attribute)) {
4027
+ populateAcc.fields = populateAcc.fields || [];
4028
+ populateAcc.fields.push(attributeName);
4029
+ }
3879
4030
  return populateAcc;
3880
4031
  }
3881
- if (isScalarAttribute(attribute)) {
3882
- return fp.merge(populateAcc, {
3883
- [attributeName]: true
3884
- });
4032
+ if (isComponent(attribute)) {
4033
+ const component = attribute.component;
4034
+ const componentResult = getPopulateForValidation(component);
4035
+ if (Object.keys(componentResult).length > 0) {
4036
+ populateAcc.populate = populateAcc.populate || {};
4037
+ populateAcc.populate[attributeName] = componentResult;
4038
+ }
4039
+ return populateAcc;
3885
4040
  }
3886
- return fp.merge(
3887
- populateAcc,
3888
- getPopulateFor(
3889
- attributeName,
3890
- model,
3891
- {
3892
- // @ts-expect-error - improve types
3893
- initialPopulate: initialPopulate?.[attributeName],
3894
- countMany,
3895
- countOne,
3896
- maxLevel
4041
+ if (isDynamicZone(attribute)) {
4042
+ const components2 = attribute.components;
4043
+ const componentsResult = (components2 || []).reduce(
4044
+ (acc, componentUID) => {
4045
+ const componentResult = getPopulateForValidation(componentUID);
4046
+ if (Object.keys(componentResult).length > 0) {
4047
+ acc[componentUID] = componentResult;
4048
+ }
4049
+ return acc;
3897
4050
  },
3898
- level
3899
- )
3900
- );
4051
+ {}
4052
+ );
4053
+ if (Object.keys(componentsResult).length > 0) {
4054
+ populateAcc.populate = populateAcc.populate || {};
4055
+ populateAcc.populate[attributeName] = { on: componentsResult };
4056
+ }
4057
+ }
4058
+ return populateAcc;
3901
4059
  }, {});
3902
4060
  };
3903
4061
  const getDeepPopulateDraftCount = (uid2) => {
@@ -3977,7 +4135,7 @@ const getQueryPopulate = async (uid2, query) => {
3977
4135
  return populateQuery;
3978
4136
  };
3979
4137
  const buildDeepPopulate = (uid2) => {
3980
- return getService$1("populate-builder")(uid2).populateDeep(Infinity).countRelations().build();
4138
+ return getService$2("populate-builder")(uid2).populateDeep(Infinity).countRelations().build();
3981
4139
  };
3982
4140
  const populateBuilder = (uid2) => {
3983
4141
  let getInitialPopulate = async () => {
@@ -4139,7 +4297,6 @@ const AVAILABLE_LOCALES_FIELDS = [
4139
4297
  "locale",
4140
4298
  "updatedAt",
4141
4299
  "createdAt",
4142
- "status",
4143
4300
  "publishedAt",
4144
4301
  "documentId"
4145
4302
  ];
@@ -4160,36 +4317,20 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4160
4317
  /**
4161
4318
  * Returns available locales of a document for the current status
4162
4319
  */
4163
- async getAvailableLocales(uid2, version, allVersions, validatableFields = []) {
4320
+ async getAvailableLocales(uid2, version, allVersions) {
4164
4321
  const versionsByLocale = fp.groupBy("locale", allVersions);
4165
4322
  if (version.locale) {
4166
4323
  delete versionsByLocale[version.locale];
4167
4324
  }
4168
4325
  const model = strapi2.getModel(uid2);
4169
- const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
4170
- const traversalFunction = async (localeVersion) => strapiUtils.traverseEntity(
4171
- ({ key }, { remove }) => {
4172
- if (keysToKeep.includes(key)) {
4173
- return;
4174
- }
4175
- remove(key);
4176
- },
4177
- { schema: model, getModel: strapi2.getModel.bind(strapi2) },
4178
- // @ts-expect-error fix types DocumentVersion incompatible with Data
4179
- localeVersion
4180
- );
4181
4326
  const mappingResult = await strapiUtils.async.map(
4182
4327
  Object.values(versionsByLocale),
4183
4328
  async (localeVersions) => {
4184
- const mappedLocaleVersions = await strapiUtils.async.map(
4185
- localeVersions,
4186
- traversalFunction
4187
- );
4188
4329
  if (!strapiUtils.contentTypes.hasDraftAndPublish(model)) {
4189
- return mappedLocaleVersions[0];
4330
+ return localeVersions[0];
4190
4331
  }
4191
- const draftVersion = mappedLocaleVersions.find((v) => v.publishedAt === null);
4192
- const otherVersions = mappedLocaleVersions.filter((v) => v.id !== draftVersion?.id);
4332
+ const draftVersion = localeVersions.find((v) => v.publishedAt === null);
4333
+ const otherVersions = localeVersions.filter((v) => v.id !== draftVersion?.id);
4193
4334
  if (!draftVersion) {
4194
4335
  return;
4195
4336
  }
@@ -4211,8 +4352,7 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4211
4352
  const matchStatus = status === "published" ? v.publishedAt !== null : v.publishedAt === null;
4212
4353
  return matchLocale && matchStatus;
4213
4354
  });
4214
- if (!availableStatus)
4215
- return availableStatus;
4355
+ if (!availableStatus) return availableStatus;
4216
4356
  return fp.pick(AVAILABLE_STATUS_FIELDS, availableStatus);
4217
4357
  },
4218
4358
  /**
@@ -4222,18 +4362,17 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4222
4362
  * @returns
4223
4363
  */
4224
4364
  async getManyAvailableStatus(uid2, documents) {
4225
- if (!documents.length)
4226
- return [];
4365
+ if (!documents.length) return [];
4227
4366
  const status = documents[0].publishedAt !== null ? "published" : "draft";
4228
- const locale = documents[0]?.locale;
4229
- const otherStatus = status === "published" ? "draft" : "published";
4230
- return strapi2.documents(uid2).findMany({
4231
- filters: {
4232
- documentId: { $in: documents.map((d) => d.documentId).filter(Boolean) }
4367
+ const locales = documents.map((d) => d.locale).filter(Boolean);
4368
+ return strapi2.query(uid2).findMany({
4369
+ where: {
4370
+ documentId: { $in: documents.map((d) => d.documentId).filter(Boolean) },
4371
+ // NOTE: find the "opposite" status
4372
+ publishedAt: { $null: status === "published" },
4373
+ locale: { $in: locales }
4233
4374
  },
4234
- status: otherStatus,
4235
- locale,
4236
- fields: ["documentId", "locale", "updatedAt", "createdAt", "publishedAt"]
4375
+ select: ["id", "documentId", "locale", "updatedAt", "createdAt", "publishedAt"]
4237
4376
  });
4238
4377
  },
4239
4378
  getStatus(version, otherDocumentStatuses) {
@@ -4250,10 +4389,8 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4250
4389
  } else if (otherVersion) {
4251
4390
  draftVersion = otherVersion;
4252
4391
  }
4253
- if (!draftVersion)
4254
- return CONTENT_MANAGER_STATUS.PUBLISHED;
4255
- if (!publishedVersion)
4256
- return CONTENT_MANAGER_STATUS.DRAFT;
4392
+ if (!draftVersion) return CONTENT_MANAGER_STATUS.PUBLISHED;
4393
+ if (!publishedVersion) return CONTENT_MANAGER_STATUS.DRAFT;
4257
4394
  const isDraftModified = getIsVersionLatestModification(draftVersion, publishedVersion);
4258
4395
  return isDraftModified ? CONTENT_MANAGER_STATUS.MODIFIED : CONTENT_MANAGER_STATUS.PUBLISHED;
4259
4396
  },
@@ -4261,11 +4398,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4261
4398
  // We could refactor this so the locales are only loaded when they're
4262
4399
  // needed. e.g. in the bulk locale action modal.
4263
4400
  async getMetadata(uid2, version, { availableLocales = true, availableStatus = true } = {}) {
4264
- const populate = getValidatableFieldsPopulate(uid2);
4265
- const versions = await strapi2.db.query(uid2).findMany({
4266
- where: { documentId: version.documentId },
4401
+ const { populate = {}, fields = [] } = getPopulateForValidation(uid2);
4402
+ const params = {
4267
4403
  populate: {
4268
- // Populate only fields that require validation for bulk locale actions
4269
4404
  ...populate,
4270
4405
  // NOTE: creator fields are selected in this way to avoid exposing sensitive data
4271
4406
  createdBy: {
@@ -4274,9 +4409,15 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4274
4409
  updatedBy: {
4275
4410
  select: ["id", "firstname", "lastname", "email"]
4276
4411
  }
4412
+ },
4413
+ fields: fp.uniq([...AVAILABLE_LOCALES_FIELDS, ...fields]),
4414
+ filters: {
4415
+ documentId: version.documentId
4277
4416
  }
4278
- });
4279
- const availableLocalesResult = availableLocales ? await this.getAvailableLocales(uid2, version, versions, Object.keys(populate)) : [];
4417
+ };
4418
+ const dbParams = strapi2.get("query-params").transform(uid2, params);
4419
+ const versions = await strapi2.db.query(uid2).findMany(dbParams);
4420
+ const availableLocalesResult = availableLocales ? await this.getAvailableLocales(uid2, version, versions) : [];
4280
4421
  const availableStatusResult = availableStatus ? this.getAvailableStatus(version, versions) : null;
4281
4422
  return {
4282
4423
  availableLocales: availableLocalesResult,
@@ -4303,6 +4444,16 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
4303
4444
  opts.availableStatus = false;
4304
4445
  }
4305
4446
  const meta = await this.getMetadata(uid2, document, opts);
4447
+ if (document.localizations) {
4448
+ const otherStatus = await this.getManyAvailableStatus(uid2, document.localizations);
4449
+ document.localizations = document.localizations.map((d) => {
4450
+ const status = otherStatus.find((s) => s.documentId === d.documentId);
4451
+ return {
4452
+ ...d,
4453
+ status: this.getStatus(d, status ? [status] : [])
4454
+ };
4455
+ });
4456
+ }
4306
4457
  return {
4307
4458
  data: {
4308
4459
  ...document,