@strapi/content-manager 0.0.0-experimental.f9cac24ba3b2f6acb12d0fb5669106e5a134174e → 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-DkUdgHD9.mjs → ComponentConfigurationPage-BaJMOQyq.mjs} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-DkUdgHD9.mjs.map → ComponentConfigurationPage-BaJMOQyq.mjs.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-3feZ0gyp.js → ComponentConfigurationPage-N-CTtgQa.js} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-3feZ0gyp.js.map → ComponentConfigurationPage-N-CTtgQa.js.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-B0KA-x9U.js → EditConfigurationPage-BHkjAbxH.js} +4 -4
- package/dist/_chunks/{EditConfigurationPage-B0KA-x9U.js.map → EditConfigurationPage-BHkjAbxH.js.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-Ox5wFgpq.mjs → EditConfigurationPage-CKK-5LfX.mjs} +4 -4
- package/dist/_chunks/{EditConfigurationPage-Ox5wFgpq.mjs.map → EditConfigurationPage-CKK-5LfX.mjs.map} +1 -1
- package/dist/_chunks/{EditViewPage-foKE8Al3.mjs → EditViewPage-B11aeMcf.mjs} +38 -8
- package/dist/_chunks/EditViewPage-B11aeMcf.mjs.map +1 -0
- package/dist/_chunks/{EditViewPage-OMv9CogC.js → EditViewPage-QPUftxUd.js} +37 -7
- package/dist/_chunks/EditViewPage-QPUftxUd.js.map +1 -0
- package/dist/_chunks/{Field-CLqZcnnc.mjs → Field-Bj_RgtGo.mjs} +44 -25
- package/dist/_chunks/Field-Bj_RgtGo.mjs.map +1 -0
- package/dist/_chunks/{Field-u09MCk3G.js → Field-DUK83cfh.js} +43 -24
- package/dist/_chunks/Field-DUK83cfh.js.map +1 -0
- package/dist/_chunks/{Form-B9c_Ti0q.js → Form-DHmBRlHd.js} +2 -2
- package/dist/_chunks/{Form-B9c_Ti0q.js.map → Form-DHmBRlHd.js.map} +1 -1
- package/dist/_chunks/{Form-CU4hRyJf.mjs → Form-DLMSoXV7.mjs} +2 -2
- package/dist/_chunks/{Form-CU4hRyJf.mjs.map → Form-DLMSoXV7.mjs.map} +1 -1
- package/dist/_chunks/{History-BFyFzpSS.mjs → History-CfCSNlG9.mjs} +22 -92
- package/dist/_chunks/History-CfCSNlG9.mjs.map +1 -0
- package/dist/_chunks/{History-OlickLyX.js → History-Di3zm4HT.js} +21 -91
- package/dist/_chunks/History-Di3zm4HT.js.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-Bu5Z_39o.mjs → ListConfigurationPage-0mtv_iqk.mjs} +6 -5
- package/dist/_chunks/ListConfigurationPage-0mtv_iqk.mjs.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-D0AAi_cW.js → ListConfigurationPage-Cq361KIt.js} +5 -4
- package/dist/_chunks/ListConfigurationPage-Cq361KIt.js.map +1 -0
- package/dist/_chunks/{ListViewPage-BAHxSPux.mjs → ListViewPage-BxLVROX8.mjs} +62 -39
- package/dist/_chunks/ListViewPage-BxLVROX8.mjs.map +1 -0
- package/dist/_chunks/{ListViewPage--lV5p8Qi.js → ListViewPage-DFDcG8gM.js} +62 -39
- package/dist/_chunks/ListViewPage-DFDcG8gM.js.map +1 -0
- package/dist/_chunks/{NoContentTypePage-C6SMXW77.mjs → NoContentTypePage-BRfDd67_.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-C6SMXW77.mjs.map → NoContentTypePage-BRfDd67_.mjs.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-Dxl9oZqL.js → NoContentTypePage-BSyvnDZZ.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-Dxl9oZqL.js.map → NoContentTypePage-BSyvnDZZ.js.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-o9BXzQeI.mjs → NoPermissionsPage-CV9V8KWa.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-o9BXzQeI.mjs.map → NoPermissionsPage-CV9V8KWa.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-BY1-rMng.js → NoPermissionsPage-DyLphsn_.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-BY1-rMng.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-BAK95JHc.mjs → Relations-C6pwmDXh.mjs} +44 -17
- package/dist/_chunks/Relations-C6pwmDXh.mjs.map +1 -0
- package/dist/_chunks/{Relations-CHfwGkBG.js → Relations-Cne2AlrL.js} +43 -16
- 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-CxlpxzA5.mjs → index-BpxR3En4.mjs} +179 -95
- package/dist/_chunks/index-BpxR3En4.mjs.map +1 -0
- package/dist/_chunks/{index-_Mlmsefd.js → index-T-aWjbj2.js} +176 -91
- 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-vcHVgSr1.js → layout-BEuNwv-F.js} +3 -3
- package/dist/_chunks/{layout-vcHVgSr1.js.map → layout-BEuNwv-F.js.map} +1 -1
- package/dist/_chunks/{layout-Cr0H40au.mjs → layout-DhMZ_lDx.mjs} +3 -3
- package/dist/_chunks/{layout-Cr0H40au.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-Dq60voyX.mjs → relations-BdnxoX6f.mjs} +6 -7
- package/dist/_chunks/relations-BdnxoX6f.mjs.map +1 -0
- package/dist/_chunks/{relations-hXUB80SH.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/index.d.ts +1 -1
- package/dist/admin/src/preview/pages/Preview.d.ts +11 -0
- package/dist/admin/src/preview/routes.d.ts +3 -0
- package/dist/admin/src/preview/services/preview.d.ts +3 -0
- package/dist/admin/src/router.d.ts +1 -1
- package/dist/admin/src/services/documents.d.ts +0 -3
- package/dist/server/index.js +384 -150
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +385 -151
- package/dist/server/index.mjs.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/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.map +1 -1
- 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 +9 -9
- package/dist/_chunks/EditViewPage-OMv9CogC.js.map +0 -1
- package/dist/_chunks/EditViewPage-foKE8Al3.mjs.map +0 -1
- package/dist/_chunks/Field-CLqZcnnc.mjs.map +0 -1
- package/dist/_chunks/Field-u09MCk3G.js.map +0 -1
- package/dist/_chunks/History-BFyFzpSS.mjs.map +0 -1
- package/dist/_chunks/History-OlickLyX.js.map +0 -1
- package/dist/_chunks/ListConfigurationPage-Bu5Z_39o.mjs.map +0 -1
- package/dist/_chunks/ListConfigurationPage-D0AAi_cW.js.map +0 -1
- package/dist/_chunks/ListViewPage--lV5p8Qi.js.map +0 -1
- package/dist/_chunks/ListViewPage-BAHxSPux.mjs.map +0 -1
- package/dist/_chunks/Relations-BAK95JHc.mjs.map +0 -1
- package/dist/_chunks/Relations-CHfwGkBG.js.map +0 -1
- package/dist/_chunks/index-CxlpxzA5.mjs.map +0 -1
- package/dist/_chunks/index-_Mlmsefd.js.map +0 -1
- package/dist/_chunks/relations-Dq60voyX.mjs.map +0 -1
- package/dist/_chunks/relations-hXUB80SH.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 = {
|
@@ -702,14 +723,14 @@ const getFeature$1 = () => {
|
|
702
723
|
strapi2.get("models").add(historyVersion);
|
703
724
|
},
|
704
725
|
bootstrap({ strapi: strapi2 }) {
|
705
|
-
getService(strapi2, "lifecycles").bootstrap();
|
726
|
+
getService$1(strapi2, "lifecycles").bootstrap();
|
706
727
|
},
|
707
728
|
destroy({ strapi: strapi2 }) {
|
708
|
-
getService(strapi2, "lifecycles").destroy();
|
729
|
+
getService$1(strapi2, "lifecycles").destroy();
|
709
730
|
},
|
710
|
-
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 {
|
@@ -719,33 +740,217 @@ const getFeature$1 = () => {
|
|
719
740
|
};
|
720
741
|
};
|
721
742
|
const history = getFeature$1();
|
722
|
-
const
|
723
|
-
|
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
|
+
]
|
724
758
|
};
|
725
|
-
const
|
726
|
-
|
727
|
-
|
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
|
728
919
|
};
|
729
|
-
const FEATURE_ID = "preview";
|
730
920
|
const getFeature = () => {
|
731
921
|
if (!strapi.features.future.isEnabled(FEATURE_ID)) {
|
732
922
|
return {};
|
733
923
|
}
|
734
924
|
return {
|
925
|
+
register() {
|
926
|
+
const config = getService(strapi, "preview-config");
|
927
|
+
config.validate();
|
928
|
+
config.register();
|
929
|
+
},
|
735
930
|
bootstrap() {
|
736
|
-
|
737
|
-
|
931
|
+
},
|
932
|
+
routes: routes$1,
|
933
|
+
controllers: controllers$1,
|
934
|
+
services: services$1
|
738
935
|
};
|
739
936
|
};
|
740
937
|
const preview = getFeature();
|
938
|
+
const register = async ({ strapi: strapi2 }) => {
|
939
|
+
await history.register?.({ strapi: strapi2 });
|
940
|
+
await preview.register?.({ strapi: strapi2 });
|
941
|
+
};
|
942
|
+
const ALLOWED_WEBHOOK_EVENTS = {
|
943
|
+
ENTRY_PUBLISH: "entry.publish",
|
944
|
+
ENTRY_UNPUBLISH: "entry.unpublish"
|
945
|
+
};
|
741
946
|
const bootstrap = async () => {
|
742
947
|
Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {
|
743
948
|
strapi.get("webhookStore").addAllowedEvent(key, value);
|
744
949
|
});
|
745
|
-
getService$
|
746
|
-
await getService$
|
747
|
-
await getService$
|
748
|
-
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();
|
749
954
|
await history.bootstrap?.({ strapi });
|
750
955
|
await preview.bootstrap?.({ strapi });
|
751
956
|
};
|
@@ -1237,7 +1442,8 @@ const admin = {
|
|
1237
1442
|
};
|
1238
1443
|
const routes = {
|
1239
1444
|
admin,
|
1240
|
-
...history.routes ? history.routes : {}
|
1445
|
+
...history.routes ? history.routes : {},
|
1446
|
+
...preview.routes ? preview.routes : {}
|
1241
1447
|
};
|
1242
1448
|
const hasPermissionsSchema = strapiUtils.yup.object({
|
1243
1449
|
actions: strapiUtils.yup.array().of(strapiUtils.yup.string()),
|
@@ -1494,7 +1700,7 @@ const createMetadasSchema = (schema) => {
|
|
1494
1700
|
if (!value) {
|
1495
1701
|
return strapiUtils.yup.string();
|
1496
1702
|
}
|
1497
|
-
const targetSchema = getService$
|
1703
|
+
const targetSchema = getService$2("content-types").findContentType(
|
1498
1704
|
schema.attributes[key].targetModel
|
1499
1705
|
);
|
1500
1706
|
if (!targetSchema) {
|
@@ -1663,7 +1869,7 @@ const getDocumentLocaleAndStatus = async (request, model, opts = { allowMultiple
|
|
1663
1869
|
}
|
1664
1870
|
};
|
1665
1871
|
const formatDocumentWithMetadata = async (permissionChecker2, uid2, document, opts = {}) => {
|
1666
|
-
const documentMetadata2 = getService$
|
1872
|
+
const documentMetadata2 = getService$2("document-metadata");
|
1667
1873
|
const serviceOutput = await documentMetadata2.formatDocumentWithMetadata(uid2, document, opts);
|
1668
1874
|
let {
|
1669
1875
|
meta: { availableLocales, availableStatus }
|
@@ -1689,8 +1895,8 @@ const createDocument = async (ctx, opts) => {
|
|
1689
1895
|
const { userAbility, user } = ctx.state;
|
1690
1896
|
const { model } = ctx.params;
|
1691
1897
|
const { body } = ctx.request;
|
1692
|
-
const documentManager2 = getService$
|
1693
|
-
const permissionChecker2 = getService$
|
1898
|
+
const documentManager2 = getService$2("document-manager");
|
1899
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1694
1900
|
if (permissionChecker2.cannot.create()) {
|
1695
1901
|
throw new strapiUtils.errors.ForbiddenError();
|
1696
1902
|
}
|
@@ -1710,13 +1916,13 @@ const updateDocument = async (ctx, opts) => {
|
|
1710
1916
|
const { userAbility, user } = ctx.state;
|
1711
1917
|
const { id, model } = ctx.params;
|
1712
1918
|
const { body } = ctx.request;
|
1713
|
-
const documentManager2 = getService$
|
1714
|
-
const permissionChecker2 = getService$
|
1919
|
+
const documentManager2 = getService$2("document-manager");
|
1920
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1715
1921
|
if (permissionChecker2.cannot.update()) {
|
1716
1922
|
throw new strapiUtils.errors.ForbiddenError();
|
1717
1923
|
}
|
1718
1924
|
const permissionQuery = await permissionChecker2.sanitizedQuery.update(ctx.query);
|
1719
|
-
const populate = await getService$
|
1925
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1720
1926
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1721
1927
|
const [documentVersion, documentExists] = await Promise.all([
|
1722
1928
|
documentManager2.findOne(id, model, { populate, locale, status: "draft" }),
|
@@ -1747,14 +1953,14 @@ const collectionTypes = {
|
|
1747
1953
|
const { userAbility } = ctx.state;
|
1748
1954
|
const { model } = ctx.params;
|
1749
1955
|
const { query } = ctx.request;
|
1750
|
-
const documentMetadata2 = getService$
|
1751
|
-
const documentManager2 = getService$
|
1752
|
-
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 });
|
1753
1959
|
if (permissionChecker2.cannot.read()) {
|
1754
1960
|
return ctx.forbidden();
|
1755
1961
|
}
|
1756
1962
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(query);
|
1757
|
-
const populate = await getService$
|
1963
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(1).countRelations({ toOne: false, toMany: true }).build();
|
1758
1964
|
const { locale, status } = await getDocumentLocaleAndStatus(query, model);
|
1759
1965
|
const { results: documents, pagination } = await documentManager2.findPage(
|
1760
1966
|
{ ...permissionQuery, populate, locale, status },
|
@@ -1783,13 +1989,13 @@ const collectionTypes = {
|
|
1783
1989
|
async findOne(ctx) {
|
1784
1990
|
const { userAbility } = ctx.state;
|
1785
1991
|
const { model, id } = ctx.params;
|
1786
|
-
const documentManager2 = getService$
|
1787
|
-
const permissionChecker2 = getService$
|
1992
|
+
const documentManager2 = getService$2("document-manager");
|
1993
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1788
1994
|
if (permissionChecker2.cannot.read()) {
|
1789
1995
|
return ctx.forbidden();
|
1790
1996
|
}
|
1791
1997
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
1792
|
-
const populate = await getService$
|
1998
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1793
1999
|
const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);
|
1794
2000
|
const version = await documentManager2.findOne(id, model, {
|
1795
2001
|
populate,
|
@@ -1820,7 +2026,7 @@ const collectionTypes = {
|
|
1820
2026
|
async create(ctx) {
|
1821
2027
|
const { userAbility } = ctx.state;
|
1822
2028
|
const { model } = ctx.params;
|
1823
|
-
const permissionChecker2 = getService$
|
2029
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1824
2030
|
const [totalEntries, document] = await Promise.all([
|
1825
2031
|
strapi.db.query(model).count(),
|
1826
2032
|
createDocument(ctx)
|
@@ -1841,7 +2047,7 @@ const collectionTypes = {
|
|
1841
2047
|
async update(ctx) {
|
1842
2048
|
const { userAbility } = ctx.state;
|
1843
2049
|
const { model } = ctx.params;
|
1844
|
-
const permissionChecker2 = getService$
|
2050
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1845
2051
|
const updatedVersion = await updateDocument(ctx);
|
1846
2052
|
const sanitizedVersion = await permissionChecker2.sanitizeOutput(updatedVersion);
|
1847
2053
|
ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedVersion);
|
@@ -1850,13 +2056,13 @@ const collectionTypes = {
|
|
1850
2056
|
const { userAbility, user } = ctx.state;
|
1851
2057
|
const { model, sourceId: id } = ctx.params;
|
1852
2058
|
const { body } = ctx.request;
|
1853
|
-
const documentManager2 = getService$
|
1854
|
-
const permissionChecker2 = getService$
|
2059
|
+
const documentManager2 = getService$2("document-manager");
|
2060
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1855
2061
|
if (permissionChecker2.cannot.create()) {
|
1856
2062
|
return ctx.forbidden();
|
1857
2063
|
}
|
1858
2064
|
const permissionQuery = await permissionChecker2.sanitizedQuery.create(ctx.query);
|
1859
|
-
const populate = await getService$
|
2065
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1860
2066
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1861
2067
|
const document = await documentManager2.findOne(id, model, {
|
1862
2068
|
populate,
|
@@ -1895,13 +2101,13 @@ const collectionTypes = {
|
|
1895
2101
|
async delete(ctx) {
|
1896
2102
|
const { userAbility } = ctx.state;
|
1897
2103
|
const { id, model } = ctx.params;
|
1898
|
-
const documentManager2 = getService$
|
1899
|
-
const permissionChecker2 = getService$
|
2104
|
+
const documentManager2 = getService$2("document-manager");
|
2105
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1900
2106
|
if (permissionChecker2.cannot.delete()) {
|
1901
2107
|
return ctx.forbidden();
|
1902
2108
|
}
|
1903
2109
|
const permissionQuery = await permissionChecker2.sanitizedQuery.delete(ctx.query);
|
1904
|
-
const populate = await getService$
|
2110
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1905
2111
|
const { locale } = await getDocumentLocaleAndStatus(ctx.query, model);
|
1906
2112
|
const documentLocales = await documentManager2.findLocales(id, model, { populate, locale });
|
1907
2113
|
if (documentLocales.length === 0) {
|
@@ -1923,14 +2129,14 @@ const collectionTypes = {
|
|
1923
2129
|
const { userAbility } = ctx.state;
|
1924
2130
|
const { id, model } = ctx.params;
|
1925
2131
|
const { body } = ctx.request;
|
1926
|
-
const documentManager2 = getService$
|
1927
|
-
const permissionChecker2 = getService$
|
2132
|
+
const documentManager2 = getService$2("document-manager");
|
2133
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1928
2134
|
if (permissionChecker2.cannot.publish()) {
|
1929
2135
|
return ctx.forbidden();
|
1930
2136
|
}
|
1931
2137
|
const publishedDocument = await strapi.db.transaction(async () => {
|
1932
2138
|
const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
|
1933
|
-
const populate = await getService$
|
2139
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1934
2140
|
let document;
|
1935
2141
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1936
2142
|
const isCreate = fp.isNil(id);
|
@@ -1978,13 +2184,13 @@ const collectionTypes = {
|
|
1978
2184
|
const { body } = ctx.request;
|
1979
2185
|
const { documentIds } = body;
|
1980
2186
|
await validateBulkActionInput(body);
|
1981
|
-
const documentManager2 = getService$
|
1982
|
-
const permissionChecker2 = getService$
|
2187
|
+
const documentManager2 = getService$2("document-manager");
|
2188
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1983
2189
|
if (permissionChecker2.cannot.publish()) {
|
1984
2190
|
return ctx.forbidden();
|
1985
2191
|
}
|
1986
2192
|
const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
|
1987
|
-
const populate = await getService$
|
2193
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1988
2194
|
const { locale } = await getDocumentLocaleAndStatus(body, model, {
|
1989
2195
|
allowMultipleLocales: true
|
1990
2196
|
});
|
@@ -2009,8 +2215,8 @@ const collectionTypes = {
|
|
2009
2215
|
const { body } = ctx.request;
|
2010
2216
|
const { documentIds } = body;
|
2011
2217
|
await validateBulkActionInput(body);
|
2012
|
-
const documentManager2 = getService$
|
2013
|
-
const permissionChecker2 = getService$
|
2218
|
+
const documentManager2 = getService$2("document-manager");
|
2219
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2014
2220
|
if (permissionChecker2.cannot.unpublish()) {
|
2015
2221
|
return ctx.forbidden();
|
2016
2222
|
}
|
@@ -2039,8 +2245,8 @@ const collectionTypes = {
|
|
2039
2245
|
const {
|
2040
2246
|
body: { discardDraft, ...body }
|
2041
2247
|
} = ctx.request;
|
2042
|
-
const documentManager2 = getService$
|
2043
|
-
const permissionChecker2 = getService$
|
2248
|
+
const documentManager2 = getService$2("document-manager");
|
2249
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2044
2250
|
if (permissionChecker2.cannot.unpublish()) {
|
2045
2251
|
return ctx.forbidden();
|
2046
2252
|
}
|
@@ -2048,7 +2254,7 @@ const collectionTypes = {
|
|
2048
2254
|
return ctx.forbidden();
|
2049
2255
|
}
|
2050
2256
|
const permissionQuery = await permissionChecker2.sanitizedQuery.unpublish(ctx.query);
|
2051
|
-
const populate = await getService$
|
2257
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2052
2258
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2053
2259
|
const document = await documentManager2.findOne(id, model, {
|
2054
2260
|
populate,
|
@@ -2079,13 +2285,13 @@ const collectionTypes = {
|
|
2079
2285
|
const { userAbility } = ctx.state;
|
2080
2286
|
const { id, model } = ctx.params;
|
2081
2287
|
const { body } = ctx.request;
|
2082
|
-
const documentManager2 = getService$
|
2083
|
-
const permissionChecker2 = getService$
|
2288
|
+
const documentManager2 = getService$2("document-manager");
|
2289
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2084
2290
|
if (permissionChecker2.cannot.discard()) {
|
2085
2291
|
return ctx.forbidden();
|
2086
2292
|
}
|
2087
2293
|
const permissionQuery = await permissionChecker2.sanitizedQuery.discard(ctx.query);
|
2088
|
-
const populate = await getService$
|
2294
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2089
2295
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2090
2296
|
const document = await documentManager2.findOne(id, model, {
|
2091
2297
|
populate,
|
@@ -2110,13 +2316,13 @@ const collectionTypes = {
|
|
2110
2316
|
const { query, body } = ctx.request;
|
2111
2317
|
const { documentIds } = body;
|
2112
2318
|
await validateBulkActionInput(body);
|
2113
|
-
const documentManager2 = getService$
|
2114
|
-
const permissionChecker2 = getService$
|
2319
|
+
const documentManager2 = getService$2("document-manager");
|
2320
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2115
2321
|
if (permissionChecker2.cannot.delete()) {
|
2116
2322
|
return ctx.forbidden();
|
2117
2323
|
}
|
2118
2324
|
const permissionQuery = await permissionChecker2.sanitizedQuery.delete(query);
|
2119
|
-
const populate = await getService$
|
2325
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2120
2326
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2121
2327
|
const documentLocales = await documentManager2.findLocales(documentIds, model, {
|
2122
2328
|
populate,
|
@@ -2137,13 +2343,13 @@ const collectionTypes = {
|
|
2137
2343
|
async countDraftRelations(ctx) {
|
2138
2344
|
const { userAbility } = ctx.state;
|
2139
2345
|
const { model, id } = ctx.params;
|
2140
|
-
const documentManager2 = getService$
|
2141
|
-
const permissionChecker2 = getService$
|
2346
|
+
const documentManager2 = getService$2("document-manager");
|
2347
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2142
2348
|
if (permissionChecker2.cannot.read()) {
|
2143
2349
|
return ctx.forbidden();
|
2144
2350
|
}
|
2145
2351
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
2146
|
-
const populate = await getService$
|
2352
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2147
2353
|
const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);
|
2148
2354
|
const entity = await documentManager2.findOne(id, model, { populate, locale, status });
|
2149
2355
|
if (!entity) {
|
@@ -2162,8 +2368,8 @@ const collectionTypes = {
|
|
2162
2368
|
const ids = ctx.request.query.documentIds;
|
2163
2369
|
const locale = ctx.request.query.locale;
|
2164
2370
|
const { model } = ctx.params;
|
2165
|
-
const documentManager2 = getService$
|
2166
|
-
const permissionChecker2 = getService$
|
2371
|
+
const documentManager2 = getService$2("document-manager");
|
2372
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2167
2373
|
if (permissionChecker2.cannot.read()) {
|
2168
2374
|
return ctx.forbidden();
|
2169
2375
|
}
|
@@ -2187,13 +2393,13 @@ const collectionTypes = {
|
|
2187
2393
|
};
|
2188
2394
|
const components$1 = {
|
2189
2395
|
findComponents(ctx) {
|
2190
|
-
const components2 = getService$
|
2191
|
-
const { toDto } = getService$
|
2396
|
+
const components2 = getService$2("components").findAllComponents();
|
2397
|
+
const { toDto } = getService$2("data-mapper");
|
2192
2398
|
ctx.body = { data: components2.map(toDto) };
|
2193
2399
|
},
|
2194
2400
|
async findComponentConfiguration(ctx) {
|
2195
2401
|
const { uid: uid2 } = ctx.params;
|
2196
|
-
const componentService = getService$
|
2402
|
+
const componentService = getService$2("components");
|
2197
2403
|
const component = componentService.findComponent(uid2);
|
2198
2404
|
if (!component) {
|
2199
2405
|
return ctx.notFound("component.notFound");
|
@@ -2210,7 +2416,7 @@ const components$1 = {
|
|
2210
2416
|
async updateComponentConfiguration(ctx) {
|
2211
2417
|
const { uid: uid2 } = ctx.params;
|
2212
2418
|
const { body } = ctx.request;
|
2213
|
-
const componentService = getService$
|
2419
|
+
const componentService = getService$2("components");
|
2214
2420
|
const component = componentService.findComponent(uid2);
|
2215
2421
|
if (!component) {
|
2216
2422
|
return ctx.notFound("component.notFound");
|
@@ -2244,12 +2450,12 @@ const contentTypes = {
|
|
2244
2450
|
} catch (error) {
|
2245
2451
|
return ctx.send({ error }, 400);
|
2246
2452
|
}
|
2247
|
-
const contentTypes2 = getService$
|
2248
|
-
const { toDto } = getService$
|
2453
|
+
const contentTypes2 = getService$2("content-types").findContentTypesByKind(kind);
|
2454
|
+
const { toDto } = getService$2("data-mapper");
|
2249
2455
|
ctx.body = { data: contentTypes2.map(toDto) };
|
2250
2456
|
},
|
2251
2457
|
async findContentTypesSettings(ctx) {
|
2252
|
-
const { findAllContentTypes, findConfiguration } = getService$
|
2458
|
+
const { findAllContentTypes, findConfiguration } = getService$2("content-types");
|
2253
2459
|
const contentTypes2 = await findAllContentTypes();
|
2254
2460
|
const configurations = await Promise.all(
|
2255
2461
|
contentTypes2.map(async (contentType) => {
|
@@ -2263,7 +2469,7 @@ const contentTypes = {
|
|
2263
2469
|
},
|
2264
2470
|
async findContentTypeConfiguration(ctx) {
|
2265
2471
|
const { uid: uid2 } = ctx.params;
|
2266
|
-
const contentTypeService = getService$
|
2472
|
+
const contentTypeService = getService$2("content-types");
|
2267
2473
|
const contentType = await contentTypeService.findContentType(uid2);
|
2268
2474
|
if (!contentType) {
|
2269
2475
|
return ctx.notFound("contentType.notFound");
|
@@ -2285,13 +2491,13 @@ const contentTypes = {
|
|
2285
2491
|
const { userAbility } = ctx.state;
|
2286
2492
|
const { uid: uid2 } = ctx.params;
|
2287
2493
|
const { body } = ctx.request;
|
2288
|
-
const contentTypeService = getService$
|
2289
|
-
const metricsService = getService$
|
2494
|
+
const contentTypeService = getService$2("content-types");
|
2495
|
+
const metricsService = getService$2("metrics");
|
2290
2496
|
const contentType = await contentTypeService.findContentType(uid2);
|
2291
2497
|
if (!contentType) {
|
2292
2498
|
return ctx.notFound("contentType.notFound");
|
2293
2499
|
}
|
2294
|
-
if (!getService$
|
2500
|
+
if (!getService$2("permission").canConfigureContentType({ userAbility, contentType })) {
|
2295
2501
|
return ctx.forbidden();
|
2296
2502
|
}
|
2297
2503
|
let input;
|
@@ -2324,10 +2530,10 @@ const contentTypes = {
|
|
2324
2530
|
};
|
2325
2531
|
const init = {
|
2326
2532
|
getInitData(ctx) {
|
2327
|
-
const { toDto } = getService$
|
2328
|
-
const { findAllComponents } = getService$
|
2329
|
-
const { getAllFieldSizes } = getService$
|
2330
|
-
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");
|
2331
2537
|
ctx.body = {
|
2332
2538
|
data: {
|
2333
2539
|
fieldSizes: getAllFieldSizes(),
|
@@ -2363,7 +2569,7 @@ const addFiltersClause = (params, filtersClause) => {
|
|
2363
2569
|
params.filters.$and.push(filtersClause);
|
2364
2570
|
};
|
2365
2571
|
const sanitizeMainField = (model, mainField, userAbility) => {
|
2366
|
-
const permissionChecker2 = getService$
|
2572
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2367
2573
|
userAbility,
|
2368
2574
|
model: model.uid
|
2369
2575
|
});
|
@@ -2377,15 +2583,27 @@ const sanitizeMainField = (model, mainField, userAbility) => {
|
|
2377
2583
|
}
|
2378
2584
|
return mainField;
|
2379
2585
|
};
|
2380
|
-
const addStatusToRelations = async (
|
2381
|
-
if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.
|
2586
|
+
const addStatusToRelations = async (targetUid, relations2) => {
|
2587
|
+
if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.getModel(targetUid))) {
|
2588
|
+
return relations2;
|
2589
|
+
}
|
2590
|
+
const documentMetadata2 = getService$2("document-metadata");
|
2591
|
+
if (!relations2.length) {
|
2382
2592
|
return relations2;
|
2383
2593
|
}
|
2384
|
-
const
|
2385
|
-
const
|
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
|
+
});
|
2386
2604
|
return relations2.map((relation) => {
|
2387
|
-
const availableStatuses =
|
2388
|
-
(availableDocument) => availableDocument.documentId === relation.documentId
|
2605
|
+
const availableStatuses = availableStatus.filter(
|
2606
|
+
(availableDocument) => availableDocument.documentId === relation.documentId && (relation.locale ? availableDocument.locale === relation.locale : true)
|
2389
2607
|
);
|
2390
2608
|
return {
|
2391
2609
|
...relation,
|
@@ -2447,7 +2665,7 @@ const relations = {
|
|
2447
2665
|
ctx.request?.query?.locale
|
2448
2666
|
);
|
2449
2667
|
const { status } = validateStatus(sourceUid, ctx.request?.query?.status);
|
2450
|
-
const permissionChecker2 = getService$
|
2668
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2451
2669
|
userAbility,
|
2452
2670
|
model
|
2453
2671
|
});
|
@@ -2472,7 +2690,7 @@ const relations = {
|
|
2472
2690
|
where.id = id;
|
2473
2691
|
}
|
2474
2692
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
2475
|
-
const populate = await getService$
|
2693
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2476
2694
|
const currentEntity = await strapi.db.query(model).findOne({
|
2477
2695
|
where,
|
2478
2696
|
populate
|
@@ -2487,7 +2705,7 @@ const relations = {
|
|
2487
2705
|
}
|
2488
2706
|
entryId = currentEntity.id;
|
2489
2707
|
}
|
2490
|
-
const modelConfig = isComponent2 ? await getService$
|
2708
|
+
const modelConfig = isComponent2 ? await getService$2("components").findConfiguration(sourceSchema) : await getService$2("content-types").findConfiguration(sourceSchema);
|
2491
2709
|
const targetSchema = strapi.getModel(targetUid);
|
2492
2710
|
const mainField = fp.flow(
|
2493
2711
|
fp.prop(`metadatas.${targetField}.edit.mainField`),
|
@@ -2541,7 +2759,7 @@ const relations = {
|
|
2541
2759
|
}
|
2542
2760
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2543
2761
|
const { idsToOmit, idsToInclude, _q, ...query } = ctx.request.query;
|
2544
|
-
const permissionChecker2 = getService$
|
2762
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2545
2763
|
userAbility: ctx.state.userAbility,
|
2546
2764
|
model: targetUid
|
2547
2765
|
});
|
@@ -2614,21 +2832,33 @@ const relations = {
|
|
2614
2832
|
attribute,
|
2615
2833
|
targetField,
|
2616
2834
|
fieldsToSelect,
|
2617
|
-
|
2618
|
-
|
2619
|
-
}
|
2620
|
-
target: {
|
2621
|
-
schema: { uid: targetUid }
|
2622
|
-
}
|
2835
|
+
status,
|
2836
|
+
source: { schema: sourceSchema },
|
2837
|
+
target: { schema: targetSchema }
|
2623
2838
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2624
|
-
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 });
|
2625
2842
|
const dbQuery = strapi.db.query(sourceUid);
|
2626
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
|
+
}
|
2627
2856
|
const res = await loadRelations({ id: entryId }, targetField, {
|
2628
|
-
select: ["id", "documentId", "locale", "publishedAt"],
|
2857
|
+
select: ["id", "documentId", "locale", "publishedAt", "updatedAt"],
|
2629
2858
|
ordering: "desc",
|
2630
2859
|
page: ctx.request.query.page,
|
2631
|
-
pageSize: ctx.request.query.pageSize
|
2860
|
+
pageSize: ctx.request.query.pageSize,
|
2861
|
+
filters
|
2632
2862
|
});
|
2633
2863
|
const loadedIds = res.results.map((item) => item.id);
|
2634
2864
|
addFiltersClause(permissionQuery, { id: { $in: loadedIds } });
|
@@ -2649,10 +2879,10 @@ const relations = {
|
|
2649
2879
|
}
|
2650
2880
|
};
|
2651
2881
|
const buildPopulateFromQuery = async (query, model) => {
|
2652
|
-
return getService$
|
2882
|
+
return getService$2("populate-builder")(model).populateFromQuery(query).populateDeep(Infinity).countRelations().build();
|
2653
2883
|
};
|
2654
2884
|
const findDocument = async (query, uid2, opts = {}) => {
|
2655
|
-
const documentManager2 = getService$
|
2885
|
+
const documentManager2 = getService$2("document-manager");
|
2656
2886
|
const populate = await buildPopulateFromQuery(query, uid2);
|
2657
2887
|
return documentManager2.findMany({ ...opts, populate }, uid2).then((documents) => documents[0]);
|
2658
2888
|
};
|
@@ -2660,8 +2890,8 @@ const createOrUpdateDocument = async (ctx, opts) => {
|
|
2660
2890
|
const { user, userAbility } = ctx.state;
|
2661
2891
|
const { model } = ctx.params;
|
2662
2892
|
const { body, query } = ctx.request;
|
2663
|
-
const documentManager2 = getService$
|
2664
|
-
const permissionChecker2 = getService$
|
2893
|
+
const documentManager2 = getService$2("document-manager");
|
2894
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2665
2895
|
if (permissionChecker2.cannot.create() && permissionChecker2.cannot.update()) {
|
2666
2896
|
throw new strapiUtils.errors.ForbiddenError();
|
2667
2897
|
}
|
@@ -2702,7 +2932,7 @@ const singleTypes = {
|
|
2702
2932
|
const { userAbility } = ctx.state;
|
2703
2933
|
const { model } = ctx.params;
|
2704
2934
|
const { query = {} } = ctx.request;
|
2705
|
-
const permissionChecker2 = getService$
|
2935
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2706
2936
|
if (permissionChecker2.cannot.read()) {
|
2707
2937
|
return ctx.forbidden();
|
2708
2938
|
}
|
@@ -2736,7 +2966,7 @@ const singleTypes = {
|
|
2736
2966
|
async createOrUpdate(ctx) {
|
2737
2967
|
const { userAbility } = ctx.state;
|
2738
2968
|
const { model } = ctx.params;
|
2739
|
-
const permissionChecker2 = getService$
|
2969
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2740
2970
|
const document = await createOrUpdateDocument(ctx);
|
2741
2971
|
const sanitizedDocument = await permissionChecker2.sanitizeOutput(document);
|
2742
2972
|
ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedDocument);
|
@@ -2745,8 +2975,8 @@ const singleTypes = {
|
|
2745
2975
|
const { userAbility } = ctx.state;
|
2746
2976
|
const { model } = ctx.params;
|
2747
2977
|
const { query = {} } = ctx.request;
|
2748
|
-
const documentManager2 = getService$
|
2749
|
-
const permissionChecker2 = getService$
|
2978
|
+
const documentManager2 = getService$2("document-manager");
|
2979
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2750
2980
|
if (permissionChecker2.cannot.delete()) {
|
2751
2981
|
return ctx.forbidden();
|
2752
2982
|
}
|
@@ -2774,8 +3004,8 @@ const singleTypes = {
|
|
2774
3004
|
const { userAbility } = ctx.state;
|
2775
3005
|
const { model } = ctx.params;
|
2776
3006
|
const { query = {} } = ctx.request;
|
2777
|
-
const documentManager2 = getService$
|
2778
|
-
const permissionChecker2 = getService$
|
3007
|
+
const documentManager2 = getService$2("document-manager");
|
3008
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2779
3009
|
if (permissionChecker2.cannot.publish()) {
|
2780
3010
|
return ctx.forbidden();
|
2781
3011
|
}
|
@@ -2803,8 +3033,8 @@ const singleTypes = {
|
|
2803
3033
|
body: { discardDraft, ...body },
|
2804
3034
|
query = {}
|
2805
3035
|
} = ctx.request;
|
2806
|
-
const documentManager2 = getService$
|
2807
|
-
const permissionChecker2 = getService$
|
3036
|
+
const documentManager2 = getService$2("document-manager");
|
3037
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2808
3038
|
if (permissionChecker2.cannot.unpublish()) {
|
2809
3039
|
return ctx.forbidden();
|
2810
3040
|
}
|
@@ -2838,8 +3068,8 @@ const singleTypes = {
|
|
2838
3068
|
const { userAbility } = ctx.state;
|
2839
3069
|
const { model } = ctx.params;
|
2840
3070
|
const { body, query = {} } = ctx.request;
|
2841
|
-
const documentManager2 = getService$
|
2842
|
-
const permissionChecker2 = getService$
|
3071
|
+
const documentManager2 = getService$2("document-manager");
|
3072
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2843
3073
|
if (permissionChecker2.cannot.discard()) {
|
2844
3074
|
return ctx.forbidden();
|
2845
3075
|
}
|
@@ -2862,8 +3092,8 @@ const singleTypes = {
|
|
2862
3092
|
const { userAbility } = ctx.state;
|
2863
3093
|
const { model } = ctx.params;
|
2864
3094
|
const { query } = ctx.request;
|
2865
|
-
const documentManager2 = getService$
|
2866
|
-
const permissionChecker2 = getService$
|
3095
|
+
const documentManager2 = getService$2("document-manager");
|
3096
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2867
3097
|
const { locale } = await getDocumentLocaleAndStatus(query, model);
|
2868
3098
|
if (permissionChecker2.cannot.read()) {
|
2869
3099
|
return ctx.forbidden();
|
@@ -2887,7 +3117,7 @@ const uid$1 = {
|
|
2887
3117
|
const { query = {} } = ctx.request;
|
2888
3118
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2889
3119
|
await validateUIDField(contentTypeUID, field);
|
2890
|
-
const uidService = getService$
|
3120
|
+
const uidService = getService$2("uid");
|
2891
3121
|
ctx.body = {
|
2892
3122
|
data: await uidService.generateUIDField({ contentTypeUID, field, data, locale })
|
2893
3123
|
};
|
@@ -2899,7 +3129,7 @@ const uid$1 = {
|
|
2899
3129
|
const { query = {} } = ctx.request;
|
2900
3130
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2901
3131
|
await validateUIDField(contentTypeUID, field);
|
2902
|
-
const uidService = getService$
|
3132
|
+
const uidService = getService$2("uid");
|
2903
3133
|
const isAvailable = await uidService.checkUIDAvailability({
|
2904
3134
|
contentTypeUID,
|
2905
3135
|
field,
|
@@ -2920,7 +3150,8 @@ const controllers = {
|
|
2920
3150
|
relations,
|
2921
3151
|
"single-types": singleTypes,
|
2922
3152
|
uid: uid$1,
|
2923
|
-
...history.controllers ? history.controllers : {}
|
3153
|
+
...history.controllers ? history.controllers : {},
|
3154
|
+
...preview.controllers ? preview.controllers : {}
|
2924
3155
|
};
|
2925
3156
|
const keys = {
|
2926
3157
|
CONFIGURATION: "configuration"
|
@@ -3071,12 +3302,12 @@ async function syncMetadatas(configuration, schema) {
|
|
3071
3302
|
return ___default.default.assign(metasWithDefaults, updatedMetas);
|
3072
3303
|
}
|
3073
3304
|
const getTargetSchema = (targetModel) => {
|
3074
|
-
return getService$
|
3305
|
+
return getService$2("content-types").findContentType(targetModel);
|
3075
3306
|
};
|
3076
3307
|
const DEFAULT_LIST_LENGTH = 4;
|
3077
3308
|
const MAX_ROW_SIZE = 12;
|
3078
3309
|
const isAllowedFieldSize = (type, size) => {
|
3079
|
-
const { getFieldSize } = getService$
|
3310
|
+
const { getFieldSize } = getService$2("field-sizes");
|
3080
3311
|
const fieldSize = getFieldSize(type);
|
3081
3312
|
if (!fieldSize.isResizable && size !== fieldSize.default) {
|
3082
3313
|
return false;
|
@@ -3084,7 +3315,7 @@ const isAllowedFieldSize = (type, size) => {
|
|
3084
3315
|
return size <= MAX_ROW_SIZE;
|
3085
3316
|
};
|
3086
3317
|
const getDefaultFieldSize = (attribute) => {
|
3087
|
-
const { hasFieldSize, getFieldSize } = getService$
|
3318
|
+
const { hasFieldSize, getFieldSize } = getService$2("field-sizes");
|
3088
3319
|
return getFieldSize(hasFieldSize(attribute.customField) ? attribute.customField : attribute.type).default;
|
3089
3320
|
};
|
3090
3321
|
async function createDefaultLayouts(schema) {
|
@@ -3119,7 +3350,7 @@ function syncLayouts(configuration, schema) {
|
|
3119
3350
|
for (const el of row) {
|
3120
3351
|
if (!hasEditableAttribute(schema, el.name))
|
3121
3352
|
continue;
|
3122
|
-
const { hasFieldSize } = getService$
|
3353
|
+
const { hasFieldSize } = getService$2("field-sizes");
|
3123
3354
|
const fieldType = hasFieldSize(schema.attributes[el.name].customField) ? schema.attributes[el.name].customField : schema.attributes[el.name].type;
|
3124
3355
|
if (!isAllowedFieldSize(fieldType, el.size)) {
|
3125
3356
|
elementsToReAppend.push(el.name);
|
@@ -3259,17 +3490,17 @@ const configurationService$1 = createConfigurationService({
|
|
3259
3490
|
isComponent: true,
|
3260
3491
|
prefix: STORE_KEY_PREFIX,
|
3261
3492
|
getModels() {
|
3262
|
-
const { toContentManagerModel } = getService$
|
3493
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3263
3494
|
return fp.mapValues(toContentManagerModel, strapi.components);
|
3264
3495
|
}
|
3265
3496
|
});
|
3266
3497
|
const components = ({ strapi: strapi2 }) => ({
|
3267
3498
|
findAllComponents() {
|
3268
|
-
const { toContentManagerModel } = getService$
|
3499
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3269
3500
|
return Object.values(strapi2.components).map(toContentManagerModel);
|
3270
3501
|
},
|
3271
3502
|
findComponent(uid2) {
|
3272
|
-
const { toContentManagerModel } = getService$
|
3503
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3273
3504
|
const component = strapi2.components[uid2];
|
3274
3505
|
return fp.isNil(component) ? component : toContentManagerModel(component);
|
3275
3506
|
},
|
@@ -3320,17 +3551,17 @@ const configurationService = createConfigurationService({
|
|
3320
3551
|
storeUtils,
|
3321
3552
|
prefix: "content_types",
|
3322
3553
|
getModels() {
|
3323
|
-
const { toContentManagerModel } = getService$
|
3554
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3324
3555
|
return fp.mapValues(toContentManagerModel, strapi.contentTypes);
|
3325
3556
|
}
|
3326
3557
|
});
|
3327
3558
|
const service = ({ strapi: strapi2 }) => ({
|
3328
3559
|
findAllContentTypes() {
|
3329
|
-
const { toContentManagerModel } = getService$
|
3560
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3330
3561
|
return Object.values(strapi2.contentTypes).map(toContentManagerModel);
|
3331
3562
|
},
|
3332
3563
|
findContentType(uid2) {
|
3333
|
-
const { toContentManagerModel } = getService$
|
3564
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3334
3565
|
const contentType = strapi2.contentTypes[uid2];
|
3335
3566
|
return fp.isNil(contentType) ? contentType : toContentManagerModel(contentType);
|
3336
3567
|
},
|
@@ -3359,7 +3590,7 @@ const service = ({ strapi: strapi2 }) => ({
|
|
3359
3590
|
return this.findConfiguration(contentType);
|
3360
3591
|
},
|
3361
3592
|
findComponentsConfigurations(contentType) {
|
3362
|
-
return getService$
|
3593
|
+
return getService$2("components").findComponentsConfigurations(contentType);
|
3363
3594
|
},
|
3364
3595
|
syncConfigurations() {
|
3365
3596
|
return configurationService.syncConfigurations();
|
@@ -3631,7 +3862,7 @@ const permission = ({ strapi: strapi2 }) => ({
|
|
3631
3862
|
return userAbility.can(action);
|
3632
3863
|
},
|
3633
3864
|
async registerPermissions() {
|
3634
|
-
const displayedContentTypes = getService$
|
3865
|
+
const displayedContentTypes = getService$2("content-types").findDisplayedContentTypes();
|
3635
3866
|
const contentTypesUids = displayedContentTypes.map(fp.prop("uid"));
|
3636
3867
|
const actions = [
|
3637
3868
|
{
|
@@ -3907,7 +4138,7 @@ const getQueryPopulate = async (uid2, query) => {
|
|
3907
4138
|
return populateQuery;
|
3908
4139
|
};
|
3909
4140
|
const buildDeepPopulate = (uid2) => {
|
3910
|
-
return getService$
|
4141
|
+
return getService$2("populate-builder")(uid2).populateDeep(Infinity).countRelations().build();
|
3911
4142
|
};
|
3912
4143
|
const populateBuilder = (uid2) => {
|
3913
4144
|
let getInitialPopulate = async () => {
|
@@ -4092,7 +4323,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4092
4323
|
*/
|
4093
4324
|
async getAvailableLocales(uid2, version, allVersions, validatableFields = []) {
|
4094
4325
|
const versionsByLocale = fp.groupBy("locale", allVersions);
|
4095
|
-
|
4326
|
+
if (version.locale) {
|
4327
|
+
delete versionsByLocale[version.locale];
|
4328
|
+
}
|
4096
4329
|
const model = strapi2.getModel(uid2);
|
4097
4330
|
const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
|
4098
4331
|
const traversalFunction = async (localeVersion) => strapiUtils.traverseEntity(
|
@@ -4448,7 +4681,8 @@ const services = {
|
|
4448
4681
|
permission,
|
4449
4682
|
"populate-builder": populateBuilder$1,
|
4450
4683
|
uid,
|
4451
|
-
...history.services ? history.services : {}
|
4684
|
+
...history.services ? history.services : {},
|
4685
|
+
...preview.services ? preview.services : {}
|
4452
4686
|
};
|
4453
4687
|
const index = () => {
|
4454
4688
|
return {
|