@strapi/content-manager 0.0.0-experimental.bb39175992a5cd205a7e3f2e13a96aa31eba2cff → 0.0.0-experimental.bec5a58066c034a7ebf5b14df62560e68a456fa3
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.
- package/dist/_chunks/{ComponentConfigurationPage-jmWwucg_.mjs → ComponentConfigurationPage-BaJMOQyq.mjs} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-jmWwucg_.mjs.map → ComponentConfigurationPage-BaJMOQyq.mjs.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-CQDCxI8x.js → ComponentConfigurationPage-N-CTtgQa.js} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-CQDCxI8x.js.map → ComponentConfigurationPage-N-CTtgQa.js.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-Ce4bIm4n.js → EditConfigurationPage-BHkjAbxH.js} +4 -4
- package/dist/_chunks/{EditConfigurationPage-Ce4bIm4n.js.map → EditConfigurationPage-BHkjAbxH.js.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-W07CEdm2.mjs → EditConfigurationPage-CKK-5LfX.mjs} +4 -4
- package/dist/_chunks/{EditConfigurationPage-W07CEdm2.mjs.map → EditConfigurationPage-CKK-5LfX.mjs.map} +1 -1
- package/dist/_chunks/{EditViewPage-al5OO1NR.mjs → EditViewPage-B11aeMcf.mjs} +38 -8
- package/dist/_chunks/EditViewPage-B11aeMcf.mjs.map +1 -0
- package/dist/_chunks/{EditViewPage-CqHMM0P0.js → EditViewPage-QPUftxUd.js} +37 -7
- package/dist/_chunks/EditViewPage-QPUftxUd.js.map +1 -0
- package/dist/_chunks/{Field-EeG6NQ7x.mjs → Field-Bj_RgtGo.mjs} +44 -25
- package/dist/_chunks/Field-Bj_RgtGo.mjs.map +1 -0
- package/dist/_chunks/{Field-DSOUlTCm.js → Field-DUK83cfh.js} +43 -24
- package/dist/_chunks/Field-DUK83cfh.js.map +1 -0
- package/dist/_chunks/{Form-DAEfHKzm.js → Form-DHmBRlHd.js} +2 -2
- package/dist/_chunks/{Form-DAEfHKzm.js.map → Form-DHmBRlHd.js.map} +1 -1
- package/dist/_chunks/{Form-BAo9ANb_.mjs → Form-DLMSoXV7.mjs} +2 -2
- package/dist/_chunks/{Form-BAo9ANb_.mjs.map → Form-DLMSoXV7.mjs.map} +1 -1
- package/dist/_chunks/{History-BpLIu67W.mjs → History-CfCSNlG9.mjs} +23 -93
- package/dist/_chunks/History-CfCSNlG9.mjs.map +1 -0
- package/dist/_chunks/{History-CTFvy6XH.js → History-Di3zm4HT.js} +22 -92
- package/dist/_chunks/History-Di3zm4HT.js.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-DOqj5f8Y.mjs → ListConfigurationPage-0mtv_iqk.mjs} +6 -5
- package/dist/_chunks/ListConfigurationPage-0mtv_iqk.mjs.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-CDzlMBz_.js → ListConfigurationPage-Cq361KIt.js} +5 -4
- package/dist/_chunks/ListConfigurationPage-Cq361KIt.js.map +1 -0
- package/dist/_chunks/{ListViewPage-BbXYNI0v.mjs → ListViewPage-BxLVROX8.mjs} +62 -39
- package/dist/_chunks/ListViewPage-BxLVROX8.mjs.map +1 -0
- package/dist/_chunks/{ListViewPage-D0fpPYKp.js → ListViewPage-DFDcG8gM.js} +62 -39
- package/dist/_chunks/ListViewPage-DFDcG8gM.js.map +1 -0
- package/dist/_chunks/{NoContentTypePage-w2Q0VVOT.mjs → NoContentTypePage-BRfDd67_.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-w2Q0VVOT.mjs.map → NoContentTypePage-BRfDd67_.mjs.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-DTzkSAV5.js → NoContentTypePage-BSyvnDZZ.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-DTzkSAV5.js.map → NoContentTypePage-BSyvnDZZ.js.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-Km0Vk5Wp.mjs → NoPermissionsPage-CV9V8KWa.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-Km0Vk5Wp.mjs.map → NoPermissionsPage-CV9V8KWa.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-BoI2rU68.js → NoPermissionsPage-DyLphsn_.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-BoI2rU68.js.map → NoPermissionsPage-DyLphsn_.js.map} +1 -1
- package/dist/_chunks/Preview-C_B1nx3g.mjs +272 -0
- package/dist/_chunks/Preview-C_B1nx3g.mjs.map +1 -0
- package/dist/_chunks/Preview-D_3aO6Ly.js +291 -0
- package/dist/_chunks/Preview-D_3aO6Ly.js.map +1 -0
- package/dist/_chunks/{Relations-C_bpmSuQ.mjs → Relations-C6pwmDXh.mjs} +25 -11
- package/dist/_chunks/Relations-C6pwmDXh.mjs.map +1 -0
- package/dist/_chunks/{Relations-D6Nz5ksc.js → Relations-Cne2AlrL.js} +24 -10
- package/dist/_chunks/Relations-Cne2AlrL.js.map +1 -0
- package/dist/_chunks/{en-DKV44jRb.mjs → en-DhFUjrNW.mjs} +15 -4
- package/dist/_chunks/{en-DKV44jRb.mjs.map → en-DhFUjrNW.mjs.map} +1 -1
- package/dist/_chunks/{en-Bm0D0IWz.js → en-Ic0kXjxB.js} +15 -4
- package/dist/_chunks/{en-Bm0D0IWz.js.map → en-Ic0kXjxB.js.map} +1 -1
- package/dist/_chunks/{es-EUonQTon.js → es-9K52xZIr.js} +2 -2
- package/dist/_chunks/{ja-CcFe8diO.js.map → es-9K52xZIr.js.map} +1 -1
- package/dist/_chunks/{es-CeXiYflN.mjs → es-D34tqjMw.mjs} +2 -2
- package/dist/_chunks/{es-CeXiYflN.mjs.map → es-D34tqjMw.mjs.map} +1 -1
- package/dist/_chunks/{fr-CD9VFbPM.mjs → fr--pg5jUbt.mjs} +13 -3
- package/dist/_chunks/{fr-CD9VFbPM.mjs.map → fr--pg5jUbt.mjs.map} +1 -1
- package/dist/_chunks/{fr-B7kGGg3E.js → fr-B2Kyv8Z9.js} +13 -3
- package/dist/_chunks/{fr-B7kGGg3E.js.map → fr-B2Kyv8Z9.js.map} +1 -1
- package/dist/_chunks/{index-DcQ6xogO.mjs → index-BpxR3En4.mjs} +173 -90
- package/dist/_chunks/index-BpxR3En4.mjs.map +1 -0
- package/dist/_chunks/{index-BsMu2oVP.js → index-T-aWjbj2.js} +169 -86
- package/dist/_chunks/index-T-aWjbj2.js.map +1 -0
- package/dist/_chunks/{ja-CcFe8diO.js → ja-7sfIbjxE.js} +2 -2
- package/dist/_chunks/{es-EUonQTon.js.map → ja-7sfIbjxE.js.map} +1 -1
- package/dist/_chunks/{ja-CtsUxOvk.mjs → ja-BHqhDq4V.mjs} +2 -2
- package/dist/_chunks/{ja-CtsUxOvk.mjs.map → ja-BHqhDq4V.mjs.map} +1 -1
- package/dist/_chunks/{layout-B4aCAdTt.js → layout-BEuNwv-F.js} +3 -3
- package/dist/_chunks/{layout-B4aCAdTt.js.map → layout-BEuNwv-F.js.map} +1 -1
- package/dist/_chunks/{layout-BavJ6v4B.mjs → layout-DhMZ_lDx.mjs} +3 -3
- package/dist/_chunks/{layout-BavJ6v4B.mjs.map → layout-DhMZ_lDx.mjs.map} +1 -1
- package/dist/_chunks/{objects-gigeqt7s.js → objects-BcXOv6_9.js} +2 -4
- package/dist/_chunks/{objects-gigeqt7s.js.map → objects-BcXOv6_9.js.map} +1 -1
- package/dist/_chunks/{objects-mKMAmfec.mjs → objects-D6yBsdmx.mjs} +2 -4
- package/dist/_chunks/{objects-mKMAmfec.mjs.map → objects-D6yBsdmx.mjs.map} +1 -1
- package/dist/_chunks/{relations-DMG453Od.mjs → relations-BdnxoX6f.mjs} +6 -7
- package/dist/_chunks/relations-BdnxoX6f.mjs.map +1 -0
- package/dist/_chunks/{relations-Lrm9nz_m.js → relations-kLcuobLk.js} +6 -7
- package/dist/_chunks/relations-kLcuobLk.js.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +4 -4
- package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
- package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +2 -2
- package/dist/admin/src/preview/components/PreviewContent.d.ts +2 -0
- package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
- package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -0
- package/dist/admin/src/preview/constants.d.ts +1 -0
- package/dist/admin/src/preview/index.d.ts +4 -0
- package/dist/admin/src/preview/pages/Preview.d.ts +11 -0
- package/dist/admin/src/preview/routes.d.ts +3 -0
- package/dist/admin/src/preview/services/preview.d.ts +3 -0
- package/dist/admin/src/router.d.ts +1 -1
- package/dist/admin/src/services/documents.d.ts +0 -3
- package/dist/server/index.js +392 -150
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +393 -151
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/metadata.d.ts +15 -1
- package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
- package/dist/server/src/history/services/utils.d.ts +2 -3
- package/dist/server/src/history/services/utils.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +4 -4
- package/dist/server/src/preview/constants.d.ts +2 -0
- package/dist/server/src/preview/constants.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/index.d.ts +2 -0
- package/dist/server/src/preview/controllers/index.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/preview.d.ts +13 -0
- package/dist/server/src/preview/controllers/preview.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
- package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
- package/dist/server/src/preview/index.d.ts +4 -0
- package/dist/server/src/preview/index.d.ts.map +1 -0
- package/dist/server/src/preview/routes/index.d.ts +8 -0
- package/dist/server/src/preview/routes/index.d.ts.map +1 -0
- package/dist/server/src/preview/routes/preview.d.ts +4 -0
- package/dist/server/src/preview/routes/preview.d.ts.map +1 -0
- package/dist/server/src/preview/services/index.d.ts +16 -0
- package/dist/server/src/preview/services/index.d.ts.map +1 -0
- package/dist/server/src/preview/services/preview-config.d.ts +32 -0
- package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
- package/dist/server/src/preview/services/preview.d.ts +12 -0
- package/dist/server/src/preview/services/preview.d.ts.map +1 -0
- package/dist/server/src/preview/utils.d.ts +19 -0
- package/dist/server/src/preview/utils.d.ts.map +1 -0
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/services/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts +8 -8
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +4 -4
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
- package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/shared/contracts/index.d.ts +1 -0
- package/dist/shared/contracts/index.d.ts.map +1 -1
- package/dist/shared/contracts/preview.d.ts +27 -0
- package/dist/shared/contracts/preview.d.ts.map +1 -0
- package/dist/shared/index.js +4 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/index.mjs +4 -0
- package/dist/shared/index.mjs.map +1 -1
- package/package.json +10 -10
- package/dist/_chunks/EditViewPage-CqHMM0P0.js.map +0 -1
- package/dist/_chunks/EditViewPage-al5OO1NR.mjs.map +0 -1
- package/dist/_chunks/Field-DSOUlTCm.js.map +0 -1
- package/dist/_chunks/Field-EeG6NQ7x.mjs.map +0 -1
- package/dist/_chunks/History-BpLIu67W.mjs.map +0 -1
- package/dist/_chunks/History-CTFvy6XH.js.map +0 -1
- package/dist/_chunks/ListConfigurationPage-CDzlMBz_.js.map +0 -1
- package/dist/_chunks/ListConfigurationPage-DOqj5f8Y.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-BbXYNI0v.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-D0fpPYKp.js.map +0 -1
- package/dist/_chunks/Relations-C_bpmSuQ.mjs.map +0 -1
- package/dist/_chunks/Relations-D6Nz5ksc.js.map +0 -1
- package/dist/_chunks/index-BsMu2oVP.js.map +0 -1
- package/dist/_chunks/index-DcQ6xogO.mjs.map +0 -1
- package/dist/_chunks/relations-DMG453Od.mjs.map +0 -1
- package/dist/_chunks/relations-Lrm9nz_m.js.map +0 -1
package/dist/server/index.mjs
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import strapiUtils, { validateYupSchema, errors, async, contentTypes as contentTypes$1, yup as yup$1, validateYupSchemaSync, policy, traverse, setCreatorFields, isOperatorOfType, relations as relations$1, traverseEntity, pagination } from "@strapi/utils";
|
2
|
-
import { pick, omit, difference, castArray, intersection, pipe, propOr, isEqual, isEmpty, set, isNil as isNil$1, has, prop, assoc, mapValues, flow, uniq, uniqBy, concat, getOr, propEq, merge, groupBy } from "lodash/fp";
|
2
|
+
import { pick, omit, difference, castArray, mergeWith, intersection, pipe, propOr, isEqual, isEmpty, set, isNil as isNil$1, has, prop, assoc, mapValues, flow, uniq, uniqBy, concat, getOr, propEq, merge, groupBy } from "lodash/fp";
|
3
3
|
import "@strapi/types";
|
4
4
|
import * as yup from "yup";
|
5
5
|
import { scheduleJob } from "node-schedule";
|
@@ -7,10 +7,10 @@ import isNil from "lodash/isNil";
|
|
7
7
|
import _, { intersection as intersection$1, difference as difference$1 } from "lodash";
|
8
8
|
import qs from "qs";
|
9
9
|
import slugify from "@sindresorhus/slugify";
|
10
|
-
const getService$
|
10
|
+
const getService$2 = (name) => {
|
11
11
|
return strapi.plugin("content-manager").service(name);
|
12
12
|
};
|
13
|
-
function getService(strapi2, name) {
|
13
|
+
function getService$1(strapi2, name) {
|
14
14
|
return strapi2.service(`plugin::content-manager.${name}`);
|
15
15
|
}
|
16
16
|
const historyRestoreVersionSchema = yup.object().shape({
|
@@ -46,7 +46,7 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
46
46
|
if (!isSingleType && (!contentTypeUid || !ctx.query.documentId)) {
|
47
47
|
throw new errors.ForbiddenError("contentType and documentId are required");
|
48
48
|
}
|
49
|
-
const permissionChecker2 = getService$
|
49
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
50
50
|
userAbility: ctx.state.userAbility,
|
51
51
|
model: ctx.query.contentType
|
52
52
|
});
|
@@ -54,7 +54,7 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
54
54
|
return ctx.forbidden();
|
55
55
|
}
|
56
56
|
const query = await permissionChecker2.sanitizeQuery(ctx.query);
|
57
|
-
const { results, pagination: pagination2 } = await getService(strapi2, "history").findVersionsPage({
|
57
|
+
const { results, pagination: pagination2 } = await getService$1(strapi2, "history").findVersionsPage({
|
58
58
|
query: {
|
59
59
|
...query,
|
60
60
|
...getValidPagination({ page: query.page, pageSize: query.pageSize })
|
@@ -79,14 +79,14 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
79
79
|
async restoreVersion(ctx) {
|
80
80
|
const request = ctx.request;
|
81
81
|
await validateRestoreVersion(request.body, "contentType is required");
|
82
|
-
const permissionChecker2 = getService$
|
82
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
83
83
|
userAbility: ctx.state.userAbility,
|
84
84
|
model: request.body.contentType
|
85
85
|
});
|
86
86
|
if (permissionChecker2.cannot.update()) {
|
87
87
|
throw new errors.ForbiddenError();
|
88
88
|
}
|
89
|
-
const restoredDocument = await getService(strapi2, "history").restoreVersion(
|
89
|
+
const restoredDocument = await getService$1(strapi2, "history").restoreVersion(
|
90
90
|
request.params.versionId
|
91
91
|
);
|
92
92
|
return {
|
@@ -95,7 +95,7 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
95
95
|
}
|
96
96
|
};
|
97
97
|
};
|
98
|
-
const controllers$
|
98
|
+
const controllers$2 = {
|
99
99
|
"history-version": createHistoryVersionController
|
100
100
|
/**
|
101
101
|
* Casting is needed because the types aren't aware that Strapi supports
|
@@ -202,6 +202,17 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
202
202
|
const meta = await documentMetadataService.getMetadata(contentTypeUid, document);
|
203
203
|
return documentMetadataService.getStatus(document, meta.availableStatus);
|
204
204
|
};
|
205
|
+
const getComponentFields = (componentUID) => {
|
206
|
+
return Object.entries(strapi2.getModel(componentUID).attributes).reduce(
|
207
|
+
(fieldsAcc, [key, attribute]) => {
|
208
|
+
if (!["relation", "media", "component", "dynamiczone"].includes(attribute.type)) {
|
209
|
+
fieldsAcc.push(key);
|
210
|
+
}
|
211
|
+
return fieldsAcc;
|
212
|
+
},
|
213
|
+
[]
|
214
|
+
);
|
215
|
+
};
|
205
216
|
const getDeepPopulate2 = (uid2, useDatabaseSyntax = false) => {
|
206
217
|
const model = strapi2.getModel(uid2);
|
207
218
|
const attributes = Object.entries(model.attributes);
|
@@ -225,13 +236,19 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
225
236
|
}
|
226
237
|
case "component": {
|
227
238
|
const populate = getDeepPopulate2(attribute.component);
|
228
|
-
acc[attributeName] = {
|
239
|
+
acc[attributeName] = {
|
240
|
+
populate,
|
241
|
+
[fieldSelector]: getComponentFields(attribute.component)
|
242
|
+
};
|
229
243
|
break;
|
230
244
|
}
|
231
245
|
case "dynamiczone": {
|
232
246
|
const populatedComponents = (attribute.components || []).reduce(
|
233
247
|
(acc2, componentUID) => {
|
234
|
-
acc2[componentUID] = {
|
248
|
+
acc2[componentUID] = {
|
249
|
+
populate: getDeepPopulate2(componentUID),
|
250
|
+
[fieldSelector]: getComponentFields(componentUID)
|
251
|
+
};
|
235
252
|
return acc2;
|
236
253
|
},
|
237
254
|
{}
|
@@ -344,7 +361,7 @@ const createHistoryService = ({ strapi: strapi2 }) => {
|
|
344
361
|
const attributeValue = entry.data[attributeKey];
|
345
362
|
const attributeValues = Array.isArray(attributeValue) ? attributeValue : [attributeValue];
|
346
363
|
if (attributeSchema.type === "media") {
|
347
|
-
const permissionChecker2 = getService$
|
364
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
348
365
|
userAbility: params.state.userAbility,
|
349
366
|
model: "plugin::upload.file"
|
350
367
|
});
|
@@ -385,7 +402,7 @@ const createHistoryService = ({ strapi: strapi2 }) => {
|
|
385
402
|
[attributeKey]: adminUsers
|
386
403
|
};
|
387
404
|
}
|
388
|
-
const permissionChecker2 = getService$
|
405
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
389
406
|
userAbility: params.state.userAbility,
|
390
407
|
model: attributeSchema.target
|
391
408
|
});
|
@@ -561,7 +578,7 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
|
|
561
578
|
onCommit(async () => {
|
562
579
|
for (const entry of localeEntries) {
|
563
580
|
const status = await serviceUtils.getVersionStatus(uid2, entry);
|
564
|
-
await getService(strapi2, "history").createVersion({
|
581
|
+
await getService$1(strapi2, "history").createVersion({
|
565
582
|
contentType: uid2,
|
566
583
|
data: omit(FIELDS_TO_IGNORE, entry),
|
567
584
|
relatedDocumentId: documentId,
|
@@ -574,15 +591,19 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
|
|
574
591
|
});
|
575
592
|
return result;
|
576
593
|
});
|
577
|
-
state.deleteExpiredJob = scheduleJob("0 0 * * *", () => {
|
594
|
+
state.deleteExpiredJob = scheduleJob("historyDaily", "0 0 * * *", () => {
|
578
595
|
const retentionDaysInMilliseconds = serviceUtils.getRetentionDays() * 24 * 60 * 60 * 1e3;
|
579
596
|
const expirationDate = new Date(Date.now() - retentionDaysInMilliseconds);
|
580
597
|
strapi2.db.query(HISTORY_VERSION_UID).deleteMany({
|
581
598
|
where: {
|
582
599
|
created_at: {
|
583
|
-
$lt: expirationDate
|
600
|
+
$lt: expirationDate
|
584
601
|
}
|
585
602
|
}
|
603
|
+
}).catch((error) => {
|
604
|
+
if (error instanceof Error) {
|
605
|
+
strapi2.log.error("Error deleting expired history versions", error.message);
|
606
|
+
}
|
586
607
|
});
|
587
608
|
});
|
588
609
|
state.isInitialized = true;
|
@@ -594,17 +615,17 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
|
|
594
615
|
}
|
595
616
|
};
|
596
617
|
};
|
597
|
-
const services$
|
618
|
+
const services$2 = {
|
598
619
|
history: createHistoryService,
|
599
620
|
lifecycles: createLifecyclesService
|
600
621
|
};
|
601
|
-
const info = { pluginName: "content-manager", type: "admin" };
|
622
|
+
const info$1 = { pluginName: "content-manager", type: "admin" };
|
602
623
|
const historyVersionRouter = {
|
603
624
|
type: "admin",
|
604
625
|
routes: [
|
605
626
|
{
|
606
627
|
method: "GET",
|
607
|
-
info,
|
628
|
+
info: info$1,
|
608
629
|
path: "/history-versions",
|
609
630
|
handler: "history-version.findMany",
|
610
631
|
config: {
|
@@ -613,7 +634,7 @@ const historyVersionRouter = {
|
|
613
634
|
},
|
614
635
|
{
|
615
636
|
method: "PUT",
|
616
|
-
info,
|
637
|
+
info: info$1,
|
617
638
|
path: "/history-versions/:versionId/restore",
|
618
639
|
handler: "history-version.restoreVersion",
|
619
640
|
config: {
|
@@ -622,7 +643,7 @@ const historyVersionRouter = {
|
|
622
643
|
}
|
623
644
|
]
|
624
645
|
};
|
625
|
-
const routes$
|
646
|
+
const routes$2 = {
|
626
647
|
"history-version": historyVersionRouter
|
627
648
|
};
|
628
649
|
const historyVersion = {
|
@@ -669,21 +690,21 @@ const historyVersion = {
|
|
669
690
|
}
|
670
691
|
}
|
671
692
|
};
|
672
|
-
const getFeature = () => {
|
693
|
+
const getFeature$1 = () => {
|
673
694
|
if (strapi.ee.features.isEnabled("cms-content-history")) {
|
674
695
|
return {
|
675
696
|
register({ strapi: strapi2 }) {
|
676
697
|
strapi2.get("models").add(historyVersion);
|
677
698
|
},
|
678
699
|
bootstrap({ strapi: strapi2 }) {
|
679
|
-
getService(strapi2, "lifecycles").bootstrap();
|
700
|
+
getService$1(strapi2, "lifecycles").bootstrap();
|
680
701
|
},
|
681
702
|
destroy({ strapi: strapi2 }) {
|
682
|
-
getService(strapi2, "lifecycles").destroy();
|
703
|
+
getService$1(strapi2, "lifecycles").destroy();
|
683
704
|
},
|
684
|
-
controllers: controllers$
|
685
|
-
services: services$
|
686
|
-
routes: routes$
|
705
|
+
controllers: controllers$2,
|
706
|
+
services: services$2,
|
707
|
+
routes: routes$2
|
687
708
|
};
|
688
709
|
}
|
689
710
|
return {
|
@@ -692,9 +713,205 @@ const getFeature = () => {
|
|
692
713
|
}
|
693
714
|
};
|
694
715
|
};
|
695
|
-
const history = getFeature();
|
716
|
+
const history = getFeature$1();
|
717
|
+
const FEATURE_ID = "preview";
|
718
|
+
const info = { pluginName: "content-manager", type: "admin" };
|
719
|
+
const previewRouter = {
|
720
|
+
type: "admin",
|
721
|
+
routes: [
|
722
|
+
{
|
723
|
+
method: "GET",
|
724
|
+
info,
|
725
|
+
path: "/preview/url/:contentType",
|
726
|
+
handler: "preview.getPreviewUrl",
|
727
|
+
config: {
|
728
|
+
policies: ["admin::isAuthenticatedAdmin"]
|
729
|
+
}
|
730
|
+
}
|
731
|
+
]
|
732
|
+
};
|
733
|
+
const routes$1 = {
|
734
|
+
preview: previewRouter
|
735
|
+
};
|
736
|
+
function getService(strapi2, name) {
|
737
|
+
return strapi2.service(`plugin::content-manager.${name}`);
|
738
|
+
}
|
739
|
+
const getPreviewUrlSchema = yup.object().shape({
|
740
|
+
// Will be undefined for single types
|
741
|
+
documentId: yup.string(),
|
742
|
+
locale: yup.string().nullable(),
|
743
|
+
status: yup.string()
|
744
|
+
}).required();
|
745
|
+
const validatePreviewUrl = async (strapi2, uid2, params) => {
|
746
|
+
await validateYupSchema(getPreviewUrlSchema)(params);
|
747
|
+
const newParams = pick(["documentId", "locale", "status"], params);
|
748
|
+
const model = strapi2.getModel(uid2);
|
749
|
+
if (!model || model.modelType !== "contentType") {
|
750
|
+
throw new errors.ValidationError("Invalid content type");
|
751
|
+
}
|
752
|
+
const isSingleType = model?.kind === "singleType";
|
753
|
+
if (!isSingleType && !params.documentId) {
|
754
|
+
throw new errors.ValidationError("documentId is required for Collection Types");
|
755
|
+
}
|
756
|
+
if (isSingleType) {
|
757
|
+
const doc = await strapi2.documents(uid2).findFirst();
|
758
|
+
if (!doc) {
|
759
|
+
throw new errors.NotFoundError("Document not found");
|
760
|
+
}
|
761
|
+
newParams.documentId = doc?.documentId;
|
762
|
+
}
|
763
|
+
if (!newParams.status) {
|
764
|
+
const isDPEnabled = model?.options?.draftAndPublish;
|
765
|
+
newParams.status = isDPEnabled ? "draft" : "published";
|
766
|
+
}
|
767
|
+
return newParams;
|
768
|
+
};
|
769
|
+
const createPreviewController = () => {
|
770
|
+
return {
|
771
|
+
/**
|
772
|
+
* Transforms an entry into a preview URL, so that it can be previewed
|
773
|
+
* in the Content Manager.
|
774
|
+
*/
|
775
|
+
async getPreviewUrl(ctx) {
|
776
|
+
const uid2 = ctx.params.contentType;
|
777
|
+
const query = ctx.request.query;
|
778
|
+
const params = await validatePreviewUrl(strapi, uid2, query);
|
779
|
+
const previewService = getService(strapi, "preview");
|
780
|
+
const url = await previewService.getPreviewUrl(uid2, params);
|
781
|
+
if (!url) {
|
782
|
+
ctx.status = 204;
|
783
|
+
}
|
784
|
+
return {
|
785
|
+
data: { url }
|
786
|
+
};
|
787
|
+
}
|
788
|
+
};
|
789
|
+
};
|
790
|
+
const controllers$1 = {
|
791
|
+
preview: createPreviewController
|
792
|
+
/**
|
793
|
+
* Casting is needed because the types aren't aware that Strapi supports
|
794
|
+
* passing a controller factory as the value, instead of a controller object directly
|
795
|
+
*/
|
796
|
+
};
|
797
|
+
const createPreviewService = ({ strapi: strapi2 }) => {
|
798
|
+
const config = getService(strapi2, "preview-config");
|
799
|
+
return {
|
800
|
+
async getPreviewUrl(uid2, params) {
|
801
|
+
const handler = config.getPreviewHandler();
|
802
|
+
try {
|
803
|
+
return handler(uid2, params);
|
804
|
+
} catch (error) {
|
805
|
+
strapi2.log.error(`Failed to get preview URL: ${error}`);
|
806
|
+
throw new errors.ApplicationError("Failed to get preview URL");
|
807
|
+
}
|
808
|
+
return;
|
809
|
+
}
|
810
|
+
};
|
811
|
+
};
|
812
|
+
const extendMiddlewareConfiguration = (middleware = { name: "", config: {} }) => {
|
813
|
+
const middlewares = strapi.config.get("middlewares");
|
814
|
+
const configuredMiddlewares = middlewares.map((currentMiddleware) => {
|
815
|
+
if (currentMiddleware === middleware.name) {
|
816
|
+
return middleware;
|
817
|
+
}
|
818
|
+
if (currentMiddleware.name === middleware.name) {
|
819
|
+
return mergeWith(
|
820
|
+
(objValue, srcValue) => {
|
821
|
+
if (Array.isArray(objValue)) {
|
822
|
+
return objValue.concat(srcValue);
|
823
|
+
}
|
824
|
+
return void 0;
|
825
|
+
},
|
826
|
+
currentMiddleware,
|
827
|
+
middleware
|
828
|
+
);
|
829
|
+
}
|
830
|
+
return currentMiddleware;
|
831
|
+
});
|
832
|
+
strapi.config.set("middlewares", configuredMiddlewares);
|
833
|
+
};
|
834
|
+
const createPreviewConfigService = ({ strapi: strapi2 }) => {
|
835
|
+
return {
|
836
|
+
register() {
|
837
|
+
if (!this.isEnabled()) {
|
838
|
+
return;
|
839
|
+
}
|
840
|
+
const config = strapi2.config.get("admin.preview");
|
841
|
+
if (config.config?.allowedOrigins) {
|
842
|
+
extendMiddlewareConfiguration({
|
843
|
+
name: "strapi::security",
|
844
|
+
config: {
|
845
|
+
contentSecurityPolicy: {
|
846
|
+
directives: {
|
847
|
+
"frame-src": config.config.allowedOrigins
|
848
|
+
}
|
849
|
+
}
|
850
|
+
}
|
851
|
+
});
|
852
|
+
}
|
853
|
+
},
|
854
|
+
isEnabled() {
|
855
|
+
const config = strapi2.config.get("admin.preview");
|
856
|
+
if (!config) {
|
857
|
+
return false;
|
858
|
+
}
|
859
|
+
return config?.enabled ?? true;
|
860
|
+
},
|
861
|
+
/**
|
862
|
+
* Validate if the configuration is valid
|
863
|
+
*/
|
864
|
+
validate() {
|
865
|
+
if (!this.isEnabled()) {
|
866
|
+
return;
|
867
|
+
}
|
868
|
+
const handler = this.getPreviewHandler();
|
869
|
+
if (typeof handler !== "function") {
|
870
|
+
throw new errors.ValidationError(
|
871
|
+
"Preview configuration is invalid. Handler must be a function"
|
872
|
+
);
|
873
|
+
}
|
874
|
+
},
|
875
|
+
/**
|
876
|
+
* Utility to get the preview handler from the configuration
|
877
|
+
*/
|
878
|
+
getPreviewHandler() {
|
879
|
+
const config = strapi2.config.get("admin.preview");
|
880
|
+
const emptyHandler = () => {
|
881
|
+
return void 0;
|
882
|
+
};
|
883
|
+
if (!this.isEnabled()) {
|
884
|
+
return emptyHandler;
|
885
|
+
}
|
886
|
+
return config?.config?.handler || emptyHandler;
|
887
|
+
}
|
888
|
+
};
|
889
|
+
};
|
890
|
+
const services$1 = {
|
891
|
+
preview: createPreviewService,
|
892
|
+
"preview-config": createPreviewConfigService
|
893
|
+
};
|
894
|
+
const getFeature = () => {
|
895
|
+
if (!strapi.features.future.isEnabled(FEATURE_ID)) {
|
896
|
+
return {};
|
897
|
+
}
|
898
|
+
return {
|
899
|
+
register() {
|
900
|
+
const config = getService(strapi, "preview-config");
|
901
|
+
config.validate();
|
902
|
+
config.register();
|
903
|
+
},
|
904
|
+
bootstrap() {
|
905
|
+
},
|
906
|
+
routes: routes$1,
|
907
|
+
controllers: controllers$1,
|
908
|
+
services: services$1
|
909
|
+
};
|
910
|
+
};
|
911
|
+
const preview = getFeature();
|
696
912
|
const register = async ({ strapi: strapi2 }) => {
|
697
913
|
await history.register?.({ strapi: strapi2 });
|
914
|
+
await preview.register?.({ strapi: strapi2 });
|
698
915
|
};
|
699
916
|
const ALLOWED_WEBHOOK_EVENTS = {
|
700
917
|
ENTRY_PUBLISH: "entry.publish",
|
@@ -704,11 +921,12 @@ const bootstrap = async () => {
|
|
704
921
|
Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {
|
705
922
|
strapi.get("webhookStore").addAllowedEvent(key, value);
|
706
923
|
});
|
707
|
-
getService$
|
708
|
-
await getService$
|
709
|
-
await getService$
|
710
|
-
await getService$
|
924
|
+
getService$2("field-sizes").setCustomFieldInputSizes();
|
925
|
+
await getService$2("components").syncConfigurations();
|
926
|
+
await getService$2("content-types").syncConfigurations();
|
927
|
+
await getService$2("permission").registerPermissions();
|
711
928
|
await history.bootstrap?.({ strapi });
|
929
|
+
await preview.bootstrap?.({ strapi });
|
712
930
|
};
|
713
931
|
const destroy = async ({ strapi: strapi2 }) => {
|
714
932
|
await history.destroy?.({ strapi: strapi2 });
|
@@ -1198,7 +1416,8 @@ const admin = {
|
|
1198
1416
|
};
|
1199
1417
|
const routes = {
|
1200
1418
|
admin,
|
1201
|
-
...history.routes ? history.routes : {}
|
1419
|
+
...history.routes ? history.routes : {},
|
1420
|
+
...preview.routes ? preview.routes : {}
|
1202
1421
|
};
|
1203
1422
|
const hasPermissionsSchema = yup$1.object({
|
1204
1423
|
actions: yup$1.array().of(yup$1.string()),
|
@@ -1455,7 +1674,7 @@ const createMetadasSchema = (schema) => {
|
|
1455
1674
|
if (!value) {
|
1456
1675
|
return yup$1.string();
|
1457
1676
|
}
|
1458
|
-
const targetSchema = getService$
|
1677
|
+
const targetSchema = getService$2("content-types").findContentType(
|
1459
1678
|
schema.attributes[key].targetModel
|
1460
1679
|
);
|
1461
1680
|
if (!targetSchema) {
|
@@ -1624,7 +1843,7 @@ const getDocumentLocaleAndStatus = async (request, model, opts = { allowMultiple
|
|
1624
1843
|
}
|
1625
1844
|
};
|
1626
1845
|
const formatDocumentWithMetadata = async (permissionChecker2, uid2, document, opts = {}) => {
|
1627
|
-
const documentMetadata2 = getService$
|
1846
|
+
const documentMetadata2 = getService$2("document-metadata");
|
1628
1847
|
const serviceOutput = await documentMetadata2.formatDocumentWithMetadata(uid2, document, opts);
|
1629
1848
|
let {
|
1630
1849
|
meta: { availableLocales, availableStatus }
|
@@ -1650,8 +1869,8 @@ const createDocument = async (ctx, opts) => {
|
|
1650
1869
|
const { userAbility, user } = ctx.state;
|
1651
1870
|
const { model } = ctx.params;
|
1652
1871
|
const { body } = ctx.request;
|
1653
|
-
const documentManager2 = getService$
|
1654
|
-
const permissionChecker2 = getService$
|
1872
|
+
const documentManager2 = getService$2("document-manager");
|
1873
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1655
1874
|
if (permissionChecker2.cannot.create()) {
|
1656
1875
|
throw new errors.ForbiddenError();
|
1657
1876
|
}
|
@@ -1671,13 +1890,13 @@ const updateDocument = async (ctx, opts) => {
|
|
1671
1890
|
const { userAbility, user } = ctx.state;
|
1672
1891
|
const { id, model } = ctx.params;
|
1673
1892
|
const { body } = ctx.request;
|
1674
|
-
const documentManager2 = getService$
|
1675
|
-
const permissionChecker2 = getService$
|
1893
|
+
const documentManager2 = getService$2("document-manager");
|
1894
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1676
1895
|
if (permissionChecker2.cannot.update()) {
|
1677
1896
|
throw new errors.ForbiddenError();
|
1678
1897
|
}
|
1679
1898
|
const permissionQuery = await permissionChecker2.sanitizedQuery.update(ctx.query);
|
1680
|
-
const populate = await getService$
|
1899
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1681
1900
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1682
1901
|
const [documentVersion, documentExists] = await Promise.all([
|
1683
1902
|
documentManager2.findOne(id, model, { populate, locale, status: "draft" }),
|
@@ -1708,14 +1927,14 @@ const collectionTypes = {
|
|
1708
1927
|
const { userAbility } = ctx.state;
|
1709
1928
|
const { model } = ctx.params;
|
1710
1929
|
const { query } = ctx.request;
|
1711
|
-
const documentMetadata2 = getService$
|
1712
|
-
const documentManager2 = getService$
|
1713
|
-
const permissionChecker2 = getService$
|
1930
|
+
const documentMetadata2 = getService$2("document-metadata");
|
1931
|
+
const documentManager2 = getService$2("document-manager");
|
1932
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1714
1933
|
if (permissionChecker2.cannot.read()) {
|
1715
1934
|
return ctx.forbidden();
|
1716
1935
|
}
|
1717
1936
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(query);
|
1718
|
-
const populate = await getService$
|
1937
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(1).countRelations({ toOne: false, toMany: true }).build();
|
1719
1938
|
const { locale, status } = await getDocumentLocaleAndStatus(query, model);
|
1720
1939
|
const { results: documents, pagination: pagination2 } = await documentManager2.findPage(
|
1721
1940
|
{ ...permissionQuery, populate, locale, status },
|
@@ -1744,13 +1963,13 @@ const collectionTypes = {
|
|
1744
1963
|
async findOne(ctx) {
|
1745
1964
|
const { userAbility } = ctx.state;
|
1746
1965
|
const { model, id } = ctx.params;
|
1747
|
-
const documentManager2 = getService$
|
1748
|
-
const permissionChecker2 = getService$
|
1966
|
+
const documentManager2 = getService$2("document-manager");
|
1967
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1749
1968
|
if (permissionChecker2.cannot.read()) {
|
1750
1969
|
return ctx.forbidden();
|
1751
1970
|
}
|
1752
1971
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
1753
|
-
const populate = await getService$
|
1972
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1754
1973
|
const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);
|
1755
1974
|
const version = await documentManager2.findOne(id, model, {
|
1756
1975
|
populate,
|
@@ -1781,7 +2000,7 @@ const collectionTypes = {
|
|
1781
2000
|
async create(ctx) {
|
1782
2001
|
const { userAbility } = ctx.state;
|
1783
2002
|
const { model } = ctx.params;
|
1784
|
-
const permissionChecker2 = getService$
|
2003
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1785
2004
|
const [totalEntries, document] = await Promise.all([
|
1786
2005
|
strapi.db.query(model).count(),
|
1787
2006
|
createDocument(ctx)
|
@@ -1802,7 +2021,7 @@ const collectionTypes = {
|
|
1802
2021
|
async update(ctx) {
|
1803
2022
|
const { userAbility } = ctx.state;
|
1804
2023
|
const { model } = ctx.params;
|
1805
|
-
const permissionChecker2 = getService$
|
2024
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1806
2025
|
const updatedVersion = await updateDocument(ctx);
|
1807
2026
|
const sanitizedVersion = await permissionChecker2.sanitizeOutput(updatedVersion);
|
1808
2027
|
ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedVersion);
|
@@ -1811,13 +2030,13 @@ const collectionTypes = {
|
|
1811
2030
|
const { userAbility, user } = ctx.state;
|
1812
2031
|
const { model, sourceId: id } = ctx.params;
|
1813
2032
|
const { body } = ctx.request;
|
1814
|
-
const documentManager2 = getService$
|
1815
|
-
const permissionChecker2 = getService$
|
2033
|
+
const documentManager2 = getService$2("document-manager");
|
2034
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1816
2035
|
if (permissionChecker2.cannot.create()) {
|
1817
2036
|
return ctx.forbidden();
|
1818
2037
|
}
|
1819
2038
|
const permissionQuery = await permissionChecker2.sanitizedQuery.create(ctx.query);
|
1820
|
-
const populate = await getService$
|
2039
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1821
2040
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1822
2041
|
const document = await documentManager2.findOne(id, model, {
|
1823
2042
|
populate,
|
@@ -1856,13 +2075,13 @@ const collectionTypes = {
|
|
1856
2075
|
async delete(ctx) {
|
1857
2076
|
const { userAbility } = ctx.state;
|
1858
2077
|
const { id, model } = ctx.params;
|
1859
|
-
const documentManager2 = getService$
|
1860
|
-
const permissionChecker2 = getService$
|
2078
|
+
const documentManager2 = getService$2("document-manager");
|
2079
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1861
2080
|
if (permissionChecker2.cannot.delete()) {
|
1862
2081
|
return ctx.forbidden();
|
1863
2082
|
}
|
1864
2083
|
const permissionQuery = await permissionChecker2.sanitizedQuery.delete(ctx.query);
|
1865
|
-
const populate = await getService$
|
2084
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1866
2085
|
const { locale } = await getDocumentLocaleAndStatus(ctx.query, model);
|
1867
2086
|
const documentLocales = await documentManager2.findLocales(id, model, { populate, locale });
|
1868
2087
|
if (documentLocales.length === 0) {
|
@@ -1884,14 +2103,14 @@ const collectionTypes = {
|
|
1884
2103
|
const { userAbility } = ctx.state;
|
1885
2104
|
const { id, model } = ctx.params;
|
1886
2105
|
const { body } = ctx.request;
|
1887
|
-
const documentManager2 = getService$
|
1888
|
-
const permissionChecker2 = getService$
|
2106
|
+
const documentManager2 = getService$2("document-manager");
|
2107
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1889
2108
|
if (permissionChecker2.cannot.publish()) {
|
1890
2109
|
return ctx.forbidden();
|
1891
2110
|
}
|
1892
2111
|
const publishedDocument = await strapi.db.transaction(async () => {
|
1893
2112
|
const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
|
1894
|
-
const populate = await getService$
|
2113
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1895
2114
|
let document;
|
1896
2115
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1897
2116
|
const isCreate = isNil$1(id);
|
@@ -1939,13 +2158,13 @@ const collectionTypes = {
|
|
1939
2158
|
const { body } = ctx.request;
|
1940
2159
|
const { documentIds } = body;
|
1941
2160
|
await validateBulkActionInput(body);
|
1942
|
-
const documentManager2 = getService$
|
1943
|
-
const permissionChecker2 = getService$
|
2161
|
+
const documentManager2 = getService$2("document-manager");
|
2162
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1944
2163
|
if (permissionChecker2.cannot.publish()) {
|
1945
2164
|
return ctx.forbidden();
|
1946
2165
|
}
|
1947
2166
|
const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
|
1948
|
-
const populate = await getService$
|
2167
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1949
2168
|
const { locale } = await getDocumentLocaleAndStatus(body, model, {
|
1950
2169
|
allowMultipleLocales: true
|
1951
2170
|
});
|
@@ -1970,8 +2189,8 @@ const collectionTypes = {
|
|
1970
2189
|
const { body } = ctx.request;
|
1971
2190
|
const { documentIds } = body;
|
1972
2191
|
await validateBulkActionInput(body);
|
1973
|
-
const documentManager2 = getService$
|
1974
|
-
const permissionChecker2 = getService$
|
2192
|
+
const documentManager2 = getService$2("document-manager");
|
2193
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1975
2194
|
if (permissionChecker2.cannot.unpublish()) {
|
1976
2195
|
return ctx.forbidden();
|
1977
2196
|
}
|
@@ -2000,8 +2219,8 @@ const collectionTypes = {
|
|
2000
2219
|
const {
|
2001
2220
|
body: { discardDraft, ...body }
|
2002
2221
|
} = ctx.request;
|
2003
|
-
const documentManager2 = getService$
|
2004
|
-
const permissionChecker2 = getService$
|
2222
|
+
const documentManager2 = getService$2("document-manager");
|
2223
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2005
2224
|
if (permissionChecker2.cannot.unpublish()) {
|
2006
2225
|
return ctx.forbidden();
|
2007
2226
|
}
|
@@ -2009,7 +2228,7 @@ const collectionTypes = {
|
|
2009
2228
|
return ctx.forbidden();
|
2010
2229
|
}
|
2011
2230
|
const permissionQuery = await permissionChecker2.sanitizedQuery.unpublish(ctx.query);
|
2012
|
-
const populate = await getService$
|
2231
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2013
2232
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2014
2233
|
const document = await documentManager2.findOne(id, model, {
|
2015
2234
|
populate,
|
@@ -2040,13 +2259,13 @@ const collectionTypes = {
|
|
2040
2259
|
const { userAbility } = ctx.state;
|
2041
2260
|
const { id, model } = ctx.params;
|
2042
2261
|
const { body } = ctx.request;
|
2043
|
-
const documentManager2 = getService$
|
2044
|
-
const permissionChecker2 = getService$
|
2262
|
+
const documentManager2 = getService$2("document-manager");
|
2263
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2045
2264
|
if (permissionChecker2.cannot.discard()) {
|
2046
2265
|
return ctx.forbidden();
|
2047
2266
|
}
|
2048
2267
|
const permissionQuery = await permissionChecker2.sanitizedQuery.discard(ctx.query);
|
2049
|
-
const populate = await getService$
|
2268
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2050
2269
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2051
2270
|
const document = await documentManager2.findOne(id, model, {
|
2052
2271
|
populate,
|
@@ -2071,13 +2290,13 @@ const collectionTypes = {
|
|
2071
2290
|
const { query, body } = ctx.request;
|
2072
2291
|
const { documentIds } = body;
|
2073
2292
|
await validateBulkActionInput(body);
|
2074
|
-
const documentManager2 = getService$
|
2075
|
-
const permissionChecker2 = getService$
|
2293
|
+
const documentManager2 = getService$2("document-manager");
|
2294
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2076
2295
|
if (permissionChecker2.cannot.delete()) {
|
2077
2296
|
return ctx.forbidden();
|
2078
2297
|
}
|
2079
2298
|
const permissionQuery = await permissionChecker2.sanitizedQuery.delete(query);
|
2080
|
-
const populate = await getService$
|
2299
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2081
2300
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2082
2301
|
const documentLocales = await documentManager2.findLocales(documentIds, model, {
|
2083
2302
|
populate,
|
@@ -2098,13 +2317,13 @@ const collectionTypes = {
|
|
2098
2317
|
async countDraftRelations(ctx) {
|
2099
2318
|
const { userAbility } = ctx.state;
|
2100
2319
|
const { model, id } = ctx.params;
|
2101
|
-
const documentManager2 = getService$
|
2102
|
-
const permissionChecker2 = getService$
|
2320
|
+
const documentManager2 = getService$2("document-manager");
|
2321
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2103
2322
|
if (permissionChecker2.cannot.read()) {
|
2104
2323
|
return ctx.forbidden();
|
2105
2324
|
}
|
2106
2325
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
2107
|
-
const populate = await getService$
|
2326
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2108
2327
|
const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);
|
2109
2328
|
const entity = await documentManager2.findOne(id, model, { populate, locale, status });
|
2110
2329
|
if (!entity) {
|
@@ -2123,8 +2342,8 @@ const collectionTypes = {
|
|
2123
2342
|
const ids = ctx.request.query.documentIds;
|
2124
2343
|
const locale = ctx.request.query.locale;
|
2125
2344
|
const { model } = ctx.params;
|
2126
|
-
const documentManager2 = getService$
|
2127
|
-
const permissionChecker2 = getService$
|
2345
|
+
const documentManager2 = getService$2("document-manager");
|
2346
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2128
2347
|
if (permissionChecker2.cannot.read()) {
|
2129
2348
|
return ctx.forbidden();
|
2130
2349
|
}
|
@@ -2148,13 +2367,13 @@ const collectionTypes = {
|
|
2148
2367
|
};
|
2149
2368
|
const components$1 = {
|
2150
2369
|
findComponents(ctx) {
|
2151
|
-
const components2 = getService$
|
2152
|
-
const { toDto } = getService$
|
2370
|
+
const components2 = getService$2("components").findAllComponents();
|
2371
|
+
const { toDto } = getService$2("data-mapper");
|
2153
2372
|
ctx.body = { data: components2.map(toDto) };
|
2154
2373
|
},
|
2155
2374
|
async findComponentConfiguration(ctx) {
|
2156
2375
|
const { uid: uid2 } = ctx.params;
|
2157
|
-
const componentService = getService$
|
2376
|
+
const componentService = getService$2("components");
|
2158
2377
|
const component = componentService.findComponent(uid2);
|
2159
2378
|
if (!component) {
|
2160
2379
|
return ctx.notFound("component.notFound");
|
@@ -2171,7 +2390,7 @@ const components$1 = {
|
|
2171
2390
|
async updateComponentConfiguration(ctx) {
|
2172
2391
|
const { uid: uid2 } = ctx.params;
|
2173
2392
|
const { body } = ctx.request;
|
2174
|
-
const componentService = getService$
|
2393
|
+
const componentService = getService$2("components");
|
2175
2394
|
const component = componentService.findComponent(uid2);
|
2176
2395
|
if (!component) {
|
2177
2396
|
return ctx.notFound("component.notFound");
|
@@ -2205,12 +2424,12 @@ const contentTypes = {
|
|
2205
2424
|
} catch (error) {
|
2206
2425
|
return ctx.send({ error }, 400);
|
2207
2426
|
}
|
2208
|
-
const contentTypes2 = getService$
|
2209
|
-
const { toDto } = getService$
|
2427
|
+
const contentTypes2 = getService$2("content-types").findContentTypesByKind(kind);
|
2428
|
+
const { toDto } = getService$2("data-mapper");
|
2210
2429
|
ctx.body = { data: contentTypes2.map(toDto) };
|
2211
2430
|
},
|
2212
2431
|
async findContentTypesSettings(ctx) {
|
2213
|
-
const { findAllContentTypes, findConfiguration } = getService$
|
2432
|
+
const { findAllContentTypes, findConfiguration } = getService$2("content-types");
|
2214
2433
|
const contentTypes2 = await findAllContentTypes();
|
2215
2434
|
const configurations = await Promise.all(
|
2216
2435
|
contentTypes2.map(async (contentType) => {
|
@@ -2224,7 +2443,7 @@ const contentTypes = {
|
|
2224
2443
|
},
|
2225
2444
|
async findContentTypeConfiguration(ctx) {
|
2226
2445
|
const { uid: uid2 } = ctx.params;
|
2227
|
-
const contentTypeService = getService$
|
2446
|
+
const contentTypeService = getService$2("content-types");
|
2228
2447
|
const contentType = await contentTypeService.findContentType(uid2);
|
2229
2448
|
if (!contentType) {
|
2230
2449
|
return ctx.notFound("contentType.notFound");
|
@@ -2246,13 +2465,13 @@ const contentTypes = {
|
|
2246
2465
|
const { userAbility } = ctx.state;
|
2247
2466
|
const { uid: uid2 } = ctx.params;
|
2248
2467
|
const { body } = ctx.request;
|
2249
|
-
const contentTypeService = getService$
|
2250
|
-
const metricsService = getService$
|
2468
|
+
const contentTypeService = getService$2("content-types");
|
2469
|
+
const metricsService = getService$2("metrics");
|
2251
2470
|
const contentType = await contentTypeService.findContentType(uid2);
|
2252
2471
|
if (!contentType) {
|
2253
2472
|
return ctx.notFound("contentType.notFound");
|
2254
2473
|
}
|
2255
|
-
if (!getService$
|
2474
|
+
if (!getService$2("permission").canConfigureContentType({ userAbility, contentType })) {
|
2256
2475
|
return ctx.forbidden();
|
2257
2476
|
}
|
2258
2477
|
let input;
|
@@ -2285,10 +2504,10 @@ const contentTypes = {
|
|
2285
2504
|
};
|
2286
2505
|
const init = {
|
2287
2506
|
getInitData(ctx) {
|
2288
|
-
const { toDto } = getService$
|
2289
|
-
const { findAllComponents } = getService$
|
2290
|
-
const { getAllFieldSizes } = getService$
|
2291
|
-
const { findAllContentTypes } = getService$
|
2507
|
+
const { toDto } = getService$2("data-mapper");
|
2508
|
+
const { findAllComponents } = getService$2("components");
|
2509
|
+
const { getAllFieldSizes } = getService$2("field-sizes");
|
2510
|
+
const { findAllContentTypes } = getService$2("content-types");
|
2292
2511
|
ctx.body = {
|
2293
2512
|
data: {
|
2294
2513
|
fieldSizes: getAllFieldSizes(),
|
@@ -2324,7 +2543,7 @@ const addFiltersClause = (params, filtersClause) => {
|
|
2324
2543
|
params.filters.$and.push(filtersClause);
|
2325
2544
|
};
|
2326
2545
|
const sanitizeMainField = (model, mainField, userAbility) => {
|
2327
|
-
const permissionChecker2 = getService$
|
2546
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2328
2547
|
userAbility,
|
2329
2548
|
model: model.uid
|
2330
2549
|
});
|
@@ -2338,15 +2557,27 @@ const sanitizeMainField = (model, mainField, userAbility) => {
|
|
2338
2557
|
}
|
2339
2558
|
return mainField;
|
2340
2559
|
};
|
2341
|
-
const addStatusToRelations = async (
|
2342
|
-
if (!contentTypes$1.hasDraftAndPublish(strapi.
|
2560
|
+
const addStatusToRelations = async (targetUid, relations2) => {
|
2561
|
+
if (!contentTypes$1.hasDraftAndPublish(strapi.getModel(targetUid))) {
|
2562
|
+
return relations2;
|
2563
|
+
}
|
2564
|
+
const documentMetadata2 = getService$2("document-metadata");
|
2565
|
+
if (!relations2.length) {
|
2343
2566
|
return relations2;
|
2344
2567
|
}
|
2345
|
-
const
|
2346
|
-
const
|
2568
|
+
const firstRelation = relations2[0];
|
2569
|
+
const filters = {
|
2570
|
+
documentId: { $in: relations2.map((r) => r.documentId) },
|
2571
|
+
// NOTE: find the "opposite" status
|
2572
|
+
publishedAt: firstRelation.publishedAt !== null ? { $null: true } : { $notNull: true }
|
2573
|
+
};
|
2574
|
+
const availableStatus = await strapi.query(targetUid).findMany({
|
2575
|
+
select: ["id", "documentId", "locale", "updatedAt", "createdAt", "publishedAt"],
|
2576
|
+
filters
|
2577
|
+
});
|
2347
2578
|
return relations2.map((relation) => {
|
2348
|
-
const availableStatuses =
|
2349
|
-
(availableDocument) => availableDocument.documentId === relation.documentId
|
2579
|
+
const availableStatuses = availableStatus.filter(
|
2580
|
+
(availableDocument) => availableDocument.documentId === relation.documentId && (relation.locale ? availableDocument.locale === relation.locale : true)
|
2350
2581
|
);
|
2351
2582
|
return {
|
2352
2583
|
...relation,
|
@@ -2408,7 +2639,7 @@ const relations = {
|
|
2408
2639
|
ctx.request?.query?.locale
|
2409
2640
|
);
|
2410
2641
|
const { status } = validateStatus(sourceUid, ctx.request?.query?.status);
|
2411
|
-
const permissionChecker2 = getService$
|
2642
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2412
2643
|
userAbility,
|
2413
2644
|
model
|
2414
2645
|
});
|
@@ -2433,7 +2664,7 @@ const relations = {
|
|
2433
2664
|
where.id = id;
|
2434
2665
|
}
|
2435
2666
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
2436
|
-
const populate = await getService$
|
2667
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2437
2668
|
const currentEntity = await strapi.db.query(model).findOne({
|
2438
2669
|
where,
|
2439
2670
|
populate
|
@@ -2448,7 +2679,7 @@ const relations = {
|
|
2448
2679
|
}
|
2449
2680
|
entryId = currentEntity.id;
|
2450
2681
|
}
|
2451
|
-
const modelConfig = isComponent2 ? await getService$
|
2682
|
+
const modelConfig = isComponent2 ? await getService$2("components").findConfiguration(sourceSchema) : await getService$2("content-types").findConfiguration(sourceSchema);
|
2452
2683
|
const targetSchema = strapi.getModel(targetUid);
|
2453
2684
|
const mainField = flow(
|
2454
2685
|
prop(`metadatas.${targetField}.edit.mainField`),
|
@@ -2502,7 +2733,7 @@ const relations = {
|
|
2502
2733
|
}
|
2503
2734
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2504
2735
|
const { idsToOmit, idsToInclude, _q, ...query } = ctx.request.query;
|
2505
|
-
const permissionChecker2 = getService$
|
2736
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2506
2737
|
userAbility: ctx.state.userAbility,
|
2507
2738
|
model: targetUid
|
2508
2739
|
});
|
@@ -2575,21 +2806,33 @@ const relations = {
|
|
2575
2806
|
attribute,
|
2576
2807
|
targetField,
|
2577
2808
|
fieldsToSelect,
|
2578
|
-
|
2579
|
-
|
2580
|
-
}
|
2581
|
-
target: {
|
2582
|
-
schema: { uid: targetUid }
|
2583
|
-
}
|
2809
|
+
status,
|
2810
|
+
source: { schema: sourceSchema },
|
2811
|
+
target: { schema: targetSchema }
|
2584
2812
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2585
|
-
const
|
2813
|
+
const { uid: sourceUid } = sourceSchema;
|
2814
|
+
const { uid: targetUid } = targetSchema;
|
2815
|
+
const permissionQuery = await getService$2("permission-checker").create({ userAbility, model: targetUid }).sanitizedQuery.read({ fields: fieldsToSelect });
|
2586
2816
|
const dbQuery = strapi.db.query(sourceUid);
|
2587
2817
|
const loadRelations = relations$1.isAnyToMany(attribute) ? (...args) => dbQuery.loadPages(...args) : (...args) => dbQuery.load(...args).then((res2) => ({ results: res2 ? [res2] : [] }));
|
2818
|
+
const filters = {};
|
2819
|
+
if (sourceSchema?.options?.draftAndPublish) {
|
2820
|
+
if (targetSchema?.options?.draftAndPublish) {
|
2821
|
+
if (status === "published") {
|
2822
|
+
filters.publishedAt = { $notNull: true };
|
2823
|
+
} else {
|
2824
|
+
filters.publishedAt = { $null: true };
|
2825
|
+
}
|
2826
|
+
}
|
2827
|
+
} else if (targetSchema?.options?.draftAndPublish) {
|
2828
|
+
filters.publishedAt = { $null: true };
|
2829
|
+
}
|
2588
2830
|
const res = await loadRelations({ id: entryId }, targetField, {
|
2589
|
-
select: ["id", "documentId", "locale", "publishedAt"],
|
2831
|
+
select: ["id", "documentId", "locale", "publishedAt", "updatedAt"],
|
2590
2832
|
ordering: "desc",
|
2591
2833
|
page: ctx.request.query.page,
|
2592
|
-
pageSize: ctx.request.query.pageSize
|
2834
|
+
pageSize: ctx.request.query.pageSize,
|
2835
|
+
filters
|
2593
2836
|
});
|
2594
2837
|
const loadedIds = res.results.map((item) => item.id);
|
2595
2838
|
addFiltersClause(permissionQuery, { id: { $in: loadedIds } });
|
@@ -2597,12 +2840,7 @@ const relations = {
|
|
2597
2840
|
...strapi.get("query-params").transform(targetUid, permissionQuery),
|
2598
2841
|
ordering: "desc"
|
2599
2842
|
});
|
2600
|
-
const relationsUnion = uniqBy(
|
2601
|
-
(res2) => {
|
2602
|
-
return res2.locale ? `${res2.documentId}-${res2.locale}` : `${res2.documentId}-`;
|
2603
|
-
},
|
2604
|
-
concat(sanitizedRes.results, res.results)
|
2605
|
-
);
|
2843
|
+
const relationsUnion = uniqBy("id", concat(sanitizedRes.results, res.results));
|
2606
2844
|
ctx.body = {
|
2607
2845
|
pagination: res.pagination || {
|
2608
2846
|
page: 1,
|
@@ -2615,10 +2853,10 @@ const relations = {
|
|
2615
2853
|
}
|
2616
2854
|
};
|
2617
2855
|
const buildPopulateFromQuery = async (query, model) => {
|
2618
|
-
return getService$
|
2856
|
+
return getService$2("populate-builder")(model).populateFromQuery(query).populateDeep(Infinity).countRelations().build();
|
2619
2857
|
};
|
2620
2858
|
const findDocument = async (query, uid2, opts = {}) => {
|
2621
|
-
const documentManager2 = getService$
|
2859
|
+
const documentManager2 = getService$2("document-manager");
|
2622
2860
|
const populate = await buildPopulateFromQuery(query, uid2);
|
2623
2861
|
return documentManager2.findMany({ ...opts, populate }, uid2).then((documents) => documents[0]);
|
2624
2862
|
};
|
@@ -2626,8 +2864,8 @@ const createOrUpdateDocument = async (ctx, opts) => {
|
|
2626
2864
|
const { user, userAbility } = ctx.state;
|
2627
2865
|
const { model } = ctx.params;
|
2628
2866
|
const { body, query } = ctx.request;
|
2629
|
-
const documentManager2 = getService$
|
2630
|
-
const permissionChecker2 = getService$
|
2867
|
+
const documentManager2 = getService$2("document-manager");
|
2868
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2631
2869
|
if (permissionChecker2.cannot.create() && permissionChecker2.cannot.update()) {
|
2632
2870
|
throw new errors.ForbiddenError();
|
2633
2871
|
}
|
@@ -2668,7 +2906,7 @@ const singleTypes = {
|
|
2668
2906
|
const { userAbility } = ctx.state;
|
2669
2907
|
const { model } = ctx.params;
|
2670
2908
|
const { query = {} } = ctx.request;
|
2671
|
-
const permissionChecker2 = getService$
|
2909
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2672
2910
|
if (permissionChecker2.cannot.read()) {
|
2673
2911
|
return ctx.forbidden();
|
2674
2912
|
}
|
@@ -2702,7 +2940,7 @@ const singleTypes = {
|
|
2702
2940
|
async createOrUpdate(ctx) {
|
2703
2941
|
const { userAbility } = ctx.state;
|
2704
2942
|
const { model } = ctx.params;
|
2705
|
-
const permissionChecker2 = getService$
|
2943
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2706
2944
|
const document = await createOrUpdateDocument(ctx);
|
2707
2945
|
const sanitizedDocument = await permissionChecker2.sanitizeOutput(document);
|
2708
2946
|
ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedDocument);
|
@@ -2711,8 +2949,8 @@ const singleTypes = {
|
|
2711
2949
|
const { userAbility } = ctx.state;
|
2712
2950
|
const { model } = ctx.params;
|
2713
2951
|
const { query = {} } = ctx.request;
|
2714
|
-
const documentManager2 = getService$
|
2715
|
-
const permissionChecker2 = getService$
|
2952
|
+
const documentManager2 = getService$2("document-manager");
|
2953
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2716
2954
|
if (permissionChecker2.cannot.delete()) {
|
2717
2955
|
return ctx.forbidden();
|
2718
2956
|
}
|
@@ -2740,8 +2978,8 @@ const singleTypes = {
|
|
2740
2978
|
const { userAbility } = ctx.state;
|
2741
2979
|
const { model } = ctx.params;
|
2742
2980
|
const { query = {} } = ctx.request;
|
2743
|
-
const documentManager2 = getService$
|
2744
|
-
const permissionChecker2 = getService$
|
2981
|
+
const documentManager2 = getService$2("document-manager");
|
2982
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2745
2983
|
if (permissionChecker2.cannot.publish()) {
|
2746
2984
|
return ctx.forbidden();
|
2747
2985
|
}
|
@@ -2769,8 +3007,8 @@ const singleTypes = {
|
|
2769
3007
|
body: { discardDraft, ...body },
|
2770
3008
|
query = {}
|
2771
3009
|
} = ctx.request;
|
2772
|
-
const documentManager2 = getService$
|
2773
|
-
const permissionChecker2 = getService$
|
3010
|
+
const documentManager2 = getService$2("document-manager");
|
3011
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2774
3012
|
if (permissionChecker2.cannot.unpublish()) {
|
2775
3013
|
return ctx.forbidden();
|
2776
3014
|
}
|
@@ -2804,8 +3042,8 @@ const singleTypes = {
|
|
2804
3042
|
const { userAbility } = ctx.state;
|
2805
3043
|
const { model } = ctx.params;
|
2806
3044
|
const { body, query = {} } = ctx.request;
|
2807
|
-
const documentManager2 = getService$
|
2808
|
-
const permissionChecker2 = getService$
|
3045
|
+
const documentManager2 = getService$2("document-manager");
|
3046
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2809
3047
|
if (permissionChecker2.cannot.discard()) {
|
2810
3048
|
return ctx.forbidden();
|
2811
3049
|
}
|
@@ -2828,8 +3066,8 @@ const singleTypes = {
|
|
2828
3066
|
const { userAbility } = ctx.state;
|
2829
3067
|
const { model } = ctx.params;
|
2830
3068
|
const { query } = ctx.request;
|
2831
|
-
const documentManager2 = getService$
|
2832
|
-
const permissionChecker2 = getService$
|
3069
|
+
const documentManager2 = getService$2("document-manager");
|
3070
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2833
3071
|
const { locale } = await getDocumentLocaleAndStatus(query, model);
|
2834
3072
|
if (permissionChecker2.cannot.read()) {
|
2835
3073
|
return ctx.forbidden();
|
@@ -2853,7 +3091,7 @@ const uid$1 = {
|
|
2853
3091
|
const { query = {} } = ctx.request;
|
2854
3092
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2855
3093
|
await validateUIDField(contentTypeUID, field);
|
2856
|
-
const uidService = getService$
|
3094
|
+
const uidService = getService$2("uid");
|
2857
3095
|
ctx.body = {
|
2858
3096
|
data: await uidService.generateUIDField({ contentTypeUID, field, data, locale })
|
2859
3097
|
};
|
@@ -2865,7 +3103,7 @@ const uid$1 = {
|
|
2865
3103
|
const { query = {} } = ctx.request;
|
2866
3104
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2867
3105
|
await validateUIDField(contentTypeUID, field);
|
2868
|
-
const uidService = getService$
|
3106
|
+
const uidService = getService$2("uid");
|
2869
3107
|
const isAvailable = await uidService.checkUIDAvailability({
|
2870
3108
|
contentTypeUID,
|
2871
3109
|
field,
|
@@ -2886,7 +3124,8 @@ const controllers = {
|
|
2886
3124
|
relations,
|
2887
3125
|
"single-types": singleTypes,
|
2888
3126
|
uid: uid$1,
|
2889
|
-
...history.controllers ? history.controllers : {}
|
3127
|
+
...history.controllers ? history.controllers : {},
|
3128
|
+
...preview.controllers ? preview.controllers : {}
|
2890
3129
|
};
|
2891
3130
|
const keys = {
|
2892
3131
|
CONFIGURATION: "configuration"
|
@@ -3037,12 +3276,12 @@ async function syncMetadatas(configuration, schema) {
|
|
3037
3276
|
return _.assign(metasWithDefaults, updatedMetas);
|
3038
3277
|
}
|
3039
3278
|
const getTargetSchema = (targetModel) => {
|
3040
|
-
return getService$
|
3279
|
+
return getService$2("content-types").findContentType(targetModel);
|
3041
3280
|
};
|
3042
3281
|
const DEFAULT_LIST_LENGTH = 4;
|
3043
3282
|
const MAX_ROW_SIZE = 12;
|
3044
3283
|
const isAllowedFieldSize = (type, size) => {
|
3045
|
-
const { getFieldSize } = getService$
|
3284
|
+
const { getFieldSize } = getService$2("field-sizes");
|
3046
3285
|
const fieldSize = getFieldSize(type);
|
3047
3286
|
if (!fieldSize.isResizable && size !== fieldSize.default) {
|
3048
3287
|
return false;
|
@@ -3050,7 +3289,7 @@ const isAllowedFieldSize = (type, size) => {
|
|
3050
3289
|
return size <= MAX_ROW_SIZE;
|
3051
3290
|
};
|
3052
3291
|
const getDefaultFieldSize = (attribute) => {
|
3053
|
-
const { hasFieldSize, getFieldSize } = getService$
|
3292
|
+
const { hasFieldSize, getFieldSize } = getService$2("field-sizes");
|
3054
3293
|
return getFieldSize(hasFieldSize(attribute.customField) ? attribute.customField : attribute.type).default;
|
3055
3294
|
};
|
3056
3295
|
async function createDefaultLayouts(schema) {
|
@@ -3085,7 +3324,7 @@ function syncLayouts(configuration, schema) {
|
|
3085
3324
|
for (const el of row) {
|
3086
3325
|
if (!hasEditableAttribute(schema, el.name))
|
3087
3326
|
continue;
|
3088
|
-
const { hasFieldSize } = getService$
|
3327
|
+
const { hasFieldSize } = getService$2("field-sizes");
|
3089
3328
|
const fieldType = hasFieldSize(schema.attributes[el.name].customField) ? schema.attributes[el.name].customField : schema.attributes[el.name].type;
|
3090
3329
|
if (!isAllowedFieldSize(fieldType, el.size)) {
|
3091
3330
|
elementsToReAppend.push(el.name);
|
@@ -3225,17 +3464,17 @@ const configurationService$1 = createConfigurationService({
|
|
3225
3464
|
isComponent: true,
|
3226
3465
|
prefix: STORE_KEY_PREFIX,
|
3227
3466
|
getModels() {
|
3228
|
-
const { toContentManagerModel } = getService$
|
3467
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3229
3468
|
return mapValues(toContentManagerModel, strapi.components);
|
3230
3469
|
}
|
3231
3470
|
});
|
3232
3471
|
const components = ({ strapi: strapi2 }) => ({
|
3233
3472
|
findAllComponents() {
|
3234
|
-
const { toContentManagerModel } = getService$
|
3473
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3235
3474
|
return Object.values(strapi2.components).map(toContentManagerModel);
|
3236
3475
|
},
|
3237
3476
|
findComponent(uid2) {
|
3238
|
-
const { toContentManagerModel } = getService$
|
3477
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3239
3478
|
const component = strapi2.components[uid2];
|
3240
3479
|
return isNil$1(component) ? component : toContentManagerModel(component);
|
3241
3480
|
},
|
@@ -3286,17 +3525,17 @@ const configurationService = createConfigurationService({
|
|
3286
3525
|
storeUtils,
|
3287
3526
|
prefix: "content_types",
|
3288
3527
|
getModels() {
|
3289
|
-
const { toContentManagerModel } = getService$
|
3528
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3290
3529
|
return mapValues(toContentManagerModel, strapi.contentTypes);
|
3291
3530
|
}
|
3292
3531
|
});
|
3293
3532
|
const service = ({ strapi: strapi2 }) => ({
|
3294
3533
|
findAllContentTypes() {
|
3295
|
-
const { toContentManagerModel } = getService$
|
3534
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3296
3535
|
return Object.values(strapi2.contentTypes).map(toContentManagerModel);
|
3297
3536
|
},
|
3298
3537
|
findContentType(uid2) {
|
3299
|
-
const { toContentManagerModel } = getService$
|
3538
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3300
3539
|
const contentType = strapi2.contentTypes[uid2];
|
3301
3540
|
return isNil$1(contentType) ? contentType : toContentManagerModel(contentType);
|
3302
3541
|
},
|
@@ -3325,7 +3564,7 @@ const service = ({ strapi: strapi2 }) => ({
|
|
3325
3564
|
return this.findConfiguration(contentType);
|
3326
3565
|
},
|
3327
3566
|
findComponentsConfigurations(contentType) {
|
3328
|
-
return getService$
|
3567
|
+
return getService$2("components").findComponentsConfigurations(contentType);
|
3329
3568
|
},
|
3330
3569
|
syncConfigurations() {
|
3331
3570
|
return configurationService.syncConfigurations();
|
@@ -3597,7 +3836,7 @@ const permission = ({ strapi: strapi2 }) => ({
|
|
3597
3836
|
return userAbility.can(action);
|
3598
3837
|
},
|
3599
3838
|
async registerPermissions() {
|
3600
|
-
const displayedContentTypes = getService$
|
3839
|
+
const displayedContentTypes = getService$2("content-types").findDisplayedContentTypes();
|
3601
3840
|
const contentTypesUids = displayedContentTypes.map(prop("uid"));
|
3602
3841
|
const actions = [
|
3603
3842
|
{
|
@@ -3873,7 +4112,7 @@ const getQueryPopulate = async (uid2, query) => {
|
|
3873
4112
|
return populateQuery;
|
3874
4113
|
};
|
3875
4114
|
const buildDeepPopulate = (uid2) => {
|
3876
|
-
return getService$
|
4115
|
+
return getService$2("populate-builder")(uid2).populateDeep(Infinity).countRelations().build();
|
3877
4116
|
};
|
3878
4117
|
const populateBuilder = (uid2) => {
|
3879
4118
|
let getInitialPopulate = async () => {
|
@@ -4058,7 +4297,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4058
4297
|
*/
|
4059
4298
|
async getAvailableLocales(uid2, version, allVersions, validatableFields = []) {
|
4060
4299
|
const versionsByLocale = groupBy("locale", allVersions);
|
4061
|
-
|
4300
|
+
if (version.locale) {
|
4301
|
+
delete versionsByLocale[version.locale];
|
4302
|
+
}
|
4062
4303
|
const model = strapi2.getModel(uid2);
|
4063
4304
|
const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
|
4064
4305
|
const traversalFunction = async (localeVersion) => traverseEntity(
|
@@ -4414,7 +4655,8 @@ const services = {
|
|
4414
4655
|
permission,
|
4415
4656
|
"populate-builder": populateBuilder$1,
|
4416
4657
|
uid,
|
4417
|
-
...history.services ? history.services : {}
|
4658
|
+
...history.services ? history.services : {},
|
4659
|
+
...preview.services ? preview.services : {}
|
4418
4660
|
};
|
4419
4661
|
const index = () => {
|
4420
4662
|
return {
|