@strapi/content-manager 0.0.0-next.d2d15ef227d67cce89c2673764c0555c841cd29c → 0.0.0-next.d65d44102fd32871728c0d74ec4f2519b7cc0a16
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-DfFSZQxe.mjs → ComponentConfigurationPage-DhWA-JzT.mjs} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-DfFSZQxe.mjs.map → ComponentConfigurationPage-DhWA-JzT.mjs.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-FqfsxQ1j.js → ComponentConfigurationPage-UduDBv3m.js} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-FqfsxQ1j.js.map → ComponentConfigurationPage-UduDBv3m.js.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-DdPNAbl3.mjs → EditConfigurationPage-5tmx_7Hp.mjs} +4 -4
- package/dist/_chunks/{EditConfigurationPage-DdPNAbl3.mjs.map → EditConfigurationPage-5tmx_7Hp.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-Cn0e8t3I.js → EditConfigurationPage-Cp9UzUfs.js} +4 -4
- package/dist/_chunks/{EditConfigurationPage-Cn0e8t3I.js.map → EditConfigurationPage-Cp9UzUfs.js.map} +1 -1
- package/dist/_chunks/{EditViewPage-B82x_x1b.mjs → EditViewPage-BKoISUOu.mjs} +38 -8
- package/dist/_chunks/EditViewPage-BKoISUOu.mjs.map +1 -0
- package/dist/_chunks/{EditViewPage-DlxEHhUt.js → EditViewPage-C7l2Emuj.js} +37 -7
- package/dist/_chunks/EditViewPage-C7l2Emuj.js.map +1 -0
- package/dist/_chunks/{Field-COL25JiC.js → Field-BPSJpDfE.js} +43 -24
- package/dist/_chunks/Field-BPSJpDfE.js.map +1 -0
- package/dist/_chunks/{Field-DufHXW17.mjs → Field-BZxzYf1x.mjs} +44 -25
- package/dist/_chunks/Field-BZxzYf1x.mjs.map +1 -0
- package/dist/_chunks/{Form-u_kAOhwB.mjs → Form-8qyOU6YG.mjs} +2 -2
- package/dist/_chunks/{Form-u_kAOhwB.mjs.map → Form-8qyOU6YG.mjs.map} +1 -1
- package/dist/_chunks/{Form-BssUwrTO.js → Form-DLkqDd2G.js} +2 -2
- package/dist/_chunks/{Form-BssUwrTO.js.map → Form-DLkqDd2G.js.map} +1 -1
- package/dist/_chunks/{History-C9t9UqpO.js → History-DYMicybF.js} +22 -92
- package/dist/_chunks/History-DYMicybF.js.map +1 -0
- package/dist/_chunks/{History-DRwA3oMM.mjs → History-N_kRb1Yr.mjs} +23 -93
- package/dist/_chunks/History-N_kRb1Yr.mjs.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-BxfQJzPk.mjs → ListConfigurationPage-BM3qVxug.mjs} +6 -5
- package/dist/_chunks/ListConfigurationPage-BM3qVxug.mjs.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-BXYPohh-.js → ListConfigurationPage-rUF9iGWq.js} +5 -4
- package/dist/_chunks/ListConfigurationPage-rUF9iGWq.js.map +1 -0
- package/dist/_chunks/{ListViewPage-D2VD8Szg.js → ListViewPage-BSLzd7cZ.js} +62 -39
- package/dist/_chunks/ListViewPage-BSLzd7cZ.js.map +1 -0
- package/dist/_chunks/{ListViewPage-CELx2ysp.mjs → ListViewPage-CWilGbZb.mjs} +62 -39
- package/dist/_chunks/ListViewPage-CWilGbZb.mjs.map +1 -0
- package/dist/_chunks/{NoContentTypePage-BV9IjJSM.js → NoContentTypePage-CQccVhIX.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-BV9IjJSM.js.map → NoContentTypePage-CQccVhIX.js.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-DtJ9jcfk.mjs → NoContentTypePage-VWYlePwI.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-DtJ9jcfk.mjs.map → NoContentTypePage-VWYlePwI.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-Dp8NpF9I.js → NoPermissionsPage-Af32Gg2m.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-Dp8NpF9I.js.map → NoPermissionsPage-Af32Gg2m.js.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-DWleVYK7.mjs → NoPermissionsPage-CS2tCmfr.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-DWleVYK7.mjs.map → NoPermissionsPage-CS2tCmfr.mjs.map} +1 -1
- package/dist/_chunks/Preview-D4KzuJFL.js +291 -0
- package/dist/_chunks/Preview-D4KzuJFL.js.map +1 -0
- package/dist/_chunks/Preview-kPkuZbBJ.mjs +272 -0
- package/dist/_chunks/Preview-kPkuZbBJ.mjs.map +1 -0
- package/dist/_chunks/{Relations-BTcf5xaw.mjs → Relations-5k27Rh54.mjs} +44 -17
- package/dist/_chunks/Relations-5k27Rh54.mjs.map +1 -0
- package/dist/_chunks/{Relations-DR7EUgyC.js → Relations-D_Ki5aVM.js} +43 -16
- package/dist/_chunks/Relations-D_Ki5aVM.js.map +1 -0
- package/dist/_chunks/{en-Bm0D0IWz.js → en-BK8Xyl5I.js} +16 -4
- package/dist/_chunks/{en-Bm0D0IWz.js.map → en-BK8Xyl5I.js.map} +1 -1
- package/dist/_chunks/{en-DKV44jRb.mjs → en-Dtk_ot79.mjs} +16 -4
- package/dist/_chunks/{en-DKV44jRb.mjs.map → en-Dtk_ot79.mjs.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-wnqzm4Q8.mjs → index-BLPa8Dq-.mjs} +208 -94
- package/dist/_chunks/index-BLPa8Dq-.mjs.map +1 -0
- package/dist/_chunks/{index-BdMf2lfT.js → index-DwOsF7wF.js} +205 -90
- package/dist/_chunks/index-DwOsF7wF.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-2CfjL0T9.mjs → layout-2Si0j0jO.mjs} +3 -3
- package/dist/_chunks/{layout-2CfjL0T9.mjs.map → layout-2Si0j0jO.mjs.map} +1 -1
- package/dist/_chunks/{layout-B2MyZU-_.js → layout-CN2bFL9V.js} +3 -3
- package/dist/_chunks/{layout-B2MyZU-_.js.map → layout-CN2bFL9V.js.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-BH7JJGGe.js → relations-B0E0XUY7.js} +6 -7
- package/dist/_chunks/relations-B0E0XUY7.js.map +1 -0
- package/dist/_chunks/{relations-C0w0GcXi.mjs → relations-CAxDjUJF.mjs} +6 -7
- package/dist/_chunks/relations-CAxDjUJF.mjs.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 +391 -144
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +392 -145
- 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-B82x_x1b.mjs.map +0 -1
- package/dist/_chunks/EditViewPage-DlxEHhUt.js.map +0 -1
- package/dist/_chunks/Field-COL25JiC.js.map +0 -1
- package/dist/_chunks/Field-DufHXW17.mjs.map +0 -1
- package/dist/_chunks/History-C9t9UqpO.js.map +0 -1
- package/dist/_chunks/History-DRwA3oMM.mjs.map +0 -1
- package/dist/_chunks/ListConfigurationPage-BXYPohh-.js.map +0 -1
- package/dist/_chunks/ListConfigurationPage-BxfQJzPk.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-CELx2ysp.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-D2VD8Szg.js.map +0 -1
- package/dist/_chunks/Relations-BTcf5xaw.mjs.map +0 -1
- package/dist/_chunks/Relations-DR7EUgyC.js.map +0 -1
- package/dist/_chunks/index-BdMf2lfT.js.map +0 -1
- package/dist/_chunks/index-wnqzm4Q8.mjs.map +0 -1
- package/dist/_chunks/relations-BH7JJGGe.js.map +0 -1
- package/dist/_chunks/relations-C0w0GcXi.mjs.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 } });
|
@@ -2610,10 +2853,10 @@ const relations = {
|
|
2610
2853
|
}
|
2611
2854
|
};
|
2612
2855
|
const buildPopulateFromQuery = async (query, model) => {
|
2613
|
-
return getService$
|
2856
|
+
return getService$2("populate-builder")(model).populateFromQuery(query).populateDeep(Infinity).countRelations().build();
|
2614
2857
|
};
|
2615
2858
|
const findDocument = async (query, uid2, opts = {}) => {
|
2616
|
-
const documentManager2 = getService$
|
2859
|
+
const documentManager2 = getService$2("document-manager");
|
2617
2860
|
const populate = await buildPopulateFromQuery(query, uid2);
|
2618
2861
|
return documentManager2.findMany({ ...opts, populate }, uid2).then((documents) => documents[0]);
|
2619
2862
|
};
|
@@ -2621,8 +2864,8 @@ const createOrUpdateDocument = async (ctx, opts) => {
|
|
2621
2864
|
const { user, userAbility } = ctx.state;
|
2622
2865
|
const { model } = ctx.params;
|
2623
2866
|
const { body, query } = ctx.request;
|
2624
|
-
const documentManager2 = getService$
|
2625
|
-
const permissionChecker2 = getService$
|
2867
|
+
const documentManager2 = getService$2("document-manager");
|
2868
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2626
2869
|
if (permissionChecker2.cannot.create() && permissionChecker2.cannot.update()) {
|
2627
2870
|
throw new errors.ForbiddenError();
|
2628
2871
|
}
|
@@ -2663,7 +2906,7 @@ const singleTypes = {
|
|
2663
2906
|
const { userAbility } = ctx.state;
|
2664
2907
|
const { model } = ctx.params;
|
2665
2908
|
const { query = {} } = ctx.request;
|
2666
|
-
const permissionChecker2 = getService$
|
2909
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2667
2910
|
if (permissionChecker2.cannot.read()) {
|
2668
2911
|
return ctx.forbidden();
|
2669
2912
|
}
|
@@ -2697,7 +2940,7 @@ const singleTypes = {
|
|
2697
2940
|
async createOrUpdate(ctx) {
|
2698
2941
|
const { userAbility } = ctx.state;
|
2699
2942
|
const { model } = ctx.params;
|
2700
|
-
const permissionChecker2 = getService$
|
2943
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2701
2944
|
const document = await createOrUpdateDocument(ctx);
|
2702
2945
|
const sanitizedDocument = await permissionChecker2.sanitizeOutput(document);
|
2703
2946
|
ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedDocument);
|
@@ -2706,8 +2949,8 @@ const singleTypes = {
|
|
2706
2949
|
const { userAbility } = ctx.state;
|
2707
2950
|
const { model } = ctx.params;
|
2708
2951
|
const { query = {} } = ctx.request;
|
2709
|
-
const documentManager2 = getService$
|
2710
|
-
const permissionChecker2 = getService$
|
2952
|
+
const documentManager2 = getService$2("document-manager");
|
2953
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2711
2954
|
if (permissionChecker2.cannot.delete()) {
|
2712
2955
|
return ctx.forbidden();
|
2713
2956
|
}
|
@@ -2735,8 +2978,8 @@ const singleTypes = {
|
|
2735
2978
|
const { userAbility } = ctx.state;
|
2736
2979
|
const { model } = ctx.params;
|
2737
2980
|
const { query = {} } = ctx.request;
|
2738
|
-
const documentManager2 = getService$
|
2739
|
-
const permissionChecker2 = getService$
|
2981
|
+
const documentManager2 = getService$2("document-manager");
|
2982
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2740
2983
|
if (permissionChecker2.cannot.publish()) {
|
2741
2984
|
return ctx.forbidden();
|
2742
2985
|
}
|
@@ -2764,8 +3007,8 @@ const singleTypes = {
|
|
2764
3007
|
body: { discardDraft, ...body },
|
2765
3008
|
query = {}
|
2766
3009
|
} = ctx.request;
|
2767
|
-
const documentManager2 = getService$
|
2768
|
-
const permissionChecker2 = getService$
|
3010
|
+
const documentManager2 = getService$2("document-manager");
|
3011
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2769
3012
|
if (permissionChecker2.cannot.unpublish()) {
|
2770
3013
|
return ctx.forbidden();
|
2771
3014
|
}
|
@@ -2799,8 +3042,8 @@ const singleTypes = {
|
|
2799
3042
|
const { userAbility } = ctx.state;
|
2800
3043
|
const { model } = ctx.params;
|
2801
3044
|
const { body, query = {} } = ctx.request;
|
2802
|
-
const documentManager2 = getService$
|
2803
|
-
const permissionChecker2 = getService$
|
3045
|
+
const documentManager2 = getService$2("document-manager");
|
3046
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2804
3047
|
if (permissionChecker2.cannot.discard()) {
|
2805
3048
|
return ctx.forbidden();
|
2806
3049
|
}
|
@@ -2823,8 +3066,8 @@ const singleTypes = {
|
|
2823
3066
|
const { userAbility } = ctx.state;
|
2824
3067
|
const { model } = ctx.params;
|
2825
3068
|
const { query } = ctx.request;
|
2826
|
-
const documentManager2 = getService$
|
2827
|
-
const permissionChecker2 = getService$
|
3069
|
+
const documentManager2 = getService$2("document-manager");
|
3070
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2828
3071
|
const { locale } = await getDocumentLocaleAndStatus(query, model);
|
2829
3072
|
if (permissionChecker2.cannot.read()) {
|
2830
3073
|
return ctx.forbidden();
|
@@ -2848,7 +3091,7 @@ const uid$1 = {
|
|
2848
3091
|
const { query = {} } = ctx.request;
|
2849
3092
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2850
3093
|
await validateUIDField(contentTypeUID, field);
|
2851
|
-
const uidService = getService$
|
3094
|
+
const uidService = getService$2("uid");
|
2852
3095
|
ctx.body = {
|
2853
3096
|
data: await uidService.generateUIDField({ contentTypeUID, field, data, locale })
|
2854
3097
|
};
|
@@ -2860,7 +3103,7 @@ const uid$1 = {
|
|
2860
3103
|
const { query = {} } = ctx.request;
|
2861
3104
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2862
3105
|
await validateUIDField(contentTypeUID, field);
|
2863
|
-
const uidService = getService$
|
3106
|
+
const uidService = getService$2("uid");
|
2864
3107
|
const isAvailable = await uidService.checkUIDAvailability({
|
2865
3108
|
contentTypeUID,
|
2866
3109
|
field,
|
@@ -2881,7 +3124,8 @@ const controllers = {
|
|
2881
3124
|
relations,
|
2882
3125
|
"single-types": singleTypes,
|
2883
3126
|
uid: uid$1,
|
2884
|
-
...history.controllers ? history.controllers : {}
|
3127
|
+
...history.controllers ? history.controllers : {},
|
3128
|
+
...preview.controllers ? preview.controllers : {}
|
2885
3129
|
};
|
2886
3130
|
const keys = {
|
2887
3131
|
CONFIGURATION: "configuration"
|
@@ -3032,12 +3276,12 @@ async function syncMetadatas(configuration, schema) {
|
|
3032
3276
|
return _.assign(metasWithDefaults, updatedMetas);
|
3033
3277
|
}
|
3034
3278
|
const getTargetSchema = (targetModel) => {
|
3035
|
-
return getService$
|
3279
|
+
return getService$2("content-types").findContentType(targetModel);
|
3036
3280
|
};
|
3037
3281
|
const DEFAULT_LIST_LENGTH = 4;
|
3038
3282
|
const MAX_ROW_SIZE = 12;
|
3039
3283
|
const isAllowedFieldSize = (type, size) => {
|
3040
|
-
const { getFieldSize } = getService$
|
3284
|
+
const { getFieldSize } = getService$2("field-sizes");
|
3041
3285
|
const fieldSize = getFieldSize(type);
|
3042
3286
|
if (!fieldSize.isResizable && size !== fieldSize.default) {
|
3043
3287
|
return false;
|
@@ -3045,7 +3289,7 @@ const isAllowedFieldSize = (type, size) => {
|
|
3045
3289
|
return size <= MAX_ROW_SIZE;
|
3046
3290
|
};
|
3047
3291
|
const getDefaultFieldSize = (attribute) => {
|
3048
|
-
const { hasFieldSize, getFieldSize } = getService$
|
3292
|
+
const { hasFieldSize, getFieldSize } = getService$2("field-sizes");
|
3049
3293
|
return getFieldSize(hasFieldSize(attribute.customField) ? attribute.customField : attribute.type).default;
|
3050
3294
|
};
|
3051
3295
|
async function createDefaultLayouts(schema) {
|
@@ -3080,7 +3324,7 @@ function syncLayouts(configuration, schema) {
|
|
3080
3324
|
for (const el of row) {
|
3081
3325
|
if (!hasEditableAttribute(schema, el.name))
|
3082
3326
|
continue;
|
3083
|
-
const { hasFieldSize } = getService$
|
3327
|
+
const { hasFieldSize } = getService$2("field-sizes");
|
3084
3328
|
const fieldType = hasFieldSize(schema.attributes[el.name].customField) ? schema.attributes[el.name].customField : schema.attributes[el.name].type;
|
3085
3329
|
if (!isAllowedFieldSize(fieldType, el.size)) {
|
3086
3330
|
elementsToReAppend.push(el.name);
|
@@ -3220,17 +3464,17 @@ const configurationService$1 = createConfigurationService({
|
|
3220
3464
|
isComponent: true,
|
3221
3465
|
prefix: STORE_KEY_PREFIX,
|
3222
3466
|
getModels() {
|
3223
|
-
const { toContentManagerModel } = getService$
|
3467
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3224
3468
|
return mapValues(toContentManagerModel, strapi.components);
|
3225
3469
|
}
|
3226
3470
|
});
|
3227
3471
|
const components = ({ strapi: strapi2 }) => ({
|
3228
3472
|
findAllComponents() {
|
3229
|
-
const { toContentManagerModel } = getService$
|
3473
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3230
3474
|
return Object.values(strapi2.components).map(toContentManagerModel);
|
3231
3475
|
},
|
3232
3476
|
findComponent(uid2) {
|
3233
|
-
const { toContentManagerModel } = getService$
|
3477
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3234
3478
|
const component = strapi2.components[uid2];
|
3235
3479
|
return isNil$1(component) ? component : toContentManagerModel(component);
|
3236
3480
|
},
|
@@ -3281,17 +3525,17 @@ const configurationService = createConfigurationService({
|
|
3281
3525
|
storeUtils,
|
3282
3526
|
prefix: "content_types",
|
3283
3527
|
getModels() {
|
3284
|
-
const { toContentManagerModel } = getService$
|
3528
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3285
3529
|
return mapValues(toContentManagerModel, strapi.contentTypes);
|
3286
3530
|
}
|
3287
3531
|
});
|
3288
3532
|
const service = ({ strapi: strapi2 }) => ({
|
3289
3533
|
findAllContentTypes() {
|
3290
|
-
const { toContentManagerModel } = getService$
|
3534
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3291
3535
|
return Object.values(strapi2.contentTypes).map(toContentManagerModel);
|
3292
3536
|
},
|
3293
3537
|
findContentType(uid2) {
|
3294
|
-
const { toContentManagerModel } = getService$
|
3538
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3295
3539
|
const contentType = strapi2.contentTypes[uid2];
|
3296
3540
|
return isNil$1(contentType) ? contentType : toContentManagerModel(contentType);
|
3297
3541
|
},
|
@@ -3320,7 +3564,7 @@ const service = ({ strapi: strapi2 }) => ({
|
|
3320
3564
|
return this.findConfiguration(contentType);
|
3321
3565
|
},
|
3322
3566
|
findComponentsConfigurations(contentType) {
|
3323
|
-
return getService$
|
3567
|
+
return getService$2("components").findComponentsConfigurations(contentType);
|
3324
3568
|
},
|
3325
3569
|
syncConfigurations() {
|
3326
3570
|
return configurationService.syncConfigurations();
|
@@ -3592,7 +3836,7 @@ const permission = ({ strapi: strapi2 }) => ({
|
|
3592
3836
|
return userAbility.can(action);
|
3593
3837
|
},
|
3594
3838
|
async registerPermissions() {
|
3595
|
-
const displayedContentTypes = getService$
|
3839
|
+
const displayedContentTypes = getService$2("content-types").findDisplayedContentTypes();
|
3596
3840
|
const contentTypesUids = displayedContentTypes.map(prop("uid"));
|
3597
3841
|
const actions = [
|
3598
3842
|
{
|
@@ -3868,7 +4112,7 @@ const getQueryPopulate = async (uid2, query) => {
|
|
3868
4112
|
return populateQuery;
|
3869
4113
|
};
|
3870
4114
|
const buildDeepPopulate = (uid2) => {
|
3871
|
-
return getService$
|
4115
|
+
return getService$2("populate-builder")(uid2).populateDeep(Infinity).countRelations().build();
|
3872
4116
|
};
|
3873
4117
|
const populateBuilder = (uid2) => {
|
3874
4118
|
let getInitialPopulate = async () => {
|
@@ -4053,7 +4297,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4053
4297
|
*/
|
4054
4298
|
async getAvailableLocales(uid2, version, allVersions, validatableFields = []) {
|
4055
4299
|
const versionsByLocale = groupBy("locale", allVersions);
|
4056
|
-
|
4300
|
+
if (version.locale) {
|
4301
|
+
delete versionsByLocale[version.locale];
|
4302
|
+
}
|
4057
4303
|
const model = strapi2.getModel(uid2);
|
4058
4304
|
const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
|
4059
4305
|
const traversalFunction = async (localeVersion) => traverseEntity(
|
@@ -4409,7 +4655,8 @@ const services = {
|
|
4409
4655
|
permission,
|
4410
4656
|
"populate-builder": populateBuilder$1,
|
4411
4657
|
uid,
|
4412
|
-
...history.services ? history.services : {}
|
4658
|
+
...history.services ? history.services : {},
|
4659
|
+
...preview.services ? preview.services : {}
|
4413
4660
|
};
|
4414
4661
|
const index = () => {
|
4415
4662
|
return {
|