@strapi/content-manager 5.0.6 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{ComponentConfigurationPage-DfFSZQxe.mjs → ComponentConfigurationPage-BpM_Hc7r.mjs} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-DfFSZQxe.mjs.map → ComponentConfigurationPage-BpM_Hc7r.mjs.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-FqfsxQ1j.js → ComponentConfigurationPage-CL9CAMaL.js} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-FqfsxQ1j.js.map → ComponentConfigurationPage-CL9CAMaL.js.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-Cn0e8t3I.js → EditConfigurationPage-ILWo0h1e.js} +4 -4
- package/dist/_chunks/{EditConfigurationPage-Cn0e8t3I.js.map → EditConfigurationPage-ILWo0h1e.js.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-DdPNAbl3.mjs → EditConfigurationPage-_prbqpTM.mjs} +4 -4
- package/dist/_chunks/{EditConfigurationPage-DdPNAbl3.mjs.map → EditConfigurationPage-_prbqpTM.mjs.map} +1 -1
- package/dist/_chunks/{EditViewPage-DlxEHhUt.js → EditViewPage-BqZvBN4s.js} +3 -3
- package/dist/_chunks/EditViewPage-BqZvBN4s.js.map +1 -0
- package/dist/_chunks/{EditViewPage-B82x_x1b.mjs → EditViewPage-DAtscabN.mjs} +3 -3
- package/dist/_chunks/EditViewPage-DAtscabN.mjs.map +1 -0
- package/dist/_chunks/{Field-COL25JiC.js → Field-CcoQiiz1.js} +5 -5
- package/dist/_chunks/Field-CcoQiiz1.js.map +1 -0
- package/dist/_chunks/{Field-DufHXW17.mjs → Field-D-mgn1tH.mjs} +5 -5
- package/dist/_chunks/Field-D-mgn1tH.mjs.map +1 -0
- package/dist/_chunks/{Form-u_kAOhwB.mjs → Form-BxyeWiXW.mjs} +2 -2
- package/dist/_chunks/{Form-u_kAOhwB.mjs.map → Form-BxyeWiXW.mjs.map} +1 -1
- package/dist/_chunks/{Form-BssUwrTO.js → Form-CmLbZDfi.js} +2 -2
- package/dist/_chunks/{Form-BssUwrTO.js.map → Form-CmLbZDfi.js.map} +1 -1
- package/dist/_chunks/{History-DRwA3oMM.mjs → History-BOhLaq_g.mjs} +18 -34
- package/dist/_chunks/History-BOhLaq_g.mjs.map +1 -0
- package/dist/_chunks/{History-C9t9UqpO.js → History-uECUbCZB.js} +18 -34
- package/dist/_chunks/History-uECUbCZB.js.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-BxfQJzPk.mjs → ListConfigurationPage-D0vQez6F.mjs} +3 -3
- package/dist/_chunks/{ListConfigurationPage-BxfQJzPk.mjs.map → ListConfigurationPage-D0vQez6F.mjs.map} +1 -1
- package/dist/_chunks/{ListConfigurationPage-BXYPohh-.js → ListConfigurationPage-D_bBSFNW.js} +3 -3
- package/dist/_chunks/{ListConfigurationPage-BXYPohh-.js.map → ListConfigurationPage-D_bBSFNW.js.map} +1 -1
- package/dist/_chunks/{ListViewPage-D2VD8Szg.js → ListViewPage-BkZ83b1A.js} +15 -4
- package/dist/_chunks/ListViewPage-BkZ83b1A.js.map +1 -0
- package/dist/_chunks/{ListViewPage-CELx2ysp.mjs → ListViewPage-ns-bmy5C.mjs} +15 -4
- package/dist/_chunks/{ListViewPage-CELx2ysp.mjs.map → ListViewPage-ns-bmy5C.mjs.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-DtJ9jcfk.mjs → NoContentTypePage-BA5ZKMDR.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-DtJ9jcfk.mjs.map → NoContentTypePage-BA5ZKMDR.mjs.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-BV9IjJSM.js → NoContentTypePage-C1439s4s.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-BV9IjJSM.js.map → NoContentTypePage-C1439s4s.js.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-DWleVYK7.mjs → NoPermissionsPage-B0GdMw1Q.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-DWleVYK7.mjs.map → NoPermissionsPage-B0GdMw1Q.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-Dp8NpF9I.js → NoPermissionsPage-CPGwsVfb.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-Dp8NpF9I.js.map → NoPermissionsPage-CPGwsVfb.js.map} +1 -1
- package/dist/_chunks/{Relations-BTcf5xaw.mjs → Relations-BIGPMSW4.mjs} +44 -17
- package/dist/_chunks/Relations-BIGPMSW4.mjs.map +1 -0
- package/dist/_chunks/{Relations-DR7EUgyC.js → Relations-d-8Uef_-.js} +43 -16
- package/dist/_chunks/Relations-d-8Uef_-.js.map +1 -0
- package/dist/_chunks/{en-Bm0D0IWz.js → en-Bdpa50w3.js} +6 -2
- package/dist/_chunks/{en-Bm0D0IWz.js.map → en-Bdpa50w3.js.map} +1 -1
- package/dist/_chunks/{en-DKV44jRb.mjs → en-CZw4xdPY.mjs} +6 -2
- package/dist/_chunks/{en-DKV44jRb.mjs.map → en-CZw4xdPY.mjs.map} +1 -1
- package/dist/_chunks/{es-EUonQTon.js → es-9K52xZIr.js} +2 -2
- package/dist/_chunks/{ja-CcFe8diO.js.map → es-9K52xZIr.js.map} +1 -1
- package/dist/_chunks/{es-CeXiYflN.mjs → es-D34tqjMw.mjs} +2 -2
- package/dist/_chunks/{es-CeXiYflN.mjs.map → es-D34tqjMw.mjs.map} +1 -1
- package/dist/_chunks/{fr-CD9VFbPM.mjs → fr--pg5jUbt.mjs} +13 -3
- package/dist/_chunks/{fr-CD9VFbPM.mjs.map → fr--pg5jUbt.mjs.map} +1 -1
- package/dist/_chunks/{fr-B7kGGg3E.js → fr-B2Kyv8Z9.js} +13 -3
- package/dist/_chunks/{fr-B7kGGg3E.js.map → fr-B2Kyv8Z9.js.map} +1 -1
- package/dist/_chunks/{index-wnqzm4Q8.mjs → index-3_WeHXYp.mjs} +113 -23
- package/dist/_chunks/index-3_WeHXYp.mjs.map +1 -0
- package/dist/_chunks/{index-BdMf2lfT.js → index-BgaeYWIy.js} +112 -21
- package/dist/_chunks/index-BgaeYWIy.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-B2MyZU-_.js → layout-ByFyQRDH.js} +3 -3
- package/dist/_chunks/{layout-B2MyZU-_.js.map → layout-ByFyQRDH.js.map} +1 -1
- package/dist/_chunks/{layout-2CfjL0T9.mjs → layout-CrTxOnCy.mjs} +3 -3
- package/dist/_chunks/{layout-2CfjL0T9.mjs.map → layout-CrTxOnCy.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-BlpLgngh.mjs} +3 -7
- package/dist/_chunks/relations-BlpLgngh.mjs.map +1 -0
- package/dist/_chunks/{relations-BH7JJGGe.js → relations-C5RSW926.js} +3 -7
- package/dist/_chunks/relations-C5RSW926.js.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- 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/services/preview.d.ts +3 -0
- package/dist/server/index.js +344 -144
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +344 -144
- 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 +15 -0
- package/dist/server/src/preview/services/index.d.ts.map +1 -0
- package/dist/server/src/preview/services/preview-config.d.ts +30 -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 +18 -0
- package/dist/server/src/preview/utils.d.ts.map +1 -0
- package/dist/server/src/routes/index.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 +6 -6
- 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/ListViewPage-D2VD8Szg.js.map +0 -1
- package/dist/_chunks/Relations-BTcf5xaw.mjs.map +0 -1
- package/dist/_chunks/Relations-DR7EUgyC.js.map +0 -1
- package/dist/_chunks/index-BdMf2lfT.js.map +0 -1
- package/dist/_chunks/index-wnqzm4Q8.mjs.map +0 -1
- package/dist/_chunks/relations-BH7JJGGe.js.map +0 -1
- package/dist/_chunks/relations-C0w0GcXi.mjs.map +0 -1
package/dist/server/index.mjs
CHANGED
@@ -7,10 +7,10 @@ import isNil from "lodash/isNil";
|
|
7
7
|
import _, { intersection as intersection$1, difference as difference$1 } from "lodash";
|
8
8
|
import qs from "qs";
|
9
9
|
import slugify from "@sindresorhus/slugify";
|
10
|
-
const getService$
|
10
|
+
const getService$2 = (name) => {
|
11
11
|
return strapi.plugin("content-manager").service(name);
|
12
12
|
};
|
13
|
-
function getService(strapi2, name) {
|
13
|
+
function getService$1(strapi2, name) {
|
14
14
|
return strapi2.service(`plugin::content-manager.${name}`);
|
15
15
|
}
|
16
16
|
const historyRestoreVersionSchema = yup.object().shape({
|
@@ -46,7 +46,7 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
46
46
|
if (!isSingleType && (!contentTypeUid || !ctx.query.documentId)) {
|
47
47
|
throw new errors.ForbiddenError("contentType and documentId are required");
|
48
48
|
}
|
49
|
-
const permissionChecker2 = getService$
|
49
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
50
50
|
userAbility: ctx.state.userAbility,
|
51
51
|
model: ctx.query.contentType
|
52
52
|
});
|
@@ -54,7 +54,7 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
54
54
|
return ctx.forbidden();
|
55
55
|
}
|
56
56
|
const query = await permissionChecker2.sanitizeQuery(ctx.query);
|
57
|
-
const { results, pagination: pagination2 } = await getService(strapi2, "history").findVersionsPage({
|
57
|
+
const { results, pagination: pagination2 } = await getService$1(strapi2, "history").findVersionsPage({
|
58
58
|
query: {
|
59
59
|
...query,
|
60
60
|
...getValidPagination({ page: query.page, pageSize: query.pageSize })
|
@@ -79,14 +79,14 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
79
79
|
async restoreVersion(ctx) {
|
80
80
|
const request = ctx.request;
|
81
81
|
await validateRestoreVersion(request.body, "contentType is required");
|
82
|
-
const permissionChecker2 = getService$
|
82
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
83
83
|
userAbility: ctx.state.userAbility,
|
84
84
|
model: request.body.contentType
|
85
85
|
});
|
86
86
|
if (permissionChecker2.cannot.update()) {
|
87
87
|
throw new errors.ForbiddenError();
|
88
88
|
}
|
89
|
-
const restoredDocument = await getService(strapi2, "history").restoreVersion(
|
89
|
+
const restoredDocument = await getService$1(strapi2, "history").restoreVersion(
|
90
90
|
request.params.versionId
|
91
91
|
);
|
92
92
|
return {
|
@@ -95,7 +95,7 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
95
95
|
}
|
96
96
|
};
|
97
97
|
};
|
98
|
-
const controllers$
|
98
|
+
const controllers$2 = {
|
99
99
|
"history-version": createHistoryVersionController
|
100
100
|
/**
|
101
101
|
* Casting is needed because the types aren't aware that Strapi supports
|
@@ -202,6 +202,17 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
202
202
|
const meta = await documentMetadataService.getMetadata(contentTypeUid, document);
|
203
203
|
return documentMetadataService.getStatus(document, meta.availableStatus);
|
204
204
|
};
|
205
|
+
const getComponentFields = (componentUID) => {
|
206
|
+
return Object.entries(strapi2.getModel(componentUID).attributes).reduce(
|
207
|
+
(fieldsAcc, [key, attribute]) => {
|
208
|
+
if (!["relation", "media", "component", "dynamiczone"].includes(attribute.type)) {
|
209
|
+
fieldsAcc.push(key);
|
210
|
+
}
|
211
|
+
return fieldsAcc;
|
212
|
+
},
|
213
|
+
[]
|
214
|
+
);
|
215
|
+
};
|
205
216
|
const getDeepPopulate2 = (uid2, useDatabaseSyntax = false) => {
|
206
217
|
const model = strapi2.getModel(uid2);
|
207
218
|
const attributes = Object.entries(model.attributes);
|
@@ -225,13 +236,19 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
225
236
|
}
|
226
237
|
case "component": {
|
227
238
|
const populate = getDeepPopulate2(attribute.component);
|
228
|
-
acc[attributeName] = {
|
239
|
+
acc[attributeName] = {
|
240
|
+
populate,
|
241
|
+
[fieldSelector]: getComponentFields(attribute.component)
|
242
|
+
};
|
229
243
|
break;
|
230
244
|
}
|
231
245
|
case "dynamiczone": {
|
232
246
|
const populatedComponents = (attribute.components || []).reduce(
|
233
247
|
(acc2, componentUID) => {
|
234
|
-
acc2[componentUID] = {
|
248
|
+
acc2[componentUID] = {
|
249
|
+
populate: getDeepPopulate2(componentUID),
|
250
|
+
[fieldSelector]: getComponentFields(componentUID)
|
251
|
+
};
|
235
252
|
return acc2;
|
236
253
|
},
|
237
254
|
{}
|
@@ -344,7 +361,7 @@ const createHistoryService = ({ strapi: strapi2 }) => {
|
|
344
361
|
const attributeValue = entry.data[attributeKey];
|
345
362
|
const attributeValues = Array.isArray(attributeValue) ? attributeValue : [attributeValue];
|
346
363
|
if (attributeSchema.type === "media") {
|
347
|
-
const permissionChecker2 = getService$
|
364
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
348
365
|
userAbility: params.state.userAbility,
|
349
366
|
model: "plugin::upload.file"
|
350
367
|
});
|
@@ -385,7 +402,7 @@ const createHistoryService = ({ strapi: strapi2 }) => {
|
|
385
402
|
[attributeKey]: adminUsers
|
386
403
|
};
|
387
404
|
}
|
388
|
-
const permissionChecker2 = getService$
|
405
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
389
406
|
userAbility: params.state.userAbility,
|
390
407
|
model: attributeSchema.target
|
391
408
|
});
|
@@ -561,7 +578,7 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
|
|
561
578
|
onCommit(async () => {
|
562
579
|
for (const entry of localeEntries) {
|
563
580
|
const status = await serviceUtils.getVersionStatus(uid2, entry);
|
564
|
-
await getService(strapi2, "history").createVersion({
|
581
|
+
await getService$1(strapi2, "history").createVersion({
|
565
582
|
contentType: uid2,
|
566
583
|
data: omit(FIELDS_TO_IGNORE, entry),
|
567
584
|
relatedDocumentId: documentId,
|
@@ -574,15 +591,19 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
|
|
574
591
|
});
|
575
592
|
return result;
|
576
593
|
});
|
577
|
-
state.deleteExpiredJob = scheduleJob("0 0 * * *", () => {
|
594
|
+
state.deleteExpiredJob = scheduleJob("historyDaily", "0 0 * * *", () => {
|
578
595
|
const retentionDaysInMilliseconds = serviceUtils.getRetentionDays() * 24 * 60 * 60 * 1e3;
|
579
596
|
const expirationDate = new Date(Date.now() - retentionDaysInMilliseconds);
|
580
597
|
strapi2.db.query(HISTORY_VERSION_UID).deleteMany({
|
581
598
|
where: {
|
582
599
|
created_at: {
|
583
|
-
$lt: expirationDate
|
600
|
+
$lt: expirationDate
|
584
601
|
}
|
585
602
|
}
|
603
|
+
}).catch((error) => {
|
604
|
+
if (error instanceof Error) {
|
605
|
+
strapi2.log.error("Error deleting expired history versions", error.message);
|
606
|
+
}
|
586
607
|
});
|
587
608
|
});
|
588
609
|
state.isInitialized = true;
|
@@ -594,17 +615,17 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
|
|
594
615
|
}
|
595
616
|
};
|
596
617
|
};
|
597
|
-
const services$
|
618
|
+
const services$2 = {
|
598
619
|
history: createHistoryService,
|
599
620
|
lifecycles: createLifecyclesService
|
600
621
|
};
|
601
|
-
const info = { pluginName: "content-manager", type: "admin" };
|
622
|
+
const info$1 = { pluginName: "content-manager", type: "admin" };
|
602
623
|
const historyVersionRouter = {
|
603
624
|
type: "admin",
|
604
625
|
routes: [
|
605
626
|
{
|
606
627
|
method: "GET",
|
607
|
-
info,
|
628
|
+
info: info$1,
|
608
629
|
path: "/history-versions",
|
609
630
|
handler: "history-version.findMany",
|
610
631
|
config: {
|
@@ -613,7 +634,7 @@ const historyVersionRouter = {
|
|
613
634
|
},
|
614
635
|
{
|
615
636
|
method: "PUT",
|
616
|
-
info,
|
637
|
+
info: info$1,
|
617
638
|
path: "/history-versions/:versionId/restore",
|
618
639
|
handler: "history-version.restoreVersion",
|
619
640
|
config: {
|
@@ -622,7 +643,7 @@ const historyVersionRouter = {
|
|
622
643
|
}
|
623
644
|
]
|
624
645
|
};
|
625
|
-
const routes$
|
646
|
+
const routes$2 = {
|
626
647
|
"history-version": historyVersionRouter
|
627
648
|
};
|
628
649
|
const historyVersion = {
|
@@ -669,21 +690,21 @@ const historyVersion = {
|
|
669
690
|
}
|
670
691
|
}
|
671
692
|
};
|
672
|
-
const getFeature = () => {
|
693
|
+
const getFeature$1 = () => {
|
673
694
|
if (strapi.ee.features.isEnabled("cms-content-history")) {
|
674
695
|
return {
|
675
696
|
register({ strapi: strapi2 }) {
|
676
697
|
strapi2.get("models").add(historyVersion);
|
677
698
|
},
|
678
699
|
bootstrap({ strapi: strapi2 }) {
|
679
|
-
getService(strapi2, "lifecycles").bootstrap();
|
700
|
+
getService$1(strapi2, "lifecycles").bootstrap();
|
680
701
|
},
|
681
702
|
destroy({ strapi: strapi2 }) {
|
682
|
-
getService(strapi2, "lifecycles").destroy();
|
703
|
+
getService$1(strapi2, "lifecycles").destroy();
|
683
704
|
},
|
684
|
-
controllers: controllers$
|
685
|
-
services: services$
|
686
|
-
routes: routes$
|
705
|
+
controllers: controllers$2,
|
706
|
+
services: services$2,
|
707
|
+
routes: routes$2
|
687
708
|
};
|
688
709
|
}
|
689
710
|
return {
|
@@ -692,7 +713,7 @@ const getFeature = () => {
|
|
692
713
|
}
|
693
714
|
};
|
694
715
|
};
|
695
|
-
const history = getFeature();
|
716
|
+
const history = getFeature$1();
|
696
717
|
const register = async ({ strapi: strapi2 }) => {
|
697
718
|
await history.register?.({ strapi: strapi2 });
|
698
719
|
};
|
@@ -700,15 +721,165 @@ const ALLOWED_WEBHOOK_EVENTS = {
|
|
700
721
|
ENTRY_PUBLISH: "entry.publish",
|
701
722
|
ENTRY_UNPUBLISH: "entry.unpublish"
|
702
723
|
};
|
724
|
+
const FEATURE_ID = "preview";
|
725
|
+
const info = { pluginName: "content-manager", type: "admin" };
|
726
|
+
const previewRouter = {
|
727
|
+
type: "admin",
|
728
|
+
routes: [
|
729
|
+
{
|
730
|
+
method: "GET",
|
731
|
+
info,
|
732
|
+
path: "/preview/url/:contentType",
|
733
|
+
handler: "preview.getPreviewUrl",
|
734
|
+
config: {
|
735
|
+
policies: ["admin::isAuthenticatedAdmin"]
|
736
|
+
}
|
737
|
+
}
|
738
|
+
]
|
739
|
+
};
|
740
|
+
const routes$1 = {
|
741
|
+
preview: previewRouter
|
742
|
+
};
|
743
|
+
function getService(strapi2, name) {
|
744
|
+
return strapi2.service(`plugin::content-manager.${name}`);
|
745
|
+
}
|
746
|
+
const getPreviewUrlSchema = yup.object().shape({
|
747
|
+
// Will be undefined for single types
|
748
|
+
documentId: yup.string(),
|
749
|
+
locale: yup.string().nullable(),
|
750
|
+
status: yup.string()
|
751
|
+
}).required();
|
752
|
+
const validatePreviewUrl = async (strapi2, uid2, params) => {
|
753
|
+
await validateYupSchema(getPreviewUrlSchema)(params);
|
754
|
+
const newParams = pick(["documentId", "locale", "status"], params);
|
755
|
+
const model = strapi2.getModel(uid2);
|
756
|
+
if (!model || model.modelType !== "contentType") {
|
757
|
+
throw new errors.ValidationError("Invalid content type");
|
758
|
+
}
|
759
|
+
const isSingleType = model?.kind === "singleType";
|
760
|
+
if (!isSingleType && !params.documentId) {
|
761
|
+
throw new errors.ValidationError("documentId is required for Collection Types");
|
762
|
+
}
|
763
|
+
if (isSingleType) {
|
764
|
+
const doc = await strapi2.documents(uid2).findFirst();
|
765
|
+
if (!doc) {
|
766
|
+
throw new errors.NotFoundError("Document not found");
|
767
|
+
}
|
768
|
+
newParams.documentId = doc?.documentId;
|
769
|
+
}
|
770
|
+
return newParams;
|
771
|
+
};
|
772
|
+
const createPreviewController = () => {
|
773
|
+
return {
|
774
|
+
/**
|
775
|
+
* Transforms an entry into a preview URL, so that it can be previewed
|
776
|
+
* in the Content Manager.
|
777
|
+
*/
|
778
|
+
async getPreviewUrl(ctx) {
|
779
|
+
const uid2 = ctx.params.contentType;
|
780
|
+
const query = ctx.request.query;
|
781
|
+
const params = await validatePreviewUrl(strapi, uid2, query);
|
782
|
+
const previewService = getService(strapi, "preview");
|
783
|
+
const url = await previewService.getPreviewUrl(uid2, params);
|
784
|
+
if (!url) {
|
785
|
+
ctx.status = 204;
|
786
|
+
}
|
787
|
+
return {
|
788
|
+
data: { url }
|
789
|
+
};
|
790
|
+
}
|
791
|
+
};
|
792
|
+
};
|
793
|
+
const controllers$1 = {
|
794
|
+
preview: createPreviewController
|
795
|
+
/**
|
796
|
+
* Casting is needed because the types aren't aware that Strapi supports
|
797
|
+
* passing a controller factory as the value, instead of a controller object directly
|
798
|
+
*/
|
799
|
+
};
|
800
|
+
const createPreviewService = ({ strapi: strapi2 }) => {
|
801
|
+
const config = getService(strapi2, "preview-config");
|
802
|
+
return {
|
803
|
+
async getPreviewUrl(uid2, params) {
|
804
|
+
const handler = config.getPreviewHandler();
|
805
|
+
try {
|
806
|
+
return handler(uid2, params);
|
807
|
+
} catch (error) {
|
808
|
+
strapi2.log.error(`Failed to get preview URL: ${error}`);
|
809
|
+
throw new errors.ApplicationError("Failed to get preview URL");
|
810
|
+
}
|
811
|
+
return;
|
812
|
+
}
|
813
|
+
};
|
814
|
+
};
|
815
|
+
const createPreviewConfigService = ({ strapi: strapi2 }) => {
|
816
|
+
return {
|
817
|
+
isEnabled() {
|
818
|
+
const config = strapi2.config.get("admin.preview");
|
819
|
+
if (!config) {
|
820
|
+
return false;
|
821
|
+
}
|
822
|
+
return config?.enabled ?? true;
|
823
|
+
},
|
824
|
+
/**
|
825
|
+
* Validate if the configuration is valid
|
826
|
+
*/
|
827
|
+
validate() {
|
828
|
+
if (!this.isEnabled()) {
|
829
|
+
return;
|
830
|
+
}
|
831
|
+
const handler = this.getPreviewHandler();
|
832
|
+
if (typeof handler !== "function") {
|
833
|
+
throw new errors.ValidationError(
|
834
|
+
"Preview configuration is invalid. Handler must be a function"
|
835
|
+
);
|
836
|
+
}
|
837
|
+
},
|
838
|
+
/**
|
839
|
+
* Utility to get the preview handler from the configuration
|
840
|
+
*/
|
841
|
+
getPreviewHandler() {
|
842
|
+
const config = strapi2.config.get("admin.preview");
|
843
|
+
const emptyHandler = () => {
|
844
|
+
return void 0;
|
845
|
+
};
|
846
|
+
if (!this.isEnabled()) {
|
847
|
+
return emptyHandler;
|
848
|
+
}
|
849
|
+
return config?.config?.handler || emptyHandler;
|
850
|
+
}
|
851
|
+
};
|
852
|
+
};
|
853
|
+
const services$1 = {
|
854
|
+
preview: createPreviewService,
|
855
|
+
"preview-config": createPreviewConfigService
|
856
|
+
};
|
857
|
+
const getFeature = () => {
|
858
|
+
if (!strapi.features.future.isEnabled(FEATURE_ID)) {
|
859
|
+
return {};
|
860
|
+
}
|
861
|
+
return {
|
862
|
+
bootstrap() {
|
863
|
+
console.log("Bootstrapping preview server");
|
864
|
+
const config = getService(strapi, "preview-config");
|
865
|
+
config.validate();
|
866
|
+
},
|
867
|
+
routes: routes$1,
|
868
|
+
controllers: controllers$1,
|
869
|
+
services: services$1
|
870
|
+
};
|
871
|
+
};
|
872
|
+
const preview = getFeature();
|
703
873
|
const bootstrap = async () => {
|
704
874
|
Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {
|
705
875
|
strapi.get("webhookStore").addAllowedEvent(key, value);
|
706
876
|
});
|
707
|
-
getService$
|
708
|
-
await getService$
|
709
|
-
await getService$
|
710
|
-
await getService$
|
877
|
+
getService$2("field-sizes").setCustomFieldInputSizes();
|
878
|
+
await getService$2("components").syncConfigurations();
|
879
|
+
await getService$2("content-types").syncConfigurations();
|
880
|
+
await getService$2("permission").registerPermissions();
|
711
881
|
await history.bootstrap?.({ strapi });
|
882
|
+
await preview.bootstrap?.({ strapi });
|
712
883
|
};
|
713
884
|
const destroy = async ({ strapi: strapi2 }) => {
|
714
885
|
await history.destroy?.({ strapi: strapi2 });
|
@@ -1198,7 +1369,8 @@ const admin = {
|
|
1198
1369
|
};
|
1199
1370
|
const routes = {
|
1200
1371
|
admin,
|
1201
|
-
...history.routes ? history.routes : {}
|
1372
|
+
...history.routes ? history.routes : {},
|
1373
|
+
...preview.routes ? preview.routes : {}
|
1202
1374
|
};
|
1203
1375
|
const hasPermissionsSchema = yup$1.object({
|
1204
1376
|
actions: yup$1.array().of(yup$1.string()),
|
@@ -1455,7 +1627,7 @@ const createMetadasSchema = (schema) => {
|
|
1455
1627
|
if (!value) {
|
1456
1628
|
return yup$1.string();
|
1457
1629
|
}
|
1458
|
-
const targetSchema = getService$
|
1630
|
+
const targetSchema = getService$2("content-types").findContentType(
|
1459
1631
|
schema.attributes[key].targetModel
|
1460
1632
|
);
|
1461
1633
|
if (!targetSchema) {
|
@@ -1624,7 +1796,7 @@ const getDocumentLocaleAndStatus = async (request, model, opts = { allowMultiple
|
|
1624
1796
|
}
|
1625
1797
|
};
|
1626
1798
|
const formatDocumentWithMetadata = async (permissionChecker2, uid2, document, opts = {}) => {
|
1627
|
-
const documentMetadata2 = getService$
|
1799
|
+
const documentMetadata2 = getService$2("document-metadata");
|
1628
1800
|
const serviceOutput = await documentMetadata2.formatDocumentWithMetadata(uid2, document, opts);
|
1629
1801
|
let {
|
1630
1802
|
meta: { availableLocales, availableStatus }
|
@@ -1650,8 +1822,8 @@ const createDocument = async (ctx, opts) => {
|
|
1650
1822
|
const { userAbility, user } = ctx.state;
|
1651
1823
|
const { model } = ctx.params;
|
1652
1824
|
const { body } = ctx.request;
|
1653
|
-
const documentManager2 = getService$
|
1654
|
-
const permissionChecker2 = getService$
|
1825
|
+
const documentManager2 = getService$2("document-manager");
|
1826
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1655
1827
|
if (permissionChecker2.cannot.create()) {
|
1656
1828
|
throw new errors.ForbiddenError();
|
1657
1829
|
}
|
@@ -1671,13 +1843,13 @@ const updateDocument = async (ctx, opts) => {
|
|
1671
1843
|
const { userAbility, user } = ctx.state;
|
1672
1844
|
const { id, model } = ctx.params;
|
1673
1845
|
const { body } = ctx.request;
|
1674
|
-
const documentManager2 = getService$
|
1675
|
-
const permissionChecker2 = getService$
|
1846
|
+
const documentManager2 = getService$2("document-manager");
|
1847
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1676
1848
|
if (permissionChecker2.cannot.update()) {
|
1677
1849
|
throw new errors.ForbiddenError();
|
1678
1850
|
}
|
1679
1851
|
const permissionQuery = await permissionChecker2.sanitizedQuery.update(ctx.query);
|
1680
|
-
const populate = await getService$
|
1852
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1681
1853
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1682
1854
|
const [documentVersion, documentExists] = await Promise.all([
|
1683
1855
|
documentManager2.findOne(id, model, { populate, locale, status: "draft" }),
|
@@ -1708,14 +1880,14 @@ const collectionTypes = {
|
|
1708
1880
|
const { userAbility } = ctx.state;
|
1709
1881
|
const { model } = ctx.params;
|
1710
1882
|
const { query } = ctx.request;
|
1711
|
-
const documentMetadata2 = getService$
|
1712
|
-
const documentManager2 = getService$
|
1713
|
-
const permissionChecker2 = getService$
|
1883
|
+
const documentMetadata2 = getService$2("document-metadata");
|
1884
|
+
const documentManager2 = getService$2("document-manager");
|
1885
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1714
1886
|
if (permissionChecker2.cannot.read()) {
|
1715
1887
|
return ctx.forbidden();
|
1716
1888
|
}
|
1717
1889
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(query);
|
1718
|
-
const populate = await getService$
|
1890
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(1).countRelations({ toOne: false, toMany: true }).build();
|
1719
1891
|
const { locale, status } = await getDocumentLocaleAndStatus(query, model);
|
1720
1892
|
const { results: documents, pagination: pagination2 } = await documentManager2.findPage(
|
1721
1893
|
{ ...permissionQuery, populate, locale, status },
|
@@ -1744,13 +1916,13 @@ const collectionTypes = {
|
|
1744
1916
|
async findOne(ctx) {
|
1745
1917
|
const { userAbility } = ctx.state;
|
1746
1918
|
const { model, id } = ctx.params;
|
1747
|
-
const documentManager2 = getService$
|
1748
|
-
const permissionChecker2 = getService$
|
1919
|
+
const documentManager2 = getService$2("document-manager");
|
1920
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1749
1921
|
if (permissionChecker2.cannot.read()) {
|
1750
1922
|
return ctx.forbidden();
|
1751
1923
|
}
|
1752
1924
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
1753
|
-
const populate = await getService$
|
1925
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1754
1926
|
const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);
|
1755
1927
|
const version = await documentManager2.findOne(id, model, {
|
1756
1928
|
populate,
|
@@ -1781,7 +1953,7 @@ const collectionTypes = {
|
|
1781
1953
|
async create(ctx) {
|
1782
1954
|
const { userAbility } = ctx.state;
|
1783
1955
|
const { model } = ctx.params;
|
1784
|
-
const permissionChecker2 = getService$
|
1956
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1785
1957
|
const [totalEntries, document] = await Promise.all([
|
1786
1958
|
strapi.db.query(model).count(),
|
1787
1959
|
createDocument(ctx)
|
@@ -1802,7 +1974,7 @@ const collectionTypes = {
|
|
1802
1974
|
async update(ctx) {
|
1803
1975
|
const { userAbility } = ctx.state;
|
1804
1976
|
const { model } = ctx.params;
|
1805
|
-
const permissionChecker2 = getService$
|
1977
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1806
1978
|
const updatedVersion = await updateDocument(ctx);
|
1807
1979
|
const sanitizedVersion = await permissionChecker2.sanitizeOutput(updatedVersion);
|
1808
1980
|
ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedVersion);
|
@@ -1811,13 +1983,13 @@ const collectionTypes = {
|
|
1811
1983
|
const { userAbility, user } = ctx.state;
|
1812
1984
|
const { model, sourceId: id } = ctx.params;
|
1813
1985
|
const { body } = ctx.request;
|
1814
|
-
const documentManager2 = getService$
|
1815
|
-
const permissionChecker2 = getService$
|
1986
|
+
const documentManager2 = getService$2("document-manager");
|
1987
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1816
1988
|
if (permissionChecker2.cannot.create()) {
|
1817
1989
|
return ctx.forbidden();
|
1818
1990
|
}
|
1819
1991
|
const permissionQuery = await permissionChecker2.sanitizedQuery.create(ctx.query);
|
1820
|
-
const populate = await getService$
|
1992
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1821
1993
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1822
1994
|
const document = await documentManager2.findOne(id, model, {
|
1823
1995
|
populate,
|
@@ -1856,13 +2028,13 @@ const collectionTypes = {
|
|
1856
2028
|
async delete(ctx) {
|
1857
2029
|
const { userAbility } = ctx.state;
|
1858
2030
|
const { id, model } = ctx.params;
|
1859
|
-
const documentManager2 = getService$
|
1860
|
-
const permissionChecker2 = getService$
|
2031
|
+
const documentManager2 = getService$2("document-manager");
|
2032
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1861
2033
|
if (permissionChecker2.cannot.delete()) {
|
1862
2034
|
return ctx.forbidden();
|
1863
2035
|
}
|
1864
2036
|
const permissionQuery = await permissionChecker2.sanitizedQuery.delete(ctx.query);
|
1865
|
-
const populate = await getService$
|
2037
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1866
2038
|
const { locale } = await getDocumentLocaleAndStatus(ctx.query, model);
|
1867
2039
|
const documentLocales = await documentManager2.findLocales(id, model, { populate, locale });
|
1868
2040
|
if (documentLocales.length === 0) {
|
@@ -1884,14 +2056,14 @@ const collectionTypes = {
|
|
1884
2056
|
const { userAbility } = ctx.state;
|
1885
2057
|
const { id, model } = ctx.params;
|
1886
2058
|
const { body } = ctx.request;
|
1887
|
-
const documentManager2 = getService$
|
1888
|
-
const permissionChecker2 = getService$
|
2059
|
+
const documentManager2 = getService$2("document-manager");
|
2060
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1889
2061
|
if (permissionChecker2.cannot.publish()) {
|
1890
2062
|
return ctx.forbidden();
|
1891
2063
|
}
|
1892
2064
|
const publishedDocument = await strapi.db.transaction(async () => {
|
1893
2065
|
const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
|
1894
|
-
const populate = await getService$
|
2066
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1895
2067
|
let document;
|
1896
2068
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1897
2069
|
const isCreate = isNil$1(id);
|
@@ -1939,13 +2111,13 @@ const collectionTypes = {
|
|
1939
2111
|
const { body } = ctx.request;
|
1940
2112
|
const { documentIds } = body;
|
1941
2113
|
await validateBulkActionInput(body);
|
1942
|
-
const documentManager2 = getService$
|
1943
|
-
const permissionChecker2 = getService$
|
2114
|
+
const documentManager2 = getService$2("document-manager");
|
2115
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1944
2116
|
if (permissionChecker2.cannot.publish()) {
|
1945
2117
|
return ctx.forbidden();
|
1946
2118
|
}
|
1947
2119
|
const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
|
1948
|
-
const populate = await getService$
|
2120
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1949
2121
|
const { locale } = await getDocumentLocaleAndStatus(body, model, {
|
1950
2122
|
allowMultipleLocales: true
|
1951
2123
|
});
|
@@ -1970,8 +2142,8 @@ const collectionTypes = {
|
|
1970
2142
|
const { body } = ctx.request;
|
1971
2143
|
const { documentIds } = body;
|
1972
2144
|
await validateBulkActionInput(body);
|
1973
|
-
const documentManager2 = getService$
|
1974
|
-
const permissionChecker2 = getService$
|
2145
|
+
const documentManager2 = getService$2("document-manager");
|
2146
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1975
2147
|
if (permissionChecker2.cannot.unpublish()) {
|
1976
2148
|
return ctx.forbidden();
|
1977
2149
|
}
|
@@ -2000,8 +2172,8 @@ const collectionTypes = {
|
|
2000
2172
|
const {
|
2001
2173
|
body: { discardDraft, ...body }
|
2002
2174
|
} = ctx.request;
|
2003
|
-
const documentManager2 = getService$
|
2004
|
-
const permissionChecker2 = getService$
|
2175
|
+
const documentManager2 = getService$2("document-manager");
|
2176
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2005
2177
|
if (permissionChecker2.cannot.unpublish()) {
|
2006
2178
|
return ctx.forbidden();
|
2007
2179
|
}
|
@@ -2009,7 +2181,7 @@ const collectionTypes = {
|
|
2009
2181
|
return ctx.forbidden();
|
2010
2182
|
}
|
2011
2183
|
const permissionQuery = await permissionChecker2.sanitizedQuery.unpublish(ctx.query);
|
2012
|
-
const populate = await getService$
|
2184
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2013
2185
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2014
2186
|
const document = await documentManager2.findOne(id, model, {
|
2015
2187
|
populate,
|
@@ -2040,13 +2212,13 @@ const collectionTypes = {
|
|
2040
2212
|
const { userAbility } = ctx.state;
|
2041
2213
|
const { id, model } = ctx.params;
|
2042
2214
|
const { body } = ctx.request;
|
2043
|
-
const documentManager2 = getService$
|
2044
|
-
const permissionChecker2 = getService$
|
2215
|
+
const documentManager2 = getService$2("document-manager");
|
2216
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2045
2217
|
if (permissionChecker2.cannot.discard()) {
|
2046
2218
|
return ctx.forbidden();
|
2047
2219
|
}
|
2048
2220
|
const permissionQuery = await permissionChecker2.sanitizedQuery.discard(ctx.query);
|
2049
|
-
const populate = await getService$
|
2221
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2050
2222
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2051
2223
|
const document = await documentManager2.findOne(id, model, {
|
2052
2224
|
populate,
|
@@ -2071,13 +2243,13 @@ const collectionTypes = {
|
|
2071
2243
|
const { query, body } = ctx.request;
|
2072
2244
|
const { documentIds } = body;
|
2073
2245
|
await validateBulkActionInput(body);
|
2074
|
-
const documentManager2 = getService$
|
2075
|
-
const permissionChecker2 = getService$
|
2246
|
+
const documentManager2 = getService$2("document-manager");
|
2247
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2076
2248
|
if (permissionChecker2.cannot.delete()) {
|
2077
2249
|
return ctx.forbidden();
|
2078
2250
|
}
|
2079
2251
|
const permissionQuery = await permissionChecker2.sanitizedQuery.delete(query);
|
2080
|
-
const populate = await getService$
|
2252
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2081
2253
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2082
2254
|
const documentLocales = await documentManager2.findLocales(documentIds, model, {
|
2083
2255
|
populate,
|
@@ -2098,13 +2270,13 @@ const collectionTypes = {
|
|
2098
2270
|
async countDraftRelations(ctx) {
|
2099
2271
|
const { userAbility } = ctx.state;
|
2100
2272
|
const { model, id } = ctx.params;
|
2101
|
-
const documentManager2 = getService$
|
2102
|
-
const permissionChecker2 = getService$
|
2273
|
+
const documentManager2 = getService$2("document-manager");
|
2274
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2103
2275
|
if (permissionChecker2.cannot.read()) {
|
2104
2276
|
return ctx.forbidden();
|
2105
2277
|
}
|
2106
2278
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
2107
|
-
const populate = await getService$
|
2279
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2108
2280
|
const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);
|
2109
2281
|
const entity = await documentManager2.findOne(id, model, { populate, locale, status });
|
2110
2282
|
if (!entity) {
|
@@ -2123,8 +2295,8 @@ const collectionTypes = {
|
|
2123
2295
|
const ids = ctx.request.query.documentIds;
|
2124
2296
|
const locale = ctx.request.query.locale;
|
2125
2297
|
const { model } = ctx.params;
|
2126
|
-
const documentManager2 = getService$
|
2127
|
-
const permissionChecker2 = getService$
|
2298
|
+
const documentManager2 = getService$2("document-manager");
|
2299
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2128
2300
|
if (permissionChecker2.cannot.read()) {
|
2129
2301
|
return ctx.forbidden();
|
2130
2302
|
}
|
@@ -2148,13 +2320,13 @@ const collectionTypes = {
|
|
2148
2320
|
};
|
2149
2321
|
const components$1 = {
|
2150
2322
|
findComponents(ctx) {
|
2151
|
-
const components2 = getService$
|
2152
|
-
const { toDto } = getService$
|
2323
|
+
const components2 = getService$2("components").findAllComponents();
|
2324
|
+
const { toDto } = getService$2("data-mapper");
|
2153
2325
|
ctx.body = { data: components2.map(toDto) };
|
2154
2326
|
},
|
2155
2327
|
async findComponentConfiguration(ctx) {
|
2156
2328
|
const { uid: uid2 } = ctx.params;
|
2157
|
-
const componentService = getService$
|
2329
|
+
const componentService = getService$2("components");
|
2158
2330
|
const component = componentService.findComponent(uid2);
|
2159
2331
|
if (!component) {
|
2160
2332
|
return ctx.notFound("component.notFound");
|
@@ -2171,7 +2343,7 @@ const components$1 = {
|
|
2171
2343
|
async updateComponentConfiguration(ctx) {
|
2172
2344
|
const { uid: uid2 } = ctx.params;
|
2173
2345
|
const { body } = ctx.request;
|
2174
|
-
const componentService = getService$
|
2346
|
+
const componentService = getService$2("components");
|
2175
2347
|
const component = componentService.findComponent(uid2);
|
2176
2348
|
if (!component) {
|
2177
2349
|
return ctx.notFound("component.notFound");
|
@@ -2205,12 +2377,12 @@ const contentTypes = {
|
|
2205
2377
|
} catch (error) {
|
2206
2378
|
return ctx.send({ error }, 400);
|
2207
2379
|
}
|
2208
|
-
const contentTypes2 = getService$
|
2209
|
-
const { toDto } = getService$
|
2380
|
+
const contentTypes2 = getService$2("content-types").findContentTypesByKind(kind);
|
2381
|
+
const { toDto } = getService$2("data-mapper");
|
2210
2382
|
ctx.body = { data: contentTypes2.map(toDto) };
|
2211
2383
|
},
|
2212
2384
|
async findContentTypesSettings(ctx) {
|
2213
|
-
const { findAllContentTypes, findConfiguration } = getService$
|
2385
|
+
const { findAllContentTypes, findConfiguration } = getService$2("content-types");
|
2214
2386
|
const contentTypes2 = await findAllContentTypes();
|
2215
2387
|
const configurations = await Promise.all(
|
2216
2388
|
contentTypes2.map(async (contentType) => {
|
@@ -2224,7 +2396,7 @@ const contentTypes = {
|
|
2224
2396
|
},
|
2225
2397
|
async findContentTypeConfiguration(ctx) {
|
2226
2398
|
const { uid: uid2 } = ctx.params;
|
2227
|
-
const contentTypeService = getService$
|
2399
|
+
const contentTypeService = getService$2("content-types");
|
2228
2400
|
const contentType = await contentTypeService.findContentType(uid2);
|
2229
2401
|
if (!contentType) {
|
2230
2402
|
return ctx.notFound("contentType.notFound");
|
@@ -2246,13 +2418,13 @@ const contentTypes = {
|
|
2246
2418
|
const { userAbility } = ctx.state;
|
2247
2419
|
const { uid: uid2 } = ctx.params;
|
2248
2420
|
const { body } = ctx.request;
|
2249
|
-
const contentTypeService = getService$
|
2250
|
-
const metricsService = getService$
|
2421
|
+
const contentTypeService = getService$2("content-types");
|
2422
|
+
const metricsService = getService$2("metrics");
|
2251
2423
|
const contentType = await contentTypeService.findContentType(uid2);
|
2252
2424
|
if (!contentType) {
|
2253
2425
|
return ctx.notFound("contentType.notFound");
|
2254
2426
|
}
|
2255
|
-
if (!getService$
|
2427
|
+
if (!getService$2("permission").canConfigureContentType({ userAbility, contentType })) {
|
2256
2428
|
return ctx.forbidden();
|
2257
2429
|
}
|
2258
2430
|
let input;
|
@@ -2285,10 +2457,10 @@ const contentTypes = {
|
|
2285
2457
|
};
|
2286
2458
|
const init = {
|
2287
2459
|
getInitData(ctx) {
|
2288
|
-
const { toDto } = getService$
|
2289
|
-
const { findAllComponents } = getService$
|
2290
|
-
const { getAllFieldSizes } = getService$
|
2291
|
-
const { findAllContentTypes } = getService$
|
2460
|
+
const { toDto } = getService$2("data-mapper");
|
2461
|
+
const { findAllComponents } = getService$2("components");
|
2462
|
+
const { getAllFieldSizes } = getService$2("field-sizes");
|
2463
|
+
const { findAllContentTypes } = getService$2("content-types");
|
2292
2464
|
ctx.body = {
|
2293
2465
|
data: {
|
2294
2466
|
fieldSizes: getAllFieldSizes(),
|
@@ -2324,7 +2496,7 @@ const addFiltersClause = (params, filtersClause) => {
|
|
2324
2496
|
params.filters.$and.push(filtersClause);
|
2325
2497
|
};
|
2326
2498
|
const sanitizeMainField = (model, mainField, userAbility) => {
|
2327
|
-
const permissionChecker2 = getService$
|
2499
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2328
2500
|
userAbility,
|
2329
2501
|
model: model.uid
|
2330
2502
|
});
|
@@ -2338,15 +2510,27 @@ const sanitizeMainField = (model, mainField, userAbility) => {
|
|
2338
2510
|
}
|
2339
2511
|
return mainField;
|
2340
2512
|
};
|
2341
|
-
const addStatusToRelations = async (
|
2342
|
-
if (!contentTypes$1.hasDraftAndPublish(strapi.
|
2513
|
+
const addStatusToRelations = async (targetUid, relations2) => {
|
2514
|
+
if (!contentTypes$1.hasDraftAndPublish(strapi.getModel(targetUid))) {
|
2515
|
+
return relations2;
|
2516
|
+
}
|
2517
|
+
const documentMetadata2 = getService$2("document-metadata");
|
2518
|
+
if (!relations2.length) {
|
2343
2519
|
return relations2;
|
2344
2520
|
}
|
2345
|
-
const
|
2346
|
-
const
|
2521
|
+
const firstRelation = relations2[0];
|
2522
|
+
const filters = {
|
2523
|
+
documentId: { $in: relations2.map((r) => r.documentId) },
|
2524
|
+
// NOTE: find the "opposite" status
|
2525
|
+
publishedAt: firstRelation.publishedAt !== null ? { $null: true } : { $notNull: true }
|
2526
|
+
};
|
2527
|
+
const availableStatus = await strapi.query(targetUid).findMany({
|
2528
|
+
select: ["id", "documentId", "locale", "updatedAt", "createdAt", "publishedAt"],
|
2529
|
+
filters
|
2530
|
+
});
|
2347
2531
|
return relations2.map((relation) => {
|
2348
|
-
const availableStatuses =
|
2349
|
-
(availableDocument) => availableDocument.documentId === relation.documentId
|
2532
|
+
const availableStatuses = availableStatus.filter(
|
2533
|
+
(availableDocument) => availableDocument.documentId === relation.documentId && (relation.locale ? availableDocument.locale === relation.locale : true)
|
2350
2534
|
);
|
2351
2535
|
return {
|
2352
2536
|
...relation,
|
@@ -2408,7 +2592,7 @@ const relations = {
|
|
2408
2592
|
ctx.request?.query?.locale
|
2409
2593
|
);
|
2410
2594
|
const { status } = validateStatus(sourceUid, ctx.request?.query?.status);
|
2411
|
-
const permissionChecker2 = getService$
|
2595
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2412
2596
|
userAbility,
|
2413
2597
|
model
|
2414
2598
|
});
|
@@ -2433,7 +2617,7 @@ const relations = {
|
|
2433
2617
|
where.id = id;
|
2434
2618
|
}
|
2435
2619
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
2436
|
-
const populate = await getService$
|
2620
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2437
2621
|
const currentEntity = await strapi.db.query(model).findOne({
|
2438
2622
|
where,
|
2439
2623
|
populate
|
@@ -2448,7 +2632,7 @@ const relations = {
|
|
2448
2632
|
}
|
2449
2633
|
entryId = currentEntity.id;
|
2450
2634
|
}
|
2451
|
-
const modelConfig = isComponent2 ? await getService$
|
2635
|
+
const modelConfig = isComponent2 ? await getService$2("components").findConfiguration(sourceSchema) : await getService$2("content-types").findConfiguration(sourceSchema);
|
2452
2636
|
const targetSchema = strapi.getModel(targetUid);
|
2453
2637
|
const mainField = flow(
|
2454
2638
|
prop(`metadatas.${targetField}.edit.mainField`),
|
@@ -2502,7 +2686,7 @@ const relations = {
|
|
2502
2686
|
}
|
2503
2687
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2504
2688
|
const { idsToOmit, idsToInclude, _q, ...query } = ctx.request.query;
|
2505
|
-
const permissionChecker2 = getService$
|
2689
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2506
2690
|
userAbility: ctx.state.userAbility,
|
2507
2691
|
model: targetUid
|
2508
2692
|
});
|
@@ -2575,21 +2759,33 @@ const relations = {
|
|
2575
2759
|
attribute,
|
2576
2760
|
targetField,
|
2577
2761
|
fieldsToSelect,
|
2578
|
-
|
2579
|
-
|
2580
|
-
}
|
2581
|
-
target: {
|
2582
|
-
schema: { uid: targetUid }
|
2583
|
-
}
|
2762
|
+
status,
|
2763
|
+
source: { schema: sourceSchema },
|
2764
|
+
target: { schema: targetSchema }
|
2584
2765
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2585
|
-
const
|
2766
|
+
const { uid: sourceUid } = sourceSchema;
|
2767
|
+
const { uid: targetUid } = targetSchema;
|
2768
|
+
const permissionQuery = await getService$2("permission-checker").create({ userAbility, model: targetUid }).sanitizedQuery.read({ fields: fieldsToSelect });
|
2586
2769
|
const dbQuery = strapi.db.query(sourceUid);
|
2587
2770
|
const loadRelations = relations$1.isAnyToMany(attribute) ? (...args) => dbQuery.loadPages(...args) : (...args) => dbQuery.load(...args).then((res2) => ({ results: res2 ? [res2] : [] }));
|
2771
|
+
const filters = {};
|
2772
|
+
if (sourceSchema?.options?.draftAndPublish) {
|
2773
|
+
if (targetSchema?.options?.draftAndPublish) {
|
2774
|
+
if (status === "published") {
|
2775
|
+
filters.publishedAt = { $notNull: true };
|
2776
|
+
} else {
|
2777
|
+
filters.publishedAt = { $null: true };
|
2778
|
+
}
|
2779
|
+
}
|
2780
|
+
} else if (targetSchema?.options?.draftAndPublish) {
|
2781
|
+
filters.publishedAt = { $null: true };
|
2782
|
+
}
|
2588
2783
|
const res = await loadRelations({ id: entryId }, targetField, {
|
2589
|
-
select: ["id", "documentId", "locale", "publishedAt"],
|
2784
|
+
select: ["id", "documentId", "locale", "publishedAt", "updatedAt"],
|
2590
2785
|
ordering: "desc",
|
2591
2786
|
page: ctx.request.query.page,
|
2592
|
-
pageSize: ctx.request.query.pageSize
|
2787
|
+
pageSize: ctx.request.query.pageSize,
|
2788
|
+
filters
|
2593
2789
|
});
|
2594
2790
|
const loadedIds = res.results.map((item) => item.id);
|
2595
2791
|
addFiltersClause(permissionQuery, { id: { $in: loadedIds } });
|
@@ -2610,10 +2806,10 @@ const relations = {
|
|
2610
2806
|
}
|
2611
2807
|
};
|
2612
2808
|
const buildPopulateFromQuery = async (query, model) => {
|
2613
|
-
return getService$
|
2809
|
+
return getService$2("populate-builder")(model).populateFromQuery(query).populateDeep(Infinity).countRelations().build();
|
2614
2810
|
};
|
2615
2811
|
const findDocument = async (query, uid2, opts = {}) => {
|
2616
|
-
const documentManager2 = getService$
|
2812
|
+
const documentManager2 = getService$2("document-manager");
|
2617
2813
|
const populate = await buildPopulateFromQuery(query, uid2);
|
2618
2814
|
return documentManager2.findMany({ ...opts, populate }, uid2).then((documents) => documents[0]);
|
2619
2815
|
};
|
@@ -2621,8 +2817,8 @@ const createOrUpdateDocument = async (ctx, opts) => {
|
|
2621
2817
|
const { user, userAbility } = ctx.state;
|
2622
2818
|
const { model } = ctx.params;
|
2623
2819
|
const { body, query } = ctx.request;
|
2624
|
-
const documentManager2 = getService$
|
2625
|
-
const permissionChecker2 = getService$
|
2820
|
+
const documentManager2 = getService$2("document-manager");
|
2821
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2626
2822
|
if (permissionChecker2.cannot.create() && permissionChecker2.cannot.update()) {
|
2627
2823
|
throw new errors.ForbiddenError();
|
2628
2824
|
}
|
@@ -2663,7 +2859,7 @@ const singleTypes = {
|
|
2663
2859
|
const { userAbility } = ctx.state;
|
2664
2860
|
const { model } = ctx.params;
|
2665
2861
|
const { query = {} } = ctx.request;
|
2666
|
-
const permissionChecker2 = getService$
|
2862
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2667
2863
|
if (permissionChecker2.cannot.read()) {
|
2668
2864
|
return ctx.forbidden();
|
2669
2865
|
}
|
@@ -2697,7 +2893,7 @@ const singleTypes = {
|
|
2697
2893
|
async createOrUpdate(ctx) {
|
2698
2894
|
const { userAbility } = ctx.state;
|
2699
2895
|
const { model } = ctx.params;
|
2700
|
-
const permissionChecker2 = getService$
|
2896
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2701
2897
|
const document = await createOrUpdateDocument(ctx);
|
2702
2898
|
const sanitizedDocument = await permissionChecker2.sanitizeOutput(document);
|
2703
2899
|
ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedDocument);
|
@@ -2706,8 +2902,8 @@ const singleTypes = {
|
|
2706
2902
|
const { userAbility } = ctx.state;
|
2707
2903
|
const { model } = ctx.params;
|
2708
2904
|
const { query = {} } = ctx.request;
|
2709
|
-
const documentManager2 = getService$
|
2710
|
-
const permissionChecker2 = getService$
|
2905
|
+
const documentManager2 = getService$2("document-manager");
|
2906
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2711
2907
|
if (permissionChecker2.cannot.delete()) {
|
2712
2908
|
return ctx.forbidden();
|
2713
2909
|
}
|
@@ -2735,8 +2931,8 @@ const singleTypes = {
|
|
2735
2931
|
const { userAbility } = ctx.state;
|
2736
2932
|
const { model } = ctx.params;
|
2737
2933
|
const { query = {} } = ctx.request;
|
2738
|
-
const documentManager2 = getService$
|
2739
|
-
const permissionChecker2 = getService$
|
2934
|
+
const documentManager2 = getService$2("document-manager");
|
2935
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2740
2936
|
if (permissionChecker2.cannot.publish()) {
|
2741
2937
|
return ctx.forbidden();
|
2742
2938
|
}
|
@@ -2764,8 +2960,8 @@ const singleTypes = {
|
|
2764
2960
|
body: { discardDraft, ...body },
|
2765
2961
|
query = {}
|
2766
2962
|
} = ctx.request;
|
2767
|
-
const documentManager2 = getService$
|
2768
|
-
const permissionChecker2 = getService$
|
2963
|
+
const documentManager2 = getService$2("document-manager");
|
2964
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2769
2965
|
if (permissionChecker2.cannot.unpublish()) {
|
2770
2966
|
return ctx.forbidden();
|
2771
2967
|
}
|
@@ -2799,8 +2995,8 @@ const singleTypes = {
|
|
2799
2995
|
const { userAbility } = ctx.state;
|
2800
2996
|
const { model } = ctx.params;
|
2801
2997
|
const { body, query = {} } = ctx.request;
|
2802
|
-
const documentManager2 = getService$
|
2803
|
-
const permissionChecker2 = getService$
|
2998
|
+
const documentManager2 = getService$2("document-manager");
|
2999
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2804
3000
|
if (permissionChecker2.cannot.discard()) {
|
2805
3001
|
return ctx.forbidden();
|
2806
3002
|
}
|
@@ -2823,8 +3019,8 @@ const singleTypes = {
|
|
2823
3019
|
const { userAbility } = ctx.state;
|
2824
3020
|
const { model } = ctx.params;
|
2825
3021
|
const { query } = ctx.request;
|
2826
|
-
const documentManager2 = getService$
|
2827
|
-
const permissionChecker2 = getService$
|
3022
|
+
const documentManager2 = getService$2("document-manager");
|
3023
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2828
3024
|
const { locale } = await getDocumentLocaleAndStatus(query, model);
|
2829
3025
|
if (permissionChecker2.cannot.read()) {
|
2830
3026
|
return ctx.forbidden();
|
@@ -2848,7 +3044,7 @@ const uid$1 = {
|
|
2848
3044
|
const { query = {} } = ctx.request;
|
2849
3045
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2850
3046
|
await validateUIDField(contentTypeUID, field);
|
2851
|
-
const uidService = getService$
|
3047
|
+
const uidService = getService$2("uid");
|
2852
3048
|
ctx.body = {
|
2853
3049
|
data: await uidService.generateUIDField({ contentTypeUID, field, data, locale })
|
2854
3050
|
};
|
@@ -2860,7 +3056,7 @@ const uid$1 = {
|
|
2860
3056
|
const { query = {} } = ctx.request;
|
2861
3057
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2862
3058
|
await validateUIDField(contentTypeUID, field);
|
2863
|
-
const uidService = getService$
|
3059
|
+
const uidService = getService$2("uid");
|
2864
3060
|
const isAvailable = await uidService.checkUIDAvailability({
|
2865
3061
|
contentTypeUID,
|
2866
3062
|
field,
|
@@ -2881,7 +3077,8 @@ const controllers = {
|
|
2881
3077
|
relations,
|
2882
3078
|
"single-types": singleTypes,
|
2883
3079
|
uid: uid$1,
|
2884
|
-
...history.controllers ? history.controllers : {}
|
3080
|
+
...history.controllers ? history.controllers : {},
|
3081
|
+
...preview.controllers ? preview.controllers : {}
|
2885
3082
|
};
|
2886
3083
|
const keys = {
|
2887
3084
|
CONFIGURATION: "configuration"
|
@@ -3032,12 +3229,12 @@ async function syncMetadatas(configuration, schema) {
|
|
3032
3229
|
return _.assign(metasWithDefaults, updatedMetas);
|
3033
3230
|
}
|
3034
3231
|
const getTargetSchema = (targetModel) => {
|
3035
|
-
return getService$
|
3232
|
+
return getService$2("content-types").findContentType(targetModel);
|
3036
3233
|
};
|
3037
3234
|
const DEFAULT_LIST_LENGTH = 4;
|
3038
3235
|
const MAX_ROW_SIZE = 12;
|
3039
3236
|
const isAllowedFieldSize = (type, size) => {
|
3040
|
-
const { getFieldSize } = getService$
|
3237
|
+
const { getFieldSize } = getService$2("field-sizes");
|
3041
3238
|
const fieldSize = getFieldSize(type);
|
3042
3239
|
if (!fieldSize.isResizable && size !== fieldSize.default) {
|
3043
3240
|
return false;
|
@@ -3045,7 +3242,7 @@ const isAllowedFieldSize = (type, size) => {
|
|
3045
3242
|
return size <= MAX_ROW_SIZE;
|
3046
3243
|
};
|
3047
3244
|
const getDefaultFieldSize = (attribute) => {
|
3048
|
-
const { hasFieldSize, getFieldSize } = getService$
|
3245
|
+
const { hasFieldSize, getFieldSize } = getService$2("field-sizes");
|
3049
3246
|
return getFieldSize(hasFieldSize(attribute.customField) ? attribute.customField : attribute.type).default;
|
3050
3247
|
};
|
3051
3248
|
async function createDefaultLayouts(schema) {
|
@@ -3080,7 +3277,7 @@ function syncLayouts(configuration, schema) {
|
|
3080
3277
|
for (const el of row) {
|
3081
3278
|
if (!hasEditableAttribute(schema, el.name))
|
3082
3279
|
continue;
|
3083
|
-
const { hasFieldSize } = getService$
|
3280
|
+
const { hasFieldSize } = getService$2("field-sizes");
|
3084
3281
|
const fieldType = hasFieldSize(schema.attributes[el.name].customField) ? schema.attributes[el.name].customField : schema.attributes[el.name].type;
|
3085
3282
|
if (!isAllowedFieldSize(fieldType, el.size)) {
|
3086
3283
|
elementsToReAppend.push(el.name);
|
@@ -3220,17 +3417,17 @@ const configurationService$1 = createConfigurationService({
|
|
3220
3417
|
isComponent: true,
|
3221
3418
|
prefix: STORE_KEY_PREFIX,
|
3222
3419
|
getModels() {
|
3223
|
-
const { toContentManagerModel } = getService$
|
3420
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3224
3421
|
return mapValues(toContentManagerModel, strapi.components);
|
3225
3422
|
}
|
3226
3423
|
});
|
3227
3424
|
const components = ({ strapi: strapi2 }) => ({
|
3228
3425
|
findAllComponents() {
|
3229
|
-
const { toContentManagerModel } = getService$
|
3426
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3230
3427
|
return Object.values(strapi2.components).map(toContentManagerModel);
|
3231
3428
|
},
|
3232
3429
|
findComponent(uid2) {
|
3233
|
-
const { toContentManagerModel } = getService$
|
3430
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3234
3431
|
const component = strapi2.components[uid2];
|
3235
3432
|
return isNil$1(component) ? component : toContentManagerModel(component);
|
3236
3433
|
},
|
@@ -3281,17 +3478,17 @@ const configurationService = createConfigurationService({
|
|
3281
3478
|
storeUtils,
|
3282
3479
|
prefix: "content_types",
|
3283
3480
|
getModels() {
|
3284
|
-
const { toContentManagerModel } = getService$
|
3481
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3285
3482
|
return mapValues(toContentManagerModel, strapi.contentTypes);
|
3286
3483
|
}
|
3287
3484
|
});
|
3288
3485
|
const service = ({ strapi: strapi2 }) => ({
|
3289
3486
|
findAllContentTypes() {
|
3290
|
-
const { toContentManagerModel } = getService$
|
3487
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3291
3488
|
return Object.values(strapi2.contentTypes).map(toContentManagerModel);
|
3292
3489
|
},
|
3293
3490
|
findContentType(uid2) {
|
3294
|
-
const { toContentManagerModel } = getService$
|
3491
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3295
3492
|
const contentType = strapi2.contentTypes[uid2];
|
3296
3493
|
return isNil$1(contentType) ? contentType : toContentManagerModel(contentType);
|
3297
3494
|
},
|
@@ -3320,7 +3517,7 @@ const service = ({ strapi: strapi2 }) => ({
|
|
3320
3517
|
return this.findConfiguration(contentType);
|
3321
3518
|
},
|
3322
3519
|
findComponentsConfigurations(contentType) {
|
3323
|
-
return getService$
|
3520
|
+
return getService$2("components").findComponentsConfigurations(contentType);
|
3324
3521
|
},
|
3325
3522
|
syncConfigurations() {
|
3326
3523
|
return configurationService.syncConfigurations();
|
@@ -3592,7 +3789,7 @@ const permission = ({ strapi: strapi2 }) => ({
|
|
3592
3789
|
return userAbility.can(action);
|
3593
3790
|
},
|
3594
3791
|
async registerPermissions() {
|
3595
|
-
const displayedContentTypes = getService$
|
3792
|
+
const displayedContentTypes = getService$2("content-types").findDisplayedContentTypes();
|
3596
3793
|
const contentTypesUids = displayedContentTypes.map(prop("uid"));
|
3597
3794
|
const actions = [
|
3598
3795
|
{
|
@@ -3868,7 +4065,7 @@ const getQueryPopulate = async (uid2, query) => {
|
|
3868
4065
|
return populateQuery;
|
3869
4066
|
};
|
3870
4067
|
const buildDeepPopulate = (uid2) => {
|
3871
|
-
return getService$
|
4068
|
+
return getService$2("populate-builder")(uid2).populateDeep(Infinity).countRelations().build();
|
3872
4069
|
};
|
3873
4070
|
const populateBuilder = (uid2) => {
|
3874
4071
|
let getInitialPopulate = async () => {
|
@@ -4053,7 +4250,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4053
4250
|
*/
|
4054
4251
|
async getAvailableLocales(uid2, version, allVersions, validatableFields = []) {
|
4055
4252
|
const versionsByLocale = groupBy("locale", allVersions);
|
4056
|
-
|
4253
|
+
if (version.locale) {
|
4254
|
+
delete versionsByLocale[version.locale];
|
4255
|
+
}
|
4057
4256
|
const model = strapi2.getModel(uid2);
|
4058
4257
|
const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
|
4059
4258
|
const traversalFunction = async (localeVersion) => traverseEntity(
|
@@ -4409,7 +4608,8 @@ const services = {
|
|
4409
4608
|
permission,
|
4410
4609
|
"populate-builder": populateBuilder$1,
|
4411
4610
|
uid,
|
4412
|
-
...history.services ? history.services : {}
|
4611
|
+
...history.services ? history.services : {},
|
4612
|
+
...preview.services ? preview.services : {}
|
4413
4613
|
};
|
4414
4614
|
const index = () => {
|
4415
4615
|
return {
|