@strapi/content-releases 0.0.0-next.d8f8da8f5b333be4a20563a1a15cd61350139956 → 0.0.0-next.d9724d67b33363354d7171a9f2265e1c42485e13
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/components/EntryValidationPopover.js +62 -96
- package/dist/admin/components/EntryValidationPopover.js.map +1 -1
- package/dist/admin/components/EntryValidationPopover.mjs +64 -98
- package/dist/admin/components/EntryValidationPopover.mjs.map +1 -1
- package/dist/admin/components/ReleaseAction.js +3 -1
- package/dist/admin/components/ReleaseAction.js.map +1 -1
- package/dist/admin/components/ReleaseAction.mjs +3 -1
- package/dist/admin/components/ReleaseAction.mjs.map +1 -1
- package/dist/admin/components/ReleaseActionMenu.js +25 -74
- package/dist/admin/components/ReleaseActionMenu.js.map +1 -1
- package/dist/admin/components/ReleaseActionMenu.mjs +26 -75
- package/dist/admin/components/ReleaseActionMenu.mjs.map +1 -1
- package/dist/admin/components/Widgets.js +122 -0
- package/dist/admin/components/Widgets.js.map +1 -0
- package/dist/admin/components/Widgets.mjs +120 -0
- package/dist/admin/components/Widgets.mjs.map +1 -0
- package/dist/admin/constants.js +2 -0
- package/dist/admin/constants.js.map +1 -1
- package/dist/admin/constants.mjs +2 -1
- package/dist/admin/constants.mjs.map +1 -1
- package/dist/admin/index.js +25 -2
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +26 -3
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/pages/ReleaseDetailsPage.js +11 -60
- package/dist/admin/pages/ReleaseDetailsPage.js.map +1 -1
- package/dist/admin/pages/ReleaseDetailsPage.mjs +13 -62
- package/dist/admin/pages/ReleaseDetailsPage.mjs.map +1 -1
- package/dist/admin/pages/ReleasesPage.js +6 -0
- package/dist/admin/pages/ReleasesPage.js.map +1 -1
- package/dist/admin/pages/ReleasesPage.mjs +7 -1
- package/dist/admin/pages/ReleasesPage.mjs.map +1 -1
- package/dist/admin/pages/ReleasesSettingsPage.js +35 -9
- package/dist/admin/pages/ReleasesSettingsPage.js.map +1 -1
- package/dist/admin/pages/ReleasesSettingsPage.mjs +36 -10
- package/dist/admin/pages/ReleasesSettingsPage.mjs.map +1 -1
- package/dist/admin/services/homepage.js +24 -0
- package/dist/admin/services/homepage.js.map +1 -0
- package/dist/admin/services/homepage.mjs +22 -0
- package/dist/admin/services/homepage.mjs.map +1 -0
- package/dist/admin/services/release.js +20 -10
- package/dist/admin/services/release.js.map +1 -1
- package/dist/admin/services/release.mjs +20 -10
- package/dist/admin/services/release.mjs.map +1 -1
- package/dist/admin/src/components/Widgets.d.ts +2 -0
- package/dist/admin/src/constants.d.ts +1 -0
- package/dist/admin/src/services/homepage.d.ts +9 -0
- package/dist/admin/src/services/release.d.ts +28 -28
- package/dist/admin/translations/en.json.js +6 -3
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +6 -3
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/server/controllers/homepage.js +15 -0
- package/dist/server/controllers/homepage.js.map +1 -0
- package/dist/server/controllers/homepage.mjs +13 -0
- package/dist/server/controllers/homepage.mjs.map +1 -0
- package/dist/server/controllers/index.js +2 -0
- package/dist/server/controllers/index.js.map +1 -1
- package/dist/server/controllers/index.mjs +2 -0
- package/dist/server/controllers/index.mjs.map +1 -1
- package/dist/server/destroy.js +2 -2
- package/dist/server/destroy.js.map +1 -1
- package/dist/server/destroy.mjs +2 -2
- package/dist/server/destroy.mjs.map +1 -1
- package/dist/server/routes/homepage.js +25 -0
- package/dist/server/routes/homepage.js.map +1 -0
- package/dist/server/routes/homepage.mjs +23 -0
- package/dist/server/routes/homepage.mjs.map +1 -0
- package/dist/server/routes/index.js +2 -0
- package/dist/server/routes/index.js.map +1 -1
- package/dist/server/routes/index.mjs +2 -0
- package/dist/server/routes/index.mjs.map +1 -1
- package/dist/server/services/homepage.js +26 -0
- package/dist/server/services/homepage.js.map +1 -0
- package/dist/server/services/homepage.mjs +24 -0
- package/dist/server/services/homepage.mjs.map +1 -0
- package/dist/server/services/index.js +2 -0
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs +2 -0
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/services/release-action.js +2 -1
- package/dist/server/services/release-action.js.map +1 -1
- package/dist/server/services/release-action.mjs +2 -1
- package/dist/server/services/release-action.mjs.map +1 -1
- package/dist/server/services/scheduling.js +16 -12
- package/dist/server/services/scheduling.js.map +1 -1
- package/dist/server/services/scheduling.mjs +16 -12
- package/dist/server/services/scheduling.mjs.map +1 -1
- package/dist/server/src/controllers/homepage.d.ts +6 -0
- package/dist/server/src/controllers/homepage.d.ts.map +1 -0
- package/dist/server/src/controllers/index.d.ts +3 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/destroy.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +13 -4
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/routes/homepage.d.ts +4 -0
- package/dist/server/src/routes/homepage.d.ts.map +1 -0
- package/dist/server/src/routes/index.d.ts +1 -0
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/services/homepage.d.ts +9 -0
- package/dist/server/src/services/homepage.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +9 -4
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/release-action.d.ts.map +1 -1
- package/dist/server/src/services/scheduling.d.ts +4 -5
- package/dist/server/src/services/scheduling.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/utils/index.js +2 -1
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs +2 -1
- package/dist/server/utils/index.mjs.map +1 -1
- package/dist/shared/contracts/homepage.d.ts +11 -0
- package/dist/shared/contracts/homepage.d.ts.map +1 -0
- package/dist/shared/types.d.ts +1 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/package.json +10 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-action.mjs","sources":["../../../server/src/services/release-action.ts"],"sourcesContent":["import { errors, async } from '@strapi/utils';\n\nimport type { Core, Internal, Modules, UID, Data } from '@strapi/types';\n\nimport _ from 'lodash/fp';\n\nimport { RELEASE_ACTION_MODEL_UID, RELEASE_MODEL_UID } from '../constants';\n\nimport type {\n CreateReleaseAction,\n GetReleaseActions,\n ReleaseAction,\n ReleaseActionGroupBy,\n UpdateReleaseAction,\n DeleteReleaseAction,\n} from '../../../shared/contracts/release-actions';\nimport type { Entity } from '../../../shared/types';\nimport { getService, getDraftEntryValidStatus, getEntry, getEntryStatus } from '../utils';\n\nconst getGroupName = (queryValue: string) => {\n switch (queryValue) {\n case 'contentType':\n return 'contentType.displayName';\n case 'type':\n return 'type';\n case 'locale':\n return _.getOr('No locale', 'locale.name');\n default:\n return 'contentType.displayName';\n }\n};\n\nexport interface Locale extends Entity {\n name: string;\n code: string;\n}\n\ntype LocaleDictionary = {\n [key: Locale['code']]: Pick<Locale, 'name' | 'code'>;\n};\n\nconst createReleaseActionService = ({ strapi }: { strapi: Core.Strapi }) => {\n const getLocalesDataForActions = async () => {\n if (!strapi.plugin('i18n')) {\n return {};\n }\n\n const allLocales: Locale[] = (await strapi.plugin('i18n').service('locales').find()) || [];\n return allLocales.reduce<LocaleDictionary>((acc, locale) => {\n acc[locale.code] = { name: locale.name, code: locale.code };\n\n return acc;\n }, {});\n };\n\n const getContentTypesDataForActions = async (\n contentTypesUids: ReleaseAction['contentType'][]\n ) => {\n const contentManagerContentTypeService = strapi\n .plugin('content-manager')\n .service('content-types');\n\n const contentTypesData: Record<\n Internal.UID.ContentType,\n { mainField: string; displayName: string }\n > = {};\n for (const contentTypeUid of contentTypesUids) {\n const contentTypeConfig = await contentManagerContentTypeService.findConfiguration({\n uid: contentTypeUid,\n });\n\n contentTypesData[contentTypeUid] = {\n mainField: contentTypeConfig.settings.mainField,\n displayName: strapi.getModel(contentTypeUid).info.displayName,\n };\n }\n\n return contentTypesData;\n };\n\n return {\n async create(\n releaseId: CreateReleaseAction.Request['params']['releaseId'],\n action: CreateReleaseAction.Request['body'],\n { disableUpdateReleaseStatus = false }: { disableUpdateReleaseStatus?: boolean } = {}\n ) {\n const { validateEntryData, validateUniqueEntry } = getService('release-validation', {\n strapi,\n });\n\n await Promise.all([\n validateEntryData(action.contentType, action.entryDocumentId),\n validateUniqueEntry(releaseId, action),\n ]);\n\n // If we are adding a singleType, we need to append the documentId of that singleType\n const model = strapi.contentType(action.contentType);\n if (model.kind === 'singleType') {\n const document = await strapi.db.query(model.uid).findOne({ select: ['documentId'] });\n\n if (!document) {\n throw new errors.NotFoundError(`No entry found for contentType ${action.contentType}`);\n }\n\n action.entryDocumentId = document.documentId;\n }\n\n const release = await strapi.db\n .query(RELEASE_MODEL_UID)\n .findOne({ where: { id: releaseId } });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n if (release.releasedAt) {\n throw new errors.ValidationError('Release already published');\n }\n\n // If the action is a publish, check if the entry is valid\n // If the action is an unpublish, skip the validation\n const actionStatus =\n action.type === 'publish'\n ? await getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n {\n strapi,\n }\n )\n : true;\n\n const releaseAction = await strapi.db.query(RELEASE_ACTION_MODEL_UID).create({\n data: {\n ...action,\n release: release.id,\n isEntryValid: actionStatus,\n },\n populate: { release: { select: ['id'] } },\n });\n\n if (!disableUpdateReleaseStatus) {\n getService('release', { strapi }).updateReleaseStatus(release.id);\n }\n\n return releaseAction;\n },\n\n async findPage(\n releaseId: GetReleaseActions.Request['params']['releaseId'],\n query?: GetReleaseActions.Request['query']\n ) {\n const release = await strapi.db.query(RELEASE_MODEL_UID).findOne({\n where: { id: releaseId },\n select: ['id'],\n });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n const dbQuery = strapi.get('query-params').transform(RELEASE_ACTION_MODEL_UID, query ?? {});\n const { results: actions, pagination } = await strapi.db\n .query(RELEASE_ACTION_MODEL_UID)\n .findPage({\n ...dbQuery,\n where: {\n release: releaseId,\n },\n });\n\n // For each contentType on the release, we create a custom populate object for nested relations\n const populateBuilderService = strapi.plugin('content-manager').service('populate-builder');\n\n const actionsWithEntry = await async.map(actions, async (action: ReleaseAction) => {\n // @ts-expect-error - Core.Service type is not a function\n const populate = await populateBuilderService(action.contentType)\n .populateDeep(Infinity)\n .build();\n\n const entry = await getEntry(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n populate,\n status: action.type === 'publish' ? 'draft' : 'published',\n },\n { strapi }\n );\n\n return {\n ...action,\n entry,\n status: entry ? await getEntryStatus(action.contentType, entry) : null,\n };\n });\n\n return {\n results: actionsWithEntry,\n pagination,\n };\n },\n\n async groupActions(actions: ReleaseAction[], groupBy: ReleaseActionGroupBy) {\n const contentTypeUids = actions.reduce<ReleaseAction['contentType'][]>((acc, action) => {\n if (!acc.includes(action.contentType)) {\n acc.push(action.contentType);\n }\n\n return acc;\n }, []);\n const allReleaseContentTypesDictionary = await getContentTypesDataForActions(contentTypeUids);\n const allLocalesDictionary = await getLocalesDataForActions();\n\n const formattedData = actions.map((action: ReleaseAction) => {\n const { mainField, displayName } = allReleaseContentTypesDictionary[action.contentType];\n\n return {\n ...action,\n locale: action.locale ? allLocalesDictionary[action.locale] : null,\n contentType: {\n displayName,\n mainFieldValue: action.entry[mainField],\n uid: action.contentType,\n },\n };\n });\n\n const groupName = getGroupName(groupBy);\n return _.groupBy(groupName)(formattedData);\n },\n\n async getContentTypeModelsFromActions(actions: ReleaseAction[]) {\n const contentTypeUids = actions.reduce<ReleaseAction['contentType'][]>((acc, action) => {\n if (!acc.includes(action.contentType)) {\n acc.push(action.contentType);\n }\n\n return acc;\n }, []);\n\n const workflowsService = strapi.plugin('review-workflows').service('workflows');\n\n const contentTypeModelsMap = await async.reduce(contentTypeUids)(\n async (\n accPromise: Promise<GetReleaseActions.Response['meta']['contentTypes']>,\n contentTypeUid: ReleaseAction['contentType']\n ) => {\n const acc = await accPromise;\n const contentTypeModel = strapi.getModel(contentTypeUid);\n\n const workflow = await workflowsService.getAssignedWorkflow(contentTypeUid, {\n populate: 'stageRequiredToPublish',\n });\n\n acc[contentTypeUid] = {\n ...contentTypeModel,\n hasReviewWorkflow: !!workflow,\n stageRequiredToPublish: workflow?.stageRequiredToPublish,\n };\n\n return acc;\n },\n {}\n );\n\n return contentTypeModelsMap;\n },\n\n async countActions(\n query: Modules.EntityService.Params.Pick<typeof RELEASE_ACTION_MODEL_UID, 'filters'>\n ) {\n const dbQuery = strapi.get('query-params').transform(RELEASE_ACTION_MODEL_UID, query ?? {});\n\n return strapi.db.query(RELEASE_ACTION_MODEL_UID).count(dbQuery);\n },\n\n async update(\n actionId: UpdateReleaseAction.Request['params']['actionId'],\n releaseId: UpdateReleaseAction.Request['params']['releaseId'],\n update: UpdateReleaseAction.Request['body']\n ) {\n const action = await strapi.db.query(RELEASE_ACTION_MODEL_UID).findOne({\n where: {\n id: actionId,\n release: {\n id: releaseId,\n releasedAt: {\n $null: true,\n },\n },\n },\n });\n\n if (!action) {\n throw new errors.NotFoundError(\n `Action with id ${actionId} not found in release with id ${releaseId} or it is already published`\n );\n }\n\n const actionStatus =\n update.type === 'publish'\n ? await getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n {\n strapi,\n }\n )\n : true;\n\n const updatedAction = await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({\n where: {\n id: actionId,\n release: {\n id: releaseId,\n releasedAt: {\n $null: true,\n },\n },\n },\n data: {\n ...update,\n isEntryValid: actionStatus,\n },\n });\n\n getService('release', { strapi }).updateReleaseStatus(releaseId);\n\n return updatedAction;\n },\n\n async delete(\n actionId: DeleteReleaseAction.Request['params']['actionId'],\n releaseId: DeleteReleaseAction.Request['params']['releaseId']\n ) {\n const deletedAction = await strapi.db.query(RELEASE_ACTION_MODEL_UID).delete({\n where: {\n id: actionId,\n release: {\n id: releaseId,\n releasedAt: {\n $null: true,\n },\n },\n },\n });\n\n if (!deletedAction) {\n throw new errors.NotFoundError(\n `Action with id ${actionId} not found in release with id ${releaseId} or it is already published`\n );\n }\n\n getService('release', { strapi }).updateReleaseStatus(releaseId);\n\n return deletedAction;\n },\n\n async validateActionsByContentTypes(contentTypeUids: UID.ContentType[]) {\n const actions = await strapi.db.query(RELEASE_ACTION_MODEL_UID).findMany({\n where: {\n contentType: {\n $in: contentTypeUids,\n },\n // We only want to validate actions that are going to be published\n type: 'publish',\n release: {\n releasedAt: {\n $null: true,\n },\n },\n },\n populate: { release: true },\n });\n\n const releasesUpdated: Data.ID[] = [];\n\n await async.map(actions, async (action: ReleaseAction) => {\n const isValid = await 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: isValid,\n },\n });\n\n if (!releasesUpdated.includes(action.release.id)) {\n releasesUpdated.push(action.release.id);\n }\n\n return {\n id: action.id,\n isEntryValid: isValid,\n };\n });\n\n if (releasesUpdated.length > 0) {\n await async.map(releasesUpdated, async (releaseId: number) => {\n await getService('release', { strapi }).updateReleaseStatus(releaseId);\n });\n }\n },\n };\n};\n\nexport type ReleaseActionService = ReturnType<typeof createReleaseActionService>;\n\nexport default createReleaseActionService;\n"],"names":["getGroupName","queryValue","_","getOr","createReleaseActionService","strapi","getLocalesDataForActions","plugin","allLocales","service","find","reduce","acc","locale","code","name","getContentTypesDataForActions","contentTypesUids","contentManagerContentTypeService","contentTypesData","contentTypeUid","contentTypeConfig","findConfiguration","uid","mainField","settings","displayName","getModel","info","create","releaseId","action","disableUpdateReleaseStatus","validateEntryData","validateUniqueEntry","getService","Promise","all","contentType","entryDocumentId","model","kind","document","db","query","findOne","select","errors","NotFoundError","documentId","release","RELEASE_MODEL_UID","where","id","releasedAt","ValidationError","actionStatus","type","getDraftEntryValidStatus","releaseAction","RELEASE_ACTION_MODEL_UID","data","isEntryValid","populate","updateReleaseStatus","findPage","dbQuery","get","transform","results","actions","pagination","populateBuilderService","actionsWithEntry","async","map","populateDeep","Infinity","build","entry","getEntry","status","getEntryStatus","groupActions","groupBy","contentTypeUids","includes","push","allReleaseContentTypesDictionary","allLocalesDictionary","formattedData","mainFieldValue","groupName","getContentTypeModelsFromActions","workflowsService","contentTypeModelsMap","accPromise","contentTypeModel","workflow","getAssignedWorkflow","hasReviewWorkflow","stageRequiredToPublish","countActions","count","update","actionId","$null","updatedAction","delete","deletedAction","validateActionsByContentTypes","findMany","$in","releasesUpdated","isValid","length"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"release-action.mjs","sources":["../../../server/src/services/release-action.ts"],"sourcesContent":["import { errors, async } from '@strapi/utils';\n\nimport type { Core, Internal, Modules, UID, Data } from '@strapi/types';\n\nimport _ from 'lodash/fp';\n\nimport { RELEASE_ACTION_MODEL_UID, RELEASE_MODEL_UID } from '../constants';\n\nimport type {\n CreateReleaseAction,\n GetReleaseActions,\n ReleaseAction,\n ReleaseActionGroupBy,\n UpdateReleaseAction,\n DeleteReleaseAction,\n} from '../../../shared/contracts/release-actions';\nimport type { Entity } from '../../../shared/types';\nimport { getService, getDraftEntryValidStatus, getEntry, getEntryStatus } from '../utils';\n\nconst getGroupName = (queryValue: string) => {\n switch (queryValue) {\n case 'contentType':\n return 'contentType.displayName';\n case 'type':\n return 'type';\n case 'locale':\n return _.getOr('No locale', 'locale.name');\n default:\n return 'contentType.displayName';\n }\n};\n\nexport interface Locale extends Entity {\n name: string;\n code: string;\n}\n\ntype LocaleDictionary = {\n [key: Locale['code']]: Pick<Locale, 'name' | 'code'>;\n};\n\nconst createReleaseActionService = ({ strapi }: { strapi: Core.Strapi }) => {\n const getLocalesDataForActions = async () => {\n if (!strapi.plugin('i18n')) {\n return {};\n }\n\n const allLocales: Locale[] = (await strapi.plugin('i18n').service('locales').find()) || [];\n return allLocales.reduce<LocaleDictionary>((acc, locale) => {\n acc[locale.code] = { name: locale.name, code: locale.code };\n\n return acc;\n }, {});\n };\n\n const getContentTypesDataForActions = async (\n contentTypesUids: ReleaseAction['contentType'][]\n ) => {\n const contentManagerContentTypeService = strapi\n .plugin('content-manager')\n .service('content-types');\n\n const contentTypesData: Record<\n Internal.UID.ContentType,\n { mainField: string; displayName: string }\n > = {};\n for (const contentTypeUid of contentTypesUids) {\n const contentTypeConfig = await contentManagerContentTypeService.findConfiguration({\n uid: contentTypeUid,\n });\n\n contentTypesData[contentTypeUid] = {\n mainField: contentTypeConfig.settings.mainField,\n displayName: strapi.getModel(contentTypeUid).info.displayName,\n };\n }\n\n return contentTypesData;\n };\n\n return {\n async create(\n releaseId: CreateReleaseAction.Request['params']['releaseId'],\n action: CreateReleaseAction.Request['body'],\n { disableUpdateReleaseStatus = false }: { disableUpdateReleaseStatus?: boolean } = {}\n ) {\n const { validateEntryData, validateUniqueEntry } = getService('release-validation', {\n strapi,\n });\n\n await Promise.all([\n validateEntryData(action.contentType, action.entryDocumentId),\n validateUniqueEntry(releaseId, action),\n ]);\n\n // If we are adding a singleType, we need to append the documentId of that singleType\n const model = strapi.contentType(action.contentType);\n if (model.kind === 'singleType') {\n const document = await strapi.db.query(model.uid).findOne({ select: ['documentId'] });\n\n if (!document) {\n throw new errors.NotFoundError(`No entry found for contentType ${action.contentType}`);\n }\n\n action.entryDocumentId = document.documentId;\n }\n\n const release = await strapi.db\n .query(RELEASE_MODEL_UID)\n .findOne({ where: { id: releaseId } });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n if (release.releasedAt) {\n throw new errors.ValidationError('Release already published');\n }\n\n // If the action is a publish, check if the entry is valid\n // If the action is an unpublish, skip the validation\n const actionStatus =\n action.type === 'publish'\n ? await getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n {\n strapi,\n }\n )\n : true;\n\n const releaseAction = await strapi.db.query(RELEASE_ACTION_MODEL_UID).create({\n data: {\n ...action,\n release: release.id,\n isEntryValid: actionStatus,\n },\n populate: { release: { select: ['id'] } },\n });\n\n if (!disableUpdateReleaseStatus) {\n getService('release', { strapi }).updateReleaseStatus(release.id);\n }\n\n return releaseAction;\n },\n\n async findPage(\n releaseId: GetReleaseActions.Request['params']['releaseId'],\n query?: GetReleaseActions.Request['query']\n ) {\n const release = await strapi.db.query(RELEASE_MODEL_UID).findOne({\n where: { id: releaseId },\n select: ['id'],\n });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n const dbQuery = strapi.get('query-params').transform(RELEASE_ACTION_MODEL_UID, query ?? {});\n const { results: actions, pagination } = await strapi.db\n .query(RELEASE_ACTION_MODEL_UID)\n .findPage({\n ...dbQuery,\n where: {\n release: releaseId,\n },\n });\n\n // For each contentType on the release, we create a custom populate object for nested relations\n const populateBuilderService = strapi.plugin('content-manager').service('populate-builder');\n\n const actionsWithEntry = await async.map(actions, async (action: ReleaseAction) => {\n // @ts-expect-error - Core.Service type is not a function\n const populate = await populateBuilderService(action.contentType)\n .populateDeep(Infinity)\n .build();\n\n const entry = await getEntry(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n populate,\n status: action.type === 'publish' ? 'draft' : 'published',\n },\n { strapi }\n );\n\n return {\n ...action,\n entry,\n status: entry ? await getEntryStatus(action.contentType, entry) : null,\n };\n });\n\n return {\n results: actionsWithEntry,\n pagination,\n };\n },\n\n async groupActions(actions: ReleaseAction[], groupBy: ReleaseActionGroupBy) {\n const contentTypeUids = actions.reduce<ReleaseAction['contentType'][]>((acc, action) => {\n if (!acc.includes(action.contentType)) {\n acc.push(action.contentType);\n }\n\n return acc;\n }, []);\n const allReleaseContentTypesDictionary = await getContentTypesDataForActions(contentTypeUids);\n const allLocalesDictionary = await getLocalesDataForActions();\n\n const formattedData = actions.map((action: ReleaseAction) => {\n const { mainField, displayName } = allReleaseContentTypesDictionary[action.contentType];\n\n return {\n ...action,\n locale: action.locale ? allLocalesDictionary[action.locale] : null,\n contentType: {\n displayName,\n mainFieldValue: action.entry[mainField],\n uid: action.contentType,\n },\n };\n });\n\n const groupName = getGroupName(groupBy);\n return _.groupBy(groupName)(formattedData);\n },\n\n async getContentTypeModelsFromActions(actions: ReleaseAction[]) {\n const contentTypeUids = actions.reduce<ReleaseAction['contentType'][]>((acc, action) => {\n if (!acc.includes(action.contentType)) {\n acc.push(action.contentType);\n }\n\n return acc;\n }, []);\n\n const workflowsService = strapi.plugin('review-workflows').service('workflows');\n\n const contentTypeModelsMap = await async.reduce(contentTypeUids)(\n async (\n accPromise: Promise<GetReleaseActions.Response['meta']['contentTypes']>,\n contentTypeUid: ReleaseAction['contentType']\n ) => {\n const acc = await accPromise;\n const contentTypeModel = strapi.getModel(contentTypeUid);\n\n // Workflows service may not be available depending on the license\n const workflow = await workflowsService?.getAssignedWorkflow(contentTypeUid, {\n populate: 'stageRequiredToPublish',\n });\n\n acc[contentTypeUid] = {\n ...contentTypeModel,\n hasReviewWorkflow: !!workflow,\n stageRequiredToPublish: workflow?.stageRequiredToPublish,\n };\n\n return acc;\n },\n {}\n );\n\n return contentTypeModelsMap;\n },\n\n async countActions(\n query: Modules.EntityService.Params.Pick<typeof RELEASE_ACTION_MODEL_UID, 'filters'>\n ) {\n const dbQuery = strapi.get('query-params').transform(RELEASE_ACTION_MODEL_UID, query ?? {});\n\n return strapi.db.query(RELEASE_ACTION_MODEL_UID).count(dbQuery);\n },\n\n async update(\n actionId: UpdateReleaseAction.Request['params']['actionId'],\n releaseId: UpdateReleaseAction.Request['params']['releaseId'],\n update: UpdateReleaseAction.Request['body']\n ) {\n const action = await strapi.db.query(RELEASE_ACTION_MODEL_UID).findOne({\n where: {\n id: actionId,\n release: {\n id: releaseId,\n releasedAt: {\n $null: true,\n },\n },\n },\n });\n\n if (!action) {\n throw new errors.NotFoundError(\n `Action with id ${actionId} not found in release with id ${releaseId} or it is already published`\n );\n }\n\n const actionStatus =\n update.type === 'publish'\n ? await getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n {\n strapi,\n }\n )\n : true;\n\n const updatedAction = await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({\n where: {\n id: actionId,\n release: {\n id: releaseId,\n releasedAt: {\n $null: true,\n },\n },\n },\n data: {\n ...update,\n isEntryValid: actionStatus,\n },\n });\n\n getService('release', { strapi }).updateReleaseStatus(releaseId);\n\n return updatedAction;\n },\n\n async delete(\n actionId: DeleteReleaseAction.Request['params']['actionId'],\n releaseId: DeleteReleaseAction.Request['params']['releaseId']\n ) {\n const deletedAction = await strapi.db.query(RELEASE_ACTION_MODEL_UID).delete({\n where: {\n id: actionId,\n release: {\n id: releaseId,\n releasedAt: {\n $null: true,\n },\n },\n },\n });\n\n if (!deletedAction) {\n throw new errors.NotFoundError(\n `Action with id ${actionId} not found in release with id ${releaseId} or it is already published`\n );\n }\n\n getService('release', { strapi }).updateReleaseStatus(releaseId);\n\n return deletedAction;\n },\n\n async validateActionsByContentTypes(contentTypeUids: UID.ContentType[]) {\n const actions = await strapi.db.query(RELEASE_ACTION_MODEL_UID).findMany({\n where: {\n contentType: {\n $in: contentTypeUids,\n },\n // We only want to validate actions that are going to be published\n type: 'publish',\n release: {\n releasedAt: {\n $null: true,\n },\n },\n },\n populate: { release: true },\n });\n\n const releasesUpdated: Data.ID[] = [];\n\n await async.map(actions, async (action: ReleaseAction) => {\n const isValid = await 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: isValid,\n },\n });\n\n if (!releasesUpdated.includes(action.release.id)) {\n releasesUpdated.push(action.release.id);\n }\n\n return {\n id: action.id,\n isEntryValid: isValid,\n };\n });\n\n if (releasesUpdated.length > 0) {\n await async.map(releasesUpdated, async (releaseId: number) => {\n await getService('release', { strapi }).updateReleaseStatus(releaseId);\n });\n }\n },\n };\n};\n\nexport type ReleaseActionService = ReturnType<typeof createReleaseActionService>;\n\nexport default createReleaseActionService;\n"],"names":["getGroupName","queryValue","_","getOr","createReleaseActionService","strapi","getLocalesDataForActions","plugin","allLocales","service","find","reduce","acc","locale","code","name","getContentTypesDataForActions","contentTypesUids","contentManagerContentTypeService","contentTypesData","contentTypeUid","contentTypeConfig","findConfiguration","uid","mainField","settings","displayName","getModel","info","create","releaseId","action","disableUpdateReleaseStatus","validateEntryData","validateUniqueEntry","getService","Promise","all","contentType","entryDocumentId","model","kind","document","db","query","findOne","select","errors","NotFoundError","documentId","release","RELEASE_MODEL_UID","where","id","releasedAt","ValidationError","actionStatus","type","getDraftEntryValidStatus","releaseAction","RELEASE_ACTION_MODEL_UID","data","isEntryValid","populate","updateReleaseStatus","findPage","dbQuery","get","transform","results","actions","pagination","populateBuilderService","actionsWithEntry","async","map","populateDeep","Infinity","build","entry","getEntry","status","getEntryStatus","groupActions","groupBy","contentTypeUids","includes","push","allReleaseContentTypesDictionary","allLocalesDictionary","formattedData","mainFieldValue","groupName","getContentTypeModelsFromActions","workflowsService","contentTypeModelsMap","accPromise","contentTypeModel","workflow","getAssignedWorkflow","hasReviewWorkflow","stageRequiredToPublish","countActions","count","update","actionId","$null","updatedAction","delete","deletedAction","validateActionsByContentTypes","findMany","$in","releasesUpdated","isValid","length"],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var nodeSchedule = require('node-schedule');
|
|
4
3
|
var utils = require('@strapi/utils');
|
|
5
4
|
var index = require('../utils/index.js');
|
|
6
5
|
var constants = require('../constants.js');
|
|
@@ -18,26 +17,31 @@ const createSchedulingService = ({ strapi })=>{
|
|
|
18
17
|
if (!release) {
|
|
19
18
|
throw new utils.errors.NotFoundError(`No release found for id ${releaseId}`);
|
|
20
19
|
}
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
20
|
+
const taskName = `publishRelease_${releaseId}`;
|
|
21
|
+
strapi.cron.add({
|
|
22
|
+
[taskName]: {
|
|
23
|
+
async task () {
|
|
24
|
+
try {
|
|
25
|
+
await index.getService('release', {
|
|
26
|
+
strapi
|
|
27
|
+
}).publish(releaseId);
|
|
28
|
+
// @TODO: Trigger webhook with success message
|
|
29
|
+
} catch (error) {
|
|
30
|
+
// @TODO: Trigger webhook with error message
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
options: scheduleDate
|
|
29
34
|
}
|
|
30
|
-
this.cancel(releaseId);
|
|
31
35
|
});
|
|
32
36
|
if (scheduledJobs.has(releaseId)) {
|
|
33
37
|
this.cancel(releaseId);
|
|
34
38
|
}
|
|
35
|
-
scheduledJobs.set(releaseId,
|
|
39
|
+
scheduledJobs.set(releaseId, taskName);
|
|
36
40
|
return scheduledJobs;
|
|
37
41
|
},
|
|
38
42
|
cancel (releaseId) {
|
|
39
43
|
if (scheduledJobs.has(releaseId)) {
|
|
40
|
-
scheduledJobs.get(releaseId)
|
|
44
|
+
strapi.cron.remove(scheduledJobs.get(releaseId));
|
|
41
45
|
scheduledJobs.delete(releaseId);
|
|
42
46
|
}
|
|
43
47
|
return scheduledJobs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduling.js","sources":["../../../server/src/services/scheduling.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"scheduling.js","sources":["../../../server/src/services/scheduling.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { errors } from '@strapi/utils';\nimport { Release } from '../../../shared/contracts/releases';\nimport { getService } from '../utils';\nimport { RELEASE_MODEL_UID } from '../constants';\n\nconst createSchedulingService = ({ strapi }: { strapi: Core.Strapi }) => {\n const scheduledJobs = new Map<Release['id'], string>();\n\n return {\n async set(releaseId: Release['id'], scheduleDate: Date) {\n const release = await strapi.db\n .query(RELEASE_MODEL_UID)\n .findOne({ where: { id: releaseId, releasedAt: null } });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n const taskName = `publishRelease_${releaseId}`;\n\n strapi.cron.add({\n [taskName]: {\n async task() {\n try {\n await getService('release', { strapi }).publish(releaseId);\n // @TODO: Trigger webhook with success message\n } catch (error) {\n // @TODO: Trigger webhook with error message\n }\n },\n options: scheduleDate,\n },\n });\n\n if (scheduledJobs.has(releaseId)) {\n this.cancel(releaseId);\n }\n\n scheduledJobs.set(releaseId, taskName);\n\n return scheduledJobs;\n },\n\n cancel(releaseId: Release['id']) {\n if (scheduledJobs.has(releaseId)) {\n strapi.cron.remove(scheduledJobs.get(releaseId)!);\n scheduledJobs.delete(releaseId);\n }\n\n return scheduledJobs;\n },\n\n getAll() {\n return scheduledJobs;\n },\n\n /**\n * On bootstrap, we can use this function to make sure to sync the scheduled jobs from the database that are not yet released\n * This is useful in case the server was restarted and the scheduled jobs were lost\n * This also could be used to sync different Strapi instances in case of a cluster\n */\n async syncFromDatabase() {\n const releases = await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n scheduledAt: {\n $gte: new Date(),\n },\n releasedAt: null,\n },\n });\n\n for (const release of releases) {\n this.set(release.id, release.scheduledAt);\n }\n\n return scheduledJobs;\n },\n };\n};\n\nexport default createSchedulingService;\n"],"names":["createSchedulingService","strapi","scheduledJobs","Map","set","releaseId","scheduleDate","release","db","query","RELEASE_MODEL_UID","findOne","where","id","releasedAt","errors","NotFoundError","taskName","cron","add","task","getService","publish","error","options","has","cancel","remove","get","delete","getAll","syncFromDatabase","releases","findMany","scheduledAt","$gte","Date"],"mappings":";;;;;;AAOA,MAAMA,uBAA0B,GAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;AAClE,IAAA,MAAMC,gBAAgB,IAAIC,GAAAA,EAAAA;IAE1B,OAAO;QACL,MAAMC,GAAAA,CAAAA,CAAIC,SAAwB,EAAEC,YAAkB,EAAA;YACpD,MAAMC,OAAAA,GAAU,MAAMN,MAAOO,CAAAA,EAAE,CAC5BC,KAAK,CAACC,2BACNC,CAAAA,CAAAA,OAAO,CAAC;gBAAEC,KAAO,EAAA;oBAAEC,EAAIR,EAAAA,SAAAA;oBAAWS,UAAY,EAAA;AAAK;AAAE,aAAA,CAAA;AAExD,YAAA,IAAI,CAACP,OAAS,EAAA;gBACZ,MAAM,IAAIQ,aAAOC,aAAa,CAAC,CAAC,wBAAwB,EAAEX,UAAU,CAAC,CAAA;AACvE;AAEA,YAAA,MAAMY,QAAW,GAAA,CAAC,eAAe,EAAEZ,UAAU,CAAC;YAE9CJ,MAAOiB,CAAAA,IAAI,CAACC,GAAG,CAAC;AACd,gBAAA,CAACF,WAAW;oBACV,MAAMG,IAAAA,CAAAA,GAAAA;wBACJ,IAAI;AACF,4BAAA,MAAMC,iBAAW,SAAW,EAAA;AAAEpB,gCAAAA;AAAO,6BAAA,CAAA,CAAGqB,OAAO,CAACjB,SAAAA,CAAAA;;AAElD,yBAAA,CAAE,OAAOkB,KAAO,EAAA;;AAEhB;AACF,qBAAA;oBACAC,OAASlB,EAAAA;AACX;AACF,aAAA,CAAA;YAEA,IAAIJ,aAAAA,CAAcuB,GAAG,CAACpB,SAAY,CAAA,EAAA;gBAChC,IAAI,CAACqB,MAAM,CAACrB,SAAAA,CAAAA;AACd;YAEAH,aAAcE,CAAAA,GAAG,CAACC,SAAWY,EAAAA,QAAAA,CAAAA;YAE7B,OAAOf,aAAAA;AACT,SAAA;AAEAwB,QAAAA,MAAAA,CAAAA,CAAOrB,SAAwB,EAAA;YAC7B,IAAIH,aAAAA,CAAcuB,GAAG,CAACpB,SAAY,CAAA,EAAA;AAChCJ,gBAAAA,MAAAA,CAAOiB,IAAI,CAACS,MAAM,CAACzB,aAAAA,CAAc0B,GAAG,CAACvB,SAAAA,CAAAA,CAAAA;AACrCH,gBAAAA,aAAAA,CAAc2B,MAAM,CAACxB,SAAAA,CAAAA;AACvB;YAEA,OAAOH,aAAAA;AACT,SAAA;AAEA4B,QAAAA,MAAAA,CAAAA,GAAAA;YACE,OAAO5B,aAAAA;AACT,SAAA;AAEA;;;;AAIC,QACD,MAAM6B,gBAAAA,CAAAA,GAAAA;YACJ,MAAMC,QAAAA,GAAW,MAAM/B,MAAOO,CAAAA,EAAE,CAACC,KAAK,CAACC,2BAAmBuB,CAAAA,CAAAA,QAAQ,CAAC;gBACjErB,KAAO,EAAA;oBACLsB,WAAa,EAAA;AACXC,wBAAAA,IAAAA,EAAM,IAAIC,IAAAA;AACZ,qBAAA;oBACAtB,UAAY,EAAA;AACd;AACF,aAAA,CAAA;YAEA,KAAK,MAAMP,WAAWyB,QAAU,CAAA;AAC9B,gBAAA,IAAI,CAAC5B,GAAG,CAACG,QAAQM,EAAE,EAAEN,QAAQ2B,WAAW,CAAA;AAC1C;YAEA,OAAOhC,aAAAA;AACT;AACF,KAAA;AACF;;;;"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { scheduleJob } from 'node-schedule';
|
|
2
1
|
import { errors } from '@strapi/utils';
|
|
3
2
|
import { getService } from '../utils/index.mjs';
|
|
4
3
|
import { RELEASE_MODEL_UID } from '../constants.mjs';
|
|
@@ -16,26 +15,31 @@ const createSchedulingService = ({ strapi })=>{
|
|
|
16
15
|
if (!release) {
|
|
17
16
|
throw new errors.NotFoundError(`No release found for id ${releaseId}`);
|
|
18
17
|
}
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
18
|
+
const taskName = `publishRelease_${releaseId}`;
|
|
19
|
+
strapi.cron.add({
|
|
20
|
+
[taskName]: {
|
|
21
|
+
async task () {
|
|
22
|
+
try {
|
|
23
|
+
await getService('release', {
|
|
24
|
+
strapi
|
|
25
|
+
}).publish(releaseId);
|
|
26
|
+
// @TODO: Trigger webhook with success message
|
|
27
|
+
} catch (error) {
|
|
28
|
+
// @TODO: Trigger webhook with error message
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
options: scheduleDate
|
|
27
32
|
}
|
|
28
|
-
this.cancel(releaseId);
|
|
29
33
|
});
|
|
30
34
|
if (scheduledJobs.has(releaseId)) {
|
|
31
35
|
this.cancel(releaseId);
|
|
32
36
|
}
|
|
33
|
-
scheduledJobs.set(releaseId,
|
|
37
|
+
scheduledJobs.set(releaseId, taskName);
|
|
34
38
|
return scheduledJobs;
|
|
35
39
|
},
|
|
36
40
|
cancel (releaseId) {
|
|
37
41
|
if (scheduledJobs.has(releaseId)) {
|
|
38
|
-
scheduledJobs.get(releaseId)
|
|
42
|
+
strapi.cron.remove(scheduledJobs.get(releaseId));
|
|
39
43
|
scheduledJobs.delete(releaseId);
|
|
40
44
|
}
|
|
41
45
|
return scheduledJobs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduling.mjs","sources":["../../../server/src/services/scheduling.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"scheduling.mjs","sources":["../../../server/src/services/scheduling.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { errors } from '@strapi/utils';\nimport { Release } from '../../../shared/contracts/releases';\nimport { getService } from '../utils';\nimport { RELEASE_MODEL_UID } from '../constants';\n\nconst createSchedulingService = ({ strapi }: { strapi: Core.Strapi }) => {\n const scheduledJobs = new Map<Release['id'], string>();\n\n return {\n async set(releaseId: Release['id'], scheduleDate: Date) {\n const release = await strapi.db\n .query(RELEASE_MODEL_UID)\n .findOne({ where: { id: releaseId, releasedAt: null } });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n const taskName = `publishRelease_${releaseId}`;\n\n strapi.cron.add({\n [taskName]: {\n async task() {\n try {\n await getService('release', { strapi }).publish(releaseId);\n // @TODO: Trigger webhook with success message\n } catch (error) {\n // @TODO: Trigger webhook with error message\n }\n },\n options: scheduleDate,\n },\n });\n\n if (scheduledJobs.has(releaseId)) {\n this.cancel(releaseId);\n }\n\n scheduledJobs.set(releaseId, taskName);\n\n return scheduledJobs;\n },\n\n cancel(releaseId: Release['id']) {\n if (scheduledJobs.has(releaseId)) {\n strapi.cron.remove(scheduledJobs.get(releaseId)!);\n scheduledJobs.delete(releaseId);\n }\n\n return scheduledJobs;\n },\n\n getAll() {\n return scheduledJobs;\n },\n\n /**\n * On bootstrap, we can use this function to make sure to sync the scheduled jobs from the database that are not yet released\n * This is useful in case the server was restarted and the scheduled jobs were lost\n * This also could be used to sync different Strapi instances in case of a cluster\n */\n async syncFromDatabase() {\n const releases = await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n scheduledAt: {\n $gte: new Date(),\n },\n releasedAt: null,\n },\n });\n\n for (const release of releases) {\n this.set(release.id, release.scheduledAt);\n }\n\n return scheduledJobs;\n },\n };\n};\n\nexport default createSchedulingService;\n"],"names":["createSchedulingService","strapi","scheduledJobs","Map","set","releaseId","scheduleDate","release","db","query","RELEASE_MODEL_UID","findOne","where","id","releasedAt","errors","NotFoundError","taskName","cron","add","task","getService","publish","error","options","has","cancel","remove","get","delete","getAll","syncFromDatabase","releases","findMany","scheduledAt","$gte","Date"],"mappings":";;;;AAOA,MAAMA,uBAA0B,GAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;AAClE,IAAA,MAAMC,gBAAgB,IAAIC,GAAAA,EAAAA;IAE1B,OAAO;QACL,MAAMC,GAAAA,CAAAA,CAAIC,SAAwB,EAAEC,YAAkB,EAAA;YACpD,MAAMC,OAAAA,GAAU,MAAMN,MAAOO,CAAAA,EAAE,CAC5BC,KAAK,CAACC,iBACNC,CAAAA,CAAAA,OAAO,CAAC;gBAAEC,KAAO,EAAA;oBAAEC,EAAIR,EAAAA,SAAAA;oBAAWS,UAAY,EAAA;AAAK;AAAE,aAAA,CAAA;AAExD,YAAA,IAAI,CAACP,OAAS,EAAA;gBACZ,MAAM,IAAIQ,OAAOC,aAAa,CAAC,CAAC,wBAAwB,EAAEX,UAAU,CAAC,CAAA;AACvE;AAEA,YAAA,MAAMY,QAAW,GAAA,CAAC,eAAe,EAAEZ,UAAU,CAAC;YAE9CJ,MAAOiB,CAAAA,IAAI,CAACC,GAAG,CAAC;AACd,gBAAA,CAACF,WAAW;oBACV,MAAMG,IAAAA,CAAAA,GAAAA;wBACJ,IAAI;AACF,4BAAA,MAAMC,WAAW,SAAW,EAAA;AAAEpB,gCAAAA;AAAO,6BAAA,CAAA,CAAGqB,OAAO,CAACjB,SAAAA,CAAAA;;AAElD,yBAAA,CAAE,OAAOkB,KAAO,EAAA;;AAEhB;AACF,qBAAA;oBACAC,OAASlB,EAAAA;AACX;AACF,aAAA,CAAA;YAEA,IAAIJ,aAAAA,CAAcuB,GAAG,CAACpB,SAAY,CAAA,EAAA;gBAChC,IAAI,CAACqB,MAAM,CAACrB,SAAAA,CAAAA;AACd;YAEAH,aAAcE,CAAAA,GAAG,CAACC,SAAWY,EAAAA,QAAAA,CAAAA;YAE7B,OAAOf,aAAAA;AACT,SAAA;AAEAwB,QAAAA,MAAAA,CAAAA,CAAOrB,SAAwB,EAAA;YAC7B,IAAIH,aAAAA,CAAcuB,GAAG,CAACpB,SAAY,CAAA,EAAA;AAChCJ,gBAAAA,MAAAA,CAAOiB,IAAI,CAACS,MAAM,CAACzB,aAAAA,CAAc0B,GAAG,CAACvB,SAAAA,CAAAA,CAAAA;AACrCH,gBAAAA,aAAAA,CAAc2B,MAAM,CAACxB,SAAAA,CAAAA;AACvB;YAEA,OAAOH,aAAAA;AACT,SAAA;AAEA4B,QAAAA,MAAAA,CAAAA,GAAAA;YACE,OAAO5B,aAAAA;AACT,SAAA;AAEA;;;;AAIC,QACD,MAAM6B,gBAAAA,CAAAA,GAAAA;YACJ,MAAMC,QAAAA,GAAW,MAAM/B,MAAOO,CAAAA,EAAE,CAACC,KAAK,CAACC,iBAAmBuB,CAAAA,CAAAA,QAAQ,CAAC;gBACjErB,KAAO,EAAA;oBACLsB,WAAa,EAAA;AACXC,wBAAAA,IAAAA,EAAM,IAAIC,IAAAA;AACZ,qBAAA;oBACAtB,UAAY,EAAA;AACd;AACF,aAAA,CAAA;YAEA,KAAK,MAAMP,WAAWyB,QAAU,CAAA;AAC9B,gBAAA,IAAI,CAAC5B,GAAG,CAACG,QAAQM,EAAE,EAAEN,QAAQ2B,WAAW,CAAA;AAC1C;YAEA,OAAOhC,aAAAA;AACT;AACF,KAAA;AACF;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/homepage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAE9E,QAAA,MAAM,kBAAkB;2BAIS,QAAQ,4BAA4B,CAAC;CAIrE,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
/// <reference types="koa" />
|
|
2
2
|
export declare const controllers: {
|
|
3
|
+
homepage: () => {
|
|
4
|
+
getUpcomingReleases(): Promise<import("../../../shared/contracts/homepage").GetUpcomingReleases.Response>;
|
|
5
|
+
};
|
|
3
6
|
release: {
|
|
4
7
|
findByDocumentAttached(ctx: import("koa").Context): Promise<void>;
|
|
5
8
|
findPage(ctx: import("koa").Context): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/index.ts"],"names":[],"mappings":";AAKA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;CAKvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../../../server/src/destroy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../../../server/src/destroy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAK1C,eAAO,MAAM,OAAO,eAAsB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,kBAQhE,CAAC"}
|
|
@@ -107,6 +107,11 @@ declare const _default: {
|
|
|
107
107
|
};
|
|
108
108
|
};
|
|
109
109
|
services: {
|
|
110
|
+
homepage: ({ strapi }: {
|
|
111
|
+
strapi: import("@strapi/types/dist/core").Strapi;
|
|
112
|
+
}) => {
|
|
113
|
+
getUpcomingReleases(): Promise<import("../../shared/contracts/releases").Release[]>;
|
|
114
|
+
};
|
|
110
115
|
release: ({ strapi }: {
|
|
111
116
|
strapi: import("@strapi/types/dist/core").Strapi;
|
|
112
117
|
}) => {
|
|
@@ -1914,10 +1919,10 @@ declare const _default: {
|
|
|
1914
1919
|
scheduling: ({ strapi }: {
|
|
1915
1920
|
strapi: import("@strapi/types/dist/core").Strapi;
|
|
1916
1921
|
}) => {
|
|
1917
|
-
set(releaseId: import("@strapi/types/dist/data").ID, scheduleDate: Date): Promise<Map<import("@strapi/types/dist/data").ID,
|
|
1918
|
-
cancel(releaseId: import("@strapi/types/dist/data").ID): Map<import("@strapi/types/dist/data").ID,
|
|
1919
|
-
getAll(): Map<import("@strapi/types/dist/data").ID,
|
|
1920
|
-
syncFromDatabase(): Promise<Map<import("@strapi/types/dist/data").ID,
|
|
1922
|
+
set(releaseId: import("@strapi/types/dist/data").ID, scheduleDate: Date): Promise<Map<import("@strapi/types/dist/data").ID, string>>;
|
|
1923
|
+
cancel(releaseId: import("@strapi/types/dist/data").ID): Map<import("@strapi/types/dist/data").ID, string>;
|
|
1924
|
+
getAll(): Map<import("@strapi/types/dist/data").ID, string>;
|
|
1925
|
+
syncFromDatabase(): Promise<Map<import("@strapi/types/dist/data").ID, string>>;
|
|
1921
1926
|
};
|
|
1922
1927
|
settings: ({ strapi }: {
|
|
1923
1928
|
strapi: import("@strapi/types/dist/core").Strapi;
|
|
@@ -1929,6 +1934,9 @@ declare const _default: {
|
|
|
1929
1934
|
};
|
|
1930
1935
|
};
|
|
1931
1936
|
controllers: {
|
|
1937
|
+
homepage: () => {
|
|
1938
|
+
getUpcomingReleases(): Promise<import("../../shared/contracts/homepage").GetUpcomingReleases.Response>;
|
|
1939
|
+
};
|
|
1932
1940
|
release: {
|
|
1933
1941
|
findByDocumentAttached(ctx: import("koa").Context): Promise<void>;
|
|
1934
1942
|
findPage(ctx: import("koa").Context): Promise<void>;
|
|
@@ -1952,6 +1960,7 @@ declare const _default: {
|
|
|
1952
1960
|
};
|
|
1953
1961
|
};
|
|
1954
1962
|
routes: {
|
|
1963
|
+
homepage: import("@strapi/types/dist/core").Router;
|
|
1955
1964
|
settings: {
|
|
1956
1965
|
type: string;
|
|
1957
1966
|
routes: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,wBAA2B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/homepage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAI5C,QAAA,MAAM,cAAc,EAAE,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,MAAM,CAazD,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKlB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Core } from '@strapi/types';
|
|
2
|
+
import type { GetUpcomingReleases } from '../../../shared/contracts/homepage';
|
|
3
|
+
declare const createHomepageService: ({ strapi }: {
|
|
4
|
+
strapi: Core.Strapi;
|
|
5
|
+
}) => {
|
|
6
|
+
getUpcomingReleases(): Promise<GetUpcomingReleases.Response['data']>;
|
|
7
|
+
};
|
|
8
|
+
export default createHomepageService;
|
|
9
|
+
//# sourceMappingURL=homepage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../../server/src/services/homepage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAE9E,QAAA,MAAM,qBAAqB,eAAgB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;2BAIjC,QAAQ,4BAA4B,CAAC,MAAM,CAAC,CAAC;CAc7E,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
/// <reference types="lodash" />
|
|
2
2
|
export declare const services: {
|
|
3
|
+
homepage: ({ strapi }: {
|
|
4
|
+
strapi: import("@strapi/types/dist/core").Strapi;
|
|
5
|
+
}) => {
|
|
6
|
+
getUpcomingReleases(): Promise<import("../../../shared/contracts/releases").Release[]>;
|
|
7
|
+
};
|
|
3
8
|
release: ({ strapi }: {
|
|
4
9
|
strapi: import("@strapi/types/dist/core").Strapi;
|
|
5
10
|
}) => {
|
|
@@ -1807,10 +1812,10 @@ export declare const services: {
|
|
|
1807
1812
|
scheduling: ({ strapi }: {
|
|
1808
1813
|
strapi: import("@strapi/types/dist/core").Strapi;
|
|
1809
1814
|
}) => {
|
|
1810
|
-
set(releaseId: import("@strapi/types/dist/data").ID, scheduleDate: Date): Promise<Map<import("@strapi/types/dist/data").ID,
|
|
1811
|
-
cancel(releaseId: import("@strapi/types/dist/data").ID): Map<import("@strapi/types/dist/data").ID,
|
|
1812
|
-
getAll(): Map<import("@strapi/types/dist/data").ID,
|
|
1813
|
-
syncFromDatabase(): Promise<Map<import("@strapi/types/dist/data").ID,
|
|
1815
|
+
set(releaseId: import("@strapi/types/dist/data").ID, scheduleDate: Date): Promise<Map<import("@strapi/types/dist/data").ID, string>>;
|
|
1816
|
+
cancel(releaseId: import("@strapi/types/dist/data").ID): Map<import("@strapi/types/dist/data").ID, string>;
|
|
1817
|
+
getAll(): Map<import("@strapi/types/dist/data").ID, string>;
|
|
1818
|
+
syncFromDatabase(): Promise<Map<import("@strapi/types/dist/data").ID, string>>;
|
|
1814
1819
|
};
|
|
1815
1820
|
settings: ({ strapi }: {
|
|
1816
1821
|
strapi: import("@strapi/types/dist/core").Strapi;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/services/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/services/index.ts"],"names":[],"mappings":";AAOA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOpB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-action.d.ts","sourceRoot":"","sources":["../../../../server/src/services/release-action.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,IAAI,EAAY,OAAO,EAAE,GAAG,EAAQ,MAAM,eAAe,CAAC;AAIxE,OAAO,EAAE,wBAAwB,EAAqB,MAAM,cAAc,CAAC;AAE3E,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAgBpD,MAAM,WAAW,MAAO,SAAQ,MAAM;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAMD,QAAA,MAAM,0BAA0B,eAAgB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;sBAyCtD,2BAA2B,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,UACrD,2BAA2B,CAAC,MAAM,CAAC,mCACH;QAAE,0BAA0B,CAAC,EAAE,OAAO,CAAA;KAAE;wBAoErE,yBAAyB,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,UACnD,yBAAyB,CAAC,OAAO,CAAC;;;;;;;;;0BAsDhB,aAAa,EAAE,WAAW,oBAAoB;6CA6B3B,aAAa,EAAE;
|
|
1
|
+
{"version":3,"file":"release-action.d.ts","sourceRoot":"","sources":["../../../../server/src/services/release-action.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,IAAI,EAAY,OAAO,EAAE,GAAG,EAAQ,MAAM,eAAe,CAAC;AAIxE,OAAO,EAAE,wBAAwB,EAAqB,MAAM,cAAc,CAAC;AAE3E,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAgBpD,MAAM,WAAW,MAAO,SAAQ,MAAM;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAMD,QAAA,MAAM,0BAA0B,eAAgB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;sBAyCtD,2BAA2B,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,UACrD,2BAA2B,CAAC,MAAM,CAAC,mCACH;QAAE,0BAA0B,CAAC,EAAE,OAAO,CAAA;KAAE;wBAoErE,yBAAyB,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,UACnD,yBAAyB,CAAC,OAAO,CAAC;;;;;;;;;0BAsDhB,aAAa,EAAE,WAAW,oBAAoB;6CA6B3B,aAAa,EAAE;wBAuCrD,QAAQ,aAAa,CAAC,MAAM,KAAK,CAAC,+BAA+B,EAAE,SAAS,CAAC;qBAQ1E,2BAA2B,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,aAChD,2BAA2B,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,UACrD,2BAA2B,CAAC,MAAM,CAAC;qBAwDjC,2BAA2B,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,aAChD,2BAA2B,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC;mDAyBV,IAAI,WAAW,EAAE;CAuDzE,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAEjF,eAAe,0BAA0B,CAAC"}
|
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
import { Job } from 'node-schedule';
|
|
2
1
|
import type { Core } from '@strapi/types';
|
|
3
2
|
import { Release } from '../../../shared/contracts/releases';
|
|
4
3
|
declare const createSchedulingService: ({ strapi }: {
|
|
5
4
|
strapi: Core.Strapi;
|
|
6
5
|
}) => {
|
|
7
|
-
set(releaseId: Release['id'], scheduleDate: Date): Promise<Map<import("@strapi/types/dist/data").ID,
|
|
8
|
-
cancel(releaseId: Release['id']): Map<import("@strapi/types/dist/data").ID,
|
|
9
|
-
getAll(): Map<import("@strapi/types/dist/data").ID,
|
|
6
|
+
set(releaseId: Release['id'], scheduleDate: Date): Promise<Map<import("@strapi/types/dist/data").ID, string>>;
|
|
7
|
+
cancel(releaseId: Release['id']): Map<import("@strapi/types/dist/data").ID, string>;
|
|
8
|
+
getAll(): Map<import("@strapi/types/dist/data").ID, string>;
|
|
10
9
|
/**
|
|
11
10
|
* On bootstrap, we can use this function to make sure to sync the scheduled jobs from the database that are not yet released
|
|
12
11
|
* This is useful in case the server was restarted and the scheduled jobs were lost
|
|
13
12
|
* This also could be used to sync different Strapi instances in case of a cluster
|
|
14
13
|
*/
|
|
15
|
-
syncFromDatabase(): Promise<Map<import("@strapi/types/dist/data").ID,
|
|
14
|
+
syncFromDatabase(): Promise<Map<import("@strapi/types/dist/data").ID, string>>;
|
|
16
15
|
};
|
|
17
16
|
export default createSchedulingService;
|
|
18
17
|
//# sourceMappingURL=scheduling.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduling.d.ts","sourceRoot":"","sources":["../../../../server/src/services/scheduling.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"scheduling.d.ts","sourceRoot":"","sources":["../../../../server/src/services/scheduling.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAG1C,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAI7D,QAAA,MAAM,uBAAuB,eAAgB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;mBAI3C,OAAO,CAAC,IAAI,CAAC,gBAAgB,IAAI;sBAkCpC,OAAO,CAAC,IAAI,CAAC;;IAa/B;;;;OAIG;;CAkBN,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE,KAAK,QAAQ,GAAG;IACd,OAAO,EAAE,cAAc,CAAC;IACxB,oBAAoB,EAAE,GAAG,CAAC;IAC1B,UAAU,EAAE,GAAG,CAAC;IAChB,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,eAAe,EAAE,GAAG,CAAC;IACrB,QAAQ,EAAE,eAAe,CAAC;CAC3B,CAAC;AAEF,UAAU,MAAM;IACd,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC;IAC7B,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,UAAU,uCACf,KAAK,cACC;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,KAClC,QAAQ,CAAC,KAAK,CAEhB,CAAC;AAEF,eAAO,MAAM,wBAAwB,wCACE,MAAM,cAC/B;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,qBASpC,CAAC;AAEF,eAAO,MAAM,YAAY,mBACP,MAAM,SACf,GAAG,cACE;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE,KAAK,QAAQ,GAAG;IACd,OAAO,EAAE,cAAc,CAAC;IACxB,oBAAoB,EAAE,GAAG,CAAC;IAC1B,UAAU,EAAE,GAAG,CAAC;IAChB,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,eAAe,EAAE,GAAG,CAAC;IACrB,QAAQ,EAAE,eAAe,CAAC;CAC3B,CAAC;AAEF,UAAU,MAAM;IACd,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC;IAC7B,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,UAAU,uCACf,KAAK,cACC;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,KAClC,QAAQ,CAAC,KAAK,CAEhB,CAAC;AAEF,eAAO,MAAM,wBAAwB,wCACE,MAAM,cAC/B;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,qBASpC,CAAC;AAEF,eAAO,MAAM,YAAY,mBACP,MAAM,SACf,GAAG,cACE;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,qBA0BpC,CAAC;AAEF,eAAO,MAAM,QAAQ,2DAOhB,MAAM,GAAG;IAAE,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAA;CAAE,cACjD;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,+EAmBpC,CAAC;AAEF,eAAO,MAAM,cAAc,gBAAuB,IAAI,WAAW,SAAS,KAAK,WAAW,gDAwBzF,CAAC"}
|
|
@@ -25,7 +25,8 @@ const isEntryValid = async (contentTypeUid, entry, { strapi: strapi1 })=>{
|
|
|
25
25
|
await strapi1.entityValidator.validateEntityCreation(strapi1.getModel(contentTypeUid), entry, undefined, // @ts-expect-error - FIXME: entity here is unnecessary
|
|
26
26
|
entry);
|
|
27
27
|
const workflowsService = strapi1.plugin('review-workflows').service('workflows');
|
|
28
|
-
|
|
28
|
+
// Workflows service may not be available depending on the license
|
|
29
|
+
const workflow = await workflowsService?.getAssignedWorkflow(contentTypeUid, {
|
|
29
30
|
populate: 'stageRequiredToPublish'
|
|
30
31
|
});
|
|
31
32
|
if (workflow?.stageRequiredToPublish) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../server/src/utils/index.ts"],"sourcesContent":["import type { UID, Data, Core } from '@strapi/types';\n\nimport type { SettingsService } from '../services/settings';\nimport type { ReleaseService } from '../services/release';\nimport type { ReleaseActionService } from '../services/release-action';\n\ntype Services = {\n release: ReleaseService;\n 'release-validation': any;\n scheduling: any;\n 'release-action': ReleaseActionService;\n 'event-manager': any;\n settings: SettingsService;\n};\n\ninterface Action {\n contentType: UID.ContentType;\n documentId?: Data.DocumentID;\n locale?: string;\n}\n\nexport const getService = <TName extends keyof Services>(\n name: TName,\n { strapi }: { strapi: Core.Strapi }\n): Services[TName] => {\n return strapi.plugin('content-releases').service(name);\n};\n\nexport const getDraftEntryValidStatus = async (\n { contentType, documentId, locale }: Action,\n { strapi }: { strapi: Core.Strapi }\n) => {\n const populateBuilderService = strapi.plugin('content-manager').service('populate-builder');\n // @ts-expect-error - populateBuilderService should be a function but is returning service\n const populate = await populateBuilderService(contentType).populateDeep(Infinity).build();\n\n const entry = await getEntry({ contentType, documentId, locale, populate }, { strapi });\n\n return isEntryValid(contentType, entry, { strapi });\n};\n\nexport const isEntryValid = async (\n contentTypeUid: string,\n entry: any,\n { strapi }: { strapi: Core.Strapi }\n) => {\n try {\n // @TODO: When documents service has validateEntityCreation method, use it instead\n await strapi.entityValidator.validateEntityCreation(\n strapi.getModel(contentTypeUid as UID.ContentType),\n entry,\n undefined,\n // @ts-expect-error - FIXME: entity here is unnecessary\n entry\n );\n\n const workflowsService = strapi.plugin('review-workflows').service('workflows');\n const workflow = await workflowsService
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../server/src/utils/index.ts"],"sourcesContent":["import type { UID, Data, Core } from '@strapi/types';\n\nimport type { SettingsService } from '../services/settings';\nimport type { ReleaseService } from '../services/release';\nimport type { ReleaseActionService } from '../services/release-action';\n\ntype Services = {\n release: ReleaseService;\n 'release-validation': any;\n scheduling: any;\n 'release-action': ReleaseActionService;\n 'event-manager': any;\n settings: SettingsService;\n};\n\ninterface Action {\n contentType: UID.ContentType;\n documentId?: Data.DocumentID;\n locale?: string;\n}\n\nexport const getService = <TName extends keyof Services>(\n name: TName,\n { strapi }: { strapi: Core.Strapi }\n): Services[TName] => {\n return strapi.plugin('content-releases').service(name);\n};\n\nexport const getDraftEntryValidStatus = async (\n { contentType, documentId, locale }: Action,\n { strapi }: { strapi: Core.Strapi }\n) => {\n const populateBuilderService = strapi.plugin('content-manager').service('populate-builder');\n // @ts-expect-error - populateBuilderService should be a function but is returning service\n const populate = await populateBuilderService(contentType).populateDeep(Infinity).build();\n\n const entry = await getEntry({ contentType, documentId, locale, populate }, { strapi });\n\n return isEntryValid(contentType, entry, { strapi });\n};\n\nexport const isEntryValid = async (\n contentTypeUid: string,\n entry: any,\n { strapi }: { strapi: Core.Strapi }\n) => {\n try {\n // @TODO: When documents service has validateEntityCreation method, use it instead\n await strapi.entityValidator.validateEntityCreation(\n strapi.getModel(contentTypeUid as UID.ContentType),\n entry,\n undefined,\n // @ts-expect-error - FIXME: entity here is unnecessary\n entry\n );\n\n const workflowsService = strapi.plugin('review-workflows').service('workflows');\n // Workflows service may not be available depending on the license\n const workflow = await workflowsService?.getAssignedWorkflow(contentTypeUid, {\n populate: 'stageRequiredToPublish',\n });\n\n if (workflow?.stageRequiredToPublish) {\n return entry.strapi_stage.id === workflow.stageRequiredToPublish.id;\n }\n\n return true;\n } catch {\n return false;\n }\n};\n\nexport const getEntry = async (\n {\n contentType,\n documentId,\n locale,\n populate,\n status = 'draft',\n }: Action & { status?: 'draft' | 'published'; populate: any },\n { strapi }: { strapi: Core.Strapi }\n) => {\n if (documentId) {\n // Try to get an existing draft or published document\n const entry = await strapi\n .documents(contentType)\n .findOne({ documentId, locale, populate, status });\n\n // The document isn't published yet, but the action is to publish it, fetch the draft\n if (status === 'published' && !entry) {\n return strapi\n .documents(contentType)\n .findOne({ documentId, locale, populate, status: 'draft' });\n }\n\n return entry;\n }\n\n return strapi.documents(contentType).findFirst({ locale, populate, status });\n};\n\nexport const getEntryStatus = async (contentType: UID.ContentType, entry: Data.ContentType) => {\n if (entry.publishedAt) {\n return 'published';\n }\n\n const publishedEntry = await strapi.documents(contentType).findOne({\n documentId: entry.documentId,\n locale: entry.locale,\n status: 'published',\n fields: ['updatedAt'],\n });\n\n if (!publishedEntry) {\n return 'draft';\n }\n\n const entryUpdatedAt = new Date(entry.updatedAt).getTime();\n const publishedEntryUpdatedAt = new Date(publishedEntry.updatedAt).getTime();\n\n if (entryUpdatedAt > publishedEntryUpdatedAt) {\n return 'modified';\n }\n\n return 'published';\n};\n"],"names":["getService","name","strapi","plugin","service","getDraftEntryValidStatus","contentType","documentId","locale","populateBuilderService","populate","populateDeep","Infinity","build","entry","getEntry","isEntryValid","contentTypeUid","entityValidator","validateEntityCreation","getModel","undefined","workflowsService","workflow","getAssignedWorkflow","stageRequiredToPublish","strapi_stage","id","status","documents","findOne","findFirst","getEntryStatus","publishedAt","publishedEntry","fields","entryUpdatedAt","Date","updatedAt","getTime","publishedEntryUpdatedAt"],"mappings":"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"}
|
|
@@ -23,7 +23,8 @@ const isEntryValid = async (contentTypeUid, entry, { strapi: strapi1 })=>{
|
|
|
23
23
|
await strapi1.entityValidator.validateEntityCreation(strapi1.getModel(contentTypeUid), entry, undefined, // @ts-expect-error - FIXME: entity here is unnecessary
|
|
24
24
|
entry);
|
|
25
25
|
const workflowsService = strapi1.plugin('review-workflows').service('workflows');
|
|
26
|
-
|
|
26
|
+
// Workflows service may not be available depending on the license
|
|
27
|
+
const workflow = await workflowsService?.getAssignedWorkflow(contentTypeUid, {
|
|
27
28
|
populate: 'stageRequiredToPublish'
|
|
28
29
|
});
|
|
29
30
|
if (workflow?.stageRequiredToPublish) {
|