@strapi/content-manager 0.0.0-experimental.bb39175992a5cd205a7e3f2e13a96aa31eba2cff → 0.0.0-experimental.bf539fcb8054f8f95f3fd89fb24321df84d0a9f8
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-CQDCxI8x.js → ComponentConfigurationPage-CpJNPBgk.js} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-CQDCxI8x.js.map → ComponentConfigurationPage-CpJNPBgk.js.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-jmWwucg_.mjs → ComponentConfigurationPage-TYDPg5WG.mjs} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-jmWwucg_.mjs.map → ComponentConfigurationPage-TYDPg5WG.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-Ce4bIm4n.js → EditConfigurationPage-CFDe6SA1.js} +4 -4
- package/dist/_chunks/{EditConfigurationPage-Ce4bIm4n.js.map → EditConfigurationPage-CFDe6SA1.js.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-W07CEdm2.mjs → EditConfigurationPage-DqL8Pq5r.mjs} +4 -4
- package/dist/_chunks/{EditConfigurationPage-W07CEdm2.mjs.map → EditConfigurationPage-DqL8Pq5r.mjs.map} +1 -1
- package/dist/_chunks/{EditViewPage-al5OO1NR.mjs → EditViewPage-RXrFLav2.mjs} +3 -3
- package/dist/_chunks/EditViewPage-RXrFLav2.mjs.map +1 -0
- package/dist/_chunks/{EditViewPage-CqHMM0P0.js → EditViewPage-khfP2CR3.js} +3 -3
- package/dist/_chunks/EditViewPage-khfP2CR3.js.map +1 -0
- package/dist/_chunks/{Field-EeG6NQ7x.mjs → Field--rQeS6Zj.mjs} +5 -5
- package/dist/_chunks/Field--rQeS6Zj.mjs.map +1 -0
- package/dist/_chunks/{Field-DSOUlTCm.js → Field-C1ftmTe9.js} +5 -5
- package/dist/_chunks/Field-C1ftmTe9.js.map +1 -0
- package/dist/_chunks/{Form-BAo9ANb_.mjs → Form-COtGXyUE.mjs} +2 -2
- package/dist/_chunks/{Form-BAo9ANb_.mjs.map → Form-COtGXyUE.mjs.map} +1 -1
- package/dist/_chunks/{Form-DAEfHKzm.js → Form-CwdX5oLw.js} +2 -2
- package/dist/_chunks/{Form-DAEfHKzm.js.map → Form-CwdX5oLw.js.map} +1 -1
- package/dist/_chunks/{History-BpLIu67W.mjs → History-BevwkPO1.mjs} +18 -34
- package/dist/_chunks/History-BevwkPO1.mjs.map +1 -0
- package/dist/_chunks/{History-CTFvy6XH.js → History-DKS2aqqM.js} +18 -34
- package/dist/_chunks/History-DKS2aqqM.js.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-DOqj5f8Y.mjs → ListConfigurationPage-DNfZDtDA.mjs} +3 -3
- package/dist/_chunks/{ListConfigurationPage-DOqj5f8Y.mjs.map → ListConfigurationPage-DNfZDtDA.mjs.map} +1 -1
- package/dist/_chunks/{ListConfigurationPage-CDzlMBz_.js → ListConfigurationPage-LSYSPZHH.js} +3 -3
- package/dist/_chunks/{ListConfigurationPage-CDzlMBz_.js.map → ListConfigurationPage-LSYSPZHH.js.map} +1 -1
- package/dist/_chunks/{ListViewPage-BbXYNI0v.mjs → ListViewPage-C1PyuYRS.mjs} +15 -4
- package/dist/_chunks/{ListViewPage-BbXYNI0v.mjs.map → ListViewPage-C1PyuYRS.mjs.map} +1 -1
- package/dist/_chunks/{ListViewPage-D0fpPYKp.js → ListViewPage-DlUpqLIo.js} +15 -4
- package/dist/_chunks/ListViewPage-DlUpqLIo.js.map +1 -0
- package/dist/_chunks/{NoContentTypePage-w2Q0VVOT.mjs → NoContentTypePage-C9q744z1.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-w2Q0VVOT.mjs.map → NoContentTypePage-C9q744z1.mjs.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-DTzkSAV5.js → NoContentTypePage-m8wt3sf6.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-DTzkSAV5.js.map → NoContentTypePage-m8wt3sf6.js.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-Km0Vk5Wp.mjs → NoPermissionsPage-8BM-LWta.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-Km0Vk5Wp.mjs.map → NoPermissionsPage-8BM-LWta.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-BoI2rU68.js → NoPermissionsPage-DLfPsA0Q.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-BoI2rU68.js.map → NoPermissionsPage-DLfPsA0Q.js.map} +1 -1
- package/dist/_chunks/{Relations-C_bpmSuQ.mjs → Relations-D25xRcFy.mjs} +25 -11
- package/dist/_chunks/Relations-D25xRcFy.mjs.map +1 -0
- package/dist/_chunks/{Relations-D6Nz5ksc.js → Relations-OMriCP_L.js} +24 -10
- package/dist/_chunks/Relations-OMriCP_L.js.map +1 -0
- package/dist/_chunks/{en-Bm0D0IWz.js → en-Bdpa50w3.js} +6 -2
- package/dist/_chunks/{en-Bm0D0IWz.js.map → en-Bdpa50w3.js.map} +1 -1
- package/dist/_chunks/{en-DKV44jRb.mjs → en-CZw4xdPY.mjs} +6 -2
- package/dist/_chunks/{en-DKV44jRb.mjs.map → en-CZw4xdPY.mjs.map} +1 -1
- package/dist/_chunks/{es-EUonQTon.js → es-9K52xZIr.js} +2 -2
- package/dist/_chunks/{ja-CcFe8diO.js.map → es-9K52xZIr.js.map} +1 -1
- package/dist/_chunks/{es-CeXiYflN.mjs → es-D34tqjMw.mjs} +2 -2
- package/dist/_chunks/{es-CeXiYflN.mjs.map → es-D34tqjMw.mjs.map} +1 -1
- package/dist/_chunks/{fr-CD9VFbPM.mjs → fr--pg5jUbt.mjs} +13 -3
- package/dist/_chunks/{fr-CD9VFbPM.mjs.map → fr--pg5jUbt.mjs.map} +1 -1
- package/dist/_chunks/{fr-B7kGGg3E.js → fr-B2Kyv8Z9.js} +13 -3
- package/dist/_chunks/{fr-B7kGGg3E.js.map → fr-B2Kyv8Z9.js.map} +1 -1
- package/dist/_chunks/{index-DcQ6xogO.mjs → index-BvGihCJp.mjs} +111 -19
- package/dist/_chunks/index-BvGihCJp.mjs.map +1 -0
- package/dist/_chunks/{index-BsMu2oVP.js → index-DqZnjo8F.js} +109 -17
- package/dist/_chunks/index-DqZnjo8F.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-B4aCAdTt.js → layout-CmaemAO3.js} +3 -3
- package/dist/_chunks/{layout-B4aCAdTt.js.map → layout-CmaemAO3.js.map} +1 -1
- package/dist/_chunks/{layout-BavJ6v4B.mjs → layout-ykHSe2KQ.mjs} +3 -3
- package/dist/_chunks/{layout-BavJ6v4B.mjs.map → layout-ykHSe2KQ.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-Lrm9nz_m.js → relations-D9fKsCLY.js} +3 -7
- package/dist/_chunks/relations-D9fKsCLY.js.map +1 -0
- package/dist/_chunks/{relations-DMG453Od.mjs → relations-u-Vz51Ea.mjs} +3 -7
- package/dist/_chunks/relations-u-Vz51Ea.mjs.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -0
- package/dist/admin/src/preview/constants.d.ts +1 -0
- package/dist/admin/src/preview/index.d.ts +4 -0
- package/dist/admin/src/preview/services/preview.d.ts +3 -0
- package/dist/server/index.js +345 -150
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +345 -150
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/metadata.d.ts +15 -1
- package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
- package/dist/server/src/history/services/utils.d.ts +2 -3
- package/dist/server/src/history/services/utils.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +4 -4
- package/dist/server/src/preview/constants.d.ts +2 -0
- package/dist/server/src/preview/constants.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/index.d.ts +2 -0
- package/dist/server/src/preview/controllers/index.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/preview.d.ts +13 -0
- package/dist/server/src/preview/controllers/preview.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
- package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
- package/dist/server/src/preview/index.d.ts +4 -0
- package/dist/server/src/preview/index.d.ts.map +1 -0
- package/dist/server/src/preview/routes/index.d.ts +8 -0
- package/dist/server/src/preview/routes/index.d.ts.map +1 -0
- package/dist/server/src/preview/routes/preview.d.ts +4 -0
- package/dist/server/src/preview/routes/preview.d.ts.map +1 -0
- package/dist/server/src/preview/services/index.d.ts +15 -0
- package/dist/server/src/preview/services/index.d.ts.map +1 -0
- package/dist/server/src/preview/services/preview-config.d.ts +30 -0
- package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
- package/dist/server/src/preview/services/preview.d.ts +12 -0
- package/dist/server/src/preview/services/preview.d.ts.map +1 -0
- package/dist/server/src/preview/utils.d.ts +18 -0
- package/dist/server/src/preview/utils.d.ts.map +1 -0
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts +8 -8
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +4 -4
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
- package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/shared/contracts/index.d.ts +1 -0
- package/dist/shared/contracts/index.d.ts.map +1 -1
- package/dist/shared/contracts/preview.d.ts +27 -0
- package/dist/shared/contracts/preview.d.ts.map +1 -0
- package/dist/shared/index.js +4 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/index.mjs +4 -0
- package/dist/shared/index.mjs.map +1 -1
- package/package.json +7 -7
- package/dist/_chunks/EditViewPage-CqHMM0P0.js.map +0 -1
- package/dist/_chunks/EditViewPage-al5OO1NR.mjs.map +0 -1
- package/dist/_chunks/Field-DSOUlTCm.js.map +0 -1
- package/dist/_chunks/Field-EeG6NQ7x.mjs.map +0 -1
- package/dist/_chunks/History-BpLIu67W.mjs.map +0 -1
- package/dist/_chunks/History-CTFvy6XH.js.map +0 -1
- package/dist/_chunks/ListViewPage-D0fpPYKp.js.map +0 -1
- package/dist/_chunks/Relations-C_bpmSuQ.mjs.map +0 -1
- package/dist/_chunks/Relations-D6Nz5ksc.js.map +0 -1
- package/dist/_chunks/index-BsMu2oVP.js.map +0 -1
- package/dist/_chunks/index-DcQ6xogO.mjs.map +0 -1
- package/dist/_chunks/relations-DMG453Od.mjs.map +0 -1
- package/dist/_chunks/relations-Lrm9nz_m.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,7 +739,7 @@ const getFeature = () => {
|
|
718
739
|
}
|
719
740
|
};
|
720
741
|
};
|
721
|
-
const history = getFeature();
|
742
|
+
const history = getFeature$1();
|
722
743
|
const register = async ({ strapi: strapi2 }) => {
|
723
744
|
await history.register?.({ strapi: strapi2 });
|
724
745
|
};
|
@@ -726,15 +747,165 @@ const ALLOWED_WEBHOOK_EVENTS = {
|
|
726
747
|
ENTRY_PUBLISH: "entry.publish",
|
727
748
|
ENTRY_UNPUBLISH: "entry.unpublish"
|
728
749
|
};
|
750
|
+
const FEATURE_ID = "preview";
|
751
|
+
const info = { pluginName: "content-manager", type: "admin" };
|
752
|
+
const previewRouter = {
|
753
|
+
type: "admin",
|
754
|
+
routes: [
|
755
|
+
{
|
756
|
+
method: "GET",
|
757
|
+
info,
|
758
|
+
path: "/preview/url/:contentType",
|
759
|
+
handler: "preview.getPreviewUrl",
|
760
|
+
config: {
|
761
|
+
policies: ["admin::isAuthenticatedAdmin"]
|
762
|
+
}
|
763
|
+
}
|
764
|
+
]
|
765
|
+
};
|
766
|
+
const routes$1 = {
|
767
|
+
preview: previewRouter
|
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
|
+
};
|
798
|
+
const createPreviewController = () => {
|
799
|
+
return {
|
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
|
+
}
|
813
|
+
return {
|
814
|
+
data: { url }
|
815
|
+
};
|
816
|
+
}
|
817
|
+
};
|
818
|
+
};
|
819
|
+
const controllers$1 = {
|
820
|
+
preview: createPreviewController
|
821
|
+
/**
|
822
|
+
* Casting is needed because the types aren't aware that Strapi supports
|
823
|
+
* passing a controller factory as the value, instead of a controller object directly
|
824
|
+
*/
|
825
|
+
};
|
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
|
+
};
|
878
|
+
};
|
879
|
+
const services$1 = {
|
880
|
+
preview: createPreviewService,
|
881
|
+
"preview-config": createPreviewConfigService
|
882
|
+
};
|
883
|
+
const getFeature = () => {
|
884
|
+
if (!strapi.features.future.isEnabled(FEATURE_ID)) {
|
885
|
+
return {};
|
886
|
+
}
|
887
|
+
return {
|
888
|
+
bootstrap() {
|
889
|
+
console.log("Bootstrapping preview server");
|
890
|
+
const config = getService(strapi, "preview-config");
|
891
|
+
config.validate();
|
892
|
+
},
|
893
|
+
routes: routes$1,
|
894
|
+
controllers: controllers$1,
|
895
|
+
services: services$1
|
896
|
+
};
|
897
|
+
};
|
898
|
+
const preview = getFeature();
|
729
899
|
const bootstrap = async () => {
|
730
900
|
Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {
|
731
901
|
strapi.get("webhookStore").addAllowedEvent(key, value);
|
732
902
|
});
|
733
|
-
getService$
|
734
|
-
await getService$
|
735
|
-
await getService$
|
736
|
-
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();
|
737
907
|
await history.bootstrap?.({ strapi });
|
908
|
+
await preview.bootstrap?.({ strapi });
|
738
909
|
};
|
739
910
|
const destroy = async ({ strapi: strapi2 }) => {
|
740
911
|
await history.destroy?.({ strapi: strapi2 });
|
@@ -1224,7 +1395,8 @@ const admin = {
|
|
1224
1395
|
};
|
1225
1396
|
const routes = {
|
1226
1397
|
admin,
|
1227
|
-
...history.routes ? history.routes : {}
|
1398
|
+
...history.routes ? history.routes : {},
|
1399
|
+
...preview.routes ? preview.routes : {}
|
1228
1400
|
};
|
1229
1401
|
const hasPermissionsSchema = strapiUtils.yup.object({
|
1230
1402
|
actions: strapiUtils.yup.array().of(strapiUtils.yup.string()),
|
@@ -1481,7 +1653,7 @@ const createMetadasSchema = (schema) => {
|
|
1481
1653
|
if (!value) {
|
1482
1654
|
return strapiUtils.yup.string();
|
1483
1655
|
}
|
1484
|
-
const targetSchema = getService$
|
1656
|
+
const targetSchema = getService$2("content-types").findContentType(
|
1485
1657
|
schema.attributes[key].targetModel
|
1486
1658
|
);
|
1487
1659
|
if (!targetSchema) {
|
@@ -1650,7 +1822,7 @@ const getDocumentLocaleAndStatus = async (request, model, opts = { allowMultiple
|
|
1650
1822
|
}
|
1651
1823
|
};
|
1652
1824
|
const formatDocumentWithMetadata = async (permissionChecker2, uid2, document, opts = {}) => {
|
1653
|
-
const documentMetadata2 = getService$
|
1825
|
+
const documentMetadata2 = getService$2("document-metadata");
|
1654
1826
|
const serviceOutput = await documentMetadata2.formatDocumentWithMetadata(uid2, document, opts);
|
1655
1827
|
let {
|
1656
1828
|
meta: { availableLocales, availableStatus }
|
@@ -1676,8 +1848,8 @@ const createDocument = async (ctx, opts) => {
|
|
1676
1848
|
const { userAbility, user } = ctx.state;
|
1677
1849
|
const { model } = ctx.params;
|
1678
1850
|
const { body } = ctx.request;
|
1679
|
-
const documentManager2 = getService$
|
1680
|
-
const permissionChecker2 = getService$
|
1851
|
+
const documentManager2 = getService$2("document-manager");
|
1852
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1681
1853
|
if (permissionChecker2.cannot.create()) {
|
1682
1854
|
throw new strapiUtils.errors.ForbiddenError();
|
1683
1855
|
}
|
@@ -1697,13 +1869,13 @@ const updateDocument = async (ctx, opts) => {
|
|
1697
1869
|
const { userAbility, user } = ctx.state;
|
1698
1870
|
const { id, model } = ctx.params;
|
1699
1871
|
const { body } = ctx.request;
|
1700
|
-
const documentManager2 = getService$
|
1701
|
-
const permissionChecker2 = getService$
|
1872
|
+
const documentManager2 = getService$2("document-manager");
|
1873
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1702
1874
|
if (permissionChecker2.cannot.update()) {
|
1703
1875
|
throw new strapiUtils.errors.ForbiddenError();
|
1704
1876
|
}
|
1705
1877
|
const permissionQuery = await permissionChecker2.sanitizedQuery.update(ctx.query);
|
1706
|
-
const populate = await getService$
|
1878
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1707
1879
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1708
1880
|
const [documentVersion, documentExists] = await Promise.all([
|
1709
1881
|
documentManager2.findOne(id, model, { populate, locale, status: "draft" }),
|
@@ -1734,14 +1906,14 @@ const collectionTypes = {
|
|
1734
1906
|
const { userAbility } = ctx.state;
|
1735
1907
|
const { model } = ctx.params;
|
1736
1908
|
const { query } = ctx.request;
|
1737
|
-
const documentMetadata2 = getService$
|
1738
|
-
const documentManager2 = getService$
|
1739
|
-
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 });
|
1740
1912
|
if (permissionChecker2.cannot.read()) {
|
1741
1913
|
return ctx.forbidden();
|
1742
1914
|
}
|
1743
1915
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(query);
|
1744
|
-
const populate = await getService$
|
1916
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(1).countRelations({ toOne: false, toMany: true }).build();
|
1745
1917
|
const { locale, status } = await getDocumentLocaleAndStatus(query, model);
|
1746
1918
|
const { results: documents, pagination } = await documentManager2.findPage(
|
1747
1919
|
{ ...permissionQuery, populate, locale, status },
|
@@ -1770,13 +1942,13 @@ const collectionTypes = {
|
|
1770
1942
|
async findOne(ctx) {
|
1771
1943
|
const { userAbility } = ctx.state;
|
1772
1944
|
const { model, id } = ctx.params;
|
1773
|
-
const documentManager2 = getService$
|
1774
|
-
const permissionChecker2 = getService$
|
1945
|
+
const documentManager2 = getService$2("document-manager");
|
1946
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1775
1947
|
if (permissionChecker2.cannot.read()) {
|
1776
1948
|
return ctx.forbidden();
|
1777
1949
|
}
|
1778
1950
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
1779
|
-
const populate = await getService$
|
1951
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1780
1952
|
const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);
|
1781
1953
|
const version = await documentManager2.findOne(id, model, {
|
1782
1954
|
populate,
|
@@ -1807,7 +1979,7 @@ const collectionTypes = {
|
|
1807
1979
|
async create(ctx) {
|
1808
1980
|
const { userAbility } = ctx.state;
|
1809
1981
|
const { model } = ctx.params;
|
1810
|
-
const permissionChecker2 = getService$
|
1982
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1811
1983
|
const [totalEntries, document] = await Promise.all([
|
1812
1984
|
strapi.db.query(model).count(),
|
1813
1985
|
createDocument(ctx)
|
@@ -1828,7 +2000,7 @@ const collectionTypes = {
|
|
1828
2000
|
async update(ctx) {
|
1829
2001
|
const { userAbility } = ctx.state;
|
1830
2002
|
const { model } = ctx.params;
|
1831
|
-
const permissionChecker2 = getService$
|
2003
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1832
2004
|
const updatedVersion = await updateDocument(ctx);
|
1833
2005
|
const sanitizedVersion = await permissionChecker2.sanitizeOutput(updatedVersion);
|
1834
2006
|
ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedVersion);
|
@@ -1837,13 +2009,13 @@ const collectionTypes = {
|
|
1837
2009
|
const { userAbility, user } = ctx.state;
|
1838
2010
|
const { model, sourceId: id } = ctx.params;
|
1839
2011
|
const { body } = ctx.request;
|
1840
|
-
const documentManager2 = getService$
|
1841
|
-
const permissionChecker2 = getService$
|
2012
|
+
const documentManager2 = getService$2("document-manager");
|
2013
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1842
2014
|
if (permissionChecker2.cannot.create()) {
|
1843
2015
|
return ctx.forbidden();
|
1844
2016
|
}
|
1845
2017
|
const permissionQuery = await permissionChecker2.sanitizedQuery.create(ctx.query);
|
1846
|
-
const populate = await getService$
|
2018
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1847
2019
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1848
2020
|
const document = await documentManager2.findOne(id, model, {
|
1849
2021
|
populate,
|
@@ -1882,13 +2054,13 @@ const collectionTypes = {
|
|
1882
2054
|
async delete(ctx) {
|
1883
2055
|
const { userAbility } = ctx.state;
|
1884
2056
|
const { id, model } = ctx.params;
|
1885
|
-
const documentManager2 = getService$
|
1886
|
-
const permissionChecker2 = getService$
|
2057
|
+
const documentManager2 = getService$2("document-manager");
|
2058
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1887
2059
|
if (permissionChecker2.cannot.delete()) {
|
1888
2060
|
return ctx.forbidden();
|
1889
2061
|
}
|
1890
2062
|
const permissionQuery = await permissionChecker2.sanitizedQuery.delete(ctx.query);
|
1891
|
-
const populate = await getService$
|
2063
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1892
2064
|
const { locale } = await getDocumentLocaleAndStatus(ctx.query, model);
|
1893
2065
|
const documentLocales = await documentManager2.findLocales(id, model, { populate, locale });
|
1894
2066
|
if (documentLocales.length === 0) {
|
@@ -1910,14 +2082,14 @@ const collectionTypes = {
|
|
1910
2082
|
const { userAbility } = ctx.state;
|
1911
2083
|
const { id, model } = ctx.params;
|
1912
2084
|
const { body } = ctx.request;
|
1913
|
-
const documentManager2 = getService$
|
1914
|
-
const permissionChecker2 = getService$
|
2085
|
+
const documentManager2 = getService$2("document-manager");
|
2086
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1915
2087
|
if (permissionChecker2.cannot.publish()) {
|
1916
2088
|
return ctx.forbidden();
|
1917
2089
|
}
|
1918
2090
|
const publishedDocument = await strapi.db.transaction(async () => {
|
1919
2091
|
const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
|
1920
|
-
const populate = await getService$
|
2092
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1921
2093
|
let document;
|
1922
2094
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1923
2095
|
const isCreate = fp.isNil(id);
|
@@ -1965,13 +2137,13 @@ const collectionTypes = {
|
|
1965
2137
|
const { body } = ctx.request;
|
1966
2138
|
const { documentIds } = body;
|
1967
2139
|
await validateBulkActionInput(body);
|
1968
|
-
const documentManager2 = getService$
|
1969
|
-
const permissionChecker2 = getService$
|
2140
|
+
const documentManager2 = getService$2("document-manager");
|
2141
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1970
2142
|
if (permissionChecker2.cannot.publish()) {
|
1971
2143
|
return ctx.forbidden();
|
1972
2144
|
}
|
1973
2145
|
const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
|
1974
|
-
const populate = await getService$
|
2146
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1975
2147
|
const { locale } = await getDocumentLocaleAndStatus(body, model, {
|
1976
2148
|
allowMultipleLocales: true
|
1977
2149
|
});
|
@@ -1996,8 +2168,8 @@ const collectionTypes = {
|
|
1996
2168
|
const { body } = ctx.request;
|
1997
2169
|
const { documentIds } = body;
|
1998
2170
|
await validateBulkActionInput(body);
|
1999
|
-
const documentManager2 = getService$
|
2000
|
-
const permissionChecker2 = getService$
|
2171
|
+
const documentManager2 = getService$2("document-manager");
|
2172
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2001
2173
|
if (permissionChecker2.cannot.unpublish()) {
|
2002
2174
|
return ctx.forbidden();
|
2003
2175
|
}
|
@@ -2026,8 +2198,8 @@ const collectionTypes = {
|
|
2026
2198
|
const {
|
2027
2199
|
body: { discardDraft, ...body }
|
2028
2200
|
} = ctx.request;
|
2029
|
-
const documentManager2 = getService$
|
2030
|
-
const permissionChecker2 = getService$
|
2201
|
+
const documentManager2 = getService$2("document-manager");
|
2202
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2031
2203
|
if (permissionChecker2.cannot.unpublish()) {
|
2032
2204
|
return ctx.forbidden();
|
2033
2205
|
}
|
@@ -2035,7 +2207,7 @@ const collectionTypes = {
|
|
2035
2207
|
return ctx.forbidden();
|
2036
2208
|
}
|
2037
2209
|
const permissionQuery = await permissionChecker2.sanitizedQuery.unpublish(ctx.query);
|
2038
|
-
const populate = await getService$
|
2210
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2039
2211
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2040
2212
|
const document = await documentManager2.findOne(id, model, {
|
2041
2213
|
populate,
|
@@ -2066,13 +2238,13 @@ const collectionTypes = {
|
|
2066
2238
|
const { userAbility } = ctx.state;
|
2067
2239
|
const { id, model } = ctx.params;
|
2068
2240
|
const { body } = ctx.request;
|
2069
|
-
const documentManager2 = getService$
|
2070
|
-
const permissionChecker2 = getService$
|
2241
|
+
const documentManager2 = getService$2("document-manager");
|
2242
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2071
2243
|
if (permissionChecker2.cannot.discard()) {
|
2072
2244
|
return ctx.forbidden();
|
2073
2245
|
}
|
2074
2246
|
const permissionQuery = await permissionChecker2.sanitizedQuery.discard(ctx.query);
|
2075
|
-
const populate = await getService$
|
2247
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2076
2248
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2077
2249
|
const document = await documentManager2.findOne(id, model, {
|
2078
2250
|
populate,
|
@@ -2097,13 +2269,13 @@ const collectionTypes = {
|
|
2097
2269
|
const { query, body } = ctx.request;
|
2098
2270
|
const { documentIds } = body;
|
2099
2271
|
await validateBulkActionInput(body);
|
2100
|
-
const documentManager2 = getService$
|
2101
|
-
const permissionChecker2 = getService$
|
2272
|
+
const documentManager2 = getService$2("document-manager");
|
2273
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2102
2274
|
if (permissionChecker2.cannot.delete()) {
|
2103
2275
|
return ctx.forbidden();
|
2104
2276
|
}
|
2105
2277
|
const permissionQuery = await permissionChecker2.sanitizedQuery.delete(query);
|
2106
|
-
const populate = await getService$
|
2278
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2107
2279
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2108
2280
|
const documentLocales = await documentManager2.findLocales(documentIds, model, {
|
2109
2281
|
populate,
|
@@ -2124,13 +2296,13 @@ const collectionTypes = {
|
|
2124
2296
|
async countDraftRelations(ctx) {
|
2125
2297
|
const { userAbility } = ctx.state;
|
2126
2298
|
const { model, id } = ctx.params;
|
2127
|
-
const documentManager2 = getService$
|
2128
|
-
const permissionChecker2 = getService$
|
2299
|
+
const documentManager2 = getService$2("document-manager");
|
2300
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2129
2301
|
if (permissionChecker2.cannot.read()) {
|
2130
2302
|
return ctx.forbidden();
|
2131
2303
|
}
|
2132
2304
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
2133
|
-
const populate = await getService$
|
2305
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2134
2306
|
const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);
|
2135
2307
|
const entity = await documentManager2.findOne(id, model, { populate, locale, status });
|
2136
2308
|
if (!entity) {
|
@@ -2149,8 +2321,8 @@ const collectionTypes = {
|
|
2149
2321
|
const ids = ctx.request.query.documentIds;
|
2150
2322
|
const locale = ctx.request.query.locale;
|
2151
2323
|
const { model } = ctx.params;
|
2152
|
-
const documentManager2 = getService$
|
2153
|
-
const permissionChecker2 = getService$
|
2324
|
+
const documentManager2 = getService$2("document-manager");
|
2325
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2154
2326
|
if (permissionChecker2.cannot.read()) {
|
2155
2327
|
return ctx.forbidden();
|
2156
2328
|
}
|
@@ -2174,13 +2346,13 @@ const collectionTypes = {
|
|
2174
2346
|
};
|
2175
2347
|
const components$1 = {
|
2176
2348
|
findComponents(ctx) {
|
2177
|
-
const components2 = getService$
|
2178
|
-
const { toDto } = getService$
|
2349
|
+
const components2 = getService$2("components").findAllComponents();
|
2350
|
+
const { toDto } = getService$2("data-mapper");
|
2179
2351
|
ctx.body = { data: components2.map(toDto) };
|
2180
2352
|
},
|
2181
2353
|
async findComponentConfiguration(ctx) {
|
2182
2354
|
const { uid: uid2 } = ctx.params;
|
2183
|
-
const componentService = getService$
|
2355
|
+
const componentService = getService$2("components");
|
2184
2356
|
const component = componentService.findComponent(uid2);
|
2185
2357
|
if (!component) {
|
2186
2358
|
return ctx.notFound("component.notFound");
|
@@ -2197,7 +2369,7 @@ const components$1 = {
|
|
2197
2369
|
async updateComponentConfiguration(ctx) {
|
2198
2370
|
const { uid: uid2 } = ctx.params;
|
2199
2371
|
const { body } = ctx.request;
|
2200
|
-
const componentService = getService$
|
2372
|
+
const componentService = getService$2("components");
|
2201
2373
|
const component = componentService.findComponent(uid2);
|
2202
2374
|
if (!component) {
|
2203
2375
|
return ctx.notFound("component.notFound");
|
@@ -2231,12 +2403,12 @@ const contentTypes = {
|
|
2231
2403
|
} catch (error) {
|
2232
2404
|
return ctx.send({ error }, 400);
|
2233
2405
|
}
|
2234
|
-
const contentTypes2 = getService$
|
2235
|
-
const { toDto } = getService$
|
2406
|
+
const contentTypes2 = getService$2("content-types").findContentTypesByKind(kind);
|
2407
|
+
const { toDto } = getService$2("data-mapper");
|
2236
2408
|
ctx.body = { data: contentTypes2.map(toDto) };
|
2237
2409
|
},
|
2238
2410
|
async findContentTypesSettings(ctx) {
|
2239
|
-
const { findAllContentTypes, findConfiguration } = getService$
|
2411
|
+
const { findAllContentTypes, findConfiguration } = getService$2("content-types");
|
2240
2412
|
const contentTypes2 = await findAllContentTypes();
|
2241
2413
|
const configurations = await Promise.all(
|
2242
2414
|
contentTypes2.map(async (contentType) => {
|
@@ -2250,7 +2422,7 @@ const contentTypes = {
|
|
2250
2422
|
},
|
2251
2423
|
async findContentTypeConfiguration(ctx) {
|
2252
2424
|
const { uid: uid2 } = ctx.params;
|
2253
|
-
const contentTypeService = getService$
|
2425
|
+
const contentTypeService = getService$2("content-types");
|
2254
2426
|
const contentType = await contentTypeService.findContentType(uid2);
|
2255
2427
|
if (!contentType) {
|
2256
2428
|
return ctx.notFound("contentType.notFound");
|
@@ -2272,13 +2444,13 @@ const contentTypes = {
|
|
2272
2444
|
const { userAbility } = ctx.state;
|
2273
2445
|
const { uid: uid2 } = ctx.params;
|
2274
2446
|
const { body } = ctx.request;
|
2275
|
-
const contentTypeService = getService$
|
2276
|
-
const metricsService = getService$
|
2447
|
+
const contentTypeService = getService$2("content-types");
|
2448
|
+
const metricsService = getService$2("metrics");
|
2277
2449
|
const contentType = await contentTypeService.findContentType(uid2);
|
2278
2450
|
if (!contentType) {
|
2279
2451
|
return ctx.notFound("contentType.notFound");
|
2280
2452
|
}
|
2281
|
-
if (!getService$
|
2453
|
+
if (!getService$2("permission").canConfigureContentType({ userAbility, contentType })) {
|
2282
2454
|
return ctx.forbidden();
|
2283
2455
|
}
|
2284
2456
|
let input;
|
@@ -2311,10 +2483,10 @@ const contentTypes = {
|
|
2311
2483
|
};
|
2312
2484
|
const init = {
|
2313
2485
|
getInitData(ctx) {
|
2314
|
-
const { toDto } = getService$
|
2315
|
-
const { findAllComponents } = getService$
|
2316
|
-
const { getAllFieldSizes } = getService$
|
2317
|
-
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");
|
2318
2490
|
ctx.body = {
|
2319
2491
|
data: {
|
2320
2492
|
fieldSizes: getAllFieldSizes(),
|
@@ -2350,7 +2522,7 @@ const addFiltersClause = (params, filtersClause) => {
|
|
2350
2522
|
params.filters.$and.push(filtersClause);
|
2351
2523
|
};
|
2352
2524
|
const sanitizeMainField = (model, mainField, userAbility) => {
|
2353
|
-
const permissionChecker2 = getService$
|
2525
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2354
2526
|
userAbility,
|
2355
2527
|
model: model.uid
|
2356
2528
|
});
|
@@ -2364,15 +2536,27 @@ const sanitizeMainField = (model, mainField, userAbility) => {
|
|
2364
2536
|
}
|
2365
2537
|
return mainField;
|
2366
2538
|
};
|
2367
|
-
const addStatusToRelations = async (
|
2368
|
-
if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.
|
2539
|
+
const addStatusToRelations = async (targetUid, relations2) => {
|
2540
|
+
if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.getModel(targetUid))) {
|
2541
|
+
return relations2;
|
2542
|
+
}
|
2543
|
+
const documentMetadata2 = getService$2("document-metadata");
|
2544
|
+
if (!relations2.length) {
|
2369
2545
|
return relations2;
|
2370
2546
|
}
|
2371
|
-
const
|
2372
|
-
const
|
2547
|
+
const firstRelation = relations2[0];
|
2548
|
+
const filters = {
|
2549
|
+
documentId: { $in: relations2.map((r) => r.documentId) },
|
2550
|
+
// NOTE: find the "opposite" status
|
2551
|
+
publishedAt: firstRelation.publishedAt !== null ? { $null: true } : { $notNull: true }
|
2552
|
+
};
|
2553
|
+
const availableStatus = await strapi.query(targetUid).findMany({
|
2554
|
+
select: ["id", "documentId", "locale", "updatedAt", "createdAt", "publishedAt"],
|
2555
|
+
filters
|
2556
|
+
});
|
2373
2557
|
return relations2.map((relation) => {
|
2374
|
-
const availableStatuses =
|
2375
|
-
(availableDocument) => availableDocument.documentId === relation.documentId
|
2558
|
+
const availableStatuses = availableStatus.filter(
|
2559
|
+
(availableDocument) => availableDocument.documentId === relation.documentId && (relation.locale ? availableDocument.locale === relation.locale : true)
|
2376
2560
|
);
|
2377
2561
|
return {
|
2378
2562
|
...relation,
|
@@ -2434,7 +2618,7 @@ const relations = {
|
|
2434
2618
|
ctx.request?.query?.locale
|
2435
2619
|
);
|
2436
2620
|
const { status } = validateStatus(sourceUid, ctx.request?.query?.status);
|
2437
|
-
const permissionChecker2 = getService$
|
2621
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2438
2622
|
userAbility,
|
2439
2623
|
model
|
2440
2624
|
});
|
@@ -2459,7 +2643,7 @@ const relations = {
|
|
2459
2643
|
where.id = id;
|
2460
2644
|
}
|
2461
2645
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
2462
|
-
const populate = await getService$
|
2646
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2463
2647
|
const currentEntity = await strapi.db.query(model).findOne({
|
2464
2648
|
where,
|
2465
2649
|
populate
|
@@ -2474,7 +2658,7 @@ const relations = {
|
|
2474
2658
|
}
|
2475
2659
|
entryId = currentEntity.id;
|
2476
2660
|
}
|
2477
|
-
const modelConfig = isComponent2 ? await getService$
|
2661
|
+
const modelConfig = isComponent2 ? await getService$2("components").findConfiguration(sourceSchema) : await getService$2("content-types").findConfiguration(sourceSchema);
|
2478
2662
|
const targetSchema = strapi.getModel(targetUid);
|
2479
2663
|
const mainField = fp.flow(
|
2480
2664
|
fp.prop(`metadatas.${targetField}.edit.mainField`),
|
@@ -2528,7 +2712,7 @@ const relations = {
|
|
2528
2712
|
}
|
2529
2713
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2530
2714
|
const { idsToOmit, idsToInclude, _q, ...query } = ctx.request.query;
|
2531
|
-
const permissionChecker2 = getService$
|
2715
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2532
2716
|
userAbility: ctx.state.userAbility,
|
2533
2717
|
model: targetUid
|
2534
2718
|
});
|
@@ -2601,21 +2785,33 @@ const relations = {
|
|
2601
2785
|
attribute,
|
2602
2786
|
targetField,
|
2603
2787
|
fieldsToSelect,
|
2604
|
-
|
2605
|
-
|
2606
|
-
}
|
2607
|
-
target: {
|
2608
|
-
schema: { uid: targetUid }
|
2609
|
-
}
|
2788
|
+
status,
|
2789
|
+
source: { schema: sourceSchema },
|
2790
|
+
target: { schema: targetSchema }
|
2610
2791
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2611
|
-
const
|
2792
|
+
const { uid: sourceUid } = sourceSchema;
|
2793
|
+
const { uid: targetUid } = targetSchema;
|
2794
|
+
const permissionQuery = await getService$2("permission-checker").create({ userAbility, model: targetUid }).sanitizedQuery.read({ fields: fieldsToSelect });
|
2612
2795
|
const dbQuery = strapi.db.query(sourceUid);
|
2613
2796
|
const loadRelations = strapiUtils.relations.isAnyToMany(attribute) ? (...args) => dbQuery.loadPages(...args) : (...args) => dbQuery.load(...args).then((res2) => ({ results: res2 ? [res2] : [] }));
|
2797
|
+
const filters = {};
|
2798
|
+
if (sourceSchema?.options?.draftAndPublish) {
|
2799
|
+
if (targetSchema?.options?.draftAndPublish) {
|
2800
|
+
if (status === "published") {
|
2801
|
+
filters.publishedAt = { $notNull: true };
|
2802
|
+
} else {
|
2803
|
+
filters.publishedAt = { $null: true };
|
2804
|
+
}
|
2805
|
+
}
|
2806
|
+
} else if (targetSchema?.options?.draftAndPublish) {
|
2807
|
+
filters.publishedAt = { $null: true };
|
2808
|
+
}
|
2614
2809
|
const res = await loadRelations({ id: entryId }, targetField, {
|
2615
|
-
select: ["id", "documentId", "locale", "publishedAt"],
|
2810
|
+
select: ["id", "documentId", "locale", "publishedAt", "updatedAt"],
|
2616
2811
|
ordering: "desc",
|
2617
2812
|
page: ctx.request.query.page,
|
2618
|
-
pageSize: ctx.request.query.pageSize
|
2813
|
+
pageSize: ctx.request.query.pageSize,
|
2814
|
+
filters
|
2619
2815
|
});
|
2620
2816
|
const loadedIds = res.results.map((item) => item.id);
|
2621
2817
|
addFiltersClause(permissionQuery, { id: { $in: loadedIds } });
|
@@ -2623,12 +2819,7 @@ const relations = {
|
|
2623
2819
|
...strapi.get("query-params").transform(targetUid, permissionQuery),
|
2624
2820
|
ordering: "desc"
|
2625
2821
|
});
|
2626
|
-
const relationsUnion = fp.uniqBy(
|
2627
|
-
(res2) => {
|
2628
|
-
return res2.locale ? `${res2.documentId}-${res2.locale}` : `${res2.documentId}-`;
|
2629
|
-
},
|
2630
|
-
fp.concat(sanitizedRes.results, res.results)
|
2631
|
-
);
|
2822
|
+
const relationsUnion = fp.uniqBy("id", fp.concat(sanitizedRes.results, res.results));
|
2632
2823
|
ctx.body = {
|
2633
2824
|
pagination: res.pagination || {
|
2634
2825
|
page: 1,
|
@@ -2641,10 +2832,10 @@ const relations = {
|
|
2641
2832
|
}
|
2642
2833
|
};
|
2643
2834
|
const buildPopulateFromQuery = async (query, model) => {
|
2644
|
-
return getService$
|
2835
|
+
return getService$2("populate-builder")(model).populateFromQuery(query).populateDeep(Infinity).countRelations().build();
|
2645
2836
|
};
|
2646
2837
|
const findDocument = async (query, uid2, opts = {}) => {
|
2647
|
-
const documentManager2 = getService$
|
2838
|
+
const documentManager2 = getService$2("document-manager");
|
2648
2839
|
const populate = await buildPopulateFromQuery(query, uid2);
|
2649
2840
|
return documentManager2.findMany({ ...opts, populate }, uid2).then((documents) => documents[0]);
|
2650
2841
|
};
|
@@ -2652,8 +2843,8 @@ const createOrUpdateDocument = async (ctx, opts) => {
|
|
2652
2843
|
const { user, userAbility } = ctx.state;
|
2653
2844
|
const { model } = ctx.params;
|
2654
2845
|
const { body, query } = ctx.request;
|
2655
|
-
const documentManager2 = getService$
|
2656
|
-
const permissionChecker2 = getService$
|
2846
|
+
const documentManager2 = getService$2("document-manager");
|
2847
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2657
2848
|
if (permissionChecker2.cannot.create() && permissionChecker2.cannot.update()) {
|
2658
2849
|
throw new strapiUtils.errors.ForbiddenError();
|
2659
2850
|
}
|
@@ -2694,7 +2885,7 @@ const singleTypes = {
|
|
2694
2885
|
const { userAbility } = ctx.state;
|
2695
2886
|
const { model } = ctx.params;
|
2696
2887
|
const { query = {} } = ctx.request;
|
2697
|
-
const permissionChecker2 = getService$
|
2888
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2698
2889
|
if (permissionChecker2.cannot.read()) {
|
2699
2890
|
return ctx.forbidden();
|
2700
2891
|
}
|
@@ -2728,7 +2919,7 @@ const singleTypes = {
|
|
2728
2919
|
async createOrUpdate(ctx) {
|
2729
2920
|
const { userAbility } = ctx.state;
|
2730
2921
|
const { model } = ctx.params;
|
2731
|
-
const permissionChecker2 = getService$
|
2922
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2732
2923
|
const document = await createOrUpdateDocument(ctx);
|
2733
2924
|
const sanitizedDocument = await permissionChecker2.sanitizeOutput(document);
|
2734
2925
|
ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedDocument);
|
@@ -2737,8 +2928,8 @@ const singleTypes = {
|
|
2737
2928
|
const { userAbility } = ctx.state;
|
2738
2929
|
const { model } = ctx.params;
|
2739
2930
|
const { query = {} } = ctx.request;
|
2740
|
-
const documentManager2 = getService$
|
2741
|
-
const permissionChecker2 = getService$
|
2931
|
+
const documentManager2 = getService$2("document-manager");
|
2932
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2742
2933
|
if (permissionChecker2.cannot.delete()) {
|
2743
2934
|
return ctx.forbidden();
|
2744
2935
|
}
|
@@ -2766,8 +2957,8 @@ const singleTypes = {
|
|
2766
2957
|
const { userAbility } = ctx.state;
|
2767
2958
|
const { model } = ctx.params;
|
2768
2959
|
const { query = {} } = ctx.request;
|
2769
|
-
const documentManager2 = getService$
|
2770
|
-
const permissionChecker2 = getService$
|
2960
|
+
const documentManager2 = getService$2("document-manager");
|
2961
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2771
2962
|
if (permissionChecker2.cannot.publish()) {
|
2772
2963
|
return ctx.forbidden();
|
2773
2964
|
}
|
@@ -2795,8 +2986,8 @@ const singleTypes = {
|
|
2795
2986
|
body: { discardDraft, ...body },
|
2796
2987
|
query = {}
|
2797
2988
|
} = ctx.request;
|
2798
|
-
const documentManager2 = getService$
|
2799
|
-
const permissionChecker2 = getService$
|
2989
|
+
const documentManager2 = getService$2("document-manager");
|
2990
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2800
2991
|
if (permissionChecker2.cannot.unpublish()) {
|
2801
2992
|
return ctx.forbidden();
|
2802
2993
|
}
|
@@ -2830,8 +3021,8 @@ const singleTypes = {
|
|
2830
3021
|
const { userAbility } = ctx.state;
|
2831
3022
|
const { model } = ctx.params;
|
2832
3023
|
const { body, query = {} } = ctx.request;
|
2833
|
-
const documentManager2 = getService$
|
2834
|
-
const permissionChecker2 = getService$
|
3024
|
+
const documentManager2 = getService$2("document-manager");
|
3025
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2835
3026
|
if (permissionChecker2.cannot.discard()) {
|
2836
3027
|
return ctx.forbidden();
|
2837
3028
|
}
|
@@ -2854,8 +3045,8 @@ const singleTypes = {
|
|
2854
3045
|
const { userAbility } = ctx.state;
|
2855
3046
|
const { model } = ctx.params;
|
2856
3047
|
const { query } = ctx.request;
|
2857
|
-
const documentManager2 = getService$
|
2858
|
-
const permissionChecker2 = getService$
|
3048
|
+
const documentManager2 = getService$2("document-manager");
|
3049
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2859
3050
|
const { locale } = await getDocumentLocaleAndStatus(query, model);
|
2860
3051
|
if (permissionChecker2.cannot.read()) {
|
2861
3052
|
return ctx.forbidden();
|
@@ -2879,7 +3070,7 @@ const uid$1 = {
|
|
2879
3070
|
const { query = {} } = ctx.request;
|
2880
3071
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2881
3072
|
await validateUIDField(contentTypeUID, field);
|
2882
|
-
const uidService = getService$
|
3073
|
+
const uidService = getService$2("uid");
|
2883
3074
|
ctx.body = {
|
2884
3075
|
data: await uidService.generateUIDField({ contentTypeUID, field, data, locale })
|
2885
3076
|
};
|
@@ -2891,7 +3082,7 @@ const uid$1 = {
|
|
2891
3082
|
const { query = {} } = ctx.request;
|
2892
3083
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2893
3084
|
await validateUIDField(contentTypeUID, field);
|
2894
|
-
const uidService = getService$
|
3085
|
+
const uidService = getService$2("uid");
|
2895
3086
|
const isAvailable = await uidService.checkUIDAvailability({
|
2896
3087
|
contentTypeUID,
|
2897
3088
|
field,
|
@@ -2912,7 +3103,8 @@ const controllers = {
|
|
2912
3103
|
relations,
|
2913
3104
|
"single-types": singleTypes,
|
2914
3105
|
uid: uid$1,
|
2915
|
-
...history.controllers ? history.controllers : {}
|
3106
|
+
...history.controllers ? history.controllers : {},
|
3107
|
+
...preview.controllers ? preview.controllers : {}
|
2916
3108
|
};
|
2917
3109
|
const keys = {
|
2918
3110
|
CONFIGURATION: "configuration"
|
@@ -3063,12 +3255,12 @@ async function syncMetadatas(configuration, schema) {
|
|
3063
3255
|
return ___default.default.assign(metasWithDefaults, updatedMetas);
|
3064
3256
|
}
|
3065
3257
|
const getTargetSchema = (targetModel) => {
|
3066
|
-
return getService$
|
3258
|
+
return getService$2("content-types").findContentType(targetModel);
|
3067
3259
|
};
|
3068
3260
|
const DEFAULT_LIST_LENGTH = 4;
|
3069
3261
|
const MAX_ROW_SIZE = 12;
|
3070
3262
|
const isAllowedFieldSize = (type, size) => {
|
3071
|
-
const { getFieldSize } = getService$
|
3263
|
+
const { getFieldSize } = getService$2("field-sizes");
|
3072
3264
|
const fieldSize = getFieldSize(type);
|
3073
3265
|
if (!fieldSize.isResizable && size !== fieldSize.default) {
|
3074
3266
|
return false;
|
@@ -3076,7 +3268,7 @@ const isAllowedFieldSize = (type, size) => {
|
|
3076
3268
|
return size <= MAX_ROW_SIZE;
|
3077
3269
|
};
|
3078
3270
|
const getDefaultFieldSize = (attribute) => {
|
3079
|
-
const { hasFieldSize, getFieldSize } = getService$
|
3271
|
+
const { hasFieldSize, getFieldSize } = getService$2("field-sizes");
|
3080
3272
|
return getFieldSize(hasFieldSize(attribute.customField) ? attribute.customField : attribute.type).default;
|
3081
3273
|
};
|
3082
3274
|
async function createDefaultLayouts(schema) {
|
@@ -3111,7 +3303,7 @@ function syncLayouts(configuration, schema) {
|
|
3111
3303
|
for (const el of row) {
|
3112
3304
|
if (!hasEditableAttribute(schema, el.name))
|
3113
3305
|
continue;
|
3114
|
-
const { hasFieldSize } = getService$
|
3306
|
+
const { hasFieldSize } = getService$2("field-sizes");
|
3115
3307
|
const fieldType = hasFieldSize(schema.attributes[el.name].customField) ? schema.attributes[el.name].customField : schema.attributes[el.name].type;
|
3116
3308
|
if (!isAllowedFieldSize(fieldType, el.size)) {
|
3117
3309
|
elementsToReAppend.push(el.name);
|
@@ -3251,17 +3443,17 @@ const configurationService$1 = createConfigurationService({
|
|
3251
3443
|
isComponent: true,
|
3252
3444
|
prefix: STORE_KEY_PREFIX,
|
3253
3445
|
getModels() {
|
3254
|
-
const { toContentManagerModel } = getService$
|
3446
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3255
3447
|
return fp.mapValues(toContentManagerModel, strapi.components);
|
3256
3448
|
}
|
3257
3449
|
});
|
3258
3450
|
const components = ({ strapi: strapi2 }) => ({
|
3259
3451
|
findAllComponents() {
|
3260
|
-
const { toContentManagerModel } = getService$
|
3452
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3261
3453
|
return Object.values(strapi2.components).map(toContentManagerModel);
|
3262
3454
|
},
|
3263
3455
|
findComponent(uid2) {
|
3264
|
-
const { toContentManagerModel } = getService$
|
3456
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3265
3457
|
const component = strapi2.components[uid2];
|
3266
3458
|
return fp.isNil(component) ? component : toContentManagerModel(component);
|
3267
3459
|
},
|
@@ -3312,17 +3504,17 @@ const configurationService = createConfigurationService({
|
|
3312
3504
|
storeUtils,
|
3313
3505
|
prefix: "content_types",
|
3314
3506
|
getModels() {
|
3315
|
-
const { toContentManagerModel } = getService$
|
3507
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3316
3508
|
return fp.mapValues(toContentManagerModel, strapi.contentTypes);
|
3317
3509
|
}
|
3318
3510
|
});
|
3319
3511
|
const service = ({ strapi: strapi2 }) => ({
|
3320
3512
|
findAllContentTypes() {
|
3321
|
-
const { toContentManagerModel } = getService$
|
3513
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3322
3514
|
return Object.values(strapi2.contentTypes).map(toContentManagerModel);
|
3323
3515
|
},
|
3324
3516
|
findContentType(uid2) {
|
3325
|
-
const { toContentManagerModel } = getService$
|
3517
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3326
3518
|
const contentType = strapi2.contentTypes[uid2];
|
3327
3519
|
return fp.isNil(contentType) ? contentType : toContentManagerModel(contentType);
|
3328
3520
|
},
|
@@ -3351,7 +3543,7 @@ const service = ({ strapi: strapi2 }) => ({
|
|
3351
3543
|
return this.findConfiguration(contentType);
|
3352
3544
|
},
|
3353
3545
|
findComponentsConfigurations(contentType) {
|
3354
|
-
return getService$
|
3546
|
+
return getService$2("components").findComponentsConfigurations(contentType);
|
3355
3547
|
},
|
3356
3548
|
syncConfigurations() {
|
3357
3549
|
return configurationService.syncConfigurations();
|
@@ -3623,7 +3815,7 @@ const permission = ({ strapi: strapi2 }) => ({
|
|
3623
3815
|
return userAbility.can(action);
|
3624
3816
|
},
|
3625
3817
|
async registerPermissions() {
|
3626
|
-
const displayedContentTypes = getService$
|
3818
|
+
const displayedContentTypes = getService$2("content-types").findDisplayedContentTypes();
|
3627
3819
|
const contentTypesUids = displayedContentTypes.map(fp.prop("uid"));
|
3628
3820
|
const actions = [
|
3629
3821
|
{
|
@@ -3899,7 +4091,7 @@ const getQueryPopulate = async (uid2, query) => {
|
|
3899
4091
|
return populateQuery;
|
3900
4092
|
};
|
3901
4093
|
const buildDeepPopulate = (uid2) => {
|
3902
|
-
return getService$
|
4094
|
+
return getService$2("populate-builder")(uid2).populateDeep(Infinity).countRelations().build();
|
3903
4095
|
};
|
3904
4096
|
const populateBuilder = (uid2) => {
|
3905
4097
|
let getInitialPopulate = async () => {
|
@@ -4084,7 +4276,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4084
4276
|
*/
|
4085
4277
|
async getAvailableLocales(uid2, version, allVersions, validatableFields = []) {
|
4086
4278
|
const versionsByLocale = fp.groupBy("locale", allVersions);
|
4087
|
-
|
4279
|
+
if (version.locale) {
|
4280
|
+
delete versionsByLocale[version.locale];
|
4281
|
+
}
|
4088
4282
|
const model = strapi2.getModel(uid2);
|
4089
4283
|
const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
|
4090
4284
|
const traversalFunction = async (localeVersion) => strapiUtils.traverseEntity(
|
@@ -4440,7 +4634,8 @@ const services = {
|
|
4440
4634
|
permission,
|
4441
4635
|
"populate-builder": populateBuilder$1,
|
4442
4636
|
uid,
|
4443
|
-
...history.services ? history.services : {}
|
4637
|
+
...history.services ? history.services : {},
|
4638
|
+
...preview.services ? preview.services : {}
|
4444
4639
|
};
|
4445
4640
|
const index = () => {
|
4446
4641
|
return {
|