@strapi/content-manager 0.0.0-next.b558642be856459a3e6c076f5d76fffbfc5fc5a1 → 0.0.0-next.c3eb27c3a05a30387b6b44e15d3661201d54787d
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-gsCd80MU.js → ComponentConfigurationPage-Cr0ttPAZ.js} +3 -3
- package/dist/_chunks/{ComponentConfigurationPage-gsCd80MU.js.map → ComponentConfigurationPage-Cr0ttPAZ.js.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-CIjXcRAB.mjs → ComponentConfigurationPage-UGIFDkPO.mjs} +3 -3
- package/dist/_chunks/{ComponentConfigurationPage-CIjXcRAB.mjs.map → ComponentConfigurationPage-UGIFDkPO.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-BglmD_BF.mjs → EditConfigurationPage-7hF4_8yK.mjs} +3 -3
- package/dist/_chunks/{EditConfigurationPage-BglmD_BF.mjs.map → EditConfigurationPage-7hF4_8yK.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-DHDQKBzw.js → EditConfigurationPage-Ds3BOL2z.js} +3 -3
- package/dist/_chunks/{EditConfigurationPage-DHDQKBzw.js.map → EditConfigurationPage-Ds3BOL2z.js.map} +1 -1
- package/dist/_chunks/{EditViewPage-CiwVPMaK.mjs → EditViewPage-CA98g5_g.mjs} +38 -8
- package/dist/_chunks/EditViewPage-CA98g5_g.mjs.map +1 -0
- package/dist/_chunks/{EditViewPage-C4iTxUPU.js → EditViewPage-DoQm9llG.js} +37 -7
- package/dist/_chunks/EditViewPage-DoQm9llG.js.map +1 -0
- package/dist/_chunks/{Field-DIjL1b5d.mjs → Field-B2C1tq9_.mjs} +27 -7
- package/dist/_chunks/Field-B2C1tq9_.mjs.map +1 -0
- package/dist/_chunks/{Field-DhXEK8y1.js → Field-CQtLQzHl.js} +27 -7
- package/dist/_chunks/Field-CQtLQzHl.js.map +1 -0
- package/dist/_chunks/{Form-CmNesrvR.mjs → Form-CxQ2pPjq.mjs} +2 -2
- package/dist/_chunks/{Form-CmNesrvR.mjs.map → Form-CxQ2pPjq.mjs.map} +1 -1
- package/dist/_chunks/{Form-CwmJ4sWe.js → Form-YQaS3_NH.js} +2 -2
- package/dist/_chunks/{Form-CwmJ4sWe.js.map → Form-YQaS3_NH.js.map} +1 -1
- package/dist/_chunks/{History-D-99Wh30.mjs → History-DTYKr2Cg.mjs} +17 -40
- package/dist/_chunks/History-DTYKr2Cg.mjs.map +1 -0
- package/dist/_chunks/{History-BLCCNgCt.js → History-DbdpigyF.js} +17 -40
- package/dist/_chunks/History-DbdpigyF.js.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-JPWZz7Kg.mjs → ListConfigurationPage-DQG-j52q.mjs} +2 -2
- package/dist/_chunks/{ListConfigurationPage-JPWZz7Kg.mjs.map → ListConfigurationPage-DQG-j52q.mjs.map} +1 -1
- package/dist/_chunks/{ListConfigurationPage-DxWpeZrO.js → ListConfigurationPage-DRGhXnUA.js} +2 -2
- package/dist/_chunks/{ListConfigurationPage-DxWpeZrO.js.map → ListConfigurationPage-DRGhXnUA.js.map} +1 -1
- package/dist/_chunks/{ListViewPage-CIQekSFz.js → ListViewPage-CVIEfYWN.js} +16 -5
- package/dist/_chunks/{ListViewPage-CIQekSFz.js.map → ListViewPage-CVIEfYWN.js.map} +1 -1
- package/dist/_chunks/{ListViewPage-DSK3f0ST.mjs → ListViewPage-DAekmnvp.mjs} +16 -5
- package/dist/_chunks/{ListViewPage-DSK3f0ST.mjs.map → ListViewPage-DAekmnvp.mjs.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-D99LU1YP.mjs → NoContentTypePage-5kwUPeFg.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-D99LU1YP.mjs.map → NoContentTypePage-5kwUPeFg.mjs.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-C5cxKvC2.js → NoContentTypePage-CTcfA2-Q.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-C5cxKvC2.js.map → NoContentTypePage-CTcfA2-Q.js.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-DBrBw-0y.mjs → NoPermissionsPage-d-JtEVAw.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-DBrBw-0y.mjs.map → NoPermissionsPage-d-JtEVAw.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-Oy4tmUrW.js → NoPermissionsPage-pVeCVj9a.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-Oy4tmUrW.js.map → NoPermissionsPage-pVeCVj9a.js.map} +1 -1
- package/dist/_chunks/Preview-COsm52rZ.js +307 -0
- package/dist/_chunks/Preview-COsm52rZ.js.map +1 -0
- package/dist/_chunks/Preview-gkmvcwhu.mjs +288 -0
- package/dist/_chunks/Preview-gkmvcwhu.mjs.map +1 -0
- package/dist/_chunks/{Relations-BBmhcWFV.mjs → Relations-7ItTFWp7.mjs} +6 -3
- package/dist/_chunks/Relations-7ItTFWp7.mjs.map +1 -0
- package/dist/_chunks/{Relations-eG-9p_qS.js → Relations-Beo_uDz1.js} +6 -3
- package/dist/_chunks/Relations-Beo_uDz1.js.map +1 -0
- package/dist/_chunks/{en-Bm0D0IWz.js → en-CHOp_xJv.js} +11 -2
- package/dist/_chunks/{en-Bm0D0IWz.js.map → en-CHOp_xJv.js.map} +1 -1
- package/dist/_chunks/{en-DKV44jRb.mjs → en-D_BMf0hT.mjs} +11 -2
- package/dist/_chunks/{en-DKV44jRb.mjs.map → en-D_BMf0hT.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-BIWDoFLK.js → index-CJX65DLa.js} +111 -55
- package/dist/_chunks/index-CJX65DLa.js.map +1 -0
- package/dist/_chunks/{index-BrUzbQ30.mjs → index-D3IiO0X8.mjs} +115 -59
- package/dist/_chunks/index-D3IiO0X8.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-lMc9i1-Z.js → layout-9fI2_QJt.js} +3 -3
- package/dist/_chunks/{layout-lMc9i1-Z.js.map → layout-9fI2_QJt.js.map} +1 -1
- package/dist/_chunks/{layout-_5-cXs34.mjs → layout-OhrmoJVB.mjs} +3 -3
- package/dist/_chunks/{layout-_5-cXs34.mjs.map → layout-OhrmoJVB.mjs.map} +1 -1
- package/dist/_chunks/{relations-BRHithi8.js → relations-DIT8sP52.js} +6 -3
- package/dist/_chunks/relations-DIT8sP52.js.map +1 -0
- package/dist/_chunks/{relations-B_VLk-DD.mjs → relations-sRERvWmr.mjs} +6 -3
- package/dist/_chunks/relations-sRERvWmr.mjs.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +4 -4
- package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
- package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +1 -1
- package/dist/admin/src/preview/components/PreviewContent.d.ts +2 -0
- package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
- package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -0
- package/dist/admin/src/preview/index.d.ts +1 -1
- package/dist/admin/src/preview/pages/Preview.d.ts +11 -0
- package/dist/admin/src/preview/routes.d.ts +3 -0
- package/dist/admin/src/preview/services/preview.d.ts +3 -0
- package/dist/admin/src/router.d.ts +1 -1
- package/dist/server/index.js +237 -123
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +237 -123
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
- package/dist/server/src/history/services/utils.d.ts.map +1 -1
- package/dist/server/src/preview/controllers/preview.d.ts +6 -2
- package/dist/server/src/preview/controllers/preview.d.ts.map +1 -1
- package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
- package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
- package/dist/server/src/preview/index.d.ts.map +1 -1
- package/dist/server/src/preview/services/index.d.ts +12 -1
- package/dist/server/src/preview/services/index.d.ts.map +1 -1
- 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 +7 -1
- package/dist/server/src/preview/services/preview.d.ts.map +1 -1
- package/dist/server/src/preview/utils.d.ts +12 -1
- package/dist/server/src/preview/utils.d.ts.map +1 -1
- package/dist/server/src/services/document-manager.d.ts.map +1 -1
- package/dist/shared/contracts/index.d.ts +1 -0
- package/dist/shared/contracts/index.d.ts.map +1 -1
- package/dist/shared/contracts/preview.d.ts +27 -0
- package/dist/shared/contracts/preview.d.ts.map +1 -0
- package/dist/shared/index.js +4 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/index.mjs +4 -0
- package/dist/shared/index.mjs.map +1 -1
- package/package.json +9 -9
- package/dist/_chunks/EditViewPage-C4iTxUPU.js.map +0 -1
- package/dist/_chunks/EditViewPage-CiwVPMaK.mjs.map +0 -1
- package/dist/_chunks/Field-DIjL1b5d.mjs.map +0 -1
- package/dist/_chunks/Field-DhXEK8y1.js.map +0 -1
- package/dist/_chunks/History-BLCCNgCt.js.map +0 -1
- package/dist/_chunks/History-D-99Wh30.mjs.map +0 -1
- package/dist/_chunks/Relations-BBmhcWFV.mjs.map +0 -1
- package/dist/_chunks/Relations-eG-9p_qS.js.map +0 -1
- package/dist/_chunks/index-BIWDoFLK.js.map +0 -1
- package/dist/_chunks/index-BrUzbQ30.mjs.map +0 -1
- package/dist/_chunks/relations-BRHithi8.js.map +0 -1
- package/dist/_chunks/relations-B_VLk-DD.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 {
|
@@ -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;
|
@@ -676,10 +697,10 @@ const getFeature$1 = () => {
|
|
676
697
|
strapi2.get("models").add(historyVersion);
|
677
698
|
},
|
678
699
|
bootstrap({ strapi: strapi2 }) {
|
679
|
-
getService(strapi2, "lifecycles").bootstrap();
|
700
|
+
getService$1(strapi2, "lifecycles").bootstrap();
|
680
701
|
},
|
681
702
|
destroy({ strapi: strapi2 }) {
|
682
|
-
getService(strapi2, "lifecycles").destroy();
|
703
|
+
getService$1(strapi2, "lifecycles").destroy();
|
683
704
|
},
|
684
705
|
controllers: controllers$2,
|
685
706
|
services: services$2,
|
@@ -709,7 +730,7 @@ const previewRouter = {
|
|
709
730
|
method: "GET",
|
710
731
|
info,
|
711
732
|
path: "/preview/url/:contentType",
|
712
|
-
handler: "preview.
|
733
|
+
handler: "preview.getPreviewUrl",
|
713
734
|
config: {
|
714
735
|
policies: ["admin::isAuthenticatedAdmin"]
|
715
736
|
}
|
@@ -719,12 +740,52 @@ const previewRouter = {
|
|
719
740
|
const routes$1 = {
|
720
741
|
preview: previewRouter
|
721
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
|
+
};
|
722
772
|
const createPreviewController = () => {
|
723
773
|
return {
|
724
|
-
|
725
|
-
|
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
|
+
}
|
726
787
|
return {
|
727
|
-
data: { url
|
788
|
+
data: { url }
|
728
789
|
};
|
729
790
|
}
|
730
791
|
};
|
@@ -736,10 +797,62 @@ const controllers$1 = {
|
|
736
797
|
* passing a controller factory as the value, instead of a controller object directly
|
737
798
|
*/
|
738
799
|
};
|
739
|
-
const createPreviewService = () => {
|
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
|
+
};
|
740
852
|
};
|
741
853
|
const services$1 = {
|
742
|
-
preview: createPreviewService
|
854
|
+
preview: createPreviewService,
|
855
|
+
"preview-config": createPreviewConfigService
|
743
856
|
};
|
744
857
|
const getFeature = () => {
|
745
858
|
if (!strapi.features.future.isEnabled(FEATURE_ID)) {
|
@@ -748,7 +861,8 @@ const getFeature = () => {
|
|
748
861
|
return {
|
749
862
|
bootstrap() {
|
750
863
|
console.log("Bootstrapping preview server");
|
751
|
-
|
864
|
+
const config = getService(strapi, "preview-config");
|
865
|
+
config.validate();
|
752
866
|
},
|
753
867
|
routes: routes$1,
|
754
868
|
controllers: controllers$1,
|
@@ -760,10 +874,10 @@ const bootstrap = async () => {
|
|
760
874
|
Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {
|
761
875
|
strapi.get("webhookStore").addAllowedEvent(key, value);
|
762
876
|
});
|
763
|
-
getService$
|
764
|
-
await getService$
|
765
|
-
await getService$
|
766
|
-
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();
|
767
881
|
await history.bootstrap?.({ strapi });
|
768
882
|
await preview.bootstrap?.({ strapi });
|
769
883
|
};
|
@@ -1513,7 +1627,7 @@ const createMetadasSchema = (schema) => {
|
|
1513
1627
|
if (!value) {
|
1514
1628
|
return yup$1.string();
|
1515
1629
|
}
|
1516
|
-
const targetSchema = getService$
|
1630
|
+
const targetSchema = getService$2("content-types").findContentType(
|
1517
1631
|
schema.attributes[key].targetModel
|
1518
1632
|
);
|
1519
1633
|
if (!targetSchema) {
|
@@ -1682,7 +1796,7 @@ const getDocumentLocaleAndStatus = async (request, model, opts = { allowMultiple
|
|
1682
1796
|
}
|
1683
1797
|
};
|
1684
1798
|
const formatDocumentWithMetadata = async (permissionChecker2, uid2, document, opts = {}) => {
|
1685
|
-
const documentMetadata2 = getService$
|
1799
|
+
const documentMetadata2 = getService$2("document-metadata");
|
1686
1800
|
const serviceOutput = await documentMetadata2.formatDocumentWithMetadata(uid2, document, opts);
|
1687
1801
|
let {
|
1688
1802
|
meta: { availableLocales, availableStatus }
|
@@ -1708,8 +1822,8 @@ const createDocument = async (ctx, opts) => {
|
|
1708
1822
|
const { userAbility, user } = ctx.state;
|
1709
1823
|
const { model } = ctx.params;
|
1710
1824
|
const { body } = ctx.request;
|
1711
|
-
const documentManager2 = getService$
|
1712
|
-
const permissionChecker2 = getService$
|
1825
|
+
const documentManager2 = getService$2("document-manager");
|
1826
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1713
1827
|
if (permissionChecker2.cannot.create()) {
|
1714
1828
|
throw new errors.ForbiddenError();
|
1715
1829
|
}
|
@@ -1729,13 +1843,13 @@ const updateDocument = async (ctx, opts) => {
|
|
1729
1843
|
const { userAbility, user } = ctx.state;
|
1730
1844
|
const { id, model } = ctx.params;
|
1731
1845
|
const { body } = ctx.request;
|
1732
|
-
const documentManager2 = getService$
|
1733
|
-
const permissionChecker2 = getService$
|
1846
|
+
const documentManager2 = getService$2("document-manager");
|
1847
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1734
1848
|
if (permissionChecker2.cannot.update()) {
|
1735
1849
|
throw new errors.ForbiddenError();
|
1736
1850
|
}
|
1737
1851
|
const permissionQuery = await permissionChecker2.sanitizedQuery.update(ctx.query);
|
1738
|
-
const populate = await getService$
|
1852
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1739
1853
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1740
1854
|
const [documentVersion, documentExists] = await Promise.all([
|
1741
1855
|
documentManager2.findOne(id, model, { populate, locale, status: "draft" }),
|
@@ -1766,14 +1880,14 @@ const collectionTypes = {
|
|
1766
1880
|
const { userAbility } = ctx.state;
|
1767
1881
|
const { model } = ctx.params;
|
1768
1882
|
const { query } = ctx.request;
|
1769
|
-
const documentMetadata2 = getService$
|
1770
|
-
const documentManager2 = getService$
|
1771
|
-
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 });
|
1772
1886
|
if (permissionChecker2.cannot.read()) {
|
1773
1887
|
return ctx.forbidden();
|
1774
1888
|
}
|
1775
1889
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(query);
|
1776
|
-
const populate = await getService$
|
1890
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(1).countRelations({ toOne: false, toMany: true }).build();
|
1777
1891
|
const { locale, status } = await getDocumentLocaleAndStatus(query, model);
|
1778
1892
|
const { results: documents, pagination: pagination2 } = await documentManager2.findPage(
|
1779
1893
|
{ ...permissionQuery, populate, locale, status },
|
@@ -1802,13 +1916,13 @@ const collectionTypes = {
|
|
1802
1916
|
async findOne(ctx) {
|
1803
1917
|
const { userAbility } = ctx.state;
|
1804
1918
|
const { model, id } = ctx.params;
|
1805
|
-
const documentManager2 = getService$
|
1806
|
-
const permissionChecker2 = getService$
|
1919
|
+
const documentManager2 = getService$2("document-manager");
|
1920
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1807
1921
|
if (permissionChecker2.cannot.read()) {
|
1808
1922
|
return ctx.forbidden();
|
1809
1923
|
}
|
1810
1924
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
1811
|
-
const populate = await getService$
|
1925
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1812
1926
|
const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);
|
1813
1927
|
const version = await documentManager2.findOne(id, model, {
|
1814
1928
|
populate,
|
@@ -1839,7 +1953,7 @@ const collectionTypes = {
|
|
1839
1953
|
async create(ctx) {
|
1840
1954
|
const { userAbility } = ctx.state;
|
1841
1955
|
const { model } = ctx.params;
|
1842
|
-
const permissionChecker2 = getService$
|
1956
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1843
1957
|
const [totalEntries, document] = await Promise.all([
|
1844
1958
|
strapi.db.query(model).count(),
|
1845
1959
|
createDocument(ctx)
|
@@ -1860,7 +1974,7 @@ const collectionTypes = {
|
|
1860
1974
|
async update(ctx) {
|
1861
1975
|
const { userAbility } = ctx.state;
|
1862
1976
|
const { model } = ctx.params;
|
1863
|
-
const permissionChecker2 = getService$
|
1977
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1864
1978
|
const updatedVersion = await updateDocument(ctx);
|
1865
1979
|
const sanitizedVersion = await permissionChecker2.sanitizeOutput(updatedVersion);
|
1866
1980
|
ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedVersion);
|
@@ -1869,13 +1983,13 @@ const collectionTypes = {
|
|
1869
1983
|
const { userAbility, user } = ctx.state;
|
1870
1984
|
const { model, sourceId: id } = ctx.params;
|
1871
1985
|
const { body } = ctx.request;
|
1872
|
-
const documentManager2 = getService$
|
1873
|
-
const permissionChecker2 = getService$
|
1986
|
+
const documentManager2 = getService$2("document-manager");
|
1987
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1874
1988
|
if (permissionChecker2.cannot.create()) {
|
1875
1989
|
return ctx.forbidden();
|
1876
1990
|
}
|
1877
1991
|
const permissionQuery = await permissionChecker2.sanitizedQuery.create(ctx.query);
|
1878
|
-
const populate = await getService$
|
1992
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1879
1993
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1880
1994
|
const document = await documentManager2.findOne(id, model, {
|
1881
1995
|
populate,
|
@@ -1914,13 +2028,13 @@ const collectionTypes = {
|
|
1914
2028
|
async delete(ctx) {
|
1915
2029
|
const { userAbility } = ctx.state;
|
1916
2030
|
const { id, model } = ctx.params;
|
1917
|
-
const documentManager2 = getService$
|
1918
|
-
const permissionChecker2 = getService$
|
2031
|
+
const documentManager2 = getService$2("document-manager");
|
2032
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1919
2033
|
if (permissionChecker2.cannot.delete()) {
|
1920
2034
|
return ctx.forbidden();
|
1921
2035
|
}
|
1922
2036
|
const permissionQuery = await permissionChecker2.sanitizedQuery.delete(ctx.query);
|
1923
|
-
const populate = await getService$
|
2037
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1924
2038
|
const { locale } = await getDocumentLocaleAndStatus(ctx.query, model);
|
1925
2039
|
const documentLocales = await documentManager2.findLocales(id, model, { populate, locale });
|
1926
2040
|
if (documentLocales.length === 0) {
|
@@ -1942,14 +2056,14 @@ const collectionTypes = {
|
|
1942
2056
|
const { userAbility } = ctx.state;
|
1943
2057
|
const { id, model } = ctx.params;
|
1944
2058
|
const { body } = ctx.request;
|
1945
|
-
const documentManager2 = getService$
|
1946
|
-
const permissionChecker2 = getService$
|
2059
|
+
const documentManager2 = getService$2("document-manager");
|
2060
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1947
2061
|
if (permissionChecker2.cannot.publish()) {
|
1948
2062
|
return ctx.forbidden();
|
1949
2063
|
}
|
1950
2064
|
const publishedDocument = await strapi.db.transaction(async () => {
|
1951
2065
|
const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
|
1952
|
-
const populate = await getService$
|
2066
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1953
2067
|
let document;
|
1954
2068
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1955
2069
|
const isCreate = isNil$1(id);
|
@@ -1997,13 +2111,13 @@ const collectionTypes = {
|
|
1997
2111
|
const { body } = ctx.request;
|
1998
2112
|
const { documentIds } = body;
|
1999
2113
|
await validateBulkActionInput(body);
|
2000
|
-
const documentManager2 = getService$
|
2001
|
-
const permissionChecker2 = getService$
|
2114
|
+
const documentManager2 = getService$2("document-manager");
|
2115
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2002
2116
|
if (permissionChecker2.cannot.publish()) {
|
2003
2117
|
return ctx.forbidden();
|
2004
2118
|
}
|
2005
2119
|
const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
|
2006
|
-
const populate = await getService$
|
2120
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
2007
2121
|
const { locale } = await getDocumentLocaleAndStatus(body, model, {
|
2008
2122
|
allowMultipleLocales: true
|
2009
2123
|
});
|
@@ -2028,8 +2142,8 @@ const collectionTypes = {
|
|
2028
2142
|
const { body } = ctx.request;
|
2029
2143
|
const { documentIds } = body;
|
2030
2144
|
await validateBulkActionInput(body);
|
2031
|
-
const documentManager2 = getService$
|
2032
|
-
const permissionChecker2 = getService$
|
2145
|
+
const documentManager2 = getService$2("document-manager");
|
2146
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2033
2147
|
if (permissionChecker2.cannot.unpublish()) {
|
2034
2148
|
return ctx.forbidden();
|
2035
2149
|
}
|
@@ -2058,8 +2172,8 @@ const collectionTypes = {
|
|
2058
2172
|
const {
|
2059
2173
|
body: { discardDraft, ...body }
|
2060
2174
|
} = ctx.request;
|
2061
|
-
const documentManager2 = getService$
|
2062
|
-
const permissionChecker2 = getService$
|
2175
|
+
const documentManager2 = getService$2("document-manager");
|
2176
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2063
2177
|
if (permissionChecker2.cannot.unpublish()) {
|
2064
2178
|
return ctx.forbidden();
|
2065
2179
|
}
|
@@ -2067,7 +2181,7 @@ const collectionTypes = {
|
|
2067
2181
|
return ctx.forbidden();
|
2068
2182
|
}
|
2069
2183
|
const permissionQuery = await permissionChecker2.sanitizedQuery.unpublish(ctx.query);
|
2070
|
-
const populate = await getService$
|
2184
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2071
2185
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2072
2186
|
const document = await documentManager2.findOne(id, model, {
|
2073
2187
|
populate,
|
@@ -2098,13 +2212,13 @@ const collectionTypes = {
|
|
2098
2212
|
const { userAbility } = ctx.state;
|
2099
2213
|
const { id, model } = ctx.params;
|
2100
2214
|
const { body } = ctx.request;
|
2101
|
-
const documentManager2 = getService$
|
2102
|
-
const permissionChecker2 = getService$
|
2215
|
+
const documentManager2 = getService$2("document-manager");
|
2216
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2103
2217
|
if (permissionChecker2.cannot.discard()) {
|
2104
2218
|
return ctx.forbidden();
|
2105
2219
|
}
|
2106
2220
|
const permissionQuery = await permissionChecker2.sanitizedQuery.discard(ctx.query);
|
2107
|
-
const populate = await getService$
|
2221
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2108
2222
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2109
2223
|
const document = await documentManager2.findOne(id, model, {
|
2110
2224
|
populate,
|
@@ -2129,13 +2243,13 @@ const collectionTypes = {
|
|
2129
2243
|
const { query, body } = ctx.request;
|
2130
2244
|
const { documentIds } = body;
|
2131
2245
|
await validateBulkActionInput(body);
|
2132
|
-
const documentManager2 = getService$
|
2133
|
-
const permissionChecker2 = getService$
|
2246
|
+
const documentManager2 = getService$2("document-manager");
|
2247
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2134
2248
|
if (permissionChecker2.cannot.delete()) {
|
2135
2249
|
return ctx.forbidden();
|
2136
2250
|
}
|
2137
2251
|
const permissionQuery = await permissionChecker2.sanitizedQuery.delete(query);
|
2138
|
-
const populate = await getService$
|
2252
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2139
2253
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2140
2254
|
const documentLocales = await documentManager2.findLocales(documentIds, model, {
|
2141
2255
|
populate,
|
@@ -2156,13 +2270,13 @@ const collectionTypes = {
|
|
2156
2270
|
async countDraftRelations(ctx) {
|
2157
2271
|
const { userAbility } = ctx.state;
|
2158
2272
|
const { model, id } = ctx.params;
|
2159
|
-
const documentManager2 = getService$
|
2160
|
-
const permissionChecker2 = getService$
|
2273
|
+
const documentManager2 = getService$2("document-manager");
|
2274
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2161
2275
|
if (permissionChecker2.cannot.read()) {
|
2162
2276
|
return ctx.forbidden();
|
2163
2277
|
}
|
2164
2278
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
2165
|
-
const populate = await getService$
|
2279
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2166
2280
|
const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);
|
2167
2281
|
const entity = await documentManager2.findOne(id, model, { populate, locale, status });
|
2168
2282
|
if (!entity) {
|
@@ -2181,8 +2295,8 @@ const collectionTypes = {
|
|
2181
2295
|
const ids = ctx.request.query.documentIds;
|
2182
2296
|
const locale = ctx.request.query.locale;
|
2183
2297
|
const { model } = ctx.params;
|
2184
|
-
const documentManager2 = getService$
|
2185
|
-
const permissionChecker2 = getService$
|
2298
|
+
const documentManager2 = getService$2("document-manager");
|
2299
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2186
2300
|
if (permissionChecker2.cannot.read()) {
|
2187
2301
|
return ctx.forbidden();
|
2188
2302
|
}
|
@@ -2206,13 +2320,13 @@ const collectionTypes = {
|
|
2206
2320
|
};
|
2207
2321
|
const components$1 = {
|
2208
2322
|
findComponents(ctx) {
|
2209
|
-
const components2 = getService$
|
2210
|
-
const { toDto } = getService$
|
2323
|
+
const components2 = getService$2("components").findAllComponents();
|
2324
|
+
const { toDto } = getService$2("data-mapper");
|
2211
2325
|
ctx.body = { data: components2.map(toDto) };
|
2212
2326
|
},
|
2213
2327
|
async findComponentConfiguration(ctx) {
|
2214
2328
|
const { uid: uid2 } = ctx.params;
|
2215
|
-
const componentService = getService$
|
2329
|
+
const componentService = getService$2("components");
|
2216
2330
|
const component = componentService.findComponent(uid2);
|
2217
2331
|
if (!component) {
|
2218
2332
|
return ctx.notFound("component.notFound");
|
@@ -2229,7 +2343,7 @@ const components$1 = {
|
|
2229
2343
|
async updateComponentConfiguration(ctx) {
|
2230
2344
|
const { uid: uid2 } = ctx.params;
|
2231
2345
|
const { body } = ctx.request;
|
2232
|
-
const componentService = getService$
|
2346
|
+
const componentService = getService$2("components");
|
2233
2347
|
const component = componentService.findComponent(uid2);
|
2234
2348
|
if (!component) {
|
2235
2349
|
return ctx.notFound("component.notFound");
|
@@ -2263,12 +2377,12 @@ const contentTypes = {
|
|
2263
2377
|
} catch (error) {
|
2264
2378
|
return ctx.send({ error }, 400);
|
2265
2379
|
}
|
2266
|
-
const contentTypes2 = getService$
|
2267
|
-
const { toDto } = getService$
|
2380
|
+
const contentTypes2 = getService$2("content-types").findContentTypesByKind(kind);
|
2381
|
+
const { toDto } = getService$2("data-mapper");
|
2268
2382
|
ctx.body = { data: contentTypes2.map(toDto) };
|
2269
2383
|
},
|
2270
2384
|
async findContentTypesSettings(ctx) {
|
2271
|
-
const { findAllContentTypes, findConfiguration } = getService$
|
2385
|
+
const { findAllContentTypes, findConfiguration } = getService$2("content-types");
|
2272
2386
|
const contentTypes2 = await findAllContentTypes();
|
2273
2387
|
const configurations = await Promise.all(
|
2274
2388
|
contentTypes2.map(async (contentType) => {
|
@@ -2282,7 +2396,7 @@ const contentTypes = {
|
|
2282
2396
|
},
|
2283
2397
|
async findContentTypeConfiguration(ctx) {
|
2284
2398
|
const { uid: uid2 } = ctx.params;
|
2285
|
-
const contentTypeService = getService$
|
2399
|
+
const contentTypeService = getService$2("content-types");
|
2286
2400
|
const contentType = await contentTypeService.findContentType(uid2);
|
2287
2401
|
if (!contentType) {
|
2288
2402
|
return ctx.notFound("contentType.notFound");
|
@@ -2304,13 +2418,13 @@ const contentTypes = {
|
|
2304
2418
|
const { userAbility } = ctx.state;
|
2305
2419
|
const { uid: uid2 } = ctx.params;
|
2306
2420
|
const { body } = ctx.request;
|
2307
|
-
const contentTypeService = getService$
|
2308
|
-
const metricsService = getService$
|
2421
|
+
const contentTypeService = getService$2("content-types");
|
2422
|
+
const metricsService = getService$2("metrics");
|
2309
2423
|
const contentType = await contentTypeService.findContentType(uid2);
|
2310
2424
|
if (!contentType) {
|
2311
2425
|
return ctx.notFound("contentType.notFound");
|
2312
2426
|
}
|
2313
|
-
if (!getService$
|
2427
|
+
if (!getService$2("permission").canConfigureContentType({ userAbility, contentType })) {
|
2314
2428
|
return ctx.forbidden();
|
2315
2429
|
}
|
2316
2430
|
let input;
|
@@ -2343,10 +2457,10 @@ const contentTypes = {
|
|
2343
2457
|
};
|
2344
2458
|
const init = {
|
2345
2459
|
getInitData(ctx) {
|
2346
|
-
const { toDto } = getService$
|
2347
|
-
const { findAllComponents } = getService$
|
2348
|
-
const { getAllFieldSizes } = getService$
|
2349
|
-
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");
|
2350
2464
|
ctx.body = {
|
2351
2465
|
data: {
|
2352
2466
|
fieldSizes: getAllFieldSizes(),
|
@@ -2382,7 +2496,7 @@ const addFiltersClause = (params, filtersClause) => {
|
|
2382
2496
|
params.filters.$and.push(filtersClause);
|
2383
2497
|
};
|
2384
2498
|
const sanitizeMainField = (model, mainField, userAbility) => {
|
2385
|
-
const permissionChecker2 = getService$
|
2499
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2386
2500
|
userAbility,
|
2387
2501
|
model: model.uid
|
2388
2502
|
});
|
@@ -2400,7 +2514,7 @@ const addStatusToRelations = async (targetUid, relations2) => {
|
|
2400
2514
|
if (!contentTypes$1.hasDraftAndPublish(strapi.getModel(targetUid))) {
|
2401
2515
|
return relations2;
|
2402
2516
|
}
|
2403
|
-
const documentMetadata2 = getService$
|
2517
|
+
const documentMetadata2 = getService$2("document-metadata");
|
2404
2518
|
if (!relations2.length) {
|
2405
2519
|
return relations2;
|
2406
2520
|
}
|
@@ -2478,7 +2592,7 @@ const relations = {
|
|
2478
2592
|
ctx.request?.query?.locale
|
2479
2593
|
);
|
2480
2594
|
const { status } = validateStatus(sourceUid, ctx.request?.query?.status);
|
2481
|
-
const permissionChecker2 = getService$
|
2595
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2482
2596
|
userAbility,
|
2483
2597
|
model
|
2484
2598
|
});
|
@@ -2503,7 +2617,7 @@ const relations = {
|
|
2503
2617
|
where.id = id;
|
2504
2618
|
}
|
2505
2619
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
2506
|
-
const populate = await getService$
|
2620
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2507
2621
|
const currentEntity = await strapi.db.query(model).findOne({
|
2508
2622
|
where,
|
2509
2623
|
populate
|
@@ -2518,7 +2632,7 @@ const relations = {
|
|
2518
2632
|
}
|
2519
2633
|
entryId = currentEntity.id;
|
2520
2634
|
}
|
2521
|
-
const modelConfig = isComponent2 ? await getService$
|
2635
|
+
const modelConfig = isComponent2 ? await getService$2("components").findConfiguration(sourceSchema) : await getService$2("content-types").findConfiguration(sourceSchema);
|
2522
2636
|
const targetSchema = strapi.getModel(targetUid);
|
2523
2637
|
const mainField = flow(
|
2524
2638
|
prop(`metadatas.${targetField}.edit.mainField`),
|
@@ -2572,7 +2686,7 @@ const relations = {
|
|
2572
2686
|
}
|
2573
2687
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2574
2688
|
const { idsToOmit, idsToInclude, _q, ...query } = ctx.request.query;
|
2575
|
-
const permissionChecker2 = getService$
|
2689
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2576
2690
|
userAbility: ctx.state.userAbility,
|
2577
2691
|
model: targetUid
|
2578
2692
|
});
|
@@ -2651,7 +2765,7 @@ const relations = {
|
|
2651
2765
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2652
2766
|
const { uid: sourceUid } = sourceSchema;
|
2653
2767
|
const { uid: targetUid } = targetSchema;
|
2654
|
-
const permissionQuery = await getService$
|
2768
|
+
const permissionQuery = await getService$2("permission-checker").create({ userAbility, model: targetUid }).sanitizedQuery.read({ fields: fieldsToSelect });
|
2655
2769
|
const dbQuery = strapi.db.query(sourceUid);
|
2656
2770
|
const loadRelations = relations$1.isAnyToMany(attribute) ? (...args) => dbQuery.loadPages(...args) : (...args) => dbQuery.load(...args).then((res2) => ({ results: res2 ? [res2] : [] }));
|
2657
2771
|
const filters = {};
|
@@ -2692,10 +2806,10 @@ const relations = {
|
|
2692
2806
|
}
|
2693
2807
|
};
|
2694
2808
|
const buildPopulateFromQuery = async (query, model) => {
|
2695
|
-
return getService$
|
2809
|
+
return getService$2("populate-builder")(model).populateFromQuery(query).populateDeep(Infinity).countRelations().build();
|
2696
2810
|
};
|
2697
2811
|
const findDocument = async (query, uid2, opts = {}) => {
|
2698
|
-
const documentManager2 = getService$
|
2812
|
+
const documentManager2 = getService$2("document-manager");
|
2699
2813
|
const populate = await buildPopulateFromQuery(query, uid2);
|
2700
2814
|
return documentManager2.findMany({ ...opts, populate }, uid2).then((documents) => documents[0]);
|
2701
2815
|
};
|
@@ -2703,8 +2817,8 @@ const createOrUpdateDocument = async (ctx, opts) => {
|
|
2703
2817
|
const { user, userAbility } = ctx.state;
|
2704
2818
|
const { model } = ctx.params;
|
2705
2819
|
const { body, query } = ctx.request;
|
2706
|
-
const documentManager2 = getService$
|
2707
|
-
const permissionChecker2 = getService$
|
2820
|
+
const documentManager2 = getService$2("document-manager");
|
2821
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2708
2822
|
if (permissionChecker2.cannot.create() && permissionChecker2.cannot.update()) {
|
2709
2823
|
throw new errors.ForbiddenError();
|
2710
2824
|
}
|
@@ -2745,7 +2859,7 @@ const singleTypes = {
|
|
2745
2859
|
const { userAbility } = ctx.state;
|
2746
2860
|
const { model } = ctx.params;
|
2747
2861
|
const { query = {} } = ctx.request;
|
2748
|
-
const permissionChecker2 = getService$
|
2862
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2749
2863
|
if (permissionChecker2.cannot.read()) {
|
2750
2864
|
return ctx.forbidden();
|
2751
2865
|
}
|
@@ -2779,7 +2893,7 @@ const singleTypes = {
|
|
2779
2893
|
async createOrUpdate(ctx) {
|
2780
2894
|
const { userAbility } = ctx.state;
|
2781
2895
|
const { model } = ctx.params;
|
2782
|
-
const permissionChecker2 = getService$
|
2896
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2783
2897
|
const document = await createOrUpdateDocument(ctx);
|
2784
2898
|
const sanitizedDocument = await permissionChecker2.sanitizeOutput(document);
|
2785
2899
|
ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedDocument);
|
@@ -2788,8 +2902,8 @@ const singleTypes = {
|
|
2788
2902
|
const { userAbility } = ctx.state;
|
2789
2903
|
const { model } = ctx.params;
|
2790
2904
|
const { query = {} } = ctx.request;
|
2791
|
-
const documentManager2 = getService$
|
2792
|
-
const permissionChecker2 = getService$
|
2905
|
+
const documentManager2 = getService$2("document-manager");
|
2906
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2793
2907
|
if (permissionChecker2.cannot.delete()) {
|
2794
2908
|
return ctx.forbidden();
|
2795
2909
|
}
|
@@ -2817,8 +2931,8 @@ const singleTypes = {
|
|
2817
2931
|
const { userAbility } = ctx.state;
|
2818
2932
|
const { model } = ctx.params;
|
2819
2933
|
const { query = {} } = ctx.request;
|
2820
|
-
const documentManager2 = getService$
|
2821
|
-
const permissionChecker2 = getService$
|
2934
|
+
const documentManager2 = getService$2("document-manager");
|
2935
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2822
2936
|
if (permissionChecker2.cannot.publish()) {
|
2823
2937
|
return ctx.forbidden();
|
2824
2938
|
}
|
@@ -2846,8 +2960,8 @@ const singleTypes = {
|
|
2846
2960
|
body: { discardDraft, ...body },
|
2847
2961
|
query = {}
|
2848
2962
|
} = ctx.request;
|
2849
|
-
const documentManager2 = getService$
|
2850
|
-
const permissionChecker2 = getService$
|
2963
|
+
const documentManager2 = getService$2("document-manager");
|
2964
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2851
2965
|
if (permissionChecker2.cannot.unpublish()) {
|
2852
2966
|
return ctx.forbidden();
|
2853
2967
|
}
|
@@ -2881,8 +2995,8 @@ const singleTypes = {
|
|
2881
2995
|
const { userAbility } = ctx.state;
|
2882
2996
|
const { model } = ctx.params;
|
2883
2997
|
const { body, query = {} } = ctx.request;
|
2884
|
-
const documentManager2 = getService$
|
2885
|
-
const permissionChecker2 = getService$
|
2998
|
+
const documentManager2 = getService$2("document-manager");
|
2999
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2886
3000
|
if (permissionChecker2.cannot.discard()) {
|
2887
3001
|
return ctx.forbidden();
|
2888
3002
|
}
|
@@ -2905,8 +3019,8 @@ const singleTypes = {
|
|
2905
3019
|
const { userAbility } = ctx.state;
|
2906
3020
|
const { model } = ctx.params;
|
2907
3021
|
const { query } = ctx.request;
|
2908
|
-
const documentManager2 = getService$
|
2909
|
-
const permissionChecker2 = getService$
|
3022
|
+
const documentManager2 = getService$2("document-manager");
|
3023
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2910
3024
|
const { locale } = await getDocumentLocaleAndStatus(query, model);
|
2911
3025
|
if (permissionChecker2.cannot.read()) {
|
2912
3026
|
return ctx.forbidden();
|
@@ -2930,7 +3044,7 @@ const uid$1 = {
|
|
2930
3044
|
const { query = {} } = ctx.request;
|
2931
3045
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2932
3046
|
await validateUIDField(contentTypeUID, field);
|
2933
|
-
const uidService = getService$
|
3047
|
+
const uidService = getService$2("uid");
|
2934
3048
|
ctx.body = {
|
2935
3049
|
data: await uidService.generateUIDField({ contentTypeUID, field, data, locale })
|
2936
3050
|
};
|
@@ -2942,7 +3056,7 @@ const uid$1 = {
|
|
2942
3056
|
const { query = {} } = ctx.request;
|
2943
3057
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2944
3058
|
await validateUIDField(contentTypeUID, field);
|
2945
|
-
const uidService = getService$
|
3059
|
+
const uidService = getService$2("uid");
|
2946
3060
|
const isAvailable = await uidService.checkUIDAvailability({
|
2947
3061
|
contentTypeUID,
|
2948
3062
|
field,
|
@@ -3115,12 +3229,12 @@ async function syncMetadatas(configuration, schema) {
|
|
3115
3229
|
return _.assign(metasWithDefaults, updatedMetas);
|
3116
3230
|
}
|
3117
3231
|
const getTargetSchema = (targetModel) => {
|
3118
|
-
return getService$
|
3232
|
+
return getService$2("content-types").findContentType(targetModel);
|
3119
3233
|
};
|
3120
3234
|
const DEFAULT_LIST_LENGTH = 4;
|
3121
3235
|
const MAX_ROW_SIZE = 12;
|
3122
3236
|
const isAllowedFieldSize = (type, size) => {
|
3123
|
-
const { getFieldSize } = getService$
|
3237
|
+
const { getFieldSize } = getService$2("field-sizes");
|
3124
3238
|
const fieldSize = getFieldSize(type);
|
3125
3239
|
if (!fieldSize.isResizable && size !== fieldSize.default) {
|
3126
3240
|
return false;
|
@@ -3128,7 +3242,7 @@ const isAllowedFieldSize = (type, size) => {
|
|
3128
3242
|
return size <= MAX_ROW_SIZE;
|
3129
3243
|
};
|
3130
3244
|
const getDefaultFieldSize = (attribute) => {
|
3131
|
-
const { hasFieldSize, getFieldSize } = getService$
|
3245
|
+
const { hasFieldSize, getFieldSize } = getService$2("field-sizes");
|
3132
3246
|
return getFieldSize(hasFieldSize(attribute.customField) ? attribute.customField : attribute.type).default;
|
3133
3247
|
};
|
3134
3248
|
async function createDefaultLayouts(schema) {
|
@@ -3163,7 +3277,7 @@ function syncLayouts(configuration, schema) {
|
|
3163
3277
|
for (const el of row) {
|
3164
3278
|
if (!hasEditableAttribute(schema, el.name))
|
3165
3279
|
continue;
|
3166
|
-
const { hasFieldSize } = getService$
|
3280
|
+
const { hasFieldSize } = getService$2("field-sizes");
|
3167
3281
|
const fieldType = hasFieldSize(schema.attributes[el.name].customField) ? schema.attributes[el.name].customField : schema.attributes[el.name].type;
|
3168
3282
|
if (!isAllowedFieldSize(fieldType, el.size)) {
|
3169
3283
|
elementsToReAppend.push(el.name);
|
@@ -3303,17 +3417,17 @@ const configurationService$1 = createConfigurationService({
|
|
3303
3417
|
isComponent: true,
|
3304
3418
|
prefix: STORE_KEY_PREFIX,
|
3305
3419
|
getModels() {
|
3306
|
-
const { toContentManagerModel } = getService$
|
3420
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3307
3421
|
return mapValues(toContentManagerModel, strapi.components);
|
3308
3422
|
}
|
3309
3423
|
});
|
3310
3424
|
const components = ({ strapi: strapi2 }) => ({
|
3311
3425
|
findAllComponents() {
|
3312
|
-
const { toContentManagerModel } = getService$
|
3426
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3313
3427
|
return Object.values(strapi2.components).map(toContentManagerModel);
|
3314
3428
|
},
|
3315
3429
|
findComponent(uid2) {
|
3316
|
-
const { toContentManagerModel } = getService$
|
3430
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3317
3431
|
const component = strapi2.components[uid2];
|
3318
3432
|
return isNil$1(component) ? component : toContentManagerModel(component);
|
3319
3433
|
},
|
@@ -3364,17 +3478,17 @@ const configurationService = createConfigurationService({
|
|
3364
3478
|
storeUtils,
|
3365
3479
|
prefix: "content_types",
|
3366
3480
|
getModels() {
|
3367
|
-
const { toContentManagerModel } = getService$
|
3481
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3368
3482
|
return mapValues(toContentManagerModel, strapi.contentTypes);
|
3369
3483
|
}
|
3370
3484
|
});
|
3371
3485
|
const service = ({ strapi: strapi2 }) => ({
|
3372
3486
|
findAllContentTypes() {
|
3373
|
-
const { toContentManagerModel } = getService$
|
3487
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3374
3488
|
return Object.values(strapi2.contentTypes).map(toContentManagerModel);
|
3375
3489
|
},
|
3376
3490
|
findContentType(uid2) {
|
3377
|
-
const { toContentManagerModel } = getService$
|
3491
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3378
3492
|
const contentType = strapi2.contentTypes[uid2];
|
3379
3493
|
return isNil$1(contentType) ? contentType : toContentManagerModel(contentType);
|
3380
3494
|
},
|
@@ -3403,7 +3517,7 @@ const service = ({ strapi: strapi2 }) => ({
|
|
3403
3517
|
return this.findConfiguration(contentType);
|
3404
3518
|
},
|
3405
3519
|
findComponentsConfigurations(contentType) {
|
3406
|
-
return getService$
|
3520
|
+
return getService$2("components").findComponentsConfigurations(contentType);
|
3407
3521
|
},
|
3408
3522
|
syncConfigurations() {
|
3409
3523
|
return configurationService.syncConfigurations();
|
@@ -3675,7 +3789,7 @@ const permission = ({ strapi: strapi2 }) => ({
|
|
3675
3789
|
return userAbility.can(action);
|
3676
3790
|
},
|
3677
3791
|
async registerPermissions() {
|
3678
|
-
const displayedContentTypes = getService$
|
3792
|
+
const displayedContentTypes = getService$2("content-types").findDisplayedContentTypes();
|
3679
3793
|
const contentTypesUids = displayedContentTypes.map(prop("uid"));
|
3680
3794
|
const actions = [
|
3681
3795
|
{
|
@@ -3951,7 +4065,7 @@ const getQueryPopulate = async (uid2, query) => {
|
|
3951
4065
|
return populateQuery;
|
3952
4066
|
};
|
3953
4067
|
const buildDeepPopulate = (uid2) => {
|
3954
|
-
return getService$
|
4068
|
+
return getService$2("populate-builder")(uid2).populateDeep(Infinity).countRelations().build();
|
3955
4069
|
};
|
3956
4070
|
const populateBuilder = (uid2) => {
|
3957
4071
|
let getInitialPopulate = async () => {
|