@strapi/content-releases 5.0.0-rc.3 → 5.0.0-rc.30
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/{App-UQxgTJY5.mjs → App-BA2xDdy0.mjs} +43 -20
- package/dist/_chunks/App-BA2xDdy0.mjs.map +1 -0
- package/dist/_chunks/{App-D-lWdVb2.js → App-D4Wira1X.js} +42 -19
- package/dist/_chunks/App-D4Wira1X.js.map +1 -0
- package/dist/_chunks/{ReleasesSettingsPage-CuUXvABk.mjs → ReleasesSettingsPage-BAlbMWpw.mjs} +4 -4
- package/dist/_chunks/ReleasesSettingsPage-BAlbMWpw.mjs.map +1 -0
- package/dist/_chunks/{ReleasesSettingsPage-xfAoY8N3.js → ReleasesSettingsPage-xhFyRXCM.js} +4 -4
- package/dist/_chunks/ReleasesSettingsPage-xhFyRXCM.js.map +1 -0
- package/dist/_chunks/{en-BCDLTJn3.js → en-CmYoEnA7.js} +2 -1
- package/dist/_chunks/en-CmYoEnA7.js.map +1 -0
- package/dist/_chunks/{en-CGXIF4vQ.mjs → en-D0yVZFqf.mjs} +2 -1
- package/dist/_chunks/en-D0yVZFqf.mjs.map +1 -0
- package/dist/_chunks/{index-b3Ej95H7.mjs → index-CCFFG3Zs.mjs} +289 -23
- package/dist/_chunks/index-CCFFG3Zs.mjs.map +1 -0
- package/dist/_chunks/{index-jnv9zdcE.js → index-DxkQGp4N.js} +286 -20
- package/dist/_chunks/index-DxkQGp4N.js.map +1 -0
- package/dist/_chunks/{schemas-z5zp-_Gd.js → schemas-BE1LxE9J.js} +2 -2
- package/dist/_chunks/schemas-BE1LxE9J.js.map +1 -0
- package/dist/_chunks/{schemas-63pFihNF.mjs → schemas-DdA2ic2U.mjs} +2 -2
- package/dist/_chunks/schemas-DdA2ic2U.mjs.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/components/ReleaseListCell.d.ts +28 -0
- package/dist/admin/src/services/release.d.ts +34 -32
- package/dist/server/index.js +108 -79
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +108 -79
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/controllers/index.d.ts +2 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/release-action.d.ts +1 -0
- package/dist/server/src/controllers/release-action.d.ts.map +1 -1
- package/dist/server/src/controllers/release.d.ts +1 -0
- package/dist/server/src/controllers/release.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +4 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/routes/release-action.d.ts.map +1 -1
- package/dist/server/src/routes/release.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +2 -0
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/release-action.d.ts +3 -1
- package/dist/server/src/services/release-action.d.ts.map +1 -1
- package/dist/shared/contracts/release-actions.d.ts +3 -5
- package/dist/shared/contracts/release-actions.d.ts.map +1 -1
- package/dist/shared/contracts/releases.d.ts +3 -2
- package/dist/shared/contracts/releases.d.ts.map +1 -1
- package/package.json +12 -11
- package/dist/_chunks/App-D-lWdVb2.js.map +0 -1
- package/dist/_chunks/App-UQxgTJY5.mjs.map +0 -1
- package/dist/_chunks/ReleasesSettingsPage-CuUXvABk.mjs.map +0 -1
- package/dist/_chunks/ReleasesSettingsPage-xfAoY8N3.js.map +0 -1
- package/dist/_chunks/en-BCDLTJn3.js.map +0 -1
- package/dist/_chunks/en-CGXIF4vQ.mjs.map +0 -1
- package/dist/_chunks/index-b3Ej95H7.mjs.map +0 -1
- package/dist/_chunks/index-jnv9zdcE.js.map +0 -1
- package/dist/_chunks/schemas-63pFihNF.mjs.map +0 -1
- package/dist/_chunks/schemas-z5zp-_Gd.js.map +0 -1
- package/strapi-server.js +0 -3
package/dist/server/index.js
CHANGED
|
@@ -929,7 +929,7 @@ const createReleaseActionService = ({ strapi: strapi2 }) => {
|
|
|
929
929
|
return contentTypesData;
|
|
930
930
|
};
|
|
931
931
|
return {
|
|
932
|
-
async create(releaseId, action) {
|
|
932
|
+
async create(releaseId, action, { disableUpdateReleaseStatus = false } = {}) {
|
|
933
933
|
const { validateEntryData, validateUniqueEntry } = getService("release-validation", {
|
|
934
934
|
strapi: strapi2
|
|
935
935
|
});
|
|
@@ -937,6 +937,14 @@ const createReleaseActionService = ({ strapi: strapi2 }) => {
|
|
|
937
937
|
validateEntryData(action.contentType, action.entryDocumentId),
|
|
938
938
|
validateUniqueEntry(releaseId, action)
|
|
939
939
|
]);
|
|
940
|
+
const model = strapi2.contentType(action.contentType);
|
|
941
|
+
if (model.kind === "singleType") {
|
|
942
|
+
const document = await strapi2.db.query(model.uid).findOne({ select: ["documentId"] });
|
|
943
|
+
if (!document) {
|
|
944
|
+
throw new utils.errors.NotFoundError(`No entry found for contentType ${action.contentType}`);
|
|
945
|
+
}
|
|
946
|
+
action.entryDocumentId = document.documentId;
|
|
947
|
+
}
|
|
940
948
|
const release2 = await strapi2.db.query(RELEASE_MODEL_UID).findOne({ where: { id: releaseId } });
|
|
941
949
|
if (!release2) {
|
|
942
950
|
throw new utils.errors.NotFoundError(`No release found for id ${releaseId}`);
|
|
@@ -962,7 +970,9 @@ const createReleaseActionService = ({ strapi: strapi2 }) => {
|
|
|
962
970
|
},
|
|
963
971
|
populate: { release: { select: ["id"] } }
|
|
964
972
|
});
|
|
965
|
-
|
|
973
|
+
if (!disableUpdateReleaseStatus) {
|
|
974
|
+
getService("release", { strapi: strapi2 }).updateReleaseStatus(release2.id);
|
|
975
|
+
}
|
|
966
976
|
return releaseAction2;
|
|
967
977
|
},
|
|
968
978
|
async findPage(releaseId, query) {
|
|
@@ -1065,7 +1075,7 @@ const createReleaseActionService = ({ strapi: strapi2 }) => {
|
|
|
1065
1075
|
`Action with id ${actionId} not found in release with id ${releaseId} or it is already published`
|
|
1066
1076
|
);
|
|
1067
1077
|
}
|
|
1068
|
-
const actionStatus = update.type === "publish" ? getDraftEntryValidStatus(
|
|
1078
|
+
const actionStatus = update.type === "publish" ? await getDraftEntryValidStatus(
|
|
1069
1079
|
{
|
|
1070
1080
|
contentType: action.contentType,
|
|
1071
1081
|
documentId: action.entryDocumentId,
|
|
@@ -1135,11 +1145,11 @@ const createReleaseValidationService = ({ strapi: strapi2 }) => ({
|
|
|
1135
1145
|
throw new utils.errors.NotFoundError(`No release found for id ${releaseId}`);
|
|
1136
1146
|
}
|
|
1137
1147
|
const isEntryInRelease = release2.actions.some(
|
|
1138
|
-
(action) =>
|
|
1148
|
+
(action) => action.entryDocumentId === releaseActionArgs.entryDocumentId && action.contentType === releaseActionArgs.contentType && (releaseActionArgs.locale ? action.locale === releaseActionArgs.locale : true)
|
|
1139
1149
|
);
|
|
1140
1150
|
if (isEntryInRelease) {
|
|
1141
1151
|
throw new AlreadyOnReleaseError(
|
|
1142
|
-
`Entry with documentId ${releaseActionArgs.entryDocumentId}
|
|
1152
|
+
`Entry with documentId ${releaseActionArgs.entryDocumentId}${releaseActionArgs.locale ? `( ${releaseActionArgs.locale})` : ""} and contentType ${releaseActionArgs.contentType} already exists in release with id ${releaseId}`
|
|
1143
1153
|
);
|
|
1144
1154
|
}
|
|
1145
1155
|
},
|
|
@@ -1306,7 +1316,15 @@ const releaseController = {
|
|
|
1306
1316
|
const releaseService = getService("release", { strapi });
|
|
1307
1317
|
const query = await permissionsManager.sanitizeQuery(ctx.query);
|
|
1308
1318
|
await validatefindByDocumentAttachedParams(query);
|
|
1309
|
-
const
|
|
1319
|
+
const model = strapi.getModel(query.contentType);
|
|
1320
|
+
if (model.kind && model.kind === "singleType") {
|
|
1321
|
+
const document = await strapi.db.query(model.uid).findOne({ select: ["documentId"] });
|
|
1322
|
+
if (!document) {
|
|
1323
|
+
throw new utils.errors.NotFoundError(`No entry found for contentType ${query.contentType}`);
|
|
1324
|
+
}
|
|
1325
|
+
query.entryDocumentId = document.documentId;
|
|
1326
|
+
}
|
|
1327
|
+
const { contentType, hasEntryAttached, entryDocumentId, locale } = query;
|
|
1310
1328
|
const isEntryAttached = typeof hasEntryAttached === "string" ? Boolean(JSON.parse(hasEntryAttached)) : false;
|
|
1311
1329
|
if (isEntryAttached) {
|
|
1312
1330
|
const releases = await releaseService.findMany({
|
|
@@ -1320,7 +1338,12 @@ const releaseController = {
|
|
|
1320
1338
|
},
|
|
1321
1339
|
populate: {
|
|
1322
1340
|
actions: {
|
|
1323
|
-
fields: ["type"]
|
|
1341
|
+
fields: ["type"],
|
|
1342
|
+
filters: {
|
|
1343
|
+
contentType,
|
|
1344
|
+
entryDocumentId: entryDocumentId ?? null,
|
|
1345
|
+
locale: locale ?? null
|
|
1346
|
+
}
|
|
1324
1347
|
}
|
|
1325
1348
|
}
|
|
1326
1349
|
});
|
|
@@ -1408,43 +1431,50 @@ const releaseController = {
|
|
|
1408
1431
|
};
|
|
1409
1432
|
ctx.body = { data };
|
|
1410
1433
|
},
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1434
|
+
async mapEntriesToReleases(ctx) {
|
|
1435
|
+
const { contentTypeUid, documentIds, locale } = ctx.query;
|
|
1436
|
+
if (!contentTypeUid || !documentIds) {
|
|
1437
|
+
throw new utils.errors.ValidationError("Missing required query parameters");
|
|
1438
|
+
}
|
|
1439
|
+
const releaseService = getService("release", { strapi });
|
|
1440
|
+
const releasesWithActions = await releaseService.findMany({
|
|
1441
|
+
where: {
|
|
1442
|
+
releasedAt: null,
|
|
1443
|
+
actions: {
|
|
1444
|
+
contentType: contentTypeUid,
|
|
1445
|
+
entryDocumentId: {
|
|
1446
|
+
$in: documentIds
|
|
1447
|
+
},
|
|
1448
|
+
locale
|
|
1449
|
+
}
|
|
1450
|
+
},
|
|
1451
|
+
populate: {
|
|
1452
|
+
actions: true
|
|
1417
1453
|
}
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
ctx.body = {
|
|
1444
|
-
data: mappedEntriesInReleases,
|
|
1445
|
-
};
|
|
1446
|
-
},
|
|
1447
|
-
*/
|
|
1454
|
+
});
|
|
1455
|
+
const mappedEntriesInReleases = releasesWithActions.reduce(
|
|
1456
|
+
(acc, release2) => {
|
|
1457
|
+
release2.actions.forEach((action) => {
|
|
1458
|
+
if (action.contentType !== contentTypeUid) {
|
|
1459
|
+
return;
|
|
1460
|
+
}
|
|
1461
|
+
if (locale && action.locale !== locale) {
|
|
1462
|
+
return;
|
|
1463
|
+
}
|
|
1464
|
+
if (!acc[action.entryDocumentId]) {
|
|
1465
|
+
acc[action.entryDocumentId] = [{ id: release2.id, name: release2.name }];
|
|
1466
|
+
} else {
|
|
1467
|
+
acc[action.entryDocumentId].push({ id: release2.id, name: release2.name });
|
|
1468
|
+
}
|
|
1469
|
+
});
|
|
1470
|
+
return acc;
|
|
1471
|
+
},
|
|
1472
|
+
{}
|
|
1473
|
+
);
|
|
1474
|
+
ctx.body = {
|
|
1475
|
+
data: mappedEntriesInReleases
|
|
1476
|
+
};
|
|
1477
|
+
},
|
|
1448
1478
|
async create(ctx) {
|
|
1449
1479
|
const user = ctx.state.user;
|
|
1450
1480
|
const releaseArgs = ctx.request.body;
|
|
@@ -1537,22 +1567,23 @@ const releaseActionController = {
|
|
|
1537
1567
|
data: releaseAction2
|
|
1538
1568
|
});
|
|
1539
1569
|
},
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
const
|
|
1543
|
-
const releaseActionsArgs = ctx.request.body as CreateManyReleaseActions.Request['body'];
|
|
1570
|
+
async createMany(ctx) {
|
|
1571
|
+
const releaseId = ctx.params.releaseId;
|
|
1572
|
+
const releaseActionsArgs = ctx.request.body;
|
|
1544
1573
|
await Promise.all(
|
|
1545
1574
|
releaseActionsArgs.map((releaseActionArgs) => validateReleaseAction(releaseActionArgs))
|
|
1546
1575
|
);
|
|
1547
|
-
const releaseActionService = getService(
|
|
1576
|
+
const releaseActionService = getService("release-action", { strapi });
|
|
1577
|
+
const releaseService = getService("release", { strapi });
|
|
1548
1578
|
const releaseActions = await strapi.db.transaction(async () => {
|
|
1549
|
-
const
|
|
1579
|
+
const releaseActions2 = await Promise.all(
|
|
1550
1580
|
releaseActionsArgs.map(async (releaseActionArgs) => {
|
|
1551
1581
|
try {
|
|
1552
|
-
const action = await releaseActionService.create(releaseId, releaseActionArgs
|
|
1582
|
+
const action = await releaseActionService.create(releaseId, releaseActionArgs, {
|
|
1583
|
+
disableUpdateReleaseStatus: true
|
|
1584
|
+
});
|
|
1553
1585
|
return action;
|
|
1554
1586
|
} catch (error) {
|
|
1555
|
-
// If the entry is already in the release, we don't want to throw an error, so we catch and ignore it
|
|
1556
1587
|
if (error instanceof AlreadyOnReleaseError) {
|
|
1557
1588
|
return null;
|
|
1558
1589
|
}
|
|
@@ -1560,18 +1591,20 @@ const releaseActionController = {
|
|
|
1560
1591
|
}
|
|
1561
1592
|
})
|
|
1562
1593
|
);
|
|
1563
|
-
return
|
|
1594
|
+
return releaseActions2;
|
|
1564
1595
|
});
|
|
1565
1596
|
const newReleaseActions = releaseActions.filter((action) => action !== null);
|
|
1597
|
+
if (newReleaseActions.length > 0) {
|
|
1598
|
+
releaseService.updateReleaseStatus(releaseId);
|
|
1599
|
+
}
|
|
1566
1600
|
ctx.created({
|
|
1567
1601
|
data: newReleaseActions,
|
|
1568
1602
|
meta: {
|
|
1569
1603
|
entriesAlreadyInRelease: releaseActions.length - newReleaseActions.length,
|
|
1570
|
-
totalEntries: releaseActions.length
|
|
1571
|
-
}
|
|
1604
|
+
totalEntries: releaseActions.length
|
|
1605
|
+
}
|
|
1572
1606
|
});
|
|
1573
1607
|
},
|
|
1574
|
-
*/
|
|
1575
1608
|
async findMany(ctx) {
|
|
1576
1609
|
const releaseId = ctx.params.releaseId;
|
|
1577
1610
|
const permissionsManager = strapi.service("admin::permission").createPermissionsManager({
|
|
@@ -1670,24 +1703,22 @@ const controllers = {
|
|
|
1670
1703
|
const release = {
|
|
1671
1704
|
type: "admin",
|
|
1672
1705
|
routes: [
|
|
1673
|
-
/*
|
|
1674
1706
|
{
|
|
1675
|
-
method:
|
|
1676
|
-
path:
|
|
1677
|
-
handler:
|
|
1707
|
+
method: "GET",
|
|
1708
|
+
path: "/mapEntriesToReleases",
|
|
1709
|
+
handler: "release.mapEntriesToReleases",
|
|
1678
1710
|
config: {
|
|
1679
1711
|
policies: [
|
|
1680
|
-
|
|
1712
|
+
"admin::isAuthenticatedAdmin",
|
|
1681
1713
|
{
|
|
1682
|
-
name:
|
|
1714
|
+
name: "admin::hasPermissions",
|
|
1683
1715
|
config: {
|
|
1684
|
-
actions: [
|
|
1685
|
-
}
|
|
1686
|
-
}
|
|
1687
|
-
]
|
|
1688
|
-
}
|
|
1716
|
+
actions: ["plugin::content-releases.read"]
|
|
1717
|
+
}
|
|
1718
|
+
}
|
|
1719
|
+
]
|
|
1720
|
+
}
|
|
1689
1721
|
},
|
|
1690
|
-
*/
|
|
1691
1722
|
{
|
|
1692
1723
|
method: "GET",
|
|
1693
1724
|
path: "/getByDocumentAttached",
|
|
@@ -1821,24 +1852,22 @@ const releaseAction = {
|
|
|
1821
1852
|
]
|
|
1822
1853
|
}
|
|
1823
1854
|
},
|
|
1824
|
-
/*
|
|
1825
1855
|
{
|
|
1826
|
-
method:
|
|
1827
|
-
path:
|
|
1828
|
-
handler:
|
|
1856
|
+
method: "POST",
|
|
1857
|
+
path: "/:releaseId/actions/bulk",
|
|
1858
|
+
handler: "release-action.createMany",
|
|
1829
1859
|
config: {
|
|
1830
1860
|
policies: [
|
|
1831
|
-
|
|
1861
|
+
"admin::isAuthenticatedAdmin",
|
|
1832
1862
|
{
|
|
1833
|
-
name:
|
|
1863
|
+
name: "admin::hasPermissions",
|
|
1834
1864
|
config: {
|
|
1835
|
-
actions: [
|
|
1836
|
-
}
|
|
1837
|
-
}
|
|
1838
|
-
]
|
|
1839
|
-
}
|
|
1865
|
+
actions: ["plugin::content-releases.create-action"]
|
|
1866
|
+
}
|
|
1867
|
+
}
|
|
1868
|
+
]
|
|
1869
|
+
}
|
|
1840
1870
|
},
|
|
1841
|
-
*/
|
|
1842
1871
|
{
|
|
1843
1872
|
method: "GET",
|
|
1844
1873
|
path: "/:releaseId/actions",
|