@strapi/content-releases 0.0.0-next.883f4fcabd28de02b78b7b00a70e33cd2d151d05 → 0.0.0-next.88e2effa81cb9544dd09eb0536e39c3fed6ef4c9

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 (110) hide show
  1. package/dist/admin/components/EntryValidationPopover.js +62 -96
  2. package/dist/admin/components/EntryValidationPopover.js.map +1 -1
  3. package/dist/admin/components/EntryValidationPopover.mjs +64 -98
  4. package/dist/admin/components/EntryValidationPopover.mjs.map +1 -1
  5. package/dist/admin/components/ReleaseActionMenu.js +25 -74
  6. package/dist/admin/components/ReleaseActionMenu.js.map +1 -1
  7. package/dist/admin/components/ReleaseActionMenu.mjs +26 -75
  8. package/dist/admin/components/ReleaseActionMenu.mjs.map +1 -1
  9. package/dist/admin/components/ReleaseModal.js +8 -0
  10. package/dist/admin/components/ReleaseModal.js.map +1 -1
  11. package/dist/admin/components/ReleaseModal.mjs +8 -0
  12. package/dist/admin/components/ReleaseModal.mjs.map +1 -1
  13. package/dist/admin/components/Widgets.js +122 -0
  14. package/dist/admin/components/Widgets.js.map +1 -0
  15. package/dist/admin/components/Widgets.mjs +120 -0
  16. package/dist/admin/components/Widgets.mjs.map +1 -0
  17. package/dist/admin/constants.js +2 -0
  18. package/dist/admin/constants.js.map +1 -1
  19. package/dist/admin/constants.mjs +2 -1
  20. package/dist/admin/constants.mjs.map +1 -1
  21. package/dist/admin/index.js +25 -2
  22. package/dist/admin/index.js.map +1 -1
  23. package/dist/admin/index.mjs +26 -3
  24. package/dist/admin/index.mjs.map +1 -1
  25. package/dist/admin/pages/PurchaseContentReleases.js +2 -2
  26. package/dist/admin/pages/PurchaseContentReleases.js.map +1 -1
  27. package/dist/admin/pages/PurchaseContentReleases.mjs +3 -3
  28. package/dist/admin/pages/PurchaseContentReleases.mjs.map +1 -1
  29. package/dist/admin/pages/ReleaseDetailsPage.js +111 -158
  30. package/dist/admin/pages/ReleaseDetailsPage.js.map +1 -1
  31. package/dist/admin/pages/ReleaseDetailsPage.mjs +113 -160
  32. package/dist/admin/pages/ReleaseDetailsPage.mjs.map +1 -1
  33. package/dist/admin/pages/ReleasesPage.js +130 -122
  34. package/dist/admin/pages/ReleasesPage.js.map +1 -1
  35. package/dist/admin/pages/ReleasesPage.mjs +131 -123
  36. package/dist/admin/pages/ReleasesPage.mjs.map +1 -1
  37. package/dist/admin/pages/ReleasesSettingsPage.js +36 -10
  38. package/dist/admin/pages/ReleasesSettingsPage.js.map +1 -1
  39. package/dist/admin/pages/ReleasesSettingsPage.mjs +37 -11
  40. package/dist/admin/pages/ReleasesSettingsPage.mjs.map +1 -1
  41. package/dist/admin/services/homepage.js +24 -0
  42. package/dist/admin/services/homepage.js.map +1 -0
  43. package/dist/admin/services/homepage.mjs +22 -0
  44. package/dist/admin/services/homepage.mjs.map +1 -0
  45. package/dist/admin/services/release.js +21 -12
  46. package/dist/admin/services/release.js.map +1 -1
  47. package/dist/admin/services/release.mjs +21 -12
  48. package/dist/admin/services/release.mjs.map +1 -1
  49. package/dist/admin/src/components/Widgets.d.ts +2 -0
  50. package/dist/admin/src/constants.d.ts +1 -0
  51. package/dist/admin/src/services/homepage.d.ts +9 -0
  52. package/dist/admin/src/services/release.d.ts +28 -28
  53. package/dist/admin/translations/en.json.js +6 -3
  54. package/dist/admin/translations/en.json.js.map +1 -1
  55. package/dist/admin/translations/en.json.mjs +6 -3
  56. package/dist/admin/translations/en.json.mjs.map +1 -1
  57. package/dist/server/controllers/homepage.js +15 -0
  58. package/dist/server/controllers/homepage.js.map +1 -0
  59. package/dist/server/controllers/homepage.mjs +13 -0
  60. package/dist/server/controllers/homepage.mjs.map +1 -0
  61. package/dist/server/controllers/index.js +2 -0
  62. package/dist/server/controllers/index.js.map +1 -1
  63. package/dist/server/controllers/index.mjs +2 -0
  64. package/dist/server/controllers/index.mjs.map +1 -1
  65. package/dist/server/destroy.js +2 -2
  66. package/dist/server/destroy.js.map +1 -1
  67. package/dist/server/destroy.mjs +2 -2
  68. package/dist/server/destroy.mjs.map +1 -1
  69. package/dist/server/routes/homepage.js +25 -0
  70. package/dist/server/routes/homepage.js.map +1 -0
  71. package/dist/server/routes/homepage.mjs +23 -0
  72. package/dist/server/routes/homepage.mjs.map +1 -0
  73. package/dist/server/routes/index.js +2 -0
  74. package/dist/server/routes/index.js.map +1 -1
  75. package/dist/server/routes/index.mjs +2 -0
  76. package/dist/server/routes/index.mjs.map +1 -1
  77. package/dist/server/services/homepage.js +26 -0
  78. package/dist/server/services/homepage.js.map +1 -0
  79. package/dist/server/services/homepage.mjs +24 -0
  80. package/dist/server/services/homepage.mjs.map +1 -0
  81. package/dist/server/services/index.js +2 -0
  82. package/dist/server/services/index.js.map +1 -1
  83. package/dist/server/services/index.mjs +2 -0
  84. package/dist/server/services/index.mjs.map +1 -1
  85. package/dist/server/services/scheduling.js +16 -12
  86. package/dist/server/services/scheduling.js.map +1 -1
  87. package/dist/server/services/scheduling.mjs +16 -12
  88. package/dist/server/services/scheduling.mjs.map +1 -1
  89. package/dist/server/src/controllers/homepage.d.ts +6 -0
  90. package/dist/server/src/controllers/homepage.d.ts.map +1 -0
  91. package/dist/server/src/controllers/index.d.ts +3 -0
  92. package/dist/server/src/controllers/index.d.ts.map +1 -1
  93. package/dist/server/src/destroy.d.ts.map +1 -1
  94. package/dist/server/src/index.d.ts +13 -4
  95. package/dist/server/src/index.d.ts.map +1 -1
  96. package/dist/server/src/routes/homepage.d.ts +4 -0
  97. package/dist/server/src/routes/homepage.d.ts.map +1 -0
  98. package/dist/server/src/routes/index.d.ts +1 -0
  99. package/dist/server/src/routes/index.d.ts.map +1 -1
  100. package/dist/server/src/services/homepage.d.ts +9 -0
  101. package/dist/server/src/services/homepage.d.ts.map +1 -0
  102. package/dist/server/src/services/index.d.ts +9 -4
  103. package/dist/server/src/services/index.d.ts.map +1 -1
  104. package/dist/server/src/services/scheduling.d.ts +4 -5
  105. package/dist/server/src/services/scheduling.d.ts.map +1 -1
  106. package/dist/shared/contracts/homepage.d.ts +11 -0
  107. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  108. package/dist/shared/types.d.ts +1 -0
  109. package/dist/shared/types.d.ts.map +1 -1
  110. package/package.json +10 -11
@@ -15,7 +15,6 @@ var en = {
15
15
  "content-manager-edit-view.scheduled.date": "{date} at {time} ({offset})",
16
16
  "content-manager-edit-view.edit-release": "Edit release",
17
17
  "content-releases.content-manager-edit-view.edit-entry": "Edit entry",
18
- "content-releases.pages.Releases.title": "Releases",
19
18
  "content-manager-edit-view.remove-from-release.notification.success": "Entry removed from release",
20
19
  "content-manager-edit-view.release-action-menu": "Release action options",
21
20
  "content-manager.list-view.releases.header": "To be released in",
@@ -91,9 +90,10 @@ var en = {
91
90
  "pages.ReleaseDetails.groupBy.option.actions": "Actions",
92
91
  "pages.ReleaseDetails.header-subtitle.scheduled": "Scheduled for {date} at {time} ({offset})",
93
92
  "pages.ReleaseDetails.entry-validation.fields": "Fields",
94
- "pages.Settings.releases.title": "Releases",
95
93
  "pages.Settings.releases.description": "Create and manage content updates",
94
+ "pages.Settings.releases.preferences.title": "Preferences",
96
95
  "pages.Settings.releases.timezone.label": "Default timezone",
96
+ "pages.Settings.releases.timezone.hint": "The timezone of every release can still be changed individually.",
97
97
  "pages.Settings.releases.setting.default-timezone-notification-success": "Default timezone updated.",
98
98
  "pages.ReleaseDetails.entry-validation.fields.error": "{errors} errors on fields.",
99
99
  "pages.ReleaseDetails.entry-validation.fields.success": "All fields are filled correctly.",
@@ -101,7 +101,10 @@ var en = {
101
101
  "pages.ReleaseDetails.entry-validation.review-stage.not-enabled": "This entry is not associated to any workflow.",
102
102
  "pages.ReleaseDetails.entry-validation.review-stage.not-ready": "This entry is not at the required stage for publishing. ({stageName})",
103
103
  "pages.ReleaseDetails.entry-validation.review-stage.ready": "This entry is at the required stage for publishing. ({stageName})",
104
- "pages.ReleaseDetails.entry-validation.review-stage.stage-not-required": "No required stage for publication."
104
+ "pages.ReleaseDetails.entry-validation.review-stage.stage-not-required": "No required stage for publication.",
105
+ "widget.upcoming-releases.link": "Open Releases",
106
+ "widget.upcoming-releases.title": "Upcoming releases",
107
+ "widget.upcoming-releases.no-data": "No releases"
105
108
  };
106
109
 
107
110
  module.exports = en;
@@ -1 +1 @@
1
- {"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -13,7 +13,6 @@ var en = {
13
13
  "content-manager-edit-view.scheduled.date": "{date} at {time} ({offset})",
14
14
  "content-manager-edit-view.edit-release": "Edit release",
15
15
  "content-releases.content-manager-edit-view.edit-entry": "Edit entry",
16
- "content-releases.pages.Releases.title": "Releases",
17
16
  "content-manager-edit-view.remove-from-release.notification.success": "Entry removed from release",
18
17
  "content-manager-edit-view.release-action-menu": "Release action options",
19
18
  "content-manager.list-view.releases.header": "To be released in",
@@ -89,9 +88,10 @@ var en = {
89
88
  "pages.ReleaseDetails.groupBy.option.actions": "Actions",
90
89
  "pages.ReleaseDetails.header-subtitle.scheduled": "Scheduled for {date} at {time} ({offset})",
91
90
  "pages.ReleaseDetails.entry-validation.fields": "Fields",
92
- "pages.Settings.releases.title": "Releases",
93
91
  "pages.Settings.releases.description": "Create and manage content updates",
92
+ "pages.Settings.releases.preferences.title": "Preferences",
94
93
  "pages.Settings.releases.timezone.label": "Default timezone",
94
+ "pages.Settings.releases.timezone.hint": "The timezone of every release can still be changed individually.",
95
95
  "pages.Settings.releases.setting.default-timezone-notification-success": "Default timezone updated.",
96
96
  "pages.ReleaseDetails.entry-validation.fields.error": "{errors} errors on fields.",
97
97
  "pages.ReleaseDetails.entry-validation.fields.success": "All fields are filled correctly.",
@@ -99,7 +99,10 @@ var en = {
99
99
  "pages.ReleaseDetails.entry-validation.review-stage.not-enabled": "This entry is not associated to any workflow.",
100
100
  "pages.ReleaseDetails.entry-validation.review-stage.not-ready": "This entry is not at the required stage for publishing. ({stageName})",
101
101
  "pages.ReleaseDetails.entry-validation.review-stage.ready": "This entry is at the required stage for publishing. ({stageName})",
102
- "pages.ReleaseDetails.entry-validation.review-stage.stage-not-required": "No required stage for publication."
102
+ "pages.ReleaseDetails.entry-validation.review-stage.stage-not-required": "No required stage for publication.",
103
+ "widget.upcoming-releases.link": "Open Releases",
104
+ "widget.upcoming-releases.title": "Upcoming releases",
105
+ "widget.upcoming-releases.no-data": "No releases"
103
106
  };
104
107
 
105
108
  export { en as default };
@@ -1 +1 @@
1
- {"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ const homepageController = ()=>{
4
+ const homepageService = strapi.plugin('content-releases').service('homepage');
5
+ return {
6
+ async getUpcomingReleases () {
7
+ return {
8
+ data: await homepageService.getUpcomingReleases()
9
+ };
10
+ }
11
+ };
12
+ };
13
+
14
+ module.exports = homepageController;
15
+ //# sourceMappingURL=homepage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"homepage.js","sources":["../../../server/src/controllers/homepage.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport type { GetUpcomingReleases } from '../../../shared/contracts/homepage';\n\nconst homepageController = () => {\n const homepageService = strapi.plugin('content-releases').service('homepage');\n\n return {\n async getUpcomingReleases(): Promise<GetUpcomingReleases.Response> {\n return { data: await homepageService.getUpcomingReleases() };\n },\n } satisfies Core.Controller;\n};\n\nexport default homepageController;\n"],"names":["homepageController","homepageService","strapi","plugin","service","getUpcomingReleases","data"],"mappings":";;AAGA,MAAMA,kBAAqB,GAAA,IAAA;AACzB,IAAA,MAAMC,kBAAkBC,MAAOC,CAAAA,MAAM,CAAC,kBAAA,CAAA,CAAoBC,OAAO,CAAC,UAAA,CAAA;IAElE,OAAO;QACL,MAAMC,mBAAAA,CAAAA,GAAAA;YACJ,OAAO;gBAAEC,IAAM,EAAA,MAAML,gBAAgBI,mBAAmB;AAAG,aAAA;AAC7D;AACF,KAAA;AACF;;;;"}
@@ -0,0 +1,13 @@
1
+ const homepageController = ()=>{
2
+ const homepageService = strapi.plugin('content-releases').service('homepage');
3
+ return {
4
+ async getUpcomingReleases () {
5
+ return {
6
+ data: await homepageService.getUpcomingReleases()
7
+ };
8
+ }
9
+ };
10
+ };
11
+
12
+ export { homepageController as default };
13
+ //# sourceMappingURL=homepage.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"homepage.mjs","sources":["../../../server/src/controllers/homepage.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport type { GetUpcomingReleases } from '../../../shared/contracts/homepage';\n\nconst homepageController = () => {\n const homepageService = strapi.plugin('content-releases').service('homepage');\n\n return {\n async getUpcomingReleases(): Promise<GetUpcomingReleases.Response> {\n return { data: await homepageService.getUpcomingReleases() };\n },\n } satisfies Core.Controller;\n};\n\nexport default homepageController;\n"],"names":["homepageController","homepageService","strapi","plugin","service","getUpcomingReleases","data"],"mappings":"AAGA,MAAMA,kBAAqB,GAAA,IAAA;AACzB,IAAA,MAAMC,kBAAkBC,MAAOC,CAAAA,MAAM,CAAC,kBAAA,CAAA,CAAoBC,OAAO,CAAC,UAAA,CAAA;IAElE,OAAO;QACL,MAAMC,mBAAAA,CAAAA,GAAAA;YACJ,OAAO;gBAAEC,IAAM,EAAA,MAAML,gBAAgBI,mBAAmB;AAAG,aAAA;AAC7D;AACF,KAAA;AACF;;;;"}
@@ -1,10 +1,12 @@
1
1
  'use strict';
2
2
 
3
+ var homepage = require('./homepage.js');
3
4
  var release = require('./release.js');
4
5
  var releaseAction = require('./release-action.js');
5
6
  var settings = require('./settings.js');
6
7
 
7
8
  const controllers = {
9
+ homepage,
8
10
  release,
9
11
  'release-action': releaseAction,
10
12
  settings
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../server/src/controllers/index.ts"],"sourcesContent":["import release from './release';\nimport releaseAction from './release-action';\nimport settings from './settings';\n\nexport const controllers = {\n release,\n 'release-action': releaseAction,\n settings,\n};\n"],"names":["controllers","release","releaseAction","settings"],"mappings":";;;;;;MAIaA,WAAc,GAAA;AACzBC,IAAAA,OAAAA;IACA,gBAAkBC,EAAAA,aAAAA;AAClBC,IAAAA;AACF;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../server/src/controllers/index.ts"],"sourcesContent":["import homepage from './homepage';\nimport release from './release';\nimport releaseAction from './release-action';\nimport settings from './settings';\n\nexport const controllers = {\n homepage,\n release,\n 'release-action': releaseAction,\n settings,\n};\n"],"names":["controllers","homepage","release","releaseAction","settings"],"mappings":";;;;;;;MAKaA,WAAc,GAAA;AACzBC,IAAAA,QAAAA;AACAC,IAAAA,OAAAA;IACA,gBAAkBC,EAAAA,aAAAA;AAClBC,IAAAA;AACF;;;;"}
@@ -1,8 +1,10 @@
1
+ import homepageController from './homepage.mjs';
1
2
  import releaseController from './release.mjs';
2
3
  import releaseActionController from './release-action.mjs';
3
4
  import settingsController from './settings.mjs';
4
5
 
5
6
  const controllers = {
7
+ homepage: homepageController,
6
8
  release: releaseController,
7
9
  'release-action': releaseActionController,
8
10
  settings: settingsController
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../server/src/controllers/index.ts"],"sourcesContent":["import release from './release';\nimport releaseAction from './release-action';\nimport settings from './settings';\n\nexport const controllers = {\n release,\n 'release-action': releaseAction,\n settings,\n};\n"],"names":["controllers","release","releaseAction","settings"],"mappings":";;;;MAIaA,WAAc,GAAA;AACzBC,aAAAA,iBAAAA;IACA,gBAAkBC,EAAAA,uBAAAA;AAClBC,cAAAA;AACF;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../server/src/controllers/index.ts"],"sourcesContent":["import homepage from './homepage';\nimport release from './release';\nimport releaseAction from './release-action';\nimport settings from './settings';\n\nexport const controllers = {\n homepage,\n release,\n 'release-action': releaseAction,\n settings,\n};\n"],"names":["controllers","homepage","release","releaseAction","settings"],"mappings":";;;;;MAKaA,WAAc,GAAA;AACzBC,cAAAA,kBAAAA;AACAC,aAAAA,iBAAAA;IACA,gBAAkBC,EAAAA,uBAAAA;AAClBC,cAAAA;AACF;;;;"}
@@ -6,8 +6,8 @@ const destroy = async ({ strapi })=>{
6
6
  const scheduledJobs = index.getService('scheduling', {
7
7
  strapi
8
8
  }).getAll();
9
- for (const [, job] of scheduledJobs){
10
- job.cancel();
9
+ for (const [, taskName] of scheduledJobs){
10
+ strapi.cron.remove(taskName);
11
11
  }
12
12
  };
13
13
 
@@ -1 +1 @@
1
- {"version":3,"file":"destroy.js","sources":["../../server/src/destroy.ts"],"sourcesContent":["import { Job } from 'node-schedule';\nimport type { Core } from '@strapi/types';\n\nimport { Release } from '../../shared/contracts/releases';\nimport { getService } from './utils';\n\nexport const destroy = async ({ strapi }: { strapi: Core.Strapi }) => {\n const scheduledJobs: Map<Release['id'], Job> = getService('scheduling', {\n strapi,\n }).getAll();\n\n for (const [, job] of scheduledJobs) {\n job.cancel();\n }\n};\n"],"names":["destroy","strapi","scheduledJobs","getService","getAll","job","cancel"],"mappings":";;;;AAMaA,MAAAA,OAAAA,GAAU,OAAO,EAAEC,MAAM,EAA2B,GAAA;IAC/D,MAAMC,aAAAA,GAAyCC,iBAAW,YAAc,EAAA;AACtEF,QAAAA;AACF,KAAA,CAAA,CAAGG,MAAM,EAAA;AAET,IAAA,KAAK,MAAM,GAAGC,GAAI,CAAA,IAAIH,aAAe,CAAA;AACnCG,QAAAA,GAAAA,CAAIC,MAAM,EAAA;AACZ;AACF;;;;"}
1
+ {"version":3,"file":"destroy.js","sources":["../../server/src/destroy.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { Release } from '../../shared/contracts/releases';\nimport { getService } from './utils';\n\nexport const destroy = async ({ strapi }: { strapi: Core.Strapi }) => {\n const scheduledJobs: Map<Release['id'], string> = getService('scheduling', {\n strapi,\n }).getAll();\n\n for (const [, taskName] of scheduledJobs) {\n strapi.cron.remove(taskName);\n }\n};\n"],"names":["destroy","strapi","scheduledJobs","getService","getAll","taskName","cron","remove"],"mappings":";;;;AAKaA,MAAAA,OAAAA,GAAU,OAAO,EAAEC,MAAM,EAA2B,GAAA;IAC/D,MAAMC,aAAAA,GAA4CC,iBAAW,YAAc,EAAA;AACzEF,QAAAA;AACF,KAAA,CAAA,CAAGG,MAAM,EAAA;AAET,IAAA,KAAK,MAAM,GAAGC,QAAS,CAAA,IAAIH,aAAe,CAAA;QACxCD,MAAOK,CAAAA,IAAI,CAACC,MAAM,CAACF,QAAAA,CAAAA;AACrB;AACF;;;;"}
@@ -4,8 +4,8 @@ const destroy = async ({ strapi })=>{
4
4
  const scheduledJobs = getService('scheduling', {
5
5
  strapi
6
6
  }).getAll();
7
- for (const [, job] of scheduledJobs){
8
- job.cancel();
7
+ for (const [, taskName] of scheduledJobs){
8
+ strapi.cron.remove(taskName);
9
9
  }
10
10
  };
11
11
 
@@ -1 +1 @@
1
- {"version":3,"file":"destroy.mjs","sources":["../../server/src/destroy.ts"],"sourcesContent":["import { Job } from 'node-schedule';\nimport type { Core } from '@strapi/types';\n\nimport { Release } from '../../shared/contracts/releases';\nimport { getService } from './utils';\n\nexport const destroy = async ({ strapi }: { strapi: Core.Strapi }) => {\n const scheduledJobs: Map<Release['id'], Job> = getService('scheduling', {\n strapi,\n }).getAll();\n\n for (const [, job] of scheduledJobs) {\n job.cancel();\n }\n};\n"],"names":["destroy","strapi","scheduledJobs","getService","getAll","job","cancel"],"mappings":";;AAMaA,MAAAA,OAAAA,GAAU,OAAO,EAAEC,MAAM,EAA2B,GAAA;IAC/D,MAAMC,aAAAA,GAAyCC,WAAW,YAAc,EAAA;AACtEF,QAAAA;AACF,KAAA,CAAA,CAAGG,MAAM,EAAA;AAET,IAAA,KAAK,MAAM,GAAGC,GAAI,CAAA,IAAIH,aAAe,CAAA;AACnCG,QAAAA,GAAAA,CAAIC,MAAM,EAAA;AACZ;AACF;;;;"}
1
+ {"version":3,"file":"destroy.mjs","sources":["../../server/src/destroy.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { Release } from '../../shared/contracts/releases';\nimport { getService } from './utils';\n\nexport const destroy = async ({ strapi }: { strapi: Core.Strapi }) => {\n const scheduledJobs: Map<Release['id'], string> = getService('scheduling', {\n strapi,\n }).getAll();\n\n for (const [, taskName] of scheduledJobs) {\n strapi.cron.remove(taskName);\n }\n};\n"],"names":["destroy","strapi","scheduledJobs","getService","getAll","taskName","cron","remove"],"mappings":";;AAKaA,MAAAA,OAAAA,GAAU,OAAO,EAAEC,MAAM,EAA2B,GAAA;IAC/D,MAAMC,aAAAA,GAA4CC,WAAW,YAAc,EAAA;AACzEF,QAAAA;AACF,KAAA,CAAA,CAAGG,MAAM,EAAA;AAET,IAAA,KAAK,MAAM,GAAGC,QAAS,CAAA,IAAIH,aAAe,CAAA;QACxCD,MAAOK,CAAAA,IAAI,CAACC,MAAM,CAACF,QAAAA,CAAAA;AACrB;AACF;;;;"}
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ const info = {
4
+ pluginName: 'content-manager',
5
+ type: 'admin'
6
+ };
7
+ const homepageRouter = {
8
+ type: 'admin',
9
+ routes: [
10
+ {
11
+ method: 'GET',
12
+ info,
13
+ path: '/homepage/upcoming-releases',
14
+ handler: 'homepage.getUpcomingReleases',
15
+ config: {
16
+ policies: [
17
+ 'admin::isAuthenticatedAdmin'
18
+ ]
19
+ }
20
+ }
21
+ ]
22
+ };
23
+
24
+ module.exports = homepageRouter;
25
+ //# sourceMappingURL=homepage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"homepage.js","sources":["../../../server/src/routes/homepage.ts"],"sourcesContent":["import type { Plugin } from '@strapi/types';\n\nconst info = { pluginName: 'content-manager', type: 'admin' };\n\nconst homepageRouter: Plugin.LoadedPlugin['routes'][string] = {\n type: 'admin',\n routes: [\n {\n method: 'GET',\n info,\n path: '/homepage/upcoming-releases',\n handler: 'homepage.getUpcomingReleases',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n ],\n};\n\nexport default homepageRouter;\n"],"names":["info","pluginName","type","homepageRouter","routes","method","path","handler","config","policies"],"mappings":";;AAEA,MAAMA,IAAO,GAAA;IAAEC,UAAY,EAAA,iBAAA;IAAmBC,IAAM,EAAA;AAAQ,CAAA;AAE5D,MAAMC,cAAwD,GAAA;IAC5DD,IAAM,EAAA,OAAA;IACNE,MAAQ,EAAA;AACN,QAAA;YACEC,MAAQ,EAAA,KAAA;AACRL,YAAAA,IAAAA;YACAM,IAAM,EAAA,6BAAA;YACNC,OAAS,EAAA,8BAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF;AACD;AACH;;;;"}
@@ -0,0 +1,23 @@
1
+ const info = {
2
+ pluginName: 'content-manager',
3
+ type: 'admin'
4
+ };
5
+ const homepageRouter = {
6
+ type: 'admin',
7
+ routes: [
8
+ {
9
+ method: 'GET',
10
+ info,
11
+ path: '/homepage/upcoming-releases',
12
+ handler: 'homepage.getUpcomingReleases',
13
+ config: {
14
+ policies: [
15
+ 'admin::isAuthenticatedAdmin'
16
+ ]
17
+ }
18
+ }
19
+ ]
20
+ };
21
+
22
+ export { homepageRouter as default };
23
+ //# sourceMappingURL=homepage.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"homepage.mjs","sources":["../../../server/src/routes/homepage.ts"],"sourcesContent":["import type { Plugin } from '@strapi/types';\n\nconst info = { pluginName: 'content-manager', type: 'admin' };\n\nconst homepageRouter: Plugin.LoadedPlugin['routes'][string] = {\n type: 'admin',\n routes: [\n {\n method: 'GET',\n info,\n path: '/homepage/upcoming-releases',\n handler: 'homepage.getUpcomingReleases',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n ],\n};\n\nexport default homepageRouter;\n"],"names":["info","pluginName","type","homepageRouter","routes","method","path","handler","config","policies"],"mappings":"AAEA,MAAMA,IAAO,GAAA;IAAEC,UAAY,EAAA,iBAAA;IAAmBC,IAAM,EAAA;AAAQ,CAAA;AAE5D,MAAMC,cAAwD,GAAA;IAC5DD,IAAM,EAAA,OAAA;IACNE,MAAQ,EAAA;AACN,QAAA;YACEC,MAAQ,EAAA,KAAA;AACRL,YAAAA,IAAAA;YACAM,IAAM,EAAA,6BAAA;YACNC,OAAS,EAAA,8BAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF;AACD;AACH;;;;"}
@@ -1,10 +1,12 @@
1
1
  'use strict';
2
2
 
3
+ var homepage = require('./homepage.js');
3
4
  var release = require('./release.js');
4
5
  var releaseAction = require('./release-action.js');
5
6
  var settings = require('./settings.js');
6
7
 
7
8
  const routes = {
9
+ homepage,
8
10
  settings,
9
11
  release,
10
12
  'release-action': releaseAction
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../server/src/routes/index.ts"],"sourcesContent":["import release from './release';\nimport releaseAction from './release-action';\nimport settings from './settings';\n\nexport const routes = {\n settings,\n release,\n 'release-action': releaseAction,\n};\n"],"names":["routes","settings","release","releaseAction"],"mappings":";;;;;;MAIaA,MAAS,GAAA;AACpBC,IAAAA,QAAAA;AACAC,IAAAA,OAAAA;IACA,gBAAkBC,EAAAA;AACpB;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../server/src/routes/index.ts"],"sourcesContent":["import homepage from './homepage';\nimport release from './release';\nimport releaseAction from './release-action';\nimport settings from './settings';\n\nexport const routes = {\n homepage,\n settings,\n release,\n 'release-action': releaseAction,\n};\n"],"names":["routes","homepage","settings","release","releaseAction"],"mappings":";;;;;;;MAKaA,MAAS,GAAA;AACpBC,IAAAA,QAAAA;AACAC,IAAAA,QAAAA;AACAC,IAAAA,OAAAA;IACA,gBAAkBC,EAAAA;AACpB;;;;"}
@@ -1,8 +1,10 @@
1
+ import homepageRouter from './homepage.mjs';
1
2
  import release from './release.mjs';
2
3
  import releaseAction from './release-action.mjs';
3
4
  import settings from './settings.mjs';
4
5
 
5
6
  const routes = {
7
+ homepage: homepageRouter,
6
8
  settings,
7
9
  release,
8
10
  'release-action': releaseAction
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../server/src/routes/index.ts"],"sourcesContent":["import release from './release';\nimport releaseAction from './release-action';\nimport settings from './settings';\n\nexport const routes = {\n settings,\n release,\n 'release-action': releaseAction,\n};\n"],"names":["routes","settings","release","releaseAction"],"mappings":";;;;MAIaA,MAAS,GAAA;AACpBC,IAAAA,QAAAA;AACAC,IAAAA,OAAAA;IACA,gBAAkBC,EAAAA;AACpB;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../server/src/routes/index.ts"],"sourcesContent":["import homepage from './homepage';\nimport release from './release';\nimport releaseAction from './release-action';\nimport settings from './settings';\n\nexport const routes = {\n homepage,\n settings,\n release,\n 'release-action': releaseAction,\n};\n"],"names":["routes","homepage","settings","release","releaseAction"],"mappings":";;;;;MAKaA,MAAS,GAAA;AACpBC,cAAAA,cAAAA;AACAC,IAAAA,QAAAA;AACAC,IAAAA,OAAAA;IACA,gBAAkBC,EAAAA;AACpB;;;;"}
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ const createHomepageService = ({ strapi })=>{
4
+ const MAX_DOCUMENTS = 4;
5
+ return {
6
+ async getUpcomingReleases () {
7
+ const releases = await strapi.db.query('plugin::content-releases.release').findMany({
8
+ filters: {
9
+ releasedAt: {
10
+ $notNull: false
11
+ }
12
+ },
13
+ orderBy: [
14
+ {
15
+ scheduledAt: 'asc'
16
+ }
17
+ ],
18
+ limit: MAX_DOCUMENTS
19
+ });
20
+ return releases;
21
+ }
22
+ };
23
+ };
24
+
25
+ module.exports = createHomepageService;
26
+ //# sourceMappingURL=homepage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"homepage.js","sources":["../../../server/src/services/homepage.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport type { GetUpcomingReleases } from '../../../shared/contracts/homepage';\n\nconst createHomepageService = ({ strapi }: { strapi: Core.Strapi }) => {\n const MAX_DOCUMENTS = 4;\n\n return {\n async getUpcomingReleases(): Promise<GetUpcomingReleases.Response['data']> {\n const releases = await strapi.db.query('plugin::content-releases.release').findMany({\n filters: {\n releasedAt: {\n $notNull: false,\n },\n },\n orderBy: [{ scheduledAt: 'asc' }],\n limit: MAX_DOCUMENTS,\n });\n\n return releases;\n },\n };\n};\n\nexport default createHomepageService;\n"],"names":["createHomepageService","strapi","MAX_DOCUMENTS","getUpcomingReleases","releases","db","query","findMany","filters","releasedAt","$notNull","orderBy","scheduledAt","limit"],"mappings":";;AAIA,MAAMA,qBAAwB,GAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;AAChE,IAAA,MAAMC,aAAgB,GAAA,CAAA;IAEtB,OAAO;QACL,MAAMC,mBAAAA,CAAAA,GAAAA;YACJ,MAAMC,QAAAA,GAAW,MAAMH,MAAOI,CAAAA,EAAE,CAACC,KAAK,CAAC,kCAAoCC,CAAAA,CAAAA,QAAQ,CAAC;gBAClFC,OAAS,EAAA;oBACPC,UAAY,EAAA;wBACVC,QAAU,EAAA;AACZ;AACF,iBAAA;gBACAC,OAAS,EAAA;AAAC,oBAAA;wBAAEC,WAAa,EAAA;AAAM;AAAE,iBAAA;gBACjCC,KAAOX,EAAAA;AACT,aAAA,CAAA;YAEA,OAAOE,QAAAA;AACT;AACF,KAAA;AACF;;;;"}
@@ -0,0 +1,24 @@
1
+ const createHomepageService = ({ strapi })=>{
2
+ const MAX_DOCUMENTS = 4;
3
+ return {
4
+ async getUpcomingReleases () {
5
+ const releases = await strapi.db.query('plugin::content-releases.release').findMany({
6
+ filters: {
7
+ releasedAt: {
8
+ $notNull: false
9
+ }
10
+ },
11
+ orderBy: [
12
+ {
13
+ scheduledAt: 'asc'
14
+ }
15
+ ],
16
+ limit: MAX_DOCUMENTS
17
+ });
18
+ return releases;
19
+ }
20
+ };
21
+ };
22
+
23
+ export { createHomepageService as default };
24
+ //# sourceMappingURL=homepage.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"homepage.mjs","sources":["../../../server/src/services/homepage.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport type { GetUpcomingReleases } from '../../../shared/contracts/homepage';\n\nconst createHomepageService = ({ strapi }: { strapi: Core.Strapi }) => {\n const MAX_DOCUMENTS = 4;\n\n return {\n async getUpcomingReleases(): Promise<GetUpcomingReleases.Response['data']> {\n const releases = await strapi.db.query('plugin::content-releases.release').findMany({\n filters: {\n releasedAt: {\n $notNull: false,\n },\n },\n orderBy: [{ scheduledAt: 'asc' }],\n limit: MAX_DOCUMENTS,\n });\n\n return releases;\n },\n };\n};\n\nexport default createHomepageService;\n"],"names":["createHomepageService","strapi","MAX_DOCUMENTS","getUpcomingReleases","releases","db","query","findMany","filters","releasedAt","$notNull","orderBy","scheduledAt","limit"],"mappings":"AAIA,MAAMA,qBAAwB,GAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;AAChE,IAAA,MAAMC,aAAgB,GAAA,CAAA;IAEtB,OAAO;QACL,MAAMC,mBAAAA,CAAAA,GAAAA;YACJ,MAAMC,QAAAA,GAAW,MAAMH,MAAOI,CAAAA,EAAE,CAACC,KAAK,CAAC,kCAAoCC,CAAAA,CAAAA,QAAQ,CAAC;gBAClFC,OAAS,EAAA;oBACPC,UAAY,EAAA;wBACVC,QAAU,EAAA;AACZ;AACF,iBAAA;gBACAC,OAAS,EAAA;AAAC,oBAAA;wBAAEC,WAAa,EAAA;AAAM;AAAE,iBAAA;gBACjCC,KAAOX,EAAAA;AACT,aAAA,CAAA;YAEA,OAAOE,QAAAA;AACT;AACF,KAAA;AACF;;;;"}
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
 
3
+ var homepage = require('./homepage.js');
3
4
  var release = require('./release.js');
4
5
  var releaseAction = require('./release-action.js');
5
6
  var validation = require('./validation.js');
@@ -7,6 +8,7 @@ var scheduling = require('./scheduling.js');
7
8
  var settings = require('./settings.js');
8
9
 
9
10
  const services = {
11
+ homepage,
10
12
  release,
11
13
  'release-action': releaseAction,
12
14
  'release-validation': validation.default,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../server/src/services/index.ts"],"sourcesContent":["import release from './release';\nimport releaseAction from './release-action';\nimport releaseValidation from './validation';\nimport scheduling from './scheduling';\nimport settings from './settings';\n\nexport const services = {\n release,\n 'release-action': releaseAction,\n 'release-validation': releaseValidation,\n scheduling,\n settings,\n};\n"],"names":["services","release","releaseAction","releaseValidation","scheduling","settings"],"mappings":";;;;;;;;MAMaA,QAAW,GAAA;AACtBC,IAAAA,OAAAA;IACA,gBAAkBC,EAAAA,aAAAA;IAClB,oBAAsBC,EAAAA,kBAAAA;AACtBC,IAAAA,UAAAA;AACAC,IAAAA;AACF;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../server/src/services/index.ts"],"sourcesContent":["import homepage from './homepage';\nimport release from './release';\nimport releaseAction from './release-action';\nimport releaseValidation from './validation';\nimport scheduling from './scheduling';\nimport settings from './settings';\n\nexport const services = {\n homepage,\n release,\n 'release-action': releaseAction,\n 'release-validation': releaseValidation,\n scheduling,\n settings,\n};\n"],"names":["services","homepage","release","releaseAction","releaseValidation","scheduling","settings"],"mappings":";;;;;;;;;MAOaA,QAAW,GAAA;AACtBC,IAAAA,QAAAA;AACAC,IAAAA,OAAAA;IACA,gBAAkBC,EAAAA,aAAAA;IAClB,oBAAsBC,EAAAA,kBAAAA;AACtBC,IAAAA,UAAAA;AACAC,IAAAA;AACF;;;;"}
@@ -1,3 +1,4 @@
1
+ import createHomepageService from './homepage.mjs';
1
2
  import createReleaseService from './release.mjs';
2
3
  import createReleaseActionService from './release-action.mjs';
3
4
  import createReleaseValidationService from './validation.mjs';
@@ -5,6 +6,7 @@ import createSchedulingService from './scheduling.mjs';
5
6
  import createSettingsService from './settings.mjs';
6
7
 
7
8
  const services = {
9
+ homepage: createHomepageService,
8
10
  release: createReleaseService,
9
11
  'release-action': createReleaseActionService,
10
12
  'release-validation': createReleaseValidationService,
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../server/src/services/index.ts"],"sourcesContent":["import release from './release';\nimport releaseAction from './release-action';\nimport releaseValidation from './validation';\nimport scheduling from './scheduling';\nimport settings from './settings';\n\nexport const services = {\n release,\n 'release-action': releaseAction,\n 'release-validation': releaseValidation,\n scheduling,\n settings,\n};\n"],"names":["services","release","releaseAction","releaseValidation","scheduling","settings"],"mappings":";;;;;;MAMaA,QAAW,GAAA;AACtBC,aAAAA,oBAAAA;IACA,gBAAkBC,EAAAA,0BAAAA;IAClB,oBAAsBC,EAAAA,8BAAAA;AACtBC,gBAAAA,uBAAAA;AACAC,cAAAA;AACF;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../server/src/services/index.ts"],"sourcesContent":["import homepage from './homepage';\nimport release from './release';\nimport releaseAction from './release-action';\nimport releaseValidation from './validation';\nimport scheduling from './scheduling';\nimport settings from './settings';\n\nexport const services = {\n homepage,\n release,\n 'release-action': releaseAction,\n 'release-validation': releaseValidation,\n scheduling,\n settings,\n};\n"],"names":["services","homepage","release","releaseAction","releaseValidation","scheduling","settings"],"mappings":";;;;;;;MAOaA,QAAW,GAAA;AACtBC,cAAAA,qBAAAA;AACAC,aAAAA,oBAAAA;IACA,gBAAkBC,EAAAA,0BAAAA;IAClB,oBAAsBC,EAAAA,8BAAAA;AACtBC,gBAAAA,uBAAAA;AACAC,cAAAA;AACF;;;;"}
@@ -1,6 +1,5 @@
1
1
  'use strict';
2
2
 
3
- var nodeSchedule = require('node-schedule');
4
3
  var utils = require('@strapi/utils');
5
4
  var index = require('../utils/index.js');
6
5
  var constants = require('../constants.js');
@@ -18,26 +17,31 @@ const createSchedulingService = ({ strapi })=>{
18
17
  if (!release) {
19
18
  throw new utils.errors.NotFoundError(`No release found for id ${releaseId}`);
20
19
  }
21
- const job = nodeSchedule.scheduleJob(scheduleDate, async ()=>{
22
- try {
23
- await index.getService('release', {
24
- strapi
25
- }).publish(releaseId);
26
- // @TODO: Trigger webhook with success message
27
- } catch (error) {
28
- // @TODO: Trigger webhook with error message
20
+ const taskName = `publishRelease_${releaseId}`;
21
+ strapi.cron.add({
22
+ [taskName]: {
23
+ async task () {
24
+ try {
25
+ await index.getService('release', {
26
+ strapi
27
+ }).publish(releaseId);
28
+ // @TODO: Trigger webhook with success message
29
+ } catch (error) {
30
+ // @TODO: Trigger webhook with error message
31
+ }
32
+ },
33
+ options: scheduleDate
29
34
  }
30
- this.cancel(releaseId);
31
35
  });
32
36
  if (scheduledJobs.has(releaseId)) {
33
37
  this.cancel(releaseId);
34
38
  }
35
- scheduledJobs.set(releaseId, job);
39
+ scheduledJobs.set(releaseId, taskName);
36
40
  return scheduledJobs;
37
41
  },
38
42
  cancel (releaseId) {
39
43
  if (scheduledJobs.has(releaseId)) {
40
- scheduledJobs.get(releaseId).cancel();
44
+ strapi.cron.remove(scheduledJobs.get(releaseId));
41
45
  scheduledJobs.delete(releaseId);
42
46
  }
43
47
  return scheduledJobs;
@@ -1 +1 @@
1
- {"version":3,"file":"scheduling.js","sources":["../../../server/src/services/scheduling.ts"],"sourcesContent":["import { scheduleJob, Job } from 'node-schedule';\nimport type { Core } from '@strapi/types';\n\nimport { errors } from '@strapi/utils';\nimport { Release } from '../../../shared/contracts/releases';\nimport { getService } from '../utils';\nimport { RELEASE_MODEL_UID } from '../constants';\n\nconst createSchedulingService = ({ strapi }: { strapi: Core.Strapi }) => {\n const scheduledJobs = new Map<Release['id'], Job>();\n\n return {\n async set(releaseId: Release['id'], scheduleDate: Date) {\n const release = await strapi.db\n .query(RELEASE_MODEL_UID)\n .findOne({ where: { id: releaseId, releasedAt: null } });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n const job = scheduleJob(scheduleDate, async () => {\n try {\n await getService('release', { strapi }).publish(releaseId);\n // @TODO: Trigger webhook with success message\n } catch (error) {\n // @TODO: Trigger webhook with error message\n }\n\n this.cancel(releaseId);\n });\n\n if (scheduledJobs.has(releaseId)) {\n this.cancel(releaseId);\n }\n\n scheduledJobs.set(releaseId, job);\n\n return scheduledJobs;\n },\n\n cancel(releaseId: Release['id']) {\n if (scheduledJobs.has(releaseId)) {\n scheduledJobs.get(releaseId)!.cancel();\n scheduledJobs.delete(releaseId);\n }\n\n return scheduledJobs;\n },\n\n getAll() {\n return scheduledJobs;\n },\n\n /**\n * On bootstrap, we can use this function to make sure to sync the scheduled jobs from the database that are not yet released\n * This is useful in case the server was restarted and the scheduled jobs were lost\n * This also could be used to sync different Strapi instances in case of a cluster\n */\n async syncFromDatabase() {\n const releases = await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n scheduledAt: {\n $gte: new Date(),\n },\n releasedAt: null,\n },\n });\n\n for (const release of releases) {\n this.set(release.id, release.scheduledAt);\n }\n\n return scheduledJobs;\n },\n };\n};\n\nexport default createSchedulingService;\n"],"names":["createSchedulingService","strapi","scheduledJobs","Map","set","releaseId","scheduleDate","release","db","query","RELEASE_MODEL_UID","findOne","where","id","releasedAt","errors","NotFoundError","job","scheduleJob","getService","publish","error","cancel","has","get","delete","getAll","syncFromDatabase","releases","findMany","scheduledAt","$gte","Date"],"mappings":";;;;;;;AAQA,MAAMA,uBAA0B,GAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;AAClE,IAAA,MAAMC,gBAAgB,IAAIC,GAAAA,EAAAA;IAE1B,OAAO;QACL,MAAMC,GAAAA,CAAAA,CAAIC,SAAwB,EAAEC,YAAkB,EAAA;YACpD,MAAMC,OAAAA,GAAU,MAAMN,MAAOO,CAAAA,EAAE,CAC5BC,KAAK,CAACC,2BACNC,CAAAA,CAAAA,OAAO,CAAC;gBAAEC,KAAO,EAAA;oBAAEC,EAAIR,EAAAA,SAAAA;oBAAWS,UAAY,EAAA;AAAK;AAAE,aAAA,CAAA;AAExD,YAAA,IAAI,CAACP,OAAS,EAAA;gBACZ,MAAM,IAAIQ,aAAOC,aAAa,CAAC,CAAC,wBAAwB,EAAEX,UAAU,CAAC,CAAA;AACvE;YAEA,MAAMY,GAAAA,GAAMC,yBAAYZ,YAAc,EAAA,UAAA;gBACpC,IAAI;AACF,oBAAA,MAAMa,iBAAW,SAAW,EAAA;AAAElB,wBAAAA;AAAO,qBAAA,CAAA,CAAGmB,OAAO,CAACf,SAAAA,CAAAA;;AAElD,iBAAA,CAAE,OAAOgB,KAAO,EAAA;;AAEhB;gBAEA,IAAI,CAACC,MAAM,CAACjB,SAAAA,CAAAA;AACd,aAAA,CAAA;YAEA,IAAIH,aAAAA,CAAcqB,GAAG,CAAClB,SAAY,CAAA,EAAA;gBAChC,IAAI,CAACiB,MAAM,CAACjB,SAAAA,CAAAA;AACd;YAEAH,aAAcE,CAAAA,GAAG,CAACC,SAAWY,EAAAA,GAAAA,CAAAA;YAE7B,OAAOf,aAAAA;AACT,SAAA;AAEAoB,QAAAA,MAAAA,CAAAA,CAAOjB,SAAwB,EAAA;YAC7B,IAAIH,aAAAA,CAAcqB,GAAG,CAAClB,SAAY,CAAA,EAAA;gBAChCH,aAAcsB,CAAAA,GAAG,CAACnB,SAAAA,CAAAA,CAAYiB,MAAM,EAAA;AACpCpB,gBAAAA,aAAAA,CAAcuB,MAAM,CAACpB,SAAAA,CAAAA;AACvB;YAEA,OAAOH,aAAAA;AACT,SAAA;AAEAwB,QAAAA,MAAAA,CAAAA,GAAAA;YACE,OAAOxB,aAAAA;AACT,SAAA;AAEA;;;;AAIC,QACD,MAAMyB,gBAAAA,CAAAA,GAAAA;YACJ,MAAMC,QAAAA,GAAW,MAAM3B,MAAOO,CAAAA,EAAE,CAACC,KAAK,CAACC,2BAAmBmB,CAAAA,CAAAA,QAAQ,CAAC;gBACjEjB,KAAO,EAAA;oBACLkB,WAAa,EAAA;AACXC,wBAAAA,IAAAA,EAAM,IAAIC,IAAAA;AACZ,qBAAA;oBACAlB,UAAY,EAAA;AACd;AACF,aAAA,CAAA;YAEA,KAAK,MAAMP,WAAWqB,QAAU,CAAA;AAC9B,gBAAA,IAAI,CAACxB,GAAG,CAACG,QAAQM,EAAE,EAAEN,QAAQuB,WAAW,CAAA;AAC1C;YAEA,OAAO5B,aAAAA;AACT;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"scheduling.js","sources":["../../../server/src/services/scheduling.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { errors } from '@strapi/utils';\nimport { Release } from '../../../shared/contracts/releases';\nimport { getService } from '../utils';\nimport { RELEASE_MODEL_UID } from '../constants';\n\nconst createSchedulingService = ({ strapi }: { strapi: Core.Strapi }) => {\n const scheduledJobs = new Map<Release['id'], string>();\n\n return {\n async set(releaseId: Release['id'], scheduleDate: Date) {\n const release = await strapi.db\n .query(RELEASE_MODEL_UID)\n .findOne({ where: { id: releaseId, releasedAt: null } });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n const taskName = `publishRelease_${releaseId}`;\n\n strapi.cron.add({\n [taskName]: {\n async task() {\n try {\n await getService('release', { strapi }).publish(releaseId);\n // @TODO: Trigger webhook with success message\n } catch (error) {\n // @TODO: Trigger webhook with error message\n }\n },\n options: scheduleDate,\n },\n });\n\n if (scheduledJobs.has(releaseId)) {\n this.cancel(releaseId);\n }\n\n scheduledJobs.set(releaseId, taskName);\n\n return scheduledJobs;\n },\n\n cancel(releaseId: Release['id']) {\n if (scheduledJobs.has(releaseId)) {\n strapi.cron.remove(scheduledJobs.get(releaseId)!);\n scheduledJobs.delete(releaseId);\n }\n\n return scheduledJobs;\n },\n\n getAll() {\n return scheduledJobs;\n },\n\n /**\n * On bootstrap, we can use this function to make sure to sync the scheduled jobs from the database that are not yet released\n * This is useful in case the server was restarted and the scheduled jobs were lost\n * This also could be used to sync different Strapi instances in case of a cluster\n */\n async syncFromDatabase() {\n const releases = await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n scheduledAt: {\n $gte: new Date(),\n },\n releasedAt: null,\n },\n });\n\n for (const release of releases) {\n this.set(release.id, release.scheduledAt);\n }\n\n return scheduledJobs;\n },\n };\n};\n\nexport default createSchedulingService;\n"],"names":["createSchedulingService","strapi","scheduledJobs","Map","set","releaseId","scheduleDate","release","db","query","RELEASE_MODEL_UID","findOne","where","id","releasedAt","errors","NotFoundError","taskName","cron","add","task","getService","publish","error","options","has","cancel","remove","get","delete","getAll","syncFromDatabase","releases","findMany","scheduledAt","$gte","Date"],"mappings":";;;;;;AAOA,MAAMA,uBAA0B,GAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;AAClE,IAAA,MAAMC,gBAAgB,IAAIC,GAAAA,EAAAA;IAE1B,OAAO;QACL,MAAMC,GAAAA,CAAAA,CAAIC,SAAwB,EAAEC,YAAkB,EAAA;YACpD,MAAMC,OAAAA,GAAU,MAAMN,MAAOO,CAAAA,EAAE,CAC5BC,KAAK,CAACC,2BACNC,CAAAA,CAAAA,OAAO,CAAC;gBAAEC,KAAO,EAAA;oBAAEC,EAAIR,EAAAA,SAAAA;oBAAWS,UAAY,EAAA;AAAK;AAAE,aAAA,CAAA;AAExD,YAAA,IAAI,CAACP,OAAS,EAAA;gBACZ,MAAM,IAAIQ,aAAOC,aAAa,CAAC,CAAC,wBAAwB,EAAEX,UAAU,CAAC,CAAA;AACvE;AAEA,YAAA,MAAMY,QAAW,GAAA,CAAC,eAAe,EAAEZ,UAAU,CAAC;YAE9CJ,MAAOiB,CAAAA,IAAI,CAACC,GAAG,CAAC;AACd,gBAAA,CAACF,WAAW;oBACV,MAAMG,IAAAA,CAAAA,GAAAA;wBACJ,IAAI;AACF,4BAAA,MAAMC,iBAAW,SAAW,EAAA;AAAEpB,gCAAAA;AAAO,6BAAA,CAAA,CAAGqB,OAAO,CAACjB,SAAAA,CAAAA;;AAElD,yBAAA,CAAE,OAAOkB,KAAO,EAAA;;AAEhB;AACF,qBAAA;oBACAC,OAASlB,EAAAA;AACX;AACF,aAAA,CAAA;YAEA,IAAIJ,aAAAA,CAAcuB,GAAG,CAACpB,SAAY,CAAA,EAAA;gBAChC,IAAI,CAACqB,MAAM,CAACrB,SAAAA,CAAAA;AACd;YAEAH,aAAcE,CAAAA,GAAG,CAACC,SAAWY,EAAAA,QAAAA,CAAAA;YAE7B,OAAOf,aAAAA;AACT,SAAA;AAEAwB,QAAAA,MAAAA,CAAAA,CAAOrB,SAAwB,EAAA;YAC7B,IAAIH,aAAAA,CAAcuB,GAAG,CAACpB,SAAY,CAAA,EAAA;AAChCJ,gBAAAA,MAAAA,CAAOiB,IAAI,CAACS,MAAM,CAACzB,aAAAA,CAAc0B,GAAG,CAACvB,SAAAA,CAAAA,CAAAA;AACrCH,gBAAAA,aAAAA,CAAc2B,MAAM,CAACxB,SAAAA,CAAAA;AACvB;YAEA,OAAOH,aAAAA;AACT,SAAA;AAEA4B,QAAAA,MAAAA,CAAAA,GAAAA;YACE,OAAO5B,aAAAA;AACT,SAAA;AAEA;;;;AAIC,QACD,MAAM6B,gBAAAA,CAAAA,GAAAA;YACJ,MAAMC,QAAAA,GAAW,MAAM/B,MAAOO,CAAAA,EAAE,CAACC,KAAK,CAACC,2BAAmBuB,CAAAA,CAAAA,QAAQ,CAAC;gBACjErB,KAAO,EAAA;oBACLsB,WAAa,EAAA;AACXC,wBAAAA,IAAAA,EAAM,IAAIC,IAAAA;AACZ,qBAAA;oBACAtB,UAAY,EAAA;AACd;AACF,aAAA,CAAA;YAEA,KAAK,MAAMP,WAAWyB,QAAU,CAAA;AAC9B,gBAAA,IAAI,CAAC5B,GAAG,CAACG,QAAQM,EAAE,EAAEN,QAAQ2B,WAAW,CAAA;AAC1C;YAEA,OAAOhC,aAAAA;AACT;AACF,KAAA;AACF;;;;"}
@@ -1,4 +1,3 @@
1
- import { scheduleJob } from 'node-schedule';
2
1
  import { errors } from '@strapi/utils';
3
2
  import { getService } from '../utils/index.mjs';
4
3
  import { RELEASE_MODEL_UID } from '../constants.mjs';
@@ -16,26 +15,31 @@ const createSchedulingService = ({ strapi })=>{
16
15
  if (!release) {
17
16
  throw new errors.NotFoundError(`No release found for id ${releaseId}`);
18
17
  }
19
- const job = scheduleJob(scheduleDate, async ()=>{
20
- try {
21
- await getService('release', {
22
- strapi
23
- }).publish(releaseId);
24
- // @TODO: Trigger webhook with success message
25
- } catch (error) {
26
- // @TODO: Trigger webhook with error message
18
+ const taskName = `publishRelease_${releaseId}`;
19
+ strapi.cron.add({
20
+ [taskName]: {
21
+ async task () {
22
+ try {
23
+ await getService('release', {
24
+ strapi
25
+ }).publish(releaseId);
26
+ // @TODO: Trigger webhook with success message
27
+ } catch (error) {
28
+ // @TODO: Trigger webhook with error message
29
+ }
30
+ },
31
+ options: scheduleDate
27
32
  }
28
- this.cancel(releaseId);
29
33
  });
30
34
  if (scheduledJobs.has(releaseId)) {
31
35
  this.cancel(releaseId);
32
36
  }
33
- scheduledJobs.set(releaseId, job);
37
+ scheduledJobs.set(releaseId, taskName);
34
38
  return scheduledJobs;
35
39
  },
36
40
  cancel (releaseId) {
37
41
  if (scheduledJobs.has(releaseId)) {
38
- scheduledJobs.get(releaseId).cancel();
42
+ strapi.cron.remove(scheduledJobs.get(releaseId));
39
43
  scheduledJobs.delete(releaseId);
40
44
  }
41
45
  return scheduledJobs;
@@ -1 +1 @@
1
- {"version":3,"file":"scheduling.mjs","sources":["../../../server/src/services/scheduling.ts"],"sourcesContent":["import { scheduleJob, Job } from 'node-schedule';\nimport type { Core } from '@strapi/types';\n\nimport { errors } from '@strapi/utils';\nimport { Release } from '../../../shared/contracts/releases';\nimport { getService } from '../utils';\nimport { RELEASE_MODEL_UID } from '../constants';\n\nconst createSchedulingService = ({ strapi }: { strapi: Core.Strapi }) => {\n const scheduledJobs = new Map<Release['id'], Job>();\n\n return {\n async set(releaseId: Release['id'], scheduleDate: Date) {\n const release = await strapi.db\n .query(RELEASE_MODEL_UID)\n .findOne({ where: { id: releaseId, releasedAt: null } });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n const job = scheduleJob(scheduleDate, async () => {\n try {\n await getService('release', { strapi }).publish(releaseId);\n // @TODO: Trigger webhook with success message\n } catch (error) {\n // @TODO: Trigger webhook with error message\n }\n\n this.cancel(releaseId);\n });\n\n if (scheduledJobs.has(releaseId)) {\n this.cancel(releaseId);\n }\n\n scheduledJobs.set(releaseId, job);\n\n return scheduledJobs;\n },\n\n cancel(releaseId: Release['id']) {\n if (scheduledJobs.has(releaseId)) {\n scheduledJobs.get(releaseId)!.cancel();\n scheduledJobs.delete(releaseId);\n }\n\n return scheduledJobs;\n },\n\n getAll() {\n return scheduledJobs;\n },\n\n /**\n * On bootstrap, we can use this function to make sure to sync the scheduled jobs from the database that are not yet released\n * This is useful in case the server was restarted and the scheduled jobs were lost\n * This also could be used to sync different Strapi instances in case of a cluster\n */\n async syncFromDatabase() {\n const releases = await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n scheduledAt: {\n $gte: new Date(),\n },\n releasedAt: null,\n },\n });\n\n for (const release of releases) {\n this.set(release.id, release.scheduledAt);\n }\n\n return scheduledJobs;\n },\n };\n};\n\nexport default createSchedulingService;\n"],"names":["createSchedulingService","strapi","scheduledJobs","Map","set","releaseId","scheduleDate","release","db","query","RELEASE_MODEL_UID","findOne","where","id","releasedAt","errors","NotFoundError","job","scheduleJob","getService","publish","error","cancel","has","get","delete","getAll","syncFromDatabase","releases","findMany","scheduledAt","$gte","Date"],"mappings":";;;;;AAQA,MAAMA,uBAA0B,GAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;AAClE,IAAA,MAAMC,gBAAgB,IAAIC,GAAAA,EAAAA;IAE1B,OAAO;QACL,MAAMC,GAAAA,CAAAA,CAAIC,SAAwB,EAAEC,YAAkB,EAAA;YACpD,MAAMC,OAAAA,GAAU,MAAMN,MAAOO,CAAAA,EAAE,CAC5BC,KAAK,CAACC,iBACNC,CAAAA,CAAAA,OAAO,CAAC;gBAAEC,KAAO,EAAA;oBAAEC,EAAIR,EAAAA,SAAAA;oBAAWS,UAAY,EAAA;AAAK;AAAE,aAAA,CAAA;AAExD,YAAA,IAAI,CAACP,OAAS,EAAA;gBACZ,MAAM,IAAIQ,OAAOC,aAAa,CAAC,CAAC,wBAAwB,EAAEX,UAAU,CAAC,CAAA;AACvE;YAEA,MAAMY,GAAAA,GAAMC,YAAYZ,YAAc,EAAA,UAAA;gBACpC,IAAI;AACF,oBAAA,MAAMa,WAAW,SAAW,EAAA;AAAElB,wBAAAA;AAAO,qBAAA,CAAA,CAAGmB,OAAO,CAACf,SAAAA,CAAAA;;AAElD,iBAAA,CAAE,OAAOgB,KAAO,EAAA;;AAEhB;gBAEA,IAAI,CAACC,MAAM,CAACjB,SAAAA,CAAAA;AACd,aAAA,CAAA;YAEA,IAAIH,aAAAA,CAAcqB,GAAG,CAAClB,SAAY,CAAA,EAAA;gBAChC,IAAI,CAACiB,MAAM,CAACjB,SAAAA,CAAAA;AACd;YAEAH,aAAcE,CAAAA,GAAG,CAACC,SAAWY,EAAAA,GAAAA,CAAAA;YAE7B,OAAOf,aAAAA;AACT,SAAA;AAEAoB,QAAAA,MAAAA,CAAAA,CAAOjB,SAAwB,EAAA;YAC7B,IAAIH,aAAAA,CAAcqB,GAAG,CAAClB,SAAY,CAAA,EAAA;gBAChCH,aAAcsB,CAAAA,GAAG,CAACnB,SAAAA,CAAAA,CAAYiB,MAAM,EAAA;AACpCpB,gBAAAA,aAAAA,CAAcuB,MAAM,CAACpB,SAAAA,CAAAA;AACvB;YAEA,OAAOH,aAAAA;AACT,SAAA;AAEAwB,QAAAA,MAAAA,CAAAA,GAAAA;YACE,OAAOxB,aAAAA;AACT,SAAA;AAEA;;;;AAIC,QACD,MAAMyB,gBAAAA,CAAAA,GAAAA;YACJ,MAAMC,QAAAA,GAAW,MAAM3B,MAAOO,CAAAA,EAAE,CAACC,KAAK,CAACC,iBAAmBmB,CAAAA,CAAAA,QAAQ,CAAC;gBACjEjB,KAAO,EAAA;oBACLkB,WAAa,EAAA;AACXC,wBAAAA,IAAAA,EAAM,IAAIC,IAAAA;AACZ,qBAAA;oBACAlB,UAAY,EAAA;AACd;AACF,aAAA,CAAA;YAEA,KAAK,MAAMP,WAAWqB,QAAU,CAAA;AAC9B,gBAAA,IAAI,CAACxB,GAAG,CAACG,QAAQM,EAAE,EAAEN,QAAQuB,WAAW,CAAA;AAC1C;YAEA,OAAO5B,aAAAA;AACT;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"scheduling.mjs","sources":["../../../server/src/services/scheduling.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { errors } from '@strapi/utils';\nimport { Release } from '../../../shared/contracts/releases';\nimport { getService } from '../utils';\nimport { RELEASE_MODEL_UID } from '../constants';\n\nconst createSchedulingService = ({ strapi }: { strapi: Core.Strapi }) => {\n const scheduledJobs = new Map<Release['id'], string>();\n\n return {\n async set(releaseId: Release['id'], scheduleDate: Date) {\n const release = await strapi.db\n .query(RELEASE_MODEL_UID)\n .findOne({ where: { id: releaseId, releasedAt: null } });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n const taskName = `publishRelease_${releaseId}`;\n\n strapi.cron.add({\n [taskName]: {\n async task() {\n try {\n await getService('release', { strapi }).publish(releaseId);\n // @TODO: Trigger webhook with success message\n } catch (error) {\n // @TODO: Trigger webhook with error message\n }\n },\n options: scheduleDate,\n },\n });\n\n if (scheduledJobs.has(releaseId)) {\n this.cancel(releaseId);\n }\n\n scheduledJobs.set(releaseId, taskName);\n\n return scheduledJobs;\n },\n\n cancel(releaseId: Release['id']) {\n if (scheduledJobs.has(releaseId)) {\n strapi.cron.remove(scheduledJobs.get(releaseId)!);\n scheduledJobs.delete(releaseId);\n }\n\n return scheduledJobs;\n },\n\n getAll() {\n return scheduledJobs;\n },\n\n /**\n * On bootstrap, we can use this function to make sure to sync the scheduled jobs from the database that are not yet released\n * This is useful in case the server was restarted and the scheduled jobs were lost\n * This also could be used to sync different Strapi instances in case of a cluster\n */\n async syncFromDatabase() {\n const releases = await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n scheduledAt: {\n $gte: new Date(),\n },\n releasedAt: null,\n },\n });\n\n for (const release of releases) {\n this.set(release.id, release.scheduledAt);\n }\n\n return scheduledJobs;\n },\n };\n};\n\nexport default createSchedulingService;\n"],"names":["createSchedulingService","strapi","scheduledJobs","Map","set","releaseId","scheduleDate","release","db","query","RELEASE_MODEL_UID","findOne","where","id","releasedAt","errors","NotFoundError","taskName","cron","add","task","getService","publish","error","options","has","cancel","remove","get","delete","getAll","syncFromDatabase","releases","findMany","scheduledAt","$gte","Date"],"mappings":";;;;AAOA,MAAMA,uBAA0B,GAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;AAClE,IAAA,MAAMC,gBAAgB,IAAIC,GAAAA,EAAAA;IAE1B,OAAO;QACL,MAAMC,GAAAA,CAAAA,CAAIC,SAAwB,EAAEC,YAAkB,EAAA;YACpD,MAAMC,OAAAA,GAAU,MAAMN,MAAOO,CAAAA,EAAE,CAC5BC,KAAK,CAACC,iBACNC,CAAAA,CAAAA,OAAO,CAAC;gBAAEC,KAAO,EAAA;oBAAEC,EAAIR,EAAAA,SAAAA;oBAAWS,UAAY,EAAA;AAAK;AAAE,aAAA,CAAA;AAExD,YAAA,IAAI,CAACP,OAAS,EAAA;gBACZ,MAAM,IAAIQ,OAAOC,aAAa,CAAC,CAAC,wBAAwB,EAAEX,UAAU,CAAC,CAAA;AACvE;AAEA,YAAA,MAAMY,QAAW,GAAA,CAAC,eAAe,EAAEZ,UAAU,CAAC;YAE9CJ,MAAOiB,CAAAA,IAAI,CAACC,GAAG,CAAC;AACd,gBAAA,CAACF,WAAW;oBACV,MAAMG,IAAAA,CAAAA,GAAAA;wBACJ,IAAI;AACF,4BAAA,MAAMC,WAAW,SAAW,EAAA;AAAEpB,gCAAAA;AAAO,6BAAA,CAAA,CAAGqB,OAAO,CAACjB,SAAAA,CAAAA;;AAElD,yBAAA,CAAE,OAAOkB,KAAO,EAAA;;AAEhB;AACF,qBAAA;oBACAC,OAASlB,EAAAA;AACX;AACF,aAAA,CAAA;YAEA,IAAIJ,aAAAA,CAAcuB,GAAG,CAACpB,SAAY,CAAA,EAAA;gBAChC,IAAI,CAACqB,MAAM,CAACrB,SAAAA,CAAAA;AACd;YAEAH,aAAcE,CAAAA,GAAG,CAACC,SAAWY,EAAAA,QAAAA,CAAAA;YAE7B,OAAOf,aAAAA;AACT,SAAA;AAEAwB,QAAAA,MAAAA,CAAAA,CAAOrB,SAAwB,EAAA;YAC7B,IAAIH,aAAAA,CAAcuB,GAAG,CAACpB,SAAY,CAAA,EAAA;AAChCJ,gBAAAA,MAAAA,CAAOiB,IAAI,CAACS,MAAM,CAACzB,aAAAA,CAAc0B,GAAG,CAACvB,SAAAA,CAAAA,CAAAA;AACrCH,gBAAAA,aAAAA,CAAc2B,MAAM,CAACxB,SAAAA,CAAAA;AACvB;YAEA,OAAOH,aAAAA;AACT,SAAA;AAEA4B,QAAAA,MAAAA,CAAAA,GAAAA;YACE,OAAO5B,aAAAA;AACT,SAAA;AAEA;;;;AAIC,QACD,MAAM6B,gBAAAA,CAAAA,GAAAA;YACJ,MAAMC,QAAAA,GAAW,MAAM/B,MAAOO,CAAAA,EAAE,CAACC,KAAK,CAACC,iBAAmBuB,CAAAA,CAAAA,QAAQ,CAAC;gBACjErB,KAAO,EAAA;oBACLsB,WAAa,EAAA;AACXC,wBAAAA,IAAAA,EAAM,IAAIC,IAAAA;AACZ,qBAAA;oBACAtB,UAAY,EAAA;AACd;AACF,aAAA,CAAA;YAEA,KAAK,MAAMP,WAAWyB,QAAU,CAAA;AAC9B,gBAAA,IAAI,CAAC5B,GAAG,CAACG,QAAQM,EAAE,EAAEN,QAAQ2B,WAAW,CAAA;AAC1C;YAEA,OAAOhC,aAAAA;AACT;AACF,KAAA;AACF;;;;"}
@@ -0,0 +1,6 @@
1
+ import type { GetUpcomingReleases } from '../../../shared/contracts/homepage';
2
+ declare const homepageController: () => {
3
+ getUpcomingReleases(): Promise<GetUpcomingReleases.Response>;
4
+ };
5
+ export default homepageController;
6
+ //# sourceMappingURL=homepage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/homepage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAE9E,QAAA,MAAM,kBAAkB;2BAIS,QAAQ,4BAA4B,CAAC;CAIrE,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -1,5 +1,8 @@
1
1
  /// <reference types="koa" />
2
2
  export declare const controllers: {
3
+ homepage: () => {
4
+ getUpcomingReleases(): Promise<import("../../../shared/contracts/homepage").GetUpcomingReleases.Response>;
5
+ };
3
6
  release: {
4
7
  findByDocumentAttached(ctx: import("koa").Context): Promise<void>;
5
8
  findPage(ctx: import("koa").Context): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/index.ts"],"names":[],"mappings":";AAIA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;CAIvB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/index.ts"],"names":[],"mappings":";AAKA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;CAKvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../../../server/src/destroy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAK1C,eAAO,MAAM,OAAO,eAAsB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,kBAQhE,CAAC"}
1
+ {"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../../../server/src/destroy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAK1C,eAAO,MAAM,OAAO,eAAsB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,kBAQhE,CAAC"}