@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 @@
|
|
|
1
|
+
{"version":3,"file":"documents.mjs","sources":["../../../server/src/middlewares/documents.ts"],"sourcesContent":["import type { Modules, UID } from '@strapi/types';\nimport { contentTypes } from '@strapi/utils';\nimport { RELEASE_MODEL_UID, RELEASE_ACTION_MODEL_UID } from '../constants';\nimport { getService, isEntryValid } from '../utils';\n\ntype Middleware = Modules.Documents.Middleware.Middleware;\n\ninterface ReleaseActionsParams {\n contentType: UID.ContentType;\n entryDocumentId?: Modules.Documents.ID;\n locale?: string;\n}\n\nconst updateActionsStatusAndUpdateReleaseStatus = async (\n contentType: UID.ContentType,\n entry: Modules.Documents.AnyDocument\n) => {\n const releases = await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n releasedAt: null,\n actions: {\n contentType,\n entryDocumentId: entry.documentId,\n locale: entry.locale,\n },\n },\n });\n\n const entryStatus = await isEntryValid(contentType, entry, { strapi });\n\n await strapi.db.query(RELEASE_ACTION_MODEL_UID).updateMany({\n where: {\n contentType,\n entryDocumentId: entry.documentId,\n locale: entry.locale,\n },\n data: {\n isEntryValid: entryStatus,\n },\n });\n\n for (const release of releases) {\n getService('release', { strapi }).updateReleaseStatus(release.id);\n }\n};\n\nconst deleteActionsAndUpdateReleaseStatus = async (params: ReleaseActionsParams) => {\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 for (const release of releases) {\n getService('release', { strapi }).updateReleaseStatus(release.id);\n }\n};\n\nconst deleteActionsOnDelete: Middleware = async (ctx, next) => {\n if (ctx.action !== 'delete') {\n return next();\n }\n\n if (!contentTypes.hasDraftAndPublish(ctx.contentType)) {\n return next();\n }\n\n const contentType = ctx.contentType.uid;\n const { documentId, locale } = ctx.params;\n\n const result = await next();\n\n if (!result) {\n return result;\n }\n\n try {\n deleteActionsAndUpdateReleaseStatus({\n contentType,\n entryDocumentId: documentId,\n ...(locale !== '*' && { locale }),\n });\n } catch (error) {\n strapi.log.error('Error while deleting release actions after delete', {\n error,\n });\n }\n\n return result;\n};\n\nconst updateActionsOnUpdate: Middleware = async (ctx, next) => {\n if (ctx.action !== 'update') {\n return next();\n }\n\n if (!contentTypes.hasDraftAndPublish(ctx.contentType)) {\n return next();\n }\n\n const contentType = ctx.contentType.uid;\n\n const result = (await next()) as Modules.Documents.AnyDocument;\n\n if (!result) {\n return result;\n }\n\n try {\n updateActionsStatusAndUpdateReleaseStatus(contentType, result);\n } catch (error) {\n strapi.log.error('Error while updating release actions after update', {\n error,\n });\n }\n\n return result;\n};\n\nexport { deleteActionsOnDelete, updateActionsOnUpdate };\n"],"names":["updateActionsStatusAndUpdateReleaseStatus","contentType","entry","releases","strapi","db","query","RELEASE_MODEL_UID","findMany","where","releasedAt","actions","entryDocumentId","documentId","locale","entryStatus","isEntryValid","RELEASE_ACTION_MODEL_UID","updateMany","data","release","getService","updateReleaseStatus","id","deleteActionsAndUpdateReleaseStatus","params","deleteMany","deleteActionsOnDelete","ctx","next","action","contentTypes","hasDraftAndPublish","uid","result","error","log","updateActionsOnUpdate"],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var utils = require('@strapi/utils');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* On v4, release actions are linked with entries using the built in Polymorphic relations.
|
|
7
|
+
*
|
|
8
|
+
* On v5, we are going to save entryDocumentId on the release action and make the link manually.
|
|
9
|
+
* This because entryId is not a reliable way to link documents, as it can change.
|
|
10
|
+
*/ const addEntryDocumentToReleaseActions = {
|
|
11
|
+
name: 'content-releases::5.0.0-add-entry-document-id-to-release-actions',
|
|
12
|
+
async up (trx, db) {
|
|
13
|
+
// Check if the table exists
|
|
14
|
+
const hasTable = await trx.schema.hasTable('strapi_release_actions');
|
|
15
|
+
if (!hasTable) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const hasPolymorphicColumn = await trx.schema.hasColumn('strapi_release_actions', 'target_id');
|
|
19
|
+
// If user has PolymorphicColumn means that is coming from v4
|
|
20
|
+
if (hasPolymorphicColumn) {
|
|
21
|
+
// First time coming from v4 user doesn't have entryDocumentId
|
|
22
|
+
// but we double check to avoid errors
|
|
23
|
+
const hasEntryDocumentIdColumn = await trx.schema.hasColumn('strapi_release_actions', 'entry_document_id');
|
|
24
|
+
if (!hasEntryDocumentIdColumn) {
|
|
25
|
+
await trx.schema.alterTable('strapi_release_actions', (table)=>{
|
|
26
|
+
table.string('entry_document_id');
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
const releaseActions = await trx.select('*').from('strapi_release_actions');
|
|
30
|
+
utils.async.map(releaseActions, async (action)=>{
|
|
31
|
+
const { target_type, target_id } = action;
|
|
32
|
+
const entry = await db.query(target_type).findOne({
|
|
33
|
+
where: {
|
|
34
|
+
id: target_id
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
if (entry) {
|
|
38
|
+
await trx('strapi_release_actions').update({
|
|
39
|
+
entry_document_id: entry.documentId
|
|
40
|
+
}).where('id', action.id);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
async down () {
|
|
46
|
+
throw new Error('not implemented');
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
exports.addEntryDocumentToReleaseActions = addEntryDocumentToReleaseActions;
|
|
51
|
+
//# sourceMappingURL=5.0.0-document-id-in-actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"5.0.0-document-id-in-actions.js","sources":["../../../../server/src/migrations/database/5.0.0-document-id-in-actions.ts"],"sourcesContent":["import { async } from '@strapi/utils';\n\nimport type { Migration, Database } from '@strapi/database';\n\ntype Knex = Parameters<Migration['up']>[0];\n\n/**\n * On v4, release actions are linked with entries using the built in Polymorphic relations.\n *\n * On v5, we are going to save entryDocumentId on the release action and make the link manually.\n * This because entryId is not a reliable way to link documents, as it can change.\n */\nexport const addEntryDocumentToReleaseActions: Migration = {\n name: 'content-releases::5.0.0-add-entry-document-id-to-release-actions',\n async up(trx: Knex, db: Database) {\n // Check if the table exists\n const hasTable = await trx.schema.hasTable('strapi_release_actions');\n\n if (!hasTable) {\n return;\n }\n\n const hasPolymorphicColumn = await trx.schema.hasColumn('strapi_release_actions', 'target_id');\n\n // If user has PolymorphicColumn means that is coming from v4\n if (hasPolymorphicColumn) {\n // First time coming from v4 user doesn't have entryDocumentId\n // but we double check to avoid errors\n const hasEntryDocumentIdColumn = await trx.schema.hasColumn(\n 'strapi_release_actions',\n 'entry_document_id'\n );\n\n if (!hasEntryDocumentIdColumn) {\n await trx.schema.alterTable('strapi_release_actions', (table) => {\n table.string('entry_document_id');\n });\n }\n\n const releaseActions = await trx.select('*').from('strapi_release_actions');\n\n async.map(releaseActions, async (action: any) => {\n const { target_type, target_id } = action;\n\n const entry = await db.query(target_type).findOne({ where: { id: target_id } });\n\n if (entry) {\n await trx('strapi_release_actions')\n .update({ entry_document_id: entry.documentId })\n .where('id', action.id);\n }\n });\n }\n },\n async down() {\n throw new Error('not implemented');\n },\n};\n"],"names":["addEntryDocumentToReleaseActions","name","up","trx","db","hasTable","schema","hasPolymorphicColumn","hasColumn","hasEntryDocumentIdColumn","alterTable","table","string","releaseActions","select","from","async","map","action","target_type","target_id","entry","query","findOne","where","id","update","entry_document_id","documentId","down","Error"],"mappings":";;;;AAMA;;;;;UAMaA,gCAA8C,GAAA;IACzDC,IAAM,EAAA,kEAAA;IACN,MAAMC,EAAAA,CAAAA,CAAGC,GAAS,EAAEC,EAAY,EAAA;;AAE9B,QAAA,MAAMC,WAAW,MAAMF,GAAAA,CAAIG,MAAM,CAACD,QAAQ,CAAC,wBAAA,CAAA;AAE3C,QAAA,IAAI,CAACA,QAAU,EAAA;AACb,YAAA;AACF;AAEA,QAAA,MAAME,uBAAuB,MAAMJ,GAAAA,CAAIG,MAAM,CAACE,SAAS,CAAC,wBAA0B,EAAA,WAAA,CAAA;;AAGlF,QAAA,IAAID,oBAAsB,EAAA;;;AAGxB,YAAA,MAAME,2BAA2B,MAAMN,GAAAA,CAAIG,MAAM,CAACE,SAAS,CACzD,wBACA,EAAA,mBAAA,CAAA;AAGF,YAAA,IAAI,CAACC,wBAA0B,EAAA;AAC7B,gBAAA,MAAMN,IAAIG,MAAM,CAACI,UAAU,CAAC,0BAA0B,CAACC,KAAAA,GAAAA;AACrDA,oBAAAA,KAAAA,CAAMC,MAAM,CAAC,mBAAA,CAAA;AACf,iBAAA,CAAA;AACF;AAEA,YAAA,MAAMC,iBAAiB,MAAMV,GAAAA,CAAIW,MAAM,CAAC,GAAA,CAAA,CAAKC,IAAI,CAAC,wBAAA,CAAA;YAElDC,WAAMC,CAAAA,GAAG,CAACJ,cAAAA,EAAgB,OAAOK,MAAAA,GAAAA;AAC/B,gBAAA,MAAM,EAAEC,WAAW,EAAEC,SAAS,EAAE,GAAGF,MAAAA;AAEnC,gBAAA,MAAMG,QAAQ,MAAMjB,EAAAA,CAAGkB,KAAK,CAACH,WAAAA,CAAAA,CAAaI,OAAO,CAAC;oBAAEC,KAAO,EAAA;wBAAEC,EAAIL,EAAAA;AAAU;AAAE,iBAAA,CAAA;AAE7E,gBAAA,IAAIC,KAAO,EAAA;oBACT,MAAMlB,GAAAA,CAAI,wBACPuB,CAAAA,CAAAA,MAAM,CAAC;AAAEC,wBAAAA,iBAAAA,EAAmBN,MAAMO;AAAW,qBAAA,CAAA,CAC7CJ,KAAK,CAAC,IAAMN,EAAAA,MAAAA,CAAOO,EAAE,CAAA;AAC1B;AACF,aAAA,CAAA;AACF;AACF,KAAA;IACA,MAAMI,IAAAA,CAAAA,GAAAA;AACJ,QAAA,MAAM,IAAIC,KAAM,CAAA,iBAAA,CAAA;AAClB;AACF;;;;"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { async } from '@strapi/utils';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* On v4, release actions are linked with entries using the built in Polymorphic relations.
|
|
5
|
+
*
|
|
6
|
+
* On v5, we are going to save entryDocumentId on the release action and make the link manually.
|
|
7
|
+
* This because entryId is not a reliable way to link documents, as it can change.
|
|
8
|
+
*/ const addEntryDocumentToReleaseActions = {
|
|
9
|
+
name: 'content-releases::5.0.0-add-entry-document-id-to-release-actions',
|
|
10
|
+
async up (trx, db) {
|
|
11
|
+
// Check if the table exists
|
|
12
|
+
const hasTable = await trx.schema.hasTable('strapi_release_actions');
|
|
13
|
+
if (!hasTable) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const hasPolymorphicColumn = await trx.schema.hasColumn('strapi_release_actions', 'target_id');
|
|
17
|
+
// If user has PolymorphicColumn means that is coming from v4
|
|
18
|
+
if (hasPolymorphicColumn) {
|
|
19
|
+
// First time coming from v4 user doesn't have entryDocumentId
|
|
20
|
+
// but we double check to avoid errors
|
|
21
|
+
const hasEntryDocumentIdColumn = await trx.schema.hasColumn('strapi_release_actions', 'entry_document_id');
|
|
22
|
+
if (!hasEntryDocumentIdColumn) {
|
|
23
|
+
await trx.schema.alterTable('strapi_release_actions', (table)=>{
|
|
24
|
+
table.string('entry_document_id');
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
const releaseActions = await trx.select('*').from('strapi_release_actions');
|
|
28
|
+
async.map(releaseActions, async (action)=>{
|
|
29
|
+
const { target_type, target_id } = action;
|
|
30
|
+
const entry = await db.query(target_type).findOne({
|
|
31
|
+
where: {
|
|
32
|
+
id: target_id
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
if (entry) {
|
|
36
|
+
await trx('strapi_release_actions').update({
|
|
37
|
+
entry_document_id: entry.documentId
|
|
38
|
+
}).where('id', action.id);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
async down () {
|
|
44
|
+
throw new Error('not implemented');
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export { addEntryDocumentToReleaseActions };
|
|
49
|
+
//# sourceMappingURL=5.0.0-document-id-in-actions.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"5.0.0-document-id-in-actions.mjs","sources":["../../../../server/src/migrations/database/5.0.0-document-id-in-actions.ts"],"sourcesContent":["import { async } from '@strapi/utils';\n\nimport type { Migration, Database } from '@strapi/database';\n\ntype Knex = Parameters<Migration['up']>[0];\n\n/**\n * On v4, release actions are linked with entries using the built in Polymorphic relations.\n *\n * On v5, we are going to save entryDocumentId on the release action and make the link manually.\n * This because entryId is not a reliable way to link documents, as it can change.\n */\nexport const addEntryDocumentToReleaseActions: Migration = {\n name: 'content-releases::5.0.0-add-entry-document-id-to-release-actions',\n async up(trx: Knex, db: Database) {\n // Check if the table exists\n const hasTable = await trx.schema.hasTable('strapi_release_actions');\n\n if (!hasTable) {\n return;\n }\n\n const hasPolymorphicColumn = await trx.schema.hasColumn('strapi_release_actions', 'target_id');\n\n // If user has PolymorphicColumn means that is coming from v4\n if (hasPolymorphicColumn) {\n // First time coming from v4 user doesn't have entryDocumentId\n // but we double check to avoid errors\n const hasEntryDocumentIdColumn = await trx.schema.hasColumn(\n 'strapi_release_actions',\n 'entry_document_id'\n );\n\n if (!hasEntryDocumentIdColumn) {\n await trx.schema.alterTable('strapi_release_actions', (table) => {\n table.string('entry_document_id');\n });\n }\n\n const releaseActions = await trx.select('*').from('strapi_release_actions');\n\n async.map(releaseActions, async (action: any) => {\n const { target_type, target_id } = action;\n\n const entry = await db.query(target_type).findOne({ where: { id: target_id } });\n\n if (entry) {\n await trx('strapi_release_actions')\n .update({ entry_document_id: entry.documentId })\n .where('id', action.id);\n }\n });\n }\n },\n async down() {\n throw new Error('not implemented');\n },\n};\n"],"names":["addEntryDocumentToReleaseActions","name","up","trx","db","hasTable","schema","hasPolymorphicColumn","hasColumn","hasEntryDocumentIdColumn","alterTable","table","string","releaseActions","select","from","async","map","action","target_type","target_id","entry","query","findOne","where","id","update","entry_document_id","documentId","down","Error"],"mappings":";;AAMA;;;;;UAMaA,gCAA8C,GAAA;IACzDC,IAAM,EAAA,kEAAA;IACN,MAAMC,EAAAA,CAAAA,CAAGC,GAAS,EAAEC,EAAY,EAAA;;AAE9B,QAAA,MAAMC,WAAW,MAAMF,GAAAA,CAAIG,MAAM,CAACD,QAAQ,CAAC,wBAAA,CAAA;AAE3C,QAAA,IAAI,CAACA,QAAU,EAAA;AACb,YAAA;AACF;AAEA,QAAA,MAAME,uBAAuB,MAAMJ,GAAAA,CAAIG,MAAM,CAACE,SAAS,CAAC,wBAA0B,EAAA,WAAA,CAAA;;AAGlF,QAAA,IAAID,oBAAsB,EAAA;;;AAGxB,YAAA,MAAME,2BAA2B,MAAMN,GAAAA,CAAIG,MAAM,CAACE,SAAS,CACzD,wBACA,EAAA,mBAAA,CAAA;AAGF,YAAA,IAAI,CAACC,wBAA0B,EAAA;AAC7B,gBAAA,MAAMN,IAAIG,MAAM,CAACI,UAAU,CAAC,0BAA0B,CAACC,KAAAA,GAAAA;AACrDA,oBAAAA,KAAAA,CAAMC,MAAM,CAAC,mBAAA,CAAA;AACf,iBAAA,CAAA;AACF;AAEA,YAAA,MAAMC,iBAAiB,MAAMV,GAAAA,CAAIW,MAAM,CAAC,GAAA,CAAA,CAAKC,IAAI,CAAC,wBAAA,CAAA;YAElDC,KAAMC,CAAAA,GAAG,CAACJ,cAAAA,EAAgB,OAAOK,MAAAA,GAAAA;AAC/B,gBAAA,MAAM,EAAEC,WAAW,EAAEC,SAAS,EAAE,GAAGF,MAAAA;AAEnC,gBAAA,MAAMG,QAAQ,MAAMjB,EAAAA,CAAGkB,KAAK,CAACH,WAAAA,CAAAA,CAAaI,OAAO,CAAC;oBAAEC,KAAO,EAAA;wBAAEC,EAAIL,EAAAA;AAAU;AAAE,iBAAA,CAAA;AAE7E,gBAAA,IAAIC,KAAO,EAAA;oBACT,MAAMlB,GAAAA,CAAI,wBACPuB,CAAAA,CAAAA,MAAM,CAAC;AAAEC,wBAAAA,iBAAAA,EAAmBN,MAAMO;AAAW,qBAAA,CAAA,CAC7CJ,KAAK,CAAC,IAAMN,EAAAA,MAAAA,CAAOO,EAAE,CAAA;AAC1B;AACF,aAAA,CAAA;AACF;AACF,KAAA;IACA,MAAMI,IAAAA,CAAAA,GAAAA;AACJ,QAAA,MAAM,IAAIC,KAAM,CAAA,iBAAA,CAAA;AAClB;AACF;;;;"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var utils = require('@strapi/utils');
|
|
4
|
+
var isEqual = require('lodash/isEqual');
|
|
5
|
+
var lodash = require('lodash');
|
|
6
|
+
var constants = require('../constants.js');
|
|
7
|
+
var index = require('../utils/index.js');
|
|
8
|
+
|
|
9
|
+
async function deleteActionsOnDisableDraftAndPublish({ oldContentTypes, contentTypes }) {
|
|
10
|
+
if (!oldContentTypes) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
for(const uid in contentTypes){
|
|
14
|
+
if (!oldContentTypes[uid]) {
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
const oldContentType = oldContentTypes[uid];
|
|
18
|
+
const contentType = contentTypes[uid];
|
|
19
|
+
if (utils.contentTypes.hasDraftAndPublish(oldContentType) && !utils.contentTypes.hasDraftAndPublish(contentType)) {
|
|
20
|
+
await strapi.db?.queryBuilder(constants.RELEASE_ACTION_MODEL_UID).delete().where({
|
|
21
|
+
contentType: uid
|
|
22
|
+
}).execute();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async function deleteActionsOnDeleteContentType({ oldContentTypes, contentTypes }) {
|
|
27
|
+
const deletedContentTypes = lodash.difference(lodash.keys(oldContentTypes), lodash.keys(contentTypes)) ?? [];
|
|
28
|
+
if (deletedContentTypes.length) {
|
|
29
|
+
await utils.async.map(deletedContentTypes, async (deletedContentTypeUID)=>{
|
|
30
|
+
return strapi.db?.queryBuilder(constants.RELEASE_ACTION_MODEL_UID).delete().where({
|
|
31
|
+
contentType: deletedContentTypeUID
|
|
32
|
+
}).execute();
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async function migrateIsValidAndStatusReleases() {
|
|
37
|
+
const releasesWithoutStatus = await strapi.db.query(constants.RELEASE_MODEL_UID).findMany({
|
|
38
|
+
where: {
|
|
39
|
+
status: null,
|
|
40
|
+
releasedAt: null
|
|
41
|
+
},
|
|
42
|
+
populate: {
|
|
43
|
+
actions: {
|
|
44
|
+
populate: {
|
|
45
|
+
entry: true
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
utils.async.map(releasesWithoutStatus, async (release)=>{
|
|
51
|
+
const actions = release.actions;
|
|
52
|
+
const notValidatedActions = actions.filter((action)=>action.isEntryValid === null);
|
|
53
|
+
for (const action of notValidatedActions){
|
|
54
|
+
// We need to check the Action is related to a valid entry because we can't assume this is gonna be always the case
|
|
55
|
+
// example: users could make changes directly to their database, or data could be lost
|
|
56
|
+
if (action.entry) {
|
|
57
|
+
const isEntryValid = index.getDraftEntryValidStatus({
|
|
58
|
+
contentType: action.contentType,
|
|
59
|
+
documentId: action.entryDocumentId,
|
|
60
|
+
locale: action.locale
|
|
61
|
+
}, {
|
|
62
|
+
strapi
|
|
63
|
+
});
|
|
64
|
+
await strapi.db.query(constants.RELEASE_ACTION_MODEL_UID).update({
|
|
65
|
+
where: {
|
|
66
|
+
id: action.id
|
|
67
|
+
},
|
|
68
|
+
data: {
|
|
69
|
+
isEntryValid
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return index.getService('release', {
|
|
75
|
+
strapi
|
|
76
|
+
}).updateReleaseStatus(release.id);
|
|
77
|
+
});
|
|
78
|
+
const publishedReleases = await strapi.db.query(constants.RELEASE_MODEL_UID).findMany({
|
|
79
|
+
where: {
|
|
80
|
+
status: null,
|
|
81
|
+
releasedAt: {
|
|
82
|
+
$notNull: true
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
utils.async.map(publishedReleases, async (release)=>{
|
|
87
|
+
return strapi.db.query(constants.RELEASE_MODEL_UID).update({
|
|
88
|
+
where: {
|
|
89
|
+
id: release.id
|
|
90
|
+
},
|
|
91
|
+
data: {
|
|
92
|
+
status: 'done'
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
async function revalidateChangedContentTypes({ oldContentTypes, contentTypes }) {
|
|
98
|
+
if (oldContentTypes !== undefined && contentTypes !== undefined) {
|
|
99
|
+
const contentTypesWithDraftAndPublish = Object.keys(oldContentTypes).filter((uid)=>oldContentTypes[uid]?.options?.draftAndPublish);
|
|
100
|
+
const releasesAffected = new Set();
|
|
101
|
+
utils.async.map(contentTypesWithDraftAndPublish, async (contentTypeUID)=>{
|
|
102
|
+
const oldContentType = oldContentTypes[contentTypeUID];
|
|
103
|
+
const contentType = contentTypes[contentTypeUID];
|
|
104
|
+
// If attributes have changed, we need to revalidate actions because maybe validations rules are different
|
|
105
|
+
if (!isEqual(oldContentType?.attributes, contentType?.attributes)) {
|
|
106
|
+
const actions = await strapi.db.query(constants.RELEASE_ACTION_MODEL_UID).findMany({
|
|
107
|
+
where: {
|
|
108
|
+
contentType: contentTypeUID
|
|
109
|
+
},
|
|
110
|
+
populate: {
|
|
111
|
+
entry: true,
|
|
112
|
+
release: true
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
await utils.async.map(actions, async (action)=>{
|
|
116
|
+
if (action.entry && action.release && action.type === 'publish') {
|
|
117
|
+
const isEntryValid = await index.getDraftEntryValidStatus({
|
|
118
|
+
contentType: contentTypeUID,
|
|
119
|
+
documentId: action.entryDocumentId,
|
|
120
|
+
locale: action.locale
|
|
121
|
+
}, {
|
|
122
|
+
strapi
|
|
123
|
+
});
|
|
124
|
+
releasesAffected.add(action.release.id);
|
|
125
|
+
await strapi.db.query(constants.RELEASE_ACTION_MODEL_UID).update({
|
|
126
|
+
where: {
|
|
127
|
+
id: action.id
|
|
128
|
+
},
|
|
129
|
+
data: {
|
|
130
|
+
isEntryValid
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}).then(()=>{
|
|
137
|
+
// We need to update the status of the releases affected
|
|
138
|
+
utils.async.map(releasesAffected, async (releaseId)=>{
|
|
139
|
+
return index.getService('release', {
|
|
140
|
+
strapi
|
|
141
|
+
}).updateReleaseStatus(releaseId);
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
async function disableContentTypeLocalized({ oldContentTypes, contentTypes }) {
|
|
147
|
+
if (!oldContentTypes) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
const i18nPlugin = strapi.plugin('i18n');
|
|
151
|
+
if (!i18nPlugin) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
for(const uid in contentTypes){
|
|
155
|
+
if (!oldContentTypes[uid]) {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
const oldContentType = oldContentTypes[uid];
|
|
159
|
+
const contentType = contentTypes[uid];
|
|
160
|
+
const { isLocalizedContentType } = i18nPlugin.service('content-types');
|
|
161
|
+
// if i18N is disabled remove non default locales before sync
|
|
162
|
+
if (isLocalizedContentType(oldContentType) && !isLocalizedContentType(contentType)) {
|
|
163
|
+
await strapi.db.queryBuilder(constants.RELEASE_ACTION_MODEL_UID).update({
|
|
164
|
+
locale: null
|
|
165
|
+
}).where({
|
|
166
|
+
contentType: uid
|
|
167
|
+
}).execute();
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
async function enableContentTypeLocalized({ oldContentTypes, contentTypes }) {
|
|
172
|
+
if (!oldContentTypes) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
const i18nPlugin = strapi.plugin('i18n');
|
|
176
|
+
if (!i18nPlugin) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
for(const uid in contentTypes){
|
|
180
|
+
if (!oldContentTypes[uid]) {
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
const oldContentType = oldContentTypes[uid];
|
|
184
|
+
const contentType = contentTypes[uid];
|
|
185
|
+
const { isLocalizedContentType } = i18nPlugin.service('content-types');
|
|
186
|
+
const { getDefaultLocale } = i18nPlugin.service('locales');
|
|
187
|
+
// if i18N is enabled remove non default locales before sync
|
|
188
|
+
if (!isLocalizedContentType(oldContentType) && isLocalizedContentType(contentType)) {
|
|
189
|
+
const defaultLocale = await getDefaultLocale();
|
|
190
|
+
await strapi.db.queryBuilder(constants.RELEASE_ACTION_MODEL_UID).update({
|
|
191
|
+
locale: defaultLocale
|
|
192
|
+
}).where({
|
|
193
|
+
contentType: uid
|
|
194
|
+
}).execute();
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
exports.deleteActionsOnDeleteContentType = deleteActionsOnDeleteContentType;
|
|
200
|
+
exports.deleteActionsOnDisableDraftAndPublish = deleteActionsOnDisableDraftAndPublish;
|
|
201
|
+
exports.disableContentTypeLocalized = disableContentTypeLocalized;
|
|
202
|
+
exports.enableContentTypeLocalized = enableContentTypeLocalized;
|
|
203
|
+
exports.migrateIsValidAndStatusReleases = migrateIsValidAndStatusReleases;
|
|
204
|
+
exports.revalidateChangedContentTypes = revalidateChangedContentTypes;
|
|
205
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../server/src/migrations/index.ts"],"sourcesContent":["import type { Schema, UID } from '@strapi/types';\nimport { contentTypes as contentTypesUtils, async } from '@strapi/utils';\nimport isEqual from 'lodash/isEqual';\n\nimport { difference, keys } from 'lodash';\nimport { RELEASE_ACTION_MODEL_UID, RELEASE_MODEL_UID } from '../constants';\nimport { getDraftEntryValidStatus, getService } from '../utils';\nimport { Release } from '../../../shared/contracts/releases';\nimport { ReleaseAction } from '../../../shared/contracts/release-actions';\n\ninterface Input {\n oldContentTypes: Record<string, Schema.ContentType>;\n contentTypes: Record<string, Schema.ContentType>;\n}\n\nexport async function deleteActionsOnDisableDraftAndPublish({\n oldContentTypes,\n contentTypes,\n}: Input) {\n if (!oldContentTypes) {\n return;\n }\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n if (\n contentTypesUtils.hasDraftAndPublish(oldContentType) &&\n !contentTypesUtils.hasDraftAndPublish(contentType)\n ) {\n await strapi.db\n ?.queryBuilder(RELEASE_ACTION_MODEL_UID)\n .delete()\n .where({ contentType: uid })\n .execute();\n }\n }\n}\n\nexport async function deleteActionsOnDeleteContentType({ oldContentTypes, contentTypes }: Input) {\n const deletedContentTypes = difference(keys(oldContentTypes), keys(contentTypes)) ?? [];\n\n if (deletedContentTypes.length) {\n await async.map(deletedContentTypes, async (deletedContentTypeUID: unknown) => {\n return strapi.db\n ?.queryBuilder(RELEASE_ACTION_MODEL_UID)\n .delete()\n .where({ contentType: deletedContentTypeUID })\n .execute();\n });\n }\n}\n\nexport async function migrateIsValidAndStatusReleases() {\n const releasesWithoutStatus = (await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n status: null,\n releasedAt: null,\n },\n populate: {\n actions: {\n populate: {\n entry: true,\n },\n },\n },\n })) as Release[];\n\n async.map(releasesWithoutStatus, async (release: Release) => {\n const actions = release.actions;\n\n const notValidatedActions = actions.filter((action) => action.isEntryValid === null);\n\n for (const action of notValidatedActions) {\n // We need to check the Action is related to a valid entry because we can't assume this is gonna be always the case\n // example: users could make changes directly to their database, or data could be lost\n if (action.entry) {\n const isEntryValid = getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n { strapi }\n );\n\n await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({\n where: {\n id: action.id,\n },\n data: {\n isEntryValid,\n },\n });\n }\n }\n\n return getService('release', { strapi }).updateReleaseStatus(release.id);\n });\n\n const publishedReleases = await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n status: null,\n releasedAt: {\n $notNull: true,\n },\n },\n });\n\n async.map(publishedReleases, async (release: Release) => {\n return strapi.db.query(RELEASE_MODEL_UID).update({\n where: {\n id: release.id,\n },\n data: {\n status: 'done',\n },\n });\n });\n}\n\nexport async function revalidateChangedContentTypes({ oldContentTypes, contentTypes }: Input) {\n if (oldContentTypes !== undefined && contentTypes !== undefined) {\n const contentTypesWithDraftAndPublish = Object.keys(oldContentTypes).filter(\n (uid) => oldContentTypes[uid]?.options?.draftAndPublish\n );\n const releasesAffected = new Set();\n\n async\n .map(contentTypesWithDraftAndPublish, async (contentTypeUID: UID.ContentType) => {\n const oldContentType = oldContentTypes[contentTypeUID];\n const contentType = contentTypes[contentTypeUID];\n\n // If attributes have changed, we need to revalidate actions because maybe validations rules are different\n if (!isEqual(oldContentType?.attributes, contentType?.attributes)) {\n const actions = await strapi.db.query(RELEASE_ACTION_MODEL_UID).findMany({\n where: {\n contentType: contentTypeUID,\n },\n populate: {\n entry: true,\n release: true,\n },\n });\n\n await async.map(actions, async (action: ReleaseAction) => {\n if (action.entry && action.release && action.type === 'publish') {\n const isEntryValid = await getDraftEntryValidStatus(\n {\n contentType: contentTypeUID,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n { strapi }\n );\n\n releasesAffected.add(action.release.id);\n\n await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({\n where: {\n id: action.id,\n },\n data: {\n isEntryValid,\n },\n });\n }\n });\n }\n })\n .then(() => {\n // We need to update the status of the releases affected\n async.map(releasesAffected, async (releaseId: Release['id']) => {\n return getService('release', { strapi }).updateReleaseStatus(releaseId);\n });\n });\n }\n}\n\nexport async function disableContentTypeLocalized({ oldContentTypes, contentTypes }: Input) {\n if (!oldContentTypes) {\n return;\n }\n\n const i18nPlugin = strapi.plugin('i18n');\n if (!i18nPlugin) {\n return;\n }\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n const { isLocalizedContentType } = i18nPlugin.service('content-types');\n\n // if i18N is disabled remove non default locales before sync\n if (isLocalizedContentType(oldContentType) && !isLocalizedContentType(contentType)) {\n await strapi.db\n .queryBuilder(RELEASE_ACTION_MODEL_UID)\n .update({\n locale: null,\n })\n .where({ contentType: uid })\n .execute();\n }\n }\n}\n\nexport async function enableContentTypeLocalized({ oldContentTypes, contentTypes }: Input) {\n if (!oldContentTypes) {\n return;\n }\n\n const i18nPlugin = strapi.plugin('i18n');\n if (!i18nPlugin) {\n return;\n }\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n const { isLocalizedContentType } = i18nPlugin.service('content-types');\n const { getDefaultLocale } = i18nPlugin.service('locales');\n\n // if i18N is enabled remove non default locales before sync\n if (!isLocalizedContentType(oldContentType) && isLocalizedContentType(contentType)) {\n const defaultLocale = await getDefaultLocale();\n\n await strapi.db\n .queryBuilder(RELEASE_ACTION_MODEL_UID)\n .update({\n locale: defaultLocale,\n })\n .where({ contentType: uid })\n .execute();\n }\n }\n}\n"],"names":["deleteActionsOnDisableDraftAndPublish","oldContentTypes","contentTypes","uid","oldContentType","contentType","contentTypesUtils","hasDraftAndPublish","strapi","db","queryBuilder","RELEASE_ACTION_MODEL_UID","delete","where","execute","deleteActionsOnDeleteContentType","deletedContentTypes","difference","keys","length","async","map","deletedContentTypeUID","migrateIsValidAndStatusReleases","releasesWithoutStatus","query","RELEASE_MODEL_UID","findMany","status","releasedAt","populate","actions","entry","release","notValidatedActions","filter","action","isEntryValid","getDraftEntryValidStatus","documentId","entryDocumentId","locale","update","id","data","getService","updateReleaseStatus","publishedReleases","$notNull","revalidateChangedContentTypes","undefined","contentTypesWithDraftAndPublish","Object","options","draftAndPublish","releasesAffected","Set","contentTypeUID","isEqual","attributes","type","add","then","releaseId","disableContentTypeLocalized","i18nPlugin","plugin","isLocalizedContentType","service","enableContentTypeLocalized","getDefaultLocale","defaultLocale"],"mappings":"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"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { contentTypes, async } from '@strapi/utils';
|
|
2
|
+
import isEqual from 'lodash/isEqual';
|
|
3
|
+
import { difference, keys } from 'lodash';
|
|
4
|
+
import { RELEASE_ACTION_MODEL_UID, RELEASE_MODEL_UID } from '../constants.mjs';
|
|
5
|
+
import { getDraftEntryValidStatus, getService } from '../utils/index.mjs';
|
|
6
|
+
|
|
7
|
+
async function deleteActionsOnDisableDraftAndPublish({ oldContentTypes, contentTypes: contentTypes$1 }) {
|
|
8
|
+
if (!oldContentTypes) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
for(const uid in contentTypes$1){
|
|
12
|
+
if (!oldContentTypes[uid]) {
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
const oldContentType = oldContentTypes[uid];
|
|
16
|
+
const contentType = contentTypes$1[uid];
|
|
17
|
+
if (contentTypes.hasDraftAndPublish(oldContentType) && !contentTypes.hasDraftAndPublish(contentType)) {
|
|
18
|
+
await strapi.db?.queryBuilder(RELEASE_ACTION_MODEL_UID).delete().where({
|
|
19
|
+
contentType: uid
|
|
20
|
+
}).execute();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
async function deleteActionsOnDeleteContentType({ oldContentTypes, contentTypes }) {
|
|
25
|
+
const deletedContentTypes = difference(keys(oldContentTypes), keys(contentTypes)) ?? [];
|
|
26
|
+
if (deletedContentTypes.length) {
|
|
27
|
+
await async.map(deletedContentTypes, async (deletedContentTypeUID)=>{
|
|
28
|
+
return strapi.db?.queryBuilder(RELEASE_ACTION_MODEL_UID).delete().where({
|
|
29
|
+
contentType: deletedContentTypeUID
|
|
30
|
+
}).execute();
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async function migrateIsValidAndStatusReleases() {
|
|
35
|
+
const releasesWithoutStatus = await strapi.db.query(RELEASE_MODEL_UID).findMany({
|
|
36
|
+
where: {
|
|
37
|
+
status: null,
|
|
38
|
+
releasedAt: null
|
|
39
|
+
},
|
|
40
|
+
populate: {
|
|
41
|
+
actions: {
|
|
42
|
+
populate: {
|
|
43
|
+
entry: true
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
async.map(releasesWithoutStatus, async (release)=>{
|
|
49
|
+
const actions = release.actions;
|
|
50
|
+
const notValidatedActions = actions.filter((action)=>action.isEntryValid === null);
|
|
51
|
+
for (const action of notValidatedActions){
|
|
52
|
+
// We need to check the Action is related to a valid entry because we can't assume this is gonna be always the case
|
|
53
|
+
// example: users could make changes directly to their database, or data could be lost
|
|
54
|
+
if (action.entry) {
|
|
55
|
+
const isEntryValid = getDraftEntryValidStatus({
|
|
56
|
+
contentType: action.contentType,
|
|
57
|
+
documentId: action.entryDocumentId,
|
|
58
|
+
locale: action.locale
|
|
59
|
+
}, {
|
|
60
|
+
strapi
|
|
61
|
+
});
|
|
62
|
+
await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({
|
|
63
|
+
where: {
|
|
64
|
+
id: action.id
|
|
65
|
+
},
|
|
66
|
+
data: {
|
|
67
|
+
isEntryValid
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return getService('release', {
|
|
73
|
+
strapi
|
|
74
|
+
}).updateReleaseStatus(release.id);
|
|
75
|
+
});
|
|
76
|
+
const publishedReleases = await strapi.db.query(RELEASE_MODEL_UID).findMany({
|
|
77
|
+
where: {
|
|
78
|
+
status: null,
|
|
79
|
+
releasedAt: {
|
|
80
|
+
$notNull: true
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
async.map(publishedReleases, async (release)=>{
|
|
85
|
+
return strapi.db.query(RELEASE_MODEL_UID).update({
|
|
86
|
+
where: {
|
|
87
|
+
id: release.id
|
|
88
|
+
},
|
|
89
|
+
data: {
|
|
90
|
+
status: 'done'
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
async function revalidateChangedContentTypes({ oldContentTypes, contentTypes }) {
|
|
96
|
+
if (oldContentTypes !== undefined && contentTypes !== undefined) {
|
|
97
|
+
const contentTypesWithDraftAndPublish = Object.keys(oldContentTypes).filter((uid)=>oldContentTypes[uid]?.options?.draftAndPublish);
|
|
98
|
+
const releasesAffected = new Set();
|
|
99
|
+
async.map(contentTypesWithDraftAndPublish, async (contentTypeUID)=>{
|
|
100
|
+
const oldContentType = oldContentTypes[contentTypeUID];
|
|
101
|
+
const contentType = contentTypes[contentTypeUID];
|
|
102
|
+
// If attributes have changed, we need to revalidate actions because maybe validations rules are different
|
|
103
|
+
if (!isEqual(oldContentType?.attributes, contentType?.attributes)) {
|
|
104
|
+
const actions = await strapi.db.query(RELEASE_ACTION_MODEL_UID).findMany({
|
|
105
|
+
where: {
|
|
106
|
+
contentType: contentTypeUID
|
|
107
|
+
},
|
|
108
|
+
populate: {
|
|
109
|
+
entry: true,
|
|
110
|
+
release: true
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
await async.map(actions, async (action)=>{
|
|
114
|
+
if (action.entry && action.release && action.type === 'publish') {
|
|
115
|
+
const isEntryValid = await getDraftEntryValidStatus({
|
|
116
|
+
contentType: contentTypeUID,
|
|
117
|
+
documentId: action.entryDocumentId,
|
|
118
|
+
locale: action.locale
|
|
119
|
+
}, {
|
|
120
|
+
strapi
|
|
121
|
+
});
|
|
122
|
+
releasesAffected.add(action.release.id);
|
|
123
|
+
await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({
|
|
124
|
+
where: {
|
|
125
|
+
id: action.id
|
|
126
|
+
},
|
|
127
|
+
data: {
|
|
128
|
+
isEntryValid
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}).then(()=>{
|
|
135
|
+
// We need to update the status of the releases affected
|
|
136
|
+
async.map(releasesAffected, async (releaseId)=>{
|
|
137
|
+
return getService('release', {
|
|
138
|
+
strapi
|
|
139
|
+
}).updateReleaseStatus(releaseId);
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
async function disableContentTypeLocalized({ oldContentTypes, contentTypes }) {
|
|
145
|
+
if (!oldContentTypes) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const i18nPlugin = strapi.plugin('i18n');
|
|
149
|
+
if (!i18nPlugin) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
for(const uid in contentTypes){
|
|
153
|
+
if (!oldContentTypes[uid]) {
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
const oldContentType = oldContentTypes[uid];
|
|
157
|
+
const contentType = contentTypes[uid];
|
|
158
|
+
const { isLocalizedContentType } = i18nPlugin.service('content-types');
|
|
159
|
+
// if i18N is disabled remove non default locales before sync
|
|
160
|
+
if (isLocalizedContentType(oldContentType) && !isLocalizedContentType(contentType)) {
|
|
161
|
+
await strapi.db.queryBuilder(RELEASE_ACTION_MODEL_UID).update({
|
|
162
|
+
locale: null
|
|
163
|
+
}).where({
|
|
164
|
+
contentType: uid
|
|
165
|
+
}).execute();
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
async function enableContentTypeLocalized({ oldContentTypes, contentTypes }) {
|
|
170
|
+
if (!oldContentTypes) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const i18nPlugin = strapi.plugin('i18n');
|
|
174
|
+
if (!i18nPlugin) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
for(const uid in contentTypes){
|
|
178
|
+
if (!oldContentTypes[uid]) {
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
const oldContentType = oldContentTypes[uid];
|
|
182
|
+
const contentType = contentTypes[uid];
|
|
183
|
+
const { isLocalizedContentType } = i18nPlugin.service('content-types');
|
|
184
|
+
const { getDefaultLocale } = i18nPlugin.service('locales');
|
|
185
|
+
// if i18N is enabled remove non default locales before sync
|
|
186
|
+
if (!isLocalizedContentType(oldContentType) && isLocalizedContentType(contentType)) {
|
|
187
|
+
const defaultLocale = await getDefaultLocale();
|
|
188
|
+
await strapi.db.queryBuilder(RELEASE_ACTION_MODEL_UID).update({
|
|
189
|
+
locale: defaultLocale
|
|
190
|
+
}).where({
|
|
191
|
+
contentType: uid
|
|
192
|
+
}).execute();
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export { deleteActionsOnDeleteContentType, deleteActionsOnDisableDraftAndPublish, disableContentTypeLocalized, enableContentTypeLocalized, migrateIsValidAndStatusReleases, revalidateChangedContentTypes };
|
|
198
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../server/src/migrations/index.ts"],"sourcesContent":["import type { Schema, UID } from '@strapi/types';\nimport { contentTypes as contentTypesUtils, async } from '@strapi/utils';\nimport isEqual from 'lodash/isEqual';\n\nimport { difference, keys } from 'lodash';\nimport { RELEASE_ACTION_MODEL_UID, RELEASE_MODEL_UID } from '../constants';\nimport { getDraftEntryValidStatus, getService } from '../utils';\nimport { Release } from '../../../shared/contracts/releases';\nimport { ReleaseAction } from '../../../shared/contracts/release-actions';\n\ninterface Input {\n oldContentTypes: Record<string, Schema.ContentType>;\n contentTypes: Record<string, Schema.ContentType>;\n}\n\nexport async function deleteActionsOnDisableDraftAndPublish({\n oldContentTypes,\n contentTypes,\n}: Input) {\n if (!oldContentTypes) {\n return;\n }\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n if (\n contentTypesUtils.hasDraftAndPublish(oldContentType) &&\n !contentTypesUtils.hasDraftAndPublish(contentType)\n ) {\n await strapi.db\n ?.queryBuilder(RELEASE_ACTION_MODEL_UID)\n .delete()\n .where({ contentType: uid })\n .execute();\n }\n }\n}\n\nexport async function deleteActionsOnDeleteContentType({ oldContentTypes, contentTypes }: Input) {\n const deletedContentTypes = difference(keys(oldContentTypes), keys(contentTypes)) ?? [];\n\n if (deletedContentTypes.length) {\n await async.map(deletedContentTypes, async (deletedContentTypeUID: unknown) => {\n return strapi.db\n ?.queryBuilder(RELEASE_ACTION_MODEL_UID)\n .delete()\n .where({ contentType: deletedContentTypeUID })\n .execute();\n });\n }\n}\n\nexport async function migrateIsValidAndStatusReleases() {\n const releasesWithoutStatus = (await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n status: null,\n releasedAt: null,\n },\n populate: {\n actions: {\n populate: {\n entry: true,\n },\n },\n },\n })) as Release[];\n\n async.map(releasesWithoutStatus, async (release: Release) => {\n const actions = release.actions;\n\n const notValidatedActions = actions.filter((action) => action.isEntryValid === null);\n\n for (const action of notValidatedActions) {\n // We need to check the Action is related to a valid entry because we can't assume this is gonna be always the case\n // example: users could make changes directly to their database, or data could be lost\n if (action.entry) {\n const isEntryValid = getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n { strapi }\n );\n\n await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({\n where: {\n id: action.id,\n },\n data: {\n isEntryValid,\n },\n });\n }\n }\n\n return getService('release', { strapi }).updateReleaseStatus(release.id);\n });\n\n const publishedReleases = await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n status: null,\n releasedAt: {\n $notNull: true,\n },\n },\n });\n\n async.map(publishedReleases, async (release: Release) => {\n return strapi.db.query(RELEASE_MODEL_UID).update({\n where: {\n id: release.id,\n },\n data: {\n status: 'done',\n },\n });\n });\n}\n\nexport async function revalidateChangedContentTypes({ oldContentTypes, contentTypes }: Input) {\n if (oldContentTypes !== undefined && contentTypes !== undefined) {\n const contentTypesWithDraftAndPublish = Object.keys(oldContentTypes).filter(\n (uid) => oldContentTypes[uid]?.options?.draftAndPublish\n );\n const releasesAffected = new Set();\n\n async\n .map(contentTypesWithDraftAndPublish, async (contentTypeUID: UID.ContentType) => {\n const oldContentType = oldContentTypes[contentTypeUID];\n const contentType = contentTypes[contentTypeUID];\n\n // If attributes have changed, we need to revalidate actions because maybe validations rules are different\n if (!isEqual(oldContentType?.attributes, contentType?.attributes)) {\n const actions = await strapi.db.query(RELEASE_ACTION_MODEL_UID).findMany({\n where: {\n contentType: contentTypeUID,\n },\n populate: {\n entry: true,\n release: true,\n },\n });\n\n await async.map(actions, async (action: ReleaseAction) => {\n if (action.entry && action.release && action.type === 'publish') {\n const isEntryValid = await getDraftEntryValidStatus(\n {\n contentType: contentTypeUID,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n { strapi }\n );\n\n releasesAffected.add(action.release.id);\n\n await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({\n where: {\n id: action.id,\n },\n data: {\n isEntryValid,\n },\n });\n }\n });\n }\n })\n .then(() => {\n // We need to update the status of the releases affected\n async.map(releasesAffected, async (releaseId: Release['id']) => {\n return getService('release', { strapi }).updateReleaseStatus(releaseId);\n });\n });\n }\n}\n\nexport async function disableContentTypeLocalized({ oldContentTypes, contentTypes }: Input) {\n if (!oldContentTypes) {\n return;\n }\n\n const i18nPlugin = strapi.plugin('i18n');\n if (!i18nPlugin) {\n return;\n }\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n const { isLocalizedContentType } = i18nPlugin.service('content-types');\n\n // if i18N is disabled remove non default locales before sync\n if (isLocalizedContentType(oldContentType) && !isLocalizedContentType(contentType)) {\n await strapi.db\n .queryBuilder(RELEASE_ACTION_MODEL_UID)\n .update({\n locale: null,\n })\n .where({ contentType: uid })\n .execute();\n }\n }\n}\n\nexport async function enableContentTypeLocalized({ oldContentTypes, contentTypes }: Input) {\n if (!oldContentTypes) {\n return;\n }\n\n const i18nPlugin = strapi.plugin('i18n');\n if (!i18nPlugin) {\n return;\n }\n\n for (const uid in contentTypes) {\n if (!oldContentTypes[uid]) {\n continue;\n }\n\n const oldContentType = oldContentTypes[uid];\n const contentType = contentTypes[uid];\n\n const { isLocalizedContentType } = i18nPlugin.service('content-types');\n const { getDefaultLocale } = i18nPlugin.service('locales');\n\n // if i18N is enabled remove non default locales before sync\n if (!isLocalizedContentType(oldContentType) && isLocalizedContentType(contentType)) {\n const defaultLocale = await getDefaultLocale();\n\n await strapi.db\n .queryBuilder(RELEASE_ACTION_MODEL_UID)\n .update({\n locale: defaultLocale,\n })\n .where({ contentType: uid })\n .execute();\n }\n }\n}\n"],"names":["deleteActionsOnDisableDraftAndPublish","oldContentTypes","contentTypes","uid","oldContentType","contentType","contentTypesUtils","hasDraftAndPublish","strapi","db","queryBuilder","RELEASE_ACTION_MODEL_UID","delete","where","execute","deleteActionsOnDeleteContentType","deletedContentTypes","difference","keys","length","async","map","deletedContentTypeUID","migrateIsValidAndStatusReleases","releasesWithoutStatus","query","RELEASE_MODEL_UID","findMany","status","releasedAt","populate","actions","entry","release","notValidatedActions","filter","action","isEntryValid","getDraftEntryValidStatus","documentId","entryDocumentId","locale","update","id","data","getService","updateReleaseStatus","publishedReleases","$notNull","revalidateChangedContentTypes","undefined","contentTypesWithDraftAndPublish","Object","options","draftAndPublish","releasesAffected","Set","contentTypeUID","isEqual","attributes","type","add","then","releaseId","disableContentTypeLocalized","i18nPlugin","plugin","isLocalizedContentType","service","enableContentTypeLocalized","getDefaultLocale","defaultLocale"],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var constants = require('./constants.js');
|
|
4
|
+
var index = require('./migrations/index.js');
|
|
5
|
+
var _5_0_0DocumentIdInActions = require('./migrations/database/5.0.0-document-id-in-actions.js');
|
|
6
|
+
|
|
7
|
+
const register = async ({ strapi })=>{
|
|
8
|
+
if (strapi.ee.features.isEnabled('cms-content-releases')) {
|
|
9
|
+
await strapi.service('admin::permission').actionProvider.registerMany(constants.ACTIONS);
|
|
10
|
+
strapi.db.migrations.providers.internal.register(_5_0_0DocumentIdInActions.addEntryDocumentToReleaseActions);
|
|
11
|
+
strapi.hook('strapi::content-types.beforeSync').register(index.disableContentTypeLocalized).register(index.deleteActionsOnDisableDraftAndPublish);
|
|
12
|
+
strapi.hook('strapi::content-types.afterSync').register(index.deleteActionsOnDeleteContentType).register(index.enableContentTypeLocalized).register(index.revalidateChangedContentTypes).register(index.migrateIsValidAndStatusReleases);
|
|
13
|
+
}
|
|
14
|
+
if (strapi.plugin('graphql')) {
|
|
15
|
+
const graphqlExtensionService = strapi.plugin('graphql').service('extension');
|
|
16
|
+
// Exclude the release and release action models from the GraphQL schema
|
|
17
|
+
graphqlExtensionService.shadowCRUD(constants.RELEASE_MODEL_UID).disable();
|
|
18
|
+
graphqlExtensionService.shadowCRUD(constants.RELEASE_ACTION_MODEL_UID).disable();
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
exports.register = register;
|
|
23
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sources":["../../server/src/register.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport type { Core } from '@strapi/types';\n\nimport { ACTIONS, RELEASE_MODEL_UID, RELEASE_ACTION_MODEL_UID } from './constants';\nimport {\n deleteActionsOnDeleteContentType,\n deleteActionsOnDisableDraftAndPublish,\n migrateIsValidAndStatusReleases,\n revalidateChangedContentTypes,\n disableContentTypeLocalized,\n enableContentTypeLocalized,\n} from './migrations';\nimport { addEntryDocumentToReleaseActions } from './migrations/database/5.0.0-document-id-in-actions';\n\nexport const register = async ({ strapi }: { strapi: Core.Strapi }) => {\n if (strapi.ee.features.isEnabled('cms-content-releases')) {\n await strapi.service('admin::permission').actionProvider.registerMany(ACTIONS);\n\n strapi.db.migrations.providers.internal.register(addEntryDocumentToReleaseActions);\n\n strapi\n .hook('strapi::content-types.beforeSync')\n .register(disableContentTypeLocalized)\n .register(deleteActionsOnDisableDraftAndPublish);\n\n strapi\n .hook('strapi::content-types.afterSync')\n .register(deleteActionsOnDeleteContentType)\n .register(enableContentTypeLocalized)\n .register(revalidateChangedContentTypes)\n .register(migrateIsValidAndStatusReleases);\n }\n\n if (strapi.plugin('graphql')) {\n const graphqlExtensionService = strapi.plugin('graphql').service('extension');\n // Exclude the release and release action models from the GraphQL schema\n graphqlExtensionService.shadowCRUD(RELEASE_MODEL_UID).disable();\n graphqlExtensionService.shadowCRUD(RELEASE_ACTION_MODEL_UID).disable();\n }\n};\n"],"names":["register","strapi","ee","features","isEnabled","service","actionProvider","registerMany","ACTIONS","db","migrations","providers","internal","addEntryDocumentToReleaseActions","hook","disableContentTypeLocalized","deleteActionsOnDisableDraftAndPublish","deleteActionsOnDeleteContentType","enableContentTypeLocalized","revalidateChangedContentTypes","migrateIsValidAndStatusReleases","plugin","graphqlExtensionService","shadowCRUD","RELEASE_MODEL_UID","disable","RELEASE_ACTION_MODEL_UID"],"mappings":";;;;;;AAcaA,MAAAA,QAAAA,GAAW,OAAO,EAAEC,MAAM,EAA2B,GAAA;AAChE,IAAA,IAAIA,OAAOC,EAAE,CAACC,QAAQ,CAACC,SAAS,CAAC,sBAAyB,CAAA,EAAA;AACxD,QAAA,MAAMH,OAAOI,OAAO,CAAC,qBAAqBC,cAAc,CAACC,YAAY,CAACC,iBAAAA,CAAAA;QAEtEP,MAAOQ,CAAAA,EAAE,CAACC,UAAU,CAACC,SAAS,CAACC,QAAQ,CAACZ,QAAQ,CAACa,0DAAAA,CAAAA;AAEjDZ,QAAAA,MAAAA,CACGa,IAAI,CAAC,kCAAA,CAAA,CACLd,QAAQ,CAACe,iCAAAA,CAAAA,CACTf,QAAQ,CAACgB,2CAAAA,CAAAA;AAEZf,QAAAA,MAAAA,CACGa,IAAI,CAAC,iCACLd,CAAAA,CAAAA,QAAQ,CAACiB,sCAAAA,CAAAA,CACTjB,QAAQ,CAACkB,gCACTlB,CAAAA,CAAAA,QAAQ,CAACmB,mCAAAA,CAAAA,CACTnB,QAAQ,CAACoB,qCAAAA,CAAAA;AACd;IAEA,IAAInB,MAAAA,CAAOoB,MAAM,CAAC,SAAY,CAAA,EAAA;AAC5B,QAAA,MAAMC,0BAA0BrB,MAAOoB,CAAAA,MAAM,CAAC,SAAA,CAAA,CAAWhB,OAAO,CAAC,WAAA,CAAA;;QAEjEiB,uBAAwBC,CAAAA,UAAU,CAACC,2BAAAA,CAAAA,CAAmBC,OAAO,EAAA;QAC7DH,uBAAwBC,CAAAA,UAAU,CAACG,kCAAAA,CAAAA,CAA0BD,OAAO,EAAA;AACtE;AACF;;;;"}
|