@strapi/content-manager 0.0.0-experimental.f8a68bc03b751aa0a66c4dcfaf83553c9b6adf2b → 0.0.0-experimental.fb22a8bd8745528903b2f168fdd286dfd1f5082e
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-B2g3icXu.mjs → ComponentConfigurationPage-BaJMOQyq.mjs} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-B2g3icXu.mjs.map → ComponentConfigurationPage-BaJMOQyq.mjs.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-CzDn8Uxh.js → ComponentConfigurationPage-N-CTtgQa.js} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-CzDn8Uxh.js.map → ComponentConfigurationPage-N-CTtgQa.js.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-Bcbi6r5y.js → EditConfigurationPage-BHkjAbxH.js} +4 -4
- package/dist/_chunks/{EditConfigurationPage-Bcbi6r5y.js.map → EditConfigurationPage-BHkjAbxH.js.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-DSA1zONV.mjs → EditConfigurationPage-CKK-5LfX.mjs} +4 -4
- package/dist/_chunks/{EditConfigurationPage-DSA1zONV.mjs.map → EditConfigurationPage-CKK-5LfX.mjs.map} +1 -1
- package/dist/_chunks/{EditViewPage-Ca2EmJpb.mjs → EditViewPage-B11aeMcf.mjs} +38 -8
- package/dist/_chunks/EditViewPage-B11aeMcf.mjs.map +1 -0
- package/dist/_chunks/{EditViewPage-BvcMXaP2.js → EditViewPage-QPUftxUd.js} +37 -7
- package/dist/_chunks/EditViewPage-QPUftxUd.js.map +1 -0
- package/dist/_chunks/{Field-BEYkgCZ0.mjs → Field-Bj_RgtGo.mjs} +44 -25
- package/dist/_chunks/Field-Bj_RgtGo.mjs.map +1 -0
- package/dist/_chunks/{Field-CmaWxdpf.js → Field-DUK83cfh.js} +43 -24
- package/dist/_chunks/Field-DUK83cfh.js.map +1 -0
- package/dist/_chunks/{Form-DAUpPBVM.js → Form-DHmBRlHd.js} +2 -2
- package/dist/_chunks/{Form-DAUpPBVM.js.map → Form-DHmBRlHd.js.map} +1 -1
- package/dist/_chunks/{Form-BJVbU6w4.mjs → Form-DLMSoXV7.mjs} +2 -2
- package/dist/_chunks/{Form-BJVbU6w4.mjs.map → Form-DLMSoXV7.mjs.map} +1 -1
- package/dist/_chunks/{History-M6Pk9CoY.mjs → History-CfCSNlG9.mjs} +23 -93
- package/dist/_chunks/History-CfCSNlG9.mjs.map +1 -0
- package/dist/_chunks/{History-Bw9vfT1k.js → History-Di3zm4HT.js} +22 -92
- package/dist/_chunks/History-Di3zm4HT.js.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-D7ior2zq.mjs → ListConfigurationPage-0mtv_iqk.mjs} +6 -5
- package/dist/_chunks/ListConfigurationPage-0mtv_iqk.mjs.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-DBVqF5fc.js → ListConfigurationPage-Cq361KIt.js} +5 -4
- package/dist/_chunks/ListConfigurationPage-Cq361KIt.js.map +1 -0
- package/dist/_chunks/{ListViewPage-BH37wONY.mjs → ListViewPage-BxLVROX8.mjs} +62 -39
- package/dist/_chunks/ListViewPage-BxLVROX8.mjs.map +1 -0
- package/dist/_chunks/{ListViewPage-MZu-8OKX.js → ListViewPage-DFDcG8gM.js} +62 -39
- package/dist/_chunks/ListViewPage-DFDcG8gM.js.map +1 -0
- package/dist/_chunks/{NoContentTypePage-DRp7Aem_.mjs → NoContentTypePage-BRfDd67_.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-DRp7Aem_.mjs.map → NoContentTypePage-BRfDd67_.mjs.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-C9lRMTCa.js → NoContentTypePage-BSyvnDZZ.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-C9lRMTCa.js.map → NoContentTypePage-BSyvnDZZ.js.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-CzhRt5CA.mjs → NoPermissionsPage-CV9V8KWa.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-CzhRt5CA.mjs.map → NoPermissionsPage-CV9V8KWa.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-COs61PpB.js → NoPermissionsPage-DyLphsn_.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-COs61PpB.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-68XxIzPI.mjs → Relations-C6pwmDXh.mjs} +27 -12
- package/dist/_chunks/Relations-C6pwmDXh.mjs.map +1 -0
- package/dist/_chunks/{Relations-CsGlulU_.js → Relations-Cne2AlrL.js} +26 -11
- 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-CsfwpRfc.mjs → index-BpxR3En4.mjs} +173 -90
- package/dist/_chunks/index-BpxR3En4.mjs.map +1 -0
- package/dist/_chunks/{index-oDq3VO9j.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-Euka-kfv.js → layout-BEuNwv-F.js} +3 -3
- package/dist/_chunks/{layout-Euka-kfv.js.map → layout-BEuNwv-F.js.map} +1 -1
- package/dist/_chunks/{layout-C5uSVTqi.mjs → layout-DhMZ_lDx.mjs} +3 -3
- package/dist/_chunks/{layout-C5uSVTqi.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-BpHVgFuV.mjs → relations-BdnxoX6f.mjs} +6 -7
- package/dist/_chunks/relations-BdnxoX6f.mjs.map +1 -0
- package/dist/_chunks/{relations-DG7kmxa0.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 -148
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +393 -149
- 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-BvcMXaP2.js.map +0 -1
- package/dist/_chunks/EditViewPage-Ca2EmJpb.mjs.map +0 -1
- package/dist/_chunks/Field-BEYkgCZ0.mjs.map +0 -1
- package/dist/_chunks/Field-CmaWxdpf.js.map +0 -1
- package/dist/_chunks/History-Bw9vfT1k.js.map +0 -1
- package/dist/_chunks/History-M6Pk9CoY.mjs.map +0 -1
- package/dist/_chunks/ListConfigurationPage-D7ior2zq.mjs.map +0 -1
- package/dist/_chunks/ListConfigurationPage-DBVqF5fc.js.map +0 -1
- package/dist/_chunks/ListViewPage-BH37wONY.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-MZu-8OKX.js.map +0 -1
- package/dist/_chunks/Relations-68XxIzPI.mjs.map +0 -1
- package/dist/_chunks/Relations-CsGlulU_.js.map +0 -1
- package/dist/_chunks/index-CsfwpRfc.mjs.map +0 -1
- package/dist/_chunks/index-oDq3VO9j.js.map +0 -1
- package/dist/_chunks/relations-BpHVgFuV.mjs.map +0 -1
- package/dist/_chunks/relations-DG7kmxa0.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))) {
|
2343
2562
|
return relations2;
|
2344
2563
|
}
|
2345
|
-
const documentMetadata2 = getService$
|
2346
|
-
|
2564
|
+
const documentMetadata2 = getService$2("document-metadata");
|
2565
|
+
if (!relations2.length) {
|
2566
|
+
return relations2;
|
2567
|
+
}
|
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,10 +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) => `${res2.documentId}-${res2.locale}`,
|
2602
|
-
concat(sanitizedRes.results, res.results)
|
2603
|
-
);
|
2843
|
+
const relationsUnion = uniqBy("id", concat(sanitizedRes.results, res.results));
|
2604
2844
|
ctx.body = {
|
2605
2845
|
pagination: res.pagination || {
|
2606
2846
|
page: 1,
|
@@ -2613,10 +2853,10 @@ const relations = {
|
|
2613
2853
|
}
|
2614
2854
|
};
|
2615
2855
|
const buildPopulateFromQuery = async (query, model) => {
|
2616
|
-
return getService$
|
2856
|
+
return getService$2("populate-builder")(model).populateFromQuery(query).populateDeep(Infinity).countRelations().build();
|
2617
2857
|
};
|
2618
2858
|
const findDocument = async (query, uid2, opts = {}) => {
|
2619
|
-
const documentManager2 = getService$
|
2859
|
+
const documentManager2 = getService$2("document-manager");
|
2620
2860
|
const populate = await buildPopulateFromQuery(query, uid2);
|
2621
2861
|
return documentManager2.findMany({ ...opts, populate }, uid2).then((documents) => documents[0]);
|
2622
2862
|
};
|
@@ -2624,8 +2864,8 @@ const createOrUpdateDocument = async (ctx, opts) => {
|
|
2624
2864
|
const { user, userAbility } = ctx.state;
|
2625
2865
|
const { model } = ctx.params;
|
2626
2866
|
const { body, query } = ctx.request;
|
2627
|
-
const documentManager2 = getService$
|
2628
|
-
const permissionChecker2 = getService$
|
2867
|
+
const documentManager2 = getService$2("document-manager");
|
2868
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2629
2869
|
if (permissionChecker2.cannot.create() && permissionChecker2.cannot.update()) {
|
2630
2870
|
throw new errors.ForbiddenError();
|
2631
2871
|
}
|
@@ -2666,7 +2906,7 @@ const singleTypes = {
|
|
2666
2906
|
const { userAbility } = ctx.state;
|
2667
2907
|
const { model } = ctx.params;
|
2668
2908
|
const { query = {} } = ctx.request;
|
2669
|
-
const permissionChecker2 = getService$
|
2909
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2670
2910
|
if (permissionChecker2.cannot.read()) {
|
2671
2911
|
return ctx.forbidden();
|
2672
2912
|
}
|
@@ -2700,7 +2940,7 @@ const singleTypes = {
|
|
2700
2940
|
async createOrUpdate(ctx) {
|
2701
2941
|
const { userAbility } = ctx.state;
|
2702
2942
|
const { model } = ctx.params;
|
2703
|
-
const permissionChecker2 = getService$
|
2943
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2704
2944
|
const document = await createOrUpdateDocument(ctx);
|
2705
2945
|
const sanitizedDocument = await permissionChecker2.sanitizeOutput(document);
|
2706
2946
|
ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedDocument);
|
@@ -2709,8 +2949,8 @@ const singleTypes = {
|
|
2709
2949
|
const { userAbility } = ctx.state;
|
2710
2950
|
const { model } = ctx.params;
|
2711
2951
|
const { query = {} } = ctx.request;
|
2712
|
-
const documentManager2 = getService$
|
2713
|
-
const permissionChecker2 = getService$
|
2952
|
+
const documentManager2 = getService$2("document-manager");
|
2953
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2714
2954
|
if (permissionChecker2.cannot.delete()) {
|
2715
2955
|
return ctx.forbidden();
|
2716
2956
|
}
|
@@ -2738,8 +2978,8 @@ const singleTypes = {
|
|
2738
2978
|
const { userAbility } = ctx.state;
|
2739
2979
|
const { model } = ctx.params;
|
2740
2980
|
const { query = {} } = ctx.request;
|
2741
|
-
const documentManager2 = getService$
|
2742
|
-
const permissionChecker2 = getService$
|
2981
|
+
const documentManager2 = getService$2("document-manager");
|
2982
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2743
2983
|
if (permissionChecker2.cannot.publish()) {
|
2744
2984
|
return ctx.forbidden();
|
2745
2985
|
}
|
@@ -2767,8 +3007,8 @@ const singleTypes = {
|
|
2767
3007
|
body: { discardDraft, ...body },
|
2768
3008
|
query = {}
|
2769
3009
|
} = ctx.request;
|
2770
|
-
const documentManager2 = getService$
|
2771
|
-
const permissionChecker2 = getService$
|
3010
|
+
const documentManager2 = getService$2("document-manager");
|
3011
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2772
3012
|
if (permissionChecker2.cannot.unpublish()) {
|
2773
3013
|
return ctx.forbidden();
|
2774
3014
|
}
|
@@ -2802,8 +3042,8 @@ const singleTypes = {
|
|
2802
3042
|
const { userAbility } = ctx.state;
|
2803
3043
|
const { model } = ctx.params;
|
2804
3044
|
const { body, query = {} } = ctx.request;
|
2805
|
-
const documentManager2 = getService$
|
2806
|
-
const permissionChecker2 = getService$
|
3045
|
+
const documentManager2 = getService$2("document-manager");
|
3046
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2807
3047
|
if (permissionChecker2.cannot.discard()) {
|
2808
3048
|
return ctx.forbidden();
|
2809
3049
|
}
|
@@ -2826,8 +3066,8 @@ const singleTypes = {
|
|
2826
3066
|
const { userAbility } = ctx.state;
|
2827
3067
|
const { model } = ctx.params;
|
2828
3068
|
const { query } = ctx.request;
|
2829
|
-
const documentManager2 = getService$
|
2830
|
-
const permissionChecker2 = getService$
|
3069
|
+
const documentManager2 = getService$2("document-manager");
|
3070
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2831
3071
|
const { locale } = await getDocumentLocaleAndStatus(query, model);
|
2832
3072
|
if (permissionChecker2.cannot.read()) {
|
2833
3073
|
return ctx.forbidden();
|
@@ -2851,7 +3091,7 @@ const uid$1 = {
|
|
2851
3091
|
const { query = {} } = ctx.request;
|
2852
3092
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2853
3093
|
await validateUIDField(contentTypeUID, field);
|
2854
|
-
const uidService = getService$
|
3094
|
+
const uidService = getService$2("uid");
|
2855
3095
|
ctx.body = {
|
2856
3096
|
data: await uidService.generateUIDField({ contentTypeUID, field, data, locale })
|
2857
3097
|
};
|
@@ -2863,7 +3103,7 @@ const uid$1 = {
|
|
2863
3103
|
const { query = {} } = ctx.request;
|
2864
3104
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2865
3105
|
await validateUIDField(contentTypeUID, field);
|
2866
|
-
const uidService = getService$
|
3106
|
+
const uidService = getService$2("uid");
|
2867
3107
|
const isAvailable = await uidService.checkUIDAvailability({
|
2868
3108
|
contentTypeUID,
|
2869
3109
|
field,
|
@@ -2884,7 +3124,8 @@ const controllers = {
|
|
2884
3124
|
relations,
|
2885
3125
|
"single-types": singleTypes,
|
2886
3126
|
uid: uid$1,
|
2887
|
-
...history.controllers ? history.controllers : {}
|
3127
|
+
...history.controllers ? history.controllers : {},
|
3128
|
+
...preview.controllers ? preview.controllers : {}
|
2888
3129
|
};
|
2889
3130
|
const keys = {
|
2890
3131
|
CONFIGURATION: "configuration"
|
@@ -3035,12 +3276,12 @@ async function syncMetadatas(configuration, schema) {
|
|
3035
3276
|
return _.assign(metasWithDefaults, updatedMetas);
|
3036
3277
|
}
|
3037
3278
|
const getTargetSchema = (targetModel) => {
|
3038
|
-
return getService$
|
3279
|
+
return getService$2("content-types").findContentType(targetModel);
|
3039
3280
|
};
|
3040
3281
|
const DEFAULT_LIST_LENGTH = 4;
|
3041
3282
|
const MAX_ROW_SIZE = 12;
|
3042
3283
|
const isAllowedFieldSize = (type, size) => {
|
3043
|
-
const { getFieldSize } = getService$
|
3284
|
+
const { getFieldSize } = getService$2("field-sizes");
|
3044
3285
|
const fieldSize = getFieldSize(type);
|
3045
3286
|
if (!fieldSize.isResizable && size !== fieldSize.default) {
|
3046
3287
|
return false;
|
@@ -3048,7 +3289,7 @@ const isAllowedFieldSize = (type, size) => {
|
|
3048
3289
|
return size <= MAX_ROW_SIZE;
|
3049
3290
|
};
|
3050
3291
|
const getDefaultFieldSize = (attribute) => {
|
3051
|
-
const { hasFieldSize, getFieldSize } = getService$
|
3292
|
+
const { hasFieldSize, getFieldSize } = getService$2("field-sizes");
|
3052
3293
|
return getFieldSize(hasFieldSize(attribute.customField) ? attribute.customField : attribute.type).default;
|
3053
3294
|
};
|
3054
3295
|
async function createDefaultLayouts(schema) {
|
@@ -3083,7 +3324,7 @@ function syncLayouts(configuration, schema) {
|
|
3083
3324
|
for (const el of row) {
|
3084
3325
|
if (!hasEditableAttribute(schema, el.name))
|
3085
3326
|
continue;
|
3086
|
-
const { hasFieldSize } = getService$
|
3327
|
+
const { hasFieldSize } = getService$2("field-sizes");
|
3087
3328
|
const fieldType = hasFieldSize(schema.attributes[el.name].customField) ? schema.attributes[el.name].customField : schema.attributes[el.name].type;
|
3088
3329
|
if (!isAllowedFieldSize(fieldType, el.size)) {
|
3089
3330
|
elementsToReAppend.push(el.name);
|
@@ -3223,17 +3464,17 @@ const configurationService$1 = createConfigurationService({
|
|
3223
3464
|
isComponent: true,
|
3224
3465
|
prefix: STORE_KEY_PREFIX,
|
3225
3466
|
getModels() {
|
3226
|
-
const { toContentManagerModel } = getService$
|
3467
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3227
3468
|
return mapValues(toContentManagerModel, strapi.components);
|
3228
3469
|
}
|
3229
3470
|
});
|
3230
3471
|
const components = ({ strapi: strapi2 }) => ({
|
3231
3472
|
findAllComponents() {
|
3232
|
-
const { toContentManagerModel } = getService$
|
3473
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3233
3474
|
return Object.values(strapi2.components).map(toContentManagerModel);
|
3234
3475
|
},
|
3235
3476
|
findComponent(uid2) {
|
3236
|
-
const { toContentManagerModel } = getService$
|
3477
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3237
3478
|
const component = strapi2.components[uid2];
|
3238
3479
|
return isNil$1(component) ? component : toContentManagerModel(component);
|
3239
3480
|
},
|
@@ -3284,17 +3525,17 @@ const configurationService = createConfigurationService({
|
|
3284
3525
|
storeUtils,
|
3285
3526
|
prefix: "content_types",
|
3286
3527
|
getModels() {
|
3287
|
-
const { toContentManagerModel } = getService$
|
3528
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3288
3529
|
return mapValues(toContentManagerModel, strapi.contentTypes);
|
3289
3530
|
}
|
3290
3531
|
});
|
3291
3532
|
const service = ({ strapi: strapi2 }) => ({
|
3292
3533
|
findAllContentTypes() {
|
3293
|
-
const { toContentManagerModel } = getService$
|
3534
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3294
3535
|
return Object.values(strapi2.contentTypes).map(toContentManagerModel);
|
3295
3536
|
},
|
3296
3537
|
findContentType(uid2) {
|
3297
|
-
const { toContentManagerModel } = getService$
|
3538
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3298
3539
|
const contentType = strapi2.contentTypes[uid2];
|
3299
3540
|
return isNil$1(contentType) ? contentType : toContentManagerModel(contentType);
|
3300
3541
|
},
|
@@ -3323,7 +3564,7 @@ const service = ({ strapi: strapi2 }) => ({
|
|
3323
3564
|
return this.findConfiguration(contentType);
|
3324
3565
|
},
|
3325
3566
|
findComponentsConfigurations(contentType) {
|
3326
|
-
return getService$
|
3567
|
+
return getService$2("components").findComponentsConfigurations(contentType);
|
3327
3568
|
},
|
3328
3569
|
syncConfigurations() {
|
3329
3570
|
return configurationService.syncConfigurations();
|
@@ -3595,7 +3836,7 @@ const permission = ({ strapi: strapi2 }) => ({
|
|
3595
3836
|
return userAbility.can(action);
|
3596
3837
|
},
|
3597
3838
|
async registerPermissions() {
|
3598
|
-
const displayedContentTypes = getService$
|
3839
|
+
const displayedContentTypes = getService$2("content-types").findDisplayedContentTypes();
|
3599
3840
|
const contentTypesUids = displayedContentTypes.map(prop("uid"));
|
3600
3841
|
const actions = [
|
3601
3842
|
{
|
@@ -3871,7 +4112,7 @@ const getQueryPopulate = async (uid2, query) => {
|
|
3871
4112
|
return populateQuery;
|
3872
4113
|
};
|
3873
4114
|
const buildDeepPopulate = (uid2) => {
|
3874
|
-
return getService$
|
4115
|
+
return getService$2("populate-builder")(uid2).populateDeep(Infinity).countRelations().build();
|
3875
4116
|
};
|
3876
4117
|
const populateBuilder = (uid2) => {
|
3877
4118
|
let getInitialPopulate = async () => {
|
@@ -4056,7 +4297,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4056
4297
|
*/
|
4057
4298
|
async getAvailableLocales(uid2, version, allVersions, validatableFields = []) {
|
4058
4299
|
const versionsByLocale = groupBy("locale", allVersions);
|
4059
|
-
|
4300
|
+
if (version.locale) {
|
4301
|
+
delete versionsByLocale[version.locale];
|
4302
|
+
}
|
4060
4303
|
const model = strapi2.getModel(uid2);
|
4061
4304
|
const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
|
4062
4305
|
const traversalFunction = async (localeVersion) => traverseEntity(
|
@@ -4412,7 +4655,8 @@ const services = {
|
|
4412
4655
|
permission,
|
4413
4656
|
"populate-builder": populateBuilder$1,
|
4414
4657
|
uid,
|
4415
|
-
...history.services ? history.services : {}
|
4658
|
+
...history.services ? history.services : {},
|
4659
|
+
...preview.services ? preview.services : {}
|
4416
4660
|
};
|
4417
4661
|
const index = () => {
|
4418
4662
|
return {
|