@strapi/content-manager 0.0.0-experimental.f8a68bc03b751aa0a66c4dcfaf83553c9b6adf2b → 0.0.0-experimental.fb22a8bd8745528903b2f168fdd286dfd1f5082e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{ComponentConfigurationPage-B2g3icXu.mjs → ComponentConfigurationPage-BaJMOQyq.mjs} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-B2g3icXu.mjs.map → ComponentConfigurationPage-BaJMOQyq.mjs.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-CzDn8Uxh.js → ComponentConfigurationPage-N-CTtgQa.js} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-CzDn8Uxh.js.map → ComponentConfigurationPage-N-CTtgQa.js.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-Bcbi6r5y.js → EditConfigurationPage-BHkjAbxH.js} +4 -4
- package/dist/_chunks/{EditConfigurationPage-Bcbi6r5y.js.map → EditConfigurationPage-BHkjAbxH.js.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-DSA1zONV.mjs → EditConfigurationPage-CKK-5LfX.mjs} +4 -4
- package/dist/_chunks/{EditConfigurationPage-DSA1zONV.mjs.map → EditConfigurationPage-CKK-5LfX.mjs.map} +1 -1
- package/dist/_chunks/{EditViewPage-Ca2EmJpb.mjs → EditViewPage-B11aeMcf.mjs} +38 -8
- package/dist/_chunks/EditViewPage-B11aeMcf.mjs.map +1 -0
- package/dist/_chunks/{EditViewPage-BvcMXaP2.js → EditViewPage-QPUftxUd.js} +37 -7
- package/dist/_chunks/EditViewPage-QPUftxUd.js.map +1 -0
- package/dist/_chunks/{Field-BEYkgCZ0.mjs → Field-Bj_RgtGo.mjs} +44 -25
- package/dist/_chunks/Field-Bj_RgtGo.mjs.map +1 -0
- package/dist/_chunks/{Field-CmaWxdpf.js → Field-DUK83cfh.js} +43 -24
- package/dist/_chunks/Field-DUK83cfh.js.map +1 -0
- package/dist/_chunks/{Form-DAUpPBVM.js → Form-DHmBRlHd.js} +2 -2
- package/dist/_chunks/{Form-DAUpPBVM.js.map → Form-DHmBRlHd.js.map} +1 -1
- package/dist/_chunks/{Form-BJVbU6w4.mjs → Form-DLMSoXV7.mjs} +2 -2
- package/dist/_chunks/{Form-BJVbU6w4.mjs.map → Form-DLMSoXV7.mjs.map} +1 -1
- package/dist/_chunks/{History-M6Pk9CoY.mjs → History-CfCSNlG9.mjs} +23 -93
- package/dist/_chunks/History-CfCSNlG9.mjs.map +1 -0
- package/dist/_chunks/{History-Bw9vfT1k.js → History-Di3zm4HT.js} +22 -92
- package/dist/_chunks/History-Di3zm4HT.js.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-D7ior2zq.mjs → ListConfigurationPage-0mtv_iqk.mjs} +6 -5
- package/dist/_chunks/ListConfigurationPage-0mtv_iqk.mjs.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-DBVqF5fc.js → ListConfigurationPage-Cq361KIt.js} +5 -4
- package/dist/_chunks/ListConfigurationPage-Cq361KIt.js.map +1 -0
- package/dist/_chunks/{ListViewPage-BH37wONY.mjs → ListViewPage-BxLVROX8.mjs} +62 -39
- package/dist/_chunks/ListViewPage-BxLVROX8.mjs.map +1 -0
- package/dist/_chunks/{ListViewPage-MZu-8OKX.js → ListViewPage-DFDcG8gM.js} +62 -39
- package/dist/_chunks/ListViewPage-DFDcG8gM.js.map +1 -0
- package/dist/_chunks/{NoContentTypePage-DRp7Aem_.mjs → NoContentTypePage-BRfDd67_.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-DRp7Aem_.mjs.map → NoContentTypePage-BRfDd67_.mjs.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-C9lRMTCa.js → NoContentTypePage-BSyvnDZZ.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-C9lRMTCa.js.map → NoContentTypePage-BSyvnDZZ.js.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-CzhRt5CA.mjs → NoPermissionsPage-CV9V8KWa.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-CzhRt5CA.mjs.map → NoPermissionsPage-CV9V8KWa.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-COs61PpB.js → NoPermissionsPage-DyLphsn_.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-COs61PpB.js.map → NoPermissionsPage-DyLphsn_.js.map} +1 -1
- package/dist/_chunks/Preview-C_B1nx3g.mjs +272 -0
- package/dist/_chunks/Preview-C_B1nx3g.mjs.map +1 -0
- package/dist/_chunks/Preview-D_3aO6Ly.js +291 -0
- package/dist/_chunks/Preview-D_3aO6Ly.js.map +1 -0
- package/dist/_chunks/{Relations-68XxIzPI.mjs → Relations-C6pwmDXh.mjs} +27 -12
- package/dist/_chunks/Relations-C6pwmDXh.mjs.map +1 -0
- package/dist/_chunks/{Relations-CsGlulU_.js → Relations-Cne2AlrL.js} +26 -11
- package/dist/_chunks/Relations-Cne2AlrL.js.map +1 -0
- package/dist/_chunks/{en-DKV44jRb.mjs → en-DhFUjrNW.mjs} +15 -4
- package/dist/_chunks/{en-DKV44jRb.mjs.map → en-DhFUjrNW.mjs.map} +1 -1
- package/dist/_chunks/{en-Bm0D0IWz.js → en-Ic0kXjxB.js} +15 -4
- package/dist/_chunks/{en-Bm0D0IWz.js.map → en-Ic0kXjxB.js.map} +1 -1
- package/dist/_chunks/{es-EUonQTon.js → es-9K52xZIr.js} +2 -2
- package/dist/_chunks/{ja-CcFe8diO.js.map → es-9K52xZIr.js.map} +1 -1
- package/dist/_chunks/{es-CeXiYflN.mjs → es-D34tqjMw.mjs} +2 -2
- package/dist/_chunks/{es-CeXiYflN.mjs.map → es-D34tqjMw.mjs.map} +1 -1
- package/dist/_chunks/{fr-CD9VFbPM.mjs → fr--pg5jUbt.mjs} +13 -3
- package/dist/_chunks/{fr-CD9VFbPM.mjs.map → fr--pg5jUbt.mjs.map} +1 -1
- package/dist/_chunks/{fr-B7kGGg3E.js → fr-B2Kyv8Z9.js} +13 -3
- package/dist/_chunks/{fr-B7kGGg3E.js.map → fr-B2Kyv8Z9.js.map} +1 -1
- package/dist/_chunks/{index-CsfwpRfc.mjs → index-BpxR3En4.mjs} +173 -90
- package/dist/_chunks/index-BpxR3En4.mjs.map +1 -0
- package/dist/_chunks/{index-oDq3VO9j.js → index-T-aWjbj2.js} +169 -86
- package/dist/_chunks/index-T-aWjbj2.js.map +1 -0
- package/dist/_chunks/{ja-CcFe8diO.js → ja-7sfIbjxE.js} +2 -2
- package/dist/_chunks/{es-EUonQTon.js.map → ja-7sfIbjxE.js.map} +1 -1
- package/dist/_chunks/{ja-CtsUxOvk.mjs → ja-BHqhDq4V.mjs} +2 -2
- package/dist/_chunks/{ja-CtsUxOvk.mjs.map → ja-BHqhDq4V.mjs.map} +1 -1
- package/dist/_chunks/{layout-Euka-kfv.js → layout-BEuNwv-F.js} +3 -3
- package/dist/_chunks/{layout-Euka-kfv.js.map → layout-BEuNwv-F.js.map} +1 -1
- package/dist/_chunks/{layout-C5uSVTqi.mjs → layout-DhMZ_lDx.mjs} +3 -3
- package/dist/_chunks/{layout-C5uSVTqi.mjs.map → layout-DhMZ_lDx.mjs.map} +1 -1
- package/dist/_chunks/{objects-gigeqt7s.js → objects-BcXOv6_9.js} +2 -4
- package/dist/_chunks/{objects-gigeqt7s.js.map → objects-BcXOv6_9.js.map} +1 -1
- package/dist/_chunks/{objects-mKMAmfec.mjs → objects-D6yBsdmx.mjs} +2 -4
- package/dist/_chunks/{objects-mKMAmfec.mjs.map → objects-D6yBsdmx.mjs.map} +1 -1
- package/dist/_chunks/{relations-BpHVgFuV.mjs → relations-BdnxoX6f.mjs} +6 -7
- package/dist/_chunks/relations-BdnxoX6f.mjs.map +1 -0
- package/dist/_chunks/{relations-DG7kmxa0.js → relations-kLcuobLk.js} +6 -7
- package/dist/_chunks/relations-kLcuobLk.js.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +4 -4
- package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
- package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +2 -2
- package/dist/admin/src/preview/components/PreviewContent.d.ts +2 -0
- package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
- package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -0
- package/dist/admin/src/preview/constants.d.ts +1 -0
- package/dist/admin/src/preview/index.d.ts +4 -0
- package/dist/admin/src/preview/pages/Preview.d.ts +11 -0
- package/dist/admin/src/preview/routes.d.ts +3 -0
- package/dist/admin/src/preview/services/preview.d.ts +3 -0
- package/dist/admin/src/router.d.ts +1 -1
- package/dist/admin/src/services/documents.d.ts +0 -3
- package/dist/server/index.js +392 -148
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +393 -149
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/metadata.d.ts +15 -1
- package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
- package/dist/server/src/history/services/utils.d.ts +2 -3
- package/dist/server/src/history/services/utils.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +4 -4
- package/dist/server/src/preview/constants.d.ts +2 -0
- package/dist/server/src/preview/constants.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/index.d.ts +2 -0
- package/dist/server/src/preview/controllers/index.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/preview.d.ts +13 -0
- package/dist/server/src/preview/controllers/preview.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
- package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
- package/dist/server/src/preview/index.d.ts +4 -0
- package/dist/server/src/preview/index.d.ts.map +1 -0
- package/dist/server/src/preview/routes/index.d.ts +8 -0
- package/dist/server/src/preview/routes/index.d.ts.map +1 -0
- package/dist/server/src/preview/routes/preview.d.ts +4 -0
- package/dist/server/src/preview/routes/preview.d.ts.map +1 -0
- package/dist/server/src/preview/services/index.d.ts +16 -0
- package/dist/server/src/preview/services/index.d.ts.map +1 -0
- package/dist/server/src/preview/services/preview-config.d.ts +32 -0
- package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
- package/dist/server/src/preview/services/preview.d.ts +12 -0
- package/dist/server/src/preview/services/preview.d.ts.map +1 -0
- package/dist/server/src/preview/utils.d.ts +19 -0
- package/dist/server/src/preview/utils.d.ts.map +1 -0
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/services/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts +8 -8
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +4 -4
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
- package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/shared/contracts/index.d.ts +1 -0
- package/dist/shared/contracts/index.d.ts.map +1 -1
- package/dist/shared/contracts/preview.d.ts +27 -0
- package/dist/shared/contracts/preview.d.ts.map +1 -0
- package/dist/shared/index.js +4 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/index.mjs +4 -0
- package/dist/shared/index.mjs.map +1 -1
- package/package.json +10 -10
- package/dist/_chunks/EditViewPage-BvcMXaP2.js.map +0 -1
- package/dist/_chunks/EditViewPage-Ca2EmJpb.mjs.map +0 -1
- package/dist/_chunks/Field-BEYkgCZ0.mjs.map +0 -1
- package/dist/_chunks/Field-CmaWxdpf.js.map +0 -1
- package/dist/_chunks/History-Bw9vfT1k.js.map +0 -1
- package/dist/_chunks/History-M6Pk9CoY.mjs.map +0 -1
- package/dist/_chunks/ListConfigurationPage-D7ior2zq.mjs.map +0 -1
- package/dist/_chunks/ListConfigurationPage-DBVqF5fc.js.map +0 -1
- package/dist/_chunks/ListViewPage-BH37wONY.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-MZu-8OKX.js.map +0 -1
- package/dist/_chunks/Relations-68XxIzPI.mjs.map +0 -1
- package/dist/_chunks/Relations-CsGlulU_.js.map +0 -1
- package/dist/_chunks/index-CsfwpRfc.mjs.map +0 -1
- package/dist/_chunks/index-oDq3VO9j.js.map +0 -1
- package/dist/_chunks/relations-BpHVgFuV.mjs.map +0 -1
- package/dist/_chunks/relations-DG7kmxa0.js.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 {
|
@@ -121,7 +121,7 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
121
121
|
}
|
122
122
|
};
|
123
123
|
};
|
124
|
-
const controllers$
|
124
|
+
const controllers$2 = {
|
125
125
|
"history-version": createHistoryVersionController
|
126
126
|
/**
|
127
127
|
* Casting is needed because the types aren't aware that Strapi supports
|
@@ -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;
|
@@ -620,17 +641,17 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
|
|
620
641
|
}
|
621
642
|
};
|
622
643
|
};
|
623
|
-
const services$
|
644
|
+
const services$2 = {
|
624
645
|
history: createHistoryService,
|
625
646
|
lifecycles: createLifecyclesService
|
626
647
|
};
|
627
|
-
const info = { pluginName: "content-manager", type: "admin" };
|
648
|
+
const info$1 = { pluginName: "content-manager", type: "admin" };
|
628
649
|
const historyVersionRouter = {
|
629
650
|
type: "admin",
|
630
651
|
routes: [
|
631
652
|
{
|
632
653
|
method: "GET",
|
633
|
-
info,
|
654
|
+
info: info$1,
|
634
655
|
path: "/history-versions",
|
635
656
|
handler: "history-version.findMany",
|
636
657
|
config: {
|
@@ -639,7 +660,7 @@ const historyVersionRouter = {
|
|
639
660
|
},
|
640
661
|
{
|
641
662
|
method: "PUT",
|
642
|
-
info,
|
663
|
+
info: info$1,
|
643
664
|
path: "/history-versions/:versionId/restore",
|
644
665
|
handler: "history-version.restoreVersion",
|
645
666
|
config: {
|
@@ -648,7 +669,7 @@ const historyVersionRouter = {
|
|
648
669
|
}
|
649
670
|
]
|
650
671
|
};
|
651
|
-
const routes$
|
672
|
+
const routes$2 = {
|
652
673
|
"history-version": historyVersionRouter
|
653
674
|
};
|
654
675
|
const historyVersion = {
|
@@ -695,21 +716,21 @@ const historyVersion = {
|
|
695
716
|
}
|
696
717
|
}
|
697
718
|
};
|
698
|
-
const getFeature = () => {
|
719
|
+
const getFeature$1 = () => {
|
699
720
|
if (strapi.ee.features.isEnabled("cms-content-history")) {
|
700
721
|
return {
|
701
722
|
register({ strapi: strapi2 }) {
|
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
|
-
controllers: controllers$
|
711
|
-
services: services$
|
712
|
-
routes: routes$
|
731
|
+
controllers: controllers$2,
|
732
|
+
services: services$2,
|
733
|
+
routes: routes$2
|
713
734
|
};
|
714
735
|
}
|
715
736
|
return {
|
@@ -718,9 +739,205 @@ const getFeature = () => {
|
|
718
739
|
}
|
719
740
|
};
|
720
741
|
};
|
721
|
-
const history = getFeature();
|
742
|
+
const history = getFeature$1();
|
743
|
+
const FEATURE_ID = "preview";
|
744
|
+
const info = { pluginName: "content-manager", type: "admin" };
|
745
|
+
const previewRouter = {
|
746
|
+
type: "admin",
|
747
|
+
routes: [
|
748
|
+
{
|
749
|
+
method: "GET",
|
750
|
+
info,
|
751
|
+
path: "/preview/url/:contentType",
|
752
|
+
handler: "preview.getPreviewUrl",
|
753
|
+
config: {
|
754
|
+
policies: ["admin::isAuthenticatedAdmin"]
|
755
|
+
}
|
756
|
+
}
|
757
|
+
]
|
758
|
+
};
|
759
|
+
const routes$1 = {
|
760
|
+
preview: previewRouter
|
761
|
+
};
|
762
|
+
function getService(strapi2, name) {
|
763
|
+
return strapi2.service(`plugin::content-manager.${name}`);
|
764
|
+
}
|
765
|
+
const getPreviewUrlSchema = yup__namespace.object().shape({
|
766
|
+
// Will be undefined for single types
|
767
|
+
documentId: yup__namespace.string(),
|
768
|
+
locale: yup__namespace.string().nullable(),
|
769
|
+
status: yup__namespace.string()
|
770
|
+
}).required();
|
771
|
+
const validatePreviewUrl = async (strapi2, uid2, params) => {
|
772
|
+
await strapiUtils.validateYupSchema(getPreviewUrlSchema)(params);
|
773
|
+
const newParams = fp.pick(["documentId", "locale", "status"], params);
|
774
|
+
const model = strapi2.getModel(uid2);
|
775
|
+
if (!model || model.modelType !== "contentType") {
|
776
|
+
throw new strapiUtils.errors.ValidationError("Invalid content type");
|
777
|
+
}
|
778
|
+
const isSingleType = model?.kind === "singleType";
|
779
|
+
if (!isSingleType && !params.documentId) {
|
780
|
+
throw new strapiUtils.errors.ValidationError("documentId is required for Collection Types");
|
781
|
+
}
|
782
|
+
if (isSingleType) {
|
783
|
+
const doc = await strapi2.documents(uid2).findFirst();
|
784
|
+
if (!doc) {
|
785
|
+
throw new strapiUtils.errors.NotFoundError("Document not found");
|
786
|
+
}
|
787
|
+
newParams.documentId = doc?.documentId;
|
788
|
+
}
|
789
|
+
if (!newParams.status) {
|
790
|
+
const isDPEnabled = model?.options?.draftAndPublish;
|
791
|
+
newParams.status = isDPEnabled ? "draft" : "published";
|
792
|
+
}
|
793
|
+
return newParams;
|
794
|
+
};
|
795
|
+
const createPreviewController = () => {
|
796
|
+
return {
|
797
|
+
/**
|
798
|
+
* Transforms an entry into a preview URL, so that it can be previewed
|
799
|
+
* in the Content Manager.
|
800
|
+
*/
|
801
|
+
async getPreviewUrl(ctx) {
|
802
|
+
const uid2 = ctx.params.contentType;
|
803
|
+
const query = ctx.request.query;
|
804
|
+
const params = await validatePreviewUrl(strapi, uid2, query);
|
805
|
+
const previewService = getService(strapi, "preview");
|
806
|
+
const url = await previewService.getPreviewUrl(uid2, params);
|
807
|
+
if (!url) {
|
808
|
+
ctx.status = 204;
|
809
|
+
}
|
810
|
+
return {
|
811
|
+
data: { url }
|
812
|
+
};
|
813
|
+
}
|
814
|
+
};
|
815
|
+
};
|
816
|
+
const controllers$1 = {
|
817
|
+
preview: createPreviewController
|
818
|
+
/**
|
819
|
+
* Casting is needed because the types aren't aware that Strapi supports
|
820
|
+
* passing a controller factory as the value, instead of a controller object directly
|
821
|
+
*/
|
822
|
+
};
|
823
|
+
const createPreviewService = ({ strapi: strapi2 }) => {
|
824
|
+
const config = getService(strapi2, "preview-config");
|
825
|
+
return {
|
826
|
+
async getPreviewUrl(uid2, params) {
|
827
|
+
const handler = config.getPreviewHandler();
|
828
|
+
try {
|
829
|
+
return handler(uid2, params);
|
830
|
+
} catch (error) {
|
831
|
+
strapi2.log.error(`Failed to get preview URL: ${error}`);
|
832
|
+
throw new strapiUtils.errors.ApplicationError("Failed to get preview URL");
|
833
|
+
}
|
834
|
+
return;
|
835
|
+
}
|
836
|
+
};
|
837
|
+
};
|
838
|
+
const extendMiddlewareConfiguration = (middleware = { name: "", config: {} }) => {
|
839
|
+
const middlewares = strapi.config.get("middlewares");
|
840
|
+
const configuredMiddlewares = middlewares.map((currentMiddleware) => {
|
841
|
+
if (currentMiddleware === middleware.name) {
|
842
|
+
return middleware;
|
843
|
+
}
|
844
|
+
if (currentMiddleware.name === middleware.name) {
|
845
|
+
return fp.mergeWith(
|
846
|
+
(objValue, srcValue) => {
|
847
|
+
if (Array.isArray(objValue)) {
|
848
|
+
return objValue.concat(srcValue);
|
849
|
+
}
|
850
|
+
return void 0;
|
851
|
+
},
|
852
|
+
currentMiddleware,
|
853
|
+
middleware
|
854
|
+
);
|
855
|
+
}
|
856
|
+
return currentMiddleware;
|
857
|
+
});
|
858
|
+
strapi.config.set("middlewares", configuredMiddlewares);
|
859
|
+
};
|
860
|
+
const createPreviewConfigService = ({ strapi: strapi2 }) => {
|
861
|
+
return {
|
862
|
+
register() {
|
863
|
+
if (!this.isEnabled()) {
|
864
|
+
return;
|
865
|
+
}
|
866
|
+
const config = strapi2.config.get("admin.preview");
|
867
|
+
if (config.config?.allowedOrigins) {
|
868
|
+
extendMiddlewareConfiguration({
|
869
|
+
name: "strapi::security",
|
870
|
+
config: {
|
871
|
+
contentSecurityPolicy: {
|
872
|
+
directives: {
|
873
|
+
"frame-src": config.config.allowedOrigins
|
874
|
+
}
|
875
|
+
}
|
876
|
+
}
|
877
|
+
});
|
878
|
+
}
|
879
|
+
},
|
880
|
+
isEnabled() {
|
881
|
+
const config = strapi2.config.get("admin.preview");
|
882
|
+
if (!config) {
|
883
|
+
return false;
|
884
|
+
}
|
885
|
+
return config?.enabled ?? true;
|
886
|
+
},
|
887
|
+
/**
|
888
|
+
* Validate if the configuration is valid
|
889
|
+
*/
|
890
|
+
validate() {
|
891
|
+
if (!this.isEnabled()) {
|
892
|
+
return;
|
893
|
+
}
|
894
|
+
const handler = this.getPreviewHandler();
|
895
|
+
if (typeof handler !== "function") {
|
896
|
+
throw new strapiUtils.errors.ValidationError(
|
897
|
+
"Preview configuration is invalid. Handler must be a function"
|
898
|
+
);
|
899
|
+
}
|
900
|
+
},
|
901
|
+
/**
|
902
|
+
* Utility to get the preview handler from the configuration
|
903
|
+
*/
|
904
|
+
getPreviewHandler() {
|
905
|
+
const config = strapi2.config.get("admin.preview");
|
906
|
+
const emptyHandler = () => {
|
907
|
+
return void 0;
|
908
|
+
};
|
909
|
+
if (!this.isEnabled()) {
|
910
|
+
return emptyHandler;
|
911
|
+
}
|
912
|
+
return config?.config?.handler || emptyHandler;
|
913
|
+
}
|
914
|
+
};
|
915
|
+
};
|
916
|
+
const services$1 = {
|
917
|
+
preview: createPreviewService,
|
918
|
+
"preview-config": createPreviewConfigService
|
919
|
+
};
|
920
|
+
const getFeature = () => {
|
921
|
+
if (!strapi.features.future.isEnabled(FEATURE_ID)) {
|
922
|
+
return {};
|
923
|
+
}
|
924
|
+
return {
|
925
|
+
register() {
|
926
|
+
const config = getService(strapi, "preview-config");
|
927
|
+
config.validate();
|
928
|
+
config.register();
|
929
|
+
},
|
930
|
+
bootstrap() {
|
931
|
+
},
|
932
|
+
routes: routes$1,
|
933
|
+
controllers: controllers$1,
|
934
|
+
services: services$1
|
935
|
+
};
|
936
|
+
};
|
937
|
+
const preview = getFeature();
|
722
938
|
const register = async ({ strapi: strapi2 }) => {
|
723
939
|
await history.register?.({ strapi: strapi2 });
|
940
|
+
await preview.register?.({ strapi: strapi2 });
|
724
941
|
};
|
725
942
|
const ALLOWED_WEBHOOK_EVENTS = {
|
726
943
|
ENTRY_PUBLISH: "entry.publish",
|
@@ -730,11 +947,12 @@ const bootstrap = async () => {
|
|
730
947
|
Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {
|
731
948
|
strapi.get("webhookStore").addAllowedEvent(key, value);
|
732
949
|
});
|
733
|
-
getService$
|
734
|
-
await getService$
|
735
|
-
await getService$
|
736
|
-
await getService$
|
950
|
+
getService$2("field-sizes").setCustomFieldInputSizes();
|
951
|
+
await getService$2("components").syncConfigurations();
|
952
|
+
await getService$2("content-types").syncConfigurations();
|
953
|
+
await getService$2("permission").registerPermissions();
|
737
954
|
await history.bootstrap?.({ strapi });
|
955
|
+
await preview.bootstrap?.({ strapi });
|
738
956
|
};
|
739
957
|
const destroy = async ({ strapi: strapi2 }) => {
|
740
958
|
await history.destroy?.({ strapi: strapi2 });
|
@@ -1224,7 +1442,8 @@ const admin = {
|
|
1224
1442
|
};
|
1225
1443
|
const routes = {
|
1226
1444
|
admin,
|
1227
|
-
...history.routes ? history.routes : {}
|
1445
|
+
...history.routes ? history.routes : {},
|
1446
|
+
...preview.routes ? preview.routes : {}
|
1228
1447
|
};
|
1229
1448
|
const hasPermissionsSchema = strapiUtils.yup.object({
|
1230
1449
|
actions: strapiUtils.yup.array().of(strapiUtils.yup.string()),
|
@@ -1481,7 +1700,7 @@ const createMetadasSchema = (schema) => {
|
|
1481
1700
|
if (!value) {
|
1482
1701
|
return strapiUtils.yup.string();
|
1483
1702
|
}
|
1484
|
-
const targetSchema = getService$
|
1703
|
+
const targetSchema = getService$2("content-types").findContentType(
|
1485
1704
|
schema.attributes[key].targetModel
|
1486
1705
|
);
|
1487
1706
|
if (!targetSchema) {
|
@@ -1650,7 +1869,7 @@ const getDocumentLocaleAndStatus = async (request, model, opts = { allowMultiple
|
|
1650
1869
|
}
|
1651
1870
|
};
|
1652
1871
|
const formatDocumentWithMetadata = async (permissionChecker2, uid2, document, opts = {}) => {
|
1653
|
-
const documentMetadata2 = getService$
|
1872
|
+
const documentMetadata2 = getService$2("document-metadata");
|
1654
1873
|
const serviceOutput = await documentMetadata2.formatDocumentWithMetadata(uid2, document, opts);
|
1655
1874
|
let {
|
1656
1875
|
meta: { availableLocales, availableStatus }
|
@@ -1676,8 +1895,8 @@ const createDocument = async (ctx, opts) => {
|
|
1676
1895
|
const { userAbility, user } = ctx.state;
|
1677
1896
|
const { model } = ctx.params;
|
1678
1897
|
const { body } = ctx.request;
|
1679
|
-
const documentManager2 = getService$
|
1680
|
-
const permissionChecker2 = getService$
|
1898
|
+
const documentManager2 = getService$2("document-manager");
|
1899
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1681
1900
|
if (permissionChecker2.cannot.create()) {
|
1682
1901
|
throw new strapiUtils.errors.ForbiddenError();
|
1683
1902
|
}
|
@@ -1697,13 +1916,13 @@ const updateDocument = async (ctx, opts) => {
|
|
1697
1916
|
const { userAbility, user } = ctx.state;
|
1698
1917
|
const { id, model } = ctx.params;
|
1699
1918
|
const { body } = ctx.request;
|
1700
|
-
const documentManager2 = getService$
|
1701
|
-
const permissionChecker2 = getService$
|
1919
|
+
const documentManager2 = getService$2("document-manager");
|
1920
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1702
1921
|
if (permissionChecker2.cannot.update()) {
|
1703
1922
|
throw new strapiUtils.errors.ForbiddenError();
|
1704
1923
|
}
|
1705
1924
|
const permissionQuery = await permissionChecker2.sanitizedQuery.update(ctx.query);
|
1706
|
-
const populate = await getService$
|
1925
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1707
1926
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1708
1927
|
const [documentVersion, documentExists] = await Promise.all([
|
1709
1928
|
documentManager2.findOne(id, model, { populate, locale, status: "draft" }),
|
@@ -1734,14 +1953,14 @@ const collectionTypes = {
|
|
1734
1953
|
const { userAbility } = ctx.state;
|
1735
1954
|
const { model } = ctx.params;
|
1736
1955
|
const { query } = ctx.request;
|
1737
|
-
const documentMetadata2 = getService$
|
1738
|
-
const documentManager2 = getService$
|
1739
|
-
const permissionChecker2 = getService$
|
1956
|
+
const documentMetadata2 = getService$2("document-metadata");
|
1957
|
+
const documentManager2 = getService$2("document-manager");
|
1958
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1740
1959
|
if (permissionChecker2.cannot.read()) {
|
1741
1960
|
return ctx.forbidden();
|
1742
1961
|
}
|
1743
1962
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(query);
|
1744
|
-
const populate = await getService$
|
1963
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(1).countRelations({ toOne: false, toMany: true }).build();
|
1745
1964
|
const { locale, status } = await getDocumentLocaleAndStatus(query, model);
|
1746
1965
|
const { results: documents, pagination } = await documentManager2.findPage(
|
1747
1966
|
{ ...permissionQuery, populate, locale, status },
|
@@ -1770,13 +1989,13 @@ const collectionTypes = {
|
|
1770
1989
|
async findOne(ctx) {
|
1771
1990
|
const { userAbility } = ctx.state;
|
1772
1991
|
const { model, id } = ctx.params;
|
1773
|
-
const documentManager2 = getService$
|
1774
|
-
const permissionChecker2 = getService$
|
1992
|
+
const documentManager2 = getService$2("document-manager");
|
1993
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1775
1994
|
if (permissionChecker2.cannot.read()) {
|
1776
1995
|
return ctx.forbidden();
|
1777
1996
|
}
|
1778
1997
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
1779
|
-
const populate = await getService$
|
1998
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1780
1999
|
const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);
|
1781
2000
|
const version = await documentManager2.findOne(id, model, {
|
1782
2001
|
populate,
|
@@ -1807,7 +2026,7 @@ const collectionTypes = {
|
|
1807
2026
|
async create(ctx) {
|
1808
2027
|
const { userAbility } = ctx.state;
|
1809
2028
|
const { model } = ctx.params;
|
1810
|
-
const permissionChecker2 = getService$
|
2029
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1811
2030
|
const [totalEntries, document] = await Promise.all([
|
1812
2031
|
strapi.db.query(model).count(),
|
1813
2032
|
createDocument(ctx)
|
@@ -1828,7 +2047,7 @@ const collectionTypes = {
|
|
1828
2047
|
async update(ctx) {
|
1829
2048
|
const { userAbility } = ctx.state;
|
1830
2049
|
const { model } = ctx.params;
|
1831
|
-
const permissionChecker2 = getService$
|
2050
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1832
2051
|
const updatedVersion = await updateDocument(ctx);
|
1833
2052
|
const sanitizedVersion = await permissionChecker2.sanitizeOutput(updatedVersion);
|
1834
2053
|
ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedVersion);
|
@@ -1837,13 +2056,13 @@ const collectionTypes = {
|
|
1837
2056
|
const { userAbility, user } = ctx.state;
|
1838
2057
|
const { model, sourceId: id } = ctx.params;
|
1839
2058
|
const { body } = ctx.request;
|
1840
|
-
const documentManager2 = getService$
|
1841
|
-
const permissionChecker2 = getService$
|
2059
|
+
const documentManager2 = getService$2("document-manager");
|
2060
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1842
2061
|
if (permissionChecker2.cannot.create()) {
|
1843
2062
|
return ctx.forbidden();
|
1844
2063
|
}
|
1845
2064
|
const permissionQuery = await permissionChecker2.sanitizedQuery.create(ctx.query);
|
1846
|
-
const populate = await getService$
|
2065
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1847
2066
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1848
2067
|
const document = await documentManager2.findOne(id, model, {
|
1849
2068
|
populate,
|
@@ -1882,13 +2101,13 @@ const collectionTypes = {
|
|
1882
2101
|
async delete(ctx) {
|
1883
2102
|
const { userAbility } = ctx.state;
|
1884
2103
|
const { id, model } = ctx.params;
|
1885
|
-
const documentManager2 = getService$
|
1886
|
-
const permissionChecker2 = getService$
|
2104
|
+
const documentManager2 = getService$2("document-manager");
|
2105
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1887
2106
|
if (permissionChecker2.cannot.delete()) {
|
1888
2107
|
return ctx.forbidden();
|
1889
2108
|
}
|
1890
2109
|
const permissionQuery = await permissionChecker2.sanitizedQuery.delete(ctx.query);
|
1891
|
-
const populate = await getService$
|
2110
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1892
2111
|
const { locale } = await getDocumentLocaleAndStatus(ctx.query, model);
|
1893
2112
|
const documentLocales = await documentManager2.findLocales(id, model, { populate, locale });
|
1894
2113
|
if (documentLocales.length === 0) {
|
@@ -1910,14 +2129,14 @@ const collectionTypes = {
|
|
1910
2129
|
const { userAbility } = ctx.state;
|
1911
2130
|
const { id, model } = ctx.params;
|
1912
2131
|
const { body } = ctx.request;
|
1913
|
-
const documentManager2 = getService$
|
1914
|
-
const permissionChecker2 = getService$
|
2132
|
+
const documentManager2 = getService$2("document-manager");
|
2133
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1915
2134
|
if (permissionChecker2.cannot.publish()) {
|
1916
2135
|
return ctx.forbidden();
|
1917
2136
|
}
|
1918
2137
|
const publishedDocument = await strapi.db.transaction(async () => {
|
1919
2138
|
const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
|
1920
|
-
const populate = await getService$
|
2139
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1921
2140
|
let document;
|
1922
2141
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1923
2142
|
const isCreate = fp.isNil(id);
|
@@ -1965,13 +2184,13 @@ const collectionTypes = {
|
|
1965
2184
|
const { body } = ctx.request;
|
1966
2185
|
const { documentIds } = body;
|
1967
2186
|
await validateBulkActionInput(body);
|
1968
|
-
const documentManager2 = getService$
|
1969
|
-
const permissionChecker2 = getService$
|
2187
|
+
const documentManager2 = getService$2("document-manager");
|
2188
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1970
2189
|
if (permissionChecker2.cannot.publish()) {
|
1971
2190
|
return ctx.forbidden();
|
1972
2191
|
}
|
1973
2192
|
const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
|
1974
|
-
const populate = await getService$
|
2193
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1975
2194
|
const { locale } = await getDocumentLocaleAndStatus(body, model, {
|
1976
2195
|
allowMultipleLocales: true
|
1977
2196
|
});
|
@@ -1996,8 +2215,8 @@ const collectionTypes = {
|
|
1996
2215
|
const { body } = ctx.request;
|
1997
2216
|
const { documentIds } = body;
|
1998
2217
|
await validateBulkActionInput(body);
|
1999
|
-
const documentManager2 = getService$
|
2000
|
-
const permissionChecker2 = getService$
|
2218
|
+
const documentManager2 = getService$2("document-manager");
|
2219
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2001
2220
|
if (permissionChecker2.cannot.unpublish()) {
|
2002
2221
|
return ctx.forbidden();
|
2003
2222
|
}
|
@@ -2026,8 +2245,8 @@ const collectionTypes = {
|
|
2026
2245
|
const {
|
2027
2246
|
body: { discardDraft, ...body }
|
2028
2247
|
} = ctx.request;
|
2029
|
-
const documentManager2 = getService$
|
2030
|
-
const permissionChecker2 = getService$
|
2248
|
+
const documentManager2 = getService$2("document-manager");
|
2249
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2031
2250
|
if (permissionChecker2.cannot.unpublish()) {
|
2032
2251
|
return ctx.forbidden();
|
2033
2252
|
}
|
@@ -2035,7 +2254,7 @@ const collectionTypes = {
|
|
2035
2254
|
return ctx.forbidden();
|
2036
2255
|
}
|
2037
2256
|
const permissionQuery = await permissionChecker2.sanitizedQuery.unpublish(ctx.query);
|
2038
|
-
const populate = await getService$
|
2257
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2039
2258
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2040
2259
|
const document = await documentManager2.findOne(id, model, {
|
2041
2260
|
populate,
|
@@ -2066,13 +2285,13 @@ const collectionTypes = {
|
|
2066
2285
|
const { userAbility } = ctx.state;
|
2067
2286
|
const { id, model } = ctx.params;
|
2068
2287
|
const { body } = ctx.request;
|
2069
|
-
const documentManager2 = getService$
|
2070
|
-
const permissionChecker2 = getService$
|
2288
|
+
const documentManager2 = getService$2("document-manager");
|
2289
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2071
2290
|
if (permissionChecker2.cannot.discard()) {
|
2072
2291
|
return ctx.forbidden();
|
2073
2292
|
}
|
2074
2293
|
const permissionQuery = await permissionChecker2.sanitizedQuery.discard(ctx.query);
|
2075
|
-
const populate = await getService$
|
2294
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2076
2295
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2077
2296
|
const document = await documentManager2.findOne(id, model, {
|
2078
2297
|
populate,
|
@@ -2097,13 +2316,13 @@ const collectionTypes = {
|
|
2097
2316
|
const { query, body } = ctx.request;
|
2098
2317
|
const { documentIds } = body;
|
2099
2318
|
await validateBulkActionInput(body);
|
2100
|
-
const documentManager2 = getService$
|
2101
|
-
const permissionChecker2 = getService$
|
2319
|
+
const documentManager2 = getService$2("document-manager");
|
2320
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2102
2321
|
if (permissionChecker2.cannot.delete()) {
|
2103
2322
|
return ctx.forbidden();
|
2104
2323
|
}
|
2105
2324
|
const permissionQuery = await permissionChecker2.sanitizedQuery.delete(query);
|
2106
|
-
const populate = await getService$
|
2325
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2107
2326
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2108
2327
|
const documentLocales = await documentManager2.findLocales(documentIds, model, {
|
2109
2328
|
populate,
|
@@ -2124,13 +2343,13 @@ const collectionTypes = {
|
|
2124
2343
|
async countDraftRelations(ctx) {
|
2125
2344
|
const { userAbility } = ctx.state;
|
2126
2345
|
const { model, id } = ctx.params;
|
2127
|
-
const documentManager2 = getService$
|
2128
|
-
const permissionChecker2 = getService$
|
2346
|
+
const documentManager2 = getService$2("document-manager");
|
2347
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2129
2348
|
if (permissionChecker2.cannot.read()) {
|
2130
2349
|
return ctx.forbidden();
|
2131
2350
|
}
|
2132
2351
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
2133
|
-
const populate = await getService$
|
2352
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2134
2353
|
const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);
|
2135
2354
|
const entity = await documentManager2.findOne(id, model, { populate, locale, status });
|
2136
2355
|
if (!entity) {
|
@@ -2149,8 +2368,8 @@ const collectionTypes = {
|
|
2149
2368
|
const ids = ctx.request.query.documentIds;
|
2150
2369
|
const locale = ctx.request.query.locale;
|
2151
2370
|
const { model } = ctx.params;
|
2152
|
-
const documentManager2 = getService$
|
2153
|
-
const permissionChecker2 = getService$
|
2371
|
+
const documentManager2 = getService$2("document-manager");
|
2372
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2154
2373
|
if (permissionChecker2.cannot.read()) {
|
2155
2374
|
return ctx.forbidden();
|
2156
2375
|
}
|
@@ -2174,13 +2393,13 @@ const collectionTypes = {
|
|
2174
2393
|
};
|
2175
2394
|
const components$1 = {
|
2176
2395
|
findComponents(ctx) {
|
2177
|
-
const components2 = getService$
|
2178
|
-
const { toDto } = getService$
|
2396
|
+
const components2 = getService$2("components").findAllComponents();
|
2397
|
+
const { toDto } = getService$2("data-mapper");
|
2179
2398
|
ctx.body = { data: components2.map(toDto) };
|
2180
2399
|
},
|
2181
2400
|
async findComponentConfiguration(ctx) {
|
2182
2401
|
const { uid: uid2 } = ctx.params;
|
2183
|
-
const componentService = getService$
|
2402
|
+
const componentService = getService$2("components");
|
2184
2403
|
const component = componentService.findComponent(uid2);
|
2185
2404
|
if (!component) {
|
2186
2405
|
return ctx.notFound("component.notFound");
|
@@ -2197,7 +2416,7 @@ const components$1 = {
|
|
2197
2416
|
async updateComponentConfiguration(ctx) {
|
2198
2417
|
const { uid: uid2 } = ctx.params;
|
2199
2418
|
const { body } = ctx.request;
|
2200
|
-
const componentService = getService$
|
2419
|
+
const componentService = getService$2("components");
|
2201
2420
|
const component = componentService.findComponent(uid2);
|
2202
2421
|
if (!component) {
|
2203
2422
|
return ctx.notFound("component.notFound");
|
@@ -2231,12 +2450,12 @@ const contentTypes = {
|
|
2231
2450
|
} catch (error) {
|
2232
2451
|
return ctx.send({ error }, 400);
|
2233
2452
|
}
|
2234
|
-
const contentTypes2 = getService$
|
2235
|
-
const { toDto } = getService$
|
2453
|
+
const contentTypes2 = getService$2("content-types").findContentTypesByKind(kind);
|
2454
|
+
const { toDto } = getService$2("data-mapper");
|
2236
2455
|
ctx.body = { data: contentTypes2.map(toDto) };
|
2237
2456
|
},
|
2238
2457
|
async findContentTypesSettings(ctx) {
|
2239
|
-
const { findAllContentTypes, findConfiguration } = getService$
|
2458
|
+
const { findAllContentTypes, findConfiguration } = getService$2("content-types");
|
2240
2459
|
const contentTypes2 = await findAllContentTypes();
|
2241
2460
|
const configurations = await Promise.all(
|
2242
2461
|
contentTypes2.map(async (contentType) => {
|
@@ -2250,7 +2469,7 @@ const contentTypes = {
|
|
2250
2469
|
},
|
2251
2470
|
async findContentTypeConfiguration(ctx) {
|
2252
2471
|
const { uid: uid2 } = ctx.params;
|
2253
|
-
const contentTypeService = getService$
|
2472
|
+
const contentTypeService = getService$2("content-types");
|
2254
2473
|
const contentType = await contentTypeService.findContentType(uid2);
|
2255
2474
|
if (!contentType) {
|
2256
2475
|
return ctx.notFound("contentType.notFound");
|
@@ -2272,13 +2491,13 @@ const contentTypes = {
|
|
2272
2491
|
const { userAbility } = ctx.state;
|
2273
2492
|
const { uid: uid2 } = ctx.params;
|
2274
2493
|
const { body } = ctx.request;
|
2275
|
-
const contentTypeService = getService$
|
2276
|
-
const metricsService = getService$
|
2494
|
+
const contentTypeService = getService$2("content-types");
|
2495
|
+
const metricsService = getService$2("metrics");
|
2277
2496
|
const contentType = await contentTypeService.findContentType(uid2);
|
2278
2497
|
if (!contentType) {
|
2279
2498
|
return ctx.notFound("contentType.notFound");
|
2280
2499
|
}
|
2281
|
-
if (!getService$
|
2500
|
+
if (!getService$2("permission").canConfigureContentType({ userAbility, contentType })) {
|
2282
2501
|
return ctx.forbidden();
|
2283
2502
|
}
|
2284
2503
|
let input;
|
@@ -2311,10 +2530,10 @@ const contentTypes = {
|
|
2311
2530
|
};
|
2312
2531
|
const init = {
|
2313
2532
|
getInitData(ctx) {
|
2314
|
-
const { toDto } = getService$
|
2315
|
-
const { findAllComponents } = getService$
|
2316
|
-
const { getAllFieldSizes } = getService$
|
2317
|
-
const { findAllContentTypes } = getService$
|
2533
|
+
const { toDto } = getService$2("data-mapper");
|
2534
|
+
const { findAllComponents } = getService$2("components");
|
2535
|
+
const { getAllFieldSizes } = getService$2("field-sizes");
|
2536
|
+
const { findAllContentTypes } = getService$2("content-types");
|
2318
2537
|
ctx.body = {
|
2319
2538
|
data: {
|
2320
2539
|
fieldSizes: getAllFieldSizes(),
|
@@ -2350,7 +2569,7 @@ const addFiltersClause = (params, filtersClause) => {
|
|
2350
2569
|
params.filters.$and.push(filtersClause);
|
2351
2570
|
};
|
2352
2571
|
const sanitizeMainField = (model, mainField, userAbility) => {
|
2353
|
-
const permissionChecker2 = getService$
|
2572
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2354
2573
|
userAbility,
|
2355
2574
|
model: model.uid
|
2356
2575
|
});
|
@@ -2364,15 +2583,27 @@ const sanitizeMainField = (model, mainField, userAbility) => {
|
|
2364
2583
|
}
|
2365
2584
|
return mainField;
|
2366
2585
|
};
|
2367
|
-
const addStatusToRelations = async (
|
2368
|
-
if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.
|
2586
|
+
const addStatusToRelations = async (targetUid, relations2) => {
|
2587
|
+
if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.getModel(targetUid))) {
|
2369
2588
|
return relations2;
|
2370
2589
|
}
|
2371
|
-
const documentMetadata2 = getService$
|
2372
|
-
|
2590
|
+
const documentMetadata2 = getService$2("document-metadata");
|
2591
|
+
if (!relations2.length) {
|
2592
|
+
return relations2;
|
2593
|
+
}
|
2594
|
+
const firstRelation = relations2[0];
|
2595
|
+
const filters = {
|
2596
|
+
documentId: { $in: relations2.map((r) => r.documentId) },
|
2597
|
+
// NOTE: find the "opposite" status
|
2598
|
+
publishedAt: firstRelation.publishedAt !== null ? { $null: true } : { $notNull: true }
|
2599
|
+
};
|
2600
|
+
const availableStatus = await strapi.query(targetUid).findMany({
|
2601
|
+
select: ["id", "documentId", "locale", "updatedAt", "createdAt", "publishedAt"],
|
2602
|
+
filters
|
2603
|
+
});
|
2373
2604
|
return relations2.map((relation) => {
|
2374
|
-
const availableStatuses =
|
2375
|
-
(availableDocument) => availableDocument.documentId === relation.documentId
|
2605
|
+
const availableStatuses = availableStatus.filter(
|
2606
|
+
(availableDocument) => availableDocument.documentId === relation.documentId && (relation.locale ? availableDocument.locale === relation.locale : true)
|
2376
2607
|
);
|
2377
2608
|
return {
|
2378
2609
|
...relation,
|
@@ -2434,7 +2665,7 @@ const relations = {
|
|
2434
2665
|
ctx.request?.query?.locale
|
2435
2666
|
);
|
2436
2667
|
const { status } = validateStatus(sourceUid, ctx.request?.query?.status);
|
2437
|
-
const permissionChecker2 = getService$
|
2668
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2438
2669
|
userAbility,
|
2439
2670
|
model
|
2440
2671
|
});
|
@@ -2459,7 +2690,7 @@ const relations = {
|
|
2459
2690
|
where.id = id;
|
2460
2691
|
}
|
2461
2692
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
2462
|
-
const populate = await getService$
|
2693
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2463
2694
|
const currentEntity = await strapi.db.query(model).findOne({
|
2464
2695
|
where,
|
2465
2696
|
populate
|
@@ -2474,7 +2705,7 @@ const relations = {
|
|
2474
2705
|
}
|
2475
2706
|
entryId = currentEntity.id;
|
2476
2707
|
}
|
2477
|
-
const modelConfig = isComponent2 ? await getService$
|
2708
|
+
const modelConfig = isComponent2 ? await getService$2("components").findConfiguration(sourceSchema) : await getService$2("content-types").findConfiguration(sourceSchema);
|
2478
2709
|
const targetSchema = strapi.getModel(targetUid);
|
2479
2710
|
const mainField = fp.flow(
|
2480
2711
|
fp.prop(`metadatas.${targetField}.edit.mainField`),
|
@@ -2528,7 +2759,7 @@ const relations = {
|
|
2528
2759
|
}
|
2529
2760
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2530
2761
|
const { idsToOmit, idsToInclude, _q, ...query } = ctx.request.query;
|
2531
|
-
const permissionChecker2 = getService$
|
2762
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2532
2763
|
userAbility: ctx.state.userAbility,
|
2533
2764
|
model: targetUid
|
2534
2765
|
});
|
@@ -2601,21 +2832,33 @@ const relations = {
|
|
2601
2832
|
attribute,
|
2602
2833
|
targetField,
|
2603
2834
|
fieldsToSelect,
|
2604
|
-
|
2605
|
-
|
2606
|
-
}
|
2607
|
-
target: {
|
2608
|
-
schema: { uid: targetUid }
|
2609
|
-
}
|
2835
|
+
status,
|
2836
|
+
source: { schema: sourceSchema },
|
2837
|
+
target: { schema: targetSchema }
|
2610
2838
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2611
|
-
const
|
2839
|
+
const { uid: sourceUid } = sourceSchema;
|
2840
|
+
const { uid: targetUid } = targetSchema;
|
2841
|
+
const permissionQuery = await getService$2("permission-checker").create({ userAbility, model: targetUid }).sanitizedQuery.read({ fields: fieldsToSelect });
|
2612
2842
|
const dbQuery = strapi.db.query(sourceUid);
|
2613
2843
|
const loadRelations = strapiUtils.relations.isAnyToMany(attribute) ? (...args) => dbQuery.loadPages(...args) : (...args) => dbQuery.load(...args).then((res2) => ({ results: res2 ? [res2] : [] }));
|
2844
|
+
const filters = {};
|
2845
|
+
if (sourceSchema?.options?.draftAndPublish) {
|
2846
|
+
if (targetSchema?.options?.draftAndPublish) {
|
2847
|
+
if (status === "published") {
|
2848
|
+
filters.publishedAt = { $notNull: true };
|
2849
|
+
} else {
|
2850
|
+
filters.publishedAt = { $null: true };
|
2851
|
+
}
|
2852
|
+
}
|
2853
|
+
} else if (targetSchema?.options?.draftAndPublish) {
|
2854
|
+
filters.publishedAt = { $null: true };
|
2855
|
+
}
|
2614
2856
|
const res = await loadRelations({ id: entryId }, targetField, {
|
2615
|
-
select: ["id", "documentId", "locale", "publishedAt"],
|
2857
|
+
select: ["id", "documentId", "locale", "publishedAt", "updatedAt"],
|
2616
2858
|
ordering: "desc",
|
2617
2859
|
page: ctx.request.query.page,
|
2618
|
-
pageSize: ctx.request.query.pageSize
|
2860
|
+
pageSize: ctx.request.query.pageSize,
|
2861
|
+
filters
|
2619
2862
|
});
|
2620
2863
|
const loadedIds = res.results.map((item) => item.id);
|
2621
2864
|
addFiltersClause(permissionQuery, { id: { $in: loadedIds } });
|
@@ -2623,10 +2866,7 @@ const relations = {
|
|
2623
2866
|
...strapi.get("query-params").transform(targetUid, permissionQuery),
|
2624
2867
|
ordering: "desc"
|
2625
2868
|
});
|
2626
|
-
const relationsUnion = fp.uniqBy(
|
2627
|
-
(res2) => `${res2.documentId}-${res2.locale}`,
|
2628
|
-
fp.concat(sanitizedRes.results, res.results)
|
2629
|
-
);
|
2869
|
+
const relationsUnion = fp.uniqBy("id", fp.concat(sanitizedRes.results, res.results));
|
2630
2870
|
ctx.body = {
|
2631
2871
|
pagination: res.pagination || {
|
2632
2872
|
page: 1,
|
@@ -2639,10 +2879,10 @@ const relations = {
|
|
2639
2879
|
}
|
2640
2880
|
};
|
2641
2881
|
const buildPopulateFromQuery = async (query, model) => {
|
2642
|
-
return getService$
|
2882
|
+
return getService$2("populate-builder")(model).populateFromQuery(query).populateDeep(Infinity).countRelations().build();
|
2643
2883
|
};
|
2644
2884
|
const findDocument = async (query, uid2, opts = {}) => {
|
2645
|
-
const documentManager2 = getService$
|
2885
|
+
const documentManager2 = getService$2("document-manager");
|
2646
2886
|
const populate = await buildPopulateFromQuery(query, uid2);
|
2647
2887
|
return documentManager2.findMany({ ...opts, populate }, uid2).then((documents) => documents[0]);
|
2648
2888
|
};
|
@@ -2650,8 +2890,8 @@ const createOrUpdateDocument = async (ctx, opts) => {
|
|
2650
2890
|
const { user, userAbility } = ctx.state;
|
2651
2891
|
const { model } = ctx.params;
|
2652
2892
|
const { body, query } = ctx.request;
|
2653
|
-
const documentManager2 = getService$
|
2654
|
-
const permissionChecker2 = getService$
|
2893
|
+
const documentManager2 = getService$2("document-manager");
|
2894
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2655
2895
|
if (permissionChecker2.cannot.create() && permissionChecker2.cannot.update()) {
|
2656
2896
|
throw new strapiUtils.errors.ForbiddenError();
|
2657
2897
|
}
|
@@ -2692,7 +2932,7 @@ const singleTypes = {
|
|
2692
2932
|
const { userAbility } = ctx.state;
|
2693
2933
|
const { model } = ctx.params;
|
2694
2934
|
const { query = {} } = ctx.request;
|
2695
|
-
const permissionChecker2 = getService$
|
2935
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2696
2936
|
if (permissionChecker2.cannot.read()) {
|
2697
2937
|
return ctx.forbidden();
|
2698
2938
|
}
|
@@ -2726,7 +2966,7 @@ const singleTypes = {
|
|
2726
2966
|
async createOrUpdate(ctx) {
|
2727
2967
|
const { userAbility } = ctx.state;
|
2728
2968
|
const { model } = ctx.params;
|
2729
|
-
const permissionChecker2 = getService$
|
2969
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2730
2970
|
const document = await createOrUpdateDocument(ctx);
|
2731
2971
|
const sanitizedDocument = await permissionChecker2.sanitizeOutput(document);
|
2732
2972
|
ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedDocument);
|
@@ -2735,8 +2975,8 @@ const singleTypes = {
|
|
2735
2975
|
const { userAbility } = ctx.state;
|
2736
2976
|
const { model } = ctx.params;
|
2737
2977
|
const { query = {} } = ctx.request;
|
2738
|
-
const documentManager2 = getService$
|
2739
|
-
const permissionChecker2 = getService$
|
2978
|
+
const documentManager2 = getService$2("document-manager");
|
2979
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2740
2980
|
if (permissionChecker2.cannot.delete()) {
|
2741
2981
|
return ctx.forbidden();
|
2742
2982
|
}
|
@@ -2764,8 +3004,8 @@ const singleTypes = {
|
|
2764
3004
|
const { userAbility } = ctx.state;
|
2765
3005
|
const { model } = ctx.params;
|
2766
3006
|
const { query = {} } = ctx.request;
|
2767
|
-
const documentManager2 = getService$
|
2768
|
-
const permissionChecker2 = getService$
|
3007
|
+
const documentManager2 = getService$2("document-manager");
|
3008
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2769
3009
|
if (permissionChecker2.cannot.publish()) {
|
2770
3010
|
return ctx.forbidden();
|
2771
3011
|
}
|
@@ -2793,8 +3033,8 @@ const singleTypes = {
|
|
2793
3033
|
body: { discardDraft, ...body },
|
2794
3034
|
query = {}
|
2795
3035
|
} = ctx.request;
|
2796
|
-
const documentManager2 = getService$
|
2797
|
-
const permissionChecker2 = getService$
|
3036
|
+
const documentManager2 = getService$2("document-manager");
|
3037
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2798
3038
|
if (permissionChecker2.cannot.unpublish()) {
|
2799
3039
|
return ctx.forbidden();
|
2800
3040
|
}
|
@@ -2828,8 +3068,8 @@ const singleTypes = {
|
|
2828
3068
|
const { userAbility } = ctx.state;
|
2829
3069
|
const { model } = ctx.params;
|
2830
3070
|
const { body, query = {} } = ctx.request;
|
2831
|
-
const documentManager2 = getService$
|
2832
|
-
const permissionChecker2 = getService$
|
3071
|
+
const documentManager2 = getService$2("document-manager");
|
3072
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2833
3073
|
if (permissionChecker2.cannot.discard()) {
|
2834
3074
|
return ctx.forbidden();
|
2835
3075
|
}
|
@@ -2852,8 +3092,8 @@ const singleTypes = {
|
|
2852
3092
|
const { userAbility } = ctx.state;
|
2853
3093
|
const { model } = ctx.params;
|
2854
3094
|
const { query } = ctx.request;
|
2855
|
-
const documentManager2 = getService$
|
2856
|
-
const permissionChecker2 = getService$
|
3095
|
+
const documentManager2 = getService$2("document-manager");
|
3096
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2857
3097
|
const { locale } = await getDocumentLocaleAndStatus(query, model);
|
2858
3098
|
if (permissionChecker2.cannot.read()) {
|
2859
3099
|
return ctx.forbidden();
|
@@ -2877,7 +3117,7 @@ const uid$1 = {
|
|
2877
3117
|
const { query = {} } = ctx.request;
|
2878
3118
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2879
3119
|
await validateUIDField(contentTypeUID, field);
|
2880
|
-
const uidService = getService$
|
3120
|
+
const uidService = getService$2("uid");
|
2881
3121
|
ctx.body = {
|
2882
3122
|
data: await uidService.generateUIDField({ contentTypeUID, field, data, locale })
|
2883
3123
|
};
|
@@ -2889,7 +3129,7 @@ const uid$1 = {
|
|
2889
3129
|
const { query = {} } = ctx.request;
|
2890
3130
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2891
3131
|
await validateUIDField(contentTypeUID, field);
|
2892
|
-
const uidService = getService$
|
3132
|
+
const uidService = getService$2("uid");
|
2893
3133
|
const isAvailable = await uidService.checkUIDAvailability({
|
2894
3134
|
contentTypeUID,
|
2895
3135
|
field,
|
@@ -2910,7 +3150,8 @@ const controllers = {
|
|
2910
3150
|
relations,
|
2911
3151
|
"single-types": singleTypes,
|
2912
3152
|
uid: uid$1,
|
2913
|
-
...history.controllers ? history.controllers : {}
|
3153
|
+
...history.controllers ? history.controllers : {},
|
3154
|
+
...preview.controllers ? preview.controllers : {}
|
2914
3155
|
};
|
2915
3156
|
const keys = {
|
2916
3157
|
CONFIGURATION: "configuration"
|
@@ -3061,12 +3302,12 @@ async function syncMetadatas(configuration, schema) {
|
|
3061
3302
|
return ___default.default.assign(metasWithDefaults, updatedMetas);
|
3062
3303
|
}
|
3063
3304
|
const getTargetSchema = (targetModel) => {
|
3064
|
-
return getService$
|
3305
|
+
return getService$2("content-types").findContentType(targetModel);
|
3065
3306
|
};
|
3066
3307
|
const DEFAULT_LIST_LENGTH = 4;
|
3067
3308
|
const MAX_ROW_SIZE = 12;
|
3068
3309
|
const isAllowedFieldSize = (type, size) => {
|
3069
|
-
const { getFieldSize } = getService$
|
3310
|
+
const { getFieldSize } = getService$2("field-sizes");
|
3070
3311
|
const fieldSize = getFieldSize(type);
|
3071
3312
|
if (!fieldSize.isResizable && size !== fieldSize.default) {
|
3072
3313
|
return false;
|
@@ -3074,7 +3315,7 @@ const isAllowedFieldSize = (type, size) => {
|
|
3074
3315
|
return size <= MAX_ROW_SIZE;
|
3075
3316
|
};
|
3076
3317
|
const getDefaultFieldSize = (attribute) => {
|
3077
|
-
const { hasFieldSize, getFieldSize } = getService$
|
3318
|
+
const { hasFieldSize, getFieldSize } = getService$2("field-sizes");
|
3078
3319
|
return getFieldSize(hasFieldSize(attribute.customField) ? attribute.customField : attribute.type).default;
|
3079
3320
|
};
|
3080
3321
|
async function createDefaultLayouts(schema) {
|
@@ -3109,7 +3350,7 @@ function syncLayouts(configuration, schema) {
|
|
3109
3350
|
for (const el of row) {
|
3110
3351
|
if (!hasEditableAttribute(schema, el.name))
|
3111
3352
|
continue;
|
3112
|
-
const { hasFieldSize } = getService$
|
3353
|
+
const { hasFieldSize } = getService$2("field-sizes");
|
3113
3354
|
const fieldType = hasFieldSize(schema.attributes[el.name].customField) ? schema.attributes[el.name].customField : schema.attributes[el.name].type;
|
3114
3355
|
if (!isAllowedFieldSize(fieldType, el.size)) {
|
3115
3356
|
elementsToReAppend.push(el.name);
|
@@ -3249,17 +3490,17 @@ const configurationService$1 = createConfigurationService({
|
|
3249
3490
|
isComponent: true,
|
3250
3491
|
prefix: STORE_KEY_PREFIX,
|
3251
3492
|
getModels() {
|
3252
|
-
const { toContentManagerModel } = getService$
|
3493
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3253
3494
|
return fp.mapValues(toContentManagerModel, strapi.components);
|
3254
3495
|
}
|
3255
3496
|
});
|
3256
3497
|
const components = ({ strapi: strapi2 }) => ({
|
3257
3498
|
findAllComponents() {
|
3258
|
-
const { toContentManagerModel } = getService$
|
3499
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3259
3500
|
return Object.values(strapi2.components).map(toContentManagerModel);
|
3260
3501
|
},
|
3261
3502
|
findComponent(uid2) {
|
3262
|
-
const { toContentManagerModel } = getService$
|
3503
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3263
3504
|
const component = strapi2.components[uid2];
|
3264
3505
|
return fp.isNil(component) ? component : toContentManagerModel(component);
|
3265
3506
|
},
|
@@ -3310,17 +3551,17 @@ const configurationService = createConfigurationService({
|
|
3310
3551
|
storeUtils,
|
3311
3552
|
prefix: "content_types",
|
3312
3553
|
getModels() {
|
3313
|
-
const { toContentManagerModel } = getService$
|
3554
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3314
3555
|
return fp.mapValues(toContentManagerModel, strapi.contentTypes);
|
3315
3556
|
}
|
3316
3557
|
});
|
3317
3558
|
const service = ({ strapi: strapi2 }) => ({
|
3318
3559
|
findAllContentTypes() {
|
3319
|
-
const { toContentManagerModel } = getService$
|
3560
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3320
3561
|
return Object.values(strapi2.contentTypes).map(toContentManagerModel);
|
3321
3562
|
},
|
3322
3563
|
findContentType(uid2) {
|
3323
|
-
const { toContentManagerModel } = getService$
|
3564
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3324
3565
|
const contentType = strapi2.contentTypes[uid2];
|
3325
3566
|
return fp.isNil(contentType) ? contentType : toContentManagerModel(contentType);
|
3326
3567
|
},
|
@@ -3349,7 +3590,7 @@ const service = ({ strapi: strapi2 }) => ({
|
|
3349
3590
|
return this.findConfiguration(contentType);
|
3350
3591
|
},
|
3351
3592
|
findComponentsConfigurations(contentType) {
|
3352
|
-
return getService$
|
3593
|
+
return getService$2("components").findComponentsConfigurations(contentType);
|
3353
3594
|
},
|
3354
3595
|
syncConfigurations() {
|
3355
3596
|
return configurationService.syncConfigurations();
|
@@ -3621,7 +3862,7 @@ const permission = ({ strapi: strapi2 }) => ({
|
|
3621
3862
|
return userAbility.can(action);
|
3622
3863
|
},
|
3623
3864
|
async registerPermissions() {
|
3624
|
-
const displayedContentTypes = getService$
|
3865
|
+
const displayedContentTypes = getService$2("content-types").findDisplayedContentTypes();
|
3625
3866
|
const contentTypesUids = displayedContentTypes.map(fp.prop("uid"));
|
3626
3867
|
const actions = [
|
3627
3868
|
{
|
@@ -3897,7 +4138,7 @@ const getQueryPopulate = async (uid2, query) => {
|
|
3897
4138
|
return populateQuery;
|
3898
4139
|
};
|
3899
4140
|
const buildDeepPopulate = (uid2) => {
|
3900
|
-
return getService$
|
4141
|
+
return getService$2("populate-builder")(uid2).populateDeep(Infinity).countRelations().build();
|
3901
4142
|
};
|
3902
4143
|
const populateBuilder = (uid2) => {
|
3903
4144
|
let getInitialPopulate = async () => {
|
@@ -4082,7 +4323,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4082
4323
|
*/
|
4083
4324
|
async getAvailableLocales(uid2, version, allVersions, validatableFields = []) {
|
4084
4325
|
const versionsByLocale = fp.groupBy("locale", allVersions);
|
4085
|
-
|
4326
|
+
if (version.locale) {
|
4327
|
+
delete versionsByLocale[version.locale];
|
4328
|
+
}
|
4086
4329
|
const model = strapi2.getModel(uid2);
|
4087
4330
|
const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
|
4088
4331
|
const traversalFunction = async (localeVersion) => strapiUtils.traverseEntity(
|
@@ -4438,7 +4681,8 @@ const services = {
|
|
4438
4681
|
permission,
|
4439
4682
|
"populate-builder": populateBuilder$1,
|
4440
4683
|
uid,
|
4441
|
-
...history.services ? history.services : {}
|
4684
|
+
...history.services ? history.services : {},
|
4685
|
+
...preview.services ? preview.services : {}
|
4442
4686
|
};
|
4443
4687
|
const index = () => {
|
4444
4688
|
return {
|