@strapi/content-manager 0.0.0-experimental.f9cac24ba3b2f6acb12d0fb5669106e5a134174e → 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-DkUdgHD9.mjs → ComponentConfigurationPage-BaJMOQyq.mjs} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-DkUdgHD9.mjs.map → ComponentConfigurationPage-BaJMOQyq.mjs.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-3feZ0gyp.js → ComponentConfigurationPage-N-CTtgQa.js} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-3feZ0gyp.js.map → ComponentConfigurationPage-N-CTtgQa.js.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-B0KA-x9U.js → EditConfigurationPage-BHkjAbxH.js} +4 -4
- package/dist/_chunks/{EditConfigurationPage-B0KA-x9U.js.map → EditConfigurationPage-BHkjAbxH.js.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-Ox5wFgpq.mjs → EditConfigurationPage-CKK-5LfX.mjs} +4 -4
- package/dist/_chunks/{EditConfigurationPage-Ox5wFgpq.mjs.map → EditConfigurationPage-CKK-5LfX.mjs.map} +1 -1
- package/dist/_chunks/{EditViewPage-foKE8Al3.mjs → EditViewPage-B11aeMcf.mjs} +38 -8
- package/dist/_chunks/EditViewPage-B11aeMcf.mjs.map +1 -0
- package/dist/_chunks/{EditViewPage-OMv9CogC.js → EditViewPage-QPUftxUd.js} +37 -7
- package/dist/_chunks/EditViewPage-QPUftxUd.js.map +1 -0
- package/dist/_chunks/{Field-CLqZcnnc.mjs → Field-Bj_RgtGo.mjs} +44 -25
- package/dist/_chunks/Field-Bj_RgtGo.mjs.map +1 -0
- package/dist/_chunks/{Field-u09MCk3G.js → Field-DUK83cfh.js} +43 -24
- package/dist/_chunks/Field-DUK83cfh.js.map +1 -0
- package/dist/_chunks/{Form-B9c_Ti0q.js → Form-DHmBRlHd.js} +2 -2
- package/dist/_chunks/{Form-B9c_Ti0q.js.map → Form-DHmBRlHd.js.map} +1 -1
- package/dist/_chunks/{Form-CU4hRyJf.mjs → Form-DLMSoXV7.mjs} +2 -2
- package/dist/_chunks/{Form-CU4hRyJf.mjs.map → Form-DLMSoXV7.mjs.map} +1 -1
- package/dist/_chunks/{History-BFyFzpSS.mjs → History-CfCSNlG9.mjs} +22 -92
- package/dist/_chunks/History-CfCSNlG9.mjs.map +1 -0
- package/dist/_chunks/{History-OlickLyX.js → History-Di3zm4HT.js} +21 -91
- package/dist/_chunks/History-Di3zm4HT.js.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-Bu5Z_39o.mjs → ListConfigurationPage-0mtv_iqk.mjs} +6 -5
- package/dist/_chunks/ListConfigurationPage-0mtv_iqk.mjs.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-D0AAi_cW.js → ListConfigurationPage-Cq361KIt.js} +5 -4
- package/dist/_chunks/ListConfigurationPage-Cq361KIt.js.map +1 -0
- package/dist/_chunks/{ListViewPage-BAHxSPux.mjs → ListViewPage-BxLVROX8.mjs} +62 -39
- package/dist/_chunks/ListViewPage-BxLVROX8.mjs.map +1 -0
- package/dist/_chunks/{ListViewPage--lV5p8Qi.js → ListViewPage-DFDcG8gM.js} +62 -39
- package/dist/_chunks/ListViewPage-DFDcG8gM.js.map +1 -0
- package/dist/_chunks/{NoContentTypePage-C6SMXW77.mjs → NoContentTypePage-BRfDd67_.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-C6SMXW77.mjs.map → NoContentTypePage-BRfDd67_.mjs.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-Dxl9oZqL.js → NoContentTypePage-BSyvnDZZ.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-Dxl9oZqL.js.map → NoContentTypePage-BSyvnDZZ.js.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-o9BXzQeI.mjs → NoPermissionsPage-CV9V8KWa.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-o9BXzQeI.mjs.map → NoPermissionsPage-CV9V8KWa.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-BY1-rMng.js → NoPermissionsPage-DyLphsn_.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-BY1-rMng.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-BAK95JHc.mjs → Relations-C6pwmDXh.mjs} +44 -17
- package/dist/_chunks/Relations-C6pwmDXh.mjs.map +1 -0
- package/dist/_chunks/{Relations-CHfwGkBG.js → Relations-Cne2AlrL.js} +43 -16
- 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-CxlpxzA5.mjs → index-BpxR3En4.mjs} +179 -95
- package/dist/_chunks/index-BpxR3En4.mjs.map +1 -0
- package/dist/_chunks/{index-_Mlmsefd.js → index-T-aWjbj2.js} +176 -91
- 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-vcHVgSr1.js → layout-BEuNwv-F.js} +3 -3
- package/dist/_chunks/{layout-vcHVgSr1.js.map → layout-BEuNwv-F.js.map} +1 -1
- package/dist/_chunks/{layout-Cr0H40au.mjs → layout-DhMZ_lDx.mjs} +3 -3
- package/dist/_chunks/{layout-Cr0H40au.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-Dq60voyX.mjs → relations-BdnxoX6f.mjs} +6 -7
- package/dist/_chunks/relations-BdnxoX6f.mjs.map +1 -0
- package/dist/_chunks/{relations-hXUB80SH.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/index.d.ts +1 -1
- 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 +384 -150
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +385 -151
- package/dist/server/index.mjs.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/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.map +1 -1
- 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 +9 -9
- package/dist/_chunks/EditViewPage-OMv9CogC.js.map +0 -1
- package/dist/_chunks/EditViewPage-foKE8Al3.mjs.map +0 -1
- package/dist/_chunks/Field-CLqZcnnc.mjs.map +0 -1
- package/dist/_chunks/Field-u09MCk3G.js.map +0 -1
- package/dist/_chunks/History-BFyFzpSS.mjs.map +0 -1
- package/dist/_chunks/History-OlickLyX.js.map +0 -1
- package/dist/_chunks/ListConfigurationPage-Bu5Z_39o.mjs.map +0 -1
- package/dist/_chunks/ListConfigurationPage-D0AAi_cW.js.map +0 -1
- package/dist/_chunks/ListViewPage--lV5p8Qi.js.map +0 -1
- package/dist/_chunks/ListViewPage-BAHxSPux.mjs.map +0 -1
- package/dist/_chunks/Relations-BAK95JHc.mjs.map +0 -1
- package/dist/_chunks/Relations-CHfwGkBG.js.map +0 -1
- package/dist/_chunks/index-CxlpxzA5.mjs.map +0 -1
- package/dist/_chunks/index-_Mlmsefd.js.map +0 -1
- package/dist/_chunks/relations-Dq60voyX.mjs.map +0 -1
- package/dist/_chunks/relations-hXUB80SH.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 = {
|
@@ -676,14 +697,14 @@ const getFeature$1 = () => {
|
|
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 {
|
@@ -693,33 +714,217 @@ const getFeature$1 = () => {
|
|
693
714
|
};
|
694
715
|
};
|
695
716
|
const history = getFeature$1();
|
696
|
-
const
|
697
|
-
|
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
|
+
]
|
698
732
|
};
|
699
|
-
const
|
700
|
-
|
701
|
-
|
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
|
702
893
|
};
|
703
|
-
const FEATURE_ID = "preview";
|
704
894
|
const getFeature = () => {
|
705
895
|
if (!strapi.features.future.isEnabled(FEATURE_ID)) {
|
706
896
|
return {};
|
707
897
|
}
|
708
898
|
return {
|
899
|
+
register() {
|
900
|
+
const config = getService(strapi, "preview-config");
|
901
|
+
config.validate();
|
902
|
+
config.register();
|
903
|
+
},
|
709
904
|
bootstrap() {
|
710
|
-
|
711
|
-
|
905
|
+
},
|
906
|
+
routes: routes$1,
|
907
|
+
controllers: controllers$1,
|
908
|
+
services: services$1
|
712
909
|
};
|
713
910
|
};
|
714
911
|
const preview = getFeature();
|
912
|
+
const register = async ({ strapi: strapi2 }) => {
|
913
|
+
await history.register?.({ strapi: strapi2 });
|
914
|
+
await preview.register?.({ strapi: strapi2 });
|
915
|
+
};
|
916
|
+
const ALLOWED_WEBHOOK_EVENTS = {
|
917
|
+
ENTRY_PUBLISH: "entry.publish",
|
918
|
+
ENTRY_UNPUBLISH: "entry.unpublish"
|
919
|
+
};
|
715
920
|
const bootstrap = async () => {
|
716
921
|
Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {
|
717
922
|
strapi.get("webhookStore").addAllowedEvent(key, value);
|
718
923
|
});
|
719
|
-
getService$
|
720
|
-
await getService$
|
721
|
-
await getService$
|
722
|
-
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();
|
723
928
|
await history.bootstrap?.({ strapi });
|
724
929
|
await preview.bootstrap?.({ strapi });
|
725
930
|
};
|
@@ -1211,7 +1416,8 @@ const admin = {
|
|
1211
1416
|
};
|
1212
1417
|
const routes = {
|
1213
1418
|
admin,
|
1214
|
-
...history.routes ? history.routes : {}
|
1419
|
+
...history.routes ? history.routes : {},
|
1420
|
+
...preview.routes ? preview.routes : {}
|
1215
1421
|
};
|
1216
1422
|
const hasPermissionsSchema = yup$1.object({
|
1217
1423
|
actions: yup$1.array().of(yup$1.string()),
|
@@ -1468,7 +1674,7 @@ const createMetadasSchema = (schema) => {
|
|
1468
1674
|
if (!value) {
|
1469
1675
|
return yup$1.string();
|
1470
1676
|
}
|
1471
|
-
const targetSchema = getService$
|
1677
|
+
const targetSchema = getService$2("content-types").findContentType(
|
1472
1678
|
schema.attributes[key].targetModel
|
1473
1679
|
);
|
1474
1680
|
if (!targetSchema) {
|
@@ -1637,7 +1843,7 @@ const getDocumentLocaleAndStatus = async (request, model, opts = { allowMultiple
|
|
1637
1843
|
}
|
1638
1844
|
};
|
1639
1845
|
const formatDocumentWithMetadata = async (permissionChecker2, uid2, document, opts = {}) => {
|
1640
|
-
const documentMetadata2 = getService$
|
1846
|
+
const documentMetadata2 = getService$2("document-metadata");
|
1641
1847
|
const serviceOutput = await documentMetadata2.formatDocumentWithMetadata(uid2, document, opts);
|
1642
1848
|
let {
|
1643
1849
|
meta: { availableLocales, availableStatus }
|
@@ -1663,8 +1869,8 @@ const createDocument = async (ctx, opts) => {
|
|
1663
1869
|
const { userAbility, user } = ctx.state;
|
1664
1870
|
const { model } = ctx.params;
|
1665
1871
|
const { body } = ctx.request;
|
1666
|
-
const documentManager2 = getService$
|
1667
|
-
const permissionChecker2 = getService$
|
1872
|
+
const documentManager2 = getService$2("document-manager");
|
1873
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1668
1874
|
if (permissionChecker2.cannot.create()) {
|
1669
1875
|
throw new errors.ForbiddenError();
|
1670
1876
|
}
|
@@ -1684,13 +1890,13 @@ const updateDocument = async (ctx, opts) => {
|
|
1684
1890
|
const { userAbility, user } = ctx.state;
|
1685
1891
|
const { id, model } = ctx.params;
|
1686
1892
|
const { body } = ctx.request;
|
1687
|
-
const documentManager2 = getService$
|
1688
|
-
const permissionChecker2 = getService$
|
1893
|
+
const documentManager2 = getService$2("document-manager");
|
1894
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1689
1895
|
if (permissionChecker2.cannot.update()) {
|
1690
1896
|
throw new errors.ForbiddenError();
|
1691
1897
|
}
|
1692
1898
|
const permissionQuery = await permissionChecker2.sanitizedQuery.update(ctx.query);
|
1693
|
-
const populate = await getService$
|
1899
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1694
1900
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1695
1901
|
const [documentVersion, documentExists] = await Promise.all([
|
1696
1902
|
documentManager2.findOne(id, model, { populate, locale, status: "draft" }),
|
@@ -1721,14 +1927,14 @@ const collectionTypes = {
|
|
1721
1927
|
const { userAbility } = ctx.state;
|
1722
1928
|
const { model } = ctx.params;
|
1723
1929
|
const { query } = ctx.request;
|
1724
|
-
const documentMetadata2 = getService$
|
1725
|
-
const documentManager2 = getService$
|
1726
|
-
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 });
|
1727
1933
|
if (permissionChecker2.cannot.read()) {
|
1728
1934
|
return ctx.forbidden();
|
1729
1935
|
}
|
1730
1936
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(query);
|
1731
|
-
const populate = await getService$
|
1937
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(1).countRelations({ toOne: false, toMany: true }).build();
|
1732
1938
|
const { locale, status } = await getDocumentLocaleAndStatus(query, model);
|
1733
1939
|
const { results: documents, pagination: pagination2 } = await documentManager2.findPage(
|
1734
1940
|
{ ...permissionQuery, populate, locale, status },
|
@@ -1757,13 +1963,13 @@ const collectionTypes = {
|
|
1757
1963
|
async findOne(ctx) {
|
1758
1964
|
const { userAbility } = ctx.state;
|
1759
1965
|
const { model, id } = ctx.params;
|
1760
|
-
const documentManager2 = getService$
|
1761
|
-
const permissionChecker2 = getService$
|
1966
|
+
const documentManager2 = getService$2("document-manager");
|
1967
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1762
1968
|
if (permissionChecker2.cannot.read()) {
|
1763
1969
|
return ctx.forbidden();
|
1764
1970
|
}
|
1765
1971
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
1766
|
-
const populate = await getService$
|
1972
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1767
1973
|
const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);
|
1768
1974
|
const version = await documentManager2.findOne(id, model, {
|
1769
1975
|
populate,
|
@@ -1794,7 +2000,7 @@ const collectionTypes = {
|
|
1794
2000
|
async create(ctx) {
|
1795
2001
|
const { userAbility } = ctx.state;
|
1796
2002
|
const { model } = ctx.params;
|
1797
|
-
const permissionChecker2 = getService$
|
2003
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1798
2004
|
const [totalEntries, document] = await Promise.all([
|
1799
2005
|
strapi.db.query(model).count(),
|
1800
2006
|
createDocument(ctx)
|
@@ -1815,7 +2021,7 @@ const collectionTypes = {
|
|
1815
2021
|
async update(ctx) {
|
1816
2022
|
const { userAbility } = ctx.state;
|
1817
2023
|
const { model } = ctx.params;
|
1818
|
-
const permissionChecker2 = getService$
|
2024
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1819
2025
|
const updatedVersion = await updateDocument(ctx);
|
1820
2026
|
const sanitizedVersion = await permissionChecker2.sanitizeOutput(updatedVersion);
|
1821
2027
|
ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedVersion);
|
@@ -1824,13 +2030,13 @@ const collectionTypes = {
|
|
1824
2030
|
const { userAbility, user } = ctx.state;
|
1825
2031
|
const { model, sourceId: id } = ctx.params;
|
1826
2032
|
const { body } = ctx.request;
|
1827
|
-
const documentManager2 = getService$
|
1828
|
-
const permissionChecker2 = getService$
|
2033
|
+
const documentManager2 = getService$2("document-manager");
|
2034
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1829
2035
|
if (permissionChecker2.cannot.create()) {
|
1830
2036
|
return ctx.forbidden();
|
1831
2037
|
}
|
1832
2038
|
const permissionQuery = await permissionChecker2.sanitizedQuery.create(ctx.query);
|
1833
|
-
const populate = await getService$
|
2039
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1834
2040
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1835
2041
|
const document = await documentManager2.findOne(id, model, {
|
1836
2042
|
populate,
|
@@ -1869,13 +2075,13 @@ const collectionTypes = {
|
|
1869
2075
|
async delete(ctx) {
|
1870
2076
|
const { userAbility } = ctx.state;
|
1871
2077
|
const { id, model } = ctx.params;
|
1872
|
-
const documentManager2 = getService$
|
1873
|
-
const permissionChecker2 = getService$
|
2078
|
+
const documentManager2 = getService$2("document-manager");
|
2079
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1874
2080
|
if (permissionChecker2.cannot.delete()) {
|
1875
2081
|
return ctx.forbidden();
|
1876
2082
|
}
|
1877
2083
|
const permissionQuery = await permissionChecker2.sanitizedQuery.delete(ctx.query);
|
1878
|
-
const populate = await getService$
|
2084
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1879
2085
|
const { locale } = await getDocumentLocaleAndStatus(ctx.query, model);
|
1880
2086
|
const documentLocales = await documentManager2.findLocales(id, model, { populate, locale });
|
1881
2087
|
if (documentLocales.length === 0) {
|
@@ -1897,14 +2103,14 @@ const collectionTypes = {
|
|
1897
2103
|
const { userAbility } = ctx.state;
|
1898
2104
|
const { id, model } = ctx.params;
|
1899
2105
|
const { body } = ctx.request;
|
1900
|
-
const documentManager2 = getService$
|
1901
|
-
const permissionChecker2 = getService$
|
2106
|
+
const documentManager2 = getService$2("document-manager");
|
2107
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1902
2108
|
if (permissionChecker2.cannot.publish()) {
|
1903
2109
|
return ctx.forbidden();
|
1904
2110
|
}
|
1905
2111
|
const publishedDocument = await strapi.db.transaction(async () => {
|
1906
2112
|
const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
|
1907
|
-
const populate = await getService$
|
2113
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1908
2114
|
let document;
|
1909
2115
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1910
2116
|
const isCreate = isNil$1(id);
|
@@ -1952,13 +2158,13 @@ const collectionTypes = {
|
|
1952
2158
|
const { body } = ctx.request;
|
1953
2159
|
const { documentIds } = body;
|
1954
2160
|
await validateBulkActionInput(body);
|
1955
|
-
const documentManager2 = getService$
|
1956
|
-
const permissionChecker2 = getService$
|
2161
|
+
const documentManager2 = getService$2("document-manager");
|
2162
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1957
2163
|
if (permissionChecker2.cannot.publish()) {
|
1958
2164
|
return ctx.forbidden();
|
1959
2165
|
}
|
1960
2166
|
const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
|
1961
|
-
const populate = await getService$
|
2167
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1962
2168
|
const { locale } = await getDocumentLocaleAndStatus(body, model, {
|
1963
2169
|
allowMultipleLocales: true
|
1964
2170
|
});
|
@@ -1983,8 +2189,8 @@ const collectionTypes = {
|
|
1983
2189
|
const { body } = ctx.request;
|
1984
2190
|
const { documentIds } = body;
|
1985
2191
|
await validateBulkActionInput(body);
|
1986
|
-
const documentManager2 = getService$
|
1987
|
-
const permissionChecker2 = getService$
|
2192
|
+
const documentManager2 = getService$2("document-manager");
|
2193
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1988
2194
|
if (permissionChecker2.cannot.unpublish()) {
|
1989
2195
|
return ctx.forbidden();
|
1990
2196
|
}
|
@@ -2013,8 +2219,8 @@ const collectionTypes = {
|
|
2013
2219
|
const {
|
2014
2220
|
body: { discardDraft, ...body }
|
2015
2221
|
} = ctx.request;
|
2016
|
-
const documentManager2 = getService$
|
2017
|
-
const permissionChecker2 = getService$
|
2222
|
+
const documentManager2 = getService$2("document-manager");
|
2223
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2018
2224
|
if (permissionChecker2.cannot.unpublish()) {
|
2019
2225
|
return ctx.forbidden();
|
2020
2226
|
}
|
@@ -2022,7 +2228,7 @@ const collectionTypes = {
|
|
2022
2228
|
return ctx.forbidden();
|
2023
2229
|
}
|
2024
2230
|
const permissionQuery = await permissionChecker2.sanitizedQuery.unpublish(ctx.query);
|
2025
|
-
const populate = await getService$
|
2231
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2026
2232
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2027
2233
|
const document = await documentManager2.findOne(id, model, {
|
2028
2234
|
populate,
|
@@ -2053,13 +2259,13 @@ const collectionTypes = {
|
|
2053
2259
|
const { userAbility } = ctx.state;
|
2054
2260
|
const { id, model } = ctx.params;
|
2055
2261
|
const { body } = ctx.request;
|
2056
|
-
const documentManager2 = getService$
|
2057
|
-
const permissionChecker2 = getService$
|
2262
|
+
const documentManager2 = getService$2("document-manager");
|
2263
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2058
2264
|
if (permissionChecker2.cannot.discard()) {
|
2059
2265
|
return ctx.forbidden();
|
2060
2266
|
}
|
2061
2267
|
const permissionQuery = await permissionChecker2.sanitizedQuery.discard(ctx.query);
|
2062
|
-
const populate = await getService$
|
2268
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2063
2269
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2064
2270
|
const document = await documentManager2.findOne(id, model, {
|
2065
2271
|
populate,
|
@@ -2084,13 +2290,13 @@ const collectionTypes = {
|
|
2084
2290
|
const { query, body } = ctx.request;
|
2085
2291
|
const { documentIds } = body;
|
2086
2292
|
await validateBulkActionInput(body);
|
2087
|
-
const documentManager2 = getService$
|
2088
|
-
const permissionChecker2 = getService$
|
2293
|
+
const documentManager2 = getService$2("document-manager");
|
2294
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2089
2295
|
if (permissionChecker2.cannot.delete()) {
|
2090
2296
|
return ctx.forbidden();
|
2091
2297
|
}
|
2092
2298
|
const permissionQuery = await permissionChecker2.sanitizedQuery.delete(query);
|
2093
|
-
const populate = await getService$
|
2299
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2094
2300
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2095
2301
|
const documentLocales = await documentManager2.findLocales(documentIds, model, {
|
2096
2302
|
populate,
|
@@ -2111,13 +2317,13 @@ const collectionTypes = {
|
|
2111
2317
|
async countDraftRelations(ctx) {
|
2112
2318
|
const { userAbility } = ctx.state;
|
2113
2319
|
const { model, id } = ctx.params;
|
2114
|
-
const documentManager2 = getService$
|
2115
|
-
const permissionChecker2 = getService$
|
2320
|
+
const documentManager2 = getService$2("document-manager");
|
2321
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2116
2322
|
if (permissionChecker2.cannot.read()) {
|
2117
2323
|
return ctx.forbidden();
|
2118
2324
|
}
|
2119
2325
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
2120
|
-
const populate = await getService$
|
2326
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2121
2327
|
const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);
|
2122
2328
|
const entity = await documentManager2.findOne(id, model, { populate, locale, status });
|
2123
2329
|
if (!entity) {
|
@@ -2136,8 +2342,8 @@ const collectionTypes = {
|
|
2136
2342
|
const ids = ctx.request.query.documentIds;
|
2137
2343
|
const locale = ctx.request.query.locale;
|
2138
2344
|
const { model } = ctx.params;
|
2139
|
-
const documentManager2 = getService$
|
2140
|
-
const permissionChecker2 = getService$
|
2345
|
+
const documentManager2 = getService$2("document-manager");
|
2346
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2141
2347
|
if (permissionChecker2.cannot.read()) {
|
2142
2348
|
return ctx.forbidden();
|
2143
2349
|
}
|
@@ -2161,13 +2367,13 @@ const collectionTypes = {
|
|
2161
2367
|
};
|
2162
2368
|
const components$1 = {
|
2163
2369
|
findComponents(ctx) {
|
2164
|
-
const components2 = getService$
|
2165
|
-
const { toDto } = getService$
|
2370
|
+
const components2 = getService$2("components").findAllComponents();
|
2371
|
+
const { toDto } = getService$2("data-mapper");
|
2166
2372
|
ctx.body = { data: components2.map(toDto) };
|
2167
2373
|
},
|
2168
2374
|
async findComponentConfiguration(ctx) {
|
2169
2375
|
const { uid: uid2 } = ctx.params;
|
2170
|
-
const componentService = getService$
|
2376
|
+
const componentService = getService$2("components");
|
2171
2377
|
const component = componentService.findComponent(uid2);
|
2172
2378
|
if (!component) {
|
2173
2379
|
return ctx.notFound("component.notFound");
|
@@ -2184,7 +2390,7 @@ const components$1 = {
|
|
2184
2390
|
async updateComponentConfiguration(ctx) {
|
2185
2391
|
const { uid: uid2 } = ctx.params;
|
2186
2392
|
const { body } = ctx.request;
|
2187
|
-
const componentService = getService$
|
2393
|
+
const componentService = getService$2("components");
|
2188
2394
|
const component = componentService.findComponent(uid2);
|
2189
2395
|
if (!component) {
|
2190
2396
|
return ctx.notFound("component.notFound");
|
@@ -2218,12 +2424,12 @@ const contentTypes = {
|
|
2218
2424
|
} catch (error) {
|
2219
2425
|
return ctx.send({ error }, 400);
|
2220
2426
|
}
|
2221
|
-
const contentTypes2 = getService$
|
2222
|
-
const { toDto } = getService$
|
2427
|
+
const contentTypes2 = getService$2("content-types").findContentTypesByKind(kind);
|
2428
|
+
const { toDto } = getService$2("data-mapper");
|
2223
2429
|
ctx.body = { data: contentTypes2.map(toDto) };
|
2224
2430
|
},
|
2225
2431
|
async findContentTypesSettings(ctx) {
|
2226
|
-
const { findAllContentTypes, findConfiguration } = getService$
|
2432
|
+
const { findAllContentTypes, findConfiguration } = getService$2("content-types");
|
2227
2433
|
const contentTypes2 = await findAllContentTypes();
|
2228
2434
|
const configurations = await Promise.all(
|
2229
2435
|
contentTypes2.map(async (contentType) => {
|
@@ -2237,7 +2443,7 @@ const contentTypes = {
|
|
2237
2443
|
},
|
2238
2444
|
async findContentTypeConfiguration(ctx) {
|
2239
2445
|
const { uid: uid2 } = ctx.params;
|
2240
|
-
const contentTypeService = getService$
|
2446
|
+
const contentTypeService = getService$2("content-types");
|
2241
2447
|
const contentType = await contentTypeService.findContentType(uid2);
|
2242
2448
|
if (!contentType) {
|
2243
2449
|
return ctx.notFound("contentType.notFound");
|
@@ -2259,13 +2465,13 @@ const contentTypes = {
|
|
2259
2465
|
const { userAbility } = ctx.state;
|
2260
2466
|
const { uid: uid2 } = ctx.params;
|
2261
2467
|
const { body } = ctx.request;
|
2262
|
-
const contentTypeService = getService$
|
2263
|
-
const metricsService = getService$
|
2468
|
+
const contentTypeService = getService$2("content-types");
|
2469
|
+
const metricsService = getService$2("metrics");
|
2264
2470
|
const contentType = await contentTypeService.findContentType(uid2);
|
2265
2471
|
if (!contentType) {
|
2266
2472
|
return ctx.notFound("contentType.notFound");
|
2267
2473
|
}
|
2268
|
-
if (!getService$
|
2474
|
+
if (!getService$2("permission").canConfigureContentType({ userAbility, contentType })) {
|
2269
2475
|
return ctx.forbidden();
|
2270
2476
|
}
|
2271
2477
|
let input;
|
@@ -2298,10 +2504,10 @@ const contentTypes = {
|
|
2298
2504
|
};
|
2299
2505
|
const init = {
|
2300
2506
|
getInitData(ctx) {
|
2301
|
-
const { toDto } = getService$
|
2302
|
-
const { findAllComponents } = getService$
|
2303
|
-
const { getAllFieldSizes } = getService$
|
2304
|
-
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");
|
2305
2511
|
ctx.body = {
|
2306
2512
|
data: {
|
2307
2513
|
fieldSizes: getAllFieldSizes(),
|
@@ -2337,7 +2543,7 @@ const addFiltersClause = (params, filtersClause) => {
|
|
2337
2543
|
params.filters.$and.push(filtersClause);
|
2338
2544
|
};
|
2339
2545
|
const sanitizeMainField = (model, mainField, userAbility) => {
|
2340
|
-
const permissionChecker2 = getService$
|
2546
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2341
2547
|
userAbility,
|
2342
2548
|
model: model.uid
|
2343
2549
|
});
|
@@ -2351,15 +2557,27 @@ const sanitizeMainField = (model, mainField, userAbility) => {
|
|
2351
2557
|
}
|
2352
2558
|
return mainField;
|
2353
2559
|
};
|
2354
|
-
const addStatusToRelations = async (
|
2355
|
-
if (!contentTypes$1.hasDraftAndPublish(strapi.
|
2560
|
+
const addStatusToRelations = async (targetUid, relations2) => {
|
2561
|
+
if (!contentTypes$1.hasDraftAndPublish(strapi.getModel(targetUid))) {
|
2562
|
+
return relations2;
|
2563
|
+
}
|
2564
|
+
const documentMetadata2 = getService$2("document-metadata");
|
2565
|
+
if (!relations2.length) {
|
2356
2566
|
return relations2;
|
2357
2567
|
}
|
2358
|
-
const
|
2359
|
-
const
|
2568
|
+
const firstRelation = relations2[0];
|
2569
|
+
const filters = {
|
2570
|
+
documentId: { $in: relations2.map((r) => r.documentId) },
|
2571
|
+
// NOTE: find the "opposite" status
|
2572
|
+
publishedAt: firstRelation.publishedAt !== null ? { $null: true } : { $notNull: true }
|
2573
|
+
};
|
2574
|
+
const availableStatus = await strapi.query(targetUid).findMany({
|
2575
|
+
select: ["id", "documentId", "locale", "updatedAt", "createdAt", "publishedAt"],
|
2576
|
+
filters
|
2577
|
+
});
|
2360
2578
|
return relations2.map((relation) => {
|
2361
|
-
const availableStatuses =
|
2362
|
-
(availableDocument) => availableDocument.documentId === relation.documentId
|
2579
|
+
const availableStatuses = availableStatus.filter(
|
2580
|
+
(availableDocument) => availableDocument.documentId === relation.documentId && (relation.locale ? availableDocument.locale === relation.locale : true)
|
2363
2581
|
);
|
2364
2582
|
return {
|
2365
2583
|
...relation,
|
@@ -2421,7 +2639,7 @@ const relations = {
|
|
2421
2639
|
ctx.request?.query?.locale
|
2422
2640
|
);
|
2423
2641
|
const { status } = validateStatus(sourceUid, ctx.request?.query?.status);
|
2424
|
-
const permissionChecker2 = getService$
|
2642
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2425
2643
|
userAbility,
|
2426
2644
|
model
|
2427
2645
|
});
|
@@ -2446,7 +2664,7 @@ const relations = {
|
|
2446
2664
|
where.id = id;
|
2447
2665
|
}
|
2448
2666
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
2449
|
-
const populate = await getService$
|
2667
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2450
2668
|
const currentEntity = await strapi.db.query(model).findOne({
|
2451
2669
|
where,
|
2452
2670
|
populate
|
@@ -2461,7 +2679,7 @@ const relations = {
|
|
2461
2679
|
}
|
2462
2680
|
entryId = currentEntity.id;
|
2463
2681
|
}
|
2464
|
-
const modelConfig = isComponent2 ? await getService$
|
2682
|
+
const modelConfig = isComponent2 ? await getService$2("components").findConfiguration(sourceSchema) : await getService$2("content-types").findConfiguration(sourceSchema);
|
2465
2683
|
const targetSchema = strapi.getModel(targetUid);
|
2466
2684
|
const mainField = flow(
|
2467
2685
|
prop(`metadatas.${targetField}.edit.mainField`),
|
@@ -2515,7 +2733,7 @@ const relations = {
|
|
2515
2733
|
}
|
2516
2734
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2517
2735
|
const { idsToOmit, idsToInclude, _q, ...query } = ctx.request.query;
|
2518
|
-
const permissionChecker2 = getService$
|
2736
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2519
2737
|
userAbility: ctx.state.userAbility,
|
2520
2738
|
model: targetUid
|
2521
2739
|
});
|
@@ -2588,21 +2806,33 @@ const relations = {
|
|
2588
2806
|
attribute,
|
2589
2807
|
targetField,
|
2590
2808
|
fieldsToSelect,
|
2591
|
-
|
2592
|
-
|
2593
|
-
}
|
2594
|
-
target: {
|
2595
|
-
schema: { uid: targetUid }
|
2596
|
-
}
|
2809
|
+
status,
|
2810
|
+
source: { schema: sourceSchema },
|
2811
|
+
target: { schema: targetSchema }
|
2597
2812
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2598
|
-
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 });
|
2599
2816
|
const dbQuery = strapi.db.query(sourceUid);
|
2600
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
|
+
}
|
2601
2830
|
const res = await loadRelations({ id: entryId }, targetField, {
|
2602
|
-
select: ["id", "documentId", "locale", "publishedAt"],
|
2831
|
+
select: ["id", "documentId", "locale", "publishedAt", "updatedAt"],
|
2603
2832
|
ordering: "desc",
|
2604
2833
|
page: ctx.request.query.page,
|
2605
|
-
pageSize: ctx.request.query.pageSize
|
2834
|
+
pageSize: ctx.request.query.pageSize,
|
2835
|
+
filters
|
2606
2836
|
});
|
2607
2837
|
const loadedIds = res.results.map((item) => item.id);
|
2608
2838
|
addFiltersClause(permissionQuery, { id: { $in: loadedIds } });
|
@@ -2623,10 +2853,10 @@ const relations = {
|
|
2623
2853
|
}
|
2624
2854
|
};
|
2625
2855
|
const buildPopulateFromQuery = async (query, model) => {
|
2626
|
-
return getService$
|
2856
|
+
return getService$2("populate-builder")(model).populateFromQuery(query).populateDeep(Infinity).countRelations().build();
|
2627
2857
|
};
|
2628
2858
|
const findDocument = async (query, uid2, opts = {}) => {
|
2629
|
-
const documentManager2 = getService$
|
2859
|
+
const documentManager2 = getService$2("document-manager");
|
2630
2860
|
const populate = await buildPopulateFromQuery(query, uid2);
|
2631
2861
|
return documentManager2.findMany({ ...opts, populate }, uid2).then((documents) => documents[0]);
|
2632
2862
|
};
|
@@ -2634,8 +2864,8 @@ const createOrUpdateDocument = async (ctx, opts) => {
|
|
2634
2864
|
const { user, userAbility } = ctx.state;
|
2635
2865
|
const { model } = ctx.params;
|
2636
2866
|
const { body, query } = ctx.request;
|
2637
|
-
const documentManager2 = getService$
|
2638
|
-
const permissionChecker2 = getService$
|
2867
|
+
const documentManager2 = getService$2("document-manager");
|
2868
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2639
2869
|
if (permissionChecker2.cannot.create() && permissionChecker2.cannot.update()) {
|
2640
2870
|
throw new errors.ForbiddenError();
|
2641
2871
|
}
|
@@ -2676,7 +2906,7 @@ const singleTypes = {
|
|
2676
2906
|
const { userAbility } = ctx.state;
|
2677
2907
|
const { model } = ctx.params;
|
2678
2908
|
const { query = {} } = ctx.request;
|
2679
|
-
const permissionChecker2 = getService$
|
2909
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2680
2910
|
if (permissionChecker2.cannot.read()) {
|
2681
2911
|
return ctx.forbidden();
|
2682
2912
|
}
|
@@ -2710,7 +2940,7 @@ const singleTypes = {
|
|
2710
2940
|
async createOrUpdate(ctx) {
|
2711
2941
|
const { userAbility } = ctx.state;
|
2712
2942
|
const { model } = ctx.params;
|
2713
|
-
const permissionChecker2 = getService$
|
2943
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2714
2944
|
const document = await createOrUpdateDocument(ctx);
|
2715
2945
|
const sanitizedDocument = await permissionChecker2.sanitizeOutput(document);
|
2716
2946
|
ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedDocument);
|
@@ -2719,8 +2949,8 @@ const singleTypes = {
|
|
2719
2949
|
const { userAbility } = ctx.state;
|
2720
2950
|
const { model } = ctx.params;
|
2721
2951
|
const { query = {} } = ctx.request;
|
2722
|
-
const documentManager2 = getService$
|
2723
|
-
const permissionChecker2 = getService$
|
2952
|
+
const documentManager2 = getService$2("document-manager");
|
2953
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2724
2954
|
if (permissionChecker2.cannot.delete()) {
|
2725
2955
|
return ctx.forbidden();
|
2726
2956
|
}
|
@@ -2748,8 +2978,8 @@ const singleTypes = {
|
|
2748
2978
|
const { userAbility } = ctx.state;
|
2749
2979
|
const { model } = ctx.params;
|
2750
2980
|
const { query = {} } = ctx.request;
|
2751
|
-
const documentManager2 = getService$
|
2752
|
-
const permissionChecker2 = getService$
|
2981
|
+
const documentManager2 = getService$2("document-manager");
|
2982
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2753
2983
|
if (permissionChecker2.cannot.publish()) {
|
2754
2984
|
return ctx.forbidden();
|
2755
2985
|
}
|
@@ -2777,8 +3007,8 @@ const singleTypes = {
|
|
2777
3007
|
body: { discardDraft, ...body },
|
2778
3008
|
query = {}
|
2779
3009
|
} = ctx.request;
|
2780
|
-
const documentManager2 = getService$
|
2781
|
-
const permissionChecker2 = getService$
|
3010
|
+
const documentManager2 = getService$2("document-manager");
|
3011
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2782
3012
|
if (permissionChecker2.cannot.unpublish()) {
|
2783
3013
|
return ctx.forbidden();
|
2784
3014
|
}
|
@@ -2812,8 +3042,8 @@ const singleTypes = {
|
|
2812
3042
|
const { userAbility } = ctx.state;
|
2813
3043
|
const { model } = ctx.params;
|
2814
3044
|
const { body, query = {} } = ctx.request;
|
2815
|
-
const documentManager2 = getService$
|
2816
|
-
const permissionChecker2 = getService$
|
3045
|
+
const documentManager2 = getService$2("document-manager");
|
3046
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2817
3047
|
if (permissionChecker2.cannot.discard()) {
|
2818
3048
|
return ctx.forbidden();
|
2819
3049
|
}
|
@@ -2836,8 +3066,8 @@ const singleTypes = {
|
|
2836
3066
|
const { userAbility } = ctx.state;
|
2837
3067
|
const { model } = ctx.params;
|
2838
3068
|
const { query } = ctx.request;
|
2839
|
-
const documentManager2 = getService$
|
2840
|
-
const permissionChecker2 = getService$
|
3069
|
+
const documentManager2 = getService$2("document-manager");
|
3070
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2841
3071
|
const { locale } = await getDocumentLocaleAndStatus(query, model);
|
2842
3072
|
if (permissionChecker2.cannot.read()) {
|
2843
3073
|
return ctx.forbidden();
|
@@ -2861,7 +3091,7 @@ const uid$1 = {
|
|
2861
3091
|
const { query = {} } = ctx.request;
|
2862
3092
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2863
3093
|
await validateUIDField(contentTypeUID, field);
|
2864
|
-
const uidService = getService$
|
3094
|
+
const uidService = getService$2("uid");
|
2865
3095
|
ctx.body = {
|
2866
3096
|
data: await uidService.generateUIDField({ contentTypeUID, field, data, locale })
|
2867
3097
|
};
|
@@ -2873,7 +3103,7 @@ const uid$1 = {
|
|
2873
3103
|
const { query = {} } = ctx.request;
|
2874
3104
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2875
3105
|
await validateUIDField(contentTypeUID, field);
|
2876
|
-
const uidService = getService$
|
3106
|
+
const uidService = getService$2("uid");
|
2877
3107
|
const isAvailable = await uidService.checkUIDAvailability({
|
2878
3108
|
contentTypeUID,
|
2879
3109
|
field,
|
@@ -2894,7 +3124,8 @@ const controllers = {
|
|
2894
3124
|
relations,
|
2895
3125
|
"single-types": singleTypes,
|
2896
3126
|
uid: uid$1,
|
2897
|
-
...history.controllers ? history.controllers : {}
|
3127
|
+
...history.controllers ? history.controllers : {},
|
3128
|
+
...preview.controllers ? preview.controllers : {}
|
2898
3129
|
};
|
2899
3130
|
const keys = {
|
2900
3131
|
CONFIGURATION: "configuration"
|
@@ -3045,12 +3276,12 @@ async function syncMetadatas(configuration, schema) {
|
|
3045
3276
|
return _.assign(metasWithDefaults, updatedMetas);
|
3046
3277
|
}
|
3047
3278
|
const getTargetSchema = (targetModel) => {
|
3048
|
-
return getService$
|
3279
|
+
return getService$2("content-types").findContentType(targetModel);
|
3049
3280
|
};
|
3050
3281
|
const DEFAULT_LIST_LENGTH = 4;
|
3051
3282
|
const MAX_ROW_SIZE = 12;
|
3052
3283
|
const isAllowedFieldSize = (type, size) => {
|
3053
|
-
const { getFieldSize } = getService$
|
3284
|
+
const { getFieldSize } = getService$2("field-sizes");
|
3054
3285
|
const fieldSize = getFieldSize(type);
|
3055
3286
|
if (!fieldSize.isResizable && size !== fieldSize.default) {
|
3056
3287
|
return false;
|
@@ -3058,7 +3289,7 @@ const isAllowedFieldSize = (type, size) => {
|
|
3058
3289
|
return size <= MAX_ROW_SIZE;
|
3059
3290
|
};
|
3060
3291
|
const getDefaultFieldSize = (attribute) => {
|
3061
|
-
const { hasFieldSize, getFieldSize } = getService$
|
3292
|
+
const { hasFieldSize, getFieldSize } = getService$2("field-sizes");
|
3062
3293
|
return getFieldSize(hasFieldSize(attribute.customField) ? attribute.customField : attribute.type).default;
|
3063
3294
|
};
|
3064
3295
|
async function createDefaultLayouts(schema) {
|
@@ -3093,7 +3324,7 @@ function syncLayouts(configuration, schema) {
|
|
3093
3324
|
for (const el of row) {
|
3094
3325
|
if (!hasEditableAttribute(schema, el.name))
|
3095
3326
|
continue;
|
3096
|
-
const { hasFieldSize } = getService$
|
3327
|
+
const { hasFieldSize } = getService$2("field-sizes");
|
3097
3328
|
const fieldType = hasFieldSize(schema.attributes[el.name].customField) ? schema.attributes[el.name].customField : schema.attributes[el.name].type;
|
3098
3329
|
if (!isAllowedFieldSize(fieldType, el.size)) {
|
3099
3330
|
elementsToReAppend.push(el.name);
|
@@ -3233,17 +3464,17 @@ const configurationService$1 = createConfigurationService({
|
|
3233
3464
|
isComponent: true,
|
3234
3465
|
prefix: STORE_KEY_PREFIX,
|
3235
3466
|
getModels() {
|
3236
|
-
const { toContentManagerModel } = getService$
|
3467
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3237
3468
|
return mapValues(toContentManagerModel, strapi.components);
|
3238
3469
|
}
|
3239
3470
|
});
|
3240
3471
|
const components = ({ strapi: strapi2 }) => ({
|
3241
3472
|
findAllComponents() {
|
3242
|
-
const { toContentManagerModel } = getService$
|
3473
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3243
3474
|
return Object.values(strapi2.components).map(toContentManagerModel);
|
3244
3475
|
},
|
3245
3476
|
findComponent(uid2) {
|
3246
|
-
const { toContentManagerModel } = getService$
|
3477
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3247
3478
|
const component = strapi2.components[uid2];
|
3248
3479
|
return isNil$1(component) ? component : toContentManagerModel(component);
|
3249
3480
|
},
|
@@ -3294,17 +3525,17 @@ const configurationService = createConfigurationService({
|
|
3294
3525
|
storeUtils,
|
3295
3526
|
prefix: "content_types",
|
3296
3527
|
getModels() {
|
3297
|
-
const { toContentManagerModel } = getService$
|
3528
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3298
3529
|
return mapValues(toContentManagerModel, strapi.contentTypes);
|
3299
3530
|
}
|
3300
3531
|
});
|
3301
3532
|
const service = ({ strapi: strapi2 }) => ({
|
3302
3533
|
findAllContentTypes() {
|
3303
|
-
const { toContentManagerModel } = getService$
|
3534
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3304
3535
|
return Object.values(strapi2.contentTypes).map(toContentManagerModel);
|
3305
3536
|
},
|
3306
3537
|
findContentType(uid2) {
|
3307
|
-
const { toContentManagerModel } = getService$
|
3538
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3308
3539
|
const contentType = strapi2.contentTypes[uid2];
|
3309
3540
|
return isNil$1(contentType) ? contentType : toContentManagerModel(contentType);
|
3310
3541
|
},
|
@@ -3333,7 +3564,7 @@ const service = ({ strapi: strapi2 }) => ({
|
|
3333
3564
|
return this.findConfiguration(contentType);
|
3334
3565
|
},
|
3335
3566
|
findComponentsConfigurations(contentType) {
|
3336
|
-
return getService$
|
3567
|
+
return getService$2("components").findComponentsConfigurations(contentType);
|
3337
3568
|
},
|
3338
3569
|
syncConfigurations() {
|
3339
3570
|
return configurationService.syncConfigurations();
|
@@ -3605,7 +3836,7 @@ const permission = ({ strapi: strapi2 }) => ({
|
|
3605
3836
|
return userAbility.can(action);
|
3606
3837
|
},
|
3607
3838
|
async registerPermissions() {
|
3608
|
-
const displayedContentTypes = getService$
|
3839
|
+
const displayedContentTypes = getService$2("content-types").findDisplayedContentTypes();
|
3609
3840
|
const contentTypesUids = displayedContentTypes.map(prop("uid"));
|
3610
3841
|
const actions = [
|
3611
3842
|
{
|
@@ -3881,7 +4112,7 @@ const getQueryPopulate = async (uid2, query) => {
|
|
3881
4112
|
return populateQuery;
|
3882
4113
|
};
|
3883
4114
|
const buildDeepPopulate = (uid2) => {
|
3884
|
-
return getService$
|
4115
|
+
return getService$2("populate-builder")(uid2).populateDeep(Infinity).countRelations().build();
|
3885
4116
|
};
|
3886
4117
|
const populateBuilder = (uid2) => {
|
3887
4118
|
let getInitialPopulate = async () => {
|
@@ -4066,7 +4297,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4066
4297
|
*/
|
4067
4298
|
async getAvailableLocales(uid2, version, allVersions, validatableFields = []) {
|
4068
4299
|
const versionsByLocale = groupBy("locale", allVersions);
|
4069
|
-
|
4300
|
+
if (version.locale) {
|
4301
|
+
delete versionsByLocale[version.locale];
|
4302
|
+
}
|
4070
4303
|
const model = strapi2.getModel(uid2);
|
4071
4304
|
const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
|
4072
4305
|
const traversalFunction = async (localeVersion) => traverseEntity(
|
@@ -4422,7 +4655,8 @@ const services = {
|
|
4422
4655
|
permission,
|
4423
4656
|
"populate-builder": populateBuilder$1,
|
4424
4657
|
uid,
|
4425
|
-
...history.services ? history.services : {}
|
4658
|
+
...history.services ? history.services : {},
|
4659
|
+
...preview.services ? preview.services : {}
|
4426
4660
|
};
|
4427
4661
|
const index = () => {
|
4428
4662
|
return {
|