@strapi/content-releases 5.12.0 → 5.12.2
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/admin/assets/purchase-page-illustration-dark.svg.js +6 -0
- package/dist/admin/assets/purchase-page-illustration-dark.svg.js.map +1 -0
- package/dist/admin/assets/purchase-page-illustration-dark.svg.mjs +4 -0
- package/dist/admin/assets/purchase-page-illustration-dark.svg.mjs.map +1 -0
- package/dist/admin/assets/purchase-page-illustration-light.svg.js +6 -0
- package/dist/admin/assets/purchase-page-illustration-light.svg.js.map +1 -0
- package/dist/admin/assets/purchase-page-illustration-light.svg.mjs +4 -0
- package/dist/admin/assets/purchase-page-illustration-light.svg.mjs.map +1 -0
- package/dist/admin/components/EntryValidationPopover.js +344 -0
- package/dist/admin/components/EntryValidationPopover.js.map +1 -0
- package/dist/admin/components/EntryValidationPopover.mjs +342 -0
- package/dist/admin/components/EntryValidationPopover.mjs.map +1 -0
- package/dist/admin/components/RelativeTime.js +76 -0
- package/dist/admin/components/RelativeTime.js.map +1 -0
- package/dist/admin/components/RelativeTime.mjs +55 -0
- package/dist/admin/components/RelativeTime.mjs.map +1 -0
- package/dist/admin/components/ReleaseAction.js +201 -0
- package/dist/admin/components/ReleaseAction.js.map +1 -0
- package/dist/admin/components/ReleaseAction.mjs +199 -0
- package/dist/admin/components/ReleaseAction.mjs.map +1 -0
- package/dist/admin/components/ReleaseActionMenu.js +243 -0
- package/dist/admin/components/ReleaseActionMenu.js.map +1 -0
- package/dist/admin/components/ReleaseActionMenu.mjs +222 -0
- package/dist/admin/components/ReleaseActionMenu.mjs.map +1 -0
- package/dist/admin/components/ReleaseActionModal.js +268 -0
- package/dist/admin/components/ReleaseActionModal.js.map +1 -0
- package/dist/admin/components/ReleaseActionModal.mjs +244 -0
- package/dist/admin/components/ReleaseActionModal.mjs.map +1 -0
- package/dist/admin/components/ReleaseActionOptions.js +104 -0
- package/dist/admin/components/ReleaseActionOptions.js.map +1 -0
- package/dist/admin/components/ReleaseActionOptions.mjs +102 -0
- package/dist/admin/components/ReleaseActionOptions.mjs.map +1 -0
- package/dist/admin/components/ReleaseListCell.js +103 -0
- package/dist/admin/components/ReleaseListCell.js.map +1 -0
- package/dist/admin/components/ReleaseListCell.mjs +100 -0
- package/dist/admin/components/ReleaseListCell.mjs.map +1 -0
- package/dist/admin/components/ReleaseModal.js +323 -0
- package/dist/admin/components/ReleaseModal.js.map +1 -0
- package/dist/admin/components/ReleaseModal.mjs +302 -0
- package/dist/admin/components/ReleaseModal.mjs.map +1 -0
- package/dist/admin/components/ReleasesPanel.js +138 -0
- package/dist/admin/components/ReleasesPanel.js.map +1 -0
- package/dist/admin/components/ReleasesPanel.mjs +136 -0
- package/dist/admin/components/ReleasesPanel.mjs.map +1 -0
- package/dist/admin/constants.js +77 -0
- package/dist/admin/constants.js.map +1 -0
- package/dist/admin/constants.mjs +75 -0
- package/dist/admin/constants.mjs.map +1 -0
- package/dist/admin/index.js +120 -14
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +121 -13
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/{chunks/hooks-DA5VbUAp.js → modules/hooks.js} +1 -1
- package/dist/admin/modules/hooks.js.map +1 -0
- package/dist/admin/{chunks/hooks-CFk_8Q0b.mjs → modules/hooks.mjs} +2 -2
- package/dist/admin/modules/hooks.mjs.map +1 -0
- package/dist/admin/pages/App.js +29 -0
- package/dist/admin/pages/App.js.map +1 -0
- package/dist/admin/pages/App.mjs +27 -0
- package/dist/admin/pages/App.mjs.map +1 -0
- package/dist/admin/pages/PurchaseContentReleases.js +192 -0
- package/dist/admin/pages/PurchaseContentReleases.js.map +1 -0
- package/dist/admin/pages/PurchaseContentReleases.mjs +190 -0
- package/dist/admin/pages/PurchaseContentReleases.mjs.map +1 -0
- package/dist/admin/pages/ReleaseDetailsPage.js +821 -0
- package/dist/admin/pages/ReleaseDetailsPage.js.map +1 -0
- package/dist/admin/pages/ReleaseDetailsPage.mjs +800 -0
- package/dist/admin/pages/ReleaseDetailsPage.mjs.map +1 -0
- package/dist/admin/pages/ReleasesPage.js +397 -0
- package/dist/admin/pages/ReleasesPage.js.map +1 -0
- package/dist/admin/pages/ReleasesPage.mjs +375 -0
- package/dist/admin/pages/ReleasesPage.mjs.map +1 -0
- package/dist/admin/{chunks/ReleasesSettingsPage-KRcoI1bC.js → pages/ReleasesSettingsPage.js} +9 -17
- package/dist/admin/pages/ReleasesSettingsPage.js.map +1 -0
- package/dist/admin/{chunks/ReleasesSettingsPage-DUKdFdvx.mjs → pages/ReleasesSettingsPage.mjs} +5 -13
- package/dist/admin/pages/ReleasesSettingsPage.mjs.map +1 -0
- package/dist/admin/pluginId.js +6 -0
- package/dist/admin/pluginId.js.map +1 -0
- package/dist/admin/pluginId.mjs +4 -0
- package/dist/admin/pluginId.mjs.map +1 -0
- package/dist/admin/services/release.js +464 -0
- package/dist/admin/services/release.js.map +1 -0
- package/dist/admin/services/release.mjs +447 -0
- package/dist/admin/services/release.mjs.map +1 -0
- package/dist/admin/store/hooks.js +8 -0
- package/dist/admin/store/hooks.js.map +1 -0
- package/dist/admin/store/hooks.mjs +6 -0
- package/dist/admin/store/hooks.mjs.map +1 -0
- package/dist/admin/{chunks/en-BOpqX2t_.js → translations/en.json.js} +2 -2
- package/dist/admin/translations/en.json.js.map +1 -0
- package/dist/admin/{chunks/en-aQo8Bn_U.mjs → translations/en.json.mjs} +1 -1
- package/dist/admin/translations/en.json.mjs.map +1 -0
- package/dist/admin/{chunks/uk-9T9su-bj.js → translations/uk.json.js} +2 -2
- package/dist/admin/translations/uk.json.js.map +1 -0
- package/dist/admin/{chunks/uk-Bp9HotPq.mjs → translations/uk.json.mjs} +1 -1
- package/dist/admin/translations/uk.json.mjs.map +1 -0
- package/dist/admin/utils/api.js +8 -0
- package/dist/admin/utils/api.js.map +1 -0
- package/dist/admin/utils/api.mjs +6 -0
- package/dist/admin/utils/api.mjs.map +1 -0
- package/dist/admin/utils/prefixPluginTranslations.js +11 -0
- package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
- package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
- package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
- package/dist/admin/utils/time.js +42 -0
- package/dist/admin/utils/time.js.map +1 -0
- package/dist/admin/utils/time.mjs +39 -0
- package/dist/admin/utils/time.mjs.map +1 -0
- package/dist/admin/{chunks/schemas-DS7NeFDN.js → validation/schemas.js} +1 -1
- package/dist/admin/validation/schemas.js.map +1 -0
- package/dist/admin/{chunks/schemas-DMt8h1z-.mjs → validation/schemas.mjs} +2 -2
- package/dist/admin/validation/schemas.mjs.map +1 -0
- package/dist/server/bootstrap.js +68 -0
- package/dist/server/bootstrap.js.map +1 -0
- package/dist/server/bootstrap.mjs +66 -0
- package/dist/server/bootstrap.mjs.map +1 -0
- package/dist/server/constants.js +74 -0
- package/dist/server/constants.js.map +1 -0
- package/dist/server/constants.mjs +69 -0
- package/dist/server/constants.mjs.map +1 -0
- package/dist/server/content-types/index.js +12 -0
- package/dist/server/content-types/index.js.map +1 -0
- package/dist/server/content-types/index.mjs +10 -0
- package/dist/server/content-types/index.mjs.map +1 -0
- package/dist/server/content-types/release/index.js +10 -0
- package/dist/server/content-types/release/index.js.map +1 -0
- package/dist/server/content-types/release/index.mjs +8 -0
- package/dist/server/content-types/release/index.mjs.map +1 -0
- package/dist/server/content-types/release/schema.js +58 -0
- package/dist/server/content-types/release/schema.js.map +1 -0
- package/dist/server/content-types/release/schema.mjs +56 -0
- package/dist/server/content-types/release/schema.mjs.map +1 -0
- package/dist/server/content-types/release-action/index.js +10 -0
- package/dist/server/content-types/release-action/index.js.map +1 -0
- package/dist/server/content-types/release-action/index.mjs +8 -0
- package/dist/server/content-types/release-action/index.mjs.map +1 -0
- package/dist/server/content-types/release-action/schema.js +55 -0
- package/dist/server/content-types/release-action/schema.js.map +1 -0
- package/dist/server/content-types/release-action/schema.mjs +53 -0
- package/dist/server/content-types/release-action/schema.mjs.map +1 -0
- package/dist/server/controllers/index.js +14 -0
- package/dist/server/controllers/index.js.map +1 -0
- package/dist/server/controllers/index.mjs +12 -0
- package/dist/server/controllers/index.mjs.map +1 -0
- package/dist/server/controllers/release-action.js +150 -0
- package/dist/server/controllers/release-action.js.map +1 -0
- package/dist/server/controllers/release-action.mjs +148 -0
- package/dist/server/controllers/release-action.mjs.map +1 -0
- package/dist/server/controllers/release.js +302 -0
- package/dist/server/controllers/release.js.map +1 -0
- package/dist/server/controllers/release.mjs +300 -0
- package/dist/server/controllers/release.mjs.map +1 -0
- package/dist/server/controllers/settings.js +37 -0
- package/dist/server/controllers/settings.js.map +1 -0
- package/dist/server/controllers/settings.mjs +35 -0
- package/dist/server/controllers/settings.mjs.map +1 -0
- package/dist/server/controllers/validation/release-action.js +34 -0
- package/dist/server/controllers/validation/release-action.js.map +1 -0
- package/dist/server/controllers/validation/release-action.mjs +30 -0
- package/dist/server/controllers/validation/release-action.mjs.map +1 -0
- package/dist/server/controllers/validation/release.js +26 -0
- package/dist/server/controllers/validation/release.js.map +1 -0
- package/dist/server/controllers/validation/release.mjs +22 -0
- package/dist/server/controllers/validation/release.mjs.map +1 -0
- package/dist/server/controllers/validation/settings.js +32 -0
- package/dist/server/controllers/validation/settings.js.map +1 -0
- package/dist/server/controllers/validation/settings.mjs +10 -0
- package/dist/server/controllers/validation/settings.mjs.map +1 -0
- package/dist/server/destroy.js +15 -0
- package/dist/server/destroy.js.map +1 -0
- package/dist/server/destroy.mjs +13 -0
- package/dist/server/destroy.mjs.map +1 -0
- package/dist/server/index.js +16 -2336
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +7 -2308
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/middlewares/documents.js +104 -0
- package/dist/server/middlewares/documents.js.map +1 -0
- package/dist/server/middlewares/documents.mjs +101 -0
- package/dist/server/middlewares/documents.mjs.map +1 -0
- package/dist/server/migrations/database/5.0.0-document-id-in-actions.js +51 -0
- package/dist/server/migrations/database/5.0.0-document-id-in-actions.js.map +1 -0
- package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs +49 -0
- package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs.map +1 -0
- package/dist/server/migrations/index.js +205 -0
- package/dist/server/migrations/index.js.map +1 -0
- package/dist/server/migrations/index.mjs +198 -0
- package/dist/server/migrations/index.mjs.map +1 -0
- package/dist/server/register.js +23 -0
- package/dist/server/register.js.map +1 -0
- package/dist/server/register.mjs +21 -0
- package/dist/server/register.mjs.map +1 -0
- package/dist/server/routes/index.js +14 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/index.mjs +12 -0
- package/dist/server/routes/index.mjs.map +1 -0
- package/dist/server/routes/release-action.js +100 -0
- package/dist/server/routes/release-action.js.map +1 -0
- package/dist/server/routes/release-action.mjs +98 -0
- package/dist/server/routes/release-action.mjs.map +1 -0
- package/dist/server/routes/release.js +154 -0
- package/dist/server/routes/release.js.map +1 -0
- package/dist/server/routes/release.mjs +152 -0
- package/dist/server/routes/release.mjs.map +1 -0
- package/dist/server/routes/settings.js +46 -0
- package/dist/server/routes/settings.js.map +1 -0
- package/dist/server/routes/settings.mjs +44 -0
- package/dist/server/routes/settings.mjs.map +1 -0
- package/dist/server/services/index.js +18 -0
- package/dist/server/services/index.js.map +1 -0
- package/dist/server/services/index.mjs +16 -0
- package/dist/server/services/index.mjs.map +1 -0
- package/dist/server/services/release-action.js +323 -0
- package/dist/server/services/release-action.js.map +1 -0
- package/dist/server/services/release-action.mjs +321 -0
- package/dist/server/services/release-action.mjs.map +1 -0
- package/dist/server/services/release.js +324 -0
- package/dist/server/services/release.js.map +1 -0
- package/dist/server/services/release.mjs +322 -0
- package/dist/server/services/release.mjs.map +1 -0
- package/dist/server/services/scheduling.js +70 -0
- package/dist/server/services/scheduling.js.map +1 -0
- package/dist/server/services/scheduling.mjs +68 -0
- package/dist/server/services/scheduling.mjs.map +1 -0
- package/dist/server/services/settings.js +34 -0
- package/dist/server/services/settings.js.map +1 -0
- package/dist/server/services/settings.mjs +32 -0
- package/dist/server/services/settings.mjs.map +1 -0
- package/dist/server/services/validation.js +91 -0
- package/dist/server/services/validation.js.map +1 -0
- package/dist/server/services/validation.mjs +86 -0
- package/dist/server/services/validation.mjs.map +1 -0
- package/dist/server/utils/index.js +93 -0
- package/dist/server/utils/index.js.map +1 -0
- package/dist/server/utils/index.mjs +87 -0
- package/dist/server/utils/index.mjs.map +1 -0
- package/package.json +7 -7
- package/dist/admin/chunks/App-BkWgp5q_.mjs +0 -1845
- package/dist/admin/chunks/App-BkWgp5q_.mjs.map +0 -1
- package/dist/admin/chunks/App-CJiqPP7-.js +0 -1866
- package/dist/admin/chunks/App-CJiqPP7-.js.map +0 -1
- package/dist/admin/chunks/PurchaseContentReleases-CzayeVUD.mjs +0 -193
- package/dist/admin/chunks/PurchaseContentReleases-CzayeVUD.mjs.map +0 -1
- package/dist/admin/chunks/PurchaseContentReleases-Z9uEPb5b.js +0 -195
- package/dist/admin/chunks/PurchaseContentReleases-Z9uEPb5b.js.map +0 -1
- package/dist/admin/chunks/ReleasesSettingsPage-DUKdFdvx.mjs.map +0 -1
- package/dist/admin/chunks/ReleasesSettingsPage-KRcoI1bC.js.map +0 -1
- package/dist/admin/chunks/en-BOpqX2t_.js.map +0 -1
- package/dist/admin/chunks/en-aQo8Bn_U.mjs.map +0 -1
- package/dist/admin/chunks/hooks-CFk_8Q0b.mjs.map +0 -1
- package/dist/admin/chunks/hooks-DA5VbUAp.js.map +0 -1
- package/dist/admin/chunks/index-DBUaMD56.mjs +0 -1619
- package/dist/admin/chunks/index-DBUaMD56.mjs.map +0 -1
- package/dist/admin/chunks/index-vjWrvGN3.js +0 -1658
- package/dist/admin/chunks/index-vjWrvGN3.js.map +0 -1
- package/dist/admin/chunks/schemas-DMt8h1z-.mjs.map +0 -1
- package/dist/admin/chunks/schemas-DS7NeFDN.js.map +0 -1
- package/dist/admin/chunks/uk-9T9su-bj.js.map +0 -1
- package/dist/admin/chunks/uk-Bp9HotPq.mjs.map +0 -1
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const getTimezoneOffset = (timezone, date)=>{
|
|
4
|
+
try {
|
|
5
|
+
const offsetPart = new Intl.DateTimeFormat('en', {
|
|
6
|
+
timeZone: timezone,
|
|
7
|
+
timeZoneName: 'longOffset'
|
|
8
|
+
}).formatToParts(date).find((part)=>part.type === 'timeZoneName');
|
|
9
|
+
const offset = offsetPart ? offsetPart.value : '';
|
|
10
|
+
// We want to show time based on UTC, not GMT so we swap that.
|
|
11
|
+
let utcOffset = offset.replace('GMT', 'UTC');
|
|
12
|
+
// For perfect UTC (UTC+0:00) we only get the string UTC, So we need to append the 0's.
|
|
13
|
+
if (!utcOffset.includes('+') && !utcOffset.includes('-')) {
|
|
14
|
+
utcOffset = `${utcOffset}+00:00`;
|
|
15
|
+
}
|
|
16
|
+
return utcOffset;
|
|
17
|
+
} catch (error) {
|
|
18
|
+
// When timezone is invalid we catch the error and return empty to don't break the app
|
|
19
|
+
return '';
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const getTimezones = (selectedDate)=>{
|
|
23
|
+
const timezoneList = Intl.supportedValuesOf('timeZone').map((timezone)=>{
|
|
24
|
+
// Timezone will be in the format GMT${OFFSET} where offset could be nothing,
|
|
25
|
+
// a four digit string e.g. +05:00 or -08:00
|
|
26
|
+
const utcOffset = getTimezoneOffset(timezone, selectedDate);
|
|
27
|
+
// Offset and timezone are concatenated with '&', so to split and save the required timezone in DB
|
|
28
|
+
return {
|
|
29
|
+
offset: utcOffset,
|
|
30
|
+
value: `${utcOffset}&${timezone}`
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
const systemTimezone = timezoneList.find((timezone)=>timezone.value.split('&')[1] === Intl.DateTimeFormat().resolvedOptions().timeZone);
|
|
34
|
+
return {
|
|
35
|
+
timezoneList,
|
|
36
|
+
systemTimezone
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
exports.getTimezoneOffset = getTimezoneOffset;
|
|
41
|
+
exports.getTimezones = getTimezones;
|
|
42
|
+
//# sourceMappingURL=time.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.js","sources":["../../../admin/src/utils/time.ts"],"sourcesContent":["export const getTimezoneOffset = (timezone: string, date: Date) => {\n try {\n const offsetPart = new Intl.DateTimeFormat('en', {\n timeZone: timezone,\n timeZoneName: 'longOffset',\n })\n .formatToParts(date)\n .find((part) => part.type === 'timeZoneName');\n\n const offset = offsetPart ? offsetPart.value : '';\n\n // We want to show time based on UTC, not GMT so we swap that.\n let utcOffset = offset.replace('GMT', 'UTC');\n\n // For perfect UTC (UTC+0:00) we only get the string UTC, So we need to append the 0's.\n if (!utcOffset.includes('+') && !utcOffset.includes('-')) {\n utcOffset = `${utcOffset}+00:00`;\n }\n\n return utcOffset;\n } catch (error) {\n // When timezone is invalid we catch the error and return empty to don't break the app\n return '';\n }\n};\n\ninterface ITimezoneOption {\n offset: string;\n value: string;\n}\n\nexport const getTimezones = (selectedDate: Date) => {\n const timezoneList: ITimezoneOption[] = Intl.supportedValuesOf('timeZone').map((timezone) => {\n // Timezone will be in the format GMT${OFFSET} where offset could be nothing,\n // a four digit string e.g. +05:00 or -08:00\n const utcOffset = getTimezoneOffset(timezone, selectedDate);\n\n // Offset and timezone are concatenated with '&', so to split and save the required timezone in DB\n return { offset: utcOffset, value: `${utcOffset}&${timezone}` } satisfies ITimezoneOption;\n });\n\n const systemTimezone = timezoneList.find(\n (timezone) => timezone.value.split('&')[1] === Intl.DateTimeFormat().resolvedOptions().timeZone\n );\n\n return { timezoneList, systemTimezone };\n};\n"],"names":["getTimezoneOffset","timezone","date","offsetPart","Intl","DateTimeFormat","timeZone","timeZoneName","formatToParts","find","part","type","offset","value","utcOffset","replace","includes","error","getTimezones","selectedDate","timezoneList","supportedValuesOf","map","systemTimezone","split","resolvedOptions"],"mappings":";;AAAO,MAAMA,iBAAoB,GAAA,CAACC,QAAkBC,EAAAA,IAAAA,GAAAA;IAClD,IAAI;AACF,QAAA,MAAMC,UAAa,GAAA,IAAIC,IAAKC,CAAAA,cAAc,CAAC,IAAM,EAAA;YAC/CC,QAAUL,EAAAA,QAAAA;YACVM,YAAc,EAAA;SAEbC,CAAAA,CAAAA,aAAa,CAACN,IACdO,CAAAA,CAAAA,IAAI,CAAC,CAACC,IAAAA,GAASA,IAAKC,CAAAA,IAAI,KAAK,cAAA,CAAA;AAEhC,QAAA,MAAMC,MAAST,GAAAA,UAAAA,GAAaA,UAAWU,CAAAA,KAAK,GAAG,EAAA;;AAG/C,QAAA,IAAIC,SAAYF,GAAAA,MAAAA,CAAOG,OAAO,CAAC,KAAO,EAAA,KAAA,CAAA;;QAGtC,IAAI,CAACD,UAAUE,QAAQ,CAAC,QAAQ,CAACF,SAAAA,CAAUE,QAAQ,CAAC,GAAM,CAAA,EAAA;AACxDF,YAAAA,SAAAA,GAAY,CAAC,EAAEA,SAAU,CAAA,MAAM,CAAC;AAClC;QAEA,OAAOA,SAAAA;AACT,KAAA,CAAE,OAAOG,KAAO,EAAA;;QAEd,OAAO,EAAA;AACT;AACF;AAOO,MAAMC,eAAe,CAACC,YAAAA,GAAAA;AAC3B,IAAA,MAAMC,eAAkChB,IAAKiB,CAAAA,iBAAiB,CAAC,UAAYC,CAAAA,CAAAA,GAAG,CAAC,CAACrB,QAAAA,GAAAA;;;QAG9E,MAAMa,SAAAA,GAAYd,kBAAkBC,QAAUkB,EAAAA,YAAAA,CAAAA;;QAG9C,OAAO;YAAEP,MAAQE,EAAAA,SAAAA;AAAWD,YAAAA,KAAAA,EAAO,CAAC,EAAEC,SAAAA,CAAU,CAAC,EAAEb,SAAS;AAAE,SAAA;AAChE,KAAA,CAAA;IAEA,MAAMsB,cAAAA,GAAiBH,aAAaX,IAAI,CACtC,CAACR,QAAaA,GAAAA,QAAAA,CAASY,KAAK,CAACW,KAAK,CAAC,GAAI,CAAA,CAAC,EAAE,KAAKpB,IAAAA,CAAKC,cAAc,EAAGoB,CAAAA,eAAe,GAAGnB,QAAQ,CAAA;IAGjG,OAAO;AAAEc,QAAAA,YAAAA;AAAcG,QAAAA;AAAe,KAAA;AACxC;;;;;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
const getTimezoneOffset = (timezone, date)=>{
|
|
2
|
+
try {
|
|
3
|
+
const offsetPart = new Intl.DateTimeFormat('en', {
|
|
4
|
+
timeZone: timezone,
|
|
5
|
+
timeZoneName: 'longOffset'
|
|
6
|
+
}).formatToParts(date).find((part)=>part.type === 'timeZoneName');
|
|
7
|
+
const offset = offsetPart ? offsetPart.value : '';
|
|
8
|
+
// We want to show time based on UTC, not GMT so we swap that.
|
|
9
|
+
let utcOffset = offset.replace('GMT', 'UTC');
|
|
10
|
+
// For perfect UTC (UTC+0:00) we only get the string UTC, So we need to append the 0's.
|
|
11
|
+
if (!utcOffset.includes('+') && !utcOffset.includes('-')) {
|
|
12
|
+
utcOffset = `${utcOffset}+00:00`;
|
|
13
|
+
}
|
|
14
|
+
return utcOffset;
|
|
15
|
+
} catch (error) {
|
|
16
|
+
// When timezone is invalid we catch the error and return empty to don't break the app
|
|
17
|
+
return '';
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const getTimezones = (selectedDate)=>{
|
|
21
|
+
const timezoneList = Intl.supportedValuesOf('timeZone').map((timezone)=>{
|
|
22
|
+
// Timezone will be in the format GMT${OFFSET} where offset could be nothing,
|
|
23
|
+
// a four digit string e.g. +05:00 or -08:00
|
|
24
|
+
const utcOffset = getTimezoneOffset(timezone, selectedDate);
|
|
25
|
+
// Offset and timezone are concatenated with '&', so to split and save the required timezone in DB
|
|
26
|
+
return {
|
|
27
|
+
offset: utcOffset,
|
|
28
|
+
value: `${utcOffset}&${timezone}`
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
const systemTimezone = timezoneList.find((timezone)=>timezone.value.split('&')[1] === Intl.DateTimeFormat().resolvedOptions().timeZone);
|
|
32
|
+
return {
|
|
33
|
+
timezoneList,
|
|
34
|
+
systemTimezone
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export { getTimezoneOffset, getTimezones };
|
|
39
|
+
//# sourceMappingURL=time.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.mjs","sources":["../../../admin/src/utils/time.ts"],"sourcesContent":["export const getTimezoneOffset = (timezone: string, date: Date) => {\n try {\n const offsetPart = new Intl.DateTimeFormat('en', {\n timeZone: timezone,\n timeZoneName: 'longOffset',\n })\n .formatToParts(date)\n .find((part) => part.type === 'timeZoneName');\n\n const offset = offsetPart ? offsetPart.value : '';\n\n // We want to show time based on UTC, not GMT so we swap that.\n let utcOffset = offset.replace('GMT', 'UTC');\n\n // For perfect UTC (UTC+0:00) we only get the string UTC, So we need to append the 0's.\n if (!utcOffset.includes('+') && !utcOffset.includes('-')) {\n utcOffset = `${utcOffset}+00:00`;\n }\n\n return utcOffset;\n } catch (error) {\n // When timezone is invalid we catch the error and return empty to don't break the app\n return '';\n }\n};\n\ninterface ITimezoneOption {\n offset: string;\n value: string;\n}\n\nexport const getTimezones = (selectedDate: Date) => {\n const timezoneList: ITimezoneOption[] = Intl.supportedValuesOf('timeZone').map((timezone) => {\n // Timezone will be in the format GMT${OFFSET} where offset could be nothing,\n // a four digit string e.g. +05:00 or -08:00\n const utcOffset = getTimezoneOffset(timezone, selectedDate);\n\n // Offset and timezone are concatenated with '&', so to split and save the required timezone in DB\n return { offset: utcOffset, value: `${utcOffset}&${timezone}` } satisfies ITimezoneOption;\n });\n\n const systemTimezone = timezoneList.find(\n (timezone) => timezone.value.split('&')[1] === Intl.DateTimeFormat().resolvedOptions().timeZone\n );\n\n return { timezoneList, systemTimezone };\n};\n"],"names":["getTimezoneOffset","timezone","date","offsetPart","Intl","DateTimeFormat","timeZone","timeZoneName","formatToParts","find","part","type","offset","value","utcOffset","replace","includes","error","getTimezones","selectedDate","timezoneList","supportedValuesOf","map","systemTimezone","split","resolvedOptions"],"mappings":"AAAO,MAAMA,iBAAoB,GAAA,CAACC,QAAkBC,EAAAA,IAAAA,GAAAA;IAClD,IAAI;AACF,QAAA,MAAMC,UAAa,GAAA,IAAIC,IAAKC,CAAAA,cAAc,CAAC,IAAM,EAAA;YAC/CC,QAAUL,EAAAA,QAAAA;YACVM,YAAc,EAAA;SAEbC,CAAAA,CAAAA,aAAa,CAACN,IACdO,CAAAA,CAAAA,IAAI,CAAC,CAACC,IAAAA,GAASA,IAAKC,CAAAA,IAAI,KAAK,cAAA,CAAA;AAEhC,QAAA,MAAMC,MAAST,GAAAA,UAAAA,GAAaA,UAAWU,CAAAA,KAAK,GAAG,EAAA;;AAG/C,QAAA,IAAIC,SAAYF,GAAAA,MAAAA,CAAOG,OAAO,CAAC,KAAO,EAAA,KAAA,CAAA;;QAGtC,IAAI,CAACD,UAAUE,QAAQ,CAAC,QAAQ,CAACF,SAAAA,CAAUE,QAAQ,CAAC,GAAM,CAAA,EAAA;AACxDF,YAAAA,SAAAA,GAAY,CAAC,EAAEA,SAAU,CAAA,MAAM,CAAC;AAClC;QAEA,OAAOA,SAAAA;AACT,KAAA,CAAE,OAAOG,KAAO,EAAA;;QAEd,OAAO,EAAA;AACT;AACF;AAOO,MAAMC,eAAe,CAACC,YAAAA,GAAAA;AAC3B,IAAA,MAAMC,eAAkChB,IAAKiB,CAAAA,iBAAiB,CAAC,UAAYC,CAAAA,CAAAA,GAAG,CAAC,CAACrB,QAAAA,GAAAA;;;QAG9E,MAAMa,SAAAA,GAAYd,kBAAkBC,QAAUkB,EAAAA,YAAAA,CAAAA;;QAG9C,OAAO;YAAEP,MAAQE,EAAAA,SAAAA;AAAWD,YAAAA,KAAAA,EAAO,CAAC,EAAEC,SAAAA,CAAU,CAAC,EAAEb,SAAS;AAAE,SAAA;AAChE,KAAA,CAAA;IAEA,MAAMsB,cAAAA,GAAiBH,aAAaX,IAAI,CACtC,CAACR,QAAaA,GAAAA,QAAAA,CAASY,KAAK,CAACW,KAAK,CAAC,GAAI,CAAA,CAAC,EAAE,KAAKpB,IAAAA,CAAKC,cAAc,EAAGoB,CAAAA,eAAe,GAAGnB,QAAQ,CAAA;IAGjG,OAAO;AAAEc,QAAAA,YAAAA;AAAcG,QAAAA;AAAe,KAAA;AACxC;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sources":["../../../admin/src/validation/schemas.ts"],"sourcesContent":["import { translatedErrors } from '@strapi/admin/strapi-admin';\nimport { zonedTimeToUtc } from 'date-fns-tz';\nimport * as yup from 'yup';\n\n/**\n * FormikErrors type enforce us to always return a string as error.\n * We need these errors to be translated, so we need to create a hook to be able to use the formatMessage function.\n */\nexport const RELEASE_SCHEMA = yup\n .object()\n .shape({\n name: yup.string().trim().required(translatedErrors.required.id).nullable(),\n scheduledAt: yup.string().nullable(),\n isScheduled: yup.boolean().optional(),\n time: yup\n .string()\n .when('isScheduled', {\n is: true,\n then: yup.string().trim().required(translatedErrors.required.id),\n otherwise: yup.string().nullable(),\n })\n .test(\n 'time-in-future-if-today',\n 'content-releases.modal.form.time.has-passed',\n function (time) {\n const { date, timezone } = this.parent;\n\n if (!date || !timezone || !time) {\n return true;\n }\n\n // Timezone is in format \"UTC&Europe/Paris\", so we get the region part for the dates functions\n const region = timezone.split('&')[1];\n\n const selectedTime = zonedTimeToUtc(`${date} ${time}`, region);\n const now = new Date();\n\n return selectedTime > now;\n }\n ),\n timezone: yup.string().when('isScheduled', {\n is: true,\n then: yup.string().required(translatedErrors.required.id).nullable(),\n otherwise: yup.string().nullable(),\n }),\n date: yup.string().when('isScheduled', {\n is: true,\n then: yup.string().required(translatedErrors.required.id).nullable(),\n otherwise: yup.string().nullable(),\n }),\n })\n .required()\n .noUnknown();\n\nexport const SETTINGS_SCHEMA = yup\n .object()\n .shape({\n defaultTimezone: yup.string().nullable().default(null),\n })\n .required()\n .noUnknown();\n"],"names":["RELEASE_SCHEMA","yup","object","shape","name","string","trim","required","translatedErrors","id","nullable","scheduledAt","isScheduled","boolean","optional","time","when","is","then","otherwise","test","date","timezone","parent","region","split","selectedTime","zonedTimeToUtc","now","Date","noUnknown","SETTINGS_SCHEMA","defaultTimezone","default"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIA;;;AAGC,IACYA,MAAAA,cAAAA,GAAiBC,eAC3BC,MAAM,EAAA,CACNC,KAAK,CAAC;AACLC,IAAAA,IAAAA,EAAMH,cAAII,CAAAA,MAAM,EAAGC,CAAAA,IAAI,EAAGC,CAAAA,QAAQ,CAACC,4BAAAA,CAAiBD,QAAQ,CAACE,EAAE,CAAA,CAAEC,QAAQ,EAAA;IACzEC,WAAaV,EAAAA,cAAAA,CAAII,MAAM,EAAA,CAAGK,QAAQ,EAAA;IAClCE,WAAaX,EAAAA,cAAAA,CAAIY,OAAO,EAAA,CAAGC,QAAQ,EAAA;AACnCC,IAAAA,IAAAA,EAAMd,cACHI,CAAAA,MAAM,EACNW,CAAAA,IAAI,CAAC,aAAe,EAAA;QACnBC,EAAI,EAAA,IAAA;QACJC,IAAMjB,EAAAA,cAAAA,CAAII,MAAM,EAAA,CAAGC,IAAI,EAAA,CAAGC,QAAQ,CAACC,4BAAAA,CAAiBD,QAAQ,CAACE,EAAE,CAAA;QAC/DU,SAAWlB,EAAAA,cAAAA,CAAII,MAAM,EAAA,CAAGK,QAAQ;AAClC,KAAA,CAAA,CACCU,IAAI,CACH,yBACA,EAAA,6CAAA,EACA,SAAUL,IAAI,EAAA;QACZ,MAAM,EAAEM,IAAI,EAAEC,QAAQ,EAAE,GAAG,IAAI,CAACC,MAAM;AAEtC,QAAA,IAAI,CAACF,IAAAA,IAAQ,CAACC,QAAAA,IAAY,CAACP,IAAM,EAAA;YAC/B,OAAO,IAAA;AACT;;AAGA,QAAA,MAAMS,SAASF,QAASG,CAAAA,KAAK,CAAC,GAAA,CAAI,CAAC,CAAE,CAAA;QAErC,MAAMC,YAAAA,GAAeC,yBAAe,CAAC,EAAEN,KAAK,CAAC,EAAEN,IAAK,CAAA,CAAC,EAAES,MAAAA,CAAAA;AACvD,QAAA,MAAMI,MAAM,IAAIC,IAAAA,EAAAA;AAEhB,QAAA,OAAOH,YAAeE,GAAAA,GAAAA;AACxB,KAAA,CAAA;AAEJN,IAAAA,QAAAA,EAAUrB,cAAII,CAAAA,MAAM,EAAGW,CAAAA,IAAI,CAAC,aAAe,EAAA;QACzCC,EAAI,EAAA,IAAA;QACJC,IAAMjB,EAAAA,cAAAA,CAAII,MAAM,EAAA,CAAGE,QAAQ,CAACC,6BAAiBD,QAAQ,CAACE,EAAE,CAAA,CAAEC,QAAQ,EAAA;QAClES,SAAWlB,EAAAA,cAAAA,CAAII,MAAM,EAAA,CAAGK,QAAQ;AAClC,KAAA,CAAA;AACAW,IAAAA,IAAAA,EAAMpB,cAAII,CAAAA,MAAM,EAAGW,CAAAA,IAAI,CAAC,aAAe,EAAA;QACrCC,EAAI,EAAA,IAAA;QACJC,IAAMjB,EAAAA,cAAAA,CAAII,MAAM,EAAA,CAAGE,QAAQ,CAACC,6BAAiBD,QAAQ,CAACE,EAAE,CAAA,CAAEC,QAAQ,EAAA;QAClES,SAAWlB,EAAAA,cAAAA,CAAII,MAAM,EAAA,CAAGK,QAAQ;AAClC,KAAA;AACF,CACCH,CAAAA,CAAAA,QAAQ,EACRuB,CAAAA,SAAS;MAECC,eAAkB9B,GAAAA,cAAAA,CAC5BC,MAAM,EAAA,CACNC,KAAK,CAAC;AACL6B,IAAAA,eAAAA,EAAiB/B,eAAII,MAAM,EAAA,CAAGK,QAAQ,EAAA,CAAGuB,OAAO,CAAC,IAAA;AACnD,CACC1B,CAAAA,CAAAA,QAAQ,EACRuB,CAAAA,SAAS;;;;;"}
|
|
@@ -39,5 +39,5 @@ const SETTINGS_SCHEMA = yup.object().shape({
|
|
|
39
39
|
defaultTimezone: yup.string().nullable().default(null)
|
|
40
40
|
}).required().noUnknown();
|
|
41
41
|
|
|
42
|
-
export { RELEASE_SCHEMA
|
|
43
|
-
//# sourceMappingURL=schemas
|
|
42
|
+
export { RELEASE_SCHEMA, SETTINGS_SCHEMA };
|
|
43
|
+
//# sourceMappingURL=schemas.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.mjs","sources":["../../../admin/src/validation/schemas.ts"],"sourcesContent":["import { translatedErrors } from '@strapi/admin/strapi-admin';\nimport { zonedTimeToUtc } from 'date-fns-tz';\nimport * as yup from 'yup';\n\n/**\n * FormikErrors type enforce us to always return a string as error.\n * We need these errors to be translated, so we need to create a hook to be able to use the formatMessage function.\n */\nexport const RELEASE_SCHEMA = yup\n .object()\n .shape({\n name: yup.string().trim().required(translatedErrors.required.id).nullable(),\n scheduledAt: yup.string().nullable(),\n isScheduled: yup.boolean().optional(),\n time: yup\n .string()\n .when('isScheduled', {\n is: true,\n then: yup.string().trim().required(translatedErrors.required.id),\n otherwise: yup.string().nullable(),\n })\n .test(\n 'time-in-future-if-today',\n 'content-releases.modal.form.time.has-passed',\n function (time) {\n const { date, timezone } = this.parent;\n\n if (!date || !timezone || !time) {\n return true;\n }\n\n // Timezone is in format \"UTC&Europe/Paris\", so we get the region part for the dates functions\n const region = timezone.split('&')[1];\n\n const selectedTime = zonedTimeToUtc(`${date} ${time}`, region);\n const now = new Date();\n\n return selectedTime > now;\n }\n ),\n timezone: yup.string().when('isScheduled', {\n is: true,\n then: yup.string().required(translatedErrors.required.id).nullable(),\n otherwise: yup.string().nullable(),\n }),\n date: yup.string().when('isScheduled', {\n is: true,\n then: yup.string().required(translatedErrors.required.id).nullable(),\n otherwise: yup.string().nullable(),\n }),\n })\n .required()\n .noUnknown();\n\nexport const SETTINGS_SCHEMA = yup\n .object()\n .shape({\n defaultTimezone: yup.string().nullable().default(null),\n })\n .required()\n .noUnknown();\n"],"names":["RELEASE_SCHEMA","yup","object","shape","name","string","trim","required","translatedErrors","id","nullable","scheduledAt","isScheduled","boolean","optional","time","when","is","then","otherwise","test","date","timezone","parent","region","split","selectedTime","zonedTimeToUtc","now","Date","noUnknown","SETTINGS_SCHEMA","defaultTimezone","default"],"mappings":";;;;AAIA;;;AAGC,IACYA,MAAAA,cAAAA,GAAiBC,IAC3BC,MAAM,EAAA,CACNC,KAAK,CAAC;AACLC,IAAAA,IAAAA,EAAMH,GAAII,CAAAA,MAAM,EAAGC,CAAAA,IAAI,EAAGC,CAAAA,QAAQ,CAACC,gBAAAA,CAAiBD,QAAQ,CAACE,EAAE,CAAA,CAAEC,QAAQ,EAAA;IACzEC,WAAaV,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGK,QAAQ,EAAA;IAClCE,WAAaX,EAAAA,GAAAA,CAAIY,OAAO,EAAA,CAAGC,QAAQ,EAAA;AACnCC,IAAAA,IAAAA,EAAMd,GACHI,CAAAA,MAAM,EACNW,CAAAA,IAAI,CAAC,aAAe,EAAA;QACnBC,EAAI,EAAA,IAAA;QACJC,IAAMjB,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGC,IAAI,EAAA,CAAGC,QAAQ,CAACC,gBAAAA,CAAiBD,QAAQ,CAACE,EAAE,CAAA;QAC/DU,SAAWlB,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGK,QAAQ;AAClC,KAAA,CAAA,CACCU,IAAI,CACH,yBACA,EAAA,6CAAA,EACA,SAAUL,IAAI,EAAA;QACZ,MAAM,EAAEM,IAAI,EAAEC,QAAQ,EAAE,GAAG,IAAI,CAACC,MAAM;AAEtC,QAAA,IAAI,CAACF,IAAAA,IAAQ,CAACC,QAAAA,IAAY,CAACP,IAAM,EAAA;YAC/B,OAAO,IAAA;AACT;;AAGA,QAAA,MAAMS,SAASF,QAASG,CAAAA,KAAK,CAAC,GAAA,CAAI,CAAC,CAAE,CAAA;QAErC,MAAMC,YAAAA,GAAeC,eAAe,CAAC,EAAEN,KAAK,CAAC,EAAEN,IAAK,CAAA,CAAC,EAAES,MAAAA,CAAAA;AACvD,QAAA,MAAMI,MAAM,IAAIC,IAAAA,EAAAA;AAEhB,QAAA,OAAOH,YAAeE,GAAAA,GAAAA;AACxB,KAAA,CAAA;AAEJN,IAAAA,QAAAA,EAAUrB,GAAII,CAAAA,MAAM,EAAGW,CAAAA,IAAI,CAAC,aAAe,EAAA;QACzCC,EAAI,EAAA,IAAA;QACJC,IAAMjB,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGE,QAAQ,CAACC,iBAAiBD,QAAQ,CAACE,EAAE,CAAA,CAAEC,QAAQ,EAAA;QAClES,SAAWlB,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGK,QAAQ;AAClC,KAAA,CAAA;AACAW,IAAAA,IAAAA,EAAMpB,GAAII,CAAAA,MAAM,EAAGW,CAAAA,IAAI,CAAC,aAAe,EAAA;QACrCC,EAAI,EAAA,IAAA;QACJC,IAAMjB,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGE,QAAQ,CAACC,iBAAiBD,QAAQ,CAACE,EAAE,CAAA,CAAEC,QAAQ,EAAA;QAClES,SAAWlB,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGK,QAAQ;AAClC,KAAA;AACF,CACCH,CAAAA,CAAAA,QAAQ,EACRuB,CAAAA,SAAS;MAECC,eAAkB9B,GAAAA,GAAAA,CAC5BC,MAAM,EAAA,CACNC,KAAK,CAAC;AACL6B,IAAAA,eAAAA,EAAiB/B,IAAII,MAAM,EAAA,CAAGK,QAAQ,EAAA,CAAGuB,OAAO,CAAC,IAAA;AACnD,CACC1B,CAAAA,CAAAA,QAAQ,EACRuB,CAAAA,SAAS;;;;"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var constants = require('./constants.js');
|
|
4
|
+
var index = require('./utils/index.js');
|
|
5
|
+
var documents = require('./middlewares/documents.js');
|
|
6
|
+
|
|
7
|
+
const deleteReleasesActionsAndUpdateReleaseStatus = async (params)=>{
|
|
8
|
+
const releases = await strapi.db.query(constants.RELEASE_MODEL_UID).findMany({
|
|
9
|
+
where: {
|
|
10
|
+
actions: params
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
await strapi.db.query(constants.RELEASE_ACTION_MODEL_UID).deleteMany({
|
|
14
|
+
where: params
|
|
15
|
+
});
|
|
16
|
+
// We update the status of each release after delete the actions
|
|
17
|
+
for (const release of releases){
|
|
18
|
+
index.getService('release', {
|
|
19
|
+
strapi
|
|
20
|
+
}).updateReleaseStatus(release.id);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
const bootstrap = async ({ strapi: strapi1 })=>{
|
|
24
|
+
if (strapi1.ee.features.isEnabled('cms-content-releases')) {
|
|
25
|
+
const contentTypesWithDraftAndPublish = Object.keys(strapi1.contentTypes).filter((uid)=>strapi1.contentTypes[uid]?.options?.draftAndPublish);
|
|
26
|
+
strapi1.db.lifecycles.subscribe({
|
|
27
|
+
models: contentTypesWithDraftAndPublish,
|
|
28
|
+
/**
|
|
29
|
+
* deleteMany is still used outside documents service, for example when deleting a locale
|
|
30
|
+
*/ async afterDeleteMany (event) {
|
|
31
|
+
try {
|
|
32
|
+
const model = strapi1.getModel(event.model.uid);
|
|
33
|
+
// @ts-expect-error TODO: lifecycles types looks like are not 100% finished
|
|
34
|
+
if (model.kind === 'collectionType' && model.options?.draftAndPublish) {
|
|
35
|
+
const { where } = event.params;
|
|
36
|
+
deleteReleasesActionsAndUpdateReleaseStatus({
|
|
37
|
+
contentType: model.uid,
|
|
38
|
+
locale: where?.locale ?? null,
|
|
39
|
+
...where?.documentId && {
|
|
40
|
+
entryDocumentId: where.documentId
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
} catch (error) {
|
|
45
|
+
// If an error happens we don't want to block the delete entry flow, but we log the error
|
|
46
|
+
strapi1.log.error('Error while deleting release actions after entry deleteMany', {
|
|
47
|
+
error
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
// We register middleware to handle ReleaseActions when changes on documents are made
|
|
53
|
+
strapi1.documents.use(documents.deleteActionsOnDelete);
|
|
54
|
+
strapi1.documents.use(documents.updateActionsOnUpdate);
|
|
55
|
+
index.getService('scheduling', {
|
|
56
|
+
strapi: strapi1
|
|
57
|
+
}).syncFromDatabase().catch((err)=>{
|
|
58
|
+
strapi1.log.error('Error while syncing scheduled jobs from the database in the content-releases plugin. This could lead to errors in the releases scheduling.');
|
|
59
|
+
throw err;
|
|
60
|
+
});
|
|
61
|
+
Object.entries(constants.ALLOWED_WEBHOOK_EVENTS).forEach(([key, value])=>{
|
|
62
|
+
strapi1.get('webhookStore').addAllowedEvent(key, value);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
exports.bootstrap = bootstrap;
|
|
68
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sources":["../../server/src/bootstrap.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport type { Core, UID, Modules } from '@strapi/types';\n\nimport { RELEASE_ACTION_MODEL_UID, RELEASE_MODEL_UID, ALLOWED_WEBHOOK_EVENTS } from './constants';\nimport { getService } from './utils';\nimport { deleteActionsOnDelete, updateActionsOnUpdate } from './middlewares/documents';\n\ninterface DeleteManyParams {\n contentType: UID.ContentType;\n locale: string | null;\n entryDocumentId?: Modules.Documents.ID;\n}\n\nconst deleteReleasesActionsAndUpdateReleaseStatus = async (params: DeleteManyParams) => {\n const releases = await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n actions: params,\n },\n });\n\n await strapi.db.query(RELEASE_ACTION_MODEL_UID).deleteMany({\n where: params,\n });\n\n // We update the status of each release after delete the actions\n for (const release of releases) {\n getService('release', { strapi }).updateReleaseStatus(release.id);\n }\n};\n\nexport const bootstrap = async ({ strapi }: { strapi: Core.Strapi }) => {\n if (strapi.ee.features.isEnabled('cms-content-releases')) {\n const contentTypesWithDraftAndPublish = Object.keys(strapi.contentTypes).filter(\n (uid: any) => strapi.contentTypes[uid]?.options?.draftAndPublish\n );\n\n strapi.db.lifecycles.subscribe({\n models: contentTypesWithDraftAndPublish,\n\n /**\n * deleteMany is still used outside documents service, for example when deleting a locale\n */\n async afterDeleteMany(event) {\n try {\n const model = strapi.getModel(event.model.uid as UID.Schema);\n // @ts-expect-error TODO: lifecycles types looks like are not 100% finished\n if (model.kind === 'collectionType' && model.options?.draftAndPublish) {\n const { where } = event.params;\n\n deleteReleasesActionsAndUpdateReleaseStatus({\n contentType: model.uid,\n locale: where?.locale ?? null,\n ...(where?.documentId && { entryDocumentId: where.documentId }),\n });\n }\n } catch (error) {\n // If an error happens we don't want to block the delete entry flow, but we log the error\n strapi.log.error('Error while deleting release actions after entry deleteMany', {\n error,\n });\n }\n },\n });\n\n // We register middleware to handle ReleaseActions when changes on documents are made\n strapi.documents.use(deleteActionsOnDelete);\n strapi.documents.use(updateActionsOnUpdate);\n\n getService('scheduling', { strapi })\n .syncFromDatabase()\n .catch((err: Error) => {\n strapi.log.error(\n 'Error while syncing scheduled jobs from the database in the content-releases plugin. This could lead to errors in the releases scheduling.'\n );\n\n throw err;\n });\n\n Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {\n strapi.get('webhookStore').addAllowedEvent(key, value);\n });\n }\n};\n"],"names":["deleteReleasesActionsAndUpdateReleaseStatus","params","releases","strapi","db","query","RELEASE_MODEL_UID","findMany","where","actions","RELEASE_ACTION_MODEL_UID","deleteMany","release","getService","updateReleaseStatus","id","bootstrap","ee","features","isEnabled","contentTypesWithDraftAndPublish","Object","keys","contentTypes","filter","uid","options","draftAndPublish","lifecycles","subscribe","models","afterDeleteMany","event","model","getModel","kind","contentType","locale","documentId","entryDocumentId","error","log","documents","use","deleteActionsOnDelete","updateActionsOnUpdate","syncFromDatabase","catch","err","entries","ALLOWED_WEBHOOK_EVENTS","forEach","key","value","get","addAllowedEvent"],"mappings":";;;;;;AAaA,MAAMA,8CAA8C,OAAOC,MAAAA,GAAAA;IACzD,MAAMC,QAAAA,GAAW,MAAMC,MAAOC,CAAAA,EAAE,CAACC,KAAK,CAACC,2BAAmBC,CAAAA,CAAAA,QAAQ,CAAC;QACjEC,KAAO,EAAA;YACLC,OAASR,EAAAA;AACX;AACF,KAAA,CAAA;AAEA,IAAA,MAAME,OAAOC,EAAE,CAACC,KAAK,CAACK,kCAAAA,CAAAA,CAA0BC,UAAU,CAAC;QACzDH,KAAOP,EAAAA;AACT,KAAA,CAAA;;IAGA,KAAK,MAAMW,WAAWV,QAAU,CAAA;AAC9BW,QAAAA,gBAAAA,CAAW,SAAW,EAAA;AAAEV,YAAAA;SAAUW,CAAAA,CAAAA,mBAAmB,CAACF,OAAAA,CAAQG,EAAE,CAAA;AAClE;AACF,CAAA;MAEaC,SAAY,GAAA,OAAO,EAAEb,MAAAA,EAAAA,OAAM,EAA2B,GAAA;AACjE,IAAA,IAAIA,QAAOc,EAAE,CAACC,QAAQ,CAACC,SAAS,CAAC,sBAAyB,CAAA,EAAA;AACxD,QAAA,MAAMC,kCAAkCC,MAAOC,CAAAA,IAAI,CAACnB,OAAAA,CAAOoB,YAAY,CAAEC,CAAAA,MAAM,CAC7E,CAACC,MAAatB,OAAOoB,CAAAA,YAAY,CAACE,GAAAA,CAAI,EAAEC,OAASC,EAAAA,eAAAA,CAAAA;AAGnDxB,QAAAA,OAAAA,CAAOC,EAAE,CAACwB,UAAU,CAACC,SAAS,CAAC;YAC7BC,MAAQV,EAAAA,+BAAAA;AAER;;UAGA,MAAMW,iBAAgBC,KAAK,EAAA;gBACzB,IAAI;AACF,oBAAA,MAAMC,QAAQ9B,OAAO+B,CAAAA,QAAQ,CAACF,KAAMC,CAAAA,KAAK,CAACR,GAAG,CAAA;;AAE7C,oBAAA,IAAIQ,MAAME,IAAI,KAAK,oBAAoBF,KAAMP,CAAAA,OAAO,EAAEC,eAAiB,EAAA;AACrE,wBAAA,MAAM,EAAEnB,KAAK,EAAE,GAAGwB,MAAM/B,MAAM;wBAE9BD,2CAA4C,CAAA;AAC1CoC,4BAAAA,WAAAA,EAAaH,MAAMR,GAAG;AACtBY,4BAAAA,MAAAA,EAAQ7B,OAAO6B,MAAU,IAAA,IAAA;AACzB,4BAAA,GAAI7B,OAAO8B,UAAc,IAAA;AAAEC,gCAAAA,eAAAA,EAAiB/B,MAAM8B;;AACpD,yBAAA,CAAA;AACF;AACF,iBAAA,CAAE,OAAOE,KAAO,EAAA;;AAEdrC,oBAAAA,OAAAA,CAAOsC,GAAG,CAACD,KAAK,CAAC,6DAA+D,EAAA;AAC9EA,wBAAAA;AACF,qBAAA,CAAA;AACF;AACF;AACF,SAAA,CAAA;;QAGArC,OAAOuC,CAAAA,SAAS,CAACC,GAAG,CAACC,+BAAAA,CAAAA;QACrBzC,OAAOuC,CAAAA,SAAS,CAACC,GAAG,CAACE,+BAAAA,CAAAA;AAErBhC,QAAAA,gBAAAA,CAAW,YAAc,EAAA;YAAEV,MAAAA,EAAAA;AAAO,SAAA,CAAA,CAC/B2C,gBAAgB,EAAA,CAChBC,KAAK,CAAC,CAACC,GAAAA,GAAAA;YACN7C,OAAOsC,CAAAA,GAAG,CAACD,KAAK,CACd,4IAAA,CAAA;YAGF,MAAMQ,GAAAA;AACR,SAAA,CAAA;QAEF3B,MAAO4B,CAAAA,OAAO,CAACC,gCAAwBC,CAAAA,CAAAA,OAAO,CAAC,CAAC,CAACC,KAAKC,KAAM,CAAA,GAAA;AAC1DlD,YAAAA,OAAAA,CAAOmD,GAAG,CAAC,cAAgBC,CAAAA,CAAAA,eAAe,CAACH,GAAKC,EAAAA,KAAAA,CAAAA;AAClD,SAAA,CAAA;AACF;AACF;;;;"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { ALLOWED_WEBHOOK_EVENTS, RELEASE_MODEL_UID, RELEASE_ACTION_MODEL_UID } from './constants.mjs';
|
|
2
|
+
import { getService } from './utils/index.mjs';
|
|
3
|
+
import { deleteActionsOnDelete, updateActionsOnUpdate } from './middlewares/documents.mjs';
|
|
4
|
+
|
|
5
|
+
const deleteReleasesActionsAndUpdateReleaseStatus = async (params)=>{
|
|
6
|
+
const releases = await strapi.db.query(RELEASE_MODEL_UID).findMany({
|
|
7
|
+
where: {
|
|
8
|
+
actions: params
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
await strapi.db.query(RELEASE_ACTION_MODEL_UID).deleteMany({
|
|
12
|
+
where: params
|
|
13
|
+
});
|
|
14
|
+
// We update the status of each release after delete the actions
|
|
15
|
+
for (const release of releases){
|
|
16
|
+
getService('release', {
|
|
17
|
+
strapi
|
|
18
|
+
}).updateReleaseStatus(release.id);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const bootstrap = async ({ strapi: strapi1 })=>{
|
|
22
|
+
if (strapi1.ee.features.isEnabled('cms-content-releases')) {
|
|
23
|
+
const contentTypesWithDraftAndPublish = Object.keys(strapi1.contentTypes).filter((uid)=>strapi1.contentTypes[uid]?.options?.draftAndPublish);
|
|
24
|
+
strapi1.db.lifecycles.subscribe({
|
|
25
|
+
models: contentTypesWithDraftAndPublish,
|
|
26
|
+
/**
|
|
27
|
+
* deleteMany is still used outside documents service, for example when deleting a locale
|
|
28
|
+
*/ async afterDeleteMany (event) {
|
|
29
|
+
try {
|
|
30
|
+
const model = strapi1.getModel(event.model.uid);
|
|
31
|
+
// @ts-expect-error TODO: lifecycles types looks like are not 100% finished
|
|
32
|
+
if (model.kind === 'collectionType' && model.options?.draftAndPublish) {
|
|
33
|
+
const { where } = event.params;
|
|
34
|
+
deleteReleasesActionsAndUpdateReleaseStatus({
|
|
35
|
+
contentType: model.uid,
|
|
36
|
+
locale: where?.locale ?? null,
|
|
37
|
+
...where?.documentId && {
|
|
38
|
+
entryDocumentId: where.documentId
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
} catch (error) {
|
|
43
|
+
// If an error happens we don't want to block the delete entry flow, but we log the error
|
|
44
|
+
strapi1.log.error('Error while deleting release actions after entry deleteMany', {
|
|
45
|
+
error
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
// We register middleware to handle ReleaseActions when changes on documents are made
|
|
51
|
+
strapi1.documents.use(deleteActionsOnDelete);
|
|
52
|
+
strapi1.documents.use(updateActionsOnUpdate);
|
|
53
|
+
getService('scheduling', {
|
|
54
|
+
strapi: strapi1
|
|
55
|
+
}).syncFromDatabase().catch((err)=>{
|
|
56
|
+
strapi1.log.error('Error while syncing scheduled jobs from the database in the content-releases plugin. This could lead to errors in the releases scheduling.');
|
|
57
|
+
throw err;
|
|
58
|
+
});
|
|
59
|
+
Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value])=>{
|
|
60
|
+
strapi1.get('webhookStore').addAllowedEvent(key, value);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export { bootstrap };
|
|
66
|
+
//# sourceMappingURL=bootstrap.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.mjs","sources":["../../server/src/bootstrap.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport type { Core, UID, Modules } from '@strapi/types';\n\nimport { RELEASE_ACTION_MODEL_UID, RELEASE_MODEL_UID, ALLOWED_WEBHOOK_EVENTS } from './constants';\nimport { getService } from './utils';\nimport { deleteActionsOnDelete, updateActionsOnUpdate } from './middlewares/documents';\n\ninterface DeleteManyParams {\n contentType: UID.ContentType;\n locale: string | null;\n entryDocumentId?: Modules.Documents.ID;\n}\n\nconst deleteReleasesActionsAndUpdateReleaseStatus = async (params: DeleteManyParams) => {\n const releases = await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n actions: params,\n },\n });\n\n await strapi.db.query(RELEASE_ACTION_MODEL_UID).deleteMany({\n where: params,\n });\n\n // We update the status of each release after delete the actions\n for (const release of releases) {\n getService('release', { strapi }).updateReleaseStatus(release.id);\n }\n};\n\nexport const bootstrap = async ({ strapi }: { strapi: Core.Strapi }) => {\n if (strapi.ee.features.isEnabled('cms-content-releases')) {\n const contentTypesWithDraftAndPublish = Object.keys(strapi.contentTypes).filter(\n (uid: any) => strapi.contentTypes[uid]?.options?.draftAndPublish\n );\n\n strapi.db.lifecycles.subscribe({\n models: contentTypesWithDraftAndPublish,\n\n /**\n * deleteMany is still used outside documents service, for example when deleting a locale\n */\n async afterDeleteMany(event) {\n try {\n const model = strapi.getModel(event.model.uid as UID.Schema);\n // @ts-expect-error TODO: lifecycles types looks like are not 100% finished\n if (model.kind === 'collectionType' && model.options?.draftAndPublish) {\n const { where } = event.params;\n\n deleteReleasesActionsAndUpdateReleaseStatus({\n contentType: model.uid,\n locale: where?.locale ?? null,\n ...(where?.documentId && { entryDocumentId: where.documentId }),\n });\n }\n } catch (error) {\n // If an error happens we don't want to block the delete entry flow, but we log the error\n strapi.log.error('Error while deleting release actions after entry deleteMany', {\n error,\n });\n }\n },\n });\n\n // We register middleware to handle ReleaseActions when changes on documents are made\n strapi.documents.use(deleteActionsOnDelete);\n strapi.documents.use(updateActionsOnUpdate);\n\n getService('scheduling', { strapi })\n .syncFromDatabase()\n .catch((err: Error) => {\n strapi.log.error(\n 'Error while syncing scheduled jobs from the database in the content-releases plugin. This could lead to errors in the releases scheduling.'\n );\n\n throw err;\n });\n\n Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {\n strapi.get('webhookStore').addAllowedEvent(key, value);\n });\n }\n};\n"],"names":["deleteReleasesActionsAndUpdateReleaseStatus","params","releases","strapi","db","query","RELEASE_MODEL_UID","findMany","where","actions","RELEASE_ACTION_MODEL_UID","deleteMany","release","getService","updateReleaseStatus","id","bootstrap","ee","features","isEnabled","contentTypesWithDraftAndPublish","Object","keys","contentTypes","filter","uid","options","draftAndPublish","lifecycles","subscribe","models","afterDeleteMany","event","model","getModel","kind","contentType","locale","documentId","entryDocumentId","error","log","documents","use","deleteActionsOnDelete","updateActionsOnUpdate","syncFromDatabase","catch","err","entries","ALLOWED_WEBHOOK_EVENTS","forEach","key","value","get","addAllowedEvent"],"mappings":";;;;AAaA,MAAMA,8CAA8C,OAAOC,MAAAA,GAAAA;IACzD,MAAMC,QAAAA,GAAW,MAAMC,MAAOC,CAAAA,EAAE,CAACC,KAAK,CAACC,iBAAmBC,CAAAA,CAAAA,QAAQ,CAAC;QACjEC,KAAO,EAAA;YACLC,OAASR,EAAAA;AACX;AACF,KAAA,CAAA;AAEA,IAAA,MAAME,OAAOC,EAAE,CAACC,KAAK,CAACK,wBAAAA,CAAAA,CAA0BC,UAAU,CAAC;QACzDH,KAAOP,EAAAA;AACT,KAAA,CAAA;;IAGA,KAAK,MAAMW,WAAWV,QAAU,CAAA;AAC9BW,QAAAA,UAAAA,CAAW,SAAW,EAAA;AAAEV,YAAAA;SAAUW,CAAAA,CAAAA,mBAAmB,CAACF,OAAAA,CAAQG,EAAE,CAAA;AAClE;AACF,CAAA;MAEaC,SAAY,GAAA,OAAO,EAAEb,MAAAA,EAAAA,OAAM,EAA2B,GAAA;AACjE,IAAA,IAAIA,QAAOc,EAAE,CAACC,QAAQ,CAACC,SAAS,CAAC,sBAAyB,CAAA,EAAA;AACxD,QAAA,MAAMC,kCAAkCC,MAAOC,CAAAA,IAAI,CAACnB,OAAAA,CAAOoB,YAAY,CAAEC,CAAAA,MAAM,CAC7E,CAACC,MAAatB,OAAOoB,CAAAA,YAAY,CAACE,GAAAA,CAAI,EAAEC,OAASC,EAAAA,eAAAA,CAAAA;AAGnDxB,QAAAA,OAAAA,CAAOC,EAAE,CAACwB,UAAU,CAACC,SAAS,CAAC;YAC7BC,MAAQV,EAAAA,+BAAAA;AAER;;UAGA,MAAMW,iBAAgBC,KAAK,EAAA;gBACzB,IAAI;AACF,oBAAA,MAAMC,QAAQ9B,OAAO+B,CAAAA,QAAQ,CAACF,KAAMC,CAAAA,KAAK,CAACR,GAAG,CAAA;;AAE7C,oBAAA,IAAIQ,MAAME,IAAI,KAAK,oBAAoBF,KAAMP,CAAAA,OAAO,EAAEC,eAAiB,EAAA;AACrE,wBAAA,MAAM,EAAEnB,KAAK,EAAE,GAAGwB,MAAM/B,MAAM;wBAE9BD,2CAA4C,CAAA;AAC1CoC,4BAAAA,WAAAA,EAAaH,MAAMR,GAAG;AACtBY,4BAAAA,MAAAA,EAAQ7B,OAAO6B,MAAU,IAAA,IAAA;AACzB,4BAAA,GAAI7B,OAAO8B,UAAc,IAAA;AAAEC,gCAAAA,eAAAA,EAAiB/B,MAAM8B;;AACpD,yBAAA,CAAA;AACF;AACF,iBAAA,CAAE,OAAOE,KAAO,EAAA;;AAEdrC,oBAAAA,OAAAA,CAAOsC,GAAG,CAACD,KAAK,CAAC,6DAA+D,EAAA;AAC9EA,wBAAAA;AACF,qBAAA,CAAA;AACF;AACF;AACF,SAAA,CAAA;;QAGArC,OAAOuC,CAAAA,SAAS,CAACC,GAAG,CAACC,qBAAAA,CAAAA;QACrBzC,OAAOuC,CAAAA,SAAS,CAACC,GAAG,CAACE,qBAAAA,CAAAA;AAErBhC,QAAAA,UAAAA,CAAW,YAAc,EAAA;YAAEV,MAAAA,EAAAA;AAAO,SAAA,CAAA,CAC/B2C,gBAAgB,EAAA,CAChBC,KAAK,CAAC,CAACC,GAAAA,GAAAA;YACN7C,OAAOsC,CAAAA,GAAG,CAACD,KAAK,CACd,4IAAA,CAAA;YAGF,MAAMQ,GAAAA;AACR,SAAA,CAAA;QAEF3B,MAAO4B,CAAAA,OAAO,CAACC,sBAAwBC,CAAAA,CAAAA,OAAO,CAAC,CAAC,CAACC,KAAKC,KAAM,CAAA,GAAA;AAC1DlD,YAAAA,OAAAA,CAAOmD,GAAG,CAAC,cAAgBC,CAAAA,CAAAA,eAAe,CAACH,GAAKC,EAAAA,KAAAA,CAAAA;AAClD,SAAA,CAAA;AACF;AACF;;;;"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const RELEASE_MODEL_UID = 'plugin::content-releases.release';
|
|
4
|
+
const RELEASE_ACTION_MODEL_UID = 'plugin::content-releases.release-action';
|
|
5
|
+
const ACTIONS = [
|
|
6
|
+
{
|
|
7
|
+
section: 'plugins',
|
|
8
|
+
displayName: 'Read',
|
|
9
|
+
uid: 'read',
|
|
10
|
+
pluginName: 'content-releases'
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
section: 'plugins',
|
|
14
|
+
displayName: 'Create',
|
|
15
|
+
uid: 'create',
|
|
16
|
+
pluginName: 'content-releases'
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
section: 'plugins',
|
|
20
|
+
displayName: 'Edit',
|
|
21
|
+
uid: 'update',
|
|
22
|
+
pluginName: 'content-releases'
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
section: 'plugins',
|
|
26
|
+
displayName: 'Delete',
|
|
27
|
+
uid: 'delete',
|
|
28
|
+
pluginName: 'content-releases'
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
section: 'plugins',
|
|
32
|
+
displayName: 'Publish',
|
|
33
|
+
uid: 'publish',
|
|
34
|
+
pluginName: 'content-releases'
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
section: 'plugins',
|
|
38
|
+
displayName: 'Remove an entry from a release',
|
|
39
|
+
uid: 'delete-action',
|
|
40
|
+
pluginName: 'content-releases'
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
section: 'plugins',
|
|
44
|
+
displayName: 'Add an entry to a release',
|
|
45
|
+
uid: 'create-action',
|
|
46
|
+
pluginName: 'content-releases'
|
|
47
|
+
},
|
|
48
|
+
// Settings
|
|
49
|
+
{
|
|
50
|
+
uid: 'settings.read',
|
|
51
|
+
section: 'settings',
|
|
52
|
+
displayName: 'Read',
|
|
53
|
+
category: 'content releases',
|
|
54
|
+
subCategory: 'options',
|
|
55
|
+
pluginName: 'content-releases'
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
uid: 'settings.update',
|
|
59
|
+
section: 'settings',
|
|
60
|
+
displayName: 'Edit',
|
|
61
|
+
category: 'content releases',
|
|
62
|
+
subCategory: 'options',
|
|
63
|
+
pluginName: 'content-releases'
|
|
64
|
+
}
|
|
65
|
+
];
|
|
66
|
+
const ALLOWED_WEBHOOK_EVENTS = {
|
|
67
|
+
RELEASES_PUBLISH: 'releases.publish'
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
exports.ACTIONS = ACTIONS;
|
|
71
|
+
exports.ALLOWED_WEBHOOK_EVENTS = ALLOWED_WEBHOOK_EVENTS;
|
|
72
|
+
exports.RELEASE_ACTION_MODEL_UID = RELEASE_ACTION_MODEL_UID;
|
|
73
|
+
exports.RELEASE_MODEL_UID = RELEASE_MODEL_UID;
|
|
74
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../../server/src/constants.ts"],"sourcesContent":["export const RELEASE_MODEL_UID = 'plugin::content-releases.release';\nexport const RELEASE_ACTION_MODEL_UID = 'plugin::content-releases.release-action';\n\nexport const ACTIONS = [\n {\n section: 'plugins',\n displayName: 'Read',\n uid: 'read',\n pluginName: 'content-releases',\n },\n {\n section: 'plugins',\n displayName: 'Create',\n uid: 'create',\n pluginName: 'content-releases',\n },\n {\n section: 'plugins',\n displayName: 'Edit',\n uid: 'update',\n pluginName: 'content-releases',\n },\n {\n section: 'plugins',\n displayName: 'Delete',\n uid: 'delete',\n pluginName: 'content-releases',\n },\n {\n section: 'plugins',\n displayName: 'Publish',\n uid: 'publish',\n pluginName: 'content-releases',\n },\n {\n section: 'plugins',\n displayName: 'Remove an entry from a release',\n uid: 'delete-action',\n pluginName: 'content-releases',\n },\n {\n section: 'plugins',\n displayName: 'Add an entry to a release',\n uid: 'create-action',\n pluginName: 'content-releases',\n },\n\n // Settings\n {\n uid: 'settings.read',\n section: 'settings',\n displayName: 'Read',\n category: 'content releases',\n subCategory: 'options',\n pluginName: 'content-releases',\n },\n\n {\n uid: 'settings.update',\n section: 'settings',\n displayName: 'Edit',\n category: 'content releases',\n subCategory: 'options',\n pluginName: 'content-releases',\n },\n];\n\nexport const ALLOWED_WEBHOOK_EVENTS = {\n RELEASES_PUBLISH: 'releases.publish',\n};\n"],"names":["RELEASE_MODEL_UID","RELEASE_ACTION_MODEL_UID","ACTIONS","section","displayName","uid","pluginName","category","subCategory","ALLOWED_WEBHOOK_EVENTS","RELEASES_PUBLISH"],"mappings":";;AAAO,MAAMA,oBAAoB;AAC1B,MAAMC,2BAA2B;MAE3BC,OAAU,GAAA;AACrB,IAAA;QACEC,OAAS,EAAA,SAAA;QACTC,WAAa,EAAA,MAAA;QACbC,GAAK,EAAA,MAAA;QACLC,UAAY,EAAA;AACd,KAAA;AACA,IAAA;QACEH,OAAS,EAAA,SAAA;QACTC,WAAa,EAAA,QAAA;QACbC,GAAK,EAAA,QAAA;QACLC,UAAY,EAAA;AACd,KAAA;AACA,IAAA;QACEH,OAAS,EAAA,SAAA;QACTC,WAAa,EAAA,MAAA;QACbC,GAAK,EAAA,QAAA;QACLC,UAAY,EAAA;AACd,KAAA;AACA,IAAA;QACEH,OAAS,EAAA,SAAA;QACTC,WAAa,EAAA,QAAA;QACbC,GAAK,EAAA,QAAA;QACLC,UAAY,EAAA;AACd,KAAA;AACA,IAAA;QACEH,OAAS,EAAA,SAAA;QACTC,WAAa,EAAA,SAAA;QACbC,GAAK,EAAA,SAAA;QACLC,UAAY,EAAA;AACd,KAAA;AACA,IAAA;QACEH,OAAS,EAAA,SAAA;QACTC,WAAa,EAAA,gCAAA;QACbC,GAAK,EAAA,eAAA;QACLC,UAAY,EAAA;AACd,KAAA;AACA,IAAA;QACEH,OAAS,EAAA,SAAA;QACTC,WAAa,EAAA,2BAAA;QACbC,GAAK,EAAA,eAAA;QACLC,UAAY,EAAA;AACd,KAAA;;AAGA,IAAA;QACED,GAAK,EAAA,eAAA;QACLF,OAAS,EAAA,UAAA;QACTC,WAAa,EAAA,MAAA;QACbG,QAAU,EAAA,kBAAA;QACVC,WAAa,EAAA,SAAA;QACbF,UAAY,EAAA;AACd,KAAA;AAEA,IAAA;QACED,GAAK,EAAA,iBAAA;QACLF,OAAS,EAAA,UAAA;QACTC,WAAa,EAAA,MAAA;QACbG,QAAU,EAAA,kBAAA;QACVC,WAAa,EAAA,SAAA;QACbF,UAAY,EAAA;AACd;;MAGWG,sBAAyB,GAAA;IACpCC,gBAAkB,EAAA;AACpB;;;;;;;"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
const RELEASE_MODEL_UID = 'plugin::content-releases.release';
|
|
2
|
+
const RELEASE_ACTION_MODEL_UID = 'plugin::content-releases.release-action';
|
|
3
|
+
const ACTIONS = [
|
|
4
|
+
{
|
|
5
|
+
section: 'plugins',
|
|
6
|
+
displayName: 'Read',
|
|
7
|
+
uid: 'read',
|
|
8
|
+
pluginName: 'content-releases'
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
section: 'plugins',
|
|
12
|
+
displayName: 'Create',
|
|
13
|
+
uid: 'create',
|
|
14
|
+
pluginName: 'content-releases'
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
section: 'plugins',
|
|
18
|
+
displayName: 'Edit',
|
|
19
|
+
uid: 'update',
|
|
20
|
+
pluginName: 'content-releases'
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
section: 'plugins',
|
|
24
|
+
displayName: 'Delete',
|
|
25
|
+
uid: 'delete',
|
|
26
|
+
pluginName: 'content-releases'
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
section: 'plugins',
|
|
30
|
+
displayName: 'Publish',
|
|
31
|
+
uid: 'publish',
|
|
32
|
+
pluginName: 'content-releases'
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
section: 'plugins',
|
|
36
|
+
displayName: 'Remove an entry from a release',
|
|
37
|
+
uid: 'delete-action',
|
|
38
|
+
pluginName: 'content-releases'
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
section: 'plugins',
|
|
42
|
+
displayName: 'Add an entry to a release',
|
|
43
|
+
uid: 'create-action',
|
|
44
|
+
pluginName: 'content-releases'
|
|
45
|
+
},
|
|
46
|
+
// Settings
|
|
47
|
+
{
|
|
48
|
+
uid: 'settings.read',
|
|
49
|
+
section: 'settings',
|
|
50
|
+
displayName: 'Read',
|
|
51
|
+
category: 'content releases',
|
|
52
|
+
subCategory: 'options',
|
|
53
|
+
pluginName: 'content-releases'
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
uid: 'settings.update',
|
|
57
|
+
section: 'settings',
|
|
58
|
+
displayName: 'Edit',
|
|
59
|
+
category: 'content releases',
|
|
60
|
+
subCategory: 'options',
|
|
61
|
+
pluginName: 'content-releases'
|
|
62
|
+
}
|
|
63
|
+
];
|
|
64
|
+
const ALLOWED_WEBHOOK_EVENTS = {
|
|
65
|
+
RELEASES_PUBLISH: 'releases.publish'
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export { ACTIONS, ALLOWED_WEBHOOK_EVENTS, RELEASE_ACTION_MODEL_UID, RELEASE_MODEL_UID };
|
|
69
|
+
//# sourceMappingURL=constants.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.mjs","sources":["../../server/src/constants.ts"],"sourcesContent":["export const RELEASE_MODEL_UID = 'plugin::content-releases.release';\nexport const RELEASE_ACTION_MODEL_UID = 'plugin::content-releases.release-action';\n\nexport const ACTIONS = [\n {\n section: 'plugins',\n displayName: 'Read',\n uid: 'read',\n pluginName: 'content-releases',\n },\n {\n section: 'plugins',\n displayName: 'Create',\n uid: 'create',\n pluginName: 'content-releases',\n },\n {\n section: 'plugins',\n displayName: 'Edit',\n uid: 'update',\n pluginName: 'content-releases',\n },\n {\n section: 'plugins',\n displayName: 'Delete',\n uid: 'delete',\n pluginName: 'content-releases',\n },\n {\n section: 'plugins',\n displayName: 'Publish',\n uid: 'publish',\n pluginName: 'content-releases',\n },\n {\n section: 'plugins',\n displayName: 'Remove an entry from a release',\n uid: 'delete-action',\n pluginName: 'content-releases',\n },\n {\n section: 'plugins',\n displayName: 'Add an entry to a release',\n uid: 'create-action',\n pluginName: 'content-releases',\n },\n\n // Settings\n {\n uid: 'settings.read',\n section: 'settings',\n displayName: 'Read',\n category: 'content releases',\n subCategory: 'options',\n pluginName: 'content-releases',\n },\n\n {\n uid: 'settings.update',\n section: 'settings',\n displayName: 'Edit',\n category: 'content releases',\n subCategory: 'options',\n pluginName: 'content-releases',\n },\n];\n\nexport const ALLOWED_WEBHOOK_EVENTS = {\n RELEASES_PUBLISH: 'releases.publish',\n};\n"],"names":["RELEASE_MODEL_UID","RELEASE_ACTION_MODEL_UID","ACTIONS","section","displayName","uid","pluginName","category","subCategory","ALLOWED_WEBHOOK_EVENTS","RELEASES_PUBLISH"],"mappings":"AAAO,MAAMA,oBAAoB;AAC1B,MAAMC,2BAA2B;MAE3BC,OAAU,GAAA;AACrB,IAAA;QACEC,OAAS,EAAA,SAAA;QACTC,WAAa,EAAA,MAAA;QACbC,GAAK,EAAA,MAAA;QACLC,UAAY,EAAA;AACd,KAAA;AACA,IAAA;QACEH,OAAS,EAAA,SAAA;QACTC,WAAa,EAAA,QAAA;QACbC,GAAK,EAAA,QAAA;QACLC,UAAY,EAAA;AACd,KAAA;AACA,IAAA;QACEH,OAAS,EAAA,SAAA;QACTC,WAAa,EAAA,MAAA;QACbC,GAAK,EAAA,QAAA;QACLC,UAAY,EAAA;AACd,KAAA;AACA,IAAA;QACEH,OAAS,EAAA,SAAA;QACTC,WAAa,EAAA,QAAA;QACbC,GAAK,EAAA,QAAA;QACLC,UAAY,EAAA;AACd,KAAA;AACA,IAAA;QACEH,OAAS,EAAA,SAAA;QACTC,WAAa,EAAA,SAAA;QACbC,GAAK,EAAA,SAAA;QACLC,UAAY,EAAA;AACd,KAAA;AACA,IAAA;QACEH,OAAS,EAAA,SAAA;QACTC,WAAa,EAAA,gCAAA;QACbC,GAAK,EAAA,eAAA;QACLC,UAAY,EAAA;AACd,KAAA;AACA,IAAA;QACEH,OAAS,EAAA,SAAA;QACTC,WAAa,EAAA,2BAAA;QACbC,GAAK,EAAA,eAAA;QACLC,UAAY,EAAA;AACd,KAAA;;AAGA,IAAA;QACED,GAAK,EAAA,eAAA;QACLF,OAAS,EAAA,UAAA;QACTC,WAAa,EAAA,MAAA;QACbG,QAAU,EAAA,kBAAA;QACVC,WAAa,EAAA,SAAA;QACbF,UAAY,EAAA;AACd,KAAA;AAEA,IAAA;QACED,GAAK,EAAA,iBAAA;QACLF,OAAS,EAAA,UAAA;QACTC,WAAa,EAAA,MAAA;QACbG,QAAU,EAAA,kBAAA;QACVC,WAAa,EAAA,SAAA;QACbF,UAAY,EAAA;AACd;;MAGWG,sBAAyB,GAAA;IACpCC,gBAAkB,EAAA;AACpB;;;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('./release/index.js');
|
|
4
|
+
var index$1 = require('./release-action/index.js');
|
|
5
|
+
|
|
6
|
+
const contentTypes = {
|
|
7
|
+
release: index.release,
|
|
8
|
+
'release-action': index$1.releaseAction
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
exports.contentTypes = contentTypes;
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../server/src/content-types/index.ts"],"sourcesContent":["import { release } from './release';\nimport { releaseAction } from './release-action';\n\nexport const contentTypes = {\n release,\n 'release-action': releaseAction,\n};\n"],"names":["contentTypes","release","releaseAction"],"mappings":";;;;;MAGaA,YAAe,GAAA;AAC1BC,aAAAA,aAAAA;IACA,gBAAkBC,EAAAA;AACpB;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../server/src/content-types/index.ts"],"sourcesContent":["import { release } from './release';\nimport { releaseAction } from './release-action';\n\nexport const contentTypes = {\n release,\n 'release-action': releaseAction,\n};\n"],"names":["contentTypes","release","releaseAction"],"mappings":";;;MAGaA,YAAe,GAAA;AAC1BC,IAAAA,OAAAA;IACA,gBAAkBC,EAAAA;AACpB;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../server/src/content-types/release/index.ts"],"sourcesContent":["import schema from './schema';\n\nexport const release = {\n schema,\n};\n"],"names":["release","schema"],"mappings":";;;;MAEaA,OAAU,GAAA;AACrBC,IAAAA;AACF;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../server/src/content-types/release/index.ts"],"sourcesContent":["import schema from './schema';\n\nexport const release = {\n schema,\n};\n"],"names":["release","schema"],"mappings":";;MAEaA,OAAU,GAAA;AACrBC,IAAAA;AACF;;;;"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var constants = require('../../constants.js');
|
|
4
|
+
|
|
5
|
+
var schema = {
|
|
6
|
+
collectionName: 'strapi_releases',
|
|
7
|
+
info: {
|
|
8
|
+
singularName: 'release',
|
|
9
|
+
pluralName: 'releases',
|
|
10
|
+
displayName: 'Release'
|
|
11
|
+
},
|
|
12
|
+
options: {
|
|
13
|
+
draftAndPublish: false
|
|
14
|
+
},
|
|
15
|
+
pluginOptions: {
|
|
16
|
+
'content-manager': {
|
|
17
|
+
visible: false
|
|
18
|
+
},
|
|
19
|
+
'content-type-builder': {
|
|
20
|
+
visible: false
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
attributes: {
|
|
24
|
+
name: {
|
|
25
|
+
type: 'string',
|
|
26
|
+
required: true
|
|
27
|
+
},
|
|
28
|
+
releasedAt: {
|
|
29
|
+
type: 'datetime'
|
|
30
|
+
},
|
|
31
|
+
scheduledAt: {
|
|
32
|
+
type: 'datetime'
|
|
33
|
+
},
|
|
34
|
+
timezone: {
|
|
35
|
+
type: 'string'
|
|
36
|
+
},
|
|
37
|
+
status: {
|
|
38
|
+
type: 'enumeration',
|
|
39
|
+
enum: [
|
|
40
|
+
'ready',
|
|
41
|
+
'blocked',
|
|
42
|
+
'failed',
|
|
43
|
+
'done',
|
|
44
|
+
'empty'
|
|
45
|
+
],
|
|
46
|
+
required: true
|
|
47
|
+
},
|
|
48
|
+
actions: {
|
|
49
|
+
type: 'relation',
|
|
50
|
+
relation: 'oneToMany',
|
|
51
|
+
target: constants.RELEASE_ACTION_MODEL_UID,
|
|
52
|
+
mappedBy: 'release'
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
module.exports = schema;
|
|
58
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sources":["../../../../server/src/content-types/release/schema.ts"],"sourcesContent":["import { RELEASE_ACTION_MODEL_UID } from '../../constants';\n\nexport default {\n collectionName: 'strapi_releases',\n info: {\n singularName: 'release',\n pluralName: 'releases',\n displayName: 'Release',\n },\n options: {\n draftAndPublish: false,\n },\n pluginOptions: {\n 'content-manager': {\n visible: false,\n },\n 'content-type-builder': {\n visible: false,\n },\n },\n attributes: {\n name: {\n type: 'string',\n required: true,\n },\n releasedAt: {\n type: 'datetime',\n },\n scheduledAt: {\n type: 'datetime',\n },\n timezone: {\n type: 'string',\n },\n status: {\n type: 'enumeration',\n enum: ['ready', 'blocked', 'failed', 'done', 'empty'],\n required: true,\n },\n actions: {\n type: 'relation',\n relation: 'oneToMany',\n target: RELEASE_ACTION_MODEL_UID,\n mappedBy: 'release',\n },\n },\n};\n"],"names":["collectionName","info","singularName","pluralName","displayName","options","draftAndPublish","pluginOptions","visible","attributes","name","type","required","releasedAt","scheduledAt","timezone","status","enum","actions","relation","target","RELEASE_ACTION_MODEL_UID","mappedBy"],"mappings":";;;;AAEA,aAAe;IACbA,cAAgB,EAAA,iBAAA;IAChBC,IAAM,EAAA;QACJC,YAAc,EAAA,SAAA;QACdC,UAAY,EAAA,UAAA;QACZC,WAAa,EAAA;AACf,KAAA;IACAC,OAAS,EAAA;QACPC,eAAiB,EAAA;AACnB,KAAA;IACAC,aAAe,EAAA;QACb,iBAAmB,EAAA;YACjBC,OAAS,EAAA;AACX,SAAA;QACA,sBAAwB,EAAA;YACtBA,OAAS,EAAA;AACX;AACF,KAAA;IACAC,UAAY,EAAA;QACVC,IAAM,EAAA;YACJC,IAAM,EAAA,QAAA;YACNC,QAAU,EAAA;AACZ,SAAA;QACAC,UAAY,EAAA;YACVF,IAAM,EAAA;AACR,SAAA;QACAG,WAAa,EAAA;YACXH,IAAM,EAAA;AACR,SAAA;QACAI,QAAU,EAAA;YACRJ,IAAM,EAAA;AACR,SAAA;QACAK,MAAQ,EAAA;YACNL,IAAM,EAAA,aAAA;YACNM,IAAM,EAAA;AAAC,gBAAA,OAAA;AAAS,gBAAA,SAAA;AAAW,gBAAA,QAAA;AAAU,gBAAA,MAAA;AAAQ,gBAAA;AAAQ,aAAA;YACrDL,QAAU,EAAA;AACZ,SAAA;QACAM,OAAS,EAAA;YACPP,IAAM,EAAA,UAAA;YACNQ,QAAU,EAAA,WAAA;YACVC,MAAQC,EAAAA,kCAAAA;YACRC,QAAU,EAAA;AACZ;AACF;AACF,CAAE;;;;"}
|