@strapi/content-manager 0.0.0-next.d2d15ef227d67cce89c2673764c0555c841cd29c → 0.0.0-next.d6ed4fcf2c833656b8c91a90909c1e77c79379e5
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/CardDragPreview-C0QyJgRA.js.map +1 -1
- package/dist/_chunks/CardDragPreview-DOxamsuj.mjs.map +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-DfFSZQxe.mjs → ComponentConfigurationPage-BgCLcjXO.mjs} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-DfFSZQxe.mjs.map → ComponentConfigurationPage-BgCLcjXO.mjs.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-FqfsxQ1j.js → ComponentConfigurationPage-DywpTZeV.js} +5 -6
- package/dist/_chunks/{ComponentConfigurationPage-FqfsxQ1j.js.map → ComponentConfigurationPage-DywpTZeV.js.map} +1 -1
- package/dist/_chunks/{ComponentIcon-BXdiCGQp.js → ComponentIcon-CRbtQEUV.js} +2 -3
- package/dist/_chunks/{ComponentIcon-BXdiCGQp.js.map → ComponentIcon-CRbtQEUV.js.map} +1 -1
- package/dist/_chunks/ComponentIcon-u4bIXTFY.mjs.map +1 -1
- package/dist/_chunks/{EditConfigurationPage-DdPNAbl3.mjs → EditConfigurationPage-BNjOAHNS.mjs} +4 -4
- package/dist/_chunks/{EditConfigurationPage-DdPNAbl3.mjs.map → EditConfigurationPage-BNjOAHNS.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-Cn0e8t3I.js → EditConfigurationPage-CxRlP5if.js} +5 -6
- package/dist/_chunks/{EditConfigurationPage-Cn0e8t3I.js.map → EditConfigurationPage-CxRlP5if.js.map} +1 -1
- package/dist/_chunks/{EditViewPage-DlxEHhUt.js → EditViewPage-BRewdTqE.js} +38 -9
- package/dist/_chunks/EditViewPage-BRewdTqE.js.map +1 -0
- package/dist/_chunks/{EditViewPage-B82x_x1b.mjs → EditViewPage-CD_hqc1J.mjs} +38 -8
- package/dist/_chunks/EditViewPage-CD_hqc1J.mjs.map +1 -0
- package/dist/_chunks/{Field-DufHXW17.mjs → Field-BPkQ-3Ku.mjs} +64 -64
- package/dist/_chunks/Field-BPkQ-3Ku.mjs.map +1 -0
- package/dist/_chunks/{Field-COL25JiC.js → Field-DwvmENVf.js} +65 -66
- package/dist/_chunks/Field-DwvmENVf.js.map +1 -0
- package/dist/_chunks/FieldTypeIcon-CMlNO8PE.mjs.map +1 -1
- package/dist/_chunks/FieldTypeIcon-Dnwq_IRF.js.map +1 -1
- package/dist/_chunks/{Form-BssUwrTO.js → Form-C_Gwv8P_.js} +5 -6
- package/dist/_chunks/{Form-BssUwrTO.js.map → Form-C_Gwv8P_.js.map} +1 -1
- package/dist/_chunks/{Form-u_kAOhwB.mjs → Form-Czi0cf_2.mjs} +3 -3
- package/dist/_chunks/{Form-u_kAOhwB.mjs.map → Form-Czi0cf_2.mjs.map} +1 -1
- package/dist/_chunks/{History-C9t9UqpO.js → History-C1TKAig-.js} +23 -94
- package/dist/_chunks/History-C1TKAig-.js.map +1 -0
- package/dist/_chunks/{History-DRwA3oMM.mjs → History-CIQHyi4T.mjs} +23 -93
- package/dist/_chunks/History-CIQHyi4T.mjs.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-BXYPohh-.js → ListConfigurationPage-D-NGRLYu.js} +7 -7
- package/dist/_chunks/ListConfigurationPage-D-NGRLYu.js.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-BxfQJzPk.mjs → ListConfigurationPage-DcZsfyEL.mjs} +7 -6
- package/dist/_chunks/ListConfigurationPage-DcZsfyEL.mjs.map +1 -0
- package/dist/_chunks/{ListViewPage-CELx2ysp.mjs → ListViewPage-C10McTK1.mjs} +62 -39
- package/dist/_chunks/ListViewPage-C10McTK1.mjs.map +1 -0
- package/dist/_chunks/{ListViewPage-D2VD8Szg.js → ListViewPage-xv5IQoZp.js} +63 -41
- package/dist/_chunks/ListViewPage-xv5IQoZp.js.map +1 -0
- package/dist/_chunks/{NoContentTypePage-DtJ9jcfk.mjs → NoContentTypePage-CPc0Cd3S.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-DtJ9jcfk.mjs.map → NoContentTypePage-CPc0Cd3S.mjs.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-BV9IjJSM.js → NoContentTypePage-Dzw5Yj5u.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-BV9IjJSM.js.map → NoContentTypePage-Dzw5Yj5u.js.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-Dp8NpF9I.js → NoPermissionsPage-DAe5CDCC.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-Dp8NpF9I.js.map → NoPermissionsPage-DAe5CDCC.js.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-DWleVYK7.mjs → NoPermissionsPage-wfPBh2_0.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-DWleVYK7.mjs.map → NoPermissionsPage-wfPBh2_0.mjs.map} +1 -1
- package/dist/_chunks/Preview-B7LyGT_b.js +290 -0
- package/dist/_chunks/Preview-B7LyGT_b.js.map +1 -0
- package/dist/_chunks/Preview-BVFFm7uB.mjs +272 -0
- package/dist/_chunks/Preview-BVFFm7uB.mjs.map +1 -0
- package/dist/_chunks/{Relations-DR7EUgyC.js → Relations-BmYR1AjY.js} +47 -23
- package/dist/_chunks/Relations-BmYR1AjY.js.map +1 -0
- package/dist/_chunks/{Relations-BTcf5xaw.mjs → Relations-JPhWxk-s.mjs} +47 -22
- package/dist/_chunks/Relations-JPhWxk-s.mjs.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/hooks-BAaaKPS_.js.map +1 -1
- package/dist/_chunks/{index-BdMf2lfT.js → index-C2Q_PLWj.js} +221 -106
- package/dist/_chunks/index-C2Q_PLWj.js.map +1 -0
- package/dist/_chunks/{index-wnqzm4Q8.mjs → index-DLIkNVnQ.mjs} +223 -108
- package/dist/_chunks/index-DLIkNVnQ.mjs.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-B2MyZU-_.js → layout-7AsWJzZJ.js} +5 -6
- package/dist/_chunks/{layout-B2MyZU-_.js.map → layout-7AsWJzZJ.js.map} +1 -1
- package/dist/_chunks/{layout-2CfjL0T9.mjs → layout-qE8qkNH_.mjs} +4 -4
- package/dist/_chunks/{layout-2CfjL0T9.mjs.map → layout-qE8qkNH_.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-C0w0GcXi.mjs → relations-BjHH_1Am.mjs} +6 -7
- package/dist/_chunks/relations-BjHH_1Am.mjs.map +1 -0
- package/dist/_chunks/{relations-BH7JJGGe.js → relations-EifVzf_2.js} +6 -7
- package/dist/_chunks/relations-EifVzf_2.js.map +1 -0
- package/dist/_chunks/useDebounce-CtcjDB3L.js.map +1 -1
- package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +1 -1
- package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js → useDragAndDrop-BMtgCYzL.js} +5 -9
- package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js.map → useDragAndDrop-BMtgCYzL.js.map} +1 -1
- package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs → useDragAndDrop-DJ6jqvZN.mjs} +4 -7
- package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs.map → useDragAndDrop-DJ6jqvZN.mjs.map} +1 -1
- 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 +409 -180
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +409 -179
- 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 +11 -11
- 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.js
CHANGED
@@ -10,8 +10,7 @@ const qs = require("qs");
|
|
10
10
|
const slugify = require("@sindresorhus/slugify");
|
11
11
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
12
12
|
function _interopNamespace(e) {
|
13
|
-
if (e && e.__esModule)
|
14
|
-
return e;
|
13
|
+
if (e && e.__esModule) return e;
|
15
14
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
16
15
|
if (e) {
|
17
16
|
for (const k in e) {
|
@@ -33,10 +32,10 @@ const isNil__default = /* @__PURE__ */ _interopDefault(isNil);
|
|
33
32
|
const ___default = /* @__PURE__ */ _interopDefault(_);
|
34
33
|
const qs__default = /* @__PURE__ */ _interopDefault(qs);
|
35
34
|
const slugify__default = /* @__PURE__ */ _interopDefault(slugify);
|
36
|
-
const getService$
|
35
|
+
const getService$2 = (name) => {
|
37
36
|
return strapi.plugin("content-manager").service(name);
|
38
37
|
};
|
39
|
-
function getService(strapi2, name) {
|
38
|
+
function getService$1(strapi2, name) {
|
40
39
|
return strapi2.service(`plugin::content-manager.${name}`);
|
41
40
|
}
|
42
41
|
const historyRestoreVersionSchema = yup__namespace.object().shape({
|
@@ -72,7 +71,7 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
72
71
|
if (!isSingleType && (!contentTypeUid || !ctx.query.documentId)) {
|
73
72
|
throw new strapiUtils.errors.ForbiddenError("contentType and documentId are required");
|
74
73
|
}
|
75
|
-
const permissionChecker2 = getService$
|
74
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
76
75
|
userAbility: ctx.state.userAbility,
|
77
76
|
model: ctx.query.contentType
|
78
77
|
});
|
@@ -80,7 +79,7 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
80
79
|
return ctx.forbidden();
|
81
80
|
}
|
82
81
|
const query = await permissionChecker2.sanitizeQuery(ctx.query);
|
83
|
-
const { results, pagination } = await getService(strapi2, "history").findVersionsPage({
|
82
|
+
const { results, pagination } = await getService$1(strapi2, "history").findVersionsPage({
|
84
83
|
query: {
|
85
84
|
...query,
|
86
85
|
...getValidPagination({ page: query.page, pageSize: query.pageSize })
|
@@ -105,14 +104,14 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
105
104
|
async restoreVersion(ctx) {
|
106
105
|
const request = ctx.request;
|
107
106
|
await validateRestoreVersion(request.body, "contentType is required");
|
108
|
-
const permissionChecker2 = getService$
|
107
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
109
108
|
userAbility: ctx.state.userAbility,
|
110
109
|
model: request.body.contentType
|
111
110
|
});
|
112
111
|
if (permissionChecker2.cannot.update()) {
|
113
112
|
throw new strapiUtils.errors.ForbiddenError();
|
114
113
|
}
|
115
|
-
const restoredDocument = await getService(strapi2, "history").restoreVersion(
|
114
|
+
const restoredDocument = await getService$1(strapi2, "history").restoreVersion(
|
116
115
|
request.params.versionId
|
117
116
|
);
|
118
117
|
return {
|
@@ -121,7 +120,7 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
121
120
|
}
|
122
121
|
};
|
123
122
|
};
|
124
|
-
const controllers$
|
123
|
+
const controllers$2 = {
|
125
124
|
"history-version": createHistoryVersionController
|
126
125
|
/**
|
127
126
|
* Casting is needed because the types aren't aware that Strapi supports
|
@@ -167,8 +166,7 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
167
166
|
};
|
168
167
|
const getRelationRestoreValue = async (versionRelationData, attribute) => {
|
169
168
|
if (Array.isArray(versionRelationData)) {
|
170
|
-
if (versionRelationData.length === 0)
|
171
|
-
return versionRelationData;
|
169
|
+
if (versionRelationData.length === 0) return versionRelationData;
|
172
170
|
const existingAndMissingRelations = await Promise.all(
|
173
171
|
versionRelationData.map((relation) => {
|
174
172
|
return strapi2.documents(attribute.target).findOne({
|
@@ -203,8 +201,7 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
203
201
|
const getDefaultLocale = async () => localesService ? localesService.getDefaultLocale() : null;
|
204
202
|
const isLocalizedContentType = (model) => i18nContentTypeService ? i18nContentTypeService.isLocalizedContentType(model) : false;
|
205
203
|
const getLocaleDictionary = async () => {
|
206
|
-
if (!localesService)
|
207
|
-
return {};
|
204
|
+
if (!localesService) return {};
|
208
205
|
const locales = await localesService.find() || [];
|
209
206
|
return locales.reduce(
|
210
207
|
(acc, locale) => {
|
@@ -228,6 +225,17 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
228
225
|
const meta = await documentMetadataService.getMetadata(contentTypeUid, document);
|
229
226
|
return documentMetadataService.getStatus(document, meta.availableStatus);
|
230
227
|
};
|
228
|
+
const getComponentFields = (componentUID) => {
|
229
|
+
return Object.entries(strapi2.getModel(componentUID).attributes).reduce(
|
230
|
+
(fieldsAcc, [key, attribute]) => {
|
231
|
+
if (!["relation", "media", "component", "dynamiczone"].includes(attribute.type)) {
|
232
|
+
fieldsAcc.push(key);
|
233
|
+
}
|
234
|
+
return fieldsAcc;
|
235
|
+
},
|
236
|
+
[]
|
237
|
+
);
|
238
|
+
};
|
231
239
|
const getDeepPopulate2 = (uid2, useDatabaseSyntax = false) => {
|
232
240
|
const model = strapi2.getModel(uid2);
|
233
241
|
const attributes = Object.entries(model.attributes);
|
@@ -251,13 +259,19 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
251
259
|
}
|
252
260
|
case "component": {
|
253
261
|
const populate = getDeepPopulate2(attribute.component);
|
254
|
-
acc[attributeName] = {
|
262
|
+
acc[attributeName] = {
|
263
|
+
populate,
|
264
|
+
[fieldSelector]: getComponentFields(attribute.component)
|
265
|
+
};
|
255
266
|
break;
|
256
267
|
}
|
257
268
|
case "dynamiczone": {
|
258
269
|
const populatedComponents = (attribute.components || []).reduce(
|
259
270
|
(acc2, componentUID) => {
|
260
|
-
acc2[componentUID] = {
|
271
|
+
acc2[componentUID] = {
|
272
|
+
populate: getDeepPopulate2(componentUID),
|
273
|
+
[fieldSelector]: getComponentFields(componentUID)
|
274
|
+
};
|
261
275
|
return acc2;
|
262
276
|
},
|
263
277
|
{}
|
@@ -370,7 +384,7 @@ const createHistoryService = ({ strapi: strapi2 }) => {
|
|
370
384
|
const attributeValue = entry.data[attributeKey];
|
371
385
|
const attributeValues = Array.isArray(attributeValue) ? attributeValue : [attributeValue];
|
372
386
|
if (attributeSchema.type === "media") {
|
373
|
-
const permissionChecker2 = getService$
|
387
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
374
388
|
userAbility: params.state.userAbility,
|
375
389
|
model: "plugin::upload.file"
|
376
390
|
});
|
@@ -411,7 +425,7 @@ const createHistoryService = ({ strapi: strapi2 }) => {
|
|
411
425
|
[attributeKey]: adminUsers
|
412
426
|
};
|
413
427
|
}
|
414
|
-
const permissionChecker2 = getService$
|
428
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
415
429
|
userAbility: params.state.userAbility,
|
416
430
|
model: attributeSchema.target
|
417
431
|
});
|
@@ -587,7 +601,7 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
|
|
587
601
|
onCommit(async () => {
|
588
602
|
for (const entry of localeEntries) {
|
589
603
|
const status = await serviceUtils.getVersionStatus(uid2, entry);
|
590
|
-
await getService(strapi2, "history").createVersion({
|
604
|
+
await getService$1(strapi2, "history").createVersion({
|
591
605
|
contentType: uid2,
|
592
606
|
data: fp.omit(FIELDS_TO_IGNORE, entry),
|
593
607
|
relatedDocumentId: documentId,
|
@@ -600,15 +614,19 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
|
|
600
614
|
});
|
601
615
|
return result;
|
602
616
|
});
|
603
|
-
state.deleteExpiredJob = nodeSchedule.scheduleJob("0 0 * * *", () => {
|
617
|
+
state.deleteExpiredJob = nodeSchedule.scheduleJob("historyDaily", "0 0 * * *", () => {
|
604
618
|
const retentionDaysInMilliseconds = serviceUtils.getRetentionDays() * 24 * 60 * 60 * 1e3;
|
605
619
|
const expirationDate = new Date(Date.now() - retentionDaysInMilliseconds);
|
606
620
|
strapi2.db.query(HISTORY_VERSION_UID).deleteMany({
|
607
621
|
where: {
|
608
622
|
created_at: {
|
609
|
-
$lt: expirationDate
|
623
|
+
$lt: expirationDate
|
610
624
|
}
|
611
625
|
}
|
626
|
+
}).catch((error) => {
|
627
|
+
if (error instanceof Error) {
|
628
|
+
strapi2.log.error("Error deleting expired history versions", error.message);
|
629
|
+
}
|
612
630
|
});
|
613
631
|
});
|
614
632
|
state.isInitialized = true;
|
@@ -620,17 +638,17 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
|
|
620
638
|
}
|
621
639
|
};
|
622
640
|
};
|
623
|
-
const services$
|
641
|
+
const services$2 = {
|
624
642
|
history: createHistoryService,
|
625
643
|
lifecycles: createLifecyclesService
|
626
644
|
};
|
627
|
-
const info = { pluginName: "content-manager", type: "admin" };
|
645
|
+
const info$1 = { pluginName: "content-manager", type: "admin" };
|
628
646
|
const historyVersionRouter = {
|
629
647
|
type: "admin",
|
630
648
|
routes: [
|
631
649
|
{
|
632
650
|
method: "GET",
|
633
|
-
info,
|
651
|
+
info: info$1,
|
634
652
|
path: "/history-versions",
|
635
653
|
handler: "history-version.findMany",
|
636
654
|
config: {
|
@@ -639,7 +657,7 @@ const historyVersionRouter = {
|
|
639
657
|
},
|
640
658
|
{
|
641
659
|
method: "PUT",
|
642
|
-
info,
|
660
|
+
info: info$1,
|
643
661
|
path: "/history-versions/:versionId/restore",
|
644
662
|
handler: "history-version.restoreVersion",
|
645
663
|
config: {
|
@@ -648,7 +666,7 @@ const historyVersionRouter = {
|
|
648
666
|
}
|
649
667
|
]
|
650
668
|
};
|
651
|
-
const routes$
|
669
|
+
const routes$2 = {
|
652
670
|
"history-version": historyVersionRouter
|
653
671
|
};
|
654
672
|
const historyVersion = {
|
@@ -695,21 +713,21 @@ const historyVersion = {
|
|
695
713
|
}
|
696
714
|
}
|
697
715
|
};
|
698
|
-
const getFeature = () => {
|
716
|
+
const getFeature$1 = () => {
|
699
717
|
if (strapi.ee.features.isEnabled("cms-content-history")) {
|
700
718
|
return {
|
701
719
|
register({ strapi: strapi2 }) {
|
702
720
|
strapi2.get("models").add(historyVersion);
|
703
721
|
},
|
704
722
|
bootstrap({ strapi: strapi2 }) {
|
705
|
-
getService(strapi2, "lifecycles").bootstrap();
|
723
|
+
getService$1(strapi2, "lifecycles").bootstrap();
|
706
724
|
},
|
707
725
|
destroy({ strapi: strapi2 }) {
|
708
|
-
getService(strapi2, "lifecycles").destroy();
|
726
|
+
getService$1(strapi2, "lifecycles").destroy();
|
709
727
|
},
|
710
|
-
controllers: controllers$
|
711
|
-
services: services$
|
712
|
-
routes: routes$
|
728
|
+
controllers: controllers$2,
|
729
|
+
services: services$2,
|
730
|
+
routes: routes$2
|
713
731
|
};
|
714
732
|
}
|
715
733
|
return {
|
@@ -718,9 +736,205 @@ const getFeature = () => {
|
|
718
736
|
}
|
719
737
|
};
|
720
738
|
};
|
721
|
-
const history = getFeature();
|
739
|
+
const history = getFeature$1();
|
740
|
+
const FEATURE_ID = "preview";
|
741
|
+
const info = { pluginName: "content-manager", type: "admin" };
|
742
|
+
const previewRouter = {
|
743
|
+
type: "admin",
|
744
|
+
routes: [
|
745
|
+
{
|
746
|
+
method: "GET",
|
747
|
+
info,
|
748
|
+
path: "/preview/url/:contentType",
|
749
|
+
handler: "preview.getPreviewUrl",
|
750
|
+
config: {
|
751
|
+
policies: ["admin::isAuthenticatedAdmin"]
|
752
|
+
}
|
753
|
+
}
|
754
|
+
]
|
755
|
+
};
|
756
|
+
const routes$1 = {
|
757
|
+
preview: previewRouter
|
758
|
+
};
|
759
|
+
function getService(strapi2, name) {
|
760
|
+
return strapi2.service(`plugin::content-manager.${name}`);
|
761
|
+
}
|
762
|
+
const getPreviewUrlSchema = yup__namespace.object().shape({
|
763
|
+
// Will be undefined for single types
|
764
|
+
documentId: yup__namespace.string(),
|
765
|
+
locale: yup__namespace.string().nullable(),
|
766
|
+
status: yup__namespace.string()
|
767
|
+
}).required();
|
768
|
+
const validatePreviewUrl = async (strapi2, uid2, params) => {
|
769
|
+
await strapiUtils.validateYupSchema(getPreviewUrlSchema)(params);
|
770
|
+
const newParams = fp.pick(["documentId", "locale", "status"], params);
|
771
|
+
const model = strapi2.getModel(uid2);
|
772
|
+
if (!model || model.modelType !== "contentType") {
|
773
|
+
throw new strapiUtils.errors.ValidationError("Invalid content type");
|
774
|
+
}
|
775
|
+
const isSingleType = model?.kind === "singleType";
|
776
|
+
if (!isSingleType && !params.documentId) {
|
777
|
+
throw new strapiUtils.errors.ValidationError("documentId is required for Collection Types");
|
778
|
+
}
|
779
|
+
if (isSingleType) {
|
780
|
+
const doc = await strapi2.documents(uid2).findFirst();
|
781
|
+
if (!doc) {
|
782
|
+
throw new strapiUtils.errors.NotFoundError("Document not found");
|
783
|
+
}
|
784
|
+
newParams.documentId = doc?.documentId;
|
785
|
+
}
|
786
|
+
if (!newParams.status) {
|
787
|
+
const isDPEnabled = model?.options?.draftAndPublish;
|
788
|
+
newParams.status = isDPEnabled ? "draft" : "published";
|
789
|
+
}
|
790
|
+
return newParams;
|
791
|
+
};
|
792
|
+
const createPreviewController = () => {
|
793
|
+
return {
|
794
|
+
/**
|
795
|
+
* Transforms an entry into a preview URL, so that it can be previewed
|
796
|
+
* in the Content Manager.
|
797
|
+
*/
|
798
|
+
async getPreviewUrl(ctx) {
|
799
|
+
const uid2 = ctx.params.contentType;
|
800
|
+
const query = ctx.request.query;
|
801
|
+
const params = await validatePreviewUrl(strapi, uid2, query);
|
802
|
+
const previewService = getService(strapi, "preview");
|
803
|
+
const url = await previewService.getPreviewUrl(uid2, params);
|
804
|
+
if (!url) {
|
805
|
+
ctx.status = 204;
|
806
|
+
}
|
807
|
+
return {
|
808
|
+
data: { url }
|
809
|
+
};
|
810
|
+
}
|
811
|
+
};
|
812
|
+
};
|
813
|
+
const controllers$1 = {
|
814
|
+
preview: createPreviewController
|
815
|
+
/**
|
816
|
+
* Casting is needed because the types aren't aware that Strapi supports
|
817
|
+
* passing a controller factory as the value, instead of a controller object directly
|
818
|
+
*/
|
819
|
+
};
|
820
|
+
const createPreviewService = ({ strapi: strapi2 }) => {
|
821
|
+
const config = getService(strapi2, "preview-config");
|
822
|
+
return {
|
823
|
+
async getPreviewUrl(uid2, params) {
|
824
|
+
const handler = config.getPreviewHandler();
|
825
|
+
try {
|
826
|
+
return handler(uid2, params);
|
827
|
+
} catch (error) {
|
828
|
+
strapi2.log.error(`Failed to get preview URL: ${error}`);
|
829
|
+
throw new strapiUtils.errors.ApplicationError("Failed to get preview URL");
|
830
|
+
}
|
831
|
+
return;
|
832
|
+
}
|
833
|
+
};
|
834
|
+
};
|
835
|
+
const extendMiddlewareConfiguration = (middleware = { name: "", config: {} }) => {
|
836
|
+
const middlewares = strapi.config.get("middlewares");
|
837
|
+
const configuredMiddlewares = middlewares.map((currentMiddleware) => {
|
838
|
+
if (currentMiddleware === middleware.name) {
|
839
|
+
return middleware;
|
840
|
+
}
|
841
|
+
if (currentMiddleware.name === middleware.name) {
|
842
|
+
return fp.mergeWith(
|
843
|
+
(objValue, srcValue) => {
|
844
|
+
if (Array.isArray(objValue)) {
|
845
|
+
return objValue.concat(srcValue);
|
846
|
+
}
|
847
|
+
return void 0;
|
848
|
+
},
|
849
|
+
currentMiddleware,
|
850
|
+
middleware
|
851
|
+
);
|
852
|
+
}
|
853
|
+
return currentMiddleware;
|
854
|
+
});
|
855
|
+
strapi.config.set("middlewares", configuredMiddlewares);
|
856
|
+
};
|
857
|
+
const createPreviewConfigService = ({ strapi: strapi2 }) => {
|
858
|
+
return {
|
859
|
+
register() {
|
860
|
+
if (!this.isEnabled()) {
|
861
|
+
return;
|
862
|
+
}
|
863
|
+
const config = strapi2.config.get("admin.preview");
|
864
|
+
if (config.config?.allowedOrigins) {
|
865
|
+
extendMiddlewareConfiguration({
|
866
|
+
name: "strapi::security",
|
867
|
+
config: {
|
868
|
+
contentSecurityPolicy: {
|
869
|
+
directives: {
|
870
|
+
"frame-src": config.config.allowedOrigins
|
871
|
+
}
|
872
|
+
}
|
873
|
+
}
|
874
|
+
});
|
875
|
+
}
|
876
|
+
},
|
877
|
+
isEnabled() {
|
878
|
+
const config = strapi2.config.get("admin.preview");
|
879
|
+
if (!config) {
|
880
|
+
return false;
|
881
|
+
}
|
882
|
+
return config?.enabled ?? true;
|
883
|
+
},
|
884
|
+
/**
|
885
|
+
* Validate if the configuration is valid
|
886
|
+
*/
|
887
|
+
validate() {
|
888
|
+
if (!this.isEnabled()) {
|
889
|
+
return;
|
890
|
+
}
|
891
|
+
const handler = this.getPreviewHandler();
|
892
|
+
if (typeof handler !== "function") {
|
893
|
+
throw new strapiUtils.errors.ValidationError(
|
894
|
+
"Preview configuration is invalid. Handler must be a function"
|
895
|
+
);
|
896
|
+
}
|
897
|
+
},
|
898
|
+
/**
|
899
|
+
* Utility to get the preview handler from the configuration
|
900
|
+
*/
|
901
|
+
getPreviewHandler() {
|
902
|
+
const config = strapi2.config.get("admin.preview");
|
903
|
+
const emptyHandler = () => {
|
904
|
+
return void 0;
|
905
|
+
};
|
906
|
+
if (!this.isEnabled()) {
|
907
|
+
return emptyHandler;
|
908
|
+
}
|
909
|
+
return config?.config?.handler || emptyHandler;
|
910
|
+
}
|
911
|
+
};
|
912
|
+
};
|
913
|
+
const services$1 = {
|
914
|
+
preview: createPreviewService,
|
915
|
+
"preview-config": createPreviewConfigService
|
916
|
+
};
|
917
|
+
const getFeature = () => {
|
918
|
+
if (!strapi.features.future.isEnabled(FEATURE_ID)) {
|
919
|
+
return {};
|
920
|
+
}
|
921
|
+
return {
|
922
|
+
register() {
|
923
|
+
const config = getService(strapi, "preview-config");
|
924
|
+
config.validate();
|
925
|
+
config.register();
|
926
|
+
},
|
927
|
+
bootstrap() {
|
928
|
+
},
|
929
|
+
routes: routes$1,
|
930
|
+
controllers: controllers$1,
|
931
|
+
services: services$1
|
932
|
+
};
|
933
|
+
};
|
934
|
+
const preview = getFeature();
|
722
935
|
const register = async ({ strapi: strapi2 }) => {
|
723
936
|
await history.register?.({ strapi: strapi2 });
|
937
|
+
await preview.register?.({ strapi: strapi2 });
|
724
938
|
};
|
725
939
|
const ALLOWED_WEBHOOK_EVENTS = {
|
726
940
|
ENTRY_PUBLISH: "entry.publish",
|
@@ -730,11 +944,12 @@ const bootstrap = async () => {
|
|
730
944
|
Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {
|
731
945
|
strapi.get("webhookStore").addAllowedEvent(key, value);
|
732
946
|
});
|
733
|
-
getService$
|
734
|
-
await getService$
|
735
|
-
await getService$
|
736
|
-
await getService$
|
947
|
+
getService$2("field-sizes").setCustomFieldInputSizes();
|
948
|
+
await getService$2("components").syncConfigurations();
|
949
|
+
await getService$2("content-types").syncConfigurations();
|
950
|
+
await getService$2("permission").registerPermissions();
|
737
951
|
await history.bootstrap?.({ strapi });
|
952
|
+
await preview.bootstrap?.({ strapi });
|
738
953
|
};
|
739
954
|
const destroy = async ({ strapi: strapi2 }) => {
|
740
955
|
await history.destroy?.({ strapi: strapi2 });
|
@@ -1224,7 +1439,8 @@ const admin = {
|
|
1224
1439
|
};
|
1225
1440
|
const routes = {
|
1226
1441
|
admin,
|
1227
|
-
...history.routes ? history.routes : {}
|
1442
|
+
...history.routes ? history.routes : {},
|
1443
|
+
...preview.routes ? preview.routes : {}
|
1228
1444
|
};
|
1229
1445
|
const hasPermissionsSchema = strapiUtils.yup.object({
|
1230
1446
|
actions: strapiUtils.yup.array().of(strapiUtils.yup.string()),
|
@@ -1287,8 +1503,7 @@ const isSortable = (schema, name) => {
|
|
1287
1503
|
if (!___default.default.has(schema.attributes, name)) {
|
1288
1504
|
return false;
|
1289
1505
|
}
|
1290
|
-
if (schema.modelType === "component" && name === "id")
|
1291
|
-
return false;
|
1506
|
+
if (schema.modelType === "component" && name === "id") return false;
|
1292
1507
|
const attribute = schema.attributes[name];
|
1293
1508
|
if (NON_SORTABLES.includes(attribute.type)) {
|
1294
1509
|
return false;
|
@@ -1433,8 +1648,7 @@ const createDefaultSettings = async (schema) => {
|
|
1433
1648
|
};
|
1434
1649
|
};
|
1435
1650
|
const syncSettings = async (configuration, schema) => {
|
1436
|
-
if (fp.isEmpty(configuration.settings))
|
1437
|
-
return createDefaultSettings(schema);
|
1651
|
+
if (fp.isEmpty(configuration.settings)) return createDefaultSettings(schema);
|
1438
1652
|
const defaultField = getDefaultMainField(schema);
|
1439
1653
|
const { mainField = defaultField, defaultSortBy = defaultField } = configuration.settings || {};
|
1440
1654
|
return {
|
@@ -1481,7 +1695,7 @@ const createMetadasSchema = (schema) => {
|
|
1481
1695
|
if (!value) {
|
1482
1696
|
return strapiUtils.yup.string();
|
1483
1697
|
}
|
1484
|
-
const targetSchema = getService$
|
1698
|
+
const targetSchema = getService$2("content-types").findContentType(
|
1485
1699
|
schema.attributes[key].targetModel
|
1486
1700
|
);
|
1487
1701
|
if (!targetSchema) {
|
@@ -1610,8 +1824,7 @@ const excludeNotCreatableFields = (uid2, permissionChecker2) => (body, path = []
|
|
1610
1824
|
}
|
1611
1825
|
switch (attribute.type) {
|
1612
1826
|
case "relation": {
|
1613
|
-
if (canCreate(attributePath))
|
1614
|
-
return body2;
|
1827
|
+
if (canCreate(attributePath)) return body2;
|
1615
1828
|
return fp.set(attributePath, { set: [] }, body2);
|
1616
1829
|
}
|
1617
1830
|
case "component": {
|
@@ -1621,8 +1834,7 @@ const excludeNotCreatableFields = (uid2, permissionChecker2) => (body, path = []
|
|
1621
1834
|
]);
|
1622
1835
|
}
|
1623
1836
|
default: {
|
1624
|
-
if (canCreate(attributePath))
|
1625
|
-
return body2;
|
1837
|
+
if (canCreate(attributePath)) return body2;
|
1626
1838
|
return fp.set(attributePath, null, body2);
|
1627
1839
|
}
|
1628
1840
|
}
|
@@ -1650,7 +1862,7 @@ const getDocumentLocaleAndStatus = async (request, model, opts = { allowMultiple
|
|
1650
1862
|
}
|
1651
1863
|
};
|
1652
1864
|
const formatDocumentWithMetadata = async (permissionChecker2, uid2, document, opts = {}) => {
|
1653
|
-
const documentMetadata2 = getService$
|
1865
|
+
const documentMetadata2 = getService$2("document-metadata");
|
1654
1866
|
const serviceOutput = await documentMetadata2.formatDocumentWithMetadata(uid2, document, opts);
|
1655
1867
|
let {
|
1656
1868
|
meta: { availableLocales, availableStatus }
|
@@ -1676,8 +1888,8 @@ const createDocument = async (ctx, opts) => {
|
|
1676
1888
|
const { userAbility, user } = ctx.state;
|
1677
1889
|
const { model } = ctx.params;
|
1678
1890
|
const { body } = ctx.request;
|
1679
|
-
const documentManager2 = getService$
|
1680
|
-
const permissionChecker2 = getService$
|
1891
|
+
const documentManager2 = getService$2("document-manager");
|
1892
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1681
1893
|
if (permissionChecker2.cannot.create()) {
|
1682
1894
|
throw new strapiUtils.errors.ForbiddenError();
|
1683
1895
|
}
|
@@ -1697,13 +1909,13 @@ const updateDocument = async (ctx, opts) => {
|
|
1697
1909
|
const { userAbility, user } = ctx.state;
|
1698
1910
|
const { id, model } = ctx.params;
|
1699
1911
|
const { body } = ctx.request;
|
1700
|
-
const documentManager2 = getService$
|
1701
|
-
const permissionChecker2 = getService$
|
1912
|
+
const documentManager2 = getService$2("document-manager");
|
1913
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1702
1914
|
if (permissionChecker2.cannot.update()) {
|
1703
1915
|
throw new strapiUtils.errors.ForbiddenError();
|
1704
1916
|
}
|
1705
1917
|
const permissionQuery = await permissionChecker2.sanitizedQuery.update(ctx.query);
|
1706
|
-
const populate = await getService$
|
1918
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1707
1919
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1708
1920
|
const [documentVersion, documentExists] = await Promise.all([
|
1709
1921
|
documentManager2.findOne(id, model, { populate, locale, status: "draft" }),
|
@@ -1734,14 +1946,14 @@ const collectionTypes = {
|
|
1734
1946
|
const { userAbility } = ctx.state;
|
1735
1947
|
const { model } = ctx.params;
|
1736
1948
|
const { query } = ctx.request;
|
1737
|
-
const documentMetadata2 = getService$
|
1738
|
-
const documentManager2 = getService$
|
1739
|
-
const permissionChecker2 = getService$
|
1949
|
+
const documentMetadata2 = getService$2("document-metadata");
|
1950
|
+
const documentManager2 = getService$2("document-manager");
|
1951
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1740
1952
|
if (permissionChecker2.cannot.read()) {
|
1741
1953
|
return ctx.forbidden();
|
1742
1954
|
}
|
1743
1955
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(query);
|
1744
|
-
const populate = await getService$
|
1956
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(1).countRelations({ toOne: false, toMany: true }).build();
|
1745
1957
|
const { locale, status } = await getDocumentLocaleAndStatus(query, model);
|
1746
1958
|
const { results: documents, pagination } = await documentManager2.findPage(
|
1747
1959
|
{ ...permissionQuery, populate, locale, status },
|
@@ -1770,13 +1982,13 @@ const collectionTypes = {
|
|
1770
1982
|
async findOne(ctx) {
|
1771
1983
|
const { userAbility } = ctx.state;
|
1772
1984
|
const { model, id } = ctx.params;
|
1773
|
-
const documentManager2 = getService$
|
1774
|
-
const permissionChecker2 = getService$
|
1985
|
+
const documentManager2 = getService$2("document-manager");
|
1986
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1775
1987
|
if (permissionChecker2.cannot.read()) {
|
1776
1988
|
return ctx.forbidden();
|
1777
1989
|
}
|
1778
1990
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
1779
|
-
const populate = await getService$
|
1991
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1780
1992
|
const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);
|
1781
1993
|
const version = await documentManager2.findOne(id, model, {
|
1782
1994
|
populate,
|
@@ -1807,7 +2019,7 @@ const collectionTypes = {
|
|
1807
2019
|
async create(ctx) {
|
1808
2020
|
const { userAbility } = ctx.state;
|
1809
2021
|
const { model } = ctx.params;
|
1810
|
-
const permissionChecker2 = getService$
|
2022
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1811
2023
|
const [totalEntries, document] = await Promise.all([
|
1812
2024
|
strapi.db.query(model).count(),
|
1813
2025
|
createDocument(ctx)
|
@@ -1828,7 +2040,7 @@ const collectionTypes = {
|
|
1828
2040
|
async update(ctx) {
|
1829
2041
|
const { userAbility } = ctx.state;
|
1830
2042
|
const { model } = ctx.params;
|
1831
|
-
const permissionChecker2 = getService$
|
2043
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1832
2044
|
const updatedVersion = await updateDocument(ctx);
|
1833
2045
|
const sanitizedVersion = await permissionChecker2.sanitizeOutput(updatedVersion);
|
1834
2046
|
ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedVersion);
|
@@ -1837,13 +2049,13 @@ const collectionTypes = {
|
|
1837
2049
|
const { userAbility, user } = ctx.state;
|
1838
2050
|
const { model, sourceId: id } = ctx.params;
|
1839
2051
|
const { body } = ctx.request;
|
1840
|
-
const documentManager2 = getService$
|
1841
|
-
const permissionChecker2 = getService$
|
2052
|
+
const documentManager2 = getService$2("document-manager");
|
2053
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1842
2054
|
if (permissionChecker2.cannot.create()) {
|
1843
2055
|
return ctx.forbidden();
|
1844
2056
|
}
|
1845
2057
|
const permissionQuery = await permissionChecker2.sanitizedQuery.create(ctx.query);
|
1846
|
-
const populate = await getService$
|
2058
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1847
2059
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1848
2060
|
const document = await documentManager2.findOne(id, model, {
|
1849
2061
|
populate,
|
@@ -1882,13 +2094,13 @@ const collectionTypes = {
|
|
1882
2094
|
async delete(ctx) {
|
1883
2095
|
const { userAbility } = ctx.state;
|
1884
2096
|
const { id, model } = ctx.params;
|
1885
|
-
const documentManager2 = getService$
|
1886
|
-
const permissionChecker2 = getService$
|
2097
|
+
const documentManager2 = getService$2("document-manager");
|
2098
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1887
2099
|
if (permissionChecker2.cannot.delete()) {
|
1888
2100
|
return ctx.forbidden();
|
1889
2101
|
}
|
1890
2102
|
const permissionQuery = await permissionChecker2.sanitizedQuery.delete(ctx.query);
|
1891
|
-
const populate = await getService$
|
2103
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1892
2104
|
const { locale } = await getDocumentLocaleAndStatus(ctx.query, model);
|
1893
2105
|
const documentLocales = await documentManager2.findLocales(id, model, { populate, locale });
|
1894
2106
|
if (documentLocales.length === 0) {
|
@@ -1910,14 +2122,14 @@ const collectionTypes = {
|
|
1910
2122
|
const { userAbility } = ctx.state;
|
1911
2123
|
const { id, model } = ctx.params;
|
1912
2124
|
const { body } = ctx.request;
|
1913
|
-
const documentManager2 = getService$
|
1914
|
-
const permissionChecker2 = getService$
|
2125
|
+
const documentManager2 = getService$2("document-manager");
|
2126
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1915
2127
|
if (permissionChecker2.cannot.publish()) {
|
1916
2128
|
return ctx.forbidden();
|
1917
2129
|
}
|
1918
2130
|
const publishedDocument = await strapi.db.transaction(async () => {
|
1919
2131
|
const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
|
1920
|
-
const populate = await getService$
|
2132
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1921
2133
|
let document;
|
1922
2134
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1923
2135
|
const isCreate = fp.isNil(id);
|
@@ -1965,13 +2177,13 @@ const collectionTypes = {
|
|
1965
2177
|
const { body } = ctx.request;
|
1966
2178
|
const { documentIds } = body;
|
1967
2179
|
await validateBulkActionInput(body);
|
1968
|
-
const documentManager2 = getService$
|
1969
|
-
const permissionChecker2 = getService$
|
2180
|
+
const documentManager2 = getService$2("document-manager");
|
2181
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1970
2182
|
if (permissionChecker2.cannot.publish()) {
|
1971
2183
|
return ctx.forbidden();
|
1972
2184
|
}
|
1973
2185
|
const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
|
1974
|
-
const populate = await getService$
|
2186
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1975
2187
|
const { locale } = await getDocumentLocaleAndStatus(body, model, {
|
1976
2188
|
allowMultipleLocales: true
|
1977
2189
|
});
|
@@ -1996,8 +2208,8 @@ const collectionTypes = {
|
|
1996
2208
|
const { body } = ctx.request;
|
1997
2209
|
const { documentIds } = body;
|
1998
2210
|
await validateBulkActionInput(body);
|
1999
|
-
const documentManager2 = getService$
|
2000
|
-
const permissionChecker2 = getService$
|
2211
|
+
const documentManager2 = getService$2("document-manager");
|
2212
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2001
2213
|
if (permissionChecker2.cannot.unpublish()) {
|
2002
2214
|
return ctx.forbidden();
|
2003
2215
|
}
|
@@ -2026,8 +2238,8 @@ const collectionTypes = {
|
|
2026
2238
|
const {
|
2027
2239
|
body: { discardDraft, ...body }
|
2028
2240
|
} = ctx.request;
|
2029
|
-
const documentManager2 = getService$
|
2030
|
-
const permissionChecker2 = getService$
|
2241
|
+
const documentManager2 = getService$2("document-manager");
|
2242
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2031
2243
|
if (permissionChecker2.cannot.unpublish()) {
|
2032
2244
|
return ctx.forbidden();
|
2033
2245
|
}
|
@@ -2035,7 +2247,7 @@ const collectionTypes = {
|
|
2035
2247
|
return ctx.forbidden();
|
2036
2248
|
}
|
2037
2249
|
const permissionQuery = await permissionChecker2.sanitizedQuery.unpublish(ctx.query);
|
2038
|
-
const populate = await getService$
|
2250
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2039
2251
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2040
2252
|
const document = await documentManager2.findOne(id, model, {
|
2041
2253
|
populate,
|
@@ -2066,13 +2278,13 @@ const collectionTypes = {
|
|
2066
2278
|
const { userAbility } = ctx.state;
|
2067
2279
|
const { id, model } = ctx.params;
|
2068
2280
|
const { body } = ctx.request;
|
2069
|
-
const documentManager2 = getService$
|
2070
|
-
const permissionChecker2 = getService$
|
2281
|
+
const documentManager2 = getService$2("document-manager");
|
2282
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2071
2283
|
if (permissionChecker2.cannot.discard()) {
|
2072
2284
|
return ctx.forbidden();
|
2073
2285
|
}
|
2074
2286
|
const permissionQuery = await permissionChecker2.sanitizedQuery.discard(ctx.query);
|
2075
|
-
const populate = await getService$
|
2287
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2076
2288
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2077
2289
|
const document = await documentManager2.findOne(id, model, {
|
2078
2290
|
populate,
|
@@ -2097,13 +2309,13 @@ const collectionTypes = {
|
|
2097
2309
|
const { query, body } = ctx.request;
|
2098
2310
|
const { documentIds } = body;
|
2099
2311
|
await validateBulkActionInput(body);
|
2100
|
-
const documentManager2 = getService$
|
2101
|
-
const permissionChecker2 = getService$
|
2312
|
+
const documentManager2 = getService$2("document-manager");
|
2313
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2102
2314
|
if (permissionChecker2.cannot.delete()) {
|
2103
2315
|
return ctx.forbidden();
|
2104
2316
|
}
|
2105
2317
|
const permissionQuery = await permissionChecker2.sanitizedQuery.delete(query);
|
2106
|
-
const populate = await getService$
|
2318
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2107
2319
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2108
2320
|
const documentLocales = await documentManager2.findLocales(documentIds, model, {
|
2109
2321
|
populate,
|
@@ -2124,13 +2336,13 @@ const collectionTypes = {
|
|
2124
2336
|
async countDraftRelations(ctx) {
|
2125
2337
|
const { userAbility } = ctx.state;
|
2126
2338
|
const { model, id } = ctx.params;
|
2127
|
-
const documentManager2 = getService$
|
2128
|
-
const permissionChecker2 = getService$
|
2339
|
+
const documentManager2 = getService$2("document-manager");
|
2340
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2129
2341
|
if (permissionChecker2.cannot.read()) {
|
2130
2342
|
return ctx.forbidden();
|
2131
2343
|
}
|
2132
2344
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
2133
|
-
const populate = await getService$
|
2345
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2134
2346
|
const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);
|
2135
2347
|
const entity = await documentManager2.findOne(id, model, { populate, locale, status });
|
2136
2348
|
if (!entity) {
|
@@ -2149,8 +2361,8 @@ const collectionTypes = {
|
|
2149
2361
|
const ids = ctx.request.query.documentIds;
|
2150
2362
|
const locale = ctx.request.query.locale;
|
2151
2363
|
const { model } = ctx.params;
|
2152
|
-
const documentManager2 = getService$
|
2153
|
-
const permissionChecker2 = getService$
|
2364
|
+
const documentManager2 = getService$2("document-manager");
|
2365
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2154
2366
|
if (permissionChecker2.cannot.read()) {
|
2155
2367
|
return ctx.forbidden();
|
2156
2368
|
}
|
@@ -2174,13 +2386,13 @@ const collectionTypes = {
|
|
2174
2386
|
};
|
2175
2387
|
const components$1 = {
|
2176
2388
|
findComponents(ctx) {
|
2177
|
-
const components2 = getService$
|
2178
|
-
const { toDto } = getService$
|
2389
|
+
const components2 = getService$2("components").findAllComponents();
|
2390
|
+
const { toDto } = getService$2("data-mapper");
|
2179
2391
|
ctx.body = { data: components2.map(toDto) };
|
2180
2392
|
},
|
2181
2393
|
async findComponentConfiguration(ctx) {
|
2182
2394
|
const { uid: uid2 } = ctx.params;
|
2183
|
-
const componentService = getService$
|
2395
|
+
const componentService = getService$2("components");
|
2184
2396
|
const component = componentService.findComponent(uid2);
|
2185
2397
|
if (!component) {
|
2186
2398
|
return ctx.notFound("component.notFound");
|
@@ -2197,7 +2409,7 @@ const components$1 = {
|
|
2197
2409
|
async updateComponentConfiguration(ctx) {
|
2198
2410
|
const { uid: uid2 } = ctx.params;
|
2199
2411
|
const { body } = ctx.request;
|
2200
|
-
const componentService = getService$
|
2412
|
+
const componentService = getService$2("components");
|
2201
2413
|
const component = componentService.findComponent(uid2);
|
2202
2414
|
if (!component) {
|
2203
2415
|
return ctx.notFound("component.notFound");
|
@@ -2231,12 +2443,12 @@ const contentTypes = {
|
|
2231
2443
|
} catch (error) {
|
2232
2444
|
return ctx.send({ error }, 400);
|
2233
2445
|
}
|
2234
|
-
const contentTypes2 = getService$
|
2235
|
-
const { toDto } = getService$
|
2446
|
+
const contentTypes2 = getService$2("content-types").findContentTypesByKind(kind);
|
2447
|
+
const { toDto } = getService$2("data-mapper");
|
2236
2448
|
ctx.body = { data: contentTypes2.map(toDto) };
|
2237
2449
|
},
|
2238
2450
|
async findContentTypesSettings(ctx) {
|
2239
|
-
const { findAllContentTypes, findConfiguration } = getService$
|
2451
|
+
const { findAllContentTypes, findConfiguration } = getService$2("content-types");
|
2240
2452
|
const contentTypes2 = await findAllContentTypes();
|
2241
2453
|
const configurations = await Promise.all(
|
2242
2454
|
contentTypes2.map(async (contentType) => {
|
@@ -2250,7 +2462,7 @@ const contentTypes = {
|
|
2250
2462
|
},
|
2251
2463
|
async findContentTypeConfiguration(ctx) {
|
2252
2464
|
const { uid: uid2 } = ctx.params;
|
2253
|
-
const contentTypeService = getService$
|
2465
|
+
const contentTypeService = getService$2("content-types");
|
2254
2466
|
const contentType = await contentTypeService.findContentType(uid2);
|
2255
2467
|
if (!contentType) {
|
2256
2468
|
return ctx.notFound("contentType.notFound");
|
@@ -2272,13 +2484,13 @@ const contentTypes = {
|
|
2272
2484
|
const { userAbility } = ctx.state;
|
2273
2485
|
const { uid: uid2 } = ctx.params;
|
2274
2486
|
const { body } = ctx.request;
|
2275
|
-
const contentTypeService = getService$
|
2276
|
-
const metricsService = getService$
|
2487
|
+
const contentTypeService = getService$2("content-types");
|
2488
|
+
const metricsService = getService$2("metrics");
|
2277
2489
|
const contentType = await contentTypeService.findContentType(uid2);
|
2278
2490
|
if (!contentType) {
|
2279
2491
|
return ctx.notFound("contentType.notFound");
|
2280
2492
|
}
|
2281
|
-
if (!getService$
|
2493
|
+
if (!getService$2("permission").canConfigureContentType({ userAbility, contentType })) {
|
2282
2494
|
return ctx.forbidden();
|
2283
2495
|
}
|
2284
2496
|
let input;
|
@@ -2311,10 +2523,10 @@ const contentTypes = {
|
|
2311
2523
|
};
|
2312
2524
|
const init = {
|
2313
2525
|
getInitData(ctx) {
|
2314
|
-
const { toDto } = getService$
|
2315
|
-
const { findAllComponents } = getService$
|
2316
|
-
const { getAllFieldSizes } = getService$
|
2317
|
-
const { findAllContentTypes } = getService$
|
2526
|
+
const { toDto } = getService$2("data-mapper");
|
2527
|
+
const { findAllComponents } = getService$2("components");
|
2528
|
+
const { getAllFieldSizes } = getService$2("field-sizes");
|
2529
|
+
const { findAllContentTypes } = getService$2("content-types");
|
2318
2530
|
ctx.body = {
|
2319
2531
|
data: {
|
2320
2532
|
fieldSizes: getAllFieldSizes(),
|
@@ -2350,7 +2562,7 @@ const addFiltersClause = (params, filtersClause) => {
|
|
2350
2562
|
params.filters.$and.push(filtersClause);
|
2351
2563
|
};
|
2352
2564
|
const sanitizeMainField = (model, mainField, userAbility) => {
|
2353
|
-
const permissionChecker2 = getService$
|
2565
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2354
2566
|
userAbility,
|
2355
2567
|
model: model.uid
|
2356
2568
|
});
|
@@ -2364,15 +2576,27 @@ const sanitizeMainField = (model, mainField, userAbility) => {
|
|
2364
2576
|
}
|
2365
2577
|
return mainField;
|
2366
2578
|
};
|
2367
|
-
const addStatusToRelations = async (
|
2368
|
-
if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.
|
2579
|
+
const addStatusToRelations = async (targetUid, relations2) => {
|
2580
|
+
if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.getModel(targetUid))) {
|
2369
2581
|
return relations2;
|
2370
2582
|
}
|
2371
|
-
const documentMetadata2 = getService$
|
2372
|
-
|
2583
|
+
const documentMetadata2 = getService$2("document-metadata");
|
2584
|
+
if (!relations2.length) {
|
2585
|
+
return relations2;
|
2586
|
+
}
|
2587
|
+
const firstRelation = relations2[0];
|
2588
|
+
const filters = {
|
2589
|
+
documentId: { $in: relations2.map((r) => r.documentId) },
|
2590
|
+
// NOTE: find the "opposite" status
|
2591
|
+
publishedAt: firstRelation.publishedAt !== null ? { $null: true } : { $notNull: true }
|
2592
|
+
};
|
2593
|
+
const availableStatus = await strapi.query(targetUid).findMany({
|
2594
|
+
select: ["id", "documentId", "locale", "updatedAt", "createdAt", "publishedAt"],
|
2595
|
+
filters
|
2596
|
+
});
|
2373
2597
|
return relations2.map((relation) => {
|
2374
|
-
const availableStatuses =
|
2375
|
-
(availableDocument) => availableDocument.documentId === relation.documentId
|
2598
|
+
const availableStatuses = availableStatus.filter(
|
2599
|
+
(availableDocument) => availableDocument.documentId === relation.documentId && (relation.locale ? availableDocument.locale === relation.locale : true)
|
2376
2600
|
);
|
2377
2601
|
return {
|
2378
2602
|
...relation,
|
@@ -2403,8 +2627,7 @@ const validateStatus = (sourceUid, status) => {
|
|
2403
2627
|
const sourceModel = strapi.getModel(sourceUid);
|
2404
2628
|
const isDP = strapiUtils.contentTypes.hasDraftAndPublish;
|
2405
2629
|
const isSourceDP = isDP(sourceModel);
|
2406
|
-
if (!isSourceDP)
|
2407
|
-
return { status: void 0 };
|
2630
|
+
if (!isSourceDP) return { status: void 0 };
|
2408
2631
|
switch (status) {
|
2409
2632
|
case "published":
|
2410
2633
|
return { status: "published" };
|
@@ -2434,7 +2657,7 @@ const relations = {
|
|
2434
2657
|
ctx.request?.query?.locale
|
2435
2658
|
);
|
2436
2659
|
const { status } = validateStatus(sourceUid, ctx.request?.query?.status);
|
2437
|
-
const permissionChecker2 = getService$
|
2660
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2438
2661
|
userAbility,
|
2439
2662
|
model
|
2440
2663
|
});
|
@@ -2459,7 +2682,7 @@ const relations = {
|
|
2459
2682
|
where.id = id;
|
2460
2683
|
}
|
2461
2684
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
2462
|
-
const populate = await getService$
|
2685
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2463
2686
|
const currentEntity = await strapi.db.query(model).findOne({
|
2464
2687
|
where,
|
2465
2688
|
populate
|
@@ -2474,7 +2697,7 @@ const relations = {
|
|
2474
2697
|
}
|
2475
2698
|
entryId = currentEntity.id;
|
2476
2699
|
}
|
2477
|
-
const modelConfig = isComponent2 ? await getService$
|
2700
|
+
const modelConfig = isComponent2 ? await getService$2("components").findConfiguration(sourceSchema) : await getService$2("content-types").findConfiguration(sourceSchema);
|
2478
2701
|
const targetSchema = strapi.getModel(targetUid);
|
2479
2702
|
const mainField = fp.flow(
|
2480
2703
|
fp.prop(`metadatas.${targetField}.edit.mainField`),
|
@@ -2528,7 +2751,7 @@ const relations = {
|
|
2528
2751
|
}
|
2529
2752
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2530
2753
|
const { idsToOmit, idsToInclude, _q, ...query } = ctx.request.query;
|
2531
|
-
const permissionChecker2 = getService$
|
2754
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2532
2755
|
userAbility: ctx.state.userAbility,
|
2533
2756
|
model: targetUid
|
2534
2757
|
});
|
@@ -2601,21 +2824,33 @@ const relations = {
|
|
2601
2824
|
attribute,
|
2602
2825
|
targetField,
|
2603
2826
|
fieldsToSelect,
|
2604
|
-
|
2605
|
-
|
2606
|
-
}
|
2607
|
-
target: {
|
2608
|
-
schema: { uid: targetUid }
|
2609
|
-
}
|
2827
|
+
status,
|
2828
|
+
source: { schema: sourceSchema },
|
2829
|
+
target: { schema: targetSchema }
|
2610
2830
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2611
|
-
const
|
2831
|
+
const { uid: sourceUid } = sourceSchema;
|
2832
|
+
const { uid: targetUid } = targetSchema;
|
2833
|
+
const permissionQuery = await getService$2("permission-checker").create({ userAbility, model: targetUid }).sanitizedQuery.read({ fields: fieldsToSelect });
|
2612
2834
|
const dbQuery = strapi.db.query(sourceUid);
|
2613
2835
|
const loadRelations = strapiUtils.relations.isAnyToMany(attribute) ? (...args) => dbQuery.loadPages(...args) : (...args) => dbQuery.load(...args).then((res2) => ({ results: res2 ? [res2] : [] }));
|
2836
|
+
const filters = {};
|
2837
|
+
if (sourceSchema?.options?.draftAndPublish) {
|
2838
|
+
if (targetSchema?.options?.draftAndPublish) {
|
2839
|
+
if (status === "published") {
|
2840
|
+
filters.publishedAt = { $notNull: true };
|
2841
|
+
} else {
|
2842
|
+
filters.publishedAt = { $null: true };
|
2843
|
+
}
|
2844
|
+
}
|
2845
|
+
} else if (targetSchema?.options?.draftAndPublish) {
|
2846
|
+
filters.publishedAt = { $null: true };
|
2847
|
+
}
|
2614
2848
|
const res = await loadRelations({ id: entryId }, targetField, {
|
2615
|
-
select: ["id", "documentId", "locale", "publishedAt"],
|
2849
|
+
select: ["id", "documentId", "locale", "publishedAt", "updatedAt"],
|
2616
2850
|
ordering: "desc",
|
2617
2851
|
page: ctx.request.query.page,
|
2618
|
-
pageSize: ctx.request.query.pageSize
|
2852
|
+
pageSize: ctx.request.query.pageSize,
|
2853
|
+
filters
|
2619
2854
|
});
|
2620
2855
|
const loadedIds = res.results.map((item) => item.id);
|
2621
2856
|
addFiltersClause(permissionQuery, { id: { $in: loadedIds } });
|
@@ -2636,10 +2871,10 @@ const relations = {
|
|
2636
2871
|
}
|
2637
2872
|
};
|
2638
2873
|
const buildPopulateFromQuery = async (query, model) => {
|
2639
|
-
return getService$
|
2874
|
+
return getService$2("populate-builder")(model).populateFromQuery(query).populateDeep(Infinity).countRelations().build();
|
2640
2875
|
};
|
2641
2876
|
const findDocument = async (query, uid2, opts = {}) => {
|
2642
|
-
const documentManager2 = getService$
|
2877
|
+
const documentManager2 = getService$2("document-manager");
|
2643
2878
|
const populate = await buildPopulateFromQuery(query, uid2);
|
2644
2879
|
return documentManager2.findMany({ ...opts, populate }, uid2).then((documents) => documents[0]);
|
2645
2880
|
};
|
@@ -2647,8 +2882,8 @@ const createOrUpdateDocument = async (ctx, opts) => {
|
|
2647
2882
|
const { user, userAbility } = ctx.state;
|
2648
2883
|
const { model } = ctx.params;
|
2649
2884
|
const { body, query } = ctx.request;
|
2650
|
-
const documentManager2 = getService$
|
2651
|
-
const permissionChecker2 = getService$
|
2885
|
+
const documentManager2 = getService$2("document-manager");
|
2886
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2652
2887
|
if (permissionChecker2.cannot.create() && permissionChecker2.cannot.update()) {
|
2653
2888
|
throw new strapiUtils.errors.ForbiddenError();
|
2654
2889
|
}
|
@@ -2689,7 +2924,7 @@ const singleTypes = {
|
|
2689
2924
|
const { userAbility } = ctx.state;
|
2690
2925
|
const { model } = ctx.params;
|
2691
2926
|
const { query = {} } = ctx.request;
|
2692
|
-
const permissionChecker2 = getService$
|
2927
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2693
2928
|
if (permissionChecker2.cannot.read()) {
|
2694
2929
|
return ctx.forbidden();
|
2695
2930
|
}
|
@@ -2723,7 +2958,7 @@ const singleTypes = {
|
|
2723
2958
|
async createOrUpdate(ctx) {
|
2724
2959
|
const { userAbility } = ctx.state;
|
2725
2960
|
const { model } = ctx.params;
|
2726
|
-
const permissionChecker2 = getService$
|
2961
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2727
2962
|
const document = await createOrUpdateDocument(ctx);
|
2728
2963
|
const sanitizedDocument = await permissionChecker2.sanitizeOutput(document);
|
2729
2964
|
ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedDocument);
|
@@ -2732,8 +2967,8 @@ const singleTypes = {
|
|
2732
2967
|
const { userAbility } = ctx.state;
|
2733
2968
|
const { model } = ctx.params;
|
2734
2969
|
const { query = {} } = ctx.request;
|
2735
|
-
const documentManager2 = getService$
|
2736
|
-
const permissionChecker2 = getService$
|
2970
|
+
const documentManager2 = getService$2("document-manager");
|
2971
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2737
2972
|
if (permissionChecker2.cannot.delete()) {
|
2738
2973
|
return ctx.forbidden();
|
2739
2974
|
}
|
@@ -2761,8 +2996,8 @@ const singleTypes = {
|
|
2761
2996
|
const { userAbility } = ctx.state;
|
2762
2997
|
const { model } = ctx.params;
|
2763
2998
|
const { query = {} } = ctx.request;
|
2764
|
-
const documentManager2 = getService$
|
2765
|
-
const permissionChecker2 = getService$
|
2999
|
+
const documentManager2 = getService$2("document-manager");
|
3000
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2766
3001
|
if (permissionChecker2.cannot.publish()) {
|
2767
3002
|
return ctx.forbidden();
|
2768
3003
|
}
|
@@ -2790,8 +3025,8 @@ const singleTypes = {
|
|
2790
3025
|
body: { discardDraft, ...body },
|
2791
3026
|
query = {}
|
2792
3027
|
} = ctx.request;
|
2793
|
-
const documentManager2 = getService$
|
2794
|
-
const permissionChecker2 = getService$
|
3028
|
+
const documentManager2 = getService$2("document-manager");
|
3029
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2795
3030
|
if (permissionChecker2.cannot.unpublish()) {
|
2796
3031
|
return ctx.forbidden();
|
2797
3032
|
}
|
@@ -2825,8 +3060,8 @@ const singleTypes = {
|
|
2825
3060
|
const { userAbility } = ctx.state;
|
2826
3061
|
const { model } = ctx.params;
|
2827
3062
|
const { body, query = {} } = ctx.request;
|
2828
|
-
const documentManager2 = getService$
|
2829
|
-
const permissionChecker2 = getService$
|
3063
|
+
const documentManager2 = getService$2("document-manager");
|
3064
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2830
3065
|
if (permissionChecker2.cannot.discard()) {
|
2831
3066
|
return ctx.forbidden();
|
2832
3067
|
}
|
@@ -2849,8 +3084,8 @@ const singleTypes = {
|
|
2849
3084
|
const { userAbility } = ctx.state;
|
2850
3085
|
const { model } = ctx.params;
|
2851
3086
|
const { query } = ctx.request;
|
2852
|
-
const documentManager2 = getService$
|
2853
|
-
const permissionChecker2 = getService$
|
3087
|
+
const documentManager2 = getService$2("document-manager");
|
3088
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2854
3089
|
const { locale } = await getDocumentLocaleAndStatus(query, model);
|
2855
3090
|
if (permissionChecker2.cannot.read()) {
|
2856
3091
|
return ctx.forbidden();
|
@@ -2874,7 +3109,7 @@ const uid$1 = {
|
|
2874
3109
|
const { query = {} } = ctx.request;
|
2875
3110
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2876
3111
|
await validateUIDField(contentTypeUID, field);
|
2877
|
-
const uidService = getService$
|
3112
|
+
const uidService = getService$2("uid");
|
2878
3113
|
ctx.body = {
|
2879
3114
|
data: await uidService.generateUIDField({ contentTypeUID, field, data, locale })
|
2880
3115
|
};
|
@@ -2886,7 +3121,7 @@ const uid$1 = {
|
|
2886
3121
|
const { query = {} } = ctx.request;
|
2887
3122
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2888
3123
|
await validateUIDField(contentTypeUID, field);
|
2889
|
-
const uidService = getService$
|
3124
|
+
const uidService = getService$2("uid");
|
2890
3125
|
const isAvailable = await uidService.checkUIDAvailability({
|
2891
3126
|
contentTypeUID,
|
2892
3127
|
field,
|
@@ -2907,7 +3142,8 @@ const controllers = {
|
|
2907
3142
|
relations,
|
2908
3143
|
"single-types": singleTypes,
|
2909
3144
|
uid: uid$1,
|
2910
|
-
...history.controllers ? history.controllers : {}
|
3145
|
+
...history.controllers ? history.controllers : {},
|
3146
|
+
...preview.controllers ? preview.controllers : {}
|
2911
3147
|
};
|
2912
3148
|
const keys = {
|
2913
3149
|
CONFIGURATION: "configuration"
|
@@ -3036,18 +3272,15 @@ async function syncMetadatas(configuration, schema) {
|
|
3036
3272
|
___default.default.set(updatedMeta, ["list", "searchable"], false);
|
3037
3273
|
___default.default.set(acc, [key], updatedMeta);
|
3038
3274
|
}
|
3039
|
-
if (!___default.default.has(edit, "mainField"))
|
3040
|
-
return acc;
|
3275
|
+
if (!___default.default.has(edit, "mainField")) return acc;
|
3041
3276
|
if (!isRelation$1(attr)) {
|
3042
3277
|
___default.default.set(updatedMeta, "edit", ___default.default.omit(edit, ["mainField"]));
|
3043
3278
|
___default.default.set(acc, [key], updatedMeta);
|
3044
3279
|
return acc;
|
3045
3280
|
}
|
3046
|
-
if (edit.mainField === "id")
|
3047
|
-
return acc;
|
3281
|
+
if (edit.mainField === "id") return acc;
|
3048
3282
|
const targetSchema = getTargetSchema(attr.targetModel);
|
3049
|
-
if (!targetSchema)
|
3050
|
-
return acc;
|
3283
|
+
if (!targetSchema) return acc;
|
3051
3284
|
if (!isSortable(targetSchema, edit.mainField) && !isListable(targetSchema, edit.mainField)) {
|
3052
3285
|
___default.default.set(updatedMeta, ["edit", "mainField"], getDefaultMainField(targetSchema));
|
3053
3286
|
___default.default.set(acc, [key], updatedMeta);
|
@@ -3058,12 +3291,12 @@ async function syncMetadatas(configuration, schema) {
|
|
3058
3291
|
return ___default.default.assign(metasWithDefaults, updatedMetas);
|
3059
3292
|
}
|
3060
3293
|
const getTargetSchema = (targetModel) => {
|
3061
|
-
return getService$
|
3294
|
+
return getService$2("content-types").findContentType(targetModel);
|
3062
3295
|
};
|
3063
3296
|
const DEFAULT_LIST_LENGTH = 4;
|
3064
3297
|
const MAX_ROW_SIZE = 12;
|
3065
3298
|
const isAllowedFieldSize = (type, size) => {
|
3066
|
-
const { getFieldSize } = getService$
|
3299
|
+
const { getFieldSize } = getService$2("field-sizes");
|
3067
3300
|
const fieldSize = getFieldSize(type);
|
3068
3301
|
if (!fieldSize.isResizable && size !== fieldSize.default) {
|
3069
3302
|
return false;
|
@@ -3071,7 +3304,7 @@ const isAllowedFieldSize = (type, size) => {
|
|
3071
3304
|
return size <= MAX_ROW_SIZE;
|
3072
3305
|
};
|
3073
3306
|
const getDefaultFieldSize = (attribute) => {
|
3074
|
-
const { hasFieldSize, getFieldSize } = getService$
|
3307
|
+
const { hasFieldSize, getFieldSize } = getService$2("field-sizes");
|
3075
3308
|
return getFieldSize(hasFieldSize(attribute.customField) ? attribute.customField : attribute.type).default;
|
3076
3309
|
};
|
3077
3310
|
async function createDefaultLayouts(schema) {
|
@@ -3092,8 +3325,7 @@ function createDefaultEditLayout(schema) {
|
|
3092
3325
|
return appendToEditLayout([], keys2, schema);
|
3093
3326
|
}
|
3094
3327
|
function syncLayouts(configuration, schema) {
|
3095
|
-
if (___default.default.isEmpty(configuration.layouts))
|
3096
|
-
return createDefaultLayouts(schema);
|
3328
|
+
if (___default.default.isEmpty(configuration.layouts)) return createDefaultLayouts(schema);
|
3097
3329
|
const { list = [], editRelations = [], edit = [] } = configuration.layouts || {};
|
3098
3330
|
let cleanList = list.filter((attr) => isListable(schema, attr));
|
3099
3331
|
const cleanEditRelations = editRelations.filter(
|
@@ -3104,9 +3336,8 @@ function syncLayouts(configuration, schema) {
|
|
3104
3336
|
for (const row of edit) {
|
3105
3337
|
const newRow = [];
|
3106
3338
|
for (const el of row) {
|
3107
|
-
if (!hasEditableAttribute(schema, el.name))
|
3108
|
-
|
3109
|
-
const { hasFieldSize } = getService$1("field-sizes");
|
3339
|
+
if (!hasEditableAttribute(schema, el.name)) continue;
|
3340
|
+
const { hasFieldSize } = getService$2("field-sizes");
|
3110
3341
|
const fieldType = hasFieldSize(schema.attributes[el.name].customField) ? schema.attributes[el.name].customField : schema.attributes[el.name].type;
|
3111
3342
|
if (!isAllowedFieldSize(fieldType, el.size)) {
|
3112
3343
|
elementsToReAppend.push(el.name);
|
@@ -3136,8 +3367,7 @@ function syncLayouts(configuration, schema) {
|
|
3136
3367
|
};
|
3137
3368
|
}
|
3138
3369
|
const appendToEditLayout = (layout = [], keysToAppend, schema) => {
|
3139
|
-
if (keysToAppend.length === 0)
|
3140
|
-
return layout;
|
3370
|
+
if (keysToAppend.length === 0) return layout;
|
3141
3371
|
let currentRowIndex = Math.max(layout.length - 1, 0);
|
3142
3372
|
if (!layout[currentRowIndex]) {
|
3143
3373
|
layout[currentRowIndex] = [];
|
@@ -3246,17 +3476,17 @@ const configurationService$1 = createConfigurationService({
|
|
3246
3476
|
isComponent: true,
|
3247
3477
|
prefix: STORE_KEY_PREFIX,
|
3248
3478
|
getModels() {
|
3249
|
-
const { toContentManagerModel } = getService$
|
3479
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3250
3480
|
return fp.mapValues(toContentManagerModel, strapi.components);
|
3251
3481
|
}
|
3252
3482
|
});
|
3253
3483
|
const components = ({ strapi: strapi2 }) => ({
|
3254
3484
|
findAllComponents() {
|
3255
|
-
const { toContentManagerModel } = getService$
|
3485
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3256
3486
|
return Object.values(strapi2.components).map(toContentManagerModel);
|
3257
3487
|
},
|
3258
3488
|
findComponent(uid2) {
|
3259
|
-
const { toContentManagerModel } = getService$
|
3489
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3260
3490
|
const component = strapi2.components[uid2];
|
3261
3491
|
return fp.isNil(component) ? component : toContentManagerModel(component);
|
3262
3492
|
},
|
@@ -3307,17 +3537,17 @@ const configurationService = createConfigurationService({
|
|
3307
3537
|
storeUtils,
|
3308
3538
|
prefix: "content_types",
|
3309
3539
|
getModels() {
|
3310
|
-
const { toContentManagerModel } = getService$
|
3540
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3311
3541
|
return fp.mapValues(toContentManagerModel, strapi.contentTypes);
|
3312
3542
|
}
|
3313
3543
|
});
|
3314
3544
|
const service = ({ strapi: strapi2 }) => ({
|
3315
3545
|
findAllContentTypes() {
|
3316
|
-
const { toContentManagerModel } = getService$
|
3546
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3317
3547
|
return Object.values(strapi2.contentTypes).map(toContentManagerModel);
|
3318
3548
|
},
|
3319
3549
|
findContentType(uid2) {
|
3320
|
-
const { toContentManagerModel } = getService$
|
3550
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3321
3551
|
const contentType = strapi2.contentTypes[uid2];
|
3322
3552
|
return fp.isNil(contentType) ? contentType : toContentManagerModel(contentType);
|
3323
3553
|
},
|
@@ -3346,7 +3576,7 @@ const service = ({ strapi: strapi2 }) => ({
|
|
3346
3576
|
return this.findConfiguration(contentType);
|
3347
3577
|
},
|
3348
3578
|
findComponentsConfigurations(contentType) {
|
3349
|
-
return getService$
|
3579
|
+
return getService$2("components").findComponentsConfigurations(contentType);
|
3350
3580
|
},
|
3351
3581
|
syncConfigurations() {
|
3352
3582
|
return configurationService.syncConfigurations();
|
@@ -3618,7 +3848,7 @@ const permission = ({ strapi: strapi2 }) => ({
|
|
3618
3848
|
return userAbility.can(action);
|
3619
3849
|
},
|
3620
3850
|
async registerPermissions() {
|
3621
|
-
const displayedContentTypes = getService$
|
3851
|
+
const displayedContentTypes = getService$2("content-types").findDisplayedContentTypes();
|
3622
3852
|
const contentTypesUids = displayedContentTypes.map(fp.prop("uid"));
|
3623
3853
|
const actions = [
|
3624
3854
|
{
|
@@ -3894,7 +4124,7 @@ const getQueryPopulate = async (uid2, query) => {
|
|
3894
4124
|
return populateQuery;
|
3895
4125
|
};
|
3896
4126
|
const buildDeepPopulate = (uid2) => {
|
3897
|
-
return getService$
|
4127
|
+
return getService$2("populate-builder")(uid2).populateDeep(Infinity).countRelations().build();
|
3898
4128
|
};
|
3899
4129
|
const populateBuilder = (uid2) => {
|
3900
4130
|
let getInitialPopulate = async () => {
|
@@ -4079,7 +4309,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4079
4309
|
*/
|
4080
4310
|
async getAvailableLocales(uid2, version, allVersions, validatableFields = []) {
|
4081
4311
|
const versionsByLocale = fp.groupBy("locale", allVersions);
|
4082
|
-
|
4312
|
+
if (version.locale) {
|
4313
|
+
delete versionsByLocale[version.locale];
|
4314
|
+
}
|
4083
4315
|
const model = strapi2.getModel(uid2);
|
4084
4316
|
const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
|
4085
4317
|
const traversalFunction = async (localeVersion) => strapiUtils.traverseEntity(
|
@@ -4126,8 +4358,7 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4126
4358
|
const matchStatus = status === "published" ? v.publishedAt !== null : v.publishedAt === null;
|
4127
4359
|
return matchLocale && matchStatus;
|
4128
4360
|
});
|
4129
|
-
if (!availableStatus)
|
4130
|
-
return availableStatus;
|
4361
|
+
if (!availableStatus) return availableStatus;
|
4131
4362
|
return fp.pick(AVAILABLE_STATUS_FIELDS, availableStatus);
|
4132
4363
|
},
|
4133
4364
|
/**
|
@@ -4137,8 +4368,7 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4137
4368
|
* @returns
|
4138
4369
|
*/
|
4139
4370
|
async getManyAvailableStatus(uid2, documents) {
|
4140
|
-
if (!documents.length)
|
4141
|
-
return [];
|
4371
|
+
if (!documents.length) return [];
|
4142
4372
|
const status = documents[0].publishedAt !== null ? "published" : "draft";
|
4143
4373
|
const locale = documents[0]?.locale;
|
4144
4374
|
const otherStatus = status === "published" ? "draft" : "published";
|
@@ -4165,10 +4395,8 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4165
4395
|
} else if (otherVersion) {
|
4166
4396
|
draftVersion = otherVersion;
|
4167
4397
|
}
|
4168
|
-
if (!draftVersion)
|
4169
|
-
|
4170
|
-
if (!publishedVersion)
|
4171
|
-
return CONTENT_MANAGER_STATUS.DRAFT;
|
4398
|
+
if (!draftVersion) return CONTENT_MANAGER_STATUS.PUBLISHED;
|
4399
|
+
if (!publishedVersion) return CONTENT_MANAGER_STATUS.DRAFT;
|
4172
4400
|
const isDraftModified = getIsVersionLatestModification(draftVersion, publishedVersion);
|
4173
4401
|
return isDraftModified ? CONTENT_MANAGER_STATUS.MODIFIED : CONTENT_MANAGER_STATUS.PUBLISHED;
|
4174
4402
|
},
|
@@ -4435,7 +4663,8 @@ const services = {
|
|
4435
4663
|
permission,
|
4436
4664
|
"populate-builder": populateBuilder$1,
|
4437
4665
|
uid,
|
4438
|
-
...history.services ? history.services : {}
|
4666
|
+
...history.services ? history.services : {},
|
4667
|
+
...preview.services ? preview.services : {}
|
4439
4668
|
};
|
4440
4669
|
const index = () => {
|
4441
4670
|
return {
|