@strapi/content-manager 0.0.0-experimental.fd55b75e545ef2b5c16b5f49a04e0db294663d8d → 0.0.0-experimental.fdacf4285d1cada9d94ab4dcd756c5362cba1b54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{ComponentConfigurationPage-gsCd80MU.js → ComponentConfigurationPage-CI7K072v.js} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-gsCd80MU.js.map → ComponentConfigurationPage-CI7K072v.js.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-CIjXcRAB.mjs → ComponentConfigurationPage-CVfoYQ9p.mjs} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-CIjXcRAB.mjs.map → ComponentConfigurationPage-CVfoYQ9p.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-BglmD_BF.mjs → EditConfigurationPage-Cg1Esg_N.mjs} +4 -4
- package/dist/_chunks/{EditConfigurationPage-BglmD_BF.mjs.map → EditConfigurationPage-Cg1Esg_N.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-DHDQKBzw.js → EditConfigurationPage-CtnhGgIx.js} +4 -4
- package/dist/_chunks/{EditConfigurationPage-DHDQKBzw.js.map → EditConfigurationPage-CtnhGgIx.js.map} +1 -1
- package/dist/_chunks/{EditViewPage-CiwVPMaK.mjs → EditViewPage-C_iuCG0Z.mjs} +11 -3
- package/dist/_chunks/{EditViewPage-CiwVPMaK.mjs.map → EditViewPage-C_iuCG0Z.mjs.map} +1 -1
- package/dist/_chunks/{EditViewPage-C4iTxUPU.js → EditViewPage-MURPhGdY.js} +11 -3
- package/dist/_chunks/{EditViewPage-C4iTxUPU.js.map → EditViewPage-MURPhGdY.js.map} +1 -1
- package/dist/_chunks/{Field-DIjL1b5d.mjs → Field-55cGR9kd.mjs} +4 -4
- package/dist/_chunks/{Field-DIjL1b5d.mjs.map → Field-55cGR9kd.mjs.map} +1 -1
- package/dist/_chunks/{Field-DhXEK8y1.js → Field-D1c7z74Q.js} +4 -4
- package/dist/_chunks/{Field-DhXEK8y1.js.map → Field-D1c7z74Q.js.map} +1 -1
- package/dist/_chunks/{Form-CwmJ4sWe.js → Form-D1cecnu3.js} +2 -2
- package/dist/_chunks/{Form-CwmJ4sWe.js.map → Form-D1cecnu3.js.map} +1 -1
- package/dist/_chunks/{Form-CmNesrvR.mjs → Form-oLrvgmvM.mjs} +2 -2
- package/dist/_chunks/{Form-CmNesrvR.mjs.map → Form-oLrvgmvM.mjs.map} +1 -1
- package/dist/_chunks/{History-D-99Wh30.mjs → History-5VbTZWYl.mjs} +5 -5
- package/dist/_chunks/History-5VbTZWYl.mjs.map +1 -0
- package/dist/_chunks/{History-BLCCNgCt.js → History-DJpjbGJZ.js} +5 -5
- package/dist/_chunks/History-DJpjbGJZ.js.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-JPWZz7Kg.mjs → ListConfigurationPage-BNs0g27c.mjs} +3 -3
- package/dist/_chunks/{ListConfigurationPage-JPWZz7Kg.mjs.map → ListConfigurationPage-BNs0g27c.mjs.map} +1 -1
- package/dist/_chunks/{ListConfigurationPage-DxWpeZrO.js → ListConfigurationPage-DylRESaU.js} +3 -3
- package/dist/_chunks/{ListConfigurationPage-DxWpeZrO.js.map → ListConfigurationPage-DylRESaU.js.map} +1 -1
- package/dist/_chunks/{ListViewPage-DSK3f0ST.mjs → ListViewPage-DelIyZ5D.mjs} +4 -15
- package/dist/_chunks/{ListViewPage-DSK3f0ST.mjs.map → ListViewPage-DelIyZ5D.mjs.map} +1 -1
- package/dist/_chunks/{ListViewPage-CIQekSFz.js → ListViewPage-MbdmfkXa.js} +4 -15
- package/dist/_chunks/ListViewPage-MbdmfkXa.js.map +1 -0
- package/dist/_chunks/{NoContentTypePage-C5cxKvC2.js → NoContentTypePage-BDQ1MdsC.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-C5cxKvC2.js.map → NoContentTypePage-BDQ1MdsC.js.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-D99LU1YP.mjs → NoContentTypePage-CoXa1X8-.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-D99LU1YP.mjs.map → NoContentTypePage-CoXa1X8-.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-Oy4tmUrW.js → NoPermissionsPage-CnnuMd2Y.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-Oy4tmUrW.js.map → NoPermissionsPage-CnnuMd2Y.js.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-DBrBw-0y.mjs → NoPermissionsPage-GgkDXRq3.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-DBrBw-0y.mjs.map → NoPermissionsPage-GgkDXRq3.mjs.map} +1 -1
- package/dist/_chunks/{Relations-BBmhcWFV.mjs → Relations-BKnC9peY.mjs} +17 -41
- package/dist/_chunks/Relations-BKnC9peY.mjs.map +1 -0
- package/dist/_chunks/{Relations-eG-9p_qS.js → Relations-DVeWgAT4.js} +16 -40
- package/dist/_chunks/Relations-DVeWgAT4.js.map +1 -0
- package/dist/_chunks/{index-BIWDoFLK.js → index-B9u01WiI.js} +21 -45
- package/dist/_chunks/index-B9u01WiI.js.map +1 -0
- package/dist/_chunks/{index-BrUzbQ30.mjs → index-jwACjpe1.mjs} +21 -44
- package/dist/_chunks/index-jwACjpe1.mjs.map +1 -0
- package/dist/_chunks/{layout-_5-cXs34.mjs → layout-D51YDRJV.mjs} +3 -3
- package/dist/_chunks/{layout-_5-cXs34.mjs.map → layout-D51YDRJV.mjs.map} +1 -1
- package/dist/_chunks/{layout-lMc9i1-Z.js → layout-DDtbDqUd.js} +3 -3
- package/dist/_chunks/{layout-lMc9i1-Z.js.map → layout-DDtbDqUd.js.map} +1 -1
- package/dist/_chunks/{objects-BcXOv6_9.js → objects-gigeqt7s.js} +4 -2
- package/dist/_chunks/{objects-BcXOv6_9.js.map → objects-gigeqt7s.js.map} +1 -1
- package/dist/_chunks/{objects-D6yBsdmx.mjs → objects-mKMAmfec.mjs} +4 -2
- package/dist/_chunks/{objects-D6yBsdmx.mjs.map → objects-mKMAmfec.mjs.map} +1 -1
- package/dist/_chunks/{relations-B_VLk-DD.mjs → relations-Bgc8jKKt.mjs} +7 -3
- package/dist/_chunks/relations-Bgc8jKKt.mjs.map +1 -0
- package/dist/_chunks/{relations-BRHithi8.js → relations-DtsF4GJw.js} +7 -3
- package/dist/_chunks/relations-DtsF4GJw.js.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/server/index.js +28 -114
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +28 -114
- 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 +1 -15
- package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +4 -4
- 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 +0 -2
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/package.json +6 -6
- package/dist/_chunks/History-BLCCNgCt.js.map +0 -1
- package/dist/_chunks/History-D-99Wh30.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-CIQekSFz.js.map +0 -1
- package/dist/_chunks/Relations-BBmhcWFV.mjs.map +0 -1
- package/dist/_chunks/Relations-eG-9p_qS.js.map +0 -1
- package/dist/_chunks/index-BIWDoFLK.js.map +0 -1
- package/dist/_chunks/index-BrUzbQ30.mjs.map +0 -1
- package/dist/_chunks/relations-BRHithi8.js.map +0 -1
- package/dist/_chunks/relations-B_VLk-DD.mjs.map +0 -1
- package/dist/admin/src/preview/constants.d.ts +0 -1
- package/dist/admin/src/preview/index.d.ts +0 -4
- package/dist/server/src/preview/constants.d.ts +0 -2
- package/dist/server/src/preview/constants.d.ts.map +0 -1
- package/dist/server/src/preview/controllers/index.d.ts +0 -2
- package/dist/server/src/preview/controllers/index.d.ts.map +0 -1
- package/dist/server/src/preview/controllers/preview.d.ts +0 -9
- package/dist/server/src/preview/controllers/preview.d.ts.map +0 -1
- package/dist/server/src/preview/index.d.ts +0 -4
- package/dist/server/src/preview/index.d.ts.map +0 -1
- package/dist/server/src/preview/routes/index.d.ts +0 -8
- package/dist/server/src/preview/routes/index.d.ts.map +0 -1
- package/dist/server/src/preview/routes/preview.d.ts +0 -4
- package/dist/server/src/preview/routes/preview.d.ts.map +0 -1
- package/dist/server/src/preview/services/index.d.ts +0 -4
- package/dist/server/src/preview/services/index.d.ts.map +0 -1
- package/dist/server/src/preview/services/preview.d.ts +0 -6
- package/dist/server/src/preview/services/preview.d.ts.map +0 -1
- package/dist/server/src/preview/utils.d.ts +0 -7
- package/dist/server/src/preview/utils.d.ts.map +0 -1
package/dist/admin/index.mjs
CHANGED
package/dist/server/index.js
CHANGED
@@ -121,7 +121,7 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
121
121
|
}
|
122
122
|
};
|
123
123
|
};
|
124
|
-
const controllers$
|
124
|
+
const controllers$1 = {
|
125
125
|
"history-version": createHistoryVersionController
|
126
126
|
/**
|
127
127
|
* Casting is needed because the types aren't aware that Strapi supports
|
@@ -620,17 +620,17 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
|
|
620
620
|
}
|
621
621
|
};
|
622
622
|
};
|
623
|
-
const services$
|
623
|
+
const services$1 = {
|
624
624
|
history: createHistoryService,
|
625
625
|
lifecycles: createLifecyclesService
|
626
626
|
};
|
627
|
-
const info
|
627
|
+
const info = { pluginName: "content-manager", type: "admin" };
|
628
628
|
const historyVersionRouter = {
|
629
629
|
type: "admin",
|
630
630
|
routes: [
|
631
631
|
{
|
632
632
|
method: "GET",
|
633
|
-
info
|
633
|
+
info,
|
634
634
|
path: "/history-versions",
|
635
635
|
handler: "history-version.findMany",
|
636
636
|
config: {
|
@@ -639,7 +639,7 @@ const historyVersionRouter = {
|
|
639
639
|
},
|
640
640
|
{
|
641
641
|
method: "PUT",
|
642
|
-
info
|
642
|
+
info,
|
643
643
|
path: "/history-versions/:versionId/restore",
|
644
644
|
handler: "history-version.restoreVersion",
|
645
645
|
config: {
|
@@ -648,7 +648,7 @@ const historyVersionRouter = {
|
|
648
648
|
}
|
649
649
|
]
|
650
650
|
};
|
651
|
-
const routes$
|
651
|
+
const routes$1 = {
|
652
652
|
"history-version": historyVersionRouter
|
653
653
|
};
|
654
654
|
const historyVersion = {
|
@@ -695,7 +695,7 @@ const historyVersion = {
|
|
695
695
|
}
|
696
696
|
}
|
697
697
|
};
|
698
|
-
const getFeature
|
698
|
+
const getFeature = () => {
|
699
699
|
if (strapi.ee.features.isEnabled("cms-content-history")) {
|
700
700
|
return {
|
701
701
|
register({ strapi: strapi2 }) {
|
@@ -707,9 +707,9 @@ const getFeature$1 = () => {
|
|
707
707
|
destroy({ strapi: strapi2 }) {
|
708
708
|
getService(strapi2, "lifecycles").destroy();
|
709
709
|
},
|
710
|
-
controllers: controllers$
|
711
|
-
services: services$
|
712
|
-
routes: routes$
|
710
|
+
controllers: controllers$1,
|
711
|
+
services: services$1,
|
712
|
+
routes: routes$1
|
713
713
|
};
|
714
714
|
}
|
715
715
|
return {
|
@@ -718,7 +718,7 @@ const getFeature$1 = () => {
|
|
718
718
|
}
|
719
719
|
};
|
720
720
|
};
|
721
|
-
const history = getFeature
|
721
|
+
const history = getFeature();
|
722
722
|
const register = async ({ strapi: strapi2 }) => {
|
723
723
|
await history.register?.({ strapi: strapi2 });
|
724
724
|
};
|
@@ -726,62 +726,6 @@ const ALLOWED_WEBHOOK_EVENTS = {
|
|
726
726
|
ENTRY_PUBLISH: "entry.publish",
|
727
727
|
ENTRY_UNPUBLISH: "entry.unpublish"
|
728
728
|
};
|
729
|
-
const FEATURE_ID = "preview";
|
730
|
-
const info = { pluginName: "content-manager", type: "admin" };
|
731
|
-
const previewRouter = {
|
732
|
-
type: "admin",
|
733
|
-
routes: [
|
734
|
-
{
|
735
|
-
method: "GET",
|
736
|
-
info,
|
737
|
-
path: "/preview/url/:contentType",
|
738
|
-
handler: "preview.getPreviewURL",
|
739
|
-
config: {
|
740
|
-
policies: ["admin::isAuthenticatedAdmin"]
|
741
|
-
}
|
742
|
-
}
|
743
|
-
]
|
744
|
-
};
|
745
|
-
const routes$1 = {
|
746
|
-
preview: previewRouter
|
747
|
-
};
|
748
|
-
const createPreviewController = () => {
|
749
|
-
return {
|
750
|
-
async getPreviewURL(ctx) {
|
751
|
-
ctx.request;
|
752
|
-
return {
|
753
|
-
data: { url: "" }
|
754
|
-
};
|
755
|
-
}
|
756
|
-
};
|
757
|
-
};
|
758
|
-
const controllers$1 = {
|
759
|
-
preview: createPreviewController
|
760
|
-
/**
|
761
|
-
* Casting is needed because the types aren't aware that Strapi supports
|
762
|
-
* passing a controller factory as the value, instead of a controller object directly
|
763
|
-
*/
|
764
|
-
};
|
765
|
-
const createPreviewService = () => {
|
766
|
-
};
|
767
|
-
const services$1 = {
|
768
|
-
preview: createPreviewService
|
769
|
-
};
|
770
|
-
const getFeature = () => {
|
771
|
-
if (!strapi.features.future.isEnabled(FEATURE_ID)) {
|
772
|
-
return {};
|
773
|
-
}
|
774
|
-
return {
|
775
|
-
bootstrap() {
|
776
|
-
console.log("Bootstrapping preview server");
|
777
|
-
strapi.config.get("admin.preview");
|
778
|
-
},
|
779
|
-
routes: routes$1,
|
780
|
-
controllers: controllers$1,
|
781
|
-
services: services$1
|
782
|
-
};
|
783
|
-
};
|
784
|
-
const preview = getFeature();
|
785
729
|
const bootstrap = async () => {
|
786
730
|
Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {
|
787
731
|
strapi.get("webhookStore").addAllowedEvent(key, value);
|
@@ -791,7 +735,6 @@ const bootstrap = async () => {
|
|
791
735
|
await getService$1("content-types").syncConfigurations();
|
792
736
|
await getService$1("permission").registerPermissions();
|
793
737
|
await history.bootstrap?.({ strapi });
|
794
|
-
await preview.bootstrap?.({ strapi });
|
795
738
|
};
|
796
739
|
const destroy = async ({ strapi: strapi2 }) => {
|
797
740
|
await history.destroy?.({ strapi: strapi2 });
|
@@ -1281,8 +1224,7 @@ const admin = {
|
|
1281
1224
|
};
|
1282
1225
|
const routes = {
|
1283
1226
|
admin,
|
1284
|
-
...history.routes ? history.routes : {}
|
1285
|
-
...preview.routes ? preview.routes : {}
|
1227
|
+
...history.routes ? history.routes : {}
|
1286
1228
|
};
|
1287
1229
|
const hasPermissionsSchema = strapiUtils.yup.object({
|
1288
1230
|
actions: strapiUtils.yup.array().of(strapiUtils.yup.string()),
|
@@ -2422,27 +2364,15 @@ const sanitizeMainField = (model, mainField, userAbility) => {
|
|
2422
2364
|
}
|
2423
2365
|
return mainField;
|
2424
2366
|
};
|
2425
|
-
const addStatusToRelations = async (
|
2426
|
-
if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.
|
2367
|
+
const addStatusToRelations = async (uid2, relations2) => {
|
2368
|
+
if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.contentTypes[uid2])) {
|
2427
2369
|
return relations2;
|
2428
2370
|
}
|
2429
2371
|
const documentMetadata2 = getService$1("document-metadata");
|
2430
|
-
|
2431
|
-
return relations2;
|
2432
|
-
}
|
2433
|
-
const firstRelation = relations2[0];
|
2434
|
-
const filters = {
|
2435
|
-
documentId: { $in: relations2.map((r) => r.documentId) },
|
2436
|
-
// NOTE: find the "opposite" status
|
2437
|
-
publishedAt: firstRelation.publishedAt !== null ? { $null: true } : { $notNull: true }
|
2438
|
-
};
|
2439
|
-
const availableStatus = await strapi.query(targetUid).findMany({
|
2440
|
-
select: ["id", "documentId", "locale", "updatedAt", "createdAt", "publishedAt"],
|
2441
|
-
filters
|
2442
|
-
});
|
2372
|
+
const documentsAvailableStatus = await documentMetadata2.getManyAvailableStatus(uid2, relations2);
|
2443
2373
|
return relations2.map((relation) => {
|
2444
|
-
const availableStatuses =
|
2445
|
-
(availableDocument) => availableDocument.documentId === relation.documentId
|
2374
|
+
const availableStatuses = documentsAvailableStatus.filter(
|
2375
|
+
(availableDocument) => availableDocument.documentId === relation.documentId
|
2446
2376
|
);
|
2447
2377
|
return {
|
2448
2378
|
...relation,
|
@@ -2671,33 +2601,21 @@ const relations = {
|
|
2671
2601
|
attribute,
|
2672
2602
|
targetField,
|
2673
2603
|
fieldsToSelect,
|
2674
|
-
|
2675
|
-
|
2676
|
-
|
2604
|
+
source: {
|
2605
|
+
schema: { uid: sourceUid }
|
2606
|
+
},
|
2607
|
+
target: {
|
2608
|
+
schema: { uid: targetUid }
|
2609
|
+
}
|
2677
2610
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2678
|
-
const { uid: sourceUid } = sourceSchema;
|
2679
|
-
const { uid: targetUid } = targetSchema;
|
2680
2611
|
const permissionQuery = await getService$1("permission-checker").create({ userAbility, model: targetUid }).sanitizedQuery.read({ fields: fieldsToSelect });
|
2681
2612
|
const dbQuery = strapi.db.query(sourceUid);
|
2682
2613
|
const loadRelations = strapiUtils.relations.isAnyToMany(attribute) ? (...args) => dbQuery.loadPages(...args) : (...args) => dbQuery.load(...args).then((res2) => ({ results: res2 ? [res2] : [] }));
|
2683
|
-
const filters = {};
|
2684
|
-
if (sourceSchema?.options?.draftAndPublish) {
|
2685
|
-
if (targetSchema?.options?.draftAndPublish) {
|
2686
|
-
if (status === "published") {
|
2687
|
-
filters.publishedAt = { $notNull: true };
|
2688
|
-
} else {
|
2689
|
-
filters.publishedAt = { $null: true };
|
2690
|
-
}
|
2691
|
-
}
|
2692
|
-
} else if (targetSchema?.options?.draftAndPublish) {
|
2693
|
-
filters.publishedAt = { $null: true };
|
2694
|
-
}
|
2695
2614
|
const res = await loadRelations({ id: entryId }, targetField, {
|
2696
|
-
select: ["id", "documentId", "locale", "publishedAt"
|
2615
|
+
select: ["id", "documentId", "locale", "publishedAt"],
|
2697
2616
|
ordering: "desc",
|
2698
2617
|
page: ctx.request.query.page,
|
2699
|
-
pageSize: ctx.request.query.pageSize
|
2700
|
-
filters
|
2618
|
+
pageSize: ctx.request.query.pageSize
|
2701
2619
|
});
|
2702
2620
|
const loadedIds = res.results.map((item) => item.id);
|
2703
2621
|
addFiltersClause(permissionQuery, { id: { $in: loadedIds } });
|
@@ -2989,8 +2907,7 @@ const controllers = {
|
|
2989
2907
|
relations,
|
2990
2908
|
"single-types": singleTypes,
|
2991
2909
|
uid: uid$1,
|
2992
|
-
...history.controllers ? history.controllers : {}
|
2993
|
-
...preview.controllers ? preview.controllers : {}
|
2910
|
+
...history.controllers ? history.controllers : {}
|
2994
2911
|
};
|
2995
2912
|
const keys = {
|
2996
2913
|
CONFIGURATION: "configuration"
|
@@ -4162,9 +4079,7 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4162
4079
|
*/
|
4163
4080
|
async getAvailableLocales(uid2, version, allVersions, validatableFields = []) {
|
4164
4081
|
const versionsByLocale = fp.groupBy("locale", allVersions);
|
4165
|
-
|
4166
|
-
delete versionsByLocale[version.locale];
|
4167
|
-
}
|
4082
|
+
delete versionsByLocale[version.locale];
|
4168
4083
|
const model = strapi2.getModel(uid2);
|
4169
4084
|
const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
|
4170
4085
|
const traversalFunction = async (localeVersion) => strapiUtils.traverseEntity(
|
@@ -4520,8 +4435,7 @@ const services = {
|
|
4520
4435
|
permission,
|
4521
4436
|
"populate-builder": populateBuilder$1,
|
4522
4437
|
uid,
|
4523
|
-
...history.services ? history.services : {}
|
4524
|
-
...preview.services ? preview.services : {}
|
4438
|
+
...history.services ? history.services : {}
|
4525
4439
|
};
|
4526
4440
|
const index = () => {
|
4527
4441
|
return {
|