@strapi/content-releases 0.0.0-experimental.edc24aaa3bb5a90fa5fd4fee208167dd4e2e38d4 → 0.0.0-experimental.f0d3b2d782e972f1dcb8acf0dce31d4090d1e420

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.
Files changed (59) hide show
  1. package/dist/_chunks/{App-D-lWdVb2.js → App-BKB1esYS.js} +42 -19
  2. package/dist/_chunks/App-BKB1esYS.js.map +1 -0
  3. package/dist/_chunks/{App-UQxgTJY5.mjs → App-Cne--1Z8.mjs} +43 -20
  4. package/dist/_chunks/App-Cne--1Z8.mjs.map +1 -0
  5. package/dist/_chunks/{ReleasesSettingsPage-CuUXvABk.mjs → ReleasesSettingsPage-C1WwGWIH.mjs} +4 -4
  6. package/dist/_chunks/ReleasesSettingsPage-C1WwGWIH.mjs.map +1 -0
  7. package/dist/_chunks/{ReleasesSettingsPage-xfAoY8N3.js → ReleasesSettingsPage-kuXIwpWp.js} +4 -4
  8. package/dist/_chunks/ReleasesSettingsPage-kuXIwpWp.js.map +1 -0
  9. package/dist/_chunks/{en-BCDLTJn3.js → en-CmYoEnA7.js} +2 -1
  10. package/dist/_chunks/en-CmYoEnA7.js.map +1 -0
  11. package/dist/_chunks/{en-CGXIF4vQ.mjs → en-D0yVZFqf.mjs} +2 -1
  12. package/dist/_chunks/en-D0yVZFqf.mjs.map +1 -0
  13. package/dist/_chunks/{index-jnv9zdcE.js → index-5Odi61vw.js} +286 -23
  14. package/dist/_chunks/index-5Odi61vw.js.map +1 -0
  15. package/dist/_chunks/{index-b3Ej95H7.mjs → index-Cy7qwpaU.mjs} +289 -26
  16. package/dist/_chunks/index-Cy7qwpaU.mjs.map +1 -0
  17. package/dist/_chunks/{schemas-z5zp-_Gd.js → schemas-BE1LxE9J.js} +2 -2
  18. package/dist/_chunks/schemas-BE1LxE9J.js.map +1 -0
  19. package/dist/_chunks/{schemas-63pFihNF.mjs → schemas-DdA2ic2U.mjs} +2 -2
  20. package/dist/_chunks/schemas-DdA2ic2U.mjs.map +1 -0
  21. package/dist/admin/index.js +1 -1
  22. package/dist/admin/index.mjs +1 -1
  23. package/dist/admin/src/components/ReleaseListCell.d.ts +28 -0
  24. package/dist/admin/src/services/release.d.ts +34 -32
  25. package/dist/server/index.js +112 -79
  26. package/dist/server/index.js.map +1 -1
  27. package/dist/server/index.mjs +112 -79
  28. package/dist/server/index.mjs.map +1 -1
  29. package/dist/server/src/controllers/index.d.ts +2 -0
  30. package/dist/server/src/controllers/index.d.ts.map +1 -1
  31. package/dist/server/src/controllers/release-action.d.ts +1 -0
  32. package/dist/server/src/controllers/release-action.d.ts.map +1 -1
  33. package/dist/server/src/controllers/release.d.ts +1 -0
  34. package/dist/server/src/controllers/release.d.ts.map +1 -1
  35. package/dist/server/src/index.d.ts +4 -0
  36. package/dist/server/src/index.d.ts.map +1 -1
  37. package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts.map +1 -1
  38. package/dist/server/src/routes/release-action.d.ts.map +1 -1
  39. package/dist/server/src/routes/release.d.ts.map +1 -1
  40. package/dist/server/src/services/index.d.ts +2 -0
  41. package/dist/server/src/services/index.d.ts.map +1 -1
  42. package/dist/server/src/services/release-action.d.ts +3 -1
  43. package/dist/server/src/services/release-action.d.ts.map +1 -1
  44. package/dist/shared/contracts/release-actions.d.ts +3 -5
  45. package/dist/shared/contracts/release-actions.d.ts.map +1 -1
  46. package/dist/shared/contracts/releases.d.ts +3 -2
  47. package/dist/shared/contracts/releases.d.ts.map +1 -1
  48. package/package.json +16 -15
  49. package/dist/_chunks/App-D-lWdVb2.js.map +0 -1
  50. package/dist/_chunks/App-UQxgTJY5.mjs.map +0 -1
  51. package/dist/_chunks/ReleasesSettingsPage-CuUXvABk.mjs.map +0 -1
  52. package/dist/_chunks/ReleasesSettingsPage-xfAoY8N3.js.map +0 -1
  53. package/dist/_chunks/en-BCDLTJn3.js.map +0 -1
  54. package/dist/_chunks/en-CGXIF4vQ.mjs.map +0 -1
  55. package/dist/_chunks/index-b3Ej95H7.mjs.map +0 -1
  56. package/dist/_chunks/index-jnv9zdcE.js.map +0 -1
  57. package/dist/_chunks/schemas-63pFihNF.mjs.map +0 -1
  58. package/dist/_chunks/schemas-z5zp-_Gd.js.map +0 -1
  59. package/strapi-server.js +0 -3
@@ -329,6 +329,10 @@ async function enableContentTypeLocalized({ oldContentTypes, contentTypes: conte
329
329
  const addEntryDocumentToReleaseActions = {
330
330
  name: "content-releases::5.0.0-add-entry-document-id-to-release-actions",
331
331
  async up(trx, db) {
332
+ const hasTable = await trx.schema.hasTable("strapi_release_actions");
333
+ if (!hasTable) {
334
+ return;
335
+ }
332
336
  const hasPolymorphicColumn = await trx.schema.hasColumn("strapi_release_actions", "target_id");
333
337
  if (hasPolymorphicColumn) {
334
338
  const hasEntryDocumentIdColumn = await trx.schema.hasColumn(
@@ -929,7 +933,7 @@ const createReleaseActionService = ({ strapi: strapi2 }) => {
929
933
  return contentTypesData;
930
934
  };
931
935
  return {
932
- async create(releaseId, action) {
936
+ async create(releaseId, action, { disableUpdateReleaseStatus = false } = {}) {
933
937
  const { validateEntryData, validateUniqueEntry } = getService("release-validation", {
934
938
  strapi: strapi2
935
939
  });
@@ -937,6 +941,14 @@ const createReleaseActionService = ({ strapi: strapi2 }) => {
937
941
  validateEntryData(action.contentType, action.entryDocumentId),
938
942
  validateUniqueEntry(releaseId, action)
939
943
  ]);
944
+ const model = strapi2.contentType(action.contentType);
945
+ if (model.kind === "singleType") {
946
+ const document = await strapi2.db.query(model.uid).findOne({ select: ["documentId"] });
947
+ if (!document) {
948
+ throw new utils.errors.NotFoundError(`No entry found for contentType ${action.contentType}`);
949
+ }
950
+ action.entryDocumentId = document.documentId;
951
+ }
940
952
  const release2 = await strapi2.db.query(RELEASE_MODEL_UID).findOne({ where: { id: releaseId } });
941
953
  if (!release2) {
942
954
  throw new utils.errors.NotFoundError(`No release found for id ${releaseId}`);
@@ -962,7 +974,9 @@ const createReleaseActionService = ({ strapi: strapi2 }) => {
962
974
  },
963
975
  populate: { release: { select: ["id"] } }
964
976
  });
965
- getService("release", { strapi: strapi2 }).updateReleaseStatus(release2.id);
977
+ if (!disableUpdateReleaseStatus) {
978
+ getService("release", { strapi: strapi2 }).updateReleaseStatus(release2.id);
979
+ }
966
980
  return releaseAction2;
967
981
  },
968
982
  async findPage(releaseId, query) {
@@ -1065,7 +1079,7 @@ const createReleaseActionService = ({ strapi: strapi2 }) => {
1065
1079
  `Action with id ${actionId} not found in release with id ${releaseId} or it is already published`
1066
1080
  );
1067
1081
  }
1068
- const actionStatus = update.type === "publish" ? getDraftEntryValidStatus(
1082
+ const actionStatus = update.type === "publish" ? await getDraftEntryValidStatus(
1069
1083
  {
1070
1084
  contentType: action.contentType,
1071
1085
  documentId: action.entryDocumentId,
@@ -1135,11 +1149,11 @@ const createReleaseValidationService = ({ strapi: strapi2 }) => ({
1135
1149
  throw new utils.errors.NotFoundError(`No release found for id ${releaseId}`);
1136
1150
  }
1137
1151
  const isEntryInRelease = release2.actions.some(
1138
- (action) => Number(action.entryDocumentId) === Number(releaseActionArgs.entryDocumentId) && action.contentType === releaseActionArgs.contentType && action.locale === releaseActionArgs.locale
1152
+ (action) => action.entryDocumentId === releaseActionArgs.entryDocumentId && action.contentType === releaseActionArgs.contentType && (releaseActionArgs.locale ? action.locale === releaseActionArgs.locale : true)
1139
1153
  );
1140
1154
  if (isEntryInRelease) {
1141
1155
  throw new AlreadyOnReleaseError(
1142
- `Entry with documentId ${releaseActionArgs.entryDocumentId} ${releaseActionArgs.locale ? `(${releaseActionArgs.locale})` : ""} and contentType ${releaseActionArgs.contentType} already exists in release with id ${releaseId}`
1156
+ `Entry with documentId ${releaseActionArgs.entryDocumentId}${releaseActionArgs.locale ? `( ${releaseActionArgs.locale})` : ""} and contentType ${releaseActionArgs.contentType} already exists in release with id ${releaseId}`
1143
1157
  );
1144
1158
  }
1145
1159
  },
@@ -1306,7 +1320,15 @@ const releaseController = {
1306
1320
  const releaseService = getService("release", { strapi });
1307
1321
  const query = await permissionsManager.sanitizeQuery(ctx.query);
1308
1322
  await validatefindByDocumentAttachedParams(query);
1309
- const { contentType, entryDocumentId, hasEntryAttached, locale } = query;
1323
+ const model = strapi.getModel(query.contentType);
1324
+ if (model.kind && model.kind === "singleType") {
1325
+ const document = await strapi.db.query(model.uid).findOne({ select: ["documentId"] });
1326
+ if (!document) {
1327
+ throw new utils.errors.NotFoundError(`No entry found for contentType ${query.contentType}`);
1328
+ }
1329
+ query.entryDocumentId = document.documentId;
1330
+ }
1331
+ const { contentType, hasEntryAttached, entryDocumentId, locale } = query;
1310
1332
  const isEntryAttached = typeof hasEntryAttached === "string" ? Boolean(JSON.parse(hasEntryAttached)) : false;
1311
1333
  if (isEntryAttached) {
1312
1334
  const releases = await releaseService.findMany({
@@ -1320,7 +1342,12 @@ const releaseController = {
1320
1342
  },
1321
1343
  populate: {
1322
1344
  actions: {
1323
- fields: ["type"]
1345
+ fields: ["type"],
1346
+ filters: {
1347
+ contentType,
1348
+ entryDocumentId: entryDocumentId ?? null,
1349
+ locale: locale ?? null
1350
+ }
1324
1351
  }
1325
1352
  }
1326
1353
  });
@@ -1408,43 +1435,50 @@ const releaseController = {
1408
1435
  };
1409
1436
  ctx.body = { data };
1410
1437
  },
1411
- /* @TODO: Migrate to new api
1412
- async mapEntriesToReleases(ctx: Koa.Context) {
1413
- const { contentTypeUid, entriesIds } = ctx.query;
1414
-
1415
- if (!contentTypeUid || !entriesIds) {
1416
- throw new errors.ValidationError('Missing required query parameters');
1438
+ async mapEntriesToReleases(ctx) {
1439
+ const { contentTypeUid, documentIds, locale } = ctx.query;
1440
+ if (!contentTypeUid || !documentIds) {
1441
+ throw new utils.errors.ValidationError("Missing required query parameters");
1442
+ }
1443
+ const releaseService = getService("release", { strapi });
1444
+ const releasesWithActions = await releaseService.findMany({
1445
+ where: {
1446
+ releasedAt: null,
1447
+ actions: {
1448
+ contentType: contentTypeUid,
1449
+ entryDocumentId: {
1450
+ $in: documentIds
1451
+ },
1452
+ locale
1453
+ }
1454
+ },
1455
+ populate: {
1456
+ actions: true
1417
1457
  }
1418
-
1419
- const releaseService = getService('release', { strapi });
1420
-
1421
- const releasesWithActions = await releaseService.findMany(
1422
- contentTypeUid,
1423
- entriesIds
1424
- );
1425
-
1426
- const mappedEntriesInReleases = releasesWithActions.reduce(
1427
- // TODO: Fix for v5 removed mappedEntriedToRelease
1428
- (acc: MapEntriesToReleases.Response['data'], release: Release) => {
1429
- release.actions.forEach((action) => {
1430
- if (!acc[action.entry.id]) {
1431
- acc[action.entry.id] = [{ id: release.id, name: release.name }];
1432
- } else {
1433
- acc[action.entry.id].push({ id: release.id, name: release.name });
1434
- }
1435
- });
1436
-
1437
- return acc;
1438
- },
1439
- // TODO: Fix for v5 removed mappedEntriedToRelease
1440
- {} as MapEntriesToReleases.Response['data']
1441
- );
1442
-
1443
- ctx.body = {
1444
- data: mappedEntriesInReleases,
1445
- };
1446
- },
1447
- */
1458
+ });
1459
+ const mappedEntriesInReleases = releasesWithActions.reduce(
1460
+ (acc, release2) => {
1461
+ release2.actions.forEach((action) => {
1462
+ if (action.contentType !== contentTypeUid) {
1463
+ return;
1464
+ }
1465
+ if (locale && action.locale !== locale) {
1466
+ return;
1467
+ }
1468
+ if (!acc[action.entryDocumentId]) {
1469
+ acc[action.entryDocumentId] = [{ id: release2.id, name: release2.name }];
1470
+ } else {
1471
+ acc[action.entryDocumentId].push({ id: release2.id, name: release2.name });
1472
+ }
1473
+ });
1474
+ return acc;
1475
+ },
1476
+ {}
1477
+ );
1478
+ ctx.body = {
1479
+ data: mappedEntriesInReleases
1480
+ };
1481
+ },
1448
1482
  async create(ctx) {
1449
1483
  const user = ctx.state.user;
1450
1484
  const releaseArgs = ctx.request.body;
@@ -1537,22 +1571,23 @@ const releaseActionController = {
1537
1571
  data: releaseAction2
1538
1572
  });
1539
1573
  },
1540
- /*
1541
- async createMany(ctx: Koa.Context) {
1542
- const releaseId: CreateManyReleaseActions.Request['params']['releaseId'] = ctx.params.releaseId;
1543
- const releaseActionsArgs = ctx.request.body as CreateManyReleaseActions.Request['body'];
1574
+ async createMany(ctx) {
1575
+ const releaseId = ctx.params.releaseId;
1576
+ const releaseActionsArgs = ctx.request.body;
1544
1577
  await Promise.all(
1545
1578
  releaseActionsArgs.map((releaseActionArgs) => validateReleaseAction(releaseActionArgs))
1546
1579
  );
1547
- const releaseActionService = getService('release-action', { strapi });
1580
+ const releaseActionService = getService("release-action", { strapi });
1581
+ const releaseService = getService("release", { strapi });
1548
1582
  const releaseActions = await strapi.db.transaction(async () => {
1549
- const releaseActions = await Promise.all(
1583
+ const releaseActions2 = await Promise.all(
1550
1584
  releaseActionsArgs.map(async (releaseActionArgs) => {
1551
1585
  try {
1552
- const action = await releaseActionService.create(releaseId, releaseActionArgs);
1586
+ const action = await releaseActionService.create(releaseId, releaseActionArgs, {
1587
+ disableUpdateReleaseStatus: true
1588
+ });
1553
1589
  return action;
1554
1590
  } 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
1591
  if (error instanceof AlreadyOnReleaseError) {
1557
1592
  return null;
1558
1593
  }
@@ -1560,18 +1595,20 @@ const releaseActionController = {
1560
1595
  }
1561
1596
  })
1562
1597
  );
1563
- return releaseActions;
1598
+ return releaseActions2;
1564
1599
  });
1565
1600
  const newReleaseActions = releaseActions.filter((action) => action !== null);
1601
+ if (newReleaseActions.length > 0) {
1602
+ releaseService.updateReleaseStatus(releaseId);
1603
+ }
1566
1604
  ctx.created({
1567
1605
  data: newReleaseActions,
1568
1606
  meta: {
1569
1607
  entriesAlreadyInRelease: releaseActions.length - newReleaseActions.length,
1570
- totalEntries: releaseActions.length,
1571
- },
1608
+ totalEntries: releaseActions.length
1609
+ }
1572
1610
  });
1573
1611
  },
1574
- */
1575
1612
  async findMany(ctx) {
1576
1613
  const releaseId = ctx.params.releaseId;
1577
1614
  const permissionsManager = strapi.service("admin::permission").createPermissionsManager({
@@ -1670,24 +1707,22 @@ const controllers = {
1670
1707
  const release = {
1671
1708
  type: "admin",
1672
1709
  routes: [
1673
- /*
1674
1710
  {
1675
- method: 'GET',
1676
- path: '/mapEntriesToReleases',
1677
- handler: 'release.mapEntriesToReleases',
1711
+ method: "GET",
1712
+ path: "/mapEntriesToReleases",
1713
+ handler: "release.mapEntriesToReleases",
1678
1714
  config: {
1679
1715
  policies: [
1680
- 'admin::isAuthenticatedAdmin',
1716
+ "admin::isAuthenticatedAdmin",
1681
1717
  {
1682
- name: 'admin::hasPermissions',
1718
+ name: "admin::hasPermissions",
1683
1719
  config: {
1684
- actions: ['plugin::content-releases.read'],
1685
- },
1686
- },
1687
- ],
1688
- },
1720
+ actions: ["plugin::content-releases.read"]
1721
+ }
1722
+ }
1723
+ ]
1724
+ }
1689
1725
  },
1690
- */
1691
1726
  {
1692
1727
  method: "GET",
1693
1728
  path: "/getByDocumentAttached",
@@ -1821,24 +1856,22 @@ const releaseAction = {
1821
1856
  ]
1822
1857
  }
1823
1858
  },
1824
- /*
1825
1859
  {
1826
- method: 'POST',
1827
- path: '/:releaseId/actions/bulk',
1828
- handler: 'release-action.createMany',
1860
+ method: "POST",
1861
+ path: "/:releaseId/actions/bulk",
1862
+ handler: "release-action.createMany",
1829
1863
  config: {
1830
1864
  policies: [
1831
- 'admin::isAuthenticatedAdmin',
1865
+ "admin::isAuthenticatedAdmin",
1832
1866
  {
1833
- name: 'admin::hasPermissions',
1867
+ name: "admin::hasPermissions",
1834
1868
  config: {
1835
- actions: ['plugin::content-releases.create-action'],
1836
- },
1837
- },
1838
- ],
1839
- },
1869
+ actions: ["plugin::content-releases.create-action"]
1870
+ }
1871
+ }
1872
+ ]
1873
+ }
1840
1874
  },
1841
- */
1842
1875
  {
1843
1876
  method: "GET",
1844
1877
  path: "/:releaseId/actions",