@strapi/content-manager 0.0.0-next.b558642be856459a3e6c076f5d76fffbfc5fc5a1 → 0.0.0-next.bb6ff32f5168f3e380d3d9acba90a9d53bfcfb89
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-Bmwd-G2q.js} +3 -3
- package/dist/_chunks/{ComponentConfigurationPage-gsCd80MU.js.map → ComponentConfigurationPage-Bmwd-G2q.js.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-CIjXcRAB.mjs → ComponentConfigurationPage-DqB7veg_.mjs} +3 -3
- package/dist/_chunks/{ComponentConfigurationPage-CIjXcRAB.mjs.map → ComponentConfigurationPage-DqB7veg_.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-BglmD_BF.mjs → EditConfigurationPage-CDLVqqay.mjs} +3 -3
- package/dist/_chunks/{EditConfigurationPage-BglmD_BF.mjs.map → EditConfigurationPage-CDLVqqay.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-DHDQKBzw.js → EditConfigurationPage-DmruXqgR.js} +3 -3
- package/dist/_chunks/{EditConfigurationPage-DHDQKBzw.js.map → EditConfigurationPage-DmruXqgR.js.map} +1 -1
- package/dist/_chunks/{EditViewPage-C4iTxUPU.js → EditViewPage-0zrWXtMz.js} +37 -7
- package/dist/_chunks/EditViewPage-0zrWXtMz.js.map +1 -0
- package/dist/_chunks/{EditViewPage-CiwVPMaK.mjs → EditViewPage-BgcbLW7w.mjs} +38 -8
- package/dist/_chunks/EditViewPage-BgcbLW7w.mjs.map +1 -0
- package/dist/_chunks/{Field-DhXEK8y1.js → Field-BV7ZYdqe.js} +27 -7
- package/dist/_chunks/Field-BV7ZYdqe.js.map +1 -0
- package/dist/_chunks/{Field-DIjL1b5d.mjs → Field-fTjqtEem.mjs} +27 -7
- package/dist/_chunks/Field-fTjqtEem.mjs.map +1 -0
- package/dist/_chunks/{Form-CwmJ4sWe.js → Form-CIDoAFoD.js} +2 -2
- package/dist/_chunks/{Form-CwmJ4sWe.js.map → Form-CIDoAFoD.js.map} +1 -1
- package/dist/_chunks/{Form-CmNesrvR.mjs → Form-WNWgTBtb.mjs} +2 -2
- package/dist/_chunks/{Form-CmNesrvR.mjs.map → Form-WNWgTBtb.mjs.map} +1 -1
- package/dist/_chunks/{History-BLCCNgCt.js → History-BNvm2TK2.js} +18 -90
- package/dist/_chunks/History-BNvm2TK2.js.map +1 -0
- package/dist/_chunks/{History-D-99Wh30.mjs → History-DEZDHwP0.mjs} +18 -90
- package/dist/_chunks/History-DEZDHwP0.mjs.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-DxWpeZrO.js → ListConfigurationPage-B3FZwPHp.js} +2 -2
- package/dist/_chunks/{ListConfigurationPage-DxWpeZrO.js.map → ListConfigurationPage-B3FZwPHp.js.map} +1 -1
- package/dist/_chunks/{ListConfigurationPage-JPWZz7Kg.mjs → ListConfigurationPage-Ddz3G-It.mjs} +2 -2
- package/dist/_chunks/{ListConfigurationPage-JPWZz7Kg.mjs.map → ListConfigurationPage-Ddz3G-It.mjs.map} +1 -1
- package/dist/_chunks/{ListViewPage-CIQekSFz.js → ListViewPage-BEilNylQ.js} +16 -5
- package/dist/_chunks/{ListViewPage-CIQekSFz.js.map → ListViewPage-BEilNylQ.js.map} +1 -1
- package/dist/_chunks/{ListViewPage-DSK3f0ST.mjs → ListViewPage-BsLdw25U.mjs} +16 -5
- package/dist/_chunks/{ListViewPage-DSK3f0ST.mjs.map → ListViewPage-BsLdw25U.mjs.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-C5cxKvC2.js → NoContentTypePage-BD2C-IMr.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-C5cxKvC2.js.map → NoContentTypePage-BD2C-IMr.js.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-D99LU1YP.mjs → NoContentTypePage-D0jXEWKM.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-D99LU1YP.mjs.map → NoContentTypePage-D0jXEWKM.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-DBrBw-0y.mjs → NoPermissionsPage-CIPqlrQq.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-DBrBw-0y.mjs.map → NoPermissionsPage-CIPqlrQq.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-Oy4tmUrW.js → NoPermissionsPage-yNOvz9XO.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-Oy4tmUrW.js.map → NoPermissionsPage-yNOvz9XO.js.map} +1 -1
- package/dist/_chunks/Preview-1cqLecKr.js +256 -0
- package/dist/_chunks/Preview-1cqLecKr.js.map +1 -0
- package/dist/_chunks/Preview-ot2fh0yZ.mjs +237 -0
- package/dist/_chunks/Preview-ot2fh0yZ.mjs.map +1 -0
- package/dist/_chunks/{Relations-eG-9p_qS.js → Relations-C3U9SKEb.js} +6 -3
- package/dist/_chunks/Relations-C3U9SKEb.js.map +1 -0
- package/dist/_chunks/{Relations-BBmhcWFV.mjs → Relations-CfdwHP-0.mjs} +6 -3
- package/dist/_chunks/Relations-CfdwHP-0.mjs.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-BrUzbQ30.mjs → index-BzUT1l9A.mjs} +117 -61
- package/dist/_chunks/index-BzUT1l9A.mjs.map +1 -0
- package/dist/_chunks/{index-BIWDoFLK.js → index-Cg4RLIAw.js} +113 -57
- package/dist/_chunks/index-Cg4RLIAw.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-_5-cXs34.mjs → layout-C0QEDBAh.mjs} +3 -3
- package/dist/_chunks/{layout-_5-cXs34.mjs.map → layout-C0QEDBAh.mjs.map} +1 -1
- package/dist/_chunks/{layout-lMc9i1-Z.js → layout-Cj_1EKbm.js} +3 -3
- package/dist/_chunks/{layout-lMc9i1-Z.js.map → layout-Cj_1EKbm.js.map} +1 -1
- package/dist/_chunks/{relations-B_VLk-DD.mjs → relations-CgPG3AwU.mjs} +6 -3
- package/dist/_chunks/relations-CgPG3AwU.mjs.map +1 -0
- package/dist/_chunks/{relations-BRHithi8.js → relations-hDOgJy2R.js} +6 -3
- package/dist/_chunks/relations-hDOgJy2R.js.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +4 -4
- package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
- package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +2 -2
- package/dist/admin/src/preview/components/PreviewContent.d.ts +2 -0
- package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
- package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -0
- package/dist/admin/src/preview/index.d.ts +1 -1
- package/dist/admin/src/preview/pages/Preview.d.ts +11 -0
- package/dist/admin/src/preview/routes.d.ts +3 -0
- package/dist/admin/src/preview/services/preview.d.ts +3 -0
- package/dist/admin/src/router.d.ts +1 -1
- package/dist/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.js
CHANGED
@@ -33,10 +33,10 @@ const isNil__default = /* @__PURE__ */ _interopDefault(isNil);
|
|
33
33
|
const ___default = /* @__PURE__ */ _interopDefault(_);
|
34
34
|
const qs__default = /* @__PURE__ */ _interopDefault(qs);
|
35
35
|
const slugify__default = /* @__PURE__ */ _interopDefault(slugify);
|
36
|
-
const getService$
|
36
|
+
const getService$2 = (name) => {
|
37
37
|
return strapi.plugin("content-manager").service(name);
|
38
38
|
};
|
39
|
-
function getService(strapi2, name) {
|
39
|
+
function getService$1(strapi2, name) {
|
40
40
|
return strapi2.service(`plugin::content-manager.${name}`);
|
41
41
|
}
|
42
42
|
const historyRestoreVersionSchema = yup__namespace.object().shape({
|
@@ -72,7 +72,7 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
72
72
|
if (!isSingleType && (!contentTypeUid || !ctx.query.documentId)) {
|
73
73
|
throw new strapiUtils.errors.ForbiddenError("contentType and documentId are required");
|
74
74
|
}
|
75
|
-
const permissionChecker2 = getService$
|
75
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
76
76
|
userAbility: ctx.state.userAbility,
|
77
77
|
model: ctx.query.contentType
|
78
78
|
});
|
@@ -80,7 +80,7 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
80
80
|
return ctx.forbidden();
|
81
81
|
}
|
82
82
|
const query = await permissionChecker2.sanitizeQuery(ctx.query);
|
83
|
-
const { results, pagination } = await getService(strapi2, "history").findVersionsPage({
|
83
|
+
const { results, pagination } = await getService$1(strapi2, "history").findVersionsPage({
|
84
84
|
query: {
|
85
85
|
...query,
|
86
86
|
...getValidPagination({ page: query.page, pageSize: query.pageSize })
|
@@ -105,14 +105,14 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
105
105
|
async restoreVersion(ctx) {
|
106
106
|
const request = ctx.request;
|
107
107
|
await validateRestoreVersion(request.body, "contentType is required");
|
108
|
-
const permissionChecker2 = getService$
|
108
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
109
109
|
userAbility: ctx.state.userAbility,
|
110
110
|
model: request.body.contentType
|
111
111
|
});
|
112
112
|
if (permissionChecker2.cannot.update()) {
|
113
113
|
throw new strapiUtils.errors.ForbiddenError();
|
114
114
|
}
|
115
|
-
const restoredDocument = await getService(strapi2, "history").restoreVersion(
|
115
|
+
const restoredDocument = await getService$1(strapi2, "history").restoreVersion(
|
116
116
|
request.params.versionId
|
117
117
|
);
|
118
118
|
return {
|
@@ -228,6 +228,17 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
228
228
|
const meta = await documentMetadataService.getMetadata(contentTypeUid, document);
|
229
229
|
return documentMetadataService.getStatus(document, meta.availableStatus);
|
230
230
|
};
|
231
|
+
const getComponentFields = (componentUID) => {
|
232
|
+
return Object.entries(strapi2.getModel(componentUID).attributes).reduce(
|
233
|
+
(fieldsAcc, [key, attribute]) => {
|
234
|
+
if (!["relation", "media", "component", "dynamiczone"].includes(attribute.type)) {
|
235
|
+
fieldsAcc.push(key);
|
236
|
+
}
|
237
|
+
return fieldsAcc;
|
238
|
+
},
|
239
|
+
[]
|
240
|
+
);
|
241
|
+
};
|
231
242
|
const getDeepPopulate2 = (uid2, useDatabaseSyntax = false) => {
|
232
243
|
const model = strapi2.getModel(uid2);
|
233
244
|
const attributes = Object.entries(model.attributes);
|
@@ -251,13 +262,19 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
251
262
|
}
|
252
263
|
case "component": {
|
253
264
|
const populate = getDeepPopulate2(attribute.component);
|
254
|
-
acc[attributeName] = {
|
265
|
+
acc[attributeName] = {
|
266
|
+
populate,
|
267
|
+
[fieldSelector]: getComponentFields(attribute.component)
|
268
|
+
};
|
255
269
|
break;
|
256
270
|
}
|
257
271
|
case "dynamiczone": {
|
258
272
|
const populatedComponents = (attribute.components || []).reduce(
|
259
273
|
(acc2, componentUID) => {
|
260
|
-
acc2[componentUID] = {
|
274
|
+
acc2[componentUID] = {
|
275
|
+
populate: getDeepPopulate2(componentUID),
|
276
|
+
[fieldSelector]: getComponentFields(componentUID)
|
277
|
+
};
|
261
278
|
return acc2;
|
262
279
|
},
|
263
280
|
{}
|
@@ -370,7 +387,7 @@ const createHistoryService = ({ strapi: strapi2 }) => {
|
|
370
387
|
const attributeValue = entry.data[attributeKey];
|
371
388
|
const attributeValues = Array.isArray(attributeValue) ? attributeValue : [attributeValue];
|
372
389
|
if (attributeSchema.type === "media") {
|
373
|
-
const permissionChecker2 = getService$
|
390
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
374
391
|
userAbility: params.state.userAbility,
|
375
392
|
model: "plugin::upload.file"
|
376
393
|
});
|
@@ -411,7 +428,7 @@ const createHistoryService = ({ strapi: strapi2 }) => {
|
|
411
428
|
[attributeKey]: adminUsers
|
412
429
|
};
|
413
430
|
}
|
414
|
-
const permissionChecker2 = getService$
|
431
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
415
432
|
userAbility: params.state.userAbility,
|
416
433
|
model: attributeSchema.target
|
417
434
|
});
|
@@ -587,7 +604,7 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
|
|
587
604
|
onCommit(async () => {
|
588
605
|
for (const entry of localeEntries) {
|
589
606
|
const status = await serviceUtils.getVersionStatus(uid2, entry);
|
590
|
-
await getService(strapi2, "history").createVersion({
|
607
|
+
await getService$1(strapi2, "history").createVersion({
|
591
608
|
contentType: uid2,
|
592
609
|
data: fp.omit(FIELDS_TO_IGNORE, entry),
|
593
610
|
relatedDocumentId: documentId,
|
@@ -600,15 +617,19 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
|
|
600
617
|
});
|
601
618
|
return result;
|
602
619
|
});
|
603
|
-
state.deleteExpiredJob = nodeSchedule.scheduleJob("0 0 * * *", () => {
|
620
|
+
state.deleteExpiredJob = nodeSchedule.scheduleJob("historyDaily", "0 0 * * *", () => {
|
604
621
|
const retentionDaysInMilliseconds = serviceUtils.getRetentionDays() * 24 * 60 * 60 * 1e3;
|
605
622
|
const expirationDate = new Date(Date.now() - retentionDaysInMilliseconds);
|
606
623
|
strapi2.db.query(HISTORY_VERSION_UID).deleteMany({
|
607
624
|
where: {
|
608
625
|
created_at: {
|
609
|
-
$lt: expirationDate
|
626
|
+
$lt: expirationDate
|
610
627
|
}
|
611
628
|
}
|
629
|
+
}).catch((error) => {
|
630
|
+
if (error instanceof Error) {
|
631
|
+
strapi2.log.error("Error deleting expired history versions", error.message);
|
632
|
+
}
|
612
633
|
});
|
613
634
|
});
|
614
635
|
state.isInitialized = true;
|
@@ -702,10 +723,10 @@ const getFeature$1 = () => {
|
|
702
723
|
strapi2.get("models").add(historyVersion);
|
703
724
|
},
|
704
725
|
bootstrap({ strapi: strapi2 }) {
|
705
|
-
getService(strapi2, "lifecycles").bootstrap();
|
726
|
+
getService$1(strapi2, "lifecycles").bootstrap();
|
706
727
|
},
|
707
728
|
destroy({ strapi: strapi2 }) {
|
708
|
-
getService(strapi2, "lifecycles").destroy();
|
729
|
+
getService$1(strapi2, "lifecycles").destroy();
|
709
730
|
},
|
710
731
|
controllers: controllers$2,
|
711
732
|
services: services$2,
|
@@ -735,7 +756,7 @@ const previewRouter = {
|
|
735
756
|
method: "GET",
|
736
757
|
info,
|
737
758
|
path: "/preview/url/:contentType",
|
738
|
-
handler: "preview.
|
759
|
+
handler: "preview.getPreviewUrl",
|
739
760
|
config: {
|
740
761
|
policies: ["admin::isAuthenticatedAdmin"]
|
741
762
|
}
|
@@ -745,12 +766,52 @@ const previewRouter = {
|
|
745
766
|
const routes$1 = {
|
746
767
|
preview: previewRouter
|
747
768
|
};
|
769
|
+
function getService(strapi2, name) {
|
770
|
+
return strapi2.service(`plugin::content-manager.${name}`);
|
771
|
+
}
|
772
|
+
const getPreviewUrlSchema = yup__namespace.object().shape({
|
773
|
+
// Will be undefined for single types
|
774
|
+
documentId: yup__namespace.string(),
|
775
|
+
locale: yup__namespace.string().nullable(),
|
776
|
+
status: yup__namespace.string()
|
777
|
+
}).required();
|
778
|
+
const validatePreviewUrl = async (strapi2, uid2, params) => {
|
779
|
+
await strapiUtils.validateYupSchema(getPreviewUrlSchema)(params);
|
780
|
+
const newParams = fp.pick(["documentId", "locale", "status"], params);
|
781
|
+
const model = strapi2.getModel(uid2);
|
782
|
+
if (!model || model.modelType !== "contentType") {
|
783
|
+
throw new strapiUtils.errors.ValidationError("Invalid content type");
|
784
|
+
}
|
785
|
+
const isSingleType = model?.kind === "singleType";
|
786
|
+
if (!isSingleType && !params.documentId) {
|
787
|
+
throw new strapiUtils.errors.ValidationError("documentId is required for Collection Types");
|
788
|
+
}
|
789
|
+
if (isSingleType) {
|
790
|
+
const doc = await strapi2.documents(uid2).findFirst();
|
791
|
+
if (!doc) {
|
792
|
+
throw new strapiUtils.errors.NotFoundError("Document not found");
|
793
|
+
}
|
794
|
+
newParams.documentId = doc?.documentId;
|
795
|
+
}
|
796
|
+
return newParams;
|
797
|
+
};
|
748
798
|
const createPreviewController = () => {
|
749
799
|
return {
|
750
|
-
|
751
|
-
|
800
|
+
/**
|
801
|
+
* Transforms an entry into a preview URL, so that it can be previewed
|
802
|
+
* in the Content Manager.
|
803
|
+
*/
|
804
|
+
async getPreviewUrl(ctx) {
|
805
|
+
const uid2 = ctx.params.contentType;
|
806
|
+
const query = ctx.request.query;
|
807
|
+
const params = await validatePreviewUrl(strapi, uid2, query);
|
808
|
+
const previewService = getService(strapi, "preview");
|
809
|
+
const url = await previewService.getPreviewUrl(uid2, params);
|
810
|
+
if (!url) {
|
811
|
+
ctx.status = 204;
|
812
|
+
}
|
752
813
|
return {
|
753
|
-
data: { url
|
814
|
+
data: { url }
|
754
815
|
};
|
755
816
|
}
|
756
817
|
};
|
@@ -762,10 +823,62 @@ const controllers$1 = {
|
|
762
823
|
* passing a controller factory as the value, instead of a controller object directly
|
763
824
|
*/
|
764
825
|
};
|
765
|
-
const createPreviewService = () => {
|
826
|
+
const createPreviewService = ({ strapi: strapi2 }) => {
|
827
|
+
const config = getService(strapi2, "preview-config");
|
828
|
+
return {
|
829
|
+
async getPreviewUrl(uid2, params) {
|
830
|
+
const handler = config.getPreviewHandler();
|
831
|
+
try {
|
832
|
+
return handler(uid2, params);
|
833
|
+
} catch (error) {
|
834
|
+
strapi2.log.error(`Failed to get preview URL: ${error}`);
|
835
|
+
throw new strapiUtils.errors.ApplicationError("Failed to get preview URL");
|
836
|
+
}
|
837
|
+
return;
|
838
|
+
}
|
839
|
+
};
|
840
|
+
};
|
841
|
+
const createPreviewConfigService = ({ strapi: strapi2 }) => {
|
842
|
+
return {
|
843
|
+
isEnabled() {
|
844
|
+
const config = strapi2.config.get("admin.preview");
|
845
|
+
if (!config) {
|
846
|
+
return false;
|
847
|
+
}
|
848
|
+
return config?.enabled ?? true;
|
849
|
+
},
|
850
|
+
/**
|
851
|
+
* Validate if the configuration is valid
|
852
|
+
*/
|
853
|
+
validate() {
|
854
|
+
if (!this.isEnabled()) {
|
855
|
+
return;
|
856
|
+
}
|
857
|
+
const handler = this.getPreviewHandler();
|
858
|
+
if (typeof handler !== "function") {
|
859
|
+
throw new strapiUtils.errors.ValidationError(
|
860
|
+
"Preview configuration is invalid. Handler must be a function"
|
861
|
+
);
|
862
|
+
}
|
863
|
+
},
|
864
|
+
/**
|
865
|
+
* Utility to get the preview handler from the configuration
|
866
|
+
*/
|
867
|
+
getPreviewHandler() {
|
868
|
+
const config = strapi2.config.get("admin.preview");
|
869
|
+
const emptyHandler = () => {
|
870
|
+
return void 0;
|
871
|
+
};
|
872
|
+
if (!this.isEnabled()) {
|
873
|
+
return emptyHandler;
|
874
|
+
}
|
875
|
+
return config?.config?.handler || emptyHandler;
|
876
|
+
}
|
877
|
+
};
|
766
878
|
};
|
767
879
|
const services$1 = {
|
768
|
-
preview: createPreviewService
|
880
|
+
preview: createPreviewService,
|
881
|
+
"preview-config": createPreviewConfigService
|
769
882
|
};
|
770
883
|
const getFeature = () => {
|
771
884
|
if (!strapi.features.future.isEnabled(FEATURE_ID)) {
|
@@ -774,7 +887,8 @@ const getFeature = () => {
|
|
774
887
|
return {
|
775
888
|
bootstrap() {
|
776
889
|
console.log("Bootstrapping preview server");
|
777
|
-
|
890
|
+
const config = getService(strapi, "preview-config");
|
891
|
+
config.validate();
|
778
892
|
},
|
779
893
|
routes: routes$1,
|
780
894
|
controllers: controllers$1,
|
@@ -786,10 +900,10 @@ const bootstrap = async () => {
|
|
786
900
|
Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {
|
787
901
|
strapi.get("webhookStore").addAllowedEvent(key, value);
|
788
902
|
});
|
789
|
-
getService$
|
790
|
-
await getService$
|
791
|
-
await getService$
|
792
|
-
await getService$
|
903
|
+
getService$2("field-sizes").setCustomFieldInputSizes();
|
904
|
+
await getService$2("components").syncConfigurations();
|
905
|
+
await getService$2("content-types").syncConfigurations();
|
906
|
+
await getService$2("permission").registerPermissions();
|
793
907
|
await history.bootstrap?.({ strapi });
|
794
908
|
await preview.bootstrap?.({ strapi });
|
795
909
|
};
|
@@ -1539,7 +1653,7 @@ const createMetadasSchema = (schema) => {
|
|
1539
1653
|
if (!value) {
|
1540
1654
|
return strapiUtils.yup.string();
|
1541
1655
|
}
|
1542
|
-
const targetSchema = getService$
|
1656
|
+
const targetSchema = getService$2("content-types").findContentType(
|
1543
1657
|
schema.attributes[key].targetModel
|
1544
1658
|
);
|
1545
1659
|
if (!targetSchema) {
|
@@ -1708,7 +1822,7 @@ const getDocumentLocaleAndStatus = async (request, model, opts = { allowMultiple
|
|
1708
1822
|
}
|
1709
1823
|
};
|
1710
1824
|
const formatDocumentWithMetadata = async (permissionChecker2, uid2, document, opts = {}) => {
|
1711
|
-
const documentMetadata2 = getService$
|
1825
|
+
const documentMetadata2 = getService$2("document-metadata");
|
1712
1826
|
const serviceOutput = await documentMetadata2.formatDocumentWithMetadata(uid2, document, opts);
|
1713
1827
|
let {
|
1714
1828
|
meta: { availableLocales, availableStatus }
|
@@ -1734,8 +1848,8 @@ const createDocument = async (ctx, opts) => {
|
|
1734
1848
|
const { userAbility, user } = ctx.state;
|
1735
1849
|
const { model } = ctx.params;
|
1736
1850
|
const { body } = ctx.request;
|
1737
|
-
const documentManager2 = getService$
|
1738
|
-
const permissionChecker2 = getService$
|
1851
|
+
const documentManager2 = getService$2("document-manager");
|
1852
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1739
1853
|
if (permissionChecker2.cannot.create()) {
|
1740
1854
|
throw new strapiUtils.errors.ForbiddenError();
|
1741
1855
|
}
|
@@ -1755,13 +1869,13 @@ const updateDocument = async (ctx, opts) => {
|
|
1755
1869
|
const { userAbility, user } = ctx.state;
|
1756
1870
|
const { id, model } = ctx.params;
|
1757
1871
|
const { body } = ctx.request;
|
1758
|
-
const documentManager2 = getService$
|
1759
|
-
const permissionChecker2 = getService$
|
1872
|
+
const documentManager2 = getService$2("document-manager");
|
1873
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1760
1874
|
if (permissionChecker2.cannot.update()) {
|
1761
1875
|
throw new strapiUtils.errors.ForbiddenError();
|
1762
1876
|
}
|
1763
1877
|
const permissionQuery = await permissionChecker2.sanitizedQuery.update(ctx.query);
|
1764
|
-
const populate = await getService$
|
1878
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1765
1879
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1766
1880
|
const [documentVersion, documentExists] = await Promise.all([
|
1767
1881
|
documentManager2.findOne(id, model, { populate, locale, status: "draft" }),
|
@@ -1792,14 +1906,14 @@ const collectionTypes = {
|
|
1792
1906
|
const { userAbility } = ctx.state;
|
1793
1907
|
const { model } = ctx.params;
|
1794
1908
|
const { query } = ctx.request;
|
1795
|
-
const documentMetadata2 = getService$
|
1796
|
-
const documentManager2 = getService$
|
1797
|
-
const permissionChecker2 = getService$
|
1909
|
+
const documentMetadata2 = getService$2("document-metadata");
|
1910
|
+
const documentManager2 = getService$2("document-manager");
|
1911
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1798
1912
|
if (permissionChecker2.cannot.read()) {
|
1799
1913
|
return ctx.forbidden();
|
1800
1914
|
}
|
1801
1915
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(query);
|
1802
|
-
const populate = await getService$
|
1916
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(1).countRelations({ toOne: false, toMany: true }).build();
|
1803
1917
|
const { locale, status } = await getDocumentLocaleAndStatus(query, model);
|
1804
1918
|
const { results: documents, pagination } = await documentManager2.findPage(
|
1805
1919
|
{ ...permissionQuery, populate, locale, status },
|
@@ -1828,13 +1942,13 @@ const collectionTypes = {
|
|
1828
1942
|
async findOne(ctx) {
|
1829
1943
|
const { userAbility } = ctx.state;
|
1830
1944
|
const { model, id } = ctx.params;
|
1831
|
-
const documentManager2 = getService$
|
1832
|
-
const permissionChecker2 = getService$
|
1945
|
+
const documentManager2 = getService$2("document-manager");
|
1946
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1833
1947
|
if (permissionChecker2.cannot.read()) {
|
1834
1948
|
return ctx.forbidden();
|
1835
1949
|
}
|
1836
1950
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
1837
|
-
const populate = await getService$
|
1951
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1838
1952
|
const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);
|
1839
1953
|
const version = await documentManager2.findOne(id, model, {
|
1840
1954
|
populate,
|
@@ -1865,7 +1979,7 @@ const collectionTypes = {
|
|
1865
1979
|
async create(ctx) {
|
1866
1980
|
const { userAbility } = ctx.state;
|
1867
1981
|
const { model } = ctx.params;
|
1868
|
-
const permissionChecker2 = getService$
|
1982
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1869
1983
|
const [totalEntries, document] = await Promise.all([
|
1870
1984
|
strapi.db.query(model).count(),
|
1871
1985
|
createDocument(ctx)
|
@@ -1886,7 +2000,7 @@ const collectionTypes = {
|
|
1886
2000
|
async update(ctx) {
|
1887
2001
|
const { userAbility } = ctx.state;
|
1888
2002
|
const { model } = ctx.params;
|
1889
|
-
const permissionChecker2 = getService$
|
2003
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1890
2004
|
const updatedVersion = await updateDocument(ctx);
|
1891
2005
|
const sanitizedVersion = await permissionChecker2.sanitizeOutput(updatedVersion);
|
1892
2006
|
ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedVersion);
|
@@ -1895,13 +2009,13 @@ const collectionTypes = {
|
|
1895
2009
|
const { userAbility, user } = ctx.state;
|
1896
2010
|
const { model, sourceId: id } = ctx.params;
|
1897
2011
|
const { body } = ctx.request;
|
1898
|
-
const documentManager2 = getService$
|
1899
|
-
const permissionChecker2 = getService$
|
2012
|
+
const documentManager2 = getService$2("document-manager");
|
2013
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1900
2014
|
if (permissionChecker2.cannot.create()) {
|
1901
2015
|
return ctx.forbidden();
|
1902
2016
|
}
|
1903
2017
|
const permissionQuery = await permissionChecker2.sanitizedQuery.create(ctx.query);
|
1904
|
-
const populate = await getService$
|
2018
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1905
2019
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1906
2020
|
const document = await documentManager2.findOne(id, model, {
|
1907
2021
|
populate,
|
@@ -1940,13 +2054,13 @@ const collectionTypes = {
|
|
1940
2054
|
async delete(ctx) {
|
1941
2055
|
const { userAbility } = ctx.state;
|
1942
2056
|
const { id, model } = ctx.params;
|
1943
|
-
const documentManager2 = getService$
|
1944
|
-
const permissionChecker2 = getService$
|
2057
|
+
const documentManager2 = getService$2("document-manager");
|
2058
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1945
2059
|
if (permissionChecker2.cannot.delete()) {
|
1946
2060
|
return ctx.forbidden();
|
1947
2061
|
}
|
1948
2062
|
const permissionQuery = await permissionChecker2.sanitizedQuery.delete(ctx.query);
|
1949
|
-
const populate = await getService$
|
2063
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1950
2064
|
const { locale } = await getDocumentLocaleAndStatus(ctx.query, model);
|
1951
2065
|
const documentLocales = await documentManager2.findLocales(id, model, { populate, locale });
|
1952
2066
|
if (documentLocales.length === 0) {
|
@@ -1968,14 +2082,14 @@ const collectionTypes = {
|
|
1968
2082
|
const { userAbility } = ctx.state;
|
1969
2083
|
const { id, model } = ctx.params;
|
1970
2084
|
const { body } = ctx.request;
|
1971
|
-
const documentManager2 = getService$
|
1972
|
-
const permissionChecker2 = getService$
|
2085
|
+
const documentManager2 = getService$2("document-manager");
|
2086
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1973
2087
|
if (permissionChecker2.cannot.publish()) {
|
1974
2088
|
return ctx.forbidden();
|
1975
2089
|
}
|
1976
2090
|
const publishedDocument = await strapi.db.transaction(async () => {
|
1977
2091
|
const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
|
1978
|
-
const populate = await getService$
|
2092
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1979
2093
|
let document;
|
1980
2094
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1981
2095
|
const isCreate = fp.isNil(id);
|
@@ -2023,13 +2137,13 @@ const collectionTypes = {
|
|
2023
2137
|
const { body } = ctx.request;
|
2024
2138
|
const { documentIds } = body;
|
2025
2139
|
await validateBulkActionInput(body);
|
2026
|
-
const documentManager2 = getService$
|
2027
|
-
const permissionChecker2 = getService$
|
2140
|
+
const documentManager2 = getService$2("document-manager");
|
2141
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2028
2142
|
if (permissionChecker2.cannot.publish()) {
|
2029
2143
|
return ctx.forbidden();
|
2030
2144
|
}
|
2031
2145
|
const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
|
2032
|
-
const populate = await getService$
|
2146
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
2033
2147
|
const { locale } = await getDocumentLocaleAndStatus(body, model, {
|
2034
2148
|
allowMultipleLocales: true
|
2035
2149
|
});
|
@@ -2054,8 +2168,8 @@ const collectionTypes = {
|
|
2054
2168
|
const { body } = ctx.request;
|
2055
2169
|
const { documentIds } = body;
|
2056
2170
|
await validateBulkActionInput(body);
|
2057
|
-
const documentManager2 = getService$
|
2058
|
-
const permissionChecker2 = getService$
|
2171
|
+
const documentManager2 = getService$2("document-manager");
|
2172
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2059
2173
|
if (permissionChecker2.cannot.unpublish()) {
|
2060
2174
|
return ctx.forbidden();
|
2061
2175
|
}
|
@@ -2084,8 +2198,8 @@ const collectionTypes = {
|
|
2084
2198
|
const {
|
2085
2199
|
body: { discardDraft, ...body }
|
2086
2200
|
} = ctx.request;
|
2087
|
-
const documentManager2 = getService$
|
2088
|
-
const permissionChecker2 = getService$
|
2201
|
+
const documentManager2 = getService$2("document-manager");
|
2202
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2089
2203
|
if (permissionChecker2.cannot.unpublish()) {
|
2090
2204
|
return ctx.forbidden();
|
2091
2205
|
}
|
@@ -2093,7 +2207,7 @@ const collectionTypes = {
|
|
2093
2207
|
return ctx.forbidden();
|
2094
2208
|
}
|
2095
2209
|
const permissionQuery = await permissionChecker2.sanitizedQuery.unpublish(ctx.query);
|
2096
|
-
const populate = await getService$
|
2210
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2097
2211
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2098
2212
|
const document = await documentManager2.findOne(id, model, {
|
2099
2213
|
populate,
|
@@ -2124,13 +2238,13 @@ const collectionTypes = {
|
|
2124
2238
|
const { userAbility } = ctx.state;
|
2125
2239
|
const { id, model } = ctx.params;
|
2126
2240
|
const { body } = ctx.request;
|
2127
|
-
const documentManager2 = getService$
|
2128
|
-
const permissionChecker2 = getService$
|
2241
|
+
const documentManager2 = getService$2("document-manager");
|
2242
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2129
2243
|
if (permissionChecker2.cannot.discard()) {
|
2130
2244
|
return ctx.forbidden();
|
2131
2245
|
}
|
2132
2246
|
const permissionQuery = await permissionChecker2.sanitizedQuery.discard(ctx.query);
|
2133
|
-
const populate = await getService$
|
2247
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2134
2248
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2135
2249
|
const document = await documentManager2.findOne(id, model, {
|
2136
2250
|
populate,
|
@@ -2155,13 +2269,13 @@ const collectionTypes = {
|
|
2155
2269
|
const { query, body } = ctx.request;
|
2156
2270
|
const { documentIds } = body;
|
2157
2271
|
await validateBulkActionInput(body);
|
2158
|
-
const documentManager2 = getService$
|
2159
|
-
const permissionChecker2 = getService$
|
2272
|
+
const documentManager2 = getService$2("document-manager");
|
2273
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2160
2274
|
if (permissionChecker2.cannot.delete()) {
|
2161
2275
|
return ctx.forbidden();
|
2162
2276
|
}
|
2163
2277
|
const permissionQuery = await permissionChecker2.sanitizedQuery.delete(query);
|
2164
|
-
const populate = await getService$
|
2278
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2165
2279
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2166
2280
|
const documentLocales = await documentManager2.findLocales(documentIds, model, {
|
2167
2281
|
populate,
|
@@ -2182,13 +2296,13 @@ const collectionTypes = {
|
|
2182
2296
|
async countDraftRelations(ctx) {
|
2183
2297
|
const { userAbility } = ctx.state;
|
2184
2298
|
const { model, id } = ctx.params;
|
2185
|
-
const documentManager2 = getService$
|
2186
|
-
const permissionChecker2 = getService$
|
2299
|
+
const documentManager2 = getService$2("document-manager");
|
2300
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2187
2301
|
if (permissionChecker2.cannot.read()) {
|
2188
2302
|
return ctx.forbidden();
|
2189
2303
|
}
|
2190
2304
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
2191
|
-
const populate = await getService$
|
2305
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2192
2306
|
const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);
|
2193
2307
|
const entity = await documentManager2.findOne(id, model, { populate, locale, status });
|
2194
2308
|
if (!entity) {
|
@@ -2207,8 +2321,8 @@ const collectionTypes = {
|
|
2207
2321
|
const ids = ctx.request.query.documentIds;
|
2208
2322
|
const locale = ctx.request.query.locale;
|
2209
2323
|
const { model } = ctx.params;
|
2210
|
-
const documentManager2 = getService$
|
2211
|
-
const permissionChecker2 = getService$
|
2324
|
+
const documentManager2 = getService$2("document-manager");
|
2325
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2212
2326
|
if (permissionChecker2.cannot.read()) {
|
2213
2327
|
return ctx.forbidden();
|
2214
2328
|
}
|
@@ -2232,13 +2346,13 @@ const collectionTypes = {
|
|
2232
2346
|
};
|
2233
2347
|
const components$1 = {
|
2234
2348
|
findComponents(ctx) {
|
2235
|
-
const components2 = getService$
|
2236
|
-
const { toDto } = getService$
|
2349
|
+
const components2 = getService$2("components").findAllComponents();
|
2350
|
+
const { toDto } = getService$2("data-mapper");
|
2237
2351
|
ctx.body = { data: components2.map(toDto) };
|
2238
2352
|
},
|
2239
2353
|
async findComponentConfiguration(ctx) {
|
2240
2354
|
const { uid: uid2 } = ctx.params;
|
2241
|
-
const componentService = getService$
|
2355
|
+
const componentService = getService$2("components");
|
2242
2356
|
const component = componentService.findComponent(uid2);
|
2243
2357
|
if (!component) {
|
2244
2358
|
return ctx.notFound("component.notFound");
|
@@ -2255,7 +2369,7 @@ const components$1 = {
|
|
2255
2369
|
async updateComponentConfiguration(ctx) {
|
2256
2370
|
const { uid: uid2 } = ctx.params;
|
2257
2371
|
const { body } = ctx.request;
|
2258
|
-
const componentService = getService$
|
2372
|
+
const componentService = getService$2("components");
|
2259
2373
|
const component = componentService.findComponent(uid2);
|
2260
2374
|
if (!component) {
|
2261
2375
|
return ctx.notFound("component.notFound");
|
@@ -2289,12 +2403,12 @@ const contentTypes = {
|
|
2289
2403
|
} catch (error) {
|
2290
2404
|
return ctx.send({ error }, 400);
|
2291
2405
|
}
|
2292
|
-
const contentTypes2 = getService$
|
2293
|
-
const { toDto } = getService$
|
2406
|
+
const contentTypes2 = getService$2("content-types").findContentTypesByKind(kind);
|
2407
|
+
const { toDto } = getService$2("data-mapper");
|
2294
2408
|
ctx.body = { data: contentTypes2.map(toDto) };
|
2295
2409
|
},
|
2296
2410
|
async findContentTypesSettings(ctx) {
|
2297
|
-
const { findAllContentTypes, findConfiguration } = getService$
|
2411
|
+
const { findAllContentTypes, findConfiguration } = getService$2("content-types");
|
2298
2412
|
const contentTypes2 = await findAllContentTypes();
|
2299
2413
|
const configurations = await Promise.all(
|
2300
2414
|
contentTypes2.map(async (contentType) => {
|
@@ -2308,7 +2422,7 @@ const contentTypes = {
|
|
2308
2422
|
},
|
2309
2423
|
async findContentTypeConfiguration(ctx) {
|
2310
2424
|
const { uid: uid2 } = ctx.params;
|
2311
|
-
const contentTypeService = getService$
|
2425
|
+
const contentTypeService = getService$2("content-types");
|
2312
2426
|
const contentType = await contentTypeService.findContentType(uid2);
|
2313
2427
|
if (!contentType) {
|
2314
2428
|
return ctx.notFound("contentType.notFound");
|
@@ -2330,13 +2444,13 @@ const contentTypes = {
|
|
2330
2444
|
const { userAbility } = ctx.state;
|
2331
2445
|
const { uid: uid2 } = ctx.params;
|
2332
2446
|
const { body } = ctx.request;
|
2333
|
-
const contentTypeService = getService$
|
2334
|
-
const metricsService = getService$
|
2447
|
+
const contentTypeService = getService$2("content-types");
|
2448
|
+
const metricsService = getService$2("metrics");
|
2335
2449
|
const contentType = await contentTypeService.findContentType(uid2);
|
2336
2450
|
if (!contentType) {
|
2337
2451
|
return ctx.notFound("contentType.notFound");
|
2338
2452
|
}
|
2339
|
-
if (!getService$
|
2453
|
+
if (!getService$2("permission").canConfigureContentType({ userAbility, contentType })) {
|
2340
2454
|
return ctx.forbidden();
|
2341
2455
|
}
|
2342
2456
|
let input;
|
@@ -2369,10 +2483,10 @@ const contentTypes = {
|
|
2369
2483
|
};
|
2370
2484
|
const init = {
|
2371
2485
|
getInitData(ctx) {
|
2372
|
-
const { toDto } = getService$
|
2373
|
-
const { findAllComponents } = getService$
|
2374
|
-
const { getAllFieldSizes } = getService$
|
2375
|
-
const { findAllContentTypes } = getService$
|
2486
|
+
const { toDto } = getService$2("data-mapper");
|
2487
|
+
const { findAllComponents } = getService$2("components");
|
2488
|
+
const { getAllFieldSizes } = getService$2("field-sizes");
|
2489
|
+
const { findAllContentTypes } = getService$2("content-types");
|
2376
2490
|
ctx.body = {
|
2377
2491
|
data: {
|
2378
2492
|
fieldSizes: getAllFieldSizes(),
|
@@ -2408,7 +2522,7 @@ const addFiltersClause = (params, filtersClause) => {
|
|
2408
2522
|
params.filters.$and.push(filtersClause);
|
2409
2523
|
};
|
2410
2524
|
const sanitizeMainField = (model, mainField, userAbility) => {
|
2411
|
-
const permissionChecker2 = getService$
|
2525
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2412
2526
|
userAbility,
|
2413
2527
|
model: model.uid
|
2414
2528
|
});
|
@@ -2426,7 +2540,7 @@ const addStatusToRelations = async (targetUid, relations2) => {
|
|
2426
2540
|
if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.getModel(targetUid))) {
|
2427
2541
|
return relations2;
|
2428
2542
|
}
|
2429
|
-
const documentMetadata2 = getService$
|
2543
|
+
const documentMetadata2 = getService$2("document-metadata");
|
2430
2544
|
if (!relations2.length) {
|
2431
2545
|
return relations2;
|
2432
2546
|
}
|
@@ -2504,7 +2618,7 @@ const relations = {
|
|
2504
2618
|
ctx.request?.query?.locale
|
2505
2619
|
);
|
2506
2620
|
const { status } = validateStatus(sourceUid, ctx.request?.query?.status);
|
2507
|
-
const permissionChecker2 = getService$
|
2621
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2508
2622
|
userAbility,
|
2509
2623
|
model
|
2510
2624
|
});
|
@@ -2529,7 +2643,7 @@ const relations = {
|
|
2529
2643
|
where.id = id;
|
2530
2644
|
}
|
2531
2645
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
2532
|
-
const populate = await getService$
|
2646
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2533
2647
|
const currentEntity = await strapi.db.query(model).findOne({
|
2534
2648
|
where,
|
2535
2649
|
populate
|
@@ -2544,7 +2658,7 @@ const relations = {
|
|
2544
2658
|
}
|
2545
2659
|
entryId = currentEntity.id;
|
2546
2660
|
}
|
2547
|
-
const modelConfig = isComponent2 ? await getService$
|
2661
|
+
const modelConfig = isComponent2 ? await getService$2("components").findConfiguration(sourceSchema) : await getService$2("content-types").findConfiguration(sourceSchema);
|
2548
2662
|
const targetSchema = strapi.getModel(targetUid);
|
2549
2663
|
const mainField = fp.flow(
|
2550
2664
|
fp.prop(`metadatas.${targetField}.edit.mainField`),
|
@@ -2598,7 +2712,7 @@ const relations = {
|
|
2598
2712
|
}
|
2599
2713
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2600
2714
|
const { idsToOmit, idsToInclude, _q, ...query } = ctx.request.query;
|
2601
|
-
const permissionChecker2 = getService$
|
2715
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2602
2716
|
userAbility: ctx.state.userAbility,
|
2603
2717
|
model: targetUid
|
2604
2718
|
});
|
@@ -2677,7 +2791,7 @@ const relations = {
|
|
2677
2791
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2678
2792
|
const { uid: sourceUid } = sourceSchema;
|
2679
2793
|
const { uid: targetUid } = targetSchema;
|
2680
|
-
const permissionQuery = await getService$
|
2794
|
+
const permissionQuery = await getService$2("permission-checker").create({ userAbility, model: targetUid }).sanitizedQuery.read({ fields: fieldsToSelect });
|
2681
2795
|
const dbQuery = strapi.db.query(sourceUid);
|
2682
2796
|
const loadRelations = strapiUtils.relations.isAnyToMany(attribute) ? (...args) => dbQuery.loadPages(...args) : (...args) => dbQuery.load(...args).then((res2) => ({ results: res2 ? [res2] : [] }));
|
2683
2797
|
const filters = {};
|
@@ -2718,10 +2832,10 @@ const relations = {
|
|
2718
2832
|
}
|
2719
2833
|
};
|
2720
2834
|
const buildPopulateFromQuery = async (query, model) => {
|
2721
|
-
return getService$
|
2835
|
+
return getService$2("populate-builder")(model).populateFromQuery(query).populateDeep(Infinity).countRelations().build();
|
2722
2836
|
};
|
2723
2837
|
const findDocument = async (query, uid2, opts = {}) => {
|
2724
|
-
const documentManager2 = getService$
|
2838
|
+
const documentManager2 = getService$2("document-manager");
|
2725
2839
|
const populate = await buildPopulateFromQuery(query, uid2);
|
2726
2840
|
return documentManager2.findMany({ ...opts, populate }, uid2).then((documents) => documents[0]);
|
2727
2841
|
};
|
@@ -2729,8 +2843,8 @@ const createOrUpdateDocument = async (ctx, opts) => {
|
|
2729
2843
|
const { user, userAbility } = ctx.state;
|
2730
2844
|
const { model } = ctx.params;
|
2731
2845
|
const { body, query } = ctx.request;
|
2732
|
-
const documentManager2 = getService$
|
2733
|
-
const permissionChecker2 = getService$
|
2846
|
+
const documentManager2 = getService$2("document-manager");
|
2847
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2734
2848
|
if (permissionChecker2.cannot.create() && permissionChecker2.cannot.update()) {
|
2735
2849
|
throw new strapiUtils.errors.ForbiddenError();
|
2736
2850
|
}
|
@@ -2771,7 +2885,7 @@ const singleTypes = {
|
|
2771
2885
|
const { userAbility } = ctx.state;
|
2772
2886
|
const { model } = ctx.params;
|
2773
2887
|
const { query = {} } = ctx.request;
|
2774
|
-
const permissionChecker2 = getService$
|
2888
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2775
2889
|
if (permissionChecker2.cannot.read()) {
|
2776
2890
|
return ctx.forbidden();
|
2777
2891
|
}
|
@@ -2805,7 +2919,7 @@ const singleTypes = {
|
|
2805
2919
|
async createOrUpdate(ctx) {
|
2806
2920
|
const { userAbility } = ctx.state;
|
2807
2921
|
const { model } = ctx.params;
|
2808
|
-
const permissionChecker2 = getService$
|
2922
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2809
2923
|
const document = await createOrUpdateDocument(ctx);
|
2810
2924
|
const sanitizedDocument = await permissionChecker2.sanitizeOutput(document);
|
2811
2925
|
ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedDocument);
|
@@ -2814,8 +2928,8 @@ const singleTypes = {
|
|
2814
2928
|
const { userAbility } = ctx.state;
|
2815
2929
|
const { model } = ctx.params;
|
2816
2930
|
const { query = {} } = ctx.request;
|
2817
|
-
const documentManager2 = getService$
|
2818
|
-
const permissionChecker2 = getService$
|
2931
|
+
const documentManager2 = getService$2("document-manager");
|
2932
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2819
2933
|
if (permissionChecker2.cannot.delete()) {
|
2820
2934
|
return ctx.forbidden();
|
2821
2935
|
}
|
@@ -2843,8 +2957,8 @@ const singleTypes = {
|
|
2843
2957
|
const { userAbility } = ctx.state;
|
2844
2958
|
const { model } = ctx.params;
|
2845
2959
|
const { query = {} } = ctx.request;
|
2846
|
-
const documentManager2 = getService$
|
2847
|
-
const permissionChecker2 = getService$
|
2960
|
+
const documentManager2 = getService$2("document-manager");
|
2961
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2848
2962
|
if (permissionChecker2.cannot.publish()) {
|
2849
2963
|
return ctx.forbidden();
|
2850
2964
|
}
|
@@ -2872,8 +2986,8 @@ const singleTypes = {
|
|
2872
2986
|
body: { discardDraft, ...body },
|
2873
2987
|
query = {}
|
2874
2988
|
} = ctx.request;
|
2875
|
-
const documentManager2 = getService$
|
2876
|
-
const permissionChecker2 = getService$
|
2989
|
+
const documentManager2 = getService$2("document-manager");
|
2990
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2877
2991
|
if (permissionChecker2.cannot.unpublish()) {
|
2878
2992
|
return ctx.forbidden();
|
2879
2993
|
}
|
@@ -2907,8 +3021,8 @@ const singleTypes = {
|
|
2907
3021
|
const { userAbility } = ctx.state;
|
2908
3022
|
const { model } = ctx.params;
|
2909
3023
|
const { body, query = {} } = ctx.request;
|
2910
|
-
const documentManager2 = getService$
|
2911
|
-
const permissionChecker2 = getService$
|
3024
|
+
const documentManager2 = getService$2("document-manager");
|
3025
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2912
3026
|
if (permissionChecker2.cannot.discard()) {
|
2913
3027
|
return ctx.forbidden();
|
2914
3028
|
}
|
@@ -2931,8 +3045,8 @@ const singleTypes = {
|
|
2931
3045
|
const { userAbility } = ctx.state;
|
2932
3046
|
const { model } = ctx.params;
|
2933
3047
|
const { query } = ctx.request;
|
2934
|
-
const documentManager2 = getService$
|
2935
|
-
const permissionChecker2 = getService$
|
3048
|
+
const documentManager2 = getService$2("document-manager");
|
3049
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2936
3050
|
const { locale } = await getDocumentLocaleAndStatus(query, model);
|
2937
3051
|
if (permissionChecker2.cannot.read()) {
|
2938
3052
|
return ctx.forbidden();
|
@@ -2956,7 +3070,7 @@ const uid$1 = {
|
|
2956
3070
|
const { query = {} } = ctx.request;
|
2957
3071
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2958
3072
|
await validateUIDField(contentTypeUID, field);
|
2959
|
-
const uidService = getService$
|
3073
|
+
const uidService = getService$2("uid");
|
2960
3074
|
ctx.body = {
|
2961
3075
|
data: await uidService.generateUIDField({ contentTypeUID, field, data, locale })
|
2962
3076
|
};
|
@@ -2968,7 +3082,7 @@ const uid$1 = {
|
|
2968
3082
|
const { query = {} } = ctx.request;
|
2969
3083
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2970
3084
|
await validateUIDField(contentTypeUID, field);
|
2971
|
-
const uidService = getService$
|
3085
|
+
const uidService = getService$2("uid");
|
2972
3086
|
const isAvailable = await uidService.checkUIDAvailability({
|
2973
3087
|
contentTypeUID,
|
2974
3088
|
field,
|
@@ -3141,12 +3255,12 @@ async function syncMetadatas(configuration, schema) {
|
|
3141
3255
|
return ___default.default.assign(metasWithDefaults, updatedMetas);
|
3142
3256
|
}
|
3143
3257
|
const getTargetSchema = (targetModel) => {
|
3144
|
-
return getService$
|
3258
|
+
return getService$2("content-types").findContentType(targetModel);
|
3145
3259
|
};
|
3146
3260
|
const DEFAULT_LIST_LENGTH = 4;
|
3147
3261
|
const MAX_ROW_SIZE = 12;
|
3148
3262
|
const isAllowedFieldSize = (type, size) => {
|
3149
|
-
const { getFieldSize } = getService$
|
3263
|
+
const { getFieldSize } = getService$2("field-sizes");
|
3150
3264
|
const fieldSize = getFieldSize(type);
|
3151
3265
|
if (!fieldSize.isResizable && size !== fieldSize.default) {
|
3152
3266
|
return false;
|
@@ -3154,7 +3268,7 @@ const isAllowedFieldSize = (type, size) => {
|
|
3154
3268
|
return size <= MAX_ROW_SIZE;
|
3155
3269
|
};
|
3156
3270
|
const getDefaultFieldSize = (attribute) => {
|
3157
|
-
const { hasFieldSize, getFieldSize } = getService$
|
3271
|
+
const { hasFieldSize, getFieldSize } = getService$2("field-sizes");
|
3158
3272
|
return getFieldSize(hasFieldSize(attribute.customField) ? attribute.customField : attribute.type).default;
|
3159
3273
|
};
|
3160
3274
|
async function createDefaultLayouts(schema) {
|
@@ -3189,7 +3303,7 @@ function syncLayouts(configuration, schema) {
|
|
3189
3303
|
for (const el of row) {
|
3190
3304
|
if (!hasEditableAttribute(schema, el.name))
|
3191
3305
|
continue;
|
3192
|
-
const { hasFieldSize } = getService$
|
3306
|
+
const { hasFieldSize } = getService$2("field-sizes");
|
3193
3307
|
const fieldType = hasFieldSize(schema.attributes[el.name].customField) ? schema.attributes[el.name].customField : schema.attributes[el.name].type;
|
3194
3308
|
if (!isAllowedFieldSize(fieldType, el.size)) {
|
3195
3309
|
elementsToReAppend.push(el.name);
|
@@ -3329,17 +3443,17 @@ const configurationService$1 = createConfigurationService({
|
|
3329
3443
|
isComponent: true,
|
3330
3444
|
prefix: STORE_KEY_PREFIX,
|
3331
3445
|
getModels() {
|
3332
|
-
const { toContentManagerModel } = getService$
|
3446
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3333
3447
|
return fp.mapValues(toContentManagerModel, strapi.components);
|
3334
3448
|
}
|
3335
3449
|
});
|
3336
3450
|
const components = ({ strapi: strapi2 }) => ({
|
3337
3451
|
findAllComponents() {
|
3338
|
-
const { toContentManagerModel } = getService$
|
3452
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3339
3453
|
return Object.values(strapi2.components).map(toContentManagerModel);
|
3340
3454
|
},
|
3341
3455
|
findComponent(uid2) {
|
3342
|
-
const { toContentManagerModel } = getService$
|
3456
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3343
3457
|
const component = strapi2.components[uid2];
|
3344
3458
|
return fp.isNil(component) ? component : toContentManagerModel(component);
|
3345
3459
|
},
|
@@ -3390,17 +3504,17 @@ const configurationService = createConfigurationService({
|
|
3390
3504
|
storeUtils,
|
3391
3505
|
prefix: "content_types",
|
3392
3506
|
getModels() {
|
3393
|
-
const { toContentManagerModel } = getService$
|
3507
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3394
3508
|
return fp.mapValues(toContentManagerModel, strapi.contentTypes);
|
3395
3509
|
}
|
3396
3510
|
});
|
3397
3511
|
const service = ({ strapi: strapi2 }) => ({
|
3398
3512
|
findAllContentTypes() {
|
3399
|
-
const { toContentManagerModel } = getService$
|
3513
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3400
3514
|
return Object.values(strapi2.contentTypes).map(toContentManagerModel);
|
3401
3515
|
},
|
3402
3516
|
findContentType(uid2) {
|
3403
|
-
const { toContentManagerModel } = getService$
|
3517
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3404
3518
|
const contentType = strapi2.contentTypes[uid2];
|
3405
3519
|
return fp.isNil(contentType) ? contentType : toContentManagerModel(contentType);
|
3406
3520
|
},
|
@@ -3429,7 +3543,7 @@ const service = ({ strapi: strapi2 }) => ({
|
|
3429
3543
|
return this.findConfiguration(contentType);
|
3430
3544
|
},
|
3431
3545
|
findComponentsConfigurations(contentType) {
|
3432
|
-
return getService$
|
3546
|
+
return getService$2("components").findComponentsConfigurations(contentType);
|
3433
3547
|
},
|
3434
3548
|
syncConfigurations() {
|
3435
3549
|
return configurationService.syncConfigurations();
|
@@ -3701,7 +3815,7 @@ const permission = ({ strapi: strapi2 }) => ({
|
|
3701
3815
|
return userAbility.can(action);
|
3702
3816
|
},
|
3703
3817
|
async registerPermissions() {
|
3704
|
-
const displayedContentTypes = getService$
|
3818
|
+
const displayedContentTypes = getService$2("content-types").findDisplayedContentTypes();
|
3705
3819
|
const contentTypesUids = displayedContentTypes.map(fp.prop("uid"));
|
3706
3820
|
const actions = [
|
3707
3821
|
{
|
@@ -3977,7 +4091,7 @@ const getQueryPopulate = async (uid2, query) => {
|
|
3977
4091
|
return populateQuery;
|
3978
4092
|
};
|
3979
4093
|
const buildDeepPopulate = (uid2) => {
|
3980
|
-
return getService$
|
4094
|
+
return getService$2("populate-builder")(uid2).populateDeep(Infinity).countRelations().build();
|
3981
4095
|
};
|
3982
4096
|
const populateBuilder = (uid2) => {
|
3983
4097
|
let getInitialPopulate = async () => {
|